Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • dlcm/ui/dlcm-portal
1 result
Show changes
Commits on Source (14)
Showing
with 885 additions and 347 deletions
......@@ -137,6 +137,20 @@
"with": "src/environments/environment.dlcmtest-local.ts"
}
]
},
"no-docker": {
"budgets": [
{
"type": "anyComponentStyle",
"maximumWarning": "6kb"
}
],
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.no-docker.ts"
}
]
}
}
},
......@@ -166,6 +180,7 @@
"proxyConfig": "proxy.conf.dlcmtest-local.js"
},
"no-docker": {
"browserTarget": "DLCM-Frontend:build:no-docker",
"proxyConfig": "proxy.conf.no-docker.js"
},
"standalone": {
......
......@@ -1591,75 +1591,63 @@
}
},
"@biesbjerg/ngx-translate-extract": {
"version": "6.0.3",
"resolved": "https://nexus.unige.ch/repository/npm-all/@biesbjerg/ngx-translate-extract/-/ngx-translate-extract-6.0.3.tgz",
"integrity": "sha512-FWpToi3s4X631vBsOqZ52d1f96g5p4fKLRqPUhHeYVuQskHV4pVCwXg83gio/FoiHeHtiPIvLy8bQqqoFnxEVA==",
"version": "3.0.2",
"resolved": "https://nexus.unige.ch/repository/npm-all/@biesbjerg/ngx-translate-extract/-/ngx-translate-extract-3.0.2.tgz",
"integrity": "sha512-OHPj9QRq3LtLy3z29zj4hGumliIYg7AAwRBU4XGDGBk8CbgzTs2sdEgrVZ3RqKtZP71TFHeqUOdF8jANa94HHw==",
"dev": true,
"requires": {
"@angular/compiler": "^9.0.7",
"@phenomnomnominal/tsquery": "^4.0.0",
"boxen": "^4.2.0",
"@angular/compiler": "^8.1.3",
"boxen": "^4.1.0",
"colorette": "^1.1.0",
"flat": "^5.0.0",
"gettext-parser": "^4.0.3",
"glob": "^7.1.6",
"mkdirp": "^1.0.3",
"flat": "git://github.com/lenchvolodymyr/flat.git#ffe77ef",
"gettext-parser": "^4.0.1",
"glob": "^7.1.4",
"mkdirp": "^0.5.1",
"path": "^0.12.7",
"terminal-link": "^2.1.1",
"typescript": "^3.8.3",
"yargs": "^15.3.1"
"terminal-link": "^1.3.0",
"typescript": "^3.5.3",
"yargs": "^13.3.0"
},
"dependencies": {
"ansi-regex": {
"version": "5.0.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/ansi-regex/-/ansi-regex-5.0.0.tgz",
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
"dev": true
},
"ansi-styles": {
"version": "4.2.1",
"resolved": "https://nexus.unige.ch/repository/npm-all/ansi-styles/-/ansi-styles-4.2.1.tgz",
"integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
"@angular/compiler": {
"version": "8.2.14",
"resolved": "https://nexus.unige.ch/repository/npm-all/@angular/compiler/-/compiler-8.2.14.tgz",
"integrity": "sha512-ABZO4E7eeFA1QyJ2trDezxeQM5ZFa1dXw1Mpl/+1vuXDKNjJgNyWYwKp/NwRkLmrsuV0yv4UDCDe4kJOGbPKnw==",
"dev": true,
"requires": {
"@types/color-name": "^1.1.1",
"color-convert": "^2.0.1"
"tslib": "^1.9.0"
}
},
"cliui": {
"version": "6.0.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/cliui/-/cliui-6.0.0.tgz",
"integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
"dev": true,
"requires": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
"wrap-ansi": "^6.2.0"
}
"ansi-regex": {
"version": "4.1.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/ansi-regex/-/ansi-regex-4.1.0.tgz",
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
"dev": true
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://nexus.unige.ch/repository/npm-all/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"cliui": {
"version": "5.0.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/cliui/-/cliui-5.0.0.tgz",
"integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
"string-width": "^3.1.0",
"strip-ansi": "^5.2.0",
"wrap-ansi": "^5.1.0"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://nexus.unige.ch/repository/npm-all/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"emoji-regex": {
"version": "7.0.3",
"resolved": "https://nexus.unige.ch/repository/npm-all/emoji-regex/-/emoji-regex-7.0.3.tgz",
"integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
"dev": true
},
"find-up": {
"version": "4.1.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/find-up/-/find-up-4.1.0.tgz",
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"version": "3.0.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/find-up/-/find-up-3.0.0.tgz",
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"dev": true,
"requires": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
"locate-path": "^3.0.0"
}
},
"get-caller-file": {
......@@ -1668,42 +1656,25 @@
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true
},
"is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true
},
"locate-path": {
"version": "5.0.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/locate-path/-/locate-path-5.0.0.tgz",
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"version": "3.0.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/locate-path/-/locate-path-3.0.0.tgz",
"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"dev": true,
"requires": {
"p-locate": "^4.1.0"
"p-locate": "^3.0.0",
"path-exists": "^3.0.0"
}
},
"mkdirp": {
"version": "1.0.3",
"resolved": "https://nexus.unige.ch/repository/npm-all/mkdirp/-/mkdirp-1.0.3.tgz",
"integrity": "sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g==",
"dev": true
},
"p-locate": {
"version": "4.1.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/p-locate/-/p-locate-4.1.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"version": "3.0.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/p-locate/-/p-locate-3.0.0.tgz",
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"dev": true,
"requires": {
"p-limit": "^2.2.0"
"p-limit": "^2.0.0"
}
},
"path-exists": {
"version": "4.0.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true
},
"require-main-filename": {
"version": "2.0.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/require-main-filename/-/require-main-filename-2.0.0.tgz",
......@@ -1711,59 +1682,58 @@
"dev": true
},
"string-width": {
"version": "4.2.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "3.1.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/string-width/-/string-width-3.1.0.tgz",
"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"dev": true,
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.0"
"emoji-regex": "^7.0.1",
"is-fullwidth-code-point": "^2.0.0",
"strip-ansi": "^5.1.0"
}
},
"strip-ansi": {
"version": "6.0.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/strip-ansi/-/strip-ansi-6.0.0.tgz",
"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
"version": "5.2.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/strip-ansi/-/strip-ansi-5.2.0.tgz",
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"dev": true,
"requires": {
"ansi-regex": "^5.0.0"
"ansi-regex": "^4.1.0"
}
},
"wrap-ansi": {
"version": "6.2.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
"integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
"version": "5.1.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
"integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
"dev": true,
"requires": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
"ansi-styles": "^3.2.0",
"string-width": "^3.0.0",
"strip-ansi": "^5.0.0"
}
},
"yargs": {
"version": "15.3.1",
"resolved": "https://nexus.unige.ch/repository/npm-all/yargs/-/yargs-15.3.1.tgz",
"integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==",
"version": "13.3.2",
"resolved": "https://nexus.unige.ch/repository/npm-all/yargs/-/yargs-13.3.2.tgz",
"integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
"dev": true,
"requires": {
"cliui": "^6.0.0",
"decamelize": "^1.2.0",
"find-up": "^4.1.0",
"cliui": "^5.0.0",
"find-up": "^3.0.0",
"get-caller-file": "^2.0.1",
"require-directory": "^2.1.1",
"require-main-filename": "^2.0.0",
"set-blocking": "^2.0.0",
"string-width": "^4.2.0",
"string-width": "^3.0.0",
"which-module": "^2.0.0",
"y18n": "^4.0.0",
"yargs-parser": "^18.1.1"
"yargs-parser": "^13.1.2"
}
},
"yargs-parser": {
"version": "18.1.2",
"resolved": "https://nexus.unige.ch/repository/npm-all/yargs-parser/-/yargs-parser-18.1.2.tgz",
"integrity": "sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ==",
"version": "13.1.2",
"resolved": "https://nexus.unige.ch/repository/npm-all/yargs-parser/-/yargs-parser-13.1.2.tgz",
"integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
"dev": true,
"requires": {
"camelcase": "^5.0.0",
......@@ -1993,15 +1963,6 @@
"integrity": "sha512-TEXOGQNBq7tDPqy63PeSdPRFYNkR8iEDAyboQr6K/mNUtIqOn5jvJrd6/DYEO02/TnDvi3Q8agquhyONYWLHhw==",
"dev": true
},
"@phenomnomnominal/tsquery": {
"version": "4.0.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/@phenomnomnominal/tsquery/-/tsquery-4.0.0.tgz",
"integrity": "sha512-s2Yet/MCj9Jh6nR6GfldrUPT6Y+aM1jIAdiKcOKEzmeKALT0Tc7SFIkYP3KvzjzbkKK5W7BiJ3cWy2UOa4ITbw==",
"dev": true,
"requires": {
"esquery": "^1.0.1"
}
},
"@schematics/angular": {
"version": "9.1.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/@schematics/angular/-/angular-9.1.0.tgz",
......@@ -5386,23 +5347,6 @@
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"dev": true
},
"esquery": {
"version": "1.2.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/esquery/-/esquery-1.2.0.tgz",
"integrity": "sha512-weltsSqdeWIX9G2qQZz7KlTRJdkkOCTPgLYJUz1Hacf48R4YOwGPHO3+ORfWedqJKbq5WQmsgK90n+pFLIKt/Q==",
"dev": true,
"requires": {
"estraverse": "^5.0.0"
},
"dependencies": {
"estraverse": {
"version": "5.0.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/estraverse/-/estraverse-5.0.0.tgz",
"integrity": "sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A==",
"dev": true
}
}
},
"esrecurse": {
"version": "4.2.1",
"resolved": "https://nexus.unige.ch/repository/npm-all/esrecurse/-/esrecurse-4.2.1.tgz",
......@@ -5902,12 +5846,11 @@
}
},
"flat": {
"version": "5.0.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/flat/-/flat-5.0.0.tgz",
"integrity": "sha512-6KSMM+cHHzXC/hpldXApL2S8Uz+QZv+tq5o/L0KQYleoG+GcwrnIJhTWC7tCOiKQp8D/fIvryINU1OZCCwevjA==",
"version": "git://github.com/lenchvolodymyr/flat.git#ffe77efe8c33bc80ffb2f7a465537610dea4f611",
"from": "git://github.com/lenchvolodymyr/flat.git#ffe77ef",
"dev": true,
"requires": {
"is-buffer": "~2.0.4"
"is-buffer": "~2.0.3"
},
"dependencies": {
"is-buffer": {
......@@ -12981,29 +12924,20 @@
}
},
"supports-hyperlinks": {
"version": "2.1.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz",
"integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==",
"version": "1.0.1",
"resolved": "https://nexus.unige.ch/repository/npm-all/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz",
"integrity": "sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0",
"supports-color": "^7.0.0"
"has-flag": "^2.0.0",
"supports-color": "^5.0.0"
},
"dependencies": {
"has-flag": {
"version": "4.0.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"version": "2.0.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/has-flag/-/has-flag-2.0.0.tgz",
"integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
"dev": true
},
"supports-color": {
"version": "7.1.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/supports-color/-/supports-color-7.1.0.tgz",
"integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
......@@ -13100,13 +13034,21 @@
"dev": true
},
"terminal-link": {
"version": "2.1.1",
"resolved": "https://nexus.unige.ch/repository/npm-all/terminal-link/-/terminal-link-2.1.1.tgz",
"integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==",
"version": "1.3.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/terminal-link/-/terminal-link-1.3.0.tgz",
"integrity": "sha512-nFaWG/gs3brGi3opgWU2+dyFGbQ7tueSRYOBOD8URdDXCbAGqDEZzuskCc+okCClYcJFDPwn8e2mbv4FqAnWFA==",
"dev": true,
"requires": {
"ansi-escapes": "^4.2.1",
"supports-hyperlinks": "^2.0.0"
"ansi-escapes": "^3.2.0",
"supports-hyperlinks": "^1.0.1"
},
"dependencies": {
"ansi-escapes": {
"version": "3.2.0",
"resolved": "https://nexus.unige.ch/repository/npm-all/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
"integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
"dev": true
}
}
},
"terser": {
......
......@@ -10,10 +10,9 @@ module.exports = {
},
"/api/short-doi": {
"target": "http://shortdoi.org",
"pathRewrite":
{
"^/api/short-doi": ""
},
"pathRewrite": {
"^/api/short-doi": ""
},
"changeOrigin": true,
},
"/dlcm/authorization/oauth": {
......
module.exports = {
"/api/rss": {
"target": "https://www.unige.ch/feed",
"pathRewrite":
{
"^/api": ""
},
"changeOrigin": true
},
"/api/short-doi": {
"target": "http://shortdoi.org",
"pathRewrite":
{
"^/api/short-doi": ""
},
"changeOrigin": true,
},
"/dlcm/oauth": {
"target": "http://localhost:16110/dlcm/oauth",
"pathRewrite": {
"^/dlcm/oauth": ""
"/api/rss": {
"target": "https://www.unige.ch/feed",
"pathRewrite": {
"^/api": ""
},
"changeOrigin": true
},
},
"/dlcm/shiblogin": {
"target": "http://localhost:16110",
"onProxyReq": (proxyReq, req, res) => {
proxyReq.setHeader('mail', 'Marty.McFly@unige.ch');
proxyReq.setHeader('persistent-id', '999999@unige.ch');
proxyReq.setHeader('uniqueid', '999999@unige.ch');
proxyReq.setHeader('givenname', 'Marty');
proxyReq.setHeader('surname', 'McFly');
proxyReq.setHeader('homeorganization', 'unige.ch');
proxyReq.setHeader('preferredlanguage', 'fr-ch');
"/api/short-doi": {
"target": "http://shortdoi.org",
"pathRewrite": {
"^/api/short-doi": ""
},
"changeOrigin": true,
},
"/dlcm/oauth": {
"target": "http://localhost:16110/dlcm/oauth",
"pathRewrite": {
"^/dlcm/oauth": ""
},
},
"/dlcm/shiblogin": {
"target": "http://localhost:16110",
"onProxyReq": (proxyReq, req, res) => {
proxyReq.setHeader('mail', 'Marty.McFly@unige.ch');
proxyReq.setHeader('persistent-id', '999999@unige.ch');
proxyReq.setHeader('uniqueid', '999999@unige.ch');
proxyReq.setHeader('givenname', 'Marty');
proxyReq.setHeader('surname', 'McFly');
proxyReq.setHeader('homeorganization', 'unige.ch');
proxyReq.setHeader('preferredlanguage', 'fr-ch');
},
"onProxyRes": (proxyRes, req, res) => {
proxyRes.headers['Access-Control-Allow-Origin'] = 'http://localhost:4200';
}
},
"onProxyRes": (proxyRes, req, res) => {
proxyRes.headers['Access-Control-Allow-Origin'] = 'http://localhost:4200';
}
},
}
module.exports = {
"/api/docs": {
"target": "http://localhost:16105/dlcm",
"pathRewrite": {
"^/api": ""
}
},
"/api/admin": {
"target": "http://localhost:16105/dlcm",
"pathRewrite": {
"^/api": ""
}
},
"/api/preservation-planning": {
"target": "http://localhost:16105/dlcm",
"pathRewrite": {
"^/api": ""
}
},
"/api/ingest": {
"target": "http://localhost:16106/dlcm",
"pathRewrite": {
"^/api": ""
}
},
"/api/preingest": {
"target": "http://localhost:16106/dlcm",
"pathRewrite": {
"^/api": ""
}
},
"/api/access": {
"target": "http://localhost:16108/dlcm",
"pathRewrite": {
"^/api": ""
}
},
"/api/archival-storage": {
"target": "http://localhost:16107/dlcm",
"pathRewrite": {
"^/api": ""
}
},
"/api/rss": {
"target": "https://www.unige.ch/feed",
"pathRewrite":
{
"^/api": ""
},
"changeOrigin": true
},
"/api/short-doi": {
"target": "http://shortdoi.org",
"pathRewrite":
{
"^/api/short-doi": ""
},
"changeOrigin": true,
},
"/dlcm/oauth": {
"target": "http://localhost:16100/dlcm/oauth",
"pathRewrite": {
"^/dlcm/oauth": ""
"/api/rss": {
"target": "https://www.unige.ch/feed",
"pathRewrite": {
"^/api": ""
},
"changeOrigin": true
},
"/api/short-doi": {
"target": "http://shortdoi.org",
"pathRewrite": {
"^/api/short-doi": ""
},
"changeOrigin": true,
},
},
"/dlcm/shiblogin": {
"target": "http://localhost:16100",
"onProxyReq": (proxyReq, req, res) => {
proxyReq.setHeader('mail', 'Marty.McFly@unige.ch');
proxyReq.setHeader('persistent-id', '999999@unige.ch');
proxyReq.setHeader('uniqueid', '999999@unige.ch');
proxyReq.setHeader('givenname', 'Marty');
proxyReq.setHeader('surname', 'McFly');
proxyReq.setHeader('homeorganization', 'unige.ch');
proxyReq.setHeader('preferredlanguage', 'fr-ch');
"/dlcm/oauth": {
"target": "http://localhost:16100/dlcm/oauth",
"pathRewrite": {
"^/dlcm/oauth": ""
},
},
"onProxyRes": (proxyRes, req, res) => {
proxyRes.headers['Access-Control-Allow-Origin'] = 'http://localhost:4200';
"/dlcm/shiblogin": {
"target": "http://localhost:16100",
"onProxyReq": (proxyReq, req, res) => {
proxyReq.setHeader('mail', 'Marty.McFly@unige.ch');
proxyReq.setHeader('persistent-id', '999999@unige.ch');
proxyReq.setHeader('uniqueid', '999999@unige.ch');
proxyReq.setHeader('givenname', 'Marty');
proxyReq.setHeader('surname', 'McFly');
proxyReq.setHeader('homeorganization', 'unige.ch');
proxyReq.setHeader('preferredlanguage', 'fr-ch');
},
"onProxyRes": (proxyRes, req, res) => {
proxyRes.headers['Access-Control-Allow-Origin'] = 'http://localhost:4200';
}
}
}
}
module.exports = {
"/api/docs": {
"target": "http://localhost:16121/dlcm",
"pathRewrite": {
"^/api": ""
}
},
"/api/admin": {
"target": "http://localhost:16121/dlcm",
"pathRewrite": {
"^/api": ""
}
},
"/api/preservation-planning": {
"target": "http://localhost:16121/dlcm",
"pathRewrite": {
"^/api": ""
}
},
"/api/ingest": {
"target": "http://localhost:16121/dlcm",
"pathRewrite": {
"^/api": ""
}
},
"/api/preingest": {
"target": "http://localhost:16121/dlcm",
"pathRewrite": {
"^/api": ""
}
},
"/api/access": {
"target": "http://localhost:16121/dlcm",
"pathRewrite": {
"^/api": ""
}
},
"/api/archival-storage": {
"target": "http://localhost:16121/dlcm",
"pathRewrite": {
"^/api": ""
}
},
"/api/rss": {
"target": "https://www.unige.ch/feed",
"pathRewrite":
{
"^/api": ""
},
"changeOrigin": true
},
"/api/short-doi": {
"target": "http://shortdoi.org",
"pathRewrite":
{
"^/api/short-doi": ""
},
"changeOrigin": true,
},
"/dlcm/oauth": {
"target": "http://localhost:16120/dlcm/oauth",
"pathRewrite": {
"^/dlcm/oauth": ""
"/api/rss": {
"target": "https://www.unige.ch/feed",
"pathRewrite": {
"^/api": ""
},
"changeOrigin": true
},
"/api/short-doi": {
"target": "http://shortdoi.org",
"pathRewrite": {
"^/api/short-doi": ""
},
"changeOrigin": true,
},
},
"/dlcm/shiblogin": {
"target": "http://localhost:16120",
"onProxyReq": (proxyReq, req, res) => {
proxyReq.setHeader('mail', 'Marty.McFly@unige.ch');
proxyReq.setHeader('persistent-id', '999999@unige.ch');
proxyReq.setHeader('uniqueid', '999999@unige.ch');
proxyReq.setHeader('givenname', 'Marty');
proxyReq.setHeader('surname', 'McFly');
proxyReq.setHeader('homeorganization', 'unige.ch');
proxyReq.setHeader('preferredlanguage', 'fr-ch');
"/dlcm/oauth": {
"target": "http://localhost:16120/dlcm/oauth",
"pathRewrite": {
"^/dlcm/oauth": ""
},
},
"onProxyRes": (proxyRes, req, res) => {
proxyRes.headers['Access-Control-Allow-Origin'] = 'http://localhost:4200';
"/dlcm/shiblogin": {
"target": "http://localhost:16120",
"onProxyReq": (proxyReq, req, res) => {
proxyReq.setHeader('mail', 'Marty.McFly@unige.ch');
proxyReq.setHeader('persistent-id', '999999@unige.ch');
proxyReq.setHeader('uniqueid', '999999@unige.ch');
proxyReq.setHeader('givenname', 'Marty');
proxyReq.setHeader('surname', 'McFly');
proxyReq.setHeader('homeorganization', 'unige.ch');
proxyReq.setHeader('preferredlanguage', 'fr-ch');
},
"onProxyRes": (proxyRes, req, res) => {
proxyRes.headers['Access-Control-Allow-Origin'] = 'http://localhost:4200';
}
}
}
}
......@@ -127,6 +127,15 @@ const routes: Routes = [
},
canActivate: [ApplicationRoleGuardService],
},
{
path: AdminRoutesEnum.notification,
// @ts-ignore Dynamic import
loadChildren: () => import("./notification/notification.module").then(m => m.AdminNotificationModule),
data: {
breadcrumb: TRANSLATE("breadcrumb.admin.notification.root"),
},
canActivate: [ApplicationRoleGuardService],
},
{
path: AdminRoutesEnum.user,
// @ts-ignore Dynamic import
......
......@@ -5,6 +5,7 @@ import {AdminInstitutionState} from "@admin/institution/stores/admin-institution
import {AdminLanguageState} from "@admin/language/stores/admin-language.state";
import {AdminLicenseState} from "@admin/license/stores/admin-license.state";
import {AdminMetadataTypeState} from "@admin/metadata-type/stores/admin-metadata-type.state";
import {AdminNotificationState} from "@admin/notification/stores/admin-notification.state";
import {AdminOaiSetState} from "@admin/oai-set/stores/admin-oai-set.state";
import {AdminOAuth2ClientState} from "@admin/oauth2-client/stores/admin-oauth2-client.state";
import {AdminOrganizationalUnitState} from "@admin/orgunit/stores/admin-organizational-unit.state";
......@@ -68,6 +69,7 @@ const presentationals = [];
AdminPersonState,
AdminPersonOrgUnitRoleState,
AdminRoleState,
AdminNotificationState,
AdminFundingAgenciesState,
AdminFundingAgenciesOrganizationalUnitState,
AdminPersonInstitutionsState,
......
......@@ -134,6 +134,13 @@ export class AdminHomeRoutable extends SharedAbstractPresentational {
path: RoutesEnum.adminMetadataType,
isVisible: () => true,
},
{
avatarIcon: "envelope",
titleToTranslate: TRANSLATE("admin.notifications.home.title"),
subtitleToTranslate: TRANSLATE("admin.notifications.home.subtitle"),
path: RoutesEnum.adminNotification,
isVisible: () => PermissionUtil.isUserHavePermission(true, ApplicationRolePermissionEnum.rootPermission, this.userRolesObs),
},
];
constructor(private store: Store) {
......
<form [formGroup]="form"
(ngSubmit)="onSubmit()"
>
<mat-form-field *ngIf="getFormControl(formDefinition.notificationType) as fd">
<mat-label>{{'admin.notifications.form.notificationType' | translate}}</mat-label>
<mat-select [formControl]="fd"
>
<mat-option *ngFor="let type of listNotificationType"
[value]="type"
>
{{notificationTypeEnumHelper.getLabel(type) | translate}}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field *ngIf="getFormControl(formDefinition.notificationStatus) as fd">
<mat-label>{{'admin.notifications.form.notificationStatus' | translate}}</mat-label>
<mat-select [formControl]="fd"
>
<mat-option *ngFor="let status of listNotificationStatus"
[value]="status"
>
{{notificationStatusEnumHelper.getLabel(status) | translate}}
</mat-option>
</mat-select>
</mat-form-field>
<dlcm-shared-searchable-single-select *ngIf="getFormControl(formDefinition.notifiedOrgUnitId) as fd"
solidifyValidation
[resourceNameSpace]="sharedOrgUnitActionNameSpace"
[state]="sharedOrganizationalUnitState"
[formControl]="fd"
[required]="formValidationHelper.hasRequiredField(fd)"
[labelKey]="'name'"
[valueKey]="'resId'"
[placeholder]="'admin.notifications.form.notifiedOrganizationUnit' | translate"
[readonly]="true"
[isWithLink]="true"
(navigate)="navigateToOrgUnit($event)"
>
</dlcm-shared-searchable-single-select>
<dlcm-shared-searchable-single-select *ngIf="getFormControl(formDefinition.emitterId) as fd"
solidifyValidation
[resourceNameSpace]="sharedPersonActionNameSpace"
[state]="sharedPersonState"
[formControl]="fd"
[required]="formValidationHelper.hasRequiredField(fd)"
[labelKey]="'fullName'"
[valueKey]="'resId'"
[placeholder]="'admin.notifications.form.emitter' | translate"
[readonly]="true"
[isWithLink]="true"
(navigate)="navigateToPerson($event)"
>
</dlcm-shared-searchable-single-select>
<mat-form-field *ngIf="getFormControl(formDefinition.message) as fd">
<mat-label>{{'admin.notifications.form.message' | translate }}</mat-label>
<input matInput
[formControl]="fd"
[solidifyValidation]="errors"
[required]="formValidationHelper.hasRequiredField(fd)"
>
<mat-error #errors></mat-error>
</mat-form-field>
<div class="submit-button">
<button *ngIf="!readonly"
mat-flat-button
color="primary"
type="submit"
(keydown.enter)="onSubmit()"
[disabled]="!form.valid || !form.dirty"
>
{{'admin.notifications.form.submit' | translate }}
</button>
</div>
</form>
import {
ChangeDetectionStrategy,
ChangeDetectorRef,
Component,
} from "@angular/core";
import {
FormBuilder,
Validators,
} from "@angular/forms";
import {
NotificationDlcm,
NotificationStatus,
NotificationType,
} from "@models";
import {SharedAbstractFormPresentational} from "@shared/components/presentationals/shared-abstract-form/shared-abstract-form.presentational";
import {NotificationStatusEnumHelper} from "@shared/enums/notification-status.enum";
import {NotificationTypeEnumHelper} from "@shared/enums/notification-type.enum";
import {RoutesEnum} from "@shared/enums/routes.enum";
import {BaseFormDefinition} from "@shared/models/base-form-definition.model";
import {sharedOrgUnitActionNameSpace} from "@shared/stores/organizational-unit/shared-organizational-unit.action";
import {SharedOrganizationalUnitState} from "@shared/stores/organizational-unit/shared-organizational-unit.state";
import {sharedPersonActionNameSpace} from "@shared/stores/person/shared-person.action";
import {SharedPersonState} from "@shared/stores/person/shared-person.state";
import {
EnumUtil,
PropertyName,
ResourceNameSpace,
SolidifyValidator,
} from "solidify-frontend";
import NotificationStatusEnum = NotificationStatus.NotificationStatusEnum;
import NotificationTypeEnum = NotificationType.NotificationTypeEnum;
@Component({
selector: "dlcm-admin-notification-form",
templateUrl: "./admin-notification-form.presentational.html",
styleUrls: ["../../../../../../shared/components/presentationals/shared-abstract-form/shared-abstract-form.presentational.scss"],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class AdminNotificationFormPresentational extends SharedAbstractFormPresentational<NotificationDlcm> {
formDefinition: FormComponentFormDefinition = new FormComponentFormDefinition();
listNotificationType: NotificationTypeEnum[] = EnumUtil.convertToArray(NotificationTypeEnum);
listNotificationStatus: NotificationStatusEnum[] = EnumUtil.convertToArray(NotificationStatusEnum);
get notificationTypeEnumHelper(): typeof NotificationTypeEnumHelper {
return NotificationTypeEnumHelper;
}
get notificationStatusEnumHelper(): typeof NotificationStatusEnumHelper {
return NotificationStatusEnumHelper;
}
sharedPersonActionNameSpace: ResourceNameSpace = sharedPersonActionNameSpace;
sharedPersonState: typeof SharedPersonState = SharedPersonState;
sharedOrgUnitActionNameSpace: ResourceNameSpace = sharedOrgUnitActionNameSpace;
sharedOrganizationalUnitState: typeof SharedOrganizationalUnitState = SharedOrganizationalUnitState;
constructor(protected readonly _changeDetectorRef: ChangeDetectorRef,
private readonly _fb: FormBuilder) {
super(_changeDetectorRef);
}
protected bindFormTo(notificationDlcm: NotificationDlcm): void {
this.form = this._fb.group({
[this.formDefinition.notificationType]: [notificationDlcm.notificationType, [Validators.required, SolidifyValidator]],
[this.formDefinition.notificationStatus]: [notificationDlcm.notificationStatus, [Validators.required, SolidifyValidator]],
[this.formDefinition.emitterId]: [notificationDlcm.emitter["person"]?.resId, [Validators.required, SolidifyValidator]],
[this.formDefinition.message]: [notificationDlcm.message, [Validators.required, SolidifyValidator]],
[this.formDefinition.creation]: [notificationDlcm.creation.when, [Validators.required, SolidifyValidator]],
[this.formDefinition.notifiedOrgUnitId]: [notificationDlcm.notifiedOrgUnit?.resId, [Validators.required, SolidifyValidator]],
});
}
protected initNewForm(): void {
this.form = this._fb.group({
[this.formDefinition.notificationType]: ["", [Validators.required, SolidifyValidator]],
[this.formDefinition.notificationStatus]: ["", [Validators.required, SolidifyValidator]],
[this.formDefinition.emitterId]: ["", [Validators.required, SolidifyValidator]],
[this.formDefinition.message]: ["", [Validators.required, SolidifyValidator]],
[this.formDefinition.creation]: ["", [Validators.required, SolidifyValidator]],
[this.formDefinition.notifiedOrgUnitId]: ["", [Validators.required, SolidifyValidator]],
});
}
protected treatmentBeforeSubmit(notificationDlcm: NotificationDlcm): NotificationDlcm {
return notificationDlcm;
}
navigateToOrgUnit(resId: string): void {
this.navigate([RoutesEnum.adminOrganizationalUnitDetail, resId]);
}
navigateToPerson(resId: string): void {
this.navigate([RoutesEnum.adminPersonDetail, resId]);
}
}
class FormComponentFormDefinition extends BaseFormDefinition {
@PropertyName() notificationType: string;
@PropertyName() notificationStatus: string;
@PropertyName() emitterId: string;
@PropertyName() message: string;
@PropertyName() creation: string;
@PropertyName() notifiedOrgUnitId: string;
}
<lib-empty-container solidifyShortCuts
(onEscape)=" isEdit ? backToDetail() : backToList()"
[solidifyFocusFirstElement]="true"
>
<dlcm-button-toolbar-detail [mode]="isEdit ? 'edit' : 'detail'"
[editAvailable]="false"
[currentModel]="currentObs | async"
[deleteAvailable]="false"
(editChange)="edit()"
(backToDetailChange)="backToDetail()"
(backToListChange)="backToList()"
>
</dlcm-button-toolbar-detail>
<div class="wrapper"
[dlcmSpinner]="isLoadingWithDependencyObs | async"
>
<dlcm-admin-notification-form #formPresentational
*ngIf="isReadyToBeDisplayedObs | async"
[model]="currentObs| async"
[readonly]="!isEdit"
(submitChange)="update($event)"
(navigate)="navigate($event)"
(checkAvailableChange)="checkAvailable($event)"
(dirtyChange)="updateCanDeactivate($event)"
>
</dlcm-admin-notification-form>
</div>
</lib-empty-container>
import {adminNotificationActionNameSpace} from "@admin/notification/stores/admin-notification.action";
import {
AdminNotificationState,
AdminNotificationStateModel,
} from "@admin/notification/stores/admin-notification.state";
import {
ChangeDetectionStrategy,
ChangeDetectorRef,
Component,
} from "@angular/core";
import {MatDialog} from "@angular/material/dialog";
import {ActivatedRoute} from "@angular/router";
import {NotificationDlcm} from "@models";
import {
Actions,
Select,
Store,
} from "@ngxs/store";
import {SharedAbstractDetailEditCommonRoutable} from "@shared/components/routables/shared-abstract-detail-edit-common/shared-abstract-detail-edit-common.routable";
import {LocalStateEnum} from "@shared/enums/local-state.enum";
import {Observable} from "rxjs";
@Component({
selector: "dlcm-admin-role-detail-edit-routable",
templateUrl: "./admin-notification-detail-edit.routable.html",
styleUrls: ["../../../../../../shared/components/routables/shared-abstract-detail-edit-common/shared-abstract-detail-edit-common.routable.scss"],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class AdminNotificationDetailEditRoutable extends SharedAbstractDetailEditCommonRoutable<NotificationDlcm, AdminNotificationStateModel> {
@Select(AdminNotificationState.isLoadingWithDependency) isLoadingWithDependencyObs: Observable<boolean>;
@Select(AdminNotificationState.isReadyToBeDisplayed) isReadyToBeDisplayedObs: Observable<boolean>;
readonly KEY_PARAM_NAME: keyof NotificationDlcm & string = "notificationType";
constructor(protected _store: Store,
protected _route: ActivatedRoute,
protected readonly _actions$: Actions,
protected readonly _changeDetector: ChangeDetectorRef,
public _dialog: MatDialog) {
super(_store, _route, _actions$, _changeDetector, _dialog, LocalStateEnum.admin_notification, adminNotificationActionNameSpace, LocalStateEnum.admin);
}
getSubResourceWithParentId(id: string): void {
}
}
import {adminNotificationActionNameSpace} from "@admin/notification/stores/admin-notification.action";
import {AdminNotificationStateModel} from "@admin/notification/stores/admin-notification.state";
import {
ChangeDetectionStrategy,
ChangeDetectorRef,
Component,
} from "@angular/core";
import {MatDialog} from "@angular/material/dialog";
import {ActivatedRoute} from "@angular/router";
import {NotificationDlcm} from "@models";
import {
Actions,
Store,
} from "@ngxs/store";
import {SharedAbstractListRoutable} from "@shared/components/routables/shared-abstract-list/shared-abstract-list.routable";
import {FieldTypeEnum} from "@shared/enums/field-type.enum";
import {LocalStateEnum} from "@shared/enums/local-state.enum";
import {NotificationStatusEnumHelper} from "@shared/enums/notification-status.enum";
import {NotificationTypeEnumHelper} from "@shared/enums/notification-type.enum";
import {
OrderEnum,
TRANSLATE,
} from "solidify-frontend";
@Component({
selector: "dlcm-admin-notification-list-routable",
templateUrl: "../../../../../../shared/components/routables/shared-abstract-list/shared-abstract-list.routable.html",
styleUrls: ["../../../../../../shared/components/routables/shared-abstract-list/shared-abstract-list.routable.scss"],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class AdminNotificationListRoutable extends SharedAbstractListRoutable<NotificationDlcm, AdminNotificationStateModel> {
readonly KEY_CREATE_BUTTON: string = TRANSLATE("admin.notifications.button.new");
readonly KEY_REFRESH_BUTTON: string = TRANSLATE("admin.notifications.button.refresh");
readonly KEY_BACK_BUTTON: string | undefined = TRANSLATE("admin.button.goBackToAdminHome");
readonly KEY_PARAM_NAME: keyof NotificationDlcm & string = "notificationType";
constructor(protected readonly _store: Store,
protected readonly _changeDetector: ChangeDetectorRef,
protected readonly _route: ActivatedRoute,
protected readonly _actions$: Actions,
protected readonly _dialog: MatDialog) {
super(_store, _changeDetector, _route, _actions$, _dialog, LocalStateEnum.admin_notification, adminNotificationActionNameSpace, {canCreate: false}, LocalStateEnum.admin);
}
conditionDisplayEditButton(model: NotificationDlcm | undefined): boolean {
return false;
}
conditionDisplayDeleteButton(model: NotificationDlcm | undefined): boolean {
return false;
}
defineColumns(): void {
this.columns = [
{
field: "notificationType",
header: TRANSLATE("admin.notifications.table.header.notificationType"),
type: FieldTypeEnum.singleSelect,
order: OrderEnum.none,
isFilterable: true,
isSortable: true,
translate: true,
filterEnum: NotificationTypeEnumHelper.getListKeyValue(),
},
{
field: "notificationStatus",
header: TRANSLATE("admin.notifications.table.header.notificationStatus"),
type: FieldTypeEnum.singleSelect,
order: OrderEnum.none,
isFilterable: false,
isSortable: true,
translate: true,
filterEnum: NotificationStatusEnumHelper.getListKeyValue(),
},
{
field: "emitter.person.fullName" as any,
header: TRANSLATE("admin.notifications.table.header.emitter"),
type: FieldTypeEnum.string,
order: OrderEnum.none,
isFilterable: false,
isSortable: false,
},
{
field: "notifiedOrgUnit.name" as any,
header: TRANSLATE("admin.notifications.table.header.notifiedOrgUnit"),
type: FieldTypeEnum.string,
order: OrderEnum.none,
isFilterable: false,
isSortable: true,
},
];
}
}
import {AdminNotificationDetailEditRoutable} from "@admin/notification/components/routables/admin-notification-detail-edit/admin-notification-detail-edit.routable";
import {AdminNotificationListRoutable} from "@admin/notification/components/routables/admin-notification-list/admin-notification-list.routable";
import {AdminNotificationState} from "@admin/notification/stores/admin-notification.state";
import {NgModule} from "@angular/core";
import {
RouterModule,
Routes,
} from "@angular/router";
import {
AdminRoutesEnum,
AppRoutesEnum,
} from "@shared/enums/routes.enum";
import {CanDeactivateGuard} from "@shared/services/can-deactivate-guard.service";
import {TRANSLATE} from "solidify-frontend";
const routes: Routes = [
{
path: AppRoutesEnum.root,
component: AdminNotificationListRoutable,
data: {},
},
{
path: AdminRoutesEnum.notificationDetail + AppRoutesEnum.separator + AppRoutesEnum.paramId,
component: AdminNotificationDetailEditRoutable,
data: {
breadcrumbMemoizedSelector: AdminNotificationState.currentTitle,
},
children: [
{
path: AdminRoutesEnum.notificationEdit,
data: {
breadcrumb: TRANSLATE("breadcrumb.admin.notification.edit"),
},
canDeactivate: [CanDeactivateGuard],
},
],
},
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
})
export class AdminNotificationRoutingModule {
}
import {AdminNotificationFormPresentational} from "@admin/notification/components/presentationals/admin-notification-form/admin-notification-form.presentational";
import {AdminNotificationDetailEditRoutable} from "@admin/notification/components/routables/admin-notification-detail-edit/admin-notification-detail-edit.routable";
import {AdminNotificationListRoutable} from "@admin/notification/components/routables/admin-notification-list/admin-notification-list.routable";
import {AdminNotificationRoutingModule} from "@admin/notification/notification-routing.module";
import {AdminNotificationState} from "@admin/notification/stores/admin-notification.state";
import {NgModule} from "@angular/core";
import {SharedModule} from "@app/shared/shared.module";
import {TranslateModule} from "@ngx-translate/core";
import {NgxsModule} from "@ngxs/store";
const routables = [
AdminNotificationListRoutable,
AdminNotificationDetailEditRoutable,
];
const containers = [];
const dialogs = [];
const presentationals = [
AdminNotificationFormPresentational,
];
@NgModule({
declarations: [
...routables,
...containers,
...dialogs,
...presentationals,
],
imports: [
SharedModule,
AdminNotificationRoutingModule,
TranslateModule.forChild({}),
NgxsModule.forFeature([
AdminNotificationState,
]),
],
entryComponents: [
...dialogs,
],
exports: [
...routables,
],
providers: [],
})
export class AdminNotificationModule {
}
import {NotificationDlcm} from "@models";
import {LocalStateEnum} from "@shared/enums/local-state.enum";
import {
ResourceAction,
ResourceNameSpace,
TypeDefaultAction,
} from "solidify-frontend";
const state = LocalStateEnum.admin_notification;
export namespace AdminNotificationAction {
@TypeDefaultAction(state)
export class LoadResource extends ResourceAction.LoadResource {
}
@TypeDefaultAction(state)
export class LoadResourceSuccess extends ResourceAction.LoadResourceSuccess {
}
@TypeDefaultAction(state)
export class LoadResourceFail extends ResourceAction.LoadResourceFail {
}
@TypeDefaultAction(state)
export class ChangeQueryParameters extends ResourceAction.ChangeQueryParameters {
}
@TypeDefaultAction(state)
export class GetAll extends ResourceAction.GetAll {
}
@TypeDefaultAction(state)
export class GetAllSuccess extends ResourceAction.GetAllSuccess<NotificationDlcm> {
}
@TypeDefaultAction(state)
export class GetAllFail extends ResourceAction.GetAllFail<NotificationDlcm> {
}
@TypeDefaultAction(state)
export class GetByListId extends ResourceAction.GetByListId {
}
@TypeDefaultAction(state)
export class GetByListIdSuccess extends ResourceAction.GetByListIdSuccess {
}
@TypeDefaultAction(state)
export class GetByListIdFail extends ResourceAction.GetByListIdFail {
}
@TypeDefaultAction(state)
export class GetById extends ResourceAction.GetById {
}
@TypeDefaultAction(state)
export class GetByIdSuccess extends ResourceAction.GetByIdSuccess<NotificationDlcm> {
}
@TypeDefaultAction(state)
export class GetByIdFail extends ResourceAction.GetByIdFail<NotificationDlcm> {
}
@TypeDefaultAction(state)
export class Create extends ResourceAction.Create<NotificationDlcm> {
}
@TypeDefaultAction(state)
export class CreateSuccess extends ResourceAction.CreateSuccess<NotificationDlcm> {
}
@TypeDefaultAction(state)
export class CreateFail extends ResourceAction.CreateFail<NotificationDlcm> {
}
@TypeDefaultAction(state)
export class Update extends ResourceAction.Update<NotificationDlcm> {
}
@TypeDefaultAction(state)
export class UpdateSuccess extends ResourceAction.UpdateSuccess<NotificationDlcm> {
}
@TypeDefaultAction(state)
export class UpdateFail extends ResourceAction.UpdateFail<NotificationDlcm> {
}
@TypeDefaultAction(state)
export class Delete extends ResourceAction.Delete {
}
@TypeDefaultAction(state)
export class DeleteSuccess extends ResourceAction.DeleteSuccess {
}
@TypeDefaultAction(state)
export class DeleteFail extends ResourceAction.DeleteFail {
}
@TypeDefaultAction(state)
export class AddInList extends ResourceAction.AddInList<NotificationDlcm> {
}
@TypeDefaultAction(state)
export class AddInListById extends ResourceAction.AddInListById {
}
@TypeDefaultAction(state)
export class AddInListByIdSuccess extends ResourceAction.AddInListByIdSuccess<NotificationDlcm> {
}
@TypeDefaultAction(state)
export class AddInListByIdFail extends ResourceAction.AddInListByIdFail<NotificationDlcm> {
}
@TypeDefaultAction(state)
export class RemoveInListById extends ResourceAction.RemoveInListById {
}
@TypeDefaultAction(state)
export class RemoveInListByListId extends ResourceAction.RemoveInListByListId {
}
@TypeDefaultAction(state)
export class Clean extends ResourceAction.Clean {
}
}
export const adminNotificationActionNameSpace: ResourceNameSpace = AdminNotificationAction;
import {adminNotificationActionNameSpace} from "@admin/notification/stores/admin-notification.action";
import {Injectable} from "@angular/core";
import {NotificationDlcm} from "@models";
import {
Actions,
Selector,
State,
Store,
} from "@ngxs/store";
import {AdminResourceApiEnum} from "@shared/enums/api.enum";
import {LocalStateEnum} from "@shared/enums/local-state.enum";
import {RoutesEnum} from "@shared/enums/routes.enum";
import {
ApiService,
defaultResourceStateInitValue,
isNullOrUndefined,
NotificationService,
ResourceState,
ResourceStateModel,
StoreUtil,
TRANSLATE,
urlSeparator,
} from "solidify-frontend";
export interface AdminNotificationStateModel extends ResourceStateModel<NotificationDlcm> {
}
@Injectable()
@State<AdminNotificationStateModel>({
name: LocalStateEnum.admin_notification,
defaults: {
...defaultResourceStateInitValue(),
},
})
export class AdminNotificationState extends ResourceState<AdminNotificationStateModel, NotificationDlcm> {
constructor(protected apiService: ApiService,
protected store: Store,
protected notificationService: NotificationService,
protected actions$: Actions) {
super(apiService, store, notificationService, actions$, {
nameSpace: adminNotificationActionNameSpace,
routeRedirectUrlAfterSuccessCreateAction: (resId: string) => RoutesEnum.adminNotificationDetail + urlSeparator + resId,
routeRedirectUrlAfterSuccessUpdateAction: (resId: string) => RoutesEnum.adminNotificationDetail + urlSeparator + resId,
routeRedirectUrlAfterSuccessDeleteAction: RoutesEnum.adminNotification,
notificationResourceCreateSuccessTextToTranslate: TRANSLATE("admin.notifications.notification.resource.create"),
notificationResourceDeleteSuccessTextToTranslate: TRANSLATE("admin.notifications.notification.resource.delete"),
notificationResourceUpdateSuccessTextToTranslate: TRANSLATE("admin.notifications.notification.resource.update"),
});
}
protected get _urlResource(): string {
return AdminResourceApiEnum.notifications;
}
@Selector()
static isLoading(state: AdminNotificationStateModel): boolean {
return StoreUtil.isLoadingState(state);
}
@Selector()
static isLoadingWithDependency(state: AdminNotificationStateModel): boolean {
return this.isLoading(state);
}
@Selector()
static currentTitle(state: AdminNotificationStateModel): string | undefined {
if (isNullOrUndefined(state.current)) {
return undefined;
}
return state.current.emitter["person"].fullName;
}
@Selector()
static isReadyToBeDisplayed(state: AdminNotificationStateModel): boolean {
return this.isReadyToBeDisplayedInCreateMode
&& !isNullOrUndefined(state.current);
}
@Selector()
static isReadyToBeDisplayedInCreateMode(state: AdminNotificationStateModel): boolean {
return true;
}
}
......@@ -95,7 +95,7 @@ export class AdminPersonFormPresentational extends SharedAbstractFormPresentatio
}
navigateToContributor(): void {
this.navigate([RoutesEnum.contributorDetail, this.model.resId]);
this.navigate([RoutesEnum.preservationSpaceContributorDetail, this.model.resId]);
}
}
......