diff --git a/.barrelsby.json b/.barrelsby.json new file mode 100644 index 00000000000..bc89c6e936a --- /dev/null +++ b/.barrelsby.json @@ -0,0 +1,14 @@ +{ + "directory": [ + "projects/dspace/config/src/lib/", + "projects/dspace/core/src/lib/", + "projects/dspace/utils/src/lib/" + ], + "delete": true, + "exclude": [ + ], + "location": "all", + "structure": "flat", + "singleQuotes": true, + "noSemicolon": false +} diff --git a/angular.json b/angular.json index 4b95be55122..68bc552c48d 100644 --- a/angular.json +++ b/angular.json @@ -36,7 +36,7 @@ "index": "src/index.html", "main": "src/main.browser.ts", "polyfills": "src/polyfills.ts", - "tsConfig": "tsconfig.app.json", + "tsConfig": "tsconfig.browser.json", "aot": true, "assets": [ "src/assets", @@ -82,8 +82,8 @@ "with": "src/environments/environment.production.ts" }, { - "replace": "src/config/store/devtools.ts", - "with": "src/config/store/devtools.prod.ts" + "replace": "src/app/ngrx-devtools/devtools.ts", + "with": "src/app/ngrx-devtools/devtools.prod.ts" } ], "optimization": true, @@ -211,8 +211,8 @@ "with": "src/environments/environment.production.ts" }, { - "replace": "src/config/store/devtools.ts", - "with": "src/config/store/devtools.prod.ts" + "replace": "src/app/ngrx-devtools/devtools.ts", + "with": "src/app/ngrx-devtools/devtools.prod.ts" } ] } @@ -276,6 +276,132 @@ } } } + }, + "@dspace/utils": { + "projectType": "library", + "root": "projects/dspace/utils", + "sourceRoot": "projects/dspace/utils/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "projects/dspace/utils/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/dspace/utils/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/dspace/utils/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/dspace/utils/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ] + } + }, + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": [ + "projects/dspace/utils/**/*.ts", + "projects/dspace/utils/**/*.html" + ] + } + } + } + }, + "@dspace/config": { + "projectType": "library", + "root": "projects/dspace/config", + "sourceRoot": "projects/dspace/config/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "projects/dspace/config/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/dspace/config/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/dspace/config/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/dspace/config/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ] + } + }, + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": [ + "projects/dspace/config/**/*.ts", + "projects/dspace/config/**/*.html" + ] + } + } + } + }, + "@dspace/core": { + "projectType": "library", + "root": "projects/dspace/core", + "sourceRoot": "projects/dspace/core/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "projects/dspace/core/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/dspace/core/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/dspace/core/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "projects/dspace/core/tsconfig.spec.json", + "polyfills": [ + "zone.js", + "zone.js/testing" + ] + } + }, + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": [ + "projects/dspace/core/**/*.ts", + "projects/dspace/core/**/*.html" + ] + } + } + } } }, "cli": { diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts index 8cc2c5c721b..8f5fc755306 100644 --- a/cypress/support/commands.ts +++ b/cypress/support/commands.ts @@ -6,11 +6,11 @@ import { AuthTokenInfo, TOKENITEM, -} from 'src/app/core/auth/models/auth-token-info.model'; +} from '@dspace/core' import { DSPACE_XSRF_COOKIE, XSRF_REQUEST_HEADER, -} from 'src/app/core/xsrf/xsrf.constants'; +} from '@dspace/core' import { v4 as uuidv4 } from 'uuid'; // Declare Cypress namespace to help with Intellisense & code completion in IDEs diff --git a/cypress/support/e2e.ts b/cypress/support/e2e.ts index 64aa1f7b7ce..03c79612caf 100644 --- a/cypress/support/e2e.ts +++ b/cypress/support/e2e.ts @@ -19,7 +19,7 @@ import './commands'; // https://github.com/component-driven/cypress-axe import 'cypress-axe'; -import { DSPACE_XSRF_COOKIE } from 'src/app/core/xsrf/xsrf.constants'; +import { DSPACE_XSRF_COOKIE } from '@dspace/core' // Runs once before all tests before(() => { diff --git a/package-lock.json b/package-lock.json index 4284cc41586..7b575d09bef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -114,6 +114,7 @@ "@typescript-eslint/rule-tester": "^7.18.0", "@typescript-eslint/utils": "^7.18.0", "axe-core": "^4.10.2", + "barrelsby": "^2.8.1", "compression-webpack-plugin": "^9.2.0", "copy-webpack-plugin": "^6.4.1", "cross-env": "^7.0.3", @@ -143,6 +144,7 @@ "karma-jasmine-html-reporter": "^1.5.0", "karma-mocha-reporter": "2.2.5", "ng-mocks": "^14.13.5", + "ng-packagr": "^18.2.1", "ngx-mask": "14.2.4", "nodemon": "^2.0.22", "postcss": "^8.5", @@ -6441,6 +6443,75 @@ "react-dom": "^16.3.2" } }, + "node_modules/@rollup/plugin-json": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", + "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", + "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.22.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", @@ -6649,6 +6720,33 @@ "win32" ] }, + "node_modules/@rollup/wasm-node": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/wasm-node/-/wasm-node-4.50.1.tgz", + "integrity": "sha512-3oCUcKNdkemnqy6r12UdAtfYMWywGxVHSCQvtDYeEtnOcOQC/SihSXkO6+rByH2ZhbgfeTbqLiw1NDGfJDptyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/@rollup/wasm-node/node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -7149,6 +7247,13 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/retry": { "version": "0.12.2", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", @@ -8653,6 +8758,24 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/barrelsby": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/barrelsby/-/barrelsby-2.8.1.tgz", + "integrity": "sha512-barN2MVKqUVwmjRy3JLSMYufrBDcdWUc2pjlR0V9P8S3aMvvJ4StFz1GJMzEi5GBoQlnBIWOcCxBDzI2xfaaGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs": "^17.0.10", + "signale": "^1.4.0", + "yargs": "^17.4.1" + }, + "bin": { + "barrelsby": "bin/cli.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -10724,6 +10847,16 @@ "node": ">= 0.8" } }, + "node_modules/dependency-graph": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz", + "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -12145,6 +12278,13 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -13759,6 +13899,16 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/injection-js": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.5.0.tgz", + "integrity": "sha512-UpY2ONt4xbht4GhSqQ2zMJ1rBIQq4uOY+DlR6aOeYyqK7xadXt7UQbJIyxmgk288bPMkIZKjViieHm0O0i72Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + } + }, "node_modules/internal-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", @@ -14111,6 +14261,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true, + "license": "MIT" + }, "node_modules/is-negative-zero": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", @@ -14720,6 +14877,13 @@ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true, + "license": "MIT" + }, "node_modules/json-parse-even-better-errors": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", @@ -15618,6 +15782,46 @@ "@lmdb/lmdb-win32-x64": "3.0.13" } }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -16780,94 +16984,441 @@ "@angular/platform-browser": "5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14 || 15.0.0-alpha - 15 || 16.0.0-alpha - 16 || 17.0.0-alpha - 17 || 18.0.0-alpha - 18 || 19.0.0-alpha - 19 || 20.0.0-alpha - 20" } }, - "node_modules/ng2-file-upload": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/ng2-file-upload/-/ng2-file-upload-7.0.1.tgz", - "integrity": "sha512-qqJRzdRehYn6IQyr49qzW4Z3FYYr2ehq/vcn2K933Xf4kxJwhkzWObzJMEDYzhORoTndt+BYfVBNKmN4wjZkyw==", + "node_modules/ng-packagr": { + "version": "18.2.1", + "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-18.2.1.tgz", + "integrity": "sha512-dy9ZDpZb3QpAz+Y/m8VAu7ctr2VrnRU3gmQwJagnNybVJtCsKn3lZA3IW7Z7GTLoG5IALSPouiCgiB/C8ozv7w==", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.3.0" + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/wasm-node": "^4.18.0", + "ajv": "^8.12.0", + "ansi-colors": "^4.1.3", + "browserslist": "^4.22.1", + "cacache": "^18.0.0", + "chokidar": "^3.5.3", + "commander": "^12.0.0", + "convert-source-map": "^2.0.0", + "dependency-graph": "^1.0.0", + "esbuild": "^0.23.0", + "fast-glob": "^3.3.1", + "find-cache-dir": "^3.3.2", + "injection-js": "^2.4.0", + "jsonc-parser": "^3.2.0", + "less": "^4.2.0", + "ora": "^5.1.0", + "piscina": "^4.4.0", + "postcss": "^8.4.31", + "rxjs": "^7.8.1", + "sass": "^1.69.5" }, - "peerDependencies": { - "@angular/common": "^18.0.0", - "@angular/core": "^18.0.0" - } - }, - "node_modules/ng2-nouislider": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ng2-nouislider/-/ng2-nouislider-2.0.0.tgz", - "integrity": "sha512-NGbF/0w0+bZqclpSPFOlWIeVJaVwRRYFJzD1x8PClbw9GIeo7fCHoBzZ81y7K7FTJg6to+cgjSTFETPZG/Dizg==", - "dependencies": { - "tslib": "^2.3.0" + "bin": { + "ng-packagr": "cli/main.js" }, - "peerDependencies": { - "@angular/common": ">=14.x", - "@angular/core": ">=14.x", - "nouislider": ">=15.x" - } - }, - "node_modules/ngx-infinite-scroll": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/ngx-infinite-scroll/-/ngx-infinite-scroll-18.0.0.tgz", - "integrity": "sha512-D183TDwpsd9Zl56UmItsl3RzHdN25srAISfg6lc3A8mEKkEgOq0s7ZzRAYcx8DHsAkMgtZqjIPEvMifD3DOB/g==", - "dependencies": { - "tslib": "^2.3.0" + "engines": { + "node": "^18.19.1 || >=20.11.1" + }, + "optionalDependencies": { + "rollup": "^4.18.0" }, "peerDependencies": { - "@angular/common": ">=18.0.0 <19.0.0", - "@angular/core": ">=18.0.0 <19.0.0" + "@angular/compiler-cli": "^18.0.0 || ^18.2.0-next.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "tslib": "^2.3.0", + "typescript": ">=5.4 <5.6" + }, + "peerDependenciesMeta": { + "tailwindcss": { + "optional": true + } } }, - "node_modules/ngx-mask": { - "version": "14.2.4", - "resolved": "https://registry.npmjs.org/ngx-mask/-/ngx-mask-14.2.4.tgz", - "integrity": "sha512-158nAe2tyiZa2T8COoI6SvJCQHqpJ4+JW0amGcvVEYUBF6FIoYK66BlnOJURAOy5qry0d0N45w7J/LGsCBgZcg==", + "node_modules/ng-packagr/node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", "dependencies": { - "tslib": "^2.3.0" + "semver": "^7.3.5" }, - "peerDependencies": { - "@angular/common": ">=10.0.0", - "@angular/core": ">=10.0.0", - "@angular/forms": ">=10.0.0" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/ngx-matomo-client": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/ngx-matomo-client/-/ngx-matomo-client-6.4.1.tgz", - "integrity": "sha512-GRriCGW0ULCg9oSZw3ule+o9esELVVJTJ0Z99/zYKGjlyrrHLn5a1e0GSdgICubo59gP1cg9NwsOC0BH7oio9A==", + "node_modules/ng-packagr/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/common": "^17.0.0 || ^18.0.0", - "@angular/core": "^17.0.0 || ^18.0.0" + "balanced-match": "^1.0.0" } }, - "node_modules/ngx-pagination": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ngx-pagination/-/ngx-pagination-6.0.3.tgz", - "integrity": "sha512-lONjTQ7hFPh1SyhwDrRd5ZwM4NMGQ7bNR6vLrs6mrU0Z8Q1zCcWbf/pvyp4DOlGyd9uyZxRy2wUsSZLeIPjbAw==", + "node_modules/ng-packagr/node_modules/cacache": { + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "dev": true, + "license": "ISC", "dependencies": { - "tslib": "^2.3.0" + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" }, - "peerDependencies": { - "@angular/common": ">=13.0.0", - "@angular/core": ">=13.0.0" + "engines": { + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/ngx-skeleton-loader": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/ngx-skeleton-loader/-/ngx-skeleton-loader-9.0.0.tgz", - "integrity": "sha512-aO4/V6oGdZGNcTjasTg/fwzJJYl/ZmNKgCukOEQdUK3GSFOZtB/3GGULMJuZ939hk3Hzqh1OBiLfIM1SqTfhqg==", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@angular/common": ">=16.0.0", - "@angular/core": ">=16.0.0" + "node_modules/ng-packagr/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" } }, - "node_modules/ngx-ui-switch": { - "version": "15.0.0", + "node_modules/ng-packagr/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ng-packagr/node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/ng-packagr/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ng-packagr/node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ng-packagr/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ng-packagr/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ng-packagr/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ng-packagr/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ng-packagr/node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/ng-packagr/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ng-packagr/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ng-packagr/node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ng-packagr/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ng-packagr/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ng-packagr/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ng-packagr/node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ng-packagr/node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ng-packagr/node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ng2-file-upload": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/ng2-file-upload/-/ng2-file-upload-7.0.1.tgz", + "integrity": "sha512-qqJRzdRehYn6IQyr49qzW4Z3FYYr2ehq/vcn2K933Xf4kxJwhkzWObzJMEDYzhORoTndt+BYfVBNKmN4wjZkyw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^18.0.0", + "@angular/core": "^18.0.0" + } + }, + "node_modules/ng2-nouislider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ng2-nouislider/-/ng2-nouislider-2.0.0.tgz", + "integrity": "sha512-NGbF/0w0+bZqclpSPFOlWIeVJaVwRRYFJzD1x8PClbw9GIeo7fCHoBzZ81y7K7FTJg6to+cgjSTFETPZG/Dizg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": ">=14.x", + "@angular/core": ">=14.x", + "nouislider": ">=15.x" + } + }, + "node_modules/ngx-infinite-scroll": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/ngx-infinite-scroll/-/ngx-infinite-scroll-18.0.0.tgz", + "integrity": "sha512-D183TDwpsd9Zl56UmItsl3RzHdN25srAISfg6lc3A8mEKkEgOq0s7ZzRAYcx8DHsAkMgtZqjIPEvMifD3DOB/g==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": ">=18.0.0 <19.0.0", + "@angular/core": ">=18.0.0 <19.0.0" + } + }, + "node_modules/ngx-mask": { + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/ngx-mask/-/ngx-mask-14.2.4.tgz", + "integrity": "sha512-158nAe2tyiZa2T8COoI6SvJCQHqpJ4+JW0amGcvVEYUBF6FIoYK66BlnOJURAOy5qry0d0N45w7J/LGsCBgZcg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": ">=10.0.0", + "@angular/core": ">=10.0.0", + "@angular/forms": ">=10.0.0" + } + }, + "node_modules/ngx-matomo-client": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/ngx-matomo-client/-/ngx-matomo-client-6.4.1.tgz", + "integrity": "sha512-GRriCGW0ULCg9oSZw3ule+o9esELVVJTJ0Z99/zYKGjlyrrHLn5a1e0GSdgICubo59gP1cg9NwsOC0BH7oio9A==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^17.0.0 || ^18.0.0", + "@angular/core": "^17.0.0 || ^18.0.0" + } + }, + "node_modules/ngx-pagination": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ngx-pagination/-/ngx-pagination-6.0.3.tgz", + "integrity": "sha512-lONjTQ7hFPh1SyhwDrRd5ZwM4NMGQ7bNR6vLrs6mrU0Z8Q1zCcWbf/pvyp4DOlGyd9uyZxRy2wUsSZLeIPjbAw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": ">=13.0.0", + "@angular/core": ">=13.0.0" + } + }, + "node_modules/ngx-skeleton-loader": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/ngx-skeleton-loader/-/ngx-skeleton-loader-9.0.0.tgz", + "integrity": "sha512-aO4/V6oGdZGNcTjasTg/fwzJJYl/ZmNKgCukOEQdUK3GSFOZtB/3GGULMJuZ939hk3Hzqh1OBiLfIM1SqTfhqg==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": ">=16.0.0", + "@angular/core": ">=16.0.0" + } + }, + "node_modules/ngx-ui-switch": { + "version": "15.0.0", "resolved": "https://registry.npmjs.org/ngx-ui-switch/-/ngx-ui-switch-15.0.0.tgz", "integrity": "sha512-yMfAyIij01zUOeODREX8PyVl1nbfj5gVQW3mRJqihhkFESz+k4vddu6uuxEiyreLCUSDb/e6ZLXvO7ei9WSGcA==", "dependencies": { @@ -18148,6 +18699,93 @@ "nice-napi": "^1.0.2" } }, + "node_modules/pkg-conf": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-conf/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-conf/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-conf/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-conf/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-conf/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-conf/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/pkg-dir": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", @@ -20876,6 +21514,112 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/signale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", + "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.3.2", + "figures": "^2.0.0", + "pkg-conf": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/signale/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/signale/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/signale/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/signale/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/signale/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/signale/node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/signale/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/signale/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/sigstore": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz", diff --git a/package.json b/package.json index 5fc97ee5150..297bc186547 100644 --- a/package.json +++ b/package.json @@ -13,11 +13,12 @@ "serve": "ts-node --project ./tsconfig.ts-node.json scripts/serve.ts", "serve:ssr": "node dist/server/main", "analyze": "webpack-bundle-analyzer dist/browser/stats.json", - "build": "ng build --configuration development", + "build": "npm run generate:barrels && ng build --configuration development", "build:stats": "ng build --stats-json", - "build:prod": "cross-env NODE_ENV=production npm run build:ssr", + "build:prod": "npm run generate:barrels && cross-env NODE_ENV=production npm run build:ssr", "build:ssr": "ng build --configuration production && ng run dspace-angular:server:production", "build:lint": "rimraf 'lint/dist/**/*.js' 'lint/dist/**/*.js.map' && tsc -b lint/tsconfig.json", + "generate:barrels": "barrelsby -c .barrelsby.json", "test": "ng test --source-map=true --watch=false --configuration test", "test:watch": "nodemon --exec \"ng test --source-map=true --watch=true --configuration test\"", "test:headless": "ng test --source-map=true --watch=false --configuration test --browsers=ChromeHeadless --code-coverage", @@ -45,7 +46,7 @@ "cypress:run": "cypress run", "env:yaml": "ts-node --project ./tsconfig.ts-node.json scripts/env-to-yaml.ts", "base-href": "ts-node --project ./tsconfig.ts-node.json scripts/base-href.ts", - "check-circ-deps": "npx madge --exclude '(bitstream|bundle|collection|config-submission-form|eperson|item|version)\\.model\\.ts$' --circular --extensions ts ./", + "check-circ-deps": "npx madge --exclude '.nx|(bitstream|bundle|collection|config-submission-form|eperson|item|version)\\.model\\.ts|index.ts$' --circular --extensions ts ./", "postinstall": "npm run build:lint || echo 'Skipped DSpace ESLint plugins.'" }, "browser": { @@ -196,6 +197,7 @@ "@typescript-eslint/rule-tester": "^7.18.0", "@typescript-eslint/utils": "^7.18.0", "axe-core": "^4.10.2", + "barrelsby": "^2.8.1", "compression-webpack-plugin": "^9.2.0", "copy-webpack-plugin": "^6.4.1", "cross-env": "^7.0.3", @@ -225,6 +227,7 @@ "karma-jasmine-html-reporter": "^1.5.0", "karma-mocha-reporter": "2.2.5", "ng-mocks": "^14.13.5", + "ng-packagr": "^18.2.1", "ngx-mask": "14.2.4", "nodemon": "^2.0.22", "postcss": "^8.5", diff --git a/projects/dspace/config/.eslintrc.json b/projects/dspace/config/.eslintrc.json new file mode 100644 index 00000000000..72478009fa9 --- /dev/null +++ b/projects/dspace/config/.eslintrc.json @@ -0,0 +1,42 @@ +{ + "extends": "../../../.eslintrc.json", + "ignorePatterns": [ + "!**/*" + ], + "overrides": [ + { + "files": [ + "*.ts" + ], + "parserOptions": { + "project": [ + "projects/dspace/config/tsconfig.(lib|spec).json" + ] + }, + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "lib", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "lib", + "style": "kebab-case" + } + ] + } + }, + { + "files": [ + "*.html" + ], + "rules": {} + } + ] +} diff --git a/projects/dspace/config/README.md b/projects/dspace/config/README.md new file mode 100644 index 00000000000..9796db62e50 --- /dev/null +++ b/projects/dspace/config/README.md @@ -0,0 +1,24 @@ +# Config + +This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.2.0. + +## Code scaffolding + +Run `ng generate component component-name --project config` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project config`. +> Note: Don't forget to add `--project config` or else it will be added to the default project in your `angular.json` file. + +## Build + +Run `ng build config` to build the project. The build artifacts will be stored in the `dist/` directory. + +## Publishing + +After building your library with `ng build config`, go to the dist folder `cd dist/config` and run `npm publish`. + +## Running unit tests + +Run `ng test config` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page. diff --git a/projects/dspace/config/ng-package.json b/projects/dspace/config/ng-package.json new file mode 100644 index 00000000000..c989029d6e3 --- /dev/null +++ b/projects/dspace/config/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../../dist/dspace/config", + "lib": { + "entryFile": "src/public-api.ts" + } +} \ No newline at end of file diff --git a/projects/dspace/config/package.json b/projects/dspace/config/package.json new file mode 100644 index 00000000000..c9e703a407c --- /dev/null +++ b/projects/dspace/config/package.json @@ -0,0 +1,12 @@ +{ + "name": "@dspace/config", + "version": "0.0.1", + "peerDependencies": { + "@angular/common": "^18.2.0", + "@angular/core": "^18.2.0" + }, + "dependencies": { + "tslib": "^2.3.0" + }, + "sideEffects": false +} diff --git a/src/app/accessibility/accessibility-settings.config.ts b/projects/dspace/config/src/lib/accessibility-settings.config.ts similarity index 82% rename from src/app/accessibility/accessibility-settings.config.ts rename to projects/dspace/config/src/lib/accessibility-settings.config.ts index 1852579c3d3..99c6b081a99 100644 --- a/src/app/accessibility/accessibility-settings.config.ts +++ b/projects/dspace/config/src/lib/accessibility-settings.config.ts @@ -1,4 +1,4 @@ -import { Config } from '../../config/config.interface'; +import { Config } from './config.interface'; /** * Configuration interface used by the AccessibilitySettingsService diff --git a/src/config/actuators.config.ts b/projects/dspace/config/src/lib/actuators.config.ts similarity index 100% rename from src/config/actuators.config.ts rename to projects/dspace/config/src/lib/actuators.config.ts diff --git a/src/app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.model.ts b/projects/dspace/config/src/lib/admin-notify-metrics.config.ts similarity index 100% rename from src/app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.model.ts rename to projects/dspace/config/src/lib/admin-notify-metrics.config.ts diff --git a/src/config/advance-search-config.interface.ts b/projects/dspace/config/src/lib/advance-search-config.interface.ts similarity index 100% rename from src/config/advance-search-config.interface.ts rename to projects/dspace/config/src/lib/advance-search-config.interface.ts diff --git a/src/config/app-config.interface.ts b/projects/dspace/config/src/lib/app-config.interface.ts similarity index 82% rename from src/config/app-config.interface.ts rename to projects/dspace/config/src/lib/app-config.interface.ts index 3ae59185581..d7904ea0773 100644 --- a/src/config/app-config.interface.ts +++ b/projects/dspace/config/src/lib/app-config.interface.ts @@ -1,14 +1,11 @@ import { InjectionToken, makeStateKey, - Type, } from '@angular/core'; -import { AccessibilitySettingsConfig } from '../app/accessibility/accessibility-settings.config'; -import { AdminNotifyMetricsRow } from '../app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.model'; -import { HALDataService } from '../app/core/data/base/hal-data-service.interface'; -import { LiveRegionConfig } from '../app/shared/live-region/live-region.config'; +import { AccessibilitySettingsConfig } from './accessibility-settings.config'; import { ActuatorsConfig } from './actuators.config'; +import { AdminNotifyMetricsRow } from './admin-notify-metrics.config'; import { AuthConfig } from './auth-config.interfaces'; import { BrowseByConfig } from './browse-by-config.interface'; import { BundleConfig } from './bundle-config.interface'; @@ -25,6 +22,7 @@ import { HomeConfig } from './homepage-config.interface'; import { InfoConfig } from './info-config.interface'; import { ItemConfig } from './item-config.interface'; import { LangConfig } from './lang-config.interface'; +import { LiveRegionConfig } from './live-region.config'; import { MarkdownConfig } from './markdown-config.interface'; import { MatomoConfig } from './matomo-config.interface'; import { MediaViewerConfig } from './media-viewer-config.interface'; @@ -81,10 +79,6 @@ const APP_CONFIG = new InjectionToken('APP_CONFIG'); const APP_CONFIG_STATE = makeStateKey('APP_CONFIG_STATE'); -export type LazyDataServicesMap = Map Promise> | { default: HALDataService }>>; - -export const APP_DATA_SERVICES_MAP: InjectionToken = new InjectionToken('APP_DATA_SERVICES_MAP'); - export { APP_CONFIG, APP_CONFIG_STATE, diff --git a/src/config/auth-config.interfaces.ts b/projects/dspace/config/src/lib/auth-config.interfaces.ts similarity index 100% rename from src/config/auth-config.interfaces.ts rename to projects/dspace/config/src/lib/auth-config.interfaces.ts diff --git a/src/config/auto-sync-config.interface.ts b/projects/dspace/config/src/lib/auto-sync-config.interface.ts similarity index 89% rename from src/config/auto-sync-config.interface.ts rename to projects/dspace/config/src/lib/auto-sync-config.interface.ts index b737314f56c..c2dae0a170f 100644 --- a/src/config/auto-sync-config.interface.ts +++ b/projects/dspace/config/src/lib/auto-sync-config.interface.ts @@ -1,4 +1,4 @@ -import { RestRequestMethod } from '../app/core/data/rest-request-method'; +import { RestRequestMethod } from './rest-request-method'; /** * The number of seconds between automatic syncs to the diff --git a/src/config/browse-by-config.interface.ts b/projects/dspace/config/src/lib/browse-by-config.interface.ts similarity index 100% rename from src/config/browse-by-config.interface.ts rename to projects/dspace/config/src/lib/browse-by-config.interface.ts diff --git a/src/config/build-config.interface.ts b/projects/dspace/config/src/lib/build-config.interface.ts similarity index 100% rename from src/config/build-config.interface.ts rename to projects/dspace/config/src/lib/build-config.interface.ts diff --git a/src/config/bundle-config.interface.ts b/projects/dspace/config/src/lib/bundle-config.interface.ts similarity index 100% rename from src/config/bundle-config.interface.ts rename to projects/dspace/config/src/lib/bundle-config.interface.ts diff --git a/src/config/cache-config.interface.ts b/projects/dspace/config/src/lib/cache-config.interface.ts similarity index 100% rename from src/config/cache-config.interface.ts rename to projects/dspace/config/src/lib/cache-config.interface.ts diff --git a/src/config/collection-page-config.interface.ts b/projects/dspace/config/src/lib/collection-page-config.interface.ts similarity index 100% rename from src/config/collection-page-config.interface.ts rename to projects/dspace/config/src/lib/collection-page-config.interface.ts diff --git a/src/config/community-list-config.interface.ts b/projects/dspace/config/src/lib/community-list-config.interface.ts similarity index 100% rename from src/config/community-list-config.interface.ts rename to projects/dspace/config/src/lib/community-list-config.interface.ts diff --git a/src/config/community-page-config.interface.ts b/projects/dspace/config/src/lib/community-page-config.interface.ts similarity index 100% rename from src/config/community-page-config.interface.ts rename to projects/dspace/config/src/lib/community-page-config.interface.ts diff --git a/src/config/config.interface.ts b/projects/dspace/config/src/lib/config.interface.ts similarity index 100% rename from src/config/config.interface.ts rename to projects/dspace/config/src/lib/config.interface.ts diff --git a/src/config/default-app-config.ts b/projects/dspace/config/src/lib/default-app-config.ts similarity index 97% rename from src/config/default-app-config.ts rename to projects/dspace/config/src/lib/default-app-config.ts index 4dadf443c65..f3692a3fa7c 100644 --- a/src/config/default-app-config.ts +++ b/projects/dspace/config/src/lib/default-app-config.ts @@ -1,9 +1,6 @@ -import { AccessibilitySettingsConfig } from '../app/accessibility/accessibility-settings.config'; -import { AdminNotifyMetricsRow } from '../app/admin/admin-notify-dashboard/admin-notify-metrics/admin-notify-metrics.model'; -import { RestRequestMethod } from '../app/core/data/rest-request-method'; -import { LiveRegionConfig } from '../app/shared/live-region/live-region.config'; -import { NotificationAnimationsType } from '../app/shared/notifications/models/notification-animations-type'; +import { AccessibilitySettingsConfig } from './accessibility-settings.config'; import { ActuatorsConfig } from './actuators.config'; +import { AdminNotifyMetricsRow } from './admin-notify-metrics.config'; import { AppConfig } from './app-config.interface'; import { AuthConfig } from './auth-config.interfaces'; import { BrowseByConfig } from './browse-by-config.interface'; @@ -20,11 +17,16 @@ import { HomeConfig } from './homepage-config.interface'; import { InfoConfig } from './info-config.interface'; import { ItemConfig } from './item-config.interface'; import { LangConfig } from './lang-config.interface'; +import { LiveRegionConfig } from './live-region.config'; import { MarkdownConfig } from './markdown-config.interface'; import { MatomoConfig } from './matomo-config.interface'; import { MediaViewerConfig } from './media-viewer-config.interface'; -import { INotificationBoardOptions } from './notifications-config.interfaces'; +import { + INotificationBoardOptions, + NotificationAnimationsType, +} from './notifications-config.interfaces'; import { QualityAssuranceConfig } from './quality-assurance.config'; +import { RestRequestMethod } from './rest-request-method'; import { SearchConfig } from './search-page-config.interface'; import { ServerConfig } from './server-config.interface'; import { SubmissionConfig } from './submission-config.interface'; diff --git a/src/config/discovery-sort.config.ts b/projects/dspace/config/src/lib/discovery-sort.config.ts similarity index 100% rename from src/config/discovery-sort.config.ts rename to projects/dspace/config/src/lib/discovery-sort.config.ts diff --git a/src/config/filter-vocabulary-config.ts b/projects/dspace/config/src/lib/filter-vocabulary-config.ts similarity index 100% rename from src/config/filter-vocabulary-config.ts rename to projects/dspace/config/src/lib/filter-vocabulary-config.ts diff --git a/src/config/form-config.interfaces.ts b/projects/dspace/config/src/lib/form-config.interfaces.ts similarity index 100% rename from src/config/form-config.interfaces.ts rename to projects/dspace/config/src/lib/form-config.interfaces.ts diff --git a/src/config/geospatial-map-config.ts b/projects/dspace/config/src/lib/geospatial-map-config.ts similarity index 100% rename from src/config/geospatial-map-config.ts rename to projects/dspace/config/src/lib/geospatial-map-config.ts diff --git a/src/config/homepage-config.interface.ts b/projects/dspace/config/src/lib/homepage-config.interface.ts similarity index 100% rename from src/config/homepage-config.interface.ts rename to projects/dspace/config/src/lib/homepage-config.interface.ts diff --git a/projects/dspace/config/src/lib/index.ts b/projects/dspace/config/src/lib/index.ts new file mode 100644 index 00000000000..731255fc62a --- /dev/null +++ b/projects/dspace/config/src/lib/index.ts @@ -0,0 +1,42 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './accessibility-settings.config'; +export * from './actuators.config'; +export * from './admin-notify-metrics.config'; +export * from './advance-search-config.interface'; +export * from './app-config.interface'; +export * from './auth-config.interfaces'; +export * from './auto-sync-config.interface'; +export * from './browse-by-config.interface'; +export * from './build-config.interface'; +export * from './bundle-config.interface'; +export * from './cache-config.interface'; +export * from './collection-page-config.interface'; +export * from './community-list-config.interface'; +export * from './community-page-config.interface'; +export * from './config.interface'; +export * from './default-app-config'; +export * from './discovery-sort.config'; +export * from './filter-vocabulary-config'; +export * from './form-config.interfaces'; +export * from './geospatial-map-config'; +export * from './homepage-config.interface'; +export * from './info-config.interface'; +export * from './item-config.interface'; +export * from './lang-config.interface'; +export * from './live-region.config'; +export * from './markdown-config.interface'; +export * from './matomo-config.interface'; +export * from './media-viewer-config.interface'; +export * from './notifications-config.interfaces'; +export * from './quality-assurance.config'; +export * from './rest-request-method'; +export * from './search-page-config.interface'; +export * from './server-config.interface'; +export * from './ssr-config.interface'; +export * from './submission-config.interface'; +export * from './suggestion-config.interfaces'; +export * from './theme.config'; +export * from './ui-server-config.interface'; diff --git a/src/config/info-config.interface.ts b/projects/dspace/config/src/lib/info-config.interface.ts similarity index 100% rename from src/config/info-config.interface.ts rename to projects/dspace/config/src/lib/info-config.interface.ts diff --git a/src/config/item-config.interface.ts b/projects/dspace/config/src/lib/item-config.interface.ts similarity index 100% rename from src/config/item-config.interface.ts rename to projects/dspace/config/src/lib/item-config.interface.ts diff --git a/src/config/lang-config.interface.ts b/projects/dspace/config/src/lib/lang-config.interface.ts similarity index 100% rename from src/config/lang-config.interface.ts rename to projects/dspace/config/src/lib/lang-config.interface.ts diff --git a/src/app/shared/live-region/live-region.config.ts b/projects/dspace/config/src/lib/live-region.config.ts similarity index 74% rename from src/app/shared/live-region/live-region.config.ts rename to projects/dspace/config/src/lib/live-region.config.ts index e545bfd2543..05d379b8957 100644 --- a/src/app/shared/live-region/live-region.config.ts +++ b/projects/dspace/config/src/lib/live-region.config.ts @@ -1,4 +1,4 @@ -import { Config } from '../../../config/config.interface'; +import { Config } from './config.interface'; /** * Configuration interface used by the LiveRegionService diff --git a/src/config/markdown-config.interface.ts b/projects/dspace/config/src/lib/markdown-config.interface.ts similarity index 100% rename from src/config/markdown-config.interface.ts rename to projects/dspace/config/src/lib/markdown-config.interface.ts diff --git a/src/config/matomo-config.interface.ts b/projects/dspace/config/src/lib/matomo-config.interface.ts similarity index 100% rename from src/config/matomo-config.interface.ts rename to projects/dspace/config/src/lib/matomo-config.interface.ts diff --git a/src/config/media-viewer-config.interface.ts b/projects/dspace/config/src/lib/media-viewer-config.interface.ts similarity index 100% rename from src/config/media-viewer-config.interface.ts rename to projects/dspace/config/src/lib/media-viewer-config.interface.ts diff --git a/src/config/notifications-config.interfaces.ts b/projects/dspace/config/src/lib/notifications-config.interfaces.ts similarity index 51% rename from src/config/notifications-config.interfaces.ts rename to projects/dspace/config/src/lib/notifications-config.interfaces.ts index e57907c1bf7..6b63a411a2c 100644 --- a/src/config/notifications-config.interfaces.ts +++ b/projects/dspace/config/src/lib/notifications-config.interfaces.ts @@ -1,6 +1,20 @@ -import { NotificationAnimationsType } from '../app/shared/notifications/models/notification-animations-type'; import { Config } from './config.interface'; +export enum NotificationAnimationsType { + Fade = 'fade', + FromTop = 'fromTop', + FromRight = 'fromRight', + FromBottom = 'fromBottom', + FromLeft = 'fromLeft', + Rotate = 'rotate', + Scale = 'scale' +} + +export enum NotificationAnimationsStatus { + In = 'In', + Out = 'Out' +} + export interface INotificationBoardOptions extends Config { rtl: boolean; position: ['top' | 'bottom' | 'middle', 'right' | 'left' | 'center']; diff --git a/src/config/quality-assurance.config.ts b/projects/dspace/config/src/lib/quality-assurance.config.ts similarity index 100% rename from src/config/quality-assurance.config.ts rename to projects/dspace/config/src/lib/quality-assurance.config.ts diff --git a/src/app/core/data/rest-request-method.ts b/projects/dspace/config/src/lib/rest-request-method.ts similarity index 100% rename from src/app/core/data/rest-request-method.ts rename to projects/dspace/config/src/lib/rest-request-method.ts diff --git a/src/config/search-page-config.interface.ts b/projects/dspace/config/src/lib/search-page-config.interface.ts similarity index 100% rename from src/config/search-page-config.interface.ts rename to projects/dspace/config/src/lib/search-page-config.interface.ts diff --git a/src/config/server-config.interface.ts b/projects/dspace/config/src/lib/server-config.interface.ts similarity index 100% rename from src/config/server-config.interface.ts rename to projects/dspace/config/src/lib/server-config.interface.ts diff --git a/src/config/ssr-config.interface.ts b/projects/dspace/config/src/lib/ssr-config.interface.ts similarity index 100% rename from src/config/ssr-config.interface.ts rename to projects/dspace/config/src/lib/ssr-config.interface.ts diff --git a/src/config/submission-config.interface.ts b/projects/dspace/config/src/lib/submission-config.interface.ts similarity index 100% rename from src/config/submission-config.interface.ts rename to projects/dspace/config/src/lib/submission-config.interface.ts diff --git a/src/config/suggestion-config.interfaces.ts b/projects/dspace/config/src/lib/suggestion-config.interfaces.ts similarity index 100% rename from src/config/suggestion-config.interfaces.ts rename to projects/dspace/config/src/lib/suggestion-config.interfaces.ts diff --git a/src/config/theme.config.ts b/projects/dspace/config/src/lib/theme.config.ts similarity index 96% rename from src/config/theme.config.ts rename to projects/dspace/config/src/lib/theme.config.ts index 7989dc3af9d..c29566cb990 100644 --- a/src/config/theme.config.ts +++ b/projects/dspace/config/src/lib/theme.config.ts @@ -49,3 +49,4 @@ export type ThemeConfig | RegExThemeConfig | HandleThemeConfig | UUIDThemeConfig; +export const BASE_THEME_NAME = 'base'; diff --git a/src/config/ui-server-config.interface.ts b/projects/dspace/config/src/lib/ui-server-config.interface.ts similarity index 100% rename from src/config/ui-server-config.interface.ts rename to projects/dspace/config/src/lib/ui-server-config.interface.ts diff --git a/projects/dspace/config/src/package.json b/projects/dspace/config/src/package.json new file mode 100644 index 00000000000..fe914572464 --- /dev/null +++ b/projects/dspace/config/src/package.json @@ -0,0 +1,14 @@ +{ + "name": "src", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://git.atmire.com/contributions/dspace-angular.git" + }, + "private": true +} diff --git a/projects/dspace/config/src/public-api.ts b/projects/dspace/config/src/public-api.ts new file mode 100644 index 00000000000..335ad71fc00 --- /dev/null +++ b/projects/dspace/config/src/public-api.ts @@ -0,0 +1,5 @@ +/* + * Public API Surface of config + */ + +export * from './lib/index'; diff --git a/projects/dspace/config/tsconfig.lib.json b/projects/dspace/config/tsconfig.lib.json new file mode 100644 index 00000000000..94deb0fca03 --- /dev/null +++ b/projects/dspace/config/tsconfig.lib.json @@ -0,0 +1,16 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "../../../out-tsc/lib", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": ["node"], + "moduleResolution": "node" + }, + "exclude": [ + "**/*.spec.ts" + ] +} diff --git a/projects/dspace/config/tsconfig.lib.prod.json b/projects/dspace/config/tsconfig.lib.prod.json new file mode 100644 index 00000000000..9215caac46f --- /dev/null +++ b/projects/dspace/config/tsconfig.lib.prod.json @@ -0,0 +1,11 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "compilationMode": "partial" + } +} diff --git a/projects/dspace/config/tsconfig.spec.json b/projects/dspace/config/tsconfig.spec.json new file mode 100644 index 00000000000..35d15edba86 --- /dev/null +++ b/projects/dspace/config/tsconfig.spec.json @@ -0,0 +1,15 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "../../../out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "include": [ + "**/*.spec.ts", + "**/*.d.ts" + ] +} diff --git a/projects/dspace/core/.eslintrc.json b/projects/dspace/core/.eslintrc.json new file mode 100644 index 00000000000..44dec8160fa --- /dev/null +++ b/projects/dspace/core/.eslintrc.json @@ -0,0 +1,42 @@ +{ + "extends": "../../../.eslintrc.json", + "ignorePatterns": [ + "!**/*" + ], + "overrides": [ + { + "files": [ + "*.ts" + ], + "parserOptions": { + "project": [ + "projects/dspace/core/tsconfig.(lib|spec).json" + ] + }, + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "lib", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "lib", + "style": "kebab-case" + } + ] + } + }, + { + "files": [ + "*.html" + ], + "rules": {} + } + ] +} diff --git a/projects/dspace/core/README.md b/projects/dspace/core/README.md new file mode 100644 index 00000000000..03867b16c90 --- /dev/null +++ b/projects/dspace/core/README.md @@ -0,0 +1,24 @@ +# Core + +This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.2.0. + +## Code scaffolding + +Run `ng generate component component-name --project core` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project core`. +> Note: Don't forget to add `--project core` or else it will be added to the default project in your `angular.json` file. + +## Build + +Run `ng build core` to build the project. The build artifacts will be stored in the `dist/` directory. + +## Publishing + +After building your library with `ng build core`, go to the dist folder `cd dist/core` and run `npm publish`. + +## Running unit tests + +Run `ng test core` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page. diff --git a/projects/dspace/core/ng-package.json b/projects/dspace/core/ng-package.json new file mode 100644 index 00000000000..ae83a608308 --- /dev/null +++ b/projects/dspace/core/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../../dist/dspace/core", + "lib": { + "entryFile": "src/public-api.ts" + } +} \ No newline at end of file diff --git a/projects/dspace/core/package.json b/projects/dspace/core/package.json new file mode 100644 index 00000000000..efdc8030703 --- /dev/null +++ b/projects/dspace/core/package.json @@ -0,0 +1,12 @@ +{ + "name": "@dspace/core", + "version": "0.0.1", + "peerDependencies": { + "@angular/common": "^18.2.0", + "@angular/core": "^18.2.0" + }, + "dependencies": { + "tslib": "^2.3.0" + }, + "sideEffects": false +} diff --git a/src/app/core/auth/access-token.resolver.ts b/projects/dspace/core/src/lib/auth/access-token.resolver.ts similarity index 89% rename from src/app/core/auth/access-token.resolver.ts rename to projects/dspace/core/src/lib/auth/access-token.resolver.ts index a0646d72e89..e0b48f1e127 100644 --- a/src/app/core/auth/access-token.resolver.ts +++ b/projects/dspace/core/src/lib/auth/access-token.resolver.ts @@ -1,18 +1,12 @@ import { inject } from '@angular/core'; -import { - ResolveFn, - Router, -} from '@angular/router'; +import { ResolveFn, Router } from '@angular/router'; +import { hasValue } from '@dspace/utils'; import { Observable } from 'rxjs'; -import { - map, - tap, -} from 'rxjs/operators'; +import { map, tap } from 'rxjs/operators'; -import { getForbiddenRoute } from '../../app-routing-paths'; -import { hasValue } from '../../shared/empty.util'; import { ItemRequestDataService } from '../data/item-request-data.service'; import { RemoteData } from '../data/remote-data'; +import { getForbiddenRoute } from '../router/core-routing-paths'; import { redirectOn4xx } from '../shared/authorized.operators'; import { ItemRequest } from '../shared/item-request.model'; import { diff --git a/src/app/core/auth/auth-blocking.guard.spec.ts b/projects/dspace/core/src/lib/auth/auth-blocking.guard.spec.ts similarity index 78% rename from src/app/core/auth/auth-blocking.guard.spec.ts rename to projects/dspace/core/src/lib/auth/auth-blocking.guard.spec.ts index 295e5b1e751..cf5e72fc996 100644 --- a/src/app/core/auth/auth-blocking.guard.spec.ts +++ b/projects/dspace/core/src/lib/auth/auth-blocking.guard.spec.ts @@ -1,29 +1,17 @@ -import { - TestBed, - waitForAsync, -} from '@angular/core/testing'; -import { - Store, - StoreModule, -} from '@ngrx/store'; -import { - MockStore, - provideMockStore, -} from '@ngrx/store/testing'; +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { Store, StoreModule } from '@ngrx/store'; +import { MockStore, provideMockStore } from '@ngrx/store/testing'; import { cold } from 'jasmine-marbles'; -import { - AppState, - storeModuleConfig, -} from '../../app.reducer'; +import { CoreState } from '../core-state.model'; import { authReducer } from './auth.reducer'; import { authBlockingGuard } from './auth-blocking.guard'; describe('authBlockingGuard', () => { let guard: any; let initialState; - let store: Store; - let mockStore: MockStore; + let store: Store; + let mockStore: MockStore; initialState = { core: { @@ -37,10 +25,17 @@ describe('authBlockingGuard', () => { }, }; + const mockStoreModuleConfig = { + runtimeChecks: { + strictStateImmutability: true, + strictActionImmutability: true, + }, + }; + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ - StoreModule.forRoot(authReducer, storeModuleConfig), + StoreModule.forRoot(authReducer, mockStoreModuleConfig), ], providers: [ provideMockStore({ initialState }), @@ -51,7 +46,7 @@ describe('authBlockingGuard', () => { beforeEach(() => { store = TestBed.inject(Store); - mockStore = store as MockStore; + mockStore = store as MockStore; guard = authBlockingGuard; }); diff --git a/src/app/core/auth/auth-blocking.guard.ts b/projects/dspace/core/src/lib/auth/auth-blocking.guard.ts similarity index 66% rename from src/app/core/auth/auth-blocking.guard.ts rename to projects/dspace/core/src/lib/auth/auth-blocking.guard.ts index c76480ec0d2..33ff0139328 100644 --- a/src/app/core/auth/auth-blocking.guard.ts +++ b/projects/dspace/core/src/lib/auth/auth-blocking.guard.ts @@ -1,22 +1,10 @@ import { inject } from '@angular/core'; -import { - ActivatedRouteSnapshot, - CanActivateFn, - RouterStateSnapshot, -} from '@angular/router'; -import { - select, - Store, -} from '@ngrx/store'; +import { ActivatedRouteSnapshot, CanActivateFn, RouterStateSnapshot } from '@angular/router'; +import { select, Store } from '@ngrx/store'; import { Observable } from 'rxjs'; -import { - distinctUntilChanged, - filter, - map, - take, -} from 'rxjs/operators'; +import { distinctUntilChanged, filter, map, take } from 'rxjs/operators'; -import { AppState } from '../../app.reducer'; +import { CoreState } from '../core-state.model'; import { isAuthenticationBlocking } from './selectors'; /** @@ -27,7 +15,7 @@ import { isAuthenticationBlocking } from './selectors'; export const authBlockingGuard: CanActivateFn = ( route: ActivatedRouteSnapshot, state: RouterStateSnapshot, - store: Store = inject(Store), + store: Store = inject(Store), ): Observable => { return store.pipe(select(isAuthenticationBlocking)).pipe( map((isBlocking: boolean) => isBlocking === false), diff --git a/src/app/core/auth/auth-request.service.spec.ts b/projects/dspace/core/src/lib/auth/auth-request.service.spec.ts similarity index 97% rename from src/app/core/auth/auth-request.service.spec.ts rename to projects/dspace/core/src/lib/auth/auth-request.service.spec.ts index b7cb8557e42..39b4db67a93 100644 --- a/src/app/core/auth/auth-request.service.spec.ts +++ b/projects/dspace/core/src/lib/auth/auth-request.service.spec.ts @@ -1,17 +1,14 @@ -import { - Observable, - of, -} from 'rxjs'; +import { RestRequestMethod } from '@dspace/config'; +import { Observable, of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { createSuccessfulRemoteDataObject } from '../../shared/remote-data.utils'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RemoteData } from '../data/remote-data'; import { PostRequest } from '../data/request.models'; import { RequestService } from '../data/request.service'; -import { RestRequestMethod } from '../data/rest-request-method'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; +import { createSuccessfulRemoteDataObject } from '../utilities/remote-data.utils'; import { AuthRequestService } from './auth-request.service'; import { AuthStatus } from './models/auth-status.model'; import { ShortLivedToken } from './models/short-lived-token.model'; diff --git a/src/app/core/auth/auth-request.service.ts b/projects/dspace/core/src/lib/auth/auth-request.service.ts similarity index 94% rename from src/app/core/auth/auth-request.service.ts rename to projects/dspace/core/src/lib/auth/auth-request.service.ts index 3d94e33668f..4f18c812ade 100644 --- a/src/app/core/auth/auth-request.service.ts +++ b/projects/dspace/core/src/lib/auth/auth-request.service.ts @@ -1,24 +1,14 @@ +import { isNotEmpty } from '@dspace/utils'; import { Observable } from 'rxjs'; -import { - distinctUntilChanged, - filter, - map, - switchMap, - take, - tap, -} from 'rxjs/operators'; - -import { isNotEmpty } from '../../shared/empty.util'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; +import { distinctUntilChanged, filter, map, switchMap, take, tap } from 'rxjs/operators'; + import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RemoteData } from '../data/remote-data'; -import { - GetRequest, - PostRequest, -} from '../data/request.models'; +import { GetRequest, PostRequest } from '../data/request.models'; import { RequestService } from '../data/request.service'; import { RestRequest } from '../data/rest-request.model'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { getFirstCompletedRemoteData } from '../shared/operators'; import { URLCombiner } from '../url-combiner/url-combiner'; diff --git a/src/app/core/auth/auth.actions.ts b/projects/dspace/core/src/lib/auth/auth.actions.ts similarity index 99% rename from src/app/core/auth/auth.actions.ts rename to projects/dspace/core/src/lib/auth/auth.actions.ts index 03b6bc11910..ece85975079 100644 --- a/src/app/core/auth/auth.actions.ts +++ b/projects/dspace/core/src/lib/auth/auth.actions.ts @@ -1,9 +1,9 @@ /* eslint-disable max-classes-per-file */ // import @ngrx +// import type function import { Action } from '@ngrx/store'; -// import type function -import { type } from '../../shared/ngrx/type'; +import { type } from '../ngrx/type'; import { AuthMethod } from './models/auth.method'; import { AuthStatus } from './models/auth-status.model'; // import models diff --git a/src/app/core/auth/auth.effects.spec.ts b/projects/dspace/core/src/lib/auth/auth.effects.spec.ts similarity index 94% rename from src/app/core/auth/auth.effects.spec.ts rename to projects/dspace/core/src/lib/auth/auth.effects.spec.ts index 733efd6a014..cad8fda8436 100644 --- a/src/app/core/auth/auth.effects.spec.ts +++ b/projects/dspace/core/src/lib/auth/auth.effects.spec.ts @@ -1,38 +1,16 @@ -import { - fakeAsync, - TestBed, - tick, -} from '@angular/core/testing'; +import { fakeAsync, TestBed, tick } from '@angular/core/testing'; +import { APP_CONFIG } from '@dspace/config'; import { provideMockActions } from '@ngrx/effects/testing'; -import { - Store, - StoreModule, -} from '@ngrx/store'; -import { - MockStore, - provideMockStore, -} from '@ngrx/store/testing'; -import { - cold, - hot, -} from 'jasmine-marbles'; -import { - Observable, - of, - throwError as observableThrow, -} from 'rxjs'; +import { Store, StoreModule } from '@ngrx/store'; +import { MockStore, provideMockStore } from '@ngrx/store/testing'; +import { cold, hot } from 'jasmine-marbles'; +import { Observable, of, throwError as observableThrow } from 'rxjs'; -import { - AppState, - storeModuleConfig, -} from '../../app.reducer'; -import { - authMethodsMock, - AuthServiceStub, -} from '../../shared/testing/auth-service.stub'; -import { EPersonMock } from '../../shared/testing/eperson.mock'; -import { StoreActionTypes } from '../../store.actions'; +import { CoreState } from '../core-state.model'; import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service'; +import { StoreActionTypes } from '../ngrx/type'; +import { authMethodsMock, AuthServiceStub } from '../testing/auth-service.stub'; +import { EPersonMock } from '../testing/eperson.mock'; import { AuthActionTypes, AuthenticatedAction, @@ -57,10 +35,7 @@ import { AuthEffects } from './auth.effects'; import { authReducer } from './auth.reducer'; import { AuthService } from './auth.service'; import { AuthStatus } from './models/auth-status.model'; -import { - isAuthenticated, - isAuthenticatedLoaded, -} from './selectors'; +import { isAuthenticated, isAuthenticatedLoaded } from './selectors'; describe('AuthEffects', () => { let authEffects: AuthEffects; @@ -68,10 +43,17 @@ describe('AuthEffects', () => { let authServiceStub; let initialState; let token; - let store: MockStore; + let store: MockStore; const authorizationService = jasmine.createSpyObj(['invalidateAuthorizationsRequestCache']); + const mockStoreModuleConfig = { + runtimeChecks: { + strictStateImmutability: true, + strictActionImmutability: true, + }, + }; + function init() { authServiceStub = new AuthServiceStub(); token = authServiceStub.getToken(); @@ -91,15 +73,15 @@ describe('AuthEffects', () => { init(); TestBed.configureTestingModule({ imports: [ - StoreModule.forRoot({ auth: authReducer }, storeModuleConfig), + StoreModule.forRoot({ auth: authReducer }, mockStoreModuleConfig), ], providers: [ AuthEffects, provideMockStore({ initialState }), { provide: AuthorizationDataService, useValue: authorizationService }, { provide: AuthService, useValue: authServiceStub }, + { provide: APP_CONFIG, useValue: {} }, provideMockActions(() => actions), - // other providers ], }); diff --git a/src/app/core/auth/auth.effects.ts b/projects/dspace/core/src/lib/auth/auth.effects.ts similarity index 93% rename from src/app/core/auth/auth.effects.ts rename to projects/dspace/core/src/lib/auth/auth.effects.ts index 05f8c597033..db5631da438 100644 --- a/src/app/core/auth/auth.effects.ts +++ b/projects/dspace/core/src/lib/auth/auth.effects.ts @@ -1,19 +1,9 @@ -import { - Injectable, - NgZone, - Type, -} from '@angular/core'; +import { inject, Injectable, NgZone, Type } from '@angular/core'; +import { APP_CONFIG, AppConfig } from '@dspace/config'; +import { hasValue } from '@dspace/utils'; // import @ngrx -import { - Actions, - createEffect, - ofType, -} from '@ngrx/effects'; -import { - Action, - select, - Store, -} from '@ngrx/store'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; +import { Action, select, Store } from '@ngrx/store'; import { asyncScheduler, combineLatest as observableCombineLatest, @@ -22,24 +12,14 @@ import { queueScheduler, timer, } from 'rxjs'; -import { - catchError, - filter, - map, - observeOn, - switchMap, - take, - tap, -} from 'rxjs/operators'; +import { catchError, filter, map, observeOn, switchMap, take, tap } from 'rxjs/operators'; -import { environment } from '../../../environments/environment'; -import { AppState } from '../../app.reducer'; -import { hasValue } from '../../shared/empty.util'; -import { NotificationsActionTypes } from '../../shared/notifications/notifications.actions'; -import { StoreActionTypes } from '../../store.actions'; +import { CoreState } from '../core-state.model'; import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service'; import { RequestActionTypes } from '../data/request.actions'; import { EPerson } from '../eperson/models/eperson.model'; +import { StoreActionTypes } from '../ngrx/type'; +import { NotificationsActionTypes } from '../notification-system/notifications.actions'; import { EnterZoneScheduler } from '../utilities/enter-zone.scheduler'; import { LeaveZoneScheduler } from '../utilities/leave-zone.scheduler'; // import actions @@ -73,10 +53,7 @@ import { AuthService } from './auth.service'; import { AuthMethod } from './models/auth.method'; import { AuthStatus } from './models/auth-status.model'; import { AuthTokenInfo } from './models/auth-token-info.model'; -import { - isAuthenticated, - isAuthenticatedLoaded, -} from './selectors'; +import { isAuthenticated, isAuthenticatedLoaded } from './selectors'; // Action Types that do not break/prevent the user from an idle state const IDLE_TIMER_IGNORE_TYPES: string[] @@ -95,7 +72,7 @@ export function errorToAuthAction$(a @Injectable() export class AuthEffects { - + private readonly appConfig: AppConfig = inject(APP_CONFIG); /** * Authenticate user. * @method authenticate @@ -303,7 +280,7 @@ export class AuthEffects { // in, and start a new timer switchMap(() => // Start a timer outside of Angular's zone - timer(environment.auth.ui.timeUntilIdle, new LeaveZoneScheduler(this.zone, asyncScheduler)), + timer(this.appConfig.auth.ui.timeUntilIdle, new LeaveZoneScheduler(this.zone, asyncScheduler)), ), // Re-enter the zone to dispatch the action observeOn(new EnterZoneScheduler(this.zone, queueScheduler)), @@ -322,6 +299,6 @@ export class AuthEffects { private zone: NgZone, private authorizationsService: AuthorizationDataService, private authService: AuthService, - private store: Store) { + private store: Store) { } } diff --git a/src/app/core/auth/auth.interceptor.spec.ts b/projects/dspace/core/src/lib/auth/auth.interceptor.spec.ts similarity index 84% rename from src/app/core/auth/auth.interceptor.spec.ts rename to projects/dspace/core/src/lib/auth/auth.interceptor.spec.ts index 7dda807c58b..c3b5959dd7b 100644 --- a/src/app/core/auth/auth.interceptor.spec.ts +++ b/projects/dspace/core/src/lib/auth/auth.interceptor.spec.ts @@ -3,20 +3,15 @@ import { provideHttpClient, withInterceptorsFromDi, } from '@angular/common/http'; -import { - HttpTestingController, - provideHttpClientTesting, -} from '@angular/common/http/testing'; +import { HttpTestingController, provideHttpClientTesting } from '@angular/common/http/testing'; import { TestBed } from '@angular/core/testing'; import { Router } from '@angular/router'; -import { Store } from '@ngrx/store'; -import { of } from 'rxjs'; +import { RestRequestMethod } from '@dspace/config'; +import { provideMockStore } from '@ngrx/store/testing'; -import { AuthServiceStub } from '../../shared/testing/auth-service.stub'; -import { RouterStub } from '../../shared/testing/router.stub'; -import { TruncatablesState } from '../../shared/truncatable/truncatable.reducer'; -import { RestRequestMethod } from '../data/rest-request-method'; import { DspaceRestService } from '../dspace-rest/dspace-rest.service'; +import { AuthServiceStub } from '../testing/auth-service.stub'; +import { RouterStub } from '../testing/router.stub'; import { AuthInterceptor } from './auth.interceptor'; import { AuthService } from './auth.service'; @@ -25,10 +20,6 @@ describe(`AuthInterceptor`, () => { let httpMock: HttpTestingController; const authServiceStub = new AuthServiceStub(); - const store: Store = jasmine.createSpyObj('store', { - dispatch: {}, - select: of(true), - }); beforeEach(() => { TestBed.configureTestingModule({ @@ -42,7 +33,7 @@ describe(`AuthInterceptor`, () => { useClass: AuthInterceptor, multi: true, }, - { provide: Store, useValue: store }, + provideMockStore({}), provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting(), ], diff --git a/src/app/core/auth/auth.interceptor.ts b/projects/dspace/core/src/lib/auth/auth.interceptor.ts similarity index 96% rename from src/app/core/auth/auth.interceptor.ts rename to projects/dspace/core/src/lib/auth/auth.interceptor.ts index e61b1180e1f..38b3f6fce75 100644 --- a/src/app/core/auth/auth.interceptor.ts +++ b/projects/dspace/core/src/lib/auth/auth.interceptor.ts @@ -8,28 +8,14 @@ import { HttpResponse, HttpResponseBase, } from '@angular/common/http'; -import { - Injectable, - Injector, -} from '@angular/core'; +import { Injectable, Injector } from '@angular/core'; import { Router } from '@angular/router'; +import { hasValue, isNotEmpty, isNotNull } from '@dspace/utils'; import { Store } from '@ngrx/store'; -import { - Observable, - of, - throwError as observableThrowError, -} from 'rxjs'; -import { - catchError, - map, -} from 'rxjs/operators'; +import { Observable, of, throwError as observableThrowError } from 'rxjs'; +import { catchError, map } from 'rxjs/operators'; -import { AppState } from '../../app.reducer'; -import { - hasValue, - isNotEmpty, - isNotNull, -} from '../../shared/empty.util'; +import { CoreState } from '../core-state.model'; import { RedirectWhenTokenExpiredAction } from './auth.actions'; import { AuthService } from './auth.service'; import { AuthMethod } from './models/auth.method'; @@ -45,7 +31,7 @@ export class AuthInterceptor implements HttpInterceptor { // we're creating a refresh token request list protected refreshTokenRequestUrls = []; - constructor(private inj: Injector, private router: Router, private store: Store) { + constructor(private inj: Injector, private router: Router, private store: Store) { } /** diff --git a/src/app/core/auth/auth.reducer.spec.ts b/projects/dspace/core/src/lib/auth/auth.reducer.spec.ts similarity index 99% rename from src/app/core/auth/auth.reducer.spec.ts rename to projects/dspace/core/src/lib/auth/auth.reducer.spec.ts index 7860744aa5b..bcb2a4a0c8e 100644 --- a/src/app/core/auth/auth.reducer.spec.ts +++ b/projects/dspace/core/src/lib/auth/auth.reducer.spec.ts @@ -1,4 +1,4 @@ -import { EPersonMock } from '../../shared/testing/eperson.mock'; +import { EPersonMock } from '../testing/eperson.mock'; import { AddAuthenticationMessageAction, AuthenticateAction, @@ -28,10 +28,7 @@ import { SetUserAsIdleAction, UnsetUserAsIdleAction, } from './auth.actions'; -import { - authReducer, - AuthState, -} from './auth.reducer'; +import { authReducer, AuthState } from './auth.reducer'; import { AuthMethod } from './models/auth.method'; import { AuthMethodType } from './models/auth.method-type'; import { AuthStatus } from './models/auth-status.model'; diff --git a/src/app/core/auth/auth.reducer.ts b/projects/dspace/core/src/lib/auth/auth.reducer.ts similarity index 99% rename from src/app/core/auth/auth.reducer.ts rename to projects/dspace/core/src/lib/auth/auth.reducer.ts index 8a399710eae..25dda850326 100644 --- a/src/app/core/auth/auth.reducer.ts +++ b/projects/dspace/core/src/lib/auth/auth.reducer.ts @@ -1,5 +1,5 @@ // import actions -import { StoreActionTypes } from '../../store.actions'; +import { StoreActionTypes } from '../ngrx/type'; import { AddAuthenticationMessageAction, AuthActions, diff --git a/src/app/core/auth/auth.service.spec.ts b/projects/dspace/core/src/lib/auth/auth.service.spec.ts similarity index 73% rename from src/app/core/auth/auth.service.spec.ts rename to projects/dspace/core/src/lib/auth/auth.service.spec.ts index 94a8bb2cb1f..7c31fc28fea 100644 --- a/src/app/core/auth/auth.service.spec.ts +++ b/projects/dspace/core/src/lib/auth/auth.service.spec.ts @@ -1,68 +1,43 @@ import { CommonModule } from '@angular/common'; -import { - inject, - TestBed, - waitForAsync, -} from '@angular/core/testing'; -import { - ActivatedRoute, - Router, -} from '@angular/router'; -import { - Store, - StoreModule, -} from '@ngrx/store'; +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { ActivatedRoute, Router } from '@angular/router'; +import { APP_CONFIG } from '@dspace/config'; +import { Store, StoreModule } from '@ngrx/store'; +import { MockStore, provideMockStore } from '@ngrx/store/testing'; import { TranslateService } from '@ngx-translate/core'; import { cold } from 'jasmine-marbles'; -import { - Observable, - of, -} from 'rxjs'; - -import { REQUEST } from '../../../express.tokens'; -import { AppState } from '../../app.reducer'; -import { getMockTranslateService } from '../../shared/mocks/translate.service.mock'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; -import { ActivatedRouteStub } from '../../shared/testing/active-router.stub'; -import { AuthRequestServiceStub } from '../../shared/testing/auth-request-service.stub'; -import { authMethodsMock } from '../../shared/testing/auth-service.stub'; -import { EPersonMock } from '../../shared/testing/eperson.mock'; -import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub'; -import { routeServiceStub } from '../../shared/testing/route-service.stub'; -import { RouterStub } from '../../shared/testing/router.stub'; -import { - SpecialGroupDataMock, - SpecialGroupDataMock$, -} from '../../shared/testing/special-group.mock'; +import { Observable, of } from 'rxjs'; + +import { REQUEST } from '../tokens/express.tokens'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; +import { ClientCookieService } from '../cookies/client-cookie.service'; +import { CookieService } from '../cookies/cookie.service'; +import { CoreState } from '../core-state.model'; import { RemoteData } from '../data/remote-data'; import { EPersonDataService } from '../eperson/eperson-data.service'; import { EPerson } from '../eperson/models/eperson.model'; -import { ClientCookieService } from '../services/client-cookie.service'; -import { CookieService } from '../services/cookie.service'; +import { NotificationsService } from '../notification-system/notifications.service'; import { HardRedirectService } from '../services/hard-redirect.service'; import { RouteService } from '../services/route.service'; -import { - NativeWindowRef, - NativeWindowService, -} from '../services/window.service'; -import { - SetUserAsIdleAction, - UnsetUserAsIdleAction, -} from './auth.actions'; -import { - authReducer, - AuthState, -} from './auth.reducer'; -import { - AuthService, - IMPERSONATING_COOKIE, -} from './auth.service'; +import { NativeWindowRef, NativeWindowService } from '../services/window.service'; +import { ActivatedRouteStub } from '../testing/active-router.stub'; +import { AuthRequestServiceStub } from '../testing/auth-request-service.stub'; +import { authMethodsMock } from '../testing/auth-service.stub'; +import { EPersonMock } from '../testing/eperson.mock'; +import { NotificationsServiceStub } from '../testing/notifications-service.stub'; +import { routeServiceStub } from '../testing/route-service.stub'; +import { RouterStub } from '../testing/router.stub'; +import { SpecialGroupDataMock, SpecialGroupDataMock$ } from '../testing/special-group.mock'; +import { getMockTranslateService } from '../testing/translate.service.mock'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; +import { SetUserAsIdleAction, UnsetUserAsIdleAction } from './auth.actions'; +import { authReducer } from './auth.reducer'; +import { AuthService, IMPERSONATING_COOKIE } from './auth.service'; import { AuthRequestService } from './auth-request.service'; import { AuthMethod } from './models/auth.method'; import { AuthStatus } from './models/auth-status.model'; import { AuthTokenInfo } from './models/auth-token-info.model'; +import { getAuthenticationToken, isAuthenticated, isIdle } from './selectors'; describe('AuthService test', () => { @@ -72,7 +47,7 @@ describe('AuthService test', () => { }, }; - let mockStore: Store; + let mockStore: MockStore; let authService: AuthService; let routeServiceMock: RouteService; let authRequest; @@ -86,6 +61,27 @@ describe('AuthService test', () => { let idleState; let linkService; let hardRedirectService; + const dateOfTest = Date.now(); + const envConfig = { + auth: { + rest: { + timeLeftBeforeTokenRefresh: 20000, // 20 sec + }, + }, + }; + + const initialState: any = { + core: { + auth: { + authenticated: true, + loaded: true, + loading: false, + authToken: undefined, + user: undefined, + idle: false, + }, + }, + }; const AuthStatusWithSpecialGroups = Object.assign(new AuthStatus(), { uuid: 'test', @@ -95,14 +91,10 @@ describe('AuthService test', () => { }); function init() { - mockStore = jasmine.createSpyObj('store', { - dispatch: {}, - pipe: of(true), - }); window = new NativeWindowRef(); routerStub = new RouterStub(); token = new AuthTokenInfo('test_token'); - token.expires = Date.now() + (1000 * 60 * 60); + token.expires = dateOfTest + (1000 * 60 * 60); authenticatedState = { authenticated: true, loaded: true, @@ -134,12 +126,12 @@ describe('AuthService test', () => { }; hardRedirectService = jasmine.createSpyObj('hardRedirectService', ['redirect']); spyOn(linkService, 'resolveLinks').and.returnValue({ authenticated: true, eperson: of({ payload: {} }) }); - } describe('', () => { beforeEach(() => { init(); + initialState.core.auth = authenticatedState; TestBed.configureTestingModule({ imports: [ CommonModule, @@ -151,13 +143,14 @@ describe('AuthService test', () => { }), ], providers: [ + provideMockStore({ initialState }), { provide: AuthRequestService, useValue: authRequest }, { provide: NativeWindowService, useValue: window }, { provide: REQUEST, useValue: {} }, + { provide: APP_CONFIG, useValue: envConfig }, { provide: Router, useValue: routerStub }, { provide: RouteService, useValue: routeServiceStub }, { provide: ActivatedRoute, useValue: routeStub }, - { provide: Store, useValue: mockStore }, { provide: EPersonDataService, useValue: mockEpersonDataService }, { provide: HardRedirectService, useValue: hardRedirectService }, { provide: NotificationsService, useValue: NotificationsServiceStub }, @@ -167,6 +160,8 @@ describe('AuthService test', () => { ], }); authService = TestBed.inject(AuthService); + mockStore = TestBed.inject(Store) as MockStore; + mockStore.setState(initialState); }); it('should return the authentication status object when user credentials are correct', () => { @@ -237,21 +232,17 @@ describe('AuthService test', () => { }); describe('setIdle true', () => { - beforeEach(() => { - authService.setIdle(true); - }); - it('store should dispatch SetUserAsIdleAction', () => { + spyOn(mockStore, 'dispatch'); + authService.setIdle(true); expect(mockStore.dispatch).toHaveBeenCalledWith(new SetUserAsIdleAction()); }); }); describe('setIdle false', () => { - beforeEach(() => { - authService.setIdle(false); - }); - it('store should dispatch UnsetUserAsIdleAction', () => { + spyOn(mockStore, 'dispatch'); + authService.setIdle(false); expect(mockStore.dispatch).toHaveBeenCalledWith(new UnsetUserAsIdleAction()); }); }); @@ -261,6 +252,7 @@ describe('AuthService test', () => { beforeEach(waitForAsync(() => { init(); + initialState.core.auth = authenticatedState; TestBed.configureTestingModule({ imports: [ StoreModule.forRoot({ authReducer }, { @@ -271,47 +263,57 @@ describe('AuthService test', () => { }), ], providers: [ + provideMockStore({ initialState }), { provide: AuthRequestService, useValue: authRequest }, + { provide: NativeWindowService, useValue: window }, { provide: REQUEST, useValue: {} }, + { provide: APP_CONFIG, useValue: envConfig }, { provide: Router, useValue: routerStub }, { provide: RouteService, useValue: routeServiceStub }, - { provide: RemoteDataBuildService, useValue: linkService }, + { provide: ActivatedRoute, useValue: routeStub }, + { provide: EPersonDataService, useValue: mockEpersonDataService }, + { provide: HardRedirectService, useValue: hardRedirectService }, + { provide: NotificationsService, useValue: NotificationsServiceStub }, + { provide: TranslateService, useValue: getMockTranslateService() }, CookieService, AuthService, ], }).compileComponents(); })); - beforeEach(inject([CookieService, AuthRequestService, Store, Router, RouteService], (cookieService: CookieService, authReqService: AuthRequestService, store: Store, router: Router, routeService: RouteService, notificationsService: NotificationsService, translateService: TranslateService) => { - store - .subscribe((state) => { - (state as any).core = Object.create({}); - (state as any).core.auth = authenticatedState; - }); - authService = new AuthService(window, authReqService, mockEpersonDataService, router, routeService, cookieService, store, hardRedirectService, notificationsService, translateService); - })); + beforeEach(() => { + mockStore = TestBed.inject(MockStore); + authService = TestBed.inject(AuthService); + mockStore.overrideSelector(isAuthenticated, true); + mockStore.refreshState(); + storage = (authService as any).storage; + storage.get = jasmine.createSpy().and.returnValue(null); + }); - it('should return true when user is logged in', () => { + it('should return true when user is logged in', (done) => { authService.isAuthenticated().subscribe((status: boolean) => { expect(status).toBe(true); + done(); }); }); - it('should return the shortlived token when user is logged in', () => { + it('should return the shortlived token when user is logged in', (done) => { authService.getShortlivedToken().subscribe((shortlivedToken: string) => { expect(shortlivedToken).toEqual(authRequest.mockShortLivedToken); + done(); }); }); - it('should return token object when it is valid', () => { + it('should return token object when it is valid', (done) => { authService.hasValidAuthenticationToken().subscribe((tokenState: AuthTokenInfo) => { - expect(tokenState).toBe(token); + expect(tokenState).toEqual(token); + done(); }); }); it('should return a token object', () => { const result = authService.getToken(); - expect(result).toBe(token); + expect(result).toEqual(token); }); it('should return false when token is not expired', () => { @@ -319,15 +321,17 @@ describe('AuthService test', () => { expect(result).toBe(false); }); - it('should return true when authentication is loaded', () => { + it('should return true when authentication is loaded', (done) => { authService.isAuthenticationLoaded().subscribe((status: boolean) => { expect(status).toBe(true); + done(); }); }); - it('isUserIdle should return false when user is not yet idle', () => { + it('isUserIdle should return false when user is not yet idle', (done) => { authService.isUserIdle().subscribe((status: boolean) => { expect(status).toBe(false); + done(); }); }); @@ -346,42 +350,40 @@ describe('AuthService test', () => { }), ], providers: [ + provideMockStore({ initialState }), { provide: AuthRequestService, useValue: authRequest }, + { provide: NativeWindowService, useValue: window }, { provide: REQUEST, useValue: {} }, + { provide: APP_CONFIG, useValue: envConfig }, { provide: Router, useValue: routerStub }, { provide: RouteService, useValue: routeServiceStub }, + { provide: ActivatedRoute, useValue: routeStub }, + { provide: EPersonDataService, useValue: mockEpersonDataService }, + { provide: HardRedirectService, useValue: hardRedirectService }, + { provide: NotificationsService, useValue: NotificationsServiceStub }, + { provide: TranslateService, useValue: getMockTranslateService() }, { provide: RemoteDataBuildService, useValue: linkService }, - ClientCookieService, CookieService, AuthService, + ClientCookieService, ], }).compileComponents(); })); - beforeEach(inject([ClientCookieService, AuthRequestService, Store, Router, RouteService], (cookieService: ClientCookieService, authReqService: AuthRequestService, store: Store, router: Router, routeService: RouteService, notificationsService: NotificationsService, translateService: TranslateService) => { - const expiredToken: AuthTokenInfo = new AuthTokenInfo('test_token'); - expiredToken.expires = Date.now() - (1000 * 60 * 60); - authenticatedState = { - authenticated: true, - loaded: true, - loading: false, - authToken: expiredToken, - user: EPersonMock, - }; - store - .subscribe((state) => { - (state as any).core = Object.create({}); - (state as any).core.auth = authenticatedState; - }); - authService = new AuthService(window, authReqService, mockEpersonDataService, router, routeService, cookieService, store, hardRedirectService, notificationsService, translateService); + beforeEach(() => { + mockStore = TestBed.inject(MockStore); + authService = TestBed.inject(AuthService); storage = (authService as any).storage; routeServiceMock = TestBed.inject(RouteService); routerStub = TestBed.inject(Router); - spyOn(storage, 'get'); - spyOn(storage, 'remove'); - spyOn(storage, 'set'); - - })); + storage.get = jasmine.createSpy().and.returnValue(null); + storage.remove = jasmine.createSpy().and.returnValue(null); + storage.set = jasmine.createSpy().and.returnValue(null); + const expiredToken: AuthTokenInfo = new AuthTokenInfo('test_token_expired'); + expiredToken.expires = dateOfTest - (1000 * 60 * 60); + mockStore.overrideSelector(getAuthenticationToken, expiredToken); + mockStore.refreshState(); + }); it('should throw false when token is not valid', () => { expect(authService.hasValidAuthenticationToken.bind(null)).toThrow(); @@ -566,6 +568,8 @@ describe('AuthService test', () => { describe('when user is not logged in', () => { beforeEach(waitForAsync(() => { init(); + initialState.core.auth = unAuthenticatedState; + spyOn(authRequest, 'getShortlivedToken').and.returnValue(of(null)); TestBed.configureTestingModule({ imports: [ StoreModule.forRoot({ authReducer }, { @@ -576,24 +580,24 @@ describe('AuthService test', () => { }), ], providers: [ + provideMockStore({ initialState }), { provide: AuthRequestService, useValue: authRequest }, + { provide: NativeWindowService, useValue: window }, { provide: REQUEST, useValue: {} }, + { provide: APP_CONFIG, useValue: envConfig }, { provide: Router, useValue: routerStub }, { provide: RouteService, useValue: routeServiceStub }, + { provide: ActivatedRoute, useValue: routeStub }, + { provide: EPersonDataService, useValue: mockEpersonDataService }, + { provide: HardRedirectService, useValue: hardRedirectService }, + { provide: NotificationsService, useValue: NotificationsServiceStub }, + { provide: TranslateService, useValue: getMockTranslateService() }, { provide: RemoteDataBuildService, useValue: linkService }, CookieService, AuthService, ], }).compileComponents(); - })); - - beforeEach(inject([CookieService, AuthRequestService, Store, Router, RouteService], (cookieService: CookieService, authReqService: AuthRequestService, store: Store, router: Router, routeService: RouteService, notificationsService: NotificationsService, translateService: TranslateService) => { - store - .subscribe((state) => { - (state as any).core = Object.create({}); - (state as any).core.auth = unAuthenticatedState; - }); - authService = new AuthService(window, authReqService, mockEpersonDataService, router, routeService, cookieService, store, hardRedirectService, notificationsService, translateService); + authService = TestBed.inject(AuthService); })); it('should return null for the shortlived token', () => { @@ -606,6 +610,7 @@ describe('AuthService test', () => { describe('when user is idle', () => { beforeEach(waitForAsync(() => { init(); + initialState.core.auth = idleState; TestBed.configureTestingModule({ imports: [ StoreModule.forRoot({ authReducer }, { @@ -616,10 +621,18 @@ describe('AuthService test', () => { }), ], providers: [ + provideMockStore({ initialState }), { provide: AuthRequestService, useValue: authRequest }, + { provide: NativeWindowService, useValue: window }, { provide: REQUEST, useValue: {} }, + { provide: APP_CONFIG, useValue: envConfig }, { provide: Router, useValue: routerStub }, { provide: RouteService, useValue: routeServiceStub }, + { provide: ActivatedRoute, useValue: routeStub }, + { provide: EPersonDataService, useValue: mockEpersonDataService }, + { provide: HardRedirectService, useValue: hardRedirectService }, + { provide: NotificationsService, useValue: NotificationsServiceStub }, + { provide: TranslateService, useValue: getMockTranslateService() }, { provide: RemoteDataBuildService, useValue: linkService }, CookieService, AuthService, @@ -627,16 +640,14 @@ describe('AuthService test', () => { }).compileComponents(); })); - beforeEach(inject([CookieService, AuthRequestService, Store, Router, RouteService], (cookieService: CookieService, authReqService: AuthRequestService, store: Store, router: Router, routeService: RouteService, notificationsService: NotificationsService, translateService: TranslateService) => { - store - .subscribe((state) => { - (state as any).core = Object.create({}); - (state as any).core.auth = idleState; - }); - authService = new AuthService(window, authReqService, mockEpersonDataService, router, routeService, cookieService, store, hardRedirectService, notificationsService, translateService); - })); + beforeEach(() => { + mockStore = TestBed.inject(MockStore); + authService = TestBed.inject(AuthService); + mockStore.overrideSelector(isIdle, true); + mockStore.refreshState(); + }); - it('isUserIdle should return true when user is not idle', () => { + it('isUserIdle should return true when user is idle', () => { authService.isUserIdle().subscribe((status: boolean) => { expect(status).toBe(true); }); diff --git a/src/app/core/auth/auth.service.ts b/projects/dspace/core/src/lib/auth/auth.service.ts similarity index 94% rename from src/app/core/auth/auth.service.ts rename to projects/dspace/core/src/lib/auth/auth.service.ts index 5fe17b8631f..46fd6c5f79c 100644 --- a/src/app/core/auth/auth.service.ts +++ b/projects/dspace/core/src/lib/auth/auth.service.ts @@ -1,29 +1,7 @@ import { HttpHeaders } from '@angular/common/http'; -import { - Inject, - Injectable, -} from '@angular/core'; +import { Inject, inject, Injectable } from '@angular/core'; import { Router } from '@angular/router'; -import { - select, - Store, -} from '@ngrx/store'; -import { TranslateService } from '@ngx-translate/core'; -import { CookieAttributes } from 'js-cookie'; -import { - Observable, - of, -} from 'rxjs'; -import { - filter, - map, - startWith, - switchMap, - take, -} from 'rxjs/operators'; - -import { environment } from '../../../environments/environment'; -import { AppState } from '../../app.reducer'; +import { APP_CONFIG, AppConfig } from '@dspace/config'; import { hasNoValue, hasValue, @@ -32,26 +10,26 @@ import { isNotEmpty, isNotNull, isNotUndefined, -} from '../../shared/empty.util'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; -import { followLink } from '../../shared/utils/follow-link-config.model'; -import { - buildPaginatedList, - PaginatedList, -} from '../data/paginated-list.model'; +} from '@dspace/utils'; +import { select, Store } from '@ngrx/store'; +import { TranslateService } from '@ngx-translate/core'; +import { CookieAttributes } from 'js-cookie'; +import { Observable, of } from 'rxjs'; +import { filter, map, startWith, switchMap, take } from 'rxjs/operators'; + +import { CookieService } from '../cookies/cookie.service'; +import { CoreState } from '../core-state.model'; +import { buildPaginatedList, PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; import { EPersonDataService } from '../eperson/eperson-data.service'; import { EPerson } from '../eperson/models/eperson.model'; import { Group } from '../eperson/models/group.model'; -import { CookieService } from '../services/cookie.service'; +import { NotificationsService } from '../notification-system/notifications.service'; import { HardRedirectService } from '../services/hard-redirect.service'; import { RouteService } from '../services/route.service'; -import { - NativeWindowRef, - NativeWindowService, -} from '../services/window.service'; +import { NativeWindowRef, NativeWindowService } from '../services/window.service'; +import { followLink } from '../shared/follow-link-config.model'; import { getAllSucceededRemoteDataPayload, getFirstCompletedRemoteData, @@ -59,6 +37,7 @@ import { } from '../shared/operators'; import { PageInfo } from '../shared/page-info.model'; import { URLCombiner } from '../url-combiner/url-combiner'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; import { CheckAuthenticationTokenAction, RefreshTokenAction, @@ -71,10 +50,7 @@ import { import { AuthRequestService } from './auth-request.service'; import { AuthMethod } from './models/auth.method'; import { AuthStatus } from './models/auth-status.model'; -import { - AuthTokenInfo, - TOKENITEM, -} from './models/auth-token-info.model'; +import { AuthTokenInfo, TOKENITEM } from './models/auth-token-info.model'; import { getAuthenticatedUserId, getAuthenticationToken, @@ -108,6 +84,8 @@ export class AuthService { */ private tokenRefreshTimer; + protected readonly appConfig: AppConfig = inject(APP_CONFIG); + constructor( @Inject(NativeWindowService) protected _window: NativeWindowRef, protected authRequestService: AuthRequestService, @@ -115,7 +93,7 @@ export class AuthService { protected router: Router, protected routeService: RouteService, protected storage: CookieService, - protected store: Store, + protected store: Store, protected hardRedirectService: HardRedirectService, protected notificationService: NotificationsService, protected translateService: TranslateService, @@ -407,7 +385,6 @@ export class AuthService { let token: AuthTokenInfo; this.store.pipe(take(1), select(getAuthenticationToken)) .subscribe((authTokenInfo: AuthTokenInfo) => { - // Retrieve authentication token info and check if is valid token = authTokenInfo || null; }); return token; @@ -435,7 +412,7 @@ export class AuthService { if (!currentlyRefreshingToken) { token = authTokenInfo || null; if (token !== undefined && token !== null) { - let timeLeftBeforeRefresh = token.expires - new Date().getTime() - environment.auth.rest.timeLeftBeforeTokenRefresh; + let timeLeftBeforeRefresh = token.expires - new Date().getTime() - this.appConfig.auth.rest.timeLeftBeforeTokenRefresh; if (timeLeftBeforeRefresh < 0) { timeLeftBeforeRefresh = 0; } diff --git a/src/app/core/auth/authenticated.guard.ts b/projects/dspace/core/src/lib/auth/authenticated.guard.ts similarity index 79% rename from src/app/core/auth/authenticated.guard.ts rename to projects/dspace/core/src/lib/auth/authenticated.guard.ts index eba6dc89f9e..411e59b503f 100644 --- a/src/app/core/auth/authenticated.guard.ts +++ b/projects/dspace/core/src/lib/auth/authenticated.guard.ts @@ -7,26 +7,13 @@ import { RouterStateSnapshot, UrlTree, } from '@angular/router'; -import { - select, - Store, -} from '@ngrx/store'; +import { select, Store } from '@ngrx/store'; import { Observable } from 'rxjs'; -import { - find, - map, - switchMap, -} from 'rxjs/operators'; +import { find, map, switchMap } from 'rxjs/operators'; -import { AppState } from '../../app.reducer'; -import { - AuthService, - LOGIN_ROUTE, -} from './auth.service'; -import { - isAuthenticated, - isAuthenticationLoading, -} from './selectors'; +import { CoreState } from '../core-state.model'; +import { AuthService, LOGIN_ROUTE } from './auth.service'; +import { isAuthenticated, isAuthenticationLoading } from './selectors'; /** * Prevent unauthorized activating and loading of routes @@ -39,7 +26,7 @@ export const authenticatedGuard: CanActivateFn = ( state: RouterStateSnapshot, authService: AuthService = inject(AuthService), router: Router = inject(Router), - store: Store = inject(Store), + store: Store = inject(Store), ): Observable => { const url = state.url; // redirect to sign in page if user is not authenticated diff --git a/src/app/core/auth/browser-auth-request.service.spec.ts b/projects/dspace/core/src/lib/auth/browser-auth-request.service.spec.ts similarity index 100% rename from src/app/core/auth/browser-auth-request.service.spec.ts rename to projects/dspace/core/src/lib/auth/browser-auth-request.service.spec.ts diff --git a/src/app/core/auth/browser-auth-request.service.ts b/projects/dspace/core/src/lib/auth/browser-auth-request.service.ts similarity index 95% rename from src/app/core/auth/browser-auth-request.service.ts rename to projects/dspace/core/src/lib/auth/browser-auth-request.service.ts index 58690d41093..547245ee66c 100644 --- a/src/app/core/auth/browser-auth-request.service.ts +++ b/projects/dspace/core/src/lib/auth/browser-auth-request.service.ts @@ -1,8 +1,5 @@ import { Injectable } from '@angular/core'; -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { PostRequest } from '../data/request.models'; diff --git a/projects/dspace/core/src/lib/auth/index.ts b/projects/dspace/core/src/lib/auth/index.ts new file mode 100644 index 00000000000..95e8f28ba64 --- /dev/null +++ b/projects/dspace/core/src/lib/auth/index.ts @@ -0,0 +1,28 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './access-token.resolver'; +export * from './auth-blocking.guard.spec'; +export * from './auth-blocking.guard'; +export * from './auth-request.service.spec'; +export * from './auth-request.service'; +export * from './auth.actions'; +export * from './auth.effects.spec'; +export * from './auth.effects'; +export * from './auth.interceptor.spec'; +export * from './auth.interceptor'; +export * from './auth.reducer.spec'; +export * from './auth.reducer'; +export * from './auth.service.spec'; +export * from './auth.service'; +export * from './authenticated.guard'; +export * from './browser-auth-request.service.spec'; +export * from './browser-auth-request.service'; +export * from './selectors'; +export * from './server-auth-request.service.spec'; +export * from './server-auth-request.service'; +export * from './server-auth.service'; +export * from './token-response-parsing.service.spec'; +export * from './token-response-parsing.service'; +export * from './models/index'; diff --git a/src/app/core/auth/models/auth-error.model.ts b/projects/dspace/core/src/lib/auth/models/auth-error.model.ts similarity index 100% rename from src/app/core/auth/models/auth-error.model.ts rename to projects/dspace/core/src/lib/auth/models/auth-error.model.ts diff --git a/src/app/core/auth/models/auth-status.model.ts b/projects/dspace/core/src/lib/auth/models/auth-status.model.ts similarity index 94% rename from src/app/core/auth/models/auth-status.model.ts rename to projects/dspace/core/src/lib/auth/models/auth-status.model.ts index f25e5a48928..49dd371ef66 100644 --- a/src/app/core/auth/models/auth-status.model.ts +++ b/projects/dspace/core/src/lib/auth/models/auth-status.model.ts @@ -1,14 +1,7 @@ -import { - autoserialize, - deserialize, - deserializeAs, -} from 'cerialize'; +import { autoserialize, deserialize, deserializeAs } from 'cerialize'; import { Observable } from 'rxjs'; -import { - link, - typedObject, -} from '../../cache/builders/build-decorators'; +import { link, typedObject } from '../../cache/builders/build-decorators'; import { CacheableObject } from '../../cache/cacheable-object.model'; import { IDToUUIDSerializer } from '../../cache/id-to-uuid-serializer'; import { PaginatedList } from '../../data/paginated-list.model'; diff --git a/src/app/core/auth/models/auth-status.resource-type.ts b/projects/dspace/core/src/lib/auth/models/auth-status.resource-type.ts similarity index 100% rename from src/app/core/auth/models/auth-status.resource-type.ts rename to projects/dspace/core/src/lib/auth/models/auth-status.resource-type.ts diff --git a/src/app/core/auth/models/auth-token-info.model.ts b/projects/dspace/core/src/lib/auth/models/auth-token-info.model.ts similarity index 100% rename from src/app/core/auth/models/auth-token-info.model.ts rename to projects/dspace/core/src/lib/auth/models/auth-token-info.model.ts diff --git a/src/app/core/auth/models/auth.method-type.ts b/projects/dspace/core/src/lib/auth/models/auth.method-type.ts similarity index 100% rename from src/app/core/auth/models/auth.method-type.ts rename to projects/dspace/core/src/lib/auth/models/auth.method-type.ts diff --git a/src/app/core/auth/models/auth.method.ts b/projects/dspace/core/src/lib/auth/models/auth.method.ts similarity index 100% rename from src/app/core/auth/models/auth.method.ts rename to projects/dspace/core/src/lib/auth/models/auth.method.ts diff --git a/src/app/core/auth/models/auth.registration-type.ts b/projects/dspace/core/src/lib/auth/models/auth.registration-type.ts similarity index 100% rename from src/app/core/auth/models/auth.registration-type.ts rename to projects/dspace/core/src/lib/auth/models/auth.registration-type.ts diff --git a/projects/dspace/core/src/lib/auth/models/index.ts b/projects/dspace/core/src/lib/auth/models/index.ts new file mode 100644 index 00000000000..9ba66d4a4c2 --- /dev/null +++ b/projects/dspace/core/src/lib/auth/models/index.ts @@ -0,0 +1,13 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './auth-error.model'; +export * from './auth-status.model'; +export * from './auth-status.resource-type'; +export * from './auth-token-info.model'; +export * from './auth.method-type'; +export * from './auth.method'; +export * from './auth.registration-type'; +export * from './short-lived-token.model'; +export * from './short-lived-token.resource-type'; diff --git a/src/app/core/auth/models/short-lived-token.model.ts b/projects/dspace/core/src/lib/auth/models/short-lived-token.model.ts similarity index 91% rename from src/app/core/auth/models/short-lived-token.model.ts rename to projects/dspace/core/src/lib/auth/models/short-lived-token.model.ts index 5e8587d02dd..708afbab318 100644 --- a/src/app/core/auth/models/short-lived-token.model.ts +++ b/projects/dspace/core/src/lib/auth/models/short-lived-token.model.ts @@ -1,8 +1,4 @@ -import { - autoserialize, - autoserializeAs, - deserialize, -} from 'cerialize'; +import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; import { typedObject } from '../../cache/builders/build-decorators'; import { CacheableObject } from '../../cache/cacheable-object.model'; diff --git a/src/app/core/auth/models/short-lived-token.resource-type.ts b/projects/dspace/core/src/lib/auth/models/short-lived-token.resource-type.ts similarity index 100% rename from src/app/core/auth/models/short-lived-token.resource-type.ts rename to projects/dspace/core/src/lib/auth/models/short-lived-token.resource-type.ts diff --git a/src/app/core/auth/selectors.ts b/projects/dspace/core/src/lib/auth/selectors.ts similarity index 100% rename from src/app/core/auth/selectors.ts rename to projects/dspace/core/src/lib/auth/selectors.ts diff --git a/src/app/core/auth/server-auth-request.service.spec.ts b/projects/dspace/core/src/lib/auth/server-auth-request.service.spec.ts similarity index 91% rename from src/app/core/auth/server-auth-request.service.spec.ts rename to projects/dspace/core/src/lib/auth/server-auth-request.service.spec.ts index 143f12526cc..89ce7fb2632 100644 --- a/src/app/core/auth/server-auth-request.service.spec.ts +++ b/projects/dspace/core/src/lib/auth/server-auth-request.service.spec.ts @@ -1,20 +1,10 @@ -import { - HttpClient, - HttpHeaders, - HttpResponse, -} from '@angular/common/http'; -import { - Observable, - of, -} from 'rxjs'; +import { HttpClient, HttpHeaders, HttpResponse } from '@angular/common/http'; +import { Observable, of } from 'rxjs'; import { PostRequest } from '../data/request.models'; import { RequestService } from '../data/request.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; -import { - XSRF_REQUEST_HEADER, - XSRF_RESPONSE_HEADER, -} from '../xsrf/xsrf.constants'; +import { XSRF_REQUEST_HEADER, XSRF_RESPONSE_HEADER } from '../xsrf/xsrf.constants'; import { AuthRequestService } from './auth-request.service'; import { ServerAuthRequestService } from './server-auth-request.service'; diff --git a/src/app/core/auth/server-auth-request.service.ts b/projects/dspace/core/src/lib/auth/server-auth-request.service.ts similarity index 96% rename from src/app/core/auth/server-auth-request.service.ts rename to projects/dspace/core/src/lib/auth/server-auth-request.service.ts index 5f1828c71c5..28b5566c15b 100644 --- a/src/app/core/auth/server-auth-request.service.ts +++ b/projects/dspace/core/src/lib/auth/server-auth-request.service.ts @@ -1,8 +1,4 @@ -import { - HttpClient, - HttpHeaders, - HttpResponse, -} from '@angular/common/http'; +import { HttpClient, HttpHeaders, HttpResponse } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; diff --git a/src/app/core/auth/server-auth.service.ts b/projects/dspace/core/src/lib/auth/server-auth.service.ts similarity index 86% rename from src/app/core/auth/server-auth.service.ts rename to projects/dspace/core/src/lib/auth/server-auth.service.ts index d287604c24d..32d1ac6441b 100644 --- a/src/app/core/auth/server-auth.service.ts +++ b/projects/dspace/core/src/lib/auth/server-auth.service.ts @@ -1,39 +1,23 @@ import { HttpHeaders } from '@angular/common/http'; -import { - Inject, - Injectable, - Optional, -} from '@angular/core'; +import { Inject, Injectable, Optional } from '@angular/core'; import { Router } from '@angular/router'; +import { hasValue, isNotEmpty } from '@dspace/utils'; import { Store } from '@ngrx/store'; import { TranslateService } from '@ngx-translate/core'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { - REQUEST, - RESPONSE, -} from '../../../express.tokens'; -import { AppState } from '../../app.reducer'; -import { - hasValue, - isNotEmpty, -} from '../../shared/empty.util'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; +import { REQUEST, RESPONSE } from '../tokens/express.tokens'; +import { CookieService } from '../cookies/cookie.service'; +import { CoreState } from '../core-state.model'; import { RemoteData } from '../data/remote-data'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; import { EPersonDataService } from '../eperson/eperson-data.service'; -import { CookieService } from '../services/cookie.service'; +import { NotificationsService } from '../notification-system/notifications.service'; import { HardRedirectService } from '../services/hard-redirect.service'; import { RouteService } from '../services/route.service'; -import { - NativeWindowRef, - NativeWindowService, -} from '../services/window.service'; -import { - AuthService, - LOGIN_ROUTE, -} from './auth.service'; +import { NativeWindowRef, NativeWindowService } from '../services/window.service'; +import { AuthService, LOGIN_ROUTE } from './auth.service'; import { AuthRequestService } from './auth-request.service'; import { AuthStatus } from './models/auth-status.model'; import { AuthTokenInfo } from './models/auth-token-info.model'; @@ -53,7 +37,7 @@ export class ServerAuthService extends AuthService { protected router: Router, protected routeService: RouteService, protected storage: CookieService, - protected store: Store, + protected store: Store, protected hardRedirectService: HardRedirectService, protected notificationService: NotificationsService, protected translateService: TranslateService, diff --git a/src/app/core/auth/token-response-parsing.service.spec.ts b/projects/dspace/core/src/lib/auth/token-response-parsing.service.spec.ts similarity index 100% rename from src/app/core/auth/token-response-parsing.service.spec.ts rename to projects/dspace/core/src/lib/auth/token-response-parsing.service.spec.ts diff --git a/src/app/core/auth/token-response-parsing.service.ts b/projects/dspace/core/src/lib/auth/token-response-parsing.service.ts similarity index 86% rename from src/app/core/auth/token-response-parsing.service.ts rename to projects/dspace/core/src/lib/auth/token-response-parsing.service.ts index 03a45521e93..f582ad4d1bf 100644 --- a/src/app/core/auth/token-response-parsing.service.ts +++ b/projects/dspace/core/src/lib/auth/token-response-parsing.service.ts @@ -1,10 +1,7 @@ import { Injectable } from '@angular/core'; +import { isNotEmpty } from '@dspace/utils'; -import { isNotEmpty } from '../../shared/empty.util'; -import { - RestResponse, - TokenResponse, -} from '../cache/response.models'; +import { RestResponse, TokenResponse } from '../cache/response.models'; import { ResponseParsingService } from '../data/parsing.service'; import { RestRequest } from '../data/rest-request.model'; import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; diff --git a/src/app/core/breadcrumbs/bitstream-breadcrumb.resolver.ts b/projects/dspace/core/src/lib/breadcrumbs/bitstream-breadcrumb.resolver.ts similarity index 74% rename from src/app/core/breadcrumbs/bitstream-breadcrumb.resolver.ts rename to projects/dspace/core/src/lib/breadcrumbs/bitstream-breadcrumb.resolver.ts index 5628fe65837..2fcb81808c1 100644 --- a/src/app/core/breadcrumbs/bitstream-breadcrumb.resolver.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/bitstream-breadcrumb.resolver.ts @@ -1,19 +1,14 @@ import { inject } from '@angular/core'; -import { - ActivatedRouteSnapshot, - ResolveFn, - RouterStateSnapshot, -} from '@angular/router'; +import { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot } from '@angular/router'; import { Observable } from 'rxjs'; -import { BITSTREAM_PAGE_LINKS_TO_FOLLOW } from '../../bitstream-page/bitstream-page.resolver'; -import { BreadcrumbConfig } from '../../breadcrumbs/breadcrumb/breadcrumb-config.model'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { BitstreamDataService } from '../data/bitstream-data.service'; -import { Bitstream } from '../shared/bitstream.model'; +import { Bitstream, BITSTREAM_PAGE_LINKS_TO_FOLLOW } from '../shared/bitstream.model'; import { DSpaceObject } from '../shared/dspace-object.model'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { BitstreamBreadcrumbsService } from './bitstream-breadcrumbs.service'; import { DSOBreadcrumbResolver } from './dso-breadcrumb.resolver'; +import { BreadcrumbConfig } from './models/breadcrumb-config.model'; /** * The resolve function that resolves the BreadcrumbConfig object for an Item diff --git a/src/app/core/breadcrumbs/bitstream-breadcrumbs.service.ts b/projects/dspace/core/src/lib/breadcrumbs/bitstream-breadcrumbs.service.ts similarity index 83% rename from src/app/core/breadcrumbs/bitstream-breadcrumbs.service.ts rename to projects/dspace/core/src/lib/breadcrumbs/bitstream-breadcrumbs.service.ts index c7b4ebe1e67..8152b2214d1 100644 --- a/src/app/core/breadcrumbs/bitstream-breadcrumbs.service.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/bitstream-breadcrumbs.service.ts @@ -1,34 +1,21 @@ import { Injectable } from '@angular/core'; -import { - Observable, - of, -} from 'rxjs'; -import { - map, - switchMap, -} from 'rxjs/operators'; +import { hasValue, isNotEmpty } from '@dspace/utils'; +import { Observable, of } from 'rxjs'; +import { map, switchMap } from 'rxjs/operators'; -import { getDSORoute } from '../../app-routing-paths'; -import { BITSTREAM_PAGE_LINKS_TO_FOLLOW } from '../../bitstream-page/bitstream-page.resolver'; -import { Breadcrumb } from '../../breadcrumbs/breadcrumb/breadcrumb.model'; -import { - hasValue, - isNotEmpty, -} from '../../shared/empty.util'; import { LinkService } from '../cache/builders/link.service'; import { BitstreamDataService } from '../data/bitstream-data.service'; import { RemoteData } from '../data/remote-data'; -import { Bitstream } from '../shared/bitstream.model'; +import { getDSORoute } from '../router/utils/dso-route.utils'; +import { Bitstream, BITSTREAM_PAGE_LINKS_TO_FOLLOW } from '../shared/bitstream.model'; import { Bundle } from '../shared/bundle.model'; import { ChildHALResource } from '../shared/child-hal-resource.model'; import { DSpaceObject } from '../shared/dspace-object.model'; import { Item } from '../shared/item.model'; -import { - getFirstCompletedRemoteData, - getRemoteDataPayload, -} from '../shared/operators'; +import { getFirstCompletedRemoteData, getRemoteDataPayload } from '../shared/operators'; import { DSOBreadcrumbsService } from './dso-breadcrumbs.service'; import { DSONameService } from './dso-name.service'; +import { Breadcrumb } from './models/breadcrumb.model'; /** * Service to calculate DSpaceObject breadcrumbs for a single part of the route diff --git a/src/app/core/breadcrumbs/breadcrumbsProviderService.ts b/projects/dspace/core/src/lib/breadcrumbs/breadcrumbsProviderService.ts similarity index 84% rename from src/app/core/breadcrumbs/breadcrumbsProviderService.ts rename to projects/dspace/core/src/lib/breadcrumbs/breadcrumbsProviderService.ts index 83d9a2caaa9..8be566227f7 100644 --- a/src/app/core/breadcrumbs/breadcrumbsProviderService.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/breadcrumbsProviderService.ts @@ -1,6 +1,6 @@ import { Observable } from 'rxjs'; -import { Breadcrumb } from '../../breadcrumbs/breadcrumb/breadcrumb.model'; +import { Breadcrumb } from './models/breadcrumb.model'; /** * Service to calculate breadcrumbs for a single part of the route diff --git a/src/app/core/breadcrumbs/collection-breadcrumb.resolver.ts b/projects/dspace/core/src/lib/breadcrumbs/collection-breadcrumb.resolver.ts similarity index 73% rename from src/app/core/breadcrumbs/collection-breadcrumb.resolver.ts rename to projects/dspace/core/src/lib/breadcrumbs/collection-breadcrumb.resolver.ts index 7df656a9610..ba0a58234b1 100644 --- a/src/app/core/breadcrumbs/collection-breadcrumb.resolver.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/collection-breadcrumb.resolver.ts @@ -1,19 +1,14 @@ import { inject } from '@angular/core'; -import { - ActivatedRouteSnapshot, - ResolveFn, - RouterStateSnapshot, -} from '@angular/router'; +import { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot } from '@angular/router'; import { Observable } from 'rxjs'; -import { BreadcrumbConfig } from '../../breadcrumbs/breadcrumb/breadcrumb-config.model'; -import { COLLECTION_PAGE_LINKS_TO_FOLLOW } from '../../collection-page/collection-page.resolver'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { CollectionDataService } from '../data/collection-data.service'; -import { Collection } from '../shared/collection.model'; +import { Collection, COLLECTION_PAGE_LINKS_TO_FOLLOW } from '../shared/collection.model'; import { DSpaceObject } from '../shared/dspace-object.model'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { DSOBreadcrumbResolver } from './dso-breadcrumb.resolver'; import { DSOBreadcrumbsService } from './dso-breadcrumbs.service'; +import { BreadcrumbConfig } from './models/breadcrumb-config.model'; /** * The resolve function that resolves the BreadcrumbConfig object for a Collection diff --git a/src/app/core/breadcrumbs/community-breadcrumb.resolver.ts b/projects/dspace/core/src/lib/breadcrumbs/community-breadcrumb.resolver.ts similarity index 72% rename from src/app/core/breadcrumbs/community-breadcrumb.resolver.ts rename to projects/dspace/core/src/lib/breadcrumbs/community-breadcrumb.resolver.ts index 0c37b5ca4f2..6e037b86a25 100644 --- a/src/app/core/breadcrumbs/community-breadcrumb.resolver.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/community-breadcrumb.resolver.ts @@ -1,23 +1,15 @@ import { inject } from '@angular/core'; -import { - ActivatedRouteSnapshot, - ResolveFn, - RouterStateSnapshot, -} from '@angular/router'; +import { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot } from '@angular/router'; +import { hasValue } from '@dspace/utils'; import { Observable } from 'rxjs'; -import { BreadcrumbConfig } from '../../breadcrumbs/breadcrumb/breadcrumb-config.model'; -import { COMMUNITY_PAGE_LINKS_TO_FOLLOW } from '../../community-page/community-page.resolver'; -import { hasValue } from '../../shared/empty.util'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { CommunityDataService } from '../data/community-data.service'; -import { Community } from '../shared/community.model'; +import { Community, COMMUNITY_PAGE_LINKS_TO_FOLLOW } from '../shared/community.model'; import { DSpaceObject } from '../shared/dspace-object.model'; -import { - DSOBreadcrumbResolver, - DSOBreadcrumbResolverByUuid, -} from './dso-breadcrumb.resolver'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; +import { DSOBreadcrumbResolver, DSOBreadcrumbResolverByUuid } from './dso-breadcrumb.resolver'; import { DSOBreadcrumbsService } from './dso-breadcrumbs.service'; +import { BreadcrumbConfig } from './models/breadcrumb-config.model'; /** * The resolve function that resolves the BreadcrumbConfig object for a Community diff --git a/src/app/core/breadcrumbs/dso-breadcrumb.resolver.spec.ts b/projects/dspace/core/src/lib/breadcrumbs/dso-breadcrumb.resolver.spec.ts similarity index 95% rename from src/app/core/breadcrumbs/dso-breadcrumb.resolver.spec.ts rename to projects/dspace/core/src/lib/breadcrumbs/dso-breadcrumb.resolver.spec.ts index c40a14a3231..e2678fb7ec5 100644 --- a/src/app/core/breadcrumbs/dso-breadcrumb.resolver.spec.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/dso-breadcrumb.resolver.spec.ts @@ -1,7 +1,7 @@ import { getTestScheduler } from 'jasmine-marbles'; -import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; import { Collection } from '../shared/collection.model'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; import { collectionBreadcrumbResolver } from './collection-breadcrumb.resolver'; describe('DSOBreadcrumbResolver', () => { diff --git a/src/app/core/breadcrumbs/dso-breadcrumb.resolver.ts b/projects/dspace/core/src/lib/breadcrumbs/dso-breadcrumb.resolver.ts similarity index 85% rename from src/app/core/breadcrumbs/dso-breadcrumb.resolver.ts rename to projects/dspace/core/src/lib/breadcrumbs/dso-breadcrumb.resolver.ts index 992627ddfaa..3969b61c69c 100644 --- a/src/app/core/breadcrumbs/dso-breadcrumb.resolver.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/dso-breadcrumb.resolver.ts @@ -1,21 +1,15 @@ -import { - ActivatedRouteSnapshot, - RouterStateSnapshot, -} from '@angular/router'; +import { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; +import { hasValue } from '@dspace/utils'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { getDSORoute } from '../../app-routing-paths'; -import { BreadcrumbConfig } from '../../breadcrumbs/breadcrumb/breadcrumb-config.model'; -import { hasValue } from '../../shared/empty.util'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { IdentifiableDataService } from '../data/base/identifiable-data.service'; +import { getDSORoute } from '../router/utils/dso-route.utils'; import { DSpaceObject } from '../shared/dspace-object.model'; -import { - getFirstCompletedRemoteData, - getRemoteDataPayload, -} from '../shared/operators'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; +import { getFirstCompletedRemoteData, getRemoteDataPayload } from '../shared/operators'; import { DSOBreadcrumbsService } from './dso-breadcrumbs.service'; +import { BreadcrumbConfig } from './models/breadcrumb-config.model'; /** * Method for resolving a breadcrumb config object diff --git a/src/app/core/breadcrumbs/dso-breadcrumbs.service.spec.ts b/projects/dspace/core/src/lib/breadcrumbs/dso-breadcrumbs.service.spec.ts similarity index 91% rename from src/app/core/breadcrumbs/dso-breadcrumbs.service.spec.ts rename to projects/dspace/core/src/lib/breadcrumbs/dso-breadcrumbs.service.spec.ts index 9e1fc7ed020..79c24b9ea5e 100644 --- a/src/app/core/breadcrumbs/dso-breadcrumbs.service.spec.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/dso-breadcrumbs.service.spec.ts @@ -1,24 +1,21 @@ -import { - TestBed, - waitForAsync, -} from '@angular/core/testing'; +import { TestBed, waitForAsync } from '@angular/core/testing'; import { getTestScheduler } from 'jasmine-marbles'; import { of } from 'rxjs'; -import { getDSORoute } from '../../app-routing-paths'; -import { Breadcrumb } from '../../breadcrumbs/breadcrumb/breadcrumb.model'; -import { getMockLinkService } from '../../shared/mocks/link-service.mock'; -import { - createSuccessfulRemoteDataObject, - createSuccessfulRemoteDataObject$, -} from '../../shared/remote-data.utils'; import { LinkService } from '../cache/builders/link.service'; +import { getDSORoute } from '../router/utils/dso-route.utils'; import { Collection } from '../shared/collection.model'; import { Community } from '../shared/community.model'; import { DSpaceObject } from '../shared/dspace-object.model'; import { Item } from '../shared/item.model'; +import { getMockLinkService } from '../testing/link-service.mock'; +import { + createSuccessfulRemoteDataObject, + createSuccessfulRemoteDataObject$, +} from '../utilities/remote-data.utils'; import { DSOBreadcrumbsService } from './dso-breadcrumbs.service'; import { DSONameService } from './dso-name.service'; +import { Breadcrumb } from './models/breadcrumb.model'; describe('DSOBreadcrumbsService', () => { let service: DSOBreadcrumbsService; diff --git a/src/app/core/breadcrumbs/dso-breadcrumbs.service.ts b/projects/dspace/core/src/lib/breadcrumbs/dso-breadcrumbs.service.ts similarity index 83% rename from src/app/core/breadcrumbs/dso-breadcrumbs.service.ts rename to projects/dspace/core/src/lib/breadcrumbs/dso-breadcrumbs.service.ts index 324c29cd973..e94e1d20dbe 100644 --- a/src/app/core/breadcrumbs/dso-breadcrumbs.service.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/dso-breadcrumbs.service.ts @@ -1,24 +1,17 @@ import { Injectable } from '@angular/core'; -import { - Observable, - of, -} from 'rxjs'; -import { - find, - map, - switchMap, -} from 'rxjs/operators'; +import { hasValue } from '@dspace/utils'; +import { Observable, of } from 'rxjs'; +import { find, map, switchMap } from 'rxjs/operators'; -import { getDSORoute } from '../../app-routing-paths'; -import { Breadcrumb } from '../../breadcrumbs/breadcrumb/breadcrumb.model'; -import { hasValue } from '../../shared/empty.util'; -import { followLink } from '../../shared/utils/follow-link-config.model'; import { LinkService } from '../cache/builders/link.service'; import { RemoteData } from '../data/remote-data'; +import { getDSORoute } from '../router/utils/dso-route.utils'; import { ChildHALResource } from '../shared/child-hal-resource.model'; import { DSpaceObject } from '../shared/dspace-object.model'; +import { followLink } from '../shared/follow-link-config.model'; import { BreadcrumbsProviderService } from './breadcrumbsProviderService'; import { DSONameService } from './dso-name.service'; +import { Breadcrumb } from './models/breadcrumb.model'; /** * Service to calculate DSpaceObject breadcrumbs for a single part of the route diff --git a/src/app/core/breadcrumbs/dso-name.service.spec.ts b/projects/dspace/core/src/lib/breadcrumbs/dso-name.service.spec.ts similarity index 98% rename from src/app/core/breadcrumbs/dso-name.service.spec.ts rename to projects/dspace/core/src/lib/breadcrumbs/dso-name.service.spec.ts index 5f241b1a6cc..f23885dad32 100644 --- a/src/app/core/breadcrumbs/dso-name.service.spec.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/dso-name.service.spec.ts @@ -1,8 +1,8 @@ -import { ListableObject } from '../../shared/object-collection/shared/listable-object.model'; import { DSpaceObject } from '../shared/dspace-object.model'; import { GenericConstructor } from '../shared/generic-constructor'; import { Item } from '../shared/item.model'; import { MetadataValueFilter } from '../shared/metadata.models'; +import { ListableObject } from '../shared/object-collection/listable-object.model'; import { DSONameService } from './dso-name.service'; describe(`DSONameService`, () => { diff --git a/src/app/core/breadcrumbs/dso-name.service.ts b/projects/dspace/core/src/lib/breadcrumbs/dso-name.service.ts similarity index 98% rename from src/app/core/breadcrumbs/dso-name.service.ts rename to projects/dspace/core/src/lib/breadcrumbs/dso-name.service.ts index 988141209f4..61082fc3af0 100644 --- a/src/app/core/breadcrumbs/dso-name.service.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/dso-name.service.ts @@ -1,10 +1,7 @@ import { Injectable } from '@angular/core'; +import { hasValue, isEmpty } from '@dspace/utils'; import { TranslateService } from '@ngx-translate/core'; -import { - hasValue, - isEmpty, -} from '../../shared/empty.util'; import { DSpaceObject } from '../shared/dspace-object.model'; import { Metadata } from '../shared/metadata.utils'; diff --git a/src/app/core/breadcrumbs/i18n-breadcrumb.resolver.spec.ts b/projects/dspace/core/src/lib/breadcrumbs/i18n-breadcrumb.resolver.spec.ts similarity index 100% rename from src/app/core/breadcrumbs/i18n-breadcrumb.resolver.spec.ts rename to projects/dspace/core/src/lib/breadcrumbs/i18n-breadcrumb.resolver.spec.ts diff --git a/src/app/core/breadcrumbs/i18n-breadcrumb.resolver.ts b/projects/dspace/core/src/lib/breadcrumbs/i18n-breadcrumb.resolver.ts similarity index 77% rename from src/app/core/breadcrumbs/i18n-breadcrumb.resolver.ts rename to projects/dspace/core/src/lib/breadcrumbs/i18n-breadcrumb.resolver.ts index 5f5c779211f..bd36554d761 100644 --- a/src/app/core/breadcrumbs/i18n-breadcrumb.resolver.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/i18n-breadcrumb.resolver.ts @@ -1,14 +1,10 @@ import { inject } from '@angular/core'; -import { - ActivatedRouteSnapshot, - ResolveFn, - RouterStateSnapshot, -} from '@angular/router'; +import { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot } from '@angular/router'; +import { hasNoValue } from '@dspace/utils'; -import { BreadcrumbConfig } from '../../breadcrumbs/breadcrumb/breadcrumb-config.model'; -import { hasNoValue } from '../../shared/empty.util'; -import { currentPathFromSnapshot } from '../../shared/utils/route.utils'; +import { currentPathFromSnapshot } from '../router/utils/route.utils'; import { I18nBreadcrumbsService } from './i18n-breadcrumbs.service'; +import { BreadcrumbConfig } from './models/breadcrumb-config.model'; /** * Method for resolving an I18n breadcrumb configuration object diff --git a/src/app/core/breadcrumbs/i18n-breadcrumbs.service.spec.ts b/projects/dspace/core/src/lib/breadcrumbs/i18n-breadcrumbs.service.spec.ts similarity index 77% rename from src/app/core/breadcrumbs/i18n-breadcrumbs.service.spec.ts rename to projects/dspace/core/src/lib/breadcrumbs/i18n-breadcrumbs.service.spec.ts index 3fcd911a464..a1167fb2d8f 100644 --- a/src/app/core/breadcrumbs/i18n-breadcrumbs.service.spec.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/i18n-breadcrumbs.service.spec.ts @@ -1,14 +1,8 @@ -import { - TestBed, - waitForAsync, -} from '@angular/core/testing'; +import { TestBed, waitForAsync } from '@angular/core/testing'; import { getTestScheduler } from 'jasmine-marbles'; -import { Breadcrumb } from '../../breadcrumbs/breadcrumb/breadcrumb.model'; -import { - BREADCRUMB_MESSAGE_POSTFIX, - I18nBreadcrumbsService, -} from './i18n-breadcrumbs.service'; +import { BREADCRUMB_MESSAGE_POSTFIX, I18nBreadcrumbsService } from './i18n-breadcrumbs.service'; +import { Breadcrumb } from './models/breadcrumb.model'; describe('I18nBreadcrumbsService', () => { let service: I18nBreadcrumbsService; diff --git a/src/app/core/breadcrumbs/i18n-breadcrumbs.service.ts b/projects/dspace/core/src/lib/breadcrumbs/i18n-breadcrumbs.service.ts similarity index 86% rename from src/app/core/breadcrumbs/i18n-breadcrumbs.service.ts rename to projects/dspace/core/src/lib/breadcrumbs/i18n-breadcrumbs.service.ts index e87bace7b7f..05ea22e023e 100644 --- a/src/app/core/breadcrumbs/i18n-breadcrumbs.service.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/i18n-breadcrumbs.service.ts @@ -1,11 +1,8 @@ import { Injectable } from '@angular/core'; -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; -import { Breadcrumb } from '../../breadcrumbs/breadcrumb/breadcrumb.model'; import { BreadcrumbsProviderService } from './breadcrumbsProviderService'; +import { Breadcrumb } from './models/breadcrumb.model'; /** * The postfix for i18n breadcrumbs diff --git a/projects/dspace/core/src/lib/breadcrumbs/index.ts b/projects/dspace/core/src/lib/breadcrumbs/index.ts new file mode 100644 index 00000000000..c623ca1d579 --- /dev/null +++ b/projects/dspace/core/src/lib/breadcrumbs/index.ts @@ -0,0 +1,33 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './bitstream-breadcrumb.resolver'; +export * from './bitstream-breadcrumbs.service'; +export * from './breadcrumbsProviderService'; +export * from './collection-breadcrumb.resolver'; +export * from './community-breadcrumb.resolver'; +export * from './dso-breadcrumb.resolver.spec'; +export * from './dso-breadcrumb.resolver'; +export * from './dso-breadcrumbs.service.spec'; +export * from './dso-breadcrumbs.service'; +export * from './dso-name.service.spec'; +export * from './dso-name.service'; +export * from './i18n-breadcrumb.resolver.spec'; +export * from './i18n-breadcrumb.resolver'; +export * from './i18n-breadcrumbs.service.spec'; +export * from './i18n-breadcrumbs.service'; +export * from './item-breadcrumb.resolver'; +export * from './navigation-breadcrumb.resolver.spec'; +export * from './navigation-breadcrumb.resolver'; +export * from './navigation-breadcrumb.service'; +export * from './navigation-breadcrumbs.service.spec'; +export * from './publication-claim-breadcrumb.resolver.spec'; +export * from './publication-claim-breadcrumb.resolver'; +export * from './publication-claim-breadcrumb.service.spec'; +export * from './publication-claim-breadcrumb.service'; +export * from './sources-breadcrumb.resolver.spec'; +export * from './sources-breadcrumb.resolver'; +export * from './sources-breadcrumb.service.spec'; +export * from './sources-breadcrumb.service'; +export * from './models/index'; diff --git a/src/app/core/breadcrumbs/item-breadcrumb.resolver.ts b/projects/dspace/core/src/lib/breadcrumbs/item-breadcrumb.resolver.ts similarity index 69% rename from src/app/core/breadcrumbs/item-breadcrumb.resolver.ts rename to projects/dspace/core/src/lib/breadcrumbs/item-breadcrumb.resolver.ts index ef021123d42..c18ae89b92e 100644 --- a/src/app/core/breadcrumbs/item-breadcrumb.resolver.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/item-breadcrumb.resolver.ts @@ -1,19 +1,16 @@ import { inject } from '@angular/core'; -import { - ActivatedRouteSnapshot, - ResolveFn, - RouterStateSnapshot, -} from '@angular/router'; +import { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot } from '@angular/router'; import { Observable } from 'rxjs'; +import { APP_CONFIG, AppConfig } from '@dspace/config'; -import { BreadcrumbConfig } from '../../breadcrumbs/breadcrumb/breadcrumb-config.model'; -import { getItemPageLinksToFollow } from '../../item-page/item.resolver'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { ItemDataService } from '../data/item-data.service'; import { DSpaceObject } from '../shared/dspace-object.model'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { Item } from '../shared/item.model'; import { DSOBreadcrumbResolver } from './dso-breadcrumb.resolver'; import { DSOBreadcrumbsService } from './dso-breadcrumbs.service'; +import { BreadcrumbConfig } from './models/breadcrumb-config.model'; +import { getItemPageLinksToFollow } from '../shared/item.model' /** * The resolve function that resolves the BreadcrumbConfig object for an Item @@ -23,8 +20,9 @@ export const itemBreadcrumbResolver: ResolveFn> = ( state: RouterStateSnapshot, breadcrumbService: DSOBreadcrumbsService = inject(DSOBreadcrumbsService), dataService: ItemDataService = inject(ItemDataService), + appConfig: AppConfig = inject(APP_CONFIG), ): Observable> => { - const linksToFollow: FollowLinkConfig[] = getItemPageLinksToFollow() as FollowLinkConfig[]; + const linksToFollow: FollowLinkConfig[] = getItemPageLinksToFollow(appConfig.item.showAccessStatuses) as FollowLinkConfig[]; return DSOBreadcrumbResolver( route, state, diff --git a/src/app/breadcrumbs/breadcrumb/breadcrumb-config.model.ts b/projects/dspace/core/src/lib/breadcrumbs/models/breadcrumb-config.model.ts similarity index 80% rename from src/app/breadcrumbs/breadcrumb/breadcrumb-config.model.ts rename to projects/dspace/core/src/lib/breadcrumbs/models/breadcrumb-config.model.ts index cc9277ee50b..9a1af735aa4 100644 --- a/src/app/breadcrumbs/breadcrumb/breadcrumb-config.model.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/models/breadcrumb-config.model.ts @@ -1,4 +1,4 @@ -import { BreadcrumbsProviderService } from '../../core/breadcrumbs/breadcrumbsProviderService'; +import { BreadcrumbsProviderService } from '../breadcrumbsProviderService'; /** * Interface for breadcrumb configuration objects diff --git a/src/app/breadcrumbs/breadcrumb/breadcrumb.model.ts b/projects/dspace/core/src/lib/breadcrumbs/models/breadcrumb.model.ts similarity index 100% rename from src/app/breadcrumbs/breadcrumb/breadcrumb.model.ts rename to projects/dspace/core/src/lib/breadcrumbs/models/breadcrumb.model.ts diff --git a/projects/dspace/core/src/lib/breadcrumbs/models/index.ts b/projects/dspace/core/src/lib/breadcrumbs/models/index.ts new file mode 100644 index 00000000000..ae721c6f6a1 --- /dev/null +++ b/projects/dspace/core/src/lib/breadcrumbs/models/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './breadcrumb-config.model'; +export * from './breadcrumb.model'; diff --git a/src/app/core/breadcrumbs/navigation-breadcrumb.resolver.spec.ts b/projects/dspace/core/src/lib/breadcrumbs/navigation-breadcrumb.resolver.spec.ts similarity index 100% rename from src/app/core/breadcrumbs/navigation-breadcrumb.resolver.spec.ts rename to projects/dspace/core/src/lib/breadcrumbs/navigation-breadcrumb.resolver.spec.ts diff --git a/src/app/core/breadcrumbs/navigation-breadcrumb.resolver.ts b/projects/dspace/core/src/lib/breadcrumbs/navigation-breadcrumb.resolver.ts similarity index 92% rename from src/app/core/breadcrumbs/navigation-breadcrumb.resolver.ts rename to projects/dspace/core/src/lib/breadcrumbs/navigation-breadcrumb.resolver.ts index ac306ee3f5c..bcb2c0dd343 100644 --- a/src/app/core/breadcrumbs/navigation-breadcrumb.resolver.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/navigation-breadcrumb.resolver.ts @@ -1,11 +1,7 @@ import { inject } from '@angular/core'; -import { - ActivatedRouteSnapshot, - ResolveFn, - RouterStateSnapshot, -} from '@angular/router'; +import { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot } from '@angular/router'; -import { BreadcrumbConfig } from '../../breadcrumbs/breadcrumb/breadcrumb-config.model'; +import { BreadcrumbConfig } from './models/breadcrumb-config.model'; import { NavigationBreadcrumbsService } from './navigation-breadcrumb.service'; /** diff --git a/src/app/core/breadcrumbs/navigation-breadcrumb.service.ts b/projects/dspace/core/src/lib/breadcrumbs/navigation-breadcrumb.service.ts similarity index 78% rename from src/app/core/breadcrumbs/navigation-breadcrumb.service.ts rename to projects/dspace/core/src/lib/breadcrumbs/navigation-breadcrumb.service.ts index af79e59e45b..7068345ab38 100644 --- a/src/app/core/breadcrumbs/navigation-breadcrumb.service.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/navigation-breadcrumb.service.ts @@ -1,16 +1,9 @@ import { Injectable } from '@angular/core'; -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; -import { Breadcrumb } from '../../breadcrumbs/breadcrumb/breadcrumb.model'; import { BreadcrumbsProviderService } from './breadcrumbsProviderService'; - -/** - * The postfix for i18n breadcrumbs - */ -export const BREADCRUMB_MESSAGE_POSTFIX = '.breadcrumbs'; +import { Breadcrumb } from './models/breadcrumb.model'; +import { BREADCRUMB_MESSAGE_POSTFIX } from './i18n-breadcrumbs.service'; /** * Service to calculate i18n breadcrumbs for a single part of the route diff --git a/src/app/core/breadcrumbs/navigation-breadcrumbs.service.spec.ts b/projects/dspace/core/src/lib/breadcrumbs/navigation-breadcrumbs.service.spec.ts similarity index 90% rename from src/app/core/breadcrumbs/navigation-breadcrumbs.service.spec.ts rename to projects/dspace/core/src/lib/breadcrumbs/navigation-breadcrumbs.service.spec.ts index 646b967fe5b..b02dadaca22 100644 --- a/src/app/core/breadcrumbs/navigation-breadcrumbs.service.spec.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/navigation-breadcrumbs.service.spec.ts @@ -1,11 +1,8 @@ -import { - TestBed, - waitForAsync, -} from '@angular/core/testing'; +import { TestBed, waitForAsync } from '@angular/core/testing'; import { getTestScheduler } from 'jasmine-marbles'; -import { Breadcrumb } from '../../breadcrumbs/breadcrumb/breadcrumb.model'; import { BREADCRUMB_MESSAGE_POSTFIX } from './i18n-breadcrumbs.service'; +import { Breadcrumb } from './models/breadcrumb.model'; import { NavigationBreadcrumbsService } from './navigation-breadcrumb.service'; describe('NavigationBreadcrumbsService', () => { diff --git a/src/app/core/breadcrumbs/publication-claim-breadcrumb.resolver.spec.ts b/projects/dspace/core/src/lib/breadcrumbs/publication-claim-breadcrumb.resolver.spec.ts similarity index 100% rename from src/app/core/breadcrumbs/publication-claim-breadcrumb.resolver.spec.ts rename to projects/dspace/core/src/lib/breadcrumbs/publication-claim-breadcrumb.resolver.spec.ts diff --git a/src/app/core/breadcrumbs/publication-claim-breadcrumb.resolver.ts b/projects/dspace/core/src/lib/breadcrumbs/publication-claim-breadcrumb.resolver.ts similarity index 78% rename from src/app/core/breadcrumbs/publication-claim-breadcrumb.resolver.ts rename to projects/dspace/core/src/lib/breadcrumbs/publication-claim-breadcrumb.resolver.ts index a1b52ce333f..6b4a2428700 100644 --- a/src/app/core/breadcrumbs/publication-claim-breadcrumb.resolver.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/publication-claim-breadcrumb.resolver.ts @@ -1,11 +1,7 @@ import { inject } from '@angular/core'; -import { - ActivatedRouteSnapshot, - ResolveFn, - RouterStateSnapshot, -} from '@angular/router'; +import { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot } from '@angular/router'; -import { BreadcrumbConfig } from '../../breadcrumbs/breadcrumb/breadcrumb-config.model'; +import { BreadcrumbConfig } from './models/breadcrumb-config.model'; import { PublicationClaimBreadcrumbService } from './publication-claim-breadcrumb.service'; export const publicationClaimBreadcrumbResolver: ResolveFn> = ( diff --git a/src/app/core/breadcrumbs/publication-claim-breadcrumb.service.spec.ts b/projects/dspace/core/src/lib/breadcrumbs/publication-claim-breadcrumb.service.spec.ts similarity index 88% rename from src/app/core/breadcrumbs/publication-claim-breadcrumb.service.spec.ts rename to projects/dspace/core/src/lib/breadcrumbs/publication-claim-breadcrumb.service.spec.ts index 8424b5edda8..8463746e1ba 100644 --- a/src/app/core/breadcrumbs/publication-claim-breadcrumb.service.spec.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/publication-claim-breadcrumb.service.spec.ts @@ -1,12 +1,9 @@ -import { - TestBed, - waitForAsync, -} from '@angular/core/testing'; +import { TestBed, waitForAsync } from '@angular/core/testing'; import { getTestScheduler } from 'jasmine-marbles'; import { of } from 'rxjs'; -import { Breadcrumb } from '../../breadcrumbs/breadcrumb/breadcrumb.model'; -import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; +import { Breadcrumb } from './models/breadcrumb.model'; import { PublicationClaimBreadcrumbService } from './publication-claim-breadcrumb.service'; describe('PublicationClaimBreadcrumbService', () => { diff --git a/src/app/core/breadcrumbs/publication-claim-breadcrumb.service.ts b/projects/dspace/core/src/lib/breadcrumbs/publication-claim-breadcrumb.service.ts similarity index 94% rename from src/app/core/breadcrumbs/publication-claim-breadcrumb.service.ts rename to projects/dspace/core/src/lib/breadcrumbs/publication-claim-breadcrumb.service.ts index 43b7ed5761b..07eeefacae4 100644 --- a/src/app/core/breadcrumbs/publication-claim-breadcrumb.service.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/publication-claim-breadcrumb.service.ts @@ -1,18 +1,15 @@ import { Injectable } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; -import { - combineLatest, - Observable, -} from 'rxjs'; +import { combineLatest, Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { Breadcrumb } from '../../breadcrumbs/breadcrumb/breadcrumb.model'; import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service'; import { FeatureID } from '../data/feature-authorization/feature-id'; import { ItemDataService } from '../data/item-data.service'; import { getFirstCompletedRemoteData } from '../shared/operators'; import { BreadcrumbsProviderService } from './breadcrumbsProviderService'; import { DSONameService } from './dso-name.service'; +import { Breadcrumb } from './models/breadcrumb.model'; /** * Service to calculate Publication claims breadcrumbs diff --git a/src/app/core/breadcrumbs/sources-breadcrumb.resolver.spec.ts b/projects/dspace/core/src/lib/breadcrumbs/sources-breadcrumb.resolver.spec.ts similarity index 100% rename from src/app/core/breadcrumbs/sources-breadcrumb.resolver.spec.ts rename to projects/dspace/core/src/lib/breadcrumbs/sources-breadcrumb.resolver.spec.ts diff --git a/src/app/core/breadcrumbs/sources-breadcrumb.resolver.ts b/projects/dspace/core/src/lib/breadcrumbs/sources-breadcrumb.resolver.ts similarity index 83% rename from src/app/core/breadcrumbs/sources-breadcrumb.resolver.ts rename to projects/dspace/core/src/lib/breadcrumbs/sources-breadcrumb.resolver.ts index 253bed174c3..53e203f333a 100644 --- a/src/app/core/breadcrumbs/sources-breadcrumb.resolver.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/sources-breadcrumb.resolver.ts @@ -1,11 +1,7 @@ import { inject } from '@angular/core'; -import { - ActivatedRouteSnapshot, - ResolveFn, - RouterStateSnapshot, -} from '@angular/router'; +import { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot } from '@angular/router'; -import { BreadcrumbConfig } from '../../breadcrumbs/breadcrumb/breadcrumb-config.model'; +import { BreadcrumbConfig } from './models/breadcrumb-config.model'; import { SourcesBreadcrumbService } from './sources-breadcrumb.service'; export const sourcesBreadcrumbResolver: ResolveFn> = ( diff --git a/src/app/core/breadcrumbs/sources-breadcrumb.service.spec.ts b/projects/dspace/core/src/lib/breadcrumbs/sources-breadcrumb.service.spec.ts similarity index 92% rename from src/app/core/breadcrumbs/sources-breadcrumb.service.spec.ts rename to projects/dspace/core/src/lib/breadcrumbs/sources-breadcrumb.service.spec.ts index e4cdf523ce1..a5c0cae9ea0 100644 --- a/src/app/core/breadcrumbs/sources-breadcrumb.service.spec.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/sources-breadcrumb.service.spec.ts @@ -1,10 +1,7 @@ -import { - TestBed, - waitForAsync, -} from '@angular/core/testing'; +import { TestBed, waitForAsync } from '@angular/core/testing'; import { getTestScheduler } from 'jasmine-marbles'; -import { Breadcrumb } from '../../breadcrumbs/breadcrumb/breadcrumb.model'; +import { Breadcrumb } from './models/breadcrumb.model'; import { SourcesBreadcrumbService } from './sources-breadcrumb.service'; describe('SourcesBreadcrumbService', () => { diff --git a/src/app/core/breadcrumbs/sources-breadcrumb.service.ts b/projects/dspace/core/src/lib/breadcrumbs/sources-breadcrumb.service.ts similarity index 91% rename from src/app/core/breadcrumbs/sources-breadcrumb.service.ts rename to projects/dspace/core/src/lib/breadcrumbs/sources-breadcrumb.service.ts index 7d69604c85f..1235ee0551f 100644 --- a/src/app/core/breadcrumbs/sources-breadcrumb.service.ts +++ b/projects/dspace/core/src/lib/breadcrumbs/sources-breadcrumb.service.ts @@ -1,12 +1,9 @@ import { Injectable } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; -import { Breadcrumb } from '../../breadcrumbs/breadcrumb/breadcrumb.model'; import { BreadcrumbsProviderService } from './breadcrumbsProviderService'; +import { Breadcrumb } from './models/breadcrumb.model'; /** * Service to calculate QA breadcrumbs for a single part of the route diff --git a/src/app/browse-by/browse-by-switcher/browse-by-data-type.ts b/projects/dspace/core/src/lib/browse/browse-by-data-type.ts similarity index 100% rename from src/app/browse-by/browse-by-switcher/browse-by-data-type.ts rename to projects/dspace/core/src/lib/browse/browse-by-data-type.ts diff --git a/src/app/core/browse/browse-definition-data.service.spec.ts b/projects/dspace/core/src/lib/browse/browse-definition-data.service.spec.ts similarity index 85% rename from src/app/core/browse/browse-definition-data.service.spec.ts rename to projects/dspace/core/src/lib/browse/browse-definition-data.service.spec.ts index affa63a5480..28638a7b7b7 100644 --- a/src/app/core/browse/browse-definition-data.service.spec.ts +++ b/projects/dspace/core/src/lib/browse/browse-definition-data.service.spec.ts @@ -1,11 +1,11 @@ import { EMPTY } from 'rxjs'; -import { getMockObjectCacheService } from '../../shared/mocks/object-cache.service.mock'; -import { getMockRemoteDataBuildService } from '../../shared/mocks/remote-data-build.service.mock'; -import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; -import { followLink } from '../../shared/utils/follow-link-config.model'; import { FindListOptions } from '../data/find-list-options.model'; import { RequestService } from '../data/request.service'; +import { followLink } from '../shared/follow-link-config.model'; +import { HALEndpointServiceStub } from '../testing/hal-endpoint-service.stub'; +import { getMockObjectCacheService } from '../testing/object-cache.service.mock'; +import { getMockRemoteDataBuildService } from '../testing/remote-data-build.service.mock'; import { BrowseDefinitionDataService } from './browse-definition-data.service'; describe(`BrowseDefinitionDataService`, () => { diff --git a/src/app/core/browse/browse-definition-data.service.ts b/projects/dspace/core/src/lib/browse/browse-definition-data.service.ts similarity index 95% rename from src/app/core/browse/browse-definition-data.service.ts rename to projects/dspace/core/src/lib/browse/browse-definition-data.service.ts index 1720c2c83a2..278a520c722 100644 --- a/src/app/core/browse/browse-definition-data.service.ts +++ b/projects/dspace/core/src/lib/browse/browse-definition-data.service.ts @@ -1,35 +1,22 @@ // eslint-disable-next-line max-classes-per-file import { Injectable } from '@angular/core'; -import { - Observable, - of, -} from 'rxjs'; +import { hasValue, isNotEmpty, isNotEmptyOperator } from '@dspace/utils'; +import { Observable, of } from 'rxjs'; import { take } from 'rxjs/operators'; -import { - hasValue, - isNotEmpty, - isNotEmptyOperator, -} from '../../shared/empty.util'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; -import { - FindAllData, - FindAllDataImpl, -} from '../data/base/find-all-data'; +import { FindAllData, FindAllDataImpl } from '../data/base/find-all-data'; import { IdentifiableDataService } from '../data/base/identifiable-data.service'; -import { - SearchData, - SearchDataImpl, -} from '../data/base/search-data'; +import { SearchData, SearchDataImpl } from '../data/base/search-data'; import { FindListOptions } from '../data/find-list-options.model'; import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; import { BrowseDefinitionRestRequest } from '../data/request.models'; import { RequestService } from '../data/request.service'; import { BrowseDefinition } from '../shared/browse-definition.model'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; /** diff --git a/src/app/core/browse/browse-entry-search-options.model.ts b/projects/dspace/core/src/lib/browse/browse-entry-search-options.model.ts similarity index 90% rename from src/app/core/browse/browse-entry-search-options.model.ts rename to projects/dspace/core/src/lib/browse/browse-entry-search-options.model.ts index 1604c693e92..63534d5f633 100644 --- a/src/app/core/browse/browse-entry-search-options.model.ts +++ b/projects/dspace/core/src/lib/browse/browse-entry-search-options.model.ts @@ -1,5 +1,5 @@ -import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model'; import { SortOptions } from '../cache/models/sort-options.model'; +import { PaginationComponentOptions } from '../pagination/pagination-component-options.model'; /** * A class that defines the search options to be used for fetching browse entries or items diff --git a/src/app/core/browse/browse.service.spec.ts b/projects/dspace/core/src/lib/browse/browse.service.spec.ts similarity index 85% rename from src/app/core/browse/browse.service.spec.ts rename to projects/dspace/core/src/lib/browse/browse.service.spec.ts index a7db4a009ed..da4f93b9905 100644 --- a/src/app/core/browse/browse.service.spec.ts +++ b/projects/dspace/core/src/lib/browse/browse.service.spec.ts @@ -1,27 +1,27 @@ -import { - cold, - getTestScheduler, - hot, -} from 'jasmine-marbles'; +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { APP_CONFIG } from '@dspace/config'; +import { BrowseDefinitionDataService } from './browse-definition-data.service'; +import { HrefOnlyDataService } from '../data/href-only-data.service'; +import { HALEndpointService } from '../shared/hal-endpoint.service'; +import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; +import { cold, getTestScheduler, hot } from 'jasmine-marbles'; import { of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { getMockHrefOnlyDataService } from '../../shared/mocks/href-only-data.service.mock'; -import { getMockRequestService } from '../../shared/mocks/request.service.mock'; -import { - createSuccessfulRemoteDataObject, - createSuccessfulRemoteDataObject$, -} from '../../shared/remote-data.utils'; -import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; -import { - createPaginatedList, - getFirstUsedArgumentOfSpyMethod, -} from '../../shared/testing/utils.test'; import { RequestService } from '../data/request.service'; import { RequestEntry } from '../data/request-entry.model'; import { FlatBrowseDefinition } from '../shared/flat-browse-definition.model'; import { HierarchicalBrowseDefinition } from '../shared/hierarchical-browse-definition.model'; import { ValueListBrowseDefinition } from '../shared/value-list-browse-definition.model'; +import { HALEndpointServiceStub } from '../testing/hal-endpoint-service.stub'; +import { getMockHrefOnlyDataService } from '../testing/href-only-data.service.mock'; +import { getMockRequestService } from '../testing/request.service.mock'; +import { TranslateLoaderMock } from '../testing/translate-loader.mock'; +import { createPaginatedList, getFirstUsedArgumentOfSpyMethod } from '../testing/utils.test'; +import { + createSuccessfulRemoteDataObject, + createSuccessfulRemoteDataObject$, +} from '../utilities/remote-data.utils'; import { BrowseService } from './browse.service'; import { BrowseEntrySearchOptions } from './browse-entry-search-options.model'; @@ -116,28 +116,42 @@ describe('BrowseService', () => { } as RequestEntry); }; - function initTestService() { + beforeEach(waitForAsync(() => { browseDefinitionDataService = jasmine.createSpyObj('browseDefinitionDataService', { findAll: createSuccessfulRemoteDataObject$(createPaginatedList(browseDefinitions)), }); hrefOnlyDataService = getMockHrefOnlyDataService(); - return new BrowseService( - requestService, - halService, - browseDefinitionDataService, - hrefOnlyDataService, - ); - } + + return TestBed.configureTestingModule({ + imports: [ + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useClass: TranslateLoaderMock, + }, + }), + ], + providers: [ + { provide: RequestService, useValue: requestService }, + { provide: HALEndpointService, useValue: halService }, + { provide: BrowseDefinitionDataService, useValue: browseDefinitionDataService }, + { provide: HrefOnlyDataService, useValue: hrefOnlyDataService }, + { provide: APP_CONFIG, useValue: { item : { showAccessStatuses: false } } }, + BrowseService, + ], + }); + })); beforeEach(() => { + service = TestBed.inject(BrowseService); scheduler = getTestScheduler(); }); + describe('getBrowseDefinitions', () => { beforeEach(() => { requestService = getMockRequestService(getRequestEntry$(true)); - service = initTestService(); spyOn(halService, 'getEndpoint').and .returnValue(hot('--a-', { a: browsesEndpointURL })); }); @@ -156,7 +170,6 @@ describe('BrowseService', () => { beforeEach(() => { requestService = getMockRequestService(getRequestEntry$(true)); - service = initTestService(); }); describe('when getBrowseEntriesFor is called with a valid browse definition id', () => { @@ -207,7 +220,6 @@ describe('BrowseService', () => { describe('if getBrowseDefinitions fires', () => { beforeEach(() => { requestService = getMockRequestService(getRequestEntry$(true)); - service = initTestService(); spyOn(service, 'getBrowseDefinitions').and .returnValue(hot('--a-', { a: createSuccessfulRemoteDataObject(createPaginatedList(browseDefinitions)), @@ -261,7 +273,6 @@ describe('BrowseService', () => { describe('if getBrowseDefinitions doesn\'t fire', () => { it('should return undefined', () => { requestService = getMockRequestService(getRequestEntry$(true)); - service = initTestService(); spyOn(service, 'getBrowseDefinitions').and .returnValue(hot('----')); @@ -278,7 +289,6 @@ describe('BrowseService', () => { describe('getFirstItemFor', () => { beforeEach(() => { requestService = getMockRequestService(); - service = initTestService(); }); describe('when getFirstItemFor is called with a valid browse definition id', () => { diff --git a/src/app/core/browse/browse.service.ts b/projects/dspace/core/src/lib/browse/browse.service.ts similarity index 91% rename from src/app/core/browse/browse.service.ts rename to projects/dspace/core/src/lib/browse/browse.service.ts index 5fe06a700e5..9df949b71e0 100644 --- a/src/app/core/browse/browse.service.ts +++ b/projects/dspace/core/src/lib/browse/browse.service.ts @@ -1,22 +1,9 @@ -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; +import { APP_CONFIG, AppConfig } from '@dspace/config'; +import { hasValue, hasValueOperator, isEmpty, isNotEmpty } from '@dspace/utils'; import { Observable } from 'rxjs'; -import { - distinctUntilChanged, - map, - startWith, -} from 'rxjs/operators'; +import { distinctUntilChanged, map, startWith } from 'rxjs/operators'; -import { environment } from '../../../environments/environment'; -import { - hasValue, - hasValueOperator, - isEmpty, - isNotEmpty, -} from '../../shared/empty.util'; -import { - followLink, - FollowLinkConfig, -} from '../../shared/utils/follow-link-config.model'; import { SortDirection } from '../cache/models/sort-options.model'; import { HrefOnlyDataService } from '../data/href-only-data.service'; import { PaginatedList } from '../data/paginated-list.model'; @@ -25,6 +12,7 @@ import { RequestService } from '../data/request.service'; import { BrowseDefinition } from '../shared/browse-definition.model'; import { BrowseEntry } from '../shared/browse-entry.model'; import { FlatBrowseDefinition } from '../shared/flat-browse-definition.model'; +import { followLink, FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { Item } from '../shared/item.model'; import { @@ -38,22 +26,13 @@ import { URLCombiner } from '../url-combiner/url-combiner'; import { BrowseDefinitionDataService } from './browse-definition-data.service'; import { BrowseEntrySearchOptions } from './browse-entry-search-options.model'; -export function getBrowseLinksToFollow(): FollowLinkConfig[] { - const followLinks = [ - followLink('thumbnail'), - ]; - if (environment.item.showAccessStatuses) { - followLinks.push(followLink('accessStatus')); - } - return followLinks; -} - /** * The service handling all browse requests */ @Injectable({ providedIn: 'root' }) export class BrowseService { protected linkPath = 'browses'; + private readonly appConfig: AppConfig = inject(APP_CONFIG); public static toSearchKeyArray(metadataKey: string): string[] { const keyParts = metadataKey.split('.'); @@ -76,6 +55,16 @@ export class BrowseService { ) { } + getBrowseLinksToFollow(): FollowLinkConfig[] { + const followLinks = [ + followLink('thumbnail'), + ]; + if (this.appConfig.item.showAccessStatuses) { + followLinks.push(followLink('accessStatus')); + } + return followLinks; + } + /** * Get all BrowseDefinitions */ @@ -122,7 +111,7 @@ export class BrowseService { }), ); if (options.fetchThumbnail ) { - return this.hrefOnlyDataService.findListByHref(href$, {}, undefined, undefined, ...getBrowseLinksToFollow()); + return this.hrefOnlyDataService.findListByHref(href$, {}, undefined, undefined, ...this.getBrowseLinksToFollow()); } return this.hrefOnlyDataService.findListByHref(href$); } @@ -170,7 +159,7 @@ export class BrowseService { }), ); if (options.fetchThumbnail) { - return this.hrefOnlyDataService.findListByHref(href$, {}, undefined, undefined, ...getBrowseLinksToFollow()); + return this.hrefOnlyDataService.findListByHref(href$, {}, undefined, undefined, ...this.getBrowseLinksToFollow()); } return this.hrefOnlyDataService.findListByHref(href$); } diff --git a/projects/dspace/core/src/lib/browse/index.ts b/projects/dspace/core/src/lib/browse/index.ts new file mode 100644 index 00000000000..1ba86fa0342 --- /dev/null +++ b/projects/dspace/core/src/lib/browse/index.ts @@ -0,0 +1,10 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './browse-by-data-type'; +export * from './browse-definition-data.service.spec'; +export * from './browse-definition-data.service'; +export * from './browse-entry-search-options.model'; +export * from './browse.service.spec'; +export * from './browse.service'; diff --git a/src/app/core/cache/builders/build-decorators.spec.ts b/projects/dspace/core/src/lib/cache/builders/build-decorators.spec.ts similarity index 94% rename from src/app/core/cache/builders/build-decorators.spec.ts rename to projects/dspace/core/src/lib/cache/builders/build-decorators.spec.ts index 53f4cb2f7f3..e4baaa4a5a8 100644 --- a/src/app/core/cache/builders/build-decorators.spec.ts +++ b/projects/dspace/core/src/lib/cache/builders/build-decorators.spec.ts @@ -1,12 +1,7 @@ import { HALLink } from '../../shared/hal-link.model'; import { HALResource } from '../../shared/hal-resource.model'; import { ResourceType } from '../../shared/resource-type'; -import { - dataService, - getDataServiceFor, - getLinkDefinition, - link, -} from './build-decorators'; +import { dataService, getDataServiceFor, getLinkDefinition, link } from './build-decorators'; class TestHALResource implements HALResource { _links: { diff --git a/src/app/core/cache/builders/build-decorators.ts b/projects/dspace/core/src/lib/cache/builders/build-decorators.ts similarity index 98% rename from src/app/core/cache/builders/build-decorators.ts rename to projects/dspace/core/src/lib/cache/builders/build-decorators.ts index be3ffc0f4d7..e9ee5f9b3e7 100644 --- a/src/app/core/cache/builders/build-decorators.ts +++ b/projects/dspace/core/src/lib/cache/builders/build-decorators.ts @@ -1,9 +1,6 @@ import { InjectionToken } from '@angular/core'; +import { hasNoValue, hasValue } from '@dspace/utils'; -import { - hasNoValue, - hasValue, -} from '../../../shared/empty.util'; import { GenericConstructor } from '../../shared/generic-constructor'; import { HALResource } from '../../shared/hal-resource.model'; import { ResourceType } from '../../shared/resource-type'; diff --git a/projects/dspace/core/src/lib/cache/builders/index.ts b/projects/dspace/core/src/lib/cache/builders/index.ts new file mode 100644 index 00000000000..c88fdbde0df --- /dev/null +++ b/projects/dspace/core/src/lib/cache/builders/index.ts @@ -0,0 +1,10 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './build-decorators.spec'; +export * from './build-decorators'; +export * from './link.service.spec'; +export * from './link.service'; +export * from './remote-data-build.service.spec'; +export * from './remote-data-build.service'; diff --git a/src/app/core/cache/builders/link.service.spec.ts b/projects/dspace/core/src/lib/cache/builders/link.service.spec.ts similarity index 94% rename from src/app/core/cache/builders/link.service.spec.ts rename to projects/dspace/core/src/lib/cache/builders/link.service.spec.ts index 122945ab6aa..a8479d91ae9 100644 --- a/src/app/core/cache/builders/link.service.spec.ts +++ b/projects/dspace/core/src/lib/cache/builders/link.service.spec.ts @@ -1,20 +1,14 @@ /* eslint-disable max-classes-per-file */ import { TestBed } from '@angular/core/testing'; -import { - isEmpty, - take, -} from 'rxjs/operators'; +import { isEmpty, take } from 'rxjs/operators'; -import { APP_DATA_SERVICES_MAP } from '../../../../config/app-config.interface'; -import { TestDataService } from '../../../shared/testing/test-data-service.mock'; -import { followLink } from '../../../shared/utils/follow-link-config.model'; +import { APP_DATA_SERVICES_MAP } from '../../data-services-map-type'; +import { followLink } from '../../shared/follow-link-config.model'; import { HALLink } from '../../shared/hal-link.model'; import { HALResource } from '../../shared/hal-resource.model'; import { ResourceType } from '../../shared/resource-type'; -import { - LINK_DEFINITION_FACTORY, - LINK_DEFINITION_MAP_FACTORY, -} from './build-decorators'; +import { TestDataService } from '../../testing/test-data-service.mock'; +import { LINK_DEFINITION_FACTORY, LINK_DEFINITION_MAP_FACTORY } from './build-decorators'; import { LinkService } from './link.service'; const TEST_MODEL = new ResourceType('testmodel'); @@ -40,7 +34,7 @@ class TestModel implements HALResource { } const mockDataServiceMap: any = new Map([ - [TEST_MODEL.value, () => import('../../../shared/testing/test-data-service.mock').then(m => m.TestDataService)], + [TEST_MODEL.value, () => import('../../testing/test-data-service.mock').then(m => m.TestDataService)], ]); let testDataService: TestDataService; diff --git a/src/app/core/cache/builders/link.service.ts b/projects/dspace/core/src/lib/cache/builders/link.service.ts similarity index 92% rename from src/app/core/cache/builders/link.service.ts rename to projects/dspace/core/src/lib/cache/builders/link.service.ts index df3ccf1c87e..3aa1da99a7f 100644 --- a/src/app/core/cache/builders/link.service.ts +++ b/projects/dspace/core/src/lib/cache/builders/link.service.ts @@ -1,30 +1,14 @@ -import { - Inject, - Injectable, - Injector, -} from '@angular/core'; -import { - EMPTY, - Observable, -} from 'rxjs'; -import { - catchError, - switchMap, -} from 'rxjs/operators'; +import { Inject, Injectable, Injector } from '@angular/core'; +import { hasValue, isNotEmpty } from '@dspace/utils'; +import { EMPTY, Observable } from 'rxjs'; +import { catchError, switchMap } from 'rxjs/operators'; -import { - APP_DATA_SERVICES_MAP, - LazyDataServicesMap, -} from '../../../../config/app-config.interface'; -import { - hasValue, - isNotEmpty, -} from '../../../shared/empty.util'; -import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model'; import { HALDataService } from '../../data/base/hal-data-service.interface'; import { PaginatedList } from '../../data/paginated-list.model'; import { RemoteData } from '../../data/remote-data'; +import { APP_DATA_SERVICES_MAP, LazyDataServicesMap } from '../../data-services-map-type'; import { lazyDataService } from '../../lazy-data-service'; +import { FollowLinkConfig } from '../../shared/follow-link-config.model'; import { GenericConstructor } from '../../shared/generic-constructor'; import { HALResource } from '../../shared/hal-resource.model'; import { diff --git a/src/app/core/cache/builders/remote-data-build.service.spec.ts b/projects/dspace/core/src/lib/cache/builders/remote-data-build.service.spec.ts similarity index 98% rename from src/app/core/cache/builders/remote-data-build.service.spec.ts rename to projects/dspace/core/src/lib/cache/builders/remote-data-build.service.spec.ts index 79040b20b0c..e5ab47d62af 100644 --- a/src/app/core/cache/builders/remote-data-build.service.spec.ts +++ b/projects/dspace/core/src/lib/cache/builders/remote-data-build.service.spec.ts @@ -1,40 +1,28 @@ -import { - fakeAsync, - tick, -} from '@angular/core/testing'; +import { fakeAsync, tick } from '@angular/core/testing'; import { cold } from 'jasmine-marbles'; -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; import { take } from 'rxjs/operators'; import { TestScheduler } from 'rxjs/testing'; -import { getMockLinkService } from '../../../shared/mocks/link-service.mock'; -import { getMockObjectCacheService } from '../../../shared/mocks/object-cache.service.mock'; -import { getMockRequestService } from '../../../shared/mocks/request.service.mock'; -import { - createFailedRemoteDataObject, - createPendingRemoteDataObject, - createSuccessfulRemoteDataObject, -} from '../../../shared/remote-data.utils'; -import { - followLink, - FollowLinkConfig, -} from '../../../shared/utils/follow-link-config.model'; -import { - buildPaginatedList, - PaginatedList, -} from '../../data/paginated-list.model'; +import { buildPaginatedList, PaginatedList } from '../../data/paginated-list.model'; import { RemoteData } from '../../data/remote-data'; import { RequestService } from '../../data/request.service'; import { RequestEntry } from '../../data/request-entry.model'; import { RequestEntryState } from '../../data/request-entry-state.model'; +import { followLink, FollowLinkConfig } from '../../shared/follow-link-config.model'; import { HALLink } from '../../shared/hal-link.model'; import { Item } from '../../shared/item.model'; import { ITEM } from '../../shared/item.resource-type'; import { PageInfo } from '../../shared/page-info.model'; import { UnCacheableObject } from '../../shared/uncacheable-object.model'; +import { getMockLinkService } from '../../testing/link-service.mock'; +import { getMockObjectCacheService } from '../../testing/object-cache.service.mock'; +import { getMockRequestService } from '../../testing/request.service.mock'; +import { + createFailedRemoteDataObject, + createPendingRemoteDataObject, + createSuccessfulRemoteDataObject, +} from '../../utilities/remote-data.utils'; import { ObjectCacheService } from '../object-cache.service'; import { LinkService } from './link.service'; import { RemoteDataBuildService } from './remote-data-build.service'; diff --git a/src/app/core/cache/builders/remote-data-build.service.ts b/projects/dspace/core/src/lib/cache/builders/remote-data-build.service.ts similarity index 96% rename from src/app/core/cache/builders/remote-data-build.service.ts rename to projects/dspace/core/src/lib/cache/builders/remote-data-build.service.ts index 366e85883c2..69cdd5e190f 100644 --- a/src/app/core/cache/builders/remote-data-build.service.ts +++ b/projects/dspace/core/src/lib/cache/builders/remote-data-build.service.ts @@ -1,42 +1,17 @@ import { Injectable } from '@angular/core'; -import { - AsyncSubject, - combineLatest as observableCombineLatest, - Observable, - of, -} from 'rxjs'; -import { - distinctUntilKeyChanged, - filter, - map, - startWith, - switchMap, -} from 'rxjs/operators'; +import { hasNoValue, hasValue, isEmpty, isNotEmpty, isUndefined } from '@dspace/utils'; +import { AsyncSubject, combineLatest as observableCombineLatest, Observable, of } from 'rxjs'; +import { distinctUntilKeyChanged, filter, map, startWith, switchMap } from 'rxjs/operators'; -import { - hasNoValue, - hasValue, - isEmpty, - isNotEmpty, - isUndefined, -} from '../../../shared/empty.util'; -import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils'; -import { - followLink, - FollowLinkConfig, -} from '../../../shared/utils/follow-link-config.model'; import { PaginatedList } from '../../data/paginated-list.model'; import { PAGINATED_LIST } from '../../data/paginated-list.resource-type'; import { RemoteData } from '../../data/remote-data'; import { RequestService } from '../../data/request.service'; import { RequestEntry } from '../../data/request-entry.model'; -import { - hasSucceeded, - isStale, - RequestEntryState, -} from '../../data/request-entry-state.model'; +import { hasSucceeded, isStale, RequestEntryState } from '../../data/request-entry-state.model'; import { ResponseState } from '../../data/response-state.model'; import { getUrlWithoutEmbedParams } from '../../index/index.selectors'; +import { followLink, FollowLinkConfig } from '../../shared/follow-link-config.model'; import { GenericConstructor } from '../../shared/generic-constructor'; import { HALLink } from '../../shared/hal-link.model'; import { HALResource } from '../../shared/hal-resource.model'; @@ -45,6 +20,7 @@ import { getRequestFromRequestHref, getRequestFromRequestUUID, } from '../../shared/request.operators'; +import { createSuccessfulRemoteDataObject$ } from '../../utilities/remote-data.utils'; import { getResourceTypeValueFor } from '../object-cache.reducer'; import { ObjectCacheService } from '../object-cache.service'; import { getClassForType } from './build-decorators'; diff --git a/src/app/core/cache/cache-entry.ts b/projects/dspace/core/src/lib/cache/cache-entry.ts similarity index 100% rename from src/app/core/cache/cache-entry.ts rename to projects/dspace/core/src/lib/cache/cache-entry.ts diff --git a/src/app/core/cache/cacheable-object.model.ts b/projects/dspace/core/src/lib/cache/cacheable-object.model.ts similarity index 100% rename from src/app/core/cache/cacheable-object.model.ts rename to projects/dspace/core/src/lib/cache/cacheable-object.model.ts diff --git a/src/app/core/cache/id-to-uuid-serializer.spec.ts b/projects/dspace/core/src/lib/cache/id-to-uuid-serializer.spec.ts similarity index 100% rename from src/app/core/cache/id-to-uuid-serializer.spec.ts rename to projects/dspace/core/src/lib/cache/id-to-uuid-serializer.spec.ts diff --git a/src/app/core/cache/id-to-uuid-serializer.ts b/projects/dspace/core/src/lib/cache/id-to-uuid-serializer.ts similarity index 94% rename from src/app/core/cache/id-to-uuid-serializer.ts rename to projects/dspace/core/src/lib/cache/id-to-uuid-serializer.ts index 79576d448e2..268c6755ef7 100644 --- a/src/app/core/cache/id-to-uuid-serializer.ts +++ b/projects/dspace/core/src/lib/cache/id-to-uuid-serializer.ts @@ -1,4 +1,4 @@ -import { hasValue } from '../../shared/empty.util'; +import { hasValue } from '@dspace/utils'; /** * Serializer to create unique fake UUID's from id's that might otherwise be the same across multiple object types diff --git a/projects/dspace/core/src/lib/cache/index.ts b/projects/dspace/core/src/lib/cache/index.ts new file mode 100644 index 00000000000..88409d77fcb --- /dev/null +++ b/projects/dspace/core/src/lib/cache/index.ts @@ -0,0 +1,24 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './cache-entry'; +export * from './cacheable-object.model'; +export * from './id-to-uuid-serializer.spec'; +export * from './id-to-uuid-serializer'; +export * from './object-cache.actions'; +export * from './object-cache.effects.spec'; +export * from './object-cache.effects'; +export * from './object-cache.reducer.spec'; +export * from './object-cache.reducer'; +export * from './object-cache.service.spec'; +export * from './object-cache.service'; +export * from './response.models'; +export * from './server-sync-buffer.actions'; +export * from './server-sync-buffer.effects.spec'; +export * from './server-sync-buffer.effects'; +export * from './server-sync-buffer.reducer.spec'; +export * from './server-sync-buffer.reducer'; +export * from './typed-object.model'; +export * from './builders/index'; +export * from './models/index'; diff --git a/projects/dspace/core/src/lib/cache/models/index.ts b/projects/dspace/core/src/lib/cache/models/index.ts new file mode 100644 index 00000000000..080013a4458 --- /dev/null +++ b/projects/dspace/core/src/lib/cache/models/index.ts @@ -0,0 +1,8 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './request-param.model'; +export * from './self-link.model'; +export * from './sort-options.model'; +export * from './support-level.model'; diff --git a/src/app/core/cache/models/request-param.model.ts b/projects/dspace/core/src/lib/cache/models/request-param.model.ts similarity index 100% rename from src/app/core/cache/models/request-param.model.ts rename to projects/dspace/core/src/lib/cache/models/request-param.model.ts diff --git a/src/app/core/cache/models/self-link.model.ts b/projects/dspace/core/src/lib/cache/models/self-link.model.ts similarity index 100% rename from src/app/core/cache/models/self-link.model.ts rename to projects/dspace/core/src/lib/cache/models/self-link.model.ts diff --git a/src/app/core/cache/models/sort-options.model.ts b/projects/dspace/core/src/lib/cache/models/sort-options.model.ts similarity index 100% rename from src/app/core/cache/models/sort-options.model.ts rename to projects/dspace/core/src/lib/cache/models/sort-options.model.ts diff --git a/src/app/core/cache/models/support-level.model.ts b/projects/dspace/core/src/lib/cache/models/support-level.model.ts similarity index 100% rename from src/app/core/cache/models/support-level.model.ts rename to projects/dspace/core/src/lib/cache/models/support-level.model.ts diff --git a/src/app/core/cache/object-cache.actions.ts b/projects/dspace/core/src/lib/cache/object-cache.actions.ts similarity index 99% rename from src/app/core/cache/object-cache.actions.ts rename to projects/dspace/core/src/lib/cache/object-cache.actions.ts index 5f8f60e1f1f..ebafa7e56f8 100644 --- a/src/app/core/cache/object-cache.actions.ts +++ b/projects/dspace/core/src/lib/cache/object-cache.actions.ts @@ -2,7 +2,7 @@ import { Action } from '@ngrx/store'; import { Operation } from 'fast-json-patch'; -import { type } from '../../shared/ngrx/type'; +import { type } from '../ngrx/type'; import { CacheableObject } from './cacheable-object.model'; /** diff --git a/src/app/core/cache/object-cache.effects.spec.ts b/projects/dspace/core/src/lib/cache/object-cache.effects.spec.ts similarity index 91% rename from src/app/core/cache/object-cache.effects.spec.ts rename to projects/dspace/core/src/lib/cache/object-cache.effects.spec.ts index 66270be4c26..5272a7552d8 100644 --- a/src/app/core/cache/object-cache.effects.spec.ts +++ b/projects/dspace/core/src/lib/cache/object-cache.effects.spec.ts @@ -1,12 +1,9 @@ import { TestBed } from '@angular/core/testing'; import { provideMockActions } from '@ngrx/effects/testing'; -import { - cold, - hot, -} from 'jasmine-marbles'; +import { cold, hot } from 'jasmine-marbles'; import { Observable } from 'rxjs'; -import { StoreActionTypes } from '../../store.actions'; +import { StoreActionTypes } from '../ngrx/type'; import { ResetObjectCacheTimestampsAction } from './object-cache.actions'; import { ObjectCacheEffects } from './object-cache.effects'; diff --git a/src/app/core/cache/object-cache.effects.ts b/projects/dspace/core/src/lib/cache/object-cache.effects.ts similarity index 85% rename from src/app/core/cache/object-cache.effects.ts rename to projects/dspace/core/src/lib/cache/object-cache.effects.ts index 0de59a152cb..7c22537e887 100644 --- a/src/app/core/cache/object-cache.effects.ts +++ b/projects/dspace/core/src/lib/cache/object-cache.effects.ts @@ -1,12 +1,8 @@ import { Injectable } from '@angular/core'; -import { - Actions, - createEffect, - ofType, -} from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { map } from 'rxjs/operators'; -import { StoreActionTypes } from '../../store.actions'; +import { StoreActionTypes } from '../ngrx/type'; import { ResetObjectCacheTimestampsAction } from './object-cache.actions'; @Injectable() diff --git a/src/app/core/cache/object-cache.reducer.spec.ts b/projects/dspace/core/src/lib/cache/object-cache.reducer.spec.ts similarity index 100% rename from src/app/core/cache/object-cache.reducer.spec.ts rename to projects/dspace/core/src/lib/cache/object-cache.reducer.spec.ts diff --git a/src/app/core/cache/object-cache.reducer.ts b/projects/dspace/core/src/lib/cache/object-cache.reducer.ts similarity index 98% rename from src/app/core/cache/object-cache.reducer.ts rename to projects/dspace/core/src/lib/cache/object-cache.reducer.ts index 1a780ff0083..4c97e73ea41 100644 --- a/src/app/core/cache/object-cache.reducer.ts +++ b/projects/dspace/core/src/lib/cache/object-cache.reducer.ts @@ -1,13 +1,7 @@ /* eslint-disable max-classes-per-file */ -import { - applyPatch, - Operation, -} from 'fast-json-patch'; +import { hasValue, isNotEmpty } from '@dspace/utils'; +import { applyPatch, Operation } from 'fast-json-patch'; -import { - hasValue, - isNotEmpty, -} from '../../shared/empty.util'; import { CacheEntry } from './cache-entry'; import { CacheableObject } from './cacheable-object.model'; import { diff --git a/src/app/core/cache/object-cache.service.spec.ts b/projects/dspace/core/src/lib/cache/object-cache.service.spec.ts similarity index 97% rename from src/app/core/cache/object-cache.service.spec.ts rename to projects/dspace/core/src/lib/cache/object-cache.service.spec.ts index 12183d2694a..4fab48add15 100644 --- a/src/app/core/cache/object-cache.service.spec.ts +++ b/projects/dspace/core/src/lib/cache/object-cache.service.spec.ts @@ -1,29 +1,16 @@ -import { - TestBed, - waitForAsync, -} from '@angular/core/testing'; -import { - Store, - StoreModule, -} from '@ngrx/store'; -import { - MockStore, - provideMockStore, -} from '@ngrx/store/testing'; +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { RestRequestMethod } from '@dspace/config'; +import { Store, StoreModule } from '@ngrx/store'; +import { MockStore, provideMockStore } from '@ngrx/store/testing'; import { Operation } from 'fast-json-patch'; import { cold } from 'jasmine-marbles'; import { TestColdObservable } from 'jasmine-marbles/src/test-observables'; -import { - empty, - of, -} from 'rxjs'; +import { empty, of } from 'rxjs'; import { first } from 'rxjs/operators'; import { TestScheduler } from 'rxjs/testing'; -import { storeModuleConfig } from '../../app.reducer'; import { coreReducers } from '../core.reducers'; import { CoreState } from '../core-state.model'; -import { RestRequestMethod } from '../data/rest-request-method'; import { RemoveFromIndexBySubstringAction } from '../index/index.actions'; import { IndexName } from '../index/index-name.model'; import { HALLink } from '../shared/hal-link.model'; @@ -64,6 +51,13 @@ describe('ObjectCacheService', () => { let invalidCacheEntry; let operations; + const storeModuleConfig = { + runtimeChecks: { + strictStateImmutability: true, + strictActionImmutability: true, + }, + }; + function init() { selfLink = 'https://rest.api/endpoint/1698f1d3-be98-4c51-9fd8-6bfedcbd59b7'; anotherLink = 'https://another.link/endpoint/1234'; diff --git a/src/app/core/cache/object-cache.service.ts b/projects/dspace/core/src/lib/cache/object-cache.service.ts similarity index 96% rename from src/app/core/cache/object-cache.service.ts rename to projects/dspace/core/src/lib/cache/object-cache.service.ts index c8a78140d34..e8758efc0e3 100644 --- a/src/app/core/cache/object-cache.service.ts +++ b/projects/dspace/core/src/lib/cache/object-cache.service.ts @@ -1,37 +1,13 @@ import { Injectable } from '@angular/core'; -import { - createSelector, - MemoizedSelector, - select, - Store, -} from '@ngrx/store'; -import { - applyPatch, - Operation, -} from 'fast-json-patch'; -import { - combineLatest as observableCombineLatest, - Observable, - of, -} from 'rxjs'; -import { - distinctUntilChanged, - filter, - map, - mergeMap, - switchMap, - take, -} from 'rxjs/operators'; +import { RestRequestMethod } from '@dspace/config'; +import { hasNoValue, hasValue, isEmpty, isNotEmpty } from '@dspace/utils'; +import { createSelector, MemoizedSelector, select, Store } from '@ngrx/store'; +import { applyPatch, Operation } from 'fast-json-patch'; +import { combineLatest as observableCombineLatest, Observable, of } from 'rxjs'; +import { distinctUntilChanged, filter, map, mergeMap, switchMap, take } from 'rxjs/operators'; -import { - hasNoValue, - hasValue, - isEmpty, - isNotEmpty, -} from '../../shared/empty.util'; import { coreSelector } from '../core.selectors'; import { CoreState } from '../core-state.model'; -import { RestRequestMethod } from '../data/rest-request-method'; import { RemoveFromIndexBySubstringAction } from '../index/index.actions'; import { selfLinkFromAlternativeLinkSelector, @@ -51,10 +27,7 @@ import { RemoveDependentsObjectCacheAction, RemoveFromObjectCacheAction, } from './object-cache.actions'; -import { - ObjectCacheEntry, - ObjectCacheState, -} from './object-cache.reducer'; +import { ObjectCacheEntry, ObjectCacheState } from './object-cache.reducer'; import { AddToSSBAction } from './server-sync-buffer.actions'; /** diff --git a/src/app/core/cache/response.models.ts b/projects/dspace/core/src/lib/cache/response.models.ts similarity index 100% rename from src/app/core/cache/response.models.ts rename to projects/dspace/core/src/lib/cache/response.models.ts diff --git a/src/app/core/cache/server-sync-buffer.actions.ts b/projects/dspace/core/src/lib/cache/server-sync-buffer.actions.ts similarity index 94% rename from src/app/core/cache/server-sync-buffer.actions.ts rename to projects/dspace/core/src/lib/cache/server-sync-buffer.actions.ts index c07c4e6adfc..878607cb61a 100644 --- a/src/app/core/cache/server-sync-buffer.actions.ts +++ b/projects/dspace/core/src/lib/cache/server-sync-buffer.actions.ts @@ -1,8 +1,8 @@ /* eslint-disable max-classes-per-file */ +import { RestRequestMethod } from '@dspace/config'; import { Action } from '@ngrx/store'; -import { type } from '../../shared/ngrx/type'; -import { RestRequestMethod } from '../data/rest-request-method'; +import { type } from '../ngrx/type'; /** * The list of ServerSyncBufferAction type definitions diff --git a/src/app/core/cache/server-sync-buffer.effects.spec.ts b/projects/dspace/core/src/lib/cache/server-sync-buffer.effects.spec.ts similarity index 85% rename from src/app/core/cache/server-sync-buffer.effects.spec.ts rename to projects/dspace/core/src/lib/cache/server-sync-buffer.effects.spec.ts index 55e06e32d5e..48133fc934f 100644 --- a/src/app/core/cache/server-sync-buffer.effects.spec.ts +++ b/projects/dspace/core/src/lib/cache/server-sync-buffer.effects.spec.ts @@ -1,26 +1,16 @@ import { TestBed } from '@angular/core/testing'; +import { APP_CONFIG, RestRequestMethod } from '@dspace/config'; import { provideMockActions } from '@ngrx/effects/testing'; -import { - Store, - StoreModule, -} from '@ngrx/store'; -import { - cold, - hot, -} from 'jasmine-marbles'; -import { - Observable, - of, -} from 'rxjs'; +import { Store, StoreModule } from '@ngrx/store'; +import { cold, hot } from 'jasmine-marbles'; +import { Observable, of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { storeModuleConfig } from '../../app.reducer'; -import { getMockRequestService } from '../../shared/mocks/request.service.mock'; -import { NoOpAction } from '../../shared/ngrx/no-op.action'; -import { StoreMock } from '../../shared/testing/store.mock'; import { RequestService } from '../data/request.service'; -import { RestRequestMethod } from '../data/rest-request-method'; +import { NoOpAction } from '../ngrx/no-op.action'; import { DSpaceObject } from '../shared/dspace-object.model'; +import { getMockRequestService } from '../testing/request.service.mock'; +import { StoreMock } from '../testing/store.mock'; import { ApplyPatchObjectCacheAction } from './object-cache.actions'; import { ObjectCacheService } from './object-cache.service'; import { @@ -45,6 +35,12 @@ describe('ServerSyncBufferEffects', () => { }, }; const selfLink = 'https://rest.api/endpoint/1698f1d3-be98-4c51-9fd8-6bfedcbd59b7'; + const storeModuleConfig = { + runtimeChecks: { + strictStateImmutability: true, + strictActionImmutability: true, + }, + }; let store; beforeEach(() => { @@ -75,7 +71,11 @@ describe('ServerSyncBufferEffects', () => { }, }, { provide: Store, useClass: StoreMock }, - // other providers + { provide: APP_CONFIG, useValue: { cache: { autoSync: { + defaultTime: 0, + maxBufferSize: 100, + timePerMethod: { [RestRequestMethod.PATCH]: 3 } as any, // time in seconds + } } } }, ], }); diff --git a/src/app/core/cache/server-sync-buffer.effects.ts b/projects/dspace/core/src/lib/cache/server-sync-buffer.effects.ts similarity index 84% rename from src/app/core/cache/server-sync-buffer.effects.ts rename to projects/dspace/core/src/lib/cache/server-sync-buffer.effects.ts index f044fe91fc7..b4f6ae7b0e1 100644 --- a/src/app/core/cache/server-sync-buffer.effects.ts +++ b/projects/dspace/core/src/lib/cache/server-sync-buffer.effects.ts @@ -1,42 +1,17 @@ -import { Injectable } from '@angular/core'; -import { - Actions, - createEffect, - ofType, -} from '@ngrx/effects'; -import { - Action, - createSelector, - MemoizedSelector, - select, - Store, -} from '@ngrx/store'; +import { inject, Injectable } from '@angular/core'; +import { APP_CONFIG, AppConfig, RestRequestMethod } from '@dspace/config'; +import { hasValue, isNotEmpty, isNotUndefined } from '@dspace/utils'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; +import { Action, createSelector, MemoizedSelector, select, Store } from '@ngrx/store'; import { Operation } from 'fast-json-patch'; -import { - combineLatest as observableCombineLatest, - Observable, - of, -} from 'rxjs'; -import { - delay, - exhaustMap, - map, - switchMap, - take, -} from 'rxjs/operators'; +import { combineLatest as observableCombineLatest, Observable, of } from 'rxjs'; +import { delay, exhaustMap, map, switchMap, take } from 'rxjs/operators'; -import { environment } from '../../../environments/environment'; -import { - hasValue, - isNotEmpty, - isNotUndefined, -} from '../../shared/empty.util'; -import { NoOpAction } from '../../shared/ngrx/no-op.action'; import { coreSelector } from '../core.selectors'; import { CoreState } from '../core-state.model'; import { PatchRequest } from '../data/request.models'; import { RequestService } from '../data/request.service'; -import { RestRequestMethod } from '../data/rest-request-method'; +import { NoOpAction } from '../ngrx/no-op.action'; import { ApplyPatchObjectCacheAction } from './object-cache.actions'; import { ObjectCacheEntry } from './object-cache.reducer'; import { ObjectCacheService } from './object-cache.service'; @@ -46,14 +21,11 @@ import { EmptySSBAction, ServerSyncBufferActionTypes, } from './server-sync-buffer.actions'; -import { - ServerSyncBufferEntry, - ServerSyncBufferState, -} from './server-sync-buffer.reducer'; +import { ServerSyncBufferEntry, ServerSyncBufferState } from './server-sync-buffer.reducer'; @Injectable() export class ServerSyncBufferEffects { - + private readonly appConfig: AppConfig = inject(APP_CONFIG); /** * When an ADDToSSBAction is dispatched * Set a time out (configurable per method type) @@ -64,7 +36,7 @@ export class ServerSyncBufferEffects { .pipe( ofType(ServerSyncBufferActionTypes.ADD), exhaustMap((action: AddToSSBAction) => { - const autoSyncConfig = environment.cache.autoSync; + const autoSyncConfig = this.appConfig.cache.autoSync; const timeoutInSeconds = autoSyncConfig.timePerMethod[action.payload.method] || autoSyncConfig.defaultTime; return of(new CommitSSBAction(action.payload.method)).pipe( delay(timeoutInSeconds * 1000), diff --git a/src/app/core/cache/server-sync-buffer.reducer.spec.ts b/projects/dspace/core/src/lib/cache/server-sync-buffer.reducer.spec.ts similarity index 95% rename from src/app/core/cache/server-sync-buffer.reducer.spec.ts rename to projects/dspace/core/src/lib/cache/server-sync-buffer.reducer.spec.ts index e954b5d7c0c..a54b71b9cca 100644 --- a/src/app/core/cache/server-sync-buffer.reducer.spec.ts +++ b/projects/dspace/core/src/lib/cache/server-sync-buffer.reducer.spec.ts @@ -1,12 +1,9 @@ // eslint-disable-next-line import/no-namespace +import { RestRequestMethod } from '@dspace/config'; import deepFreeze from 'deep-freeze'; -import { RestRequestMethod } from '../data/rest-request-method'; import { RemoveFromObjectCacheAction } from './object-cache.actions'; -import { - AddToSSBAction, - EmptySSBAction, -} from './server-sync-buffer.actions'; +import { AddToSSBAction, EmptySSBAction } from './server-sync-buffer.actions'; import { serverSyncBufferReducer } from './server-sync-buffer.reducer'; class NullAction extends RemoveFromObjectCacheAction { diff --git a/src/app/core/cache/server-sync-buffer.reducer.ts b/projects/dspace/core/src/lib/cache/server-sync-buffer.reducer.ts similarity index 94% rename from src/app/core/cache/server-sync-buffer.reducer.ts rename to projects/dspace/core/src/lib/cache/server-sync-buffer.reducer.ts index f1ae8943151..eed00f58577 100644 --- a/src/app/core/cache/server-sync-buffer.reducer.ts +++ b/projects/dspace/core/src/lib/cache/server-sync-buffer.reducer.ts @@ -1,8 +1,6 @@ -import { - hasNoValue, - hasValue, -} from '../../shared/empty.util'; -import { RestRequestMethod } from '../data/rest-request-method'; +import { RestRequestMethod } from '@dspace/config'; +import { hasNoValue, hasValue } from '@dspace/utils'; + import { AddToSSBAction, EmptySSBAction, diff --git a/src/app/core/cache/typed-object.model.ts b/projects/dspace/core/src/lib/cache/typed-object.model.ts similarity index 100% rename from src/app/core/cache/typed-object.model.ts rename to projects/dspace/core/src/lib/cache/typed-object.model.ts diff --git a/projects/dspace/core/src/lib/coar-notify/index.ts b/projects/dspace/core/src/lib/coar-notify/index.ts new file mode 100644 index 00000000000..f3aff54c777 --- /dev/null +++ b/projects/dspace/core/src/lib/coar-notify/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './ldn-services/index'; +export * from './notify-info/index'; diff --git a/projects/dspace/core/src/lib/coar-notify/ldn-services/index.ts b/projects/dspace/core/src/lib/coar-notify/ldn-services/index.ts new file mode 100644 index 00000000000..41cf695f66e --- /dev/null +++ b/projects/dspace/core/src/lib/coar-notify/ldn-services/index.ts @@ -0,0 +1,9 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './ldn-itemfilter-data.service.spec'; +export * from './ldn-itemfilters-data.service'; +export * from './ldn-services-data.service.spec'; +export * from './ldn-services-data.service'; +export * from './models/index'; diff --git a/src/app/admin/admin-ldn-services/ldn-services-data/ldn-itemfilter-data.service.spec.ts b/projects/dspace/core/src/lib/coar-notify/ldn-services/ldn-itemfilter-data.service.spec.ts similarity index 69% rename from src/app/admin/admin-ldn-services/ldn-services-data/ldn-itemfilter-data.service.spec.ts rename to projects/dspace/core/src/lib/coar-notify/ldn-services/ldn-itemfilter-data.service.spec.ts index 110a0779fbd..6bcf8918488 100644 --- a/src/app/admin/admin-ldn-services/ldn-services-data/ldn-itemfilter-data.service.spec.ts +++ b/projects/dspace/core/src/lib/coar-notify/ldn-services/ldn-itemfilter-data.service.spec.ts @@ -1,22 +1,19 @@ -import { - cold, - getTestScheduler, -} from 'jasmine-marbles'; +import { cold, getTestScheduler } from 'jasmine-marbles'; import { of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { RemoteDataBuildService } from '../../../core/cache/builders/remote-data-build.service'; -import { ObjectCacheService } from '../../../core/cache/object-cache.service'; -import { RestResponse } from '../../../core/cache/response.models'; -import { FindAllData } from '../../../core/data/base/find-all-data'; -import { testFindAllDataImplementation } from '../../../core/data/base/find-all-data.spec'; -import { RemoteData } from '../../../core/data/remote-data'; -import { RequestService } from '../../../core/data/request.service'; -import { RequestEntry } from '../../../core/data/request-entry.model'; -import { RequestEntryState } from '../../../core/data/request-entry-state.model'; -import { HALEndpointService } from '../../../core/shared/hal-endpoint.service'; -import { NotificationsService } from '../../../shared/notifications/notifications.service'; -import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils'; +import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; +import { ObjectCacheService } from '../../cache/object-cache.service'; +import { RestResponse } from '../../cache/response.models'; +import { FindAllData } from '../../data/base/find-all-data'; +import { testFindAllDataImplementation } from '../../data/base/find-all-data.spec'; +import { RemoteData } from '../../data/remote-data'; +import { RequestService } from '../../data/request.service'; +import { RequestEntry } from '../../data/request-entry.model'; +import { RequestEntryState } from '../../data/request-entry-state.model'; +import { NotificationsService } from '../../notification-system/notifications.service'; +import { HALEndpointService } from '../../shared/hal-endpoint.service'; +import { createSuccessfulRemoteDataObject$ } from '../../utilities/remote-data.utils'; import { LdnItemfiltersService } from './ldn-itemfilters-data.service'; describe('LdnItemfiltersService test', () => { diff --git a/src/app/admin/admin-ldn-services/ldn-services-data/ldn-itemfilters-data.service.ts b/projects/dspace/core/src/lib/coar-notify/ldn-services/ldn-itemfilters-data.service.ts similarity index 67% rename from src/app/admin/admin-ldn-services/ldn-services-data/ldn-itemfilters-data.service.ts rename to projects/dspace/core/src/lib/coar-notify/ldn-services/ldn-itemfilters-data.service.ts index d64d2ed5cbc..2cef0baf882 100644 --- a/src/app/admin/admin-ldn-services/ldn-services-data/ldn-itemfilters-data.service.ts +++ b/projects/dspace/core/src/lib/coar-notify/ldn-services/ldn-itemfilters-data.service.ts @@ -1,21 +1,18 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; -import { RemoteDataBuildService } from '../../../core/cache/builders/remote-data-build.service'; -import { ObjectCacheService } from '../../../core/cache/object-cache.service'; -import { - FindAllData, - FindAllDataImpl, -} from '../../../core/data/base/find-all-data'; -import { IdentifiableDataService } from '../../../core/data/base/identifiable-data.service'; -import { FindListOptions } from '../../../core/data/find-list-options.model'; -import { PaginatedList } from '../../../core/data/paginated-list.model'; -import { RemoteData } from '../../../core/data/remote-data'; -import { RequestService } from '../../../core/data/request.service'; -import { HALEndpointService } from '../../../core/shared/hal-endpoint.service'; -import { NotificationsService } from '../../../shared/notifications/notifications.service'; -import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model'; -import { Itemfilter } from '../ldn-services-model/ldn-service-itemfilters'; +import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; +import { ObjectCacheService } from '../../cache/object-cache.service'; +import { FindAllData, FindAllDataImpl } from '../../data/base/find-all-data'; +import { IdentifiableDataService } from '../../data/base/identifiable-data.service'; +import { FindListOptions } from '../../data/find-list-options.model'; +import { PaginatedList } from '../../data/paginated-list.model'; +import { RemoteData } from '../../data/remote-data'; +import { RequestService } from '../../data/request.service'; +import { NotificationsService } from '../../notification-system/notifications.service'; +import { FollowLinkConfig } from '../../shared/follow-link-config.model'; +import { HALEndpointService } from '../../shared/hal-endpoint.service'; +import { Itemfilter } from './models/ldn-service-itemfilters'; /** * A service responsible for fetching/sending data from/to the REST API on the itemfilters endpoint diff --git a/src/app/admin/admin-ldn-services/ldn-services-data/ldn-services-data.service.spec.ts b/projects/dspace/core/src/lib/coar-notify/ldn-services/ldn-services-data.service.spec.ts similarity index 68% rename from src/app/admin/admin-ldn-services/ldn-services-data/ldn-services-data.service.spec.ts rename to projects/dspace/core/src/lib/coar-notify/ldn-services/ldn-services-data.service.spec.ts index 4224b0aafd5..8704db7f911 100644 --- a/src/app/admin/admin-ldn-services/ldn-services-data/ldn-services-data.service.spec.ts +++ b/projects/dspace/core/src/lib/coar-notify/ldn-services/ldn-services-data.service.spec.ts @@ -1,34 +1,31 @@ -import { - cold, - getTestScheduler, -} from 'jasmine-marbles'; +import { cold, getTestScheduler } from 'jasmine-marbles'; import { of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { RemoteDataBuildService } from '../../../core/cache/builders/remote-data-build.service'; -import { RequestParam } from '../../../core/cache/models/request-param.model'; -import { ObjectCacheService } from '../../../core/cache/object-cache.service'; -import { RestResponse } from '../../../core/cache/response.models'; -import { CreateData } from '../../../core/data/base/create-data'; -import { testCreateDataImplementation } from '../../../core/data/base/create-data.spec'; -import { DeleteData } from '../../../core/data/base/delete-data'; -import { testDeleteDataImplementation } from '../../../core/data/base/delete-data.spec'; -import { FindAllData } from '../../../core/data/base/find-all-data'; -import { testFindAllDataImplementation } from '../../../core/data/base/find-all-data.spec'; -import { PatchData } from '../../../core/data/base/patch-data'; -import { testPatchDataImplementation } from '../../../core/data/base/patch-data.spec'; -import { SearchData } from '../../../core/data/base/search-data'; -import { testSearchDataImplementation } from '../../../core/data/base/search-data.spec'; -import { FindListOptions } from '../../../core/data/find-list-options.model'; -import { RemoteData } from '../../../core/data/remote-data'; -import { RequestService } from '../../../core/data/request.service'; -import { RequestEntry } from '../../../core/data/request-entry.model'; -import { RequestEntryState } from '../../../core/data/request-entry-state.model'; -import { HALEndpointService } from '../../../core/shared/hal-endpoint.service'; -import { NotificationsService } from '../../../shared/notifications/notifications.service'; -import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils'; -import { createPaginatedList } from '../../../shared/testing/utils.test'; -import { mockLdnService } from '../ldn-service-serviceMock/ldnServicesRD$-mock'; +import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; +import { RequestParam } from '../../cache/models/request-param.model'; +import { ObjectCacheService } from '../../cache/object-cache.service'; +import { RestResponse } from '../../cache/response.models'; +import { CreateData } from '../../data/base/create-data'; +import { testCreateDataImplementation } from '../../data/base/create-data.spec'; +import { DeleteData } from '../../data/base/delete-data'; +import { testDeleteDataImplementation } from '../../data/base/delete-data.spec'; +import { FindAllData } from '../../data/base/find-all-data'; +import { testFindAllDataImplementation } from '../../data/base/find-all-data.spec'; +import { PatchData } from '../../data/base/patch-data'; +import { testPatchDataImplementation } from '../../data/base/patch-data.spec'; +import { SearchData } from '../../data/base/search-data'; +import { testSearchDataImplementation } from '../../data/base/search-data.spec'; +import { FindListOptions } from '../../data/find-list-options.model'; +import { RemoteData } from '../../data/remote-data'; +import { RequestService } from '../../data/request.service'; +import { RequestEntry } from '../../data/request-entry.model'; +import { RequestEntryState } from '../../data/request-entry-state.model'; +import { NotificationsService } from '../../notification-system/notifications.service'; +import { HALEndpointService } from '../../shared/hal-endpoint.service'; +import { mockLdnService } from '../../testing/ldn-services-mock'; +import { createPaginatedList } from '../../testing/utils.test'; +import { createSuccessfulRemoteDataObject$ } from '../../utilities/remote-data.utils'; import { LdnServicesService } from './ldn-services-data.service'; describe('LdnServicesService test', () => { diff --git a/src/app/admin/admin-ldn-services/ldn-services-data/ldn-services-data.service.ts b/projects/dspace/core/src/lib/coar-notify/ldn-services/ldn-services-data.service.ts similarity index 83% rename from src/app/admin/admin-ldn-services/ldn-services-data/ldn-services-data.service.ts rename to projects/dspace/core/src/lib/coar-notify/ldn-services/ldn-services-data.service.ts index 6e368dd6809..9ec888381d9 100644 --- a/src/app/admin/admin-ldn-services/ldn-services-data/ldn-services-data.service.ts +++ b/projects/dspace/core/src/lib/coar-notify/ldn-services/ldn-services-data.service.ts @@ -1,47 +1,32 @@ import { Injectable } from '@angular/core'; +import { RestRequestMethod } from '@dspace/config'; import { Operation } from 'fast-json-patch'; import { Observable } from 'rxjs'; -import { - map, - take, -} from 'rxjs/operators'; - -import { RemoteDataBuildService } from '../../../core/cache/builders/remote-data-build.service'; -import { RequestParam } from '../../../core/cache/models/request-param.model'; -import { ObjectCacheService } from '../../../core/cache/object-cache.service'; -import { - CreateData, - CreateDataImpl, -} from '../../../core/data/base/create-data'; -import { - DeleteData, - DeleteDataImpl, -} from '../../../core/data/base/delete-data'; -import { - FindAllData, - FindAllDataImpl, -} from '../../../core/data/base/find-all-data'; -import { IdentifiableDataService } from '../../../core/data/base/identifiable-data.service'; -import { - PatchData, - PatchDataImpl, -} from '../../../core/data/base/patch-data'; -import { SearchDataImpl } from '../../../core/data/base/search-data'; -import { ChangeAnalyzer } from '../../../core/data/change-analyzer'; -import { FindListOptions } from '../../../core/data/find-list-options.model'; -import { PaginatedList } from '../../../core/data/paginated-list.model'; -import { RemoteData } from '../../../core/data/remote-data'; -import { MultipartPostRequest } from '../../../core/data/request.models'; -import { RequestService } from '../../../core/data/request.service'; -import { RestRequest } from '../../../core/data/rest-request.model'; -import { RestRequestMethod } from '../../../core/data/rest-request-method'; -import { HALEndpointService } from '../../../core/shared/hal-endpoint.service'; -import { NoContent } from '../../../core/shared/NoContent.model'; -import { URLCombiner } from '../../../core/url-combiner/url-combiner'; -import { NotificationsService } from '../../../shared/notifications/notifications.service'; -import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model'; -import { LdnServiceConstrain } from '../ldn-services-model/ldn-service.constrain.model'; -import { LdnService } from '../ldn-services-model/ldn-services.model'; +import { map, take } from 'rxjs/operators'; + +import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; +import { RequestParam } from '../../cache/models/request-param.model'; +import { ObjectCacheService } from '../../cache/object-cache.service'; +import { CreateData, CreateDataImpl } from '../../data/base/create-data'; +import { DeleteData, DeleteDataImpl } from '../../data/base/delete-data'; +import { FindAllData, FindAllDataImpl } from '../../data/base/find-all-data'; +import { IdentifiableDataService } from '../../data/base/identifiable-data.service'; +import { PatchData, PatchDataImpl } from '../../data/base/patch-data'; +import { SearchDataImpl } from '../../data/base/search-data'; +import { ChangeAnalyzer } from '../../data/change-analyzer'; +import { FindListOptions } from '../../data/find-list-options.model'; +import { PaginatedList } from '../../data/paginated-list.model'; +import { RemoteData } from '../../data/remote-data'; +import { MultipartPostRequest } from '../../data/request.models'; +import { RequestService } from '../../data/request.service'; +import { RestRequest } from '../../data/rest-request.model'; +import { NotificationsService } from '../../notification-system/notifications.service'; +import { FollowLinkConfig } from '../../shared/follow-link-config.model'; +import { HALEndpointService } from '../../shared/hal-endpoint.service'; +import { NoContent } from '../../shared/NoContent.model'; +import { URLCombiner } from '../../url-combiner/url-combiner'; +import { LdnServiceConstrain } from './models/ldn-service.constrain.model'; +import { LdnService } from './models/ldn-services.model'; /** * Injectable service responsible for fetching/sending data from/to the REST API on the ldnservices endpoint. diff --git a/projects/dspace/core/src/lib/coar-notify/ldn-services/models/index.ts b/projects/dspace/core/src/lib/coar-notify/ldn-services/models/index.ts new file mode 100644 index 00000000000..7c44330dd2a --- /dev/null +++ b/projects/dspace/core/src/lib/coar-notify/ldn-services/models/index.ts @@ -0,0 +1,11 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './ldn-service-itemfilters'; +export * from './ldn-service-patterns.model'; +export * from './ldn-service-status.model'; +export * from './ldn-service.constrain.model'; +export * from './ldn-service.resource-type'; +export * from './ldn-services.model'; +export * from './service-constrain-type.model'; diff --git a/src/app/admin/admin-ldn-services/ldn-services-model/ldn-service-itemfilters.ts b/projects/dspace/core/src/lib/coar-notify/ldn-services/models/ldn-service-itemfilters.ts similarity index 56% rename from src/app/admin/admin-ldn-services/ldn-services-model/ldn-service-itemfilters.ts rename to projects/dspace/core/src/lib/coar-notify/ldn-services/models/ldn-service-itemfilters.ts index 25fb9e70dd4..8286092a3a5 100644 --- a/src/app/admin/admin-ldn-services/ldn-services-model/ldn-service-itemfilters.ts +++ b/projects/dspace/core/src/lib/coar-notify/ldn-services/models/ldn-service-itemfilters.ts @@ -1,13 +1,9 @@ -import { - autoserialize, - deserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, deserialize, inheritSerialization } from 'cerialize'; -import { typedObject } from '../../../core/cache/builders/build-decorators'; -import { CacheableObject } from '../../../core/cache/cacheable-object.model'; -import { ResourceType } from '../../../core/shared/resource-type'; -import { excludeFromEquals } from '../../../core/utilities/equals.decorators'; +import { typedObject } from '../../../cache/builders/build-decorators'; +import { CacheableObject } from '../../../cache/cacheable-object.model'; +import { ResourceType } from '../../../shared/resource-type'; +import { excludeFromEquals } from '../../../utilities/equals.decorators'; import { LDN_SERVICE_CONSTRAINT_FILTER } from './ldn-service.resource-type'; /** A single filter value and its properties. */ diff --git a/src/app/admin/admin-ldn-services/ldn-services-model/ldn-service-patterns.model.ts b/projects/dspace/core/src/lib/coar-notify/ldn-services/models/ldn-service-patterns.model.ts similarity index 100% rename from src/app/admin/admin-ldn-services/ldn-services-model/ldn-service-patterns.model.ts rename to projects/dspace/core/src/lib/coar-notify/ldn-services/models/ldn-service-patterns.model.ts diff --git a/src/app/admin/admin-ldn-services/ldn-services-model/ldn-service-status.model.ts b/projects/dspace/core/src/lib/coar-notify/ldn-services/models/ldn-service-status.model.ts similarity index 100% rename from src/app/admin/admin-ldn-services/ldn-services-model/ldn-service-status.model.ts rename to projects/dspace/core/src/lib/coar-notify/ldn-services/models/ldn-service-status.model.ts diff --git a/src/app/admin/admin-ldn-services/ldn-services-model/ldn-service.constrain.model.ts b/projects/dspace/core/src/lib/coar-notify/ldn-services/models/ldn-service.constrain.model.ts similarity index 100% rename from src/app/admin/admin-ldn-services/ldn-services-model/ldn-service.constrain.model.ts rename to projects/dspace/core/src/lib/coar-notify/ldn-services/models/ldn-service.constrain.model.ts diff --git a/src/app/admin/admin-ldn-services/ldn-services-model/ldn-service.resource-type.ts b/projects/dspace/core/src/lib/coar-notify/ldn-services/models/ldn-service.resource-type.ts similarity index 83% rename from src/app/admin/admin-ldn-services/ldn-services-model/ldn-service.resource-type.ts rename to projects/dspace/core/src/lib/coar-notify/ldn-services/models/ldn-service.resource-type.ts index 05a881e7e74..c2072e3ef8f 100644 --- a/src/app/admin/admin-ldn-services/ldn-services-model/ldn-service.resource-type.ts +++ b/projects/dspace/core/src/lib/coar-notify/ldn-services/models/ldn-service.resource-type.ts @@ -4,7 +4,7 @@ * Needs to be in a separate file to prevent circular * dependencies in webpack. */ -import { ResourceType } from '../../../core/shared/resource-type'; +import { ResourceType } from '../../../shared/resource-type'; export const LDN_SERVICE = new ResourceType('ldnservice'); export const LDN_SERVICE_CONSTRAINT_FILTERS = new ResourceType('itemfilters'); diff --git a/src/app/admin/admin-ldn-services/ldn-services-model/ldn-services.model.ts b/projects/dspace/core/src/lib/coar-notify/ldn-services/models/ldn-services.model.ts similarity index 74% rename from src/app/admin/admin-ldn-services/ldn-services-model/ldn-services.model.ts rename to projects/dspace/core/src/lib/coar-notify/ldn-services/models/ldn-services.model.ts index 5aed22ffb96..e95d4ed38b4 100644 --- a/src/app/admin/admin-ldn-services/ldn-services-model/ldn-services.model.ts +++ b/projects/dspace/core/src/lib/coar-notify/ldn-services/models/ldn-services.model.ts @@ -1,14 +1,9 @@ -import { - autoserialize, - deserialize, - deserializeAs, - inheritSerialization, -} from 'cerialize'; - -import { typedObject } from '../../../core/cache/builders/build-decorators'; -import { CacheableObject } from '../../../core/cache/cacheable-object.model'; -import { ResourceType } from '../../../core/shared/resource-type'; -import { excludeFromEquals } from '../../../core/utilities/equals.decorators'; +import { autoserialize, deserialize, deserializeAs, inheritSerialization } from 'cerialize'; + +import { typedObject } from '../../../cache/builders/build-decorators'; +import { CacheableObject } from '../../../cache/cacheable-object.model'; +import { ResourceType } from '../../../shared/resource-type'; +import { excludeFromEquals } from '../../../utilities/equals.decorators'; import { LDN_SERVICE } from './ldn-service.resource-type'; import { NotifyServicePattern } from './ldn-service-patterns.model'; diff --git a/src/app/admin/admin-ldn-services/ldn-services-model/service-constrain-type.model.ts b/projects/dspace/core/src/lib/coar-notify/ldn-services/models/service-constrain-type.model.ts similarity index 100% rename from src/app/admin/admin-ldn-services/ldn-services-model/service-constrain-type.model.ts rename to projects/dspace/core/src/lib/coar-notify/ldn-services/models/service-constrain-type.model.ts diff --git a/src/app/admin/admin-notify-dashboard/services/admin-notify-messages.service.spec.ts b/projects/dspace/core/src/lib/coar-notify/notify-info/admin-notify-messages-data.service.spec.ts similarity index 69% rename from src/app/admin/admin-notify-dashboard/services/admin-notify-messages.service.spec.ts rename to projects/dspace/core/src/lib/coar-notify/notify-info/admin-notify-messages-data.service.spec.ts index 6178b201330..c4c9a20fb27 100644 --- a/src/app/admin/admin-notify-dashboard/services/admin-notify-messages.service.spec.ts +++ b/projects/dspace/core/src/lib/coar-notify/notify-info/admin-notify-messages-data.service.spec.ts @@ -1,29 +1,26 @@ import { deepClone } from 'fast-json-patch'; import { cold } from 'jasmine-marbles'; -import { - BehaviorSubject, - of, -} from 'rxjs'; +import { BehaviorSubject, of } from 'rxjs'; import { take } from 'rxjs/operators'; -import { RemoteDataBuildService } from '../../../core/cache/builders/remote-data-build.service'; -import { ObjectCacheService } from '../../../core/cache/object-cache.service'; -import { RestResponse } from '../../../core/cache/response.models'; -import { ItemDataService } from '../../../core/data/item-data.service'; -import { RemoteData } from '../../../core/data/remote-data'; -import { RequestService } from '../../../core/data/request.service'; -import { RequestEntry } from '../../../core/data/request-entry.model'; -import { RequestEntryState } from '../../../core/data/request-entry-state.model'; -import { HALEndpointService } from '../../../core/shared/hal-endpoint.service'; -import { NotificationsService } from '../../../shared/notifications/notifications.service'; -import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils'; -import { LdnServicesService } from '../../admin-ldn-services/ldn-services-data/ldn-services-data.service'; -import { mockAdminNotifyMessages } from '../admin-notify-search-result/admin-notify-search-result.component.spec'; -import { AdminNotifyMessage } from '../models/admin-notify-message.model'; -import { AdminNotifyMessagesService } from './admin-notify-messages.service'; +import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; +import { ObjectCacheService } from '../../cache/object-cache.service'; +import { RestResponse } from '../../cache/response.models'; +import { ItemDataService } from '../../data/item-data.service'; +import { RemoteData } from '../../data/remote-data'; +import { RequestService } from '../../data/request.service'; +import { RequestEntry } from '../../data/request-entry.model'; +import { RequestEntryState } from '../../data/request-entry-state.model'; +import { NotificationsService } from '../../notification-system/notifications.service'; +import { HALEndpointService } from '../../shared/hal-endpoint.service'; +import { mockAdminNotifyMessages } from '../../testing/admin-notify-messages.mock'; +import { createSuccessfulRemoteDataObject$ } from '../../utilities/remote-data.utils'; +import { LdnServicesService } from '../ldn-services/ldn-services-data.service'; +import { AdminNotifyMessagesDataService } from './admin-notify-messages-data.service'; +import { AdminNotifyMessage } from './models/admin-notify-message.model'; -describe('AdminNotifyMessagesService test', () => { - let service: AdminNotifyMessagesService; +describe('AdminNotifyMessagesDataService test', () => { + let service: AdminNotifyMessagesDataService; let requestService: RequestService; let rdbService: RemoteDataBuildService; let objectCache: ObjectCacheService; @@ -43,7 +40,7 @@ describe('AdminNotifyMessagesService test', () => { const testRelatedItemName = 'testRelatedItem'; function initTestService() { - return new AdminNotifyMessagesService( + return new AdminNotifyMessagesDataService( requestService, rdbService, objectCache, diff --git a/src/app/admin/admin-notify-dashboard/services/admin-notify-messages.service.ts b/projects/dspace/core/src/lib/coar-notify/notify-info/admin-notify-messages-data.service.ts similarity index 73% rename from src/app/admin/admin-notify-dashboard/services/admin-notify-messages.service.ts rename to projects/dspace/core/src/lib/coar-notify/notify-info/admin-notify-messages-data.service.ts index 2211facfc87..aab771b134f 100644 --- a/src/app/admin/admin-notify-dashboard/services/admin-notify-messages.service.ts +++ b/projects/dspace/core/src/lib/coar-notify/notify-info/admin-notify-messages-data.service.ts @@ -1,43 +1,32 @@ import { Injectable } from '@angular/core'; -import { - BehaviorSubject, - from, - Observable, - of, - scan, -} from 'rxjs'; -import { - map, - mergeMap, - switchMap, - tap, -} from 'rxjs/operators'; +import { BehaviorSubject, from, Observable, of, scan } from 'rxjs'; +import { map, mergeMap, switchMap, tap } from 'rxjs/operators'; -import { RemoteDataBuildService } from '../../../core/cache/builders/remote-data-build.service'; -import { ObjectCacheService } from '../../../core/cache/object-cache.service'; -import { IdentifiableDataService } from '../../../core/data/base/identifiable-data.service'; -import { ItemDataService } from '../../../core/data/item-data.service'; -import { PostRequest } from '../../../core/data/request.models'; -import { RequestService } from '../../../core/data/request.service'; -import { RestRequest } from '../../../core/data/rest-request.model'; -import { HALEndpointService } from '../../../core/shared/hal-endpoint.service'; +import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; +import { ObjectCacheService } from '../../cache/object-cache.service'; +import { IdentifiableDataService } from '../../data/base/identifiable-data.service'; +import { ItemDataService } from '../../data/item-data.service'; +import { PostRequest } from '../../data/request.models'; +import { RequestService } from '../../data/request.service'; +import { RestRequest } from '../../data/rest-request.model'; +import { NotificationsService } from '../../notification-system/notifications.service'; +import { HALEndpointService } from '../../shared/hal-endpoint.service'; import { getAllSucceededRemoteDataPayload, getFirstCompletedRemoteData, -} from '../../../core/shared/operators'; -import { NotificationsService } from '../../../shared/notifications/notifications.service'; -import { LdnServicesService } from '../../admin-ldn-services/ldn-services-data/ldn-services-data.service'; -import { AdminNotifyMessage } from '../models/admin-notify-message.model'; +} from '../../shared/operators'; +import { LdnServicesService } from '../ldn-services/ldn-services-data.service'; +import { AdminNotifyMessage } from './models/admin-notify-message.model'; /** * Injectable service responsible for fetching/sending data from/to the REST API on the messages' endpoint. * * @export - * @class AdminNotifyMessagesService + * @class AdminNotifyMessagesDataService * @extends {IdentifiableDataService} */ @Injectable({ providedIn: 'root' }) -export class AdminNotifyMessagesService extends IdentifiableDataService { +export class AdminNotifyMessagesDataService extends IdentifiableDataService { protected reprocessEndpoint = 'enqueueretry'; diff --git a/projects/dspace/core/src/lib/coar-notify/notify-info/index.ts b/projects/dspace/core/src/lib/coar-notify/notify-info/index.ts new file mode 100644 index 00000000000..64576043296 --- /dev/null +++ b/projects/dspace/core/src/lib/coar-notify/notify-info/index.ts @@ -0,0 +1,13 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './admin-notify-messages-data.service.spec'; +export * from './admin-notify-messages-data.service'; +export * from './notify-info.guard.spec'; +export * from './notify-info.guard'; +export * from './notify-info.service.spec'; +export * from './notify-info.service'; +export * from './notify-services-status-data.service.spec'; +export * from './notify-services-status-data.service'; +export * from './models/index'; diff --git a/src/app/admin/admin-notify-dashboard/models/admin-notify-message-search-result.model.ts b/projects/dspace/core/src/lib/coar-notify/notify-info/models/admin-notify-message-search-result.model.ts similarity index 100% rename from src/app/admin/admin-notify-dashboard/models/admin-notify-message-search-result.model.ts rename to projects/dspace/core/src/lib/coar-notify/notify-info/models/admin-notify-message-search-result.model.ts diff --git a/src/app/admin/admin-notify-dashboard/models/admin-notify-message.model.ts b/projects/dspace/core/src/lib/coar-notify/notify-info/models/admin-notify-message.model.ts similarity index 84% rename from src/app/admin/admin-notify-dashboard/models/admin-notify-message.model.ts rename to projects/dspace/core/src/lib/coar-notify/notify-info/models/admin-notify-message.model.ts index 2524ffed9b8..f30038da5ea 100644 --- a/src/app/admin/admin-notify-dashboard/models/admin-notify-message.model.ts +++ b/projects/dspace/core/src/lib/coar-notify/notify-info/models/admin-notify-message.model.ts @@ -1,16 +1,12 @@ -import { - autoserialize, - deserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, deserialize, inheritSerialization } from 'cerialize'; import { Observable } from 'rxjs'; -import { typedObject } from '../../../core/cache/builders/build-decorators'; -import { DSpaceObject } from '../../../core/shared/dspace-object.model'; -import { GenericConstructor } from '../../../core/shared/generic-constructor'; -import { excludeFromEquals } from '../../../core/utilities/equals.decorators'; -import { ListableObject } from '../../../shared/object-collection/shared/listable-object.model'; -import { ADMIN_NOTIFY_MESSAGE } from './admin-notify-message.resource-type'; +import { typedObject } from '../../../cache/builders/build-decorators'; +import { ADMIN_NOTIFY_MESSAGE } from '../../../shared/admin-notify-message.resource-type'; +import { DSpaceObject } from '../../../shared/dspace-object.model'; +import { GenericConstructor } from '../../../shared/generic-constructor'; +import { ListableObject } from '../../../shared/object-collection/listable-object.model'; +import { excludeFromEquals } from '../../../utilities/equals.decorators'; /** * A message that includes admin notify info diff --git a/projects/dspace/core/src/lib/coar-notify/notify-info/models/index.ts b/projects/dspace/core/src/lib/coar-notify/notify-info/models/index.ts new file mode 100644 index 00000000000..2c1ad83d4e6 --- /dev/null +++ b/projects/dspace/core/src/lib/coar-notify/notify-info/models/index.ts @@ -0,0 +1,9 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './admin-notify-message-search-result.model'; +export * from './admin-notify-message.model'; +export * from './notify-requests-status.model'; +export * from './notify-status.enum'; +export * from './submission-coar-notify.model'; diff --git a/src/app/item-page/simple/notify-requests-status/notify-requests-status.model.ts b/projects/dspace/core/src/lib/coar-notify/notify-info/models/notify-requests-status.model.ts similarity index 68% rename from src/app/item-page/simple/notify-requests-status/notify-requests-status.model.ts rename to projects/dspace/core/src/lib/coar-notify/notify-info/models/notify-requests-status.model.ts index 92a067c20a5..e2f53ef5b90 100644 --- a/src/app/item-page/simple/notify-requests-status/notify-requests-status.model.ts +++ b/projects/dspace/core/src/lib/coar-notify/notify-info/models/notify-requests-status.model.ts @@ -1,16 +1,12 @@ // eslint-disable-next-line max-classes-per-file -import { - autoserialize, - deserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, deserialize, inheritSerialization } from 'cerialize'; -import { typedObject } from '../../../core/cache/builders/build-decorators'; -import { CacheableObject } from '../../../core/cache/cacheable-object.model'; -import { HALLink } from '../../../core/shared/hal-link.model'; -import { ResourceType } from '../../../core/shared/resource-type'; -import { excludeFromEquals } from '../../../core/utilities/equals.decorators'; -import { NOTIFYREQUEST } from './notify-requests-status.resource-type'; +import { typedObject } from '../../../cache/builders/build-decorators'; +import { CacheableObject } from '../../../cache/cacheable-object.model'; +import { HALLink } from '../../../shared/hal-link.model'; +import { NOTIFYREQUEST } from '../../../shared/notify-requests-status.resource-type'; +import { ResourceType } from '../../../shared/resource-type'; +import { excludeFromEquals } from '../../../utilities/equals.decorators'; import { RequestStatusEnum } from './notify-status.enum'; /** diff --git a/src/app/item-page/simple/notify-requests-status/notify-status.enum.ts b/projects/dspace/core/src/lib/coar-notify/notify-info/models/notify-status.enum.ts similarity index 100% rename from src/app/item-page/simple/notify-requests-status/notify-status.enum.ts rename to projects/dspace/core/src/lib/coar-notify/notify-info/models/notify-status.enum.ts diff --git a/src/app/submission/sections/section-coar-notify/submission-coar-notify.config.ts b/projects/dspace/core/src/lib/coar-notify/notify-info/models/submission-coar-notify.model.ts similarity index 50% rename from src/app/submission/sections/section-coar-notify/submission-coar-notify.config.ts rename to projects/dspace/core/src/lib/coar-notify/notify-info/models/submission-coar-notify.model.ts index 04decc64599..cfc10742c2a 100644 --- a/src/app/submission/sections/section-coar-notify/submission-coar-notify.config.ts +++ b/projects/dspace/core/src/lib/coar-notify/notify-info/models/submission-coar-notify.model.ts @@ -1,15 +1,12 @@ +import { autoserialize, deserialize, deserializeAs, inheritSerialization } from 'cerialize'; + +import { typedObject } from '../../../cache/builders/build-decorators'; +import { CacheableObject } from '../../../cache/cacheable-object.model'; +import { ResourceType } from '../../../shared/resource-type'; import { - autoserialize, - deserialize, - deserializeAs, - inheritSerialization, -} from 'cerialize'; - -import { typedObject } from '../../../core/cache/builders/build-decorators'; -import { CacheableObject } from '../../../core/cache/cacheable-object.model'; -import { ResourceType } from '../../../core/shared/resource-type'; -import { excludeFromEquals } from '../../../core/utilities/equals.decorators'; -import { SUBMISSION_COAR_NOTIFY_CONFIG } from './section-coar-notify-service.resource-type'; + SUBMISSION_COAR_NOTIFY_CONFIG, +} from '../../../shared/section-coar-notify-service.resource-type'; +import { excludeFromEquals } from '../../../utilities/equals.decorators'; export interface LdnPattern { pattern: string, @@ -18,7 +15,7 @@ export interface LdnPattern { /** A SubmissionCoarNotifyConfig and its properties. */ @typedObject @inheritSerialization(CacheableObject) -export class SubmissionCoarNotifyConfig extends CacheableObject { +export class SubmissionCoarNotifyModel extends CacheableObject { static type = SUBMISSION_COAR_NOTIFY_CONFIG; @excludeFromEquals diff --git a/src/app/core/coar-notify/notify-info/notify-info.guard.spec.ts b/projects/dspace/core/src/lib/coar-notify/notify-info/notify-info.guard.spec.ts similarity index 100% rename from src/app/core/coar-notify/notify-info/notify-info.guard.spec.ts rename to projects/dspace/core/src/lib/coar-notify/notify-info/notify-info.guard.spec.ts diff --git a/src/app/core/coar-notify/notify-info/notify-info.guard.ts b/projects/dspace/core/src/lib/coar-notify/notify-info/notify-info.guard.ts similarity index 100% rename from src/app/core/coar-notify/notify-info/notify-info.guard.ts rename to projects/dspace/core/src/lib/coar-notify/notify-info/notify-info.guard.ts diff --git a/src/app/core/coar-notify/notify-info/notify-info.service.spec.ts b/projects/dspace/core/src/lib/coar-notify/notify-info/notify-info.service.spec.ts similarity index 88% rename from src/app/core/coar-notify/notify-info/notify-info.service.spec.ts rename to projects/dspace/core/src/lib/coar-notify/notify-info/notify-info.service.spec.ts index 6fa8295be06..09e66e2ea6b 100644 --- a/src/app/core/coar-notify/notify-info/notify-info.service.spec.ts +++ b/projects/dspace/core/src/lib/coar-notify/notify-info/notify-info.service.spec.ts @@ -2,10 +2,12 @@ import { TestBed } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { of } from 'rxjs'; -import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils'; -import { ActivatedRouteStub } from '../../../shared/testing/active-router.stub'; import { ConfigurationDataService } from '../../data/configuration-data.service'; -import { AuthorizationDataService } from '../../data/feature-authorization/authorization-data.service'; +import { + AuthorizationDataService, +} from '../../data/feature-authorization/authorization-data.service'; +import { ActivatedRouteStub } from '../../testing/active-router.stub'; +import { createSuccessfulRemoteDataObject$ } from '../../utilities/remote-data.utils'; import { NotifyInfoService } from './notify-info.service'; describe('NotifyInfoService', () => { diff --git a/src/app/core/coar-notify/notify-info/notify-info.service.ts b/projects/dspace/core/src/lib/coar-notify/notify-info/notify-info.service.ts similarity index 92% rename from src/app/core/coar-notify/notify-info/notify-info.service.ts rename to projects/dspace/core/src/lib/coar-notify/notify-info/notify-info.service.ts index 455c7902ee4..5a8b7f8cb2a 100644 --- a/src/app/core/coar-notify/notify-info/notify-info.service.ts +++ b/projects/dspace/core/src/lib/coar-notify/notify-info/notify-info.service.ts @@ -1,11 +1,10 @@ import { Injectable } from '@angular/core'; -import { - map, - Observable, -} from 'rxjs'; +import { map, Observable } from 'rxjs'; import { ConfigurationDataService } from '../../data/configuration-data.service'; -import { AuthorizationDataService } from '../../data/feature-authorization/authorization-data.service'; +import { + AuthorizationDataService, +} from '../../data/feature-authorization/authorization-data.service'; import { FeatureID } from '../../data/feature-authorization/feature-id'; import { RemoteData } from '../../data/remote-data'; import { ConfigurationProperty } from '../../shared/configuration-property.model'; diff --git a/src/app/core/data/notify-services-status-data.service.spec.ts b/projects/dspace/core/src/lib/coar-notify/notify-info/notify-services-status-data.service.spec.ts similarity index 76% rename from src/app/core/data/notify-services-status-data.service.spec.ts rename to projects/dspace/core/src/lib/coar-notify/notify-info/notify-services-status-data.service.spec.ts index e3368435052..19704548bba 100644 --- a/src/app/core/data/notify-services-status-data.service.spec.ts +++ b/projects/dspace/core/src/lib/coar-notify/notify-info/notify-services-status-data.service.spec.ts @@ -1,24 +1,21 @@ -import { - cold, - getTestScheduler, -} from 'jasmine-marbles'; +import { cold, getTestScheduler } from 'jasmine-marbles'; import { of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { NotifyRequestsStatus } from '../../item-page/simple/notify-requests-status/notify-requests-status.model'; +import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; +import { ObjectCacheService } from '../../cache/object-cache.service'; +import { RestResponse } from '../../cache/response.models'; +import { RemoteData } from '../../data/remote-data'; +import { RequestService } from '../../data/request.service'; +import { RequestEntry } from '../../data/request-entry.model'; +import { RequestEntryState } from '../../data/request-entry-state.model'; +import { HALEndpointService } from '../../shared/hal-endpoint.service'; import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$, -} from '../../shared/remote-data.utils'; -import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; -import { ObjectCacheService } from '../cache/object-cache.service'; -import { RestResponse } from '../cache/response.models'; -import { HALEndpointService } from '../shared/hal-endpoint.service'; +} from '../../utilities/remote-data.utils'; +import { NotifyRequestsStatus } from './models/notify-requests-status.model'; import { NotifyRequestsStatusDataService } from './notify-services-status-data.service'; -import { RemoteData } from './remote-data'; -import { RequestService } from './request.service'; -import { RequestEntry } from './request-entry.model'; -import { RequestEntryState } from './request-entry-state.model'; describe('NotifyRequestsStatusDataService test', () => { let scheduler: TestScheduler; diff --git a/src/app/core/data/notify-services-status-data.service.ts b/projects/dspace/core/src/lib/coar-notify/notify-info/notify-services-status-data.service.ts similarity index 65% rename from src/app/core/data/notify-services-status-data.service.ts rename to projects/dspace/core/src/lib/coar-notify/notify-info/notify-services-status-data.service.ts index deeaad967a7..5195900507b 100644 --- a/src/app/core/data/notify-services-status-data.service.ts +++ b/projects/dspace/core/src/lib/coar-notify/notify-info/notify-services-status-data.service.ts @@ -1,18 +1,14 @@ import { Injectable } from '@angular/core'; -import { - map, - Observable, - take, -} from 'rxjs'; +import { map, Observable, take } from 'rxjs'; -import { NotifyRequestsStatus } from '../../item-page/simple/notify-requests-status/notify-requests-status.model'; -import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; -import { ObjectCacheService } from '../cache/object-cache.service'; -import { HALEndpointService } from '../shared/hal-endpoint.service'; -import { IdentifiableDataService } from './base/identifiable-data.service'; -import { RemoteData } from './remote-data'; -import { GetRequest } from './request.models'; -import { RequestService } from './request.service'; +import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; +import { ObjectCacheService } from '../../cache/object-cache.service'; +import { IdentifiableDataService } from '../../data/base/identifiable-data.service'; +import { RemoteData } from '../../data/remote-data'; +import { GetRequest } from '../../data/request.models'; +import { RequestService } from '../../data/request.service'; +import { HALEndpointService } from '../../shared/hal-endpoint.service'; +import { NotifyRequestsStatus } from './models/notify-requests-status.model'; @Injectable({ providedIn: 'root' }) export class NotifyRequestsStatusDataService extends IdentifiableDataService { diff --git a/src/app/core/config/bulk-access-config-data.service.ts b/projects/dspace/core/src/lib/config/bulk-access-config-data.service.ts similarity index 100% rename from src/app/core/config/bulk-access-config-data.service.ts rename to projects/dspace/core/src/lib/config/bulk-access-config-data.service.ts diff --git a/src/app/submission/sections/section-coar-notify/coar-notify-config-data.service.spec.ts b/projects/dspace/core/src/lib/config/coar-notify-config-data.service.spec.ts similarity index 64% rename from src/app/submission/sections/section-coar-notify/coar-notify-config-data.service.spec.ts rename to projects/dspace/core/src/lib/config/coar-notify-config-data.service.spec.ts index cfad518b852..dcb14cd040f 100644 --- a/src/app/submission/sections/section-coar-notify/coar-notify-config-data.service.spec.ts +++ b/projects/dspace/core/src/lib/config/coar-notify-config-data.service.spec.ts @@ -1,28 +1,25 @@ -import { - cold, - getTestScheduler, -} from 'jasmine-marbles'; +import { cold, getTestScheduler } from 'jasmine-marbles'; import { of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { RemoteDataBuildService } from '../../../core/cache/builders/remote-data-build.service'; -import { ObjectCacheService } from '../../../core/cache/object-cache.service'; -import { RestResponse } from '../../../core/cache/response.models'; -import { CreateData } from '../../../core/data/base/create-data'; -import { testCreateDataImplementation } from '../../../core/data/base/create-data.spec'; -import { DeleteData } from '../../../core/data/base/delete-data'; -import { testDeleteDataImplementation } from '../../../core/data/base/delete-data.spec'; -import { FindAllData } from '../../../core/data/base/find-all-data'; -import { testFindAllDataImplementation } from '../../../core/data/base/find-all-data.spec'; -import { PatchData } from '../../../core/data/base/patch-data'; -import { testPatchDataImplementation } from '../../../core/data/base/patch-data.spec'; -import { RemoteData } from '../../../core/data/remote-data'; -import { RequestService } from '../../../core/data/request.service'; -import { RequestEntry } from '../../../core/data/request-entry.model'; -import { RequestEntryState } from '../../../core/data/request-entry-state.model'; -import { HALEndpointService } from '../../../core/shared/hal-endpoint.service'; -import { NotificationsService } from '../../../shared/notifications/notifications.service'; -import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils'; +import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; +import { ObjectCacheService } from '../cache/object-cache.service'; +import { RestResponse } from '../cache/response.models'; +import { CreateData } from '../data/base/create-data'; +import { testCreateDataImplementation } from '../data/base/create-data.spec'; +import { DeleteData } from '../data/base/delete-data'; +import { testDeleteDataImplementation } from '../data/base/delete-data.spec'; +import { FindAllData } from '../data/base/find-all-data'; +import { testFindAllDataImplementation } from '../data/base/find-all-data.spec'; +import { PatchData } from '../data/base/patch-data'; +import { testPatchDataImplementation } from '../data/base/patch-data.spec'; +import { RemoteData } from '../data/remote-data'; +import { RequestService } from '../data/request.service'; +import { RequestEntry } from '../data/request-entry.model'; +import { RequestEntryState } from '../data/request-entry-state.model'; +import { NotificationsService } from '../notification-system/notifications.service'; +import { HALEndpointService } from '../shared/hal-endpoint.service'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; import { CoarNotifyConfigDataService } from './coar-notify-config-data.service'; describe('CoarNotifyConfigDataService test', () => { diff --git a/src/app/submission/sections/section-coar-notify/coar-notify-config-data.service.ts b/projects/dspace/core/src/lib/config/coar-notify-config-data.service.ts similarity index 51% rename from src/app/submission/sections/section-coar-notify/coar-notify-config-data.service.ts rename to projects/dspace/core/src/lib/config/coar-notify-config-data.service.ts index 74b2f0b97ea..e2ec09324a3 100644 --- a/src/app/submission/sections/section-coar-notify/coar-notify-config-data.service.ts +++ b/projects/dspace/core/src/lib/config/coar-notify-config-data.service.ts @@ -1,57 +1,44 @@ import { Injectable } from '@angular/core'; +import { RestRequestMethod } from '@dspace/config'; import { Operation } from 'fast-json-patch'; import { Observable } from 'rxjs'; -import { - map, - take, -} from 'rxjs/operators'; +import { map, take } from 'rxjs/operators'; -import { RemoteDataBuildService } from '../../../core/cache/builders/remote-data-build.service'; -import { RequestParam } from '../../../core/cache/models/request-param.model'; -import { ObjectCacheService } from '../../../core/cache/object-cache.service'; -import { - CreateData, - CreateDataImpl, -} from '../../../core/data/base/create-data'; -import { - DeleteData, - DeleteDataImpl, -} from '../../../core/data/base/delete-data'; +import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; +import { RequestParam } from '../cache/models/request-param.model'; +import { ObjectCacheService } from '../cache/object-cache.service'; import { - FindAllData, - FindAllDataImpl, -} from '../../../core/data/base/find-all-data'; -import { IdentifiableDataService } from '../../../core/data/base/identifiable-data.service'; -import { - PatchData, - PatchDataImpl, -} from '../../../core/data/base/patch-data'; -import { ChangeAnalyzer } from '../../../core/data/change-analyzer'; -import { FindListOptions } from '../../../core/data/find-list-options.model'; -import { PaginatedList } from '../../../core/data/paginated-list.model'; -import { RemoteData } from '../../../core/data/remote-data'; -import { MultipartPostRequest } from '../../../core/data/request.models'; -import { RequestService } from '../../../core/data/request.service'; -import { RestRequest } from '../../../core/data/rest-request.model'; -import { RestRequestMethod } from '../../../core/data/rest-request-method'; -import { HALEndpointService } from '../../../core/shared/hal-endpoint.service'; -import { NoContent } from '../../../core/shared/NoContent.model'; -import { URLCombiner } from '../../../core/url-combiner/url-combiner'; -import { NotificationsService } from '../../../shared/notifications/notifications.service'; -import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model'; -import { SubmissionCoarNotifyConfig } from './submission-coar-notify.config'; + SubmissionCoarNotifyModel, +} from '../coar-notify/notify-info/models/submission-coar-notify.model'; +import { CreateData, CreateDataImpl } from '../data/base/create-data'; +import { DeleteData, DeleteDataImpl } from '../data/base/delete-data'; +import { FindAllData, FindAllDataImpl } from '../data/base/find-all-data'; +import { IdentifiableDataService } from '../data/base/identifiable-data.service'; +import { PatchData, PatchDataImpl } from '../data/base/patch-data'; +import { ChangeAnalyzer } from '../data/change-analyzer'; +import { FindListOptions } from '../data/find-list-options.model'; +import { PaginatedList } from '../data/paginated-list.model'; +import { RemoteData } from '../data/remote-data'; +import { MultipartPostRequest } from '../data/request.models'; +import { RequestService } from '../data/request.service'; +import { RestRequest } from '../data/rest-request.model'; +import { NotificationsService } from '../notification-system/notifications.service'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; +import { HALEndpointService } from '../shared/hal-endpoint.service'; +import { NoContent } from '../shared/NoContent.model'; +import { URLCombiner } from '../url-combiner/url-combiner'; /** * A service responsible for fetching/sending data from/to the REST API on the CoarNotifyConfig endpoint */ @Injectable({ providedIn: 'root' }) -export class CoarNotifyConfigDataService extends IdentifiableDataService implements FindAllData, DeleteData, PatchData, CreateData { - createData: CreateDataImpl; - private findAllData: FindAllDataImpl; - private deleteData: DeleteDataImpl; - private patchData: PatchDataImpl; - private comparator: ChangeAnalyzer; +export class CoarNotifyConfigDataService extends IdentifiableDataService implements FindAllData, DeleteData, PatchData, CreateData { + createData: CreateDataImpl; + private findAllData: FindAllDataImpl; + private deleteData: DeleteDataImpl; + private patchData: PatchDataImpl; + private comparator: ChangeAnalyzer; constructor( protected requestService: RequestService, @@ -68,16 +55,15 @@ export class CoarNotifyConfigDataService extends IdentifiableDataService> { + create(object: SubmissionCoarNotifyModel, ...params: RequestParam[]): Observable> { return this.createData.create(object, ...params); } - patch(object: SubmissionCoarNotifyConfig, operations: Operation[]): Observable> { + patch(object: SubmissionCoarNotifyModel, operations: Operation[]): Observable> { return this.patchData.patch(object, operations); } - update(object: SubmissionCoarNotifyConfig): Observable> { + update(object: SubmissionCoarNotifyModel): Observable> { return this.patchData.update(object); } @@ -85,15 +71,14 @@ export class CoarNotifyConfigDataService extends IdentifiableDataService { + createPatchFromCache(object: SubmissionCoarNotifyModel): Observable { return this.patchData.createPatchFromCache(object); } - findAll(options?: FindListOptions, useCachedVersionIfAvailable?: boolean, reRequestOnStale?: boolean, ...linksToFollow: FollowLinkConfig[]): Observable>> { + findAll(options?: FindListOptions, useCachedVersionIfAvailable?: boolean, reRequestOnStale?: boolean, ...linksToFollow: FollowLinkConfig[]): Observable>> { return this.findAllData.findAll(options, useCachedVersionIfAvailable, reRequestOnStale, ...linksToFollow); } - public delete(objectId: string, copyVirtualMetadata?: string[]): Observable> { return this.deleteData.delete(objectId, copyVirtualMetadata); } @@ -102,7 +87,7 @@ export class CoarNotifyConfigDataService extends IdentifiableDataService> { + public invoke(serviceName: string, serviceId: string, files: File[]): Observable> { const requestId = this.requestService.generateRequestId(); this.getBrowseEndpoint().pipe( take(1), @@ -113,7 +98,7 @@ export class CoarNotifyConfigDataService extends IdentifiableDataService this.requestService.send(request)); - return this.rdbService.buildFromRequestUUID(requestId); + return this.rdbService.buildFromRequestUUID(requestId); } private getInvocationFormData(files: File[]): FormData { diff --git a/src/app/core/config/config-data.service.spec.ts b/projects/dspace/core/src/lib/config/config-data.service.spec.ts similarity index 89% rename from src/app/core/config/config-data.service.spec.ts rename to projects/dspace/core/src/lib/config/config-data.service.spec.ts index a9979f1bb5b..c8fcdefacd5 100644 --- a/src/app/core/config/config-data.service.spec.ts +++ b/projects/dspace/core/src/lib/config/config-data.service.spec.ts @@ -1,15 +1,15 @@ import { getTestScheduler } from 'jasmine-marbles'; import { TestScheduler } from 'rxjs/testing'; -import { getMockRemoteDataBuildService } from '../../shared/mocks/remote-data-build.service.mock'; -import { getMockRequestService } from '../../shared/mocks/request.service.mock'; -import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { FindListOptions } from '../data/find-list-options.model'; import { GetRequest } from '../data/request.models'; import { RequestService } from '../data/request.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; +import { HALEndpointServiceStub } from '../testing/hal-endpoint-service.stub'; +import { getMockRemoteDataBuildService } from '../testing/remote-data-build.service.mock'; +import { getMockRequestService } from '../testing/request.service.mock'; import { ConfigDataService } from './config-data.service'; const LINK_NAME = 'test'; diff --git a/src/app/core/config/config-data.service.ts b/projects/dspace/core/src/lib/config/config-data.service.ts similarity index 97% rename from src/app/core/config/config-data.service.ts rename to projects/dspace/core/src/lib/config/config-data.service.ts index 51ca6559219..5f0ae3600f2 100644 --- a/src/app/core/config/config-data.service.ts +++ b/projects/dspace/core/src/lib/config/config-data.service.ts @@ -1,9 +1,9 @@ import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { IdentifiableDataService } from '../data/base/identifiable-data.service'; import { RemoteData } from '../data/remote-data'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { getFirstCompletedRemoteData } from '../shared/operators'; import { ConfigObject } from './models/config.model'; diff --git a/projects/dspace/core/src/lib/config/index.ts b/projects/dspace/core/src/lib/config/index.ts new file mode 100644 index 00000000000..df8042ff5f0 --- /dev/null +++ b/projects/dspace/core/src/lib/config/index.ts @@ -0,0 +1,13 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './bulk-access-config-data.service'; +export * from './coar-notify-config-data.service.spec'; +export * from './coar-notify-config-data.service'; +export * from './config-data.service.spec'; +export * from './config-data.service'; +export * from './submission-accesses-config-data.service'; +export * from './submission-forms-config-data.service'; +export * from './submission-uploads-config-data.service'; +export * from './models/index'; diff --git a/src/app/core/config/models/bulk-access-condition-options.model.ts b/projects/dspace/core/src/lib/config/models/bulk-access-condition-options.model.ts similarity index 92% rename from src/app/core/config/models/bulk-access-condition-options.model.ts rename to projects/dspace/core/src/lib/config/models/bulk-access-condition-options.model.ts index 514c682b4e5..b0104128021 100644 --- a/src/app/core/config/models/bulk-access-condition-options.model.ts +++ b/projects/dspace/core/src/lib/config/models/bulk-access-condition-options.model.ts @@ -1,8 +1,4 @@ -import { - autoserialize, - autoserializeAs, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, autoserializeAs, inheritSerialization } from 'cerialize'; import { typedObject } from '../../cache/builders/build-decorators'; import { HALLink } from '../../shared/hal-link.model'; diff --git a/src/app/core/config/models/config-access-condition-option.model.ts b/projects/dspace/core/src/lib/config/models/config-access-condition-option.model.ts similarity index 100% rename from src/app/core/config/models/config-access-condition-option.model.ts rename to projects/dspace/core/src/lib/config/models/config-access-condition-option.model.ts diff --git a/src/app/core/config/models/config-accesses-conditions-options.model.ts b/projects/dspace/core/src/lib/config/models/config-accesses-conditions-options.model.ts similarity index 100% rename from src/app/core/config/models/config-accesses-conditions-options.model.ts rename to projects/dspace/core/src/lib/config/models/config-accesses-conditions-options.model.ts diff --git a/src/app/core/config/models/config-submission-access.model.ts b/projects/dspace/core/src/lib/config/models/config-submission-access.model.ts similarity index 92% rename from src/app/core/config/models/config-submission-access.model.ts rename to projects/dspace/core/src/lib/config/models/config-submission-access.model.ts index 2e9a9291835..b9595cac8ba 100644 --- a/src/app/core/config/models/config-submission-access.model.ts +++ b/projects/dspace/core/src/lib/config/models/config-submission-access.model.ts @@ -1,8 +1,4 @@ -import { - autoserialize, - deserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, deserialize, inheritSerialization } from 'cerialize'; import { typedObject } from '../../cache/builders/build-decorators'; import { HALLink } from '../../shared/hal-link.model'; diff --git a/src/app/core/config/models/config-submission-accesses.model.ts b/projects/dspace/core/src/lib/config/models/config-submission-accesses.model.ts similarity index 100% rename from src/app/core/config/models/config-submission-accesses.model.ts rename to projects/dspace/core/src/lib/config/models/config-submission-accesses.model.ts diff --git a/src/app/core/config/models/config-submission-definition.model.ts b/projects/dspace/core/src/lib/config/models/config-submission-definition.model.ts similarity index 92% rename from src/app/core/config/models/config-submission-definition.model.ts rename to projects/dspace/core/src/lib/config/models/config-submission-definition.model.ts index eda4f54340b..819738c89c0 100644 --- a/src/app/core/config/models/config-submission-definition.model.ts +++ b/projects/dspace/core/src/lib/config/models/config-submission-definition.model.ts @@ -1,8 +1,4 @@ -import { - autoserialize, - deserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, deserialize, inheritSerialization } from 'cerialize'; import { typedObject } from '../../cache/builders/build-decorators'; import { PaginatedList } from '../../data/paginated-list.model'; diff --git a/src/app/core/config/models/config-submission-definitions.model.ts b/projects/dspace/core/src/lib/config/models/config-submission-definitions.model.ts similarity index 100% rename from src/app/core/config/models/config-submission-definitions.model.ts rename to projects/dspace/core/src/lib/config/models/config-submission-definitions.model.ts diff --git a/src/app/core/config/models/config-submission-form.model.ts b/projects/dspace/core/src/lib/config/models/config-submission-form.model.ts similarity index 79% rename from src/app/core/config/models/config-submission-form.model.ts rename to projects/dspace/core/src/lib/config/models/config-submission-form.model.ts index c524a839160..addc73b35e4 100644 --- a/src/app/core/config/models/config-submission-form.model.ts +++ b/projects/dspace/core/src/lib/config/models/config-submission-form.model.ts @@ -1,10 +1,7 @@ -import { - autoserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, inheritSerialization } from 'cerialize'; -import { FormFieldModel } from '../../../shared/form/builder/models/form-field.model'; import { typedObject } from '../../cache/builders/build-decorators'; +import { FormFieldModel } from '../../shared/form/models/form-field.model'; import { ConfigObject } from './config.model'; import { SUBMISSION_FORM_TYPE } from './config-type'; diff --git a/src/app/core/config/models/config-submission-forms.model.ts b/projects/dspace/core/src/lib/config/models/config-submission-forms.model.ts similarity index 100% rename from src/app/core/config/models/config-submission-forms.model.ts rename to projects/dspace/core/src/lib/config/models/config-submission-forms.model.ts diff --git a/src/app/core/config/models/config-submission-section.model.ts b/projects/dspace/core/src/lib/config/models/config-submission-section.model.ts similarity index 79% rename from src/app/core/config/models/config-submission-section.model.ts rename to projects/dspace/core/src/lib/config/models/config-submission-section.model.ts index 13e19544dcf..6b6a2022277 100644 --- a/src/app/core/config/models/config-submission-section.model.ts +++ b/projects/dspace/core/src/lib/config/models/config-submission-section.model.ts @@ -1,16 +1,9 @@ -import { - autoserialize, - deserialize, - inheritSerialization, -} from 'cerialize'; - -import { - SectionScope, - SectionVisibility, -} from '../../../submission/objects/section-visibility.model'; -import { SectionsType } from '../../../submission/sections/sections-type'; +import { autoserialize, deserialize, inheritSerialization } from 'cerialize'; + import { typedObject } from '../../cache/builders/build-decorators'; import { HALLink } from '../../shared/hal-link.model'; +import { SectionScope, SectionVisibility } from '../../submission/models/section-visibility.model'; +import { SectionsType } from '../../submission/sections-type'; import { ConfigObject } from './config.model'; import { SUBMISSION_SECTION_TYPE } from './config-type'; diff --git a/src/app/core/config/models/config-submission-sections.model.ts b/projects/dspace/core/src/lib/config/models/config-submission-sections.model.ts similarity index 100% rename from src/app/core/config/models/config-submission-sections.model.ts rename to projects/dspace/core/src/lib/config/models/config-submission-sections.model.ts diff --git a/src/app/core/config/models/config-submission-upload.model.ts b/projects/dspace/core/src/lib/config/models/config-submission-upload.model.ts similarity index 79% rename from src/app/core/config/models/config-submission-upload.model.ts rename to projects/dspace/core/src/lib/config/models/config-submission-upload.model.ts index cabc84d0f55..83e22dec9ff 100644 --- a/src/app/core/config/models/config-submission-upload.model.ts +++ b/projects/dspace/core/src/lib/config/models/config-submission-upload.model.ts @@ -1,23 +1,13 @@ -import { - autoserialize, - deserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, deserialize, inheritSerialization } from 'cerialize'; import { Observable } from 'rxjs'; -import { - link, - typedObject, -} from '../../cache/builders/build-decorators'; +import { link, typedObject } from '../../cache/builders/build-decorators'; import { RemoteData } from '../../data/remote-data'; import { HALLink } from '../../shared/hal-link.model'; import { ConfigObject } from './config.model'; import { AccessConditionOption } from './config-access-condition-option.model'; import { SubmissionFormsModel } from './config-submission-forms.model'; -import { - SUBMISSION_FORMS_TYPE, - SUBMISSION_UPLOAD_TYPE, -} from './config-type'; +import { SUBMISSION_FORMS_TYPE, SUBMISSION_UPLOAD_TYPE } from './config-type'; @typedObject @inheritSerialization(ConfigObject) diff --git a/src/app/core/config/models/config-submission-uploads.model.ts b/projects/dspace/core/src/lib/config/models/config-submission-uploads.model.ts similarity index 100% rename from src/app/core/config/models/config-submission-uploads.model.ts rename to projects/dspace/core/src/lib/config/models/config-submission-uploads.model.ts diff --git a/src/app/core/config/models/config-type.ts b/projects/dspace/core/src/lib/config/models/config-type.ts similarity index 100% rename from src/app/core/config/models/config-type.ts rename to projects/dspace/core/src/lib/config/models/config-type.ts diff --git a/src/app/core/config/models/config.model.ts b/projects/dspace/core/src/lib/config/models/config.model.ts similarity index 92% rename from src/app/core/config/models/config.model.ts rename to projects/dspace/core/src/lib/config/models/config.model.ts index 74d090b89db..2710999441a 100644 --- a/src/app/core/config/models/config.model.ts +++ b/projects/dspace/core/src/lib/config/models/config.model.ts @@ -1,7 +1,4 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; +import { autoserialize, deserialize } from 'cerialize'; import { CacheableObject } from '../../cache/cacheable-object.model'; import { HALLink } from '../../shared/hal-link.model'; diff --git a/projects/dspace/core/src/lib/config/models/index.ts b/projects/dspace/core/src/lib/config/models/index.ts new file mode 100644 index 00000000000..51d2bbbbc2d --- /dev/null +++ b/projects/dspace/core/src/lib/config/models/index.ts @@ -0,0 +1,19 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './bulk-access-condition-options.model'; +export * from './config-access-condition-option.model'; +export * from './config-accesses-conditions-options.model'; +export * from './config-submission-access.model'; +export * from './config-submission-accesses.model'; +export * from './config-submission-definition.model'; +export * from './config-submission-definitions.model'; +export * from './config-submission-form.model'; +export * from './config-submission-forms.model'; +export * from './config-submission-section.model'; +export * from './config-submission-sections.model'; +export * from './config-submission-upload.model'; +export * from './config-submission-uploads.model'; +export * from './config-type'; +export * from './config.model'; diff --git a/src/app/core/config/submission-accesses-config-data.service.ts b/projects/dspace/core/src/lib/config/submission-accesses-config-data.service.ts similarity index 96% rename from src/app/core/config/submission-accesses-config-data.service.ts rename to projects/dspace/core/src/lib/config/submission-accesses-config-data.service.ts index bc7a7e66d3c..5049e6c5299 100644 --- a/src/app/core/config/submission-accesses-config-data.service.ts +++ b/projects/dspace/core/src/lib/config/submission-accesses-config-data.service.ts @@ -1,11 +1,11 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { RemoteData } from '../data/remote-data'; import { RequestService } from '../data/request.service'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { ConfigDataService } from './config-data.service'; import { ConfigObject } from './models/config.model'; diff --git a/src/app/core/config/submission-forms-config-data.service.ts b/projects/dspace/core/src/lib/config/submission-forms-config-data.service.ts similarity index 96% rename from src/app/core/config/submission-forms-config-data.service.ts rename to projects/dspace/core/src/lib/config/submission-forms-config-data.service.ts index fe1234defb3..35582b695aa 100644 --- a/src/app/core/config/submission-forms-config-data.service.ts +++ b/projects/dspace/core/src/lib/config/submission-forms-config-data.service.ts @@ -1,11 +1,11 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { RemoteData } from '../data/remote-data'; import { RequestService } from '../data/request.service'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { ConfigDataService } from './config-data.service'; import { ConfigObject } from './models/config.model'; diff --git a/src/app/core/config/submission-uploads-config-data.service.ts b/projects/dspace/core/src/lib/config/submission-uploads-config-data.service.ts similarity index 94% rename from src/app/core/config/submission-uploads-config-data.service.ts rename to projects/dspace/core/src/lib/config/submission-uploads-config-data.service.ts index 10d749080e4..dcd860519dc 100644 --- a/src/app/core/config/submission-uploads-config-data.service.ts +++ b/projects/dspace/core/src/lib/config/submission-uploads-config-data.service.ts @@ -1,11 +1,11 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { RemoteData } from '../data/remote-data'; import { RequestService } from '../data/request.service'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { ConfigDataService } from './config-data.service'; import { ConfigObject } from './models/config.model'; diff --git a/projects/dspace/core/src/lib/cookies/accessibility-cookie.ts b/projects/dspace/core/src/lib/cookies/accessibility-cookie.ts new file mode 100644 index 00000000000..0e314bc7fc9 --- /dev/null +++ b/projects/dspace/core/src/lib/cookies/accessibility-cookie.ts @@ -0,0 +1,4 @@ +/** + * Name of the cookie used to store the settings locally + */ +export const ACCESSIBILITY_COOKIE = 'dsAccessibilityCookie'; diff --git a/src/app/shared/cookies/browser-orejime.service.spec.ts b/projects/dspace/core/src/lib/cookies/browser-orejime.service.spec.ts similarity index 93% rename from src/app/shared/cookies/browser-orejime.service.spec.ts rename to projects/dspace/core/src/lib/cookies/browser-orejime.service.spec.ts index 9fbe395af23..70383d12e7c 100644 --- a/src/app/shared/cookies/browser-orejime.service.spec.ts +++ b/projects/dspace/core/src/lib/cookies/browser-orejime.service.spec.ts @@ -1,4 +1,5 @@ import { TestBed } from '@angular/core/testing'; +import { APP_CONFIG, AppConfig } from '@dspace/config'; import { TranslateService } from '@ngx-translate/core'; import { getTestScheduler } from 'jasmine-marbles'; import clone from 'lodash/clone'; @@ -6,24 +7,20 @@ import cloneDeep from 'lodash/cloneDeep'; import { of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { environment } from '../../../environments/environment'; -import { AuthService } from '../../core/auth/auth.service'; -import { RestResponse } from '../../core/cache/response.models'; -import { ConfigurationDataService } from '../../core/data/configuration-data.service'; -import { EPersonDataService } from '../../core/eperson/eperson-data.service'; -import { EPerson } from '../../core/eperson/models/eperson.model'; -import { CookieService } from '../../core/services/cookie.service'; -import { ConfigurationProperty } from '../../core/shared/configuration-property.model'; -import { MetadataValue } from '../../core/shared/metadata.models'; -import { getMockTranslateService } from '../mocks/translate.service.mock'; +import { AuthService } from '../auth/auth.service'; +import { RestResponse } from '../cache/response.models'; +import { ConfigurationDataService } from '../data/configuration-data.service'; +import { EPersonDataService } from '../eperson/eperson-data.service'; +import { EPerson } from '../eperson/models/eperson.model'; +import { ConfigurationProperty } from '../shared/configuration-property.model'; +import { MetadataValue } from '../shared/metadata.models'; +import { getMockTranslateService } from '../testing/translate.service.mock'; import { createFailedRemoteDataObject$, createSuccessfulRemoteDataObject$, -} from '../remote-data.utils'; -import { - BrowserOrejimeService, - COOKIE_MDFIELD, -} from './browser-orejime.service'; +} from '../utilities/remote-data.utils'; +import { BrowserOrejimeService, COOKIE_MDFIELD } from './browser-orejime.service'; +import { CookieService } from './cookie.service'; import { ANONYMOUS_STORAGE_NAME_OREJIME } from './orejime-configuration'; describe('BrowserOrejimeService', () => { @@ -79,7 +76,13 @@ describe('BrowserOrejimeService', () => { }, }); - environment.info.enableCookieConsentPopup = true; + const appConfig: Partial = { + info: { + enablePrivacyStatement: true, + enableCookieConsentPopup: true, + }, + defaultLanguage: 'en', + }; TestBed.configureTestingModule({ providers: [ @@ -104,6 +107,10 @@ describe('BrowserOrejimeService', () => { provide: ConfigurationDataService, useValue: configurationDataService, }, + { + provide: APP_CONFIG, + useValue: appConfig, + }, ], }); service = TestBed.inject(BrowserOrejimeService); diff --git a/src/app/shared/cookies/browser-orejime.service.ts b/projects/dspace/core/src/lib/cookies/browser-orejime.service.ts similarity index 90% rename from src/app/shared/cookies/browser-orejime.service.ts rename to projects/dspace/core/src/lib/cookies/browser-orejime.service.ts index 092e996bc3c..1eff515bd07 100644 --- a/src/app/shared/cookies/browser-orejime.service.ts +++ b/projects/dspace/core/src/lib/cookies/browser-orejime.service.ts @@ -1,41 +1,22 @@ -import { - Inject, - Injectable, - InjectionToken, -} from '@angular/core'; +import { Inject, Injectable, InjectionToken } from '@angular/core'; +import { APP_CONFIG, AppConfig } from '@dspace/config'; +import { hasValue, isEmpty, isNotEmpty } from '@dspace/utils'; import { TranslateService } from '@ngx-translate/core'; import { Operation } from 'fast-json-patch'; import cloneDeep from 'lodash/cloneDeep'; import debounce from 'lodash/debounce'; -import { - combineLatest as observableCombineLatest, - Observable, - of, -} from 'rxjs'; -import { - map, - switchMap, - take, -} from 'rxjs/operators'; - -import { environment } from '../../../environments/environment'; -import { AuthService } from '../../core/auth/auth.service'; -import { ConfigurationDataService } from '../../core/data/configuration-data.service'; -import { EPersonDataService } from '../../core/eperson/eperson-data.service'; -import { EPerson } from '../../core/eperson/models/eperson.model'; -import { CAPTCHA_NAME } from '../../core/google-recaptcha/google-recaptcha.service'; -import { CookieService } from '../../core/services/cookie.service'; -import { - NativeWindowRef, - NativeWindowService, -} from '../../core/services/window.service'; -import { getFirstCompletedRemoteData } from '../../core/shared/operators'; -import { MATOMO_ENABLED } from '../../statistics/matomo.service'; -import { - hasValue, - isEmpty, - isNotEmpty, -} from '../empty.util'; +import { combineLatest as observableCombineLatest, Observable, of } from 'rxjs'; +import { map, switchMap, take } from 'rxjs/operators'; + +import { AuthService } from '../auth/auth.service'; +import { ConfigurationDataService } from '../data/configuration-data.service'; +import { EPersonDataService } from '../eperson/eperson-data.service'; +import { EPerson } from '../eperson/models/eperson.model'; +import { CAPTCHA_NAME } from '../google-recaptcha/google-recaptcha.service'; +import { NativeWindowRef, NativeWindowService } from '../services/window.service'; +import { getFirstCompletedRemoteData } from '../shared/operators'; +import { MATOMO_ENABLED } from '../statistics/models/matomo-type'; +import { CookieService } from './cookie.service'; import { OrejimeService } from './orejime.service'; import { ANONYMOUS_STORAGE_NAME_OREJIME, @@ -108,6 +89,7 @@ export class BrowserOrejimeService extends OrejimeService { private configService: ConfigurationDataService, private cookieService: CookieService, @Inject(LAZY_OREJIME) private lazyOrejime: Promise, + @Inject(APP_CONFIG) private appConfig: AppConfig, ) { super(); } @@ -120,7 +102,7 @@ export class BrowserOrejimeService extends OrejimeService { * - Add and translate orejime configuration messages */ initialize() { - if (!environment.info.enablePrivacyStatement) { + if (!this.appConfig.info.enablePrivacyStatement) { this.orejimeConfig.translations.zz.consentModal.privacyPolicy.text = 'cookies.consent.content-modal.no-privacy-policy.text'; } @@ -160,7 +142,7 @@ export class BrowserOrejimeService extends OrejimeService { }), ); - this.translateService.setDefaultLang(environment.defaultLanguage); + this.translateService.setDefaultLang(this.appConfig.defaultLanguage); const user$: Observable = this.getUser$(); @@ -191,7 +173,7 @@ export class BrowserOrejimeService extends OrejimeService { */ this.translateConfiguration(); - if (!environment.info?.enableCookieConsentPopup) { + if (!this.appConfig.info?.enableCookieConsentPopup) { this.orejimeConfig.apps = []; } else { this.orejimeConfig.apps = this.filterConfigApps(appsToHide); @@ -349,7 +331,7 @@ export class BrowserOrejimeService extends OrejimeService { /** * Make sure the fallback language is english */ - this.translateService.setDefaultLang(environment.defaultLanguage); + this.translateService.setDefaultLang(this.appConfig.defaultLanguage); this.translate(this.orejimeConfig.translations.zz); } diff --git a/src/app/core/services/client-cookie.service.ts b/projects/dspace/core/src/lib/cookies/client-cookie.service.ts similarity index 77% rename from src/app/core/services/client-cookie.service.ts rename to projects/dspace/core/src/lib/cookies/client-cookie.service.ts index e187e3352b3..15bac7ad7cc 100644 --- a/src/app/core/services/client-cookie.service.ts +++ b/projects/dspace/core/src/lib/cookies/client-cookie.service.ts @@ -1,15 +1,7 @@ import { Injectable } from '@angular/core'; -import { - CookieAttributes, - getJSON, - remove, - set, -} from 'js-cookie'; +import { CookieAttributes, getJSON, remove, set } from 'js-cookie'; -import { - CookieService, - ICookieService, -} from './cookie.service'; +import { CookieService, ICookieService } from './cookie.service'; @Injectable() export class ClientCookieService extends CookieService implements ICookieService { diff --git a/src/app/core/services/cookie.service.spec.ts b/projects/dspace/core/src/lib/cookies/cookie.service.spec.ts similarity index 71% rename from src/app/core/services/cookie.service.spec.ts rename to projects/dspace/core/src/lib/cookies/cookie.service.spec.ts index 5511ee53e1c..eb7e4e5dbd2 100644 --- a/src/app/core/services/cookie.service.spec.ts +++ b/projects/dspace/core/src/lib/cookies/cookie.service.spec.ts @@ -1,13 +1,7 @@ -import { - TestBed, - waitForAsync, -} from '@angular/core/testing'; +import { TestBed, waitForAsync } from '@angular/core/testing'; -import { REQUEST } from '../../../express.tokens'; -import { - CookieService, - ICookieService, -} from './cookie.service'; +import { REQUEST } from '../tokens/express.tokens'; +import { CookieService, ICookieService } from './cookie.service'; describe(CookieService.name, () => { let service: ICookieService; diff --git a/src/app/core/services/cookie.service.ts b/projects/dspace/core/src/lib/cookies/cookie.service.ts similarity index 94% rename from src/app/core/services/cookie.service.ts rename to projects/dspace/core/src/lib/cookies/cookie.service.ts index 4bf3514373b..c41d71b13cc 100644 --- a/src/app/core/services/cookie.service.ts +++ b/projects/dspace/core/src/lib/cookies/cookie.service.ts @@ -1,9 +1,6 @@ import { Injectable } from '@angular/core'; import { CookieAttributes } from 'js-cookie'; -import { - Observable, - Subject, -} from 'rxjs'; +import { Observable, Subject } from 'rxjs'; export interface ICookieService { readonly cookies$: Observable<{ readonly [key: string]: any }>; diff --git a/projects/dspace/core/src/lib/cookies/index.ts b/projects/dspace/core/src/lib/cookies/index.ts new file mode 100644 index 00000000000..401ba5ec78c --- /dev/null +++ b/projects/dspace/core/src/lib/cookies/index.ts @@ -0,0 +1,15 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './accessibility-cookie'; +export * from './browser-orejime.service.spec'; +export * from './browser-orejime.service'; +export * from './client-cookie.service'; +export * from './cookie.service.spec'; +export * from './cookie.service'; +export * from './orejime-configuration'; +export * from './orejime.service.stub'; +export * from './orejime.service'; +export * from './server-cookie.service'; +export * from './server-orejime.service'; diff --git a/src/app/shared/cookies/orejime-configuration.ts b/projects/dspace/core/src/lib/cookies/orejime-configuration.ts similarity index 93% rename from src/app/shared/cookies/orejime-configuration.ts rename to projects/dspace/core/src/lib/cookies/orejime-configuration.ts index da383a9a345..3899a1662f8 100644 --- a/src/app/shared/cookies/orejime-configuration.ts +++ b/projects/dspace/core/src/lib/cookies/orejime-configuration.ts @@ -1,15 +1,9 @@ -import { ACCESSIBILITY_COOKIE } from '../../accessibility/accessibility-settings.service'; -import { - IMPERSONATING_COOKIE, - REDIRECT_COOKIE, -} from '../../core/auth/auth.service'; -import { TOKENITEM } from '../../core/auth/models/auth-token-info.model'; -import { - CAPTCHA_COOKIE, - CAPTCHA_NAME, -} from '../../core/google-recaptcha/google-recaptcha.service'; -import { LANG_COOKIE } from '../../core/locale/locale.service'; -import { NativeWindowRef } from '../../core/services/window.service'; +import { IMPERSONATING_COOKIE, REDIRECT_COOKIE } from '../auth/auth.service'; +import { TOKENITEM } from '../auth/models/auth-token-info.model'; +import { CAPTCHA_COOKIE, CAPTCHA_NAME } from '../google-recaptcha/google-recaptcha.service'; +import { LANG_COOKIE } from '../locale/locale.service'; +import { NativeWindowRef } from '../services/window.service'; +import { ACCESSIBILITY_COOKIE } from './accessibility-cookie'; /** * Cookie for has_agreed_end_user diff --git a/src/app/shared/cookies/orejime.service.stub.ts b/projects/dspace/core/src/lib/cookies/orejime.service.stub.ts similarity index 100% rename from src/app/shared/cookies/orejime.service.stub.ts rename to projects/dspace/core/src/lib/cookies/orejime.service.stub.ts diff --git a/src/app/shared/cookies/orejime.service.ts b/projects/dspace/core/src/lib/cookies/orejime.service.ts similarity index 100% rename from src/app/shared/cookies/orejime.service.ts rename to projects/dspace/core/src/lib/cookies/orejime.service.ts diff --git a/src/app/core/services/server-cookie.service.ts b/projects/dspace/core/src/lib/cookies/server-cookie.service.ts similarity index 78% rename from src/app/core/services/server-cookie.service.ts rename to projects/dspace/core/src/lib/cookies/server-cookie.service.ts index 7f0327faf96..7a5afdb53d3 100644 --- a/src/app/core/services/server-cookie.service.ts +++ b/projects/dspace/core/src/lib/cookies/server-cookie.service.ts @@ -1,14 +1,8 @@ -import { - Inject, - Injectable, -} from '@angular/core'; +import { Inject, Injectable } from '@angular/core'; import { CookieAttributes } from 'js-cookie'; -import { REQUEST } from '../../../express.tokens'; -import { - CookieService, - ICookieService, -} from './cookie.service'; +import { REQUEST } from '../tokens/express.tokens'; +import { CookieService, ICookieService } from './cookie.service'; @Injectable() export class ServerCookieService extends CookieService implements ICookieService { diff --git a/src/app/shared/cookies/server-orejime.service.ts b/projects/dspace/core/src/lib/cookies/server-orejime.service.ts similarity index 94% rename from src/app/shared/cookies/server-orejime.service.ts rename to projects/dspace/core/src/lib/cookies/server-orejime.service.ts index 7997f81859d..b26a9a215a8 100644 --- a/src/app/shared/cookies/server-orejime.service.ts +++ b/projects/dspace/core/src/lib/cookies/server-orejime.service.ts @@ -1,8 +1,5 @@ import { Injectable } from '@angular/core'; -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; import { OrejimeService } from './orejime.service'; diff --git a/src/app/core/core-state.model.ts b/projects/dspace/core/src/lib/core-state.model.ts similarity index 58% rename from src/app/core/core-state.model.ts rename to projects/dspace/core/src/lib/core-state.model.ts index 2128901754b..966dc5ca5aa 100644 --- a/src/app/core/core-state.model.ts +++ b/projects/dspace/core/src/lib/core-state.model.ts @@ -1,4 +1,3 @@ -import { BitstreamFormatRegistryState } from '../admin/admin-registries/bitstream-formats/bitstream-format.reducers'; import { AuthState } from './auth/auth.reducer'; import { ObjectCacheState } from './cache/object-cache.reducer'; import { ServerSyncBufferState } from './cache/server-sync-buffer.reducer'; @@ -8,21 +7,23 @@ import { HistoryState } from './history/history.reducer'; import { MetaIndexState } from './index/index.reducer'; import { JsonPatchOperationsState } from './json-patch/json-patch-operations.reducer'; import { MetaTagState } from './metadata/meta-tag.reducer'; +import { NotificationsState } from './notification-system/notifications.reducers'; import { RouteState } from './services/route.reducer'; /** * The core sub-state in the NgRx store */ export interface CoreState { - 'bitstreamFormats': BitstreamFormatRegistryState; - 'cache/object': ObjectCacheState; - 'cache/syncbuffer': ServerSyncBufferState; - 'cache/object-updates': ObjectUpdatesState; - 'data/request': RequestState; - 'history': HistoryState; - 'index': MetaIndexState; - 'auth': AuthState; - 'json/patch': JsonPatchOperationsState; - 'metaTag': MetaTagState; - 'route': RouteState; + 'cache/object': ObjectCacheState; + 'cache/syncbuffer': ServerSyncBufferState; + 'cache/object-updates': ObjectUpdatesState; + 'data/request': RequestState; + 'history': HistoryState; + 'index': MetaIndexState; + 'auth': AuthState; + 'json/patch': JsonPatchOperationsState; + 'metaTag': MetaTagState; + 'route': RouteState; + 'correlationId': string; + 'notifications': NotificationsState; } diff --git a/src/app/core/core.effects.ts b/projects/dspace/core/src/lib/core.effects.ts similarity index 88% rename from src/app/core/core.effects.ts rename to projects/dspace/core/src/lib/core.effects.ts index 5af2fe580a1..790c141f872 100644 --- a/src/app/core/core.effects.ts +++ b/projects/dspace/core/src/lib/core.effects.ts @@ -1,4 +1,3 @@ -import { MenuEffects } from '../shared/menu/menu.effects'; import { AuthEffects } from './auth/auth.effects'; import { ObjectCacheEffects } from './cache/object-cache.effects'; import { ServerSyncBufferEffects } from './cache/server-sync-buffer.effects'; @@ -6,6 +5,7 @@ import { ObjectUpdatesEffects } from './data/object-updates/object-updates.effec import { RequestEffects } from './data/request.effects'; import { UUIDIndexEffects } from './index/index.effects'; import { JsonPatchOperationsEffects } from './json-patch/json-patch-operations.effects'; +import { NotificationsEffects } from './notification-system/notifications.effects'; import { RouterEffects } from './router/router.effects'; import { RouteEffects } from './services/route.effects'; @@ -19,5 +19,5 @@ export const coreEffects = [ ObjectUpdatesEffects, RouteEffects, RouterEffects, - MenuEffects, + NotificationsEffects, ]; diff --git a/src/app/core/core.reducers.ts b/projects/dspace/core/src/lib/core.reducers.ts similarity index 82% rename from src/app/core/core.reducers.ts rename to projects/dspace/core/src/lib/core.reducers.ts index fda1e05df05..5f5d57e93f8 100644 --- a/src/app/core/core.reducers.ts +++ b/projects/dspace/core/src/lib/core.reducers.ts @@ -1,6 +1,6 @@ +import { correlationIdReducer } from './correlation-id/correlation-id.reducer'; import { ActionReducerMap } from '@ngrx/store'; -import { bitstreamFormatReducer } from '../admin/admin-registries/bitstream-formats/bitstream-format.reducers'; import { authReducer } from './auth/auth.reducer'; import { objectCacheReducer } from './cache/object-cache.reducer'; import { serverSyncBufferReducer } from './cache/server-sync-buffer.reducer'; @@ -11,10 +11,10 @@ import { historyReducer } from './history/history.reducer'; import { indexReducer } from './index/index.reducer'; import { jsonPatchOperationsReducer } from './json-patch/json-patch-operations.reducer'; import { metaTagReducer } from './metadata/meta-tag.reducer'; +import { notificationsReducer } from './notification-system/notifications.reducers'; import { routeReducer } from './services/route.reducer'; export const coreReducers: ActionReducerMap = { - 'bitstreamFormats': bitstreamFormatReducer, 'cache/object': objectCacheReducer, 'cache/syncbuffer': serverSyncBufferReducer, 'cache/object-updates': objectUpdatesReducer, @@ -25,4 +25,6 @@ export const coreReducers: ActionReducerMap = { 'json/patch': jsonPatchOperationsReducer, 'metaTag': metaTagReducer, 'route': routeReducer, + 'correlationId': correlationIdReducer, + 'notifications': notificationsReducer, }; diff --git a/src/app/core/core.selectors.ts b/projects/dspace/core/src/lib/core.selectors.ts similarity index 100% rename from src/app/core/core.selectors.ts rename to projects/dspace/core/src/lib/core.selectors.ts diff --git a/src/app/correlation-id/correlation-id.actions.ts b/projects/dspace/core/src/lib/correlation-id/correlation-id.actions.ts similarity index 90% rename from src/app/correlation-id/correlation-id.actions.ts rename to projects/dspace/core/src/lib/correlation-id/correlation-id.actions.ts index 2f7edcabd96..a55ab9f9e15 100644 --- a/src/app/correlation-id/correlation-id.actions.ts +++ b/projects/dspace/core/src/lib/correlation-id/correlation-id.actions.ts @@ -1,6 +1,6 @@ import { Action } from '@ngrx/store'; -import { type } from '../shared/ngrx/type'; +import { type } from '../ngrx/type'; export const CorrelationIDActionTypes = { SET: type('dspace/core/correlationId/SET'), diff --git a/src/app/correlation-id/correlation-id.reducer.spec.ts b/projects/dspace/core/src/lib/correlation-id/correlation-id.reducer.spec.ts similarity index 100% rename from src/app/correlation-id/correlation-id.reducer.spec.ts rename to projects/dspace/core/src/lib/correlation-id/correlation-id.reducer.spec.ts diff --git a/src/app/correlation-id/correlation-id.reducer.ts b/projects/dspace/core/src/lib/correlation-id/correlation-id.reducer.ts similarity index 100% rename from src/app/correlation-id/correlation-id.reducer.ts rename to projects/dspace/core/src/lib/correlation-id/correlation-id.reducer.ts diff --git a/projects/dspace/core/src/lib/correlation-id/correlation-id.selector.ts b/projects/dspace/core/src/lib/correlation-id/correlation-id.selector.ts new file mode 100644 index 00000000000..72420ebcbf6 --- /dev/null +++ b/projects/dspace/core/src/lib/correlation-id/correlation-id.selector.ts @@ -0,0 +1,6 @@ +import { CoreState } from '../core-state.model'; +import { createSelector } from '@ngrx/store'; + +import { coreSelector } from '../core.selectors'; + +export const correlationIdSelector = createSelector(coreSelector, (state: CoreState) => state.correlationId); diff --git a/src/app/correlation-id/correlation-id.service.spec.ts b/projects/dspace/core/src/lib/correlation-id/correlation-id.service.spec.ts similarity index 79% rename from src/app/correlation-id/correlation-id.service.spec.ts rename to projects/dspace/core/src/lib/correlation-id/correlation-id.service.spec.ts index 709ade04eee..eec010df686 100644 --- a/src/app/correlation-id/correlation-id.service.spec.ts +++ b/projects/dspace/core/src/lib/correlation-id/correlation-id.service.spec.ts @@ -1,19 +1,13 @@ import { TestBed } from '@angular/core/testing'; -import { - Store, - StoreModule, -} from '@ngrx/store'; +import { coreReducers } from '../core.reducers'; +import { CoreState } from '../core-state.model'; +import { UUIDService } from '../shared/uuid.service'; +import { Store, StoreModule } from '@ngrx/store'; import { MockStore } from '@ngrx/store/testing'; import { of } from 'rxjs'; -import { - appReducers, - AppState, - storeModuleConfig, -} from '../app.reducer'; -import { UUIDService } from '../core/shared/uuid.service'; -import { CORRELATION_ID_COOKIE } from '../shared/cookies/orejime-configuration'; -import { CookieServiceMock } from '../shared/mocks/cookie.service.mock'; +import { CORRELATION_ID_COOKIE } from '../cookies/orejime-configuration'; +import { CookieServiceMock } from '../testing/cookie.service.mock'; import { SetCorrelationIdAction } from './correlation-id.actions'; import { CorrelationIdService } from './correlation-id.service'; @@ -24,10 +18,18 @@ describe('CorrelationIdService', () => { let uuidService; let store; + const mockStoreModuleConfig: any = { + runtimeChecks: { + strictStateImmutability: true, + strictActionImmutability: true, + }, + }; + beforeEach(async () => { await TestBed.configureTestingModule({ imports: [ - StoreModule.forRoot(appReducers, storeModuleConfig), + StoreModule.forRoot(), + StoreModule.forFeature('core', coreReducers, mockStoreModuleConfig), ], }).compileComponents(); }); @@ -35,7 +37,8 @@ describe('CorrelationIdService', () => { beforeEach(() => { cookieService = new CookieServiceMock(); uuidService = new UUIDService(); - store = TestBed.inject(Store) as MockStore; + store = TestBed.inject(Store) as MockStore; + // store.setState(initialState); const mockOrejimeService = { getSavedPreferences: () => of({ CORRELATION_ID_OREJIME_KEY: true }), initialize: jasmine.createSpy('initialize'), diff --git a/src/app/correlation-id/correlation-id.service.ts b/projects/dspace/core/src/lib/correlation-id/correlation-id.service.ts similarity index 77% rename from src/app/correlation-id/correlation-id.service.ts rename to projects/dspace/core/src/lib/correlation-id/correlation-id.service.ts index 9075643c244..5c8ae2c1692 100644 --- a/src/app/correlation-id/correlation-id.service.ts +++ b/projects/dspace/core/src/lib/correlation-id/correlation-id.service.ts @@ -1,29 +1,17 @@ -import { - Inject, - Injectable, -} from '@angular/core'; -import { - select, - Store, -} from '@ngrx/store'; -import { take } from 'rxjs/operators'; +import { Inject, Injectable } from '@angular/core'; +import { CoreState } from '../core-state.model'; +import { NativeWindowRef, NativeWindowService } from '../services/window.service'; +import { UUIDService } from '../shared/uuid.service'; +import { hasValue, isEmpty } from '@dspace/utils'; +import { select, Store } from '@ngrx/store'; +import { take, tap } from 'rxjs/operators'; -import { AppState } from '../app.reducer'; -import { CookieService } from '../core/services/cookie.service'; -import { - NativeWindowRef, - NativeWindowService, -} from '../core/services/window.service'; -import { UUIDService } from '../core/shared/uuid.service'; -import { OrejimeService } from '../shared/cookies/orejime.service'; +import { CookieService } from '../cookies/cookie.service'; +import { OrejimeService } from '../cookies/orejime.service'; import { CORRELATION_ID_COOKIE, CORRELATION_ID_OREJIME_KEY, -} from '../shared/cookies/orejime-configuration'; -import { - hasValue, - isEmpty, -} from '../shared/empty.util'; +} from '../cookies/orejime-configuration'; import { SetCorrelationIdAction } from './correlation-id.actions'; import { correlationIdSelector } from './correlation-id.selector'; @@ -38,7 +26,7 @@ export class CorrelationIdService { constructor( protected cookieService: CookieService, protected uuidService: UUIDService, - protected store: Store, + protected store: Store, protected orejimeService: OrejimeService, @Inject(NativeWindowService) protected _window: NativeWindowRef, ) { diff --git a/projects/dspace/core/src/lib/correlation-id/index.ts b/projects/dspace/core/src/lib/correlation-id/index.ts new file mode 100644 index 00000000000..f0cbe89ccba --- /dev/null +++ b/projects/dspace/core/src/lib/correlation-id/index.ts @@ -0,0 +1,10 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './correlation-id.actions'; +export * from './correlation-id.reducer.spec'; +export * from './correlation-id.reducer'; +export * from './correlation-id.selector'; +export * from './correlation-id.service.spec'; +export * from './correlation-id.service'; diff --git a/projects/dspace/core/src/lib/data-services-map-type.ts b/projects/dspace/core/src/lib/data-services-map-type.ts new file mode 100644 index 00000000000..18c1e4a1f3b --- /dev/null +++ b/projects/dspace/core/src/lib/data-services-map-type.ts @@ -0,0 +1,8 @@ +import { InjectionToken, Type } from '@angular/core'; + +import { HALDataService } from './data/base/hal-data-service.interface'; + +export type LazyDataServicesMap = Map Promise> | { + default: HALDataService +}>>; +export const APP_DATA_SERVICES_MAP: InjectionToken = new InjectionToken('APP_DATA_SERVICES_MAP'); diff --git a/src/app/core/data-services-map.ts b/projects/dspace/core/src/lib/data-services-map.ts similarity index 79% rename from src/app/core/data-services-map.ts rename to projects/dspace/core/src/lib/data-services-map.ts index c9ebbc5ffc3..6706e882a4d 100644 --- a/src/app/core/data-services-map.ts +++ b/projects/dspace/core/src/lib/data-services-map.ts @@ -1,18 +1,7 @@ -import { LazyDataServicesMap } from '../../config/app-config.interface'; import { LDN_SERVICE, LDN_SERVICE_CONSTRAINT_FILTERS, -} from '../admin/admin-ldn-services/ldn-services-model/ldn-service.resource-type'; -import { ADMIN_NOTIFY_MESSAGE } from '../admin/admin-notify-dashboard/models/admin-notify-message.resource-type'; -import { NOTIFYREQUEST } from '../item-page/simple/notify-requests-status/notify-requests-status.resource-type'; -import { PROCESS } from '../process-page/processes/process.resource-type'; -import { SCRIPT } from '../process-page/scripts/script.resource-type'; -import { ACCESS_STATUS } from '../shared/object-collection/shared/badges/access-status-badge/access-status.resource-type'; -import { DUPLICATE } from '../shared/object-list/duplicate-data/duplicate.resource-type'; -import { IDENTIFIERS } from '../shared/object-list/identifier-data/identifier-data.resource-type'; -import { SUBSCRIPTION } from '../shared/subscriptions/models/subscription.resource-type'; -import { SUBMISSION_COAR_NOTIFY_CONFIG } from '../submission/sections/section-coar-notify/section-coar-notify-service.resource-type'; -import { SYSTEMWIDEALERT } from '../system-wide-alert/system-wide-alert.resource-type'; +} from './coar-notify/ldn-services/models/ldn-service.resource-type'; import { BULK_ACCESS_CONDITION_OPTIONS, SUBMISSION_ACCESSES_TYPE, @@ -20,6 +9,7 @@ import { SUBMISSION_UPLOADS_TYPE, } from './config/models/config-type'; import { ROOT } from './data/root.resource-type'; +import { LazyDataServicesMap } from './data-services-map-type'; import { EPERSON } from './eperson/models/eperson.resource-type'; import { GROUP } from './eperson/models/group.resource-type'; import { WORKFLOWITEM } from './eperson/models/workflowitem.resource-type'; @@ -27,16 +17,28 @@ import { WORKSPACEITEM } from './eperson/models/workspaceitem.resource-type'; import { FEEDBACK } from './feedback/models/feedback.resource-type'; import { METADATA_FIELD } from './metadata/metadata-field.resource-type'; import { METADATA_SCHEMA } from './metadata/metadata-schema.resource-type'; -import { QUALITY_ASSURANCE_EVENT_OBJECT } from './notifications/qa/models/quality-assurance-event-object.resource-type'; -import { QUALITY_ASSURANCE_SOURCE_OBJECT } from './notifications/qa/models/quality-assurance-source-object.resource-type'; -import { QUALITY_ASSURANCE_TOPIC_OBJECT } from './notifications/qa/models/quality-assurance-topic-object.resource-type'; +import { + QUALITY_ASSURANCE_EVENT_OBJECT, +} from './notifications/qa/models/quality-assurance-event-object.resource-type'; +import { + QUALITY_ASSURANCE_SOURCE_OBJECT, +} from './notifications/qa/models/quality-assurance-source-object.resource-type'; +import { + QUALITY_ASSURANCE_TOPIC_OBJECT, +} from './notifications/qa/models/quality-assurance-topic-object.resource-type'; import { SUGGESTION } from './notifications/suggestions/models/suggestion-objects.resource-type'; -import { SUGGESTION_SOURCE } from './notifications/suggestions/models/suggestion-source-object.resource-type'; -import { SUGGESTION_TARGET } from './notifications/suggestions/models/suggestion-target-object.resource-type'; +import { + SUGGESTION_SOURCE, +} from './notifications/suggestions/models/suggestion-source-object.resource-type'; +import { + SUGGESTION_TARGET, +} from './notifications/suggestions/models/suggestion-target-object.resource-type'; import { ORCID_HISTORY } from './orcid/model/orcid-history.resource-type'; import { ORCID_QUEUE } from './orcid/model/orcid-queue.resource-type'; import { RESEARCHER_PROFILE } from './profile/model/researcher-profile.resource-type'; import { RESOURCE_POLICY } from './resource-policy/models/resource-policy.resource-type'; +import { ACCESS_STATUS } from './shared/access-status.resource-type'; +import { ADMIN_NOTIFY_MESSAGE } from './shared/admin-notify-message.resource-type'; import { AUTHORIZATION } from './shared/authorization.resource-type'; import { BITSTREAM } from './shared/bitstream.resource-type'; import { BITSTREAM_FORMAT } from './shared/bitstream-format.resource-type'; @@ -46,19 +48,29 @@ import { COLLECTION } from './shared/collection.resource-type'; import { COMMUNITY } from './shared/community.resource-type'; import { CONFIG_PROPERTY } from './shared/config-property.resource-type'; import { DSPACE_OBJECT } from './shared/dspace-object.resource-type'; +import { DUPLICATE } from './shared/duplicate-data/duplicate.resource-type'; import { FEATURE } from './shared/feature.resource-type'; +import { IDENTIFIERS } from './shared/identifiers-data/identifier-data.resource-type'; import { ITEM } from './shared/item.resource-type'; import { ITEM_TYPE } from './shared/item-relationships/item-type.resource-type'; import { RELATIONSHIP } from './shared/item-relationships/relationship.resource-type'; import { RELATIONSHIP_TYPE } from './shared/item-relationships/relationship-type.resource-type'; import { LICENSE } from './shared/license.resource-type'; +import { NOTIFYREQUEST } from './shared/notify-requests-status.resource-type'; +import { PROCESS } from './shared/process.resource-type'; +import { SCRIPT } from './shared/scripts/script.resource-type'; +import { SUBMISSION_COAR_NOTIFY_CONFIG } from './shared/section-coar-notify-service.resource-type'; import { SITE } from './shared/site.resource-type'; +import { SUBSCRIPTION } from './shared/subscription.resource-type'; +import { SYSTEMWIDEALERT } from './shared/system-wide-alert.resource-type'; import { VERSION } from './shared/version.resource-type'; import { VERSION_HISTORY } from './shared/version-history.resource-type'; import { USAGE_REPORT } from './statistics/models/usage-report.resource-type'; import { CorrectionType } from './submission/models/correctiontype.model'; import { SUBMISSION_CC_LICENSE } from './submission/models/submission-cc-licence.resource-type'; -import { SUBMISSION_CC_LICENSE_URL } from './submission/models/submission-cc-licence-link.resource-type'; +import { + SUBMISSION_CC_LICENSE_URL, +} from './submission/models/submission-cc-licence-link.resource-type'; import { VOCABULARY, VOCABULARY_ENTRY, @@ -85,7 +97,7 @@ export const LAZY_DATA_SERVICES: LazyDataServicesMap = new Map([ [VOCABULARY_ENTRY.value, () => import('./data/href-only-data.service').then(m => m.HrefOnlyDataService)], [ITEM_TYPE.value, () => import('./data/href-only-data.service').then(m => m.HrefOnlyDataService)], [LICENSE.value, () => import('./data/href-only-data.service').then(m => m.HrefOnlyDataService)], - [SUBSCRIPTION.value, () => import('../shared/subscriptions/subscriptions-data.service').then(m => m.SubscriptionsDataService)], + [SUBSCRIPTION.value, () => import('./data/subscriptions-data.service').then(m => m.SubscriptionsDataService)], [COMMUNITY.value, () => import('./data/community-data.service').then(m => m.CommunityDataService)], [VOCABULARY.value, () => import('./submission/vocabularies/vocabulary.data.service').then(m => m.VocabularyDataService)], [BUNDLE.value, () => import('./data/bundle-data.service').then(m => m.BundleDataService)], @@ -122,12 +134,12 @@ export const LAZY_DATA_SERVICES: LazyDataServicesMap = new Map([ [FEATURE.value, () => import('./data/feature-authorization/authorization-data.service').then(m => m.AuthorizationDataService)], [DSPACE_OBJECT.value, () => import('./data/dspace-object-data.service').then(m => m.DSpaceObjectDataService)], [BITSTREAM_FORMAT.value, () => import('./data/bitstream-format-data.service').then(m => m.BitstreamFormatDataService)], - [SUBMISSION_COAR_NOTIFY_CONFIG.value, () => import('../submission/sections/section-coar-notify/coar-notify-config-data.service').then(m => m.CoarNotifyConfigDataService)], - [LDN_SERVICE_CONSTRAINT_FILTERS.value, () => import('../admin/admin-ldn-services/ldn-services-data/ldn-itemfilters-data.service').then(m => m.LdnItemfiltersService)], - [LDN_SERVICE.value, () => import('../admin/admin-ldn-services/ldn-services-data/ldn-services-data.service').then(m => m.LdnServicesService)], - [ADMIN_NOTIFY_MESSAGE.value, () => import('../admin/admin-notify-dashboard/services/admin-notify-messages.service').then(m => m.AdminNotifyMessagesService)], + [SUBMISSION_COAR_NOTIFY_CONFIG.value, () => import('./config/coar-notify-config-data.service').then(m => m.CoarNotifyConfigDataService)], + [LDN_SERVICE_CONSTRAINT_FILTERS.value, () => import('./coar-notify/ldn-services/ldn-itemfilters-data.service').then(m => m.LdnItemfiltersService)], + [LDN_SERVICE.value, () => import('./coar-notify/ldn-services/ldn-services-data.service').then(m => m.LdnServicesService)], + [ADMIN_NOTIFY_MESSAGE.value, () => import('./coar-notify/notify-info/admin-notify-messages-data.service').then(m => m.AdminNotifyMessagesDataService)], [SUBMISSION_FORMS_TYPE.value, () => import('./config/submission-forms-config-data.service').then(m => m.SubmissionFormsConfigDataService)], - [NOTIFYREQUEST.value, () => import('./data/notify-services-status-data.service').then(m => m.NotifyRequestsStatusDataService)], + [NOTIFYREQUEST.value, () => import('./coar-notify/notify-info/notify-services-status-data.service').then(m => m.NotifyRequestsStatusDataService)], [QUALITY_ASSURANCE_EVENT_OBJECT.value, () => import('./notifications/qa/events/quality-assurance-event-data.service').then(m => m.QualityAssuranceEventDataService)], [QUALITY_ASSURANCE_SOURCE_OBJECT.value, () => import('./notifications/qa/source/quality-assurance-source-data.service').then(m => m.QualityAssuranceSourceDataService)], [QUALITY_ASSURANCE_TOPIC_OBJECT.value, () => import('./notifications/qa/topics/quality-assurance-topic-data.service').then(m => m.QualityAssuranceTopicDataService)], diff --git a/src/app/core/data/access-status-data.service.spec.ts b/projects/dspace/core/src/lib/data/access-status-data.service.spec.ts similarity index 84% rename from src/app/core/data/access-status-data.service.spec.ts rename to projects/dspace/core/src/lib/data/access-status-data.service.spec.ts index 27c40054601..d3d650dc9ea 100644 --- a/src/app/core/data/access-status-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/access-status-data.service.spec.ts @@ -1,17 +1,14 @@ -import { - fakeAsync, - tick, -} from '@angular/core/testing'; +import { fakeAsync, tick } from '@angular/core/testing'; +import { hasNoValue } from '@dspace/utils'; import { Observable } from 'rxjs'; -import { hasNoValue } from '../../shared/empty.util'; -import { getMockRequestService } from '../../shared/mocks/request.service.mock'; -import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; -import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; -import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { Item } from '../shared/item.model'; +import { HALEndpointServiceStub } from '../testing/hal-endpoint-service.stub'; +import { NotificationsServiceStub } from '../testing/notifications-service.stub'; +import { getMockRequestService } from '../testing/request.service.mock'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; import { AccessStatusDataService } from './access-status-data.service'; import { RemoteData } from './remote-data'; import { GetRequest } from './request.models'; diff --git a/src/app/core/data/access-status-data.service.ts b/projects/dspace/core/src/lib/data/access-status-data.service.ts similarity index 91% rename from src/app/core/data/access-status-data.service.ts rename to projects/dspace/core/src/lib/data/access-status-data.service.ts index 576b972f56f..5de402ab71d 100644 --- a/src/app/core/data/access-status-data.service.ts +++ b/projects/dspace/core/src/lib/data/access-status-data.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; +import { AccessStatusObject } from '../shared/access-status.model'; import { Observable } from 'rxjs'; -import { AccessStatusObject } from 'src/app/shared/object-collection/shared/badges/access-status-badge/access-status.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; diff --git a/src/app/core/data/array-move-change-analyzer.service.spec.ts b/projects/dspace/core/src/lib/data/array-move-change-analyzer.service.spec.ts similarity index 100% rename from src/app/core/data/array-move-change-analyzer.service.spec.ts rename to projects/dspace/core/src/lib/data/array-move-change-analyzer.service.spec.ts diff --git a/src/app/core/data/array-move-change-analyzer.service.ts b/projects/dspace/core/src/lib/data/array-move-change-analyzer.service.ts similarity index 96% rename from src/app/core/data/array-move-change-analyzer.service.ts rename to projects/dspace/core/src/lib/data/array-move-change-analyzer.service.ts index bd5fc8dedb3..42b91fb93ea 100644 --- a/src/app/core/data/array-move-change-analyzer.service.ts +++ b/projects/dspace/core/src/lib/data/array-move-change-analyzer.service.ts @@ -1,9 +1,8 @@ import { moveItemInArray } from '@angular/cdk/drag-drop'; import { Injectable } from '@angular/core'; +import { hasValue } from '@dspace/utils'; import { MoveOperation } from 'fast-json-patch'; -import { hasValue } from '../../shared/empty.util'; - /** * A class to determine move operations between two arrays */ diff --git a/src/app/core/data/base-response-parsing.service.spec.ts b/projects/dspace/core/src/lib/data/base-response-parsing.service.spec.ts similarity index 100% rename from src/app/core/data/base-response-parsing.service.spec.ts rename to projects/dspace/core/src/lib/data/base-response-parsing.service.spec.ts diff --git a/src/app/core/data/base-response-parsing.service.ts b/projects/dspace/core/src/lib/data/base-response-parsing.service.ts similarity index 95% rename from src/app/core/data/base-response-parsing.service.ts rename to projects/dspace/core/src/lib/data/base-response-parsing.service.ts index 63b4961b313..61f4eba2a55 100644 --- a/src/app/core/data/base-response-parsing.service.ts +++ b/projects/dspace/core/src/lib/data/base-response-parsing.service.ts @@ -1,10 +1,7 @@ /* eslint-disable max-classes-per-file */ -import { environment } from '../../../environments/environment'; -import { - hasNoValue, - hasValue, - isNotEmpty, -} from '../../shared/empty.util'; + +import { hasNoValue, hasValue, isNotEmpty } from '@dspace/utils'; + import { getClassForType } from '../cache/builders/build-decorators'; import { CacheableObject } from '../cache/cacheable-object.model'; import { ObjectCacheService } from '../cache/object-cache.service'; @@ -12,10 +9,7 @@ import { DSpaceSerializer } from '../dspace-rest/dspace.serializer'; import { Serializer } from '../serializer'; import { GenericConstructor } from '../shared/generic-constructor'; import { PageInfo } from '../shared/page-info.model'; -import { - buildPaginatedList, - PaginatedList, -} from './paginated-list.model'; +import { buildPaginatedList, PaginatedList } from './paginated-list.model'; import { RestRequest } from './rest-request.model'; @@ -47,6 +41,9 @@ export abstract class BaseResponseParsingService { protected abstract toCache: boolean; protected shouldDirectlyAttachEmbeds = false; protected serializerConstructor: GenericConstructor> = DSpaceSerializer; + protected defaultResponseMsToLive: number; + + protected process(data: any, request: RestRequest, alternativeURL?: string): any { if (isNotEmpty(data)) { @@ -155,7 +152,7 @@ export abstract class BaseResponseParsingService { return; } - this.objectCache.add(co, hasValue(request.responseMsToLive) ? request.responseMsToLive : environment.cache.msToLive.default, request.uuid, alternativeURL); + this.objectCache.add(co, hasValue(request.responseMsToLive) ? request.responseMsToLive : this.defaultResponseMsToLive, request.uuid, alternativeURL); } processPageInfo(payload: any): PageInfo { diff --git a/src/app/core/data/base/base-data.service.spec.ts b/projects/dspace/core/src/lib/data/base/base-data.service.spec.ts similarity index 97% rename from src/app/core/data/base/base-data.service.spec.ts rename to projects/dspace/core/src/lib/data/base/base-data.service.spec.ts index 8a4fd789aaf..0660be38677 100644 --- a/src/app/core/data/base/base-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/base/base-data.service.spec.ts @@ -6,39 +6,29 @@ * http://www.dspace.org/license/ */ // eslint-disable-next-line max-classes-per-file -import { - fakeAsync, - tick, -} from '@angular/core/testing'; -import { - combineLatest as observableCombineLatest, - Observable, - of, -} from 'rxjs'; +import { fakeAsync, tick } from '@angular/core/testing'; +import { combineLatest as observableCombineLatest, Observable, of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { getMockRemoteDataBuildService } from '../../../shared/mocks/remote-data-build.service.mock'; -import { getMockRequestService } from '../../../shared/mocks/request.service.mock'; -import { - createFailedRemoteDataObject$, - createSuccessfulRemoteDataObject$, -} from '../../../shared/remote-data.utils'; -import { HALEndpointServiceStub } from '../../../shared/testing/hal-endpoint-service.stub'; -import { ObjectCacheServiceStub } from '../../../shared/testing/object-cache-service.stub'; -import { createPaginatedList } from '../../../shared/testing/utils.test'; -import { followLink } from '../../../shared/utils/follow-link-config.model'; -import { - link, - typedObject, -} from '../../cache/builders/build-decorators'; +import { link, typedObject } from '../../cache/builders/build-decorators'; import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { ObjectCacheEntry } from '../../cache/object-cache.reducer'; import { ObjectCacheService } from '../../cache/object-cache.service'; import { BITSTREAM } from '../../shared/bitstream.resource-type'; import { COLLECTION } from '../../shared/collection.resource-type'; +import { followLink } from '../../shared/follow-link-config.model'; import { HALEndpointService } from '../../shared/hal-endpoint.service'; import { HALLink } from '../../shared/hal-link.model'; import { ResourceType } from '../../shared/resource-type'; +import { HALEndpointServiceStub } from '../../testing/hal-endpoint-service.stub'; +import { ObjectCacheServiceStub } from '../../testing/object-cache-service.stub'; +import { getMockRemoteDataBuildService } from '../../testing/remote-data-build.service.mock'; +import { getMockRequestService } from '../../testing/request.service.mock'; +import { createPaginatedList } from '../../testing/utils.test'; +import { + createFailedRemoteDataObject$, + createSuccessfulRemoteDataObject$, +} from '../../utilities/remote-data.utils'; import { FindListOptions } from '../find-list-options.model'; import { PaginatedList } from '../paginated-list.model'; import { RemoteData } from '../remote-data'; diff --git a/src/app/core/data/base/base-data.service.ts b/projects/dspace/core/src/lib/data/base/base-data.service.ts similarity index 97% rename from src/app/core/data/base/base-data.service.ts rename to projects/dspace/core/src/lib/data/base/base-data.service.ts index 0788afe0a68..f224658be71 100644 --- a/src/app/core/data/base/base-data.service.ts +++ b/projects/dspace/core/src/lib/data/base/base-data.service.ts @@ -6,38 +6,17 @@ * http://www.dspace.org/license/ */ -import { - AsyncSubject, - from as observableFrom, - Observable, - of, - shareReplay, -} from 'rxjs'; -import { - map, - mergeMap, - skipWhile, - switchMap, - take, - tap, - toArray, -} from 'rxjs/operators'; - -import { - hasValue, - isNotEmpty, - isNotEmptyOperator, -} from '../../../shared/empty.util'; -import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model'; -import { - getLinkDefinition, - LinkDefinition, -} from '../../cache/builders/build-decorators'; +import { hasValue, isNotEmpty, isNotEmptyOperator } from '@dspace/utils'; +import { AsyncSubject, from as observableFrom, Observable, of, shareReplay } from 'rxjs'; +import { map, mergeMap, skipWhile, switchMap, take, tap, toArray } from 'rxjs/operators'; + +import { getLinkDefinition, LinkDefinition } from '../../cache/builders/build-decorators'; import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { CacheableObject } from '../../cache/cacheable-object.model'; import { RequestParam } from '../../cache/models/request-param.model'; import { ObjectCacheEntry } from '../../cache/object-cache.reducer'; import { ObjectCacheService } from '../../cache/object-cache.service'; +import { FollowLinkConfig } from '../../shared/follow-link-config.model'; import { GenericConstructor } from '../../shared/generic-constructor'; import { HALEndpointService } from '../../shared/hal-endpoint.service'; import { HALLink } from '../../shared/hal-link.model'; diff --git a/src/app/core/data/base/create-data.spec.ts b/projects/dspace/core/src/lib/data/base/create-data.spec.ts similarity index 93% rename from src/app/core/data/base/create-data.spec.ts rename to projects/dspace/core/src/lib/data/base/create-data.spec.ts index 04d08a9838d..612c0170f18 100644 --- a/src/app/core/data/base/create-data.spec.ts +++ b/projects/dspace/core/src/lib/data/base/create-data.spec.ts @@ -5,33 +5,27 @@ * * http://www.dspace.org/license/ */ -import { - Observable, - of, -} from 'rxjs'; +import { RestRequestMethod } from '@dspace/config'; +import { Observable, of } from 'rxjs'; -import { getMockRemoteDataBuildService } from '../../../shared/mocks/remote-data-build.service.mock'; -import { getMockRequestService } from '../../../shared/mocks/request.service.mock'; -import { NotificationsService } from '../../../shared/notifications/notifications.service'; -import { - createFailedRemoteDataObject, - createSuccessfulRemoteDataObject, -} from '../../../shared/remote-data.utils'; -import { HALEndpointServiceStub } from '../../../shared/testing/hal-endpoint-service.stub'; import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { RequestParam } from '../../cache/models/request-param.model'; import { ObjectCacheService } from '../../cache/object-cache.service'; +import { NotificationsService } from '../../notification-system/notifications.service'; import { DSpaceObject } from '../../shared/dspace-object.model'; import { HALEndpointService } from '../../shared/hal-endpoint.service'; +import { HALEndpointServiceStub } from '../../testing/hal-endpoint-service.stub'; +import { getMockRemoteDataBuildService } from '../../testing/remote-data-build.service.mock'; +import { getMockRequestService } from '../../testing/request.service.mock'; +import { + createFailedRemoteDataObject, + createSuccessfulRemoteDataObject, +} from '../../utilities/remote-data.utils'; import { FindListOptions } from '../find-list-options.model'; import { RemoteData } from '../remote-data'; import { RequestService } from '../request.service'; import { RequestEntryState } from '../request-entry-state.model'; -import { RestRequestMethod } from '../rest-request-method'; -import { - CreateData, - CreateDataImpl, -} from './create-data'; +import { CreateData, CreateDataImpl } from './create-data'; /** * Tests whether calls to `CreateData` methods are correctly patched through in a concrete data service that implements it diff --git a/src/app/core/data/base/create-data.ts b/projects/dspace/core/src/lib/data/base/create-data.ts similarity index 91% rename from src/app/core/data/base/create-data.ts rename to projects/dspace/core/src/lib/data/base/create-data.ts index 13216f8796d..8249eaa8011 100644 --- a/src/app/core/data/base/create-data.ts +++ b/projects/dspace/core/src/lib/data/base/create-data.ts @@ -5,26 +5,18 @@ * * http://www.dspace.org/license/ */ +import { hasValue, isNotEmptyOperator } from '@dspace/utils'; import { Observable } from 'rxjs'; -import { - distinctUntilChanged, - map, - take, - takeWhile, -} from 'rxjs/operators'; +import { distinctUntilChanged, map, take, takeWhile } from 'rxjs/operators'; -import { - hasValue, - isNotEmptyOperator, -} from '../../../shared/empty.util'; -import { NotificationOptions } from '../../../shared/notifications/models/notification-options.model'; -import { NotificationsService } from '../../../shared/notifications/notifications.service'; import { getClassForType } from '../../cache/builders/build-decorators'; import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { CacheableObject } from '../../cache/cacheable-object.model'; import { RequestParam } from '../../cache/models/request-param.model'; import { ObjectCacheService } from '../../cache/object-cache.service'; import { DSpaceSerializer } from '../../dspace-rest/dspace.serializer'; +import { NotificationOptions } from '../../notification-system/models/notification-options.model'; +import { NotificationsService } from '../../notification-system/notifications.service'; import { HALEndpointService } from '../../shared/hal-endpoint.service'; import { RemoteData } from '../remote-data'; import { CreateRequest } from '../request.models'; diff --git a/src/app/core/data/base/delete-data.spec.ts b/projects/dspace/core/src/lib/data/base/delete-data.spec.ts similarity index 92% rename from src/app/core/data/base/delete-data.spec.ts rename to projects/dspace/core/src/lib/data/base/delete-data.spec.ts index 30d024299c6..49596a79dca 100644 --- a/src/app/core/data/base/delete-data.spec.ts +++ b/projects/dspace/core/src/lib/data/base/delete-data.spec.ts @@ -5,34 +5,28 @@ * * http://www.dspace.org/license/ */ -import { - Observable, - of, -} from 'rxjs'; +import { RestRequestMethod } from '@dspace/config'; +import { Observable, of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { getMockRemoteDataBuildService } from '../../../shared/mocks/remote-data-build.service.mock'; -import { getMockRequestService } from '../../../shared/mocks/request.service.mock'; -import { NotificationsService } from '../../../shared/notifications/notifications.service'; +import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; +import { ObjectCacheService } from '../../cache/object-cache.service'; +import { NotificationsService } from '../../notification-system/notifications.service'; +import { followLink } from '../../shared/follow-link-config.model'; +import { HALEndpointService } from '../../shared/hal-endpoint.service'; +import { HALEndpointServiceStub } from '../../testing/hal-endpoint-service.stub'; +import { getMockRemoteDataBuildService } from '../../testing/remote-data-build.service.mock'; +import { getMockRequestService } from '../../testing/request.service.mock'; import { createFailedRemoteDataObject, createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$, -} from '../../../shared/remote-data.utils'; -import { HALEndpointServiceStub } from '../../../shared/testing/hal-endpoint-service.stub'; -import { followLink } from '../../../shared/utils/follow-link-config.model'; -import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; -import { ObjectCacheService } from '../../cache/object-cache.service'; -import { HALEndpointService } from '../../shared/hal-endpoint.service'; +} from '../../utilities/remote-data.utils'; import { FindListOptions } from '../find-list-options.model'; import { RemoteData } from '../remote-data'; import { RequestService } from '../request.service'; import { RequestEntryState } from '../request-entry-state.model'; -import { RestRequestMethod } from '../rest-request-method'; -import { - DeleteData, - DeleteDataImpl, -} from './delete-data'; +import { DeleteData, DeleteDataImpl } from './delete-data'; import { constructIdEndpointDefault } from './identifiable-data.service'; /** diff --git a/src/app/core/data/base/delete-data.ts b/projects/dspace/core/src/lib/data/base/delete-data.ts similarity index 93% rename from src/app/core/data/base/delete-data.ts rename to projects/dspace/core/src/lib/data/base/delete-data.ts index c47a6af8474..f08abe4d498 100644 --- a/src/app/core/data/base/delete-data.ts +++ b/projects/dspace/core/src/lib/data/base/delete-data.ts @@ -5,26 +5,20 @@ * * http://www.dspace.org/license/ */ +import { hasNoValue, hasValue } from '@dspace/utils'; import { Observable } from 'rxjs'; import { switchMap } from 'rxjs/operators'; -import { - hasNoValue, - hasValue, -} from '../../../shared/empty.util'; -import { NotificationsService } from '../../../shared/notifications/notifications.service'; import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { CacheableObject } from '../../cache/cacheable-object.model'; import { ObjectCacheService } from '../../cache/object-cache.service'; +import { NotificationsService } from '../../notification-system/notifications.service'; import { HALEndpointService } from '../../shared/hal-endpoint.service'; import { NoContent } from '../../shared/NoContent.model'; import { RemoteData } from '../remote-data'; import { DeleteRequest } from '../request.models'; import { RequestService } from '../request.service'; -import { - ConstructIdEndpoint, - IdentifiableDataService, -} from './identifiable-data.service'; +import { ConstructIdEndpoint, IdentifiableDataService } from './identifiable-data.service'; export interface DeleteData { /** diff --git a/src/app/core/data/base/find-all-data.spec.ts b/projects/dspace/core/src/lib/data/base/find-all-data.spec.ts similarity index 95% rename from src/app/core/data/base/find-all-data.spec.ts rename to projects/dspace/core/src/lib/data/base/find-all-data.spec.ts index 8940b631eb8..7a4c64d1616 100644 --- a/src/app/core/data/base/find-all-data.spec.ts +++ b/projects/dspace/core/src/lib/data/base/find-all-data.spec.ts @@ -5,33 +5,24 @@ * * http://www.dspace.org/license/ */ -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { getMockRemoteDataBuildService } from '../../../shared/mocks/remote-data-build.service.mock'; -import { getMockRequestService } from '../../../shared/mocks/request.service.mock'; -import { HALEndpointServiceStub } from '../../../shared/testing/hal-endpoint-service.stub'; -import { followLink } from '../../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { RequestParam } from '../../cache/models/request-param.model'; -import { - SortDirection, - SortOptions, -} from '../../cache/models/sort-options.model'; +import { SortDirection, SortOptions } from '../../cache/models/sort-options.model'; import { ObjectCacheService } from '../../cache/object-cache.service'; +import { followLink } from '../../shared/follow-link-config.model'; import { HALEndpointService } from '../../shared/hal-endpoint.service'; +import { HALEndpointServiceStub } from '../../testing/hal-endpoint-service.stub'; +import { getMockRemoteDataBuildService } from '../../testing/remote-data-build.service.mock'; +import { getMockRequestService } from '../../testing/request.service.mock'; import { FindListOptions } from '../find-list-options.model'; import { RemoteData } from '../remote-data'; import { RequestService } from '../request.service'; import { RequestEntryState } from '../request-entry-state.model'; import { EMBED_SEPARATOR } from './base-data.service'; -import { - FindAllData, - FindAllDataImpl, -} from './find-all-data'; +import { FindAllData, FindAllDataImpl } from './find-all-data'; /** * Tests whether calls to `FindAllData` methods are correctly patched through in a concrete data service that implements it diff --git a/src/app/core/data/base/find-all-data.ts b/projects/dspace/core/src/lib/data/base/find-all-data.ts similarity index 95% rename from src/app/core/data/base/find-all-data.ts rename to projects/dspace/core/src/lib/data/base/find-all-data.ts index 0d68689e611..1ac0871b0f4 100644 --- a/src/app/core/data/base/find-all-data.ts +++ b/projects/dspace/core/src/lib/data/base/find-all-data.ts @@ -6,18 +6,14 @@ * http://www.dspace.org/license/ */ +import { isNotEmpty } from '@dspace/utils'; import { Observable } from 'rxjs'; -import { - distinctUntilChanged, - filter, - map, -} from 'rxjs/operators'; +import { distinctUntilChanged, filter, map } from 'rxjs/operators'; -import { isNotEmpty } from '../../../shared/empty.util'; -import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { CacheableObject } from '../../cache/cacheable-object.model'; import { ObjectCacheService } from '../../cache/object-cache.service'; +import { FollowLinkConfig } from '../../shared/follow-link-config.model'; import { HALEndpointService } from '../../shared/hal-endpoint.service'; import { FindListOptions } from '../find-list-options.model'; import { PaginatedList } from '../paginated-list.model'; diff --git a/src/app/core/data/base/hal-data-service.interface.ts b/projects/dspace/core/src/lib/data/base/hal-data-service.interface.ts similarity index 96% rename from src/app/core/data/base/hal-data-service.interface.ts rename to projects/dspace/core/src/lib/data/base/hal-data-service.interface.ts index 1ffdffaa7c5..cab94d9a105 100644 --- a/src/app/core/data/base/hal-data-service.interface.ts +++ b/projects/dspace/core/src/lib/data/base/hal-data-service.interface.ts @@ -7,7 +7,7 @@ */ import { Observable } from 'rxjs'; -import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model'; +import { FollowLinkConfig } from '../../shared/follow-link-config.model'; import { HALResource } from '../../shared/hal-resource.model'; import { FindListOptions } from '../find-list-options.model'; import { PaginatedList } from '../paginated-list.model'; diff --git a/src/app/core/data/base/identifiable-data.service.spec.ts b/projects/dspace/core/src/lib/data/base/identifiable-data.service.spec.ts similarity index 94% rename from src/app/core/data/base/identifiable-data.service.spec.ts rename to projects/dspace/core/src/lib/data/base/identifiable-data.service.spec.ts index 043b422a015..e6bac6bfc38 100644 --- a/src/app/core/data/base/identifiable-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/base/identifiable-data.service.spec.ts @@ -8,13 +8,13 @@ import { of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { getMockRemoteDataBuildService } from '../../../shared/mocks/remote-data-build.service.mock'; -import { getMockRequestService } from '../../../shared/mocks/request.service.mock'; -import { HALEndpointServiceStub } from '../../../shared/testing/hal-endpoint-service.stub'; -import { followLink } from '../../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../../cache/object-cache.service'; +import { followLink } from '../../shared/follow-link-config.model'; import { HALEndpointService } from '../../shared/hal-endpoint.service'; +import { HALEndpointServiceStub } from '../../testing/hal-endpoint-service.stub'; +import { getMockRemoteDataBuildService } from '../../testing/remote-data-build.service.mock'; +import { getMockRequestService } from '../../testing/request.service.mock'; import { RemoteData } from '../remote-data'; import { RequestService } from '../request.service'; import { RequestEntryState } from '../request-entry-state.model'; diff --git a/src/app/core/data/base/identifiable-data.service.ts b/projects/dspace/core/src/lib/data/base/identifiable-data.service.ts similarity index 96% rename from src/app/core/data/base/identifiable-data.service.ts rename to projects/dspace/core/src/lib/data/base/identifiable-data.service.ts index ba368d21ca1..c4731915fdf 100644 --- a/src/app/core/data/base/identifiable-data.service.ts +++ b/projects/dspace/core/src/lib/data/base/identifiable-data.service.ts @@ -6,16 +6,12 @@ * http://www.dspace.org/license/ */ import { Observable } from 'rxjs'; -import { - map, - switchMap, - take, -} from 'rxjs/operators'; +import { map, switchMap, take } from 'rxjs/operators'; -import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { CacheableObject } from '../../cache/cacheable-object.model'; import { ObjectCacheService } from '../../cache/object-cache.service'; +import { FollowLinkConfig } from '../../shared/follow-link-config.model'; import { HALEndpointService } from '../../shared/hal-endpoint.service'; import { RemoteData } from '../remote-data'; import { RequestService } from '../request.service'; diff --git a/projects/dspace/core/src/lib/data/base/index.ts b/projects/dspace/core/src/lib/data/base/index.ts new file mode 100644 index 00000000000..79d04dc8559 --- /dev/null +++ b/projects/dspace/core/src/lib/data/base/index.ts @@ -0,0 +1,21 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './base-data.service.spec'; +export * from './base-data.service'; +export * from './create-data.spec'; +export * from './create-data'; +export * from './delete-data.spec'; +export * from './delete-data'; +export * from './find-all-data.spec'; +export * from './find-all-data'; +export * from './hal-data-service.interface'; +export * from './identifiable-data.service.spec'; +export * from './identifiable-data.service'; +export * from './patch-data.spec'; +export * from './patch-data'; +export * from './put-data.spec'; +export * from './put-data'; +export * from './search-data.spec'; +export * from './search-data'; diff --git a/src/app/core/data/base/patch-data.spec.ts b/projects/dspace/core/src/lib/data/base/patch-data.spec.ts similarity index 92% rename from src/app/core/data/base/patch-data.spec.ts rename to projects/dspace/core/src/lib/data/base/patch-data.spec.ts index ba719171ef5..e914ec4608c 100644 --- a/src/app/core/data/base/patch-data.spec.ts +++ b/projects/dspace/core/src/lib/data/base/patch-data.spec.ts @@ -6,38 +6,29 @@ * http://www.dspace.org/license/ */ /* eslint-disable max-classes-per-file */ -import { - compare, - Operation, -} from 'fast-json-patch'; -import { - Observable, - of, -} from 'rxjs'; +import { RestRequestMethod } from '@dspace/config'; +import { compare, Operation } from 'fast-json-patch'; +import { Observable, of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { getMockRemoteDataBuildService } from '../../../shared/mocks/remote-data-build.service.mock'; -import { getMockRequestService } from '../../../shared/mocks/request.service.mock'; -import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils'; -import { HALEndpointServiceStub } from '../../../shared/testing/hal-endpoint-service.stub'; -import { followLink } from '../../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../../cache/object-cache.service'; import { DSpaceObject } from '../../shared/dspace-object.model'; +import { followLink } from '../../shared/follow-link-config.model'; import { HALEndpointService } from '../../shared/hal-endpoint.service'; import { Item } from '../../shared/item.model'; +import { HALEndpointServiceStub } from '../../testing/hal-endpoint-service.stub'; +import { getMockRemoteDataBuildService } from '../../testing/remote-data-build.service.mock'; +import { getMockRequestService } from '../../testing/request.service.mock'; +import { createSuccessfulRemoteDataObject$ } from '../../utilities/remote-data.utils'; import { ChangeAnalyzer } from '../change-analyzer'; import { FindListOptions } from '../find-list-options.model'; import { RemoteData } from '../remote-data'; import { PatchRequest } from '../request.models'; import { RequestService } from '../request.service'; import { RequestEntryState } from '../request-entry-state.model'; -import { RestRequestMethod } from '../rest-request-method'; import { constructIdEndpointDefault } from './identifiable-data.service'; -import { - PatchData, - PatchDataImpl, -} from './patch-data'; +import { PatchData, PatchDataImpl } from './patch-data'; /** * Tests whether calls to `PatchData` methods are correctly patched through in a concrete data service that implements it diff --git a/src/app/core/data/base/patch-data.ts b/projects/dspace/core/src/lib/data/base/patch-data.ts similarity index 93% rename from src/app/core/data/base/patch-data.ts rename to projects/dspace/core/src/lib/data/base/patch-data.ts index adcf98ef947..a1c9ddf499f 100644 --- a/src/app/core/data/base/patch-data.ts +++ b/projects/dspace/core/src/lib/data/base/patch-data.ts @@ -5,36 +5,22 @@ * * http://www.dspace.org/license/ */ +import { RestRequestMethod } from '@dspace/config'; +import { hasNoValue, hasValue, isNotEmpty } from '@dspace/utils'; import { Operation } from 'fast-json-patch'; import { Observable } from 'rxjs'; -import { - find, - map, - mergeMap, -} from 'rxjs/operators'; +import { find, map, mergeMap } from 'rxjs/operators'; -import { - hasNoValue, - hasValue, - isNotEmpty, -} from '../../../shared/empty.util'; import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { CacheableObject } from '../../cache/cacheable-object.model'; import { ObjectCacheService } from '../../cache/object-cache.service'; import { HALEndpointService } from '../../shared/hal-endpoint.service'; -import { - getFirstSucceededRemoteData, - getRemoteDataPayload, -} from '../../shared/operators'; +import { getFirstSucceededRemoteData, getRemoteDataPayload } from '../../shared/operators'; import { ChangeAnalyzer } from '../change-analyzer'; import { RemoteData } from '../remote-data'; import { PatchRequest } from '../request.models'; import { RequestService } from '../request.service'; -import { RestRequestMethod } from '../rest-request-method'; -import { - ConstructIdEndpoint, - IdentifiableDataService, -} from './identifiable-data.service'; +import { ConstructIdEndpoint, IdentifiableDataService } from './identifiable-data.service'; /** * Interface for a data service that can patch and update objects. diff --git a/src/app/core/data/base/put-data.spec.ts b/projects/dspace/core/src/lib/data/base/put-data.spec.ts similarity index 92% rename from src/app/core/data/base/put-data.spec.ts rename to projects/dspace/core/src/lib/data/base/put-data.spec.ts index c6c0b9152c0..9a638d716a8 100644 --- a/src/app/core/data/base/put-data.spec.ts +++ b/projects/dspace/core/src/lib/data/base/put-data.spec.ts @@ -6,27 +6,21 @@ * http://www.dspace.org/license/ */ -import { - Observable, - of, -} from 'rxjs'; - -import { getMockRemoteDataBuildService } from '../../../shared/mocks/remote-data-build.service.mock'; -import { getMockRequestService } from '../../../shared/mocks/request.service.mock'; -import { HALEndpointServiceStub } from '../../../shared/testing/hal-endpoint-service.stub'; +import { RestRequestMethod } from '@dspace/config'; +import { Observable, of } from 'rxjs'; + import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../../cache/object-cache.service'; import { DSpaceObject } from '../../shared/dspace-object.model'; import { HALEndpointService } from '../../shared/hal-endpoint.service'; +import { HALEndpointServiceStub } from '../../testing/hal-endpoint-service.stub'; +import { getMockRemoteDataBuildService } from '../../testing/remote-data-build.service.mock'; +import { getMockRequestService } from '../../testing/request.service.mock'; import { FindListOptions } from '../find-list-options.model'; import { RemoteData } from '../remote-data'; import { RequestService } from '../request.service'; import { RequestEntryState } from '../request-entry-state.model'; -import { RestRequestMethod } from '../rest-request-method'; -import { - PutData, - PutDataImpl, -} from './put-data'; +import { PutData, PutDataImpl } from './put-data'; /** * Tests whether calls to `PutData` methods are correctly patched through in a concrete data service that implements it diff --git a/src/app/core/data/base/put-data.ts b/projects/dspace/core/src/lib/data/base/put-data.ts similarity index 97% rename from src/app/core/data/base/put-data.ts rename to projects/dspace/core/src/lib/data/base/put-data.ts index e9d2b01eb83..69007f05efa 100644 --- a/src/app/core/data/base/put-data.ts +++ b/projects/dspace/core/src/lib/data/base/put-data.ts @@ -5,9 +5,9 @@ * * http://www.dspace.org/license/ */ +import { hasValue } from '@dspace/utils'; import { Observable } from 'rxjs'; -import { hasValue } from '../../../shared/empty.util'; import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { CacheableObject } from '../../cache/cacheable-object.model'; import { ObjectCacheService } from '../../cache/object-cache.service'; diff --git a/src/app/core/data/base/search-data.spec.ts b/projects/dspace/core/src/lib/data/base/search-data.spec.ts similarity index 92% rename from src/app/core/data/base/search-data.spec.ts rename to projects/dspace/core/src/lib/data/base/search-data.spec.ts index 6c68e630e9f..75415fa6882 100644 --- a/src/app/core/data/base/search-data.spec.ts +++ b/projects/dspace/core/src/lib/data/base/search-data.spec.ts @@ -7,15 +7,11 @@ */ import { of } from 'rxjs'; -import { getMockRemoteDataBuildService } from '../../../shared/mocks/remote-data-build.service.mock'; -import { getMockRequestService } from '../../../shared/mocks/request.service.mock'; -import { followLink } from '../../../shared/utils/follow-link-config.model'; +import { followLink } from '../../shared/follow-link-config.model'; +import { getMockRemoteDataBuildService } from '../../testing/remote-data-build.service.mock'; +import { getMockRequestService } from '../../testing/request.service.mock'; import { FindListOptions } from '../find-list-options.model'; -import { - constructSearchEndpointDefault, - SearchData, - SearchDataImpl, -} from './search-data'; +import { constructSearchEndpointDefault, SearchData, SearchDataImpl } from './search-data'; /** * Tests whether calls to `SearchData` methods are correctly patched through in a concrete data service that implements it diff --git a/src/app/core/data/base/search-data.ts b/projects/dspace/core/src/lib/data/base/search-data.ts similarity index 96% rename from src/app/core/data/base/search-data.ts rename to projects/dspace/core/src/lib/data/base/search-data.ts index f758affa280..53d6de0f247 100644 --- a/src/app/core/data/base/search-data.ts +++ b/projects/dspace/core/src/lib/data/base/search-data.ts @@ -5,20 +5,14 @@ * * http://www.dspace.org/license/ */ +import { hasNoValue, isNotEmpty } from '@dspace/utils'; import { Observable } from 'rxjs'; -import { - filter, - map, -} from 'rxjs/operators'; +import { filter, map } from 'rxjs/operators'; -import { - hasNoValue, - isNotEmpty, -} from '../../../shared/empty.util'; -import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { CacheableObject } from '../../cache/cacheable-object.model'; import { ObjectCacheService } from '../../cache/object-cache.service'; +import { FollowLinkConfig } from '../../shared/follow-link-config.model'; import { HALEndpointService } from '../../shared/hal-endpoint.service'; import { FindListOptions } from '../find-list-options.model'; import { PaginatedList } from '../paginated-list.model'; diff --git a/src/app/core/data/bitstream-data.service.spec.ts b/projects/dspace/core/src/lib/data/bitstream-data.service.spec.ts similarity index 92% rename from src/app/core/data/bitstream-data.service.spec.ts rename to projects/dspace/core/src/lib/data/bitstream-data.service.spec.ts index 7620b012bb8..3f5270ffd20 100644 --- a/src/app/core/data/bitstream-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/bitstream-data.service.spec.ts @@ -1,28 +1,25 @@ import { TestBed } from '@angular/core/testing'; import { cold } from 'jasmine-marbles'; -import { - Observable, - of, -} from 'rxjs'; -import { ItemMock } from 'src/app/shared/mocks/item.mock'; -import { - createFailedRemoteDataObject, - createSuccessfulRemoteDataObject, -} from 'src/app/shared/remote-data.utils'; +import { Observable, of } from 'rxjs'; -import { getMockRemoteDataBuildService } from '../../shared/mocks/remote-data-build.service.mock'; -import { getMockRequestService } from '../../shared/mocks/request.service.mock'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; +import { NotificationsService } from '../notification-system/notifications.service'; import { Bitstream } from '../shared/bitstream.model'; import { BitstreamFormat } from '../shared/bitstream-format.model'; import { BitstreamFormatSupportLevel } from '../shared/bitstream-format-support-level'; import { Bundle } from '../shared/bundle.model'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; +import { HALEndpointServiceStub } from '../testing/hal-endpoint-service.stub'; +import { ItemMock } from '../testing/item.mock'; +import { getMockRemoteDataBuildService } from '../testing/remote-data-build.service.mock'; +import { getMockRequestService } from '../testing/request.service.mock'; +import { + createFailedRemoteDataObject, + createSuccessfulRemoteDataObject, +} from '../utilities/remote-data.utils'; import { testDeleteDataImplementation } from './base/delete-data.spec'; import { testPatchDataImplementation } from './base/patch-data.spec'; import { testSearchDataImplementation } from './base/search-data.spec'; @@ -31,14 +28,11 @@ import { BitstreamFormatDataService } from './bitstream-format-data.service'; import { BundleDataService } from './bundle-data.service'; import { DSOChangeAnalyzer } from './dso-change-analyzer.service'; import { RemoteData } from './remote-data'; -import { - PatchRequest, - PutRequest, -} from './request.models'; +import { PatchRequest, PutRequest } from './request.models'; import { RequestService } from './request.service'; -import objectContaining = jasmine.objectContaining; import { RestResponse } from '../cache/response.models'; import { RequestEntry } from './request-entry.model'; +import objectContaining = jasmine.objectContaining; describe('BitstreamDataService', () => { let service: BitstreamDataService; diff --git a/src/app/core/data/bitstream-data.service.ts b/projects/dspace/core/src/lib/data/bitstream-data.service.ts similarity index 94% rename from src/app/core/data/bitstream-data.service.ts rename to projects/dspace/core/src/lib/data/bitstream-data.service.ts index 812522ea088..11029eb2a73 100644 --- a/src/app/core/data/bitstream-data.service.ts +++ b/projects/dspace/core/src/lib/data/bitstream-data.service.ts @@ -1,69 +1,39 @@ import { HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { - Operation, - RemoveOperation, -} from 'fast-json-patch'; -import { - combineLatest as observableCombineLatest, - EMPTY, - Observable, -} from 'rxjs'; -import { - find, - map, - switchMap, - take, -} from 'rxjs/operators'; +import { RestRequestMethod } from '@dspace/config'; +import { hasValue } from '@dspace/utils'; +import { Operation, RemoveOperation } from 'fast-json-patch'; +import { combineLatest as observableCombineLatest, EMPTY, Observable } from 'rxjs'; +import { find, map, switchMap, take } from 'rxjs/operators'; -import { hasValue } from '../../shared/empty.util'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; -import { - followLink, - FollowLinkConfig, -} from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; +import { NotificationsService } from '../notification-system/notifications.service'; import { Bitstream } from '../shared/bitstream.model'; import { BitstreamFormat } from '../shared/bitstream-format.model'; import { Bundle } from '../shared/bundle.model'; +import { followLink, FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { Item } from '../shared/item.model'; import { NoContent } from '../shared/NoContent.model'; import { getFirstCompletedRemoteData } from '../shared/operators'; import { PageInfo } from '../shared/page-info.model'; import { sendRequest } from '../shared/request.operators'; -import { - DeleteData, - DeleteDataImpl, -} from './base/delete-data'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; +import { DeleteData, DeleteDataImpl } from './base/delete-data'; import { IdentifiableDataService } from './base/identifiable-data.service'; -import { - PatchData, - PatchDataImpl, -} from './base/patch-data'; -import { - SearchData, - SearchDataImpl, -} from './base/search-data'; +import { PatchData, PatchDataImpl } from './base/patch-data'; +import { SearchData, SearchDataImpl } from './base/search-data'; import { BitstreamFormatDataService } from './bitstream-format-data.service'; import { BundleDataService } from './bundle-data.service'; import { DSOChangeAnalyzer } from './dso-change-analyzer.service'; import { FindListOptions } from './find-list-options.model'; -import { - buildPaginatedList, - PaginatedList, -} from './paginated-list.model'; +import { buildPaginatedList, PaginatedList } from './paginated-list.model'; import { RemoteData } from './remote-data'; -import { - PatchRequest, - PutRequest, -} from './request.models'; +import { PatchRequest, PutRequest } from './request.models'; import { RequestService } from './request.service'; -import { RestRequestMethod } from './rest-request-method'; /** * A service to retrieve {@link Bitstream}s from the REST API diff --git a/src/app/core/data/bitstream-format-data.service.spec.ts b/projects/dspace/core/src/lib/data/bitstream-format-data.service.spec.ts similarity index 71% rename from src/app/core/data/bitstream-format-data.service.spec.ts rename to projects/dspace/core/src/lib/data/bitstream-format-data.service.spec.ts index e305e5ae210..32146eee27b 100644 --- a/src/app/core/data/bitstream-format-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/bitstream-format-data.service.spec.ts @@ -1,32 +1,15 @@ import { waitForAsync } from '@angular/core/testing'; -import { - Action, - Store, -} from '@ngrx/store'; -import { - cold, - getTestScheduler, - hot, -} from 'jasmine-marbles'; -import { - Observable, - of, -} from 'rxjs'; +import { cold, getTestScheduler, hot } from 'jasmine-marbles'; +import { Observable, of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { - BitstreamFormatsRegistryDeselectAction, - BitstreamFormatsRegistryDeselectAllAction, - BitstreamFormatsRegistrySelectAction, -} from '../../admin/admin-registries/bitstream-formats/bitstream-format.actions'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { createSuccessfulRemoteDataObject } from '../../shared/remote-data.utils'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { RestResponse } from '../cache/response.models'; -import { CoreState } from '../core-state.model'; +import { NotificationsService } from '../notification-system/notifications.service'; import { BitstreamFormat } from '../shared/bitstream-format.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; +import { createSuccessfulRemoteDataObject } from '../utilities/remote-data.utils'; import { testDeleteDataImplementation } from './base/delete-data.spec'; import { testFindAllDataImplementation } from './base/find-all-data.spec'; import { BitstreamFormatDataService } from './bitstream-format-data.service'; @@ -43,12 +26,6 @@ describe('BitstreamFormatDataService', () => { const responseCacheEntry = new RequestEntry(); responseCacheEntry.response = new RestResponse(true, 200, 'Success'); - const store = { - dispatch(action: Action) { - // Do Nothing - }, - } as Store; - const requestUUIDs = ['some', 'uuid']; const objectCache = jasmine.createSpyObj('objectCache', { @@ -79,12 +56,11 @@ describe('BitstreamFormatDataService', () => { objectCache, halService, notificationsService, - store, ); } describe('composition', () => { - const initService = () => new BitstreamFormatDataService(null, null, null, null, null, null); + const initService = () => new BitstreamFormatDataService(null, null, null, null, null); testFindAllDataImplementation(initService); testDeleteDataImplementation(initService); }); @@ -228,73 +204,6 @@ describe('BitstreamFormatDataService', () => { }); }); - describe('selectBitstreamFormat', () => { - beforeEach(waitForAsync(() => { - scheduler = getTestScheduler(); - requestService = jasmine.createSpyObj('requestService', { - send: {}, - getByHref: of(responseCacheEntry), - getByUUID: cold('a', { a: responseCacheEntry }), - setStaleByUUID: of(true), - generateRequestId: 'request-id', - removeByHrefSubstring: {}, - }); - service = initTestService(halEndpointService); - spyOn(store, 'dispatch'); - })); - it('should add a selected bitstream to the store', () => { - const format = new BitstreamFormat(); - format.uuid = 'uuid'; - - service.selectBitstreamFormat(format); - expect(store.dispatch).toHaveBeenCalledWith(new BitstreamFormatsRegistrySelectAction(format)); - }); - }); - - describe('deselectBitstreamFormat', () => { - beforeEach(waitForAsync(() => { - scheduler = getTestScheduler(); - requestService = jasmine.createSpyObj('requestService', { - send: {}, - getByHref: of(responseCacheEntry), - getByUUID: cold('a', { a: responseCacheEntry }), - setStaleByUUID: of(true), - generateRequestId: 'request-id', - removeByHrefSubstring: {}, - }); - service = initTestService(halEndpointService); - spyOn(store, 'dispatch'); - })); - it('should remove a bitstream from the store', () => { - const format = new BitstreamFormat(); - format.uuid = 'uuid'; - - service.deselectBitstreamFormat(format); - expect(store.dispatch).toHaveBeenCalledWith(new BitstreamFormatsRegistryDeselectAction(format)); - }); - }); - - describe('deselectAllBitstreamFormats', () => { - beforeEach(waitForAsync(() => { - scheduler = getTestScheduler(); - requestService = jasmine.createSpyObj('requestService', { - send: {}, - getByHref: of(responseCacheEntry), - getByUUID: cold('a', { a: responseCacheEntry }), - setStaleByUUID: of(true), - generateRequestId: 'request-id', - removeByHrefSubstring: {}, - }); - service = initTestService(halEndpointService); - spyOn(store, 'dispatch'); - - })); - it('should remove all bitstreamFormats from the store', () => { - service.deselectAllBitstreamFormats(); - expect(store.dispatch).toHaveBeenCalledWith(new BitstreamFormatsRegistryDeselectAllAction()); - }); - }); - describe('delete', () => { beforeEach(waitForAsync(() => { scheduler = getTestScheduler(); diff --git a/src/app/core/data/bitstream-format-data.service.ts b/projects/dspace/core/src/lib/data/bitstream-format-data.service.ts similarity index 73% rename from src/app/core/data/bitstream-format-data.service.ts rename to projects/dspace/core/src/lib/data/bitstream-format-data.service.ts index 97b0fa961a9..de4c63ef09c 100644 --- a/src/app/core/data/bitstream-format-data.service.ts +++ b/projects/dspace/core/src/lib/data/bitstream-format-data.service.ts @@ -1,60 +1,25 @@ import { Injectable } from '@angular/core'; -import { - createSelector, - select, - Store, -} from '@ngrx/store'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { Observable } from 'rxjs'; -import { - distinctUntilChanged, - map, - tap, -} from 'rxjs/operators'; -import { FollowLinkConfig } from 'src/app/shared/utils/follow-link-config.model'; - -import { - BitstreamFormatsRegistryDeselectAction, - BitstreamFormatsRegistryDeselectAllAction, - BitstreamFormatsRegistrySelectAction, -} from '../../admin/admin-registries/bitstream-formats/bitstream-format.actions'; -import { BitstreamFormatRegistryState } from '../../admin/admin-registries/bitstream-formats/bitstream-format.reducers'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; +import { distinctUntilChanged, map, tap } from 'rxjs/operators'; + import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; -import { coreSelector } from '../core.selectors'; -import { CoreState } from '../core-state.model'; +import { NotificationsService } from '../notification-system/notifications.service'; import { Bitstream } from '../shared/bitstream.model'; import { BitstreamFormat } from '../shared/bitstream-format.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { NoContent } from '../shared/NoContent.model'; import { sendRequest } from '../shared/request.operators'; -import { - DeleteData, - DeleteDataImpl, -} from './base/delete-data'; -import { - FindAllData, - FindAllDataImpl, -} from './base/find-all-data'; +import { DeleteData, DeleteDataImpl } from './base/delete-data'; +import { FindAllData, FindAllDataImpl } from './base/find-all-data'; import { IdentifiableDataService } from './base/identifiable-data.service'; import { FindListOptions } from './find-list-options.model'; import { PaginatedList } from './paginated-list.model'; import { RemoteData } from './remote-data'; -import { - PostRequest, - PutRequest, -} from './request.models'; +import { PostRequest, PutRequest } from './request.models'; import { RequestService } from './request.service'; -const bitstreamFormatsStateSelector = createSelector( - coreSelector, - (state: CoreState) => state.bitstreamFormats, -); -const selectedBitstreamFormatSelector = createSelector( - bitstreamFormatsStateSelector, - (bitstreamFormatRegistryState: BitstreamFormatRegistryState) => bitstreamFormatRegistryState.selectedBitstreamFormats, -); - /** * A service responsible for fetching/sending data from/to the REST API on the bitstreamformats endpoint */ @@ -72,7 +37,6 @@ export class BitstreamFormatDataService extends IdentifiableDataService, ) { super('bitstreamformats', requestService, rdbService, objectCache, halService); @@ -140,36 +104,6 @@ export class BitstreamFormatDataService extends IdentifiableDataService { - return this.store.pipe(select(selectedBitstreamFormatSelector)); - } - - /** - * Adds a BistreamFormat to the selected BitstreamFormats in the store - * @param bitstreamFormat - */ - public selectBitstreamFormat(bitstreamFormat: BitstreamFormat) { - this.store.dispatch(new BitstreamFormatsRegistrySelectAction(bitstreamFormat)); - } - - /** - * Removes a BistreamFormat from the list of selected BitstreamFormats in the store - * @param bitstreamFormat - */ - public deselectBitstreamFormat(bitstreamFormat: BitstreamFormat) { - this.store.dispatch(new BitstreamFormatsRegistryDeselectAction(bitstreamFormat)); - } - - /** - * Removes all BitstreamFormats from the list of selected BitstreamFormats in the store - */ - public deselectAllBitstreamFormats() { - this.store.dispatch(new BitstreamFormatsRegistryDeselectAllAction()); - } - findByBitstream(bitstream: Bitstream): Observable> { return this.findByHref(bitstream._links.format.href); } diff --git a/src/app/core/data/browse-response-parsing.service.spec.ts b/projects/dspace/core/src/lib/data/browse-response-parsing.service.spec.ts similarity index 74% rename from src/app/core/data/browse-response-parsing.service.spec.ts rename to projects/dspace/core/src/lib/data/browse-response-parsing.service.spec.ts index 53d2ec20fc8..bec09a3f248 100644 --- a/src/app/core/data/browse-response-parsing.service.spec.ts +++ b/projects/dspace/core/src/lib/data/browse-response-parsing.service.spec.ts @@ -1,10 +1,17 @@ -import { getMockObjectCacheService } from '../../shared/mocks/object-cache.service.mock'; +import { Injectable } from '@angular/core'; +import { TestBed } from '@angular/core/testing'; +import { APP_CONFIG } from '@dspace/config'; + import { ObjectCacheService } from '../cache/object-cache.service'; import { FLAT_BROWSE_DEFINITION } from '../shared/flat-browse-definition.resource-type'; -import { HIERARCHICAL_BROWSE_DEFINITION } from '../shared/hierarchical-browse-definition.resource-type'; +import { + HIERARCHICAL_BROWSE_DEFINITION, +} from '../shared/hierarchical-browse-definition.resource-type'; import { VALUE_LIST_BROWSE_DEFINITION } from '../shared/value-list-browse-definition.resource-type'; +import { getMockObjectCacheService } from '../testing/object-cache.service.mock'; import { BrowseResponseParsingService } from './browse-response-parsing.service'; +@Injectable() class TestService extends BrowseResponseParsingService { constructor(protected objectCache: ObjectCacheService) { super(objectCache); @@ -21,7 +28,14 @@ describe('BrowseResponseParsingService', () => { beforeEach(() => { - service = new TestService(getMockObjectCacheService()); + TestBed.configureTestingModule({ + providers: [ + { provide: ObjectCacheService, useValue: getMockObjectCacheService() }, + { provide: APP_CONFIG, useValue: { rest: { baseUrl: 'https://rest.com/server' } } }, + TestService, + ], + }); + service = TestBed.inject(TestService); }); describe('', () => { diff --git a/src/app/core/data/browse-response-parsing.service.ts b/projects/dspace/core/src/lib/data/browse-response-parsing.service.ts similarity index 93% rename from src/app/core/data/browse-response-parsing.service.ts rename to projects/dspace/core/src/lib/data/browse-response-parsing.service.ts index e01fa17f1fb..0cc775fb617 100644 --- a/src/app/core/data/browse-response-parsing.service.ts +++ b/projects/dspace/core/src/lib/data/browse-response-parsing.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; +import { hasValue } from '@dspace/utils'; -import { hasValue } from '../../shared/empty.util'; import { ObjectCacheService } from '../cache/object-cache.service'; import { Serializer } from '../serializer'; import { BrowseDefinition } from '../shared/browse-definition.model'; @@ -8,7 +8,9 @@ import { BROWSE_DEFINITION } from '../shared/browse-definition.resource-type'; import { FlatBrowseDefinition } from '../shared/flat-browse-definition.model'; import { FLAT_BROWSE_DEFINITION } from '../shared/flat-browse-definition.resource-type'; import { HierarchicalBrowseDefinition } from '../shared/hierarchical-browse-definition.model'; -import { HIERARCHICAL_BROWSE_DEFINITION } from '../shared/hierarchical-browse-definition.resource-type'; +import { + HIERARCHICAL_BROWSE_DEFINITION, +} from '../shared/hierarchical-browse-definition.resource-type'; import { ValueListBrowseDefinition } from '../shared/value-list-browse-definition.model'; import { VALUE_LIST_BROWSE_DEFINITION } from '../shared/value-list-browse-definition.resource-type'; import { DspaceRestResponseParsingService } from './dspace-rest-response-parsing.service'; diff --git a/src/app/core/data/bundle-data.service.spec.ts b/projects/dspace/core/src/lib/data/bundle-data.service.spec.ts similarity index 88% rename from src/app/core/data/bundle-data.service.spec.ts rename to projects/dspace/core/src/lib/data/bundle-data.service.spec.ts index b2c8be06af1..68013c555a0 100644 --- a/src/app/core/data/bundle-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/bundle-data.service.spec.ts @@ -1,20 +1,17 @@ import { HttpClient } from '@angular/common/http'; import { Store } from '@ngrx/store'; -import { - compare, - Operation, -} from 'fast-json-patch'; +import { compare, Operation } from 'fast-json-patch'; -import { getMockRequestService } from '../../shared/mocks/request.service.mock'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; -import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; -import { createPaginatedList } from '../../shared/testing/utils.test'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { CoreState } from '../core-state.model'; +import { NotificationsService } from '../notification-system/notifications.service'; import { Bundle } from '../shared/bundle.model'; import { HALLink } from '../shared/hal-link.model'; import { Item } from '../shared/item.model'; +import { HALEndpointServiceStub } from '../testing/hal-endpoint-service.stub'; +import { getMockRequestService } from '../testing/request.service.mock'; +import { createPaginatedList } from '../testing/utils.test'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; import { testPatchDataImplementation } from './base/patch-data.spec'; import { BundleDataService } from './bundle-data.service'; import { ChangeAnalyzer } from './change-analyzer'; diff --git a/src/app/core/data/bundle-data.service.ts b/projects/dspace/core/src/lib/data/bundle-data.service.ts similarity index 94% rename from src/app/core/data/bundle-data.service.ts rename to projects/dspace/core/src/lib/data/bundle-data.service.ts index 79f877fadd7..d88b1f6aea2 100644 --- a/src/app/core/data/bundle-data.service.ts +++ b/projects/dspace/core/src/lib/data/bundle-data.service.ts @@ -1,26 +1,20 @@ import { Injectable } from '@angular/core'; +import { RestRequestMethod } from '@dspace/config'; +import { hasValue } from '@dspace/utils'; import { Operation } from 'fast-json-patch'; import { Observable } from 'rxjs'; -import { - map, - switchMap, - take, -} from 'rxjs/operators'; +import { map, switchMap, take } from 'rxjs/operators'; -import { hasValue } from '../../shared/empty.util'; -import { PaginatedSearchOptions } from '../../shared/search/models/paginated-search-options.model'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { Bitstream } from '../shared/bitstream.model'; import { Bundle } from '../shared/bundle.model'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { Item } from '../shared/item.model'; +import { PaginatedSearchOptions } from '../shared/search/models/paginated-search-options.model'; import { IdentifiableDataService } from './base/identifiable-data.service'; -import { - PatchData, - PatchDataImpl, -} from './base/patch-data'; +import { PatchData, PatchDataImpl } from './base/patch-data'; import { DSOChangeAnalyzer } from './dso-change-analyzer.service'; import { FindListOptions } from './find-list-options.model'; import { PaginatedList } from './paginated-list.model'; @@ -28,7 +22,6 @@ import { RemoteData } from './remote-data'; import { GetRequest } from './request.models'; import { RequestService } from './request.service'; import { RequestEntryState } from './request-entry-state.model'; -import { RestRequestMethod } from './rest-request-method'; /** * A service to retrieve {@link Bundle}s from the REST API diff --git a/src/app/core/data/change-analyzer.ts b/projects/dspace/core/src/lib/data/change-analyzer.ts similarity index 100% rename from src/app/core/data/change-analyzer.ts rename to projects/dspace/core/src/lib/data/change-analyzer.ts diff --git a/src/app/core/data/collection-data.service.spec.ts b/projects/dspace/core/src/lib/data/collection-data.service.spec.ts similarity index 90% rename from src/app/core/data/collection-data.service.spec.ts rename to projects/dspace/core/src/lib/data/collection-data.service.spec.ts index f27695c3261..0ffe7a6cd73 100644 --- a/src/app/core/data/collection-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/collection-data.service.spec.ts @@ -1,32 +1,25 @@ -import { - fakeAsync, - tick, -} from '@angular/core/testing'; +import { fakeAsync, tick } from '@angular/core/testing'; +import { hasNoValue } from '@dspace/utils'; import { TranslateService } from '@ngx-translate/core'; -import { - cold, - getTestScheduler, - hot, -} from 'jasmine-marbles'; +import { cold, getTestScheduler, hot } from 'jasmine-marbles'; import { Observable } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { hasNoValue } from '../../shared/empty.util'; -import { getMockRequestService } from '../../shared/mocks/request.service.mock'; -import { getMockTranslateService } from '../../shared/mocks/translate.service.mock'; -import { - createFailedRemoteDataObject$, - createSuccessfulRemoteDataObject, - createSuccessfulRemoteDataObject$, -} from '../../shared/remote-data.utils'; -import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; -import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub'; -import { ObjectCacheServiceStub } from '../../shared/testing/object-cache-service.stub'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { Collection } from '../shared/collection.model'; import { ContentSource } from '../shared/content-source.model'; import { PageInfo } from '../shared/page-info.model'; +import { HALEndpointServiceStub } from '../testing/hal-endpoint-service.stub'; +import { NotificationsServiceStub } from '../testing/notifications-service.stub'; +import { ObjectCacheServiceStub } from '../testing/object-cache-service.stub'; +import { getMockRequestService } from '../testing/request.service.mock'; +import { getMockTranslateService } from '../testing/translate.service.mock'; +import { + createFailedRemoteDataObject$, + createSuccessfulRemoteDataObject, + createSuccessfulRemoteDataObject$, +} from '../utilities/remote-data.utils'; import { testCreateDataImplementation } from './base/create-data.spec'; import { testDeleteDataImplementation } from './base/delete-data.spec'; import { testFindAllDataImplementation } from './base/find-all-data.spec'; @@ -35,10 +28,7 @@ import { testSearchDataImplementation } from './base/search-data.spec'; import { CollectionDataService } from './collection-data.service'; import { buildPaginatedList } from './paginated-list.model'; import { RemoteData } from './remote-data'; -import { - ContentSourceRequest, - UpdateContentSourceRequest, -} from './request.models'; +import { ContentSourceRequest, UpdateContentSourceRequest } from './request.models'; import { RequestService } from './request.service'; const url = 'fake-url'; diff --git a/src/app/core/data/collection-data.service.ts b/projects/dspace/core/src/lib/data/collection-data.service.ts similarity index 94% rename from src/app/core/data/collection-data.service.ts rename to projects/dspace/core/src/lib/data/collection-data.service.ts index b2d5476d21a..bb40fecd3b8 100644 --- a/src/app/core/data/collection-data.service.ts +++ b/projects/dspace/core/src/lib/data/collection-data.service.ts @@ -1,37 +1,25 @@ import { HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; +import { hasValue, isNotEmpty, isNotEmptyOperator } from '@dspace/utils'; import { TranslateService } from '@ngx-translate/core'; import { Observable } from 'rxjs'; -import { - filter, - map, - switchMap, - take, -} from 'rxjs/operators'; +import { filter, map, switchMap, take } from 'rxjs/operators'; -import { - hasValue, - isNotEmpty, - isNotEmptyOperator, -} from '../../shared/empty.util'; -import { INotification } from '../../shared/notifications/models/notification.model'; -import { NotificationOptions } from '../../shared/notifications/models/notification-options.model'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; import { DSpaceSerializer } from '../dspace-rest/dspace.serializer'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; +import { INotification } from '../notification-system/models/notification.model'; +import { NotificationOptions } from '../notification-system/models/notification-options.model'; +import { NotificationsService } from '../notification-system/notifications.service'; import { Collection } from '../shared/collection.model'; import { Community } from '../shared/community.model'; import { ContentSource } from '../shared/content-source.model'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { Item } from '../shared/item.model'; -import { - getAllCompletedRemoteData, - getFirstCompletedRemoteData, -} from '../shared/operators'; +import { getAllCompletedRemoteData, getFirstCompletedRemoteData } from '../shared/operators'; import { BitstreamDataService } from './bitstream-data.service'; import { ComColDataService } from './comcol-data.service'; import { CommunityDataService } from './community-data.service'; @@ -39,10 +27,7 @@ import { DSOChangeAnalyzer } from './dso-change-analyzer.service'; import { FindListOptions } from './find-list-options.model'; import { PaginatedList } from './paginated-list.model'; import { RemoteData } from './remote-data'; -import { - ContentSourceRequest, - UpdateContentSourceRequest, -} from './request.models'; +import { ContentSourceRequest, UpdateContentSourceRequest } from './request.models'; import { RequestService } from './request.service'; import { RestRequest } from './rest-request.model'; diff --git a/src/app/core/data/comcol-data.service.spec.ts b/projects/dspace/core/src/lib/data/comcol-data.service.spec.ts similarity index 97% rename from src/app/core/data/comcol-data.service.spec.ts rename to projects/dspace/core/src/lib/data/comcol-data.service.spec.ts index d86c8576d21..f7c4e1d038b 100644 --- a/src/app/core/data/comcol-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/comcol-data.service.spec.ts @@ -1,26 +1,23 @@ import { HttpClient } from '@angular/common/http'; import { Store } from '@ngrx/store'; import { cold } from 'jasmine-marbles'; -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { getMockRequestService } from '../../shared/mocks/request.service.mock'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { - createFailedRemoteDataObject, - createFailedRemoteDataObject$, - createSuccessfulRemoteDataObject, - createSuccessfulRemoteDataObject$, -} from '../../shared/remote-data.utils'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { CoreState } from '../core-state.model'; +import { NotificationsService } from '../notification-system/notifications.service'; import { Bitstream } from '../shared/bitstream.model'; import { Community } from '../shared/community.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; +import { getMockRequestService } from '../testing/request.service.mock'; +import { + createFailedRemoteDataObject, + createFailedRemoteDataObject$, + createSuccessfulRemoteDataObject, + createSuccessfulRemoteDataObject$, +} from '../utilities/remote-data.utils'; import { testCreateDataImplementation } from './base/create-data.spec'; import { testDeleteDataImplementation } from './base/delete-data.spec'; import { testFindAllDataImplementation } from './base/find-all-data.spec'; diff --git a/src/app/core/data/comcol-data.service.ts b/projects/dspace/core/src/lib/data/comcol-data.service.ts similarity index 93% rename from src/app/core/data/comcol-data.service.ts rename to projects/dspace/core/src/lib/data/comcol-data.service.ts index de0d1a31570..33a57b3c89e 100644 --- a/src/app/core/data/comcol-data.service.ts +++ b/projects/dspace/core/src/lib/data/comcol-data.service.ts @@ -1,63 +1,35 @@ +import { RestRequestMethod } from '@dspace/config'; +import { hasValue, isEmpty, isNotEmpty } from '@dspace/utils'; import { Operation } from 'fast-json-patch'; -import { - combineLatest as observableCombineLatest, - Observable, -} from 'rxjs'; -import { - distinctUntilChanged, - filter, - map, - switchMap, - take, -} from 'rxjs/operators'; +import { combineLatest as observableCombineLatest, Observable } from 'rxjs'; +import { distinctUntilChanged, filter, map, switchMap, take } from 'rxjs/operators'; -import { - hasValue, - isEmpty, - isNotEmpty, -} from '../../shared/empty.util'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { createFailedRemoteDataObject$ } from '../../shared/remote-data.utils'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; +import { NotificationsService } from '../notification-system/notifications.service'; import { Bitstream } from '../shared/bitstream.model'; import { Collection } from '../shared/collection.model'; import { Community } from '../shared/community.model'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { HALLink } from '../shared/hal-link.model'; import { NoContent } from '../shared/NoContent.model'; import { getFirstCompletedRemoteData } from '../shared/operators'; import { URLCombiner } from '../url-combiner/url-combiner'; -import { - CreateData, - CreateDataImpl, -} from './base/create-data'; -import { - DeleteData, - DeleteDataImpl, -} from './base/delete-data'; -import { - FindAllData, - FindAllDataImpl, -} from './base/find-all-data'; +import { createFailedRemoteDataObject$ } from '../utilities/remote-data.utils'; +import { CreateData, CreateDataImpl } from './base/create-data'; +import { DeleteData, DeleteDataImpl } from './base/delete-data'; +import { FindAllData, FindAllDataImpl } from './base/find-all-data'; import { IdentifiableDataService } from './base/identifiable-data.service'; -import { - PatchData, - PatchDataImpl, -} from './base/patch-data'; -import { - SearchData, - SearchDataImpl, -} from './base/search-data'; +import { PatchData, PatchDataImpl } from './base/patch-data'; +import { SearchData, SearchDataImpl } from './base/search-data'; import { BitstreamDataService } from './bitstream-data.service'; import { DSOChangeAnalyzer } from './dso-change-analyzer.service'; import { FindListOptions } from './find-list-options.model'; import { PaginatedList } from './paginated-list.model'; import { RemoteData } from './remote-data'; import { RequestService } from './request.service'; -import { RestRequestMethod } from './rest-request-method'; export abstract class ComColDataService extends IdentifiableDataService implements CreateData, FindAllData, SearchData, PatchData, DeleteData { private createData: CreateData; diff --git a/src/app/core/data/community-data.service.ts b/projects/dspace/core/src/lib/data/community-data.service.ts similarity index 89% rename from src/app/core/data/community-data.service.ts rename to projects/dspace/core/src/lib/data/community-data.service.ts index 79dedf0c842..f643dc117c0 100644 --- a/src/app/core/data/community-data.service.ts +++ b/projects/dspace/core/src/lib/data/community-data.service.ts @@ -1,18 +1,13 @@ import { Injectable } from '@angular/core'; +import { isNotEmpty } from '@dspace/utils'; import { Observable } from 'rxjs'; -import { - filter, - map, - switchMap, - take, -} from 'rxjs/operators'; +import { filter, map, switchMap, take } from 'rxjs/operators'; -import { isNotEmpty } from '../../shared/empty.util'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; +import { NotificationsService } from '../notification-system/notifications.service'; import { Community } from '../shared/community.model'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { BitstreamDataService } from './bitstream-data.service'; import { ComColDataService } from './comcol-data.service'; diff --git a/src/app/core/data/configuration-data.service.spec.ts b/projects/dspace/core/src/lib/data/configuration-data.service.spec.ts similarity index 97% rename from src/app/core/data/configuration-data.service.spec.ts rename to projects/dspace/core/src/lib/data/configuration-data.service.spec.ts index bccfe45da48..ed7cfa6f782 100644 --- a/src/app/core/data/configuration-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/configuration-data.service.spec.ts @@ -1,7 +1,4 @@ -import { - cold, - getTestScheduler, -} from 'jasmine-marbles'; +import { cold, getTestScheduler } from 'jasmine-marbles'; import { TestScheduler } from 'rxjs/testing'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; diff --git a/src/app/core/data/configuration-data.service.ts b/projects/dspace/core/src/lib/data/configuration-data.service.ts similarity index 100% rename from src/app/core/data/configuration-data.service.ts rename to projects/dspace/core/src/lib/data/configuration-data.service.ts diff --git a/src/app/core/data/content-source-response-parsing.service.ts b/projects/dspace/core/src/lib/data/content-source-response-parsing.service.ts similarity index 100% rename from src/app/core/data/content-source-response-parsing.service.ts rename to projects/dspace/core/src/lib/data/content-source-response-parsing.service.ts diff --git a/src/app/core/data/debug-response-parsing.service.ts b/projects/dspace/core/src/lib/data/debug-response-parsing.service.ts similarity index 100% rename from src/app/core/data/debug-response-parsing.service.ts rename to projects/dspace/core/src/lib/data/debug-response-parsing.service.ts diff --git a/src/app/core/data/default-change-analyzer.service.ts b/projects/dspace/core/src/lib/data/default-change-analyzer.service.ts similarity index 94% rename from src/app/core/data/default-change-analyzer.service.ts rename to projects/dspace/core/src/lib/data/default-change-analyzer.service.ts index fa08af018a2..e4cc79a8339 100644 --- a/src/app/core/data/default-change-analyzer.service.ts +++ b/projects/dspace/core/src/lib/data/default-change-analyzer.service.ts @@ -1,8 +1,5 @@ import { Injectable } from '@angular/core'; -import { - compare, - Operation, -} from 'fast-json-patch'; +import { compare, Operation } from 'fast-json-patch'; import { getClassForType } from '../cache/builders/build-decorators'; import { TypedObject } from '../cache/typed-object.model'; diff --git a/src/app/core/data/dso-change-analyzer.service.ts b/projects/dspace/core/src/lib/data/dso-change-analyzer.service.ts similarity index 95% rename from src/app/core/data/dso-change-analyzer.service.ts rename to projects/dspace/core/src/lib/data/dso-change-analyzer.service.ts index 95e7b5d69f4..84bb7de44e9 100644 --- a/src/app/core/data/dso-change-analyzer.service.ts +++ b/projects/dspace/core/src/lib/data/dso-change-analyzer.service.ts @@ -1,8 +1,5 @@ import { Injectable } from '@angular/core'; -import { - compare, - Operation, -} from 'fast-json-patch'; +import { compare, Operation } from 'fast-json-patch'; import cloneDeep from 'lodash/cloneDeep'; import { DSpaceObject } from '../shared/dspace-object.model'; diff --git a/src/app/core/data/dso-redirect.service.spec.ts b/projects/dspace/core/src/lib/data/dso-redirect.service.spec.ts similarity index 95% rename from src/app/core/data/dso-redirect.service.spec.ts rename to projects/dspace/core/src/lib/data/dso-redirect.service.spec.ts index b6b72583ea6..9ff7d685829 100644 --- a/src/app/core/data/dso-redirect.service.spec.ts +++ b/projects/dspace/core/src/lib/data/dso-redirect.service.spec.ts @@ -1,24 +1,17 @@ -import { - cold, - getTestScheduler, -} from 'jasmine-marbles'; +import { AppConfig } from '@dspace/config'; +import { cold, getTestScheduler } from 'jasmine-marbles'; import { TestScheduler } from 'rxjs/testing'; -import { AppConfig } from '../../../config/app-config.interface'; -import { environment } from '../../../environments/environment.test'; -import { createSuccessfulRemoteDataObject } from '../../shared/remote-data.utils'; -import { followLink } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { HardRedirectService } from '../services/hard-redirect.service'; +import { followLink } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { Item } from '../shared/item.model'; +import { createSuccessfulRemoteDataObject } from '../utilities/remote-data.utils'; import { EMBED_SEPARATOR } from './base/base-data.service'; import { DsoRedirectService } from './dso-redirect.service'; -import { - GetRequest, - IdentifierType, -} from './request.models'; +import { GetRequest, IdentifierType } from './request.models'; import { RequestService } from './request.service'; describe('DsoRedirectService', () => { @@ -37,6 +30,11 @@ describe('DsoRedirectService', () => { const requestUUIDURL = `https://rest.api/rest/api/pid/find?id=${dsoUUID}`; const requestUUID = '34cfed7c-f597-49ef-9cbe-ea351f0023c2'; const objectCache = {} as ObjectCacheService; + const environment = { + ui: { + nameSpace: '/angular-dspace', + }, + } as AppConfig; beforeEach(() => { scheduler = getTestScheduler(); @@ -64,6 +62,7 @@ describe('DsoRedirectService', () => { redirect: {}, }); + service = new DsoRedirectService( environment as AppConfig, requestService, diff --git a/src/app/core/data/dso-redirect.service.ts b/projects/dspace/core/src/lib/data/dso-redirect.service.ts similarity index 94% rename from src/app/core/data/dso-redirect.service.ts rename to projects/dspace/core/src/lib/data/dso-redirect.service.ts index 28628a62464..04c0d7ae4e6 100644 --- a/src/app/core/data/dso-redirect.service.ts +++ b/projects/dspace/core/src/lib/data/dso-redirect.service.ts @@ -6,21 +6,15 @@ * http://www.dspace.org/license/ */ /* eslint-disable max-classes-per-file */ -import { - Inject, - Injectable, -} from '@angular/core'; +import { Inject, Injectable } from '@angular/core'; +import { APP_CONFIG, AppConfig } from '@dspace/config'; +import { hasValue } from '@dspace/utils'; import { Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; -import { - APP_CONFIG, - AppConfig, -} from '../../../config/app-config.interface'; -import { getDSORoute } from '../../app-routing-paths'; -import { hasValue } from '../../shared/empty.util'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; +import { getDSORoute } from '../router/utils/dso-route.utils'; import { HardRedirectService } from '../services/hard-redirect.service'; import { DSpaceObject } from '../shared/dspace-object.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; diff --git a/src/app/core/data/dso-response-parsing.service.ts b/projects/dspace/core/src/lib/data/dso-response-parsing.service.ts similarity index 85% rename from src/app/core/data/dso-response-parsing.service.ts rename to projects/dspace/core/src/lib/data/dso-response-parsing.service.ts index 5cabba29eb2..5c0ed917ba1 100644 --- a/src/app/core/data/dso-response-parsing.service.ts +++ b/projects/dspace/core/src/lib/data/dso-response-parsing.service.ts @@ -1,14 +1,9 @@ -import { Injectable } from '@angular/core'; +import { Inject, Injectable } from '@angular/core'; +import { APP_CONFIG, AppConfig } from '@dspace/config'; +import { hasNoValue, hasValue } from '@dspace/utils'; -import { - hasNoValue, - hasValue, -} from '../../shared/empty.util'; import { ObjectCacheService } from '../cache/object-cache.service'; -import { - DSOSuccessResponse, - RestResponse, -} from '../cache/response.models'; +import { DSOSuccessResponse, RestResponse } from '../cache/response.models'; import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; import { DSpaceObject } from '../shared/dspace-object.model'; import { BaseResponseParsingService } from './base-response-parsing.service'; @@ -25,6 +20,7 @@ export class DSOResponseParsingService extends BaseResponseParsingService implem constructor( protected objectCache: ObjectCacheService, + @Inject(APP_CONFIG) protected appConfig: AppConfig, ) { super(); } diff --git a/src/app/core/data/dspace-object-data.service.spec.ts b/projects/dspace/core/src/lib/data/dspace-object-data.service.spec.ts similarity index 97% rename from src/app/core/data/dspace-object-data.service.spec.ts rename to projects/dspace/core/src/lib/data/dspace-object-data.service.spec.ts index 1e4809ac4bc..1b226858e3f 100644 --- a/src/app/core/data/dspace-object-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/dspace-object-data.service.spec.ts @@ -1,7 +1,4 @@ -import { - cold, - getTestScheduler, -} from 'jasmine-marbles'; +import { cold, getTestScheduler } from 'jasmine-marbles'; import { TestScheduler } from 'rxjs/testing'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; diff --git a/src/app/core/data/dspace-object-data.service.ts b/projects/dspace/core/src/lib/data/dspace-object-data.service.ts similarity index 100% rename from src/app/core/data/dspace-object-data.service.ts rename to projects/dspace/core/src/lib/data/dspace-object-data.service.ts diff --git a/src/app/core/data/dspace-rest-response-parsing.service.ts b/projects/dspace/core/src/lib/data/dspace-rest-response-parsing.service.ts similarity index 90% rename from src/app/core/data/dspace-rest-response-parsing.service.ts rename to projects/dspace/core/src/lib/data/dspace-rest-response-parsing.service.ts index 1cd286427f3..be3c24caac1 100644 --- a/src/app/core/data/dspace-rest-response-parsing.service.ts +++ b/projects/dspace/core/src/lib/data/dspace-rest-response-parsing.service.ts @@ -1,34 +1,24 @@ /* eslint-disable max-classes-per-file */ -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; +import { APP_CONFIG, AppConfig, RestRequestMethod } from '@dspace/config'; +import { hasNoValue, hasValue, isNotEmpty } from '@dspace/utils'; -import { environment } from '../../../environments/environment'; -import { - hasNoValue, - hasValue, - isNotEmpty, -} from '../../shared/empty.util'; import { getClassForType } from '../cache/builders/build-decorators'; import { CacheableObject } from '../cache/cacheable-object.model'; import { ObjectCacheService } from '../cache/object-cache.service'; import { ParsedResponse } from '../cache/response.models'; import { DSpaceSerializer } from '../dspace-rest/dspace.serializer'; import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; -import { - getEmbedSizeParams, - getUrlWithoutEmbedParams, -} from '../index/index.selectors'; +import { getEmbedSizeParams, getUrlWithoutEmbedParams } from '../index/index.selectors'; import { Serializer } from '../serializer'; import { DSpaceObject } from '../shared/dspace-object.model'; import { GenericConstructor } from '../shared/generic-constructor'; import { PageInfo } from '../shared/page-info.model'; import { URLCombiner } from '../url-combiner/url-combiner'; -import { - buildPaginatedList, - PaginatedList, -} from './paginated-list.model'; +import { buildPaginatedList, PaginatedList } from './paginated-list.model'; import { ResponseParsingService } from './parsing.service'; import { RestRequest } from './rest-request.model'; -import { RestRequestMethod } from './rest-request-method'; +import { isRestPaginatedList } from './base-response-parsing.service' /** @@ -40,20 +30,6 @@ export function isCacheableObject(obj: any): boolean { return hasValue(obj) && hasValue(obj._links) && hasValue(obj._links.self) && hasValue(obj._links.self.href); } -/** - * Return true if halObj has a value for `page` with properties - * `size`, `totalElements`, `totalPages`, `number` - * - * @param {any} halObj The object to test - */ -export function isRestPaginatedList(halObj: any): boolean { - return hasValue(halObj.page) && - hasValue(halObj.page.size) && - hasValue(halObj.page.totalElements) && - hasValue(halObj.page.totalPages) && - hasValue(halObj.page.number); -} - /** * Split a url into parts * @@ -68,6 +44,8 @@ const splitUrlInParts = (url: string): string[] => { @Injectable({ providedIn: 'root' }) export class DspaceRestResponseParsingService implements ResponseParsingService { protected serializerConstructor: GenericConstructor> = DSpaceSerializer; + protected readonly appConfig: AppConfig = inject(APP_CONFIG); + constructor( protected objectCache: ObjectCacheService, @@ -125,7 +103,7 @@ export class DspaceRestResponseParsingService implements ResponseParsingService this.addToObjectCache(null, request, data, embedAltUrl); } else if (!isCacheableObject(data._embedded[property])) { // Embedded object exists, but doesn't contain a self link -> cache it using the alternative link instead - this.objectCache.add(data._embedded[property], hasValue(request.responseMsToLive) ? request.responseMsToLive : environment.cache.msToLive.default, request.uuid, embedAltUrl); + this.objectCache.add(data._embedded[property], hasValue(request.responseMsToLive) ? request.responseMsToLive : this.appConfig.cache.msToLive.default, request.uuid, embedAltUrl); } this.process(data._embedded[property], request, embedAltUrl); }); @@ -262,7 +240,7 @@ export class DspaceRestResponseParsingService implements ResponseParsingService alternativeURL = undefined; } - this.objectCache.add(co, hasValue(request.responseMsToLive) ? request.responseMsToLive : environment.cache.msToLive.default, request.uuid, alternativeURL); + this.objectCache.add(co, hasValue(request.responseMsToLive) ? request.responseMsToLive : this.appConfig.cache.msToLive.default, request.uuid, alternativeURL); } processPageInfo(payload: any): PageInfo { diff --git a/src/app/core/data/endpoint-map-response-parsing.service.ts b/projects/dspace/core/src/lib/data/endpoint-map-response-parsing.service.ts similarity index 95% rename from src/app/core/data/endpoint-map-response-parsing.service.ts rename to projects/dspace/core/src/lib/data/endpoint-map-response-parsing.service.ts index c7dd40b98bd..8db75723b76 100644 --- a/src/app/core/data/endpoint-map-response-parsing.service.ts +++ b/projects/dspace/core/src/lib/data/endpoint-map-response-parsing.service.ts @@ -1,7 +1,6 @@ import { Injectable } from '@angular/core'; +import { hasValue } from '@dspace/utils'; -import { environment } from '../../../environments/environment'; -import { hasValue } from '../../shared/empty.util'; import { getClassForType } from '../cache/builders/build-decorators'; import { CacheableObject } from '../cache/cacheable-object.model'; import { ParsedResponse } from '../cache/response.models'; @@ -111,7 +110,7 @@ export class EndpointMapResponseParsingService extends DspaceRestResponseParsing } if (hasValue(this.getConstructorFor((co as any).type))) { - this.objectCache.add(co, hasValue(request.responseMsToLive) ? request.responseMsToLive : environment.cache.msToLive.default, request.uuid, alternativeURL); + this.objectCache.add(co, hasValue(request.responseMsToLive) ? request.responseMsToLive : this.appConfig.cache.msToLive.default, request.uuid, alternativeURL); } } diff --git a/src/app/core/data/entity-type-data.service.spec.ts b/projects/dspace/core/src/lib/data/entity-type-data.service.spec.ts similarity index 100% rename from src/app/core/data/entity-type-data.service.spec.ts rename to projects/dspace/core/src/lib/data/entity-type-data.service.spec.ts diff --git a/src/app/core/data/entity-type-data.service.ts b/projects/dspace/core/src/lib/data/entity-type-data.service.ts similarity index 96% rename from src/app/core/data/entity-type-data.service.ts rename to projects/dspace/core/src/lib/data/entity-type-data.service.ts index d47fadce172..ee2100a2e24 100644 --- a/src/app/core/data/entity-type-data.service.ts +++ b/projects/dspace/core/src/lib/data/entity-type-data.service.ts @@ -1,14 +1,10 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; -import { - map, - switchMap, - take, -} from 'rxjs/operators'; +import { map, switchMap, take } from 'rxjs/operators'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { ItemType } from '../shared/item-relationships/item-type.model'; import { RelationshipType } from '../shared/item-relationships/relationship-type.model'; @@ -18,14 +14,8 @@ import { getRemoteDataPayload, } from '../shared/operators'; import { BaseDataService } from './base/base-data.service'; -import { - FindAllData, - FindAllDataImpl, -} from './base/find-all-data'; -import { - SearchData, - SearchDataImpl, -} from './base/search-data'; +import { FindAllData, FindAllDataImpl } from './base/find-all-data'; +import { SearchData, SearchDataImpl } from './base/search-data'; import { FindListOptions } from './find-list-options.model'; import { PaginatedList } from './paginated-list.model'; import { RelationshipTypeDataService } from './relationship-type-data.service'; diff --git a/src/app/core/data/eperson-registration.service.spec.ts b/projects/dspace/core/src/lib/data/eperson-registration.service.spec.ts similarity index 96% rename from src/app/core/data/eperson-registration.service.spec.ts rename to projects/dspace/core/src/lib/data/eperson-registration.service.spec.ts index 4a0ec962e18..1b6aceb183f 100644 --- a/src/app/core/data/eperson-registration.service.spec.ts +++ b/projects/dspace/core/src/lib/data/eperson-registration.service.spec.ts @@ -3,11 +3,11 @@ import { cold } from 'jasmine-marbles'; import { of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { createSuccessfulRemoteDataObject } from '../../shared/remote-data.utils'; -import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; import { RestResponse } from '../cache/response.models'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; import { Registration } from '../shared/registration.model'; +import { HALEndpointServiceStub } from '../testing/hal-endpoint-service.stub'; +import { createSuccessfulRemoteDataObject } from '../utilities/remote-data.utils'; import { EpersonRegistrationService } from './eperson-registration.service'; import { PostRequest } from './request.models'; import { RequestService } from './request.service'; diff --git a/src/app/core/data/eperson-registration.service.ts b/projects/dspace/core/src/lib/data/eperson-registration.service.ts similarity index 96% rename from src/app/core/data/eperson-registration.service.ts rename to projects/dspace/core/src/lib/data/eperson-registration.service.ts index a6a7f9478c0..59af2e9b1eb 100644 --- a/src/app/core/data/eperson-registration.service.ts +++ b/projects/dspace/core/src/lib/data/eperson-registration.service.ts @@ -1,20 +1,10 @@ -import { - HttpHeaders, - HttpParams, -} from '@angular/common/http'; +import { HttpHeaders, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; +import { hasValue, isNotEmpty } from '@dspace/utils'; import { Operation } from 'fast-json-patch'; import { Observable } from 'rxjs'; -import { - filter, - find, - map, -} from 'rxjs/operators'; - -import { - hasValue, - isNotEmpty, -} from '../../shared/empty.util'; +import { filter, find, map } from 'rxjs/operators'; + import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; import { GenericConstructor } from '../shared/generic-constructor'; @@ -25,11 +15,7 @@ import { Registration } from '../shared/registration.model'; import { ResponseParsingService } from './parsing.service'; import { RegistrationResponseParsingService } from './registration-response-parsing.service'; import { RemoteData } from './remote-data'; -import { - GetRequest, - PatchRequest, - PostRequest, -} from './request.models'; +import { GetRequest, PatchRequest, PostRequest } from './request.models'; import { RequestService } from './request.service'; @Injectable({ diff --git a/src/app/core/data/external-source-data.service.spec.ts b/projects/dspace/core/src/lib/data/external-source-data.service.spec.ts similarity index 95% rename from src/app/core/data/external-source-data.service.spec.ts rename to projects/dspace/core/src/lib/data/external-source-data.service.spec.ts index ba8ce48256c..8bcae4f9558 100644 --- a/src/app/core/data/external-source-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/external-source-data.service.spec.ts @@ -1,9 +1,9 @@ import { of } from 'rxjs'; import { take } from 'rxjs/operators'; -import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; -import { createPaginatedList } from '../../shared/testing/utils.test'; import { ExternalSourceEntry } from '../shared/external-source-entry.model'; +import { createPaginatedList } from '../testing/utils.test'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; import { testSearchDataImplementation } from './base/search-data.spec'; import { ExternalSourceDataService } from './external-source-data.service'; import { GetRequest } from './request.models'; diff --git a/src/app/core/data/external-source-data.service.ts b/projects/dspace/core/src/lib/data/external-source-data.service.ts similarity index 92% rename from src/app/core/data/external-source-data.service.ts rename to projects/dspace/core/src/lib/data/external-source-data.service.ts index e7f123dd18d..4555843f3be 100644 --- a/src/app/core/data/external-source-data.service.ts +++ b/projects/dspace/core/src/lib/data/external-source-data.service.ts @@ -1,28 +1,17 @@ import { Injectable } from '@angular/core'; +import { hasValue, isNotEmptyOperator } from '@dspace/utils'; import { Observable } from 'rxjs'; -import { - distinctUntilChanged, - map, - switchMap, - take, -} from 'rxjs/operators'; +import { distinctUntilChanged, map, switchMap, take } from 'rxjs/operators'; -import { - hasValue, - isNotEmptyOperator, -} from '../../shared/empty.util'; -import { PaginatedSearchOptions } from '../../shared/search/models/paginated-search-options.model'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { ExternalSource } from '../shared/external-source.model'; import { ExternalSourceEntry } from '../shared/external-source-entry.model'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; +import { PaginatedSearchOptions } from '../shared/search/models/paginated-search-options.model'; import { IdentifiableDataService } from './base/identifiable-data.service'; -import { - SearchData, - SearchDataImpl, -} from './base/search-data'; +import { SearchData, SearchDataImpl } from './base/search-data'; import { FindListOptions } from './find-list-options.model'; import { PaginatedList } from './paginated-list.model'; import { RemoteData } from './remote-data'; diff --git a/src/app/core/data/facet-config-response-parsing.service.ts b/projects/dspace/core/src/lib/data/facet-config-response-parsing.service.ts similarity index 87% rename from src/app/core/data/facet-config-response-parsing.service.ts rename to projects/dspace/core/src/lib/data/facet-config-response-parsing.service.ts index 4ae22c34d87..69bc53331fa 100644 --- a/src/app/core/data/facet-config-response-parsing.service.ts +++ b/projects/dspace/core/src/lib/data/facet-config-response-parsing.service.ts @@ -1,10 +1,10 @@ import { Injectable } from '@angular/core'; -import { FacetConfigResponse } from '../../shared/search/models/facet-config-response.model'; -import { SearchFilterConfig } from '../../shared/search/models/search-filter-config.model'; import { ParsedResponse } from '../cache/response.models'; import { DSpaceSerializer } from '../dspace-rest/dspace.serializer'; import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; +import { FacetConfigResponse } from '../shared/search/models/facet-config-response.model'; +import { SearchFilterConfig } from '../shared/search/models/search-filter-config.model'; import { DspaceRestResponseParsingService } from './dspace-rest-response-parsing.service'; import { RestRequest } from './rest-request.model'; diff --git a/src/app/core/data/facet-value-response-parsing.service.ts b/projects/dspace/core/src/lib/data/facet-value-response-parsing.service.ts similarity index 86% rename from src/app/core/data/facet-value-response-parsing.service.ts rename to projects/dspace/core/src/lib/data/facet-value-response-parsing.service.ts index 5cd24770d8b..d9fd9a1307d 100644 --- a/src/app/core/data/facet-value-response-parsing.service.ts +++ b/projects/dspace/core/src/lib/data/facet-value-response-parsing.service.ts @@ -1,10 +1,10 @@ import { Injectable } from '@angular/core'; -import { FacetValue } from '../../shared/search/models/facet-value.model'; -import { FacetValues } from '../../shared/search/models/facet-values.model'; import { ParsedResponse } from '../cache/response.models'; import { DSpaceSerializer } from '../dspace-rest/dspace.serializer'; import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; +import { FacetValue } from '../shared/search/models/facet-value.model'; +import { FacetValues } from '../shared/search/models/facet-values.model'; import { DspaceRestResponseParsingService } from './dspace-rest-response-parsing.service'; import { RestRequest } from './rest-request.model'; diff --git a/src/app/core/data/feature-authorization/authorization-data.service.spec.ts b/projects/dspace/core/src/lib/data/feature-authorization/authorization-data.service.spec.ts similarity index 95% rename from src/app/core/data/feature-authorization/authorization-data.service.spec.ts rename to projects/dspace/core/src/lib/data/feature-authorization/authorization-data.service.spec.ts index f5b76e0cf8b..e4216052609 100644 --- a/src/app/core/data/feature-authorization/authorization-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/feature-authorization/authorization-data.service.spec.ts @@ -1,21 +1,17 @@ -import { - combineLatest as observableCombineLatest, - Observable, - of, -} from 'rxjs'; +import { hasValue } from '@dspace/utils'; +import { combineLatest as observableCombineLatest, Observable, of } from 'rxjs'; -import { hasValue } from '../../../shared/empty.util'; -import { getMockObjectCacheService } from '../../../shared/mocks/object-cache.service.mock'; -import { - createFailedRemoteDataObject$, - createSuccessfulRemoteDataObject$, -} from '../../../shared/remote-data.utils'; -import { createPaginatedList } from '../../../shared/testing/utils.test'; import { RequestParam } from '../../cache/models/request-param.model'; import { EPerson } from '../../eperson/models/eperson.model'; import { Authorization } from '../../shared/authorization.model'; import { Feature } from '../../shared/feature.model'; import { Site } from '../../shared/site.model'; +import { getMockObjectCacheService } from '../../testing/object-cache.service.mock'; +import { createPaginatedList } from '../../testing/utils.test'; +import { + createFailedRemoteDataObject$, + createSuccessfulRemoteDataObject$, +} from '../../utilities/remote-data.utils'; import { testSearchDataImplementation } from '../base/search-data.spec'; import { FindListOptions } from '../find-list-options.model'; import { SiteDataService } from '../site-data.service'; diff --git a/src/app/core/data/feature-authorization/authorization-data.service.ts b/projects/dspace/core/src/lib/data/feature-authorization/authorization-data.service.ts similarity index 95% rename from src/app/core/data/feature-authorization/authorization-data.service.ts rename to projects/dspace/core/src/lib/data/feature-authorization/authorization-data.service.ts index 1f9a5e4c106..4e062a433aa 100644 --- a/src/app/core/data/feature-authorization/authorization-data.service.ts +++ b/projects/dspace/core/src/lib/data/feature-authorization/authorization-data.service.ts @@ -1,34 +1,17 @@ import { Injectable } from '@angular/core'; -import { - Observable, - of, -} from 'rxjs'; -import { - catchError, - map, - switchMap, -} from 'rxjs/operators'; +import { hasNoValue, hasValue, isNotEmpty } from '@dspace/utils'; +import { Observable, of } from 'rxjs'; +import { catchError, map, switchMap } from 'rxjs/operators'; -import { - hasNoValue, - hasValue, - isNotEmpty, -} from '../../../shared/empty.util'; -import { - followLink, - FollowLinkConfig, -} from '../../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { RequestParam } from '../../cache/models/request-param.model'; import { ObjectCacheService } from '../../cache/object-cache.service'; import { Authorization } from '../../shared/authorization.model'; +import { followLink, FollowLinkConfig } from '../../shared/follow-link-config.model'; import { HALEndpointService } from '../../shared/hal-endpoint.service'; import { getFirstCompletedRemoteData } from '../../shared/operators'; import { BaseDataService } from '../base/base-data.service'; -import { - SearchData, - SearchDataImpl, -} from '../base/search-data'; +import { SearchData, SearchDataImpl } from '../base/search-data'; import { FindListOptions } from '../find-list-options.model'; import { PaginatedList } from '../paginated-list.model'; import { RemoteData } from '../remote-data'; diff --git a/src/app/core/data/feature-authorization/authorization-search-params.ts b/projects/dspace/core/src/lib/data/feature-authorization/authorization-search-params.ts similarity index 100% rename from src/app/core/data/feature-authorization/authorization-search-params.ts rename to projects/dspace/core/src/lib/data/feature-authorization/authorization-search-params.ts diff --git a/src/app/core/data/feature-authorization/authorization-utils.ts b/projects/dspace/core/src/lib/data/feature-authorization/authorization-utils.ts similarity index 93% rename from src/app/core/data/feature-authorization/authorization-utils.ts rename to projects/dspace/core/src/lib/data/feature-authorization/authorization-utils.ts index 61d35cd6d84..872b70fc26c 100644 --- a/src/app/core/data/feature-authorization/authorization-utils.ts +++ b/projects/dspace/core/src/lib/data/feature-authorization/authorization-utils.ts @@ -1,18 +1,7 @@ -import { - combineLatest as observableCombineLatest, - Observable, - of, -} from 'rxjs'; -import { - map, - switchMap, -} from 'rxjs/operators'; +import { hasNoValue, hasValue, isNotEmpty } from '@dspace/utils'; +import { combineLatest as observableCombineLatest, Observable, of } from 'rxjs'; +import { map, switchMap } from 'rxjs/operators'; -import { - hasNoValue, - hasValue, - isNotEmpty, -} from '../../../shared/empty.util'; import { AuthService } from '../../auth/auth.service'; import { Authorization } from '../../shared/authorization.model'; import { Feature } from '../../shared/feature.model'; diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/collection-administrator.guard.ts b/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/collection-administrator.guard.ts similarity index 100% rename from src/app/core/data/feature-authorization/feature-authorization-guard/collection-administrator.guard.ts rename to projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/collection-administrator.guard.ts diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/community-administrator.guard.ts b/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/community-administrator.guard.ts similarity index 100% rename from src/app/core/data/feature-authorization/feature-authorization-guard/community-administrator.guard.ts rename to projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/community-administrator.guard.ts diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard.spec.ts b/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard.spec.ts similarity index 90% rename from src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard.spec.ts rename to projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard.spec.ts index c4f241243c5..70dd441975b 100644 --- a/src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard.spec.ts +++ b/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard.spec.ts @@ -1,25 +1,15 @@ import { TestBed } from '@angular/core/testing'; -import { - ResolveFn, - Router, - UrlTree, -} from '@angular/router'; -import { - Observable, - of, -} from 'rxjs'; - -import { createSuccessfulRemoteDataObject$ } from '../../../../shared/remote-data.utils'; +import { ResolveFn, Router, UrlTree } from '@angular/router'; import { AuthService } from '../../../auth/auth.service'; import { DSpaceObject } from '../../../shared/dspace-object.model'; +import { createSuccessfulRemoteDataObject$ } from '../../../utilities/remote-data.utils'; +import { Observable, of } from 'rxjs'; + import { RemoteData } from '../../remote-data'; import { AuthorizationDataService } from '../authorization-data.service'; import { FeatureID } from '../feature-id'; import { dsoPageSingleFeatureGuard } from './dso-page-single-feature.guard'; -import { - defaultDSOGetObjectUrl, - getRouteWithDSOId, -} from './dso-page-some-feature.guard'; +import { defaultDSOGetObjectUrl, getRouteWithDSOId } from './dso-page-some-feature.guard'; describe('DsoPageSingleFeatureGuard', () => { diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard.ts b/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard.ts similarity index 100% rename from src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard.ts rename to projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard.ts index 5073a386532..dec67633c9c 100644 --- a/src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard.ts +++ b/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/dso-page-single-feature.guard.ts @@ -4,10 +4,10 @@ import { ResolveFn, RouterStateSnapshot, } from '@angular/router'; +import { DSpaceObject } from '../../../shared/dspace-object.model'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { DSpaceObject } from '../../../shared/dspace-object.model'; import { RemoteData } from '../../remote-data'; import { FeatureID } from '../feature-id'; import { dsoPageSomeFeatureGuard } from './dso-page-some-feature.guard'; diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-some-feature.guard.spec.ts b/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/dso-page-some-feature.guard.spec.ts similarity index 93% rename from src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-some-feature.guard.spec.ts rename to projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/dso-page-some-feature.guard.spec.ts index 025c2c7a0a1..54dcd608d94 100644 --- a/src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-some-feature.guard.spec.ts +++ b/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/dso-page-some-feature.guard.spec.ts @@ -1,17 +1,10 @@ import { TestBed } from '@angular/core/testing'; -import { - ResolveFn, - Router, - UrlTree, -} from '@angular/router'; -import { - Observable, - of, -} from 'rxjs'; - -import { createSuccessfulRemoteDataObject$ } from '../../../../shared/remote-data.utils'; +import { ResolveFn, Router, UrlTree } from '@angular/router'; import { AuthService } from '../../../auth/auth.service'; import { DSpaceObject } from '../../../shared/dspace-object.model'; +import { createSuccessfulRemoteDataObject$ } from '../../../utilities/remote-data.utils'; +import { Observable, of } from 'rxjs'; + import { RemoteData } from '../../remote-data'; import { AuthorizationDataService } from '../authorization-data.service'; import { FeatureID } from '../feature-id'; diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-some-feature.guard.ts b/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/dso-page-some-feature.guard.ts similarity index 96% rename from src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-some-feature.guard.ts rename to projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/dso-page-some-feature.guard.ts index 7469f113b49..2f8ac86c7d9 100644 --- a/src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-some-feature.guard.ts +++ b/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/dso-page-some-feature.guard.ts @@ -4,15 +4,12 @@ import { ResolveFn, RouterStateSnapshot, } from '@angular/router'; +import { DSpaceObject } from '../../../shared/dspace-object.model'; +import { getAllSucceededRemoteDataPayload } from '../../../shared/operators'; +import { hasNoValue, hasValue } from '@dspace/utils'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { - hasNoValue, - hasValue, -} from '../../../../shared/empty.util'; -import { DSpaceObject } from '../../../shared/dspace-object.model'; -import { getAllSucceededRemoteDataPayload } from '../../../shared/operators'; import { RemoteData } from '../../remote-data'; import { FeatureID } from '../feature-id'; import { diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/group-administrator.guard.ts b/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/group-administrator.guard.ts similarity index 100% rename from src/app/core/data/feature-authorization/feature-authorization-guard/group-administrator.guard.ts rename to projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/group-administrator.guard.ts diff --git a/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/index.ts b/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/index.ts new file mode 100644 index 00000000000..41f40d2746b --- /dev/null +++ b/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/index.ts @@ -0,0 +1,18 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './collection-administrator.guard'; +export * from './community-administrator.guard'; +export * from './dso-page-single-feature.guard.spec'; +export * from './dso-page-single-feature.guard'; +export * from './dso-page-some-feature.guard.spec'; +export * from './dso-page-some-feature.guard'; +export * from './group-administrator.guard'; +export * from './single-feature-authorization.guard.spec'; +export * from './single-feature-authorization.guard'; +export * from './site-administrator.guard'; +export * from './site-register.guard'; +export * from './some-feature-authorization.guard.spec'; +export * from './some-feature-authorization.guard'; +export * from './statistics-administrator.guard'; diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/single-feature-authorization.guard.spec.ts b/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/single-feature-authorization.guard.spec.ts similarity index 91% rename from src/app/core/data/feature-authorization/feature-authorization-guard/single-feature-authorization.guard.spec.ts rename to projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/single-feature-authorization.guard.spec.ts index 8bf7785e5fa..b9d0fc22935 100644 --- a/src/app/core/data/feature-authorization/feature-authorization-guard/single-feature-authorization.guard.spec.ts +++ b/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/single-feature-authorization.guard.spec.ts @@ -1,17 +1,8 @@ -import { - TestBed, - waitForAsync, -} from '@angular/core/testing'; -import { - Router, - UrlTree, -} from '@angular/router'; -import { - Observable, - of, -} from 'rxjs'; - +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { Router, UrlTree } from '@angular/router'; import { AuthService } from '../../../auth/auth.service'; +import { Observable, of } from 'rxjs'; + import { AuthorizationDataService } from '../authorization-data.service'; import { FeatureID } from '../feature-id'; import { singleFeatureAuthorizationGuard } from './single-feature-authorization.guard'; diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/single-feature-authorization.guard.ts b/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/single-feature-authorization.guard.ts similarity index 93% rename from src/app/core/data/feature-authorization/feature-authorization-guard/single-feature-authorization.guard.ts rename to projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/single-feature-authorization.guard.ts index 995dcb6f5c4..2321d453e62 100644 --- a/src/app/core/data/feature-authorization/feature-authorization-guard/single-feature-authorization.guard.ts +++ b/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/single-feature-authorization.guard.ts @@ -1,8 +1,4 @@ -import { - ActivatedRouteSnapshot, - CanActivateFn, - RouterStateSnapshot, -} from '@angular/router'; +import { ActivatedRouteSnapshot, CanActivateFn, RouterStateSnapshot } from '@angular/router'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/site-administrator.guard.ts b/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/site-administrator.guard.ts similarity index 100% rename from src/app/core/data/feature-authorization/feature-authorization-guard/site-administrator.guard.ts rename to projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/site-administrator.guard.ts diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/site-register.guard.ts b/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/site-register.guard.ts similarity index 100% rename from src/app/core/data/feature-authorization/feature-authorization-guard/site-register.guard.ts rename to projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/site-register.guard.ts diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard.spec.ts b/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard.spec.ts similarity index 95% rename from src/app/core/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard.spec.ts rename to projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard.spec.ts index 4a1d06f83c6..c9cb6515da2 100644 --- a/src/app/core/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard.spec.ts +++ b/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard.spec.ts @@ -1,17 +1,8 @@ -import { - TestBed, - waitForAsync, -} from '@angular/core/testing'; -import { - Router, - UrlTree, -} from '@angular/router'; -import { - Observable, - of, -} from 'rxjs'; - +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { Router, UrlTree } from '@angular/router'; import { AuthService } from '../../../auth/auth.service'; +import { Observable, of } from 'rxjs'; + import { AuthorizationDataService } from '../authorization-data.service'; import { FeatureID } from '../feature-id'; import { someFeatureAuthorizationGuard } from './some-feature-authorization.guard'; diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard.ts b/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard.ts similarity index 96% rename from src/app/core/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard.ts rename to projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard.ts index 1ce7fe5f91e..c6279f84dde 100644 --- a/src/app/core/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard.ts +++ b/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/some-feature-authorization.guard.ts @@ -6,15 +6,11 @@ import { RouterStateSnapshot, UrlTree, } from '@angular/router'; -import { - combineLatest as observableCombineLatest, - Observable, - of, -} from 'rxjs'; -import { switchMap } from 'rxjs/operators'; - import { AuthService } from '../../../auth/auth.service'; import { returnForbiddenUrlTreeOrLoginOnAllFalse } from '../../../shared/authorized.operators'; +import { combineLatest as observableCombineLatest, Observable, of } from 'rxjs'; +import { switchMap } from 'rxjs/operators'; + import { AuthorizationDataService } from '../authorization-data.service'; import { FeatureID } from '../feature-id'; diff --git a/src/app/core/data/feature-authorization/feature-authorization-guard/statistics-administrator.guard.ts b/projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/statistics-administrator.guard.ts similarity index 100% rename from src/app/core/data/feature-authorization/feature-authorization-guard/statistics-administrator.guard.ts rename to projects/dspace/core/src/lib/data/feature-authorization/feature-authorization-guard/statistics-administrator.guard.ts diff --git a/src/app/core/data/feature-authorization/feature-data.service.ts b/projects/dspace/core/src/lib/data/feature-authorization/feature-data.service.ts similarity index 100% rename from src/app/core/data/feature-authorization/feature-data.service.ts rename to projects/dspace/core/src/lib/data/feature-authorization/feature-data.service.ts diff --git a/src/app/core/data/feature-authorization/feature-id.ts b/projects/dspace/core/src/lib/data/feature-authorization/feature-id.ts similarity index 100% rename from src/app/core/data/feature-authorization/feature-id.ts rename to projects/dspace/core/src/lib/data/feature-authorization/feature-id.ts diff --git a/projects/dspace/core/src/lib/data/feature-authorization/index.ts b/projects/dspace/core/src/lib/data/feature-authorization/index.ts new file mode 100644 index 00000000000..0aa2e4fb60d --- /dev/null +++ b/projects/dspace/core/src/lib/data/feature-authorization/index.ts @@ -0,0 +1,11 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './authorization-data.service.spec'; +export * from './authorization-data.service'; +export * from './authorization-search-params'; +export * from './authorization-utils'; +export * from './feature-data.service'; +export * from './feature-id'; +export * from './feature-authorization-guard/index'; diff --git a/src/app/core/data/filtered-discovery-page-response-parsing.service.spec.ts b/projects/dspace/core/src/lib/data/filtered-discovery-page-response-parsing.service.spec.ts similarity index 78% rename from src/app/core/data/filtered-discovery-page-response-parsing.service.spec.ts rename to projects/dspace/core/src/lib/data/filtered-discovery-page-response-parsing.service.spec.ts index 6966e6a6311..d154f6cf669 100644 --- a/src/app/core/data/filtered-discovery-page-response-parsing.service.spec.ts +++ b/projects/dspace/core/src/lib/data/filtered-discovery-page-response-parsing.service.spec.ts @@ -1,8 +1,12 @@ -import { getMockObjectCacheService } from '../../shared/mocks/object-cache.service.mock'; +import { AppConfig } from '@dspace/config'; + import { FilteredDiscoveryQueryResponse } from '../cache/response.models'; import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; import { GenericConstructor } from '../shared/generic-constructor'; -import { FilteredDiscoveryPageResponseParsingService } from './filtered-discovery-page-response-parsing.service'; +import { getMockObjectCacheService } from '../testing/object-cache.service.mock'; +import { + FilteredDiscoveryPageResponseParsingService, +} from './filtered-discovery-page-response-parsing.service'; import { ResponseParsingService } from './parsing.service'; import { GetRequest } from './request.models'; @@ -10,7 +14,9 @@ describe('FilteredDiscoveryPageResponseParsingService', () => { let service: FilteredDiscoveryPageResponseParsingService; beforeEach(() => { - service = new FilteredDiscoveryPageResponseParsingService(getMockObjectCacheService()); + service = new FilteredDiscoveryPageResponseParsingService(getMockObjectCacheService(), { + cache: { msToLive: { default: 15 * 60 * 1000 } }, + } as AppConfig); }); describe('parse', () => { diff --git a/src/app/core/data/filtered-discovery-page-response-parsing.service.ts b/projects/dspace/core/src/lib/data/filtered-discovery-page-response-parsing.service.ts similarity index 78% rename from src/app/core/data/filtered-discovery-page-response-parsing.service.ts rename to projects/dspace/core/src/lib/data/filtered-discovery-page-response-parsing.service.ts index e07f46e9160..f40b5600860 100644 --- a/src/app/core/data/filtered-discovery-page-response-parsing.service.ts +++ b/projects/dspace/core/src/lib/data/filtered-discovery-page-response-parsing.service.ts @@ -1,10 +1,8 @@ -import { Injectable } from '@angular/core'; +import { Inject, Injectable } from '@angular/core'; +import { APP_CONFIG, AppConfig } from '@dspace/config'; import { ObjectCacheService } from '../cache/object-cache.service'; -import { - FilteredDiscoveryQueryResponse, - RestResponse, -} from '../cache/response.models'; +import { FilteredDiscoveryQueryResponse, RestResponse } from '../cache/response.models'; import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; import { BaseResponseParsingService } from './base-response-parsing.service'; import { ResponseParsingService } from './parsing.service'; @@ -20,8 +18,10 @@ export class FilteredDiscoveryPageResponseParsingService extends BaseResponsePar toCache = false; constructor( protected objectCache: ObjectCacheService, + @Inject(APP_CONFIG) protected appConfig: AppConfig, ) { super(); + this.defaultResponseMsToLive = this.appConfig?.cache.msToLive.default; } /** diff --git a/src/app/core/data/find-list-options.model.ts b/projects/dspace/core/src/lib/data/find-list-options.model.ts similarity index 100% rename from src/app/core/data/find-list-options.model.ts rename to projects/dspace/core/src/lib/data/find-list-options.model.ts diff --git a/src/app/core/data/href-only-data.service.spec.ts b/projects/dspace/core/src/lib/data/href-only-data.service.spec.ts similarity index 95% rename from src/app/core/data/href-only-data.service.spec.ts rename to projects/dspace/core/src/lib/data/href-only-data.service.spec.ts index cba85d5de65..38c53dfb998 100644 --- a/src/app/core/data/href-only-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/href-only-data.service.spec.ts @@ -1,8 +1,5 @@ -import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; -import { - followLink, - FollowLinkConfig, -} from '../../shared/utils/follow-link-config.model'; +import { followLink, FollowLinkConfig } from '../shared/follow-link-config.model'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; import { BaseDataService } from './base/base-data.service'; import { FindListOptions } from './find-list-options.model'; import { HrefOnlyDataService } from './href-only-data.service'; diff --git a/src/app/core/data/href-only-data.service.ts b/projects/dspace/core/src/lib/data/href-only-data.service.ts similarity index 98% rename from src/app/core/data/href-only-data.service.ts rename to projects/dspace/core/src/lib/data/href-only-data.service.ts index dd40be8f7df..fa73c7a33ac 100644 --- a/src/app/core/data/href-only-data.service.ts +++ b/projects/dspace/core/src/lib/data/href-only-data.service.ts @@ -1,10 +1,10 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { CacheableObject } from '../cache/cacheable-object.model'; import { ObjectCacheService } from '../cache/object-cache.service'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { BaseDataService } from './base/base-data.service'; import { HALDataService } from './base/hal-data-service.interface'; diff --git a/src/app/core/data/identifier-data.service.ts b/projects/dspace/core/src/lib/data/identifier-data.service.ts similarity index 91% rename from src/app/core/data/identifier-data.service.ts rename to projects/dspace/core/src/lib/data/identifier-data.service.ts index 502b1fe7107..0802a6bfccd 100644 --- a/src/app/core/data/identifier-data.service.ts +++ b/projects/dspace/core/src/lib/data/identifier-data.service.ts @@ -1,24 +1,17 @@ -import { - HttpClient, - HttpHeaders, - HttpParams, -} from '@angular/common/http'; +import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Store } from '@ngrx/store'; import { Observable } from 'rxjs'; -import { - map, - switchMap, -} from 'rxjs/operators'; +import { map, switchMap } from 'rxjs/operators'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { IdentifierData } from '../../shared/object-list/identifier-data/identifier-data.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { CoreState } from '../core-state.model'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; +import { NotificationsService } from '../notification-system/notifications.service'; import { ConfigurationProperty } from '../shared/configuration-property.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; +import { IdentifierData } from '../shared/identifiers-data/identifier-data.model'; import { Item } from '../shared/item.model'; import { getFirstCompletedRemoteData } from '../shared/operators'; import { sendRequest } from '../shared/request.operators'; diff --git a/projects/dspace/core/src/lib/data/index.ts b/projects/dspace/core/src/lib/data/index.ts new file mode 100644 index 00000000000..3345fb1bf36 --- /dev/null +++ b/projects/dspace/core/src/lib/data/index.ts @@ -0,0 +1,117 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './access-status-data.service.spec'; +export * from './access-status-data.service'; +export * from './array-move-change-analyzer.service.spec'; +export * from './array-move-change-analyzer.service'; +export * from './base-response-parsing.service.spec'; +export * from './base-response-parsing.service'; +export * from './bitstream-data.service.spec'; +export * from './bitstream-data.service'; +export * from './bitstream-format-data.service.spec'; +export * from './bitstream-format-data.service'; +export * from './browse-response-parsing.service.spec'; +export * from './browse-response-parsing.service'; +export * from './bundle-data.service.spec'; +export * from './bundle-data.service'; +export * from './change-analyzer'; +export * from './collection-data.service.spec'; +export * from './collection-data.service'; +export * from './comcol-data.service.spec'; +export * from './comcol-data.service'; +export * from './community-data.service'; +export * from './configuration-data.service.spec'; +export * from './configuration-data.service'; +export * from './content-source-response-parsing.service'; +export * from './debug-response-parsing.service'; +export * from './default-change-analyzer.service'; +export * from './dso-change-analyzer.service'; +export * from './dso-redirect.service.spec'; +export * from './dso-redirect.service'; +export * from './dso-response-parsing.service'; +export * from './dspace-object-data.service.spec'; +export * from './dspace-object-data.service'; +export * from './dspace-rest-response-parsing.service'; +export * from './endpoint-map-response-parsing.service'; +export * from './entity-type-data.service.spec'; +export * from './entity-type-data.service'; +export * from './eperson-registration.service.spec'; +export * from './eperson-registration.service'; +export * from './external-source-data.service.spec'; +export * from './external-source-data.service'; +export * from './facet-config-response-parsing.service'; +export * from './facet-value-response-parsing.service'; +export * from './filtered-discovery-page-response-parsing.service.spec'; +export * from './filtered-discovery-page-response-parsing.service'; +export * from './find-list-options.model'; +export * from './href-only-data.service.spec'; +export * from './href-only-data.service'; +export * from './identifier-data.service'; +export * from './item-data.service.spec'; +export * from './item-data.service'; +export * from './item-request-data.service.spec'; +export * from './item-request-data.service'; +export * from './item-template-data.service.spec'; +export * from './item-template-data.service'; +export * from './metadata-field-data.service.spec'; +export * from './metadata-field-data.service'; +export * from './metadata-schema-data.service.spec'; +export * from './metadata-schema-data.service'; +export * from './mydspace-response-parsing.service'; +export * from './paginated-list.model'; +export * from './paginated-list.resource-type'; +export * from './parsing.service'; +export * from './primary-bitstream.service.spec'; +export * from './primary-bitstream.service'; +export * from './proof-of-work-captcha-data.service'; +export * from './registration-response-parsing.service.spec'; +export * from './registration-response-parsing.service'; +export * from './relationship-data.service.spec'; +export * from './relationship-data.service'; +export * from './relationship-type-data.service.spec'; +export * from './relationship-type-data.service'; +export * from './remote-data'; +export * from './request-entry-state.model.spec'; +export * from './request-entry-state.model'; +export * from './request-entry.model'; +export * from './request-error.model'; +export * from './request-state.model'; +export * from './request.actions'; +export * from './request.effects'; +export * from './request.models'; +export * from './request.reducer.spec'; +export * from './request.reducer'; +export * from './request.service.spec'; +export * from './request.service'; +export * from './response-state.model'; +export * from './rest-request-with-response-parser.model'; +export * from './rest-request.model'; +export * from './root-data.service.spec'; +export * from './root-data.service'; +export * from './root.model'; +export * from './root.resource-type'; +export * from './search-response-parsing.service'; +export * from './signposting-data.service.spec'; +export * from './signposting-data.service'; +export * from './signposting-links.model'; +export * from './site-data.service.spec'; +export * from './site-data.service'; +export * from './status-code-only-response-parsing.service.spec'; +export * from './status-code-only-response-parsing.service'; +export * from './subscriptions-data.service.spec'; +export * from './subscriptions-data.service'; +export * from './system-wide-alert-data.service.spec'; +export * from './system-wide-alert-data.service'; +export * from './update-data.service.spec'; +export * from './update-data.service'; +export * from './version-data.service.spec'; +export * from './version-data.service'; +export * from './version-history-data.service.spec'; +export * from './version-history-data.service'; +export * from './workflow-action-data.service'; +export * from './base/index'; +export * from './feature-authorization/index'; +export * from './object-updates/index'; +export * from './processes/index'; diff --git a/src/app/core/data/item-data.service.spec.ts b/projects/dspace/core/src/lib/data/item-data.service.spec.ts similarity index 93% rename from src/app/core/data/item-data.service.spec.ts rename to projects/dspace/core/src/lib/data/item-data.service.spec.ts index 71833e24e8a..24a5da3f8e9 100644 --- a/src/app/core/data/item-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/item-data.service.spec.ts @@ -1,30 +1,24 @@ import { HttpClient } from '@angular/common/http'; import { Store } from '@ngrx/store'; -import { - cold, - getTestScheduler, -} from 'jasmine-marbles'; +import { cold, getTestScheduler } from 'jasmine-marbles'; import { of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { getMockRemoteDataBuildService } from '../../shared/mocks/remote-data-build.service.mock'; -import { getMockRequestService } from '../../shared/mocks/request.service.mock'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; import { BrowseService } from '../browse/browse.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { RestResponse } from '../cache/response.models'; import { CoreState } from '../core-state.model'; +import { NotificationsService } from '../notification-system/notifications.service'; import { ExternalSourceEntry } from '../shared/external-source-entry.model'; +import { HALEndpointServiceStub } from '../testing/hal-endpoint-service.stub'; +import { getMockRemoteDataBuildService } from '../testing/remote-data-build.service.mock'; +import { getMockRequestService } from '../testing/request.service.mock'; import { testCreateDataImplementation } from './base/create-data.spec'; import { testDeleteDataImplementation } from './base/delete-data.spec'; import { testPatchDataImplementation } from './base/patch-data.spec'; import { FindListOptions } from './find-list-options.model'; import { ItemDataService } from './item-data.service'; -import { - DeleteRequest, - PostRequest, -} from './request.models'; +import { DeleteRequest, PostRequest } from './request.models'; import { RequestService } from './request.service'; import { RequestEntry } from './request-entry.model'; diff --git a/src/app/core/data/item-data.service.ts b/projects/dspace/core/src/lib/data/item-data.service.ts similarity index 95% rename from src/app/core/data/item-data.service.ts rename to projects/dspace/core/src/lib/data/item-data.service.ts index e1f789b5da7..4595b91d310 100644 --- a/src/app/core/data/item-data.service.ts +++ b/projects/dspace/core/src/lib/data/item-data.service.ts @@ -8,29 +8,18 @@ /* eslint-disable max-classes-per-file */ import { HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; +import { RestRequestMethod } from '@dspace/config'; +import { hasValue, isNotEmpty, isNotEmptyOperator } from '@dspace/utils'; import { Operation } from 'fast-json-patch'; import { Observable } from 'rxjs'; -import { - distinctUntilChanged, - filter, - find, - map, - switchMap, - take, -} from 'rxjs/operators'; - -import { - hasValue, - isNotEmpty, - isNotEmptyOperator, -} from '../../shared/empty.util'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { PaginatedSearchOptions } from '../../shared/search/models/paginated-search-options.model'; +import { distinctUntilChanged, filter, find, map, switchMap, take } from 'rxjs/operators'; + import { BrowseService } from '../browse/browse.service'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; +import { NotificationsService } from '../notification-system/notifications.service'; import { Bundle } from '../shared/bundle.model'; import { Collection } from '../shared/collection.model'; import { ExternalSourceEntry } from '../shared/external-source-entry.model'; @@ -40,38 +29,21 @@ import { Item } from '../shared/item.model'; import { MetadataMap } from '../shared/metadata.models'; import { NoContent } from '../shared/NoContent.model'; import { sendRequest } from '../shared/request.operators'; +import { PaginatedSearchOptions } from '../shared/search/models/paginated-search-options.model'; import { URLCombiner } from '../url-combiner/url-combiner'; -import { - CreateData, - CreateDataImpl, -} from './base/create-data'; -import { - DeleteData, - DeleteDataImpl, -} from './base/delete-data'; -import { - ConstructIdEndpoint, - IdentifiableDataService, -} from './base/identifiable-data.service'; -import { - PatchData, - PatchDataImpl, -} from './base/patch-data'; +import { CreateData, CreateDataImpl } from './base/create-data'; +import { DeleteData, DeleteDataImpl } from './base/delete-data'; +import { ConstructIdEndpoint, IdentifiableDataService } from './base/identifiable-data.service'; +import { PatchData, PatchDataImpl } from './base/patch-data'; import { BundleDataService } from './bundle-data.service'; import { DSOChangeAnalyzer } from './dso-change-analyzer.service'; import { FindListOptions } from './find-list-options.model'; import { PaginatedList } from './paginated-list.model'; import { ResponseParsingService } from './parsing.service'; import { RemoteData } from './remote-data'; -import { - DeleteRequest, - GetRequest, - PostRequest, - PutRequest, -} from './request.models'; +import { DeleteRequest, GetRequest, PostRequest, PutRequest } from './request.models'; import { RequestService } from './request.service'; import { RestRequest } from './rest-request.model'; -import { RestRequestMethod } from './rest-request-method'; import { StatusCodeOnlyResponseParsingService } from './status-code-only-response-parsing.service'; /** diff --git a/src/app/core/data/item-request-data.service.spec.ts b/projects/dspace/core/src/lib/data/item-request-data.service.spec.ts similarity index 96% rename from src/app/core/data/item-request-data.service.spec.ts rename to projects/dspace/core/src/lib/data/item-request-data.service.spec.ts index 3c74c8879f8..c3ea9aba4f9 100644 --- a/src/app/core/data/item-request-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/item-request-data.service.spec.ts @@ -1,13 +1,14 @@ import { HttpHeaders } from '@angular/common/http'; +import { RestRequestMethod } from '@dspace/config'; import { of } from 'rxjs'; -import { RequestCopyEmail } from '../../request-copy/email-request-copy/request-copy-email.model'; -import { MockBitstream1 } from '../../shared/mocks/item.mock'; -import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ConfigurationProperty } from '../shared/configuration-property.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { ItemRequest } from '../shared/item-request.model'; +import { RequestCopyEmail } from '../shared/request-copy-email.model'; +import { MockBitstream1 } from '../testing/item.mock'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; import { ConfigurationDataService } from './configuration-data.service'; import { AuthorizationDataService } from './feature-authorization/authorization-data.service'; import { FeatureID } from './feature-authorization/feature-id'; @@ -15,7 +16,6 @@ import { FindListOptions } from './find-list-options.model'; import { ItemRequestDataService } from './item-request-data.service'; import { PostRequest } from './request.models'; import { RequestService } from './request.service'; -import { RestRequestMethod } from './rest-request-method'; describe('ItemRequestDataService', () => { let service: ItemRequestDataService; diff --git a/src/app/core/data/item-request-data.service.ts b/projects/dspace/core/src/lib/data/item-request-data.service.ts similarity index 95% rename from src/app/core/data/item-request-data.service.ts rename to projects/dspace/core/src/lib/data/item-request-data.service.ts index 26fd4923b47..17b6e933d1a 100644 --- a/src/app/core/data/item-request-data.service.ts +++ b/projects/dspace/core/src/lib/data/item-request-data.service.ts @@ -1,44 +1,30 @@ import { HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; +import { hasValue, isNotEmpty } from '@dspace/utils'; import { Observable } from 'rxjs'; -import { - distinctUntilChanged, - filter, - find, - map, -} from 'rxjs/operators'; - -import { RequestCopyEmail } from '../../request-copy/email-request-copy/request-copy-email.model'; -import { - hasValue, - isNotEmpty, -} from '../../shared/empty.util'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; +import { distinctUntilChanged, filter, find, map } from 'rxjs/operators'; + import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; import { Bitstream } from '../shared/bitstream.model'; import { ConfigurationProperty } from '../shared/configuration-property.model'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { ItemRequest } from '../shared/item-request.model'; import { getFirstCompletedRemoteData } from '../shared/operators'; import { sendRequest } from '../shared/request.operators'; +import { RequestCopyEmail } from '../shared/request-copy-email.model'; import { IdentifiableDataService } from './base/identifiable-data.service'; -import { - SearchData, - SearchDataImpl, -} from './base/search-data'; +import { SearchData, SearchDataImpl } from './base/search-data'; import { ConfigurationDataService } from './configuration-data.service'; import { AuthorizationDataService } from './feature-authorization/authorization-data.service'; import { FeatureID } from './feature-authorization/feature-id'; import { FindListOptions } from './find-list-options.model'; import { PaginatedList } from './paginated-list.model'; import { RemoteData } from './remote-data'; -import { - PostRequest, - PutRequest, -} from './request.models'; +import { PostRequest, PutRequest } from './request.models'; import { RequestService } from './request.service'; /** diff --git a/src/app/core/data/item-template-data.service.spec.ts b/projects/dspace/core/src/lib/data/item-template-data.service.spec.ts similarity index 96% rename from src/app/core/data/item-template-data.service.spec.ts rename to projects/dspace/core/src/lib/data/item-template-data.service.spec.ts index 82e76124f70..102914c27cf 100644 --- a/src/app/core/data/item-template-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/item-template-data.service.spec.ts @@ -1,15 +1,13 @@ +import { RestRequestMethod } from '@dspace/config'; import { Store } from '@ngrx/store'; import { cold } from 'jasmine-marbles'; -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; import { BrowseService } from '../browse/browse.service'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RestResponse } from '../cache/response.models'; import { CoreState } from '../core-state.model'; +import { NotificationsService } from '../notification-system/notifications.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { Item } from '../shared/item.model'; import { testCreateDataImplementation } from './base/create-data.spec'; @@ -20,7 +18,6 @@ import { ItemTemplateDataService } from './item-template-data.service'; import { RequestService } from './request.service'; import { RequestEntry } from './request-entry.model'; import { RestRequest } from './rest-request.model'; -import { RestRequestMethod } from './rest-request-method'; import createSpyObj = jasmine.createSpyObj; describe('ItemTemplateDataService', () => { diff --git a/src/app/core/data/item-template-data.service.ts b/projects/dspace/core/src/lib/data/item-template-data.service.ts similarity index 96% rename from src/app/core/data/item-template-data.service.ts rename to projects/dspace/core/src/lib/data/item-template-data.service.ts index f89a297fad9..8a2d71b0182 100644 --- a/src/app/core/data/item-template-data.service.ts +++ b/projects/dspace/core/src/lib/data/item-template-data.service.ts @@ -3,11 +3,11 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { switchMap } from 'rxjs/operators'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { BrowseService } from '../browse/browse.service'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; +import { NotificationsService } from '../notification-system/notifications.service'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { Item } from '../shared/item.model'; import { CreateDataImpl } from './base/create-data'; diff --git a/src/app/core/data/metadata-field-data.service.spec.ts b/projects/dspace/core/src/lib/data/metadata-field-data.service.spec.ts similarity index 91% rename from src/app/core/data/metadata-field-data.service.spec.ts rename to projects/dspace/core/src/lib/data/metadata-field-data.service.spec.ts index b891c84324f..73829eef9d0 100644 --- a/src/app/core/data/metadata-field-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/metadata-field-data.service.spec.ts @@ -1,14 +1,14 @@ import { of } from 'rxjs'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; -import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; -import { createPaginatedList } from '../../shared/testing/utils.test'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { RestResponse } from '../cache/response.models'; import { MetadataSchema } from '../metadata/metadata-schema.model'; +import { NotificationsService } from '../notification-system/notifications.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; +import { HALEndpointServiceStub } from '../testing/hal-endpoint-service.stub'; +import { createPaginatedList } from '../testing/utils.test'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; import { testCreateDataImplementation } from './base/create-data.spec'; import { testDeleteDataImplementation } from './base/delete-data.spec'; import { testPutDataImplementation } from './base/put-data.spec'; diff --git a/src/app/core/data/metadata-field-data.service.ts b/projects/dspace/core/src/lib/data/metadata-field-data.service.ts similarity index 95% rename from src/app/core/data/metadata-field-data.service.ts rename to projects/dspace/core/src/lib/data/metadata-field-data.service.ts index aa79ef517ee..1a8e554df1b 100644 --- a/src/app/core/data/metadata-field-data.service.ts +++ b/projects/dspace/core/src/lib/data/metadata-field-data.service.ts @@ -1,34 +1,22 @@ import { Injectable } from '@angular/core'; +import { hasValue } from '@dspace/utils'; import { Observable } from 'rxjs'; import { take } from 'rxjs/operators'; -import { hasValue } from '../../shared/empty.util'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; import { MetadataField } from '../metadata/metadata-field.model'; import { MetadataSchema } from '../metadata/metadata-schema.model'; +import { NotificationsService } from '../notification-system/notifications.service'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { NoContent } from '../shared/NoContent.model'; -import { - CreateData, - CreateDataImpl, -} from './base/create-data'; -import { - DeleteData, - DeleteDataImpl, -} from './base/delete-data'; +import { CreateData, CreateDataImpl } from './base/create-data'; +import { DeleteData, DeleteDataImpl } from './base/delete-data'; import { IdentifiableDataService } from './base/identifiable-data.service'; -import { - PutData, - PutDataImpl, -} from './base/put-data'; -import { - SearchData, - SearchDataImpl, -} from './base/search-data'; +import { PutData, PutDataImpl } from './base/put-data'; +import { SearchData, SearchDataImpl } from './base/search-data'; import { FindListOptions } from './find-list-options.model'; import { PaginatedList } from './paginated-list.model'; import { RemoteData } from './remote-data'; diff --git a/src/app/core/data/metadata-schema-data.service.spec.ts b/projects/dspace/core/src/lib/data/metadata-schema-data.service.spec.ts similarity index 90% rename from src/app/core/data/metadata-schema-data.service.spec.ts rename to projects/dspace/core/src/lib/data/metadata-schema-data.service.spec.ts index 224df3154ea..51f8dcf0fbf 100644 --- a/src/app/core/data/metadata-schema-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/metadata-schema-data.service.spec.ts @@ -1,19 +1,16 @@ import { of } from 'rxjs'; -import { getMockRemoteDataBuildService } from '../../shared/mocks/remote-data-build.service.mock'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RestResponse } from '../cache/response.models'; import { MetadataSchema } from '../metadata/metadata-schema.model'; +import { NotificationsService } from '../notification-system/notifications.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; +import { HALEndpointServiceStub } from '../testing/hal-endpoint-service.stub'; +import { getMockRemoteDataBuildService } from '../testing/remote-data-build.service.mock'; import { testDeleteDataImplementation } from './base/delete-data.spec'; import { testFindAllDataImplementation } from './base/find-all-data.spec'; import { MetadataSchemaDataService } from './metadata-schema-data.service'; -import { - CreateRequest, - PutRequest, -} from './request.models'; +import { CreateRequest, PutRequest } from './request.models'; import { RequestService } from './request.service'; describe('MetadataSchemaDataService', () => { diff --git a/src/app/core/data/metadata-schema-data.service.ts b/projects/dspace/core/src/lib/data/metadata-schema-data.service.ts similarity index 92% rename from src/app/core/data/metadata-schema-data.service.ts rename to projects/dspace/core/src/lib/data/metadata-schema-data.service.ts index e893cb5404b..70ed80f0395 100644 --- a/src/app/core/data/metadata-schema-data.service.ts +++ b/projects/dspace/core/src/lib/data/metadata-schema-data.service.ts @@ -1,32 +1,20 @@ import { Injectable } from '@angular/core'; +import { hasValue } from '@dspace/utils'; import { Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; -import { hasValue } from '../../shared/empty.util'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { MetadataSchema } from '../metadata/metadata-schema.model'; +import { NotificationsService } from '../notification-system/notifications.service'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { NoContent } from '../shared/NoContent.model'; -import { - CreateData, - CreateDataImpl, -} from './base/create-data'; -import { - DeleteData, - DeleteDataImpl, -} from './base/delete-data'; -import { - FindAllData, - FindAllDataImpl, -} from './base/find-all-data'; +import { CreateData, CreateDataImpl } from './base/create-data'; +import { DeleteData, DeleteDataImpl } from './base/delete-data'; +import { FindAllData, FindAllDataImpl } from './base/find-all-data'; import { IdentifiableDataService } from './base/identifiable-data.service'; -import { - PutData, - PutDataImpl, -} from './base/put-data'; +import { PutData, PutDataImpl } from './base/put-data'; import { FindListOptions } from './find-list-options.model'; import { PaginatedList } from './paginated-list.model'; import { RemoteData } from './remote-data'; diff --git a/src/app/core/data/mydspace-response-parsing.service.ts b/projects/dspace/core/src/lib/data/mydspace-response-parsing.service.ts similarity index 93% rename from src/app/core/data/mydspace-response-parsing.service.ts rename to projects/dspace/core/src/lib/data/mydspace-response-parsing.service.ts index f824be7f56b..b07b50d63a3 100644 --- a/src/app/core/data/mydspace-response-parsing.service.ts +++ b/projects/dspace/core/src/lib/data/mydspace-response-parsing.service.ts @@ -1,14 +1,11 @@ import { Injectable } from '@angular/core'; +import { hasValue } from '@dspace/utils'; -import { hasValue } from '../../shared/empty.util'; -import { SearchObjects } from '../../shared/search/models/search-objects.model'; import { ParsedResponse } from '../cache/response.models'; import { DSpaceSerializer } from '../dspace-rest/dspace.serializer'; import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; -import { - MetadataMap, - MetadataValue, -} from '../shared/metadata.models'; +import { MetadataMap, MetadataValue } from '../shared/metadata.models'; +import { SearchObjects } from '../shared/search/models/search-objects.model'; import { DspaceRestResponseParsingService } from './dspace-rest-response-parsing.service'; import { RestRequest } from './rest-request.model'; diff --git a/src/app/core/data/object-updates/field-change-type.model.ts b/projects/dspace/core/src/lib/data/object-updates/field-change-type.model.ts similarity index 100% rename from src/app/core/data/object-updates/field-change-type.model.ts rename to projects/dspace/core/src/lib/data/object-updates/field-change-type.model.ts diff --git a/src/app/core/data/object-updates/field-update.model.ts b/projects/dspace/core/src/lib/data/object-updates/field-update.model.ts similarity index 100% rename from src/app/core/data/object-updates/field-update.model.ts rename to projects/dspace/core/src/lib/data/object-updates/field-update.model.ts diff --git a/src/app/core/data/object-updates/field-updates.model.ts b/projects/dspace/core/src/lib/data/object-updates/field-updates.model.ts similarity index 100% rename from src/app/core/data/object-updates/field-updates.model.ts rename to projects/dspace/core/src/lib/data/object-updates/field-updates.model.ts diff --git a/src/app/core/data/object-updates/identifiable.model.ts b/projects/dspace/core/src/lib/data/object-updates/identifiable.model.ts similarity index 100% rename from src/app/core/data/object-updates/identifiable.model.ts rename to projects/dspace/core/src/lib/data/object-updates/identifiable.model.ts diff --git a/projects/dspace/core/src/lib/data/object-updates/index.ts b/projects/dspace/core/src/lib/data/object-updates/index.ts new file mode 100644 index 00000000000..e25b5737889 --- /dev/null +++ b/projects/dspace/core/src/lib/data/object-updates/index.ts @@ -0,0 +1,17 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './field-change-type.model'; +export * from './field-update.model'; +export * from './field-updates.model'; +export * from './identifiable.model'; +export * from './object-updates.actions'; +export * from './object-updates.effects.spec'; +export * from './object-updates.effects'; +export * from './object-updates.reducer.spec'; +export * from './object-updates.reducer'; +export * from './object-updates.service.spec'; +export * from './object-updates.service.stub'; +export * from './object-updates.service'; +export * from './patch-operation-service/index'; diff --git a/src/app/core/data/object-updates/object-updates.actions.ts b/projects/dspace/core/src/lib/data/object-updates/object-updates.actions.ts similarity index 98% rename from src/app/core/data/object-updates/object-updates.actions.ts rename to projects/dspace/core/src/lib/data/object-updates/object-updates.actions.ts index 8a95a7827ce..ed2a4fb5806 100644 --- a/src/app/core/data/object-updates/object-updates.actions.ts +++ b/projects/dspace/core/src/lib/data/object-updates/object-updates.actions.ts @@ -1,8 +1,8 @@ /* eslint-disable max-classes-per-file */ import { Action } from '@ngrx/store'; -import { type } from '../../../shared/ngrx/type'; -import { INotification } from '../../../shared/notifications/models/notification.model'; +import { type } from '../../ngrx/type'; +import { INotification } from '../../notification-system/models/notification.model'; import { GenericConstructor } from '../../shared/generic-constructor'; import { FieldChangeType } from './field-change-type.model'; import { Identifiable } from './identifiable.model'; diff --git a/src/app/core/data/object-updates/object-updates.effects.spec.ts b/projects/dspace/core/src/lib/data/object-updates/object-updates.effects.spec.ts similarity index 90% rename from src/app/core/data/object-updates/object-updates.effects.spec.ts rename to projects/dspace/core/src/lib/data/object-updates/object-updates.effects.spec.ts index 10f37d78cb1..6205fc1233b 100644 --- a/src/app/core/data/object-updates/object-updates.effects.spec.ts +++ b/projects/dspace/core/src/lib/data/object-updates/object-updates.effects.spec.ts @@ -1,27 +1,15 @@ -import { - TestBed, - waitForAsync, -} from '@angular/core/testing'; +import { TestBed, waitForAsync } from '@angular/core/testing'; import { provideMockActions } from '@ngrx/effects/testing'; import { Action } from '@ngrx/store'; -import { - cold, - hot, -} from 'jasmine-marbles'; -import { - Observable, - Subject, -} from 'rxjs'; +import { cold, hot } from 'jasmine-marbles'; +import { Observable, Subject } from 'rxjs'; import { take } from 'rxjs/operators'; -import { NoOpAction } from '../../../shared/ngrx/no-op.action'; -import { - INotification, - Notification, -} from '../../../shared/notifications/models/notification.model'; -import { NotificationType } from '../../../shared/notifications/models/notification-type'; -import { NotificationsService } from '../../../shared/notifications/notifications.service'; -import { NotificationsServiceStub } from '../../../shared/testing/notifications-service.stub'; +import { NoOpAction } from '../../ngrx/no-op.action'; +import { INotification, Notification } from '../../notification-system/models/notification.model'; +import { NotificationType } from '../../notification-system/models/notification-type'; +import { NotificationsService } from '../../notification-system/notifications.service'; +import { NotificationsServiceStub } from '../../testing/notifications-service.stub'; import { DiscardObjectUpdatesAction, ObjectUpdatesAction, diff --git a/src/app/core/data/object-updates/object-updates.effects.ts b/projects/dspace/core/src/lib/data/object-updates/object-updates.effects.ts similarity index 89% rename from src/app/core/data/object-updates/object-updates.effects.ts rename to projects/dspace/core/src/lib/data/object-updates/object-updates.effects.ts index 07f77610768..b72f2320305 100644 --- a/src/app/core/data/object-updates/object-updates.effects.ts +++ b/projects/dspace/core/src/lib/data/object-updates/object-updates.effects.ts @@ -1,36 +1,18 @@ import { Injectable } from '@angular/core'; -import { - Actions, - createEffect, - ofType, -} from '@ngrx/effects'; +import { hasNoValue, hasValue } from '@dspace/utils'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Action } from '@ngrx/store'; -import { - of, - race as observableRace, - Subject, -} from 'rxjs'; -import { - delay, - filter, - map, - switchMap, - take, - tap, -} from 'rxjs/operators'; +import { of, race as observableRace, Subject } from 'rxjs'; +import { delay, filter, map, switchMap, take, tap } from 'rxjs/operators'; -import { - hasNoValue, - hasValue, -} from '../../../shared/empty.util'; -import { NoOpAction } from '../../../shared/ngrx/no-op.action'; -import { INotification } from '../../../shared/notifications/models/notification.model'; +import { NoOpAction } from '../../ngrx/no-op.action'; +import { INotification } from '../../notification-system/models/notification.model'; import { NotificationsActions, NotificationsActionTypes, RemoveNotificationAction, -} from '../../../shared/notifications/notifications.actions'; -import { NotificationsService } from '../../../shared/notifications/notifications.service'; +} from '../../notification-system/notifications.actions'; +import { NotificationsService } from '../../notification-system/notifications.service'; import { DiscardObjectUpdatesAction, ObjectUpdatesAction, diff --git a/src/app/core/data/object-updates/object-updates.reducer.spec.ts b/projects/dspace/core/src/lib/data/object-updates/object-updates.reducer.spec.ts similarity index 100% rename from src/app/core/data/object-updates/object-updates.reducer.spec.ts rename to projects/dspace/core/src/lib/data/object-updates/object-updates.reducer.spec.ts diff --git a/src/app/core/data/object-updates/object-updates.reducer.ts b/projects/dspace/core/src/lib/data/object-updates/object-updates.reducer.ts similarity index 99% rename from src/app/core/data/object-updates/object-updates.reducer.ts rename to projects/dspace/core/src/lib/data/object-updates/object-updates.reducer.ts index cadae9ae838..c4174679289 100644 --- a/src/app/core/data/object-updates/object-updates.reducer.ts +++ b/projects/dspace/core/src/lib/data/object-updates/object-updates.reducer.ts @@ -1,7 +1,5 @@ -import { - hasNoValue, - hasValue, -} from '../../../shared/empty.util'; +import { hasNoValue, hasValue } from '@dspace/utils'; + import { GenericConstructor } from '../../shared/generic-constructor'; import { Item } from '../../shared/item.model'; import { Relationship } from '../../shared/item-relationships/relationship.model'; diff --git a/src/app/core/data/object-updates/object-updates.service.spec.ts b/projects/dspace/core/src/lib/data/object-updates/object-updates.service.spec.ts similarity index 98% rename from src/app/core/data/object-updates/object-updates.service.spec.ts rename to projects/dspace/core/src/lib/data/object-updates/object-updates.service.spec.ts index 24afe87f9a8..62b177f4caf 100644 --- a/src/app/core/data/object-updates/object-updates.service.spec.ts +++ b/projects/dspace/core/src/lib/data/object-updates/object-updates.service.spec.ts @@ -3,9 +3,9 @@ import { Store } from '@ngrx/store'; import { createMockStore } from '@ngrx/store/testing'; import { of } from 'rxjs'; -import { Notification } from '../../../shared/notifications/models/notification.model'; -import { NotificationType } from '../../../shared/notifications/models/notification-type'; import { CoreState } from '../../core-state.model'; +import { Notification } from '../../notification-system/models/notification.model'; +import { NotificationType } from '../../notification-system/models/notification-type'; import { Relationship } from '../../shared/item-relationships/relationship.model'; import { FieldChangeType } from './field-change-type.model'; import { diff --git a/src/app/core/data/object-updates/object-updates.service.stub.ts b/projects/dspace/core/src/lib/data/object-updates/object-updates.service.stub.ts similarity index 100% rename from src/app/core/data/object-updates/object-updates.service.stub.ts rename to projects/dspace/core/src/lib/data/object-updates/object-updates.service.stub.ts diff --git a/src/app/core/data/object-updates/object-updates.service.ts b/projects/dspace/core/src/lib/data/object-updates/object-updates.service.ts similarity index 97% rename from src/app/core/data/object-updates/object-updates.service.ts rename to projects/dspace/core/src/lib/data/object-updates/object-updates.service.ts index 75b554d87b1..d6adab7c6c2 100644 --- a/src/app/core/data/object-updates/object-updates.service.ts +++ b/projects/dspace/core/src/lib/data/object-updates/object-updates.service.ts @@ -1,33 +1,13 @@ -import { - Injectable, - Injector, -} from '@angular/core'; -import { - createSelector, - MemoizedSelector, - select, - Store, -} from '@ngrx/store'; +import { Injectable, Injector } from '@angular/core'; +import { hasNoValue, hasValue, hasValueOperator, isEmpty, isNotEmpty } from '@dspace/utils'; +import { createSelector, MemoizedSelector, select, Store } from '@ngrx/store'; import { Operation } from 'fast-json-patch'; import { Observable } from 'rxjs'; -import { - distinctUntilChanged, - filter, - map, - switchMap, - take, -} from 'rxjs/operators'; +import { distinctUntilChanged, filter, map, switchMap, take } from 'rxjs/operators'; -import { - hasNoValue, - hasValue, - hasValueOperator, - isEmpty, - isNotEmpty, -} from '../../../shared/empty.util'; -import { INotification } from '../../../shared/notifications/models/notification.model'; import { coreSelector } from '../../core.selectors'; import { CoreState } from '../../core-state.model'; +import { INotification } from '../../notification-system/models/notification.model'; import { GenericConstructor } from '../../shared/generic-constructor'; import { FieldChangeType } from './field-change-type.model'; import { FieldUpdates } from './field-updates.model'; diff --git a/projects/dspace/core/src/lib/data/object-updates/patch-operation-service/index.ts b/projects/dspace/core/src/lib/data/object-updates/patch-operation-service/index.ts new file mode 100644 index 00000000000..f9817e41d60 --- /dev/null +++ b/projects/dspace/core/src/lib/data/object-updates/patch-operation-service/index.ts @@ -0,0 +1,8 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './metadata-patch-operation.service.spec'; +export * from './metadata-patch-operation.service'; +export * from './patch-operation.service'; +export * from './operations/index'; diff --git a/src/app/core/data/object-updates/patch-operation-service/metadata-patch-operation.service.spec.ts b/projects/dspace/core/src/lib/data/object-updates/patch-operation-service/metadata-patch-operation.service.spec.ts similarity index 100% rename from src/app/core/data/object-updates/patch-operation-service/metadata-patch-operation.service.spec.ts rename to projects/dspace/core/src/lib/data/object-updates/patch-operation-service/metadata-patch-operation.service.spec.ts index ddf38dd2bb1..f4fcdb2f2ee 100644 --- a/src/app/core/data/object-updates/patch-operation-service/metadata-patch-operation.service.spec.ts +++ b/projects/dspace/core/src/lib/data/object-updates/patch-operation-service/metadata-patch-operation.service.spec.ts @@ -1,6 +1,6 @@ +import { MetadatumViewModel } from '../../../shared/metadata.models'; import { Operation } from 'fast-json-patch'; -import { MetadatumViewModel } from '../../../shared/metadata.models'; import { FieldChangeType } from '../field-change-type.model'; import { FieldUpdates } from '../field-updates.model'; import { MetadataPatchOperationService } from './metadata-patch-operation.service'; diff --git a/src/app/core/data/object-updates/patch-operation-service/metadata-patch-operation.service.ts b/projects/dspace/core/src/lib/data/object-updates/patch-operation-service/metadata-patch-operation.service.ts similarity index 91% rename from src/app/core/data/object-updates/patch-operation-service/metadata-patch-operation.service.ts rename to projects/dspace/core/src/lib/data/object-updates/patch-operation-service/metadata-patch-operation.service.ts index b6dccb759b2..d06048bc70a 100644 --- a/src/app/core/data/object-updates/patch-operation-service/metadata-patch-operation.service.ts +++ b/projects/dspace/core/src/lib/data/object-updates/patch-operation-service/metadata-patch-operation.service.ts @@ -1,14 +1,20 @@ import { Injectable } from '@angular/core'; +import { MetadatumViewModel } from '../../../shared/metadata.models'; +import { hasValue } from '@dspace/utils'; import { Operation } from 'fast-json-patch'; -import { hasValue } from '../../../../shared/empty.util'; -import { MetadatumViewModel } from '../../../shared/metadata.models'; import { FieldChangeType } from '../field-change-type.model'; import { FieldUpdates } from '../field-updates.model'; -import { MetadataPatchAddOperation } from './operations/metadata/metadata-patch-add-operation.model'; +import { + MetadataPatchAddOperation, +} from './operations/metadata/metadata-patch-add-operation.model'; import { MetadataPatchOperation } from './operations/metadata/metadata-patch-operation.model'; -import { MetadataPatchRemoveOperation } from './operations/metadata/metadata-patch-remove-operation.model'; -import { MetadataPatchReplaceOperation } from './operations/metadata/metadata-patch-replace-operation.model'; +import { + MetadataPatchRemoveOperation, +} from './operations/metadata/metadata-patch-remove-operation.model'; +import { + MetadataPatchReplaceOperation, +} from './operations/metadata/metadata-patch-replace-operation.model'; import { PatchOperationService } from './patch-operation.service'; /** diff --git a/projects/dspace/core/src/lib/data/object-updates/patch-operation-service/operations/index.ts b/projects/dspace/core/src/lib/data/object-updates/patch-operation-service/operations/index.ts new file mode 100644 index 00000000000..850ff152719 --- /dev/null +++ b/projects/dspace/core/src/lib/data/object-updates/patch-operation-service/operations/index.ts @@ -0,0 +1,5 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './metadata/index'; diff --git a/projects/dspace/core/src/lib/data/object-updates/patch-operation-service/operations/metadata/index.ts b/projects/dspace/core/src/lib/data/object-updates/patch-operation-service/operations/metadata/index.ts new file mode 100644 index 00000000000..c26cec259f3 --- /dev/null +++ b/projects/dspace/core/src/lib/data/object-updates/patch-operation-service/operations/metadata/index.ts @@ -0,0 +1,9 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './metadata-patch-add-operation.model'; +export * from './metadata-patch-move-operation.model'; +export * from './metadata-patch-operation.model'; +export * from './metadata-patch-remove-operation.model'; +export * from './metadata-patch-replace-operation.model'; diff --git a/src/app/core/data/object-updates/patch-operation-service/operations/metadata/metadata-patch-add-operation.model.ts b/projects/dspace/core/src/lib/data/object-updates/patch-operation-service/operations/metadata/metadata-patch-add-operation.model.ts similarity index 100% rename from src/app/core/data/object-updates/patch-operation-service/operations/metadata/metadata-patch-add-operation.model.ts rename to projects/dspace/core/src/lib/data/object-updates/patch-operation-service/operations/metadata/metadata-patch-add-operation.model.ts diff --git a/src/app/core/data/object-updates/patch-operation-service/operations/metadata/metadata-patch-move-operation.model.ts b/projects/dspace/core/src/lib/data/object-updates/patch-operation-service/operations/metadata/metadata-patch-move-operation.model.ts similarity index 100% rename from src/app/core/data/object-updates/patch-operation-service/operations/metadata/metadata-patch-move-operation.model.ts rename to projects/dspace/core/src/lib/data/object-updates/patch-operation-service/operations/metadata/metadata-patch-move-operation.model.ts diff --git a/src/app/core/data/object-updates/patch-operation-service/operations/metadata/metadata-patch-operation.model.ts b/projects/dspace/core/src/lib/data/object-updates/patch-operation-service/operations/metadata/metadata-patch-operation.model.ts similarity index 100% rename from src/app/core/data/object-updates/patch-operation-service/operations/metadata/metadata-patch-operation.model.ts rename to projects/dspace/core/src/lib/data/object-updates/patch-operation-service/operations/metadata/metadata-patch-operation.model.ts diff --git a/src/app/core/data/object-updates/patch-operation-service/operations/metadata/metadata-patch-remove-operation.model.ts b/projects/dspace/core/src/lib/data/object-updates/patch-operation-service/operations/metadata/metadata-patch-remove-operation.model.ts similarity index 100% rename from src/app/core/data/object-updates/patch-operation-service/operations/metadata/metadata-patch-remove-operation.model.ts rename to projects/dspace/core/src/lib/data/object-updates/patch-operation-service/operations/metadata/metadata-patch-remove-operation.model.ts diff --git a/src/app/core/data/object-updates/patch-operation-service/operations/metadata/metadata-patch-replace-operation.model.ts b/projects/dspace/core/src/lib/data/object-updates/patch-operation-service/operations/metadata/metadata-patch-replace-operation.model.ts similarity index 100% rename from src/app/core/data/object-updates/patch-operation-service/operations/metadata/metadata-patch-replace-operation.model.ts rename to projects/dspace/core/src/lib/data/object-updates/patch-operation-service/operations/metadata/metadata-patch-replace-operation.model.ts diff --git a/src/app/core/data/object-updates/patch-operation-service/patch-operation.service.ts b/projects/dspace/core/src/lib/data/object-updates/patch-operation-service/patch-operation.service.ts similarity index 100% rename from src/app/core/data/object-updates/patch-operation-service/patch-operation.service.ts rename to projects/dspace/core/src/lib/data/object-updates/patch-operation-service/patch-operation.service.ts diff --git a/src/app/core/data/paginated-list.model.ts b/projects/dspace/core/src/lib/data/paginated-list.model.ts similarity index 96% rename from src/app/core/data/paginated-list.model.ts rename to projects/dspace/core/src/lib/data/paginated-list.model.ts index ef2819afd8f..3fb7684d927 100644 --- a/src/app/core/data/paginated-list.model.ts +++ b/projects/dspace/core/src/lib/data/paginated-list.model.ts @@ -1,14 +1,6 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; - -import { - hasNoValue, - hasValue, - isEmpty, - isUndefined, -} from '../../shared/empty.util'; +import { hasNoValue, hasValue, isEmpty, isUndefined } from '@dspace/utils'; +import { autoserialize, deserialize } from 'cerialize'; + import { typedObject } from '../cache/builders/build-decorators'; import { CacheableObject } from '../cache/cacheable-object.model'; import { HALLink } from '../shared/hal-link.model'; diff --git a/src/app/core/data/paginated-list.resource-type.ts b/projects/dspace/core/src/lib/data/paginated-list.resource-type.ts similarity index 100% rename from src/app/core/data/paginated-list.resource-type.ts rename to projects/dspace/core/src/lib/data/paginated-list.resource-type.ts diff --git a/src/app/core/data/parsing.service.ts b/projects/dspace/core/src/lib/data/parsing.service.ts similarity index 100% rename from src/app/core/data/parsing.service.ts rename to projects/dspace/core/src/lib/data/parsing.service.ts diff --git a/src/app/core/data/primary-bitstream.service.spec.ts b/projects/dspace/core/src/lib/data/primary-bitstream.service.spec.ts similarity index 92% rename from src/app/core/data/primary-bitstream.service.spec.ts rename to projects/dspace/core/src/lib/data/primary-bitstream.service.spec.ts index b9e0634d783..d90d67f9cfc 100644 --- a/src/app/core/data/primary-bitstream.service.spec.ts +++ b/projects/dspace/core/src/lib/data/primary-bitstream.service.spec.ts @@ -1,29 +1,24 @@ import { getTestScheduler } from 'jasmine-marbles'; import { of } from 'rxjs'; -import { getMockRemoteDataBuildService } from '../../shared/mocks/remote-data-build.service.mock'; -import { getMockRequestService } from '../../shared/mocks/request.service.mock'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { - createFailedRemoteDataObject, - createSuccessfulRemoteDataObject, - createSuccessfulRemoteDataObject$, -} from '../../shared/remote-data.utils'; -import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; -import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; +import { NotificationsService } from '../notification-system/notifications.service'; import { Bitstream } from '../shared/bitstream.model'; import { Bundle } from '../shared/bundle.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; +import { HALEndpointServiceStub } from '../testing/hal-endpoint-service.stub'; +import { NotificationsServiceStub } from '../testing/notifications-service.stub'; +import { getMockRemoteDataBuildService } from '../testing/remote-data-build.service.mock'; +import { getMockRequestService } from '../testing/request.service.mock'; +import { + createFailedRemoteDataObject, + createSuccessfulRemoteDataObject, + createSuccessfulRemoteDataObject$, +} from '../utilities/remote-data.utils'; import { BundleDataService } from './bundle-data.service'; import { PrimaryBitstreamService } from './primary-bitstream.service'; -import { - CreateRequest, - DeleteRequest, - PostRequest, - PutRequest, -} from './request.models'; +import { CreateRequest, DeleteRequest, PostRequest, PutRequest } from './request.models'; import { RequestService } from './request.service'; describe('PrimaryBitstreamService', () => { diff --git a/src/app/core/data/primary-bitstream.service.ts b/projects/dspace/core/src/lib/data/primary-bitstream.service.ts similarity index 94% rename from src/app/core/data/primary-bitstream.service.ts rename to projects/dspace/core/src/lib/data/primary-bitstream.service.ts index a5367e67ed4..dd3ec10e223 100644 --- a/src/app/core/data/primary-bitstream.service.ts +++ b/projects/dspace/core/src/lib/data/primary-bitstream.service.ts @@ -1,14 +1,11 @@ import { HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { - Observable, - switchMap, -} from 'rxjs'; +import { Observable, switchMap } from 'rxjs'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; +import { NotificationsService } from '../notification-system/notifications.service'; import { Bitstream } from '../shared/bitstream.model'; import { Bundle } from '../shared/bundle.model'; import { GenericConstructor } from '../shared/generic-constructor'; @@ -17,11 +14,7 @@ import { NoContent } from '../shared/NoContent.model'; import { getAllCompletedRemoteData } from '../shared/operators'; import { BundleDataService } from './bundle-data.service'; import { RemoteData } from './remote-data'; -import { - DeleteRequest, - PostRequest, - PutRequest, -} from './request.models'; +import { DeleteRequest, PostRequest, PutRequest } from './request.models'; import { RequestService } from './request.service'; @Injectable({ diff --git a/projects/dspace/core/src/lib/data/processes/index.ts b/projects/dspace/core/src/lib/data/processes/index.ts new file mode 100644 index 00000000000..b140ef42451 --- /dev/null +++ b/projects/dspace/core/src/lib/data/processes/index.ts @@ -0,0 +1,8 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './process-data.service.spec'; +export * from './process-data.service'; +export * from './script-data.service.spec'; +export * from './script-data.service'; diff --git a/src/app/core/data/processes/process-data.service.spec.ts b/projects/dspace/core/src/lib/data/processes/process-data.service.spec.ts similarity index 93% rename from src/app/core/data/processes/process-data.service.spec.ts rename to projects/dspace/core/src/lib/data/processes/process-data.service.spec.ts index 217567776c2..96c51ed09aa 100644 --- a/src/app/core/data/processes/process-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/processes/process-data.service.spec.ts @@ -6,23 +6,18 @@ * http://www.dspace.org/license/ */ -import { - fakeAsync, - TestBed, - tick, - waitForAsync, -} from '@angular/core/testing'; +import { fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing'; import { ReducerManager } from '@ngrx/store'; import { of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { Process } from '../../../process-page/processes/process.model'; -import { ProcessStatus } from '../../../process-page/processes/process-status.model'; -import { getMockRequestService } from '../../../shared/mocks/request.service.mock'; -import { NotificationsService } from '../../../shared/notifications/notifications.service'; import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../../cache/object-cache.service'; +import { NotificationsService } from '../../notification-system/notifications.service'; +import { Process } from '../../processes/process.model'; +import { ProcessStatus } from '../../processes/process-status.model'; import { HALEndpointService } from '../../shared/hal-endpoint.service'; +import { getMockRequestService } from '../../testing/request.service.mock'; import { testDeleteDataImplementation } from '../base/delete-data.spec'; import { testFindAllDataImplementation } from '../base/find-all-data.spec'; import { testSearchDataImplementation } from '../base/search-data.spec'; @@ -33,10 +28,7 @@ import { PaginatedList } from '../paginated-list.model'; import { RemoteData } from '../remote-data'; import { RequestService } from '../request.service'; import { RequestEntryState } from '../request-entry-state.model'; -import { - ProcessDataService, - TIMER_FACTORY, -} from './process-data.service'; +import { ProcessDataService, TIMER_FACTORY } from './process-data.service'; describe('ProcessDataService', () => { let testScheduler; diff --git a/src/app/core/data/processes/process-data.service.ts b/projects/dspace/core/src/lib/data/processes/process-data.service.ts similarity index 93% rename from src/app/core/data/processes/process-data.service.ts rename to projects/dspace/core/src/lib/data/processes/process-data.service.ts index b39a500c804..9791f7d195d 100644 --- a/src/app/core/data/processes/process-data.service.ts +++ b/projects/dspace/core/src/lib/data/processes/process-data.service.ts @@ -1,44 +1,22 @@ -import { - Inject, - Injectable, - InjectionToken, - NgZone, -} from '@angular/core'; -import { - Observable, - Subscription, -} from 'rxjs'; -import { - distinctUntilChanged, - filter, - find, - switchMap, -} from 'rxjs/operators'; -import { ProcessStatus } from 'src/app/process-page/processes/process-status.model'; +import { Inject, Injectable, InjectionToken, NgZone } from '@angular/core'; +import { hasValue } from '@dspace/utils'; +import { Observable, Subscription } from 'rxjs'; +import { distinctUntilChanged, filter, find, switchMap } from 'rxjs/operators'; -import { Process } from '../../../process-page/processes/process.model'; -import { hasValue } from '../../../shared/empty.util'; -import { NotificationsService } from '../../../shared/notifications/notifications.service'; -import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../../cache/object-cache.service'; +import { NotificationsService } from '../../notification-system/notifications.service'; +import { Process } from '../../processes/process.model'; +import { ProcessStatus } from '../../processes/process-status.model'; import { Bitstream } from '../../shared/bitstream.model'; +import { FollowLinkConfig } from '../../shared/follow-link-config.model'; import { HALEndpointService } from '../../shared/hal-endpoint.service'; import { NoContent } from '../../shared/NoContent.model'; import { getAllCompletedRemoteData } from '../../shared/operators'; -import { - DeleteData, - DeleteDataImpl, -} from '../base/delete-data'; -import { - FindAllData, - FindAllDataImpl, -} from '../base/find-all-data'; +import { DeleteData, DeleteDataImpl } from '../base/delete-data'; +import { FindAllData, FindAllDataImpl } from '../base/find-all-data'; import { IdentifiableDataService } from '../base/identifiable-data.service'; -import { - SearchData, - SearchDataImpl, -} from '../base/search-data'; +import { SearchData, SearchDataImpl } from '../base/search-data'; import { BitstreamDataService } from '../bitstream-data.service'; import { FindListOptions } from '../find-list-options.model'; import { PaginatedList } from '../paginated-list.model'; diff --git a/src/app/core/data/processes/script-data.service.spec.ts b/projects/dspace/core/src/lib/data/processes/script-data.service.spec.ts similarity index 100% rename from src/app/core/data/processes/script-data.service.spec.ts rename to projects/dspace/core/src/lib/data/processes/script-data.service.spec.ts diff --git a/src/app/core/data/processes/script-data.service.ts b/projects/dspace/core/src/lib/data/processes/script-data.service.ts similarity index 89% rename from src/app/core/data/processes/script-data.service.ts rename to projects/dspace/core/src/lib/data/processes/script-data.service.ts index e61da4db636..6fa5d33ae0e 100644 --- a/src/app/core/data/processes/script-data.service.ts +++ b/projects/dspace/core/src/lib/data/processes/script-data.service.ts @@ -1,24 +1,18 @@ import { Injectable } from '@angular/core'; +import { Script } from '../../shared/scripts/script.model'; +import { hasValue } from '@dspace/utils'; import { Observable } from 'rxjs'; -import { - map, - take, -} from 'rxjs/operators'; +import { map, take } from 'rxjs/operators'; -import { Process } from '../../../process-page/processes/process.model'; -import { ProcessParameter } from '../../../process-page/processes/process-parameter.model'; -import { Script } from '../../../process-page/scripts/script.model'; -import { hasValue } from '../../../shared/empty.util'; -import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../../cache/object-cache.service'; +import { Process } from '../../processes/process.model'; +import { ProcessParameter } from '../../processes/process-parameter.model'; +import { FollowLinkConfig } from '../../shared/follow-link-config.model'; import { HALEndpointService } from '../../shared/hal-endpoint.service'; import { getFirstCompletedRemoteData } from '../../shared/operators'; import { URLCombiner } from '../../url-combiner/url-combiner'; -import { - FindAllData, - FindAllDataImpl, -} from '../base/find-all-data'; +import { FindAllData, FindAllDataImpl } from '../base/find-all-data'; import { IdentifiableDataService } from '../base/identifiable-data.service'; import { FindListOptions } from '../find-list-options.model'; import { PaginatedList } from '../paginated-list.model'; diff --git a/src/app/core/data/proof-of-work-captcha-data.service.ts b/projects/dspace/core/src/lib/data/proof-of-work-captcha-data.service.ts similarity index 100% rename from src/app/core/data/proof-of-work-captcha-data.service.ts rename to projects/dspace/core/src/lib/data/proof-of-work-captcha-data.service.ts diff --git a/src/app/core/data/registration-response-parsing.service.spec.ts b/projects/dspace/core/src/lib/data/registration-response-parsing.service.spec.ts similarity index 100% rename from src/app/core/data/registration-response-parsing.service.spec.ts rename to projects/dspace/core/src/lib/data/registration-response-parsing.service.spec.ts diff --git a/src/app/core/data/registration-response-parsing.service.ts b/projects/dspace/core/src/lib/data/registration-response-parsing.service.ts similarity index 100% rename from src/app/core/data/registration-response-parsing.service.ts rename to projects/dspace/core/src/lib/data/registration-response-parsing.service.ts diff --git a/src/app/core/data/relationship-data.service.spec.ts b/projects/dspace/core/src/lib/data/relationship-data.service.spec.ts similarity index 91% rename from src/app/core/data/relationship-data.service.spec.ts rename to projects/dspace/core/src/lib/data/relationship-data.service.spec.ts index 89e11e5d818..04651504e45 100644 --- a/src/app/core/data/relationship-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/relationship-data.service.spec.ts @@ -1,31 +1,30 @@ import { TestBed } from '@angular/core/testing'; -import { Store } from '@ngrx/store'; -import { provideMockStore } from '@ngrx/store/testing'; +import { APP_CONFIG, AppConfig } from '@dspace/config'; import { of } from 'rxjs'; -import { APP_CONFIG } from '../../../config/app-config.interface'; -import { environment } from '../../../environments/environment.test'; -import { PAGINATED_RELATIONS_TO_ITEMS_OPERATOR } from '../../item-page/simple/item-types/shared/item-relationships-utils'; -import { getMockRemoteDataBuildServiceHrefMap } from '../../shared/mocks/remote-data-build.service.mock'; -import { getMockRequestService } from '../../shared/mocks/request.service.mock'; -import { - createFailedRemoteDataObject$, - createSuccessfulRemoteDataObject, - createSuccessfulRemoteDataObject$, -} from '../../shared/remote-data.utils'; -import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; -import { ObjectCacheServiceStub } from '../../shared/testing/object-cache-service.stub'; -import { createPaginatedList } from '../../shared/testing/utils.test'; -import { followLink } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; +import { followLink } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { Item } from '../shared/item.model'; import { Relationship } from '../shared/item-relationships/relationship.model'; import { RelationshipType } from '../shared/item-relationships/relationship-type.model'; import { MetadataValue } from '../shared/metadata.models'; -import { MetadataRepresentationType } from '../shared/metadata-representation/metadata-representation.model'; +import { + MetadataRepresentationType, +} from '../shared/metadata-representation/metadata-representation.model'; import { PageInfo } from '../shared/page-info.model'; +import { HALEndpointServiceStub } from '../testing/hal-endpoint-service.stub'; +import { ObjectCacheServiceStub } from '../testing/object-cache-service.stub'; +import { getMockRemoteDataBuildServiceHrefMap } from '../testing/remote-data-build.service.mock'; +import { getMockRequestService } from '../testing/request.service.mock'; +import { createPaginatedList } from '../testing/utils.test'; +import { PAGINATED_RELATIONS_TO_ITEMS_OPERATOR } from '../utilities/item-relationships-utils'; +import { + createFailedRemoteDataObject$, + createSuccessfulRemoteDataObject, + createSuccessfulRemoteDataObject$, +} from '../utilities/remote-data.utils'; import { testSearchDataImplementation } from './base/search-data.spec'; import { FindListOptions } from './find-list-options.model'; import { ItemDataService } from './item-data.service'; @@ -35,7 +34,7 @@ import { DeleteRequest } from './request.models'; import { RequestService } from './request.service'; import { RequestEntry } from './request-entry.model'; -describe('RelationshipDataService', () => { +describe('NameVariantService', () => { let service: RelationshipDataService; let requestService: RequestService; @@ -139,6 +138,8 @@ describe('RelationshipDataService', () => { } as RequestEntry); }; + const envConfig = { item: { showAccessStatuses: false } } as AppConfig; + beforeEach(() => { requestService = getMockRequestService(getRequestEntry$(true)); @@ -151,8 +152,7 @@ describe('RelationshipDataService', () => { { provide: ItemDataService, useValue: itemService }, { provide: RequestService, useValue: requestService }, { provide: PAGINATED_RELATIONS_TO_ITEMS_OPERATOR, useValue: jasmine.createSpy('paginatedRelationsToItems').and.returnValue((v) => v) }, - { provide: Store, useValue: provideMockStore() }, - { provide: APP_CONFIG, useValue: environment }, + { provide: APP_CONFIG, useValue: envConfig }, RelationshipDataService, ], }); @@ -160,7 +160,7 @@ describe('RelationshipDataService', () => { }); describe('composition', () => { - const initService = () => new RelationshipDataService(null, null, null, null, null, null, null, null, environment); + const initService = () => new RelationshipDataService(null, null, null, null, null, null, null, envConfig); testSearchDataImplementation(initService); }); diff --git a/src/app/core/data/relationship-data.service.ts b/projects/dspace/core/src/lib/data/relationship-data.service.ts similarity index 87% rename from src/app/core/data/relationship-data.service.ts rename to projects/dspace/core/src/lib/data/relationship-data.service.ts index f28c9803303..2a8c3ab130b 100644 --- a/src/app/core/data/relationship-data.service.ts +++ b/projects/dspace/core/src/lib/data/relationship-data.service.ts @@ -1,18 +1,8 @@ import { HttpHeaders } from '@angular/common/http'; -import { - Inject, - Injectable, -} from '@angular/core'; -import { - MemoizedSelector, - select, - Store, -} from '@ngrx/store'; -import { - combineLatest as observableCombineLatest, - Observable, - of, -} from 'rxjs'; +import { Inject, Injectable } from '@angular/core'; +import { APP_CONFIG, AppConfig } from '@dspace/config'; +import { hasValue, hasValueOperator, isNotEmpty, isNotEmptyOperator } from '@dspace/utils'; +import { combineLatest as observableCombineLatest, Observable, of } from 'rxjs'; import { distinctUntilChanged, filter, @@ -24,50 +14,28 @@ import { tap, } from 'rxjs/operators'; -import { - APP_CONFIG, - AppConfig, -} from '../../../config/app-config.interface'; -import { - AppState, - keySelector, -} from '../../app.reducer'; -import { - compareArraysUsingIds, - PAGINATED_RELATIONS_TO_ITEMS_OPERATOR, - relationsToItems, -} from '../../item-page/simple/item-types/shared/item-relationships-utils'; -import { - hasValue, - hasValueOperator, - isNotEmpty, - isNotEmptyOperator, -} from '../../shared/empty.util'; -import { ReorderableRelationship } from '../../shared/form/builder/ds-dynamic-form-ui/existing-metadata-list-element/existing-metadata-list-element.component'; -import { - RemoveNameVariantAction, - SetNameVariantAction, -} from '../../shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/name-variant.actions'; -import { NameVariantListState } from '../../shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/name-variant.reducer'; -import { - followLink, - FollowLinkConfig, -} from '../../shared/utils/follow-link-config.model'; -import { itemLinksToFollow } from '../../shared/utils/relation-query.utils'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; import { MetadataService } from '../metadata/metadata.service'; import { DSpaceObject } from '../shared/dspace-object.model'; +import { followLink, FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { Item } from '../shared/item.model'; import { Relationship } from '../shared/item-relationships/relationship.model'; import { RelationshipType } from '../shared/item-relationships/relationship-type.model'; +import { ReorderableRelationship } from '../shared/item-relationships/reorderable-relationship'; import { MetadataValue } from '../shared/metadata.models'; -import { ItemMetadataRepresentation } from '../shared/metadata-representation/item/item-metadata-representation.model'; -import { MetadataRepresentation } from '../shared/metadata-representation/metadata-representation.model'; -import { MetadatumRepresentation } from '../shared/metadata-representation/metadatum/metadatum-representation.model'; +import { + ItemMetadataRepresentation, +} from '../shared/metadata-representation/item/item-metadata-representation.model'; +import { + MetadataRepresentation, +} from '../shared/metadata-representation/metadata-representation.model'; +import { + MetadatumRepresentation, +} from '../shared/metadata-representation/metadatum/metadatum-representation.model'; import { NoContent } from '../shared/NoContent.model'; import { getFirstCompletedRemoteData, @@ -76,37 +44,24 @@ import { getRemoteDataPayload, } from '../shared/operators'; import { sendRequest } from '../shared/request.operators'; -import { IdentifiableDataService } from './base/identifiable-data.service'; import { - PutData, - PutDataImpl, -} from './base/put-data'; -import { - SearchData, - SearchDataImpl, -} from './base/search-data'; + compareArraysUsingIds, + PAGINATED_RELATIONS_TO_ITEMS_OPERATOR, + relationsToItems, +} from '../utilities/item-relationships-utils'; +import { itemLinksToFollow } from '../utilities/relation-query.utils'; +import { IdentifiableDataService } from './base/identifiable-data.service'; +import { PutData, PutDataImpl } from './base/put-data'; +import { SearchData, SearchDataImpl } from './base/search-data'; import { FindListOptions } from './find-list-options.model'; import { ItemDataService } from './item-data.service'; import { PaginatedList } from './paginated-list.model'; import { RemoteData } from './remote-data'; -import { - DeleteRequest, - PostRequest, -} from './request.models'; +import { DeleteRequest, PostRequest } from './request.models'; import { RequestService } from './request.service'; import { RequestEntryState } from './request-entry-state.model'; import { RestRequest } from './rest-request.model'; -const relationshipListsStateSelector = (state: AppState) => state.relationshipLists; - -const relationshipListStateSelector = (listID: string): MemoizedSelector => { - return keySelector(listID, relationshipListsStateSelector); -}; - -const relationshipStateSelector = (listID: string, itemID: string): MemoizedSelector => { - return keySelector(itemID, relationshipListStateSelector(listID)); -}; - /** * Return true if the Item in the payload of the source observable matches * the given Item by UUID @@ -135,7 +90,6 @@ export class RelationshipDataService extends IdentifiableDataService, @Inject(PAGINATED_RELATIONS_TO_ITEMS_OPERATOR) private paginatedRelationsToItems: (thisId: string) => (source: Observable>>) => Observable>>, @Inject(APP_CONFIG) private appConfig: AppConfig, ) { @@ -435,44 +389,6 @@ export class RelationshipDataService extends IdentifiableDataService { - return this.appStore.pipe( - select(relationshipStateSelector(listID, itemID)), - ); - } - - /** - * Method to remove the name variant for specific list and item - * @param listID The list for which to remove the name variant - * @param itemID The item ID for which to remove the name variant - */ - public removeNameVariant(listID: string, itemID: string) { - this.appStore.dispatch(new RemoveNameVariantAction(listID, itemID)); - } - - /** - * Method to retrieve all name variants for a single list - * @param listID The id of the list - */ - public getNameVariantsByListID(listID: string) { - return this.appStore.pipe(select(relationshipListStateSelector(listID))); - } - /** * Method to update the name variant on the server * @param item1 The first item of the relationship diff --git a/src/app/core/data/relationship-type-data.service.spec.ts b/projects/dspace/core/src/lib/data/relationship-type-data.service.spec.ts similarity index 85% rename from src/app/core/data/relationship-type-data.service.spec.ts rename to projects/dspace/core/src/lib/data/relationship-type-data.service.spec.ts index afae72cb76e..d873cec3099 100644 --- a/src/app/core/data/relationship-type-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/relationship-type-data.service.spec.ts @@ -1,18 +1,18 @@ +import { hasValueOperator } from '@dspace/utils'; import { of } from 'rxjs'; -import { hasValueOperator } from '../../shared/empty.util'; -import { getMockRemoteDataBuildService } from '../../shared/mocks/remote-data-build.service.mock'; -import { getMockRequestService } from '../../shared/mocks/request.service.mock'; -import { - createSuccessfulRemoteDataObject, - createSuccessfulRemoteDataObject$, -} from '../../shared/remote-data.utils'; -import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; -import { ObjectCacheServiceStub } from '../../shared/testing/object-cache-service.stub'; -import { createPaginatedList } from '../../shared/testing/utils.test'; import { ObjectCacheService } from '../cache/object-cache.service'; import { ItemType } from '../shared/item-relationships/item-type.model'; import { RelationshipType } from '../shared/item-relationships/relationship-type.model'; +import { HALEndpointServiceStub } from '../testing/hal-endpoint-service.stub'; +import { ObjectCacheServiceStub } from '../testing/object-cache-service.stub'; +import { getMockRemoteDataBuildService } from '../testing/remote-data-build.service.mock'; +import { getMockRequestService } from '../testing/request.service.mock'; +import { createPaginatedList } from '../testing/utils.test'; +import { + createSuccessfulRemoteDataObject, + createSuccessfulRemoteDataObject$, +} from '../utilities/remote-data.utils'; import { RelationshipTypeDataService } from './relationship-type-data.service'; import { RequestService } from './request.service'; diff --git a/src/app/core/data/relationship-type-data.service.ts b/projects/dspace/core/src/lib/data/relationship-type-data.service.ts similarity index 95% rename from src/app/core/data/relationship-type-data.service.ts rename to projects/dspace/core/src/lib/data/relationship-type-data.service.ts index 43c018bbce2..78ae2a05640 100644 --- a/src/app/core/data/relationship-type-data.service.ts +++ b/projects/dspace/core/src/lib/data/relationship-type-data.service.ts @@ -1,23 +1,12 @@ import { Injectable } from '@angular/core'; -import { - combineLatest as observableCombineLatest, - Observable, -} from 'rxjs'; -import { - map, - mergeMap, - switchMap, - toArray, -} from 'rxjs/operators'; +import { hasValue } from '@dspace/utils'; +import { combineLatest as observableCombineLatest, Observable } from 'rxjs'; +import { map, mergeMap, switchMap, toArray } from 'rxjs/operators'; -import { hasValue } from '../../shared/empty.util'; -import { - followLink, - FollowLinkConfig, -} from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; +import { followLink, FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { ItemType } from '../shared/item-relationships/item-type.model'; import { RelationshipType } from '../shared/item-relationships/relationship-type.model'; diff --git a/src/app/core/data/remote-data.ts b/projects/dspace/core/src/lib/data/remote-data.ts similarity index 100% rename from src/app/core/data/remote-data.ts rename to projects/dspace/core/src/lib/data/remote-data.ts diff --git a/src/app/core/data/request-entry-state.model.spec.ts b/projects/dspace/core/src/lib/data/request-entry-state.model.spec.ts similarity index 100% rename from src/app/core/data/request-entry-state.model.spec.ts rename to projects/dspace/core/src/lib/data/request-entry-state.model.spec.ts diff --git a/src/app/core/data/request-entry-state.model.ts b/projects/dspace/core/src/lib/data/request-entry-state.model.ts similarity index 100% rename from src/app/core/data/request-entry-state.model.ts rename to projects/dspace/core/src/lib/data/request-entry-state.model.ts diff --git a/src/app/core/data/request-entry.model.ts b/projects/dspace/core/src/lib/data/request-entry.model.ts similarity index 100% rename from src/app/core/data/request-entry.model.ts rename to projects/dspace/core/src/lib/data/request-entry.model.ts diff --git a/src/app/core/data/request-error.model.ts b/projects/dspace/core/src/lib/data/request-error.model.ts similarity index 100% rename from src/app/core/data/request-error.model.ts rename to projects/dspace/core/src/lib/data/request-error.model.ts diff --git a/src/app/core/data/request-state.model.ts b/projects/dspace/core/src/lib/data/request-state.model.ts similarity index 100% rename from src/app/core/data/request-state.model.ts rename to projects/dspace/core/src/lib/data/request-state.model.ts diff --git a/src/app/core/data/request.actions.ts b/projects/dspace/core/src/lib/data/request.actions.ts similarity index 98% rename from src/app/core/data/request.actions.ts rename to projects/dspace/core/src/lib/data/request.actions.ts index 183c090b751..14ae3780004 100644 --- a/src/app/core/data/request.actions.ts +++ b/projects/dspace/core/src/lib/data/request.actions.ts @@ -1,7 +1,7 @@ /* eslint-disable max-classes-per-file */ import { Action } from '@ngrx/store'; -import { type } from '../../shared/ngrx/type'; +import { type } from '../ngrx/type'; import { HALLink } from '../shared/hal-link.model'; import { UnCacheableObject } from '../shared/uncacheable-object.model'; import { RestRequest } from './rest-request.model'; diff --git a/src/app/core/data/request.effects.ts b/projects/dspace/core/src/lib/data/request.effects.ts similarity index 88% rename from src/app/core/data/request.effects.ts rename to projects/dspace/core/src/lib/data/request.effects.ts index bc403bc2717..5a01b57dc7f 100644 --- a/src/app/core/data/request.effects.ts +++ b/projects/dspace/core/src/lib/data/request.effects.ts @@ -1,31 +1,15 @@ -import { - Injectable, - Injector, -} from '@angular/core'; -import { - Actions, - createEffect, - ofType, -} from '@ngrx/effects'; -import { - catchError, - filter, - map, - mergeMap, - take, - withLatestFrom, -} from 'rxjs/operators'; +import { Injectable, Injector } from '@angular/core'; +import { RestRequestMethod } from '@dspace/config'; +import { hasValue, isNotEmpty } from '@dspace/utils'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; +import { catchError, filter, map, mergeMap, take, withLatestFrom } from 'rxjs/operators'; -import { - hasValue, - isNotEmpty, -} from '../../shared/empty.util'; -import { StoreActionTypes } from '../../store.actions'; import { getClassForType } from '../cache/builders/build-decorators'; import { ParsedResponse } from '../cache/response.models'; import { DSpaceSerializer } from '../dspace-rest/dspace.serializer'; import { DspaceRestService } from '../dspace-rest/dspace-rest.service'; import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; +import { StoreActionTypes } from '../ngrx/type'; import { XSRFService } from '../xsrf/xsrf.service'; import { RequestActionTypes, @@ -37,7 +21,6 @@ import { import { RequestService } from './request.service'; import { RequestEntry } from './request-entry.model'; import { RequestError } from './request-error.model'; -import { RestRequestMethod } from './rest-request-method'; import { RestRequestWithResponseParser } from './rest-request-with-response-parser.model'; @Injectable() diff --git a/src/app/core/data/request.models.ts b/projects/dspace/core/src/lib/data/request.models.ts similarity index 75% rename from src/app/core/data/request.models.ts rename to projects/dspace/core/src/lib/data/request.models.ts index c46d9b82422..a843633a576 100644 --- a/src/app/core/data/request.models.ts +++ b/projects/dspace/core/src/lib/data/request.models.ts @@ -1,7 +1,11 @@ /* eslint-disable max-classes-per-file */ +import { RestRequestMethod } from '@dspace/config'; + import { HttpOptions } from '../dspace-rest/dspace-rest.service'; import { GenericConstructor } from '../shared/generic-constructor'; -import { SubmissionResponseParsingService } from '../submission/submission-response-parsing.service'; +import { + SubmissionResponseParsingService, +} from '../submission/submission-response-parsing.service'; import { TaskResponseParsingService } from '../tasks/task-response-parsing.service'; import { BrowseResponseParsingService } from './browse-response-parsing.service'; import { ContentSourceResponseParsingService } from './content-source-response-parsing.service'; @@ -9,7 +13,6 @@ import { DspaceRestResponseParsingService } from './dspace-rest-response-parsing import { EndpointMapResponseParsingService } from './endpoint-map-response-parsing.service'; import { FindListOptions } from './find-list-options.model'; import { ResponseParsingService } from './parsing.service'; -import { RestRequestMethod } from './rest-request-method'; import { RestRequestWithResponseParser } from './rest-request-with-response-parser.model'; @@ -31,6 +34,7 @@ export class GetRequest extends DSpaceRestRequest { public href: string, public body?: any, public options?: HttpOptions, + public responseMsToLive?: number, ) { super(uuid, href, RestRequestMethod.GET, body, options); } @@ -42,6 +46,7 @@ export class PostRequest extends DSpaceRestRequest { public href: string, public body?: any, public options?: HttpOptions, + public responseMsToLive?: number, ) { super(uuid, href, RestRequestMethod.POST, body); } @@ -57,6 +62,7 @@ export class MultipartPostRequest extends DSpaceRestRequest { public href: string, public body?: any, public options?: HttpOptions, + public responseMsToLive?: number, ) { super(uuid, href, RestRequestMethod.POST, body); } @@ -68,6 +74,7 @@ export class PutRequest extends DSpaceRestRequest { public href: string, public body?: any, public options?: HttpOptions, + public responseMsToLive?: number, ) { super(uuid, href, RestRequestMethod.PUT, body); } @@ -79,6 +86,7 @@ export class DeleteRequest extends DSpaceRestRequest { public href: string, public body?: any, public options?: HttpOptions, + public responseMsToLive?: number, ) { super(uuid, href, RestRequestMethod.DELETE, body); } @@ -90,6 +98,7 @@ export class OptionsRequest extends DSpaceRestRequest { public href: string, public body?: any, public options?: HttpOptions, + public responseMsToLive?: number, ) { super(uuid, href, RestRequestMethod.OPTIONS, body); } @@ -101,6 +110,7 @@ export class HeadRequest extends DSpaceRestRequest { public href: string, public body?: any, public options?: HttpOptions, + public responseMsToLive?: number, ) { super(uuid, href, RestRequestMethod.HEAD, body); } @@ -112,6 +122,7 @@ export class PatchRequest extends DSpaceRestRequest { public href: string, public body?: any, public options?: HttpOptions, + public responseMsToLive?: number, ) { super(uuid, href, RestRequestMethod.PATCH, body); } @@ -131,8 +142,9 @@ export class FindListRequest extends GetRequest { uuid: string, href: string, public body?: FindListOptions, + public responseMsToLive?: number, ) { - super(uuid, href); + super(uuid, href, body, null, responseMsToLive); } } @@ -146,8 +158,8 @@ export class EndpointMapRequest extends GetRequest { * Class representing a submission HTTP GET request object */ export class SubmissionRequest extends GetRequest { - constructor(uuid: string, href: string) { - super(uuid, href); + constructor(uuid: string, href: string, responseMsToLive?: number) { + super(uuid, href, null, null, responseMsToLive); } getResponseParser(): GenericConstructor { @@ -159,9 +171,8 @@ export class SubmissionRequest extends GetRequest { * Class representing a submission HTTP DELETE request object */ export class SubmissionDeleteRequest extends DeleteRequest { - constructor(public uuid: string, - public href: string) { - super(uuid, href); + constructor(public uuid: string, public href: string, public responseMsToLive?: number) { + super(uuid, href, null, null, responseMsToLive); } getResponseParser(): GenericConstructor { @@ -175,8 +186,9 @@ export class SubmissionDeleteRequest extends DeleteRequest { export class SubmissionPatchRequest extends PatchRequest { constructor(public uuid: string, public href: string, - public body?: any) { - super(uuid, href, body); + public body?: any, + public responseMsToLive?: number) { + super(uuid, href, body, null, responseMsToLive); } getResponseParser(): GenericConstructor { @@ -191,8 +203,9 @@ export class SubmissionPostRequest extends PostRequest { constructor(public uuid: string, public href: string, public body?: any, - public options?: HttpOptions) { - super(uuid, href, body, options); + public options?: HttpOptions, + public responseMsToLive?: number) { + super(uuid, href, body, options, responseMsToLive); } getResponseParser(): GenericConstructor { @@ -201,14 +214,14 @@ export class SubmissionPostRequest extends PostRequest { } export class CreateRequest extends PostRequest { - constructor(uuid: string, href: string, public body?: any, public options?: HttpOptions) { - super(uuid, href, body, options); + constructor(uuid: string, href: string, public body?: any, public options?: HttpOptions, public responseMsToLive?: number) { + super(uuid, href, body, options, responseMsToLive); } } export class ContentSourceRequest extends GetRequest { - constructor(uuid: string, href: string) { - super(uuid, href); + constructor(uuid: string, href: string, public responseMsToLive?: number) { + super(uuid, href, responseMsToLive); } getResponseParser(): GenericConstructor { @@ -217,8 +230,8 @@ export class ContentSourceRequest extends GetRequest { } export class UpdateContentSourceRequest extends PutRequest { - constructor(uuid: string, href: string, public body?: any, public options?: HttpOptions) { - super(uuid, href, body, options); + constructor(uuid: string, href: string, public body?: any, public options?: HttpOptions, public responseMsToLive?: number) { + super(uuid, href, body, options, responseMsToLive); } getResponseParser(): GenericConstructor { @@ -234,14 +247,15 @@ export class DeleteByIDRequest extends DeleteRequest { uuid: string, href: string, public resourceID: string, + public responseMsToLive?: number, ) { - super(uuid, href); + super(uuid, href, null, null, responseMsToLive); } } export class TaskPostRequest extends PostRequest { - constructor(uuid: string, href: string, public body?: any, public options?: HttpOptions) { - super(uuid, href, body, options); + constructor(uuid: string, href: string, public body?: any, public options?: HttpOptions, public responseMsToLive?: number) { + super(uuid, href, body, options, responseMsToLive); } getResponseParser(): GenericConstructor { @@ -250,8 +264,8 @@ export class TaskPostRequest extends PostRequest { } export class TaskDeleteRequest extends DeleteRequest { - constructor(uuid: string, href: string, public body?: any, public options?: HttpOptions) { - super(uuid, href, body, options); + constructor(uuid: string, href: string, public body?: any, public options?: HttpOptions,public responseMsToLive?: number) { + super(uuid, href, body, options, responseMsToLive); } getResponseParser(): GenericConstructor { @@ -260,5 +274,13 @@ export class TaskDeleteRequest extends DeleteRequest { } export class MyDSpaceRequest extends GetRequest { - public responseMsToLive = 10 * 1000; + constructor( + public uuid: string, + public href: string, + public body?: any, + public options?: HttpOptions, + public responseMsToLive?: number, + ) { + super(uuid, href, body, options, 10 * 1000); + } } diff --git a/src/app/core/data/request.reducer.spec.ts b/projects/dspace/core/src/lib/data/request.reducer.spec.ts similarity index 100% rename from src/app/core/data/request.reducer.spec.ts rename to projects/dspace/core/src/lib/data/request.reducer.spec.ts diff --git a/src/app/core/data/request.reducer.ts b/projects/dspace/core/src/lib/data/request.reducer.ts similarity index 99% rename from src/app/core/data/request.reducer.ts rename to projects/dspace/core/src/lib/data/request.reducer.ts index cccb47442f2..ae63be76daf 100644 --- a/src/app/core/data/request.reducer.ts +++ b/projects/dspace/core/src/lib/data/request.reducer.ts @@ -1,5 +1,6 @@ /* eslint-disable max-classes-per-file */ -import { isNull } from '../../shared/empty.util'; +import { isNull } from '@dspace/utils'; + import { RequestAction, RequestActionTypes, diff --git a/src/app/core/data/request.service.spec.ts b/projects/dspace/core/src/lib/data/request.service.spec.ts similarity index 95% rename from src/app/core/data/request.service.spec.ts rename to projects/dspace/core/src/lib/data/request.service.spec.ts index 82a3d3aa435..ccd37ffd430 100644 --- a/src/app/core/data/request.service.spec.ts +++ b/projects/dspace/core/src/lib/data/request.service.spec.ts @@ -1,38 +1,17 @@ -import { - fakeAsync, - flush, - TestBed, - waitForAsync, -} from '@angular/core/testing'; -import { - Store, - StoreModule, -} from '@ngrx/store'; -import { - MockStore, - provideMockStore, -} from '@ngrx/store/testing'; -import { - cold, - getTestScheduler, -} from 'jasmine-marbles'; -import { - EMPTY, - Observable, - of, -} from 'rxjs'; +import { fakeAsync, flush, TestBed, waitForAsync } from '@angular/core/testing'; +import { APP_CONFIG } from '@dspace/config'; +import { Store, StoreModule } from '@ngrx/store'; +import { MockStore, provideMockStore } from '@ngrx/store/testing'; +import { cold, getTestScheduler } from 'jasmine-marbles'; +import { EMPTY, Observable, of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { storeModuleConfig } from '../../app.reducer'; -import { getMockObjectCacheService } from '../../shared/mocks/object-cache.service.mock'; -import { - defaultUUID, - getMockUUIDService, -} from '../../shared/mocks/uuid.service.mock'; import { ObjectCacheService } from '../cache/object-cache.service'; import { coreReducers } from '../core.reducers'; import { CoreState } from '../core-state.model'; import { UUIDService } from '../shared/uuid.service'; +import { getMockObjectCacheService } from '../testing/object-cache.service.mock'; +import { defaultUUID, getMockUUIDService } from '../testing/uuid.service.mock'; import { RequestConfigureAction, RequestExecuteAction, @@ -81,36 +60,50 @@ describe('RequestService', () => { }, }; + const envConfig = { + rest: { + baseUrl: 'https://rest.api/', + }, + cache: { + msToLive: { + default: 15 * 60 * 1000, + }, + }, + }; + + const storeModuleConfig = { + runtimeChecks: { + strictStateImmutability: true, + strictActionImmutability: true, + }, + }; + beforeEach(waitForAsync(() => { + objectCache = getMockObjectCacheService(); + (objectCache.hasByHref as any).and.returnValue(false); + + uuidService = getMockUUIDService(); TestBed.configureTestingModule({ imports: [ StoreModule.forRoot(coreReducers, storeModuleConfig), ], providers: [ provideMockStore({ initialState }), - { provide: RequestService, useValue: service }, + { provide: ObjectCacheService, useValue: objectCache }, + { provide: UUIDService, useValue: uuidService }, + { provide: APP_CONFIG, useValue: envConfig }, + RequestService, ], }).compileComponents(); })); beforeEach(() => { - scheduler = getTestScheduler(); - - objectCache = getMockObjectCacheService(); - (objectCache.hasByHref as any).and.returnValue(false); - - uuidService = getMockUUIDService(); - store = TestBed.inject(Store); mockStore = store as MockStore; mockStore.setState(initialState); - - service = new RequestService( - objectCache, - uuidService, - store, - ); + scheduler = getTestScheduler(); + service = TestBed.inject(RequestService); serviceAsAny = service as any; }); diff --git a/src/app/core/data/request.service.ts b/projects/dspace/core/src/lib/data/request.service.ts similarity index 90% rename from src/app/core/data/request.service.ts rename to projects/dspace/core/src/lib/data/request.service.ts index 52ec9b56e27..222cca982d6 100644 --- a/src/app/core/data/request.service.ts +++ b/projects/dspace/core/src/lib/data/request.service.ts @@ -1,44 +1,19 @@ import { HttpHeaders } from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { - createSelector, - MemoizedSelector, - select, - Store, -} from '@ngrx/store'; +import { inject, Injectable } from '@angular/core'; +import { APP_CONFIG, RestRequestMethod } from '@dspace/config'; +import { hasNoValue, hasValue, isEmpty, isNotEmpty } from '@dspace/utils'; +import { createSelector, MemoizedSelector, select, Store } from '@ngrx/store'; import cloneDeep from 'lodash/cloneDeep'; -import { - asapScheduler, - from as observableFrom, - Observable, -} from 'rxjs'; -import { - filter, - find, - map, - mergeMap, - switchMap, - take, - tap, - toArray, -} from 'rxjs/operators'; +import { asapScheduler, from as observableFrom, Observable } from 'rxjs'; +import { filter, find, map, mergeMap, switchMap, take, tap, toArray } from 'rxjs/operators'; -import { - hasNoValue, - hasValue, - isEmpty, - isNotEmpty, -} from '../../shared/empty.util'; import { ObjectCacheEntry } from '../cache/object-cache.reducer'; import { ObjectCacheService } from '../cache/object-cache.service'; import { CommitSSBAction } from '../cache/server-sync-buffer.actions'; import { coreSelector } from '../core.selectors'; import { CoreState } from '../core-state.model'; import { IndexState } from '../index/index.reducer'; -import { - getUrlWithoutEmbedParams, - requestIndexSelector, -} from '../index/index.selectors'; +import { getUrlWithoutEmbedParams, requestIndexSelector } from '../index/index.selectors'; import { UUIDService } from '../shared/uuid.service'; import { RequestConfigureAction, @@ -47,13 +22,9 @@ import { } from './request.actions'; import { GetRequest } from './request.models'; import { RequestEntry } from './request-entry.model'; -import { - isLoading, - isStale, -} from './request-entry-state.model'; +import { isLoading, isStale } from './request-entry-state.model'; import { RequestState } from './request-state.model'; import { RestRequest } from './rest-request.model'; -import { RestRequestMethod } from './rest-request-method'; /** * The base selector function to select the request state in the store @@ -122,37 +93,7 @@ const getUuidsFromHrefSubstring = (state: IndexState, href: string): string[] => return result; }; -/** - * Check whether a cached entry exists and isn't stale - * - * @param entry - * the entry to check - * @return boolean - * false if the entry has no value, or its time to live has exceeded, - * true otherwise - */ -const isValid = (entry: RequestEntry): boolean => { - if (hasNoValue(entry)) { - // undefined entries are invalid - return false; - } else { - if (isLoading(entry.state)) { - // entries that are still loading are always valid - return true; - } else { - if (isStale(entry.state)) { - // entries that are stale are always invalid - return false; - } else { - // check whether it should be stale - const timeOutdated = entry.response.timeCompleted + entry.request.responseMsToLive; - const now = new Date().getTime(); - const isOutDated = now > timeOutdated; - return !isOutDated; - } - } - } -}; + /** * A service to interact with the request state in the store @@ -162,11 +103,44 @@ const isValid = (entry: RequestEntry): boolean => { }) export class RequestService { private requestsOnTheirWayToTheStore: string[] = []; + private defaultResponseMsToLive = inject(APP_CONFIG).cache.msToLive.default; + constructor(private objectCache: ObjectCacheService, private uuidService: UUIDService, private store: Store) { } + /** + * Check whether a cached entry exists and isn't stale + * + * @param entry + * the entry to check + * @return boolean + * false if the entry has no value, or its time to live has exceeded, + * true otherwise + */ + isValid = (entry: RequestEntry): boolean => { + if (hasNoValue(entry)) { + // undefined entries are invalid + return false; + } else { + if (isLoading(entry.state)) { + // entries that are still loading are always valid + return true; + } else { + if (isStale(entry.state)) { + // entries that are stale are always invalid + return false; + } else { + // check whether it should be stale + const timeOutdated = entry.response.timeCompleted + (entry.request.responseMsToLive ?? this.defaultResponseMsToLive); + const now = new Date().getTime(); + const isOutDated = now > timeOutdated; + return !isOutDated; + } + } + } + }; generateRequestId(): string { return `client/${this.uuidService.generate()}`; @@ -237,7 +211,7 @@ export class RequestService { return (source: Observable): Observable => { return source.pipe( tap((entry: RequestEntry) => { - if (hasValue(entry) && hasValue(entry.request) && !isStale(entry.state) && !isValid(entry)) { + if (hasValue(entry) && hasValue(entry.request) && !isStale(entry.state) && !this.isValid(entry)) { asapScheduler.schedule(() => this.store.dispatch(new RequestStaleAction(entry.request.uuid))); } }), @@ -511,7 +485,7 @@ export class RequestService { */ hasByHref$(href: string, checkValidity = true): Observable { return this.getByHref(href).pipe( - map((requestEntry: RequestEntry) => checkValidity ? isValid(requestEntry) : hasValue(requestEntry)), + map((requestEntry: RequestEntry) => checkValidity ? this.isValid(requestEntry) : hasValue(requestEntry)), ); } @@ -548,7 +522,7 @@ export class RequestService { */ hasByUUID$(uuid: string, checkValidity = true): Observable { return this.getByUUID(uuid).pipe( - map((requestEntry: RequestEntry) => checkValidity ? isValid(requestEntry) : hasValue(requestEntry)), + map((requestEntry: RequestEntry) => checkValidity ? this.isValid(requestEntry) : hasValue(requestEntry)), ); } diff --git a/src/app/core/data/response-state.model.ts b/projects/dspace/core/src/lib/data/response-state.model.ts similarity index 100% rename from src/app/core/data/response-state.model.ts rename to projects/dspace/core/src/lib/data/response-state.model.ts diff --git a/src/app/core/data/rest-request-with-response-parser.model.ts b/projects/dspace/core/src/lib/data/rest-request-with-response-parser.model.ts similarity index 100% rename from src/app/core/data/rest-request-with-response-parser.model.ts rename to projects/dspace/core/src/lib/data/rest-request-with-response-parser.model.ts diff --git a/src/app/core/data/rest-request.model.ts b/projects/dspace/core/src/lib/data/rest-request.model.ts similarity index 67% rename from src/app/core/data/rest-request.model.ts rename to projects/dspace/core/src/lib/data/rest-request.model.ts index 95e605711be..091c98bde64 100644 --- a/src/app/core/data/rest-request.model.ts +++ b/projects/dspace/core/src/lib/data/rest-request.model.ts @@ -1,12 +1,11 @@ -import { environment } from '../../../environments/environment'; +import { RestRequestMethod } from '@dspace/config'; + import { HttpOptions } from '../dspace-rest/dspace-rest.service'; -import { RestRequestMethod } from './rest-request-method'; /** * A request to the DSpace REST API */ export abstract class RestRequest { - public responseMsToLive = environment.cache.msToLive.default; public isMultipart = false; constructor( @@ -15,6 +14,7 @@ export abstract class RestRequest { public method: RestRequestMethod = RestRequestMethod.GET, public body?: any, public options?: HttpOptions, + public responseMsToLive?: number, ) { } } diff --git a/src/app/core/data/root-data.service.spec.ts b/projects/dspace/core/src/lib/data/root-data.service.spec.ts similarity index 98% rename from src/app/core/data/root-data.service.spec.ts rename to projects/dspace/core/src/lib/data/root-data.service.spec.ts index d6298832207..5ddd5a08d4c 100644 --- a/src/app/core/data/root-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/root-data.service.spec.ts @@ -1,11 +1,11 @@ import { cold } from 'jasmine-marbles'; import { Observable } from 'rxjs'; +import { HALEndpointService } from '../shared/hal-endpoint.service'; import { createFailedRemoteDataObject$, createSuccessfulRemoteDataObject$, -} from '../../shared/remote-data.utils'; -import { HALEndpointService } from '../shared/hal-endpoint.service'; +} from '../utilities/remote-data.utils'; import { RemoteData } from './remote-data'; import { Root } from './root.model'; import { RootDataService } from './root-data.service'; diff --git a/src/app/core/data/root-data.service.ts b/projects/dspace/core/src/lib/data/root-data.service.ts similarity index 93% rename from src/app/core/data/root-data.service.ts rename to projects/dspace/core/src/lib/data/root-data.service.ts index 5c0a97346e3..84d79f3f563 100644 --- a/src/app/core/data/root-data.service.ts +++ b/projects/dspace/core/src/lib/data/root-data.service.ts @@ -1,16 +1,10 @@ import { Injectable } from '@angular/core'; -import { - Observable, - of, -} from 'rxjs'; -import { - catchError, - map, -} from 'rxjs/operators'; +import { Observable, of } from 'rxjs'; +import { catchError, map } from 'rxjs/operators'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { getFirstCompletedRemoteData } from '../shared/operators'; import { BaseDataService } from './base/base-data.service'; diff --git a/src/app/core/data/root.model.ts b/projects/dspace/core/src/lib/data/root.model.ts similarity index 94% rename from src/app/core/data/root.model.ts rename to projects/dspace/core/src/lib/data/root.model.ts index ced115b0554..d1010129a92 100644 --- a/src/app/core/data/root.model.ts +++ b/projects/dspace/core/src/lib/data/root.model.ts @@ -1,7 +1,4 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; +import { autoserialize, deserialize } from 'cerialize'; import { typedObject } from '../cache/builders/build-decorators'; import { CacheableObject } from '../cache/cacheable-object.model'; diff --git a/src/app/core/data/root.resource-type.ts b/projects/dspace/core/src/lib/data/root.resource-type.ts similarity index 100% rename from src/app/core/data/root.resource-type.ts rename to projects/dspace/core/src/lib/data/root.resource-type.ts diff --git a/src/app/core/data/search-response-parsing.service.ts b/projects/dspace/core/src/lib/data/search-response-parsing.service.ts similarity index 91% rename from src/app/core/data/search-response-parsing.service.ts rename to projects/dspace/core/src/lib/data/search-response-parsing.service.ts index c6858251feb..803662e6193 100644 --- a/src/app/core/data/search-response-parsing.service.ts +++ b/projects/dspace/core/src/lib/data/search-response-parsing.service.ts @@ -1,14 +1,11 @@ import { Injectable } from '@angular/core'; +import { hasValue } from '@dspace/utils'; -import { hasValue } from '../../shared/empty.util'; -import { SearchObjects } from '../../shared/search/models/search-objects.model'; import { ParsedResponse } from '../cache/response.models'; import { DSpaceSerializer } from '../dspace-rest/dspace.serializer'; import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; -import { - MetadataMap, - MetadataValue, -} from '../shared/metadata.models'; +import { MetadataMap, MetadataValue } from '../shared/metadata.models'; +import { SearchObjects } from '../shared/search/models/search-objects.model'; import { DspaceRestResponseParsingService } from './dspace-rest-response-parsing.service'; import { RestRequest } from './rest-request.model'; diff --git a/src/app/core/data/signposting-data.service.spec.ts b/projects/dspace/core/src/lib/data/signposting-data.service.spec.ts similarity index 94% rename from src/app/core/data/signposting-data.service.spec.ts rename to projects/dspace/core/src/lib/data/signposting-data.service.spec.ts index 2b10bba89bb..d20e24dc7e6 100644 --- a/src/app/core/data/signposting-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/signposting-data.service.spec.ts @@ -1,11 +1,7 @@ -import { - fakeAsync, - TestBed, - tick, -} from '@angular/core/testing'; +import { fakeAsync, TestBed, tick } from '@angular/core/testing'; +import { APP_CONFIG } from '@dspace/config'; import { of } from 'rxjs'; -import { APP_CONFIG } from '../../../config/app-config.interface'; import { DspaceRestService } from '../dspace-rest/dspace-rest.service'; import { SignpostingDataService } from './signposting-data.service'; import { SignpostingLink } from './signposting-links.model'; diff --git a/src/app/core/data/signposting-data.service.ts b/projects/dspace/core/src/lib/data/signposting-data.service.ts similarity index 80% rename from src/app/core/data/signposting-data.service.ts rename to projects/dspace/core/src/lib/data/signposting-data.service.ts index b6d2422ea95..ea2b0331df0 100644 --- a/src/app/core/data/signposting-data.service.ts +++ b/projects/dspace/core/src/lib/data/signposting-data.service.ts @@ -1,20 +1,8 @@ -import { - Inject, - Injectable, -} from '@angular/core'; -import { - Observable, - of, -} from 'rxjs'; -import { - catchError, - map, -} from 'rxjs/operators'; +import { Inject, Injectable } from '@angular/core'; +import { APP_CONFIG, AppConfig } from '@dspace/config'; +import { Observable, of } from 'rxjs'; +import { catchError, map } from 'rxjs/operators'; -import { - APP_CONFIG, - AppConfig, -} from '../../../config/app-config.interface'; import { DspaceRestService } from '../dspace-rest/dspace-rest.service'; import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; import { SignpostingLink } from './signposting-links.model'; diff --git a/src/app/core/data/signposting-links.model.ts b/projects/dspace/core/src/lib/data/signposting-links.model.ts similarity index 100% rename from src/app/core/data/signposting-links.model.ts rename to projects/dspace/core/src/lib/data/signposting-links.model.ts diff --git a/src/app/core/data/site-data.service.spec.ts b/projects/dspace/core/src/lib/data/site-data.service.spec.ts similarity index 92% rename from src/app/core/data/site-data.service.spec.ts rename to projects/dspace/core/src/lib/data/site-data.service.spec.ts index 253d1a6f15e..d3c83cd76c3 100644 --- a/src/app/core/data/site-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/site-data.service.spec.ts @@ -1,15 +1,12 @@ -import { - cold, - getTestScheduler, -} from 'jasmine-marbles'; +import { cold, getTestScheduler } from 'jasmine-marbles'; import { TestScheduler } from 'rxjs/testing'; -import { createSuccessfulRemoteDataObject } from '../../shared/remote-data.utils'; -import { createPaginatedList } from '../../shared/testing/utils.test'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { Site } from '../shared/site.model'; +import { createPaginatedList } from '../testing/utils.test'; +import { createSuccessfulRemoteDataObject } from '../utilities/remote-data.utils'; import { testFindAllDataImplementation } from './base/find-all-data.spec'; import { FindListOptions } from './find-list-options.model'; import { RequestService } from './request.service'; diff --git a/src/app/core/data/site-data.service.ts b/projects/dspace/core/src/lib/data/site-data.service.ts similarity index 94% rename from src/app/core/data/site-data.service.ts rename to projects/dspace/core/src/lib/data/site-data.service.ts index 2da80ed2762..cf8bdf4b87b 100644 --- a/src/app/core/data/site-data.service.ts +++ b/projects/dspace/core/src/lib/data/site-data.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { FollowLinkConfig } from 'src/app/shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; @@ -9,10 +9,7 @@ import { HALEndpointService } from '../shared/hal-endpoint.service'; import { getFirstSucceededRemoteData } from '../shared/operators'; import { Site } from '../shared/site.model'; import { BaseDataService } from './base/base-data.service'; -import { - FindAllData, - FindAllDataImpl, -} from './base/find-all-data'; +import { FindAllData, FindAllDataImpl } from './base/find-all-data'; import { FindListOptions } from './find-list-options.model'; import { PaginatedList } from './paginated-list.model'; import { RemoteData } from './remote-data'; diff --git a/src/app/core/data/status-code-only-response-parsing.service.spec.ts b/projects/dspace/core/src/lib/data/status-code-only-response-parsing.service.spec.ts similarity index 100% rename from src/app/core/data/status-code-only-response-parsing.service.spec.ts rename to projects/dspace/core/src/lib/data/status-code-only-response-parsing.service.spec.ts diff --git a/src/app/core/data/status-code-only-response-parsing.service.ts b/projects/dspace/core/src/lib/data/status-code-only-response-parsing.service.ts similarity index 100% rename from src/app/core/data/status-code-only-response-parsing.service.ts rename to projects/dspace/core/src/lib/data/status-code-only-response-parsing.service.ts diff --git a/src/app/shared/subscriptions/subscriptions-data.service.spec.ts b/projects/dspace/core/src/lib/data/subscriptions-data.service.spec.ts similarity index 82% rename from src/app/shared/subscriptions/subscriptions-data.service.spec.ts rename to projects/dspace/core/src/lib/data/subscriptions-data.service.spec.ts index 860d3ad5ef5..b0aedd67428 100644 --- a/src/app/shared/subscriptions/subscriptions-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/subscriptions-data.service.spec.ts @@ -1,23 +1,23 @@ import { HttpClient } from '@angular/common/http'; +import { DSONameService } from '../breadcrumbs/dso-name.service'; +import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; +import { ObjectCacheService } from '../cache/object-cache.service'; +import { DSOChangeAnalyzer } from './dso-change-analyzer.service'; +import { RequestService } from './request.service'; +import { HALEndpointService } from '../shared/hal-endpoint.service'; +import { Subscription } from '../shared/subscription.model'; import { Store } from '@ngrx/store'; -import { DSONameService } from '../../core/breadcrumbs/dso-name.service'; -import { RemoteDataBuildService } from '../../core/cache/builders/remote-data-build.service'; -import { ObjectCacheService } from '../../core/cache/object-cache.service'; -import { DSOChangeAnalyzer } from '../../core/data/dso-change-analyzer.service'; -import { RequestService } from '../../core/data/request.service'; -import { HALEndpointService } from '../../core/shared/hal-endpoint.service'; -import { getMockRemoteDataBuildService } from '../mocks/remote-data-build.service.mock'; -import { getMockRequestService } from '../mocks/request.service.mock'; -import { NotificationsService } from '../notifications/notifications.service'; -import { - createNoContentRemoteDataObject$, - createSuccessfulRemoteDataObject$, -} from '../remote-data.utils'; +import { NotificationsService } from '../notification-system/notifications.service'; import { HALEndpointServiceStub } from '../testing/hal-endpoint-service.stub'; import { NotificationsServiceStub } from '../testing/notifications-service.stub'; +import { getMockRemoteDataBuildService } from '../testing/remote-data-build.service.mock'; +import { getMockRequestService } from '../testing/request.service.mock'; import { createPaginatedList } from '../testing/utils.test'; -import { Subscription } from './models/subscription.model'; +import { + createNoContentRemoteDataObject$, + createSuccessfulRemoteDataObject$, +} from '../utilities/remote-data.utils'; import { SubscriptionsDataService } from './subscriptions-data.service'; describe('SubscriptionsDataService', () => { diff --git a/src/app/shared/subscriptions/subscriptions-data.service.ts b/projects/dspace/core/src/lib/data/subscriptions-data.service.ts similarity index 76% rename from src/app/shared/subscriptions/subscriptions-data.service.ts rename to projects/dspace/core/src/lib/data/subscriptions-data.service.ts index 81e258d017e..b769c26e1f3 100644 --- a/src/app/shared/subscriptions/subscriptions-data.service.ts +++ b/projects/dspace/core/src/lib/data/subscriptions-data.service.ts @@ -1,44 +1,32 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; +import { DSONameService } from '../breadcrumbs/dso-name.service'; +import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; +import { RequestParam } from '../cache/models/request-param.model'; +import { ObjectCacheService } from '../cache/object-cache.service'; +import { DeleteDataImpl } from './base/delete-data'; +import { FindAllData } from './base/find-all-data'; +import { IdentifiableDataService } from './base/identifiable-data.service'; +import { SearchDataImpl } from './base/search-data'; +import { DSOChangeAnalyzer } from './dso-change-analyzer.service'; +import { FindListOptions } from './find-list-options.model'; +import { PaginatedList } from './paginated-list.model'; +import { RemoteData } from './remote-data'; +import { CreateRequest, PutRequest } from './request.models'; +import { RequestService } from './request.service'; +import { RestRequest } from './rest-request.model'; +import { HALEndpointService } from '../shared/hal-endpoint.service'; +import { NoContent } from '../shared/NoContent.model'; +import { getFirstCompletedRemoteData } from '../shared/operators'; +import { sendRequest } from '../shared/request.operators'; +import { Subscription } from '../shared/subscription.model'; +import { isNotEmpty, isNotEmptyOperator } from '@dspace/utils'; import { Store } from '@ngrx/store'; import { Observable } from 'rxjs'; -import { - distinctUntilChanged, - filter, - map, - switchMap, - take, -} from 'rxjs/operators'; -import { sendRequest } from 'src/app/core/shared/request.operators'; - -import { DSONameService } from '../../core/breadcrumbs/dso-name.service'; -import { RemoteDataBuildService } from '../../core/cache/builders/remote-data-build.service'; -import { RequestParam } from '../../core/cache/models/request-param.model'; -import { ObjectCacheService } from '../../core/cache/object-cache.service'; -import { DeleteDataImpl } from '../../core/data/base/delete-data'; -import { FindAllData } from '../../core/data/base/find-all-data'; -import { IdentifiableDataService } from '../../core/data/base/identifiable-data.service'; -import { SearchDataImpl } from '../../core/data/base/search-data'; -import { DSOChangeAnalyzer } from '../../core/data/dso-change-analyzer.service'; -import { FindListOptions } from '../../core/data/find-list-options.model'; -import { PaginatedList } from '../../core/data/paginated-list.model'; -import { RemoteData } from '../../core/data/remote-data'; -import { - CreateRequest, - PutRequest, -} from '../../core/data/request.models'; -import { RequestService } from '../../core/data/request.service'; -import { RestRequest } from '../../core/data/rest-request.model'; -import { HALEndpointService } from '../../core/shared/hal-endpoint.service'; -import { NoContent } from '../../core/shared/NoContent.model'; -import { getFirstCompletedRemoteData } from '../../core/shared/operators'; -import { - isNotEmpty, - isNotEmptyOperator, -} from '../empty.util'; -import { NotificationsService } from '../notifications/notifications.service'; -import { followLink } from '../utils/follow-link-config.model'; -import { Subscription } from './models/subscription.model'; +import { distinctUntilChanged, filter, map, switchMap, take } from 'rxjs/operators'; + +import { NotificationsService } from '../notification-system/notifications.service'; +import { followLink } from '../shared/follow-link-config.model'; /** * Provides methods to retrieve subscription resources from the REST API related CRUD actions. diff --git a/src/app/core/data/system-wide-alert-data.service.spec.ts b/projects/dspace/core/src/lib/data/system-wide-alert-data.service.spec.ts similarity index 100% rename from src/app/core/data/system-wide-alert-data.service.spec.ts rename to projects/dspace/core/src/lib/data/system-wide-alert-data.service.spec.ts diff --git a/src/app/core/data/system-wide-alert-data.service.ts b/projects/dspace/core/src/lib/data/system-wide-alert-data.service.ts similarity index 90% rename from src/app/core/data/system-wide-alert-data.service.ts rename to projects/dspace/core/src/lib/data/system-wide-alert-data.service.ts index afff0ef9ef3..45eea639ef4 100644 --- a/src/app/core/data/system-wide-alert-data.service.ts +++ b/projects/dspace/core/src/lib/data/system-wide-alert-data.service.ts @@ -1,30 +1,18 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; -import { SystemWideAlert } from '../../system-wide-alert/system-wide-alert.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; +import { NotificationsService } from '../notification-system/notifications.service'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; -import { - CreateData, - CreateDataImpl, -} from './base/create-data'; -import { - FindAllData, - FindAllDataImpl, -} from './base/find-all-data'; +import { SystemWideAlert } from '../shared/system-wide-alert.model'; +import { CreateData, CreateDataImpl } from './base/create-data'; +import { FindAllData, FindAllDataImpl } from './base/find-all-data'; import { IdentifiableDataService } from './base/identifiable-data.service'; -import { - PutData, - PutDataImpl, -} from './base/put-data'; -import { - SearchData, - SearchDataImpl, -} from './base/search-data'; +import { PutData, PutDataImpl } from './base/put-data'; +import { SearchData, SearchDataImpl } from './base/search-data'; import { FindListOptions } from './find-list-options.model'; import { PaginatedList } from './paginated-list.model'; import { RemoteData } from './remote-data'; diff --git a/src/app/core/data/update-data.service.spec.ts b/projects/dspace/core/src/lib/data/update-data.service.spec.ts similarity index 93% rename from src/app/core/data/update-data.service.spec.ts rename to projects/dspace/core/src/lib/data/update-data.service.spec.ts index 1bcbea87960..55822bc4902 100644 --- a/src/app/core/data/update-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/update-data.service.spec.ts @@ -1,24 +1,20 @@ -import { - cold, - getTestScheduler, - hot, -} from 'jasmine-marbles'; +import { cold, getTestScheduler, hot } from 'jasmine-marbles'; import { of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { getMockHrefOnlyDataService } from '../../shared/mocks/href-only-data.service.mock'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { - createSuccessfulRemoteDataObject, - createSuccessfulRemoteDataObject$, -} from '../../shared/remote-data.utils'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { RestResponse } from '../cache/response.models'; +import { NotificationsService } from '../notification-system/notifications.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { Item } from '../shared/item.model'; import { Version } from '../shared/version.model'; import { VersionHistory } from '../shared/version-history.model'; +import { getMockHrefOnlyDataService } from '../testing/href-only-data.service.mock'; +import { + createSuccessfulRemoteDataObject, + createSuccessfulRemoteDataObject$, +} from '../utilities/remote-data.utils'; import { testCreateDataImplementation } from './base/create-data.spec'; import { testDeleteDataImplementation } from './base/delete-data.spec'; import { testFindAllDataImplementation } from './base/find-all-data.spec'; diff --git a/src/app/core/data/update-data.service.ts b/projects/dspace/core/src/lib/data/update-data.service.ts similarity index 93% rename from src/app/core/data/update-data.service.ts rename to projects/dspace/core/src/lib/data/update-data.service.ts index 6a8a0c63e8c..53bb7482787 100644 --- a/src/app/core/data/update-data.service.ts +++ b/projects/dspace/core/src/lib/data/update-data.service.ts @@ -1,63 +1,31 @@ +import { RestRequestMethod } from '@dspace/config'; +import { hasValue } from '@dspace/utils'; import { Operation } from 'fast-json-patch'; -import { - AsyncSubject, - from as observableFrom, - Observable, -} from 'rxjs'; -import { - find, - map, - mergeMap, - switchMap, - take, - toArray, -} from 'rxjs/operators'; +import { AsyncSubject, from as observableFrom, Observable } from 'rxjs'; +import { find, map, mergeMap, switchMap, take, toArray } from 'rxjs/operators'; -import { hasValue } from '../../shared/empty.util'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { CacheableObject } from '../cache/cacheable-object.model'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheEntry } from '../cache/object-cache.reducer'; import { ObjectCacheService } from '../cache/object-cache.service'; +import { NotificationsService } from '../notification-system/notifications.service'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { NoContent } from '../shared/NoContent.model'; -import { - CreateData, - CreateDataImpl, -} from './base/create-data'; -import { - DeleteData, - DeleteDataImpl, -} from './base/delete-data'; -import { - FindAllData, - FindAllDataImpl, -} from './base/find-all-data'; +import { CreateData, CreateDataImpl } from './base/create-data'; +import { DeleteData, DeleteDataImpl } from './base/delete-data'; +import { FindAllData, FindAllDataImpl } from './base/find-all-data'; import { IdentifiableDataService } from './base/identifiable-data.service'; -import { - PatchData, - PatchDataImpl, -} from './base/patch-data'; -import { - PutData, - PutDataImpl, -} from './base/put-data'; -import { - SearchData, - SearchDataImpl, -} from './base/search-data'; +import { PatchData, PatchDataImpl } from './base/patch-data'; +import { PutData, PutDataImpl } from './base/put-data'; +import { SearchData, SearchDataImpl } from './base/search-data'; import { ChangeAnalyzer } from './change-analyzer'; import { FindListOptions } from './find-list-options.model'; import { PaginatedList } from './paginated-list.model'; import { RemoteData } from './remote-data'; -import { - DeleteByIDRequest, - PostRequest, -} from './request.models'; +import { DeleteByIDRequest, PostRequest } from './request.models'; import { RequestService } from './request.service'; -import { RestRequestMethod } from './rest-request-method'; /** * Interface to list the methods used by the injected service in components diff --git a/src/app/core/data/version-data.service.spec.ts b/projects/dspace/core/src/lib/data/version-data.service.spec.ts similarity index 94% rename from src/app/core/data/version-data.service.spec.ts rename to projects/dspace/core/src/lib/data/version-data.service.spec.ts index f62a3d05776..3e53585a825 100644 --- a/src/app/core/data/version-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/version-data.service.spec.ts @@ -1,24 +1,20 @@ -import { - cold, - getTestScheduler, - hot, -} from 'jasmine-marbles'; +import { cold, getTestScheduler, hot } from 'jasmine-marbles'; import { of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { getMockHrefOnlyDataService } from '../../shared/mocks/href-only-data.service.mock'; -import { - createSuccessfulRemoteDataObject, - createSuccessfulRemoteDataObject$, -} from '../../shared/remote-data.utils'; -import { followLink } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { RestResponse } from '../cache/response.models'; +import { followLink } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { Item } from '../shared/item.model'; import { Version } from '../shared/version.model'; import { VersionHistory } from '../shared/version-history.model'; +import { getMockHrefOnlyDataService } from '../testing/href-only-data.service.mock'; +import { + createSuccessfulRemoteDataObject, + createSuccessfulRemoteDataObject$, +} from '../utilities/remote-data.utils'; import { testPatchDataImplementation } from './base/patch-data.spec'; import { HrefOnlyDataService } from './href-only-data.service'; import { RequestService } from './request.service'; diff --git a/src/app/core/data/version-data.service.ts b/projects/dspace/core/src/lib/data/version-data.service.ts similarity index 91% rename from src/app/core/data/version-data.service.ts rename to projects/dspace/core/src/lib/data/version-data.service.ts index 86d9276756c..8d7774b9390 100644 --- a/src/app/core/data/version-data.service.ts +++ b/projects/dspace/core/src/lib/data/version-data.service.ts @@ -1,31 +1,22 @@ import { Injectable } from '@angular/core'; +import { RestRequestMethod } from '@dspace/config'; +import { isNotEmpty } from '@dspace/utils'; import { Operation } from 'fast-json-patch'; -import { - EMPTY, - Observable, -} from 'rxjs'; -import { - map, - switchMap, -} from 'rxjs/operators'; +import { EMPTY, Observable } from 'rxjs'; +import { map, switchMap } from 'rxjs/operators'; -import { isNotEmpty } from '../../shared/empty.util'; -import { followLink } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; +import { followLink } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { getFirstSucceededRemoteDataPayload } from '../shared/operators'; import { Version } from '../shared/version.model'; import { VersionHistory } from '../shared/version-history.model'; import { IdentifiableDataService } from './base/identifiable-data.service'; -import { - PatchData, - PatchDataImpl, -} from './base/patch-data'; +import { PatchData, PatchDataImpl } from './base/patch-data'; import { DefaultChangeAnalyzer } from './default-change-analyzer.service'; import { RemoteData } from './remote-data'; import { RequestService } from './request.service'; -import { RestRequestMethod } from './rest-request-method'; /** * Service responsible for handling requests related to the Version object diff --git a/src/app/core/data/version-history-data.service.spec.ts b/projects/dspace/core/src/lib/data/version-history-data.service.spec.ts similarity index 93% rename from src/app/core/data/version-history-data.service.spec.ts rename to projects/dspace/core/src/lib/data/version-history-data.service.spec.ts index 607b938561b..840dab06753 100644 --- a/src/app/core/data/version-history-data.service.spec.ts +++ b/projects/dspace/core/src/lib/data/version-history-data.service.spec.ts @@ -1,19 +1,16 @@ -import { - fakeAsync, - waitForAsync, -} from '@angular/core/testing'; +import { fakeAsync, waitForAsync } from '@angular/core/testing'; import { of } from 'rxjs'; -import { getMockRequestService } from '../../shared/mocks/request.service.mock'; -import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; -import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; -import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub'; -import { createPaginatedList } from '../../shared/testing/utils.test'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { Item } from '../shared/item.model'; import { Version } from '../shared/version.model'; import { VersionHistory } from '../shared/version-history.model'; +import { HALEndpointServiceStub } from '../testing/hal-endpoint-service.stub'; +import { NotificationsServiceStub } from '../testing/notifications-service.stub'; +import { getMockRequestService } from '../testing/request.service.mock'; +import { createPaginatedList } from '../testing/utils.test'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; import { RequestService } from './request.service'; import { VersionDataService } from './version-data.service'; import { VersionHistoryDataService } from './version-history-data.service'; diff --git a/src/app/core/data/version-history-data.service.ts b/projects/dspace/core/src/lib/data/version-history-data.service.ts similarity index 94% rename from src/app/core/data/version-history-data.service.ts rename to projects/dspace/core/src/lib/data/version-history-data.service.ts index 01ac0e765dc..21a128b76e1 100644 --- a/src/app/core/data/version-history-data.service.ts +++ b/projects/dspace/core/src/lib/data/version-history-data.service.ts @@ -1,31 +1,14 @@ import { HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { - combineLatest, - Observable, - of, -} from 'rxjs'; -import { - filter, - find, - map, - switchMap, - take, -} from 'rxjs/operators'; +import { hasValue, hasValueOperator } from '@dspace/utils'; +import { combineLatest, Observable, of } from 'rxjs'; +import { filter, find, map, switchMap, take } from 'rxjs/operators'; -import { - hasValue, - hasValueOperator, -} from '../../shared/empty.util'; -import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model'; -import { PaginatedSearchOptions } from '../../shared/search/models/paginated-search-options.model'; -import { - followLink, - FollowLinkConfig, -} from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; +import { PaginationComponentOptions } from '../pagination/pagination-component-options.model'; +import { followLink, FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { Item } from '../shared/item.model'; import { @@ -34,6 +17,7 @@ import { getFirstSucceededRemoteDataPayload, getRemoteDataPayload, } from '../shared/operators'; +import { PaginatedSearchOptions } from '../shared/search/models/paginated-search-options.model'; import { Version } from '../shared/version.model'; import { VersionHistory } from '../shared/version-history.model'; import { IdentifiableDataService } from './base/identifiable-data.service'; diff --git a/src/app/core/data/workflow-action-data.service.ts b/projects/dspace/core/src/lib/data/workflow-action-data.service.ts similarity index 100% rename from src/app/core/data/workflow-action-data.service.ts rename to projects/dspace/core/src/lib/data/workflow-action-data.service.ts diff --git a/src/app/core/drag.service.ts b/projects/dspace/core/src/lib/drag.service.ts similarity index 100% rename from src/app/core/drag.service.ts rename to projects/dspace/core/src/lib/drag.service.ts diff --git a/src/app/core/dspace-rest/dspace-not-null.serializer.ts b/projects/dspace/core/src/lib/dspace-rest/dspace-not-null.serializer.ts similarity index 97% rename from src/app/core/dspace-rest/dspace-not-null.serializer.ts rename to projects/dspace/core/src/lib/dspace-rest/dspace-not-null.serializer.ts index 81f8e2c2bd9..eabae3d983a 100644 --- a/src/app/core/dspace-rest/dspace-not-null.serializer.ts +++ b/projects/dspace/core/src/lib/dspace-rest/dspace-not-null.serializer.ts @@ -1,7 +1,4 @@ -import { - Deserialize, - Serialize, -} from 'cerialize'; +import { Deserialize, Serialize } from 'cerialize'; import { Serializer } from '../serializer'; import { GenericConstructor } from '../shared/generic-constructor'; diff --git a/src/app/core/dspace-rest/dspace-rest.interceptor.spec.ts b/projects/dspace/core/src/lib/dspace-rest/dspace-rest.interceptor.spec.ts similarity index 95% rename from src/app/core/dspace-rest/dspace-rest.interceptor.spec.ts rename to projects/dspace/core/src/lib/dspace-rest/dspace-rest.interceptor.spec.ts index 4a47ffe9fd2..b0bb9711de2 100644 --- a/src/app/core/dspace-rest/dspace-rest.interceptor.spec.ts +++ b/projects/dspace/core/src/lib/dspace-rest/dspace-rest.interceptor.spec.ts @@ -1,18 +1,9 @@ -import { - HTTP_INTERCEPTORS, - HttpClient, -} from '@angular/common/http'; -import { - HttpClientTestingModule, - HttpTestingController, -} from '@angular/common/http/testing'; +import { HTTP_INTERCEPTORS, HttpClient } from '@angular/common/http'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; import { PLATFORM_ID } from '@angular/core'; import { TestBed } from '@angular/core/testing'; +import { APP_CONFIG, AppConfig } from '@dspace/config'; -import { - APP_CONFIG, - AppConfig, -} from '../../../config/app-config.interface'; import { DspaceRestInterceptor } from './dspace-rest.interceptor'; import { DspaceRestService } from './dspace-rest.service'; diff --git a/src/app/core/dspace-rest/dspace-rest.interceptor.ts b/projects/dspace/core/src/lib/dspace-rest/dspace-rest.interceptor.ts similarity index 79% rename from src/app/core/dspace-rest/dspace-rest.interceptor.ts rename to projects/dspace/core/src/lib/dspace-rest/dspace-rest.interceptor.ts index efd2c12b5d4..11ba776bfa2 100644 --- a/src/app/core/dspace-rest/dspace-rest.interceptor.ts +++ b/projects/dspace/core/src/lib/dspace-rest/dspace-rest.interceptor.ts @@ -1,23 +1,10 @@ import { isPlatformBrowser } from '@angular/common'; -import { - HttpEvent, - HttpHandler, - HttpInterceptor, - HttpRequest, -} from '@angular/common/http'; -import { - Inject, - Injectable, - PLATFORM_ID, -} from '@angular/core'; +import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http'; +import { Inject, Injectable, PLATFORM_ID } from '@angular/core'; +import { APP_CONFIG, AppConfig } from '@dspace/config'; +import { isEmpty } from '@dspace/utils'; import { Observable } from 'rxjs'; -import { - APP_CONFIG, - AppConfig, -} from '../../../config/app-config.interface'; -import { isEmpty } from '../../shared/empty.util'; - @Injectable() /** * This Interceptor is used to use the configured base URL for the request made during SSR execution diff --git a/src/app/core/dspace-rest/dspace-rest.schema.json b/projects/dspace/core/src/lib/dspace-rest/dspace-rest.schema.json similarity index 100% rename from src/app/core/dspace-rest/dspace-rest.schema.json rename to projects/dspace/core/src/lib/dspace-rest/dspace-rest.schema.json diff --git a/src/app/core/dspace-rest/dspace-rest.service.spec.ts b/projects/dspace/core/src/lib/dspace-rest/dspace-rest.service.spec.ts similarity index 93% rename from src/app/core/dspace-rest/dspace-rest.service.spec.ts rename to projects/dspace/core/src/lib/dspace-rest/dspace-rest.service.spec.ts index 04f44fc942f..e09a8ee92d7 100644 --- a/src/app/core/dspace-rest/dspace-rest.service.spec.ts +++ b/projects/dspace/core/src/lib/dspace-rest/dspace-rest.service.spec.ts @@ -4,21 +4,12 @@ import { provideHttpClient, withInterceptorsFromDi, } from '@angular/common/http'; -import { - HttpTestingController, - provideHttpClientTesting, -} from '@angular/common/http/testing'; -import { - inject, - TestBed, -} from '@angular/core/testing'; +import { HttpTestingController, provideHttpClientTesting } from '@angular/common/http/testing'; +import { inject, TestBed } from '@angular/core/testing'; +import { RestRequestMethod } from '@dspace/config'; -import { RestRequestMethod } from '../data/rest-request-method'; import { DSpaceObject } from '../shared/dspace-object.model'; -import { - DEFAULT_CONTENT_TYPE, - DspaceRestService, -} from './dspace-rest.service'; +import { DEFAULT_CONTENT_TYPE, DspaceRestService } from './dspace-rest.service'; describe('DspaceRestService', () => { let dspaceRestService: DspaceRestService; diff --git a/src/app/core/dspace-rest/dspace-rest.service.ts b/projects/dspace/core/src/lib/dspace-rest/dspace-rest.service.ts similarity index 94% rename from src/app/core/dspace-rest/dspace-rest.service.ts rename to projects/dspace/core/src/lib/dspace-rest/dspace-rest.service.ts index a75cef53bf2..d7dc0d15a10 100644 --- a/src/app/core/dspace-rest/dspace-rest.service.ts +++ b/projects/dspace/core/src/lib/dspace-rest/dspace-rest.service.ts @@ -6,21 +6,12 @@ import { HttpResponse, } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { - Observable, - throwError as observableThrowError, -} from 'rxjs'; -import { - catchError, - map, -} from 'rxjs/operators'; +import { RestRequestMethod } from '@dspace/config'; +import { hasNoValue, isNotEmpty } from '@dspace/utils'; +import { Observable, throwError as observableThrowError } from 'rxjs'; +import { catchError, map } from 'rxjs/operators'; -import { - hasNoValue, - isNotEmpty, -} from '../../shared/empty.util'; import { RequestError } from '../data/request-error.model'; -import { RestRequestMethod } from '../data/rest-request-method'; import { DSpaceObject } from '../shared/dspace-object.model'; import { RawRestResponse } from './raw-rest-response.model'; diff --git a/src/app/core/dspace-rest/dspace.serializer.spec.ts b/projects/dspace/core/src/lib/dspace-rest/dspace.serializer.spec.ts similarity index 98% rename from src/app/core/dspace-rest/dspace.serializer.spec.ts rename to projects/dspace/core/src/lib/dspace-rest/dspace.serializer.spec.ts index 169dd97a579..7b653907c13 100644 --- a/src/app/core/dspace-rest/dspace.serializer.spec.ts +++ b/projects/dspace/core/src/lib/dspace-rest/dspace.serializer.spec.ts @@ -1,7 +1,4 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; +import { autoserialize, deserialize } from 'cerialize'; import { HALLink } from '../shared/hal-link.model'; import { HALResource } from '../shared/hal-resource.model'; diff --git a/src/app/core/dspace-rest/dspace.serializer.ts b/projects/dspace/core/src/lib/dspace-rest/dspace.serializer.ts similarity index 96% rename from src/app/core/dspace-rest/dspace.serializer.ts rename to projects/dspace/core/src/lib/dspace-rest/dspace.serializer.ts index ccf2d9a6344..f77818a8f5a 100644 --- a/src/app/core/dspace-rest/dspace.serializer.ts +++ b/projects/dspace/core/src/lib/dspace-rest/dspace.serializer.ts @@ -1,7 +1,4 @@ -import { - Deserialize, - Serialize, -} from 'cerialize'; +import { Deserialize, Serialize } from 'cerialize'; import { Serializer } from '../serializer'; import { GenericConstructor } from '../shared/generic-constructor'; diff --git a/src/app/shared/mocks/dspace-rest/endpoint-mocking-rest.service.spec.ts b/projects/dspace/core/src/lib/dspace-rest/endpoint-mocking-rest.service.spec.ts similarity index 92% rename from src/app/shared/mocks/dspace-rest/endpoint-mocking-rest.service.spec.ts rename to projects/dspace/core/src/lib/dspace-rest/endpoint-mocking-rest.service.spec.ts index 4a8aabce370..1161e99891f 100644 --- a/src/app/shared/mocks/dspace-rest/endpoint-mocking-rest.service.spec.ts +++ b/projects/dspace/core/src/lib/dspace-rest/endpoint-mocking-rest.service.spec.ts @@ -1,10 +1,7 @@ -import { - HttpHeaders, - HttpResponse, -} from '@angular/common/http'; +import { HttpHeaders, HttpResponse } from '@angular/common/http'; +import { RestRequestMethod } from '@dspace/config'; import { of } from 'rxjs'; -import { RestRequestMethod } from '../../../core/data/rest-request-method'; import { EndpointMockingRestService } from './endpoint-mocking-rest.service'; import { ResponseMapMock } from './mocks/response-map.mock'; @@ -31,7 +28,7 @@ describe('EndpointMockingRestService', () => { request: of(serverHttpResponse), }); - service = new EndpointMockingRestService(mockResponseMap, httpStub); + service = new EndpointMockingRestService(mockResponseMap, httpStub, {} as any); }); describe('get', () => { diff --git a/src/app/shared/mocks/dspace-rest/endpoint-mocking-rest.service.ts b/projects/dspace/core/src/lib/dspace-rest/endpoint-mocking-rest.service.ts similarity index 81% rename from src/app/shared/mocks/dspace-rest/endpoint-mocking-rest.service.ts rename to projects/dspace/core/src/lib/dspace-rest/endpoint-mocking-rest.service.ts index c3084f202bb..b9e16641310 100644 --- a/src/app/shared/mocks/dspace-rest/endpoint-mocking-rest.service.ts +++ b/projects/dspace/core/src/lib/dspace-rest/endpoint-mocking-rest.service.ts @@ -1,28 +1,12 @@ -import { - HttpClient, - HttpHeaders, -} from '@angular/common/http'; -import { - Inject, - Injectable, -} from '@angular/core'; -import { - Observable, - of, -} from 'rxjs'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { Inject, Injectable } from '@angular/core'; +import { RestRequestMethod, APP_CONFIG, AppConfig } from '@dspace/config'; +import { isEmpty } from '@dspace/utils'; +import { Observable, of } from 'rxjs'; -import { environment } from '../../../../environments/environment'; -import { RestRequestMethod } from '../../../core/data/rest-request-method'; -import { - DspaceRestService, - HttpOptions, -} from '../../../core/dspace-rest/dspace-rest.service'; -import { RawRestResponse } from '../../../core/dspace-rest/raw-rest-response.model'; -import { isEmpty } from '../../empty.util'; -import { - MOCK_RESPONSE_MAP, - ResponseMapMock, -} from './mocks/response-map.mock'; +import { DspaceRestService, HttpOptions } from './dspace-rest.service'; +import { MOCK_RESPONSE_MAP, ResponseMapMock } from './mocks/response-map.mock'; +import { RawRestResponse } from './raw-rest-response.model'; /** * Service to access DSpace's REST API. @@ -37,6 +21,7 @@ export class EndpointMockingRestService extends DspaceRestService { constructor( @Inject(MOCK_RESPONSE_MAP) protected mockResponseMap: ResponseMapMock, protected http: HttpClient, + @Inject(APP_CONFIG) protected appConfig: AppConfig, ) { super(http); } @@ -117,7 +102,7 @@ export class EndpointMockingRestService extends DspaceRestService { } else { // didn't find an exact match for the url, try to match only the endpoint without namespace and parameters const url = new URL(urlStr); - key = url.pathname.slice(environment.rest.nameSpace.length); + key = url.pathname.slice(this.appConfig.rest.nameSpace.length); } if (this.mockResponseMap.has(key)) { // parse and stringify to clone the object to ensure that any changes made diff --git a/projects/dspace/core/src/lib/dspace-rest/index.ts b/projects/dspace/core/src/lib/dspace-rest/index.ts new file mode 100644 index 00000000000..6a770b857d9 --- /dev/null +++ b/projects/dspace/core/src/lib/dspace-rest/index.ts @@ -0,0 +1,15 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './dspace-not-null.serializer'; +export * from './dspace-rest.interceptor.spec'; +export * from './dspace-rest.interceptor'; +export * from './dspace-rest.service.spec'; +export * from './dspace-rest.service'; +export * from './dspace.serializer.spec'; +export * from './dspace.serializer'; +export * from './endpoint-mocking-rest.service.spec'; +export * from './endpoint-mocking-rest.service'; +export * from './raw-rest-response.model'; +export * from './mocks/index'; diff --git a/projects/dspace/core/src/lib/dspace-rest/mocks/index.ts b/projects/dspace/core/src/lib/dspace-rest/mocks/index.ts new file mode 100644 index 00000000000..1a1de1cab9a --- /dev/null +++ b/projects/dspace/core/src/lib/dspace-rest/mocks/index.ts @@ -0,0 +1,5 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './response-map.mock'; diff --git a/src/app/shared/mocks/dspace-rest/mocks/mock-publication-response.json b/projects/dspace/core/src/lib/dspace-rest/mocks/mock-publication-response.json similarity index 100% rename from src/app/shared/mocks/dspace-rest/mocks/mock-publication-response.json rename to projects/dspace/core/src/lib/dspace-rest/mocks/mock-publication-response.json diff --git a/src/app/shared/mocks/dspace-rest/mocks/mock-submission-response.json b/projects/dspace/core/src/lib/dspace-rest/mocks/mock-submission-response.json similarity index 100% rename from src/app/shared/mocks/dspace-rest/mocks/mock-submission-response.json rename to projects/dspace/core/src/lib/dspace-rest/mocks/mock-submission-response.json diff --git a/src/app/shared/mocks/dspace-rest/mocks/mock-untyped-item-response.json b/projects/dspace/core/src/lib/dspace-rest/mocks/mock-untyped-item-response.json similarity index 100% rename from src/app/shared/mocks/dspace-rest/mocks/mock-untyped-item-response.json rename to projects/dspace/core/src/lib/dspace-rest/mocks/mock-untyped-item-response.json diff --git a/src/app/shared/mocks/dspace-rest/mocks/response-map.mock.ts b/projects/dspace/core/src/lib/dspace-rest/mocks/response-map.mock.ts similarity index 100% rename from src/app/shared/mocks/dspace-rest/mocks/response-map.mock.ts rename to projects/dspace/core/src/lib/dspace-rest/mocks/response-map.mock.ts diff --git a/src/app/core/dspace-rest/raw-rest-response.model.ts b/projects/dspace/core/src/lib/dspace-rest/raw-rest-response.model.ts similarity index 100% rename from src/app/core/dspace-rest/raw-rest-response.model.ts rename to projects/dspace/core/src/lib/dspace-rest/raw-rest-response.model.ts diff --git a/src/app/core/end-user-agreement/end-user-agreement.service.spec.ts b/projects/dspace/core/src/lib/end-user-agreement/end-user-agreement.service.spec.ts similarity index 96% rename from src/app/core/end-user-agreement/end-user-agreement.service.spec.ts rename to projects/dspace/core/src/lib/end-user-agreement/end-user-agreement.service.spec.ts index e6ddcc48f16..5cd8725fa6c 100644 --- a/src/app/core/end-user-agreement/end-user-agreement.service.spec.ts +++ b/projects/dspace/core/src/lib/end-user-agreement/end-user-agreement.service.spec.ts @@ -1,8 +1,8 @@ import { of } from 'rxjs'; -import { CookieServiceMock } from '../../shared/mocks/cookie.service.mock'; -import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; import { EPerson } from '../eperson/models/eperson.model'; +import { CookieServiceMock } from '../testing/cookie.service.mock'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; import { END_USER_AGREEMENT_COOKIE, END_USER_AGREEMENT_METADATA_FIELD, diff --git a/src/app/core/end-user-agreement/end-user-agreement.service.ts b/projects/dspace/core/src/lib/end-user-agreement/end-user-agreement.service.ts similarity index 94% rename from src/app/core/end-user-agreement/end-user-agreement.service.ts rename to projects/dspace/core/src/lib/end-user-agreement/end-user-agreement.service.ts index 127ed8ab85a..7efe556611c 100644 --- a/src/app/core/end-user-agreement/end-user-agreement.service.ts +++ b/projects/dspace/core/src/lib/end-user-agreement/end-user-agreement.service.ts @@ -1,18 +1,11 @@ import { Injectable } from '@angular/core'; -import { - Observable, - of, -} from 'rxjs'; -import { - map, - switchMap, - take, -} from 'rxjs/operators'; +import { hasValue } from '@dspace/utils'; +import { Observable, of } from 'rxjs'; +import { map, switchMap, take } from 'rxjs/operators'; -import { hasValue } from '../../shared/empty.util'; import { AuthService } from '../auth/auth.service'; +import { CookieService } from '../cookies/cookie.service'; import { EPersonDataService } from '../eperson/eperson-data.service'; -import { CookieService } from '../services/cookie.service'; import { getFirstCompletedRemoteData } from '../shared/operators'; export const END_USER_AGREEMENT_COOKIE = 'hasAgreedEndUser'; diff --git a/projects/dspace/core/src/lib/end-user-agreement/index.ts b/projects/dspace/core/src/lib/end-user-agreement/index.ts new file mode 100644 index 00000000000..fd6e55781ce --- /dev/null +++ b/projects/dspace/core/src/lib/end-user-agreement/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './end-user-agreement.service.spec'; +export * from './end-user-agreement.service'; diff --git a/src/app/core/eperson/eperson-data.service.spec.ts b/projects/dspace/core/src/lib/eperson/eperson-data.service.spec.ts similarity index 85% rename from src/app/core/eperson/eperson-data.service.spec.ts rename to projects/dspace/core/src/lib/eperson/eperson-data.service.spec.ts index 620ca190b2c..90ee48c30a2 100644 --- a/src/app/core/eperson/eperson-data.service.spec.ts +++ b/projects/dspace/core/src/lib/eperson/eperson-data.service.spec.ts @@ -1,45 +1,10 @@ import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { - fakeAsync, - TestBed, - tick, - waitForAsync, -} from '@angular/core/testing'; +import { fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing'; import { Store } from '@ngrx/store'; -import { - MockStore, - provideMockStore, -} from '@ngrx/store/testing'; -import { - compare, - Operation, -} from 'fast-json-patch'; -import { cold } from 'jasmine-marbles'; +import { MockStore, provideMockStore } from '@ngrx/store/testing'; +import { compare, Operation } from 'fast-json-patch'; import { of } from 'rxjs'; -import { - EPeopleRegistryCancelEPersonAction, - EPeopleRegistryEditEPersonAction, -} from '../../access-control/epeople-registry/epeople-registry.actions'; -import { getMockRemoteDataBuildServiceHrefMap } from '../../shared/mocks/remote-data-build.service.mock'; -import { getMockRequestService } from '../../shared/mocks/request.service.mock'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { - createNoContentRemoteDataObject$, - createSuccessfulRemoteDataObject$, -} from '../../shared/remote-data.utils'; -import { - EPersonMock, - EPersonMock2, - EPersonMockWithNoName, -} from '../../shared/testing/eperson.mock'; -import { GroupMock } from '../../shared/testing/group-mock'; -import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; -import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub'; -import { - createPaginatedList, - createRequestEntry$, -} from '../../shared/testing/utils.test'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; @@ -48,17 +13,23 @@ import { ChangeAnalyzer } from '../data/change-analyzer'; import { DSOChangeAnalyzer } from '../data/dso-change-analyzer.service'; import { FindListOptions } from '../data/find-list-options.model'; import { RemoteData } from '../data/remote-data'; -import { - PatchRequest, - PostRequest, -} from '../data/request.models'; +import { PatchRequest, PostRequest } from '../data/request.models'; import { RequestService } from '../data/request.service'; +import { NotificationsService } from '../notification-system/notifications.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { Item } from '../shared/item.model'; +import { EPersonMock, EPersonMock2, EPersonMockWithNoName } from '../testing/eperson.mock'; +import { GroupMock } from '../testing/group-mock'; +import { HALEndpointServiceStub } from '../testing/hal-endpoint-service.stub'; +import { NotificationsServiceStub } from '../testing/notifications-service.stub'; +import { getMockRemoteDataBuildServiceHrefMap } from '../testing/remote-data-build.service.mock'; +import { getMockRequestService } from '../testing/request.service.mock'; +import { createPaginatedList, createRequestEntry$ } from '../testing/utils.test'; import { - editEPersonSelector, - EPersonDataService, -} from './eperson-data.service'; + createNoContentRemoteDataObject$, + createSuccessfulRemoteDataObject$, +} from '../utilities/remote-data.utils'; +import { EPersonDataService } from './eperson-data.service'; import { EPerson } from './models/eperson.model'; describe('EPersonDataService', () => { @@ -327,33 +298,6 @@ describe('EPersonDataService', () => { })); }); - describe('getActiveEPerson', () => { - it('should retrieve the ePerson currently getting edited, if any', () => { - // Update the state with the ePerson (the provideMockStore doesn't update itself when dispatch is called) - store.overrideSelector(editEPersonSelector, EPersonMock); - - expect(service.getActiveEPerson()).toBeObservable(cold('a', { a: EPersonMock })); - }); - - it('should retrieve the ePerson currently getting edited, null if none being edited', () => { - expect(service.getActiveEPerson()).toBeObservable(cold('a', { a: null })); - }); - }); - - describe('cancelEditEPerson', () => { - it('should dispatch a CANCEL_EDIT_EPERSON action', () => { - service.cancelEditEPerson(); - expect(store.dispatch).toHaveBeenCalledWith(new EPeopleRegistryCancelEPersonAction()); - }); - }); - - describe('editEPerson', () => { - it('should dispatch a EDIT_EPERSON action with the EPerson to start editing', () => { - service.editEPerson(EPersonMock); - expect(store.dispatch).toHaveBeenCalledWith(new EPeopleRegistryEditEPersonAction(EPersonMock)); - }); - }); - describe('deleteEPerson', () => { beforeEach(() => { spyOn(service, 'delete').and.returnValue(createNoContentRemoteDataObject$()); diff --git a/src/app/core/eperson/eperson-data.service.ts b/projects/dspace/core/src/lib/eperson/eperson-data.service.ts similarity index 88% rename from src/app/core/eperson/eperson-data.service.ts rename to projects/dspace/core/src/lib/eperson/eperson-data.service.ts index a493f554053..b2d13f61bd3 100644 --- a/src/app/core/eperson/eperson-data.service.ts +++ b/projects/dspace/core/src/lib/eperson/eperson-data.service.ts @@ -1,76 +1,34 @@ import { Injectable } from '@angular/core'; -import { - createSelector, - select, - Store, -} from '@ngrx/store'; +import { RestRequestMethod } from '@dspace/config'; +import { hasNoValue, hasValue } from '@dspace/utils'; import { Operation } from 'fast-json-patch'; import { Observable } from 'rxjs'; -import { - find, - map, - take, -} from 'rxjs/operators'; - -import { getEPersonEditRoute } from '../../access-control/access-control-routing-paths'; -import { - EPeopleRegistryCancelEPersonAction, - EPeopleRegistryEditEPersonAction, -} from '../../access-control/epeople-registry/epeople-registry.actions'; -import { EPeopleRegistryState } from '../../access-control/epeople-registry/epeople-registry.reducers'; -import { AppState } from '../../app.reducer'; -import { - hasNoValue, - hasValue, -} from '../../shared/empty.util'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; +import { find, map, take } from 'rxjs/operators'; + import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; -import { - CreateData, - CreateDataImpl, -} from '../data/base/create-data'; -import { - DeleteData, - DeleteDataImpl, -} from '../data/base/delete-data'; +import { CreateData, CreateDataImpl } from '../data/base/create-data'; +import { DeleteData, DeleteDataImpl } from '../data/base/delete-data'; import { IdentifiableDataService } from '../data/base/identifiable-data.service'; -import { - PatchData, - PatchDataImpl, -} from '../data/base/patch-data'; -import { - SearchData, - SearchDataImpl, -} from '../data/base/search-data'; +import { PatchData, PatchDataImpl } from '../data/base/patch-data'; +import { SearchData, SearchDataImpl } from '../data/base/search-data'; import { DSOChangeAnalyzer } from '../data/dso-change-analyzer.service'; import { FindListOptions } from '../data/find-list-options.model'; -import { - buildPaginatedList, - PaginatedList, -} from '../data/paginated-list.model'; +import { buildPaginatedList, PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; -import { - PatchRequest, - PostRequest, -} from '../data/request.models'; +import { PatchRequest, PostRequest } from '../data/request.models'; import { RequestService } from '../data/request.service'; -import { RestRequestMethod } from '../data/rest-request-method'; +import { NotificationsService } from '../notification-system/notifications.service'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { NoContent } from '../shared/NoContent.model'; -import { - getFirstSucceededRemoteData, - getRemoteDataPayload, -} from '../shared/operators'; +import { getFirstSucceededRemoteData, getRemoteDataPayload } from '../shared/operators'; import { PageInfo } from '../shared/page-info.model'; import { EPerson } from './models/eperson.model'; // todo: optimize imports -const ePeopleRegistryStateSelector = (state: AppState) => state.epeopleRegistry; -export const editEPersonSelector = createSelector(ePeopleRegistryStateSelector, (ePeopleRegistryState: EPeopleRegistryState) => ePeopleRegistryState.editEPerson); /** * A service to retrieve {@link EPerson}s from the REST API & EPerson related CRUD actions @@ -92,7 +50,6 @@ export class EPersonDataService extends IdentifiableDataService impleme protected halService: HALEndpointService, protected comparator: DSOChangeAnalyzer, protected notificationsService: NotificationsService, - protected store: Store, ) { super('epersons', requestService, rdbService, objectCache, halService); @@ -305,28 +262,6 @@ export class EPersonDataService extends IdentifiableDataService impleme this.requestService.setStaleByHrefSubstring(href); } - /** - * Method to retrieve the eperson that is currently being edited - */ - public getActiveEPerson(): Observable { - return this.store.pipe(select(editEPersonSelector)); - } - - /** - * Method to cancel editing an EPerson, dispatches a cancel EPerson action - */ - public cancelEditEPerson() { - this.store.dispatch(new EPeopleRegistryCancelEPersonAction()); - } - - /** - * Method to set the EPerson being edited, dispatches an edit EPerson action - * @param ePerson The EPerson to edit - */ - public editEPerson(ePerson: EPerson) { - this.store.dispatch(new EPeopleRegistryEditEPersonAction(ePerson)); - } - /** * Method to delete an EPerson * @param ePerson The EPerson to delete @@ -335,21 +270,6 @@ export class EPersonDataService extends IdentifiableDataService impleme return this.delete(ePerson.id); } - /** - * Change which ePerson is being edited and return the link for EPeople edit page - * @param ePerson New EPerson to edit - */ - public startEditingNewEPerson(ePerson: EPerson): string { - this.getActiveEPerson().pipe(take(1)).subscribe((activeEPerson: EPerson) => { - if (ePerson === activeEPerson) { - this.cancelEditEPerson(); - } else { - this.editEPerson(ePerson); - } - }); - return getEPersonEditRoute(ePerson.id); - } - /** * Create a new EPerson using a token * @param eperson diff --git a/src/app/core/eperson/group-data.service.spec.ts b/projects/dspace/core/src/lib/eperson/group-data.service.spec.ts similarity index 84% rename from src/app/core/eperson/group-data.service.spec.ts rename to projects/dspace/core/src/lib/eperson/group-data.service.spec.ts index 548eba7b301..ff0911f38ce 100644 --- a/src/app/core/eperson/group-data.service.spec.ts +++ b/projects/dspace/core/src/lib/eperson/group-data.service.spec.ts @@ -2,60 +2,32 @@ import { CommonModule } from '@angular/common'; import { HttpHeaders } from '@angular/common/http'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { TestBed } from '@angular/core/testing'; -import { - Store, - StoreModule, -} from '@ngrx/store'; -import { createMockStore } from '@ngrx/store/testing'; -import { - TranslateLoader, - TranslateModule, -} from '@ngx-translate/core'; -import { - compare, - Operation, -} from 'fast-json-patch'; +import { StoreModule } from '@ngrx/store'; +import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; +import { compare, Operation } from 'fast-json-patch'; import { of } from 'rxjs'; -import { - GroupRegistryCancelGroupAction, - GroupRegistryEditGroupAction, -} from '../../access-control/group-registry/group-registry.actions'; -import { getMockObjectCacheService } from '../../shared/mocks/object-cache.service.mock'; -import { getMockRemoteDataBuildServiceHrefMap } from '../../shared/mocks/remote-data-build.service.mock'; -import { getMockRequestService } from '../../shared/mocks/request.service.mock'; -import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; -import { - EPersonMock, - EPersonMock2, -} from '../../shared/testing/eperson.mock'; -import { - GroupMock, - GroupMock2, -} from '../../shared/testing/group-mock'; -import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; -import { TranslateLoaderMock } from '../../shared/testing/translate-loader.mock'; -import { - createPaginatedList, - createRequestEntry$, -} from '../../shared/testing/utils.test'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheEntry } from '../cache/object-cache.reducer'; -import { CoreState } from '../core-state.model'; import { ChangeAnalyzer } from '../data/change-analyzer'; import { FindListOptions } from '../data/find-list-options.model'; -import { - DeleteRequest, - PostRequest, -} from '../data/request.models'; +import { DeleteRequest, PostRequest } from '../data/request.models'; import { RequestService } from '../data/request.service'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; import { Item } from '../shared/item.model'; +import { EPersonMock, EPersonMock2 } from '../testing/eperson.mock'; +import { GroupMock, GroupMock2 } from '../testing/group-mock'; +import { HALEndpointServiceStub } from '../testing/hal-endpoint-service.stub'; +import { getMockObjectCacheService } from '../testing/object-cache.service.mock'; +import { getMockRemoteDataBuildServiceHrefMap } from '../testing/remote-data-build.service.mock'; +import { getMockRequestService } from '../testing/request.service.mock'; +import { TranslateLoaderMock } from '../testing/translate-loader.mock'; +import { createPaginatedList, createRequestEntry$ } from '../testing/utils.test'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; import { GroupDataService } from './group-data.service'; describe('GroupDataService', () => { let service: GroupDataService; - let store: Store; let requestService: RequestService; let restEndpointURL; @@ -98,16 +70,13 @@ describe('GroupDataService', () => { new DummyChangeAnalyzer() as any, null, null, - store, ); } beforeEach(() => { init(); requestService = getMockRequestService(createRequestEntry$(groups)); - store = createMockStore({}); service = initTestService(); - spyOn(store, 'dispatch'); spyOn(rdbService, 'buildFromRequestUUIDAndAwait').and.callThrough(); }); @@ -266,20 +235,6 @@ describe('GroupDataService', () => { expect(requestService.setStaleByUUID).toHaveBeenCalledWith('request2'); }); }); - - describe('editGroup', () => { - it('should dispatch a EDIT_GROUP action with the group to start editing', () => { - service.editGroup(GroupMock); - expect(store.dispatch).toHaveBeenCalledWith(new GroupRegistryEditGroupAction(GroupMock)); - }); - }); - - describe('cancelEditGroup', () => { - it('should dispatch a CANCEL_EDIT_GROUP action', () => { - service.cancelEditGroup(); - expect(store.dispatch).toHaveBeenCalledWith(new GroupRegistryCancelGroupAction()); - }); - }); }); class DummyChangeAnalyzer implements ChangeAnalyzer { diff --git a/src/app/core/eperson/group-data.service.ts b/projects/dspace/core/src/lib/eperson/group-data.service.ts similarity index 83% rename from src/app/core/eperson/group-data.service.ts rename to projects/dspace/core/src/lib/eperson/group-data.service.ts index 6c9acdd00bb..91e0ddd0925 100644 --- a/src/app/core/eperson/group-data.service.ts +++ b/projects/dspace/core/src/lib/eperson/group-data.service.ts @@ -1,70 +1,36 @@ import { HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { - createSelector, - select, - Store, -} from '@ngrx/store'; +import { RestRequestMethod } from '@dspace/config'; import { Operation } from 'fast-json-patch'; -import { - Observable, - zip as observableZip, -} from 'rxjs'; +import { Observable, zip as observableZip } from 'rxjs'; import { take } from 'rxjs/operators'; -import { getGroupEditRoute } from '../../access-control/access-control-routing-paths'; -import { - GroupRegistryCancelGroupAction, - GroupRegistryEditGroupAction, -} from '../../access-control/group-registry/group-registry.actions'; -import { GroupRegistryState } from '../../access-control/group-registry/group-registry.reducers'; -import { AppState } from '../../app.reducer'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { DSONameService } from '../breadcrumbs/dso-name.service'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; -import { - CreateData, - CreateDataImpl, -} from '../data/base/create-data'; -import { - DeleteData, - DeleteDataImpl, -} from '../data/base/delete-data'; +import { CreateData, CreateDataImpl } from '../data/base/create-data'; +import { DeleteData, DeleteDataImpl } from '../data/base/delete-data'; import { IdentifiableDataService } from '../data/base/identifiable-data.service'; -import { - PatchData, - PatchDataImpl, -} from '../data/base/patch-data'; -import { - SearchData, - SearchDataImpl, -} from '../data/base/search-data'; +import { PatchData, PatchDataImpl } from '../data/base/patch-data'; +import { SearchData, SearchDataImpl } from '../data/base/search-data'; import { DSOChangeAnalyzer } from '../data/dso-change-analyzer.service'; import { FindListOptions } from '../data/find-list-options.model'; import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; -import { - CreateRequest, - DeleteRequest, - PostRequest, -} from '../data/request.models'; +import { CreateRequest, DeleteRequest, PostRequest } from '../data/request.models'; import { RequestService } from '../data/request.service'; -import { RestRequestMethod } from '../data/rest-request-method'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; +import { NotificationsService } from '../notification-system/notifications.service'; import { Collection } from '../shared/collection.model'; import { Community } from '../shared/community.model'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { NoContent } from '../shared/NoContent.model'; import { getFirstCompletedRemoteData } from '../shared/operators'; import { EPerson } from './models/eperson.model'; import { Group } from './models/group.model'; -const groupRegistryStateSelector = (state: AppState) => state.groupRegistry; -const editGroupSelector = createSelector(groupRegistryStateSelector, (groupRegistryState: GroupRegistryState) => groupRegistryState.editGroup); - /** * Provides methods to retrieve eperson group resources from the REST API & Group related CRUD actions. */ @@ -87,7 +53,6 @@ export class GroupDataService extends IdentifiableDataService implements protected comparator: DSOChangeAnalyzer, protected notificationsService: NotificationsService, protected nameService: DSONameService, - protected store: Store, ) { super('groups', requestService, rdbService, objectCache, halService); @@ -230,27 +195,7 @@ export class GroupDataService extends IdentifiableDataService implements )); } - /** - * Method to retrieve the group that is currently being edited - */ - public getActiveGroup(): Observable { - return this.store.pipe(select(editGroupSelector)); - } - /** - * Method to cancel editing a group, dispatches a cancel group action - */ - public cancelEditGroup() { - this.store.dispatch(new GroupRegistryCancelGroupAction()); - } - - /** - * Method to set the group being edited, dispatches an edit group action - * @param group The group to edit - */ - public editGroup(group: Group) { - this.store.dispatch(new GroupRegistryEditGroupAction(group)); - } /** * Method that clears a cached groups request @@ -272,37 +217,6 @@ export class GroupDataService extends IdentifiableDataService implements return '/access-control/groups'; } - /** - * Change which group is being edited and return the link for the edit page of the new group being edited - * @param newGroup New group to edit - */ - public startEditingNewGroup(newGroup: Group): string { - this.getActiveGroup().pipe(take(1)).subscribe((activeGroup: Group) => { - if (newGroup === activeGroup) { - this.cancelEditGroup(); - } else { - this.editGroup(newGroup); - } - }); - return this.getGroupEditPageRouterLinkWithID(newGroup.id); - } - - /** - * Get Edit page of group - * @param group Group we want edit page for - */ - public getGroupEditPageRouterLink(group: Group): string { - return getGroupEditRoute(group.id); - } - - /** - * Get Edit page of group - * @param groupID Group ID we want edit page for - */ - public getGroupEditPageRouterLinkWithID(groupID: string): string { - return getGroupEditRoute(groupID); - } - /** * Extract optional UUID from a string * @param stringWithUUID String with possible UUID diff --git a/projects/dspace/core/src/lib/eperson/index.ts b/projects/dspace/core/src/lib/eperson/index.ts new file mode 100644 index 00000000000..7a64bad08c1 --- /dev/null +++ b/projects/dspace/core/src/lib/eperson/index.ts @@ -0,0 +1,9 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './eperson-data.service.spec'; +export * from './eperson-data.service'; +export * from './group-data.service.spec'; +export * from './group-data.service'; +export * from './models/index'; diff --git a/src/app/core/eperson/models/eperson-dto.model.ts b/projects/dspace/core/src/lib/eperson/models/eperson-dto.model.ts similarity index 100% rename from src/app/core/eperson/models/eperson-dto.model.ts rename to projects/dspace/core/src/lib/eperson/models/eperson-dto.model.ts diff --git a/src/app/core/eperson/models/eperson.model.ts b/projects/dspace/core/src/lib/eperson/models/eperson.model.ts similarity index 89% rename from src/app/core/eperson/models/eperson.model.ts rename to projects/dspace/core/src/lib/eperson/models/eperson.model.ts index 71d33fcafbb..c8e8f37648e 100644 --- a/src/app/core/eperson/models/eperson.model.ts +++ b/projects/dspace/core/src/lib/eperson/models/eperson.model.ts @@ -1,19 +1,13 @@ -import { - autoserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, inheritSerialization } from 'cerialize'; import { Observable } from 'rxjs'; -import { ListableObject } from '../../../shared/object-collection/shared/listable-object.model'; -import { - link, - typedObject, -} from '../../cache/builders/build-decorators'; +import { link, typedObject } from '../../cache/builders/build-decorators'; import { PaginatedList } from '../../data/paginated-list.model'; import { RemoteData } from '../../data/remote-data'; import { DSpaceObject } from '../../shared/dspace-object.model'; import { GenericConstructor } from '../../shared/generic-constructor'; import { HALLink } from '../../shared/hal-link.model'; +import { ListableObject } from '../../shared/object-collection/listable-object.model'; import { EPERSON } from './eperson.resource-type'; import { Group } from './group.model'; import { GROUP } from './group.resource-type'; diff --git a/src/app/core/eperson/models/eperson.resource-type.ts b/projects/dspace/core/src/lib/eperson/models/eperson.resource-type.ts similarity index 100% rename from src/app/core/eperson/models/eperson.resource-type.ts rename to projects/dspace/core/src/lib/eperson/models/eperson.resource-type.ts diff --git a/src/app/core/eperson/models/group-dto.model.ts b/projects/dspace/core/src/lib/eperson/models/group-dto.model.ts similarity index 100% rename from src/app/core/eperson/models/group-dto.model.ts rename to projects/dspace/core/src/lib/eperson/models/group-dto.model.ts diff --git a/src/app/core/eperson/models/group.model.ts b/projects/dspace/core/src/lib/eperson/models/group.model.ts similarity index 91% rename from src/app/core/eperson/models/group.model.ts rename to projects/dspace/core/src/lib/eperson/models/group.model.ts index 71923d6c55c..6d1300866f5 100644 --- a/src/app/core/eperson/models/group.model.ts +++ b/projects/dspace/core/src/lib/eperson/models/group.model.ts @@ -1,15 +1,7 @@ -import { - autoserialize, - autoserializeAs, - deserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, autoserializeAs, deserialize, inheritSerialization } from 'cerialize'; import { Observable } from 'rxjs'; -import { - link, - typedObject, -} from '../../cache/builders/build-decorators'; +import { link, typedObject } from '../../cache/builders/build-decorators'; import { PaginatedList } from '../../data/paginated-list.model'; import { RemoteData } from '../../data/remote-data'; import { DSpaceObject } from '../../shared/dspace-object.model'; diff --git a/src/app/core/eperson/models/group.resource-type.ts b/projects/dspace/core/src/lib/eperson/models/group.resource-type.ts similarity index 100% rename from src/app/core/eperson/models/group.resource-type.ts rename to projects/dspace/core/src/lib/eperson/models/group.resource-type.ts diff --git a/projects/dspace/core/src/lib/eperson/models/index.ts b/projects/dspace/core/src/lib/eperson/models/index.ts new file mode 100644 index 00000000000..e2a6d7caefe --- /dev/null +++ b/projects/dspace/core/src/lib/eperson/models/index.ts @@ -0,0 +1,12 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './eperson-dto.model'; +export * from './eperson.model'; +export * from './eperson.resource-type'; +export * from './group-dto.model'; +export * from './group.model'; +export * from './group.resource-type'; +export * from './workflowitem.resource-type'; +export * from './workspaceitem.resource-type'; diff --git a/src/app/core/eperson/models/workflowitem.resource-type.ts b/projects/dspace/core/src/lib/eperson/models/workflowitem.resource-type.ts similarity index 100% rename from src/app/core/eperson/models/workflowitem.resource-type.ts rename to projects/dspace/core/src/lib/eperson/models/workflowitem.resource-type.ts diff --git a/src/app/core/eperson/models/workspaceitem.resource-type.ts b/projects/dspace/core/src/lib/eperson/models/workspaceitem.resource-type.ts similarity index 100% rename from src/app/core/eperson/models/workspaceitem.resource-type.ts rename to projects/dspace/core/src/lib/eperson/models/workspaceitem.resource-type.ts diff --git a/src/app/core/feedback/feedback-data.service.spec.ts b/projects/dspace/core/src/lib/feedback/feedback-data.service.spec.ts similarity index 89% rename from src/app/core/feedback/feedback-data.service.spec.ts rename to projects/dspace/core/src/lib/feedback/feedback-data.service.spec.ts index 9b666e9776e..bec5cf99e86 100644 --- a/src/app/core/feedback/feedback-data.service.spec.ts +++ b/projects/dspace/core/src/lib/feedback/feedback-data.service.spec.ts @@ -1,13 +1,13 @@ import { Store } from '@ngrx/store'; -import { getMockRequestService } from '../../shared/mocks/request.service.mock'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { CoreState } from '../core-state.model'; import { testCreateDataImplementation } from '../data/base/create-data.spec'; +import { NotificationsService } from '../notification-system/notifications.service'; import { HALLink } from '../shared/hal-link.model'; import { Item } from '../shared/item.model'; +import { HALEndpointServiceStub } from '../testing/hal-endpoint-service.stub'; +import { getMockRequestService } from '../testing/request.service.mock'; import { FeedbackDataService } from './feedback-data.service'; import { Feedback } from './models/feedback.model'; diff --git a/src/app/core/feedback/feedback-data.service.ts b/projects/dspace/core/src/lib/feedback/feedback-data.service.ts similarity index 88% rename from src/app/core/feedback/feedback-data.service.ts rename to projects/dspace/core/src/lib/feedback/feedback-data.service.ts index 53d30bc6ee7..d3dd8ebf80b 100644 --- a/src/app/core/feedback/feedback-data.service.ts +++ b/projects/dspace/core/src/lib/feedback/feedback-data.service.ts @@ -2,22 +2,16 @@ import { Injectable } from '@angular/core'; import { Store } from '@ngrx/store'; import { Observable } from 'rxjs'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; -import { - CreateData, - CreateDataImpl, -} from '../data/base/create-data'; +import { CreateData, CreateDataImpl } from '../data/base/create-data'; import { IdentifiableDataService } from '../data/base/identifiable-data.service'; import { RemoteData } from '../data/remote-data'; import { RequestService } from '../data/request.service'; +import { NotificationsService } from '../notification-system/notifications.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; -import { - getFirstSucceededRemoteData, - getRemoteDataPayload, -} from '../shared/operators'; +import { getFirstSucceededRemoteData, getRemoteDataPayload } from '../shared/operators'; import { Feedback } from './models/feedback.model'; /** diff --git a/src/app/core/feedback/feedback.guard.ts b/projects/dspace/core/src/lib/feedback/feedback.guard.ts similarity index 100% rename from src/app/core/feedback/feedback.guard.ts rename to projects/dspace/core/src/lib/feedback/feedback.guard.ts diff --git a/projects/dspace/core/src/lib/feedback/index.ts b/projects/dspace/core/src/lib/feedback/index.ts new file mode 100644 index 00000000000..e753af2951b --- /dev/null +++ b/projects/dspace/core/src/lib/feedback/index.ts @@ -0,0 +1,8 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './feedback-data.service.spec'; +export * from './feedback-data.service'; +export * from './feedback.guard'; +export * from './models/index'; diff --git a/src/app/core/feedback/models/feedback.model.ts b/projects/dspace/core/src/lib/feedback/models/feedback.model.ts similarity index 91% rename from src/app/core/feedback/models/feedback.model.ts rename to projects/dspace/core/src/lib/feedback/models/feedback.model.ts index e6718cb265b..97a07e0986f 100644 --- a/src/app/core/feedback/models/feedback.model.ts +++ b/projects/dspace/core/src/lib/feedback/models/feedback.model.ts @@ -1,7 +1,4 @@ -import { - autoserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, inheritSerialization } from 'cerialize'; import { typedObject } from '../../cache/builders/build-decorators'; import { DSpaceObject } from '../../shared/dspace-object.model'; diff --git a/src/app/core/feedback/models/feedback.resource-type.ts b/projects/dspace/core/src/lib/feedback/models/feedback.resource-type.ts similarity index 100% rename from src/app/core/feedback/models/feedback.resource-type.ts rename to projects/dspace/core/src/lib/feedback/models/feedback.resource-type.ts diff --git a/projects/dspace/core/src/lib/feedback/models/index.ts b/projects/dspace/core/src/lib/feedback/models/index.ts new file mode 100644 index 00000000000..6aa8910a288 --- /dev/null +++ b/projects/dspace/core/src/lib/feedback/models/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './feedback.model'; +export * from './feedback.resource-type'; diff --git a/src/app/core/forward-client-ip/forward-client-ip.interceptor.spec.ts b/projects/dspace/core/src/lib/forward-client-ip/forward-client-ip.interceptor.spec.ts similarity index 90% rename from src/app/core/forward-client-ip/forward-client-ip.interceptor.spec.ts rename to projects/dspace/core/src/lib/forward-client-ip/forward-client-ip.interceptor.spec.ts index aa45ee5ee3b..86ddcc717ff 100644 --- a/src/app/core/forward-client-ip/forward-client-ip.interceptor.spec.ts +++ b/projects/dspace/core/src/lib/forward-client-ip/forward-client-ip.interceptor.spec.ts @@ -3,13 +3,10 @@ import { provideHttpClient, withInterceptorsFromDi, } from '@angular/common/http'; -import { - HttpTestingController, - provideHttpClientTesting, -} from '@angular/common/http/testing'; +import { HttpTestingController, provideHttpClientTesting } from '@angular/common/http/testing'; import { TestBed } from '@angular/core/testing'; -import { REQUEST } from '../../../express.tokens'; +import { REQUEST } from '../tokens/express.tokens'; import { DspaceRestService } from '../dspace-rest/dspace-rest.service'; import { ForwardClientIpInterceptor } from './forward-client-ip.interceptor'; diff --git a/src/app/core/forward-client-ip/forward-client-ip.interceptor.ts b/projects/dspace/core/src/lib/forward-client-ip/forward-client-ip.interceptor.ts similarity index 81% rename from src/app/core/forward-client-ip/forward-client-ip.interceptor.ts rename to projects/dspace/core/src/lib/forward-client-ip/forward-client-ip.interceptor.ts index 7fe4263d464..ec942b31c92 100644 --- a/src/app/core/forward-client-ip/forward-client-ip.interceptor.ts +++ b/projects/dspace/core/src/lib/forward-client-ip/forward-client-ip.interceptor.ts @@ -1,16 +1,8 @@ -import { - HttpEvent, - HttpHandler, - HttpInterceptor, - HttpRequest, -} from '@angular/common/http'; -import { - Inject, - Injectable, -} from '@angular/core'; +import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http'; +import { Inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs'; -import { REQUEST } from '../../../express.tokens'; +import { REQUEST } from '../tokens/express.tokens'; @Injectable({ providedIn: 'root' }) /** diff --git a/projects/dspace/core/src/lib/forward-client-ip/index.ts b/projects/dspace/core/src/lib/forward-client-ip/index.ts new file mode 100644 index 00000000000..104c47a92e8 --- /dev/null +++ b/projects/dspace/core/src/lib/forward-client-ip/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './forward-client-ip.interceptor.spec'; +export * from './forward-client-ip.interceptor'; diff --git a/src/app/core/google-recaptcha/google-recaptcha.service.spec.ts b/projects/dspace/core/src/lib/google-recaptcha/google-recaptcha.service.spec.ts similarity index 96% rename from src/app/core/google-recaptcha/google-recaptcha.service.spec.ts rename to projects/dspace/core/src/lib/google-recaptcha/google-recaptcha.service.spec.ts index 658d4752124..23e8f169fa6 100644 --- a/src/app/core/google-recaptcha/google-recaptcha.service.spec.ts +++ b/projects/dspace/core/src/lib/google-recaptcha/google-recaptcha.service.spec.ts @@ -1,7 +1,7 @@ import { of } from 'rxjs'; -import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; import { NativeWindowRef } from '../services/window.service'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; import { GoogleRecaptchaService } from './google-recaptcha.service'; describe('GoogleRecaptchaService', () => { diff --git a/src/app/core/google-recaptcha/google-recaptcha.service.ts b/projects/dspace/core/src/lib/google-recaptcha/google-recaptcha.service.ts similarity index 89% rename from src/app/core/google-recaptcha/google-recaptcha.service.ts rename to projects/dspace/core/src/lib/google-recaptcha/google-recaptcha.service.ts index c23223b6785..c2ccb2bd0b4 100644 --- a/src/app/core/google-recaptcha/google-recaptcha.service.ts +++ b/projects/dspace/core/src/lib/google-recaptcha/google-recaptcha.service.ts @@ -1,32 +1,13 @@ import { DOCUMENT } from '@angular/common'; -import { - Inject, - Injectable, - Renderer2, - RendererFactory2, -} from '@angular/core'; -import { - BehaviorSubject, - combineLatest, - EMPTY, - Observable, - of, -} from 'rxjs'; -import { - map, - switchMap, - take, - tap, -} from 'rxjs/operators'; - -import { isNotEmpty } from '../../shared/empty.util'; +import { Inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core'; +import { isNotEmpty } from '@dspace/utils'; +import { BehaviorSubject, combineLatest, EMPTY, Observable, of } from 'rxjs'; +import { map, switchMap, take, tap } from 'rxjs/operators'; + +import { CookieService } from '../cookies/cookie.service'; import { ConfigurationDataService } from '../data/configuration-data.service'; import { RemoteData } from '../data/remote-data'; -import { CookieService } from '../services/cookie.service'; -import { - NativeWindowRef, - NativeWindowService, -} from '../services/window.service'; +import { NativeWindowRef, NativeWindowService } from '../services/window.service'; import { ConfigurationProperty } from '../shared/configuration-property.model'; import { getFirstCompletedRemoteData } from '../shared/operators'; @@ -145,7 +126,7 @@ export class GoogleRecaptchaService { */ public getRecaptchaToken(action) { return this.captchaKey().pipe( - switchMap((key) => grecaptcha.execute(key, { action: action })), + switchMap((key) => this._window.nativeWindow.grecaptcha.execute(key, { action: action })), ); } @@ -153,11 +134,11 @@ export class GoogleRecaptchaService { * Returns an observable of string */ public executeRecaptcha() { - return of(grecaptcha.execute()); + return of(this._window.nativeWindow.grecaptcha.execute()); } public getRecaptchaTokenResponse() { - return grecaptcha.getResponse(); + return this._window.nativeWindow.grecaptcha.getResponse(); } /** diff --git a/projects/dspace/core/src/lib/google-recaptcha/index.ts b/projects/dspace/core/src/lib/google-recaptcha/index.ts new file mode 100644 index 00000000000..5de580095d3 --- /dev/null +++ b/projects/dspace/core/src/lib/google-recaptcha/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './google-recaptcha.service.spec'; +export * from './google-recaptcha.service'; diff --git a/src/app/core/history/history.actions.ts b/projects/dspace/core/src/lib/history/history.actions.ts similarity index 91% rename from src/app/core/history/history.actions.ts rename to projects/dspace/core/src/lib/history/history.actions.ts index ec67bef02d1..ae72fe96279 100644 --- a/src/app/core/history/history.actions.ts +++ b/projects/dspace/core/src/lib/history/history.actions.ts @@ -1,7 +1,7 @@ /* eslint-disable max-classes-per-file */ import { Action } from '@ngrx/store'; -import { type } from '../../shared/ngrx/type'; +import { type } from '../ngrx/type'; export const HistoryActionTypes = { ADD_TO_HISTORY: type('dspace/history/ADD_TO_HISTORY'), diff --git a/src/app/core/history/history.reducer.spec.ts b/projects/dspace/core/src/lib/history/history.reducer.spec.ts similarity index 100% rename from src/app/core/history/history.reducer.spec.ts rename to projects/dspace/core/src/lib/history/history.reducer.spec.ts diff --git a/src/app/core/history/history.reducer.ts b/projects/dspace/core/src/lib/history/history.reducer.ts similarity index 83% rename from src/app/core/history/history.reducer.ts rename to projects/dspace/core/src/lib/history/history.reducer.ts index b39bde69bf7..a073a15466c 100644 --- a/src/app/core/history/history.reducer.ts +++ b/projects/dspace/core/src/lib/history/history.reducer.ts @@ -1,8 +1,4 @@ -import { - AddUrlToHistoryAction, - HistoryAction, - HistoryActionTypes, -} from './history.actions'; +import { AddUrlToHistoryAction, HistoryAction, HistoryActionTypes } from './history.actions'; /** * The auth state. diff --git a/projects/dspace/core/src/lib/history/index.ts b/projects/dspace/core/src/lib/history/index.ts new file mode 100644 index 00000000000..d82bac9e43c --- /dev/null +++ b/projects/dspace/core/src/lib/history/index.ts @@ -0,0 +1,8 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './history.actions'; +export * from './history.reducer.spec'; +export * from './history.reducer'; +export * from './selectors'; diff --git a/src/app/core/history/selectors.ts b/projects/dspace/core/src/lib/history/selectors.ts similarity index 100% rename from src/app/core/history/selectors.ts rename to projects/dspace/core/src/lib/history/selectors.ts diff --git a/projects/dspace/core/src/lib/index.ts b/projects/dspace/core/src/lib/index.ts new file mode 100644 index 00000000000..7384df10ba0 --- /dev/null +++ b/projects/dspace/core/src/lib/index.ts @@ -0,0 +1,61 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './core-state.model'; +export * from './core.effects'; +export * from './core.reducers'; +export * from './core.selectors'; +export * from './data-services-map-type'; +export * from './data-services-map'; +export * from './drag.service'; +export * from './lazy-data-service'; +export * from './provide-core'; +export * from './serializer'; +export * from './auth/index'; +export * from './breadcrumbs/index'; +export * from './browse/index'; +export * from './cache/index'; +export * from './coar-notify/index'; +export * from './config/index'; +export * from './cookies/index'; +export * from './correlation-id/index'; +export * from './data/index'; +export * from './dspace-rest/index'; +export * from './end-user-agreement/index'; +export * from './eperson/index'; +export * from './feedback/index'; +export * from './forward-client-ip/index'; +export * from './google-recaptcha/index'; +export * from './history/index'; +export * from './index/index'; +export * from './json-patch/index'; +export * from './locale/index'; +export * from './log/index'; +export * from './metadata/index'; +export * from './ngrx/index'; +export * from './notification-system/index'; +export * from './notifications/index'; +export * from './orcid/index'; +export * from './pagination/index'; +export * from './processes/index'; +export * from './profile/index'; +export * from './reload/index'; +export * from './resolving/index'; +export * from './resource-policy/index'; +export * from './rest-property/index'; +export * from './roles/index'; +export * from './router/index'; +export * from './server-check/index'; +export * from './services/index'; +export * from './shared/index'; +export * from './statistics/index'; +export * from './submission/index'; +export * from './supervision-order/index'; +export * from './tasks/index'; +export * from './testing/index'; +export * from './tokens/index'; +export * from './url-baser/index'; +export * from './url-combiner/index'; +export * from './utilities/index'; +export * from './xsrf/index'; diff --git a/src/app/core/index/index-name.model.ts b/projects/dspace/core/src/lib/index/index-name.model.ts similarity index 100% rename from src/app/core/index/index-name.model.ts rename to projects/dspace/core/src/lib/index/index-name.model.ts diff --git a/src/app/core/index/index.actions.ts b/projects/dspace/core/src/lib/index/index.actions.ts similarity index 97% rename from src/app/core/index/index.actions.ts rename to projects/dspace/core/src/lib/index/index.actions.ts index fc6bc3494df..a5f8a457a45 100644 --- a/src/app/core/index/index.actions.ts +++ b/projects/dspace/core/src/lib/index/index.actions.ts @@ -1,7 +1,7 @@ /* eslint-disable max-classes-per-file */ import { Action } from '@ngrx/store'; -import { type } from '../../shared/ngrx/type'; +import { type } from '../ngrx/type'; import { IndexName } from './index-name.model'; /** diff --git a/src/app/core/index/index.effects.spec.ts b/projects/dspace/core/src/lib/index/index.effects.spec.ts similarity index 94% rename from src/app/core/index/index.effects.spec.ts rename to projects/dspace/core/src/lib/index/index.effects.spec.ts index 89b5916f45e..5f66d70a1d1 100644 --- a/src/app/core/index/index.effects.spec.ts +++ b/projects/dspace/core/src/lib/index/index.effects.spec.ts @@ -1,17 +1,11 @@ -import { - TestBed, - waitForAsync, -} from '@angular/core/testing'; +import { TestBed, waitForAsync } from '@angular/core/testing'; import { provideMockActions } from '@ngrx/effects/testing'; import { provideMockStore } from '@ngrx/store/testing'; -import { - cold, - hot, -} from 'jasmine-marbles'; +import { cold, hot } from 'jasmine-marbles'; import { Observable } from 'rxjs'; -import { NoOpAction } from '../../shared/ngrx/no-op.action'; import { AddToObjectCacheAction } from '../cache/object-cache.actions'; +import { NoOpAction } from '../ngrx/no-op.action'; import { Item } from '../shared/item.model'; import { AddToIndexAction } from './index.actions'; import { UUIDIndexEffects } from './index.effects'; diff --git a/src/app/core/index/index.effects.ts b/projects/dspace/core/src/lib/index/index.effects.ts similarity index 84% rename from src/app/core/index/index.effects.ts rename to projects/dspace/core/src/lib/index/index.effects.ts index 8fc33145ff7..8d24d762807 100644 --- a/src/app/core/index/index.effects.ts +++ b/projects/dspace/core/src/lib/index/index.effects.ts @@ -1,22 +1,10 @@ import { Injectable } from '@angular/core'; -import { - Actions, - createEffect, - ofType, -} from '@ngrx/effects'; -import { - select, - Store, -} from '@ngrx/store'; -import { - filter, - map, - switchMap, - take, -} from 'rxjs/operators'; +import { RestRequestMethod } from '@dspace/config'; +import { hasValue } from '@dspace/utils'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; +import { select, Store } from '@ngrx/store'; +import { filter, map, switchMap, take } from 'rxjs/operators'; -import { hasValue } from '../../shared/empty.util'; -import { NoOpAction } from '../../shared/ngrx/no-op.action'; import { AddToObjectCacheAction, ObjectCacheActionTypes, @@ -28,15 +16,9 @@ import { RequestConfigureAction, RequestStaleAction, } from '../data/request.actions'; -import { RestRequestMethod } from '../data/rest-request-method'; -import { - AddToIndexAction, - RemoveFromIndexByValueAction, -} from './index.actions'; -import { - getUrlWithoutEmbedParams, - uuidFromHrefSelector, -} from './index.selectors'; +import { NoOpAction } from '../ngrx/no-op.action'; +import { AddToIndexAction, RemoveFromIndexByValueAction } from './index.actions'; +import { getUrlWithoutEmbedParams, uuidFromHrefSelector } from './index.selectors'; import { IndexName } from './index-name.model'; @Injectable() diff --git a/src/app/core/index/index.reducer.spec.ts b/projects/dspace/core/src/lib/index/index.reducer.spec.ts similarity index 97% rename from src/app/core/index/index.reducer.spec.ts rename to projects/dspace/core/src/lib/index/index.reducer.spec.ts index 5f876f6167e..b3c786bd387 100644 --- a/src/app/core/index/index.reducer.spec.ts +++ b/projects/dspace/core/src/lib/index/index.reducer.spec.ts @@ -6,10 +6,7 @@ import { RemoveFromIndexBySubstringAction, RemoveFromIndexByValueAction, } from './index.actions'; -import { - indexReducer, - MetaIndexState, -} from './index.reducer'; +import { indexReducer, MetaIndexState } from './index.reducer'; import { IndexName } from './index-name.model'; class NullAction extends AddToIndexAction { diff --git a/src/app/core/index/index.reducer.ts b/projects/dspace/core/src/lib/index/index.reducer.ts similarity index 100% rename from src/app/core/index/index.reducer.ts rename to projects/dspace/core/src/lib/index/index.reducer.ts diff --git a/src/app/core/index/index.selectors.spec.ts b/projects/dspace/core/src/lib/index/index.selectors.spec.ts similarity index 96% rename from src/app/core/index/index.selectors.spec.ts rename to projects/dspace/core/src/lib/index/index.selectors.spec.ts index bea6290e5a0..1f7881411cb 100644 --- a/src/app/core/index/index.selectors.spec.ts +++ b/projects/dspace/core/src/lib/index/index.selectors.spec.ts @@ -1,7 +1,4 @@ -import { - getEmbedSizeParams, - getUrlWithoutEmbedParams, -} from './index.selectors'; +import { getEmbedSizeParams, getUrlWithoutEmbedParams } from './index.selectors'; describe(`index selectors`, () => { diff --git a/src/app/core/index/index.selectors.ts b/projects/dspace/core/src/lib/index/index.selectors.ts similarity index 95% rename from src/app/core/index/index.selectors.ts rename to projects/dspace/core/src/lib/index/index.selectors.ts index a9d42baa471..15b80f9d55f 100644 --- a/src/app/core/index/index.selectors.ts +++ b/projects/dspace/core/src/lib/index/index.selectors.ts @@ -1,19 +1,10 @@ -import { - createSelector, - MemoizedSelector, -} from '@ngrx/store'; +import { hasValue, isNotEmpty } from '@dspace/utils'; +import { createSelector, MemoizedSelector } from '@ngrx/store'; -import { - hasValue, - isNotEmpty, -} from '../../shared/empty.util'; import { coreSelector } from '../core.selectors'; import { CoreState } from '../core-state.model'; import { URLCombiner } from '../url-combiner/url-combiner'; -import { - IndexState, - MetaIndexState, -} from './index.reducer'; +import { IndexState, MetaIndexState } from './index.reducer'; import { IndexName } from './index-name.model'; /** diff --git a/projects/dspace/core/src/lib/index/index.ts b/projects/dspace/core/src/lib/index/index.ts new file mode 100644 index 00000000000..e5134520f71 --- /dev/null +++ b/projects/dspace/core/src/lib/index/index.ts @@ -0,0 +1,12 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './index-name.model'; +export * from './index.actions'; +export * from './index.effects.spec'; +export * from './index.effects'; +export * from './index.reducer.spec'; +export * from './index.reducer'; +export * from './index.selectors.spec'; +export * from './index.selectors'; diff --git a/projects/dspace/core/src/lib/json-patch/builder/index.ts b/projects/dspace/core/src/lib/json-patch/builder/index.ts new file mode 100644 index 00000000000..3b34d35b17a --- /dev/null +++ b/projects/dspace/core/src/lib/json-patch/builder/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './json-patch-operation-path-combiner'; +export * from './json-patch-operations-builder'; diff --git a/src/app/core/json-patch/builder/json-patch-operation-path-combiner.ts b/projects/dspace/core/src/lib/json-patch/builder/json-patch-operation-path-combiner.ts similarity index 96% rename from src/app/core/json-patch/builder/json-patch-operation-path-combiner.ts rename to projects/dspace/core/src/lib/json-patch/builder/json-patch-operation-path-combiner.ts index 73677a3384a..34204b2e2d2 100644 --- a/src/app/core/json-patch/builder/json-patch-operation-path-combiner.ts +++ b/projects/dspace/core/src/lib/json-patch/builder/json-patch-operation-path-combiner.ts @@ -1,4 +1,5 @@ -import { isNotUndefined } from '../../../shared/empty.util'; +import { isNotUndefined } from '@dspace/utils'; + import { URLCombiner } from '../../url-combiner/url-combiner'; /** diff --git a/src/app/core/json-patch/builder/json-patch-operations-builder.ts b/projects/dspace/core/src/lib/json-patch/builder/json-patch-operations-builder.ts similarity index 95% rename from src/app/core/json-patch/builder/json-patch-operations-builder.ts rename to projects/dspace/core/src/lib/json-patch/builder/json-patch-operations-builder.ts index d56ff011c12..ea20872226c 100644 --- a/src/app/core/json-patch/builder/json-patch-operations-builder.ts +++ b/projects/dspace/core/src/lib/json-patch/builder/json-patch-operations-builder.ts @@ -1,20 +1,22 @@ import { Injectable } from '@angular/core'; -import { Store } from '@ngrx/store'; - import { dateToISOFormat, dateToString, isNgbDateStruct, -} from '../../../shared/date.util'; -import { hasNoValue, hasValue, isEmpty, isNotEmpty, -} from '../../../shared/empty.util'; -import { FormFieldLanguageValueObject } from '../../../shared/form/builder/models/form-field-language-value.model'; -import { FormFieldMetadataValueObject } from '../../../shared/form/builder/models/form-field-metadata-value.model'; +} from '@dspace/utils'; +import { Store } from '@ngrx/store'; + import { CoreState } from '../../core-state.model'; +import { + FormFieldLanguageValueObject, +} from '../../shared/form/models/form-field-language-value.model'; +import { + FormFieldMetadataValueObject, +} from '../../shared/form/models/form-field-metadata-value.model'; import { VocabularyEntry } from '../../submission/vocabularies/models/vocabulary-entry.model'; import { FlushPatchOperationAction, diff --git a/projects/dspace/core/src/lib/json-patch/index.ts b/projects/dspace/core/src/lib/json-patch/index.ts new file mode 100644 index 00000000000..2fe3141ad18 --- /dev/null +++ b/projects/dspace/core/src/lib/json-patch/index.ts @@ -0,0 +1,14 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './json-patch-operations.actions'; +export * from './json-patch-operations.effects.spec'; +export * from './json-patch-operations.effects'; +export * from './json-patch-operations.reducer.spec'; +export * from './json-patch-operations.reducer'; +export * from './json-patch-operations.service.spec'; +export * from './json-patch-operations.service'; +export * from './json-patch.model'; +export * from './selectors'; +export * from './builder/index'; diff --git a/src/app/core/json-patch/json-patch-operations.actions.ts b/projects/dspace/core/src/lib/json-patch/json-patch-operations.actions.ts similarity index 99% rename from src/app/core/json-patch/json-patch-operations.actions.ts rename to projects/dspace/core/src/lib/json-patch/json-patch-operations.actions.ts index 81cce174ec9..39fc81eb8ab 100644 --- a/src/app/core/json-patch/json-patch-operations.actions.ts +++ b/projects/dspace/core/src/lib/json-patch/json-patch-operations.actions.ts @@ -1,7 +1,7 @@ /* eslint-disable max-classes-per-file */ import { Action } from '@ngrx/store'; -import { type } from '../../shared/ngrx/type'; +import { type } from '../ngrx/type'; /** * For each action type in an action group, make a simple diff --git a/src/app/core/json-patch/json-patch-operations.effects.spec.ts b/projects/dspace/core/src/lib/json-patch/json-patch-operations.effects.spec.ts similarity index 95% rename from src/app/core/json-patch/json-patch-operations.effects.spec.ts rename to projects/dspace/core/src/lib/json-patch/json-patch-operations.effects.spec.ts index cbadf7fbd3e..271540e8b8f 100644 --- a/src/app/core/json-patch/json-patch-operations.effects.spec.ts +++ b/projects/dspace/core/src/lib/json-patch/json-patch-operations.effects.spec.ts @@ -1,14 +1,8 @@ import { TestBed } from '@angular/core/testing'; import { provideMockActions } from '@ngrx/effects/testing'; import { Store } from '@ngrx/store'; -import { - cold, - hot, -} from 'jasmine-marbles'; -import { - Observable, - of, -} from 'rxjs'; +import { cold, hot } from 'jasmine-marbles'; +import { Observable, of } from 'rxjs'; import { FlushPatchOperationsAction, diff --git a/src/app/core/json-patch/json-patch-operations.effects.ts b/projects/dspace/core/src/lib/json-patch/json-patch-operations.effects.ts similarity index 91% rename from src/app/core/json-patch/json-patch-operations.effects.ts rename to projects/dspace/core/src/lib/json-patch/json-patch-operations.effects.ts index 49bfabc0c5b..6ad03d9a2b3 100644 --- a/src/app/core/json-patch/json-patch-operations.effects.ts +++ b/projects/dspace/core/src/lib/json-patch/json-patch-operations.effects.ts @@ -1,9 +1,5 @@ import { Injectable } from '@angular/core'; -import { - Actions, - createEffect, - ofType, -} from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { map } from 'rxjs/operators'; import { diff --git a/src/app/core/json-patch/json-patch-operations.reducer.spec.ts b/projects/dspace/core/src/lib/json-patch/json-patch-operations.reducer.spec.ts similarity index 100% rename from src/app/core/json-patch/json-patch-operations.reducer.spec.ts rename to projects/dspace/core/src/lib/json-patch/json-patch-operations.reducer.spec.ts diff --git a/src/app/core/json-patch/json-patch-operations.reducer.ts b/projects/dspace/core/src/lib/json-patch/json-patch-operations.reducer.ts similarity index 98% rename from src/app/core/json-patch/json-patch-operations.reducer.ts rename to projects/dspace/core/src/lib/json-patch/json-patch-operations.reducer.ts index 149d81f3e1f..7360451dc11 100644 --- a/src/app/core/json-patch/json-patch-operations.reducer.ts +++ b/projects/dspace/core/src/lib/json-patch/json-patch-operations.reducer.ts @@ -1,13 +1,6 @@ -import { - hasValue, - isNotEmpty, - isNotUndefined, - isNull, -} from '../../shared/empty.util'; -import { - JsonPatchOperationModel, - JsonPatchOperationType, -} from './json-patch.model'; +import { hasValue, isNotEmpty, isNotUndefined, isNull } from '@dspace/utils'; + +import { JsonPatchOperationModel, JsonPatchOperationType } from './json-patch.model'; import { CommitPatchOperationsAction, DeletePendingJsonPatchOperationsAction, diff --git a/src/app/core/json-patch/json-patch-operations.service.spec.ts b/projects/dspace/core/src/lib/json-patch/json-patch-operations.service.spec.ts similarity index 96% rename from src/app/core/json-patch/json-patch-operations.service.spec.ts rename to projects/dspace/core/src/lib/json-patch/json-patch-operations.service.spec.ts index 83da82612b6..f804fb4de4d 100644 --- a/src/app/core/json-patch/json-patch-operations.service.spec.ts +++ b/projects/dspace/core/src/lib/json-patch/json-patch-operations.service.spec.ts @@ -1,27 +1,26 @@ import { Store } from '@ngrx/store'; import { deepClone } from 'fast-json-patch'; -import { - getTestScheduler, - hot, -} from 'jasmine-marbles'; +import { getTestScheduler, hot } from 'jasmine-marbles'; import { of } from 'rxjs'; import { catchError } from 'rxjs/operators'; import { TestScheduler } from 'rxjs/testing'; -import { getMockRemoteDataBuildService } from '../../shared/mocks/remote-data-build.service.mock'; -import { getMockRequestService } from '../../shared/mocks/request.service.mock'; -import { - createFailedRemoteDataObject, - createSuccessfulRemoteDataObject, -} from '../../shared/remote-data.utils'; -import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { CoreState } from '../core-state.model'; import { SubmissionPatchRequest } from '../data/request.models'; import { RequestService } from '../data/request.service'; import { RequestEntry } from '../data/request-entry.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; -import { SubmitDataResponseDefinitionObject } from '../shared/submit-data-response-definition.model'; +import { + SubmitDataResponseDefinitionObject, +} from '../shared/submit-data-response-definition.model'; +import { HALEndpointServiceStub } from '../testing/hal-endpoint-service.stub'; +import { getMockRemoteDataBuildService } from '../testing/remote-data-build.service.mock'; +import { getMockRequestService } from '../testing/request.service.mock'; +import { + createFailedRemoteDataObject, + createSuccessfulRemoteDataObject, +} from '../utilities/remote-data.utils'; import { CommitPatchOperationsAction, DeletePendingJsonPatchOperationsAction, diff --git a/src/app/core/json-patch/json-patch-operations.service.ts b/projects/dspace/core/src/lib/json-patch/json-patch-operations.service.ts similarity index 97% rename from src/app/core/json-patch/json-patch-operations.service.ts rename to projects/dspace/core/src/lib/json-patch/json-patch-operations.service.ts index 552a4354fd7..599d9f849a6 100644 --- a/src/app/core/json-patch/json-patch-operations.service.ts +++ b/projects/dspace/core/src/lib/json-patch/json-patch-operations.service.ts @@ -1,8 +1,6 @@ +import { hasValue, isEmpty, isNotEmpty, isNotUndefined, isUndefined } from '@dspace/utils'; import { Store } from '@ngrx/store'; -import { - merge as observableMerge, - Observable, -} from 'rxjs'; +import { merge as observableMerge, Observable } from 'rxjs'; import { distinctUntilChanged, filter, @@ -14,13 +12,6 @@ import { tap, } from 'rxjs/operators'; -import { - hasValue, - isEmpty, - isNotEmpty, - isNotUndefined, - isUndefined, -} from '../../shared/empty.util'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { CoreState } from '../core-state.model'; import { RemoteData } from '../data/remote-data'; diff --git a/src/app/core/json-patch/json-patch.model.ts b/projects/dspace/core/src/lib/json-patch/json-patch.model.ts similarity index 100% rename from src/app/core/json-patch/json-patch.model.ts rename to projects/dspace/core/src/lib/json-patch/json-patch.model.ts diff --git a/src/app/core/json-patch/selectors.ts b/projects/dspace/core/src/lib/json-patch/selectors.ts similarity index 94% rename from src/app/core/json-patch/selectors.ts rename to projects/dspace/core/src/lib/json-patch/selectors.ts index 7f6aaa3d985..771b4ce1692 100644 --- a/src/app/core/json-patch/selectors.ts +++ b/projects/dspace/core/src/lib/json-patch/selectors.ts @@ -1,11 +1,8 @@ import { MemoizedSelector } from '@ngrx/store'; -import { - keySelector, - subStateSelector, -} from '../../submission/selectors'; import { coreSelector } from '../core.selectors'; import { CoreState } from '../core-state.model'; +import { keySelector, subStateSelector } from '../ngrx/selectors-utils'; import { JsonPatchOperationsEntry, JsonPatchOperationsResourceEntry, diff --git a/src/app/core/lazy-data-service.ts b/projects/dspace/core/src/lib/lazy-data-service.ts similarity index 89% rename from src/app/core/lazy-data-service.ts rename to projects/dspace/core/src/lib/lazy-data-service.ts index 1ad3dec384a..160a2eeb878 100644 --- a/src/app/core/lazy-data-service.ts +++ b/projects/dspace/core/src/lib/lazy-data-service.ts @@ -1,14 +1,8 @@ -import { - Injector, - Type, -} from '@angular/core'; -import { - defer, - Observable, -} from 'rxjs'; +import { Injector, Type } from '@angular/core'; +import { defer, Observable } from 'rxjs'; -import { LazyDataServicesMap } from '../../config/app-config.interface'; import { HALDataService } from './data/base/hal-data-service.interface'; +import { LazyDataServicesMap } from './data-services-map-type'; /** * Loads a service lazily. The service is loaded when the observable is subscribed to. diff --git a/projects/dspace/core/src/lib/locale/index.ts b/projects/dspace/core/src/lib/locale/index.ts new file mode 100644 index 00000000000..278fb44bc53 --- /dev/null +++ b/projects/dspace/core/src/lib/locale/index.ts @@ -0,0 +1,9 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './locale.interceptor.spec'; +export * from './locale.interceptor'; +export * from './locale.service.spec'; +export * from './locale.service'; +export * from './server-locale.service'; diff --git a/src/app/core/locale/locale.interceptor.spec.ts b/projects/dspace/core/src/lib/locale/locale.interceptor.spec.ts similarity index 94% rename from src/app/core/locale/locale.interceptor.spec.ts rename to projects/dspace/core/src/lib/locale/locale.interceptor.spec.ts index 4731e109e5d..c1908f892d3 100644 --- a/src/app/core/locale/locale.interceptor.spec.ts +++ b/projects/dspace/core/src/lib/locale/locale.interceptor.spec.ts @@ -3,14 +3,11 @@ import { provideHttpClient, withInterceptorsFromDi, } from '@angular/common/http'; -import { - HttpTestingController, - provideHttpClientTesting, -} from '@angular/common/http/testing'; +import { HttpTestingController, provideHttpClientTesting } from '@angular/common/http/testing'; import { TestBed } from '@angular/core/testing'; +import { RestRequestMethod } from '@dspace/config'; import { of } from 'rxjs'; -import { RestRequestMethod } from '../data/rest-request-method'; import { DspaceRestService } from '../dspace-rest/dspace-rest.service'; import { LocaleInterceptor } from './locale.interceptor'; import { LocaleService } from './locale.service'; diff --git a/src/app/core/locale/locale.interceptor.ts b/projects/dspace/core/src/lib/locale/locale.interceptor.ts similarity index 85% rename from src/app/core/locale/locale.interceptor.ts rename to projects/dspace/core/src/lib/locale/locale.interceptor.ts index 6dfa19485d9..e847ee944c6 100644 --- a/src/app/core/locale/locale.interceptor.ts +++ b/projects/dspace/core/src/lib/locale/locale.interceptor.ts @@ -1,15 +1,7 @@ -import { - HttpEvent, - HttpHandler, - HttpInterceptor, - HttpRequest, -} from '@angular/common/http'; +import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; -import { - mergeMap, - scan, -} from 'rxjs/operators'; +import { mergeMap, scan } from 'rxjs/operators'; import { LocaleService } from './locale.service'; diff --git a/src/app/core/locale/locale.service.spec.ts b/projects/dspace/core/src/lib/locale/locale.service.spec.ts similarity index 76% rename from src/app/core/locale/locale.service.spec.ts rename to projects/dspace/core/src/lib/locale/locale.service.spec.ts index d7f681056cb..78f30e318ea 100644 --- a/src/app/core/locale/locale.service.spec.ts +++ b/projects/dspace/core/src/lib/locale/locale.service.spec.ts @@ -1,25 +1,15 @@ -import { - TestBed, - waitForAsync, -} from '@angular/core/testing'; -import { - TranslateLoader, - TranslateModule, - TranslateService, -} from '@ngx-translate/core'; - -import { CookieServiceMock } from '../../shared/mocks/cookie.service.mock'; -import { TranslateLoaderMock } from '../../shared/mocks/translate-loader.mock'; -import { routeServiceStub } from '../../shared/testing/route-service.stub'; +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { APP_CONFIG } from '@dspace/config'; +import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core'; + import { AuthService } from '../auth/auth.service'; -import { CookieService } from '../services/cookie.service'; +import { CookieService } from '../cookies/cookie.service'; import { RouteService } from '../services/route.service'; import { NativeWindowRef } from '../services/window.service'; -import { - LANG_COOKIE, - LANG_ORIGIN, - LocaleService, -} from './locale.service'; +import { CookieServiceMock } from '../testing/cookie.service.mock'; +import { routeServiceStub } from '../testing/route-service.stub'; +import { TranslateLoaderMock } from '../testing/translate-loader.mock'; +import { LANG_COOKIE, LANG_ORIGIN, LocaleService } from './locale.service'; describe('LocaleService test suite', () => { let service: LocaleService; @@ -32,6 +22,47 @@ describe('LocaleService test suite', () => { let authService; let routeService; let document; + const languages = [{ + code: 'en', + label: 'English', + active: true, + }, { + code: 'de', + label: 'Deutsch', + active: true, + }, { + code: 'cs', + label: 'Čeština', + active: true, + }, { + code: 'nl', + label: 'Nederlands', + active: true, + }, { + code: 'pt', + label: 'Português', + active: true, + }, { + code: 'fr', + label: 'Français', + active: true, + }, { + code: 'lv', + label: 'Latviešu', + active: true, + }, { + code: 'bn', + label: 'বাংলা', + active: true, + }, { + code: 'el', + label: 'Ελληνικά', + active: true, + }, { + code: 'disabled', + label: 'Disabled', + active: false, + }]; authService = jasmine.createSpyObj('AuthService', { isAuthenticated: jasmine.createSpy('isAuthenticated'), @@ -52,9 +83,11 @@ describe('LocaleService test suite', () => { ], providers: [ { provide: CookieService, useValue: new CookieServiceMock() }, - { provide: AuthService, userValue: authService }, + { provide: AuthService, useValue: authService }, { provide: RouteService, useValue: routeServiceStub }, { provide: Document, useValue: document }, + { provide: APP_CONFIG, useValue: { languages, defaultLanguage: 'en' } }, + LocaleService, ], }); })); @@ -65,7 +98,7 @@ describe('LocaleService test suite', () => { routeService = TestBed.inject(RouteService); window = new NativeWindowRef(); document = { documentElement: { lang: 'en' } }; - service = new LocaleService(window, cookieService, translateService, authService, routeService, document); + service = TestBed.inject(LocaleService); serviceAsAny = service; spyOnGet = spyOn(cookieService, 'get'); spyOnSet = spyOn(cookieService, 'set'); diff --git a/src/app/core/locale/locale.service.ts b/projects/dspace/core/src/lib/locale/locale.service.ts similarity index 88% rename from src/app/core/locale/locale.service.ts rename to projects/dspace/core/src/lib/locale/locale.service.ts index effc0c3e2ec..50093a6b634 100644 --- a/src/app/core/locale/locale.service.ts +++ b/projects/dspace/core/src/lib/locale/locale.service.ts @@ -1,33 +1,15 @@ import { DOCUMENT } from '@angular/common'; -import { - Inject, - Injectable, -} from '@angular/core'; +import { Inject, inject, Injectable } from '@angular/core'; +import { APP_CONFIG, AppConfig, LangConfig } from '@dspace/config'; +import { isEmpty, isNotEmpty } from '@dspace/utils'; import { TranslateService } from '@ngx-translate/core'; -import { - combineLatest, - Observable, - of, -} from 'rxjs'; -import { - map, - mergeMap, - take, -} from 'rxjs/operators'; +import { combineLatest, Observable, of } from 'rxjs'; +import { map, mergeMap, take } from 'rxjs/operators'; -import { LangConfig } from '../../../config/lang-config.interface'; -import { environment } from '../../../environments/environment'; -import { - isEmpty, - isNotEmpty, -} from '../../shared/empty.util'; import { AuthService } from '../auth/auth.service'; -import { CookieService } from '../services/cookie.service'; +import { CookieService } from '../cookies/cookie.service'; import { RouteService } from '../services/route.service'; -import { - NativeWindowRef, - NativeWindowService, -} from '../services/window.service'; +import { NativeWindowRef, NativeWindowService } from '../services/window.service'; export const LANG_COOKIE = 'dsLanguage'; @@ -45,7 +27,7 @@ export enum LANG_ORIGIN { */ @Injectable() export class LocaleService { - + protected readonly appConfig: AppConfig = inject(APP_CONFIG); /** * Eperson language metadata */ @@ -69,12 +51,12 @@ export class LocaleService { getCurrentLanguageCode(): string { // Attempt to get the language from a cookie let lang = this.getLanguageCodeFromCookie(); - if (isEmpty(lang) || environment.languages.find((langConfig: LangConfig) => langConfig.code === lang && langConfig.active) === undefined) { + if (isEmpty(lang) || this.appConfig.languages.find((langConfig: LangConfig) => langConfig.code === lang && langConfig.active) === undefined) { // Attempt to get the browser language from the user if (this.translate.getLangs().includes(this.translate.getBrowserLang())) { lang = this.translate.getBrowserLang(); } else { - lang = environment.defaultLanguage; + lang = this.appConfig.defaultLanguage; } } return lang; diff --git a/src/app/core/locale/server-locale.service.ts b/projects/dspace/core/src/lib/locale/server-locale.service.ts similarity index 82% rename from src/app/core/locale/server-locale.service.ts rename to projects/dspace/core/src/lib/locale/server-locale.service.ts index 976da6c050b..1f8174c829a 100644 --- a/src/app/core/locale/server-locale.service.ts +++ b/projects/dspace/core/src/lib/locale/server-locale.service.ts @@ -1,37 +1,16 @@ import { DOCUMENT } from '@angular/common'; -import { - Inject, - Injectable, -} from '@angular/core'; +import { Inject, Injectable } from '@angular/core'; +import { hasValue, isEmpty, isNotEmpty } from '@dspace/utils'; import { TranslateService } from '@ngx-translate/core'; -import { - combineLatest, - Observable, - of, -} from 'rxjs'; -import { - map, - mergeMap, - take, -} from 'rxjs/operators'; +import { combineLatest, Observable, of } from 'rxjs'; +import { map, mergeMap, take } from 'rxjs/operators'; -import { REQUEST } from '../../../express.tokens'; -import { - hasValue, - isEmpty, - isNotEmpty, -} from '../../shared/empty.util'; +import { REQUEST } from '../tokens/express.tokens'; import { AuthService } from '../auth/auth.service'; -import { CookieService } from '../services/cookie.service'; +import { CookieService } from '../cookies/cookie.service'; import { RouteService } from '../services/route.service'; -import { - NativeWindowRef, - NativeWindowService, -} from '../services/window.service'; -import { - LANG_ORIGIN, - LocaleService, -} from './locale.service'; +import { NativeWindowRef, NativeWindowService } from '../services/window.service'; +import { LANG_ORIGIN, LocaleService } from './locale.service'; @Injectable() export class ServerLocaleService extends LocaleService { diff --git a/projects/dspace/core/src/lib/log/index.ts b/projects/dspace/core/src/lib/log/index.ts new file mode 100644 index 00000000000..069038d5268 --- /dev/null +++ b/projects/dspace/core/src/lib/log/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './log.interceptor.spec'; +export * from './log.interceptor'; diff --git a/src/app/core/log/log.interceptor.spec.ts b/projects/dspace/core/src/lib/log/log.interceptor.spec.ts similarity index 83% rename from src/app/core/log/log.interceptor.spec.ts rename to projects/dspace/core/src/lib/log/log.interceptor.spec.ts index 2310ca2c142..1413ccfe03c 100644 --- a/src/app/core/log/log.interceptor.spec.ts +++ b/projects/dspace/core/src/lib/log/log.interceptor.spec.ts @@ -3,34 +3,27 @@ import { provideHttpClient, withInterceptorsFromDi, } from '@angular/common/http'; -import { - HttpTestingController, - provideHttpClientTesting, -} from '@angular/common/http/testing'; +import { HttpTestingController, provideHttpClientTesting } from '@angular/common/http/testing'; import { TestBed } from '@angular/core/testing'; import { Router } from '@angular/router'; +import { RestRequestMethod } from '@dspace/config'; +import { coreReducers } from '../core.reducers'; +import { CorrelationIdService } from '../correlation-id/correlation-id.service'; import { StoreModule } from '@ngrx/store'; import { of } from 'rxjs'; -import { - appReducers, - storeModuleConfig, -} from '../../app.reducer'; -import { CorrelationIdService } from '../../correlation-id/correlation-id.service'; -import { OrejimeService } from '../../shared/cookies/orejime.service'; +import { CookieService } from '../cookies/cookie.service'; +import { OrejimeService } from '../cookies/orejime.service'; import { CORRELATION_ID_COOKIE, CORRELATION_ID_OREJIME_KEY, -} from '../../shared/cookies/orejime-configuration'; -import { CookieServiceMock } from '../../shared/mocks/cookie.service.mock'; -import { RouterStub } from '../../shared/testing/router.stub'; -import { RestRequestMethod } from '../data/rest-request-method'; +} from '../cookies/orejime-configuration'; import { DspaceRestService } from '../dspace-rest/dspace-rest.service'; -import { CookieService } from '../services/cookie.service'; import { UUIDService } from '../shared/uuid.service'; +import { CookieServiceMock } from '../testing/cookie.service.mock'; +import { RouterStub } from '../testing/router.stub'; import { LogInterceptor } from './log.interceptor'; - describe('LogInterceptor', () => { let service: DspaceRestService; let httpMock: HttpTestingController; @@ -48,13 +41,20 @@ describe('LogInterceptor', () => { const mockOrejimeService = jasmine.createSpyObj('OrejimeService', ['getSavedPreferences']); - + const mockStoreModuleConfig: any = { + runtimeChecks: { + strictStateImmutability: true, + strictActionImmutability: true, + }, + }; beforeEach(() => { TestBed.configureTestingModule({ - imports: [StoreModule.forRoot(appReducers, storeModuleConfig)], + imports: [ + StoreModule.forRoot(), + StoreModule.forFeature('core', coreReducers, mockStoreModuleConfig), + ], providers: [ DspaceRestService, - // LogInterceptor, { provide: HTTP_INTERCEPTORS, useClass: LogInterceptor, diff --git a/src/app/core/log/log.interceptor.ts b/projects/dspace/core/src/lib/log/log.interceptor.ts similarity index 80% rename from src/app/core/log/log.interceptor.ts rename to projects/dspace/core/src/lib/log/log.interceptor.ts index 76ca804cee1..e50bdcc477e 100644 --- a/src/app/core/log/log.interceptor.ts +++ b/projects/dspace/core/src/lib/log/log.interceptor.ts @@ -1,21 +1,13 @@ -import { - HttpEvent, - HttpHandler, - HttpInterceptor, - HttpRequest, -} from '@angular/common/http'; +import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Router } from '@angular/router'; +import { CorrelationIdService } from '../correlation-id/correlation-id.service'; +import { hasValue, isEmpty } from '@dspace/utils'; import { Observable } from 'rxjs'; import { switchMap } from 'rxjs/operators'; -import { CorrelationIdService } from '../../correlation-id/correlation-id.service'; -import { OrejimeService } from '../../shared/cookies/orejime.service'; -import { CORRELATION_ID_OREJIME_KEY } from '../../shared/cookies/orejime-configuration'; -import { - hasValue, - isEmpty, -} from '../../shared/empty.util'; +import { OrejimeService } from '../cookies/orejime.service'; +import { CORRELATION_ID_OREJIME_KEY } from '../cookies/orejime-configuration'; /** * Log Interceptor intercepting Http Requests & Responses to diff --git a/src/app/core/metadata/head-tag.service.spec.ts b/projects/dspace/core/src/lib/metadata/head-tag.service.spec.ts similarity index 95% rename from src/app/core/metadata/head-tag.service.spec.ts rename to projects/dspace/core/src/lib/metadata/head-tag.service.spec.ts index aec92535cef..20cfd57e3b0 100644 --- a/src/app/core/metadata/head-tag.service.spec.ts +++ b/projects/dspace/core/src/lib/metadata/head-tag.service.spec.ts @@ -1,35 +1,11 @@ -import { - fakeAsync, - tick, -} from '@angular/core/testing'; -import { - Meta, - Title, -} from '@angular/platform-browser'; -import { - NavigationEnd, - Router, -} from '@angular/router'; +import { fakeAsync, tick } from '@angular/core/testing'; +import { Meta, Title } from '@angular/platform-browser'; +import { NavigationEnd, Router } from '@angular/router'; +import { AppConfig } from '@dspace/config'; import { createMockStore } from '@ngrx/store/testing'; import { TranslateService } from '@ngx-translate/core'; -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; -import { AppConfig } from '../../../config/app-config.interface'; -import { - ItemMock, - MockBitstream1, - MockBitstream2, - MockBitstream3, -} from '../../shared/mocks/item.mock'; -import { getMockTranslateService } from '../../shared/mocks/translate.service.mock'; -import { - createSuccessfulRemoteDataObject, - createSuccessfulRemoteDataObject$, -} from '../../shared/remote-data.utils'; -import { createPaginatedList } from '../../shared/testing/utils.test'; import { DSONameService } from '../breadcrumbs/dso-name.service'; import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service'; import { PaginatedList } from '../data/paginated-list.model'; @@ -40,11 +16,15 @@ import { Bitstream } from '../shared/bitstream.model'; import { Bundle } from '../shared/bundle.model'; import { Item } from '../shared/item.model'; import { MetadataValue } from '../shared/metadata.models'; -import { HeadTagService } from './head-tag.service'; +import { ItemMock, MockBitstream1, MockBitstream2, MockBitstream3 } from '../testing/item.mock'; +import { getMockTranslateService } from '../testing/translate.service.mock'; +import { createPaginatedList } from '../testing/utils.test'; import { - AddMetaTagAction, - ClearMetaTagAction, -} from './meta-tag.actions'; + createSuccessfulRemoteDataObject, + createSuccessfulRemoteDataObject$, +} from '../utilities/remote-data.utils'; +import { HeadTagService } from './head-tag.service'; +import { AddMetaTagAction, ClearMetaTagAction } from './meta-tag.actions'; describe('HeadTagService', () => { let headTagService: HeadTagService; diff --git a/src/app/core/metadata/head-tag.service.ts b/projects/dspace/core/src/lib/metadata/head-tag.service.ts similarity index 95% rename from src/app/core/metadata/head-tag.service.ts rename to projects/dspace/core/src/lib/metadata/head-tag.service.ts index 118f4efa82b..750b2f33e5b 100644 --- a/src/app/core/metadata/head-tag.service.ts +++ b/projects/dspace/core/src/lib/metadata/head-tag.service.ts @@ -1,22 +1,9 @@ -import { - Inject, - Injectable, -} from '@angular/core'; -import { - Meta, - MetaDefinition, - Title, -} from '@angular/platform-browser'; -import { - ActivatedRoute, - NavigationEnd, - Router, -} from '@angular/router'; -import { - createSelector, - select, - Store, -} from '@ngrx/store'; +import { Inject, Injectable } from '@angular/core'; +import { Meta, MetaDefinition, Title } from '@angular/platform-browser'; +import { ActivatedRoute, NavigationEnd, Router } from '@angular/router'; +import { APP_CONFIG, AppConfig } from '@dspace/config'; +import { hasNoValue, hasValue, isNotEmpty } from '@dspace/utils'; +import { createSelector, select, Store } from '@ngrx/store'; import { TranslateService } from '@ngx-translate/core'; import { BehaviorSubject, @@ -26,25 +13,8 @@ import { Observable, of, } from 'rxjs'; -import { - filter, - map, - mergeMap, - switchMap, - take, -} from 'rxjs/operators'; +import { filter, map, mergeMap, switchMap, take } from 'rxjs/operators'; -import { - APP_CONFIG, - AppConfig, -} from '../../../config/app-config.interface'; -import { getBitstreamDownloadRoute } from '../../app-routing-paths'; -import { - hasNoValue, - hasValue, - isNotEmpty, -} from '../../shared/empty.util'; -import { followLink } from '../../shared/utils/follow-link-config.model'; import { DSONameService } from '../breadcrumbs/dso-name.service'; import { coreSelector } from '../core.selectors'; import { CoreState } from '../core-state.model'; @@ -54,22 +24,21 @@ import { FindListOptions } from '../data/find-list-options.model'; import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; import { RootDataService } from '../data/root-data.service'; +import { getBitstreamDownloadRoute } from '../router/utils/dso-route.utils'; import { HardRedirectService } from '../services/hard-redirect.service'; import { Bitstream } from '../shared/bitstream.model'; import { getDownloadableBitstream } from '../shared/bitstream.operators'; import { BitstreamFormat } from '../shared/bitstream-format.model'; import { Bundle } from '../shared/bundle.model'; import { DSpaceObject } from '../shared/dspace-object.model'; +import { followLink } from '../shared/follow-link-config.model'; import { Item } from '../shared/item.model'; import { getFirstCompletedRemoteData, getFirstSucceededRemoteDataPayload, } from '../shared/operators'; import { URLCombiner } from '../url-combiner/url-combiner'; -import { - AddMetaTagAction, - ClearMetaTagAction, -} from './meta-tag.actions'; +import { AddMetaTagAction, ClearMetaTagAction } from './meta-tag.actions'; import { MetaTagState } from './meta-tag.reducer'; /** diff --git a/projects/dspace/core/src/lib/metadata/index.ts b/projects/dspace/core/src/lib/metadata/index.ts new file mode 100644 index 00000000000..6b222d9853f --- /dev/null +++ b/projects/dspace/core/src/lib/metadata/index.ts @@ -0,0 +1,15 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './head-tag.service.spec'; +export * from './head-tag.service'; +export * from './meta-tag.actions'; +export * from './meta-tag.reducer.spec'; +export * from './meta-tag.reducer'; +export * from './metadata-field.model'; +export * from './metadata-field.resource-type'; +export * from './metadata-schema.model'; +export * from './metadata-schema.resource-type'; +export * from './metadata.service.spec'; +export * from './metadata.service'; diff --git a/src/app/core/metadata/meta-tag.actions.ts b/projects/dspace/core/src/lib/metadata/meta-tag.actions.ts similarity index 91% rename from src/app/core/metadata/meta-tag.actions.ts rename to projects/dspace/core/src/lib/metadata/meta-tag.actions.ts index 74f5c9932a2..03b65b32bb4 100644 --- a/src/app/core/metadata/meta-tag.actions.ts +++ b/projects/dspace/core/src/lib/metadata/meta-tag.actions.ts @@ -1,7 +1,7 @@ /* eslint-disable max-classes-per-file */ import { Action } from '@ngrx/store'; -import { type } from '../../shared/ngrx/type'; +import { type } from '../ngrx/type'; export const MetaTagTypes = { ADD: type('dspace/meta-tag/ADD'), diff --git a/src/app/core/metadata/meta-tag.reducer.spec.ts b/projects/dspace/core/src/lib/metadata/meta-tag.reducer.spec.ts similarity index 94% rename from src/app/core/metadata/meta-tag.reducer.spec.ts rename to projects/dspace/core/src/lib/metadata/meta-tag.reducer.spec.ts index 16880751ce8..2432d13f349 100644 --- a/src/app/core/metadata/meta-tag.reducer.spec.ts +++ b/projects/dspace/core/src/lib/metadata/meta-tag.reducer.spec.ts @@ -6,10 +6,7 @@ * http://www.dspace.org/license/ */ -import { - AddMetaTagAction, - ClearMetaTagAction, -} from './meta-tag.actions'; +import { AddMetaTagAction, ClearMetaTagAction } from './meta-tag.actions'; import { metaTagReducer } from './meta-tag.reducer'; const nullAction = { type: null }; diff --git a/src/app/core/metadata/meta-tag.reducer.ts b/projects/dspace/core/src/lib/metadata/meta-tag.reducer.ts similarity index 100% rename from src/app/core/metadata/meta-tag.reducer.ts rename to projects/dspace/core/src/lib/metadata/meta-tag.reducer.ts diff --git a/src/app/core/metadata/metadata-field.model.ts b/projects/dspace/core/src/lib/metadata/metadata-field.model.ts similarity index 88% rename from src/app/core/metadata/metadata-field.model.ts rename to projects/dspace/core/src/lib/metadata/metadata-field.model.ts index 11b6e1c74e2..68798709703 100644 --- a/src/app/core/metadata/metadata-field.model.ts +++ b/projects/dspace/core/src/lib/metadata/metadata-field.model.ts @@ -1,19 +1,13 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; +import { isNotEmpty } from '@dspace/utils'; +import { autoserialize, deserialize } from 'cerialize'; import { Observable } from 'rxjs'; -import { isNotEmpty } from '../../shared/empty.util'; -import { ListableObject } from '../../shared/object-collection/shared/listable-object.model'; -import { - link, - typedObject, -} from '../cache/builders/build-decorators'; +import { link, typedObject } from '../cache/builders/build-decorators'; import { RemoteData } from '../data/remote-data'; import { GenericConstructor } from '../shared/generic-constructor'; import { HALLink } from '../shared/hal-link.model'; import { HALResource } from '../shared/hal-resource.model'; +import { ListableObject } from '../shared/object-collection/listable-object.model'; import { ResourceType } from '../shared/resource-type'; import { excludeFromEquals } from '../utilities/equals.decorators'; import { METADATA_FIELD } from './metadata-field.resource-type'; diff --git a/src/app/core/metadata/metadata-field.resource-type.ts b/projects/dspace/core/src/lib/metadata/metadata-field.resource-type.ts similarity index 100% rename from src/app/core/metadata/metadata-field.resource-type.ts rename to projects/dspace/core/src/lib/metadata/metadata-field.resource-type.ts diff --git a/src/app/core/metadata/metadata-schema.model.ts b/projects/dspace/core/src/lib/metadata/metadata-schema.model.ts similarity index 89% rename from src/app/core/metadata/metadata-schema.model.ts rename to projects/dspace/core/src/lib/metadata/metadata-schema.model.ts index 656638b4c63..ebd187b34d3 100644 --- a/src/app/core/metadata/metadata-schema.model.ts +++ b/projects/dspace/core/src/lib/metadata/metadata-schema.model.ts @@ -1,13 +1,10 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; +import { autoserialize, deserialize } from 'cerialize'; -import { ListableObject } from '../../shared/object-collection/shared/listable-object.model'; import { typedObject } from '../cache/builders/build-decorators'; import { GenericConstructor } from '../shared/generic-constructor'; import { HALLink } from '../shared/hal-link.model'; import { HALResource } from '../shared/hal-resource.model'; +import { ListableObject } from '../shared/object-collection/listable-object.model'; import { ResourceType } from '../shared/resource-type'; import { excludeFromEquals } from '../utilities/equals.decorators'; import { METADATA_SCHEMA } from './metadata-schema.resource-type'; diff --git a/src/app/core/metadata/metadata-schema.resource-type.ts b/projects/dspace/core/src/lib/metadata/metadata-schema.resource-type.ts similarity index 100% rename from src/app/core/metadata/metadata-schema.resource-type.ts rename to projects/dspace/core/src/lib/metadata/metadata-schema.resource-type.ts diff --git a/src/app/core/metadata/metadata.service.spec.ts b/projects/dspace/core/src/lib/metadata/metadata.service.spec.ts similarity index 100% rename from src/app/core/metadata/metadata.service.spec.ts rename to projects/dspace/core/src/lib/metadata/metadata.service.spec.ts diff --git a/src/app/core/metadata/metadata.service.ts b/projects/dspace/core/src/lib/metadata/metadata.service.ts similarity index 86% rename from src/app/core/metadata/metadata.service.ts rename to projects/dspace/core/src/lib/metadata/metadata.service.ts index dcc355edd0f..2c9f61074d8 100644 --- a/src/app/core/metadata/metadata.service.ts +++ b/projects/dspace/core/src/lib/metadata/metadata.service.ts @@ -1,10 +1,7 @@ import { Injectable } from '@angular/core'; +import { hasValue } from '@dspace/utils'; -import { hasValue } from '../../shared/empty.util'; -import { - MetadataValue, - VIRTUAL_METADATA_PREFIX, -} from '../shared/metadata.models'; +import { MetadataValue, VIRTUAL_METADATA_PREFIX } from '../shared/metadata.models'; /** * Service for working with DSpace object metadata. diff --git a/src/app/shared/ngrx/dspace-router-state-serializer.ts b/projects/dspace/core/src/lib/ngrx/dspace-router-state-serializer.ts similarity index 89% rename from src/app/shared/ngrx/dspace-router-state-serializer.ts rename to projects/dspace/core/src/lib/ngrx/dspace-router-state-serializer.ts index f8c25540ad8..89acb9b7d3a 100644 --- a/src/app/shared/ngrx/dspace-router-state-serializer.ts +++ b/projects/dspace/core/src/lib/ngrx/dspace-router-state-serializer.ts @@ -1,8 +1,5 @@ import { Injectable } from '@angular/core'; -import { - Params, - RouterStateSnapshot, -} from '@angular/router'; +import { Params, RouterStateSnapshot } from '@angular/router'; import { RouterStateSerializer } from '@ngrx/router-store'; export interface RouterStateUrl { diff --git a/projects/dspace/core/src/lib/ngrx/index.ts b/projects/dspace/core/src/lib/ngrx/index.ts new file mode 100644 index 00000000000..416ed3f224d --- /dev/null +++ b/projects/dspace/core/src/lib/ngrx/index.ts @@ -0,0 +1,8 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './dspace-router-state-serializer'; +export * from './no-op.action'; +export * from './selectors-utils'; +export * from './type'; diff --git a/src/app/shared/ngrx/no-op.action.ts b/projects/dspace/core/src/lib/ngrx/no-op.action.ts similarity index 100% rename from src/app/shared/ngrx/no-op.action.ts rename to projects/dspace/core/src/lib/ngrx/no-op.action.ts diff --git a/projects/dspace/core/src/lib/ngrx/selectors-utils.ts b/projects/dspace/core/src/lib/ngrx/selectors-utils.ts new file mode 100644 index 00000000000..91170b7b5a7 --- /dev/null +++ b/projects/dspace/core/src/lib/ngrx/selectors-utils.ts @@ -0,0 +1,28 @@ +import { hasValue } from '@dspace/utils'; +import { createSelector, MemoizedSelector, Selector } from '@ngrx/store'; + +/** + * Export a function to return a subset of the state by key + */ +export function keySelector(parentSelector: Selector, subState: string, key: string): MemoizedSelector { + return createSelector(parentSelector, (state: T) => { + if (hasValue(state) && hasValue(state[subState])) { + return state[subState][key]; + } else { + return undefined; + } + }); +} + +/** + * Export a function to return a subset of the state + */ +export function subStateSelector(parentSelector: Selector, subState: string): MemoizedSelector { + return createSelector(parentSelector, (state: T) => { + if (hasValue(state) && hasValue(state[subState])) { + return state[subState]; + } else { + return undefined; + } + }); +} diff --git a/src/app/shared/ngrx/type.ts b/projects/dspace/core/src/lib/ngrx/type.ts similarity index 85% rename from src/app/shared/ngrx/type.ts rename to projects/dspace/core/src/lib/ngrx/type.ts index 1e9a8db7ad3..82a2db29f03 100644 --- a/src/app/shared/ngrx/type.ts +++ b/projects/dspace/core/src/lib/ngrx/type.ts @@ -27,3 +27,8 @@ export function type(label: T | ''): T { return label as T; } + +export const StoreActionTypes = { + REHYDRATE: type('dspace/ngrx/REHYDRATE'), + REPLAY: type('dspace/ngrx/REPLAY'), +}; diff --git a/projects/dspace/core/src/lib/notification-system/index.ts b/projects/dspace/core/src/lib/notification-system/index.ts new file mode 100644 index 00000000000..5b7bae5da16 --- /dev/null +++ b/projects/dspace/core/src/lib/notification-system/index.ts @@ -0,0 +1,12 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './notifications.actions'; +export * from './notifications.effects'; +export * from './notifications.reducers.spec'; +export * from './notifications.reducers'; +export * from './notifications.service.spec'; +export * from './notifications.service'; +export * from './selectors'; +export * from './models/index'; diff --git a/projects/dspace/core/src/lib/notification-system/models/index.ts b/projects/dspace/core/src/lib/notification-system/models/index.ts new file mode 100644 index 00000000000..b105c12b2c5 --- /dev/null +++ b/projects/dspace/core/src/lib/notification-system/models/index.ts @@ -0,0 +1,7 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './notification-options.model'; +export * from './notification-type'; +export * from './notification.model'; diff --git a/src/app/shared/notifications/models/notification-options.model.ts b/projects/dspace/core/src/lib/notification-system/models/notification-options.model.ts similarity index 90% rename from src/app/shared/notifications/models/notification-options.model.ts rename to projects/dspace/core/src/lib/notification-system/models/notification-options.model.ts index c891781d9d0..a403459a014 100644 --- a/src/app/shared/notifications/models/notification-options.model.ts +++ b/projects/dspace/core/src/lib/notification-system/models/notification-options.model.ts @@ -1,4 +1,4 @@ -import { NotificationAnimationsType } from './notification-animations-type'; +import { NotificationAnimationsType } from '@dspace/config'; export interface INotificationOptions { timeOut: number; diff --git a/src/app/shared/notifications/models/notification-type.ts b/projects/dspace/core/src/lib/notification-system/models/notification-type.ts similarity index 100% rename from src/app/shared/notifications/models/notification-type.ts rename to projects/dspace/core/src/lib/notification-system/models/notification-type.ts diff --git a/src/app/shared/notifications/models/notification.model.ts b/projects/dspace/core/src/lib/notification-system/models/notification.model.ts similarity index 87% rename from src/app/shared/notifications/models/notification.model.ts rename to projects/dspace/core/src/lib/notification-system/models/notification.model.ts index b79ecbc12e1..a7a580793c9 100644 --- a/src/app/shared/notifications/models/notification.model.ts +++ b/projects/dspace/core/src/lib/notification-system/models/notification.model.ts @@ -1,10 +1,7 @@ +import { isEmpty } from '@dspace/utils'; import { Observable } from 'rxjs'; -import { isEmpty } from '../../empty.util'; -import { - INotificationOptions, - NotificationOptions, -} from './notification-options.model'; +import { INotificationOptions, NotificationOptions } from './notification-options.model'; import { NotificationType } from './notification-type'; export interface INotification { diff --git a/src/app/shared/notifications/notifications.actions.ts b/projects/dspace/core/src/lib/notification-system/notifications.actions.ts similarity index 100% rename from src/app/shared/notifications/notifications.actions.ts rename to projects/dspace/core/src/lib/notification-system/notifications.actions.ts diff --git a/src/app/shared/notifications/notifications.effects.ts b/projects/dspace/core/src/lib/notification-system/notifications.effects.ts similarity index 89% rename from src/app/shared/notifications/notifications.effects.ts rename to projects/dspace/core/src/lib/notification-system/notifications.effects.ts index c9449af24a8..c3231ee5421 100644 --- a/src/app/shared/notifications/notifications.effects.ts +++ b/projects/dspace/core/src/lib/notification-system/notifications.effects.ts @@ -2,7 +2,7 @@ import { Injectable } from '@angular/core'; import { Actions } from '@ngrx/effects'; import { Store } from '@ngrx/store'; -import { AppState } from '../../app.reducer'; +import { CoreState } from '../core-state.model'; @Injectable() export class NotificationsEffects { @@ -28,6 +28,6 @@ export class NotificationsEffects { * @param {Store} store */ constructor(private actions$: Actions, - private store: Store) { + private store: Store) { } } diff --git a/src/app/shared/notifications/notifications.reducers.spec.ts b/projects/dspace/core/src/lib/notification-system/notifications.reducers.spec.ts similarity index 89% rename from src/app/shared/notifications/notifications.reducers.spec.ts rename to projects/dspace/core/src/lib/notification-system/notifications.reducers.spec.ts index 87e50699303..8e6abd1d33b 100644 --- a/src/app/shared/notifications/notifications.reducers.spec.ts +++ b/projects/dspace/core/src/lib/notification-system/notifications.reducers.spec.ts @@ -1,14 +1,13 @@ import { ChangeDetectorRef } from '@angular/core'; import { TestBed } from '@angular/core/testing'; +import { NotificationAnimationsType } from '@dspace/config'; import { StoreModule } from '@ngrx/store'; import uniqueId from 'lodash/uniqueId'; -import { storeModuleConfig } from '../../app.reducer'; +import { coreReducers } from '../core.reducers'; import { Notification } from './models/notification.model'; -import { NotificationAnimationsType } from './models/notification-animations-type'; import { NotificationOptions } from './models/notification-options.model'; import { NotificationType } from './models/notification-type'; -import { NotificationComponent } from './notification/notification.component'; import { NewNotificationAction, RemoveAllNotificationsAction, @@ -16,7 +15,6 @@ import { } from './notifications.actions'; import { notificationsReducer } from './notifications.reducers'; import { NotificationsService } from './notifications.service'; -import { NotificationsBoardComponent } from './notifications-board/notifications-board.component'; describe('Notifications reducer', () => { @@ -27,6 +25,13 @@ describe('Notifications reducer', () => { let options; let html; + const mockStoreModuleConfig: any = { + runtimeChecks: { + strictStateImmutability: true, + strictActionImmutability: true, + }, + }; + beforeEach(async () => { TestBed.configureTestingModule({ providers: [ @@ -34,8 +39,8 @@ describe('Notifications reducer', () => { ChangeDetectorRef, ], imports: [ - StoreModule.forRoot({ notificationsReducer }, storeModuleConfig), - NotificationComponent, NotificationsBoardComponent, + StoreModule.forRoot(), + StoreModule.forFeature('core', coreReducers, mockStoreModuleConfig), ], }); diff --git a/src/app/shared/notifications/notifications.reducers.ts b/projects/dspace/core/src/lib/notification-system/notifications.reducers.ts similarity index 100% rename from src/app/shared/notifications/notifications.reducers.ts rename to projects/dspace/core/src/lib/notification-system/notifications.reducers.ts diff --git a/src/app/shared/notifications/notifications.service.spec.ts b/projects/dspace/core/src/lib/notification-system/notifications.service.spec.ts similarity index 79% rename from src/app/shared/notifications/notifications.service.spec.ts rename to projects/dspace/core/src/lib/notification-system/notifications.service.spec.ts index 91eed633a86..02a5ce1ee14 100644 --- a/src/app/shared/notifications/notifications.service.spec.ts +++ b/projects/dspace/core/src/lib/notification-system/notifications.service.spec.ts @@ -1,31 +1,18 @@ -import { - TestBed, - waitForAsync, -} from '@angular/core/testing'; -import { - Store, - StoreModule, -} from '@ngrx/store'; -import { - TranslateLoader, - TranslateModule, - TranslateService, -} from '@ngx-translate/core'; +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { Store, StoreModule } from '@ngrx/store'; +import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core'; import { of } from 'rxjs'; -import { storeModuleConfig } from '../../app.reducer'; -import { TranslateLoaderMock } from '../mocks/translate-loader.mock'; +import { coreReducers } from '../core.reducers'; +import { TranslateLoaderMock } from '../testing/translate-loader.mock'; import { Notification } from './models/notification.model'; import { NotificationType } from './models/notification-type'; -import { NotificationComponent } from './notification/notification.component'; import { NewNotificationAction, RemoveAllNotificationsAction, RemoveNotificationAction, } from './notifications.actions'; -import { notificationsReducer } from './notifications.reducers'; import { NotificationsService } from './notifications.service'; -import { NotificationsBoardComponent } from './notifications-board/notifications-board.component'; describe('NotificationsService test', () => { const store: Store = jasmine.createSpyObj('store', { @@ -33,18 +20,24 @@ describe('NotificationsService test', () => { select: of(true), }); let service: NotificationsService; + const mockStoreModuleConfig: any = { + runtimeChecks: { + strictStateImmutability: true, + strictActionImmutability: true, + }, + }; beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ - StoreModule.forRoot({ notificationsReducer }, storeModuleConfig), + StoreModule.forRoot(), + StoreModule.forFeature('core', coreReducers, mockStoreModuleConfig), TranslateModule.forRoot({ loader: { provide: TranslateLoader, useClass: TranslateLoaderMock, }, }), - NotificationComponent, NotificationsBoardComponent, ], providers: [ { provide: Store, useValue: store }, diff --git a/src/app/shared/notifications/notifications.service.ts b/projects/dspace/core/src/lib/notification-system/notifications.service.ts similarity index 89% rename from src/app/shared/notifications/notifications.service.ts rename to projects/dspace/core/src/lib/notification-system/notifications.service.ts index b89762ab032..260706d943d 100644 --- a/src/app/shared/notifications/notifications.service.ts +++ b/projects/dspace/core/src/lib/notification-system/notifications.service.ts @@ -1,15 +1,12 @@ -import { Injectable } from '@angular/core'; +import { Injectable, inject, Inject } from '@angular/core'; import { Store } from '@ngrx/store'; import { TranslateService } from '@ngx-translate/core'; import uniqueId from 'lodash/uniqueId'; import { of } from 'rxjs'; import { first } from 'rxjs/operators'; +import { APP_CONFIG, AppConfig } from '@dspace/config'; -import { environment } from '../../../environments/environment'; -import { - INotification, - Notification, -} from './models/notification.model'; +import { INotification, Notification } from './models/notification.model'; import { NotificationOptions } from './models/notification-options.model'; import { NotificationType } from './models/notification-type'; import { @@ -21,8 +18,11 @@ import { @Injectable({ providedIn: 'root' }) export class NotificationsService { - constructor(private store: Store, - private translate: TranslateService) { + constructor( + protected store: Store, + protected translate: TranslateService, + @Inject(APP_CONFIG) protected appConfig: AppConfig, + ) { } private add(notification: Notification) { @@ -117,9 +117,9 @@ export class NotificationsService { private getDefaultOptions(): NotificationOptions { return new NotificationOptions( - environment.notifications.timeOut, - environment.notifications.clickToClose, - environment.notifications.animate, + this.appConfig.notifications.timeOut, + this.appConfig.notifications.clickToClose, + this.appConfig.notifications.animate, ); } } diff --git a/projects/dspace/core/src/lib/notification-system/selectors.ts b/projects/dspace/core/src/lib/notification-system/selectors.ts new file mode 100644 index 00000000000..ce628ad2833 --- /dev/null +++ b/projects/dspace/core/src/lib/notification-system/selectors.ts @@ -0,0 +1,6 @@ +import { createSelector } from '@ngrx/store'; + +import { coreSelector } from '../core.selectors'; +import { CoreState } from '../core-state.model'; + +export const notificationsStateSelector = createSelector(coreSelector, (state: CoreState) => state.notifications); diff --git a/projects/dspace/core/src/lib/notifications/index.ts b/projects/dspace/core/src/lib/notifications/index.ts new file mode 100644 index 00000000000..fe5ff10574d --- /dev/null +++ b/projects/dspace/core/src/lib/notifications/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './qa/index'; +export * from './suggestions/index'; diff --git a/projects/dspace/core/src/lib/notifications/qa/events/index.ts b/projects/dspace/core/src/lib/notifications/qa/events/index.ts new file mode 100644 index 00000000000..b577185ca74 --- /dev/null +++ b/projects/dspace/core/src/lib/notifications/qa/events/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './quality-assurance-event-data.service.spec'; +export * from './quality-assurance-event-data.service'; diff --git a/src/app/core/notifications/qa/events/quality-assurance-event-data.service.spec.ts b/projects/dspace/core/src/lib/notifications/qa/events/quality-assurance-event-data.service.spec.ts similarity index 96% rename from src/app/core/notifications/qa/events/quality-assurance-event-data.service.spec.ts rename to projects/dspace/core/src/lib/notifications/qa/events/quality-assurance-event-data.service.spec.ts index 7cdd55a86fb..f6247ed2a9e 100644 --- a/src/app/core/notifications/qa/events/quality-assurance-event-data.service.spec.ts +++ b/projects/dspace/core/src/lib/notifications/qa/events/quality-assurance-event-data.service.spec.ts @@ -1,20 +1,4 @@ import { HttpClient } from '@angular/common/http'; -import { ReplaceOperation } from 'fast-json-patch'; -import { - cold, - getTestScheduler, -} from 'jasmine-marbles'; -import { of } from 'rxjs'; -import { TestScheduler } from 'rxjs/testing'; - -import { - qualityAssuranceEventObjectMissingPid, - qualityAssuranceEventObjectMissingPid2, - qualityAssuranceEventObjectMissingProjectFound, -} from '../../../../shared/mocks/notifications.mock'; -import { NotificationsService } from '../../../../shared/notifications/notifications.service'; -import { createSuccessfulRemoteDataObject } from '../../../../shared/remote-data.utils'; -import { ObjectCacheServiceStub } from '../../../../shared/testing/object-cache-service.stub'; import { RemoteDataBuildService } from '../../../cache/builders/remote-data-build.service'; import { RequestParam } from '../../../cache/models/request-param.model'; import { ObjectCacheService } from '../../../cache/object-cache.service'; @@ -25,6 +9,19 @@ import { RequestService } from '../../../data/request.service'; import { RequestEntry } from '../../../data/request-entry.model'; import { HALEndpointService } from '../../../shared/hal-endpoint.service'; import { PageInfo } from '../../../shared/page-info.model'; +import { createSuccessfulRemoteDataObject } from '../../../utilities/remote-data.utils'; +import { ReplaceOperation } from 'fast-json-patch'; +import { cold, getTestScheduler } from 'jasmine-marbles'; +import { of } from 'rxjs'; +import { TestScheduler } from 'rxjs/testing'; + +import { NotificationsService } from '../../../notification-system/notifications.service'; +import { + qualityAssuranceEventObjectMissingPid, + qualityAssuranceEventObjectMissingPid2, + qualityAssuranceEventObjectMissingProjectFound, +} from '../../../testing/notifications.mock'; +import { ObjectCacheServiceStub } from '../../../testing/object-cache-service.stub'; import { QualityAssuranceEventDataService } from './quality-assurance-event-data.service'; describe('QualityAssuranceEventDataService', () => { diff --git a/src/app/core/notifications/qa/events/quality-assurance-event-data.service.ts b/projects/dspace/core/src/lib/notifications/qa/events/quality-assurance-event-data.service.ts similarity index 91% rename from src/app/core/notifications/qa/events/quality-assurance-event-data.service.ts rename to projects/dspace/core/src/lib/notifications/qa/events/quality-assurance-event-data.service.ts index 7e6e8884173..99d9fe5ebe7 100644 --- a/src/app/core/notifications/qa/events/quality-assurance-event-data.service.ts +++ b/projects/dspace/core/src/lib/notifications/qa/events/quality-assurance-event-data.service.ts @@ -1,53 +1,31 @@ -import { - HttpHeaders, - HttpParams, -} from '@angular/common/http'; +import { HttpHeaders, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { ReplaceOperation } from 'fast-json-patch'; -import { Observable } from 'rxjs'; -import { - find, - switchMap, - take, -} from 'rxjs/operators'; - -import { QualityAssuranceEventData } from '../../../../notifications/qa/project-entry-import-modal/project-entry-import-modal.component'; -import { hasValue } from '../../../../shared/empty.util'; -import { NotificationsService } from '../../../../shared/notifications/notifications.service'; -import { FollowLinkConfig } from '../../../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../../../cache/builders/remote-data-build.service'; import { RequestParam } from '../../../cache/models/request-param.model'; import { ObjectCacheService } from '../../../cache/object-cache.service'; -import { - CreateData, - CreateDataImpl, -} from '../../../data/base/create-data'; -import { - DeleteData, - DeleteDataImpl, -} from '../../../data/base/delete-data'; +import { CreateData, CreateDataImpl } from '../../../data/base/create-data'; +import { DeleteData, DeleteDataImpl } from '../../../data/base/delete-data'; import { IdentifiableDataService } from '../../../data/base/identifiable-data.service'; -import { - PatchData, - PatchDataImpl, -} from '../../../data/base/patch-data'; -import { - SearchData, - SearchDataImpl, -} from '../../../data/base/search-data'; +import { PatchData, PatchDataImpl } from '../../../data/base/patch-data'; +import { SearchData, SearchDataImpl } from '../../../data/base/search-data'; import { DefaultChangeAnalyzer } from '../../../data/default-change-analyzer.service'; import { FindListOptions } from '../../../data/find-list-options.model'; import { PaginatedList } from '../../../data/paginated-list.model'; import { RemoteData } from '../../../data/remote-data'; -import { - DeleteByIDRequest, - PostRequest, -} from '../../../data/request.models'; +import { DeleteByIDRequest, PostRequest } from '../../../data/request.models'; import { RequestService } from '../../../data/request.service'; import { HttpOptions } from '../../../dspace-rest/dspace-rest.service'; +import { FollowLinkConfig } from '../../../shared/follow-link-config.model'; import { HALEndpointService } from '../../../shared/hal-endpoint.service'; import { NoContent } from '../../../shared/NoContent.model'; +import { hasValue } from '@dspace/utils'; +import { ReplaceOperation } from 'fast-json-patch'; +import { Observable } from 'rxjs'; +import { find, switchMap, take } from 'rxjs/operators'; + +import { NotificationsService } from '../../../notification-system/notifications.service'; import { QualityAssuranceEventObject } from '../models/quality-assurance-event.model'; +import { QualityAssuranceEventData } from '../models/quality-assurance-event-data.model'; /** * The service handling all Quality Assurance topic REST requests. diff --git a/projects/dspace/core/src/lib/notifications/qa/index.ts b/projects/dspace/core/src/lib/notifications/qa/index.ts new file mode 100644 index 00000000000..113a867d948 --- /dev/null +++ b/projects/dspace/core/src/lib/notifications/qa/index.ts @@ -0,0 +1,8 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './events/index'; +export * from './models/index'; +export * from './source/index'; +export * from './topics/index'; diff --git a/projects/dspace/core/src/lib/notifications/qa/models/index.ts b/projects/dspace/core/src/lib/notifications/qa/models/index.ts new file mode 100644 index 00000000000..37f43f5642e --- /dev/null +++ b/projects/dspace/core/src/lib/notifications/qa/models/index.ts @@ -0,0 +1,11 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './quality-assurance-event-data.model'; +export * from './quality-assurance-event-object.resource-type'; +export * from './quality-assurance-event.model'; +export * from './quality-assurance-source-object.resource-type'; +export * from './quality-assurance-source.model'; +export * from './quality-assurance-topic-object.resource-type'; +export * from './quality-assurance-topic.model'; diff --git a/projects/dspace/core/src/lib/notifications/qa/models/quality-assurance-event-data.model.ts b/projects/dspace/core/src/lib/notifications/qa/models/quality-assurance-event-data.model.ts new file mode 100644 index 00000000000..fd3afbb3a5f --- /dev/null +++ b/projects/dspace/core/src/lib/notifications/qa/models/quality-assurance-event-data.model.ts @@ -0,0 +1,59 @@ +import { Item } from '../../../shared/item.model'; +import { QualityAssuranceEventObject } from './quality-assurance-event.model'; + +/** + * The possible types of import for the external entry + */ +export enum ImportType { + None = 'None', + LocalEntity = 'LocalEntity', + LocalAuthority = 'LocalAuthority', + NewEntity = 'NewEntity', + NewAuthority = 'NewAuthority' +} + +/** + * The data type passed from the parent page + */ +export interface QualityAssuranceEventData { + /** + * The Quality Assurance event + */ + event: QualityAssuranceEventObject; + /** + * The Quality Assurance event Id (uuid) + */ + id: string; + /** + * The publication title + */ + title: string; + /** + * Contains the boolean that indicates if a project is present + */ + hasProject: boolean; + /** + * The project title, if present + */ + projectTitle: string; + /** + * The project id (uuid), if present + */ + projectId: string; + /** + * The project handle, if present + */ + handle: string; + /** + * The reject/discard reason + */ + reason: string; + /** + * Contains the boolean that indicates if there is a running operation (REST call) + */ + isRunning: boolean; + /** + * The related publication DSpace item + */ + target?: Item; +} diff --git a/src/app/core/notifications/qa/models/quality-assurance-event-object.resource-type.ts b/projects/dspace/core/src/lib/notifications/qa/models/quality-assurance-event-object.resource-type.ts similarity index 100% rename from src/app/core/notifications/qa/models/quality-assurance-event-object.resource-type.ts rename to projects/dspace/core/src/lib/notifications/qa/models/quality-assurance-event-object.resource-type.ts diff --git a/src/app/core/notifications/qa/models/quality-assurance-event.model.ts b/projects/dspace/core/src/lib/notifications/qa/models/quality-assurance-event.model.ts similarity index 95% rename from src/app/core/notifications/qa/models/quality-assurance-event.model.ts rename to projects/dspace/core/src/lib/notifications/qa/models/quality-assurance-event.model.ts index e2a00f2e755..41dd4e21335 100644 --- a/src/app/core/notifications/qa/models/quality-assurance-event.model.ts +++ b/projects/dspace/core/src/lib/notifications/qa/models/quality-assurance-event.model.ts @@ -1,15 +1,5 @@ /* eslint-disable max-classes-per-file */ -import { - autoserialize, - autoserializeAs, - deserialize, -} from 'cerialize'; -import { Observable } from 'rxjs'; - -import { - link, - typedObject, -} from '../../../cache/builders/build-decorators'; +import { link, typedObject } from '../../../cache/builders/build-decorators'; import { CacheableObject } from '../../../cache/cacheable-object.model'; import { RemoteData } from '../../../data/remote-data'; import { HALLink } from '../../../shared/hal-link.model'; @@ -17,6 +7,9 @@ import { Item } from '../../../shared/item.model'; import { ITEM } from '../../../shared/item.resource-type'; import { ResourceType } from '../../../shared/resource-type'; import { excludeFromEquals } from '../../../utilities/equals.decorators'; +import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; +import { Observable } from 'rxjs'; + import { QUALITY_ASSURANCE_EVENT_OBJECT } from './quality-assurance-event-object.resource-type'; /** diff --git a/src/app/core/notifications/qa/models/quality-assurance-source-object.resource-type.ts b/projects/dspace/core/src/lib/notifications/qa/models/quality-assurance-source-object.resource-type.ts similarity index 100% rename from src/app/core/notifications/qa/models/quality-assurance-source-object.resource-type.ts rename to projects/dspace/core/src/lib/notifications/qa/models/quality-assurance-source-object.resource-type.ts diff --git a/src/app/core/notifications/qa/models/quality-assurance-source.model.ts b/projects/dspace/core/src/lib/notifications/qa/models/quality-assurance-source.model.ts similarity index 95% rename from src/app/core/notifications/qa/models/quality-assurance-source.model.ts rename to projects/dspace/core/src/lib/notifications/qa/models/quality-assurance-source.model.ts index 56c674b031c..866ded8a7e5 100644 --- a/src/app/core/notifications/qa/models/quality-assurance-source.model.ts +++ b/projects/dspace/core/src/lib/notifications/qa/models/quality-assurance-source.model.ts @@ -1,13 +1,10 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; - import { typedObject } from '../../../cache/builders/build-decorators'; import { CacheableObject } from '../../../cache/cacheable-object.model'; import { HALLink } from '../../../shared/hal-link.model'; import { ResourceType } from '../../../shared/resource-type'; import { excludeFromEquals } from '../../../utilities/equals.decorators'; +import { autoserialize, deserialize } from 'cerialize'; + import { QUALITY_ASSURANCE_SOURCE_OBJECT } from './quality-assurance-source-object.resource-type'; /** diff --git a/src/app/core/notifications/qa/models/quality-assurance-topic-object.resource-type.ts b/projects/dspace/core/src/lib/notifications/qa/models/quality-assurance-topic-object.resource-type.ts similarity index 100% rename from src/app/core/notifications/qa/models/quality-assurance-topic-object.resource-type.ts rename to projects/dspace/core/src/lib/notifications/qa/models/quality-assurance-topic-object.resource-type.ts diff --git a/src/app/core/notifications/qa/models/quality-assurance-topic.model.ts b/projects/dspace/core/src/lib/notifications/qa/models/quality-assurance-topic.model.ts similarity index 95% rename from src/app/core/notifications/qa/models/quality-assurance-topic.model.ts rename to projects/dspace/core/src/lib/notifications/qa/models/quality-assurance-topic.model.ts index 0d4235a5311..e73d403def0 100644 --- a/src/app/core/notifications/qa/models/quality-assurance-topic.model.ts +++ b/projects/dspace/core/src/lib/notifications/qa/models/quality-assurance-topic.model.ts @@ -1,13 +1,10 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; - import { typedObject } from '../../../cache/builders/build-decorators'; import { CacheableObject } from '../../../cache/cacheable-object.model'; import { HALLink } from '../../../shared/hal-link.model'; import { ResourceType } from '../../../shared/resource-type'; import { excludeFromEquals } from '../../../utilities/equals.decorators'; +import { autoserialize, deserialize } from 'cerialize'; + import { QUALITY_ASSURANCE_TOPIC_OBJECT } from './quality-assurance-topic-object.resource-type'; /** diff --git a/projects/dspace/core/src/lib/notifications/qa/source/index.ts b/projects/dspace/core/src/lib/notifications/qa/source/index.ts new file mode 100644 index 00000000000..506bcc98d46 --- /dev/null +++ b/projects/dspace/core/src/lib/notifications/qa/source/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './quality-assurance-source-data.service.spec'; +export * from './quality-assurance-source-data.service'; diff --git a/src/app/core/notifications/qa/source/quality-assurance-source-data.service.spec.ts b/projects/dspace/core/src/lib/notifications/qa/source/quality-assurance-source-data.service.spec.ts similarity index 91% rename from src/app/core/notifications/qa/source/quality-assurance-source-data.service.spec.ts rename to projects/dspace/core/src/lib/notifications/qa/source/quality-assurance-source-data.service.spec.ts index 25e625f88ed..94d23d679f1 100644 --- a/src/app/core/notifications/qa/source/quality-assurance-source-data.service.spec.ts +++ b/projects/dspace/core/src/lib/notifications/qa/source/quality-assurance-source-data.service.spec.ts @@ -1,18 +1,4 @@ import { HttpClient } from '@angular/common/http'; -import { - cold, - getTestScheduler, -} from 'jasmine-marbles'; -import { of } from 'rxjs'; -import { TestScheduler } from 'rxjs/testing'; - -import { - qualityAssuranceSourceObjectMoreAbstract, - qualityAssuranceSourceObjectMorePid, -} from '../../../../shared/mocks/notifications.mock'; -import { NotificationsService } from '../../../../shared/notifications/notifications.service'; -import { createSuccessfulRemoteDataObject } from '../../../../shared/remote-data.utils'; -import { ObjectCacheServiceStub } from '../../../../shared/testing/object-cache-service.stub'; import { RemoteDataBuildService } from '../../../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../../../cache/object-cache.service'; import { RestResponse } from '../../../cache/response.models'; @@ -21,6 +7,17 @@ import { RequestService } from '../../../data/request.service'; import { RequestEntry } from '../../../data/request-entry.model'; import { HALEndpointService } from '../../../shared/hal-endpoint.service'; import { PageInfo } from '../../../shared/page-info.model'; +import { createSuccessfulRemoteDataObject } from '../../../utilities/remote-data.utils'; +import { cold, getTestScheduler } from 'jasmine-marbles'; +import { of } from 'rxjs'; +import { TestScheduler } from 'rxjs/testing'; + +import { NotificationsService } from '../../../notification-system/notifications.service'; +import { + qualityAssuranceSourceObjectMoreAbstract, + qualityAssuranceSourceObjectMorePid, +} from '../../../testing/notifications.mock'; +import { ObjectCacheServiceStub } from '../../../testing/object-cache-service.stub'; import { QualityAssuranceSourceDataService } from './quality-assurance-source-data.service'; describe('QualityAssuranceSourceDataService', () => { diff --git a/src/app/core/notifications/qa/source/quality-assurance-source-data.service.ts b/projects/dspace/core/src/lib/notifications/qa/source/quality-assurance-source-data.service.ts similarity index 93% rename from src/app/core/notifications/qa/source/quality-assurance-source-data.service.ts rename to projects/dspace/core/src/lib/notifications/qa/source/quality-assurance-source-data.service.ts index 89f28e1e9ef..19d40dc47ec 100644 --- a/src/app/core/notifications/qa/source/quality-assurance-source-data.service.ts +++ b/projects/dspace/core/src/lib/notifications/qa/source/quality-assurance-source-data.service.ts @@ -1,24 +1,18 @@ import { Injectable } from '@angular/core'; -import { Observable } from 'rxjs'; - -import { NotificationsService } from '../../../../shared/notifications/notifications.service'; -import { FollowLinkConfig } from '../../../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../../../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../../../cache/object-cache.service'; -import { - FindAllData, - FindAllDataImpl, -} from '../../../data/base/find-all-data'; +import { FindAllData, FindAllDataImpl } from '../../../data/base/find-all-data'; import { IdentifiableDataService } from '../../../data/base/identifiable-data.service'; -import { - SearchData, - SearchDataImpl, -} from '../../../data/base/search-data'; +import { SearchData, SearchDataImpl } from '../../../data/base/search-data'; import { FindListOptions } from '../../../data/find-list-options.model'; import { PaginatedList } from '../../../data/paginated-list.model'; import { RemoteData } from '../../../data/remote-data'; import { RequestService } from '../../../data/request.service'; +import { FollowLinkConfig } from '../../../shared/follow-link-config.model'; import { HALEndpointService } from '../../../shared/hal-endpoint.service'; +import { Observable } from 'rxjs'; + +import { NotificationsService } from '../../../notification-system/notifications.service'; import { QualityAssuranceSourceObject } from '../models/quality-assurance-source.model'; /** diff --git a/projects/dspace/core/src/lib/notifications/qa/topics/index.ts b/projects/dspace/core/src/lib/notifications/qa/topics/index.ts new file mode 100644 index 00000000000..70cdf5bcab6 --- /dev/null +++ b/projects/dspace/core/src/lib/notifications/qa/topics/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './quality-assurance-topic-data.service.spec'; +export * from './quality-assurance-topic-data.service'; diff --git a/src/app/core/notifications/qa/topics/quality-assurance-topic-data.service.spec.ts b/projects/dspace/core/src/lib/notifications/qa/topics/quality-assurance-topic-data.service.spec.ts similarity index 92% rename from src/app/core/notifications/qa/topics/quality-assurance-topic-data.service.spec.ts rename to projects/dspace/core/src/lib/notifications/qa/topics/quality-assurance-topic-data.service.spec.ts index 03463adcb64..e64c99ea33b 100644 --- a/src/app/core/notifications/qa/topics/quality-assurance-topic-data.service.spec.ts +++ b/projects/dspace/core/src/lib/notifications/qa/topics/quality-assurance-topic-data.service.spec.ts @@ -1,18 +1,4 @@ import { HttpClient } from '@angular/common/http'; -import { - cold, - getTestScheduler, -} from 'jasmine-marbles'; -import { of } from 'rxjs'; -import { TestScheduler } from 'rxjs/testing'; - -import { - qualityAssuranceTopicObjectMoreAbstract, - qualityAssuranceTopicObjectMorePid, -} from '../../../../shared/mocks/notifications.mock'; -import { NotificationsService } from '../../../../shared/notifications/notifications.service'; -import { createSuccessfulRemoteDataObject } from '../../../../shared/remote-data.utils'; -import { ObjectCacheServiceStub } from '../../../../shared/testing/object-cache-service.stub'; import { RemoteDataBuildService } from '../../../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../../../cache/object-cache.service'; import { RestResponse } from '../../../cache/response.models'; @@ -21,6 +7,17 @@ import { RequestService } from '../../../data/request.service'; import { RequestEntry } from '../../../data/request-entry.model'; import { HALEndpointService } from '../../../shared/hal-endpoint.service'; import { PageInfo } from '../../../shared/page-info.model'; +import { createSuccessfulRemoteDataObject } from '../../../utilities/remote-data.utils'; +import { cold, getTestScheduler } from 'jasmine-marbles'; +import { of } from 'rxjs'; +import { TestScheduler } from 'rxjs/testing'; + +import { NotificationsService } from '../../../notification-system/notifications.service'; +import { + qualityAssuranceTopicObjectMoreAbstract, + qualityAssuranceTopicObjectMorePid, +} from '../../../testing/notifications.mock'; +import { ObjectCacheServiceStub } from '../../../testing/object-cache-service.stub'; import { QualityAssuranceTopicDataService } from './quality-assurance-topic-data.service'; describe('QualityAssuranceTopicDataService', () => { diff --git a/src/app/core/notifications/qa/topics/quality-assurance-topic-data.service.ts b/projects/dspace/core/src/lib/notifications/qa/topics/quality-assurance-topic-data.service.ts similarity index 93% rename from src/app/core/notifications/qa/topics/quality-assurance-topic-data.service.ts rename to projects/dspace/core/src/lib/notifications/qa/topics/quality-assurance-topic-data.service.ts index 3ae6eab2f18..9daf261f7f7 100644 --- a/src/app/core/notifications/qa/topics/quality-assurance-topic-data.service.ts +++ b/projects/dspace/core/src/lib/notifications/qa/topics/quality-assurance-topic-data.service.ts @@ -1,24 +1,18 @@ import { Injectable } from '@angular/core'; -import { Observable } from 'rxjs'; - -import { NotificationsService } from '../../../../shared/notifications/notifications.service'; -import { FollowLinkConfig } from '../../../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../../../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../../../cache/object-cache.service'; -import { - FindAllData, - FindAllDataImpl, -} from '../../../data/base/find-all-data'; +import { FindAllData, FindAllDataImpl } from '../../../data/base/find-all-data'; import { IdentifiableDataService } from '../../../data/base/identifiable-data.service'; -import { - SearchData, - SearchDataImpl, -} from '../../../data/base/search-data'; +import { SearchData, SearchDataImpl } from '../../../data/base/search-data'; import { FindListOptions } from '../../../data/find-list-options.model'; import { PaginatedList } from '../../../data/paginated-list.model'; import { RemoteData } from '../../../data/remote-data'; import { RequestService } from '../../../data/request.service'; +import { FollowLinkConfig } from '../../../shared/follow-link-config.model'; import { HALEndpointService } from '../../../shared/hal-endpoint.service'; +import { Observable } from 'rxjs'; + +import { NotificationsService } from '../../../notification-system/notifications.service'; import { QualityAssuranceTopicObject } from '../models/quality-assurance-topic.model'; /** diff --git a/projects/dspace/core/src/lib/notifications/suggestions/index.ts b/projects/dspace/core/src/lib/notifications/suggestions/index.ts new file mode 100644 index 00000000000..147a3d9cf27 --- /dev/null +++ b/projects/dspace/core/src/lib/notifications/suggestions/index.ts @@ -0,0 +1,9 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './suggestion-data.service.spec'; +export * from './suggestion-data.service'; +export * from './models/index'; +export * from './source/index'; +export * from './target/index'; diff --git a/projects/dspace/core/src/lib/notifications/suggestions/models/index.ts b/projects/dspace/core/src/lib/notifications/suggestions/models/index.ts new file mode 100644 index 00000000000..d058a42bf0d --- /dev/null +++ b/projects/dspace/core/src/lib/notifications/suggestions/models/index.ts @@ -0,0 +1,10 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './suggestion-objects.resource-type'; +export * from './suggestion-source-object.resource-type'; +export * from './suggestion-source.model'; +export * from './suggestion-target-object.resource-type'; +export * from './suggestion-target.model'; +export * from './suggestion.model'; diff --git a/src/app/core/notifications/suggestions/models/suggestion-objects.resource-type.ts b/projects/dspace/core/src/lib/notifications/suggestions/models/suggestion-objects.resource-type.ts similarity index 100% rename from src/app/core/notifications/suggestions/models/suggestion-objects.resource-type.ts rename to projects/dspace/core/src/lib/notifications/suggestions/models/suggestion-objects.resource-type.ts diff --git a/src/app/core/notifications/suggestions/models/suggestion-source-object.resource-type.ts b/projects/dspace/core/src/lib/notifications/suggestions/models/suggestion-source-object.resource-type.ts similarity index 100% rename from src/app/core/notifications/suggestions/models/suggestion-source-object.resource-type.ts rename to projects/dspace/core/src/lib/notifications/suggestions/models/suggestion-source-object.resource-type.ts diff --git a/src/app/core/notifications/suggestions/models/suggestion-source.model.ts b/projects/dspace/core/src/lib/notifications/suggestions/models/suggestion-source.model.ts similarity index 94% rename from src/app/core/notifications/suggestions/models/suggestion-source.model.ts rename to projects/dspace/core/src/lib/notifications/suggestions/models/suggestion-source.model.ts index 0218ab4ae14..e1f4cde2760 100644 --- a/src/app/core/notifications/suggestions/models/suggestion-source.model.ts +++ b/projects/dspace/core/src/lib/notifications/suggestions/models/suggestion-source.model.ts @@ -1,13 +1,10 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; - import { typedObject } from '../../../cache/builders/build-decorators'; import { CacheableObject } from '../../../cache/cacheable-object.model'; import { HALLink } from '../../../shared/hal-link.model'; import { ResourceType } from '../../../shared/resource-type'; import { excludeFromEquals } from '../../../utilities/equals.decorators'; +import { autoserialize, deserialize } from 'cerialize'; + import { SUGGESTION_SOURCE } from './suggestion-source-object.resource-type'; /** diff --git a/src/app/core/notifications/suggestions/models/suggestion-target-object.resource-type.ts b/projects/dspace/core/src/lib/notifications/suggestions/models/suggestion-target-object.resource-type.ts similarity index 100% rename from src/app/core/notifications/suggestions/models/suggestion-target-object.resource-type.ts rename to projects/dspace/core/src/lib/notifications/suggestions/models/suggestion-target-object.resource-type.ts diff --git a/src/app/core/notifications/suggestions/models/suggestion-target.model.ts b/projects/dspace/core/src/lib/notifications/suggestions/models/suggestion-target.model.ts similarity index 95% rename from src/app/core/notifications/suggestions/models/suggestion-target.model.ts rename to projects/dspace/core/src/lib/notifications/suggestions/models/suggestion-target.model.ts index 94d6b7bfa10..bc13379c886 100644 --- a/src/app/core/notifications/suggestions/models/suggestion-target.model.ts +++ b/projects/dspace/core/src/lib/notifications/suggestions/models/suggestion-target.model.ts @@ -1,13 +1,10 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; - import { typedObject } from '../../../cache/builders/build-decorators'; import { CacheableObject } from '../../../cache/cacheable-object.model'; import { HALLink } from '../../../shared/hal-link.model'; import { ResourceType } from '../../../shared/resource-type'; import { excludeFromEquals } from '../../../utilities/equals.decorators'; +import { autoserialize, deserialize } from 'cerialize'; + import { SUGGESTION_TARGET } from './suggestion-target-object.resource-type'; /** diff --git a/src/app/core/notifications/suggestions/models/suggestion.model.ts b/projects/dspace/core/src/lib/notifications/suggestions/models/suggestion.model.ts similarity index 91% rename from src/app/core/notifications/suggestions/models/suggestion.model.ts rename to projects/dspace/core/src/lib/notifications/suggestions/models/suggestion.model.ts index 82bc46750e6..7b57845a369 100644 --- a/src/app/core/notifications/suggestions/models/suggestion.model.ts +++ b/projects/dspace/core/src/lib/notifications/suggestions/models/suggestion.model.ts @@ -1,18 +1,11 @@ -import { - autoserialize, - autoserializeAs, - deserialize, -} from 'cerialize'; - import { typedObject } from '../../../cache/builders/build-decorators'; import { CacheableObject } from '../../../cache/cacheable-object.model'; import { HALLink } from '../../../shared/hal-link.model'; -import { - MetadataMap, - MetadataMapSerializer, -} from '../../../shared/metadata.models'; +import { MetadataMap, MetadataMapSerializer } from '../../../shared/metadata.models'; import { ResourceType } from '../../../shared/resource-type'; import { excludeFromEquals } from '../../../utilities/equals.decorators'; +import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; + import { SUGGESTION } from './suggestion-objects.resource-type'; /** diff --git a/projects/dspace/core/src/lib/notifications/suggestions/source/index.ts b/projects/dspace/core/src/lib/notifications/suggestions/source/index.ts new file mode 100644 index 00000000000..e9cae53a638 --- /dev/null +++ b/projects/dspace/core/src/lib/notifications/suggestions/source/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './suggestion-source-data.service.spec'; +export * from './suggestion-source-data.service'; diff --git a/src/app/core/notifications/suggestions/source/suggestion-source-data.service.spec.ts b/projects/dspace/core/src/lib/notifications/suggestions/source/suggestion-source-data.service.spec.ts similarity index 94% rename from src/app/core/notifications/suggestions/source/suggestion-source-data.service.spec.ts rename to projects/dspace/core/src/lib/notifications/suggestions/source/suggestion-source-data.service.spec.ts index 42fc9e7774b..760f0b9c3eb 100644 --- a/src/app/core/notifications/suggestions/source/suggestion-source-data.service.spec.ts +++ b/projects/dspace/core/src/lib/notifications/suggestions/source/suggestion-source-data.service.spec.ts @@ -1,14 +1,4 @@ import { HttpClient } from '@angular/common/http'; -import { Store } from '@ngrx/store'; -import { - cold, - getTestScheduler, -} from 'jasmine-marbles'; -import { of } from 'rxjs'; -import { TestScheduler } from 'rxjs/testing'; - -import { NotificationsService } from '../../../../shared/notifications/notifications.service'; -import { createSuccessfulRemoteDataObject$ } from '../../../../shared/remote-data.utils'; import { RemoteDataBuildService } from '../../../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../../../cache/object-cache.service'; import { RestResponse } from '../../../cache/response.models'; @@ -22,6 +12,13 @@ import { RequestService } from '../../../data/request.service'; import { RequestEntry } from '../../../data/request-entry.model'; import { RequestEntryState } from '../../../data/request-entry-state.model'; import { HALEndpointService } from '../../../shared/hal-endpoint.service'; +import { createSuccessfulRemoteDataObject$ } from '../../../utilities/remote-data.utils'; +import { Store } from '@ngrx/store'; +import { cold, getTestScheduler } from 'jasmine-marbles'; +import { of } from 'rxjs'; +import { TestScheduler } from 'rxjs/testing'; + +import { NotificationsService } from '../../../notification-system/notifications.service'; import { SuggestionSource } from '../models/suggestion-source.model'; import { SuggestionSourceDataService } from './suggestion-source-data.service'; diff --git a/src/app/core/notifications/suggestions/source/suggestion-source-data.service.ts b/projects/dspace/core/src/lib/notifications/suggestions/source/suggestion-source-data.service.ts similarity index 95% rename from src/app/core/notifications/suggestions/source/suggestion-source-data.service.ts rename to projects/dspace/core/src/lib/notifications/suggestions/source/suggestion-source-data.service.ts index d90c1a8e8c4..c054fc14055 100644 --- a/src/app/core/notifications/suggestions/source/suggestion-source-data.service.ts +++ b/projects/dspace/core/src/lib/notifications/suggestions/source/suggestion-source-data.service.ts @@ -1,24 +1,21 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { Observable } from 'rxjs'; - -import { NotificationsService } from '../../../../shared/notifications/notifications.service'; -import { FollowLinkConfig } from '../../../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../../../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../../../cache/object-cache.service'; import { CoreState } from '../../../core-state.model'; -import { - FindAllData, - FindAllDataImpl, -} from '../../../data/base/find-all-data'; +import { FindAllData, FindAllDataImpl } from '../../../data/base/find-all-data'; import { IdentifiableDataService } from '../../../data/base/identifiable-data.service'; import { DefaultChangeAnalyzer } from '../../../data/default-change-analyzer.service'; import { FindListOptions } from '../../../data/find-list-options.model'; import { PaginatedList } from '../../../data/paginated-list.model'; import { RemoteData } from '../../../data/remote-data'; import { RequestService } from '../../../data/request.service'; +import { FollowLinkConfig } from '../../../shared/follow-link-config.model'; import { HALEndpointService } from '../../../shared/hal-endpoint.service'; +import { Store } from '@ngrx/store'; +import { Observable } from 'rxjs'; + +import { NotificationsService } from '../../../notification-system/notifications.service'; import { SuggestionSource } from '../models/suggestion-source.model'; /** diff --git a/src/app/core/notifications/suggestions/suggestion-data.service.spec.ts b/projects/dspace/core/src/lib/notifications/suggestions/suggestion-data.service.spec.ts similarity index 93% rename from src/app/core/notifications/suggestions/suggestion-data.service.spec.ts rename to projects/dspace/core/src/lib/notifications/suggestions/suggestion-data.service.spec.ts index 7ed80bdbce2..885f67ca7dc 100644 --- a/src/app/core/notifications/suggestions/suggestion-data.service.spec.ts +++ b/projects/dspace/core/src/lib/notifications/suggestions/suggestion-data.service.spec.ts @@ -1,13 +1,8 @@ import { HttpClient } from '@angular/common/http'; -import { - cold, - getTestScheduler, -} from 'jasmine-marbles'; +import { cold, getTestScheduler } from 'jasmine-marbles'; import { of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { NotificationsService } from '../../../shared/notifications/notifications.service'; -import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils'; import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { RequestParam } from '../../cache/models/request-param.model'; import { ObjectCacheService } from '../../cache/object-cache.service'; @@ -16,7 +11,9 @@ import { RemoteData } from '../../data/remote-data'; import { RequestService } from '../../data/request.service'; import { RequestEntry } from '../../data/request-entry.model'; import { RequestEntryState } from '../../data/request-entry-state.model'; +import { NotificationsService } from '../../notification-system/notifications.service'; import { HALEndpointService } from '../../shared/hal-endpoint.service'; +import { createSuccessfulRemoteDataObject$ } from '../../utilities/remote-data.utils'; import { SuggestionDataService } from './suggestion-data.service'; describe('SuggestionDataService test', () => { diff --git a/src/app/core/notifications/suggestions/suggestion-data.service.ts b/projects/dspace/core/src/lib/notifications/suggestions/suggestion-data.service.ts similarity index 93% rename from src/app/core/notifications/suggestions/suggestion-data.service.ts rename to projects/dspace/core/src/lib/notifications/suggestions/suggestion-data.service.ts index 328862dbaf9..f5b3f99e5c4 100644 --- a/src/app/core/notifications/suggestions/suggestion-data.service.ts +++ b/projects/dspace/core/src/lib/notifications/suggestions/suggestion-data.service.ts @@ -2,21 +2,18 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; -import { NotificationsService } from '../../../shared/notifications/notifications.service'; -import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { RequestParam } from '../../cache/models/request-param.model'; import { ObjectCacheService } from '../../cache/object-cache.service'; -import { - DeleteData, - DeleteDataImpl, -} from '../../data/base/delete-data'; +import { DeleteData, DeleteDataImpl } from '../../data/base/delete-data'; import { IdentifiableDataService } from '../../data/base/identifiable-data.service'; import { SearchDataImpl } from '../../data/base/search-data'; import { FindListOptions } from '../../data/find-list-options.model'; import { PaginatedList } from '../../data/paginated-list.model'; import { RemoteData } from '../../data/remote-data'; import { RequestService } from '../../data/request.service'; +import { NotificationsService } from '../../notification-system/notifications.service'; +import { FollowLinkConfig } from '../../shared/follow-link-config.model'; import { HALEndpointService } from '../../shared/hal-endpoint.service'; import { NoContent } from '../../shared/NoContent.model'; import { Suggestion } from './models/suggestion.model'; diff --git a/projects/dspace/core/src/lib/notifications/suggestions/target/index.ts b/projects/dspace/core/src/lib/notifications/suggestions/target/index.ts new file mode 100644 index 00000000000..3890da6b743 --- /dev/null +++ b/projects/dspace/core/src/lib/notifications/suggestions/target/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './suggestion-target-data.service.spec'; +export * from './suggestion-target-data.service'; diff --git a/src/app/core/notifications/suggestions/target/suggestion-target-data.service.spec.ts b/projects/dspace/core/src/lib/notifications/suggestions/target/suggestion-target-data.service.spec.ts similarity index 95% rename from src/app/core/notifications/suggestions/target/suggestion-target-data.service.spec.ts rename to projects/dspace/core/src/lib/notifications/suggestions/target/suggestion-target-data.service.spec.ts index b88513abe3e..a45b71f54e5 100644 --- a/src/app/core/notifications/suggestions/target/suggestion-target-data.service.spec.ts +++ b/projects/dspace/core/src/lib/notifications/suggestions/target/suggestion-target-data.service.spec.ts @@ -1,14 +1,4 @@ import { HttpClient } from '@angular/common/http'; -import { Store } from '@ngrx/store'; -import { - cold, - getTestScheduler, -} from 'jasmine-marbles'; -import { of } from 'rxjs'; -import { TestScheduler } from 'rxjs/testing'; - -import { NotificationsService } from '../../../../shared/notifications/notifications.service'; -import { createSuccessfulRemoteDataObject$ } from '../../../../shared/remote-data.utils'; import { RemoteDataBuildService } from '../../../cache/builders/remote-data-build.service'; import { RequestParam } from '../../../cache/models/request-param.model'; import { ObjectCacheService } from '../../../cache/object-cache.service'; @@ -25,6 +15,13 @@ import { RequestService } from '../../../data/request.service'; import { RequestEntry } from '../../../data/request-entry.model'; import { RequestEntryState } from '../../../data/request-entry-state.model'; import { HALEndpointService } from '../../../shared/hal-endpoint.service'; +import { createSuccessfulRemoteDataObject$ } from '../../../utilities/remote-data.utils'; +import { Store } from '@ngrx/store'; +import { cold, getTestScheduler } from 'jasmine-marbles'; +import { of } from 'rxjs'; +import { TestScheduler } from 'rxjs/testing'; + +import { NotificationsService } from '../../../notification-system/notifications.service'; import { SuggestionTarget } from '../models/suggestion-target.model'; import { SuggestionTargetDataService } from './suggestion-target-data.service'; diff --git a/src/app/core/notifications/suggestions/target/suggestion-target-data.service.ts b/projects/dspace/core/src/lib/notifications/suggestions/target/suggestion-target-data.service.ts similarity index 95% rename from src/app/core/notifications/suggestions/target/suggestion-target-data.service.ts rename to projects/dspace/core/src/lib/notifications/suggestions/target/suggestion-target-data.service.ts index a83b24f0853..4021977d3bc 100644 --- a/src/app/core/notifications/suggestions/target/suggestion-target-data.service.ts +++ b/projects/dspace/core/src/lib/notifications/suggestions/target/suggestion-target-data.service.ts @@ -1,29 +1,23 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { Observable } from 'rxjs'; - -import { NotificationsService } from '../../../../shared/notifications/notifications.service'; -import { FollowLinkConfig } from '../../../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../../../cache/builders/remote-data-build.service'; import { RequestParam } from '../../../cache/models/request-param.model'; import { ObjectCacheService } from '../../../cache/object-cache.service'; import { CoreState } from '../../../core-state.model'; -import { - FindAllData, - FindAllDataImpl, -} from '../../../data/base/find-all-data'; +import { FindAllData, FindAllDataImpl } from '../../../data/base/find-all-data'; import { IdentifiableDataService } from '../../../data/base/identifiable-data.service'; -import { - SearchData, - SearchDataImpl, -} from '../../../data/base/search-data'; +import { SearchData, SearchDataImpl } from '../../../data/base/search-data'; import { DefaultChangeAnalyzer } from '../../../data/default-change-analyzer.service'; import { FindListOptions } from '../../../data/find-list-options.model'; import { PaginatedList } from '../../../data/paginated-list.model'; import { RemoteData } from '../../../data/remote-data'; import { RequestService } from '../../../data/request.service'; +import { FollowLinkConfig } from '../../../shared/follow-link-config.model'; import { HALEndpointService } from '../../../shared/hal-endpoint.service'; +import { Store } from '@ngrx/store'; +import { Observable } from 'rxjs'; + +import { NotificationsService } from '../../../notification-system/notifications.service'; import { SuggestionTarget } from '../models/suggestion-target.model'; @Injectable({ providedIn: 'root' }) diff --git a/projects/dspace/core/src/lib/orcid/index.ts b/projects/dspace/core/src/lib/orcid/index.ts new file mode 100644 index 00000000000..3ca20d91543 --- /dev/null +++ b/projects/dspace/core/src/lib/orcid/index.ts @@ -0,0 +1,9 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './orcid-auth.service.spec'; +export * from './orcid-auth.service'; +export * from './orcid-history-data.service'; +export * from './orcid-queue-data.service'; +export * from './model/index'; diff --git a/projects/dspace/core/src/lib/orcid/model/index.ts b/projects/dspace/core/src/lib/orcid/model/index.ts new file mode 100644 index 00000000000..ddf57d27486 --- /dev/null +++ b/projects/dspace/core/src/lib/orcid/model/index.ts @@ -0,0 +1,8 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './orcid-history.model'; +export * from './orcid-history.resource-type'; +export * from './orcid-queue.model'; +export * from './orcid-queue.resource-type'; diff --git a/src/app/core/orcid/model/orcid-history.model.ts b/projects/dspace/core/src/lib/orcid/model/orcid-history.model.ts similarity index 96% rename from src/app/core/orcid/model/orcid-history.model.ts rename to projects/dspace/core/src/lib/orcid/model/orcid-history.model.ts index aa8c4b41ba9..1f25882bddc 100644 --- a/src/app/core/orcid/model/orcid-history.model.ts +++ b/projects/dspace/core/src/lib/orcid/model/orcid-history.model.ts @@ -1,7 +1,4 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; +import { autoserialize, deserialize } from 'cerialize'; import { typedObject } from '../../cache/builders/build-decorators'; import { CacheableObject } from '../../cache/cacheable-object.model'; diff --git a/src/app/core/orcid/model/orcid-history.resource-type.ts b/projects/dspace/core/src/lib/orcid/model/orcid-history.resource-type.ts similarity index 100% rename from src/app/core/orcid/model/orcid-history.resource-type.ts rename to projects/dspace/core/src/lib/orcid/model/orcid-history.resource-type.ts diff --git a/src/app/core/orcid/model/orcid-queue.model.ts b/projects/dspace/core/src/lib/orcid/model/orcid-queue.model.ts similarity index 95% rename from src/app/core/orcid/model/orcid-queue.model.ts rename to projects/dspace/core/src/lib/orcid/model/orcid-queue.model.ts index 2735114f22d..4e18661c6ef 100644 --- a/src/app/core/orcid/model/orcid-queue.model.ts +++ b/projects/dspace/core/src/lib/orcid/model/orcid-queue.model.ts @@ -1,7 +1,4 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; +import { autoserialize, deserialize } from 'cerialize'; import { typedObject } from '../../cache/builders/build-decorators'; import { CacheableObject } from '../../cache/cacheable-object.model'; diff --git a/src/app/core/orcid/model/orcid-queue.resource-type.ts b/projects/dspace/core/src/lib/orcid/model/orcid-queue.resource-type.ts similarity index 100% rename from src/app/core/orcid/model/orcid-queue.resource-type.ts rename to projects/dspace/core/src/lib/orcid/model/orcid-queue.resource-type.ts diff --git a/src/app/core/orcid/orcid-auth.service.spec.ts b/projects/dspace/core/src/lib/orcid/orcid-auth.service.spec.ts similarity index 96% rename from src/app/core/orcid/orcid-auth.service.spec.ts rename to projects/dspace/core/src/lib/orcid/orcid-auth.service.spec.ts index a3dc628029b..7c79522feaa 100644 --- a/src/app/core/orcid/orcid-auth.service.spec.ts +++ b/projects/dspace/core/src/lib/orcid/orcid-auth.service.spec.ts @@ -1,26 +1,20 @@ -import { - AddOperation, - RemoveOperation, -} from 'fast-json-patch'; -import { - cold, - getTestScheduler, -} from 'jasmine-marbles'; +import { AddOperation, RemoveOperation } from 'fast-json-patch'; +import { cold, getTestScheduler } from 'jasmine-marbles'; import { TestScheduler } from 'rxjs/testing'; -import { NativeWindowRefMock } from '../../shared/mocks/mock-native-window-ref'; -import { RouterMock } from '../../shared/mocks/router.mock'; -import { - createFailedRemoteDataObject$, - createSuccessfulRemoteDataObject$, -} from '../../shared/remote-data.utils'; -import { createPaginatedList } from '../../shared/testing/utils.test'; import { ConfigurationDataService } from '../data/configuration-data.service'; import { ResearcherProfile } from '../profile/model/researcher-profile.model'; import { ResearcherProfileDataService } from '../profile/researcher-profile-data.service'; import { ConfigurationProperty } from '../shared/configuration-property.model'; import { Item } from '../shared/item.model'; +import { NativeWindowRefMock } from '../testing/mock-native-window-ref'; +import { RouterMock } from '../testing/router.mock'; +import { createPaginatedList } from '../testing/utils.test'; import { URLCombiner } from '../url-combiner/url-combiner'; +import { + createFailedRemoteDataObject$, + createSuccessfulRemoteDataObject$, +} from '../utilities/remote-data.utils'; import { OrcidAuthService } from './orcid-auth.service'; describe('OrcidAuthService', () => { diff --git a/src/app/core/orcid/orcid-auth.service.ts b/projects/dspace/core/src/lib/orcid/orcid-auth.service.ts similarity index 93% rename from src/app/core/orcid/orcid-auth.service.ts rename to projects/dspace/core/src/lib/orcid/orcid-auth.service.ts index 5b3ab7cfd0d..7e16f4085a9 100644 --- a/src/app/core/orcid/orcid-auth.service.ts +++ b/projects/dspace/core/src/lib/orcid/orcid-auth.service.ts @@ -1,30 +1,15 @@ -import { - Inject, - Injectable, -} from '@angular/core'; +import { Inject, Injectable } from '@angular/core'; import { Router } from '@angular/router'; -import { - AddOperation, - RemoveOperation, -} from 'fast-json-patch'; -import { - combineLatest, - Observable, -} from 'rxjs'; -import { - map, - switchMap, -} from 'rxjs/operators'; +import { isNotEmpty } from '@dspace/utils'; +import { AddOperation, RemoveOperation } from 'fast-json-patch'; +import { combineLatest, Observable } from 'rxjs'; +import { map, switchMap } from 'rxjs/operators'; -import { isNotEmpty } from '../../shared/empty.util'; import { ConfigurationDataService } from '../data/configuration-data.service'; import { RemoteData } from '../data/remote-data'; import { ResearcherProfile } from '../profile/model/researcher-profile.model'; import { ResearcherProfileDataService } from '../profile/researcher-profile-data.service'; -import { - NativeWindowRef, - NativeWindowService, -} from '../services/window.service'; +import { NativeWindowRef, NativeWindowService } from '../services/window.service'; import { ConfigurationProperty } from '../shared/configuration-property.model'; import { Item } from '../shared/item.model'; import { diff --git a/src/app/core/orcid/orcid-history-data.service.ts b/projects/dspace/core/src/lib/orcid/orcid-history-data.service.ts similarity index 97% rename from src/app/core/orcid/orcid-history-data.service.ts rename to projects/dspace/core/src/lib/orcid/orcid-history-data.service.ts index 4b0497886be..4efed274675 100644 --- a/src/app/core/orcid/orcid-history-data.service.ts +++ b/projects/dspace/core/src/lib/orcid/orcid-history-data.service.ts @@ -1,10 +1,7 @@ import { HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; -import { - map, - switchMap, -} from 'rxjs/operators'; +import { map, switchMap } from 'rxjs/operators'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; diff --git a/src/app/core/orcid/orcid-queue-data.service.ts b/projects/dspace/core/src/lib/orcid/orcid-queue-data.service.ts similarity index 90% rename from src/app/core/orcid/orcid-queue-data.service.ts rename to projects/dspace/core/src/lib/orcid/orcid-queue-data.service.ts index 9b03c4eba12..42103e9d79e 100644 --- a/src/app/core/orcid/orcid-queue-data.service.ts +++ b/projects/dspace/core/src/lib/orcid/orcid-queue-data.service.ts @@ -1,23 +1,17 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; -import { - DeleteData, - DeleteDataImpl, -} from '../data/base/delete-data'; +import { DeleteData, DeleteDataImpl } from '../data/base/delete-data'; import { IdentifiableDataService } from '../data/base/identifiable-data.service'; -import { - SearchData, - SearchDataImpl, -} from '../data/base/search-data'; +import { SearchData, SearchDataImpl } from '../data/base/search-data'; import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; import { RequestService } from '../data/request.service'; +import { NotificationsService } from '../notification-system/notifications.service'; +import { PaginationComponentOptions } from '../pagination/pagination-component-options.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { NoContent } from '../shared/NoContent.model'; import { OrcidQueue } from './model/orcid-queue.model'; diff --git a/projects/dspace/core/src/lib/pagination/index.ts b/projects/dspace/core/src/lib/pagination/index.ts new file mode 100644 index 00000000000..d9617283c0e --- /dev/null +++ b/projects/dspace/core/src/lib/pagination/index.ts @@ -0,0 +1,10 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './pagination-component-options.model'; +export * from './pagination-route-params.interface'; +export * from './pagination.service.spec'; +export * from './pagination.service'; +export * from './pagination.utils'; +export * from './paginationChangeEvent.interface'; diff --git a/src/app/shared/pagination/pagination-component-options.model.ts b/projects/dspace/core/src/lib/pagination/pagination-component-options.model.ts similarity index 100% rename from src/app/shared/pagination/pagination-component-options.model.ts rename to projects/dspace/core/src/lib/pagination/pagination-component-options.model.ts diff --git a/src/app/core/pagination/pagination-route-params.interface.ts b/projects/dspace/core/src/lib/pagination/pagination-route-params.interface.ts similarity index 100% rename from src/app/core/pagination/pagination-route-params.interface.ts rename to projects/dspace/core/src/lib/pagination/pagination-route-params.interface.ts diff --git a/src/app/core/pagination/pagination.service.spec.ts b/projects/dspace/core/src/lib/pagination/pagination.service.spec.ts similarity index 96% rename from src/app/core/pagination/pagination.service.spec.ts rename to projects/dspace/core/src/lib/pagination/pagination.service.spec.ts index 529317c7f25..8d41572dfac 100644 --- a/src/app/core/pagination/pagination.service.spec.ts +++ b/projects/dspace/core/src/lib/pagination/pagination.service.spec.ts @@ -1,13 +1,10 @@ import { of } from 'rxjs'; -import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model'; -import { RouterStub } from '../../shared/testing/router.stub'; -import { - SortDirection, - SortOptions, -} from '../cache/models/sort-options.model'; +import { SortDirection, SortOptions } from '../cache/models/sort-options.model'; import { FindListOptions } from '../data/find-list-options.model'; +import { RouterStub } from '../testing/router.stub'; import { PaginationService } from './pagination.service'; +import { PaginationComponentOptions } from './pagination-component-options.model'; describe('PaginationService', () => { diff --git a/src/app/core/pagination/pagination.service.ts b/projects/dspace/core/src/lib/pagination/pagination.service.ts similarity index 94% rename from src/app/core/pagination/pagination.service.ts rename to projects/dspace/core/src/lib/pagination/pagination.service.ts index 0597daa3631..5c1ca6ca528 100644 --- a/src/app/core/pagination/pagination.service.ts +++ b/projects/dspace/core/src/lib/pagination/pagination.service.ts @@ -1,32 +1,13 @@ import { Injectable } from '@angular/core'; -import { - NavigationExtras, - Router, -} from '@angular/router'; -import { - combineLatest as observableCombineLatest, - Observable, -} from 'rxjs'; -import { - filter, - map, - take, -} from 'rxjs/operators'; +import { NavigationExtras, Router } from '@angular/router'; +import { hasValue, isEmpty, isNotEmpty, isNumeric, difference } from '@dspace/utils'; +import { combineLatest as observableCombineLatest, Observable } from 'rxjs'; +import { filter, map, take } from 'rxjs/operators'; -import { - hasValue, - isEmpty, - isNotEmpty, -} from '../../shared/empty.util'; -import { isNumeric } from '../../shared/numeric.util'; -import { difference } from '../../shared/object.util'; -import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model'; -import { - SortDirection, - SortOptions, -} from '../cache/models/sort-options.model'; +import { SortDirection, SortOptions } from '../cache/models/sort-options.model'; import { FindListOptions } from '../data/find-list-options.model'; import { RouteService } from '../services/route.service'; +import { PaginationComponentOptions } from './pagination-component-options.model'; import { PaginationRouteParams } from './pagination-route-params.interface'; @Injectable({ diff --git a/src/app/shared/pagination/pagination.utils.ts b/projects/dspace/core/src/lib/pagination/pagination.utils.ts similarity index 88% rename from src/app/shared/pagination/pagination.utils.ts rename to projects/dspace/core/src/lib/pagination/pagination.utils.ts index 2add33e2ea8..023f1025f18 100644 --- a/src/app/shared/pagination/pagination.utils.ts +++ b/projects/dspace/core/src/lib/pagination/pagination.utils.ts @@ -1,4 +1,4 @@ -import { FindListOptions } from '../../core/data/find-list-options.model'; +import { FindListOptions } from '../data/find-list-options.model'; import { PaginationComponentOptions } from './pagination-component-options.model'; /** diff --git a/src/app/shared/pagination/paginationChangeEvent.interface.ts b/projects/dspace/core/src/lib/pagination/paginationChangeEvent.interface.ts similarity index 87% rename from src/app/shared/pagination/paginationChangeEvent.interface.ts rename to projects/dspace/core/src/lib/pagination/paginationChangeEvent.interface.ts index a6b10f9cff5..52b7490a898 100644 --- a/src/app/shared/pagination/paginationChangeEvent.interface.ts +++ b/projects/dspace/core/src/lib/pagination/paginationChangeEvent.interface.ts @@ -1,4 +1,4 @@ -import { SortOptions } from '../../core/cache/models/sort-options.model'; +import { SortOptions } from '../cache/models/sort-options.model'; import { PaginationComponentOptions } from './pagination-component-options.model'; diff --git a/src/app/process-page/processes/filetypes.model.ts b/projects/dspace/core/src/lib/processes/filetypes.model.ts similarity index 71% rename from src/app/process-page/processes/filetypes.model.ts rename to projects/dspace/core/src/lib/processes/filetypes.model.ts index 02e29b23238..98f6cee7be5 100644 --- a/src/app/process-page/processes/filetypes.model.ts +++ b/projects/dspace/core/src/lib/processes/filetypes.model.ts @@ -1,8 +1,8 @@ import { autoserialize } from 'cerialize'; -import { typedObject } from '../../core/cache/builders/build-decorators'; -import { ResourceType } from '../../core/shared/resource-type'; -import { excludeFromEquals } from '../../core/utilities/equals.decorators'; +import { typedObject } from '../cache/builders/build-decorators'; +import { ResourceType } from '../shared/resource-type'; +import { excludeFromEquals } from '../utilities/equals.decorators'; import { FILETYPES } from './filetypes.resource-type'; /** diff --git a/src/app/process-page/processes/filetypes.resource-type.ts b/projects/dspace/core/src/lib/processes/filetypes.resource-type.ts similarity index 74% rename from src/app/process-page/processes/filetypes.resource-type.ts rename to projects/dspace/core/src/lib/processes/filetypes.resource-type.ts index 29f9636208d..f4c286519b8 100644 --- a/src/app/process-page/processes/filetypes.resource-type.ts +++ b/projects/dspace/core/src/lib/processes/filetypes.resource-type.ts @@ -3,6 +3,6 @@ * * Needs to be in a separate file to prevent circular dependencies in webpack. */ -import { ResourceType } from '../../core/shared/resource-type'; +import { ResourceType } from '../shared/resource-type'; export const FILETYPES = new ResourceType('filetypes'); diff --git a/projects/dspace/core/src/lib/processes/index.ts b/projects/dspace/core/src/lib/processes/index.ts new file mode 100644 index 00000000000..33879b978a6 --- /dev/null +++ b/projects/dspace/core/src/lib/processes/index.ts @@ -0,0 +1,9 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './filetypes.model'; +export * from './filetypes.resource-type'; +export * from './process-parameter.model'; +export * from './process-status.model'; +export * from './process.model'; diff --git a/src/app/process-page/processes/process-parameter.model.ts b/projects/dspace/core/src/lib/processes/process-parameter.model.ts similarity index 100% rename from src/app/process-page/processes/process-parameter.model.ts rename to projects/dspace/core/src/lib/processes/process-parameter.model.ts diff --git a/src/app/process-page/processes/process-status.model.ts b/projects/dspace/core/src/lib/processes/process-status.model.ts similarity index 100% rename from src/app/process-page/processes/process-status.model.ts rename to projects/dspace/core/src/lib/processes/process-status.model.ts diff --git a/src/app/process-page/processes/process.model.ts b/projects/dspace/core/src/lib/processes/process.model.ts similarity index 70% rename from src/app/process-page/processes/process.model.ts rename to projects/dspace/core/src/lib/processes/process.model.ts index 60407f3e12e..7c5be82af22 100644 --- a/src/app/process-page/processes/process.model.ts +++ b/projects/dspace/core/src/lib/processes/process.model.ts @@ -1,28 +1,21 @@ -import { - autoserialize, - autoserializeAs, - deserialize, -} from 'cerialize'; +import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; import { Observable } from 'rxjs'; -import { - link, - typedObject, -} from '../../core/cache/builders/build-decorators'; -import { CacheableObject } from '../../core/cache/cacheable-object.model'; -import { PaginatedList } from '../../core/data/paginated-list.model'; -import { RemoteData } from '../../core/data/remote-data'; -import { Bitstream } from '../../core/shared/bitstream.model'; -import { BITSTREAM } from '../../core/shared/bitstream.resource-type'; -import { HALLink } from '../../core/shared/hal-link.model'; -import { PROCESS_OUTPUT_TYPE } from '../../core/shared/process-output.resource-type'; -import { ResourceType } from '../../core/shared/resource-type'; -import { excludeFromEquals } from '../../core/utilities/equals.decorators'; -import { Script } from '../scripts/script.model'; -import { SCRIPT } from '../scripts/script.resource-type'; +import { link, typedObject } from '../cache/builders/build-decorators'; +import { CacheableObject } from '../cache/cacheable-object.model'; +import { PaginatedList } from '../data/paginated-list.model'; +import { RemoteData } from '../data/remote-data'; +import { Bitstream } from '../shared/bitstream.model'; +import { BITSTREAM } from '../shared/bitstream.resource-type'; +import { HALLink } from '../shared/hal-link.model'; +import { PROCESS } from '../shared/process.resource-type'; +import { PROCESS_OUTPUT_TYPE } from '../shared/process-output.resource-type'; +import { ResourceType } from '../shared/resource-type'; +import { Script } from '../shared/scripts/script.model'; +import { SCRIPT } from '../shared/scripts/script.resource-type'; +import { excludeFromEquals } from '../utilities/equals.decorators'; import { Filetypes } from './filetypes.model'; import { FILETYPES } from './filetypes.resource-type'; -import { PROCESS } from './process.resource-type'; import { ProcessParameter } from './process-parameter.model'; import { ProcessStatus } from './process-status.model'; diff --git a/projects/dspace/core/src/lib/profile/index.ts b/projects/dspace/core/src/lib/profile/index.ts new file mode 100644 index 00000000000..cd86882b9cd --- /dev/null +++ b/projects/dspace/core/src/lib/profile/index.ts @@ -0,0 +1,7 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './researcher-profile-data.service.spec'; +export * from './researcher-profile-data.service'; +export * from './model/index'; diff --git a/projects/dspace/core/src/lib/profile/model/index.ts b/projects/dspace/core/src/lib/profile/model/index.ts new file mode 100644 index 00000000000..599bf0f37f4 --- /dev/null +++ b/projects/dspace/core/src/lib/profile/model/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './researcher-profile.model'; +export * from './researcher-profile.resource-type'; diff --git a/src/app/core/profile/model/researcher-profile.model.ts b/projects/dspace/core/src/lib/profile/model/researcher-profile.model.ts similarity index 89% rename from src/app/core/profile/model/researcher-profile.model.ts rename to projects/dspace/core/src/lib/profile/model/researcher-profile.model.ts index 28ffd09a7b8..a3888d5e3a6 100644 --- a/src/app/core/profile/model/researcher-profile.model.ts +++ b/projects/dspace/core/src/lib/profile/model/researcher-profile.model.ts @@ -1,14 +1,7 @@ -import { - autoserialize, - deserialize, - deserializeAs, -} from 'cerialize'; +import { autoserialize, deserialize, deserializeAs } from 'cerialize'; import { Observable } from 'rxjs'; -import { - link, - typedObject, -} from '../../cache/builders/build-decorators'; +import { link, typedObject } from '../../cache/builders/build-decorators'; import { CacheableObject } from '../../cache/cacheable-object.model'; import { RemoteData } from '../../data/remote-data'; import { HALLink } from '../../shared/hal-link.model'; diff --git a/src/app/core/profile/model/researcher-profile.resource-type.ts b/projects/dspace/core/src/lib/profile/model/researcher-profile.resource-type.ts similarity index 100% rename from src/app/core/profile/model/researcher-profile.resource-type.ts rename to projects/dspace/core/src/lib/profile/model/researcher-profile.resource-type.ts diff --git a/src/app/core/profile/researcher-profile-data.service.spec.ts b/projects/dspace/core/src/lib/profile/researcher-profile-data.service.spec.ts similarity index 96% rename from src/app/core/profile/researcher-profile-data.service.spec.ts rename to projects/dspace/core/src/lib/profile/researcher-profile-data.service.spec.ts index 712bb1850f2..a6f373fe7ca 100644 --- a/src/app/core/profile/researcher-profile-data.service.spec.ts +++ b/projects/dspace/core/src/lib/profile/researcher-profile-data.service.spec.ts @@ -1,25 +1,9 @@ -import { - HttpClient, - HttpHeaders, -} from '@angular/common/http'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; import { ReplaceOperation } from 'fast-json-patch'; -import { - cold, - getTestScheduler, - hot, -} from 'jasmine-marbles'; +import { cold, getTestScheduler, hot } from 'jasmine-marbles'; import { of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { RouterMock } from '../../shared/mocks/router.mock'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { - createNoContentRemoteDataObject$, - createSuccessfulRemoteDataObject, - createSuccessfulRemoteDataObject$, -} from '../../shared/remote-data.utils'; -import { createPaginatedList } from '../../shared/testing/utils.test'; -import { followLink } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { RestResponse } from '../cache/response.models'; @@ -32,10 +16,19 @@ import { PostRequest } from '../data/request.models'; import { RequestService } from '../data/request.service'; import { RequestEntry } from '../data/request-entry.model'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; +import { NotificationsService } from '../notification-system/notifications.service'; import { ConfigurationProperty } from '../shared/configuration-property.model'; +import { followLink } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { Item } from '../shared/item.model'; import { PageInfo } from '../shared/page-info.model'; +import { RouterMock } from '../testing/router.mock'; +import { createPaginatedList } from '../testing/utils.test'; +import { + createNoContentRemoteDataObject$, + createSuccessfulRemoteDataObject, + createSuccessfulRemoteDataObject$, +} from '../utilities/remote-data.utils'; import { ResearcherProfile } from './model/researcher-profile.model'; import { ResearcherProfileDataService } from './researcher-profile-data.service'; diff --git a/src/app/core/profile/researcher-profile-data.service.ts b/projects/dspace/core/src/lib/profile/researcher-profile-data.service.ts similarity index 92% rename from src/app/core/profile/researcher-profile-data.service.ts rename to projects/dspace/core/src/lib/profile/researcher-profile-data.service.ts index cb8631c1b76..7bd5cd324c5 100644 --- a/src/app/core/profile/researcher-profile-data.service.ts +++ b/projects/dspace/core/src/lib/profile/researcher-profile-data.service.ts @@ -1,50 +1,20 @@ import { HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Router } from '@angular/router'; -import { - Operation, - ReplaceOperation, -} from 'fast-json-patch'; -import { - Observable, - of, -} from 'rxjs'; -import { - find, - map, - mergeMap, -} from 'rxjs/operators'; +import { RestRequestMethod } from '@dspace/config'; +import { hasValue, isEmpty } from '@dspace/utils'; +import { Operation, ReplaceOperation } from 'fast-json-patch'; +import { Observable, of } from 'rxjs'; +import { find, map, mergeMap } from 'rxjs/operators'; -import { - hasValue, - isEmpty, -} from '../../shared/empty.util'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { createFailedRemoteDataObject$ } from '../../shared/remote-data.utils'; -import { - followLink, - FollowLinkConfig, -} from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; -import { - CreateData, - CreateDataImpl, -} from '../data/base/create-data'; -import { - DeleteData, - DeleteDataImpl, -} from '../data/base/delete-data'; +import { CreateData, CreateDataImpl } from '../data/base/create-data'; +import { DeleteData, DeleteDataImpl } from '../data/base/delete-data'; import { IdentifiableDataService } from '../data/base/identifiable-data.service'; -import { - PatchData, - PatchDataImpl, -} from '../data/base/patch-data'; -import { - SearchData, - SearchDataImpl, -} from '../data/base/search-data'; +import { PatchData, PatchDataImpl } from '../data/base/patch-data'; +import { SearchData, SearchDataImpl } from '../data/base/search-data'; import { DefaultChangeAnalyzer } from '../data/default-change-analyzer.service'; import { FindListOptions } from '../data/find-list-options.model'; import { ItemDataService } from '../data/item-data.service'; @@ -52,12 +22,14 @@ import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; import { PostRequest } from '../data/request.models'; import { RequestService } from '../data/request.service'; -import { RestRequestMethod } from '../data/rest-request-method'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; +import { NotificationsService } from '../notification-system/notifications.service'; +import { followLink, FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { Item } from '../shared/item.model'; import { NoContent } from '../shared/NoContent.model'; import { getFirstCompletedRemoteData } from '../shared/operators'; +import { createFailedRemoteDataObject$ } from '../utilities/remote-data.utils'; import { ResearcherProfile } from './model/researcher-profile.model'; /** diff --git a/src/app/core/provide-core.ts b/projects/dspace/core/src/lib/provide-core.ts similarity index 74% rename from src/app/core/provide-core.ts rename to projects/dspace/core/src/lib/provide-core.ts index a3f88788f54..2a9c763711d 100644 --- a/src/app/core/provide-core.ts +++ b/projects/dspace/core/src/lib/provide-core.ts @@ -1,33 +1,18 @@ import { HttpClient } from '@angular/common/http'; -import { makeEnvironmentProviders } from '@angular/core'; +import { inject, makeEnvironmentProviders } from '@angular/core'; +import { APP_CONFIG } from '@dspace/config'; -import { environment } from '../../environments/environment'; -import { Itemfilter } from '../admin/admin-ldn-services/ldn-services-model/ldn-service-itemfilters'; -import { LdnService } from '../admin/admin-ldn-services/ldn-services-model/ldn-services.model'; -import { AdminNotifyMessage } from '../admin/admin-notify-dashboard/models/admin-notify-message.model'; -import { NotifyRequestsStatus } from '../item-page/simple/notify-requests-status/notify-requests-status.model'; -import { Filetypes } from '../process-page/processes/filetypes.model'; -import { Process } from '../process-page/processes/process.model'; -import { Script } from '../process-page/scripts/script.model'; -import { EndpointMockingRestService } from '../shared/mocks/dspace-rest/endpoint-mocking-rest.service'; -import { - MOCK_RESPONSE_MAP, - ResponseMapMock, -} from '../shared/mocks/dspace-rest/mocks/response-map.mock'; -import { AccessStatusObject } from '../shared/object-collection/shared/badges/access-status-badge/access-status.model'; -import { IdentifierData } from '../shared/object-list/identifier-data/identifier-data.model'; -import { ListableNotificationObject } from '../shared/object-list/listable-notification-object/listable-notification-object.model'; -import { FacetConfigResponse } from '../shared/search/models/facet-config-response.model'; -import { FacetValues } from '../shared/search/models/facet-values.model'; -import { SearchFilterConfig } from '../shared/search/models/search-filter-config.model'; -import { SearchObjects } from '../shared/search/models/search-objects.model'; -import { SearchResult } from '../shared/search/models/search-result.model'; -import { Subscription } from '../shared/subscriptions/models/subscription.model'; -import { StatisticsEndpoint } from '../statistics/statistics-endpoint.model'; -import { SubmissionCoarNotifyConfig } from '../submission/sections/section-coar-notify/submission-coar-notify.config'; -import { SystemWideAlert } from '../system-wide-alert/system-wide-alert.model'; import { AuthStatus } from './auth/models/auth-status.model'; import { ShortLivedToken } from './auth/models/short-lived-token.model'; +import { Itemfilter } from './coar-notify/ldn-services/models/ldn-service-itemfilters'; +import { LdnService } from './coar-notify/ldn-services/models/ldn-services.model'; +import { AdminNotifyMessage } from './coar-notify/notify-info/models/admin-notify-message.model'; +import { + NotifyRequestsStatus, +} from './coar-notify/notify-info/models/notify-requests-status.model'; +import { + SubmissionCoarNotifyModel, +} from './coar-notify/notify-info/models/submission-coar-notify.model'; import { BulkAccessConditionOptions } from './config/models/bulk-access-condition-options.model'; import { SubmissionAccessModel } from './config/models/config-submission-access.model'; import { SubmissionAccessesModel } from './config/models/config-submission-accesses.model'; @@ -42,21 +27,32 @@ import { SubmissionUploadsModel } from './config/models/config-submission-upload import { PaginatedList } from './data/paginated-list.model'; import { Root } from './data/root.model'; import { DspaceRestService } from './dspace-rest/dspace-rest.service'; +import { EndpointMockingRestService } from './dspace-rest/endpoint-mocking-rest.service'; +import { MOCK_RESPONSE_MAP, ResponseMapMock } from './dspace-rest/mocks/response-map.mock'; import { EPerson } from './eperson/models/eperson.model'; import { Group } from './eperson/models/group.model'; import { Feedback } from './feedback/models/feedback.model'; import { MetadataField } from './metadata/metadata-field.model'; import { MetadataSchema } from './metadata/metadata-schema.model'; -import { QualityAssuranceEventObject } from './notifications/qa/models/quality-assurance-event.model'; -import { QualityAssuranceSourceObject } from './notifications/qa/models/quality-assurance-source.model'; -import { QualityAssuranceTopicObject } from './notifications/qa/models/quality-assurance-topic.model'; +import { + QualityAssuranceEventObject, +} from './notifications/qa/models/quality-assurance-event.model'; +import { + QualityAssuranceSourceObject, +} from './notifications/qa/models/quality-assurance-source.model'; +import { + QualityAssuranceTopicObject, +} from './notifications/qa/models/quality-assurance-topic.model'; import { Suggestion } from './notifications/suggestions/models/suggestion.model'; import { SuggestionSource } from './notifications/suggestions/models/suggestion-source.model'; import { SuggestionTarget } from './notifications/suggestions/models/suggestion-target.model'; import { OrcidHistory } from './orcid/model/orcid-history.model'; import { OrcidQueue } from './orcid/model/orcid-queue.model'; +import { Filetypes } from './processes/filetypes.model'; +import { Process } from './processes/process.model'; import { ResearcherProfile } from './profile/model/researcher-profile.model'; import { ResourcePolicy } from './resource-policy/models/resource-policy.model'; +import { AccessStatusObject } from './shared/access-status.model'; import { Authorization } from './shared/authorization.model'; import { Bitstream } from './shared/bitstream.model'; import { BitstreamFormat } from './shared/bitstream-format.model'; @@ -73,20 +69,31 @@ import { ExternalSourceEntry } from './shared/external-source-entry.model'; import { Feature } from './shared/feature.model'; import { FlatBrowseDefinition } from './shared/flat-browse-definition.model'; import { HierarchicalBrowseDefinition } from './shared/hierarchical-browse-definition.model'; +import { IdentifierData } from './shared/identifiers-data/identifier-data.model'; import { Item } from './shared/item.model'; import { ItemType } from './shared/item-relationships/item-type.model'; import { Relationship } from './shared/item-relationships/relationship.model'; import { RelationshipType } from './shared/item-relationships/relationship-type.model'; import { ItemRequest } from './shared/item-request.model'; import { License } from './shared/license.model'; +import { ListableNotificationObject } from './shared/listable-notification-object.model'; import { NonHierarchicalBrowseDefinition } from './shared/non-hierarchical-browse-definition'; import { Registration } from './shared/registration.model'; +import { Script } from './shared/scripts/script.model'; +import { FacetConfigResponse } from './shared/search/models/facet-config-response.model'; +import { FacetValues } from './shared/search/models/facet-values.model'; +import { SearchFilterConfig } from './shared/search/models/search-filter-config.model'; +import { SearchObjects } from './shared/search/models/search-objects.model'; +import { SearchResult } from './shared/search/models/search-result.model'; import { SearchConfig } from './shared/search/search-filters/search-config.model'; import { Site } from './shared/site.model'; +import { Subscription } from './shared/subscription.model'; +import { SystemWideAlert } from './shared/system-wide-alert.model'; import { TemplateItem } from './shared/template-item.model'; import { ValueListBrowseDefinition } from './shared/value-list-browse-definition.model'; import { Version } from './shared/version.model'; import { VersionHistory } from './shared/version-history.model'; +import { StatisticsEndpoint } from './statistics/models/statistics-endpoint.model'; import { UsageReport } from './statistics/models/usage-report.model'; import { CorrectionType } from './submission/models/correctiontype.model'; import { SubmissionCcLicence } from './submission/models/submission-cc-license.model'; @@ -95,13 +102,17 @@ import { WorkflowItem } from './submission/models/workflowitem.model'; import { WorkspaceItem } from './submission/models/workspaceitem.model'; import { Vocabulary } from './submission/vocabularies/models/vocabulary.model'; import { VocabularyEntry } from './submission/vocabularies/models/vocabulary-entry.model'; -import { VocabularyEntryDetail } from './submission/vocabularies/models/vocabulary-entry-detail.model'; +import { + VocabularyEntryDetail, +} from './submission/vocabularies/models/vocabulary-entry-detail.model'; import { SupervisionOrder } from './supervision-order/models/supervision-order.model'; import { AdvancedWorkflowInfo } from './tasks/models/advanced-workflow-info.model'; import { ClaimedTask } from './tasks/models/claimed-task-object.model'; import { PoolTask } from './tasks/models/pool-task-object.model'; import { RatingAdvancedWorkflowInfo } from './tasks/models/rating-advanced-workflow-info.model'; -import { SelectReviewerAdvancedWorkflowInfo } from './tasks/models/select-reviewer-advanced-workflow-info.model'; +import { + SelectReviewerAdvancedWorkflowInfo, +} from './tasks/models/select-reviewer-advanced-workflow-info.model'; import { TaskObject } from './tasks/models/task-object.model'; import { WorkflowAction } from './tasks/models/workflow-action-object.model'; @@ -117,10 +128,11 @@ export const provideCore = () => { * If there is no mock version available for the endpoint, the actual REST response will be used just like in production mode */ export const restServiceFactory = (mocks: ResponseMapMock, http: HttpClient) => { - if (environment.production) { + const appConfig = inject(APP_CONFIG); + if (appConfig.production) { return new DspaceRestService(http); } else { - return new EndpointMockingRestService(mocks, http); + return new EndpointMockingRestService(mocks, http, appConfig); } }; @@ -202,7 +214,7 @@ export const models = SuggestionSource, LdnService, Itemfilter, - SubmissionCoarNotifyConfig, + SubmissionCoarNotifyModel, NotifyRequestsStatus, SystemWideAlert, AdminNotifyMessage, diff --git a/projects/dspace/core/src/lib/reload/index.ts b/projects/dspace/core/src/lib/reload/index.ts new file mode 100644 index 00000000000..bbeeccfdabe --- /dev/null +++ b/projects/dspace/core/src/lib/reload/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './reload.guard.spec'; +export * from './reload.guard'; diff --git a/src/app/core/reload/reload.guard.spec.ts b/projects/dspace/core/src/lib/reload/reload.guard.spec.ts similarity index 90% rename from src/app/core/reload/reload.guard.spec.ts rename to projects/dspace/core/src/lib/reload/reload.guard.spec.ts index 31ac7418009..5972e1e2df7 100644 --- a/src/app/core/reload/reload.guard.spec.ts +++ b/projects/dspace/core/src/lib/reload/reload.guard.spec.ts @@ -1,7 +1,6 @@ import { Router } from '@angular/router'; +import { AppConfig, DefaultAppConfig } from '@dspace/config'; -import { AppConfig } from '../../../config/app-config.interface'; -import { DefaultAppConfig } from '../../../config/default-app-config'; import { reloadGuard } from './reload.guard'; describe('reloadGuard', () => { diff --git a/src/app/core/reload/reload.guard.ts b/projects/dspace/core/src/lib/reload/reload.guard.ts similarity index 81% rename from src/app/core/reload/reload.guard.ts rename to projects/dspace/core/src/lib/reload/reload.guard.ts index 4e6b1f21a57..1ed300493d5 100644 --- a/src/app/core/reload/reload.guard.ts +++ b/projects/dspace/core/src/lib/reload/reload.guard.ts @@ -6,13 +6,10 @@ import { RouterStateSnapshot, UrlTree, } from '@angular/router'; +import { APP_CONFIG, AppConfig } from '@dspace/config'; +import { isNotEmpty } from '@dspace/utils'; -import { - APP_CONFIG, - AppConfig, -} from '../../../config/app-config.interface'; -import { HOME_PAGE_PATH } from '../../app-routing-paths'; -import { isNotEmpty } from '../../shared/empty.util'; +import { HOME_PAGE_PATH } from '../router/core-routing-paths'; /** * A guard redirecting the user to the URL provided in the route's query params diff --git a/projects/dspace/core/src/lib/resolving/index.ts b/projects/dspace/core/src/lib/resolving/index.ts new file mode 100644 index 00000000000..d1203db5107 --- /dev/null +++ b/projects/dspace/core/src/lib/resolving/index.ts @@ -0,0 +1,5 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './resolver.actions'; diff --git a/src/app/core/resolving/resolver.actions.ts b/projects/dspace/core/src/lib/resolving/resolver.actions.ts similarity index 93% rename from src/app/core/resolving/resolver.actions.ts rename to projects/dspace/core/src/lib/resolving/resolver.actions.ts index 66f075be7c2..1ced4852a02 100644 --- a/src/app/core/resolving/resolver.actions.ts +++ b/projects/dspace/core/src/lib/resolving/resolver.actions.ts @@ -1,6 +1,6 @@ import { Action } from '@ngrx/store'; -import { type } from '../../shared/ngrx/type'; +import { type } from '../ngrx/type'; import { DSpaceObject } from '../shared/dspace-object.model'; export const ResolverActionTypes = { diff --git a/projects/dspace/core/src/lib/resource-policy/index.ts b/projects/dspace/core/src/lib/resource-policy/index.ts new file mode 100644 index 00000000000..1a66c3d764e --- /dev/null +++ b/projects/dspace/core/src/lib/resource-policy/index.ts @@ -0,0 +1,7 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './resource-policy-data.service.spec'; +export * from './resource-policy-data.service'; +export * from './models/index'; diff --git a/src/app/core/resource-policy/models/action-type.model.ts b/projects/dspace/core/src/lib/resource-policy/models/action-type.model.ts similarity index 100% rename from src/app/core/resource-policy/models/action-type.model.ts rename to projects/dspace/core/src/lib/resource-policy/models/action-type.model.ts diff --git a/projects/dspace/core/src/lib/resource-policy/models/index.ts b/projects/dspace/core/src/lib/resource-policy/models/index.ts new file mode 100644 index 00000000000..e20e934af87 --- /dev/null +++ b/projects/dspace/core/src/lib/resource-policy/models/index.ts @@ -0,0 +1,8 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './action-type.model'; +export * from './policy-type.model'; +export * from './resource-policy.model'; +export * from './resource-policy.resource-type'; diff --git a/src/app/core/resource-policy/models/policy-type.model.ts b/projects/dspace/core/src/lib/resource-policy/models/policy-type.model.ts similarity index 100% rename from src/app/core/resource-policy/models/policy-type.model.ts rename to projects/dspace/core/src/lib/resource-policy/models/policy-type.model.ts diff --git a/src/app/core/resource-policy/models/resource-policy.model.ts b/projects/dspace/core/src/lib/resource-policy/models/resource-policy.model.ts similarity index 94% rename from src/app/core/resource-policy/models/resource-policy.model.ts rename to projects/dspace/core/src/lib/resource-policy/models/resource-policy.model.ts index 669844690bc..a567f2488bd 100644 --- a/src/app/core/resource-policy/models/resource-policy.model.ts +++ b/projects/dspace/core/src/lib/resource-policy/models/resource-policy.model.ts @@ -1,14 +1,7 @@ -import { - autoserialize, - deserialize, - deserializeAs, -} from 'cerialize'; +import { autoserialize, deserialize, deserializeAs } from 'cerialize'; import { Observable } from 'rxjs'; -import { - link, - typedObject, -} from '../../cache/builders/build-decorators'; +import { link, typedObject } from '../../cache/builders/build-decorators'; import { CacheableObject } from '../../cache/cacheable-object.model'; import { IDToUUIDSerializer } from '../../cache/id-to-uuid-serializer'; import { RemoteData } from '../../data/remote-data'; diff --git a/src/app/core/resource-policy/models/resource-policy.resource-type.ts b/projects/dspace/core/src/lib/resource-policy/models/resource-policy.resource-type.ts similarity index 100% rename from src/app/core/resource-policy/models/resource-policy.resource-type.ts rename to projects/dspace/core/src/lib/resource-policy/models/resource-policy.resource-type.ts diff --git a/src/app/core/resource-policy/resource-policy-data.service.spec.ts b/projects/dspace/core/src/lib/resource-policy/resource-policy-data.service.spec.ts similarity index 97% rename from src/app/core/resource-policy/resource-policy-data.service.spec.ts rename to projects/dspace/core/src/lib/resource-policy/resource-policy-data.service.spec.ts index ca633bdb829..b71596c0ded 100644 --- a/src/app/core/resource-policy/resource-policy-data.service.spec.ts +++ b/projects/dspace/core/src/lib/resource-policy/resource-policy-data.service.spec.ts @@ -1,14 +1,8 @@ -import { - cold, - getTestScheduler, - hot, -} from 'jasmine-marbles'; +import { RestRequestMethod } from '@dspace/config'; +import { cold, getTestScheduler, hot } from 'jasmine-marbles'; import { of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { createSuccessfulRemoteDataObject } from '../../shared/remote-data.utils'; -import { ObjectCacheServiceStub } from '../../shared/testing/object-cache-service.stub'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; @@ -17,11 +11,13 @@ import { FindListOptions } from '../data/find-list-options.model'; import { buildPaginatedList } from '../data/paginated-list.model'; import { RequestService } from '../data/request.service'; import { RequestEntry } from '../data/request-entry.model'; -import { RestRequestMethod } from '../data/rest-request-method'; import { EPersonDataService } from '../eperson/eperson-data.service'; import { GroupDataService } from '../eperson/group-data.service'; +import { NotificationsService } from '../notification-system/notifications.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { PageInfo } from '../shared/page-info.model'; +import { ObjectCacheServiceStub } from '../testing/object-cache-service.stub'; +import { createSuccessfulRemoteDataObject } from '../utilities/remote-data.utils'; import { ActionType } from './models/action-type.model'; import { PolicyType } from './models/policy-type.model'; import { ResourcePolicyDataService } from './resource-policy-data.service'; diff --git a/src/app/core/resource-policy/resource-policy-data.service.ts b/projects/dspace/core/src/lib/resource-policy/resource-policy-data.service.ts similarity index 96% rename from src/app/core/resource-policy/resource-policy-data.service.ts rename to projects/dspace/core/src/lib/resource-policy/resource-policy-data.service.ts index e0f32809f03..bd9b34e7e8c 100644 --- a/src/app/core/resource-policy/resource-policy-data.service.ts +++ b/projects/dspace/core/src/lib/resource-policy/resource-policy-data.service.ts @@ -1,14 +1,9 @@ import { HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; +import { isNotEmpty } from '@dspace/utils'; import { Observable } from 'rxjs'; -import { - first, - map, -} from 'rxjs/operators'; +import { first, map } from 'rxjs/operators'; -import { isNotEmpty } from '../../shared/empty.util'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; @@ -24,11 +19,15 @@ import { ResponseParsingService } from '../data/parsing.service'; import { RemoteData } from '../data/remote-data'; import { PutRequest } from '../data/request.models'; import { RequestService } from '../data/request.service'; -import { StatusCodeOnlyResponseParsingService } from '../data/status-code-only-response-parsing.service'; +import { + StatusCodeOnlyResponseParsingService, +} from '../data/status-code-only-response-parsing.service'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; import { EPersonDataService } from '../eperson/eperson-data.service'; import { GroupDataService } from '../eperson/group-data.service'; +import { NotificationsService } from '../notification-system/notifications.service'; import { Collection } from '../shared/collection.model'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { GenericConstructor } from '../shared/generic-constructor'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { NoContent } from '../shared/NoContent.model'; diff --git a/src/app/core/rest-property/forgot-password-check-guard.guard.ts b/projects/dspace/core/src/lib/rest-property/forgot-password-check-guard.guard.ts similarity index 70% rename from src/app/core/rest-property/forgot-password-check-guard.guard.ts rename to projects/dspace/core/src/lib/rest-property/forgot-password-check-guard.guard.ts index 4cd81f7a1e5..f320087ce36 100644 --- a/src/app/core/rest-property/forgot-password-check-guard.guard.ts +++ b/projects/dspace/core/src/lib/rest-property/forgot-password-check-guard.guard.ts @@ -1,7 +1,9 @@ import { CanActivateFn } from '@angular/router'; import { of } from 'rxjs'; -import { singleFeatureAuthorizationGuard } from '../data/feature-authorization/feature-authorization-guard/single-feature-authorization.guard'; +import { + singleFeatureAuthorizationGuard, +} from '../data/feature-authorization/feature-authorization-guard/single-feature-authorization.guard'; import { FeatureID } from '../data/feature-authorization/feature-id'; /** diff --git a/projects/dspace/core/src/lib/rest-property/index.ts b/projects/dspace/core/src/lib/rest-property/index.ts new file mode 100644 index 00000000000..cadf4b67750 --- /dev/null +++ b/projects/dspace/core/src/lib/rest-property/index.ts @@ -0,0 +1,5 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './forgot-password-check-guard.guard'; diff --git a/projects/dspace/core/src/lib/roles/index.ts b/projects/dspace/core/src/lib/roles/index.ts new file mode 100644 index 00000000000..ad29890df7d --- /dev/null +++ b/projects/dspace/core/src/lib/roles/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './role-types'; +export * from './role.service'; diff --git a/src/app/core/roles/role-types.ts b/projects/dspace/core/src/lib/roles/role-types.ts similarity index 100% rename from src/app/core/roles/role-types.ts rename to projects/dspace/core/src/lib/roles/role-types.ts diff --git a/src/app/core/roles/role.service.ts b/projects/dspace/core/src/lib/roles/role.service.ts similarity index 97% rename from src/app/core/roles/role.service.ts rename to projects/dspace/core/src/lib/roles/role.service.ts index 365a5cbbb31..0d6d515e3d4 100644 --- a/src/app/core/roles/role.service.ts +++ b/projects/dspace/core/src/lib/roles/role.service.ts @@ -1,8 +1,5 @@ import { Injectable } from '@angular/core'; -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; import { distinctUntilChanged } from 'rxjs/operators'; import { CollectionDataService } from '../data/collection-data.service'; diff --git a/projects/dspace/core/src/lib/router/core-routing-paths.ts b/projects/dspace/core/src/lib/router/core-routing-paths.ts new file mode 100644 index 00000000000..8571207c0d2 --- /dev/null +++ b/projects/dspace/core/src/lib/router/core-routing-paths.ts @@ -0,0 +1,56 @@ +export const FORBIDDEN_PATH = '403'; + +export function getForbiddenRoute() { + return `/${FORBIDDEN_PATH}`; +} + +export const PAGE_NOT_FOUND_PATH = '404'; + +export function getPageNotFoundRoute() { + return `/${PAGE_NOT_FOUND_PATH}`; +} + +export const INTERNAL_SERVER_ERROR = '500'; + +export const ERROR_PAGE = 'error'; + +export function getPageInternalServerErrorRoute() { + return `/${INTERNAL_SERVER_ERROR}`; +} + +export const COLLECTION_MODULE_PATH = 'collections'; + +export function getCollectionModuleRoute() { + return `/${COLLECTION_MODULE_PATH}`; +} + +export const COMMUNITY_MODULE_PATH = 'communities'; + +export function getCommunityModuleRoute() { + return `/${COMMUNITY_MODULE_PATH}`; +} + + +export const ITEM_MODULE_PATH = 'items'; + +export function getItemModuleRoute() { + return `/${ITEM_MODULE_PATH}`; +} + +export const ENTITY_MODULE_PATH = 'entities'; + +export const BITSTREAM_MODULE_PATH = 'bitstreams'; +/** + * The bitstream module path to resolve XMLUI and JSPUI bitstream download URLs + */ +export const LEGACY_BITSTREAM_MODULE_PATH = 'bitstream'; + +export function getBitstreamModuleRoute() { + return `/${BITSTREAM_MODULE_PATH}`; +} + +export const HOME_PAGE_PATH = 'home'; + +export function getHomePageRoute() { + return `/${HOME_PAGE_PATH}`; +} diff --git a/projects/dspace/core/src/lib/router/index.ts b/projects/dspace/core/src/lib/router/index.ts new file mode 100644 index 00000000000..28cc83330f7 --- /dev/null +++ b/projects/dspace/core/src/lib/router/index.ts @@ -0,0 +1,8 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './core-routing-paths'; +export * from './router.actions'; +export * from './router.effects'; +export * from './utils/index'; diff --git a/src/app/core/router/router.actions.ts b/projects/dspace/core/src/lib/router/router.actions.ts similarity index 92% rename from src/app/core/router/router.actions.ts rename to projects/dspace/core/src/lib/router/router.actions.ts index e251895f39c..d39fa684b05 100644 --- a/src/app/core/router/router.actions.ts +++ b/projects/dspace/core/src/lib/router/router.actions.ts @@ -1,7 +1,7 @@ /* eslint-disable max-classes-per-file */ import { Action } from '@ngrx/store'; -import { type } from '../../shared/ngrx/type'; +import { type } from '../ngrx/type'; /** * The list of HrefIndexAction type definitions diff --git a/src/app/core/router/router.effects.ts b/projects/dspace/core/src/lib/router/router.effects.ts similarity index 80% rename from src/app/core/router/router.effects.ts rename to projects/dspace/core/src/lib/router/router.effects.ts index cee1698b533..7fdcd31d6a8 100644 --- a/src/app/core/router/router.effects.ts +++ b/projects/dspace/core/src/lib/router/router.effects.ts @@ -1,19 +1,8 @@ import { Injectable } from '@angular/core'; import { Router } from '@angular/router'; -import { - Actions, - createEffect, - ofType, -} from '@ngrx/effects'; -import { - ROUTER_NAVIGATION, - RouterNavigationAction, -} from '@ngrx/router-store'; -import { - filter, - map, - pairwise, -} from 'rxjs/operators'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; +import { ROUTER_NAVIGATION, RouterNavigationAction } from '@ngrx/router-store'; +import { filter, map, pairwise } from 'rxjs/operators'; import { RouteUpdateAction } from './router.actions'; diff --git a/projects/dspace/core/src/lib/router/utils/dso-route.utils.ts b/projects/dspace/core/src/lib/router/utils/dso-route.utils.ts new file mode 100644 index 00000000000..8d6346cfe6e --- /dev/null +++ b/projects/dspace/core/src/lib/router/utils/dso-route.utils.ts @@ -0,0 +1,88 @@ +import { hasValue, isNotEmpty } from '@dspace/utils'; + +import { Collection } from '../../shared/collection.model'; +import { Community } from '../../shared/community.model'; +import { DSpaceObject } from '../../shared/dspace-object.model'; +import { Item } from '../../shared/item.model'; +import { URLCombiner } from '../../url-combiner/url-combiner'; +import { + ENTITY_MODULE_PATH, + getBitstreamModuleRoute, + getCollectionModuleRoute, + getCommunityModuleRoute, + getItemModuleRoute, +} from '../core-routing-paths'; + +export function getCollectionPageRoute(collectionId: string) { + return new URLCombiner(getCollectionModuleRoute(), collectionId).toString(); +} + +export function getCommunityPageRoute(communityId: string) { + return new URLCombiner(getCommunityModuleRoute(), communityId).toString(); +} + +/** + * Get the route to an item's page + * Depending on the item's entity type, the route will either start with /items or /entities + * @param item The item to retrieve the route for + */ +export function getItemPageRoute(item: Item) { + const type = item.firstMetadataValue('dspace.entity.type'); + return getEntityPageRoute(type, item.uuid); +} + +export function getEntityPageRoute(entityType: string, itemId: string) { + if (isNotEmpty(entityType)) { + return new URLCombiner(`/${ENTITY_MODULE_PATH}`, encodeURIComponent(entityType.toLowerCase()), itemId).toString(); + } else { + return new URLCombiner(getItemModuleRoute(), itemId).toString(); + } +} + +export function getDSORoute(dso: DSpaceObject): string { + if (hasValue(dso)) { + switch ((dso as any).type) { + case Community.type.value: + return getCommunityPageRoute(dso.uuid); + case Collection.type.value: + return getCollectionPageRoute(dso.uuid); + case Item.type.value: + return getItemPageRoute(dso as Item); + } + } +} + +export function getBitstreamDownloadRoute(bitstream): string { + return new URLCombiner(getBitstreamModuleRoute(), bitstream.uuid, 'download').toString(); +} + +export function getBitstreamRequestACopyRoute(item, bitstream): { routerLink: string, queryParams: any } { + const url = new URLCombiner(getItemModuleRoute(), item.uuid, 'request-a-copy').toString(); + return { + routerLink: url, + queryParams: { + bitstream: bitstream.uuid, + }, + }; +} + +/** + * Get a bitstream download route with an access token (to provide direct access to a user) added as a query parameter + * @param bitstream the bitstream to download + * @param accessToken the access token, which should match an access_token in the requestitem table + */ +export function getBitstreamDownloadWithAccessTokenRoute(bitstream, accessToken): { + routerLink: string, + queryParams: any +} { + const url = new URLCombiner(getBitstreamModuleRoute(), bitstream.uuid, 'download').toString(); + const options = { + routerLink: url, + queryParams: {}, + }; + // Only add the access token if it is not empty, otherwise keep valid empty query parameters + if (hasValue(accessToken)) { + options.queryParams = { accessToken: accessToken }; + } + return options; +} diff --git a/projects/dspace/core/src/lib/router/utils/index.ts b/projects/dspace/core/src/lib/router/utils/index.ts new file mode 100644 index 00000000000..1484808c9e8 --- /dev/null +++ b/projects/dspace/core/src/lib/router/utils/index.ts @@ -0,0 +1,7 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './dso-route.utils'; +export * from './route.utils.spec'; +export * from './route.utils'; diff --git a/src/app/shared/utils/route.utils.spec.ts b/projects/dspace/core/src/lib/router/utils/route.utils.spec.ts similarity index 100% rename from src/app/shared/utils/route.utils.spec.ts rename to projects/dspace/core/src/lib/router/utils/route.utils.spec.ts diff --git a/src/app/shared/utils/route.utils.ts b/projects/dspace/core/src/lib/router/utils/route.utils.ts similarity index 77% rename from src/app/shared/utils/route.utils.ts rename to projects/dspace/core/src/lib/router/utils/route.utils.ts index 9f45b7ec239..40463084810 100644 --- a/src/app/shared/utils/route.utils.ts +++ b/projects/dspace/core/src/lib/router/utils/route.utils.ts @@ -1,10 +1,7 @@ -import { - ActivatedRouteSnapshot, - Router, -} from '@angular/router'; +import { ActivatedRouteSnapshot, Router } from '@angular/router'; +import { hasValue } from '@dspace/utils'; -import { URLCombiner } from '../../core/url-combiner/url-combiner'; -import { hasValue } from '../empty.util'; +import { URLCombiner } from '../../url-combiner/url-combiner'; /** * Util function to retrieve the current path (without query parameters) the user is on diff --git a/src/app/core/serializer.ts b/projects/dspace/core/src/lib/serializer.ts similarity index 100% rename from src/app/core/serializer.ts rename to projects/dspace/core/src/lib/serializer.ts diff --git a/projects/dspace/core/src/lib/server-check/index.ts b/projects/dspace/core/src/lib/server-check/index.ts new file mode 100644 index 00000000000..19ae0003f9c --- /dev/null +++ b/projects/dspace/core/src/lib/server-check/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './server-check.guard.spec'; +export * from './server-check.guard'; diff --git a/src/app/core/server-check/server-check.guard.spec.ts b/projects/dspace/core/src/lib/server-check/server-check.guard.spec.ts similarity index 95% rename from src/app/core/server-check/server-check.guard.spec.ts rename to projects/dspace/core/src/lib/server-check/server-check.guard.spec.ts index e89b16eedcd..b66261b20bf 100644 --- a/src/app/core/server-check/server-check.guard.spec.ts +++ b/projects/dspace/core/src/lib/server-check/server-check.guard.spec.ts @@ -1,14 +1,5 @@ -import { - NavigationEnd, - NavigationStart, - Router, - RouterEvent, - UrlTree, -} from '@angular/router'; -import { - of, - ReplaySubject, -} from 'rxjs'; +import { NavigationEnd, NavigationStart, Router, RouterEvent, UrlTree } from '@angular/router'; +import { of, ReplaySubject } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; import { RootDataService } from '../data/root-data.service'; diff --git a/src/app/core/server-check/server-check.guard.ts b/projects/dspace/core/src/lib/server-check/server-check.guard.ts similarity index 86% rename from src/app/core/server-check/server-check.guard.ts rename to projects/dspace/core/src/lib/server-check/server-check.guard.ts index 6d4a81b7b55..1b9d46bd8a0 100644 --- a/src/app/core/server-check/server-check.guard.ts +++ b/projects/dspace/core/src/lib/server-check/server-check.guard.ts @@ -7,13 +7,10 @@ import { UrlTree, } from '@angular/router'; import { Observable } from 'rxjs'; -import { - map, - take, -} from 'rxjs/operators'; +import { map, take } from 'rxjs/operators'; -import { getPageInternalServerErrorRoute } from '../../app-routing-paths'; import { RootDataService } from '../data/root-data.service'; +import { getPageInternalServerErrorRoute } from '../router/core-routing-paths'; /** * A guard that checks if root api endpoint is reachable. diff --git a/src/app/core/services/browser-hard-redirect.service.spec.ts b/projects/dspace/core/src/lib/services/browser-hard-redirect.service.spec.ts similarity index 100% rename from src/app/core/services/browser-hard-redirect.service.spec.ts rename to projects/dspace/core/src/lib/services/browser-hard-redirect.service.spec.ts diff --git a/src/app/core/services/browser-hard-redirect.service.ts b/projects/dspace/core/src/lib/services/browser-hard-redirect.service.ts similarity index 93% rename from src/app/core/services/browser-hard-redirect.service.ts rename to projects/dspace/core/src/lib/services/browser-hard-redirect.service.ts index c386e82f2e9..91e01e461e5 100644 --- a/src/app/core/services/browser-hard-redirect.service.ts +++ b/projects/dspace/core/src/lib/services/browser-hard-redirect.service.ts @@ -1,8 +1,4 @@ -import { - Inject, - Injectable, - InjectionToken, -} from '@angular/core'; +import { Inject, Injectable, InjectionToken } from '@angular/core'; import { HardRedirectService } from './hard-redirect.service'; diff --git a/src/app/core/services/browser.referrer.service.spec.ts b/projects/dspace/core/src/lib/services/browser.referrer.service.spec.ts similarity index 100% rename from src/app/core/services/browser.referrer.service.spec.ts rename to projects/dspace/core/src/lib/services/browser.referrer.service.spec.ts diff --git a/src/app/core/services/browser.referrer.service.ts b/projects/dspace/core/src/lib/services/browser.referrer.service.ts similarity index 94% rename from src/app/core/services/browser.referrer.service.ts rename to projects/dspace/core/src/lib/services/browser.referrer.service.ts index fd2d3d5efd3..c11f02347bc 100644 --- a/src/app/core/services/browser.referrer.service.ts +++ b/projects/dspace/core/src/lib/services/browser.referrer.service.ts @@ -1,12 +1,9 @@ import { DOCUMENT } from '@angular/common'; -import { - Inject, - Injectable, -} from '@angular/core'; +import { Inject, Injectable } from '@angular/core'; +import { hasNoValue } from '@dspace/utils'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { hasNoValue } from '../../shared/empty.util'; import { URLCombiner } from '../url-combiner/url-combiner'; import { HardRedirectService } from './hard-redirect.service'; import { ReferrerService } from './referrer.service'; diff --git a/src/app/core/services/hard-redirect.service.ts b/projects/dspace/core/src/lib/services/hard-redirect.service.ts similarity index 100% rename from src/app/core/services/hard-redirect.service.ts rename to projects/dspace/core/src/lib/services/hard-redirect.service.ts diff --git a/projects/dspace/core/src/lib/services/index.ts b/projects/dspace/core/src/lib/services/index.ts new file mode 100644 index 00000000000..3dd00cea15c --- /dev/null +++ b/projects/dspace/core/src/lib/services/index.ts @@ -0,0 +1,24 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './browser-hard-redirect.service.spec'; +export * from './browser-hard-redirect.service'; +export * from './browser.referrer.service.spec'; +export * from './browser.referrer.service'; +export * from './hard-redirect.service'; +export * from './link-head.service.spec'; +export * from './link-head.service'; +export * from './referrer.service'; +export * from './route.actions'; +export * from './route.effects'; +export * from './route.reducer'; +export * from './route.service.spec'; +export * from './route.service'; +export * from './server-hard-redirect.service.spec'; +export * from './server-hard-redirect.service'; +export * from './server-response.service'; +export * from './server-xhr.service'; +export * from './server.referrer.service.spec'; +export * from './server.referrer.service'; +export * from './window.service'; diff --git a/src/app/core/services/link-head.service.spec.ts b/projects/dspace/core/src/lib/services/link-head.service.spec.ts similarity index 89% rename from src/app/core/services/link-head.service.spec.ts rename to projects/dspace/core/src/lib/services/link-head.service.spec.ts index fd240db4d9d..aee36677405 100644 --- a/src/app/core/services/link-head.service.spec.ts +++ b/projects/dspace/core/src/lib/services/link-head.service.spec.ts @@ -1,12 +1,6 @@ import { DOCUMENT } from '@angular/common'; -import { - Renderer2, - RendererFactory2, -} from '@angular/core'; -import { - TestBed, - waitForAsync, -} from '@angular/core/testing'; +import { Renderer2, RendererFactory2 } from '@angular/core'; +import { TestBed, waitForAsync } from '@angular/core/testing'; import { MockProvider } from 'ng-mocks'; import { LinkHeadService } from './link-head.service'; diff --git a/src/app/core/services/link-head.service.ts b/projects/dspace/core/src/lib/services/link-head.service.ts similarity index 93% rename from src/app/core/services/link-head.service.ts rename to projects/dspace/core/src/lib/services/link-head.service.ts index 723f647108d..1c51c8af58f 100644 --- a/src/app/core/services/link-head.service.ts +++ b/projects/dspace/core/src/lib/services/link-head.service.ts @@ -1,10 +1,5 @@ import { DOCUMENT } from '@angular/common'; -import { - Inject, - Injectable, - RendererFactory2, - ViewEncapsulation, -} from '@angular/core'; +import { Inject, Injectable, RendererFactory2, ViewEncapsulation } from '@angular/core'; /** * LinkHead Service injects tag into the head element during runtime. @@ -23,7 +18,7 @@ export class LinkHeadService { * @param tag LinkDefition is the parameters to define a link tag. * @returns Link tag that was created */ - addTag(tag: LinkDefinition) { + addTag(tag: LinkTagDefinition) { try { const renderer = this.rendererFactory.createRenderer(this.document, { @@ -81,7 +76,7 @@ export class LinkHeadService { } } -export declare type LinkDefinition = { +export declare type LinkTagDefinition = { charset?: string; crossorigin?: string; href?: string; diff --git a/src/app/core/services/referrer.service.ts b/projects/dspace/core/src/lib/services/referrer.service.ts similarity index 100% rename from src/app/core/services/referrer.service.ts rename to projects/dspace/core/src/lib/services/referrer.service.ts diff --git a/src/app/core/services/route.actions.ts b/projects/dspace/core/src/lib/services/route.actions.ts similarity index 98% rename from src/app/core/services/route.actions.ts rename to projects/dspace/core/src/lib/services/route.actions.ts index 3f64b9dba41..bb27d256af3 100644 --- a/src/app/core/services/route.actions.ts +++ b/projects/dspace/core/src/lib/services/route.actions.ts @@ -2,7 +2,7 @@ import { Params } from '@angular/router'; import { Action } from '@ngrx/store'; -import { type } from '../../shared/ngrx/type'; +import { type } from '../ngrx/type'; /** * The list of HrefIndexAction type definitions diff --git a/src/app/core/services/route.effects.ts b/projects/dspace/core/src/lib/services/route.effects.ts similarity index 78% rename from src/app/core/services/route.effects.ts rename to projects/dspace/core/src/lib/services/route.effects.ts index b31008f3c1d..76fd5e1f55c 100644 --- a/src/app/core/services/route.effects.ts +++ b/projects/dspace/core/src/lib/services/route.effects.ts @@ -1,19 +1,9 @@ import { Injectable } from '@angular/core'; -import { - Actions, - createEffect, - ofType, -} from '@ngrx/effects'; -import { - map, - tap, -} from 'rxjs/operators'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; +import { map, tap } from 'rxjs/operators'; import { RouterActionTypes } from '../router/router.actions'; -import { - ResetRouteStateAction, - RouteActionTypes, -} from './route.actions'; +import { ResetRouteStateAction, RouteActionTypes } from './route.actions'; import { RouteService } from './route.service'; @Injectable() diff --git a/src/app/core/services/route.reducer.ts b/projects/dspace/core/src/lib/services/route.reducer.ts similarity index 98% rename from src/app/core/services/route.reducer.ts rename to projects/dspace/core/src/lib/services/route.reducer.ts index 60bf7a4b191..343e3e691b7 100644 --- a/src/app/core/services/route.reducer.ts +++ b/projects/dspace/core/src/lib/services/route.reducer.ts @@ -1,6 +1,6 @@ import { Params } from '@angular/router'; +import { isNotEmpty } from '@dspace/utils'; -import { isNotEmpty } from '../../shared/empty.util'; import { AddParameterAction, AddQueryParameterAction, diff --git a/src/app/core/services/route.service.spec.ts b/projects/dspace/core/src/lib/services/route.service.spec.ts similarity index 95% rename from src/app/core/services/route.service.spec.ts rename to projects/dspace/core/src/lib/services/route.service.spec.ts index 6beadaf5da3..321fd403bbe 100644 --- a/src/app/core/services/route.service.spec.ts +++ b/projects/dspace/core/src/lib/services/route.service.spec.ts @@ -1,26 +1,14 @@ -import { - TestBed, - waitForAsync, -} from '@angular/core/testing'; -import { - ActivatedRoute, - convertToParamMap, - NavigationEnd, - Params, - Router, -} from '@angular/router'; +import { TestBed, waitForAsync } from '@angular/core/testing'; +import { ActivatedRoute, convertToParamMap, NavigationEnd, Params, Router } from '@angular/router'; import { Store } from '@ngrx/store'; -import { - getTestScheduler, - hot, -} from 'jasmine-marbles'; +import { getTestScheduler, hot } from 'jasmine-marbles'; import { of } from 'rxjs'; import { take } from 'rxjs/operators'; import { TestScheduler } from 'rxjs/testing'; -import { RouterMock } from '../../shared/mocks/router.mock'; -import { ActivatedRouteStub } from '../../shared/testing/active-router.stub'; import { AddUrlToHistoryAction } from '../history/history.actions'; +import { ActivatedRouteStub } from '../testing/active-router.stub'; +import { RouterMock } from '../testing/router.mock'; import { RouteService } from './route.service'; describe('RouteService', () => { diff --git a/src/app/core/services/route.service.ts b/projects/dspace/core/src/lib/services/route.service.ts similarity index 97% rename from src/app/core/services/route.service.ts rename to projects/dspace/core/src/lib/services/route.service.ts index 40a5d6bb878..5a968bd13f4 100644 --- a/src/app/core/services/route.service.ts +++ b/projects/dspace/core/src/lib/services/route.service.ts @@ -6,25 +6,12 @@ import { Router, RouterStateSnapshot, } from '@angular/router'; -import { - createSelector, - MemoizedSelector, - select, - Store, -} from '@ngrx/store'; +import { hasValue } from '@dspace/utils'; +import { createSelector, MemoizedSelector, select, Store } from '@ngrx/store'; import isEqual from 'lodash/isEqual'; -import { - combineLatest, - Observable, -} from 'rxjs'; -import { - distinctUntilChanged, - filter, - map, - take, -} from 'rxjs/operators'; +import { combineLatest, Observable } from 'rxjs'; +import { distinctUntilChanged, filter, map, take } from 'rxjs/operators'; -import { hasValue } from '../../shared/empty.util'; import { coreSelector } from '../core.selectors'; import { CoreState } from '../core-state.model'; import { AddUrlToHistoryAction } from '../history/history.actions'; diff --git a/src/app/core/services/server-hard-redirect.service.spec.ts b/projects/dspace/core/src/lib/services/server-hard-redirect.service.spec.ts similarity index 84% rename from src/app/core/services/server-hard-redirect.service.spec.ts rename to projects/dspace/core/src/lib/services/server-hard-redirect.service.spec.ts index a904a8e66cf..d0f31c6c6f3 100644 --- a/src/app/core/services/server-hard-redirect.service.spec.ts +++ b/projects/dspace/core/src/lib/services/server-hard-redirect.service.spec.ts @@ -1,14 +1,24 @@ import { TestBed } from '@angular/core/testing'; +import { AppConfig } from '@dspace/config'; -import { environment } from '../../../environments/environment.test'; import { ServerHardRedirectService } from './server-hard-redirect.service'; describe('ServerHardRedirectService', () => { const mockRequest = jasmine.createSpyObj(['get']); const mockResponse = jasmine.createSpyObj(['redirect', 'end']); - - let service: ServerHardRedirectService = new ServerHardRedirectService(environment, mockRequest, mockResponse); + const envConfig = { + rest: { + ssl: true, + host: 'rest.com', + port: 443, + // NOTE: Space is capitalized because 'namespace' is a reserved string in TypeScript + nameSpace: '/api', + baseUrl: 'https://rest.com/server', + }, + } as AppConfig; + + let service: ServerHardRedirectService = new ServerHardRedirectService(envConfig, mockRequest, mockResponse); const origin = 'https://test-host.com:4000'; beforeEach(() => { @@ -72,7 +82,7 @@ describe('ServerHardRedirectService', () => { describe('when SSR base url is set', () => { const redirect = 'https://private-url:4000/server/api/bitstreams/uuid'; const replacedUrl = 'https://public-url/server/api/bitstreams/uuid'; - const environmentWithSSRUrl: any = { ...environment, ...{ ...environment.rest, rest: { + const environmentWithSSRUrl: any = { ...envConfig, ...{ ...envConfig.rest, rest: { ssrBaseUrl: 'https://private-url:4000/server', baseUrl: 'https://public-url/server', } } }; diff --git a/src/app/core/services/server-hard-redirect.service.ts b/projects/dspace/core/src/lib/services/server-hard-redirect.service.ts similarity index 88% rename from src/app/core/services/server-hard-redirect.service.ts rename to projects/dspace/core/src/lib/services/server-hard-redirect.service.ts index 1592d9bf1cf..3379cfb5245 100644 --- a/src/app/core/services/server-hard-redirect.service.ts +++ b/projects/dspace/core/src/lib/services/server-hard-redirect.service.ts @@ -1,21 +1,9 @@ -import { - Inject, - Injectable, -} from '@angular/core'; -import { - Request, - Response, -} from 'express'; +import { Inject, Injectable } from '@angular/core'; +import { APP_CONFIG, AppConfig } from '@dspace/config'; +import { isNotEmpty } from '@dspace/utils'; +import { Request, Response } from 'express'; -import { - APP_CONFIG, - AppConfig, -} from '../../../config/app-config.interface'; -import { - REQUEST, - RESPONSE, -} from '../../../express.tokens'; -import { isNotEmpty } from '../../shared/empty.util'; +import { REQUEST, RESPONSE } from '../tokens/express.tokens'; import { HardRedirectService } from './hard-redirect.service'; /** diff --git a/src/app/core/services/server-response.service.ts b/projects/dspace/core/src/lib/services/server-response.service.ts similarity index 92% rename from src/app/core/services/server-response.service.ts rename to projects/dspace/core/src/lib/services/server-response.service.ts index 01e77b08166..2fc3add494b 100644 --- a/src/app/core/services/server-response.service.ts +++ b/projects/dspace/core/src/lib/services/server-response.service.ts @@ -1,11 +1,7 @@ -import { - Inject, - Injectable, - Optional, -} from '@angular/core'; +import { Inject, Injectable, Optional } from '@angular/core'; import { Response } from 'express'; -import { RESPONSE } from '../../../express.tokens'; +import { RESPONSE } from '../tokens/express.tokens'; /** * Service responsible to provide method to manage the response object diff --git a/src/app/core/services/server-xhr.service.ts b/projects/dspace/core/src/lib/services/server-xhr.service.ts similarity index 93% rename from src/app/core/services/server-xhr.service.ts rename to projects/dspace/core/src/lib/services/server-xhr.service.ts index 4b58c6b127c..ab7151c5da2 100644 --- a/src/app/core/services/server-xhr.service.ts +++ b/projects/dspace/core/src/lib/services/server-xhr.service.ts @@ -8,15 +8,9 @@ import { XhrFactory } from '@angular/common'; import { Injectable } from '@angular/core'; -import { - Agent as HttpAgent, - AgentOptions as HttpAgentOptions, -} from 'http'; +import { Agent as HttpAgent, AgentOptions as HttpAgentOptions } from 'http'; import { Agent as HttpsAgent } from 'https'; -import { - prototype, - XMLHttpRequest, -} from 'xhr2'; +import { prototype, XMLHttpRequest } from 'xhr2'; /** * Allow HTTP sessions to be kept alive. diff --git a/src/app/core/services/server.referrer.service.spec.ts b/projects/dspace/core/src/lib/services/server.referrer.service.spec.ts similarity index 100% rename from src/app/core/services/server.referrer.service.spec.ts rename to projects/dspace/core/src/lib/services/server.referrer.service.spec.ts diff --git a/src/app/core/services/server.referrer.service.ts b/projects/dspace/core/src/lib/services/server.referrer.service.ts similarity index 82% rename from src/app/core/services/server.referrer.service.ts rename to projects/dspace/core/src/lib/services/server.referrer.service.ts index e8fc62f0c83..19795a391e1 100644 --- a/src/app/core/services/server.referrer.service.ts +++ b/projects/dspace/core/src/lib/services/server.referrer.service.ts @@ -1,13 +1,7 @@ -import { - Inject, - Injectable, -} from '@angular/core'; -import { - Observable, - of, -} from 'rxjs'; +import { Inject, Injectable } from '@angular/core'; +import { Observable, of } from 'rxjs'; -import { REQUEST } from '../../../express.tokens'; +import { REQUEST } from '../tokens/express.tokens'; import { ReferrerService } from './referrer.service'; /** diff --git a/src/app/core/services/window.service.ts b/projects/dspace/core/src/lib/services/window.service.ts similarity index 100% rename from src/app/core/services/window.service.ts rename to projects/dspace/core/src/lib/services/window.service.ts diff --git a/src/app/core/shared/NoContent.model.ts b/projects/dspace/core/src/lib/shared/NoContent.model.ts similarity index 100% rename from src/app/core/shared/NoContent.model.ts rename to projects/dspace/core/src/lib/shared/NoContent.model.ts diff --git a/src/app/shared/object-collection/shared/badges/access-status-badge/access-status.model.ts b/projects/dspace/core/src/lib/shared/access-status.model.ts similarity index 57% rename from src/app/shared/object-collection/shared/badges/access-status-badge/access-status.model.ts rename to projects/dspace/core/src/lib/shared/access-status.model.ts index 62d59f45ff3..d8ec723f5c3 100644 --- a/src/app/shared/object-collection/shared/badges/access-status-badge/access-status.model.ts +++ b/projects/dspace/core/src/lib/shared/access-status.model.ts @@ -1,12 +1,9 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; -import { typedObject } from 'src/app/core/cache/builders/build-decorators'; -import { CacheableObject } from 'src/app/core/cache/cacheable-object.model'; -import { HALLink } from 'src/app/core/shared/hal-link.model'; -import { ResourceType } from 'src/app/core/shared/resource-type'; -import { excludeFromEquals } from 'src/app/core/utilities/equals.decorators'; +import { typedObject } from '../cache/builders/build-decorators'; +import { CacheableObject } from '../cache/cacheable-object.model'; +import { HALLink } from './hal-link.model'; +import { ResourceType } from './resource-type'; +import { excludeFromEquals } from '../utilities/equals.decorators'; +import { autoserialize, deserialize } from 'cerialize'; import { ACCESS_STATUS } from './access-status.resource-type'; diff --git a/src/app/shared/object-collection/shared/badges/access-status-badge/access-status.resource-type.ts b/projects/dspace/core/src/lib/shared/access-status.resource-type.ts similarity index 74% rename from src/app/shared/object-collection/shared/badges/access-status-badge/access-status.resource-type.ts rename to projects/dspace/core/src/lib/shared/access-status.resource-type.ts index ead2afc0b16..9ca7e0eea71 100644 --- a/src/app/shared/object-collection/shared/badges/access-status-badge/access-status.resource-type.ts +++ b/projects/dspace/core/src/lib/shared/access-status.resource-type.ts @@ -1,4 +1,4 @@ -import { ResourceType } from 'src/app/core/shared/resource-type'; +import { ResourceType } from './resource-type'; /** * The resource type for Access Status diff --git a/src/app/admin/admin-notify-dashboard/models/admin-notify-message.resource-type.ts b/projects/dspace/core/src/lib/shared/admin-notify-message.resource-type.ts similarity index 75% rename from src/app/admin/admin-notify-dashboard/models/admin-notify-message.resource-type.ts rename to projects/dspace/core/src/lib/shared/admin-notify-message.resource-type.ts index 994146adb3d..92fdb822fed 100644 --- a/src/app/admin/admin-notify-dashboard/models/admin-notify-message.resource-type.ts +++ b/projects/dspace/core/src/lib/shared/admin-notify-message.resource-type.ts @@ -1,4 +1,4 @@ -import { ResourceType } from '../../../core/shared/resource-type'; +import { ResourceType } from './resource-type'; /** * The resource type for AdminNotifyMessage diff --git a/src/app/core/shared/authorization.model.ts b/projects/dspace/core/src/lib/shared/authorization.model.ts similarity index 89% rename from src/app/core/shared/authorization.model.ts rename to projects/dspace/core/src/lib/shared/authorization.model.ts index 1712db9a078..d83bfc768c9 100644 --- a/src/app/core/shared/authorization.model.ts +++ b/projects/dspace/core/src/lib/shared/authorization.model.ts @@ -1,14 +1,7 @@ -import { - autoserialize, - deserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, deserialize, inheritSerialization } from 'cerialize'; import { Observable } from 'rxjs'; -import { - link, - typedObject, -} from '../cache/builders/build-decorators'; +import { link, typedObject } from '../cache/builders/build-decorators'; import { RemoteData } from '../data/remote-data'; import { EPerson } from '../eperson/models/eperson.model'; import { EPERSON } from '../eperson/models/eperson.resource-type'; diff --git a/src/app/core/shared/authorization.resource-type.ts b/projects/dspace/core/src/lib/shared/authorization.resource-type.ts similarity index 100% rename from src/app/core/shared/authorization.resource-type.ts rename to projects/dspace/core/src/lib/shared/authorization.resource-type.ts diff --git a/src/app/core/shared/authorized.operators.ts b/projects/dspace/core/src/lib/shared/authorized.operators.ts similarity index 76% rename from src/app/core/shared/authorized.operators.ts rename to projects/dspace/core/src/lib/shared/authorized.operators.ts index 6700011347e..48881635450 100644 --- a/src/app/core/shared/authorized.operators.ts +++ b/projects/dspace/core/src/lib/shared/authorized.operators.ts @@ -1,25 +1,11 @@ import { InjectionToken } from '@angular/core'; -import { - Router, - UrlTree, -} from '@angular/router'; -import { - combineLatest as observableCombineLatest, - Observable, -} from 'rxjs'; -import { - filter, - map, - withLatestFrom, -} from 'rxjs/operators'; +import { Router, UrlTree } from '@angular/router'; +import { combineLatest as observableCombineLatest, Observable } from 'rxjs'; +import { filter, map, withLatestFrom } from 'rxjs/operators'; -import { - getForbiddenRoute, - getPageNotFoundRoute, -} from '../../app-routing-paths'; -import { getEndUserAgreementPath } from '../../info/info-routing-paths'; import { AuthService } from '../auth/auth.service'; import { RemoteData } from '../data/remote-data'; +import { getForbiddenRoute, getPageNotFoundRoute } from '../router/core-routing-paths'; export const REDIRECT_ON_4XX = new InjectionToken<(router: Router, authService: AuthService) => (source: Observable>) => Observable>>('redirectOn4xx', { providedIn: 'root', @@ -90,16 +76,3 @@ export const returnForbiddenUrlTreeOrLoginOnAllFalse = (router: Router, authServ } } })); -/** - * Operator that returns a UrlTree to the unauthorized page when the boolean received is false - * @param router Router - * @param redirect Redirect URL to add to the UrlTree. This is used to redirect back to the original route after the - * user accepts the agreement. - */ -export const returnEndUserAgreementUrlTreeOnFalse = (router: Router, redirect: string) => - (source: Observable): Observable => - source.pipe( - map((hasAgreed: boolean) => { - const queryParams = { redirect: encodeURIComponent(redirect) }; - return hasAgreed ? hasAgreed : router.createUrlTree([getEndUserAgreementPath()], { queryParams }); - })); diff --git a/src/app/core/shared/bitstream-format-support-level.ts b/projects/dspace/core/src/lib/shared/bitstream-format-support-level.ts similarity index 100% rename from src/app/core/shared/bitstream-format-support-level.ts rename to projects/dspace/core/src/lib/shared/bitstream-format-support-level.ts diff --git a/src/app/core/shared/bitstream-format.model.ts b/projects/dspace/core/src/lib/shared/bitstream-format.model.ts similarity index 96% rename from src/app/core/shared/bitstream-format.model.ts rename to projects/dspace/core/src/lib/shared/bitstream-format.model.ts index 44ba85c9745..1c439d93ff0 100644 --- a/src/app/core/shared/bitstream-format.model.ts +++ b/projects/dspace/core/src/lib/shared/bitstream-format.model.ts @@ -1,8 +1,4 @@ -import { - autoserialize, - deserialize, - deserializeAs, -} from 'cerialize'; +import { autoserialize, deserialize, deserializeAs } from 'cerialize'; import { typedObject } from '../cache/builders/build-decorators'; import { CacheableObject } from '../cache/cacheable-object.model'; diff --git a/src/app/core/shared/bitstream-format.resource-type.ts b/projects/dspace/core/src/lib/shared/bitstream-format.resource-type.ts similarity index 100% rename from src/app/core/shared/bitstream-format.resource-type.ts rename to projects/dspace/core/src/lib/shared/bitstream-format.resource-type.ts diff --git a/src/app/core/shared/bitstream.model.ts b/projects/dspace/core/src/lib/shared/bitstream.model.ts similarity index 75% rename from src/app/core/shared/bitstream.model.ts rename to projects/dspace/core/src/lib/shared/bitstream.model.ts index 29a80069db9..f366f298002 100644 --- a/src/app/core/shared/bitstream.model.ts +++ b/projects/dspace/core/src/lib/shared/bitstream.model.ts @@ -1,16 +1,9 @@ -import { - autoserialize, - deserialize, - inheritSerialization, -} from 'cerialize'; +import { AccessStatusObject } from './access-status.model'; +import { ACCESS_STATUS } from './access-status.resource-type'; +import { autoserialize, deserialize, inheritSerialization } from 'cerialize'; import { Observable } from 'rxjs'; -import { AccessStatusObject } from 'src/app/shared/object-collection/shared/badges/access-status-badge/access-status.model'; -import { ACCESS_STATUS } from 'src/app/shared/object-collection/shared/badges/access-status-badge/access-status.resource-type'; -import { - link, - typedObject, -} from '../cache/builders/build-decorators'; +import { link, typedObject } from '../cache/builders/build-decorators'; import { RemoteData } from '../data/remote-data'; import { BITSTREAM } from './bitstream.resource-type'; import { BitstreamFormat } from './bitstream-format.model'; @@ -19,8 +12,18 @@ import { Bundle } from './bundle.model'; import { BUNDLE } from './bundle.resource-type'; import { ChildHALResource } from './child-hal-resource.model'; import { DSpaceObject } from './dspace-object.model'; +import { followLink, FollowLinkConfig } from './follow-link-config.model'; import { HALLink } from './hal-link.model'; +/** + * The self links defined in this list are expected to be requested somewhere in the near future + * Requesting them as embeds will limit the number of requests + */ +export const BITSTREAM_PAGE_LINKS_TO_FOLLOW: FollowLinkConfig[] = [ + followLink('bundle', {}, followLink('primaryBitstream'), followLink('item')), + followLink('format'), +]; + @typedObject @inheritSerialization(DSpaceObject) export class Bitstream extends DSpaceObject implements ChildHALResource { diff --git a/src/app/core/shared/bitstream.operators.ts b/projects/dspace/core/src/lib/shared/bitstream.operators.ts similarity index 83% rename from src/app/core/shared/bitstream.operators.ts rename to projects/dspace/core/src/lib/shared/bitstream.operators.ts index f34ec279b36..6daa8df8599 100644 --- a/src/app/core/shared/bitstream.operators.ts +++ b/projects/dspace/core/src/lib/shared/bitstream.operators.ts @@ -1,13 +1,7 @@ -import { - Observable, - of, -} from 'rxjs'; -import { - map, - switchMap, -} from 'rxjs/operators'; +import { hasValue } from '@dspace/utils'; +import { Observable, of } from 'rxjs'; +import { map, switchMap } from 'rxjs/operators'; -import { hasValue } from '../../shared/empty.util'; import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service'; import { FeatureID } from '../data/feature-authorization/feature-id'; import { Bitstream } from './bitstream.model'; diff --git a/src/app/core/shared/bitstream.resource-type.ts b/projects/dspace/core/src/lib/shared/bitstream.resource-type.ts similarity index 100% rename from src/app/core/shared/bitstream.resource-type.ts rename to projects/dspace/core/src/lib/shared/bitstream.resource-type.ts diff --git a/src/app/core/shared/browse-definition.model.ts b/projects/dspace/core/src/lib/shared/browse-definition.model.ts similarity index 71% rename from src/app/core/shared/browse-definition.model.ts rename to projects/dspace/core/src/lib/shared/browse-definition.model.ts index 5fe5d02ecb4..d38722399b2 100644 --- a/src/app/core/shared/browse-definition.model.ts +++ b/projects/dspace/core/src/lib/shared/browse-definition.model.ts @@ -1,9 +1,6 @@ -import { - autoserialize, - autoserializeAs, -} from 'cerialize'; +import { autoserialize, autoserializeAs } from 'cerialize'; -import { BrowseByDataType } from '../../browse-by/browse-by-switcher/browse-by-data-type'; +import { BrowseByDataType } from '../browse/browse-by-data-type'; import { CacheableObject } from '../cache/cacheable-object.model'; /** diff --git a/src/app/core/shared/browse-definition.resource-type.ts b/projects/dspace/core/src/lib/shared/browse-definition.resource-type.ts similarity index 100% rename from src/app/core/shared/browse-definition.resource-type.ts rename to projects/dspace/core/src/lib/shared/browse-definition.resource-type.ts diff --git a/src/app/core/shared/browse-entry.model.ts b/projects/dspace/core/src/lib/shared/browse-entry.model.ts similarity index 89% rename from src/app/core/shared/browse-entry.model.ts rename to projects/dspace/core/src/lib/shared/browse-entry.model.ts index 746333872e6..228bb0a31e2 100644 --- a/src/app/core/shared/browse-entry.model.ts +++ b/projects/dspace/core/src/lib/shared/browse-entry.model.ts @@ -1,16 +1,12 @@ -import { - autoserialize, - autoserializeAs, - deserialize, -} from 'cerialize'; +import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; -import { ListableObject } from '../../shared/object-collection/shared/listable-object.model'; import { typedObject } from '../cache/builders/build-decorators'; import { TypedObject } from '../cache/typed-object.model'; import { excludeFromEquals } from '../utilities/equals.decorators'; import { BROWSE_ENTRY } from './browse-entry.resource-type'; import { GenericConstructor } from './generic-constructor'; import { HALLink } from './hal-link.model'; +import { ListableObject } from './object-collection/listable-object.model'; import { ResourceType } from './resource-type'; /** diff --git a/src/app/core/shared/browse-entry.resource-type.ts b/projects/dspace/core/src/lib/shared/browse-entry.resource-type.ts similarity index 100% rename from src/app/core/shared/browse-entry.resource-type.ts rename to projects/dspace/core/src/lib/shared/browse-entry.resource-type.ts diff --git a/src/app/core/shared/bundle.model.ts b/projects/dspace/core/src/lib/shared/bundle.model.ts similarity index 90% rename from src/app/core/shared/bundle.model.ts rename to projects/dspace/core/src/lib/shared/bundle.model.ts index d9ea6d83dc9..4d767895394 100644 --- a/src/app/core/shared/bundle.model.ts +++ b/projects/dspace/core/src/lib/shared/bundle.model.ts @@ -1,13 +1,7 @@ -import { - deserialize, - inheritSerialization, -} from 'cerialize'; +import { deserialize, inheritSerialization } from 'cerialize'; import { Observable } from 'rxjs'; -import { - link, - typedObject, -} from '../cache/builders/build-decorators'; +import { link, typedObject } from '../cache/builders/build-decorators'; import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; import { Bitstream } from './bitstream.model'; diff --git a/src/app/core/shared/bundle.resource-type.ts b/projects/dspace/core/src/lib/shared/bundle.resource-type.ts similarity index 100% rename from src/app/core/shared/bundle.resource-type.ts rename to projects/dspace/core/src/lib/shared/bundle.resource-type.ts diff --git a/src/app/core/shared/child-hal-resource.model.ts b/projects/dspace/core/src/lib/shared/child-hal-resource.model.ts similarity index 100% rename from src/app/core/shared/child-hal-resource.model.ts rename to projects/dspace/core/src/lib/shared/child-hal-resource.model.ts diff --git a/src/app/core/shared/client-math.service.ts b/projects/dspace/core/src/lib/shared/client-math.service.ts similarity index 84% rename from src/app/core/shared/client-math.service.ts rename to projects/dspace/core/src/lib/shared/client-math.service.ts index 0630ec32461..883c4f782ed 100644 --- a/src/app/core/shared/client-math.service.ts +++ b/projects/dspace/core/src/lib/shared/client-math.service.ts @@ -1,23 +1,10 @@ import { DOCUMENT } from '@angular/common'; -import { - Inject, - Injectable, -} from '@angular/core'; -import { - BehaviorSubject, - Observable, - Subject, -} from 'rxjs'; -import { environment } from 'src/environments/environment'; +import { Inject, inject, Injectable } from '@angular/core'; +import { APP_CONFIG, AppConfig } from '@dspace/config'; +import { BehaviorSubject, Observable, Subject } from 'rxjs'; -import { - NativeWindowRef, - NativeWindowService, -} from '../services/window.service'; -import { - MathJaxConfig, - MathService, -} from './math.service'; +import { NativeWindowRef, NativeWindowService } from '../services/window.service'; +import { MathJaxConfig, MathService } from './math.service'; @Injectable({ providedIn: 'root', @@ -26,6 +13,7 @@ import { * Provide the MathService for CSR */ export class ClientMathService extends MathService { + protected readonly appConfig: AppConfig = inject(APP_CONFIG); protected isReady$: Subject; @@ -72,7 +60,7 @@ export class ClientMathService extends MathService { * @param config The configuration object for the script */ protected async registerMathJaxAsync(config: MathJaxConfig): Promise { - if (environment.markdown.mathjax) { + if (this.appConfig.markdown.mathjax) { return new Promise((resolve, reject) => { const optionsScript: HTMLScriptElement = this._document.createElement('script'); @@ -107,7 +95,7 @@ export class ClientMathService extends MathService { * @param element The element to render with MathJax */ render(element: HTMLElement) { - if (environment.markdown.mathjax) { + if (this.appConfig.markdown.mathjax) { return (window as any).MathJax.typesetPromise([element]) as Promise; } } diff --git a/src/app/core/shared/collection.model.spec.ts b/projects/dspace/core/src/lib/shared/collection.model.spec.ts similarity index 100% rename from src/app/core/shared/collection.model.spec.ts rename to projects/dspace/core/src/lib/shared/collection.model.spec.ts diff --git a/src/app/core/shared/collection.model.ts b/projects/dspace/core/src/lib/shared/collection.model.ts similarity index 86% rename from src/app/core/shared/collection.model.ts rename to projects/dspace/core/src/lib/shared/collection.model.ts index b929e54ccb4..e001db1e3be 100644 --- a/src/app/core/shared/collection.model.ts +++ b/projects/dspace/core/src/lib/shared/collection.model.ts @@ -1,14 +1,7 @@ -import { - autoserialize, - deserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, deserialize, inheritSerialization } from 'cerialize'; import { Observable } from 'rxjs'; -import { - link, - typedObject, -} from '../cache/builders/build-decorators'; +import { link, typedObject } from '../cache/builders/build-decorators'; import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; import { ResourcePolicy } from '../resource-policy/models/resource-policy.model'; @@ -21,11 +14,23 @@ import { COLLECTION } from './collection.resource-type'; import { Community } from './community.model'; import { COMMUNITY } from './community.resource-type'; import { DSpaceObject } from './dspace-object.model'; +import { followLink, FollowLinkConfig } from './follow-link-config.model'; import { HALLink } from './hal-link.model'; import { HandleObject } from './handle-object.model'; import { License } from './license.model'; import { LICENSE } from './license.resource-type'; +/** + * The self links defined in this list are expected to be requested somewhere in the near future + * Requesting them as embeds will limit the number of requests + */ +export const COLLECTION_PAGE_LINKS_TO_FOLLOW: FollowLinkConfig[] = [ + followLink('parentCommunity', {}, + followLink('parentCommunity'), + ), + followLink('logo'), +]; + @typedObject @inheritSerialization(DSpaceObject) export class Collection extends DSpaceObject implements ChildHALResource, HandleObject { diff --git a/src/app/core/shared/collection.resource-type.ts b/projects/dspace/core/src/lib/shared/collection.resource-type.ts similarity index 100% rename from src/app/core/shared/collection.resource-type.ts rename to projects/dspace/core/src/lib/shared/collection.resource-type.ts diff --git a/src/app/core/shared/community.model.spec.ts b/projects/dspace/core/src/lib/shared/community.model.spec.ts similarity index 100% rename from src/app/core/shared/community.model.spec.ts rename to projects/dspace/core/src/lib/shared/community.model.spec.ts diff --git a/src/app/core/shared/community.model.ts b/projects/dspace/core/src/lib/shared/community.model.ts similarity index 84% rename from src/app/core/shared/community.model.ts rename to projects/dspace/core/src/lib/shared/community.model.ts index 31b00398ffb..1b3f8423a60 100644 --- a/src/app/core/shared/community.model.ts +++ b/projects/dspace/core/src/lib/shared/community.model.ts @@ -1,14 +1,7 @@ -import { - autoserialize, - deserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, deserialize, inheritSerialization } from 'cerialize'; import { Observable } from 'rxjs'; -import { - link, - typedObject, -} from '../cache/builders/build-decorators'; +import { link, typedObject } from '../cache/builders/build-decorators'; import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; import { excludeFromEquals } from '../utilities/equals.decorators'; @@ -19,9 +12,21 @@ import { Collection } from './collection.model'; import { COLLECTION } from './collection.resource-type'; import { COMMUNITY } from './community.resource-type'; import { DSpaceObject } from './dspace-object.model'; +import { followLink, FollowLinkConfig } from './follow-link-config.model'; import { HALLink } from './hal-link.model'; import { HandleObject } from './handle-object.model'; +/** + * The self links defined in this list are expected to be requested somewhere in the near future + * Requesting them as embeds will limit the number of requests + */ +export const COMMUNITY_PAGE_LINKS_TO_FOLLOW: FollowLinkConfig[] = [ + followLink('logo'), + followLink('subcommunities'), + followLink('collections'), + followLink('parentCommunity'), +]; + @typedObject @inheritSerialization(DSpaceObject) export class Community extends DSpaceObject implements ChildHALResource, HandleObject { @@ -115,3 +120,4 @@ export class Community extends DSpaceObject implements ChildHALResource, HandleO return 'parentCommunity'; } } + diff --git a/src/app/core/shared/community.resource-type.ts b/projects/dspace/core/src/lib/shared/community.resource-type.ts similarity index 100% rename from src/app/core/shared/community.resource-type.ts rename to projects/dspace/core/src/lib/shared/community.resource-type.ts diff --git a/src/app/core/shared/confidence-type.ts b/projects/dspace/core/src/lib/shared/confidence-type.ts similarity index 100% rename from src/app/core/shared/confidence-type.ts rename to projects/dspace/core/src/lib/shared/confidence-type.ts diff --git a/src/app/core/shared/config-property.resource-type.ts b/projects/dspace/core/src/lib/shared/config-property.resource-type.ts similarity index 100% rename from src/app/core/shared/config-property.resource-type.ts rename to projects/dspace/core/src/lib/shared/config-property.resource-type.ts diff --git a/src/app/core/shared/configuration-property.model.ts b/projects/dspace/core/src/lib/shared/configuration-property.model.ts similarity index 93% rename from src/app/core/shared/configuration-property.model.ts rename to projects/dspace/core/src/lib/shared/configuration-property.model.ts index e15f8a5b859..1d1f471ab79 100644 --- a/src/app/core/shared/configuration-property.model.ts +++ b/projects/dspace/core/src/lib/shared/configuration-property.model.ts @@ -1,8 +1,4 @@ -import { - autoserialize, - autoserializeAs, - deserialize, -} from 'cerialize'; +import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; import { typedObject } from '../cache/builders/build-decorators'; import { CacheableObject } from '../cache/cacheable-object.model'; diff --git a/src/app/core/shared/content-source-set-serializer.spec.ts b/projects/dspace/core/src/lib/shared/content-source-set-serializer.spec.ts similarity index 100% rename from src/app/core/shared/content-source-set-serializer.spec.ts rename to projects/dspace/core/src/lib/shared/content-source-set-serializer.spec.ts diff --git a/src/app/core/shared/content-source-set-serializer.ts b/projects/dspace/core/src/lib/shared/content-source-set-serializer.ts similarity index 93% rename from src/app/core/shared/content-source-set-serializer.ts rename to projects/dspace/core/src/lib/shared/content-source-set-serializer.ts index ec0baec5a6a..fec177b2cbf 100644 --- a/src/app/core/shared/content-source-set-serializer.ts +++ b/projects/dspace/core/src/lib/shared/content-source-set-serializer.ts @@ -1,4 +1,4 @@ -import { isEmpty } from '../../shared/empty.util'; +import { isEmpty } from '@dspace/utils'; /** * Serializer to create convert the 'all' value supported by the server to an empty string and vice versa. diff --git a/src/app/core/shared/content-source.model.ts b/projects/dspace/core/src/lib/shared/content-source.model.ts similarity index 96% rename from src/app/core/shared/content-source.model.ts rename to projects/dspace/core/src/lib/shared/content-source.model.ts index cfc78f223fc..b0fe469b106 100644 --- a/src/app/core/shared/content-source.model.ts +++ b/projects/dspace/core/src/lib/shared/content-source.model.ts @@ -1,9 +1,4 @@ -import { - autoserializeAs, - deserialize, - deserializeAs, - serializeAs, -} from 'cerialize'; +import { autoserializeAs, deserialize, deserializeAs, serializeAs } from 'cerialize'; import { typedObject } from '../cache/builders/build-decorators'; import { CacheableObject } from '../cache/cacheable-object.model'; diff --git a/src/app/core/shared/content-source.resource-type.ts b/projects/dspace/core/src/lib/shared/content-source.resource-type.ts similarity index 100% rename from src/app/core/shared/content-source.resource-type.ts rename to projects/dspace/core/src/lib/shared/content-source.resource-type.ts diff --git a/src/app/core/shared/context.model.ts b/projects/dspace/core/src/lib/shared/context.model.ts similarity index 100% rename from src/app/core/shared/context.model.ts rename to projects/dspace/core/src/lib/shared/context.model.ts diff --git a/src/app/core/shared/distinct-next.ts b/projects/dspace/core/src/lib/shared/distinct-next.ts similarity index 100% rename from src/app/core/shared/distinct-next.ts rename to projects/dspace/core/src/lib/shared/distinct-next.ts diff --git a/src/app/core/shared/dspace-object-type.model.ts b/projects/dspace/core/src/lib/shared/dspace-object-type.model.ts similarity index 100% rename from src/app/core/shared/dspace-object-type.model.ts rename to projects/dspace/core/src/lib/shared/dspace-object-type.model.ts diff --git a/src/app/core/shared/dspace-object.model.ts b/projects/dspace/core/src/lib/shared/dspace-object.model.ts similarity index 95% rename from src/app/core/shared/dspace-object.model.ts rename to projects/dspace/core/src/lib/shared/dspace-object.model.ts index 7bc05b1d3aa..942c0a65d3b 100644 --- a/src/app/core/shared/dspace-object.model.ts +++ b/projects/dspace/core/src/lib/shared/dspace-object.model.ts @@ -1,16 +1,6 @@ -import { - autoserialize, - autoserializeAs, - deserialize, - deserializeAs, -} from 'cerialize'; +import { hasNoValue, hasValue, isUndefined } from '@dspace/utils'; +import { autoserialize, autoserializeAs, deserialize, deserializeAs } from 'cerialize'; -import { - hasNoValue, - hasValue, - isUndefined, -} from '../../shared/empty.util'; -import { ListableObject } from '../../shared/object-collection/shared/listable-object.model'; import { typedObject } from '../cache/builders/build-decorators'; import { CacheableObject } from '../cache/cacheable-object.model'; import { excludeFromEquals } from '../utilities/equals.decorators'; @@ -25,6 +15,7 @@ import { MetadatumViewModel, } from './metadata.models'; import { Metadata } from './metadata.utils'; +import { ListableObject } from './object-collection/listable-object.model'; import { ResourceType } from './resource-type'; /** diff --git a/src/app/core/shared/dspace-object.resource-type.ts b/projects/dspace/core/src/lib/shared/dspace-object.resource-type.ts similarity index 100% rename from src/app/core/shared/dspace-object.resource-type.ts rename to projects/dspace/core/src/lib/shared/dspace-object.resource-type.ts diff --git a/src/app/shared/object-list/duplicate-data/duplicate.model.ts b/projects/dspace/core/src/lib/shared/duplicate-data/duplicate.model.ts similarity index 76% rename from src/app/shared/object-list/duplicate-data/duplicate.model.ts rename to projects/dspace/core/src/lib/shared/duplicate-data/duplicate.model.ts index 4524418343f..de6b70aba2e 100644 --- a/src/app/shared/object-list/duplicate-data/duplicate.model.ts +++ b/projects/dspace/core/src/lib/shared/duplicate-data/duplicate.model.ts @@ -1,12 +1,9 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; +import { CacheableObject } from '../../cache/cacheable-object.model'; +import { HALLink } from '../hal-link.model'; +import { MetadataMap } from '../metadata.models'; +import { ResourceType } from '../resource-type'; +import { autoserialize, deserialize } from 'cerialize'; -import { CacheableObject } from '../../../core/cache/cacheable-object.model'; -import { HALLink } from '../../../core/shared/hal-link.model'; -import { MetadataMap } from '../../../core/shared/metadata.models'; -import { ResourceType } from '../../../core/shared/resource-type'; import { DUPLICATE } from './duplicate.resource-type'; /** diff --git a/src/app/shared/object-list/duplicate-data/duplicate.resource-type.ts b/projects/dspace/core/src/lib/shared/duplicate-data/duplicate.resource-type.ts similarity index 75% rename from src/app/shared/object-list/duplicate-data/duplicate.resource-type.ts rename to projects/dspace/core/src/lib/shared/duplicate-data/duplicate.resource-type.ts index 588ca2da55e..c70268b3491 100644 --- a/src/app/shared/object-list/duplicate-data/duplicate.resource-type.ts +++ b/projects/dspace/core/src/lib/shared/duplicate-data/duplicate.resource-type.ts @@ -1,4 +1,4 @@ -import { ResourceType } from 'src/app/core/shared/resource-type'; +import { ResourceType } from '../resource-type'; /** * The resource type for Duplicate preview stubs diff --git a/projects/dspace/core/src/lib/shared/duplicate-data/index.ts b/projects/dspace/core/src/lib/shared/duplicate-data/index.ts new file mode 100644 index 00000000000..1c0e3928b6b --- /dev/null +++ b/projects/dspace/core/src/lib/shared/duplicate-data/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './duplicate.model'; +export * from './duplicate.resource-type'; diff --git a/src/app/core/shared/external-source-entry.model.ts b/projects/dspace/core/src/lib/shared/external-source-entry.model.ts similarity index 85% rename from src/app/core/shared/external-source-entry.model.ts rename to projects/dspace/core/src/lib/shared/external-source-entry.model.ts index 01e52d30d52..6bf2ff76ec8 100644 --- a/src/app/core/shared/external-source-entry.model.ts +++ b/projects/dspace/core/src/lib/shared/external-source-entry.model.ts @@ -1,19 +1,12 @@ -import { - autoserialize, - autoserializeAs, - deserialize, -} from 'cerialize'; +import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; -import { ListableObject } from '../../shared/object-collection/shared/listable-object.model'; import { typedObject } from '../cache/builders/build-decorators'; import { excludeFromEquals } from '../utilities/equals.decorators'; import { EXTERNAL_SOURCE_ENTRY } from './external-source-entry.resource-type'; import { GenericConstructor } from './generic-constructor'; import { HALLink } from './hal-link.model'; -import { - MetadataMap, - MetadataMapSerializer, -} from './metadata.models'; +import { MetadataMap, MetadataMapSerializer } from './metadata.models'; +import { ListableObject } from './object-collection/listable-object.model'; import { ResourceType } from './resource-type'; /** diff --git a/src/app/core/shared/external-source-entry.resource-type.ts b/projects/dspace/core/src/lib/shared/external-source-entry.resource-type.ts similarity index 100% rename from src/app/core/shared/external-source-entry.resource-type.ts rename to projects/dspace/core/src/lib/shared/external-source-entry.resource-type.ts diff --git a/src/app/core/shared/external-source.model.ts b/projects/dspace/core/src/lib/shared/external-source.model.ts similarity index 91% rename from src/app/core/shared/external-source.model.ts rename to projects/dspace/core/src/lib/shared/external-source.model.ts index 40661917e22..cb28b04cb5c 100644 --- a/src/app/core/shared/external-source.model.ts +++ b/projects/dspace/core/src/lib/shared/external-source.model.ts @@ -1,13 +1,7 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; +import { autoserialize, deserialize } from 'cerialize'; import { Observable } from 'rxjs'; -import { - link, - typedObject, -} from '../cache/builders/build-decorators'; +import { link, typedObject } from '../cache/builders/build-decorators'; import { CacheableObject } from '../cache/cacheable-object.model'; import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; diff --git a/src/app/core/shared/external-source.resource-type.ts b/projects/dspace/core/src/lib/shared/external-source.resource-type.ts similarity index 100% rename from src/app/core/shared/external-source.resource-type.ts rename to projects/dspace/core/src/lib/shared/external-source.resource-type.ts diff --git a/src/app/core/shared/feature.model.ts b/projects/dspace/core/src/lib/shared/feature.model.ts similarity index 89% rename from src/app/core/shared/feature.model.ts rename to projects/dspace/core/src/lib/shared/feature.model.ts index 1c18d1478f6..cd49cf76f46 100644 --- a/src/app/core/shared/feature.model.ts +++ b/projects/dspace/core/src/lib/shared/feature.model.ts @@ -1,8 +1,4 @@ -import { - autoserialize, - deserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, deserialize, inheritSerialization } from 'cerialize'; import { typedObject } from '../cache/builders/build-decorators'; import { DSpaceObject } from './dspace-object.model'; diff --git a/src/app/core/shared/feature.resource-type.ts b/projects/dspace/core/src/lib/shared/feature.resource-type.ts similarity index 100% rename from src/app/core/shared/feature.resource-type.ts rename to projects/dspace/core/src/lib/shared/feature.resource-type.ts diff --git a/src/app/core/shared/file.service.ts b/projects/dspace/core/src/lib/shared/file.service.ts similarity index 85% rename from src/app/core/shared/file.service.ts rename to projects/dspace/core/src/lib/shared/file.service.ts index 2a60dd4196d..e008c33b14e 100644 --- a/src/app/core/shared/file.service.ts +++ b/projects/dspace/core/src/lib/shared/file.service.ts @@ -1,20 +1,11 @@ -import { - Inject, - Injectable, -} from '@angular/core'; +import { Inject, Injectable } from '@angular/core'; +import { hasValue } from '@dspace/utils'; import { Observable } from 'rxjs'; -import { - map, - take, -} from 'rxjs/operators'; +import { map, take } from 'rxjs/operators'; -import { hasValue } from '../../shared/empty.util'; import { AuthService } from '../auth/auth.service'; import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; -import { - NativeWindowRef, - NativeWindowService, -} from '../services/window.service'; +import { NativeWindowRef, NativeWindowService } from '../services/window.service'; import { URLCombiner } from '../url-combiner/url-combiner'; /** diff --git a/src/app/core/shared/flat-browse-definition.model.ts b/projects/dspace/core/src/lib/shared/flat-browse-definition.model.ts similarity index 85% rename from src/app/core/shared/flat-browse-definition.model.ts rename to projects/dspace/core/src/lib/shared/flat-browse-definition.model.ts index 74166f937c9..725d7b39131 100644 --- a/src/app/core/shared/flat-browse-definition.model.ts +++ b/projects/dspace/core/src/lib/shared/flat-browse-definition.model.ts @@ -1,9 +1,6 @@ -import { - deserialize, - inheritSerialization, -} from 'cerialize'; +import { deserialize, inheritSerialization } from 'cerialize'; -import { BrowseByDataType } from '../../browse-by/browse-by-switcher/browse-by-data-type'; +import { BrowseByDataType } from '../browse/browse-by-data-type'; import { typedObject } from '../cache/builders/build-decorators'; import { excludeFromEquals } from '../utilities/equals.decorators'; import { FLAT_BROWSE_DEFINITION } from './flat-browse-definition.resource-type'; diff --git a/src/app/core/shared/flat-browse-definition.resource-type.ts b/projects/dspace/core/src/lib/shared/flat-browse-definition.resource-type.ts similarity index 100% rename from src/app/core/shared/flat-browse-definition.resource-type.ts rename to projects/dspace/core/src/lib/shared/flat-browse-definition.resource-type.ts diff --git a/src/app/shared/utils/follow-link-config.model.ts b/projects/dspace/core/src/lib/shared/follow-link-config.model.ts similarity index 94% rename from src/app/shared/utils/follow-link-config.model.ts rename to projects/dspace/core/src/lib/shared/follow-link-config.model.ts index 0eb1ad0cae3..7a6f01498a4 100644 --- a/src/app/shared/utils/follow-link-config.model.ts +++ b/projects/dspace/core/src/lib/shared/follow-link-config.model.ts @@ -1,6 +1,6 @@ -import { FindListOptions } from '../../core/data/find-list-options.model'; -import { HALResource } from '../../core/shared/hal-resource.model'; -import { hasValue } from '../empty.util'; +import { FindListOptions } from '../data/find-list-options.model'; +import { HALResource } from './hal-resource.model'; +import { hasValue } from '@dspace/utils'; /** * A class to send the retrieval of a {@link HALLink} diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-constants.ts b/projects/dspace/core/src/lib/shared/form/ds-dynamic-form-constants.ts similarity index 100% rename from src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-constants.ts rename to projects/dspace/core/src/lib/shared/form/ds-dynamic-form-constants.ts diff --git a/projects/dspace/core/src/lib/shared/form/index.ts b/projects/dspace/core/src/lib/shared/form/index.ts new file mode 100644 index 00000000000..1504bf9e24a --- /dev/null +++ b/projects/dspace/core/src/lib/shared/form/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './ds-dynamic-form-constants'; +export * from './models/index'; diff --git a/src/app/shared/form/builder/models/form-field-language-value.model.ts b/projects/dspace/core/src/lib/shared/form/models/form-field-language-value.model.ts similarity index 100% rename from src/app/shared/form/builder/models/form-field-language-value.model.ts rename to projects/dspace/core/src/lib/shared/form/models/form-field-language-value.model.ts diff --git a/src/app/shared/form/builder/models/form-field-metadata-value.model.ts b/projects/dspace/core/src/lib/shared/form/models/form-field-metadata-value.model.ts similarity index 90% rename from src/app/shared/form/builder/models/form-field-metadata-value.model.ts rename to projects/dspace/core/src/lib/shared/form/models/form-field-metadata-value.model.ts index b36e793f446..7cd69ac91ae 100644 --- a/src/app/shared/form/builder/models/form-field-metadata-value.model.ts +++ b/projects/dspace/core/src/lib/shared/form/models/form-field-metadata-value.model.ts @@ -1,15 +1,8 @@ -import { ConfidenceType } from '../../../../core/shared/confidence-type'; -import { - MetadataValueInterface, - VIRTUAL_METADATA_PREFIX, -} from '../../../../core/shared/metadata.models'; -import { - hasValue, - isEmpty, - isNotEmpty, - isNotNull, -} from '../../../empty.util'; -import { PLACEHOLDER_PARENT_METADATA } from '../ds-dynamic-form-ui/ds-dynamic-form-constants'; +import { hasValue, isEmpty, isNotEmpty, isNotNull } from '@dspace/utils'; + +import { ConfidenceType } from '../../confidence-type'; +import { MetadataValueInterface, VIRTUAL_METADATA_PREFIX } from '../../metadata.models'; +import { PLACEHOLDER_PARENT_METADATA } from '../ds-dynamic-form-constants'; export interface OtherInformation { [name: string]: string; diff --git a/src/app/shared/form/builder/models/form-field-previous-value-object.ts b/projects/dspace/core/src/lib/shared/form/models/form-field-previous-value-object.ts similarity index 100% rename from src/app/shared/form/builder/models/form-field-previous-value-object.ts rename to projects/dspace/core/src/lib/shared/form/models/form-field-previous-value-object.ts diff --git a/src/app/shared/form/builder/models/form-field.model.ts b/projects/dspace/core/src/lib/shared/form/models/form-field.model.ts similarity index 91% rename from src/app/shared/form/builder/models/form-field.model.ts rename to projects/dspace/core/src/lib/shared/form/models/form-field.model.ts index a89801007f9..5359ff5a99b 100644 --- a/src/app/shared/form/builder/models/form-field.model.ts +++ b/projects/dspace/core/src/lib/shared/form/models/form-field.model.ts @@ -1,9 +1,9 @@ import { autoserialize } from 'cerialize'; -import { FormRowModel } from '../../../../core/config/models/config-submission-form.model'; -import { SectionVisibility } from './../../../../submission/objects/section-visibility.model'; +import { FormRowModel } from '../../../config/models/config-submission-form.model'; +import { SectionVisibility } from '../../../submission/models/section-visibility.model'; +import { RelationshipOptions } from '../../relationship-options.model'; import { LanguageCode } from './form-field-language-value.model'; -import { RelationshipOptions } from './relationship-options.model'; /** * Representing SelectableMetadata properties diff --git a/projects/dspace/core/src/lib/shared/form/models/index.ts b/projects/dspace/core/src/lib/shared/form/models/index.ts new file mode 100644 index 00000000000..079be2ab69f --- /dev/null +++ b/projects/dspace/core/src/lib/shared/form/models/index.ts @@ -0,0 +1,8 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './form-field-language-value.model'; +export * from './form-field-metadata-value.model'; +export * from './form-field-previous-value-object'; +export * from './form-field.model'; diff --git a/src/app/core/shared/generic-constructor.ts b/projects/dspace/core/src/lib/shared/generic-constructor.ts similarity index 100% rename from src/app/core/shared/generic-constructor.ts rename to projects/dspace/core/src/lib/shared/generic-constructor.ts diff --git a/src/app/core/shared/hal-endpoint.service.spec.ts b/projects/dspace/core/src/lib/shared/hal-endpoint.service.spec.ts similarity index 93% rename from src/app/core/shared/hal-endpoint.service.spec.ts rename to projects/dspace/core/src/lib/shared/hal-endpoint.service.spec.ts index e2677c2f1ad..b7cf59954ce 100644 --- a/src/app/core/shared/hal-endpoint.service.spec.ts +++ b/projects/dspace/core/src/lib/shared/hal-endpoint.service.spec.ts @@ -1,17 +1,15 @@ -import { - combineLatest as observableCombineLatest, - of, -} from 'rxjs'; +import { TestBed } from '@angular/core/testing'; +import { APP_CONFIG } from '@dspace/config'; +import { combineLatest as observableCombineLatest, of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { environment } from '../../../environments/environment'; -import { getMockRequestService } from '../../shared/mocks/request.service.mock'; -import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RemoteData } from '../data/remote-data'; import { EndpointMapRequest } from '../data/request.models'; import { RequestService } from '../data/request.service'; import { RequestEntryState } from '../data/request-entry-state.model'; +import { getMockRequestService } from '../testing/request.service.mock'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; import { HALEndpointService } from './hal-endpoint.service'; @@ -109,19 +107,25 @@ describe('HALEndpointService', () => { }); envConfig = { - rest: { baseUrl: 'https://rest.api/' }, + rest: { baseUrl: 'https://rest.com/server' }, } as any; - service = new HALEndpointService( - requestService, - rdbService, - ); + TestBed.configureTestingModule({ + providers: [ + { provide: RequestService, useValue: requestService }, + { provide: RemoteDataBuildService, useValue: rdbService }, + { provide: APP_CONFIG, useValue: envConfig }, + HALEndpointService, + ], + }).compileComponents(); + + service = TestBed.inject(HALEndpointService); }); describe('getRootEndpointMap', () => { it('should send a new EndpointMapRequest', () => { (service as any).getRootEndpointMap(); - const expected = new EndpointMapRequest(requestService.generateRequestId(), `${environment.rest.baseUrl}/api`); + const expected = new EndpointMapRequest(requestService.generateRequestId(), `${envConfig.rest.baseUrl}/api`); expect(requestService.send).toHaveBeenCalledWith(expected, true); }); @@ -215,11 +219,7 @@ describe('HALEndpointService', () => { describe('isEnabledOnRestApi', () => { beforeEach(() => { - service = new HALEndpointService( - requestService, - rdbService, - ); - + service = TestBed.inject(HALEndpointService); }); it('should return undefined as long as getRootEndpointMap hasn\'t fired', () => { diff --git a/src/app/core/shared/hal-endpoint.service.ts b/projects/dspace/core/src/lib/shared/hal-endpoint.service.ts similarity index 92% rename from src/app/core/shared/hal-endpoint.service.ts rename to projects/dspace/core/src/lib/shared/hal-endpoint.service.ts index 0e54c8870ca..e56511c6754 100644 --- a/src/app/core/shared/hal-endpoint.service.ts +++ b/projects/dspace/core/src/lib/shared/hal-endpoint.service.ts @@ -1,4 +1,6 @@ -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; +import { APP_CONFIG, AppConfig } from '@dspace/config'; +import { hasValue, isEmpty, isNotEmpty } from '@dspace/utils'; import { Observable } from 'rxjs'; import { distinctUntilChanged, @@ -10,11 +12,6 @@ import { tap, } from 'rxjs/operators'; -import { - hasValue, - isEmpty, - isNotEmpty, -} from '../../shared/empty.util'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { CacheableObject } from '../cache/cacheable-object.model'; import { EndpointMap } from '../cache/response.models'; @@ -26,6 +23,7 @@ import { getFirstCompletedRemoteData } from './operators'; @Injectable({ providedIn: 'root' }) export class HALEndpointService { + protected readonly appConfig: AppConfig = inject(APP_CONFIG); constructor( private requestService: RequestService, @@ -34,7 +32,7 @@ export class HALEndpointService { } public getRootHref(): string { - return new RESTURLCombiner().toString(); + return new RESTURLCombiner(this.appConfig.rest.baseUrl).toString(); } protected getRootEndpointMap(): Observable { diff --git a/src/app/core/shared/hal-link.model.ts b/projects/dspace/core/src/lib/shared/hal-link.model.ts similarity index 100% rename from src/app/core/shared/hal-link.model.ts rename to projects/dspace/core/src/lib/shared/hal-link.model.ts diff --git a/src/app/core/shared/hal-resource.model.ts b/projects/dspace/core/src/lib/shared/hal-resource.model.ts similarity index 100% rename from src/app/core/shared/hal-resource.model.ts rename to projects/dspace/core/src/lib/shared/hal-resource.model.ts diff --git a/src/app/core/shared/handle-object.model.ts b/projects/dspace/core/src/lib/shared/handle-object.model.ts similarity index 100% rename from src/app/core/shared/handle-object.model.ts rename to projects/dspace/core/src/lib/shared/handle-object.model.ts diff --git a/src/app/health-page/models/health-component.model.ts b/projects/dspace/core/src/lib/shared/health-component.model.ts similarity index 100% rename from src/app/health-page/models/health-component.model.ts rename to projects/dspace/core/src/lib/shared/health-component.model.ts diff --git a/src/app/core/shared/hierarchical-browse-definition.model.ts b/projects/dspace/core/src/lib/shared/hierarchical-browse-definition.model.ts similarity index 85% rename from src/app/core/shared/hierarchical-browse-definition.model.ts rename to projects/dspace/core/src/lib/shared/hierarchical-browse-definition.model.ts index eb606b7bbeb..730b0062407 100644 --- a/src/app/core/shared/hierarchical-browse-definition.model.ts +++ b/projects/dspace/core/src/lib/shared/hierarchical-browse-definition.model.ts @@ -1,10 +1,6 @@ -import { - autoserialize, - deserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, deserialize, inheritSerialization } from 'cerialize'; -import { BrowseByDataType } from '../../browse-by/browse-by-switcher/browse-by-data-type'; +import { BrowseByDataType } from '../browse/browse-by-data-type'; import { typedObject } from '../cache/builders/build-decorators'; import { excludeFromEquals } from '../utilities/equals.decorators'; import { BrowseDefinition } from './browse-definition.model'; diff --git a/src/app/core/shared/hierarchical-browse-definition.resource-type.ts b/projects/dspace/core/src/lib/shared/hierarchical-browse-definition.resource-type.ts similarity index 100% rename from src/app/core/shared/hierarchical-browse-definition.resource-type.ts rename to projects/dspace/core/src/lib/shared/hierarchical-browse-definition.resource-type.ts diff --git a/projects/dspace/core/src/lib/shared/host-window-type.ts b/projects/dspace/core/src/lib/shared/host-window-type.ts new file mode 100644 index 00000000000..8ac5ff002df --- /dev/null +++ b/projects/dspace/core/src/lib/shared/host-window-type.ts @@ -0,0 +1,9 @@ +export enum WidthCategory { + XS = 0, + SM = 1, + MD = 2, + LG = 3, + XL = 4, +} + +export const maxMobileWidth = WidthCategory.SM; diff --git a/src/app/shared/object-list/identifier-data/identifier-data.model.ts b/projects/dspace/core/src/lib/shared/identifiers-data/identifier-data.model.ts similarity index 54% rename from src/app/shared/object-list/identifier-data/identifier-data.model.ts rename to projects/dspace/core/src/lib/shared/identifiers-data/identifier-data.model.ts index 51695416e1b..394c2941850 100644 --- a/src/app/shared/object-list/identifier-data/identifier-data.model.ts +++ b/projects/dspace/core/src/lib/shared/identifiers-data/identifier-data.model.ts @@ -1,12 +1,9 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; -import { typedObject } from 'src/app/core/cache/builders/build-decorators'; -import { CacheableObject } from 'src/app/core/cache/cacheable-object.model'; -import { HALLink } from 'src/app/core/shared/hal-link.model'; -import { ResourceType } from 'src/app/core/shared/resource-type'; -import { excludeFromEquals } from 'src/app/core/utilities/equals.decorators'; +import { typedObject } from '../../cache/builders/build-decorators'; +import { CacheableObject } from '../../cache/cacheable-object.model'; +import { HALLink } from '../hal-link.model'; +import { ResourceType } from '../resource-type'; +import { excludeFromEquals } from '../../utilities/equals.decorators'; +import { autoserialize, deserialize } from 'cerialize'; import { Identifier } from './identifier.model'; import { IDENTIFIERS } from './identifier-data.resource-type'; diff --git a/src/app/shared/object-list/identifier-data/identifier-data.resource-type.ts b/projects/dspace/core/src/lib/shared/identifiers-data/identifier-data.resource-type.ts similarity index 74% rename from src/app/shared/object-list/identifier-data/identifier-data.resource-type.ts rename to projects/dspace/core/src/lib/shared/identifiers-data/identifier-data.resource-type.ts index 823a43eff95..185027b745e 100644 --- a/src/app/shared/object-list/identifier-data/identifier-data.resource-type.ts +++ b/projects/dspace/core/src/lib/shared/identifiers-data/identifier-data.resource-type.ts @@ -1,4 +1,4 @@ -import { ResourceType } from 'src/app/core/shared/resource-type'; +import { ResourceType } from '../resource-type'; /** * The resource type for Identifiers diff --git a/src/app/shared/object-list/identifier-data/identifier.model.ts b/projects/dspace/core/src/lib/shared/identifiers-data/identifier.model.ts similarity index 100% rename from src/app/shared/object-list/identifier-data/identifier.model.ts rename to projects/dspace/core/src/lib/shared/identifiers-data/identifier.model.ts diff --git a/projects/dspace/core/src/lib/shared/identifiers-data/index.ts b/projects/dspace/core/src/lib/shared/identifiers-data/index.ts new file mode 100644 index 00000000000..b1acd0b1719 --- /dev/null +++ b/projects/dspace/core/src/lib/shared/identifiers-data/index.ts @@ -0,0 +1,7 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './identifier-data.model'; +export * from './identifier-data.resource-type'; +export * from './identifier.model'; diff --git a/projects/dspace/core/src/lib/shared/index.ts b/projects/dspace/core/src/lib/shared/index.ts new file mode 100644 index 00000000000..3782e1f16bd --- /dev/null +++ b/projects/dspace/core/src/lib/shared/index.ts @@ -0,0 +1,122 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './NoContent.model'; +export * from './access-status.model'; +export * from './access-status.resource-type'; +export * from './admin-notify-message.resource-type'; +export * from './authorization.model'; +export * from './authorization.resource-type'; +export * from './authorized.operators'; +export * from './bitstream-format-support-level'; +export * from './bitstream-format.model'; +export * from './bitstream-format.resource-type'; +export * from './bitstream.model'; +export * from './bitstream.operators'; +export * from './bitstream.resource-type'; +export * from './browse-definition.model'; +export * from './browse-definition.resource-type'; +export * from './browse-entry.model'; +export * from './browse-entry.resource-type'; +export * from './bundle.model'; +export * from './bundle.resource-type'; +export * from './child-hal-resource.model'; +export * from './client-math.service'; +export * from './collection.model.spec'; +export * from './collection.model'; +export * from './collection.resource-type'; +export * from './community.model.spec'; +export * from './community.model'; +export * from './community.resource-type'; +export * from './confidence-type'; +export * from './config-property.resource-type'; +export * from './configuration-property.model'; +export * from './content-source-set-serializer.spec'; +export * from './content-source-set-serializer'; +export * from './content-source.model'; +export * from './content-source.resource-type'; +export * from './context.model'; +export * from './distinct-next'; +export * from './dspace-object-type.model'; +export * from './dspace-object.model'; +export * from './dspace-object.resource-type'; +export * from './external-source-entry.model'; +export * from './external-source-entry.resource-type'; +export * from './external-source.model'; +export * from './external-source.resource-type'; +export * from './feature.model'; +export * from './feature.resource-type'; +export * from './file.service'; +export * from './flat-browse-definition.model'; +export * from './flat-browse-definition.resource-type'; +export * from './follow-link-config.model'; +export * from './generic-constructor'; +export * from './hal-endpoint.service.spec'; +export * from './hal-endpoint.service'; +export * from './hal-link.model'; +export * from './hal-resource.model'; +export * from './handle-object.model'; +export * from './health-component.model'; +export * from './hierarchical-browse-definition.model'; +export * from './hierarchical-browse-definition.resource-type'; +export * from './host-window-type'; +export * from './item-request.model'; +export * from './item-request.resource-type'; +export * from './item.model.spec'; +export * from './item.model'; +export * from './item.resource-type'; +export * from './license.model'; +export * from './license.resource-type'; +export * from './listable-notification-object.model'; +export * from './math.service.spec'; +export * from './math.service'; +export * from './media-viewer-item.model'; +export * from './metadata-config.model'; +export * from './metadata.models'; +export * from './metadata.utils.spec'; +export * from './metadata.utils'; +export * from './non-hierarchical-browse-definition'; +export * from './notify-requests-status.resource-type'; +export * from './operators.spec'; +export * from './operators'; +export * from './page-info.model'; +export * from './process-output.resource-type'; +export * from './process.resource-type'; +export * from './registration.model'; +export * from './registration.resource-type'; +export * from './relationship-options.model'; +export * from './request-copy-email.model'; +export * from './request.operators'; +export * from './resource-type'; +export * from './section-coar-notify-service.resource-type'; +export * from './sequence.service.spec'; +export * from './sequence.service'; +export * from './server-math.service'; +export * from './site.model'; +export * from './site.resource-type'; +export * from './sort-option.model'; +export * from './submit-data-response-definition.model'; +export * from './subscription.model'; +export * from './subscription.resource-type'; +export * from './system-wide-alert.model'; +export * from './system-wide-alert.resource-type'; +export * from './template-item.model'; +export * from './template-item.resource-type'; +export * from './uncacheable-object.model'; +export * from './uuid.service'; +export * from './value-list-browse-definition.model'; +export * from './value-list-browse-definition.resource-type'; +export * from './version-history.model'; +export * from './version-history.resource-type'; +export * from './version.model'; +export * from './version.resource-type'; +export * from './view-mode.model'; +export * from './duplicate-data/index'; +export * from './form/index'; +export * from './identifiers-data/index'; +export * from './item-relationships/index'; +export * from './metadata-representation/index'; +export * from './object-collection/index'; +export * from './scripts/index'; +export * from './search/index'; diff --git a/projects/dspace/core/src/lib/shared/item-relationships/index.ts b/projects/dspace/core/src/lib/shared/item-relationships/index.ts new file mode 100644 index 00000000000..dd227643470 --- /dev/null +++ b/projects/dspace/core/src/lib/shared/item-relationships/index.ts @@ -0,0 +1,13 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './item-type.model'; +export * from './item-type.resource-type'; +export * from './relationship-type.model'; +export * from './relationship-type.resource-type'; +export * from './relationship.model'; +export * from './relationship.resource-type'; +export * from './reordable'; +export * from './reorderable-form-field-metadata-value'; +export * from './reorderable-relationship'; diff --git a/src/app/core/shared/item-relationships/item-type.model.ts b/projects/dspace/core/src/lib/shared/item-relationships/item-type.model.ts similarity index 93% rename from src/app/core/shared/item-relationships/item-type.model.ts rename to projects/dspace/core/src/lib/shared/item-relationships/item-type.model.ts index bbf1cb3be03..e72ea1f8fc1 100644 --- a/src/app/core/shared/item-relationships/item-type.model.ts +++ b/projects/dspace/core/src/lib/shared/item-relationships/item-type.model.ts @@ -1,8 +1,4 @@ -import { - autoserialize, - deserialize, - deserializeAs, -} from 'cerialize'; +import { autoserialize, deserialize, deserializeAs } from 'cerialize'; import { typedObject } from '../../cache/builders/build-decorators'; import { CacheableObject } from '../../cache/cacheable-object.model'; diff --git a/src/app/core/shared/item-relationships/item-type.resource-type.ts b/projects/dspace/core/src/lib/shared/item-relationships/item-type.resource-type.ts similarity index 100% rename from src/app/core/shared/item-relationships/item-type.resource-type.ts rename to projects/dspace/core/src/lib/shared/item-relationships/item-type.resource-type.ts diff --git a/src/app/core/shared/item-relationships/relationship-type.model.ts b/projects/dspace/core/src/lib/shared/item-relationships/relationship-type.model.ts similarity index 94% rename from src/app/core/shared/item-relationships/relationship-type.model.ts rename to projects/dspace/core/src/lib/shared/item-relationships/relationship-type.model.ts index 3a86ee34f84..a5fb9cf2684 100644 --- a/src/app/core/shared/item-relationships/relationship-type.model.ts +++ b/projects/dspace/core/src/lib/shared/item-relationships/relationship-type.model.ts @@ -1,14 +1,7 @@ -import { - autoserialize, - deserialize, - deserializeAs, -} from 'cerialize'; +import { autoserialize, deserialize, deserializeAs } from 'cerialize'; import { Observable } from 'rxjs'; -import { - link, - typedObject, -} from '../../cache/builders/build-decorators'; +import { link, typedObject } from '../../cache/builders/build-decorators'; import { CacheableObject } from '../../cache/cacheable-object.model'; import { IDToUUIDSerializer } from '../../cache/id-to-uuid-serializer'; import { RemoteData } from '../../data/remote-data'; diff --git a/src/app/core/shared/item-relationships/relationship-type.resource-type.ts b/projects/dspace/core/src/lib/shared/item-relationships/relationship-type.resource-type.ts similarity index 100% rename from src/app/core/shared/item-relationships/relationship-type.resource-type.ts rename to projects/dspace/core/src/lib/shared/item-relationships/relationship-type.resource-type.ts diff --git a/src/app/core/shared/item-relationships/relationship.model.ts b/projects/dspace/core/src/lib/shared/item-relationships/relationship.model.ts similarity index 94% rename from src/app/core/shared/item-relationships/relationship.model.ts rename to projects/dspace/core/src/lib/shared/item-relationships/relationship.model.ts index 77fdff8651f..ea8eb2fad6f 100644 --- a/src/app/core/shared/item-relationships/relationship.model.ts +++ b/projects/dspace/core/src/lib/shared/item-relationships/relationship.model.ts @@ -1,14 +1,7 @@ -import { - autoserialize, - deserialize, - deserializeAs, -} from 'cerialize'; +import { autoserialize, deserialize, deserializeAs } from 'cerialize'; import { Observable } from 'rxjs'; -import { - link, - typedObject, -} from '../../cache/builders/build-decorators'; +import { link, typedObject } from '../../cache/builders/build-decorators'; import { CacheableObject } from '../../cache/cacheable-object.model'; import { IDToUUIDSerializer } from '../../cache/id-to-uuid-serializer'; import { RemoteData } from '../../data/remote-data'; diff --git a/src/app/core/shared/item-relationships/relationship.resource-type.ts b/projects/dspace/core/src/lib/shared/item-relationships/relationship.resource-type.ts similarity index 100% rename from src/app/core/shared/item-relationships/relationship.resource-type.ts rename to projects/dspace/core/src/lib/shared/item-relationships/relationship.resource-type.ts diff --git a/projects/dspace/core/src/lib/shared/item-relationships/reordable.ts b/projects/dspace/core/src/lib/shared/item-relationships/reordable.ts new file mode 100644 index 00000000000..de3440d3830 --- /dev/null +++ b/projects/dspace/core/src/lib/shared/item-relationships/reordable.ts @@ -0,0 +1,33 @@ +/** + * Abstract class that defines objects that can be reordered + */ +export abstract class Reorderable { + + constructor(public oldIndex?: number, public newIndex?: number) { + } + + /** + * Return the id for this Reorderable + */ + abstract getId(): string; + + /** + * Return the place metadata for this Reorderable + */ + abstract getPlace(): number; + + /** + * Update the Reorderable + */ + update(): void { + this.oldIndex = this.newIndex; + } + + /** + * Returns true if the oldIndex of this Reorderable + * differs from the newIndex + */ + get hasMoved(): boolean { + return this.oldIndex !== this.newIndex; + } +} diff --git a/projects/dspace/core/src/lib/shared/item-relationships/reorderable-form-field-metadata-value.ts b/projects/dspace/core/src/lib/shared/item-relationships/reorderable-form-field-metadata-value.ts new file mode 100644 index 00000000000..78cdbcff4c4 --- /dev/null +++ b/projects/dspace/core/src/lib/shared/item-relationships/reorderable-form-field-metadata-value.ts @@ -0,0 +1,44 @@ +import { UntypedFormControl } from '@angular/forms'; +import { hasValue } from '@dspace/utils'; +import { DynamicFormArrayGroupModel } from '@ng-dynamic-forms/core'; + +import { FormFieldMetadataValueObject } from '../form/models/form-field-metadata-value.model'; +import { Reorderable } from './reordable'; + +/** + * A Reorderable representation of a FormFieldMetadataValue + */ +export class ReorderableFormFieldMetadataValue extends Reorderable { + + constructor( + public metadataValue: FormFieldMetadataValueObject, + public model: any, + public control: UntypedFormControl, + public group: DynamicFormArrayGroupModel, + oldIndex?: number, + newIndex?: number, + ) { + super(oldIndex, newIndex); + this.metadataValue = metadataValue; + } + + /** + * Return the id for this Reorderable + */ + getId(): string { + if (hasValue(this.metadataValue.authority)) { + return this.metadataValue.authority; + } else { + // can't use UUIDs, they're generated client side + return this.metadataValue.value; + } + } + + /** + * Return the place metadata for this Reorderable + */ + getPlace(): number { + return this.metadataValue.place; + } + +} diff --git a/projects/dspace/core/src/lib/shared/item-relationships/reorderable-relationship.ts b/projects/dspace/core/src/lib/shared/item-relationships/reorderable-relationship.ts new file mode 100644 index 00000000000..c2fe6ab5af5 --- /dev/null +++ b/projects/dspace/core/src/lib/shared/item-relationships/reorderable-relationship.ts @@ -0,0 +1,36 @@ +import { Relationship } from './relationship.model'; +import { Reorderable } from './reordable'; + +/** + * Represents a single relationship that can be reordered in a list of multiple relationships + */ +export class ReorderableRelationship extends Reorderable { + + constructor( + public relationship: Relationship, + public useLeftItem: boolean, + oldIndex?: number, + newIndex?: number) { + super(oldIndex, newIndex); + this.relationship = relationship; + this.useLeftItem = useLeftItem; + } + + /** + * Return the id for this Reorderable + */ + getId(): string { + return this.relationship.id; + } + + /** + * Return the place metadata for this Reorderable + */ + getPlace(): number { + if (this.useLeftItem) { + return this.relationship.rightPlace; + } else { + return this.relationship.leftPlace; + } + } +} diff --git a/src/app/core/shared/item-request.model.ts b/projects/dspace/core/src/lib/shared/item-request.model.ts similarity index 97% rename from src/app/core/shared/item-request.model.ts rename to projects/dspace/core/src/lib/shared/item-request.model.ts index 5180be1fe79..c4c2d87190c 100644 --- a/src/app/core/shared/item-request.model.ts +++ b/projects/dspace/core/src/lib/shared/item-request.model.ts @@ -1,7 +1,4 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; +import { autoserialize, deserialize } from 'cerialize'; import { typedObject } from '../cache/builders/build-decorators'; import { CacheableObject } from '../cache/cacheable-object.model'; diff --git a/src/app/core/shared/item-request.resource-type.ts b/projects/dspace/core/src/lib/shared/item-request.resource-type.ts similarity index 100% rename from src/app/core/shared/item-request.resource-type.ts rename to projects/dspace/core/src/lib/shared/item-request.resource-type.ts diff --git a/src/app/core/shared/item.model.spec.ts b/projects/dspace/core/src/lib/shared/item.model.spec.ts similarity index 91% rename from src/app/core/shared/item.model.spec.ts rename to projects/dspace/core/src/lib/shared/item.model.spec.ts index 7eaa6f10be5..0d157190d2a 100644 --- a/src/app/core/shared/item.model.spec.ts +++ b/projects/dspace/core/src/lib/shared/item.model.spec.ts @@ -1,5 +1,5 @@ -import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; -import { createPaginatedList } from '../../shared/testing/utils.test'; +import { createPaginatedList } from '../testing/utils.test'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; import { Item } from './item.model'; describe('Item', () => { diff --git a/src/app/core/shared/item.model.ts b/projects/dspace/core/src/lib/shared/item.model.ts similarity index 78% rename from src/app/core/shared/item.model.ts rename to projects/dspace/core/src/lib/shared/item.model.ts index d6066f098c0..84242b1164b 100644 --- a/src/app/core/shared/item.model.ts +++ b/projects/dspace/core/src/lib/shared/item.model.ts @@ -1,3 +1,6 @@ +import { AccessStatusObject } from './access-status.model'; +import { ACCESS_STATUS } from './access-status.resource-type'; +import { isEmpty } from '@dspace/utils'; import { autoserialize, autoserializeAs, @@ -6,17 +9,8 @@ import { inheritSerialization, } from 'cerialize'; import { Observable } from 'rxjs'; -import { AccessStatusObject } from 'src/app/shared/object-collection/shared/badges/access-status-badge/access-status.model'; -import { ACCESS_STATUS } from 'src/app/shared/object-collection/shared/badges/access-status-badge/access-status.resource-type'; -import { isEmpty } from '../../shared/empty.util'; -import { ListableObject } from '../../shared/object-collection/shared/listable-object.model'; -import { IdentifierData } from '../../shared/object-list/identifier-data/identifier-data.model'; -import { IDENTIFIERS } from '../../shared/object-list/identifier-data/identifier-data.resource-type'; -import { - link, - typedObject, -} from '../cache/builders/build-decorators'; +import { link, typedObject } from '../cache/builders/build-decorators'; import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; import { Bitstream } from './bitstream.model'; @@ -27,15 +21,39 @@ import { ChildHALResource } from './child-hal-resource.model'; import { Collection } from './collection.model'; import { COLLECTION } from './collection.resource-type'; import { DSpaceObject } from './dspace-object.model'; +import { followLink, FollowLinkConfig } from './follow-link-config.model'; import { GenericConstructor } from './generic-constructor'; import { HALLink } from './hal-link.model'; import { HandleObject } from './handle-object.model'; +import { IdentifierData } from './identifiers-data/identifier-data.model'; +import { IDENTIFIERS } from './identifiers-data/identifier-data.resource-type'; import { ITEM } from './item.resource-type'; import { Relationship } from './item-relationships/relationship.model'; import { RELATIONSHIP } from './item-relationships/relationship.resource-type'; +import { ListableObject } from './object-collection/listable-object.model'; import { Version } from './version.model'; import { VERSION } from './version.resource-type'; +/** + * The self links defined in this list are expected to be requested somewhere in the near future + * Requesting them as embeds will limit the number of requests + */ +export function getItemPageLinksToFollow(showAccessStatuses: boolean): FollowLinkConfig[] { + const followLinks: FollowLinkConfig[] = [ + followLink('owningCollection', {}, + followLink('parentCommunity', {}, + followLink('parentCommunity')), + ), + followLink('relationships'), + followLink('version', {}, followLink('versionhistory')), + followLink('thumbnail'), + ]; + if (showAccessStatuses) { + followLinks.push(followLink('accessStatus')); + } + return followLinks; +} + /** * Class representing a DSpace Item */ diff --git a/src/app/core/shared/item.resource-type.ts b/projects/dspace/core/src/lib/shared/item.resource-type.ts similarity index 100% rename from src/app/core/shared/item.resource-type.ts rename to projects/dspace/core/src/lib/shared/item.resource-type.ts diff --git a/src/app/core/shared/license.model.ts b/projects/dspace/core/src/lib/shared/license.model.ts similarity index 86% rename from src/app/core/shared/license.model.ts rename to projects/dspace/core/src/lib/shared/license.model.ts index 0cb1e70b6b8..153ebc42eff 100644 --- a/src/app/core/shared/license.model.ts +++ b/projects/dspace/core/src/lib/shared/license.model.ts @@ -1,7 +1,4 @@ -import { - autoserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, inheritSerialization } from 'cerialize'; import { typedObject } from '../cache/builders/build-decorators'; import { DSpaceObject } from './dspace-object.model'; diff --git a/src/app/core/shared/license.resource-type.ts b/projects/dspace/core/src/lib/shared/license.resource-type.ts similarity index 100% rename from src/app/core/shared/license.resource-type.ts rename to projects/dspace/core/src/lib/shared/license.resource-type.ts diff --git a/src/app/shared/object-list/listable-notification-object/listable-notification-object.model.ts b/projects/dspace/core/src/lib/shared/listable-notification-object.model.ts similarity index 60% rename from src/app/shared/object-list/listable-notification-object/listable-notification-object.model.ts rename to projects/dspace/core/src/lib/shared/listable-notification-object.model.ts index b90b37e6a66..586a021c1c4 100644 --- a/src/app/shared/object-list/listable-notification-object/listable-notification-object.model.ts +++ b/projects/dspace/core/src/lib/shared/listable-notification-object.model.ts @@ -1,10 +1,12 @@ -import { typedObject } from '../../../core/cache/builders/build-decorators'; -import { TypedObject } from '../../../core/cache/typed-object.model'; -import { GenericConstructor } from '../../../core/shared/generic-constructor'; -import { ResourceType } from '../../../core/shared/resource-type'; -import { NotificationType } from '../../notifications/models/notification-type'; -import { ListableObject } from '../../object-collection/shared/listable-object.model'; -import { LISTABLE_NOTIFICATION_OBJECT } from './listable-notification-object.resource-type'; +import { typedObject } from '../cache/builders/build-decorators'; +import { TypedObject } from '../cache/typed-object.model'; +import { NotificationType } from '../notification-system/models/notification-type'; +import { GenericConstructor } from './generic-constructor'; +import { + LISTABLE_NOTIFICATION_OBJECT, +} from './object-collection/listable-notification-object.resource-type'; +import { ListableObject } from './object-collection/listable-object.model'; +import { ResourceType } from './resource-type'; /** * Object representing a notification message inside a list of objects diff --git a/src/app/core/shared/math.service.spec.ts b/projects/dspace/core/src/lib/shared/math.service.spec.ts similarity index 90% rename from src/app/core/shared/math.service.spec.ts rename to projects/dspace/core/src/lib/shared/math.service.spec.ts index 75d8bf1024c..e03d7c98fb6 100644 --- a/src/app/core/shared/math.service.spec.ts +++ b/projects/dspace/core/src/lib/shared/math.service.spec.ts @@ -1,13 +1,7 @@ import { TestBed } from '@angular/core/testing'; -import { - Observable, - of, -} from 'rxjs'; - -import { - MathJaxConfig, - MathService, -} from './math.service'; +import { Observable, of } from 'rxjs'; + +import { MathJaxConfig, MathService } from './math.service'; export class MockMathService extends MathService { protected mathJaxOptions: any = {}; diff --git a/src/app/core/shared/math.service.ts b/projects/dspace/core/src/lib/shared/math.service.ts similarity index 100% rename from src/app/core/shared/math.service.ts rename to projects/dspace/core/src/lib/shared/math.service.ts diff --git a/src/app/core/shared/media-viewer-item.model.ts b/projects/dspace/core/src/lib/shared/media-viewer-item.model.ts similarity index 100% rename from src/app/core/shared/media-viewer-item.model.ts rename to projects/dspace/core/src/lib/shared/media-viewer-item.model.ts diff --git a/src/app/core/shared/metadata-config.model.ts b/projects/dspace/core/src/lib/shared/metadata-config.model.ts similarity index 100% rename from src/app/core/shared/metadata-config.model.ts rename to projects/dspace/core/src/lib/shared/metadata-config.model.ts diff --git a/projects/dspace/core/src/lib/shared/metadata-representation/index.ts b/projects/dspace/core/src/lib/shared/metadata-representation/index.ts new file mode 100644 index 00000000000..42387ff08d6 --- /dev/null +++ b/projects/dspace/core/src/lib/shared/metadata-representation/index.ts @@ -0,0 +1,7 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './metadata-representation.model'; +export * from './item/index'; +export * from './metadatum/index'; diff --git a/projects/dspace/core/src/lib/shared/metadata-representation/item/index.ts b/projects/dspace/core/src/lib/shared/metadata-representation/item/index.ts new file mode 100644 index 00000000000..db947839687 --- /dev/null +++ b/projects/dspace/core/src/lib/shared/metadata-representation/item/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './item-metadata-representation.model.spec'; +export * from './item-metadata-representation.model'; diff --git a/src/app/core/shared/metadata-representation/item/item-metadata-representation.model.spec.ts b/projects/dspace/core/src/lib/shared/metadata-representation/item/item-metadata-representation.model.spec.ts similarity index 100% rename from src/app/core/shared/metadata-representation/item/item-metadata-representation.model.spec.ts rename to projects/dspace/core/src/lib/shared/metadata-representation/item/item-metadata-representation.model.spec.ts diff --git a/src/app/core/shared/metadata-representation/item/item-metadata-representation.model.ts b/projects/dspace/core/src/lib/shared/metadata-representation/item/item-metadata-representation.model.ts similarity index 100% rename from src/app/core/shared/metadata-representation/item/item-metadata-representation.model.ts rename to projects/dspace/core/src/lib/shared/metadata-representation/item/item-metadata-representation.model.ts diff --git a/src/app/core/shared/metadata-representation/metadata-representation.model.ts b/projects/dspace/core/src/lib/shared/metadata-representation/metadata-representation.model.ts similarity index 100% rename from src/app/core/shared/metadata-representation/metadata-representation.model.ts rename to projects/dspace/core/src/lib/shared/metadata-representation/metadata-representation.model.ts diff --git a/projects/dspace/core/src/lib/shared/metadata-representation/metadatum/index.ts b/projects/dspace/core/src/lib/shared/metadata-representation/metadatum/index.ts new file mode 100644 index 00000000000..fbcb2d810f5 --- /dev/null +++ b/projects/dspace/core/src/lib/shared/metadata-representation/metadatum/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './metadatum-representation.model.spec'; +export * from './metadatum-representation.model'; diff --git a/src/app/core/shared/metadata-representation/metadatum/metadatum-representation.model.spec.ts b/projects/dspace/core/src/lib/shared/metadata-representation/metadatum/metadatum-representation.model.spec.ts similarity index 100% rename from src/app/core/shared/metadata-representation/metadatum/metadatum-representation.model.spec.ts rename to projects/dspace/core/src/lib/shared/metadata-representation/metadatum/metadatum-representation.model.spec.ts diff --git a/src/app/core/shared/metadata-representation/metadatum/metadatum-representation.model.ts b/projects/dspace/core/src/lib/shared/metadata-representation/metadatum/metadatum-representation.model.ts similarity index 95% rename from src/app/core/shared/metadata-representation/metadatum/metadatum-representation.model.ts rename to projects/dspace/core/src/lib/shared/metadata-representation/metadatum/metadatum-representation.model.ts index 9ca24edd57d..61db9f3eff4 100644 --- a/src/app/core/shared/metadata-representation/metadatum/metadatum-representation.model.ts +++ b/projects/dspace/core/src/lib/shared/metadata-representation/metadatum/metadatum-representation.model.ts @@ -1,4 +1,5 @@ -import { hasValue } from '../../../../shared/empty.util'; +import { hasValue } from '@dspace/utils'; + import { BrowseDefinition } from '../../browse-definition.model'; import { MetadataValue } from '../../metadata.models'; import { diff --git a/src/app/core/shared/metadata.models.ts b/projects/dspace/core/src/lib/shared/metadata.models.ts similarity index 97% rename from src/app/core/shared/metadata.models.ts rename to projects/dspace/core/src/lib/shared/metadata.models.ts index 15cfeb285e6..34a52758dad 100644 --- a/src/app/core/shared/metadata.models.ts +++ b/projects/dspace/core/src/lib/shared/metadata.models.ts @@ -1,9 +1,5 @@ /* eslint-disable max-classes-per-file */ -import { - autoserialize, - Deserialize, - Serialize, -} from 'cerialize'; +import { autoserialize, Deserialize, Serialize } from 'cerialize'; import { v4 as uuidv4 } from 'uuid'; export const VIRTUAL_METADATA_PREFIX = 'virtual::'; diff --git a/src/app/core/shared/metadata.utils.spec.ts b/projects/dspace/core/src/lib/shared/metadata.utils.spec.ts similarity index 99% rename from src/app/core/shared/metadata.utils.spec.ts rename to projects/dspace/core/src/lib/shared/metadata.utils.spec.ts index 2ba96201b02..1748bdca7ec 100644 --- a/src/app/core/shared/metadata.utils.spec.ts +++ b/projects/dspace/core/src/lib/shared/metadata.utils.spec.ts @@ -1,6 +1,6 @@ +import { isUndefined } from '@dspace/utils'; import { v4 as uuidv4 } from 'uuid'; -import { isUndefined } from '../../shared/empty.util'; import { MetadataMap, MetadataValue, diff --git a/src/app/core/shared/metadata.utils.ts b/projects/dspace/core/src/lib/shared/metadata.utils.ts similarity index 98% rename from src/app/core/shared/metadata.utils.ts rename to projects/dspace/core/src/lib/shared/metadata.utils.ts index a82f218ed94..982634b9a3e 100644 --- a/src/app/core/shared/metadata.utils.ts +++ b/projects/dspace/core/src/lib/shared/metadata.utils.ts @@ -1,12 +1,7 @@ +import { isEmpty, isNotEmpty, isNotUndefined, isUndefined } from '@dspace/utils'; import groupBy from 'lodash/groupBy'; import sortBy from 'lodash/sortBy'; -import { - isEmpty, - isNotEmpty, - isNotUndefined, - isUndefined, -} from '../../shared/empty.util'; import { MetadataMapInterface, MetadataValue, diff --git a/src/app/core/shared/non-hierarchical-browse-definition.ts b/projects/dspace/core/src/lib/shared/non-hierarchical-browse-definition.ts similarity index 74% rename from src/app/core/shared/non-hierarchical-browse-definition.ts rename to projects/dspace/core/src/lib/shared/non-hierarchical-browse-definition.ts index 07083f7a8a8..2bf47760d38 100644 --- a/src/app/core/shared/non-hierarchical-browse-definition.ts +++ b/projects/dspace/core/src/lib/shared/non-hierarchical-browse-definition.ts @@ -1,10 +1,6 @@ -import { - autoserialize, - autoserializeAs, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, autoserializeAs, inheritSerialization } from 'cerialize'; -import { BrowseByDataType } from '../../browse-by/browse-by-switcher/browse-by-data-type'; +import { BrowseByDataType } from '../browse/browse-by-data-type'; import { BrowseDefinition } from './browse-definition.model'; import { SortOption } from './sort-option.model'; diff --git a/src/app/item-page/simple/notify-requests-status/notify-requests-status.resource-type.ts b/projects/dspace/core/src/lib/shared/notify-requests-status.resource-type.ts similarity index 75% rename from src/app/item-page/simple/notify-requests-status/notify-requests-status.resource-type.ts rename to projects/dspace/core/src/lib/shared/notify-requests-status.resource-type.ts index a450b0462bb..4d0fe426c01 100644 --- a/src/app/item-page/simple/notify-requests-status/notify-requests-status.resource-type.ts +++ b/projects/dspace/core/src/lib/shared/notify-requests-status.resource-type.ts @@ -1,4 +1,4 @@ -import { ResourceType } from '../../../core/shared/resource-type'; +import { ResourceType } from './resource-type'; /** * The resource type for the root endpoint diff --git a/src/app/shared/object-collection/shared/claimed-approved-task-search-result.model.ts b/projects/dspace/core/src/lib/shared/object-collection/claimed-approved-task-search-result.model.ts similarity index 51% rename from src/app/shared/object-collection/shared/claimed-approved-task-search-result.model.ts rename to projects/dspace/core/src/lib/shared/object-collection/claimed-approved-task-search-result.model.ts index 71b885d2494..2228f5591c1 100644 --- a/src/app/shared/object-collection/shared/claimed-approved-task-search-result.model.ts +++ b/projects/dspace/core/src/lib/shared/object-collection/claimed-approved-task-search-result.model.ts @@ -1,5 +1,5 @@ -import { ClaimedTask } from '../../../core/tasks/models/claimed-task-object.model'; -import { SearchResult } from '../../search/models/search-result.model'; +import { ClaimedTask } from '../../tasks/models/claimed-task-object.model'; +import { SearchResult } from '../search/models/search-result.model'; /** * Represents a search result object of an Approved ClaimedTask object diff --git a/src/app/shared/object-collection/shared/claimed-declined-task-search-result.model.ts b/projects/dspace/core/src/lib/shared/object-collection/claimed-declined-task-search-result.model.ts similarity index 56% rename from src/app/shared/object-collection/shared/claimed-declined-task-search-result.model.ts rename to projects/dspace/core/src/lib/shared/object-collection/claimed-declined-task-search-result.model.ts index 0afb79a2747..2f79b2ced20 100644 --- a/src/app/shared/object-collection/shared/claimed-declined-task-search-result.model.ts +++ b/projects/dspace/core/src/lib/shared/object-collection/claimed-declined-task-search-result.model.ts @@ -1,5 +1,5 @@ -import { ClaimedTask } from '../../../core/tasks/models/claimed-task-object.model'; -import { SearchResult } from '../../search/models/search-result.model'; +import { ClaimedTask } from '../../tasks/models/claimed-task-object.model'; +import { SearchResult } from '../search/models/search-result.model'; /** * Represents a search result object of a Declined/Rejected ClaimedTask object (sent back to the submitter) diff --git a/src/app/shared/object-collection/shared/claimed-declined-task-task-search-result.model.ts b/projects/dspace/core/src/lib/shared/object-collection/claimed-declined-task-task-search-result.model.ts similarity index 56% rename from src/app/shared/object-collection/shared/claimed-declined-task-task-search-result.model.ts rename to projects/dspace/core/src/lib/shared/object-collection/claimed-declined-task-task-search-result.model.ts index dffb3c1313f..97f5008966b 100644 --- a/src/app/shared/object-collection/shared/claimed-declined-task-task-search-result.model.ts +++ b/projects/dspace/core/src/lib/shared/object-collection/claimed-declined-task-task-search-result.model.ts @@ -1,5 +1,5 @@ -import { ClaimedTask } from '../../../core/tasks/models/claimed-task-object.model'; -import { SearchResult } from '../../search/models/search-result.model'; +import { ClaimedTask } from '../../tasks/models/claimed-task-object.model'; +import { SearchResult } from '../search/models/search-result.model'; /** * Represents a search result object of a Declined ClaimedTask object (sent back to the Review Managers) diff --git a/projects/dspace/core/src/lib/shared/object-collection/claimed-task-search-result.model.ts b/projects/dspace/core/src/lib/shared/object-collection/claimed-task-search-result.model.ts new file mode 100644 index 00000000000..4b1e51ac5f8 --- /dev/null +++ b/projects/dspace/core/src/lib/shared/object-collection/claimed-task-search-result.model.ts @@ -0,0 +1,8 @@ +import { ClaimedTask } from '../../tasks/models/claimed-task-object.model'; +import { SearchResult } from '../search/models/search-result.model'; + +/** + * Represents a search result object of a ClaimedTask object + */ +export class ClaimedTaskSearchResult extends SearchResult { +} diff --git a/projects/dspace/core/src/lib/shared/object-collection/collection-search-result.model.ts b/projects/dspace/core/src/lib/shared/object-collection/collection-search-result.model.ts new file mode 100644 index 00000000000..996c51dd4c4 --- /dev/null +++ b/projects/dspace/core/src/lib/shared/object-collection/collection-search-result.model.ts @@ -0,0 +1,5 @@ +import { Collection } from '../collection.model'; +import { SearchResult } from '../search/models/search-result.model'; + +export class CollectionSearchResult extends SearchResult { +} diff --git a/projects/dspace/core/src/lib/shared/object-collection/community-search-result.model.ts b/projects/dspace/core/src/lib/shared/object-collection/community-search-result.model.ts new file mode 100644 index 00000000000..a2ccb4ebd5b --- /dev/null +++ b/projects/dspace/core/src/lib/shared/object-collection/community-search-result.model.ts @@ -0,0 +1,5 @@ +import { Community } from '../community.model'; +import { SearchResult } from '../search/models/search-result.model'; + +export class CommunitySearchResult extends SearchResult { +} diff --git a/projects/dspace/core/src/lib/shared/object-collection/index.ts b/projects/dspace/core/src/lib/shared/object-collection/index.ts new file mode 100644 index 00000000000..c91b39e5599 --- /dev/null +++ b/projects/dspace/core/src/lib/shared/object-collection/index.ts @@ -0,0 +1,16 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './claimed-approved-task-search-result.model'; +export * from './claimed-declined-task-search-result.model'; +export * from './claimed-declined-task-task-search-result.model'; +export * from './claimed-task-search-result.model'; +export * from './collection-search-result.model'; +export * from './community-search-result.model'; +export * from './item-search-result.model'; +export * from './listable-notification-object.resource-type'; +export * from './listable-object.model'; +export * from './pool-task-search-result.model'; +export * from './workflow-item-search-result.model'; +export * from './workspace-item-search-result.model'; diff --git a/src/app/shared/object-collection/shared/item-search-result.model.ts b/projects/dspace/core/src/lib/shared/object-collection/item-search-result.model.ts similarity index 66% rename from src/app/shared/object-collection/shared/item-search-result.model.ts rename to projects/dspace/core/src/lib/shared/object-collection/item-search-result.model.ts index 4704a9ffe68..b48792900ff 100644 --- a/src/app/shared/object-collection/shared/item-search-result.model.ts +++ b/projects/dspace/core/src/lib/shared/object-collection/item-search-result.model.ts @@ -1,7 +1,7 @@ -import { GenericConstructor } from '../../../core/shared/generic-constructor'; -import { Item } from '../../../core/shared/item.model'; -import { inheritEquatable } from '../../../core/utilities/equals.decorators'; -import { SearchResult } from '../../search/models/search-result.model'; +import { inheritEquatable } from '../../utilities/equals.decorators'; +import { GenericConstructor } from '../generic-constructor'; +import { Item } from '../item.model'; +import { SearchResult } from '../search/models/search-result.model'; import { ListableObject } from './listable-object.model'; @inheritEquatable(SearchResult) diff --git a/src/app/shared/object-list/listable-notification-object/listable-notification-object.resource-type.ts b/projects/dspace/core/src/lib/shared/object-collection/listable-notification-object.resource-type.ts similarity index 78% rename from src/app/shared/object-list/listable-notification-object/listable-notification-object.resource-type.ts rename to projects/dspace/core/src/lib/shared/object-collection/listable-notification-object.resource-type.ts index ed458126bb2..2692e57698c 100644 --- a/src/app/shared/object-list/listable-notification-object/listable-notification-object.resource-type.ts +++ b/projects/dspace/core/src/lib/shared/object-collection/listable-notification-object.resource-type.ts @@ -1,4 +1,4 @@ -import { ResourceType } from '../../../core/shared/resource-type'; +import { ResourceType } from '../resource-type'; /** * The resource type for {@link ListableNotificationObject} diff --git a/src/app/shared/object-collection/shared/listable-object.model.ts b/projects/dspace/core/src/lib/shared/object-collection/listable-object.model.ts similarity index 62% rename from src/app/shared/object-collection/shared/listable-object.model.ts rename to projects/dspace/core/src/lib/shared/object-collection/listable-object.model.ts index cb44cefb569..101de04f38c 100644 --- a/src/app/shared/object-collection/shared/listable-object.model.ts +++ b/projects/dspace/core/src/lib/shared/object-collection/listable-object.model.ts @@ -1,5 +1,5 @@ -import { GenericConstructor } from '../../../core/shared/generic-constructor'; -import { EquatableObject } from '../../../core/utilities/equals.decorators'; +import { EquatableObject } from '../../utilities/equals.decorators'; +import { GenericConstructor } from '../generic-constructor'; export abstract class ListableObject extends EquatableObject { /** diff --git a/projects/dspace/core/src/lib/shared/object-collection/pool-task-search-result.model.ts b/projects/dspace/core/src/lib/shared/object-collection/pool-task-search-result.model.ts new file mode 100644 index 00000000000..ce9f7a849d3 --- /dev/null +++ b/projects/dspace/core/src/lib/shared/object-collection/pool-task-search-result.model.ts @@ -0,0 +1,8 @@ +import { PoolTask } from '../../tasks/models/pool-task-object.model'; +import { SearchResult } from '../search/models/search-result.model'; + +/** + * Represents a search result object of a PoolTask object + */ +export class PoolTaskSearchResult extends SearchResult { +} diff --git a/projects/dspace/core/src/lib/shared/object-collection/workflow-item-search-result.model.ts b/projects/dspace/core/src/lib/shared/object-collection/workflow-item-search-result.model.ts new file mode 100644 index 00000000000..59af836f9ba --- /dev/null +++ b/projects/dspace/core/src/lib/shared/object-collection/workflow-item-search-result.model.ts @@ -0,0 +1,8 @@ +import { WorkflowItem } from '../../submission/models/workflowitem.model'; +import { SearchResult } from '../search/models/search-result.model'; + +/** + * Represents a search result object of a WorkflowItem object + */ +export class WorkflowItemSearchResult extends SearchResult { +} diff --git a/projects/dspace/core/src/lib/shared/object-collection/workspace-item-search-result.model.ts b/projects/dspace/core/src/lib/shared/object-collection/workspace-item-search-result.model.ts new file mode 100644 index 00000000000..a15ff7128ea --- /dev/null +++ b/projects/dspace/core/src/lib/shared/object-collection/workspace-item-search-result.model.ts @@ -0,0 +1,8 @@ +import { WorkspaceItem } from '../../submission/models/workspaceitem.model'; +import { SearchResult } from '../search/models/search-result.model'; + +/** + * Represents a search result object of a WorkspaceItem object + */ +export class WorkspaceItemSearchResult extends SearchResult { +} diff --git a/src/app/core/shared/operators.spec.ts b/projects/dspace/core/src/lib/shared/operators.spec.ts similarity index 98% rename from src/app/core/shared/operators.spec.ts rename to projects/dspace/core/src/lib/shared/operators.spec.ts index 32b8c8ec78f..730833f7473 100644 --- a/src/app/core/shared/operators.spec.ts +++ b/projects/dspace/core/src/lib/shared/operators.spec.ts @@ -1,19 +1,15 @@ -import { - cold, - getTestScheduler, - hot, -} from 'jasmine-marbles'; +import { cold, getTestScheduler, hot } from 'jasmine-marbles'; import { of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { getMockRequestService } from '../../shared/mocks/request.service.mock'; -import { - createFailedRemoteDataObject, - createSuccessfulRemoteDataObject, -} from '../../shared/remote-data.utils'; import { GetRequest } from '../data/request.models'; import { RequestService } from '../data/request.service'; import { RequestEntry } from '../data/request-entry.model'; +import { getMockRequestService } from '../testing/request.service.mock'; +import { + createFailedRemoteDataObject, + createSuccessfulRemoteDataObject, +} from '../utilities/remote-data.utils'; import { redirectOn4xx } from './authorized.operators'; import { getAllSucceededRemoteData, diff --git a/src/app/core/shared/operators.ts b/projects/dspace/core/src/lib/shared/operators.ts similarity index 98% rename from src/app/core/shared/operators.ts rename to projects/dspace/core/src/lib/shared/operators.ts index ddc21740adb..7580bf465d1 100644 --- a/src/app/core/shared/operators.ts +++ b/projects/dspace/core/src/lib/shared/operators.ts @@ -1,4 +1,5 @@ import { InjectionToken } from '@angular/core'; +import { hasNoValue, hasValue, hasValueOperator, isNotEmpty } from '@dspace/utils'; import { combineLatest as observableCombineLatest, interval, @@ -17,19 +18,13 @@ import { takeWhile, } from 'rxjs/operators'; -import { - hasNoValue, - hasValue, - hasValueOperator, - isNotEmpty, -} from '../../shared/empty.util'; -import { SearchResult } from '../../shared/search/models/search-result.model'; import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; import { MetadataField } from '../metadata/metadata-field.model'; import { MetadataSchema } from '../metadata/metadata-schema.model'; import { BrowseDefinition } from './browse-definition.model'; import { DSpaceObject } from './dspace-object.model'; +import { SearchResult } from './search/models/search-result.model'; /** * Use this method instead of the RxJs debounceTime if you're waiting for debouncing in tests; diff --git a/src/app/core/shared/page-info.model.ts b/projects/dspace/core/src/lib/shared/page-info.model.ts similarity index 93% rename from src/app/core/shared/page-info.model.ts rename to projects/dspace/core/src/lib/shared/page-info.model.ts index c9557abcb62..2f1ce0badc1 100644 --- a/src/app/core/shared/page-info.model.ts +++ b/projects/dspace/core/src/lib/shared/page-info.model.ts @@ -1,10 +1,6 @@ -import { - autoserialize, - autoserializeAs, - deserialize, -} from 'cerialize'; +import { hasValue } from '@dspace/utils'; +import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; -import { hasValue } from '../../shared/empty.util'; import { HALLink } from './hal-link.model'; import { HALResource } from './hal-resource.model'; diff --git a/src/app/core/shared/process-output.resource-type.ts b/projects/dspace/core/src/lib/shared/process-output.resource-type.ts similarity index 100% rename from src/app/core/shared/process-output.resource-type.ts rename to projects/dspace/core/src/lib/shared/process-output.resource-type.ts diff --git a/src/app/process-page/processes/process.resource-type.ts b/projects/dspace/core/src/lib/shared/process.resource-type.ts similarity index 73% rename from src/app/process-page/processes/process.resource-type.ts rename to projects/dspace/core/src/lib/shared/process.resource-type.ts index 47617ed4f42..7aad20077ef 100644 --- a/src/app/process-page/processes/process.resource-type.ts +++ b/projects/dspace/core/src/lib/shared/process.resource-type.ts @@ -4,6 +4,6 @@ * Needs to be in a separate file to prevent circular * dependencies in webpack. */ -import { ResourceType } from '../../core/shared/resource-type'; +import { ResourceType } from './resource-type'; export const PROCESS = new ResourceType('process'); diff --git a/src/app/core/shared/registration.model.ts b/projects/dspace/core/src/lib/shared/registration.model.ts similarity index 100% rename from src/app/core/shared/registration.model.ts rename to projects/dspace/core/src/lib/shared/registration.model.ts diff --git a/src/app/core/shared/registration.resource-type.ts b/projects/dspace/core/src/lib/shared/registration.resource-type.ts similarity index 100% rename from src/app/core/shared/registration.resource-type.ts rename to projects/dspace/core/src/lib/shared/registration.resource-type.ts diff --git a/src/app/shared/form/builder/models/relationship-options.model.ts b/projects/dspace/core/src/lib/shared/relationship-options.model.ts similarity index 100% rename from src/app/shared/form/builder/models/relationship-options.model.ts rename to projects/dspace/core/src/lib/shared/relationship-options.model.ts diff --git a/src/app/request-copy/email-request-copy/request-copy-email.model.ts b/projects/dspace/core/src/lib/shared/request-copy-email.model.ts similarity index 100% rename from src/app/request-copy/email-request-copy/request-copy-email.model.ts rename to projects/dspace/core/src/lib/shared/request-copy-email.model.ts diff --git a/src/app/core/shared/request.operators.ts b/projects/dspace/core/src/lib/shared/request.operators.ts similarity index 90% rename from src/app/core/shared/request.operators.ts rename to projects/dspace/core/src/lib/shared/request.operators.ts index 0cb8593f401..253ccfe3ea9 100644 --- a/src/app/core/shared/request.operators.ts +++ b/projects/dspace/core/src/lib/shared/request.operators.ts @@ -1,15 +1,7 @@ +import { hasValue, hasValueOperator } from '@dspace/utils'; import { Observable } from 'rxjs'; -import { - filter, - map, - mergeMap, - tap, -} from 'rxjs/operators'; +import { filter, map, mergeMap, tap } from 'rxjs/operators'; -import { - hasValue, - hasValueOperator, -} from '../../shared/empty.util'; import { RequestService } from '../data/request.service'; import { RequestEntry } from '../data/request-entry.model'; import { ResponseState } from '../data/response-state.model'; diff --git a/src/app/core/shared/resource-type.ts b/projects/dspace/core/src/lib/shared/resource-type.ts similarity index 100% rename from src/app/core/shared/resource-type.ts rename to projects/dspace/core/src/lib/shared/resource-type.ts diff --git a/projects/dspace/core/src/lib/shared/scripts/index.ts b/projects/dspace/core/src/lib/shared/scripts/index.ts new file mode 100644 index 00000000000..14ec5d9d373 --- /dev/null +++ b/projects/dspace/core/src/lib/shared/scripts/index.ts @@ -0,0 +1,8 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './script-parameter-type.model'; +export * from './script-parameter.model'; +export * from './script.model'; +export * from './script.resource-type'; diff --git a/src/app/process-page/scripts/script-parameter-type.model.ts b/projects/dspace/core/src/lib/shared/scripts/script-parameter-type.model.ts similarity index 100% rename from src/app/process-page/scripts/script-parameter-type.model.ts rename to projects/dspace/core/src/lib/shared/scripts/script-parameter-type.model.ts diff --git a/src/app/process-page/scripts/script-parameter.model.ts b/projects/dspace/core/src/lib/shared/scripts/script-parameter.model.ts similarity index 100% rename from src/app/process-page/scripts/script-parameter.model.ts rename to projects/dspace/core/src/lib/shared/scripts/script-parameter.model.ts diff --git a/src/app/process-page/scripts/script.model.ts b/projects/dspace/core/src/lib/shared/scripts/script.model.ts similarity index 65% rename from src/app/process-page/scripts/script.model.ts rename to projects/dspace/core/src/lib/shared/scripts/script.model.ts index 3cd934336af..0fc6bf7d28d 100644 --- a/src/app/process-page/scripts/script.model.ts +++ b/projects/dspace/core/src/lib/shared/scripts/script.model.ts @@ -1,13 +1,10 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; - -import { typedObject } from '../../core/cache/builders/build-decorators'; -import { CacheableObject } from '../../core/cache/cacheable-object.model'; -import { HALLink } from '../../core/shared/hal-link.model'; -import { ResourceType } from '../../core/shared/resource-type'; -import { excludeFromEquals } from '../../core/utilities/equals.decorators'; +import { typedObject } from '../../cache/builders/build-decorators'; +import { CacheableObject } from '../../cache/cacheable-object.model'; +import { HALLink } from '../hal-link.model'; +import { ResourceType } from '../resource-type'; +import { excludeFromEquals } from '../../utilities/equals.decorators'; +import { autoserialize, deserialize } from 'cerialize'; + import { SCRIPT } from './script.resource-type'; import { ScriptParameter } from './script-parameter.model'; diff --git a/src/app/process-page/scripts/script.resource-type.ts b/projects/dspace/core/src/lib/shared/scripts/script.resource-type.ts similarity index 73% rename from src/app/process-page/scripts/script.resource-type.ts rename to projects/dspace/core/src/lib/shared/scripts/script.resource-type.ts index 2b8c106191a..5641674d627 100644 --- a/src/app/process-page/scripts/script.resource-type.ts +++ b/projects/dspace/core/src/lib/shared/scripts/script.resource-type.ts @@ -4,6 +4,6 @@ * Needs to be in a separate file to prevent circular * dependencies in webpack. */ -import { ResourceType } from '../../core/shared/resource-type'; +import { ResourceType } from '../resource-type'; export const SCRIPT = new ResourceType('script'); diff --git a/projects/dspace/core/src/lib/shared/search/index.ts b/projects/dspace/core/src/lib/shared/search/index.ts new file mode 100644 index 00000000000..29424f47997 --- /dev/null +++ b/projects/dspace/core/src/lib/shared/search/index.ts @@ -0,0 +1,7 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './models/index'; +export * from './search-filters/index'; +export * from './types/index'; diff --git a/src/app/shared/search/models/applied-filter.model.ts b/projects/dspace/core/src/lib/shared/search/models/applied-filter.model.ts similarity index 100% rename from src/app/shared/search/models/applied-filter.model.ts rename to projects/dspace/core/src/lib/shared/search/models/applied-filter.model.ts diff --git a/src/app/shared/search/models/facet-config-response.model.ts b/projects/dspace/core/src/lib/shared/search/models/facet-config-response.model.ts similarity index 61% rename from src/app/shared/search/models/facet-config-response.model.ts rename to projects/dspace/core/src/lib/shared/search/models/facet-config-response.model.ts index 821d4cdaebb..87e57ada1f4 100644 --- a/src/app/shared/search/models/facet-config-response.model.ts +++ b/projects/dspace/core/src/lib/shared/search/models/facet-config-response.model.ts @@ -1,11 +1,11 @@ import { deserialize } from 'cerialize'; -import { typedObject } from '../../../core/cache/builders/build-decorators'; -import { CacheableObject } from '../../../core/cache/cacheable-object.model'; -import { HALLink } from '../../../core/shared/hal-link.model'; -import { excludeFromEquals } from '../../../core/utilities/equals.decorators'; +import { typedObject } from '../../../cache/builders/build-decorators'; +import { CacheableObject } from '../../../cache/cacheable-object.model'; +import { excludeFromEquals } from '../../../utilities/equals.decorators'; +import { HALLink } from '../../hal-link.model'; +import { FACET_CONFIG_RESPONSE } from '../types/facet-config-response.resouce-type'; import { SearchFilterConfig } from './search-filter-config.model'; -import { FACET_CONFIG_RESPONSE } from './types/facet-config-response.resouce-type'; /** * The response from the discover/facets endpoint diff --git a/src/app/shared/search/models/facet-value.model.ts b/projects/dspace/core/src/lib/shared/search/models/facet-value.model.ts similarity index 75% rename from src/app/shared/search/models/facet-value.model.ts rename to projects/dspace/core/src/lib/shared/search/models/facet-value.model.ts index 6861b452e0d..5a4e7257f74 100644 --- a/src/app/shared/search/models/facet-value.model.ts +++ b/projects/dspace/core/src/lib/shared/search/models/facet-value.model.ts @@ -1,11 +1,7 @@ -import { - autoserialize, - autoserializeAs, - deserialize, -} from 'cerialize'; +import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; -import { HALLink } from '../../../core/shared/hal-link.model'; -import { HALResource } from '../../../core/shared/hal-resource.model'; +import { HALLink } from '../../hal-link.model'; +import { HALResource } from '../../hal-resource.model'; /** * Class representing possible values for a certain filter diff --git a/src/app/shared/search/models/facet-values.model.ts b/projects/dspace/core/src/lib/shared/search/models/facet-values.model.ts similarity index 71% rename from src/app/shared/search/models/facet-values.model.ts rename to projects/dspace/core/src/lib/shared/search/models/facet-values.model.ts index a0cdffb9a57..d28d5161f2f 100644 --- a/src/app/shared/search/models/facet-values.model.ts +++ b/projects/dspace/core/src/lib/shared/search/models/facet-values.model.ts @@ -1,16 +1,12 @@ -import { - autoserialize, - autoserializeAs, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, autoserializeAs, inheritSerialization } from 'cerialize'; -import { typedObject } from '../../../core/cache/builders/build-decorators'; -import { PaginatedList } from '../../../core/data/paginated-list.model'; -import { excludeFromEquals } from '../../../core/utilities/equals.decorators'; +import { typedObject } from '../../../cache/builders/build-decorators'; +import { PaginatedList } from '../../../data/paginated-list.model'; +import { excludeFromEquals } from '../../../utilities/equals.decorators'; +import { FACET_VALUES } from '../types/facet-values.resource-type'; import { FacetValue } from './facet-value.model'; import { FilterType } from './filter-type.model'; import { SearchQueryResponse } from './search-query-response.model'; -import { FACET_VALUES } from './types/facet-values.resource-type'; @typedObject @inheritSerialization(PaginatedList) diff --git a/src/app/shared/search/models/filter-type.model.ts b/projects/dspace/core/src/lib/shared/search/models/filter-type.model.ts similarity index 100% rename from src/app/shared/search/models/filter-type.model.ts rename to projects/dspace/core/src/lib/shared/search/models/filter-type.model.ts diff --git a/projects/dspace/core/src/lib/shared/search/models/index.ts b/projects/dspace/core/src/lib/shared/search/models/index.ts new file mode 100644 index 00000000000..45ef460c8a9 --- /dev/null +++ b/projects/dspace/core/src/lib/shared/search/models/index.ts @@ -0,0 +1,19 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './applied-filter.model'; +export * from './facet-config-response.model'; +export * from './facet-value.model'; +export * from './facet-values.model'; +export * from './filter-type.model'; +export * from './paginated-search-options.model.spec'; +export * from './paginated-search-options.model'; +export * from './search-filter-config.model'; +export * from './search-filter.model'; +export * from './search-objects.model'; +export * from './search-options.model.spec'; +export * from './search-options.model'; +export * from './search-query-response.model'; +export * from './search-result-sorting.model'; +export * from './search-result.model'; diff --git a/src/app/shared/search/models/paginated-search-options.model.spec.ts b/projects/dspace/core/src/lib/shared/search/models/paginated-search-options.model.spec.ts similarity index 87% rename from src/app/shared/search/models/paginated-search-options.model.spec.ts rename to projects/dspace/core/src/lib/shared/search/models/paginated-search-options.model.spec.ts index d39e3c958e4..2566ef51345 100644 --- a/src/app/shared/search/models/paginated-search-options.model.spec.ts +++ b/projects/dspace/core/src/lib/shared/search/models/paginated-search-options.model.spec.ts @@ -1,9 +1,6 @@ -import { - SortDirection, - SortOptions, -} from '../../../core/cache/models/sort-options.model'; -import { DSpaceObjectType } from '../../../core/shared/dspace-object-type.model'; -import { PaginationComponentOptions } from '../../pagination/pagination-component-options.model'; +import { SortDirection, SortOptions } from '../../../cache/models/sort-options.model'; +import { PaginationComponentOptions } from '../../../pagination/pagination-component-options.model'; +import { DSpaceObjectType } from '../../dspace-object-type.model'; import { PaginatedSearchOptions } from './paginated-search-options.model'; import { SearchFilter } from './search-filter.model'; diff --git a/src/app/shared/search/models/paginated-search-options.model.ts b/projects/dspace/core/src/lib/shared/search/models/paginated-search-options.model.ts similarity index 79% rename from src/app/shared/search/models/paginated-search-options.model.ts rename to projects/dspace/core/src/lib/shared/search/models/paginated-search-options.model.ts index 2c8546d2029..5577eaa6c88 100644 --- a/src/app/shared/search/models/paginated-search-options.model.ts +++ b/projects/dspace/core/src/lib/shared/search/models/paginated-search-options.model.ts @@ -1,8 +1,9 @@ -import { SortOptions } from '../../../core/cache/models/sort-options.model'; -import { DSpaceObjectType } from '../../../core/shared/dspace-object-type.model'; -import { ViewMode } from '../../../core/shared/view-mode.model'; -import { isNotEmpty } from '../../empty.util'; -import { PaginationComponentOptions } from '../../pagination/pagination-component-options.model'; +import { isNotEmpty } from '@dspace/utils'; + +import { SortOptions } from '../../../cache/models/sort-options.model'; +import { PaginationComponentOptions } from '../../../pagination/pagination-component-options.model'; +import { DSpaceObjectType } from '../../dspace-object-type.model'; +import { ViewMode } from '../../view-mode.model'; import { SearchFilter } from './search-filter.model'; import { SearchOptions } from './search-options.model'; diff --git a/src/app/shared/search/models/search-filter-config.model.ts b/projects/dspace/core/src/lib/shared/search/models/search-filter-config.model.ts similarity index 77% rename from src/app/shared/search/models/search-filter-config.model.ts rename to projects/dspace/core/src/lib/shared/search/models/search-filter-config.model.ts index 5ec6b0720fb..85d456df74c 100644 --- a/src/app/shared/search/models/search-filter-config.model.ts +++ b/projects/dspace/core/src/lib/shared/search/models/search-filter-config.model.ts @@ -1,15 +1,11 @@ -import { - autoserialize, - autoserializeAs, - deserialize, -} from 'cerialize'; +import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; -import { typedObject } from '../../../core/cache/builders/build-decorators'; -import { CacheableObject } from '../../../core/cache/cacheable-object.model'; -import { HALLink } from '../../../core/shared/hal-link.model'; -import { excludeFromEquals } from '../../../core/utilities/equals.decorators'; +import { typedObject } from '../../../cache/builders/build-decorators'; +import { CacheableObject } from '../../../cache/cacheable-object.model'; +import { excludeFromEquals } from '../../../utilities/equals.decorators'; +import { HALLink } from '../../hal-link.model'; +import { SEARCH_FILTER_CONFIG } from '../types/search-filter-config.resource-type'; import { FilterType } from './filter-type.model'; -import { SEARCH_FILTER_CONFIG } from './types/search-filter-config.resource-type'; /** * The configuration for a search filter diff --git a/src/app/shared/search/models/search-filter.model.ts b/projects/dspace/core/src/lib/shared/search/models/search-filter.model.ts similarity index 100% rename from src/app/shared/search/models/search-filter.model.ts rename to projects/dspace/core/src/lib/shared/search/models/search-filter.model.ts diff --git a/src/app/shared/search/models/search-objects.model.ts b/projects/dspace/core/src/lib/shared/search/models/search-objects.model.ts similarity index 62% rename from src/app/shared/search/models/search-objects.model.ts rename to projects/dspace/core/src/lib/shared/search/models/search-objects.model.ts index 5c70e3b0a1a..6c661b6c47d 100644 --- a/src/app/shared/search/models/search-objects.model.ts +++ b/projects/dspace/core/src/lib/shared/search/models/search-objects.model.ts @@ -1,15 +1,12 @@ -import { - autoserializeAs, - inheritSerialization, -} from 'cerialize'; +import { autoserializeAs, inheritSerialization } from 'cerialize'; -import { typedObject } from '../../../core/cache/builders/build-decorators'; -import { PaginatedList } from '../../../core/data/paginated-list.model'; -import { DSpaceObject } from '../../../core/shared/dspace-object.model'; -import { excludeFromEquals } from '../../../core/utilities/equals.decorators'; +import { typedObject } from '../../../cache/builders/build-decorators'; +import { PaginatedList } from '../../../data/paginated-list.model'; +import { excludeFromEquals } from '../../../utilities/equals.decorators'; +import { DSpaceObject } from '../../dspace-object.model'; +import { SEARCH_OBJECTS } from '../types/search-objects.resource-type'; import { SearchQueryResponse } from './search-query-response.model'; import { SearchResult } from './search-result.model'; -import { SEARCH_OBJECTS } from './types/search-objects.resource-type'; /** * Class representing the response returned by the server when performing a search request diff --git a/src/app/shared/search/models/search-options.model.spec.ts b/projects/dspace/core/src/lib/shared/search/models/search-options.model.spec.ts similarity index 94% rename from src/app/shared/search/models/search-options.model.spec.ts rename to projects/dspace/core/src/lib/shared/search/models/search-options.model.spec.ts index 614ca89160d..30549c59846 100644 --- a/src/app/shared/search/models/search-options.model.spec.ts +++ b/projects/dspace/core/src/lib/shared/search/models/search-options.model.spec.ts @@ -1,4 +1,4 @@ -import { DSpaceObjectType } from '../../../core/shared/dspace-object-type.model'; +import { DSpaceObjectType } from '../../dspace-object-type.model'; import { SearchFilter } from './search-filter.model'; import { SearchOptions } from './search-options.model'; diff --git a/src/app/shared/search/models/search-options.model.ts b/projects/dspace/core/src/lib/shared/search/models/search-options.model.ts similarity index 91% rename from src/app/shared/search/models/search-options.model.ts rename to projects/dspace/core/src/lib/shared/search/models/search-options.model.ts index 531d5254938..e0b5d0350d3 100644 --- a/src/app/shared/search/models/search-options.model.ts +++ b/projects/dspace/core/src/lib/shared/search/models/search-options.model.ts @@ -1,10 +1,8 @@ -import { DSpaceObjectType } from '../../../core/shared/dspace-object-type.model'; -import { ViewMode } from '../../../core/shared/view-mode.model'; -import { URLCombiner } from '../../../core/url-combiner/url-combiner'; -import { - hasValue, - isNotEmpty, -} from '../../empty.util'; +import { hasValue, isNotEmpty } from '@dspace/utils'; + +import { URLCombiner } from '../../../url-combiner/url-combiner'; +import { DSpaceObjectType } from '../../dspace-object-type.model'; +import { ViewMode } from '../../view-mode.model'; import { SearchFilter } from './search-filter.model'; /** diff --git a/src/app/shared/search/models/search-query-response.model.ts b/projects/dspace/core/src/lib/shared/search/models/search-query-response.model.ts similarity index 84% rename from src/app/shared/search/models/search-query-response.model.ts rename to projects/dspace/core/src/lib/shared/search/models/search-query-response.model.ts index d149a21c6f3..5b9e3ad0be0 100644 --- a/src/app/shared/search/models/search-query-response.model.ts +++ b/projects/dspace/core/src/lib/shared/search/models/search-query-response.model.ts @@ -1,10 +1,7 @@ -import { - autoserialize, - autoserializeAs, -} from 'cerialize'; +import { autoserialize, autoserializeAs } from 'cerialize'; -import { PaginatedList } from '../../../core/data/paginated-list.model'; -import { PageInfo } from '../../../core/shared/page-info.model'; +import { PaginatedList } from '../../../data/paginated-list.model'; +import { PageInfo } from '../../page-info.model'; import { AppliedFilter } from './applied-filter.model'; import { SearchResultSorting } from './search-result-sorting.model'; diff --git a/src/app/shared/search/models/search-result-sorting.model.ts b/projects/dspace/core/src/lib/shared/search/models/search-result-sorting.model.ts similarity index 100% rename from src/app/shared/search/models/search-result-sorting.model.ts rename to projects/dspace/core/src/lib/shared/search/models/search-result-sorting.model.ts diff --git a/src/app/shared/search/models/search-result.model.ts b/projects/dspace/core/src/lib/shared/search/models/search-result.model.ts similarity index 55% rename from src/app/shared/search/models/search-result.model.ts rename to projects/dspace/core/src/lib/shared/search/models/search-result.model.ts index e3bc9279414..df9277153a3 100644 --- a/src/app/shared/search/models/search-result.model.ts +++ b/projects/dspace/core/src/lib/shared/search/models/search-result.model.ts @@ -1,20 +1,14 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; +import { autoserialize, deserialize } from 'cerialize'; -import { typedObject } from '../../../core/cache/builders/build-decorators'; -import { DSpaceObject } from '../../../core/shared/dspace-object.model'; -import { GenericConstructor } from '../../../core/shared/generic-constructor'; -import { HALLink } from '../../../core/shared/hal-link.model'; -import { HALResource } from '../../../core/shared/hal-resource.model'; -import { MetadataMap } from '../../../core/shared/metadata.models'; -import { - excludeFromEquals, - fieldsForEquals, -} from '../../../core/utilities/equals.decorators'; -import { ListableObject } from '../../object-collection/shared/listable-object.model'; -import { SEARCH_RESULT } from './types/search-result.resource-type'; +import { typedObject } from '../../../cache/builders/build-decorators'; +import { excludeFromEquals, fieldsForEquals } from '../../../utilities/equals.decorators'; +import { DSpaceObject } from '../../dspace-object.model'; +import { GenericConstructor } from '../../generic-constructor'; +import { HALLink } from '../../hal-link.model'; +import { HALResource } from '../../hal-resource.model'; +import { MetadataMap } from '../../metadata.models'; +import { ListableObject } from '../../object-collection/listable-object.model'; +import { SEARCH_RESULT } from '../types/search-result.resource-type'; /** * Represents a search result object of a certain () DSpaceObject diff --git a/projects/dspace/core/src/lib/shared/search/search-filters/index.ts b/projects/dspace/core/src/lib/shared/search/search-filters/index.ts new file mode 100644 index 00000000000..b236d2f7f5c --- /dev/null +++ b/projects/dspace/core/src/lib/shared/search/search-filters/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './search-config.model'; +export * from './search-config.resource-type'; diff --git a/src/app/core/shared/search/search-filters/search-config.model.ts b/projects/dspace/core/src/lib/shared/search/search-filters/search-config.model.ts similarity index 90% rename from src/app/core/shared/search/search-filters/search-config.model.ts rename to projects/dspace/core/src/lib/shared/search/search-filters/search-config.model.ts index 2ebe5e84555..faed09f006f 100644 --- a/src/app/core/shared/search/search-filters/search-config.model.ts +++ b/projects/dspace/core/src/lib/shared/search/search-filters/search-config.model.ts @@ -1,13 +1,10 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; - -import { FilterType } from '../../../../shared/search/models/filter-type.model'; import { typedObject } from '../../../cache/builders/build-decorators'; import { CacheableObject } from '../../../cache/cacheable-object.model'; +import { autoserialize, deserialize } from 'cerialize'; + import { HALLink } from '../../hal-link.model'; import { ResourceType } from '../../resource-type'; +import { FilterType } from '../models/filter-type.model'; import { SEARCH_CONFIG } from './search-config.resource-type'; /** diff --git a/src/app/core/shared/search/search-filters/search-config.resource-type.ts b/projects/dspace/core/src/lib/shared/search/search-filters/search-config.resource-type.ts similarity index 100% rename from src/app/core/shared/search/search-filters/search-config.resource-type.ts rename to projects/dspace/core/src/lib/shared/search/search-filters/search-config.resource-type.ts diff --git a/src/app/shared/search/models/types/facet-config-response.resouce-type.ts b/projects/dspace/core/src/lib/shared/search/types/facet-config-response.resouce-type.ts similarity index 75% rename from src/app/shared/search/models/types/facet-config-response.resouce-type.ts rename to projects/dspace/core/src/lib/shared/search/types/facet-config-response.resouce-type.ts index 83f2ca0e666..bcc6908c030 100644 --- a/src/app/shared/search/models/types/facet-config-response.resouce-type.ts +++ b/projects/dspace/core/src/lib/shared/search/types/facet-config-response.resouce-type.ts @@ -1,4 +1,4 @@ -import { ResourceType } from '../../../../core/shared/resource-type'; +import { ResourceType } from '../../resource-type'; /** * The resource type for FacetConfigResponse diff --git a/src/app/shared/search/models/types/facet-values.resource-type.ts b/projects/dspace/core/src/lib/shared/search/types/facet-values.resource-type.ts similarity index 74% rename from src/app/shared/search/models/types/facet-values.resource-type.ts rename to projects/dspace/core/src/lib/shared/search/types/facet-values.resource-type.ts index c9d6c69c2ec..1db30960a48 100644 --- a/src/app/shared/search/models/types/facet-values.resource-type.ts +++ b/projects/dspace/core/src/lib/shared/search/types/facet-values.resource-type.ts @@ -1,4 +1,4 @@ -import { ResourceType } from '../../../../core/shared/resource-type'; +import { ResourceType } from '../../resource-type'; /** * The resource type for FacetValues diff --git a/projects/dspace/core/src/lib/shared/search/types/index.ts b/projects/dspace/core/src/lib/shared/search/types/index.ts new file mode 100644 index 00000000000..6825ae42f23 --- /dev/null +++ b/projects/dspace/core/src/lib/shared/search/types/index.ts @@ -0,0 +1,9 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './facet-config-response.resouce-type'; +export * from './facet-values.resource-type'; +export * from './search-filter-config.resource-type'; +export * from './search-objects.resource-type'; +export * from './search-result.resource-type'; diff --git a/src/app/shared/search/models/types/search-filter-config.resource-type.ts b/projects/dspace/core/src/lib/shared/search/types/search-filter-config.resource-type.ts similarity index 75% rename from src/app/shared/search/models/types/search-filter-config.resource-type.ts rename to projects/dspace/core/src/lib/shared/search/types/search-filter-config.resource-type.ts index eb7521b8dfc..fe8f7e20168 100644 --- a/src/app/shared/search/models/types/search-filter-config.resource-type.ts +++ b/projects/dspace/core/src/lib/shared/search/types/search-filter-config.resource-type.ts @@ -1,4 +1,4 @@ -import { ResourceType } from '../../../../core/shared/resource-type'; +import { ResourceType } from '../../resource-type'; /** * The resource type for SearchFilterConfig diff --git a/src/app/shared/search/models/types/search-objects.resource-type.ts b/projects/dspace/core/src/lib/shared/search/types/search-objects.resource-type.ts similarity index 74% rename from src/app/shared/search/models/types/search-objects.resource-type.ts rename to projects/dspace/core/src/lib/shared/search/types/search-objects.resource-type.ts index 650b02f0058..d2528355467 100644 --- a/src/app/shared/search/models/types/search-objects.resource-type.ts +++ b/projects/dspace/core/src/lib/shared/search/types/search-objects.resource-type.ts @@ -1,4 +1,4 @@ -import { ResourceType } from '../../../../core/shared/resource-type'; +import { ResourceType } from '../../resource-type'; /** * The resource type for SearchObjects diff --git a/src/app/shared/search/models/types/search-result.resource-type.ts b/projects/dspace/core/src/lib/shared/search/types/search-result.resource-type.ts similarity index 73% rename from src/app/shared/search/models/types/search-result.resource-type.ts rename to projects/dspace/core/src/lib/shared/search/types/search-result.resource-type.ts index 354c1898c4d..8809653147f 100644 --- a/src/app/shared/search/models/types/search-result.resource-type.ts +++ b/projects/dspace/core/src/lib/shared/search/types/search-result.resource-type.ts @@ -1,4 +1,4 @@ -import { ResourceType } from '../../../../core/shared/resource-type'; +import { ResourceType } from '../../resource-type'; /** * The resource type for SearchResult diff --git a/src/app/submission/sections/section-coar-notify/section-coar-notify-service.resource-type.ts b/projects/dspace/core/src/lib/shared/section-coar-notify-service.resource-type.ts similarity index 77% rename from src/app/submission/sections/section-coar-notify/section-coar-notify-service.resource-type.ts rename to projects/dspace/core/src/lib/shared/section-coar-notify-service.resource-type.ts index 54ce43ab902..dc45c30469c 100644 --- a/src/app/submission/sections/section-coar-notify/section-coar-notify-service.resource-type.ts +++ b/projects/dspace/core/src/lib/shared/section-coar-notify-service.resource-type.ts @@ -4,7 +4,7 @@ * Needs to be in a separate file to prevent circular * dependencies in webpack. */ -import { ResourceType } from '../../../core/shared/resource-type'; +import { ResourceType } from './resource-type'; export const SUBMISSION_COAR_NOTIFY_CONFIG = new ResourceType('submissioncoarnotifyconfig'); diff --git a/src/app/core/shared/sequence.service.spec.ts b/projects/dspace/core/src/lib/shared/sequence.service.spec.ts similarity index 100% rename from src/app/core/shared/sequence.service.spec.ts rename to projects/dspace/core/src/lib/shared/sequence.service.spec.ts diff --git a/src/app/core/shared/sequence.service.ts b/projects/dspace/core/src/lib/shared/sequence.service.ts similarity index 100% rename from src/app/core/shared/sequence.service.ts rename to projects/dspace/core/src/lib/shared/sequence.service.ts diff --git a/src/app/core/shared/server-math.service.ts b/projects/dspace/core/src/lib/shared/server-math.service.ts similarity index 85% rename from src/app/core/shared/server-math.service.ts rename to projects/dspace/core/src/lib/shared/server-math.service.ts index 62070dbafc0..789510fd4e3 100644 --- a/src/app/core/shared/server-math.service.ts +++ b/projects/dspace/core/src/lib/shared/server-math.service.ts @@ -1,14 +1,7 @@ import { Injectable } from '@angular/core'; -import { - BehaviorSubject, - Observable, - Subject, -} from 'rxjs'; - -import { - MathJaxConfig, - MathService, -} from './math.service'; +import { BehaviorSubject, Observable, Subject } from 'rxjs'; + +import { MathJaxConfig, MathService } from './math.service'; @Injectable({ providedIn: 'root', diff --git a/src/app/core/shared/site.model.ts b/projects/dspace/core/src/lib/shared/site.model.ts similarity index 100% rename from src/app/core/shared/site.model.ts rename to projects/dspace/core/src/lib/shared/site.model.ts diff --git a/src/app/core/shared/site.resource-type.ts b/projects/dspace/core/src/lib/shared/site.resource-type.ts similarity index 100% rename from src/app/core/shared/site.resource-type.ts rename to projects/dspace/core/src/lib/shared/site.resource-type.ts diff --git a/src/app/core/shared/sort-option.model.ts b/projects/dspace/core/src/lib/shared/sort-option.model.ts similarity index 100% rename from src/app/core/shared/sort-option.model.ts rename to projects/dspace/core/src/lib/shared/sort-option.model.ts diff --git a/src/app/core/shared/submit-data-response-definition.model.ts b/projects/dspace/core/src/lib/shared/submit-data-response-definition.model.ts similarity index 100% rename from src/app/core/shared/submit-data-response-definition.model.ts rename to projects/dspace/core/src/lib/shared/submit-data-response-definition.model.ts diff --git a/src/app/shared/subscriptions/models/subscription.model.ts b/projects/dspace/core/src/lib/shared/subscription.model.ts similarity index 69% rename from src/app/shared/subscriptions/models/subscription.model.ts rename to projects/dspace/core/src/lib/shared/subscription.model.ts index 513b239259e..3b10ace8af5 100644 --- a/src/app/shared/subscriptions/models/subscription.model.ts +++ b/projects/dspace/core/src/lib/shared/subscription.model.ts @@ -1,20 +1,13 @@ -import { - autoserialize, - deserialize, - inheritSerialization, -} from 'cerialize'; +import { link, typedObject } from '../cache/builders/build-decorators'; +import { RemoteData } from '../data/remote-data'; +import { EPerson } from '../eperson/models/eperson.model'; +import { EPERSON } from '../eperson/models/eperson.resource-type'; +import { DSpaceObject } from './dspace-object.model'; +import { DSPACE_OBJECT } from './dspace-object.resource-type'; +import { HALLink } from './hal-link.model'; +import { autoserialize, deserialize, inheritSerialization } from 'cerialize'; import { Observable } from 'rxjs'; -import { - link, - typedObject, -} from '../../../core/cache/builders/build-decorators'; -import { RemoteData } from '../../../core/data/remote-data'; -import { EPerson } from '../../../core/eperson/models/eperson.model'; -import { EPERSON } from '../../../core/eperson/models/eperson.resource-type'; -import { DSpaceObject } from '../../../core/shared/dspace-object.model'; -import { DSPACE_OBJECT } from '../../../core/shared/dspace-object.resource-type'; -import { HALLink } from '../../../core/shared/hal-link.model'; import { SUBSCRIPTION } from './subscription.resource-type'; @typedObject diff --git a/src/app/shared/subscriptions/models/subscription.resource-type.ts b/projects/dspace/core/src/lib/shared/subscription.resource-type.ts similarity index 74% rename from src/app/shared/subscriptions/models/subscription.resource-type.ts rename to projects/dspace/core/src/lib/shared/subscription.resource-type.ts index a1dad5cba0e..9b4e0977e75 100644 --- a/src/app/shared/subscriptions/models/subscription.resource-type.ts +++ b/projects/dspace/core/src/lib/shared/subscription.resource-type.ts @@ -1,4 +1,4 @@ -import { ResourceType } from '../../../core/shared/resource-type'; +import { ResourceType } from './resource-type'; /** * The resource type for Subscription diff --git a/src/app/system-wide-alert/system-wide-alert.model.ts b/projects/dspace/core/src/lib/shared/system-wide-alert.model.ts similarity index 68% rename from src/app/system-wide-alert/system-wide-alert.model.ts rename to projects/dspace/core/src/lib/shared/system-wide-alert.model.ts index 73bd7610a9d..c90d36e8195 100644 --- a/src/app/system-wide-alert/system-wide-alert.model.ts +++ b/projects/dspace/core/src/lib/shared/system-wide-alert.model.ts @@ -1,13 +1,10 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; - -import { typedObject } from '../core/cache/builders/build-decorators'; -import { CacheableObject } from '../core/cache/cacheable-object.model'; -import { HALLink } from '../core/shared/hal-link.model'; -import { ResourceType } from '../core/shared/resource-type'; -import { excludeFromEquals } from '../core/utilities/equals.decorators'; +import { typedObject } from '../cache/builders/build-decorators'; +import { CacheableObject } from '../cache/cacheable-object.model'; +import { HALLink } from './hal-link.model'; +import { ResourceType } from './resource-type'; +import { excludeFromEquals } from '../utilities/equals.decorators'; +import { autoserialize, deserialize } from 'cerialize'; + import { SYSTEMWIDEALERT } from './system-wide-alert.resource-type'; /** diff --git a/src/app/system-wide-alert/system-wide-alert.resource-type.ts b/projects/dspace/core/src/lib/shared/system-wide-alert.resource-type.ts similarity index 76% rename from src/app/system-wide-alert/system-wide-alert.resource-type.ts rename to projects/dspace/core/src/lib/shared/system-wide-alert.resource-type.ts index f67f00719bd..f7359894cd7 100644 --- a/src/app/system-wide-alert/system-wide-alert.resource-type.ts +++ b/projects/dspace/core/src/lib/shared/system-wide-alert.resource-type.ts @@ -5,6 +5,6 @@ * dependencies in webpack. */ -import { ResourceType } from '../core/shared/resource-type'; +import { ResourceType } from './resource-type'; export const SYSTEMWIDEALERT = new ResourceType('systemwidealert'); diff --git a/src/app/core/shared/template-item.model.ts b/projects/dspace/core/src/lib/shared/template-item.model.ts similarity index 89% rename from src/app/core/shared/template-item.model.ts rename to projects/dspace/core/src/lib/shared/template-item.model.ts index a536dea49e9..0d60daef683 100644 --- a/src/app/core/shared/template-item.model.ts +++ b/projects/dspace/core/src/lib/shared/template-item.model.ts @@ -1,10 +1,7 @@ import { inheritSerialization } from 'cerialize'; import { Observable } from 'rxjs'; -import { - link, - typedObject, -} from '../cache/builders/build-decorators'; +import { link, typedObject } from '../cache/builders/build-decorators'; import { RemoteData } from '../data/remote-data'; import { Collection } from './collection.model'; import { COLLECTION } from './collection.resource-type'; diff --git a/src/app/core/shared/template-item.resource-type.ts b/projects/dspace/core/src/lib/shared/template-item.resource-type.ts similarity index 100% rename from src/app/core/shared/template-item.resource-type.ts rename to projects/dspace/core/src/lib/shared/template-item.resource-type.ts diff --git a/src/app/core/shared/uncacheable-object.model.ts b/projects/dspace/core/src/lib/shared/uncacheable-object.model.ts similarity index 100% rename from src/app/core/shared/uncacheable-object.model.ts rename to projects/dspace/core/src/lib/shared/uncacheable-object.model.ts diff --git a/src/app/core/shared/uuid.service.ts b/projects/dspace/core/src/lib/shared/uuid.service.ts similarity index 100% rename from src/app/core/shared/uuid.service.ts rename to projects/dspace/core/src/lib/shared/uuid.service.ts diff --git a/src/app/core/shared/value-list-browse-definition.model.ts b/projects/dspace/core/src/lib/shared/value-list-browse-definition.model.ts similarity index 86% rename from src/app/core/shared/value-list-browse-definition.model.ts rename to projects/dspace/core/src/lib/shared/value-list-browse-definition.model.ts index ad9fc60d1cb..d0052c897c1 100644 --- a/src/app/core/shared/value-list-browse-definition.model.ts +++ b/projects/dspace/core/src/lib/shared/value-list-browse-definition.model.ts @@ -1,9 +1,6 @@ -import { - deserialize, - inheritSerialization, -} from 'cerialize'; +import { deserialize, inheritSerialization } from 'cerialize'; -import { BrowseByDataType } from '../../browse-by/browse-by-switcher/browse-by-data-type'; +import { BrowseByDataType } from '../browse/browse-by-data-type'; import { typedObject } from '../cache/builders/build-decorators'; import { excludeFromEquals } from '../utilities/equals.decorators'; import { HALLink } from './hal-link.model'; diff --git a/src/app/core/shared/value-list-browse-definition.resource-type.ts b/projects/dspace/core/src/lib/shared/value-list-browse-definition.resource-type.ts similarity index 100% rename from src/app/core/shared/value-list-browse-definition.resource-type.ts rename to projects/dspace/core/src/lib/shared/value-list-browse-definition.resource-type.ts diff --git a/src/app/core/shared/version-history.model.ts b/projects/dspace/core/src/lib/shared/version-history.model.ts similarity index 88% rename from src/app/core/shared/version-history.model.ts rename to projects/dspace/core/src/lib/shared/version-history.model.ts index 58d9259a047..540990af7cb 100644 --- a/src/app/core/shared/version-history.model.ts +++ b/projects/dspace/core/src/lib/shared/version-history.model.ts @@ -1,14 +1,7 @@ -import { - autoserialize, - deserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, deserialize, inheritSerialization } from 'cerialize'; import { Observable } from 'rxjs'; -import { - link, - typedObject, -} from '../cache/builders/build-decorators'; +import { link, typedObject } from '../cache/builders/build-decorators'; import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; import { excludeFromEquals } from '../utilities/equals.decorators'; diff --git a/src/app/core/shared/version-history.resource-type.ts b/projects/dspace/core/src/lib/shared/version-history.resource-type.ts similarity index 100% rename from src/app/core/shared/version-history.resource-type.ts rename to projects/dspace/core/src/lib/shared/version-history.resource-type.ts diff --git a/src/app/core/shared/version.model.ts b/projects/dspace/core/src/lib/shared/version.model.ts similarity index 91% rename from src/app/core/shared/version.model.ts rename to projects/dspace/core/src/lib/shared/version.model.ts index 105ba744167..a7451e0639e 100644 --- a/src/app/core/shared/version.model.ts +++ b/projects/dspace/core/src/lib/shared/version.model.ts @@ -1,14 +1,7 @@ -import { - autoserialize, - deserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, deserialize, inheritSerialization } from 'cerialize'; import { Observable } from 'rxjs'; -import { - link, - typedObject, -} from '../cache/builders/build-decorators'; +import { link, typedObject } from '../cache/builders/build-decorators'; import { RemoteData } from '../data/remote-data'; import { EPerson } from '../eperson/models/eperson.model'; import { EPERSON } from '../eperson/models/eperson.resource-type'; diff --git a/src/app/core/shared/version.resource-type.ts b/projects/dspace/core/src/lib/shared/version.resource-type.ts similarity index 100% rename from src/app/core/shared/version.resource-type.ts rename to projects/dspace/core/src/lib/shared/version.resource-type.ts diff --git a/src/app/core/shared/view-mode.model.ts b/projects/dspace/core/src/lib/shared/view-mode.model.ts similarity index 100% rename from src/app/core/shared/view-mode.model.ts rename to projects/dspace/core/src/lib/shared/view-mode.model.ts diff --git a/projects/dspace/core/src/lib/statistics/index.ts b/projects/dspace/core/src/lib/statistics/index.ts new file mode 100644 index 00000000000..f61663fb596 --- /dev/null +++ b/projects/dspace/core/src/lib/statistics/index.ts @@ -0,0 +1,7 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './usage-report-data.service.spec'; +export * from './usage-report-data.service'; +export * from './models/index'; diff --git a/projects/dspace/core/src/lib/statistics/models/index.ts b/projects/dspace/core/src/lib/statistics/models/index.ts new file mode 100644 index 00000000000..af3fd9d8f8f --- /dev/null +++ b/projects/dspace/core/src/lib/statistics/models/index.ts @@ -0,0 +1,9 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './matomo-type'; +export * from './statistics-endpoint.model'; +export * from './statistics-endpoint.resource-type'; +export * from './usage-report.model'; +export * from './usage-report.resource-type'; diff --git a/projects/dspace/core/src/lib/statistics/models/matomo-type.ts b/projects/dspace/core/src/lib/statistics/models/matomo-type.ts new file mode 100644 index 00000000000..0934bbc634e --- /dev/null +++ b/projects/dspace/core/src/lib/statistics/models/matomo-type.ts @@ -0,0 +1,5 @@ +export const MATOMO_TRACKER_URL = 'matomo.tracker.url'; + +export const MATOMO_SITE_ID = 'matomo.request.siteid'; + +export const MATOMO_ENABLED = 'matomo.enabled'; diff --git a/src/app/statistics/statistics-endpoint.model.ts b/projects/dspace/core/src/lib/statistics/models/statistics-endpoint.model.ts similarity index 56% rename from src/app/statistics/statistics-endpoint.model.ts rename to projects/dspace/core/src/lib/statistics/models/statistics-endpoint.model.ts index 8bee88c7dab..2844ac60265 100644 --- a/src/app/statistics/statistics-endpoint.model.ts +++ b/projects/dspace/core/src/lib/statistics/models/statistics-endpoint.model.ts @@ -1,13 +1,10 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; +import { autoserialize, deserialize } from 'cerialize'; -import { typedObject } from '../core/cache/builders/build-decorators'; -import { CacheableObject } from '../core/cache/cacheable-object.model'; -import { HALLink } from '../core/shared/hal-link.model'; -import { ResourceType } from '../core/shared/resource-type'; -import { excludeFromEquals } from '../core/utilities/equals.decorators'; +import { typedObject } from '../../cache/builders/build-decorators'; +import { CacheableObject } from '../../cache/cacheable-object.model'; +import { HALLink } from '../../shared/hal-link.model'; +import { ResourceType } from '../../shared/resource-type'; +import { excludeFromEquals } from '../../utilities/equals.decorators'; import { STATISTICS_ENDPOINT } from './statistics-endpoint.resource-type'; /** diff --git a/src/app/statistics/statistics-endpoint.resource-type.ts b/projects/dspace/core/src/lib/statistics/models/statistics-endpoint.resource-type.ts similarity index 77% rename from src/app/statistics/statistics-endpoint.resource-type.ts rename to projects/dspace/core/src/lib/statistics/models/statistics-endpoint.resource-type.ts index 9ebca600f49..8dcb367a8f0 100644 --- a/src/app/statistics/statistics-endpoint.resource-type.ts +++ b/projects/dspace/core/src/lib/statistics/models/statistics-endpoint.resource-type.ts @@ -1,4 +1,4 @@ -import { ResourceType } from '../core/shared/resource-type'; +import { ResourceType } from '../../shared/resource-type'; /** * The resource type for the statistics endpoint diff --git a/src/app/core/statistics/models/usage-report.model.ts b/projects/dspace/core/src/lib/statistics/models/usage-report.model.ts similarity index 90% rename from src/app/core/statistics/models/usage-report.model.ts rename to projects/dspace/core/src/lib/statistics/models/usage-report.model.ts index ea8262065be..34133e8248e 100644 --- a/src/app/core/statistics/models/usage-report.model.ts +++ b/projects/dspace/core/src/lib/statistics/models/usage-report.model.ts @@ -1,9 +1,4 @@ -import { - autoserialize, - autoserializeAs, - deserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, autoserializeAs, deserialize, inheritSerialization } from 'cerialize'; import { typedObject } from '../../cache/builders/build-decorators'; import { HALLink } from '../../shared/hal-link.model'; diff --git a/src/app/core/statistics/models/usage-report.resource-type.ts b/projects/dspace/core/src/lib/statistics/models/usage-report.resource-type.ts similarity index 100% rename from src/app/core/statistics/models/usage-report.resource-type.ts rename to projects/dspace/core/src/lib/statistics/models/usage-report.resource-type.ts diff --git a/src/app/core/statistics/usage-report-data.service.spec.ts b/projects/dspace/core/src/lib/statistics/usage-report-data.service.spec.ts similarity index 100% rename from src/app/core/statistics/usage-report-data.service.spec.ts rename to projects/dspace/core/src/lib/statistics/usage-report-data.service.spec.ts diff --git a/src/app/core/statistics/usage-report-data.service.ts b/projects/dspace/core/src/lib/statistics/usage-report-data.service.ts similarity index 90% rename from src/app/core/statistics/usage-report-data.service.ts rename to projects/dspace/core/src/lib/statistics/usage-report-data.service.ts index 2737e875de9..c8caee19b05 100644 --- a/src/app/core/statistics/usage-report-data.service.ts +++ b/projects/dspace/core/src/lib/statistics/usage-report-data.service.ts @@ -2,24 +2,18 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; import { IdentifiableDataService } from '../data/base/identifiable-data.service'; -import { - SearchData, - SearchDataImpl, -} from '../data/base/search-data'; +import { SearchData, SearchDataImpl } from '../data/base/search-data'; import { FindListOptions } from '../data/find-list-options.model'; import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; import { RequestService } from '../data/request.service'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; -import { - getFirstSucceededRemoteData, - getRemoteDataPayload, -} from '../shared/operators'; +import { getFirstSucceededRemoteData, getRemoteDataPayload } from '../shared/operators'; import { UsageReport } from './models/usage-report.model'; /** diff --git a/src/app/core/submission/correctiontype-data.service.ts b/projects/dspace/core/src/lib/submission/correctiontype-data.service.ts similarity index 93% rename from src/app/core/submission/correctiontype-data.service.ts rename to projects/dspace/core/src/lib/submission/correctiontype-data.service.ts index 550fdcacbac..4950b13b663 100644 --- a/src/app/core/submission/correctiontype-data.service.ts +++ b/projects/dspace/core/src/lib/submission/correctiontype-data.service.ts @@ -1,10 +1,6 @@ import { Injectable } from '@angular/core'; -import { - map, - Observable, -} from 'rxjs'; +import { map, Observable } from 'rxjs'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; @@ -14,11 +10,9 @@ import { FindListOptions } from '../data/find-list-options.model'; import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; import { RequestService } from '../data/request.service'; +import { NotificationsService } from '../notification-system/notifications.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; -import { - getAllSucceededRemoteDataPayload, - getPaginatedListPayload, -} from '../shared/operators'; +import { getAllSucceededRemoteDataPayload, getPaginatedListPayload } from '../shared/operators'; import { CorrectionType } from './models/correctiontype.model'; /** diff --git a/projects/dspace/core/src/lib/submission/index.ts b/projects/dspace/core/src/lib/submission/index.ts new file mode 100644 index 00000000000..40250b86145 --- /dev/null +++ b/projects/dspace/core/src/lib/submission/index.ts @@ -0,0 +1,27 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './correctiontype-data.service'; +export * from './sections-type'; +export * from './submission-cc-license-data.service.spec'; +export * from './submission-cc-license-data.service'; +export * from './submission-cc-license-url-data.service'; +export * from './submission-duplicate-data.service.spec'; +export * from './submission-duplicate-data.service'; +export * from './submission-field-scope-type'; +export * from './submission-json-patch-operations.service.spec'; +export * from './submission-json-patch-operations.service'; +export * from './submission-response-parsing.service'; +export * from './submission-response.model'; +export * from './submission-rest.service.spec'; +export * from './submission-rest.service'; +export * from './submission-scope-type'; +export * from './visibility-type'; +export * from './workflowitem-data.service.spec'; +export * from './workflowitem-data.service'; +export * from './workspaceitem-data.service.spec'; +export * from './workspaceitem-data.service'; +export * from './models/index'; +export * from './resolver/index'; +export * from './vocabularies/index'; diff --git a/src/app/core/submission/models/access-condition.model.ts b/projects/dspace/core/src/lib/submission/models/access-condition.model.ts similarity index 100% rename from src/app/core/submission/models/access-condition.model.ts rename to projects/dspace/core/src/lib/submission/models/access-condition.model.ts diff --git a/src/app/core/submission/models/correctiontype.model.ts b/projects/dspace/core/src/lib/submission/models/correctiontype.model.ts similarity index 95% rename from src/app/core/submission/models/correctiontype.model.ts rename to projects/dspace/core/src/lib/submission/models/correctiontype.model.ts index 4b5bd1ddd68..b63342ee360 100644 --- a/src/app/core/submission/models/correctiontype.model.ts +++ b/projects/dspace/core/src/lib/submission/models/correctiontype.model.ts @@ -1,7 +1,4 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; +import { autoserialize, deserialize } from 'cerialize'; import { typedObject } from '../../cache/builders/build-decorators'; import { CacheableObject } from '../../cache/cacheable-object.model'; diff --git a/projects/dspace/core/src/lib/submission/models/index.ts b/projects/dspace/core/src/lib/submission/models/index.ts new file mode 100644 index 00000000000..77e4ae77123 --- /dev/null +++ b/projects/dspace/core/src/lib/submission/models/index.ts @@ -0,0 +1,31 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './access-condition.model'; +export * from './correctiontype.model'; +export * from './section-visibility.model'; +export * from './sherpa-policies-details.model'; +export * from './submission-accesses.resource-type'; +export * from './submission-cc-licence-link.resource-type'; +export * from './submission-cc-licence.resource-type'; +export * from './submission-cc-license-url.model'; +export * from './submission-cc-license.model'; +export * from './submission-error.model'; +export * from './submission-item-access-condition.model'; +export * from './submission-object.model'; +export * from './submission-section-error.model'; +export * from './submission-section-object.model'; +export * from './submission-upload-file-access-condition.model'; +export * from './workflowitem.model'; +export * from './workspaceitem-section-accesses.model'; +export * from './workspaceitem-section-cc-license.model'; +export * from './workspaceitem-section-duplicates.model'; +export * from './workspaceitem-section-form.model'; +export * from './workspaceitem-section-identifiers.model'; +export * from './workspaceitem-section-license.model'; +export * from './workspaceitem-section-sherpa-policies.model'; +export * from './workspaceitem-section-upload-file.model'; +export * from './workspaceitem-section-upload.model'; +export * from './workspaceitem-sections.model'; +export * from './workspaceitem.model'; diff --git a/src/app/submission/objects/section-visibility.model.ts b/projects/dspace/core/src/lib/submission/models/section-visibility.model.ts similarity index 100% rename from src/app/submission/objects/section-visibility.model.ts rename to projects/dspace/core/src/lib/submission/models/section-visibility.model.ts diff --git a/src/app/core/submission/models/sherpa-policies-details.model.ts b/projects/dspace/core/src/lib/submission/models/sherpa-policies-details.model.ts similarity index 95% rename from src/app/core/submission/models/sherpa-policies-details.model.ts rename to projects/dspace/core/src/lib/submission/models/sherpa-policies-details.model.ts index af4d4a58907..764ea3d229c 100644 --- a/src/app/core/submission/models/sherpa-policies-details.model.ts +++ b/projects/dspace/core/src/lib/submission/models/sherpa-policies-details.model.ts @@ -21,12 +21,12 @@ export class SherpaPoliciesDetailsObject { /** * The sherpa policies metadata */ - metadata: Metadata; + metadata: SherpaMetadata; } -export interface Metadata { +export interface SherpaMetadata { id: number; uri: string; dateCreated: string; diff --git a/src/app/core/submission/models/submission-accesses.resource-type.ts b/projects/dspace/core/src/lib/submission/models/submission-accesses.resource-type.ts similarity index 100% rename from src/app/core/submission/models/submission-accesses.resource-type.ts rename to projects/dspace/core/src/lib/submission/models/submission-accesses.resource-type.ts diff --git a/src/app/core/submission/models/submission-cc-licence-link.resource-type.ts b/projects/dspace/core/src/lib/submission/models/submission-cc-licence-link.resource-type.ts similarity index 100% rename from src/app/core/submission/models/submission-cc-licence-link.resource-type.ts rename to projects/dspace/core/src/lib/submission/models/submission-cc-licence-link.resource-type.ts diff --git a/src/app/core/submission/models/submission-cc-licence.resource-type.ts b/projects/dspace/core/src/lib/submission/models/submission-cc-licence.resource-type.ts similarity index 100% rename from src/app/core/submission/models/submission-cc-licence.resource-type.ts rename to projects/dspace/core/src/lib/submission/models/submission-cc-licence.resource-type.ts diff --git a/src/app/core/submission/models/submission-cc-license-url.model.ts b/projects/dspace/core/src/lib/submission/models/submission-cc-license-url.model.ts similarity index 90% rename from src/app/core/submission/models/submission-cc-license-url.model.ts rename to projects/dspace/core/src/lib/submission/models/submission-cc-license-url.model.ts index b1e53aa206e..e8936e096c9 100644 --- a/src/app/core/submission/models/submission-cc-license-url.model.ts +++ b/projects/dspace/core/src/lib/submission/models/submission-cc-license-url.model.ts @@ -1,7 +1,4 @@ -import { - autoserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, inheritSerialization } from 'cerialize'; import { typedObject } from '../../cache/builders/build-decorators'; import { HALResource } from '../../shared/hal-resource.model'; diff --git a/src/app/core/submission/models/submission-cc-license.model.ts b/projects/dspace/core/src/lib/submission/models/submission-cc-license.model.ts similarity index 92% rename from src/app/core/submission/models/submission-cc-license.model.ts rename to projects/dspace/core/src/lib/submission/models/submission-cc-license.model.ts index 8ab235941fc..f86e63d5d32 100644 --- a/src/app/core/submission/models/submission-cc-license.model.ts +++ b/projects/dspace/core/src/lib/submission/models/submission-cc-license.model.ts @@ -1,7 +1,4 @@ -import { - autoserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, inheritSerialization } from 'cerialize'; import { typedObject } from '../../cache/builders/build-decorators'; import { HALResource } from '../../shared/hal-resource.model'; diff --git a/src/app/submission/objects/submission-error.model.ts b/projects/dspace/core/src/lib/submission/models/submission-error.model.ts similarity index 100% rename from src/app/submission/objects/submission-error.model.ts rename to projects/dspace/core/src/lib/submission/models/submission-error.model.ts diff --git a/src/app/core/submission/models/submission-item-access-condition.model.ts b/projects/dspace/core/src/lib/submission/models/submission-item-access-condition.model.ts similarity index 100% rename from src/app/core/submission/models/submission-item-access-condition.model.ts rename to projects/dspace/core/src/lib/submission/models/submission-item-access-condition.model.ts diff --git a/src/app/core/submission/models/submission-object.model.ts b/projects/dspace/core/src/lib/submission/models/submission-object.model.ts similarity index 95% rename from src/app/core/submission/models/submission-object.model.ts rename to projects/dspace/core/src/lib/submission/models/submission-object.model.ts index d4836f6dcf1..5810d37f264 100644 --- a/src/app/core/submission/models/submission-object.model.ts +++ b/projects/dspace/core/src/lib/submission/models/submission-object.model.ts @@ -1,13 +1,11 @@ -import { - autoserialize, - deserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, deserialize, inheritSerialization } from 'cerialize'; import { Observable } from 'rxjs'; import { link } from '../../cache/builders/build-decorators'; import { CacheableObject } from '../../cache/cacheable-object.model'; -import { SubmissionDefinitionsModel } from '../../config/models/config-submission-definitions.model'; +import { + SubmissionDefinitionsModel, +} from '../../config/models/config-submission-definitions.model'; import { PaginatedList } from '../../data/paginated-list.model'; import { RemoteData } from '../../data/remote-data'; import { EPerson } from '../../eperson/models/eperson.model'; diff --git a/src/app/submission/objects/submission-section-error.model.ts b/projects/dspace/core/src/lib/submission/models/submission-section-error.model.ts similarity index 100% rename from src/app/submission/objects/submission-section-error.model.ts rename to projects/dspace/core/src/lib/submission/models/submission-section-error.model.ts diff --git a/src/app/submission/objects/submission-section-object.model.ts b/projects/dspace/core/src/lib/submission/models/submission-section-object.model.ts similarity index 86% rename from src/app/submission/objects/submission-section-object.model.ts rename to projects/dspace/core/src/lib/submission/models/submission-section-object.model.ts index 5d8a14c7450..719bc95d276 100644 --- a/src/app/submission/objects/submission-section-object.model.ts +++ b/projects/dspace/core/src/lib/submission/models/submission-section-object.model.ts @@ -1,10 +1,7 @@ -import { WorkspaceitemSectionDataType } from '../../core/submission/models/workspaceitem-sections.model'; -import { SectionsType } from '../sections/sections-type'; -import { - SectionScope, - SectionVisibility, -} from './section-visibility.model'; +import { SectionsType } from '../sections-type'; +import { SectionScope, SectionVisibility } from './section-visibility.model'; import { SubmissionSectionError } from './submission-section-error.model'; +import { WorkspaceitemSectionDataType } from './workspaceitem-sections.model'; /** * An interface to represent section object state diff --git a/src/app/core/submission/models/submission-upload-file-access-condition.model.ts b/projects/dspace/core/src/lib/submission/models/submission-upload-file-access-condition.model.ts similarity index 100% rename from src/app/core/submission/models/submission-upload-file-access-condition.model.ts rename to projects/dspace/core/src/lib/submission/models/submission-upload-file-access-condition.model.ts diff --git a/src/app/core/submission/models/workflowitem.model.ts b/projects/dspace/core/src/lib/submission/models/workflowitem.model.ts similarity index 81% rename from src/app/core/submission/models/workflowitem.model.ts rename to projects/dspace/core/src/lib/submission/models/workflowitem.model.ts index 63fdda7c10b..bc4c81ca730 100644 --- a/src/app/core/submission/models/workflowitem.model.ts +++ b/projects/dspace/core/src/lib/submission/models/workflowitem.model.ts @@ -1,12 +1,6 @@ -import { - deserializeAs, - inheritSerialization, -} from 'cerialize'; +import { deserializeAs, inheritSerialization } from 'cerialize'; -import { - inheritLinkAnnotations, - typedObject, -} from '../../cache/builders/build-decorators'; +import { inheritLinkAnnotations, typedObject } from '../../cache/builders/build-decorators'; import { IDToUUIDSerializer } from '../../cache/id-to-uuid-serializer'; import { WORKFLOWITEM } from '../../eperson/models/workflowitem.resource-type'; import { SubmissionObject } from './submission-object.model'; diff --git a/src/app/core/submission/models/workspaceitem-section-accesses.model.ts b/projects/dspace/core/src/lib/submission/models/workspaceitem-section-accesses.model.ts similarity index 100% rename from src/app/core/submission/models/workspaceitem-section-accesses.model.ts rename to projects/dspace/core/src/lib/submission/models/workspaceitem-section-accesses.model.ts diff --git a/src/app/core/submission/models/workspaceitem-section-cc-license.model.ts b/projects/dspace/core/src/lib/submission/models/workspaceitem-section-cc-license.model.ts similarity index 100% rename from src/app/core/submission/models/workspaceitem-section-cc-license.model.ts rename to projects/dspace/core/src/lib/submission/models/workspaceitem-section-cc-license.model.ts diff --git a/src/app/core/submission/models/workspaceitem-section-duplicates.model.ts b/projects/dspace/core/src/lib/submission/models/workspaceitem-section-duplicates.model.ts similarity index 70% rename from src/app/core/submission/models/workspaceitem-section-duplicates.model.ts rename to projects/dspace/core/src/lib/submission/models/workspaceitem-section-duplicates.model.ts index f9441fa7905..01842135aad 100644 --- a/src/app/core/submission/models/workspaceitem-section-duplicates.model.ts +++ b/projects/dspace/core/src/lib/submission/models/workspaceitem-section-duplicates.model.ts @@ -1,7 +1,7 @@ /* * Object model for the data returned by the REST API to present potential duplicates in a submission section */ -import { Duplicate } from '../../../shared/object-list/duplicate-data/duplicate.model'; +import { Duplicate } from '../../shared/duplicate-data/duplicate.model'; export interface WorkspaceitemSectionDuplicatesObject { potentialDuplicates?: Duplicate[] diff --git a/src/app/core/submission/models/workspaceitem-section-form.model.ts b/projects/dspace/core/src/lib/submission/models/workspaceitem-section-form.model.ts similarity index 75% rename from src/app/core/submission/models/workspaceitem-section-form.model.ts rename to projects/dspace/core/src/lib/submission/models/workspaceitem-section-form.model.ts index 1462a96d811..fbde80484c3 100644 --- a/src/app/core/submission/models/workspaceitem-section-form.model.ts +++ b/projects/dspace/core/src/lib/submission/models/workspaceitem-section-form.model.ts @@ -1,4 +1,6 @@ -import { FormFieldMetadataValueObject } from '../../../shared/form/builder/models/form-field-metadata-value.model'; +import { + FormFieldMetadataValueObject, +} from '../../shared/form/models/form-field-metadata-value.model'; import { MetadataMapInterface } from '../../shared/metadata.models'; /** diff --git a/src/app/core/submission/models/workspaceitem-section-identifiers.model.ts b/projects/dspace/core/src/lib/submission/models/workspaceitem-section-identifiers.model.ts similarity index 71% rename from src/app/core/submission/models/workspaceitem-section-identifiers.model.ts rename to projects/dspace/core/src/lib/submission/models/workspaceitem-section-identifiers.model.ts index f6bfb1ae04f..cdba824f288 100644 --- a/src/app/core/submission/models/workspaceitem-section-identifiers.model.ts +++ b/projects/dspace/core/src/lib/submission/models/workspaceitem-section-identifiers.model.ts @@ -1,7 +1,7 @@ /* * Object model for the data returned by the REST API to present minted identifiers in a submission section */ -import { Identifier } from '../../../shared/object-list/identifier-data/identifier.model'; +import { Identifier } from '../../shared/identifiers-data/identifier.model'; export interface WorkspaceitemSectionIdentifiersObject { identifiers?: Identifier[] diff --git a/src/app/core/submission/models/workspaceitem-section-license.model.ts b/projects/dspace/core/src/lib/submission/models/workspaceitem-section-license.model.ts similarity index 100% rename from src/app/core/submission/models/workspaceitem-section-license.model.ts rename to projects/dspace/core/src/lib/submission/models/workspaceitem-section-license.model.ts diff --git a/src/app/core/submission/models/workspaceitem-section-sherpa-policies.model.ts b/projects/dspace/core/src/lib/submission/models/workspaceitem-section-sherpa-policies.model.ts similarity index 100% rename from src/app/core/submission/models/workspaceitem-section-sherpa-policies.model.ts rename to projects/dspace/core/src/lib/submission/models/workspaceitem-section-sherpa-policies.model.ts diff --git a/src/app/core/submission/models/workspaceitem-section-upload-file.model.ts b/projects/dspace/core/src/lib/submission/models/workspaceitem-section-upload-file.model.ts similarity index 89% rename from src/app/core/submission/models/workspaceitem-section-upload-file.model.ts rename to projects/dspace/core/src/lib/submission/models/workspaceitem-section-upload-file.model.ts index 725e646d761..34c64cc172f 100644 --- a/src/app/core/submission/models/workspaceitem-section-upload-file.model.ts +++ b/projects/dspace/core/src/lib/submission/models/workspaceitem-section-upload-file.model.ts @@ -1,4 +1,6 @@ -import { SubmissionUploadFileAccessConditionObject } from './submission-upload-file-access-condition.model'; +import { + SubmissionUploadFileAccessConditionObject, +} from './submission-upload-file-access-condition.model'; import { WorkspaceitemSectionFormObject } from './workspaceitem-section-form.model'; /** diff --git a/src/app/core/submission/models/workspaceitem-section-upload.model.ts b/projects/dspace/core/src/lib/submission/models/workspaceitem-section-upload.model.ts similarity index 100% rename from src/app/core/submission/models/workspaceitem-section-upload.model.ts rename to projects/dspace/core/src/lib/submission/models/workspaceitem-section-upload.model.ts diff --git a/src/app/core/submission/models/workspaceitem-sections.model.ts b/projects/dspace/core/src/lib/submission/models/workspaceitem-sections.model.ts similarity index 92% rename from src/app/core/submission/models/workspaceitem-sections.model.ts rename to projects/dspace/core/src/lib/submission/models/workspaceitem-sections.model.ts index 46a0590977f..974d9e0fade 100644 --- a/src/app/core/submission/models/workspaceitem-sections.model.ts +++ b/projects/dspace/core/src/lib/submission/models/workspaceitem-sections.model.ts @@ -4,7 +4,9 @@ import { WorkspaceitemSectionDuplicatesObject } from './workspaceitem-section-du import { WorkspaceitemSectionFormObject } from './workspaceitem-section-form.model'; import { WorkspaceitemSectionIdentifiersObject } from './workspaceitem-section-identifiers.model'; import { WorkspaceitemSectionLicenseObject } from './workspaceitem-section-license.model'; -import { WorkspaceitemSectionSherpaPoliciesObject } from './workspaceitem-section-sherpa-policies.model'; +import { + WorkspaceitemSectionSherpaPoliciesObject, +} from './workspaceitem-section-sherpa-policies.model'; import { WorkspaceitemSectionUploadObject } from './workspaceitem-section-upload.model'; /** diff --git a/src/app/core/submission/models/workspaceitem.model.ts b/projects/dspace/core/src/lib/submission/models/workspaceitem.model.ts similarity index 81% rename from src/app/core/submission/models/workspaceitem.model.ts rename to projects/dspace/core/src/lib/submission/models/workspaceitem.model.ts index d9aad957f27..eade6ff7e73 100644 --- a/src/app/core/submission/models/workspaceitem.model.ts +++ b/projects/dspace/core/src/lib/submission/models/workspaceitem.model.ts @@ -1,12 +1,6 @@ -import { - deserializeAs, - inheritSerialization, -} from 'cerialize'; +import { deserializeAs, inheritSerialization } from 'cerialize'; -import { - inheritLinkAnnotations, - typedObject, -} from '../../cache/builders/build-decorators'; +import { inheritLinkAnnotations, typedObject } from '../../cache/builders/build-decorators'; import { IDToUUIDSerializer } from '../../cache/id-to-uuid-serializer'; import { WORKSPACEITEM } from '../../eperson/models/workspaceitem.resource-type'; import { SubmissionObject } from './submission-object.model'; diff --git a/projects/dspace/core/src/lib/submission/resolver/index.ts b/projects/dspace/core/src/lib/submission/resolver/index.ts new file mode 100644 index 00000000000..3d3295759f3 --- /dev/null +++ b/projects/dspace/core/src/lib/submission/resolver/index.ts @@ -0,0 +1,6 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './submission-links-to-follow'; +export * from './submission-object.resolver'; diff --git a/src/app/core/submission/resolver/submission-links-to-follow.ts b/projects/dspace/core/src/lib/submission/resolver/submission-links-to-follow.ts similarity index 83% rename from src/app/core/submission/resolver/submission-links-to-follow.ts rename to projects/dspace/core/src/lib/submission/resolver/submission-links-to-follow.ts index 1ddda024c51..296ba1dbdbf 100644 --- a/src/app/core/submission/resolver/submission-links-to-follow.ts +++ b/projects/dspace/core/src/lib/submission/resolver/submission-links-to-follow.ts @@ -1,7 +1,4 @@ -import { - followLink, - FollowLinkConfig, -} from '../../../shared/utils/follow-link-config.model'; +import { followLink, FollowLinkConfig } from '../../shared/follow-link-config.model'; import { WorkflowItem } from '../models/workflowitem.model'; import { WorkspaceItem } from '../models/workspaceitem.model'; diff --git a/src/app/core/submission/resolver/submission-object.resolver.ts b/projects/dspace/core/src/lib/submission/resolver/submission-object.resolver.ts similarity index 94% rename from src/app/core/submission/resolver/submission-object.resolver.ts rename to projects/dspace/core/src/lib/submission/resolver/submission-object.resolver.ts index 3ead988c9ba..89367bc03b9 100644 --- a/src/app/core/submission/resolver/submission-object.resolver.ts +++ b/projects/dspace/core/src/lib/submission/resolver/submission-object.resolver.ts @@ -1,7 +1,4 @@ -import { - ActivatedRouteSnapshot, - RouterStateSnapshot, -} from '@angular/router'; +import { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; import { Observable } from 'rxjs'; import { switchMap } from 'rxjs/operators'; diff --git a/src/app/submission/sections/sections-type.ts b/projects/dspace/core/src/lib/submission/sections-type.ts similarity index 100% rename from src/app/submission/sections/sections-type.ts rename to projects/dspace/core/src/lib/submission/sections-type.ts diff --git a/src/app/core/submission/submission-cc-license-data.service.spec.ts b/projects/dspace/core/src/lib/submission/submission-cc-license-data.service.spec.ts similarity index 100% rename from src/app/core/submission/submission-cc-license-data.service.spec.ts rename to projects/dspace/core/src/lib/submission/submission-cc-license-data.service.spec.ts diff --git a/src/app/core/submission/submission-cc-license-data.service.ts b/projects/dspace/core/src/lib/submission/submission-cc-license-data.service.ts similarity index 94% rename from src/app/core/submission/submission-cc-license-data.service.ts rename to projects/dspace/core/src/lib/submission/submission-cc-license-data.service.ts index 2ecddf1b09d..20a47d8237e 100644 --- a/src/app/core/submission/submission-cc-license-data.service.ts +++ b/projects/dspace/core/src/lib/submission/submission-cc-license-data.service.ts @@ -1,18 +1,15 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { BaseDataService } from '../data/base/base-data.service'; -import { - FindAllData, - FindAllDataImpl, -} from '../data/base/find-all-data'; +import { FindAllData, FindAllDataImpl } from '../data/base/find-all-data'; import { FindListOptions } from '../data/find-list-options.model'; import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; import { RequestService } from '../data/request.service'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { SubmissionCcLicence } from './models/submission-cc-license.model'; diff --git a/src/app/core/submission/submission-cc-license-url-data.service.ts b/projects/dspace/core/src/lib/submission/submission-cc-license-url-data.service.ts similarity index 89% rename from src/app/core/submission/submission-cc-license-url-data.service.ts rename to projects/dspace/core/src/lib/submission/submission-cc-license-url-data.service.ts index 575f6113353..2cfcf47549d 100644 --- a/src/app/core/submission/submission-cc-license-url-data.service.ts +++ b/projects/dspace/core/src/lib/submission/submission-cc-license-url-data.service.ts @@ -1,33 +1,20 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; -import { - map, - switchMap, -} from 'rxjs/operators'; +import { map, switchMap } from 'rxjs/operators'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; import { BaseDataService } from '../data/base/base-data.service'; -import { - SearchData, - SearchDataImpl, -} from '../data/base/search-data'; +import { SearchData, SearchDataImpl } from '../data/base/search-data'; import { FindListOptions } from '../data/find-list-options.model'; import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; import { RequestService } from '../data/request.service'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; -import { - getFirstSucceededRemoteData, - getRemoteDataPayload, -} from '../shared/operators'; -import { - Field, - Option, - SubmissionCcLicence, -} from './models/submission-cc-license.model'; +import { getFirstSucceededRemoteData, getRemoteDataPayload } from '../shared/operators'; +import { Field, Option, SubmissionCcLicence } from './models/submission-cc-license.model'; import { SubmissionCcLicenceUrl } from './models/submission-cc-license-url.model'; @Injectable({ providedIn: 'root' }) diff --git a/src/app/core/submission/submission-duplicate-data.service.spec.ts b/projects/dspace/core/src/lib/submission/submission-duplicate-data.service.spec.ts similarity index 100% rename from src/app/core/submission/submission-duplicate-data.service.spec.ts rename to projects/dspace/core/src/lib/submission/submission-duplicate-data.service.spec.ts diff --git a/src/app/core/submission/submission-duplicate-data.service.ts b/projects/dspace/core/src/lib/submission/submission-duplicate-data.service.ts similarity index 94% rename from src/app/core/submission/submission-duplicate-data.service.ts rename to projects/dspace/core/src/lib/submission/submission-duplicate-data.service.ts index b3273424690..cb084407db6 100644 --- a/src/app/core/submission/submission-duplicate-data.service.ts +++ b/projects/dspace/core/src/lib/submission/submission-duplicate-data.service.ts @@ -1,20 +1,13 @@ /* eslint-disable max-classes-per-file */ -import { - Injectable, - OnDestroy, -} from '@angular/core'; +import { Injectable, OnDestroy } from '@angular/core'; +import { Duplicate } from '../shared/duplicate-data/duplicate.model'; import { Observable } from 'rxjs'; -import { Duplicate } from '../../shared/object-list/duplicate-data/duplicate.model'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; import { BaseDataService } from '../data/base/base-data.service'; -import { - SearchData, - SearchDataImpl, -} from '../data/base/search-data'; +import { SearchData, SearchDataImpl } from '../data/base/search-data'; import { FindListOptions } from '../data/find-list-options.model'; import { PaginatedList } from '../data/paginated-list.model'; import { ResponseParsingService } from '../data/parsing.service'; @@ -23,6 +16,7 @@ import { GetRequest } from '../data/request.models'; import { RequestService } from '../data/request.service'; import { RestRequest } from '../data/rest-request.model'; import { SearchResponseParsingService } from '../data/search-response-parsing.service'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { GenericConstructor } from '../shared/generic-constructor'; import { HALEndpointService } from '../shared/hal-endpoint.service'; diff --git a/src/app/core/submission/submission-field-scope-type.ts b/projects/dspace/core/src/lib/submission/submission-field-scope-type.ts similarity index 100% rename from src/app/core/submission/submission-field-scope-type.ts rename to projects/dspace/core/src/lib/submission/submission-field-scope-type.ts diff --git a/src/app/core/submission/submission-json-patch-operations.service.spec.ts b/projects/dspace/core/src/lib/submission/submission-json-patch-operations.service.spec.ts similarity index 100% rename from src/app/core/submission/submission-json-patch-operations.service.spec.ts rename to projects/dspace/core/src/lib/submission/submission-json-patch-operations.service.spec.ts diff --git a/src/app/core/submission/submission-json-patch-operations.service.ts b/projects/dspace/core/src/lib/submission/submission-json-patch-operations.service.ts similarity index 93% rename from src/app/core/submission/submission-json-patch-operations.service.ts rename to projects/dspace/core/src/lib/submission/submission-json-patch-operations.service.ts index 8d454ae2112..c05051cccc3 100644 --- a/src/app/core/submission/submission-json-patch-operations.service.ts +++ b/projects/dspace/core/src/lib/submission/submission-json-patch-operations.service.ts @@ -7,7 +7,9 @@ import { SubmissionPatchRequest } from '../data/request.models'; import { RequestService } from '../data/request.service'; import { JsonPatchOperationsService } from '../json-patch/json-patch-operations.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; -import { SubmitDataResponseDefinitionObject } from '../shared/submit-data-response-definition.model'; +import { + SubmitDataResponseDefinitionObject, +} from '../shared/submit-data-response-definition.model'; import { URLCombiner } from '../url-combiner/url-combiner'; /** diff --git a/src/app/core/submission/submission-response-parsing.service.ts b/projects/dspace/core/src/lib/submission/submission-response-parsing.service.ts similarity index 94% rename from src/app/core/submission/submission-response-parsing.service.ts rename to projects/dspace/core/src/lib/submission/submission-response-parsing.service.ts index 1e5ba027f83..c27f602bbdf 100644 --- a/src/app/core/submission/submission-response-parsing.service.ts +++ b/projects/dspace/core/src/lib/submission/submission-response-parsing.service.ts @@ -1,12 +1,8 @@ -import { Injectable } from '@angular/core'; +import { Inject, Injectable } from '@angular/core'; +import { APP_CONFIG, AppConfig } from '@dspace/config'; +import { isEmpty, isNotEmpty, isNotNull } from '@dspace/utils'; import { deepClone } from 'fast-json-patch'; -import { - isEmpty, - isNotEmpty, - isNotNull, -} from '../../shared/empty.util'; -import { FormFieldMetadataValueObject } from '../../shared/form/builder/models/form-field-metadata-value.model'; import { ObjectCacheService } from '../cache/object-cache.service'; import { ParsedResponse } from '../cache/response.models'; import { ConfigObject } from '../config/models/config.model'; @@ -15,6 +11,9 @@ import { DSOResponseParsingService } from '../data/dso-response-parsing.service' import { ResponseParsingService } from '../data/parsing.service'; import { RestRequest } from '../data/rest-request.model'; import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; +import { + FormFieldMetadataValueObject, +} from '../shared/form/models/form-field-metadata-value.model'; import { SubmissionObject } from './models/submission-object.model'; import { WorkflowItem } from './models/workflowitem.model'; import { WorkspaceItem } from './models/workspaceitem.model'; @@ -93,8 +92,10 @@ export class SubmissionResponseParsingService extends BaseResponseParsingService constructor(protected objectCache: ObjectCacheService, protected dsoParser: DSOResponseParsingService, + @Inject(APP_CONFIG) protected appConfig: AppConfig, ) { super(); + this.defaultResponseMsToLive = this.appConfig?.cache.msToLive.default; } /** diff --git a/src/app/core/submission/submission-response.model.ts b/projects/dspace/core/src/lib/submission/submission-response.model.ts similarity index 100% rename from src/app/core/submission/submission-response.model.ts rename to projects/dspace/core/src/lib/submission/submission-response.model.ts diff --git a/src/app/core/submission/submission-rest.service.spec.ts b/projects/dspace/core/src/lib/submission/submission-rest.service.spec.ts similarity index 89% rename from src/app/core/submission/submission-rest.service.spec.ts rename to projects/dspace/core/src/lib/submission/submission-rest.service.spec.ts index c4334c36b31..63456643ea7 100644 --- a/src/app/core/submission/submission-rest.service.spec.ts +++ b/projects/dspace/core/src/lib/submission/submission-rest.service.spec.ts @@ -2,10 +2,6 @@ import { getTestScheduler } from 'jasmine-marbles'; import { of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { FormFieldMetadataValueObject } from '../../shared/form/builder/models/form-field-metadata-value.model'; -import { getMockRemoteDataBuildService } from '../../shared/mocks/remote-data-build.service.mock'; -import { getMockRequestService } from '../../shared/mocks/request.service.mock'; -import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { SubmissionDeleteRequest, @@ -15,6 +11,12 @@ import { } from '../data/request.models'; import { RequestService } from '../data/request.service'; import { RequestEntry } from '../data/request-entry.model'; +import { + FormFieldMetadataValueObject, +} from '../shared/form/models/form-field-metadata-value.model'; +import { HALEndpointServiceStub } from '../testing/hal-endpoint-service.stub'; +import { getMockRemoteDataBuildService } from '../testing/remote-data-build.service.mock'; +import { getMockRequestService } from '../testing/request.service.mock'; import { SubmissionRestService } from './submission-rest.service'; describe('SubmissionRestService test suite', () => { diff --git a/src/app/core/submission/submission-rest.service.ts b/projects/dspace/core/src/lib/submission/submission-rest.service.ts similarity index 96% rename from src/app/core/submission/submission-rest.service.ts rename to projects/dspace/core/src/lib/submission/submission-rest.service.ts index cd4b3be9557..c583c0d70a9 100644 --- a/src/app/core/submission/submission-rest.service.ts +++ b/projects/dspace/core/src/lib/submission/submission-rest.service.ts @@ -1,22 +1,8 @@ import { Injectable } from '@angular/core'; -import { - Observable, - skipWhile, -} from 'rxjs'; -import { - distinctUntilChanged, - filter, - map, - mergeMap, - switchMap, - tap, -} from 'rxjs/operators'; +import { hasValue, hasValueOperator, isNotEmpty } from '@dspace/utils'; +import { Observable, skipWhile } from 'rxjs'; +import { distinctUntilChanged, filter, map, mergeMap, switchMap, tap } from 'rxjs/operators'; -import { - hasValue, - hasValueOperator, - isNotEmpty, -} from '../../shared/empty.util'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ErrorResponse } from '../cache/response.models'; import { RemoteData } from '../data/remote-data'; @@ -33,7 +19,9 @@ import { RequestError } from '../data/request-error.model'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { getFirstCompletedRemoteData } from '../shared/operators'; -import { SubmitDataResponseDefinitionObject } from '../shared/submit-data-response-definition.model'; +import { + SubmitDataResponseDefinitionObject, +} from '../shared/submit-data-response-definition.model'; import { URLCombiner } from '../url-combiner/url-combiner'; import { SubmissionResponse } from './submission-response.model'; diff --git a/src/app/core/submission/submission-scope-type.ts b/projects/dspace/core/src/lib/submission/submission-scope-type.ts similarity index 100% rename from src/app/core/submission/submission-scope-type.ts rename to projects/dspace/core/src/lib/submission/submission-scope-type.ts diff --git a/src/app/submission/sections/visibility-type.ts b/projects/dspace/core/src/lib/submission/visibility-type.ts similarity index 100% rename from src/app/submission/sections/visibility-type.ts rename to projects/dspace/core/src/lib/submission/visibility-type.ts diff --git a/projects/dspace/core/src/lib/submission/vocabularies/index.ts b/projects/dspace/core/src/lib/submission/vocabularies/index.ts new file mode 100644 index 00000000000..39413fae7d0 --- /dev/null +++ b/projects/dspace/core/src/lib/submission/vocabularies/index.ts @@ -0,0 +1,11 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './vocabulary-entry-details.data.service.spec'; +export * from './vocabulary-entry-details.data.service'; +export * from './vocabulary.data.service.spec'; +export * from './vocabulary.data.service'; +export * from './vocabulary.service.spec'; +export * from './vocabulary.service'; +export * from './models/index'; diff --git a/projects/dspace/core/src/lib/submission/vocabularies/models/index.ts b/projects/dspace/core/src/lib/submission/vocabularies/models/index.ts new file mode 100644 index 00000000000..315c77f9214 --- /dev/null +++ b/projects/dspace/core/src/lib/submission/vocabularies/models/index.ts @@ -0,0 +1,10 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './vocabularies.resource-type'; +export * from './vocabulary-entry-detail.model'; +export * from './vocabulary-entry.model'; +export * from './vocabulary-find-options.model'; +export * from './vocabulary-options.model'; +export * from './vocabulary.model'; diff --git a/src/app/core/submission/vocabularies/models/vocabularies.resource-type.ts b/projects/dspace/core/src/lib/submission/vocabularies/models/vocabularies.resource-type.ts similarity index 100% rename from src/app/core/submission/vocabularies/models/vocabularies.resource-type.ts rename to projects/dspace/core/src/lib/submission/vocabularies/models/vocabularies.resource-type.ts diff --git a/src/app/core/submission/vocabularies/models/vocabulary-entry-detail.model.ts b/projects/dspace/core/src/lib/submission/vocabularies/models/vocabulary-entry-detail.model.ts similarity index 90% rename from src/app/core/submission/vocabularies/models/vocabulary-entry-detail.model.ts rename to projects/dspace/core/src/lib/submission/vocabularies/models/vocabulary-entry-detail.model.ts index f7dff16a405..f01ceaafa7c 100644 --- a/src/app/core/submission/vocabularies/models/vocabulary-entry-detail.model.ts +++ b/projects/dspace/core/src/lib/submission/vocabularies/models/vocabulary-entry-detail.model.ts @@ -1,11 +1,7 @@ -import { - autoserialize, - deserialize, - inheritSerialization, -} from 'cerialize'; - import { typedObject } from '../../../cache/builders/build-decorators'; import { HALLink } from '../../../shared/hal-link.model'; +import { autoserialize, deserialize, inheritSerialization } from 'cerialize'; + import { VOCABULARY_ENTRY_DETAIL } from './vocabularies.resource-type'; import { VocabularyEntry } from './vocabulary-entry.model'; diff --git a/src/app/core/submission/vocabularies/models/vocabulary-entry.model.ts b/projects/dspace/core/src/lib/submission/vocabularies/models/vocabulary-entry.model.ts similarity index 82% rename from src/app/core/submission/vocabularies/models/vocabulary-entry.model.ts rename to projects/dspace/core/src/lib/submission/vocabularies/models/vocabulary-entry.model.ts index 85b310bad88..555d506888d 100644 --- a/src/app/core/submission/vocabularies/models/vocabulary-entry.model.ts +++ b/projects/dspace/core/src/lib/submission/vocabularies/models/vocabulary-entry.model.ts @@ -1,16 +1,13 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; - -import { isNotEmpty } from '../../../../shared/empty.util'; -import { PLACEHOLDER_PARENT_METADATA } from '../../../../shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-constants'; -import { OtherInformation } from '../../../../shared/form/builder/models/form-field-metadata-value.model'; -import { ListableObject } from '../../../../shared/object-collection/shared/listable-object.model'; import { typedObject } from '../../../cache/builders/build-decorators'; import { GenericConstructor } from '../../../shared/generic-constructor'; import { HALLink } from '../../../shared/hal-link.model'; import { excludeFromEquals } from '../../../utilities/equals.decorators'; +import { isNotEmpty } from '@dspace/utils'; +import { autoserialize, deserialize } from 'cerialize'; + +import { PLACEHOLDER_PARENT_METADATA } from '../../../shared/form/ds-dynamic-form-constants'; +import { OtherInformation } from '../../../shared/form/models/form-field-metadata-value.model'; +import { ListableObject } from '../../../shared/object-collection/listable-object.model'; import { VOCABULARY_ENTRY } from './vocabularies.resource-type'; /** diff --git a/src/app/core/submission/vocabularies/models/vocabulary-find-options.model.ts b/projects/dspace/core/src/lib/submission/vocabularies/models/vocabulary-find-options.model.ts similarity index 94% rename from src/app/core/submission/vocabularies/models/vocabulary-find-options.model.ts rename to projects/dspace/core/src/lib/submission/vocabularies/models/vocabulary-find-options.model.ts index f9b061f0f74..90fcdb63f8e 100644 --- a/src/app/core/submission/vocabularies/models/vocabulary-find-options.model.ts +++ b/projects/dspace/core/src/lib/submission/vocabularies/models/vocabulary-find-options.model.ts @@ -1,7 +1,7 @@ -import { isNotEmpty } from '../../../../shared/empty.util'; import { RequestParam } from '../../../cache/models/request-param.model'; import { SortOptions } from '../../../cache/models/sort-options.model'; import { FindListOptions } from '../../../data/find-list-options.model'; +import { isNotEmpty } from '@dspace/utils'; /** * Representing properties used to build a vocabulary find request diff --git a/src/app/core/submission/vocabularies/models/vocabulary-options.model.ts b/projects/dspace/core/src/lib/submission/vocabularies/models/vocabulary-options.model.ts similarity index 100% rename from src/app/core/submission/vocabularies/models/vocabulary-options.model.ts rename to projects/dspace/core/src/lib/submission/vocabularies/models/vocabulary-options.model.ts diff --git a/src/app/core/submission/vocabularies/models/vocabulary.model.ts b/projects/dspace/core/src/lib/submission/vocabularies/models/vocabulary.model.ts similarity index 87% rename from src/app/core/submission/vocabularies/models/vocabulary.model.ts rename to projects/dspace/core/src/lib/submission/vocabularies/models/vocabulary.model.ts index 9da5ade3267..199da5dea47 100644 --- a/src/app/core/submission/vocabularies/models/vocabulary.model.ts +++ b/projects/dspace/core/src/lib/submission/vocabularies/models/vocabulary.model.ts @@ -1,22 +1,13 @@ -import { - autoserialize, - deserialize, -} from 'cerialize'; -import { Observable } from 'rxjs'; - -import { - link, - typedObject, -} from '../../../cache/builders/build-decorators'; +import { link, typedObject } from '../../../cache/builders/build-decorators'; import { CacheableObject } from '../../../cache/cacheable-object.model'; import { PaginatedList } from '../../../data/paginated-list.model'; import { RemoteData } from '../../../data/remote-data'; import { HALLink } from '../../../shared/hal-link.model'; import { excludeFromEquals } from '../../../utilities/equals.decorators'; -import { - VOCABULARY, - VOCABULARY_ENTRY, -} from './vocabularies.resource-type'; +import { autoserialize, deserialize } from 'cerialize'; +import { Observable } from 'rxjs'; + +import { VOCABULARY, VOCABULARY_ENTRY } from './vocabularies.resource-type'; import { VocabularyEntry } from './vocabulary-entry.model'; /** diff --git a/src/app/core/submission/vocabularies/vocabulary-entry-details.data.service.spec.ts b/projects/dspace/core/src/lib/submission/vocabularies/vocabulary-entry-details.data.service.spec.ts similarity index 100% rename from src/app/core/submission/vocabularies/vocabulary-entry-details.data.service.spec.ts rename to projects/dspace/core/src/lib/submission/vocabularies/vocabulary-entry-details.data.service.spec.ts diff --git a/src/app/core/submission/vocabularies/vocabulary-entry-details.data.service.ts b/projects/dspace/core/src/lib/submission/vocabularies/vocabulary-entry-details.data.service.ts similarity index 94% rename from src/app/core/submission/vocabularies/vocabulary-entry-details.data.service.ts rename to projects/dspace/core/src/lib/submission/vocabularies/vocabulary-entry-details.data.service.ts index 2b1b796b721..f5b0cd0099c 100644 --- a/src/app/core/submission/vocabularies/vocabulary-entry-details.data.service.ts +++ b/projects/dspace/core/src/lib/submission/vocabularies/vocabulary-entry-details.data.service.ts @@ -8,22 +8,16 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; -import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../../cache/object-cache.service'; -import { - FindAllData, - FindAllDataImpl, -} from '../../data/base/find-all-data'; +import { FindAllData, FindAllDataImpl } from '../../data/base/find-all-data'; import { IdentifiableDataService } from '../../data/base/identifiable-data.service'; -import { - SearchData, - SearchDataImpl, -} from '../../data/base/search-data'; +import { SearchData, SearchDataImpl } from '../../data/base/search-data'; import { FindListOptions } from '../../data/find-list-options.model'; import { PaginatedList } from '../../data/paginated-list.model'; import { RemoteData } from '../../data/remote-data'; import { RequestService } from '../../data/request.service'; +import { FollowLinkConfig } from '../../shared/follow-link-config.model'; import { HALEndpointService } from '../../shared/hal-endpoint.service'; import { VocabularyEntryDetail } from './models/vocabulary-entry-detail.model'; diff --git a/src/app/core/submission/vocabularies/vocabulary.data.service.spec.ts b/projects/dspace/core/src/lib/submission/vocabularies/vocabulary.data.service.spec.ts similarity index 95% rename from src/app/core/submission/vocabularies/vocabulary.data.service.spec.ts rename to projects/dspace/core/src/lib/submission/vocabularies/vocabulary.data.service.spec.ts index 0596b21d577..22137ff6695 100644 --- a/src/app/core/submission/vocabularies/vocabulary.data.service.spec.ts +++ b/projects/dspace/core/src/lib/submission/vocabularies/vocabulary.data.service.spec.ts @@ -5,11 +5,10 @@ * * http://www.dspace.org/license/ */ -import { createSuccessfulRemoteDataObject$ } from 'src/app/shared/remote-data.utils'; - import { RequestParam } from '../../cache/models/request-param.model'; import { testFindAllDataImplementation } from '../../data/base/find-all-data.spec'; import { FindListOptions } from '../../data/find-list-options.model'; +import { createSuccessfulRemoteDataObject$ } from '../../utilities/remote-data.utils'; import { VocabularyDataService } from './vocabulary.data.service'; describe('VocabularyDataService', () => { diff --git a/src/app/core/submission/vocabularies/vocabulary.data.service.ts b/projects/dspace/core/src/lib/submission/vocabularies/vocabulary.data.service.ts similarity index 96% rename from src/app/core/submission/vocabularies/vocabulary.data.service.ts rename to projects/dspace/core/src/lib/submission/vocabularies/vocabulary.data.service.ts index 62691cef8f2..726e8d7da74 100644 --- a/src/app/core/submission/vocabularies/vocabulary.data.service.ts +++ b/projects/dspace/core/src/lib/submission/vocabularies/vocabulary.data.service.ts @@ -8,20 +8,17 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; -import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { RequestParam } from '../../cache/models/request-param.model'; import { ObjectCacheService } from '../../cache/object-cache.service'; -import { - FindAllData, - FindAllDataImpl, -} from '../../data/base/find-all-data'; +import { FindAllData, FindAllDataImpl } from '../../data/base/find-all-data'; import { IdentifiableDataService } from '../../data/base/identifiable-data.service'; import { SearchDataImpl } from '../../data/base/search-data'; import { FindListOptions } from '../../data/find-list-options.model'; import { PaginatedList } from '../../data/paginated-list.model'; import { RemoteData } from '../../data/remote-data'; import { RequestService } from '../../data/request.service'; +import { FollowLinkConfig } from '../../shared/follow-link-config.model'; import { HALEndpointService } from '../../shared/hal-endpoint.service'; import { Vocabulary } from './models/vocabulary.model'; diff --git a/src/app/core/submission/vocabularies/vocabulary.service.spec.ts b/projects/dspace/core/src/lib/submission/vocabularies/vocabulary.service.spec.ts similarity index 97% rename from src/app/core/submission/vocabularies/vocabulary.service.spec.ts rename to projects/dspace/core/src/lib/submission/vocabularies/vocabulary.service.spec.ts index 00b5c80bfda..36c19f6e51f 100644 --- a/src/app/core/submission/vocabularies/vocabulary.service.spec.ts +++ b/projects/dspace/core/src/lib/submission/vocabularies/vocabulary.service.spec.ts @@ -1,20 +1,7 @@ -import { - cold, - getTestScheduler, - hot, -} from 'jasmine-marbles'; +import { cold, getTestScheduler, hot } from 'jasmine-marbles'; import { of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { getMockHrefOnlyDataService } from '../../../shared/mocks/href-only-data.service.mock'; -import { getMockRemoteDataBuildService } from '../../../shared/mocks/remote-data-build.service.mock'; -import { getMockRequestService } from '../../../shared/mocks/request.service.mock'; -import { - createSuccessfulRemoteDataObject, - createSuccessfulRemoteDataObject$, -} from '../../../shared/remote-data.utils'; -import { ObjectCacheServiceStub } from '../../../shared/testing/object-cache-service.stub'; -import { createPaginatedList } from '../../../shared/testing/utils.test'; import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { RequestParam } from '../../cache/models/request-param.model'; import { ObjectCacheService } from '../../cache/object-cache.service'; @@ -25,6 +12,15 @@ import { RequestService } from '../../data/request.service'; import { RequestEntry } from '../../data/request-entry.model'; import { HALEndpointService } from '../../shared/hal-endpoint.service'; import { PageInfo } from '../../shared/page-info.model'; +import { getMockHrefOnlyDataService } from '../../testing/href-only-data.service.mock'; +import { ObjectCacheServiceStub } from '../../testing/object-cache-service.stub'; +import { getMockRemoteDataBuildService } from '../../testing/remote-data-build.service.mock'; +import { getMockRequestService } from '../../testing/request.service.mock'; +import { createPaginatedList } from '../../testing/utils.test'; +import { + createSuccessfulRemoteDataObject, + createSuccessfulRemoteDataObject$, +} from '../../utilities/remote-data.utils'; import { VocabularyFindOptions } from './models/vocabulary-find-options.model'; import { VocabularyOptions } from './models/vocabulary-options.model'; import { VocabularyDataService } from './vocabulary.data.service'; diff --git a/src/app/core/submission/vocabularies/vocabulary.service.ts b/projects/dspace/core/src/lib/submission/vocabularies/vocabulary.service.ts similarity index 98% rename from src/app/core/submission/vocabularies/vocabulary.service.ts rename to projects/dspace/core/src/lib/submission/vocabularies/vocabulary.service.ts index e2d18975cd7..806b109e27f 100644 --- a/src/app/core/submission/vocabularies/vocabulary.service.ts +++ b/projects/dspace/core/src/lib/submission/vocabularies/vocabulary.service.ts @@ -1,21 +1,14 @@ import { Injectable } from '@angular/core'; +import { isNotEmpty } from '@dspace/utils'; import { Observable } from 'rxjs'; -import { - map, - mergeMap, - switchMap, -} from 'rxjs/operators'; +import { map, mergeMap, switchMap } from 'rxjs/operators'; -import { isNotEmpty } from '../../../shared/empty.util'; -import { - followLink, - FollowLinkConfig, -} from '../../../shared/utils/follow-link-config.model'; import { RequestParam } from '../../cache/models/request-param.model'; import { FindListOptions } from '../../data/find-list-options.model'; import { PaginatedList } from '../../data/paginated-list.model'; import { RemoteData } from '../../data/remote-data'; import { RequestService } from '../../data/request.service'; +import { followLink, FollowLinkConfig } from '../../shared/follow-link-config.model'; import { getFirstSucceededRemoteDataPayload, getFirstSucceededRemoteListPayload, diff --git a/src/app/core/submission/workflowitem-data.service.spec.ts b/projects/dspace/core/src/lib/submission/workflowitem-data.service.spec.ts similarity index 93% rename from src/app/core/submission/workflowitem-data.service.spec.ts rename to projects/dspace/core/src/lib/submission/workflowitem-data.service.spec.ts index 7353cceb77a..2f92e6fd425 100644 --- a/src/app/core/submission/workflowitem-data.service.spec.ts +++ b/projects/dspace/core/src/lib/submission/workflowitem-data.service.spec.ts @@ -1,16 +1,9 @@ import { HttpClient } from '@angular/common/http'; import { Store } from '@ngrx/store'; -import { - cold, - getTestScheduler, - hot, -} from 'jasmine-marbles'; +import { cold, getTestScheduler, hot } from 'jasmine-marbles'; import { of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { getMockHrefOnlyDataService } from '../../shared/mocks/href-only-data.service.mock'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { createSuccessfulRemoteDataObject } from '../../shared/remote-data.utils'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { RestResponse } from '../cache/response.models'; @@ -18,9 +11,12 @@ import { CoreState } from '../core-state.model'; import { HrefOnlyDataService } from '../data/href-only-data.service'; import { RequestService } from '../data/request.service'; import { RequestEntry } from '../data/request-entry.model'; +import { NotificationsService } from '../notification-system/notifications.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { Item } from '../shared/item.model'; import { PageInfo } from '../shared/page-info.model'; +import { getMockHrefOnlyDataService } from '../testing/href-only-data.service.mock'; +import { createSuccessfulRemoteDataObject } from '../utilities/remote-data.utils'; import { WorkflowItem } from './models/workflowitem.model'; import { WorkflowItemDataService } from './workflowitem-data.service'; diff --git a/src/app/core/submission/workflowitem-data.service.ts b/projects/dspace/core/src/lib/submission/workflowitem-data.service.ts similarity index 94% rename from src/app/core/submission/workflowitem-data.service.ts rename to projects/dspace/core/src/lib/submission/workflowitem-data.service.ts index bb0acb57610..774a98ef496 100644 --- a/src/app/core/submission/workflowitem-data.service.ts +++ b/projects/dspace/core/src/lib/submission/workflowitem-data.service.ts @@ -1,30 +1,21 @@ import { Injectable } from '@angular/core'; +import { hasValue } from '@dspace/utils'; import { Observable } from 'rxjs'; -import { - find, - map, -} from 'rxjs/operators'; +import { find, map } from 'rxjs/operators'; -import { hasValue } from '../../shared/empty.util'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; -import { - DeleteData, - DeleteDataImpl, -} from '../data/base/delete-data'; +import { DeleteData, DeleteDataImpl } from '../data/base/delete-data'; import { IdentifiableDataService } from '../data/base/identifiable-data.service'; -import { - SearchData, - SearchDataImpl, -} from '../data/base/search-data'; +import { SearchData, SearchDataImpl } from '../data/base/search-data'; import { FindListOptions } from '../data/find-list-options.model'; import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; import { DeleteByIDRequest } from '../data/request.models'; import { RequestService } from '../data/request.service'; +import { NotificationsService } from '../notification-system/notifications.service'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { NoContent } from '../shared/NoContent.model'; import { getFirstCompletedRemoteData } from '../shared/operators'; diff --git a/src/app/core/submission/workspaceitem-data.service.spec.ts b/projects/dspace/core/src/lib/submission/workspaceitem-data.service.spec.ts similarity index 94% rename from src/app/core/submission/workspaceitem-data.service.spec.ts rename to projects/dspace/core/src/lib/submission/workspaceitem-data.service.spec.ts index 9d5aeb98cd7..3ec215bf092 100644 --- a/src/app/core/submission/workspaceitem-data.service.spec.ts +++ b/projects/dspace/core/src/lib/submission/workspaceitem-data.service.spec.ts @@ -1,24 +1,11 @@ -import { - HttpClient, - HttpHeaders, -} from '@angular/common/http'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; import { waitForAsync } from '@angular/core/testing'; import { Store } from '@ngrx/store'; -import { - cold, - getTestScheduler, - hot, -} from 'jasmine-marbles'; +import { cold, getTestScheduler, hot } from 'jasmine-marbles'; import { of } from 'rxjs'; import { map } from 'rxjs/operators'; import { TestScheduler } from 'rxjs/testing'; -import { getMockHrefOnlyDataService } from '../../shared/mocks/href-only-data.service.mock'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { - createSuccessfulRemoteDataObject, - createSuccessfulRemoteDataObject$, -} from '../../shared/remote-data.utils'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; @@ -33,9 +20,15 @@ import { PostRequest } from '../data/request.models'; import { RequestService } from '../data/request.service'; import { RequestEntry } from '../data/request-entry.model'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; +import { NotificationsService } from '../notification-system/notifications.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { Item } from '../shared/item.model'; import { PageInfo } from '../shared/page-info.model'; +import { getMockHrefOnlyDataService } from '../testing/href-only-data.service.mock'; +import { + createSuccessfulRemoteDataObject, + createSuccessfulRemoteDataObject$, +} from '../utilities/remote-data.utils'; import { WorkspaceItem } from './models/workspaceitem.model'; import { WorkspaceitemDataService } from './workspaceitem-data.service'; diff --git a/src/app/core/submission/workspaceitem-data.service.ts b/projects/dspace/core/src/lib/submission/workspaceitem-data.service.ts similarity index 93% rename from src/app/core/submission/workspaceitem-data.service.ts rename to projects/dspace/core/src/lib/submission/workspaceitem-data.service.ts index 17aafaf6514..a94cb239427 100644 --- a/src/app/core/submission/workspaceitem-data.service.ts +++ b/projects/dspace/core/src/lib/submission/workspaceitem-data.service.ts @@ -1,31 +1,17 @@ -import { - HttpClient, - HttpHeaders, -} from '@angular/common/http'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; +import { hasValue } from '@dspace/utils'; import { Store } from '@ngrx/store'; import { Observable } from 'rxjs'; -import { - find, - map, -} from 'rxjs/operators'; +import { find, map } from 'rxjs/operators'; -import { hasValue } from '../../shared/empty.util'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; import { CoreState } from '../core-state.model'; -import { - DeleteData, - DeleteDataImpl, -} from '../data/base/delete-data'; +import { DeleteData, DeleteDataImpl } from '../data/base/delete-data'; import { IdentifiableDataService } from '../data/base/identifiable-data.service'; -import { - SearchData, - SearchDataImpl, -} from '../data/base/search-data'; +import { SearchData, SearchDataImpl } from '../data/base/search-data'; import { DSOChangeAnalyzer } from '../data/dso-change-analyzer.service'; import { FindListOptions } from '../data/find-list-options.model'; import { PaginatedList } from '../data/paginated-list.model'; @@ -33,6 +19,8 @@ import { RemoteData } from '../data/remote-data'; import { PostRequest } from '../data/request.models'; import { RequestService } from '../data/request.service'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; +import { NotificationsService } from '../notification-system/notifications.service'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { NoContent } from '../shared/NoContent.model'; import { WorkspaceItem } from './models/workspaceitem.model'; diff --git a/projects/dspace/core/src/lib/supervision-order/index.ts b/projects/dspace/core/src/lib/supervision-order/index.ts new file mode 100644 index 00000000000..5bb6a0f33d3 --- /dev/null +++ b/projects/dspace/core/src/lib/supervision-order/index.ts @@ -0,0 +1,7 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './supervision-order-data.service.spec'; +export * from './supervision-order-data.service'; +export * from './models/index'; diff --git a/src/app/core/supervision-order/models/action-type.model.ts b/projects/dspace/core/src/lib/supervision-order/models/action-type.model.ts similarity index 85% rename from src/app/core/supervision-order/models/action-type.model.ts rename to projects/dspace/core/src/lib/supervision-order/models/action-type.model.ts index 0e556890698..b177cf8cf79 100644 --- a/src/app/core/supervision-order/models/action-type.model.ts +++ b/projects/dspace/core/src/lib/supervision-order/models/action-type.model.ts @@ -1,7 +1,7 @@ /** - * Enum representing the Action Type of a Resource Policy + * Enum representing the Action Type of a Supervision Order */ -export enum ActionType { +export enum SupervisionOrderActionType { /** * Action of reading, viewing or downloading something */ diff --git a/projects/dspace/core/src/lib/supervision-order/models/index.ts b/projects/dspace/core/src/lib/supervision-order/models/index.ts new file mode 100644 index 00000000000..1086c9ea805 --- /dev/null +++ b/projects/dspace/core/src/lib/supervision-order/models/index.ts @@ -0,0 +1,7 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './action-type.model'; +export * from './supervision-order.model'; +export * from './supervision-order.resource-type'; diff --git a/src/app/core/supervision-order/models/supervision-order.model.ts b/projects/dspace/core/src/lib/supervision-order/models/supervision-order.model.ts similarity index 92% rename from src/app/core/supervision-order/models/supervision-order.model.ts rename to projects/dspace/core/src/lib/supervision-order/models/supervision-order.model.ts index 6426f62aeca..266f741a7f7 100644 --- a/src/app/core/supervision-order/models/supervision-order.model.ts +++ b/projects/dspace/core/src/lib/supervision-order/models/supervision-order.model.ts @@ -1,14 +1,7 @@ -import { - autoserialize, - deserialize, - deserializeAs, -} from 'cerialize'; +import { autoserialize, deserialize, deserializeAs } from 'cerialize'; import { Observable } from 'rxjs'; -import { - link, - typedObject, -} from '../../cache/builders/build-decorators'; +import { link, typedObject } from '../../cache/builders/build-decorators'; import { CacheableObject } from '../../cache/cacheable-object.model'; import { IDToUUIDSerializer } from '../../cache/id-to-uuid-serializer'; import { RemoteData } from '../../data/remote-data'; diff --git a/src/app/core/supervision-order/models/supervision-order.resource-type.ts b/projects/dspace/core/src/lib/supervision-order/models/supervision-order.resource-type.ts similarity index 100% rename from src/app/core/supervision-order/models/supervision-order.resource-type.ts rename to projects/dspace/core/src/lib/supervision-order/models/supervision-order.resource-type.ts diff --git a/src/app/core/supervision-order/supervision-order-data.service.spec.ts b/projects/dspace/core/src/lib/supervision-order/supervision-order-data.service.spec.ts similarity index 95% rename from src/app/core/supervision-order/supervision-order-data.service.spec.ts rename to projects/dspace/core/src/lib/supervision-order/supervision-order-data.service.spec.ts index 7985618636d..841ca386213 100644 --- a/src/app/core/supervision-order/supervision-order-data.service.spec.ts +++ b/projects/dspace/core/src/lib/supervision-order/supervision-order-data.service.spec.ts @@ -1,14 +1,7 @@ -import { - cold, - getTestScheduler, - hot, -} from 'jasmine-marbles'; +import { cold, getTestScheduler, hot } from 'jasmine-marbles'; import { of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { createSuccessfulRemoteDataObject } from '../../shared/remote-data.utils'; -import { ObjectCacheServiceStub } from '../../shared/testing/object-cache-service.stub'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; @@ -18,9 +11,12 @@ import { buildPaginatedList } from '../data/paginated-list.model'; import { RequestService } from '../data/request.service'; import { RequestEntry } from '../data/request-entry.model'; import { GroupDataService } from '../eperson/group-data.service'; +import { NotificationsService } from '../notification-system/notifications.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { PageInfo } from '../shared/page-info.model'; -import { ActionType } from './models/action-type.model'; +import { ObjectCacheServiceStub } from '../testing/object-cache-service.stub'; +import { createSuccessfulRemoteDataObject } from '../utilities/remote-data.utils'; +import { SupervisionOrderActionType } from './models/action-type.model'; import { SupervisionOrderDataService } from './supervision-order-data.service'; describe('SupervisionOrderService', () => { @@ -37,7 +33,7 @@ describe('SupervisionOrderService', () => { id: '1', name: null, description: null, - action: ActionType.READ, + action: SupervisionOrderActionType.READ, startDate: null, endDate: null, type: 'supervisionOrder', @@ -56,7 +52,7 @@ describe('SupervisionOrderService', () => { id: '2', name: null, description: null, - action: ActionType.WRITE, + action: SupervisionOrderActionType.WRITE, startDate: null, endDate: null, type: 'supervisionOrder', diff --git a/src/app/core/supervision-order/supervision-order-data.service.ts b/projects/dspace/core/src/lib/supervision-order/supervision-order-data.service.ts similarity index 96% rename from src/app/core/supervision-order/supervision-order-data.service.ts rename to projects/dspace/core/src/lib/supervision-order/supervision-order-data.service.ts index 72a634604c0..00aef5107c6 100644 --- a/src/app/core/supervision-order/supervision-order-data.service.ts +++ b/projects/dspace/core/src/lib/supervision-order/supervision-order-data.service.ts @@ -1,14 +1,9 @@ import { HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; +import { isNotEmpty } from '@dspace/utils'; import { Observable } from 'rxjs'; -import { - first, - map, -} from 'rxjs/operators'; +import { first, map } from 'rxjs/operators'; -import { isNotEmpty } from '../../shared/empty.util'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { ObjectCacheService } from '../cache/object-cache.service'; @@ -24,9 +19,13 @@ import { ResponseParsingService } from '../data/parsing.service'; import { RemoteData } from '../data/remote-data'; import { PutRequest } from '../data/request.models'; import { RequestService } from '../data/request.service'; -import { StatusCodeOnlyResponseParsingService } from '../data/status-code-only-response-parsing.service'; +import { + StatusCodeOnlyResponseParsingService, +} from '../data/status-code-only-response-parsing.service'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; import { GroupDataService } from '../eperson/group-data.service'; +import { NotificationsService } from '../notification-system/notifications.service'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { GenericConstructor } from '../shared/generic-constructor'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { NoContent } from '../shared/NoContent.model'; diff --git a/src/app/core/tasks/claimed-task-data.service.spec.ts b/projects/dspace/core/src/lib/tasks/claimed-task-data.service.spec.ts similarity index 94% rename from src/app/core/tasks/claimed-task-data.service.spec.ts rename to projects/dspace/core/src/lib/tasks/claimed-task-data.service.spec.ts index 3cbb3c17eed..5a2a6eb7767 100644 --- a/src/app/core/tasks/claimed-task-data.service.spec.ts +++ b/projects/dspace/core/src/lib/tasks/claimed-task-data.service.spec.ts @@ -3,14 +3,14 @@ import { getTestScheduler } from 'jasmine-marbles'; import { of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { getMockRequestService } from '../../shared/mocks/request.service.mock'; -import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; -import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { testSearchDataImplementation } from '../data/base/search-data.spec'; import { FindListOptions } from '../data/find-list-options.model'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; +import { HALEndpointServiceStub } from '../testing/hal-endpoint-service.stub'; +import { getMockRequestService } from '../testing/request.service.mock'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; import { ClaimedTaskDataService } from './claimed-task-data.service'; describe('ClaimedTaskDataService', () => { diff --git a/src/app/core/tasks/claimed-task-data.service.ts b/projects/dspace/core/src/lib/tasks/claimed-task-data.service.ts similarity index 100% rename from src/app/core/tasks/claimed-task-data.service.ts rename to projects/dspace/core/src/lib/tasks/claimed-task-data.service.ts diff --git a/projects/dspace/core/src/lib/tasks/index.ts b/projects/dspace/core/src/lib/tasks/index.ts new file mode 100644 index 00000000000..d6c18936577 --- /dev/null +++ b/projects/dspace/core/src/lib/tasks/index.ts @@ -0,0 +1,12 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './claimed-task-data.service.spec'; +export * from './claimed-task-data.service'; +export * from './pool-task-data.service.spec'; +export * from './pool-task-data.service'; +export * from './task-response-parsing.service'; +export * from './tasks.service.spec'; +export * from './tasks.service'; +export * from './models/index'; diff --git a/src/app/core/tasks/models/advanced-workflow-info.model.ts b/projects/dspace/core/src/lib/tasks/models/advanced-workflow-info.model.ts similarity index 100% rename from src/app/core/tasks/models/advanced-workflow-info.model.ts rename to projects/dspace/core/src/lib/tasks/models/advanced-workflow-info.model.ts diff --git a/src/app/core/tasks/models/advanced-workflow-info.resource-type.ts b/projects/dspace/core/src/lib/tasks/models/advanced-workflow-info.resource-type.ts similarity index 100% rename from src/app/core/tasks/models/advanced-workflow-info.resource-type.ts rename to projects/dspace/core/src/lib/tasks/models/advanced-workflow-info.resource-type.ts diff --git a/src/app/core/tasks/models/claimed-task-object.model.ts b/projects/dspace/core/src/lib/tasks/models/claimed-task-object.model.ts similarity index 79% rename from src/app/core/tasks/models/claimed-task-object.model.ts rename to projects/dspace/core/src/lib/tasks/models/claimed-task-object.model.ts index 456c01cc79c..36a643be485 100644 --- a/src/app/core/tasks/models/claimed-task-object.model.ts +++ b/projects/dspace/core/src/lib/tasks/models/claimed-task-object.model.ts @@ -1,9 +1,6 @@ import { inheritSerialization } from 'cerialize'; -import { - inheritLinkAnnotations, - typedObject, -} from '../../cache/builders/build-decorators'; +import { inheritLinkAnnotations, typedObject } from '../../cache/builders/build-decorators'; import { CLAIMED_TASK } from './claimed-task-object.resource-type'; import { TaskObject } from './task-object.model'; diff --git a/src/app/core/tasks/models/claimed-task-object.resource-type.ts b/projects/dspace/core/src/lib/tasks/models/claimed-task-object.resource-type.ts similarity index 100% rename from src/app/core/tasks/models/claimed-task-object.resource-type.ts rename to projects/dspace/core/src/lib/tasks/models/claimed-task-object.resource-type.ts diff --git a/projects/dspace/core/src/lib/tasks/models/index.ts b/projects/dspace/core/src/lib/tasks/models/index.ts new file mode 100644 index 00000000000..80daae69c99 --- /dev/null +++ b/projects/dspace/core/src/lib/tasks/models/index.ts @@ -0,0 +1,17 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './advanced-workflow-info.model'; +export * from './advanced-workflow-info.resource-type'; +export * from './claimed-task-object.model'; +export * from './claimed-task-object.resource-type'; +export * from './pool-task-object.model'; +export * from './pool-task-object.resource-type'; +export * from './process-task-response'; +export * from './rating-advanced-workflow-info.model'; +export * from './select-reviewer-advanced-workflow-info.model'; +export * from './task-object.model'; +export * from './task-object.resource-type'; +export * from './workflow-action-object.model'; +export * from './workflow-action-object.resource-type'; diff --git a/src/app/core/tasks/models/pool-task-object.model.ts b/projects/dspace/core/src/lib/tasks/models/pool-task-object.model.ts similarity index 78% rename from src/app/core/tasks/models/pool-task-object.model.ts rename to projects/dspace/core/src/lib/tasks/models/pool-task-object.model.ts index a3fb26a4c20..e339c3c33bf 100644 --- a/src/app/core/tasks/models/pool-task-object.model.ts +++ b/projects/dspace/core/src/lib/tasks/models/pool-task-object.model.ts @@ -1,9 +1,6 @@ import { inheritSerialization } from 'cerialize'; -import { - inheritLinkAnnotations, - typedObject, -} from '../../cache/builders/build-decorators'; +import { inheritLinkAnnotations, typedObject } from '../../cache/builders/build-decorators'; import { POOL_TASK } from './pool-task-object.resource-type'; import { TaskObject } from './task-object.model'; diff --git a/src/app/core/tasks/models/pool-task-object.resource-type.ts b/projects/dspace/core/src/lib/tasks/models/pool-task-object.resource-type.ts similarity index 100% rename from src/app/core/tasks/models/pool-task-object.resource-type.ts rename to projects/dspace/core/src/lib/tasks/models/pool-task-object.resource-type.ts diff --git a/src/app/core/tasks/models/process-task-response.ts b/projects/dspace/core/src/lib/tasks/models/process-task-response.ts similarity index 100% rename from src/app/core/tasks/models/process-task-response.ts rename to projects/dspace/core/src/lib/tasks/models/process-task-response.ts diff --git a/src/app/core/tasks/models/rating-advanced-workflow-info.model.ts b/projects/dspace/core/src/lib/tasks/models/rating-advanced-workflow-info.model.ts similarity index 91% rename from src/app/core/tasks/models/rating-advanced-workflow-info.model.ts rename to projects/dspace/core/src/lib/tasks/models/rating-advanced-workflow-info.model.ts index 6ecb0e6dbfe..0a7ed6a225f 100644 --- a/src/app/core/tasks/models/rating-advanced-workflow-info.model.ts +++ b/projects/dspace/core/src/lib/tasks/models/rating-advanced-workflow-info.model.ts @@ -1,7 +1,4 @@ -import { - autoserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, inheritSerialization } from 'cerialize'; import { typedObject } from '../../cache/builders/build-decorators'; import { ResourceType } from '../../shared/resource-type'; diff --git a/src/app/core/tasks/models/select-reviewer-advanced-workflow-info.model.ts b/projects/dspace/core/src/lib/tasks/models/select-reviewer-advanced-workflow-info.model.ts similarity index 89% rename from src/app/core/tasks/models/select-reviewer-advanced-workflow-info.model.ts rename to projects/dspace/core/src/lib/tasks/models/select-reviewer-advanced-workflow-info.model.ts index 307caeaa1fe..03384de049f 100644 --- a/src/app/core/tasks/models/select-reviewer-advanced-workflow-info.model.ts +++ b/projects/dspace/core/src/lib/tasks/models/select-reviewer-advanced-workflow-info.model.ts @@ -1,7 +1,4 @@ -import { - autoserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, inheritSerialization } from 'cerialize'; import { typedObject } from '../../cache/builders/build-decorators'; import { ResourceType } from '../../shared/resource-type'; diff --git a/src/app/core/tasks/models/task-object.model.ts b/projects/dspace/core/src/lib/tasks/models/task-object.model.ts similarity index 93% rename from src/app/core/tasks/models/task-object.model.ts rename to projects/dspace/core/src/lib/tasks/models/task-object.model.ts index 0e5022d5797..d8fec1e1225 100644 --- a/src/app/core/tasks/models/task-object.model.ts +++ b/projects/dspace/core/src/lib/tasks/models/task-object.model.ts @@ -1,14 +1,7 @@ -import { - autoserialize, - deserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, deserialize, inheritSerialization } from 'cerialize'; import { Observable } from 'rxjs'; -import { - link, - typedObject, -} from '../../cache/builders/build-decorators'; +import { link, typedObject } from '../../cache/builders/build-decorators'; import { CacheableObject } from '../../cache/cacheable-object.model'; import { RemoteData } from '../../data/remote-data'; import { EPerson } from '../../eperson/models/eperson.model'; diff --git a/src/app/core/tasks/models/task-object.resource-type.ts b/projects/dspace/core/src/lib/tasks/models/task-object.resource-type.ts similarity index 100% rename from src/app/core/tasks/models/task-object.resource-type.ts rename to projects/dspace/core/src/lib/tasks/models/task-object.resource-type.ts diff --git a/src/app/core/tasks/models/workflow-action-object.model.ts b/projects/dspace/core/src/lib/tasks/models/workflow-action-object.model.ts similarity index 93% rename from src/app/core/tasks/models/workflow-action-object.model.ts rename to projects/dspace/core/src/lib/tasks/models/workflow-action-object.model.ts index a1010008851..675f227c5d6 100644 --- a/src/app/core/tasks/models/workflow-action-object.model.ts +++ b/projects/dspace/core/src/lib/tasks/models/workflow-action-object.model.ts @@ -1,7 +1,4 @@ -import { - autoserialize, - inheritSerialization, -} from 'cerialize'; +import { autoserialize, inheritSerialization } from 'cerialize'; import { typedObject } from '../../cache/builders/build-decorators'; import { DSpaceObject } from '../../shared/dspace-object.model'; diff --git a/src/app/core/tasks/models/workflow-action-object.resource-type.ts b/projects/dspace/core/src/lib/tasks/models/workflow-action-object.resource-type.ts similarity index 100% rename from src/app/core/tasks/models/workflow-action-object.resource-type.ts rename to projects/dspace/core/src/lib/tasks/models/workflow-action-object.resource-type.ts diff --git a/src/app/core/tasks/pool-task-data.service.spec.ts b/projects/dspace/core/src/lib/tasks/pool-task-data.service.spec.ts similarity index 92% rename from src/app/core/tasks/pool-task-data.service.spec.ts rename to projects/dspace/core/src/lib/tasks/pool-task-data.service.spec.ts index 32c900e1ee4..48bd9f408a2 100644 --- a/src/app/core/tasks/pool-task-data.service.spec.ts +++ b/projects/dspace/core/src/lib/tasks/pool-task-data.service.spec.ts @@ -3,14 +3,14 @@ import { getTestScheduler } from 'jasmine-marbles'; import { of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { getMockRequestService } from '../../shared/mocks/request.service.mock'; -import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; -import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestParam } from '../cache/models/request-param.model'; import { testSearchDataImplementation } from '../data/base/search-data.spec'; import { FindListOptions } from '../data/find-list-options.model'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; +import { HALEndpointServiceStub } from '../testing/hal-endpoint-service.stub'; +import { getMockRequestService } from '../testing/request.service.mock'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; import { PoolTaskDataService } from './pool-task-data.service'; describe('PoolTaskDataService', () => { diff --git a/src/app/core/tasks/pool-task-data.service.ts b/projects/dspace/core/src/lib/tasks/pool-task-data.service.ts similarity index 100% rename from src/app/core/tasks/pool-task-data.service.ts rename to projects/dspace/core/src/lib/tasks/pool-task-data.service.ts diff --git a/src/app/core/tasks/task-response-parsing.service.ts b/projects/dspace/core/src/lib/tasks/task-response-parsing.service.ts similarity index 79% rename from src/app/core/tasks/task-response-parsing.service.ts rename to projects/dspace/core/src/lib/tasks/task-response-parsing.service.ts index a8213e0a90f..0e2ca5ca2ad 100644 --- a/src/app/core/tasks/task-response-parsing.service.ts +++ b/projects/dspace/core/src/lib/tasks/task-response-parsing.service.ts @@ -1,4 +1,5 @@ -import { Injectable } from '@angular/core'; +import { Inject, Injectable } from '@angular/core'; +import { APP_CONFIG, AppConfig } from '@dspace/config'; import { ObjectCacheService } from '../cache/object-cache.service'; import { ParsedResponse } from '../cache/response.models'; @@ -20,8 +21,12 @@ export class TaskResponseParsingService extends BaseResponseParsingService imple * * @param {ObjectCacheService} objectCache */ - constructor(protected objectCache: ObjectCacheService) { + constructor( + protected objectCache: ObjectCacheService, + @Inject(APP_CONFIG) protected appConfig: AppConfig, + ) { super(); + this.defaultResponseMsToLive = this.appConfig?.cache.msToLive.default; } /** diff --git a/src/app/core/tasks/tasks.service.spec.ts b/projects/dspace/core/src/lib/tasks/tasks.service.spec.ts similarity index 92% rename from src/app/core/tasks/tasks.service.spec.ts rename to projects/dspace/core/src/lib/tasks/tasks.service.spec.ts index 8edab725315..a5b535b68f2 100644 --- a/src/app/core/tasks/tasks.service.spec.ts +++ b/projects/dspace/core/src/lib/tasks/tasks.service.spec.ts @@ -1,30 +1,24 @@ /* eslint-disable max-classes-per-file */ import { HttpHeaders } from '@angular/common/http'; import { Store } from '@ngrx/store'; -import { - compare, - Operation, -} from 'fast-json-patch'; +import { compare, Operation } from 'fast-json-patch'; import { getTestScheduler } from 'jasmine-marbles'; import { of } from 'rxjs'; import { TestScheduler } from 'rxjs/testing'; -import { getMockRemoteDataBuildService } from '../../shared/mocks/remote-data-build.service.mock'; -import { getMockRequestService } from '../../shared/mocks/request.service.mock'; -import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { CoreState } from '../core-state.model'; import { testSearchDataImplementation } from '../data/base/search-data.spec'; import { ChangeAnalyzer } from '../data/change-analyzer'; import { FindListOptions } from '../data/find-list-options.model'; -import { - TaskDeleteRequest, - TaskPostRequest, -} from '../data/request.models'; +import { TaskDeleteRequest, TaskPostRequest } from '../data/request.models'; import { RequestService } from '../data/request.service'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; +import { HALEndpointServiceStub } from '../testing/hal-endpoint-service.stub'; +import { getMockRemoteDataBuildService } from '../testing/remote-data-build.service.mock'; +import { getMockRequestService } from '../testing/request.service.mock'; import { TaskObject } from './models/task-object.model'; import { TasksService } from './tasks.service'; diff --git a/src/app/core/tasks/tasks.service.ts b/projects/dspace/core/src/lib/tasks/tasks.service.ts similarity index 95% rename from src/app/core/tasks/tasks.service.ts rename to projects/dspace/core/src/lib/tasks/tasks.service.ts index 2920fe4ac8d..cb550772020 100644 --- a/src/app/core/tasks/tasks.service.ts +++ b/projects/dspace/core/src/lib/tasks/tasks.service.ts @@ -1,27 +1,13 @@ import { HttpHeaders } from '@angular/common/http'; +import { hasValue, isNotEmpty } from '@dspace/utils'; import { Observable } from 'rxjs'; -import { - distinctUntilChanged, - filter, - find, - map, - mergeMap, - tap, -} from 'rxjs/operators'; +import { distinctUntilChanged, filter, find, map, mergeMap, tap } from 'rxjs/operators'; -import { - hasValue, - isNotEmpty, -} from '../../shared/empty.util'; -import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { CacheableObject } from '../cache/cacheable-object.model'; import { ObjectCacheService } from '../cache/object-cache.service'; import { IdentifiableDataService } from '../data/base/identifiable-data.service'; -import { - SearchData, - SearchDataImpl, -} from '../data/base/search-data'; +import { SearchData, SearchDataImpl } from '../data/base/search-data'; import { FindListOptions } from '../data/find-list-options.model'; import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; @@ -33,11 +19,9 @@ import { } from '../data/request.models'; import { RequestService } from '../data/request.service'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; -import { - getAllCompletedRemoteData, - getFirstCompletedRemoteData, -} from '../shared/operators'; +import { getAllCompletedRemoteData, getFirstCompletedRemoteData } from '../shared/operators'; import { ProcessTaskResponse } from './models/process-task-response'; /** diff --git a/src/app/shared/testing/action.mock.ts b/projects/dspace/core/src/lib/testing/action.mock.ts similarity index 100% rename from src/app/shared/testing/action.mock.ts rename to projects/dspace/core/src/lib/testing/action.mock.ts diff --git a/src/app/shared/mocks/active-router.mock.ts b/projects/dspace/core/src/lib/testing/active-router.mock.ts similarity index 100% rename from src/app/shared/mocks/active-router.mock.ts rename to projects/dspace/core/src/lib/testing/active-router.mock.ts diff --git a/src/app/shared/testing/active-router.stub.ts b/projects/dspace/core/src/lib/testing/active-router.stub.ts similarity index 94% rename from src/app/shared/testing/active-router.stub.ts rename to projects/dspace/core/src/lib/testing/active-router.stub.ts index a9c1f0edd97..deded897049 100644 --- a/src/app/shared/testing/active-router.stub.ts +++ b/projects/dspace/core/src/lib/testing/active-router.stub.ts @@ -1,9 +1,4 @@ -import { - ActivatedRoute, - convertToParamMap, - Data, - Params, -} from '@angular/router'; +import { ActivatedRoute, convertToParamMap, Data, Params } from '@angular/router'; import { BehaviorSubject } from 'rxjs'; import { map } from 'rxjs/operators'; diff --git a/src/app/shared/mocks/admin-guard.service.mock.ts b/projects/dspace/core/src/lib/testing/admin-guard.service.mock.ts similarity index 94% rename from src/app/shared/mocks/admin-guard.service.mock.ts rename to projects/dspace/core/src/lib/testing/admin-guard.service.mock.ts index ee7b5993245..c326f24cfbc 100644 --- a/src/app/shared/mocks/admin-guard.service.mock.ts +++ b/projects/dspace/core/src/lib/testing/admin-guard.service.mock.ts @@ -5,8 +5,7 @@ import { CanActivateChild, RouterStateSnapshot, } from '@angular/router'; - -import { hasValue } from '../empty.util'; +import { hasValue } from '@dspace/utils'; @Injectable() export class MockAdminGuard implements CanActivate, CanActivateChild { diff --git a/projects/dspace/core/src/lib/testing/admin-notify-messages.mock.ts b/projects/dspace/core/src/lib/testing/admin-notify-messages.mock.ts new file mode 100644 index 00000000000..b25a4c1ccce --- /dev/null +++ b/projects/dspace/core/src/lib/testing/admin-notify-messages.mock.ts @@ -0,0 +1,58 @@ +import { AdminNotifyMessage } from '../coar-notify/notify-info/models/admin-notify-message.model'; + +export const mockAdminNotifyMessages = [ + { + 'type': 'message', + 'id': 'urn:uuid:5fb3af44-d4f8-4226-9475-2d09c2d8d9e0', + 'coarNotifyType': 'coar-notify:ReviewAction', + 'activityStreamType': 'TentativeReject', + 'inReplyTo': 'urn:uuid:f7289ad5-0955-4c86-834c-fb54a736778b', + 'object': null, + 'context': '24d50450-9ff0-485f-82d4-fba1be42f3f9', + 'queueAttempts': 1, + 'queueLastStartTime': '2023-11-24T14:44:00.064+00:00', + 'origin': 12, + 'target': null, + 'queueStatusLabel': 'notify-queue-status.processed', + 'queueTimeout': '2023-11-24T15:44:00.064+00:00', + 'queueStatus': 3, + '_links': { + 'self': { + 'href': 'http://localhost:8080/server/api/ldn/messages/urn:uuid:5fb3af44-d4f8-4226-9475-2d09c2d8d9e0', + }, + }, + 'thumbnail': 'test', + 'item': {}, + 'accessStatus': {}, + 'ldnService': 'NOTIFY inbox - Automatic service', + 'relatedItem': 'test coar 2 demo', + 'message': '{"@context":["https://www.w3.org/ns/activitystreams","https://purl.org/coar/notify"],"id":"urn:uuid:668f26e0-2e8d-4118-b0d2-ee713523bc45","type":["Reject","coar-notify:IngestAction"],"actor":{"id":"https://generic-service.com","type":["Service"],"name":"Generic Service"},"context":{"id":"https://dspace-coar.4science.cloud/handle/123456789/28","type":["Document"],"ietf:cite-as":"https://doi.org/10.4598/12123488"},"object":{"id":"https://dspace-coar.4science.cloud/handle/123456789/28","type":["Offer"]},"origin":{"id":"https://generic-service.com/system","type":["Service"],"inbox":"https://notify-inbox.info/inbox7"},"target":{"id":"https://some-organisation.org","type":["Organization"],"inbox":"https://dspace-coar.4science.cloud/server/ldn/inbox"},"inReplyTo":"urn:uuid:d9b4010a-f128-4815-abb2-83707a2ee9cf"}', + }, + { + 'type': 'message', + 'id': 'urn:uuid:544c8777-e826-4810-a625-3e394cc3660d', + 'coarNotifyType': 'coar-notify:IngestAction', + 'activityStreamType': 'Announce', + 'inReplyTo': 'urn:uuid:b2ad72d6-6ea9-464f-b385-29a78417f6b8', + 'object': null, + 'context': 'e657437a-0ee2-437d-916a-bba8c57bf40b', + 'queueAttempts': 1, + 'queueLastStartTime': null, + 'origin': 12, + 'target': null, + 'queueStatusLabel': 'notify-queue-status.unmapped_action', + 'queueTimeout': '2023-11-24T14:15:34.945+00:00', + 'queueStatus': 6, + '_links': { + 'self': { + 'href': 'http://localhost:8080/server/api/ldn/messages/urn:uuid:544c8777-e826-4810-a625-3e394cc3660d', + }, + }, + 'thumbnail': {}, + 'item': {}, + 'accessStatus': {}, + 'ldnService': 'NOTIFY inbox - Automatic service', + 'relatedItem': 'test coar demo', + 'message': '{"@context":["https://www.w3.org/ns/activitystreams","https://purl.org/coar/notify"],"id":"urn:uuid:668f26e0-2e8d-4118-b0d2-ee713523bc45","type":["Reject","coar-notify:IngestAction"],"actor":{"id":"https://generic-service.com","type":["Service"],"name":"Generic Service"},"context":{"id":"https://dspace-coar.4science.cloud/handle/123456789/28","type":["Document"],"ietf:cite-as":"https://doi.org/10.4598/12123488"},"object":{"id":"https://dspace-coar.4science.cloud/handle/123456789/28","type":["Offer"]},"origin":{"id":"https://generic-service.com/system","type":["Service"],"inbox":"https://notify-inbox.info/inbox7"},"target":{"id":"https://some-organisation.org","type":["Organization"],"inbox":"https://dspace-coar.4science.cloud/server/ldn/inbox"},"inReplyTo":"urn:uuid:d9b4010a-f128-4815-abb2-83707a2ee9cf"}', + }, +] as unknown as AdminNotifyMessage[]; diff --git a/src/app/shared/mocks/angulartics-provider.service.mock.ts b/projects/dspace/core/src/lib/testing/angulartics-provider.service.mock.ts similarity index 100% rename from src/app/shared/mocks/angulartics-provider.service.mock.ts rename to projects/dspace/core/src/lib/testing/angulartics-provider.service.mock.ts diff --git a/src/app/shared/mocks/angulartics2.service.mock.ts b/projects/dspace/core/src/lib/testing/angulartics2.service.mock.ts similarity index 100% rename from src/app/shared/mocks/angulartics2.service.mock.ts rename to projects/dspace/core/src/lib/testing/angulartics2.service.mock.ts diff --git a/src/app/shared/testing/auth-request-service.stub.ts b/projects/dspace/core/src/lib/testing/auth-request-service.stub.ts similarity index 86% rename from src/app/shared/testing/auth-request-service.stub.ts rename to projects/dspace/core/src/lib/testing/auth-request-service.stub.ts index 6a8f39f04e5..c2e2305e28a 100644 --- a/src/app/shared/testing/auth-request-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/auth-request-service.stub.ts @@ -1,14 +1,11 @@ -import { - Observable, - of, -} from 'rxjs'; +import { isNotEmpty } from '@dspace/utils'; +import { Observable, of } from 'rxjs'; -import { AuthStatus } from '../../core/auth/models/auth-status.model'; -import { AuthTokenInfo } from '../../core/auth/models/auth-token-info.model'; -import { HttpOptions } from '../../core/dspace-rest/dspace-rest.service'; -import { EPerson } from '../../core/eperson/models/eperson.model'; -import { isNotEmpty } from '../empty.util'; -import { createSuccessfulRemoteDataObject$ } from '../remote-data.utils'; +import { AuthStatus } from '../auth/models/auth-status.model'; +import { AuthTokenInfo } from '../auth/models/auth-token-info.model'; +import { HttpOptions } from '../dspace-rest/dspace-rest.service'; +import { EPerson } from '../eperson/models/eperson.model'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; import { EPersonMock } from './eperson.mock'; export class AuthRequestServiceStub { diff --git a/src/app/shared/testing/auth-service.stub.ts b/projects/dspace/core/src/lib/testing/auth-service.stub.ts similarity index 87% rename from src/app/shared/testing/auth-service.stub.ts rename to projects/dspace/core/src/lib/testing/auth-service.stub.ts index 121b4bf16e5..afab01c5dd1 100644 --- a/src/app/shared/testing/auth-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/auth-service.stub.ts @@ -1,16 +1,13 @@ -import { - Observable, - of, -} from 'rxjs'; - -import { RetrieveAuthMethodsAction } from '../../core/auth/auth.actions'; -import { AuthMethod } from '../../core/auth/models/auth.method'; -import { AuthMethodType } from '../../core/auth/models/auth.method-type'; -import { AuthStatus } from '../../core/auth/models/auth-status.model'; -import { AuthTokenInfo } from '../../core/auth/models/auth-token-info.model'; -import { EPerson } from '../../core/eperson/models/eperson.model'; -import { hasValue } from '../empty.util'; -import { createSuccessfulRemoteDataObject$ } from '../remote-data.utils'; +import { hasValue } from '@dspace/utils'; +import { Observable, of } from 'rxjs'; + +import { RetrieveAuthMethodsAction } from '../auth/auth.actions'; +import { AuthMethod } from '../auth/models/auth.method'; +import { AuthMethodType } from '../auth/models/auth.method-type'; +import { AuthStatus } from '../auth/models/auth-status.model'; +import { AuthTokenInfo } from '../auth/models/auth-token-info.model'; +import { EPerson } from '../eperson/models/eperson.model'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; import { EPersonMock } from './eperson.mock'; export const authMethodsMock: AuthMethod[] = [ diff --git a/src/app/shared/mocks/auth.service.mock.ts b/projects/dspace/core/src/lib/testing/auth.service.mock.ts similarity index 94% rename from src/app/shared/mocks/auth.service.mock.ts rename to projects/dspace/core/src/lib/testing/auth.service.mock.ts index 477b3256a5b..f9d42682989 100644 --- a/src/app/shared/mocks/auth.service.mock.ts +++ b/projects/dspace/core/src/lib/testing/auth.service.mock.ts @@ -1,8 +1,5 @@ /* eslint-disable no-empty, @typescript-eslint/no-empty-function */ -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; export class AuthServiceMock { public checksAuthenticationToken() { diff --git a/src/app/shared/testing/authorization-service.stub.ts b/projects/dspace/core/src/lib/testing/authorization-service.stub.ts similarity index 59% rename from src/app/shared/testing/authorization-service.stub.ts rename to projects/dspace/core/src/lib/testing/authorization-service.stub.ts index bafa8eefafd..e3b1dadd21b 100644 --- a/src/app/shared/testing/authorization-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/authorization-service.stub.ts @@ -1,9 +1,6 @@ -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; -import { FeatureID } from '../../core/data/feature-authorization/feature-id'; +import { FeatureID } from '../data/feature-authorization/feature-id'; export class AuthorizationDataServiceStub { isAuthorized(featureId?: FeatureID, objectUrl?: string, ePersonUuid?: string): Observable { diff --git a/src/app/shared/testing/base-data-service.stub.ts b/projects/dspace/core/src/lib/testing/base-data-service.stub.ts similarity index 58% rename from src/app/shared/testing/base-data-service.stub.ts rename to projects/dspace/core/src/lib/testing/base-data-service.stub.ts index 1dc6afe36bf..d63c7ce2a0f 100644 --- a/src/app/shared/testing/base-data-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/base-data-service.stub.ts @@ -1,12 +1,9 @@ -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; -import { CacheableObject } from '../../core/cache/cacheable-object.model'; -import { RemoteData } from '../../core/data/remote-data'; -import { createSuccessfulRemoteDataObject$ } from '../remote-data.utils'; -import { FollowLinkConfig } from '../utils/follow-link-config.model'; +import { CacheableObject } from '../cache/cacheable-object.model'; +import { RemoteData } from '../data/remote-data'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; /** * Stub class for {@link BaseDataService} diff --git a/projects/dspace/core/src/lib/testing/bitstream-data-service.stub.ts b/projects/dspace/core/src/lib/testing/bitstream-data-service.stub.ts new file mode 100644 index 00000000000..602ddb0c507 --- /dev/null +++ b/projects/dspace/core/src/lib/testing/bitstream-data-service.stub.ts @@ -0,0 +1,14 @@ +import { Observable, of } from 'rxjs'; + +import { RemoteData } from '../data/remote-data'; +import { RequestEntryState } from '../data/request-entry-state.model'; +import { Bitstream } from '../shared/bitstream.model'; +import { NoContent } from '../shared/NoContent.model'; + +export class BitstreamDataServiceStub { + + removeMultiple(_bitstreams: Bitstream[]): Observable> { + return of(new RemoteData(0, 0, 0, RequestEntryState.Success)); + } + +} diff --git a/src/app/shared/testing/browse-definition-data-service.stub.ts b/projects/dspace/core/src/lib/testing/browse-definition-data-service.stub.ts similarity index 72% rename from src/app/shared/testing/browse-definition-data-service.stub.ts rename to projects/dspace/core/src/lib/testing/browse-definition-data-service.stub.ts index c24040edf53..4eaaf3b8711 100644 --- a/src/app/shared/testing/browse-definition-data-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/browse-definition-data-service.stub.ts @@ -1,20 +1,13 @@ -import { - EMPTY, - Observable, - of, -} from 'rxjs'; +import { EMPTY, Observable, of } from 'rxjs'; -import { BrowseService } from '../../core/browse/browse.service'; -import { - buildPaginatedList, - PaginatedList, -} from '../../core/data/paginated-list.model'; -import { RemoteData } from '../../core/data/remote-data'; -import { BrowseDefinition } from '../../core/shared/browse-definition.model'; -import { FlatBrowseDefinition } from '../../core/shared/flat-browse-definition.model'; -import { PageInfo } from '../../core/shared/page-info.model'; -import { ValueListBrowseDefinition } from '../../core/shared/value-list-browse-definition.model'; -import { createSuccessfulRemoteDataObject } from '../remote-data.utils'; +import { BrowseService } from '../browse/browse.service'; +import { buildPaginatedList, PaginatedList } from '../data/paginated-list.model'; +import { RemoteData } from '../data/remote-data'; +import { BrowseDefinition } from '../shared/browse-definition.model'; +import { FlatBrowseDefinition } from '../shared/flat-browse-definition.model'; +import { PageInfo } from '../shared/page-info.model'; +import { ValueListBrowseDefinition } from '../shared/value-list-browse-definition.model'; +import { createSuccessfulRemoteDataObject } from '../utilities/remote-data.utils'; // This data is in post-serialized form (metadata -> metadataKeys) export const mockData: BrowseDefinition[] = [ diff --git a/src/app/shared/testing/browse-service.stub.ts b/projects/dspace/core/src/lib/testing/browse-service.stub.ts similarity index 70% rename from src/app/shared/testing/browse-service.stub.ts rename to projects/dspace/core/src/lib/testing/browse-service.stub.ts index 85ca717cb03..4cce26bdd69 100644 --- a/src/app/shared/testing/browse-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/browse-service.stub.ts @@ -1,19 +1,13 @@ -import { - EMPTY, - Observable, -} from 'rxjs'; +import { EMPTY, Observable } from 'rxjs'; -import { - buildPaginatedList, - PaginatedList, -} from '../../core/data/paginated-list.model'; -import { RemoteData } from '../../core/data/remote-data'; -import { BrowseDefinition } from '../../core/shared/browse-definition.model'; -import { FlatBrowseDefinition } from '../../core/shared/flat-browse-definition.model'; -import { HierarchicalBrowseDefinition } from '../../core/shared/hierarchical-browse-definition.model'; -import { PageInfo } from '../../core/shared/page-info.model'; -import { ValueListBrowseDefinition } from '../../core/shared/value-list-browse-definition.model'; -import { createSuccessfulRemoteDataObject$ } from '../remote-data.utils'; +import { buildPaginatedList, PaginatedList } from '../data/paginated-list.model'; +import { RemoteData } from '../data/remote-data'; +import { BrowseDefinition } from '../shared/browse-definition.model'; +import { FlatBrowseDefinition } from '../shared/flat-browse-definition.model'; +import { HierarchicalBrowseDefinition } from '../shared/hierarchical-browse-definition.model'; +import { PageInfo } from '../shared/page-info.model'; +import { ValueListBrowseDefinition } from '../shared/value-list-browse-definition.model'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; const mockData = [ Object.assign(new FlatBrowseDefinition(), { diff --git a/src/app/shared/testing/browser-only-mock.pipe.ts b/projects/dspace/core/src/lib/testing/browser-only-mock.pipe.ts similarity index 80% rename from src/app/shared/testing/browser-only-mock.pipe.ts rename to projects/dspace/core/src/lib/testing/browser-only-mock.pipe.ts index d49a246f88d..a78275fa3c3 100644 --- a/src/app/shared/testing/browser-only-mock.pipe.ts +++ b/projects/dspace/core/src/lib/testing/browser-only-mock.pipe.ts @@ -1,7 +1,4 @@ -import { - Pipe, - PipeTransform, -} from '@angular/core'; +import { Pipe, PipeTransform } from '@angular/core'; /** * Support dsBrowserOnly in unit tests. diff --git a/projects/dspace/core/src/lib/testing/claimed-task-data-service.stub.ts b/projects/dspace/core/src/lib/testing/claimed-task-data-service.stub.ts new file mode 100644 index 00000000000..f5f2b09a983 --- /dev/null +++ b/projects/dspace/core/src/lib/testing/claimed-task-data-service.stub.ts @@ -0,0 +1,17 @@ +import { EMPTY, Observable } from 'rxjs'; + +import { RemoteData } from '../data/remote-data'; +import { ClaimedTask } from '../tasks/models/claimed-task-object.model'; +import { ProcessTaskResponse } from '../tasks/models/process-task-response'; + +export class ClaimedTaskDataServiceStub { + + public submitTask(_scopeId: string, _body: any): Observable { + return EMPTY; + } + + public findByItem(_uuid: string): Observable> { + return EMPTY; + } + +} diff --git a/src/app/shared/testing/configuration-data.service.stub.ts b/projects/dspace/core/src/lib/testing/configuration-data.service.stub.ts similarity index 61% rename from src/app/shared/testing/configuration-data.service.stub.ts rename to projects/dspace/core/src/lib/testing/configuration-data.service.stub.ts index 66324218f5f..07ae71e484c 100644 --- a/src/app/shared/testing/configuration-data.service.stub.ts +++ b/projects/dspace/core/src/lib/testing/configuration-data.service.stub.ts @@ -1,8 +1,8 @@ import { Observable } from 'rxjs'; -import { RemoteData } from '../../core/data/remote-data'; -import { ConfigurationProperty } from '../../core/shared/configuration-property.model'; -import { createSuccessfulRemoteDataObject$ } from '../remote-data.utils'; +import { RemoteData } from '../data/remote-data'; +import { ConfigurationProperty } from '../shared/configuration-property.model'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; export class ConfigurationDataServiceStub { diff --git a/src/app/shared/mocks/cookie.service.mock.ts b/projects/dspace/core/src/lib/testing/cookie.service.mock.ts similarity index 100% rename from src/app/shared/mocks/cookie.service.mock.ts rename to projects/dspace/core/src/lib/testing/cookie.service.mock.ts diff --git a/src/app/shared/testing/css-variable-service.stub.ts b/projects/dspace/core/src/lib/testing/css-variable-service.stub.ts similarity index 85% rename from src/app/shared/testing/css-variable-service.stub.ts rename to projects/dspace/core/src/lib/testing/css-variable-service.stub.ts index 75f647af72e..2da6294f968 100644 --- a/src/app/shared/testing/css-variable-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/css-variable-service.stub.ts @@ -1,9 +1,6 @@ -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; -import { KeyValuePair } from '../key-value-pair.model'; +import { KeyValuePair } from '../utilities/key-value-pair.model'; const variables = { '--bs-sm': '576px,', diff --git a/src/app/shared/testing/dso-edit-metadata-field.service.stub.ts b/projects/dspace/core/src/lib/testing/dso-edit-metadata-field.service.stub.ts similarity index 53% rename from src/app/shared/testing/dso-edit-metadata-field.service.stub.ts rename to projects/dspace/core/src/lib/testing/dso-edit-metadata-field.service.stub.ts index 3e87348545d..6756e5e27f7 100644 --- a/src/app/shared/testing/dso-edit-metadata-field.service.stub.ts +++ b/projects/dspace/core/src/lib/testing/dso-edit-metadata-field.service.stub.ts @@ -1,10 +1,7 @@ -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; -import { DSpaceObject } from '../../core/shared/dspace-object.model'; -import { Vocabulary } from '../../core/submission/vocabularies/models/vocabulary.model'; +import { DSpaceObject } from '../shared/dspace-object.model'; +import { Vocabulary } from '../submission/vocabularies/models/vocabulary.model'; /** * Stub class of {@link DsoEditMetadataFieldService} diff --git a/src/app/shared/mocks/dso-name.service.mock.ts b/projects/dspace/core/src/lib/testing/dso-name.service.mock.ts similarity index 94% rename from src/app/shared/mocks/dso-name.service.mock.ts rename to projects/dspace/core/src/lib/testing/dso-name.service.mock.ts index b8fbaebee43..b5119fa31a3 100644 --- a/src/app/shared/mocks/dso-name.service.mock.ts +++ b/projects/dspace/core/src/lib/testing/dso-name.service.mock.ts @@ -1,4 +1,4 @@ -import { DSpaceObject } from '../../core/shared/dspace-object.model'; +import { DSpaceObject } from '../shared/dspace-object.model'; export const UNDEFINED_NAME = 'Undefined'; diff --git a/src/app/shared/testing/dynamic-form-mock-services.ts b/projects/dspace/core/src/lib/testing/dynamic-form-mock-services.ts similarity index 100% rename from src/app/shared/testing/dynamic-form-mock-services.ts rename to projects/dspace/core/src/lib/testing/dynamic-form-mock-services.ts diff --git a/src/app/shared/testing/edit-item-relationships.service.stub.ts b/projects/dspace/core/src/lib/testing/edit-item-relationships.service.stub.ts similarity index 67% rename from src/app/shared/testing/edit-item-relationships.service.stub.ts rename to projects/dspace/core/src/lib/testing/edit-item-relationships.service.stub.ts index 1d295697936..ed5a595acc5 100644 --- a/src/app/shared/testing/edit-item-relationships.service.stub.ts +++ b/projects/dspace/core/src/lib/testing/edit-item-relationships.service.stub.ts @@ -1,18 +1,15 @@ /* eslint-disable no-empty, @typescript-eslint/no-empty-function */ -import { - Observable, - Subscription, -} from 'rxjs'; +import { Observable, Subscription } from 'rxjs'; import { DeleteRelationship, RelationshipIdentifiable, -} from '../../core/data/object-updates/object-updates.reducer'; -import { RemoteData } from '../../core/data/remote-data'; -import { Item } from '../../core/shared/item.model'; -import { Relationship } from '../../core/shared/item-relationships/relationship.model'; -import { NoContent } from '../../core/shared/NoContent.model'; -import { createSuccessfulRemoteDataObject$ } from '../remote-data.utils'; +} from '../data/object-updates/object-updates.reducer'; +import { RemoteData } from '../data/remote-data'; +import { Item } from '../shared/item.model'; +import { Relationship } from '../shared/item-relationships/relationship.model'; +import { NoContent } from '../shared/NoContent.model'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; /** * Stub class of {@link EditItemRelationshipsService} diff --git a/src/app/shared/testing/element-ref.mock.ts b/projects/dspace/core/src/lib/testing/element-ref.mock.ts similarity index 100% rename from src/app/shared/testing/element-ref.mock.ts rename to projects/dspace/core/src/lib/testing/element-ref.mock.ts diff --git a/src/app/shared/testing/entity-type-data.service.stub.ts b/projects/dspace/core/src/lib/testing/entity-type-data.service.stub.ts similarity index 52% rename from src/app/shared/testing/entity-type-data.service.stub.ts rename to projects/dspace/core/src/lib/testing/entity-type-data.service.stub.ts index d558dc3c31d..2a3c2aed63c 100644 --- a/src/app/shared/testing/entity-type-data.service.stub.ts +++ b/projects/dspace/core/src/lib/testing/entity-type-data.service.stub.ts @@ -1,11 +1,11 @@ import { Observable } from 'rxjs'; -import { FindListOptions } from '../../core/data/find-list-options.model'; -import { PaginatedList } from '../../core/data/paginated-list.model'; -import { RemoteData } from '../../core/data/remote-data'; -import { ItemType } from '../../core/shared/item-relationships/item-type.model'; -import { createSuccessfulRemoteDataObject$ } from '../remote-data.utils'; -import { FollowLinkConfig } from '../utils/follow-link-config.model'; +import { FindListOptions } from '../data/find-list-options.model'; +import { PaginatedList } from '../data/paginated-list.model'; +import { RemoteData } from '../data/remote-data'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; +import { ItemType } from '../shared/item-relationships/item-type.model'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; import { createPaginatedList } from './utils.test'; /** diff --git a/src/app/shared/testing/eperson.mock.ts b/projects/dspace/core/src/lib/testing/eperson.mock.ts similarity index 97% rename from src/app/shared/testing/eperson.mock.ts rename to projects/dspace/core/src/lib/testing/eperson.mock.ts index 36daad1e579..4b5ec4629a6 100644 --- a/src/app/shared/testing/eperson.mock.ts +++ b/projects/dspace/core/src/lib/testing/eperson.mock.ts @@ -1,4 +1,4 @@ -import { EPerson } from '../../core/eperson/models/eperson.model'; +import { EPerson } from '../eperson/models/eperson.model'; export const EPersonMock: EPerson = Object.assign(new EPerson(), { handle: null, diff --git a/src/app/shared/mocks/external-source.service.mock.ts b/projects/dspace/core/src/lib/testing/external-source.service.mock.ts similarity index 89% rename from src/app/shared/mocks/external-source.service.mock.ts rename to projects/dspace/core/src/lib/testing/external-source.service.mock.ts index 7769095f2c1..de491cf856c 100644 --- a/src/app/shared/mocks/external-source.service.mock.ts +++ b/projects/dspace/core/src/lib/testing/external-source.service.mock.ts @@ -1,6 +1,6 @@ -import { ExternalSourceDataService } from '../../core/data/external-source-data.service'; -import { ExternalSource } from '../../core/shared/external-source.model'; -import { ResourceType } from '../../core/shared/resource-type'; +import { ExternalSourceDataService } from '../data/external-source-data.service'; +import { ExternalSource } from '../shared/external-source.model'; +import { ResourceType } from '../shared/resource-type'; export const externalSourceOrcid: ExternalSource = { type: new ResourceType('externalsource'), diff --git a/src/app/shared/testing/file-service.stub.ts b/projects/dspace/core/src/lib/testing/file-service.stub.ts similarity index 100% rename from src/app/shared/testing/file-service.stub.ts rename to projects/dspace/core/src/lib/testing/file-service.stub.ts diff --git a/src/app/shared/mocks/find-id-config-data.service.mock.ts b/projects/dspace/core/src/lib/testing/find-id-config-data.service.mock.ts similarity index 65% rename from src/app/shared/mocks/find-id-config-data.service.mock.ts rename to projects/dspace/core/src/lib/testing/find-id-config-data.service.mock.ts index 1be0fc57205..50fd05bf0ae 100644 --- a/src/app/shared/mocks/find-id-config-data.service.mock.ts +++ b/projects/dspace/core/src/lib/testing/find-id-config-data.service.mock.ts @@ -1,5 +1,5 @@ -import { ConfigurationProperty } from '../../core/shared/configuration-property.model'; -import { createSuccessfulRemoteDataObject$ } from '../remote-data.utils'; +import { ConfigurationProperty } from '../shared/configuration-property.model'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; export function getMockFindByIdDataService(propertyKey: string, ...values: string[]) { return jasmine.createSpyObj('findByIdDataService', { diff --git a/src/app/shared/testing/group-mock.ts b/projects/dspace/core/src/lib/testing/group-mock.ts similarity index 90% rename from src/app/shared/testing/group-mock.ts rename to projects/dspace/core/src/lib/testing/group-mock.ts index 599afaa20d2..18692b8ee69 100644 --- a/src/app/shared/testing/group-mock.ts +++ b/projects/dspace/core/src/lib/testing/group-mock.ts @@ -1,5 +1,5 @@ -import { Group } from '../../core/eperson/models/group.model'; -import { createSuccessfulRemoteDataObject$ } from '../remote-data.utils'; +import { Group } from '../eperson/models/group.model'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; import { EPersonMock } from './eperson.mock'; export const GroupMock2: Group = Object.assign(new Group(), { diff --git a/src/app/shared/testing/hal-endpoint-service.stub.ts b/projects/dspace/core/src/lib/testing/hal-endpoint-service.stub.ts similarity index 86% rename from src/app/shared/testing/hal-endpoint-service.stub.ts rename to projects/dspace/core/src/lib/testing/hal-endpoint-service.stub.ts index e5d26f4b69c..11ab88ff493 100644 --- a/src/app/shared/testing/hal-endpoint-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/hal-endpoint-service.stub.ts @@ -1,7 +1,6 @@ +import { hasValue } from '@dspace/utils'; import { of } from 'rxjs'; -import { hasValue } from '../empty.util'; - export class HALEndpointServiceStub { constructor(private url: string) {} diff --git a/src/app/shared/mocks/head-tag-service.mock.ts b/projects/dspace/core/src/lib/testing/head-tag-service.mock.ts similarity index 100% rename from src/app/shared/mocks/head-tag-service.mock.ts rename to projects/dspace/core/src/lib/testing/head-tag-service.mock.ts diff --git a/src/app/shared/mocks/health-endpoint.mocks.ts b/projects/dspace/core/src/lib/testing/health-endpoint.mocks.ts similarity index 98% rename from src/app/shared/mocks/health-endpoint.mocks.ts rename to projects/dspace/core/src/lib/testing/health-endpoint.mocks.ts index b3378f67eba..424df051ad9 100644 --- a/src/app/shared/mocks/health-endpoint.mocks.ts +++ b/projects/dspace/core/src/lib/testing/health-endpoint.mocks.ts @@ -4,7 +4,7 @@ import { HealthInfoResponse, HealthResponse, HealthStatus, -} from '../../health-page/models/health-component.model'; +} from '../shared/health-component.model'; export const HealthResponseObj: HealthResponse = { 'status': HealthStatus.UP_WITH_ISSUES, diff --git a/src/app/shared/mocks/host-window-service.mock.ts b/projects/dspace/core/src/lib/testing/host-window-service.mock.ts similarity index 88% rename from src/app/shared/mocks/host-window-service.mock.ts rename to projects/dspace/core/src/lib/testing/host-window-service.mock.ts index d40f5cc4523..36dc4fad8cf 100644 --- a/src/app/shared/mocks/host-window-service.mock.ts +++ b/projects/dspace/core/src/lib/testing/host-window-service.mock.ts @@ -1,7 +1,4 @@ -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; // declare a stub service export class HostWindowServiceMock { diff --git a/src/app/shared/testing/host-window-service.stub.ts b/projects/dspace/core/src/lib/testing/host-window-service.stub.ts similarity index 82% rename from src/app/shared/testing/host-window-service.stub.ts rename to projects/dspace/core/src/lib/testing/host-window-service.stub.ts index fd359d4c8f4..0bdb33dc054 100644 --- a/src/app/shared/testing/host-window-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/host-window-service.stub.ts @@ -1,9 +1,6 @@ -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; -import { WidthCategory } from '../host-window.service'; +import { WidthCategory } from '../shared/host-window-type'; // declare a stub service export class HostWindowServiceStub { diff --git a/src/app/shared/mocks/href-only-data.service.mock.ts b/projects/dspace/core/src/lib/testing/href-only-data.service.mock.ts similarity index 69% rename from src/app/shared/mocks/href-only-data.service.mock.ts rename to projects/dspace/core/src/lib/testing/href-only-data.service.mock.ts index a54b94c6017..015b9231b59 100644 --- a/src/app/shared/mocks/href-only-data.service.mock.ts +++ b/projects/dspace/core/src/lib/testing/href-only-data.service.mock.ts @@ -1,12 +1,12 @@ import { Observable } from 'rxjs'; -import { PaginatedList } from '../../core/data/paginated-list.model'; -import { RemoteData } from '../../core/data/remote-data'; +import { PaginatedList } from '../data/paginated-list.model'; +import { RemoteData } from '../data/remote-data'; import { createNoContentRemoteDataObject$, createSuccessfulRemoteDataObject$, -} from '../remote-data.utils'; -import { createPaginatedList } from '../testing/utils.test'; +} from '../utilities/remote-data.utils'; +import { createPaginatedList } from './utils.test'; export function getMockHrefOnlyDataService( findByHref$: Observable> = createNoContentRemoteDataObject$(), diff --git a/src/app/shared/mocks/http-xsrf-token-extractor.mock.ts b/projects/dspace/core/src/lib/testing/http-xsrf-token-extractor.mock.ts similarity index 100% rename from src/app/shared/mocks/http-xsrf-token-extractor.mock.ts rename to projects/dspace/core/src/lib/testing/http-xsrf-token-extractor.mock.ts diff --git a/src/app/shared/testing/identifiable-data-service.stub.ts b/projects/dspace/core/src/lib/testing/identifiable-data-service.stub.ts similarity index 62% rename from src/app/shared/testing/identifiable-data-service.stub.ts rename to projects/dspace/core/src/lib/testing/identifiable-data-service.stub.ts index e8928b568db..790677a36bc 100644 --- a/src/app/shared/testing/identifiable-data-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/identifiable-data-service.stub.ts @@ -1,11 +1,8 @@ -import { - EMPTY, - Observable, -} from 'rxjs'; +import { EMPTY, Observable } from 'rxjs'; -import { CacheableObject } from '../../core/cache/cacheable-object.model'; -import { RemoteData } from '../../core/data/remote-data'; -import { FollowLinkConfig } from '../utils/follow-link-config.model'; +import { CacheableObject } from '../cache/cacheable-object.model'; +import { RemoteData } from '../data/remote-data'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; import { BaseDataServiceStub } from './base-data-service.stub'; /** diff --git a/projects/dspace/core/src/lib/testing/index.ts b/projects/dspace/core/src/lib/testing/index.ts new file mode 100644 index 00000000000..d5bbb68738e --- /dev/null +++ b/projects/dspace/core/src/lib/testing/index.ts @@ -0,0 +1,104 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './action.mock'; +export * from './active-router.mock'; +export * from './active-router.stub'; +export * from './admin-guard.service.mock'; +export * from './admin-notify-messages.mock'; +export * from './angulartics-provider.service.mock'; +export * from './angulartics2.service.mock'; +export * from './auth-request-service.stub'; +export * from './auth-service.stub'; +export * from './auth.service.mock'; +export * from './authorization-service.stub'; +export * from './base-data-service.stub'; +export * from './bitstream-data-service.stub'; +export * from './browse-definition-data-service.stub'; +export * from './browse-service.stub'; +export * from './browser-only-mock.pipe'; +export * from './claimed-task-data-service.stub'; +export * from './configuration-data.service.stub'; +export * from './cookie.service.mock'; +export * from './css-variable-service.stub'; +export * from './dso-edit-metadata-field.service.stub'; +export * from './dso-name.service.mock'; +export * from './dynamic-form-mock-services'; +export * from './edit-item-relationships.service.stub'; +export * from './element-ref.mock'; +export * from './entity-type-data.service.stub'; +export * from './eperson.mock'; +export * from './external-source.service.mock'; +export * from './file-service.stub'; +export * from './find-id-config-data.service.mock'; +export * from './group-mock'; +export * from './hal-endpoint-service.stub'; +export * from './head-tag-service.mock'; +export * from './health-endpoint.mocks'; +export * from './host-window-service.mock'; +export * from './host-window-service.stub'; +export * from './href-only-data.service.mock'; +export * from './http-xsrf-token-extractor.mock'; +export * from './identifiable-data-service.stub'; +export * from './item-data.service.stub'; +export * from './item.mock'; +export * from './ldn-services-mock'; +export * from './link-service.mock'; +export * from './location.stub'; +export * from './mock-native-window-ref'; +export * from './mock-resource-policy-service'; +export * from './mock-trucatable.service'; +export * from './ng-component-outlet-directive.stub'; +export * from './notifications-service.stub'; +export * from './notifications.mock'; +export * from './object-cache-service.stub'; +export * from './object-cache.service.mock'; +export * from './object-select-service.stub'; +export * from './pagination-service.stub'; +export * from './publication-claim-targets.mock'; +export * from './publication-claim.mock'; +export * from './query-params-directive.stub'; +export * from './registry.service.stub'; +export * from './related-relationships.mock'; +export * from './relationship-data.service.stub'; +export * from './relationship-types.mock'; +export * from './remote-data-build.service.mock'; +export * from './request-service.stub'; +export * from './request.service.mock'; +export * from './role-service.mock'; +export * from './route-service.stub'; +export * from './router-link-directive.stub'; +export * from './router.mock'; +export * from './router.stub'; +export * from './script-service.stub'; +export * from './scroll-to-service.mock'; +export * from './search-configuration-service.stub'; +export * from './search-filter-service.stub'; +export * from './search-service.mock'; +export * from './search-service.stub'; +export * from './section-accesses-config.service.mock'; +export * from './section-accesses.service.mock'; +export * from './section-sherpa-policies.service.mock'; +export * from './section-upload.service.mock'; +export * from './sections-service.stub'; +export * from './server-response-service.stub'; +export * from './sidebar-service.stub'; +export * from './special-group.mock'; +export * from './store.mock'; +export * from './submission-json-patch-operations-service.stub'; +export * from './submission-oject-data-service.mock'; +export * from './submission-rest-service.stub'; +export * from './submission-service.stub'; +export * from './subscriptions-data.mock'; +export * from './suggestion.mock'; +export * from './supervision-order.mock'; +export * from './test-data-service.mock'; +export * from './translate-loader.mock'; +export * from './translate.service.mock'; +export * from './truncatable-service.stub'; +export * from './utils.test'; +export * from './uuid.service.mock'; +export * from './vocabulary-service.stub'; +export * from './workflow-action-data-service.stub'; +export * from './workflow-item-data-service.stub'; diff --git a/src/app/shared/testing/item-data.service.stub.ts b/projects/dspace/core/src/lib/testing/item-data.service.stub.ts similarity index 79% rename from src/app/shared/testing/item-data.service.stub.ts rename to projects/dspace/core/src/lib/testing/item-data.service.stub.ts index eed5d4bb119..2b8b1844b65 100644 --- a/src/app/shared/testing/item-data.service.stub.ts +++ b/projects/dspace/core/src/lib/testing/item-data.service.stub.ts @@ -1,4 +1,4 @@ -import { Item } from '../../core/shared/item.model'; +import { Item } from '../shared/item.model'; import { IdentifiableDataServiceStub } from './identifiable-data-service.stub'; /** diff --git a/src/app/shared/mocks/item.mock.ts b/projects/dspace/core/src/lib/testing/item.mock.ts similarity index 95% rename from src/app/shared/mocks/item.mock.ts rename to projects/dspace/core/src/lib/testing/item.mock.ts index 0326014d981..6542dab85f2 100644 --- a/src/app/shared/mocks/item.mock.ts +++ b/projects/dspace/core/src/lib/testing/item.mock.ts @@ -1,11 +1,11 @@ import { of } from 'rxjs'; -import { Bitstream } from '../../core/shared/bitstream.model'; -import { BitstreamFormat } from '../../core/shared/bitstream-format.model'; -import { Bundle } from '../../core/shared/bundle.model'; -import { Item } from '../../core/shared/item.model'; -import { createSuccessfulRemoteDataObject$ } from '../remote-data.utils'; -import { createPaginatedList } from '../testing/utils.test'; +import { Bitstream } from '../shared/bitstream.model'; +import { BitstreamFormat } from '../shared/bitstream-format.model'; +import { Bundle } from '../shared/bundle.model'; +import { Item } from '../shared/item.model'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; +import { createPaginatedList } from './utils.test'; export const MockBitstreamFormat1: BitstreamFormat = Object.assign(new BitstreamFormat(), { shortDescription: 'Microsoft Word XML', diff --git a/src/app/admin/admin-ldn-services/ldn-service-serviceMock/ldnServicesRD$-mock.ts b/projects/dspace/core/src/lib/testing/ldn-services-mock.ts similarity index 84% rename from src/app/admin/admin-ldn-services/ldn-service-serviceMock/ldnServicesRD$-mock.ts rename to projects/dspace/core/src/lib/testing/ldn-services-mock.ts index bd732ea37ec..786b62ad0b8 100644 --- a/src/app/admin/admin-ldn-services/ldn-service-serviceMock/ldnServicesRD$-mock.ts +++ b/projects/dspace/core/src/lib/testing/ldn-services-mock.ts @@ -1,13 +1,10 @@ -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; -import { PaginatedList } from '../../../core/data/paginated-list.model'; -import { RemoteData } from '../../../core/data/remote-data'; -import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils'; -import { LDN_SERVICE } from '../ldn-services-model/ldn-service.resource-type'; -import { LdnService } from '../ldn-services-model/ldn-services.model'; +import { LDN_SERVICE } from '../coar-notify/ldn-services/models/ldn-service.resource-type'; +import { LdnService } from '../coar-notify/ldn-services/models/ldn-services.model'; +import { PaginatedList } from '../data/paginated-list.model'; +import { RemoteData } from '../data/remote-data'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; export const mockLdnService: LdnService = { uuid: '1', diff --git a/src/app/shared/mocks/link-service.mock.ts b/projects/dspace/core/src/lib/testing/link-service.mock.ts similarity index 79% rename from src/app/shared/mocks/link-service.mock.ts rename to projects/dspace/core/src/lib/testing/link-service.mock.ts index d6919761986..66d2c930ca2 100644 --- a/src/app/shared/mocks/link-service.mock.ts +++ b/projects/dspace/core/src/lib/testing/link-service.mock.ts @@ -1,4 +1,4 @@ -import { LinkService } from '../../core/cache/builders/link.service'; +import { LinkService } from '../cache/builders/link.service'; export function getMockLinkService(): LinkService { return jasmine.createSpyObj('linkService', { diff --git a/src/app/shared/testing/location.stub.ts b/projects/dspace/core/src/lib/testing/location.stub.ts similarity index 100% rename from src/app/shared/testing/location.stub.ts rename to projects/dspace/core/src/lib/testing/location.stub.ts diff --git a/src/app/shared/mocks/mock-native-window-ref.ts b/projects/dspace/core/src/lib/testing/mock-native-window-ref.ts similarity index 100% rename from src/app/shared/mocks/mock-native-window-ref.ts rename to projects/dspace/core/src/lib/testing/mock-native-window-ref.ts diff --git a/src/app/shared/mocks/mock-resource-policy-service.ts b/projects/dspace/core/src/lib/testing/mock-resource-policy-service.ts similarity index 76% rename from src/app/shared/mocks/mock-resource-policy-service.ts rename to projects/dspace/core/src/lib/testing/mock-resource-policy-service.ts index b6f2908508b..f11b5cde26d 100644 --- a/src/app/shared/mocks/mock-resource-policy-service.ts +++ b/projects/dspace/core/src/lib/testing/mock-resource-policy-service.ts @@ -1,4 +1,4 @@ -import { ResourcePolicyDataService } from '../../core/resource-policy/resource-policy-data.service'; +import { ResourcePolicyDataService } from '../resource-policy/resource-policy-data.service'; export function getMockResourcePolicyService(): ResourcePolicyDataService { return jasmine.createSpyObj('resourcePolicyService', { diff --git a/src/app/shared/mocks/mock-trucatable.service.ts b/projects/dspace/core/src/lib/testing/mock-trucatable.service.ts similarity index 100% rename from src/app/shared/mocks/mock-trucatable.service.ts rename to projects/dspace/core/src/lib/testing/mock-trucatable.service.ts diff --git a/src/app/shared/testing/ng-component-outlet-directive.stub.ts b/projects/dspace/core/src/lib/testing/ng-component-outlet-directive.stub.ts similarity index 83% rename from src/app/shared/testing/ng-component-outlet-directive.stub.ts rename to projects/dspace/core/src/lib/testing/ng-component-outlet-directive.stub.ts index debbc1d365e..331855d3ad7 100644 --- a/src/app/shared/testing/ng-component-outlet-directive.stub.ts +++ b/projects/dspace/core/src/lib/testing/ng-component-outlet-directive.stub.ts @@ -1,7 +1,4 @@ -import { - Directive, - Input, -} from '@angular/core'; +import { Directive, Input } from '@angular/core'; /* eslint-disable @angular-eslint/directive-class-suffix */ @Directive({ diff --git a/src/app/shared/testing/notifications-service.stub.ts b/projects/dspace/core/src/lib/testing/notifications-service.stub.ts similarity index 80% rename from src/app/shared/testing/notifications-service.stub.ts rename to projects/dspace/core/src/lib/testing/notifications-service.stub.ts index 154c5b43516..a40459d1a3d 100644 --- a/src/app/shared/testing/notifications-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/notifications-service.stub.ts @@ -1,4 +1,4 @@ -import { NotificationOptions } from '../notifications/models/notification-options.model'; +import { NotificationOptions } from '../notification-system/models/notification-options.model'; export class NotificationsServiceStub { diff --git a/src/app/shared/mocks/notifications.mock.ts b/projects/dspace/core/src/lib/testing/notifications.mock.ts similarity index 97% rename from src/app/shared/mocks/notifications.mock.ts rename to projects/dspace/core/src/lib/testing/notifications.mock.ts index 0078b83a1b8..d54048cb37f 100644 --- a/src/app/shared/mocks/notifications.mock.ts +++ b/projects/dspace/core/src/lib/testing/notifications.mock.ts @@ -1,19 +1,29 @@ import { of } from 'rxjs'; -import { QualityAssuranceEventDataService } from '../../core/notifications/qa/events/quality-assurance-event-data.service'; -import { QualityAssuranceEventObject } from '../../core/notifications/qa/models/quality-assurance-event.model'; -import { QualityAssuranceSourceObject } from '../../core/notifications/qa/models/quality-assurance-source.model'; -import { QualityAssuranceTopicObject } from '../../core/notifications/qa/models/quality-assurance-topic.model'; -import { QualityAssuranceTopicDataService } from '../../core/notifications/qa/topics/quality-assurance-topic-data.service'; -import { DSpaceObject } from '../../core/shared/dspace-object.model'; -import { Item } from '../../core/shared/item.model'; -import { ResourceType } from '../../core/shared/resource-type'; +import { + QualityAssuranceEventDataService, +} from '../notifications/qa/events/quality-assurance-event-data.service'; +import { + QualityAssuranceEventObject, +} from '../notifications/qa/models/quality-assurance-event.model'; +import { + QualityAssuranceSourceObject, +} from '../notifications/qa/models/quality-assurance-source.model'; +import { + QualityAssuranceTopicObject, +} from '../notifications/qa/models/quality-assurance-topic.model'; +import { + QualityAssuranceTopicDataService, +} from '../notifications/qa/topics/quality-assurance-topic-data.service'; +import { DSpaceObject } from '../shared/dspace-object.model'; +import { Item } from '../shared/item.model'; +import { ResourceType } from '../shared/resource-type'; +import { SearchResult } from '../shared/search/models/search-result.model'; import { createNoContentRemoteDataObject$, createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$, -} from '../remote-data.utils'; -import { SearchResult } from '../search/models/search-result.model'; +} from '../utilities/remote-data.utils'; // REST Mock --------------------------------------------------------------------- // ------------------------------------------------------------------------------- @@ -21,7 +31,7 @@ import { SearchResult } from '../search/models/search-result.model'; // Items // ------------------------------------------------------------------------------- -const ItemMockPid1: Item = Object.assign( +export const ItemMockPid1: Item = Object.assign( new Item(), { handle: '10077/21486', @@ -140,7 +150,7 @@ const ItemMockPid1: Item = Object.assign( }, ); -const ItemMockPid2: Item = Object.assign( +export const ItemMockPid2: Item = Object.assign( new Item(), { handle: '10077/21486', @@ -259,7 +269,7 @@ const ItemMockPid2: Item = Object.assign( }, ); -const ItemMockPid3: Item = Object.assign( +export const ItemMockPid3: Item = Object.assign( new Item(), { handle: '10077/21486', @@ -378,7 +388,7 @@ const ItemMockPid3: Item = Object.assign( }, ); -const ItemMockPid4: Item = Object.assign( +export const ItemMockPid4: Item = Object.assign( new Item(), { handle: '10077/21486', @@ -497,7 +507,7 @@ const ItemMockPid4: Item = Object.assign( }, ); -const ItemMockPid5: Item = Object.assign( +export const ItemMockPid5: Item = Object.assign( new Item(), { handle: '10077/21486', @@ -616,7 +626,7 @@ const ItemMockPid5: Item = Object.assign( }, ); -const ItemMockPid6: Item = Object.assign( +export const ItemMockPid6: Item = Object.assign( new Item(), { handle: '10077/21486', @@ -735,7 +745,7 @@ const ItemMockPid6: Item = Object.assign( }, ); -const ItemMockPid7: Item = Object.assign( +export const ItemMockPid7: Item = Object.assign( new Item(), { handle: '10077/21486', @@ -1862,7 +1872,7 @@ export function getMockQualityAssuranceEventRestService(): QualityAssuranceEvent /** * Mock for [[QualityAssuranceEventDataService]] */ -export function getMockSuggestionsService(): any { +function getMockSuggestionsService(): any { return jasmine.createSpyObj('SuggestionsService', { getTargets: jasmine.createSpy('getTargets'), getSuggestions: jasmine.createSpy('getSuggestions'), diff --git a/src/app/shared/testing/object-cache-service.stub.ts b/projects/dspace/core/src/lib/testing/object-cache-service.stub.ts similarity index 76% rename from src/app/shared/testing/object-cache-service.stub.ts rename to projects/dspace/core/src/lib/testing/object-cache-service.stub.ts index d6b558c8d01..5b79cef658c 100644 --- a/src/app/shared/testing/object-cache-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/object-cache-service.stub.ts @@ -1,10 +1,7 @@ -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; -import { CacheableObject } from '../../core/cache/cacheable-object.model'; -import { ObjectCacheEntry } from '../../core/cache/object-cache.reducer'; +import { CacheableObject } from '../cache/cacheable-object.model'; +import { ObjectCacheEntry } from '../cache/object-cache.reducer'; /* eslint-disable @typescript-eslint/no-empty-function */ /** diff --git a/src/app/shared/mocks/object-cache.service.mock.ts b/projects/dspace/core/src/lib/testing/object-cache.service.mock.ts similarity index 83% rename from src/app/shared/mocks/object-cache.service.mock.ts rename to projects/dspace/core/src/lib/testing/object-cache.service.mock.ts index 8cceaefc3da..0edaf8fabdb 100644 --- a/src/app/shared/mocks/object-cache.service.mock.ts +++ b/projects/dspace/core/src/lib/testing/object-cache.service.mock.ts @@ -1,4 +1,4 @@ -import { ObjectCacheService } from '../../core/cache/object-cache.service'; +import { ObjectCacheService } from '../cache/object-cache.service'; export function getMockObjectCacheService(): ObjectCacheService { return jasmine.createSpyObj('objectCacheService', [ diff --git a/src/app/shared/testing/object-select-service.stub.ts b/projects/dspace/core/src/lib/testing/object-select-service.stub.ts similarity index 92% rename from src/app/shared/testing/object-select-service.stub.ts rename to projects/dspace/core/src/lib/testing/object-select-service.stub.ts index 05f5a509c0e..48414639130 100644 --- a/src/app/shared/testing/object-select-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/object-select-service.stub.ts @@ -1,7 +1,4 @@ -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; export class ObjectSelectServiceStub { diff --git a/src/app/shared/testing/pagination-service.stub.ts b/projects/dspace/core/src/lib/testing/pagination-service.stub.ts similarity index 87% rename from src/app/shared/testing/pagination-service.stub.ts rename to projects/dspace/core/src/lib/testing/pagination-service.stub.ts index 16a2f48ce75..9985b813213 100644 --- a/src/app/shared/testing/pagination-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/pagination-service.stub.ts @@ -1,10 +1,7 @@ import { of } from 'rxjs'; -import { - SortDirection, - SortOptions, -} from '../../core/cache/models/sort-options.model'; -import { FindListOptions } from '../../core/data/find-list-options.model'; +import { SortDirection, SortOptions } from '../cache/models/sort-options.model'; +import { FindListOptions } from '../data/find-list-options.model'; import { PaginationComponentOptions } from '../pagination/pagination-component-options.model'; export class PaginationServiceStub { diff --git a/src/app/shared/mocks/publication-claim-targets.mock.ts b/projects/dspace/core/src/lib/testing/publication-claim-targets.mock.ts similarity index 89% rename from src/app/shared/mocks/publication-claim-targets.mock.ts rename to projects/dspace/core/src/lib/testing/publication-claim-targets.mock.ts index b94235c0478..879d3036433 100644 --- a/src/app/shared/mocks/publication-claim-targets.mock.ts +++ b/projects/dspace/core/src/lib/testing/publication-claim-targets.mock.ts @@ -1,5 +1,5 @@ -import { SuggestionTarget } from '../../core/notifications/suggestions/models/suggestion-target.model'; -import { ResourceType } from '../../core/shared/resource-type'; +import { SuggestionTarget } from '../notifications/suggestions/models/suggestion-target.model'; +import { ResourceType } from '../shared/resource-type'; // REST Mock --------------------------------------------------------------------- // ------------------------------------------------------------------------------- diff --git a/src/app/shared/mocks/publication-claim.mock.ts b/projects/dspace/core/src/lib/testing/publication-claim.mock.ts similarity index 97% rename from src/app/shared/mocks/publication-claim.mock.ts rename to projects/dspace/core/src/lib/testing/publication-claim.mock.ts index a5ef4e30019..1c9504d631c 100644 --- a/src/app/shared/mocks/publication-claim.mock.ts +++ b/projects/dspace/core/src/lib/testing/publication-claim.mock.ts @@ -2,8 +2,8 @@ // REST Mock --------------------------------------------------------------------- // ------------------------------------------------------------------------------- -import { Suggestion } from '../../core/notifications/suggestions/models/suggestion.model'; -import { SUGGESTION } from '../../core/notifications/suggestions/models/suggestion-objects.resource-type'; +import { Suggestion } from '../notifications/suggestions/models/suggestion.model'; +import { SUGGESTION } from '../notifications/suggestions/models/suggestion-objects.resource-type'; export const mockSuggestionPublicationOne: Suggestion = { id: '24694773', diff --git a/src/app/shared/testing/query-params-directive.stub.ts b/projects/dspace/core/src/lib/testing/query-params-directive.stub.ts similarity index 82% rename from src/app/shared/testing/query-params-directive.stub.ts rename to projects/dspace/core/src/lib/testing/query-params-directive.stub.ts index 8610abbbd54..e6496b43806 100644 --- a/src/app/shared/testing/query-params-directive.stub.ts +++ b/projects/dspace/core/src/lib/testing/query-params-directive.stub.ts @@ -1,7 +1,4 @@ -import { - Directive, - Input, -} from '@angular/core'; +import { Directive, Input } from '@angular/core'; /* eslint-disable @angular-eslint/directive-class-suffix */ @Directive({ diff --git a/src/app/shared/testing/registry.service.stub.ts b/projects/dspace/core/src/lib/testing/registry.service.stub.ts similarity index 83% rename from src/app/shared/testing/registry.service.stub.ts rename to projects/dspace/core/src/lib/testing/registry.service.stub.ts index a28ca7feef8..aa9c6991176 100644 --- a/src/app/shared/testing/registry.service.stub.ts +++ b/projects/dspace/core/src/lib/testing/registry.service.stub.ts @@ -1,17 +1,14 @@ /* eslint-disable no-empty,@typescript-eslint/no-empty-function */ -import { - Observable, - of, -} from 'rxjs'; - -import { FindListOptions } from '../../core/data/find-list-options.model'; -import { PaginatedList } from '../../core/data/paginated-list.model'; -import { RemoteData } from '../../core/data/remote-data'; -import { MetadataField } from '../../core/metadata/metadata-field.model'; -import { MetadataSchema } from '../../core/metadata/metadata-schema.model'; -import { NoContent } from '../../core/shared/NoContent.model'; -import { createSuccessfulRemoteDataObject$ } from '../remote-data.utils'; -import { FollowLinkConfig } from '../utils/follow-link-config.model'; +import { Observable, of } from 'rxjs'; + +import { FindListOptions } from '../data/find-list-options.model'; +import { PaginatedList } from '../data/paginated-list.model'; +import { RemoteData } from '../data/remote-data'; +import { MetadataField } from '../metadata/metadata-field.model'; +import { MetadataSchema } from '../metadata/metadata-schema.model'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; +import { NoContent } from '../shared/NoContent.model'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; import { createPaginatedList } from './utils.test'; /** diff --git a/src/app/shared/testing/related-relationships.mock.ts b/projects/dspace/core/src/lib/testing/related-relationships.mock.ts similarity index 100% rename from src/app/shared/testing/related-relationships.mock.ts rename to projects/dspace/core/src/lib/testing/related-relationships.mock.ts diff --git a/src/app/shared/testing/relationship-data.service.stub.ts b/projects/dspace/core/src/lib/testing/relationship-data.service.stub.ts similarity index 78% rename from src/app/shared/testing/relationship-data.service.stub.ts rename to projects/dspace/core/src/lib/testing/relationship-data.service.stub.ts index f520ddb1ff7..3435dae7401 100644 --- a/src/app/shared/testing/relationship-data.service.stub.ts +++ b/projects/dspace/core/src/lib/testing/relationship-data.service.stub.ts @@ -1,20 +1,19 @@ /* eslint-disable no-empty, @typescript-eslint/no-empty-function */ +import { Observable, of } from 'rxjs'; + +import { FindListOptions } from '../data/find-list-options.model'; +import { PaginatedList } from '../data/paginated-list.model'; +import { RemoteData } from '../data/remote-data'; +import { DSpaceObject } from '../shared/dspace-object.model'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; +import { Item } from '../shared/item.model'; +import { Relationship } from '../shared/item-relationships/relationship.model'; +import { MetadataValue } from '../shared/metadata.models'; import { - Observable, - of, -} from 'rxjs'; - -import { FindListOptions } from '../../core/data/find-list-options.model'; -import { PaginatedList } from '../../core/data/paginated-list.model'; -import { RemoteData } from '../../core/data/remote-data'; -import { DSpaceObject } from '../../core/shared/dspace-object.model'; -import { Item } from '../../core/shared/item.model'; -import { Relationship } from '../../core/shared/item-relationships/relationship.model'; -import { MetadataValue } from '../../core/shared/metadata.models'; -import { MetadataRepresentation } from '../../core/shared/metadata-representation/metadata-representation.model'; -import { NoContent } from '../../core/shared/NoContent.model'; -import { createSuccessfulRemoteDataObject$ } from '../remote-data.utils'; -import { FollowLinkConfig } from '../utils/follow-link-config.model'; + MetadataRepresentation, +} from '../shared/metadata-representation/metadata-representation.model'; +import { NoContent } from '../shared/NoContent.model'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; /** * Stub class of {@link RelationshipDataService} diff --git a/src/app/shared/testing/relationship-types.mock.ts b/projects/dspace/core/src/lib/testing/relationship-types.mock.ts similarity index 100% rename from src/app/shared/testing/relationship-types.mock.ts rename to projects/dspace/core/src/lib/testing/relationship-types.mock.ts diff --git a/src/app/shared/mocks/remote-data-build.service.mock.ts b/projects/dspace/core/src/lib/testing/remote-data-build.service.mock.ts similarity index 83% rename from src/app/shared/mocks/remote-data-build.service.mock.ts rename to projects/dspace/core/src/lib/testing/remote-data-build.service.mock.ts index a44e54c92cc..77f00a16391 100644 --- a/src/app/shared/mocks/remote-data-build.service.mock.ts +++ b/projects/dspace/core/src/lib/testing/remote-data-build.service.mock.ts @@ -1,19 +1,13 @@ +import { hasValue } from '@dspace/utils'; import { Observable } from 'rxjs'; -import { - map, - switchMap, -} from 'rxjs/operators'; +import { map, switchMap } from 'rxjs/operators'; -import { RemoteDataBuildService } from '../../core/cache/builders/remote-data-build.service'; -import { - buildPaginatedList, - PaginatedList, -} from '../../core/data/paginated-list.model'; -import { RemoteData } from '../../core/data/remote-data'; -import { RequestEntry } from '../../core/data/request-entry.model'; -import { PageInfo } from '../../core/shared/page-info.model'; -import { hasValue } from '../empty.util'; -import { createSuccessfulRemoteDataObject$ } from '../remote-data.utils'; +import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; +import { buildPaginatedList, PaginatedList } from '../data/paginated-list.model'; +import { RemoteData } from '../data/remote-data'; +import { RequestEntry } from '../data/request-entry.model'; +import { PageInfo } from '../shared/page-info.model'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; export function getMockRemoteDataBuildService(toRemoteDataObservable$?: Observable>, buildList$?: Observable>>): RemoteDataBuildService { return { diff --git a/src/app/shared/testing/request-service.stub.ts b/projects/dspace/core/src/lib/testing/request-service.stub.ts similarity index 80% rename from src/app/shared/testing/request-service.stub.ts rename to projects/dspace/core/src/lib/testing/request-service.stub.ts index 9eef715488f..432b7a38f78 100644 --- a/src/app/shared/testing/request-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/request-service.stub.ts @@ -1,7 +1,4 @@ -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; /** * Stub service for {@link RequestService}. diff --git a/src/app/shared/mocks/request.service.mock.ts b/projects/dspace/core/src/lib/testing/request.service.mock.ts similarity index 77% rename from src/app/shared/mocks/request.service.mock.ts rename to projects/dspace/core/src/lib/testing/request.service.mock.ts index 16054012b62..666d8f92368 100644 --- a/src/app/shared/mocks/request.service.mock.ts +++ b/projects/dspace/core/src/lib/testing/request.service.mock.ts @@ -1,11 +1,8 @@ -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; -import { RequestService } from '../../core/data/request.service'; +import { RequestService } from '../data/request.service'; +import { RequestEntry } from '../data/request-entry.model'; import SpyObj = jasmine.SpyObj; -import { RequestEntry } from '../../core/data/request-entry.model'; export function getMockRequestService(requestEntry$: Observable = of(new RequestEntry())): SpyObj { return jasmine.createSpyObj('requestService', { diff --git a/src/app/shared/mocks/role-service.mock.ts b/projects/dspace/core/src/lib/testing/role-service.mock.ts similarity index 89% rename from src/app/shared/mocks/role-service.mock.ts rename to projects/dspace/core/src/lib/testing/role-service.mock.ts index 2ab9978e627..57058a6e4fc 100644 --- a/src/app/shared/mocks/role-service.mock.ts +++ b/projects/dspace/core/src/lib/testing/role-service.mock.ts @@ -1,9 +1,6 @@ -import { - BehaviorSubject, - Observable, -} from 'rxjs'; +import { BehaviorSubject, Observable } from 'rxjs'; -import { RoleType } from '../../core/roles/role-types'; +import { RoleType } from '../roles/role-types'; export class RoleServiceMock { diff --git a/src/app/shared/testing/route-service.stub.ts b/projects/dspace/core/src/lib/testing/route-service.stub.ts similarity index 96% rename from src/app/shared/testing/route-service.stub.ts rename to projects/dspace/core/src/lib/testing/route-service.stub.ts index 115b1d9692d..fb26c586b11 100644 --- a/src/app/shared/testing/route-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/route-service.stub.ts @@ -1,7 +1,4 @@ -import { - EMPTY, - of, -} from 'rxjs'; +import { EMPTY, of } from 'rxjs'; export const routeServiceStub: any = { /* eslint-disable no-empty,@typescript-eslint/no-empty-function */ diff --git a/src/app/shared/testing/router-link-directive.stub.ts b/projects/dspace/core/src/lib/testing/router-link-directive.stub.ts similarity index 83% rename from src/app/shared/testing/router-link-directive.stub.ts rename to projects/dspace/core/src/lib/testing/router-link-directive.stub.ts index 35d668c1bfd..7e6fd40df6e 100644 --- a/src/app/shared/testing/router-link-directive.stub.ts +++ b/projects/dspace/core/src/lib/testing/router-link-directive.stub.ts @@ -1,7 +1,4 @@ -import { - Directive, - Input, -} from '@angular/core'; +import { Directive, Input } from '@angular/core'; /* eslint-disable @angular-eslint/directive-class-suffix */ @Directive({ diff --git a/src/app/shared/mocks/router.mock.ts b/projects/dspace/core/src/lib/testing/router.mock.ts similarity index 100% rename from src/app/shared/mocks/router.mock.ts rename to projects/dspace/core/src/lib/testing/router.mock.ts diff --git a/src/app/shared/testing/router.stub.ts b/projects/dspace/core/src/lib/testing/router.stub.ts similarity index 100% rename from src/app/shared/testing/router.stub.ts rename to projects/dspace/core/src/lib/testing/router.stub.ts diff --git a/src/app/shared/testing/script-service.stub.ts b/projects/dspace/core/src/lib/testing/script-service.stub.ts similarity index 90% rename from src/app/shared/testing/script-service.stub.ts rename to projects/dspace/core/src/lib/testing/script-service.stub.ts index 747fdbc08e7..12ebec0aaf7 100644 --- a/src/app/shared/testing/script-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/script-service.stub.ts @@ -6,10 +6,7 @@ * http://www.dspace.org/license/ */ -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; /** * Stub class of {@link ScriptDataService}. diff --git a/src/app/shared/mocks/scroll-to-service.mock.ts b/projects/dspace/core/src/lib/testing/scroll-to-service.mock.ts similarity index 100% rename from src/app/shared/mocks/scroll-to-service.mock.ts rename to projects/dspace/core/src/lib/testing/scroll-to-service.mock.ts diff --git a/src/app/shared/testing/search-configuration-service.stub.ts b/projects/dspace/core/src/lib/testing/search-configuration-service.stub.ts similarity index 80% rename from src/app/shared/testing/search-configuration-service.stub.ts rename to projects/dspace/core/src/lib/testing/search-configuration-service.stub.ts index e06f2ab6910..b5635340999 100644 --- a/src/app/shared/testing/search-configuration-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/search-configuration-service.stub.ts @@ -1,16 +1,9 @@ import { Params } from '@angular/router'; -import { - BehaviorSubject, - Observable, - of, -} from 'rxjs'; - -import { - FilterConfig, - SearchConfig, -} from '../../core/shared/search/search-filters/search-config.model'; -import { PaginatedSearchOptions } from '../search/models/paginated-search-options.model'; -import { SearchOptions } from '../search/models/search-options.model'; +import { BehaviorSubject, Observable, of } from 'rxjs'; + +import { PaginatedSearchOptions } from '../shared/search/models/paginated-search-options.model'; +import { SearchOptions } from '../shared/search/models/search-options.model'; +import { FilterConfig, SearchConfig } from '../shared/search/search-filters/search-config.model'; /** * Stub class of {@link SearchConfigurationService} diff --git a/src/app/shared/testing/search-filter-service.stub.ts b/projects/dspace/core/src/lib/testing/search-filter-service.stub.ts similarity index 87% rename from src/app/shared/testing/search-filter-service.stub.ts rename to projects/dspace/core/src/lib/testing/search-filter-service.stub.ts index 6600796e030..f4a2e82d97c 100644 --- a/src/app/shared/testing/search-filter-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/search-filter-service.stub.ts @@ -1,15 +1,9 @@ import { Params } from '@angular/router'; -import { - Observable, - of, -} from 'rxjs'; - -import { - SortDirection, - SortOptions, -} from '../../core/cache/models/sort-options.model'; +import { Observable, of } from 'rxjs'; + +import { SortDirection, SortOptions } from '../cache/models/sort-options.model'; import { PaginationComponentOptions } from '../pagination/pagination-component-options.model'; -import { SearchFilterConfig } from '../search/models/search-filter-config.model'; +import { SearchFilterConfig } from '../shared/search/models/search-filter-config.model'; /* eslint-disable no-empty,@typescript-eslint/no-empty-function */ /** diff --git a/src/app/shared/mocks/search-service.mock.ts b/projects/dspace/core/src/lib/testing/search-service.mock.ts similarity index 65% rename from src/app/shared/mocks/search-service.mock.ts rename to projects/dspace/core/src/lib/testing/search-service.mock.ts index 434be75faec..02ba5d4e889 100644 --- a/src/app/shared/mocks/search-service.mock.ts +++ b/projects/dspace/core/src/lib/testing/search-service.mock.ts @@ -1,8 +1,6 @@ import { of } from 'rxjs'; -import { SearchService } from '../../core/shared/search/search.service'; - -export function getMockSearchService(): SearchService { +export function getMockSearchService() { return jasmine.createSpyObj('searchService', { search: '', getEndpoint: of('discover/search/objects'), diff --git a/src/app/shared/testing/search-service.stub.ts b/projects/dspace/core/src/lib/testing/search-service.stub.ts similarity index 74% rename from src/app/shared/testing/search-service.stub.ts rename to projects/dspace/core/src/lib/testing/search-service.stub.ts index 68ffba74a0a..d387dc2eabe 100644 --- a/src/app/shared/testing/search-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/search-service.stub.ts @@ -1,13 +1,9 @@ -import { - BehaviorSubject, - Observable, - of, -} from 'rxjs'; - -import { ViewMode } from '../../core/shared/view-mode.model'; -import { AppliedFilter } from '../search/models/applied-filter.model'; -import { PaginatedSearchOptions } from '../search/models/paginated-search-options.model'; -import { SearchFilterConfig } from '../search/models/search-filter-config.model'; +import { BehaviorSubject, Observable, of } from 'rxjs'; + +import { AppliedFilter } from '../shared/search/models/applied-filter.model'; +import { PaginatedSearchOptions } from '../shared/search/models/paginated-search-options.model'; +import { SearchFilterConfig } from '../shared/search/models/search-filter-config.model'; +import { ViewMode } from '../shared/view-mode.model'; /** * Stub class of {@link SearchService} diff --git a/src/app/shared/mocks/section-accesses-config.service.mock.ts b/projects/dspace/core/src/lib/testing/section-accesses-config.service.mock.ts similarity index 89% rename from src/app/shared/mocks/section-accesses-config.service.mock.ts rename to projects/dspace/core/src/lib/testing/section-accesses-config.service.mock.ts index 8e03913528d..69ca11dd01f 100644 --- a/src/app/shared/mocks/section-accesses-config.service.mock.ts +++ b/projects/dspace/core/src/lib/testing/section-accesses-config.service.mock.ts @@ -1,6 +1,6 @@ -import { SubmissionFormsModel } from '../../core/config/models/config-submission-forms.model'; -import { SubmissionFormsConfigDataService } from '../../core/config/submission-forms-config-data.service'; -import { createSuccessfulRemoteDataObject$ } from '../remote-data.utils'; +import { SubmissionFormsModel } from '../config/models/config-submission-forms.model'; +import { SubmissionFormsConfigDataService } from '../config/submission-forms-config-data.service'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; const configRes = Object.assign(new SubmissionFormsModel(), { 'id': 'AccessConditionDefaultConfiguration', diff --git a/src/app/shared/mocks/section-accesses.service.mock.ts b/projects/dspace/core/src/lib/testing/section-accesses.service.mock.ts similarity index 76% rename from src/app/shared/mocks/section-accesses.service.mock.ts rename to projects/dspace/core/src/lib/testing/section-accesses.service.mock.ts index 227871e4c99..22138da7251 100644 --- a/src/app/shared/mocks/section-accesses.service.mock.ts +++ b/projects/dspace/core/src/lib/testing/section-accesses.service.mock.ts @@ -1,6 +1,6 @@ import { of } from 'rxjs'; -import { SubmissionFormsModel } from '../../core/config/models/config-submission-forms.model'; +import { SubmissionFormsModel } from '../config/models/config-submission-forms.model'; const dataRes = Object.assign(new SubmissionFormsModel(), { 'id': 'AccessConditionDefaultConfiguration', diff --git a/src/app/shared/mocks/section-sherpa-policies.service.mock.ts b/projects/dspace/core/src/lib/testing/section-sherpa-policies.service.mock.ts similarity index 96% rename from src/app/shared/mocks/section-sherpa-policies.service.mock.ts rename to projects/dspace/core/src/lib/testing/section-sherpa-policies.service.mock.ts index f379af2568d..cbcd6eaaa3a 100644 --- a/src/app/shared/mocks/section-sherpa-policies.service.mock.ts +++ b/projects/dspace/core/src/lib/testing/section-sherpa-policies.service.mock.ts @@ -1,4 +1,6 @@ -import { WorkspaceitemSectionSherpaPoliciesObject } from '../../core/submission/models/workspaceitem-section-sherpa-policies.model'; +import { + WorkspaceitemSectionSherpaPoliciesObject, +} from '../submission/models/workspaceitem-section-sherpa-policies.model'; export const SherpaDataResponse = { 'id': 'sherpaPolicies', diff --git a/src/app/shared/mocks/section-upload.service.mock.ts b/projects/dspace/core/src/lib/testing/section-upload.service.mock.ts similarity index 88% rename from src/app/shared/mocks/section-upload.service.mock.ts rename to projects/dspace/core/src/lib/testing/section-upload.service.mock.ts index 3789bbac63c..e15985bef72 100644 --- a/src/app/shared/mocks/section-upload.service.mock.ts +++ b/projects/dspace/core/src/lib/testing/section-upload.service.mock.ts @@ -1,4 +1,4 @@ -import { SubmissionFormsConfigDataService } from '../../core/config/submission-forms-config-data.service'; +import { SubmissionFormsConfigDataService } from '../config/submission-forms-config-data.service'; /** * Mock for [[SubmissionFormsConfigService]] diff --git a/src/app/shared/testing/sections-service.stub.ts b/projects/dspace/core/src/lib/testing/sections-service.stub.ts similarity index 100% rename from src/app/shared/testing/sections-service.stub.ts rename to projects/dspace/core/src/lib/testing/sections-service.stub.ts diff --git a/src/app/shared/testing/server-response-service.stub.ts b/projects/dspace/core/src/lib/testing/server-response-service.stub.ts similarity index 100% rename from src/app/shared/testing/server-response-service.stub.ts rename to projects/dspace/core/src/lib/testing/server-response-service.stub.ts diff --git a/src/app/shared/testing/sidebar-service.stub.ts b/projects/dspace/core/src/lib/testing/sidebar-service.stub.ts similarity index 100% rename from src/app/shared/testing/sidebar-service.stub.ts rename to projects/dspace/core/src/lib/testing/sidebar-service.stub.ts diff --git a/src/app/shared/testing/special-group.mock.ts b/projects/dspace/core/src/lib/testing/special-group.mock.ts similarity index 87% rename from src/app/shared/testing/special-group.mock.ts rename to projects/dspace/core/src/lib/testing/special-group.mock.ts index 6d5f123ffe2..8e0d9664928 100644 --- a/src/app/shared/testing/special-group.mock.ts +++ b/projects/dspace/core/src/lib/testing/special-group.mock.ts @@ -1,16 +1,13 @@ import { Observable } from 'rxjs'; -import { - buildPaginatedList, - PaginatedList, -} from '../../core/data/paginated-list.model'; -import { RemoteData } from '../../core/data/remote-data'; -import { Group } from '../../core/eperson/models/group.model'; -import { PageInfo } from '../../core/shared/page-info.model'; +import { buildPaginatedList, PaginatedList } from '../data/paginated-list.model'; +import { RemoteData } from '../data/remote-data'; +import { Group } from '../eperson/models/group.model'; +import { PageInfo } from '../shared/page-info.model'; import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$, -} from '../remote-data.utils'; +} from '../utilities/remote-data.utils'; import { EPersonMock } from './eperson.mock'; export const SpecialGroupMock2: Group = Object.assign(new Group(), { diff --git a/src/app/shared/testing/store.mock.ts b/projects/dspace/core/src/lib/testing/store.mock.ts similarity index 87% rename from src/app/shared/testing/store.mock.ts rename to projects/dspace/core/src/lib/testing/store.mock.ts index 027200925b9..61294649d60 100644 --- a/src/app/shared/testing/store.mock.ts +++ b/projects/dspace/core/src/lib/testing/store.mock.ts @@ -1,10 +1,5 @@ import { Injectable } from '@angular/core'; -import { - ActionsSubject, - ReducerManager, - StateObservable, - Store, -} from '@ngrx/store'; +import { ActionsSubject, ReducerManager, StateObservable, Store } from '@ngrx/store'; import { BehaviorSubject } from 'rxjs'; @Injectable() diff --git a/src/app/shared/testing/submission-json-patch-operations-service.stub.ts b/projects/dspace/core/src/lib/testing/submission-json-patch-operations-service.stub.ts similarity index 84% rename from src/app/shared/testing/submission-json-patch-operations-service.stub.ts rename to projects/dspace/core/src/lib/testing/submission-json-patch-operations-service.stub.ts index 593cf921553..5e9bce682d5 100644 --- a/src/app/shared/testing/submission-json-patch-operations-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/submission-json-patch-operations-service.stub.ts @@ -1,4 +1,4 @@ -import { SubmissionPatchRequest } from '../../core/data/request.models'; +import { SubmissionPatchRequest } from '../data/request.models'; export class SubmissionJsonPatchOperationsServiceStub { protected linkPath = 'workspaceitems'; diff --git a/src/app/shared/testing/submission-oject-data-service.mock.ts b/projects/dspace/core/src/lib/testing/submission-oject-data-service.mock.ts similarity index 81% rename from src/app/shared/testing/submission-oject-data-service.mock.ts rename to projects/dspace/core/src/lib/testing/submission-oject-data-service.mock.ts index 8acb97c3a56..bb3de8539a1 100644 --- a/src/app/shared/testing/submission-oject-data-service.mock.ts +++ b/projects/dspace/core/src/lib/testing/submission-oject-data-service.mock.ts @@ -1,4 +1,4 @@ -export const mockSubmissionObjectDataService = jasmine.createSpyObj('SubmissionObjectDataService', { +export const mockSubmissionObjectDataService = jasmine.createSpyObj('SubmissionObjectService', { getHrefByID: jasmine.createSpy('getHrefByID'), findById: jasmine.createSpy('findById'), }); diff --git a/src/app/shared/testing/submission-rest-service.stub.ts b/projects/dspace/core/src/lib/testing/submission-rest-service.stub.ts similarity index 78% rename from src/app/shared/testing/submission-rest-service.stub.ts rename to projects/dspace/core/src/lib/testing/submission-rest-service.stub.ts index 9942d2c4fac..8278ca8c2f7 100644 --- a/src/app/shared/testing/submission-rest-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/submission-rest-service.stub.ts @@ -1,9 +1,9 @@ import { Store } from '@ngrx/store'; import { of } from 'rxjs'; -import { CoreState } from '../../core/core-state.model'; -import { RequestService } from '../../core/data/request.service'; -import { HALEndpointService } from '../../core/shared/hal-endpoint.service'; +import { CoreState } from '../core-state.model'; +import { RequestService } from '../data/request.service'; +import { HALEndpointService } from '../shared/hal-endpoint.service'; export class SubmissionRestServiceStub { protected linkPath = 'workspaceitems'; diff --git a/src/app/shared/testing/submission-service.stub.ts b/projects/dspace/core/src/lib/testing/submission-service.stub.ts similarity index 100% rename from src/app/shared/testing/submission-service.stub.ts rename to projects/dspace/core/src/lib/testing/submission-service.stub.ts diff --git a/src/app/shared/testing/subscriptions-data.mock.ts b/projects/dspace/core/src/lib/testing/subscriptions-data.mock.ts similarity index 93% rename from src/app/shared/testing/subscriptions-data.mock.ts rename to projects/dspace/core/src/lib/testing/subscriptions-data.mock.ts index 771f1e38fb8..0aad69503c6 100644 --- a/src/app/shared/testing/subscriptions-data.mock.ts +++ b/projects/dspace/core/src/lib/testing/subscriptions-data.mock.ts @@ -1,7 +1,7 @@ -import { EPerson } from '../../core/eperson/models/eperson.model'; -import { Item } from '../../core/shared/item.model'; -import { ITEM_TYPE } from '../../core/shared/item-relationships/item-type.resource-type'; -import { createSuccessfulRemoteDataObject$ } from '../remote-data.utils'; +import { EPerson } from '../eperson/models/eperson.model'; +import { Item } from '../shared/item.model'; +import { ITEM_TYPE } from '../shared/item-relationships/item-type.resource-type'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; export const mockSubscriptionEperson = Object.assign(new EPerson(), { 'id': 'fake-eperson-id', diff --git a/src/app/shared/mocks/suggestion.mock.ts b/projects/dspace/core/src/lib/testing/suggestion.mock.ts similarity index 98% rename from src/app/shared/mocks/suggestion.mock.ts rename to projects/dspace/core/src/lib/testing/suggestion.mock.ts index bceaa93368b..ee9f604a0da 100644 --- a/src/app/shared/mocks/suggestion.mock.ts +++ b/projects/dspace/core/src/lib/testing/suggestion.mock.ts @@ -1,10 +1,10 @@ import { of } from 'rxjs'; -import { DSpaceObject } from '../../core/shared/dspace-object.model'; -import { Item } from '../../core/shared/item.model'; -import { createSuccessfulRemoteDataObject$ } from '../remote-data.utils'; -import { SearchResult } from '../search/models/search-result.model'; -import { createPaginatedList } from '../testing/utils.test'; +import { DSpaceObject } from '../shared/dspace-object.model'; +import { Item } from '../shared/item.model'; +import { SearchResult } from '../shared/search/models/search-result.model'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; +import { createPaginatedList } from './utils.test'; // REST Mock --------------------------------------------------------------------- // ------------------------------------------------------------------------------- @@ -845,7 +845,7 @@ const ItemMockPid7: Item = Object.assign( }, ); -export const ItemMockPid8: Item = Object.assign( +const ItemMockPid8: Item = Object.assign( new Item(), { handle: '10077/21486', @@ -964,7 +964,7 @@ export const ItemMockPid8: Item = Object.assign( }, ); -export const ItemMockPid9: Item = Object.assign( +const ItemMockPid9: Item = Object.assign( new Item(), { handle: '10077/21486', @@ -1083,7 +1083,7 @@ export const ItemMockPid9: Item = Object.assign( }, ); -export const ItemMockPid10: Item = Object.assign( +const ItemMockPid10: Item = Object.assign( new Item(), { handle: '10713/29832', diff --git a/src/app/shared/testing/supervision-order.mock.ts b/projects/dspace/core/src/lib/testing/supervision-order.mock.ts similarity index 84% rename from src/app/shared/testing/supervision-order.mock.ts rename to projects/dspace/core/src/lib/testing/supervision-order.mock.ts index bc98de0dfb8..81ea1a699a1 100644 --- a/src/app/shared/testing/supervision-order.mock.ts +++ b/projects/dspace/core/src/lib/testing/supervision-order.mock.ts @@ -1,15 +1,12 @@ -import { buildPaginatedList } from '../../core/data/paginated-list.model'; -import { Item } from '../../core/shared/item.model'; -import { PageInfo } from '../../core/shared/page-info.model'; -import { SupervisionOrder } from '../../core/supervision-order/models/supervision-order.model'; +import { buildPaginatedList } from '../data/paginated-list.model'; +import { Item } from '../shared/item.model'; +import { PageInfo } from '../shared/page-info.model'; +import { SupervisionOrder } from '../supervision-order/models/supervision-order.model'; import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$, -} from '../remote-data.utils'; -import { - GroupMock, - GroupMock2, -} from './group-mock'; +} from '../utilities/remote-data.utils'; +import { GroupMock, GroupMock2 } from './group-mock'; const itemMock = Object.assign(new Item(), { metadata: { diff --git a/src/app/shared/testing/test-data-service.mock.ts b/projects/dspace/core/src/lib/testing/test-data-service.mock.ts similarity index 63% rename from src/app/shared/testing/test-data-service.mock.ts rename to projects/dspace/core/src/lib/testing/test-data-service.mock.ts index b5529f4a070..e2200027798 100644 --- a/src/app/shared/testing/test-data-service.mock.ts +++ b/projects/dspace/core/src/lib/testing/test-data-service.mock.ts @@ -1,15 +1,12 @@ import { Injectable } from '@angular/core'; import { Operation } from 'fast-json-patch'; -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; -import { FindListOptions } from '../../core/data/find-list-options.model'; -import { RemoteData } from '../../core/data/remote-data'; -import { Item } from '../../core/shared/item.model'; -import { createSuccessfulRemoteDataObject$ } from '../remote-data.utils'; -import { FollowLinkConfig } from '../utils/follow-link-config.model'; +import { FindListOptions } from '../data/find-list-options.model'; +import { RemoteData } from '../data/remote-data'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; +import { Item } from '../shared/item.model'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; @Injectable() export class TestDataService { diff --git a/src/app/shared/mocks/translate-loader.mock.ts b/projects/dspace/core/src/lib/testing/translate-loader.mock.ts similarity index 81% rename from src/app/shared/mocks/translate-loader.mock.ts rename to projects/dspace/core/src/lib/testing/translate-loader.mock.ts index 2c636caab2c..d409a834499 100644 --- a/src/app/shared/mocks/translate-loader.mock.ts +++ b/projects/dspace/core/src/lib/testing/translate-loader.mock.ts @@ -1,8 +1,5 @@ import { TranslateLoader } from '@ngx-translate/core'; -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; export class TranslateLoaderMock implements TranslateLoader { getTranslation(lang: string): Observable { diff --git a/src/app/shared/mocks/translate.service.mock.ts b/projects/dspace/core/src/lib/testing/translate.service.mock.ts similarity index 100% rename from src/app/shared/mocks/translate.service.mock.ts rename to projects/dspace/core/src/lib/testing/translate.service.mock.ts diff --git a/src/app/shared/testing/truncatable-service.stub.ts b/projects/dspace/core/src/lib/testing/truncatable-service.stub.ts similarity index 91% rename from src/app/shared/testing/truncatable-service.stub.ts rename to projects/dspace/core/src/lib/testing/truncatable-service.stub.ts index 074781d0273..497e47e1cc7 100644 --- a/src/app/shared/testing/truncatable-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/truncatable-service.stub.ts @@ -1,7 +1,4 @@ -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; export class TruncatableServiceStub { diff --git a/src/app/shared/testing/utils.test.ts b/projects/dspace/core/src/lib/testing/utils.test.ts similarity index 85% rename from src/app/shared/testing/utils.test.ts rename to projects/dspace/core/src/lib/testing/utils.test.ts index 134b2bc05d8..8f861da3b8e 100644 --- a/src/app/shared/testing/utils.test.ts +++ b/projects/dspace/core/src/lib/testing/utils.test.ts @@ -1,22 +1,12 @@ import { Component } from '@angular/core'; -import { - ComponentFixture, - MetadataOverride, - TestBed, -} from '@angular/core/testing'; -import { - Observable, - of, -} from 'rxjs'; +import { ComponentFixture, MetadataOverride, TestBed } from '@angular/core/testing'; +import { Observable, of } from 'rxjs'; -import { - buildPaginatedList, - PaginatedList, -} from '../../core/data/paginated-list.model'; -import { RequestEntry } from '../../core/data/request-entry.model'; -import { RequestEntryState } from '../../core/data/request-entry-state.model'; -import { PageInfo } from '../../core/shared/page-info.model'; -import { UnCacheableObject } from '../../core/shared/uncacheable-object.model'; +import { buildPaginatedList, PaginatedList } from '../data/paginated-list.model'; +import { RequestEntry } from '../data/request-entry.model'; +import { RequestEntryState } from '../data/request-entry-state.model'; +import { PageInfo } from '../shared/page-info.model'; +import { UnCacheableObject } from '../shared/uncacheable-object.model'; /** * Returns true if a Native Element has a specified css class. diff --git a/src/app/shared/mocks/uuid.service.mock.ts b/projects/dspace/core/src/lib/testing/uuid.service.mock.ts similarity index 77% rename from src/app/shared/mocks/uuid.service.mock.ts rename to projects/dspace/core/src/lib/testing/uuid.service.mock.ts index 1acf3e1f3e4..2da9c0774b5 100644 --- a/src/app/shared/mocks/uuid.service.mock.ts +++ b/projects/dspace/core/src/lib/testing/uuid.service.mock.ts @@ -1,4 +1,4 @@ -import { UUIDService } from '../../core/shared/uuid.service'; +import { UUIDService } from '../shared/uuid.service'; export const defaultUUID = 'c4ce6905-290b-478f-979d-a333bbd7820f'; diff --git a/src/app/shared/testing/vocabulary-service.stub.ts b/projects/dspace/core/src/lib/testing/vocabulary-service.stub.ts similarity index 72% rename from src/app/shared/testing/vocabulary-service.stub.ts rename to projects/dspace/core/src/lib/testing/vocabulary-service.stub.ts index d81a14a9630..987dbd7ad1a 100644 --- a/src/app/shared/testing/vocabulary-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/vocabulary-service.stub.ts @@ -1,18 +1,12 @@ -import { - Observable, - of, -} from 'rxjs'; - -import { - buildPaginatedList, - PaginatedList, -} from '../../core/data/paginated-list.model'; -import { RemoteData } from '../../core/data/remote-data'; -import { PageInfo } from '../../core/shared/page-info.model'; -import { Vocabulary } from '../../core/submission/vocabularies/models/vocabulary.model'; -import { VocabularyEntry } from '../../core/submission/vocabularies/models/vocabulary-entry.model'; -import { VocabularyOptions } from '../../core/submission/vocabularies/models/vocabulary-options.model'; -import { createSuccessfulRemoteDataObject$ } from '../remote-data.utils'; +import { Observable, of } from 'rxjs'; + +import { buildPaginatedList, PaginatedList } from '../data/paginated-list.model'; +import { RemoteData } from '../data/remote-data'; +import { PageInfo } from '../shared/page-info.model'; +import { Vocabulary } from '../submission/vocabularies/models/vocabulary.model'; +import { VocabularyEntry } from '../submission/vocabularies/models/vocabulary-entry.model'; +import { VocabularyOptions } from '../submission/vocabularies/models/vocabulary-options.model'; +import { createSuccessfulRemoteDataObject$ } from '../utilities/remote-data.utils'; export class VocabularyServiceStub { diff --git a/src/app/shared/testing/workflow-action-data-service.stub.ts b/projects/dspace/core/src/lib/testing/workflow-action-data-service.stub.ts similarity index 54% rename from src/app/shared/testing/workflow-action-data-service.stub.ts rename to projects/dspace/core/src/lib/testing/workflow-action-data-service.stub.ts index 9cd61d7955a..e051e9943fa 100644 --- a/src/app/shared/testing/workflow-action-data-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/workflow-action-data-service.stub.ts @@ -1,13 +1,10 @@ -import { - EMPTY, - Observable, -} from 'rxjs'; +import { EMPTY, Observable } from 'rxjs'; -import { FindListOptions } from '../../core/data/find-list-options.model'; -import { RemoteData } from '../../core/data/remote-data'; -import { WorkflowItem } from '../../core/submission/models/workflowitem.model'; -import { WorkspaceItem } from '../../core/submission/models/workspaceitem.model'; -import { FollowLinkConfig } from '../utils/follow-link-config.model'; +import { FindListOptions } from '../data/find-list-options.model'; +import { RemoteData } from '../data/remote-data'; +import { FollowLinkConfig } from '../shared/follow-link-config.model'; +import { WorkflowItem } from '../submission/models/workflowitem.model'; +import { WorkspaceItem } from '../submission/models/workspaceitem.model'; import { IdentifiableDataServiceStub } from './identifiable-data-service.stub'; /** diff --git a/src/app/shared/testing/workflow-item-data-service.stub.ts b/projects/dspace/core/src/lib/testing/workflow-item-data-service.stub.ts similarity index 74% rename from src/app/shared/testing/workflow-item-data-service.stub.ts rename to projects/dspace/core/src/lib/testing/workflow-item-data-service.stub.ts index 3b5ce938f85..cc3f0c61796 100644 --- a/src/app/shared/testing/workflow-item-data-service.stub.ts +++ b/projects/dspace/core/src/lib/testing/workflow-item-data-service.stub.ts @@ -1,4 +1,4 @@ -import { WorkflowItem } from '../../core/submission/models/workflowitem.model'; +import { WorkflowItem } from '../submission/models/workflowitem.model'; import { IdentifiableDataServiceStub } from './identifiable-data-service.stub'; /** diff --git a/src/express.tokens.ts b/projects/dspace/core/src/lib/tokens/express.tokens.ts similarity index 100% rename from src/express.tokens.ts rename to projects/dspace/core/src/lib/tokens/express.tokens.ts diff --git a/projects/dspace/core/src/lib/tokens/index.ts b/projects/dspace/core/src/lib/tokens/index.ts new file mode 100644 index 00000000000..8957e6f8a0b --- /dev/null +++ b/projects/dspace/core/src/lib/tokens/index.ts @@ -0,0 +1,5 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './express.tokens'; diff --git a/projects/dspace/core/src/lib/url-baser/index.ts b/projects/dspace/core/src/lib/url-baser/index.ts new file mode 100644 index 00000000000..5a9c4594b61 --- /dev/null +++ b/projects/dspace/core/src/lib/url-baser/index.ts @@ -0,0 +1,5 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './url-baser'; diff --git a/src/app/core/url-baser/url-baser.ts b/projects/dspace/core/src/lib/url-baser/url-baser.ts similarity index 93% rename from src/app/core/url-baser/url-baser.ts rename to projects/dspace/core/src/lib/url-baser/url-baser.ts index 290f91fe830..43db5bf79c0 100644 --- a/src/app/core/url-baser/url-baser.ts +++ b/projects/dspace/core/src/lib/url-baser/url-baser.ts @@ -1,4 +1,4 @@ -import { isEmpty } from '../../shared/empty.util'; +import { isEmpty } from '@dspace/utils'; /** * Extracts the base URL diff --git a/projects/dspace/core/src/lib/url-combiner/index.ts b/projects/dspace/core/src/lib/url-combiner/index.ts new file mode 100644 index 00000000000..45cc8ebb776 --- /dev/null +++ b/projects/dspace/core/src/lib/url-combiner/index.ts @@ -0,0 +1,7 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './rest-url-combiner'; +export * from './url-combiner.spec'; +export * from './url-combiner'; diff --git a/src/app/core/url-combiner/rest-url-combiner.ts b/projects/dspace/core/src/lib/url-combiner/rest-url-combiner.ts similarity index 65% rename from src/app/core/url-combiner/rest-url-combiner.ts rename to projects/dspace/core/src/lib/url-combiner/rest-url-combiner.ts index e3667dbe294..cb64537d711 100644 --- a/src/app/core/url-combiner/rest-url-combiner.ts +++ b/projects/dspace/core/src/lib/url-combiner/rest-url-combiner.ts @@ -1,4 +1,3 @@ -import { environment } from '../../../environments/environment'; import { URLCombiner } from './url-combiner'; /** @@ -8,7 +7,7 @@ import { URLCombiner } from './url-combiner'; * TODO write tests once GlobalConfig becomes injectable */ export class RESTURLCombiner extends URLCombiner { - constructor(...parts: string[]) { - super(environment.rest.baseUrl, '/api', ...parts); + constructor(baseUrl: string, ...parts: string[]) { + super(baseUrl, '/api', ...parts); } } diff --git a/src/app/core/url-combiner/url-combiner.spec.ts b/projects/dspace/core/src/lib/url-combiner/url-combiner.spec.ts similarity index 100% rename from src/app/core/url-combiner/url-combiner.spec.ts rename to projects/dspace/core/src/lib/url-combiner/url-combiner.spec.ts diff --git a/src/app/core/url-combiner/url-combiner.ts b/projects/dspace/core/src/lib/url-combiner/url-combiner.ts similarity index 95% rename from src/app/core/url-combiner/url-combiner.ts rename to projects/dspace/core/src/lib/url-combiner/url-combiner.ts index e7468c61073..6731400662b 100644 --- a/src/app/core/url-combiner/url-combiner.ts +++ b/projects/dspace/core/src/lib/url-combiner/url-combiner.ts @@ -1,4 +1,4 @@ -import { isEmpty } from '../../shared/empty.util'; +import { isEmpty } from '@dspace/utils'; /** * Combines a variable number of strings representing parts diff --git a/src/app/core/utilities/enter-zone.scheduler.ts b/projects/dspace/core/src/lib/utilities/enter-zone.scheduler.ts similarity index 89% rename from src/app/core/utilities/enter-zone.scheduler.ts rename to projects/dspace/core/src/lib/utilities/enter-zone.scheduler.ts index 6c95eae263d..2215ff2ee12 100644 --- a/src/app/core/utilities/enter-zone.scheduler.ts +++ b/projects/dspace/core/src/lib/utilities/enter-zone.scheduler.ts @@ -1,8 +1,5 @@ import { NgZone } from '@angular/core'; -import { - SchedulerLike, - Subscription, -} from 'rxjs'; +import { SchedulerLike, Subscription } from 'rxjs'; /** * An RXJS scheduler that will re-enter the Angular zone to run what's scheduled diff --git a/src/app/core/utilities/equals.decorators.ts b/projects/dspace/core/src/lib/utilities/equals.decorators.ts similarity index 98% rename from src/app/core/utilities/equals.decorators.ts rename to projects/dspace/core/src/lib/utilities/equals.decorators.ts index 78bfd01740c..aae76a65d80 100644 --- a/src/app/core/utilities/equals.decorators.ts +++ b/projects/dspace/core/src/lib/utilities/equals.decorators.ts @@ -1,8 +1,5 @@ -import { - hasNoValue, - hasValue, - isEmpty, -} from '../../shared/empty.util'; +import { hasNoValue, hasValue, isEmpty } from '@dspace/utils'; + import { GenericConstructor } from '../shared/generic-constructor'; const excludedFromEquals = new Map(); diff --git a/src/app/core/utilities/equatable.spec.ts b/projects/dspace/core/src/lib/utilities/equatable.spec.ts similarity index 97% rename from src/app/core/utilities/equatable.spec.ts rename to projects/dspace/core/src/lib/utilities/equatable.spec.ts index cea3c35b3d0..c629c501d2a 100644 --- a/src/app/core/utilities/equatable.spec.ts +++ b/projects/dspace/core/src/lib/utilities/equatable.spec.ts @@ -1,11 +1,7 @@ /* eslint-disable max-classes-per-file */ import cloneDeep from 'lodash/cloneDeep'; -import { - EquatableObject, - excludeFromEquals, - fieldsForEquals, -} from './equals.decorators'; +import { EquatableObject, excludeFromEquals, fieldsForEquals } from './equals.decorators'; class Dog extends EquatableObject { public name: string; diff --git a/projects/dspace/core/src/lib/utilities/index.ts b/projects/dspace/core/src/lib/utilities/index.ts new file mode 100644 index 00000000000..9a82502ef2a --- /dev/null +++ b/projects/dspace/core/src/lib/utilities/index.ts @@ -0,0 +1,14 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './enter-zone.scheduler'; +export * from './equals.decorators'; +export * from './equatable.spec'; +export * from './item-iiif-utils'; +export * from './item-relationships-utils'; +export * from './key-value-pair.model'; +export * from './leave-zone.scheduler'; +export * from './relation-query.utils.spec'; +export * from './relation-query.utils'; +export * from './remote-data.utils'; diff --git a/src/app/item-page/simple/item-types/shared/item-iiif-utils.ts b/projects/dspace/core/src/lib/utilities/item-iiif-utils.ts similarity index 76% rename from src/app/item-page/simple/item-types/shared/item-iiif-utils.ts rename to projects/dspace/core/src/lib/utilities/item-iiif-utils.ts index a39b345bf05..7a056aad622 100644 --- a/src/app/item-page/simple/item-types/shared/item-iiif-utils.ts +++ b/projects/dspace/core/src/lib/utilities/item-iiif-utils.ts @@ -1,16 +1,9 @@ -import { - DefaultUrlSerializer, - UrlTree, -} from '@angular/router'; +import { DefaultUrlSerializer, UrlTree } from '@angular/router'; import { Observable } from 'rxjs'; -import { - filter, - map, - take, -} from 'rxjs/operators'; +import { filter, map, take } from 'rxjs/operators'; -import { RouteService } from '../../../../core/services/route.service'; -import { Item } from '../../../../core/shared/item.model'; +import { RouteService } from '../services/route.service'; +import { Item } from '../shared/item.model'; export const isIiifEnabled = (item: Item) => { return !!item.firstMetadataValue('dspace.iiif.enabled'); diff --git a/src/app/item-page/simple/item-types/shared/item-relationships-utils.ts b/projects/dspace/core/src/lib/utilities/item-relationships-utils.ts similarity index 89% rename from src/app/item-page/simple/item-types/shared/item-relationships-utils.ts rename to projects/dspace/core/src/lib/utilities/item-relationships-utils.ts index 10b4c4bd327..7f7aa9b90f4 100644 --- a/src/app/item-page/simple/item-types/shared/item-relationships-utils.ts +++ b/projects/dspace/core/src/lib/utilities/item-relationships-utils.ts @@ -1,23 +1,18 @@ import { InjectionToken } from '@angular/core'; +import { hasValue } from '@dspace/utils'; import { combineLatest as observableCombineLatest, Observable, of, zip as observableZip, } from 'rxjs'; -import { - distinctUntilChanged, - map, - mergeMap, - switchMap, -} from 'rxjs/operators'; +import { distinctUntilChanged, map, mergeMap, switchMap } from 'rxjs/operators'; -import { PaginatedList } from '../../../../core/data/paginated-list.model'; -import { RemoteData } from '../../../../core/data/remote-data'; -import { Item } from '../../../../core/shared/item.model'; -import { Relationship } from '../../../../core/shared/item-relationships/relationship.model'; -import { getFirstCompletedRemoteData } from '../../../../core/shared/operators'; -import { hasValue } from '../../../../shared/empty.util'; +import { PaginatedList } from '../data/paginated-list.model'; +import { RemoteData } from '../data/remote-data'; +import { Item } from '../shared/item.model'; +import { Relationship } from '../shared/item-relationships/relationship.model'; +import { getFirstCompletedRemoteData } from '../shared/operators'; export const PAGINATED_RELATIONS_TO_ITEMS_OPERATOR = new InjectionToken<(thisId: string) => (source: Observable>>) => Observable>>>('paginatedRelationsToItems', { providedIn: 'root', diff --git a/src/app/shared/key-value-pair.model.ts b/projects/dspace/core/src/lib/utilities/key-value-pair.model.ts similarity index 100% rename from src/app/shared/key-value-pair.model.ts rename to projects/dspace/core/src/lib/utilities/key-value-pair.model.ts diff --git a/src/app/core/utilities/leave-zone.scheduler.ts b/projects/dspace/core/src/lib/utilities/leave-zone.scheduler.ts similarity index 89% rename from src/app/core/utilities/leave-zone.scheduler.ts rename to projects/dspace/core/src/lib/utilities/leave-zone.scheduler.ts index 47d1400b4ea..9ed3aa401fd 100644 --- a/src/app/core/utilities/leave-zone.scheduler.ts +++ b/projects/dspace/core/src/lib/utilities/leave-zone.scheduler.ts @@ -1,8 +1,5 @@ import { NgZone } from '@angular/core'; -import { - SchedulerLike, - Subscription, -} from 'rxjs'; +import { SchedulerLike, Subscription } from 'rxjs'; /** * An RXJS scheduler that will run what's scheduled outside of the Angular zone diff --git a/src/app/shared/utils/relation-query.utils.spec.ts b/projects/dspace/core/src/lib/utilities/relation-query.utils.spec.ts similarity index 89% rename from src/app/shared/utils/relation-query.utils.spec.ts rename to projects/dspace/core/src/lib/utilities/relation-query.utils.spec.ts index 1f2a725a9f7..f40c3314974 100644 --- a/src/app/shared/utils/relation-query.utils.spec.ts +++ b/projects/dspace/core/src/lib/utilities/relation-query.utils.spec.ts @@ -1,7 +1,4 @@ -import { - getFilterByRelation, - getQueryByRelations, -} from './relation-query.utils'; +import { getFilterByRelation, getQueryByRelations } from './relation-query.utils'; describe('Relation Query Utils', () => { const relationtype = 'isAuthorOfPublication'; diff --git a/src/app/shared/utils/relation-query.utils.ts b/projects/dspace/core/src/lib/utilities/relation-query.utils.ts similarity index 87% rename from src/app/shared/utils/relation-query.utils.ts rename to projects/dspace/core/src/lib/utilities/relation-query.utils.ts index 158744e78c3..97005c9c825 100644 --- a/src/app/shared/utils/relation-query.utils.ts +++ b/projects/dspace/core/src/lib/utilities/relation-query.utils.ts @@ -1,9 +1,6 @@ -import { Item } from '../../core/shared/item.model'; -import { Relationship } from '../../core/shared/item-relationships/relationship.model'; -import { - followLink, - FollowLinkConfig, -} from './follow-link-config.model'; +import { followLink, FollowLinkConfig } from '../shared/follow-link-config.model'; +import { Item } from '../shared/item.model'; +import { Relationship } from '../shared/item-relationships/relationship.model'; /** * Get the query for looking up items by relation type diff --git a/src/app/shared/remote-data.utils.ts b/projects/dspace/core/src/lib/utilities/remote-data.utils.ts similarity index 91% rename from src/app/shared/remote-data.utils.ts rename to projects/dspace/core/src/lib/utilities/remote-data.utils.ts index 236e808315c..d909f54c60c 100644 --- a/src/app/shared/remote-data.utils.ts +++ b/projects/dspace/core/src/lib/utilities/remote-data.utils.ts @@ -1,12 +1,8 @@ import { HttpErrorResponse } from '@angular/common/http'; -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; -import { environment } from '../../environments/environment'; -import { RemoteData } from '../core/data/remote-data'; -import { RequestEntryState } from '../core/data/request-entry-state.model'; +import { RemoteData } from '../data/remote-data'; +import { RequestEntryState } from '../data/request-entry-state.model'; /** * A fixed timestamp to use in tests @@ -21,7 +17,7 @@ const FIXED_TIMESTAMP = new Date().getTime(); export function createSuccessfulRemoteDataObject(object: T, timeCompleted = FIXED_TIMESTAMP): RemoteData { return new RemoteData( timeCompleted, - environment.cache.msToLive.default, + 15 * 60 * 1000, timeCompleted, RequestEntryState.Success, undefined, @@ -49,7 +45,7 @@ export function createSuccessfulRemoteDataObject$(object: T, timeCompleted?: export function createFailedRemoteDataObject(errorMessage?: string, statusCode?: number, timeCompleted = 1577836800000): RemoteData { return new RemoteData( timeCompleted, - environment.cache.msToLive.default, + 15 * 60 * 1000, timeCompleted, RequestEntryState.Error, errorMessage, @@ -76,7 +72,7 @@ export function createFailedRemoteDataObject$(errorMessage?: string, statusCo export function createPendingRemoteDataObject(lastVerified = FIXED_TIMESTAMP): RemoteData { return new RemoteData( undefined, - environment.cache.msToLive.default, + 15 * 60 * 1000, lastVerified, RequestEntryState.ResponsePending, undefined, diff --git a/src/app/core/xsrf/browser-xsrf.service.spec.ts b/projects/dspace/core/src/lib/xsrf/browser-xsrf.service.spec.ts similarity index 76% rename from src/app/core/xsrf/browser-xsrf.service.spec.ts rename to projects/dspace/core/src/lib/xsrf/browser-xsrf.service.spec.ts index 9c67819741a..0fd9317ca40 100644 --- a/src/app/core/xsrf/browser-xsrf.service.spec.ts +++ b/projects/dspace/core/src/lib/xsrf/browser-xsrf.service.spec.ts @@ -1,13 +1,7 @@ -import { - HttpClient, - provideHttpClient, - withInterceptorsFromDi, -} from '@angular/common/http'; -import { - HttpTestingController, - provideHttpClientTesting, -} from '@angular/common/http/testing'; +import { HttpClient, provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'; +import { HttpTestingController, provideHttpClientTesting } from '@angular/common/http/testing'; import { TestBed } from '@angular/core/testing'; +import { APP_CONFIG } from '@dspace/config'; import { RESTURLCombiner } from '../url-combiner/rest-url-combiner'; import { BrowserXSRFService } from './browser-xsrf.service'; @@ -16,8 +10,8 @@ describe(`BrowserXSRFService`, () => { let service: BrowserXSRFService; let httpClient: HttpClient; let httpTestingController: HttpTestingController; - - const endpointURL = new RESTURLCombiner('/security/csrf').toString(); + const envConfig = { rest: { baseUrl: 'https://rest.com/server' } }; + const endpointURL = new RESTURLCombiner(envConfig.rest.baseUrl,'/security/csrf').toString(); beforeEach(() => { TestBed.configureTestingModule({ @@ -26,6 +20,7 @@ describe(`BrowserXSRFService`, () => { BrowserXSRFService, provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting(), + { provide: APP_CONFIG, useValue: envConfig }, ], }); httpClient = TestBed.inject(HttpClient); diff --git a/src/app/core/xsrf/browser-xsrf.service.ts b/projects/dspace/core/src/lib/xsrf/browser-xsrf.service.ts similarity index 77% rename from src/app/core/xsrf/browser-xsrf.service.ts rename to projects/dspace/core/src/lib/xsrf/browser-xsrf.service.ts index 121defc061b..ba4f9c5c111 100644 --- a/src/app/core/xsrf/browser-xsrf.service.ts +++ b/projects/dspace/core/src/lib/xsrf/browser-xsrf.service.ts @@ -1,5 +1,6 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; +import { APP_CONFIG, AppConfig } from '@dspace/config'; import { take } from 'rxjs/operators'; import { RESTURLCombiner } from '../url-combiner/rest-url-combiner'; @@ -13,10 +14,12 @@ import { XSRFService } from './xsrf.service'; */ @Injectable() export class BrowserXSRFService extends XSRFService { + protected readonly appConfig: AppConfig = inject(APP_CONFIG); + initXSRFToken(httpClient: HttpClient): () => Promise { return () => new Promise((resolve) => { // Force a new token to be created by calling the CSRF endpoint - httpClient.get(new RESTURLCombiner('/security/csrf').toString(), undefined).pipe( + httpClient.get(new RESTURLCombiner(this.appConfig.rest.baseUrl, '/security/csrf').toString(), undefined).pipe( take(1), ).subscribe(() => { // Once token is returned, set tokenInitialized to true. diff --git a/projects/dspace/core/src/lib/xsrf/index.ts b/projects/dspace/core/src/lib/xsrf/index.ts new file mode 100644 index 00000000000..bafcb5c20a2 --- /dev/null +++ b/projects/dspace/core/src/lib/xsrf/index.ts @@ -0,0 +1,13 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './browser-xsrf.service.spec'; +export * from './browser-xsrf.service'; +export * from './server-xsrf.service.spec'; +export * from './server-xsrf.service'; +export * from './xsrf.constants'; +export * from './xsrf.interceptor.spec'; +export * from './xsrf.interceptor'; +export * from './xsrf.service.spec'; +export * from './xsrf.service'; diff --git a/src/app/core/xsrf/server-xsrf.service.spec.ts b/projects/dspace/core/src/lib/xsrf/server-xsrf.service.spec.ts similarity index 100% rename from src/app/core/xsrf/server-xsrf.service.spec.ts rename to projects/dspace/core/src/lib/xsrf/server-xsrf.service.spec.ts diff --git a/src/app/core/xsrf/server-xsrf.service.ts b/projects/dspace/core/src/lib/xsrf/server-xsrf.service.ts similarity index 100% rename from src/app/core/xsrf/server-xsrf.service.ts rename to projects/dspace/core/src/lib/xsrf/server-xsrf.service.ts diff --git a/src/app/core/xsrf/xsrf.constants.ts b/projects/dspace/core/src/lib/xsrf/xsrf.constants.ts similarity index 100% rename from src/app/core/xsrf/xsrf.constants.ts rename to projects/dspace/core/src/lib/xsrf/xsrf.constants.ts diff --git a/src/app/core/xsrf/xsrf.interceptor.spec.ts b/projects/dspace/core/src/lib/xsrf/xsrf.interceptor.spec.ts similarity index 88% rename from src/app/core/xsrf/xsrf.interceptor.spec.ts rename to projects/dspace/core/src/lib/xsrf/xsrf.interceptor.spec.ts index 54afdc9b9c6..cb1370c3c54 100644 --- a/src/app/core/xsrf/xsrf.interceptor.spec.ts +++ b/projects/dspace/core/src/lib/xsrf/xsrf.interceptor.spec.ts @@ -5,18 +5,15 @@ import { provideHttpClient, withInterceptorsFromDi, } from '@angular/common/http'; -import { - HttpTestingController, - provideHttpClientTesting, -} from '@angular/common/http/testing'; +import { HttpTestingController, provideHttpClientTesting } from '@angular/common/http/testing'; import { TestBed } from '@angular/core/testing'; +import { APP_CONFIG, RestRequestMethod } from '@dspace/config'; -import { CookieServiceMock } from '../../shared/mocks/cookie.service.mock'; -import { HttpXsrfTokenExtractorMock } from '../../shared/mocks/http-xsrf-token-extractor.mock'; +import { CookieService } from '../cookies/cookie.service'; import { RequestError } from '../data/request-error.model'; -import { RestRequestMethod } from '../data/rest-request-method'; import { DspaceRestService } from '../dspace-rest/dspace-rest.service'; -import { CookieService } from '../services/cookie.service'; +import { CookieServiceMock } from '../testing/cookie.service.mock'; +import { HttpXsrfTokenExtractorMock } from '../testing/http-xsrf-token-extractor.mock'; import { XsrfInterceptor } from './xsrf.interceptor'; describe(`XsrfInterceptor`, () => { @@ -40,24 +37,30 @@ describe(`XsrfInterceptor`, () => { beforeEach(() => { const tokenExtractor = new HttpXsrfTokenExtractorMock(testToken); cookieService = new CookieServiceMock(); - const interceptor = new XsrfInterceptor(tokenExtractor,cookieService as any); TestBed.configureTestingModule({ imports: [], providers: [ DspaceRestService, + { provide: HttpXsrfTokenExtractor, useClass: HttpXsrfTokenExtractorMock }, + { provide: CookieService, useValue: cookieService }, + { provide: APP_CONFIG, useValue: { rest: { baseUrl: 'https://rest.com/server' } } }, { provide: HTTP_INTERCEPTORS, - useValue: interceptor, + useFactory: (extractor: HttpXsrfTokenExtractor, cookieSvc: CookieService) => + new XsrfInterceptor(extractor, cookieSvc), + deps: [HttpXsrfTokenExtractor, CookieService], multi: true, }, - { provide: HttpXsrfTokenExtractor, useValue: tokenExtractor }, - { provide: CookieService, useValue: cookieService }, provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting(), ], }); + TestBed.overrideProvider(HttpXsrfTokenExtractor, { + useFactory: () => new HttpXsrfTokenExtractorMock(testToken), + }); + service = TestBed.get(DspaceRestService); httpMock = TestBed.get(HttpTestingController); }); diff --git a/src/app/core/xsrf/xsrf.interceptor.ts b/projects/dspace/core/src/lib/xsrf/xsrf.interceptor.ts similarity index 88% rename from src/app/core/xsrf/xsrf.interceptor.ts rename to projects/dspace/core/src/lib/xsrf/xsrf.interceptor.ts index 91e780590b2..0f335822079 100644 --- a/src/app/core/xsrf/xsrf.interceptor.ts +++ b/projects/dspace/core/src/lib/xsrf/xsrf.interceptor.ts @@ -7,23 +7,14 @@ import { HttpResponse, HttpXsrfTokenExtractor, } from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { - Observable, - throwError, -} from 'rxjs'; -import { - catchError, - tap, -} from 'rxjs/operators'; +import { inject, Injectable } from '@angular/core'; +import { APP_CONFIG, AppConfig } from '@dspace/config'; +import { Observable, throwError } from 'rxjs'; +import { catchError, tap } from 'rxjs/operators'; -import { CookieService } from '../services/cookie.service'; +import { CookieService } from '../cookies/cookie.service'; import { RESTURLCombiner } from '../url-combiner/rest-url-combiner'; -import { - XSRF_COOKIE, - XSRF_REQUEST_HEADER, - XSRF_RESPONSE_HEADER, -} from './xsrf.constants'; +import { XSRF_COOKIE, XSRF_REQUEST_HEADER, XSRF_RESPONSE_HEADER } from './xsrf.constants'; /** * Custom Http Interceptor intercepting Http Requests & Responses to @@ -52,8 +43,12 @@ import { */ @Injectable() export class XsrfInterceptor implements HttpInterceptor { + protected readonly appConfig: AppConfig = inject(APP_CONFIG); - constructor(private tokenExtractor: HttpXsrfTokenExtractor, private cookieService: CookieService) { + constructor( + private tokenExtractor: HttpXsrfTokenExtractor, + private cookieService: CookieService, + ) { } /** @@ -75,7 +70,7 @@ export class XsrfInterceptor implements HttpInterceptor { const reqUrl = req.url.toLowerCase(); // Get root URL of configured REST API - const restUrl = new RESTURLCombiner('/').toString().toLowerCase(); + const restUrl = new RESTURLCombiner(this.appConfig.rest.baseUrl, '/').toString().toLowerCase(); // Skip any non-mutating request. This is because our REST API does NOT // require CSRF verification for read-only requests like GET or HEAD diff --git a/src/app/core/xsrf/xsrf.service.spec.ts b/projects/dspace/core/src/lib/xsrf/xsrf.service.spec.ts similarity index 100% rename from src/app/core/xsrf/xsrf.service.spec.ts rename to projects/dspace/core/src/lib/xsrf/xsrf.service.spec.ts diff --git a/src/app/core/xsrf/xsrf.service.ts b/projects/dspace/core/src/lib/xsrf/xsrf.service.ts similarity index 100% rename from src/app/core/xsrf/xsrf.service.ts rename to projects/dspace/core/src/lib/xsrf/xsrf.service.ts diff --git a/projects/dspace/core/src/public-api.ts b/projects/dspace/core/src/public-api.ts new file mode 100644 index 00000000000..320bdbc7f98 --- /dev/null +++ b/projects/dspace/core/src/public-api.ts @@ -0,0 +1,5 @@ +/* + * Public API Surface of core + */ + +export * from './lib/index'; diff --git a/projects/dspace/core/tsconfig.lib.json b/projects/dspace/core/tsconfig.lib.json new file mode 100644 index 00000000000..c927aabde21 --- /dev/null +++ b/projects/dspace/core/tsconfig.lib.json @@ -0,0 +1,15 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "../../../out-tsc/lib", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": ["jasmine"] + }, + "exclude": [ + "**/*.spec.ts" + ] +} diff --git a/projects/dspace/core/tsconfig.lib.prod.json b/projects/dspace/core/tsconfig.lib.prod.json new file mode 100644 index 00000000000..9215caac46f --- /dev/null +++ b/projects/dspace/core/tsconfig.lib.prod.json @@ -0,0 +1,11 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "compilationMode": "partial" + } +} diff --git a/projects/dspace/core/tsconfig.spec.json b/projects/dspace/core/tsconfig.spec.json new file mode 100644 index 00000000000..35d15edba86 --- /dev/null +++ b/projects/dspace/core/tsconfig.spec.json @@ -0,0 +1,15 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "../../../out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "include": [ + "**/*.spec.ts", + "**/*.d.ts" + ] +} diff --git a/projects/dspace/utils/.eslintrc.json b/projects/dspace/utils/.eslintrc.json new file mode 100644 index 00000000000..636b0171059 --- /dev/null +++ b/projects/dspace/utils/.eslintrc.json @@ -0,0 +1,42 @@ +{ + "extends": "../../../.eslintrc.json", + "ignorePatterns": [ + "!**/*" + ], + "overrides": [ + { + "files": [ + "*.ts" + ], + "parserOptions": { + "project": [ + "projects/dspace/utils/tsconfig.(lib|spec).json" + ] + }, + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "lib", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "lib", + "style": "kebab-case" + } + ] + } + }, + { + "files": [ + "*.html" + ], + "rules": {} + } + ] +} diff --git a/projects/dspace/utils/README.md b/projects/dspace/utils/README.md new file mode 100644 index 00000000000..11b7af18e4e --- /dev/null +++ b/projects/dspace/utils/README.md @@ -0,0 +1,24 @@ +# Utils + +This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.2.0. + +## Code scaffolding + +Run `ng generate component component-name --project utils` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project utils`. +> Note: Don't forget to add `--project utils` or else it will be added to the default project in your `angular.json` file. + +## Build + +Run `ng build utils` to build the project. The build artifacts will be stored in the `dist/` directory. + +## Publishing + +After building your library with `ng build utils`, go to the dist folder `cd dist/utils` and run `npm publish`. + +## Running unit tests + +Run `ng test utils` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page. diff --git a/projects/dspace/utils/ng-package.json b/projects/dspace/utils/ng-package.json new file mode 100644 index 00000000000..bfd54a6e0bf --- /dev/null +++ b/projects/dspace/utils/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../../dist/dspace/utils", + "lib": { + "entryFile": "src/public-api.ts" + } +} \ No newline at end of file diff --git a/projects/dspace/utils/package.json b/projects/dspace/utils/package.json new file mode 100644 index 00000000000..a9cd695114e --- /dev/null +++ b/projects/dspace/utils/package.json @@ -0,0 +1,12 @@ +{ + "name": "@dspace/utils", + "version": "0.0.1", + "peerDependencies": { + "@angular/common": "^18.2.0", + "@angular/core": "^18.2.0" + }, + "dependencies": { + "tslib": "^2.3.0" + }, + "sideEffects": false +} diff --git a/src/app/shared/date.util.spec.ts b/projects/dspace/utils/src/lib/date.util.spec.ts similarity index 100% rename from src/app/shared/date.util.spec.ts rename to projects/dspace/utils/src/lib/date.util.spec.ts diff --git a/src/app/shared/date.util.ts b/projects/dspace/utils/src/lib/date.util.ts similarity index 100% rename from src/app/shared/date.util.ts rename to projects/dspace/utils/src/lib/date.util.ts diff --git a/src/app/shared/empty.util.spec.ts b/projects/dspace/utils/src/lib/empty.util.spec.ts similarity index 100% rename from src/app/shared/empty.util.spec.ts rename to projects/dspace/utils/src/lib/empty.util.spec.ts diff --git a/src/app/shared/empty.util.ts b/projects/dspace/utils/src/lib/empty.util.ts similarity index 100% rename from src/app/shared/empty.util.ts rename to projects/dspace/utils/src/lib/empty.util.ts diff --git a/projects/dspace/utils/src/lib/index.ts b/projects/dspace/utils/src/lib/index.ts new file mode 100644 index 00000000000..ce9b6780e12 --- /dev/null +++ b/projects/dspace/utils/src/lib/index.ts @@ -0,0 +1,15 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from './date.util.spec'; +export * from './date.util'; +export * from './empty.util.spec'; +export * from './empty.util'; +export * from './license.utils'; +export * from './numeric.util.spec'; +export * from './numeric.util'; +export * from './object-list-utils'; +export * from './object.util.spec'; +export * from './object.util'; +export * from './validator.functions'; diff --git a/src/app/shared/utils/license.utils.ts b/projects/dspace/utils/src/lib/license.utils.ts similarity index 100% rename from src/app/shared/utils/license.utils.ts rename to projects/dspace/utils/src/lib/license.utils.ts diff --git a/src/app/shared/numeric.util.spec.ts b/projects/dspace/utils/src/lib/numeric.util.spec.ts similarity index 100% rename from src/app/shared/numeric.util.spec.ts rename to projects/dspace/utils/src/lib/numeric.util.spec.ts diff --git a/src/app/shared/numeric.util.ts b/projects/dspace/utils/src/lib/numeric.util.ts similarity index 100% rename from src/app/shared/numeric.util.ts rename to projects/dspace/utils/src/lib/numeric.util.ts diff --git a/src/app/shared/utils/object-list-utils.ts b/projects/dspace/utils/src/lib/object-list-utils.ts similarity index 100% rename from src/app/shared/utils/object-list-utils.ts rename to projects/dspace/utils/src/lib/object-list-utils.ts diff --git a/src/app/shared/object.util.spec.ts b/projects/dspace/utils/src/lib/object.util.spec.ts similarity index 100% rename from src/app/shared/object.util.spec.ts rename to projects/dspace/utils/src/lib/object.util.spec.ts diff --git a/src/app/shared/object.util.ts b/projects/dspace/utils/src/lib/object.util.ts similarity index 100% rename from src/app/shared/object.util.ts rename to projects/dspace/utils/src/lib/object.util.ts diff --git a/src/app/shared/utils/validator.functions.ts b/projects/dspace/utils/src/lib/validator.functions.ts similarity index 92% rename from src/app/shared/utils/validator.functions.ts rename to projects/dspace/utils/src/lib/validator.functions.ts index da3b94d3031..485e6a9274a 100644 --- a/src/app/shared/utils/validator.functions.ts +++ b/projects/dspace/utils/src/lib/validator.functions.ts @@ -3,7 +3,7 @@ import { ValidatorFn, } from '@angular/forms'; -import { isNotEmpty } from '../empty.util'; +import { isNotEmpty } from './empty.util'; /** * Returns a validator function to check if the control's value is in a given list diff --git a/projects/dspace/utils/src/public-api.ts b/projects/dspace/utils/src/public-api.ts new file mode 100644 index 00000000000..f8d3c426141 --- /dev/null +++ b/projects/dspace/utils/src/public-api.ts @@ -0,0 +1,11 @@ +/* + * Public API Surface of utils + */ + +export * from './lib/date.util'; +export * from './lib/empty.util'; +export * from './lib/license.utils'; +export * from './lib/numeric.util'; +export * from './lib/object-list-utils'; +export * from './lib/object.util'; +export * from './lib/validator.functions'; diff --git a/projects/dspace/utils/tsconfig.lib.json b/projects/dspace/utils/tsconfig.lib.json new file mode 100644 index 00000000000..fdcd9fe29f3 --- /dev/null +++ b/projects/dspace/utils/tsconfig.lib.json @@ -0,0 +1,15 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "../../../out-tsc/lib", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [] + }, + "exclude": [ + "**/*.spec.ts" + ] +} diff --git a/projects/dspace/utils/tsconfig.lib.prod.json b/projects/dspace/utils/tsconfig.lib.prod.json new file mode 100644 index 00000000000..9215caac46f --- /dev/null +++ b/projects/dspace/utils/tsconfig.lib.prod.json @@ -0,0 +1,11 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "compilationMode": "partial" + } +} diff --git a/projects/dspace/utils/tsconfig.spec.json b/projects/dspace/utils/tsconfig.spec.json new file mode 100644 index 00000000000..35d15edba86 --- /dev/null +++ b/projects/dspace/utils/tsconfig.spec.json @@ -0,0 +1,15 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "../../../out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "include": [ + "**/*.spec.ts", + "**/*.d.ts" + ] +} diff --git a/scripts/base-href.ts b/scripts/base-href.ts index 7212e1c5168..4830a5c6da9 100644 --- a/scripts/base-href.ts +++ b/scripts/base-href.ts @@ -1,14 +1,15 @@ import { existsSync, writeFileSync } from 'fs'; import { join } from 'path'; -import { AppConfig } from '../src/config/app-config.interface'; +import { AppConfig } from '../projects/dspace/config/src/lib/app-config.interface'; import { buildAppConfig } from '../src/config/config.server'; + /** * Script to set baseHref as `ui.nameSpace` for development mode. Adds `baseHref` to angular.json build options. - * + * * Usage (see package.json): - * + * * yarn base-href */ diff --git a/scripts/serve.ts b/scripts/serve.ts index ee8570a45c1..d873deec479 100644 --- a/scripts/serve.ts +++ b/scripts/serve.ts @@ -1,6 +1,6 @@ import { spawn } from 'child_process'; -import { AppConfig } from '../src/config/app-config.interface'; +import { AppConfig } from '../projects/dspace/config/src/lib/app-config.interface'; import { buildAppConfig } from '../src/config/config.server'; const appConfig: AppConfig = buildAppConfig(); diff --git a/scripts/test-rest.ts b/scripts/test-rest.ts index 9066777c42a..d3ac8c134ad 100644 --- a/scripts/test-rest.ts +++ b/scripts/test-rest.ts @@ -1,9 +1,10 @@ import { request } from 'http'; import { request as https_request } from 'https'; -import { AppConfig } from '../src/config/app-config.interface'; +import { AppConfig } from '../projects/dspace/config/src/lib/app-config.interface'; import { buildAppConfig } from '../src/config/config.server'; + const appConfig: AppConfig = buildAppConfig(); /** diff --git a/server.ts b/server.ts index cf21eda6af9..32c34b7b83b 100644 --- a/server.ts +++ b/server.ts @@ -14,9 +14,8 @@ * from your application's main.server.ts file, as seen below with the * import for `ngExpressEngine`. */ - -import 'zone.js/node'; import 'reflect-metadata'; +import 'zone.js/node'; /* eslint-disable import/no-namespace */ import * as morgan from 'morgan'; @@ -41,24 +40,20 @@ import { enableProdMode } from '@angular/core'; import { environment } from './src/environments/environment'; import { createProxyMiddleware } from 'http-proxy-middleware'; -import { hasValue } from './src/app/shared/empty.util'; -import { UIServerConfig } from './src/config/ui-server-config.interface'; -import bootstrap from './src/main.server'; -import { buildAppConfig } from './src/config/config.server'; +import { hasValue } from '@dspace/utils'; import { APP_CONFIG, AppConfig, -} from './src/config/app-config.interface'; + UIServerConfig, + SsrExcludePatterns, +} from '@dspace/config'; +import bootstrap from './src/main.server'; +import { buildAppConfig } from './src/config/config.server'; import { extendEnvironmentWithAppConfig } from './src/config/config.util'; import { logStartupMessage } from './startup-message'; -import { TOKENITEM } from './src/app/core/auth/models/auth-token-info.model'; +import { TOKENITEM, REQUEST, RESPONSE } from '@dspace/core' import { CommonEngine } from '@angular/ssr'; import { APP_BASE_HREF } from '@angular/common'; -import { - REQUEST, - RESPONSE, -} from './src/express.tokens'; -import { SsrExcludePatterns } from "./src/config/ssr-config.interface"; /* * Set path for the browser application's dist folder @@ -333,7 +328,7 @@ function initCache() { // Initialize a new "least-recently-used" item cache (where least recently used pages are removed first) // See https://www.npmjs.com/package/lru-cache // When enabled, each page defaults to expiring after 1 day (defined in default-app-config.ts) - botCache = new LRU( { + botCache = new LRU({ max: environment.cache.serverSide.botCache.max, ttl: environment.cache.serverSide.botCache.timeToLive, allowStale: environment.cache.serverSide.botCache.allowStale, @@ -345,7 +340,7 @@ function initCache() { // may expire pages more frequently. // When enabled, each page defaults to expiring after 10 seconds (defined in default-app-config.ts) // to minimize anonymous users seeing out-of-date content - anonymousCache = new LRU( { + anonymousCache = new LRU({ max: environment.cache.serverSide.anonymousCache.max, ttl: environment.cache.serverSide.anonymousCache.timeToLive, allowStale: environment.cache.serverSide.anonymousCache.allowStale, @@ -429,19 +424,25 @@ function checkCacheForRequest(cacheName: string, cache: LRU, req, r // Check if this page is in our cache const cachedCopy = cache.get(key); if (cachedCopy) { - if (environment.cache.serverSide.debug) { console.log(`CACHE HIT FOR ${key} in ${cacheName} cache`); } + if (environment.cache.serverSide.debug) { + console.log(`CACHE HIT FOR ${key} in ${cacheName} cache`); + } // Check if cached copy is expired (If expired, the key will now be gone from cache) // NOTE: This will only occur when "allowStale=true", as it means the "get(key)" above returned a stale value. if (!cache.has(key)) { - if (environment.cache.serverSide.debug) { console.log(`CACHE EXPIRED FOR ${key} in ${cacheName} cache. Re-rendering...`); } + if (environment.cache.serverSide.debug) { + console.log(`CACHE EXPIRED FOR ${key} in ${cacheName} cache. Re-rendering...`); + } // Update cached copy by rerendering server-side // NOTE: In this scenario the currently cached copy will be returned to the current user. // This re-render is performed behind the scenes to update cached copy for next user. serverSideRender(req, res, next, false); } } else { - if (environment.cache.serverSide.debug) { console.log(`CACHE MISS FOR ${key} in ${cacheName} cache.`); } + if (environment.cache.serverSide.debug) { + console.log(`CACHE MISS FOR ${key} in ${cacheName} cache.`); + } } // return page from cache @@ -474,9 +475,13 @@ function saveToCache(req, page: any) { if (!isUserAuthenticated(req)) { const key = getCacheKey(req); // Avoid caching "/reload/[random]" paths (these are hard refreshes after logout) - if (key.startsWith('/reload')) { return; } + if (key.startsWith('/reload')) { + return; + } // Avoid caching not successful responses (status code different from 2XX status) - if (hasNotSucceeded(req.res.statusCode)) { return; } + if (hasNotSucceeded(req.res.statusCode)) { + return; + } // Retrieve response headers to save, if any const headers = retrieveHeaders(req.res); @@ -484,13 +489,17 @@ function saveToCache(req, page: any) { // (NOTE: has() will return false if page is expired in cache) if (botCacheEnabled() && !botCache.has(key)) { botCache.set(key, { page, headers }); - if (environment.cache.serverSide.debug) { console.log(`CACHE SAVE FOR ${key} in bot cache.`); } + if (environment.cache.serverSide.debug) { + console.log(`CACHE SAVE FOR ${key} in bot cache.`); + } } // If anonymous cache is enabled, save it to that cache if it doesn't exist or is expired if (anonymousCacheEnabled() && !anonymousCache.has(key)) { anonymousCache.set(key, { page, headers }); - if (environment.cache.serverSide.debug) { console.log(`CACHE SAVE FOR ${key} in anonymous cache.`); } + if (environment.cache.serverSide.debug) { + console.log(`CACHE SAVE FOR ${key} in anonymous cache.`); + } } } } @@ -519,6 +528,7 @@ function retrieveHeaders(response) { return headers; } + /** * Whether a user is authenticated or not */ @@ -549,9 +559,11 @@ function createHttpsServer(keys) { // Graceful shutdown when signalled const terminator = createHttpTerminator({ server: listener }); process.on('SIGINT', () => { - void (async ()=> { + void (async () => { console.debug('Closing HTTPS server on signal'); - await terminator.terminate().catch(e => { console.error(e); }); + await terminator.terminate().catch(e => { + console.error(e); + }); console.debug('HTTPS server closed'); })(); }); @@ -575,8 +587,11 @@ function run() { process.on('SIGINT', () => { void (async () => { console.debug('Closing HTTP server on signal'); - await terminator.terminate().catch(e => { console.error(e); }); - console.debug('HTTP server closed.');return undefined; + await terminator.terminate().catch(e => { + console.error(e); + }); + console.debug('HTTP server closed.'); + return undefined; })(); }); } @@ -636,7 +651,7 @@ function start() { */ function isExcludedFromSsr(path: string, excludePathPattern: SsrExcludePatterns[]): boolean { const patterns = excludePathPattern.map(p => - new RegExp(p.pattern, p.flag || '') + new RegExp(p.pattern, p.flag || ''), ); return patterns.some((regex) => { return regex.test(path) @@ -658,6 +673,7 @@ function healthCheck(req, res) { }); }); } + // Webpack will replace 'require' with '__webpack_require__' // '__non_webpack_require__' is a proxy to Node 'require' // The below code is to ensure that the server is run only when not requiring the bundle. diff --git a/src/app/access-control/access-control-routes.ts b/src/app/access-control/access-control-routes.ts index 07b6f6c4ff4..3d650aae3e4 100644 --- a/src/app/access-control/access-control-routes.ts +++ b/src/app/access-control/access-control-routes.ts @@ -1,17 +1,16 @@ import { AbstractControl } from '@angular/forms'; import { Route } from '@angular/router'; +import { + i18nBreadcrumbResolver, + groupAdministratorGuard, + siteAdministratorGuard, +} from '@dspace/core' import { DYNAMIC_ERROR_MESSAGES_MATCHER, DynamicErrorMessagesMatcher, } from '@ng-dynamic-forms/core'; -import { i18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.resolver'; -import { groupAdministratorGuard } from '../core/data/feature-authorization/feature-authorization-guard/group-administrator.guard'; -import { siteAdministratorGuard } from '../core/data/feature-authorization/feature-authorization-guard/site-administrator.guard'; -import { - EPERSON_PATH, - GROUP_PATH, -} from './access-control-routing-paths'; +import { EPERSON_PATH, GROUP_PATH } from './access-control-routing-paths'; import { BulkAccessComponent } from './bulk-access/bulk-access.component'; import { EPeopleRegistryComponent } from './epeople-registry/epeople-registry.component'; import { EPersonFormComponent } from './epeople-registry/eperson-form/eperson-form.component'; diff --git a/src/app/access-control/access-control-routing-paths.ts b/src/app/access-control/access-control-routing-paths.ts index 06ae0321945..163d55c630f 100644 --- a/src/app/access-control/access-control-routing-paths.ts +++ b/src/app/access-control/access-control-routing-paths.ts @@ -1,8 +1,13 @@ -import { getAccessControlModuleRoute } from '../app-routing-paths'; -import { URLCombiner } from '../core/url-combiner/url-combiner'; +import { Group, URLCombiner } from '@dspace/core' export const EPERSON_PATH = 'epeople'; +export const ACCESS_CONTROL_MODULE_PATH = 'access-control'; + +export function getAccessControlModuleRoute() { + return `/${ACCESS_CONTROL_MODULE_PATH}`; +} + export function getEPersonsRoute(): string { return new URLCombiner(getAccessControlModuleRoute(), EPERSON_PATH).toString(); } @@ -20,3 +25,11 @@ export function getGroupsRoute() { export function getGroupEditRoute(id: string) { return new URLCombiner(getGroupsRoute(), id, 'edit').toString(); } + +/** + * Get Edit page of group + * @param group Group we want edit page for + */ +export function getGroupEditPageRouterLink(group: Group): string { + return getGroupEditRoute(group.id); +} diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts index f9eb487d73a..cb346a35f2b 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts @@ -1,26 +1,25 @@ import { NO_ERRORS_SCHEMA } from '@angular/core'; -import { - ComponentFixture, - TestBed, - waitForAsync, -} from '@angular/core/testing'; -import { - NgbAccordionModule, - NgbNavModule, -} from '@ng-bootstrap/ng-bootstrap'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { buildPaginatedList, PageInfo, createSuccessfulRemoteDataObject } from '@dspace/core' +import { NgbAccordionModule, NgbNavModule } from '@ng-bootstrap/ng-bootstrap'; import { TranslateModule } from '@ngx-translate/core'; import { of } from 'rxjs'; -import { buildPaginatedList } from '../../../core/data/paginated-list.model'; -import { PageInfo } from '../../../core/shared/page-info.model'; -import { getMockThemeService } from '../../../shared/mocks/theme-service.mock'; -import { ListableObjectComponentLoaderComponent } from '../../../shared/object-collection/shared/listable-object/listable-object-component-loader.component'; -import { SelectableListItemControlComponent } from '../../../shared/object-collection/shared/selectable-list-item-control/selectable-list-item-control.component'; -import { SelectableListService } from '../../../shared/object-list/selectable-list/selectable-list.service'; -import { SelectableObject } from '../../../shared/object-list/selectable-list/selectable-list.service.spec'; +import { + ListableObjectComponentLoaderComponent, +} from '../../../shared/object-collection/shared/listable-object/listable-object-component-loader.component'; +import { + SelectableListItemControlComponent, +} from '../../../shared/object-collection/shared/selectable-list-item-control/selectable-list-item-control.component'; +import { + SelectableListService, +} from '../../../shared/object-list/selectable-list/selectable-list.service'; +import { + SelectableObject, +} from '../../../shared/object-list/selectable-list/selectable-list.service.spec'; import { PaginationComponent } from '../../../shared/pagination/pagination.component'; -import { createSuccessfulRemoteDataObject } from '../../../shared/remote-data.utils'; import { ThemedSearchComponent } from '../../../shared/search/themed-search.component'; +import { getMockThemeService } from '../../../shared/theme-support/test/theme-service.mock'; import { ThemeService } from '../../../shared/theme-support/theme.service'; import { BulkAccessBrowseComponent } from './bulk-access-browse.component'; diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts index 8b7b92717a7..76425ef87de 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts @@ -1,42 +1,36 @@ import { AsyncPipe } from '@angular/common'; +import { Component, Input, OnDestroy, OnInit } from '@angular/core'; import { - Component, - Input, - OnDestroy, - OnInit, -} from '@angular/core'; -import { - NgbAccordionModule, - NgbNavModule, -} from '@ng-bootstrap/ng-bootstrap'; + buildPaginatedList, + PaginatedList, + RemoteData, + PaginationComponentOptions, + ListableObject, + PageInfo, + createSuccessfulRemoteDataObject, +} from '@dspace/core' +import { hasValue } from '@dspace/utils'; +import { NgbAccordionModule, NgbNavModule } from '@ng-bootstrap/ng-bootstrap'; import { TranslateModule } from '@ngx-translate/core'; import { NgxPaginationModule } from 'ngx-pagination'; +import { BehaviorSubject, Subscription } from 'rxjs'; +import { distinctUntilChanged, map } from 'rxjs/operators'; + +import { SEARCH_CONFIG_SERVICE } from '../../../my-dspace-page/my-dspace-configuration.service'; import { - BehaviorSubject, - Subscription, -} from 'rxjs'; + ListableObjectComponentLoaderComponent, +} from '../../../shared/object-collection/shared/listable-object/listable-object-component-loader.component'; import { - distinctUntilChanged, - map, -} from 'rxjs/operators'; - + SelectableListItemControlComponent, +} from '../../../shared/object-collection/shared/selectable-list-item-control/selectable-list-item-control.component'; import { - buildPaginatedList, - PaginatedList, -} from '../../../core/data/paginated-list.model'; -import { RemoteData } from '../../../core/data/remote-data'; -import { PageInfo } from '../../../core/shared/page-info.model'; -import { SearchConfigurationService } from '../../../core/shared/search/search-configuration.service'; -import { SEARCH_CONFIG_SERVICE } from '../../../my-dspace-page/my-dspace-configuration.service'; -import { hasValue } from '../../../shared/empty.util'; -import { ListableObject } from '../../../shared/object-collection/shared/listable-object.model'; -import { ListableObjectComponentLoaderComponent } from '../../../shared/object-collection/shared/listable-object/listable-object-component-loader.component'; -import { SelectableListItemControlComponent } from '../../../shared/object-collection/shared/selectable-list-item-control/selectable-list-item-control.component'; -import { SelectableListState } from '../../../shared/object-list/selectable-list/selectable-list.reducer'; -import { SelectableListService } from '../../../shared/object-list/selectable-list/selectable-list.service'; + SelectableListState, +} from '../../../shared/object-list/selectable-list/selectable-list.reducer'; +import { + SelectableListService, +} from '../../../shared/object-list/selectable-list/selectable-list.service'; import { PaginationComponent } from '../../../shared/pagination/pagination.component'; -import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model'; -import { createSuccessfulRemoteDataObject } from '../../../shared/remote-data.utils'; +import { SearchConfigurationService } from '../../../shared/search/search-configuration.service'; import { ThemedSearchComponent } from '../../../shared/search/themed-search.component'; import { BrowserOnlyPipe } from '../../../shared/utils/browser-only.pipe'; diff --git a/src/app/access-control/bulk-access/bulk-access.component.spec.ts b/src/app/access-control/bulk-access/bulk-access.component.spec.ts index fda1db0aa3e..1255e9e2a88 100644 --- a/src/app/access-control/bulk-access/bulk-access.component.spec.ts +++ b/src/app/access-control/bulk-access/bulk-access.component.spec.ts @@ -1,23 +1,25 @@ -import { - Component, - NO_ERRORS_SCHEMA, -} from '@angular/core'; -import { - ComponentFixture, - TestBed, -} from '@angular/core/testing'; +import { Component, NO_ERRORS_SCHEMA } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; +import { + NotificationsService, + Process, + NotificationsServiceStub, + createSuccessfulRemoteDataObject$, +} from '@dspace/core' import { TranslateModule } from '@ngx-translate/core'; import { of } from 'rxjs'; -import { Process } from '../../process-page/processes/process.model'; -import { BulkAccessControlService } from '../../shared/access-control-form-container/bulk-access-control.service'; -import { getMockThemeService } from '../../shared/mocks/theme-service.mock'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { SelectableListState } from '../../shared/object-list/selectable-list/selectable-list.reducer'; -import { SelectableListService } from '../../shared/object-list/selectable-list/selectable-list.service'; -import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; -import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub'; +import { + BulkAccessControlService, +} from '../../shared/access-control-form-container/bulk-access-control.service'; +import { + SelectableListState, +} from '../../shared/object-list/selectable-list/selectable-list.reducer'; +import { + SelectableListService, +} from '../../shared/object-list/selectable-list/selectable-list.service'; +import { getMockThemeService } from '../../shared/theme-support/test/theme-service.mock'; import { ThemeService } from '../../shared/theme-support/theme.service'; import { BulkAccessComponent } from './bulk-access.component'; import { BulkAccessSettingsComponent } from './settings/bulk-access-settings.component'; diff --git a/src/app/access-control/epeople-registry/epeople-registry.actions.ts b/src/app/access-control/epeople-registry/epeople-registry.actions.ts index e6e7608ba3f..1c2aa30fb19 100644 --- a/src/app/access-control/epeople-registry/epeople-registry.actions.ts +++ b/src/app/access-control/epeople-registry/epeople-registry.actions.ts @@ -1,9 +1,7 @@ /* eslint-disable max-classes-per-file */ +import { EPerson, type } from '@dspace/core' import { Action } from '@ngrx/store'; -import { EPerson } from '../../core/eperson/models/eperson.model'; -import { type } from '../../shared/ngrx/type'; - /** * For each action type in an action group, make a simple * enum object for all of this group's action types. diff --git a/src/app/access-control/epeople-registry/epeople-registry.component.spec.ts b/src/app/access-control/epeople-registry/epeople-registry.component.spec.ts index 20a066dbf7e..61ed6cf9112 100644 --- a/src/app/access-control/epeople-registry/epeople-registry.component.spec.ts +++ b/src/app/access-control/epeople-registry/epeople-registry.component.spec.ts @@ -1,62 +1,40 @@ import { CommonModule } from '@angular/common'; -import { - DebugElement, - NO_ERRORS_SCHEMA, -} from '@angular/core'; -import { - ComponentFixture, - fakeAsync, - TestBed, - tick, - waitForAsync, -} from '@angular/core/testing'; -import { - FormsModule, - ReactiveFormsModule, -} from '@angular/forms'; -import { - BrowserModule, - By, -} from '@angular/platform-browser'; +import { DebugElement, NO_ERRORS_SCHEMA } from '@angular/core'; +import { ComponentFixture, fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { BrowserModule, By } from '@angular/platform-browser'; import { Router } from '@angular/router'; import { RouterTestingModule } from '@angular/router/testing'; import { - NgbModal, - NgbModule, -} from '@ng-bootstrap/ng-bootstrap'; -import { TranslateModule } from '@ngx-translate/core'; -import { - Observable, - of, -} from 'rxjs'; - -import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; -import { FindListOptions } from '../../core/data/find-list-options.model'; -import { + AuthorizationDataService, + FindListOptions, buildPaginatedList, PaginatedList, -} from '../../core/data/paginated-list.model'; -import { RemoteData } from '../../core/data/remote-data'; -import { RequestService } from '../../core/data/request.service'; -import { EPersonDataService } from '../../core/eperson/eperson-data.service'; -import { EPerson } from '../../core/eperson/models/eperson.model'; -import { PaginationService } from '../../core/pagination/pagination.service'; -import { PageInfo } from '../../core/shared/page-info.model'; + RemoteData, + RequestService, + EPersonDataService, + EPerson, + NotificationsService, + PaginationService, + PageInfo, + EPersonMock, + EPersonMock2, + NotificationsServiceStub, + PaginationServiceStub, + RouterMock, + createSuccessfulRemoteDataObject$, +} from '@dspace/core' +import { NgbModal, NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { TranslateModule } from '@ngx-translate/core'; +import { Observable, of } from 'rxjs'; + import { BtnDisabledDirective } from '../../shared/btn-disabled.directive'; import { FormBuilderService } from '../../shared/form/builder/form-builder.service'; +import { getMockFormBuilderService } from '../../shared/form/testing/form-builder-service.mock'; import { ThemedLoadingComponent } from '../../shared/loading/themed-loading.component'; -import { getMockFormBuilderService } from '../../shared/mocks/form-builder-service.mock'; -import { RouterMock } from '../../shared/mocks/router.mock'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; import { PaginationComponent } from '../../shared/pagination/pagination.component'; -import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; -import { - EPersonMock, - EPersonMock2, -} from '../../shared/testing/eperson.mock'; -import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub'; -import { PaginationServiceStub } from '../../shared/testing/pagination-service.stub'; import { EPeopleRegistryComponent } from './epeople-registry.component'; +import { EpeopleRegistryService } from './epeople-registry.service'; import { EPersonFormComponent } from './eperson-form/eperson-form.component'; describe('EPeopleRegistryComponent', () => { @@ -66,13 +44,20 @@ describe('EPeopleRegistryComponent', () => { let mockEPeople: EPerson[]; let ePersonDataServiceStub: any; + let epeopleRegistryServiceStub: any; let authorizationService: AuthorizationDataService; let modalService: NgbModal; let paginationService: PaginationServiceStub; + let activeEPerson = null; beforeEach(waitForAsync(async () => { jasmine.getEnv().allowRespy(true); mockEPeople = [EPersonMock, EPersonMock2]; + epeopleRegistryServiceStub = { + getActiveEPerson(): Observable { + return of(activeEPerson); + }, + }; ePersonDataServiceStub = { activeEPerson: null, allEpeople: mockEPeople, @@ -84,9 +69,6 @@ describe('EPeopleRegistryComponent', () => { currentPage: 1, }), this.allEpeople)); }, - getActiveEPerson(): Observable { - return of(this.activeEPerson); - }, searchByScope(scope: string, query: string, options: FindListOptions = {}): Observable>> { if (scope === 'email') { const result = this.allEpeople.find((ePerson: EPerson) => { @@ -132,10 +114,10 @@ describe('EPeopleRegistryComponent', () => { return of(true); }, editEPerson(ePerson: EPerson) { - this.activeEPerson = ePerson; + activeEPerson = ePerson; }, cancelEditEPerson() { - this.activeEPerson = null; + activeEPerson = null; }, clearEPersonRequests(): void { // empty @@ -155,6 +137,7 @@ describe('EPeopleRegistryComponent', () => { TranslateModule.forRoot(), EPeopleRegistryComponent, BtnDisabledDirective], providers: [ { provide: EPersonDataService, useValue: ePersonDataServiceStub }, + { provide: EpeopleRegistryService, useValue: epeopleRegistryServiceStub }, { provide: NotificationsService, useValue: new NotificationsServiceStub() }, { provide: AuthorizationDataService, useValue: authorizationService }, { provide: FormBuilderService, useValue: builderService }, diff --git a/src/app/access-control/epeople-registry/epeople-registry.component.ts b/src/app/access-control/epeople-registry/epeople-registry.component.ts index d4a96fa826d..912d672e750 100644 --- a/src/app/access-control/epeople-registry/epeople-registry.component.ts +++ b/src/app/access-control/epeople-registry/epeople-registry.component.ts @@ -1,74 +1,45 @@ +import { AsyncPipe, NgClass } from '@angular/common'; +import { Component, OnDestroy, OnInit } from '@angular/core'; +import { ReactiveFormsModule, UntypedFormBuilder } from '@angular/forms'; +import { Router, RouterModule } from '@angular/router'; import { - AsyncPipe, - NgClass, -} from '@angular/common'; -import { - Component, - OnDestroy, - OnInit, -} from '@angular/core'; -import { - ReactiveFormsModule, - UntypedFormBuilder, -} from '@angular/forms'; -import { - Router, - RouterModule, -} from '@angular/router'; -import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { - TranslateModule, - TranslateService, -} from '@ngx-translate/core'; -import { - BehaviorSubject, - combineLatest, - Observable, - Subscription, -} from 'rxjs'; -import { - map, - switchMap, - take, -} from 'rxjs/operators'; - -import { DSONameService } from '../../core/breadcrumbs/dso-name.service'; -import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; -import { FeatureID } from '../../core/data/feature-authorization/feature-id'; -import { + DSONameService, + AuthorizationDataService, + FeatureID, buildPaginatedList, PaginatedList, -} from '../../core/data/paginated-list.model'; -import { RemoteData } from '../../core/data/remote-data'; -import { RequestService } from '../../core/data/request.service'; -import { EPersonDataService } from '../../core/eperson/eperson-data.service'; -import { EPerson } from '../../core/eperson/models/eperson.model'; -import { EpersonDtoModel } from '../../core/eperson/models/eperson-dto.model'; -import { PaginationService } from '../../core/pagination/pagination.service'; -import { NoContent } from '../../core/shared/NoContent.model'; -import { + RemoteData, + RequestService, + EPersonDataService, + EPerson, + EpersonDtoModel, + NotificationsService, + PaginationService, + PaginationComponentOptions, + NoContent, getAllSucceededRemoteData, getFirstCompletedRemoteData, -} from '../../core/shared/operators'; -import { PageInfo } from '../../core/shared/page-info.model'; -import { ConfirmationModalComponent } from '../../shared/confirmation-modal/confirmation-modal.component'; -import { hasValue } from '../../shared/empty.util'; + PageInfo, +} from '@dspace/core' +import { hasValue } from '@dspace/utils'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { TranslateModule, TranslateService } from '@ngx-translate/core'; +import { BehaviorSubject, combineLatest, Observable, Subscription } from 'rxjs'; +import { map, switchMap, take } from 'rxjs/operators'; + +import { + ConfirmationModalComponent, +} from '../../shared/confirmation-modal/confirmation-modal.component'; import { ThemedLoadingComponent } from '../../shared/loading/themed-loading.component'; -import { NotificationsService } from '../../shared/notifications/notifications.service'; import { PaginationComponent } from '../../shared/pagination/pagination.component'; -import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model'; -import { - getEPersonEditRoute, - getEPersonsRoute, -} from '../access-control-routing-paths'; -import { EPersonFormComponent } from './eperson-form/eperson-form.component'; +import { getEPersonEditRoute, getEPersonsRoute } from '../access-control-routing-paths'; +import { EpeopleRegistryService } from './epeople-registry.service'; @Component({ selector: 'ds-epeople-registry', templateUrl: './epeople-registry.component.html', imports: [ AsyncPipe, - EPersonFormComponent, NgClass, PaginationComponent, ReactiveFormsModule, @@ -135,6 +106,7 @@ export class EPeopleRegistryComponent implements OnInit, OnDestroy { subs: Subscription[] = []; constructor(private epersonService: EPersonDataService, + private epeopleRegistryService: EpeopleRegistryService, private translateService: TranslateService, private notificationsService: NotificationsService, private authorizationService: AuthorizationDataService, @@ -163,7 +135,7 @@ export class EPeopleRegistryComponent implements OnInit, OnDestroy { initialisePage() { this.searching$.next(true); this.search({ scope: this.currentSearchScope, query: this.currentSearchQuery }); - this.activeEPerson$ = this.epersonService.getActiveEPerson(); + this.activeEPerson$ = this.epeopleRegistryService.getActiveEPerson(); this.subs.push(this.ePeople$.pipe( switchMap((epeople: PaginatedList) => { if (epeople.pageInfo.totalElements > 0) { diff --git a/src/app/access-control/epeople-registry/epeople-registry.reducers.spec.ts b/src/app/access-control/epeople-registry/epeople-registry.reducers.spec.ts index 6bee3f84e21..b862bbf4066 100644 --- a/src/app/access-control/epeople-registry/epeople-registry.reducers.spec.ts +++ b/src/app/access-control/epeople-registry/epeople-registry.reducers.spec.ts @@ -1,12 +1,10 @@ -import { EPersonMock } from '../../shared/testing/eperson.mock'; +import { EPersonMock } from '@dspace/core' + import { EPeopleRegistryCancelEPersonAction, EPeopleRegistryEditEPersonAction, } from './epeople-registry.actions'; -import { - ePeopleRegistryReducer, - EPeopleRegistryState, -} from './epeople-registry.reducers'; +import { ePeopleRegistryReducer, EPeopleRegistryState } from './epeople-registry.reducers'; const initialState: EPeopleRegistryState = { editEPerson: null, diff --git a/src/app/access-control/epeople-registry/epeople-registry.reducers.ts b/src/app/access-control/epeople-registry/epeople-registry.reducers.ts index 3bab6769e12..249974df760 100644 --- a/src/app/access-control/epeople-registry/epeople-registry.reducers.ts +++ b/src/app/access-control/epeople-registry/epeople-registry.reducers.ts @@ -1,4 +1,5 @@ -import { EPerson } from '../../core/eperson/models/eperson.model'; +import { EPerson } from '@dspace/core' + import { EPeopleRegistryAction, EPeopleRegistryActionTypes, diff --git a/src/app/access-control/epeople-registry/epeople-registry.service.spec.ts b/src/app/access-control/epeople-registry/epeople-registry.service.spec.ts new file mode 100644 index 00000000000..01f72a31b97 --- /dev/null +++ b/src/app/access-control/epeople-registry/epeople-registry.service.spec.ts @@ -0,0 +1,60 @@ +import { TestBed } from '@angular/core/testing'; +import { EPerson } from '@dspace/core' +import { MockStore, provideMockStore } from '@ngrx/store/testing'; +import { cold } from 'jasmine-marbles'; + +import { AppState } from '../../app.reducer'; +import { + EPeopleRegistryCancelEPersonAction, + EPeopleRegistryEditEPersonAction, +} from './epeople-registry.actions'; +import { editEPersonSelector, EpeopleRegistryService } from './epeople-registry.service'; + +describe('EpeopleRegistryService', () => { + let service: EpeopleRegistryService; + let store: MockStore; + const initialState = {}; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + EpeopleRegistryService, + provideMockStore({ initialState }), + ], + }); + + service = TestBed.inject(EpeopleRegistryService); + store = TestBed.inject(MockStore); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); + + describe('#getActiveEPerson', () => { + it('should select the editEPersonSelector from the store', () => { + const mockEPerson: EPerson = { id: '123', name: 'Test User' } as EPerson; + store.overrideSelector(editEPersonSelector, mockEPerson); + + const expected = cold('a', { a: mockEPerson }); + expect(service.getActiveEPerson()).toBeObservable(expected); + }); + }); + + describe('#cancelEditEPerson', () => { + it('should dispatch EPeopleRegistryCancelEPersonAction', () => { + const dispatchSpy = spyOn(store, 'dispatch'); + service.cancelEditEPerson(); + expect(dispatchSpy).toHaveBeenCalledWith(new EPeopleRegistryCancelEPersonAction()); + }); + }); + + describe('#editEPerson', () => { + it('should dispatch EPeopleRegistryEditEPersonAction with the given EPerson', () => { + const dispatchSpy = spyOn(store, 'dispatch'); + const mockEPerson: EPerson = { id: '456', name: 'Another User' } as EPerson; + service.editEPerson(mockEPerson); + expect(dispatchSpy).toHaveBeenCalledWith(new EPeopleRegistryEditEPersonAction(mockEPerson)); + }); + }); +}); diff --git a/src/app/access-control/epeople-registry/epeople-registry.service.ts b/src/app/access-control/epeople-registry/epeople-registry.service.ts new file mode 100644 index 00000000000..87d771301fb --- /dev/null +++ b/src/app/access-control/epeople-registry/epeople-registry.service.ts @@ -0,0 +1,62 @@ +import { Injectable } from '@angular/core'; +import { EPerson } from '@dspace/core' +import { createSelector, select, Store } from '@ngrx/store'; +import { Observable } from 'rxjs'; +import { take } from 'rxjs/operators'; + +import { AppState } from '../../app.reducer'; +import { getEPersonEditRoute } from '../access-control-routing-paths'; +import { + EPeopleRegistryCancelEPersonAction, + EPeopleRegistryEditEPersonAction, +} from './epeople-registry.actions'; +import { EPeopleRegistryState } from './epeople-registry.reducers'; + +const ePeopleRegistryStateSelector = (state: AppState) => state.epeopleRegistry; +export const editEPersonSelector = createSelector(ePeopleRegistryStateSelector, (ePeopleRegistryState: EPeopleRegistryState) => ePeopleRegistryState.editEPerson); + +@Injectable({ + providedIn: 'root', +}) +export class EpeopleRegistryService { + + constructor(protected store: Store) { + } + + /** + * Method to retrieve the eperson that is currently being edited + */ + public getActiveEPerson(): Observable { + return this.store.pipe(select(editEPersonSelector)); + } + + /** + * Method to cancel editing an EPerson, dispatches a cancel EPerson action + */ + public cancelEditEPerson() { + this.store.dispatch(new EPeopleRegistryCancelEPersonAction()); + } + + /** + * Method to set the EPerson being edited, dispatches an edit EPerson action + * @param ePerson The EPerson to edit + */ + public editEPerson(ePerson: EPerson) { + this.store.dispatch(new EPeopleRegistryEditEPersonAction(ePerson)); + } + + /** + * Change which ePerson is being edited and return the link for EPeople edit page + * @param ePerson New EPerson to edit + */ + public startEditingNewEPerson(ePerson: EPerson): string { + this.getActiveEPerson().pipe(take(1)).subscribe((activeEPerson: EPerson) => { + if (ePerson === activeEPerson) { + this.cancelEditEPerson(); + } else { + this.editEPerson(ePerson); + } + }); + return getEPersonEditRoute(ePerson.id); + } +} diff --git a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.html b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.html index ae36b27c87c..b6d45a9cb9f 100644 --- a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.html +++ b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.html @@ -81,8 +81,8 @@

{{messagePrefix + '.groupsEPersonIsMemberOf' | translate}}

{{group.id}} - + {{ dsoNameService.getName(group) }} diff --git a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.spec.ts b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.spec.ts index 6969b44f832..4c00bfa4019 100644 --- a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.spec.ts +++ b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.spec.ts @@ -1,10 +1,6 @@ import { CommonModule } from '@angular/common'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { - ComponentFixture, - TestBed, - waitForAsync, -} from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { FormsModule, ReactiveFormsModule, @@ -12,58 +8,48 @@ import { UntypedFormGroup, Validators, } from '@angular/forms'; +import { BrowserModule, By } from '@angular/platform-browser'; +import { ActivatedRoute, Router, RouterModule } from '@angular/router'; import { - BrowserModule, - By, -} from '@angular/platform-browser'; -import { - ActivatedRoute, - Router, - RouterModule, -} from '@angular/router'; -import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; -import { TranslateModule } from '@ngx-translate/core'; -import { - Observable, - of, -} from 'rxjs'; - -import { AuthService } from '../../../core/auth/auth.service'; -import { EpersonRegistrationService } from '../../../core/data/eperson-registration.service'; -import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; -import { FindListOptions } from '../../../core/data/find-list-options.model'; -import { + AuthService, + EpersonRegistrationService, + AuthorizationDataService, + FindListOptions, buildPaginatedList, PaginatedList, -} from '../../../core/data/paginated-list.model'; -import { RemoteData } from '../../../core/data/remote-data'; -import { RequestService } from '../../../core/data/request.service'; -import { EPersonDataService } from '../../../core/eperson/eperson-data.service'; -import { GroupDataService } from '../../../core/eperson/group-data.service'; -import { EPerson } from '../../../core/eperson/models/eperson.model'; -import { PaginationService } from '../../../core/pagination/pagination.service'; -import { PageInfo } from '../../../core/shared/page-info.model'; + RemoteData, + RequestService, + EPersonDataService, + GroupDataService, + EPerson, + NotificationsService, + PaginationService, + FollowLinkConfig, + PageInfo, + ActivatedRouteStub, + AuthServiceStub, + EPersonMock, + EPersonMock2, + NotificationsServiceStub, + PaginationServiceStub, + RouterStub, + createPaginatedList, + createSuccessfulRemoteDataObject$, +} from '@dspace/core' +import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { TranslateModule } from '@ngx-translate/core'; +import { Observable, of } from 'rxjs'; + import { BtnDisabledDirective } from '../../../shared/btn-disabled.directive'; import { FormBuilderService } from '../../../shared/form/builder/form-builder.service'; import { FormComponent } from '../../../shared/form/form.component'; +import { getMockFormBuilderService } from '../../../shared/form/testing/form-builder-service.mock'; import { ThemedLoadingComponent } from '../../../shared/loading/themed-loading.component'; -import { getMockFormBuilderService } from '../../../shared/mocks/form-builder-service.mock'; -import { NotificationsService } from '../../../shared/notifications/notifications.service'; import { PaginationComponent } from '../../../shared/pagination/pagination.component'; -import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils'; -import { ActivatedRouteStub } from '../../../shared/testing/active-router.stub'; -import { AuthServiceStub } from '../../../shared/testing/auth-service.stub'; -import { - EPersonMock, - EPersonMock2, -} from '../../../shared/testing/eperson.mock'; -import { NotificationsServiceStub } from '../../../shared/testing/notifications-service.stub'; -import { PaginationServiceStub } from '../../../shared/testing/pagination-service.stub'; -import { RouterStub } from '../../../shared/testing/router.stub'; -import { createPaginatedList } from '../../../shared/testing/utils.test'; -import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model'; import { HasNoValuePipe } from '../../../shared/utils/has-no-value.pipe'; +import { GroupRegistryService } from '../../group-registry/group-registry.service'; import { EPeopleRegistryComponent } from '../epeople-registry.component'; +import { EpeopleRegistryService } from '../epeople-registry.service'; import { EPersonFormComponent } from './eperson-form.component'; import { ValidateEmailNotTaken } from './validators/email-taken.validator'; @@ -74,12 +60,15 @@ describe('EPersonFormComponent', () => { let mockEPeople; let ePersonDataServiceStub: any; + let epeopleRegistryServiceStub: any; let authService: AuthServiceStub; let authorizationService: AuthorizationDataService; let groupsDataService: GroupDataService; + let groupRegistryService: GroupRegistryService; let epersonRegistrationService: EpersonRegistrationService; let route: ActivatedRouteStub; let router: RouterStub; + let activeEPerson = null; let paginationService; @@ -87,12 +76,14 @@ describe('EPersonFormComponent', () => { beforeEach(waitForAsync(() => { mockEPeople = [EPersonMock, EPersonMock2]; + epeopleRegistryServiceStub = { + getActiveEPerson(): Observable { + return of(activeEPerson); + }, + }; ePersonDataServiceStub = { activeEPerson: null, allEpeople: mockEPeople, - getActiveEPerson(): Observable { - return of(this.activeEPerson); - }, searchByScope(scope: string, query: string, options: FindListOptions = {}): Observable>> { if (scope === 'email') { const result = this.allEpeople.find((ePerson: EPerson) => { @@ -122,10 +113,10 @@ describe('EPersonFormComponent', () => { return createSuccessfulRemoteDataObject$(ePerson); }, editEPerson(ePerson: EPerson) { - this.activeEPerson = ePerson; + activeEPerson = ePerson; }, cancelEditEPerson() { - this.activeEPerson = null; + activeEPerson = null; }, clearEPersonRequests(): void { // empty @@ -217,6 +208,9 @@ describe('EPersonFormComponent', () => { findListByHref: createSuccessfulRemoteDataObject$(createPaginatedList([])), getGroupRegistryRouterLink: '', }); + groupRegistryService = jasmine.createSpyObj('GroupRegistryService', { + startEditingNewGroup: jasmine.createSpy('startEditingNewGroup'), + }); paginationService = new PaginationServiceStub(); route = new ActivatedRouteStub(); @@ -230,7 +224,9 @@ describe('EPersonFormComponent', () => { ], providers: [ { provide: EPersonDataService, useValue: ePersonDataServiceStub }, + { provide: EpeopleRegistryService, useValue: epeopleRegistryServiceStub }, { provide: GroupDataService, useValue: groupsDataService }, + { provide: GroupRegistryService, useValue: groupRegistryService }, { provide: FormBuilderService, useValue: builderService }, { provide: NotificationsService, useValue: new NotificationsServiceStub() }, { provide: AuthService, useValue: authService }, @@ -389,7 +385,7 @@ describe('EPersonFormComponent', () => { }); describe('without active EPerson', () => { beforeEach(() => { - spyOn(ePersonDataServiceStub, 'getActiveEPerson').and.returnValue(of(undefined)); + spyOn(epeopleRegistryServiceStub, 'getActiveEPerson').and.returnValue(of(undefined)); component.onSubmit(); fixture.detectChanges(); }); @@ -429,7 +425,7 @@ describe('EPersonFormComponent', () => { }, }, }); - spyOn(ePersonDataServiceStub, 'getActiveEPerson').and.returnValue(of(expectedWithId)); + spyOn(epeopleRegistryServiceStub, 'getActiveEPerson').and.returnValue(of(expectedWithId)); component.ngOnInit(); component.onSubmit(); fixture.detectChanges(); @@ -486,7 +482,7 @@ describe('EPersonFormComponent', () => { eperson = EPersonMock; component.epersonInitial = eperson; component.canDelete$ = of(true); - spyOn(component.epersonService, 'getActiveEPerson').and.returnValue(of(eperson)); + spyOn(component.epeopleRegistryService, 'getActiveEPerson').and.returnValue(of(eperson)); modalService = (component as any).modalService; spyOn(modalService, 'open').and.returnValue(Object.assign({ componentInstance: Object.assign({ response: of(true) }) })); component.ngOnInit(); diff --git a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts index 701684009e8..9befc4edc5c 100644 --- a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts +++ b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts @@ -8,11 +8,32 @@ import { Output, } from '@angular/core'; import { UntypedFormGroup } from '@angular/forms'; +import { ActivatedRoute, Router, RouterLink } from '@angular/router'; import { - ActivatedRoute, - Router, - RouterLink, -} from '@angular/router'; + AuthService, + DSONameService, + EpersonRegistrationService, + AuthorizationDataService, + FeatureID, + PaginatedList, + RemoteData, + RequestService, + EPersonDataService, + GroupDataService, + EPerson, + Group, + NotificationsService, + PaginationService, + PaginationComponentOptions, + followLink, + NoContent, + getFirstCompletedRemoteData, + getFirstSucceededRemoteData, + getRemoteDataPayload, + PageInfo, + Registration, +} from '@dspace/core' +import { hasValue } from '@dspace/utils'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { DynamicCheckboxModel, @@ -20,58 +41,23 @@ import { DynamicFormLayout, DynamicInputModel, } from '@ng-dynamic-forms/core'; -import { - TranslateModule, - TranslateService, -} from '@ngx-translate/core'; -import { - combineLatest as observableCombineLatest, - Observable, - of, - Subscription, -} from 'rxjs'; -import { - debounceTime, - finalize, - map, - switchMap, - take, -} from 'rxjs/operators'; - -import { AuthService } from '../../../core/auth/auth.service'; -import { DSONameService } from '../../../core/breadcrumbs/dso-name.service'; -import { EpersonRegistrationService } from '../../../core/data/eperson-registration.service'; -import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; -import { FeatureID } from '../../../core/data/feature-authorization/feature-id'; -import { PaginatedList } from '../../../core/data/paginated-list.model'; -import { RemoteData } from '../../../core/data/remote-data'; -import { RequestService } from '../../../core/data/request.service'; -import { EPersonDataService } from '../../../core/eperson/eperson-data.service'; -import { GroupDataService } from '../../../core/eperson/group-data.service'; -import { EPerson } from '../../../core/eperson/models/eperson.model'; -import { Group } from '../../../core/eperson/models/group.model'; -import { PaginationService } from '../../../core/pagination/pagination.service'; -import { NoContent } from '../../../core/shared/NoContent.model'; -import { - getFirstCompletedRemoteData, - getFirstSucceededRemoteData, - getRemoteDataPayload, -} from '../../../core/shared/operators'; -import { PageInfo } from '../../../core/shared/page-info.model'; -import { Registration } from '../../../core/shared/registration.model'; +import { TranslateModule, TranslateService } from '@ngx-translate/core'; +import { combineLatest as observableCombineLatest, Observable, of, Subscription } from 'rxjs'; +import { debounceTime, finalize, map, switchMap, take } from 'rxjs/operators'; + import { TYPE_REQUEST_FORGOT } from '../../../register-email-form/register-email-form.component'; import { BtnDisabledDirective } from '../../../shared/btn-disabled.directive'; -import { ConfirmationModalComponent } from '../../../shared/confirmation-modal/confirmation-modal.component'; -import { hasValue } from '../../../shared/empty.util'; +import { + ConfirmationModalComponent, +} from '../../../shared/confirmation-modal/confirmation-modal.component'; import { FormBuilderService } from '../../../shared/form/builder/form-builder.service'; import { FormComponent } from '../../../shared/form/form.component'; import { ThemedLoadingComponent } from '../../../shared/loading/themed-loading.component'; -import { NotificationsService } from '../../../shared/notifications/notifications.service'; import { PaginationComponent } from '../../../shared/pagination/pagination.component'; -import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model'; -import { followLink } from '../../../shared/utils/follow-link-config.model'; import { HasNoValuePipe } from '../../../shared/utils/has-no-value.pipe'; -import { getEPersonsRoute } from '../../access-control-routing-paths'; +import { getEPersonsRoute, getGroupEditPageRouterLink } from '../../access-control-routing-paths'; +import { GroupRegistryService } from '../../group-registry/group-registry.service'; +import { EpeopleRegistryService } from '../epeople-registry.service'; import { ValidateEmailNotTaken } from './validators/email-taken.validator'; @Component({ @@ -236,10 +222,14 @@ export class EPersonFormComponent implements OnInit, OnDestroy { */ emailValueChangeSubscribe: Subscription; + protected readonly getGroupEditPageRouterLink = getGroupEditPageRouterLink; + constructor( protected changeDetectorRef: ChangeDetectorRef, public epersonService: EPersonDataService, + public epeopleRegistryService: EpeopleRegistryService, public groupsDataService: GroupDataService, + public groupRegistryService: GroupRegistryService, private formBuilderService: FormBuilderService, private translateService: TranslateService, private notificationsService: NotificationsService, @@ -256,7 +246,7 @@ export class EPersonFormComponent implements OnInit, OnDestroy { } ngOnInit() { - this.activeEPerson$ = this.epersonService.getActiveEPerson(); + this.activeEPerson$ = this.epeopleRegistryService.getActiveEPerson(); this.subs.push(this.activeEPerson$.subscribe((eperson: EPerson) => { this.epersonInitial = eperson; if (hasValue(eperson)) { @@ -274,7 +264,7 @@ export class EPersonFormComponent implements OnInit, OnDestroy { initialisePage() { if (this.route.snapshot.params.id) { this.subs.push(this.epersonService.findById(this.route.snapshot.params.id).subscribe((ePersonRD: RemoteData) => { - this.epersonService.editEPerson(ePersonRD.payload); + this.epeopleRegistryService.editEPerson(ePersonRD.payload); })); } this.firstName = new DynamicInputModel({ @@ -393,7 +383,7 @@ export class EPersonFormComponent implements OnInit, OnDestroy { * Stop editing the currently selected eperson */ onCancel() { - this.epersonService.cancelEditEPerson(); + this.epeopleRegistryService.cancelEditEPerson(); this.cancelForm.emit(); void this.router.navigate([getEPersonsRoute()]); } @@ -632,4 +622,5 @@ export class EPersonFormComponent implements OnInit, OnDestroy { this.groups$ = this.groupsDataService.findListByHref(eperson._links.groups.href, options); })); } + } diff --git a/src/app/access-control/epeople-registry/eperson-form/validators/email-taken.validator.ts b/src/app/access-control/epeople-registry/eperson-form/validators/email-taken.validator.ts index 2a689c0d729..81e24aa96d6 100644 --- a/src/app/access-control/epeople-registry/eperson-form/validators/email-taken.validator.ts +++ b/src/app/access-control/epeople-registry/eperson-form/validators/email-taken.validator.ts @@ -1,13 +1,8 @@ -import { - AbstractControl, - ValidationErrors, -} from '@angular/forms'; +import { AbstractControl, ValidationErrors } from '@angular/forms'; +import { EPersonDataService, getFirstSucceededRemoteData } from '@dspace/core' import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { EPersonDataService } from '../../../../core/eperson/eperson-data.service'; -import { getFirstSucceededRemoteData } from '../../../../core/shared/operators'; - export class ValidateEmailNotTaken { /** diff --git a/src/app/access-control/epeople-registry/eperson-resolver.service.ts b/src/app/access-control/epeople-registry/eperson-resolver.service.ts index 6c9d7347f73..da4e1ab623e 100644 --- a/src/app/access-control/epeople-registry/eperson-resolver.service.ts +++ b/src/app/access-control/epeople-registry/eperson-resolver.service.ts @@ -1,20 +1,16 @@ import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; import { - ActivatedRouteSnapshot, - RouterStateSnapshot, -} from '@angular/router'; -import { Store } from '@ngrx/store'; -import { Observable } from 'rxjs'; - -import { RemoteData } from '../../core/data/remote-data'; -import { EPersonDataService } from '../../core/eperson/eperson-data.service'; -import { EPerson } from '../../core/eperson/models/eperson.model'; -import { ResolvedAction } from '../../core/resolving/resolver.actions'; -import { getFirstCompletedRemoteData } from '../../core/shared/operators'; -import { + RemoteData, + EPersonDataService, + EPerson, + ResolvedAction, followLink, FollowLinkConfig, -} from '../../shared/utils/follow-link-config.model'; + getFirstCompletedRemoteData, +} from '@dspace/core' +import { Store } from '@ngrx/store'; +import { Observable } from 'rxjs'; export const EPERSON_EDIT_FOLLOW_LINKS: FollowLinkConfig[] = [ followLink('groups'), diff --git a/src/app/access-control/group-registry/group-form/group-form.component.spec.ts b/src/app/access-control/group-registry/group-form/group-form.component.spec.ts index 86ee5e725e3..64f21405564 100644 --- a/src/app/access-control/group-registry/group-form/group-form.component.spec.ts +++ b/src/app/access-control/group-registry/group-form/group-form.component.spec.ts @@ -1,11 +1,7 @@ import { CommonModule } from '@angular/common'; import { HttpClient } from '@angular/common/http'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { - ComponentFixture, - TestBed, - waitForAsync, -} from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { FormsModule, ReactiveFormsModule, @@ -13,58 +9,49 @@ import { UntypedFormGroup, Validators, } from '@angular/forms'; +import { BrowserModule, By } from '@angular/platform-browser'; +import { ActivatedRoute, Router } from '@angular/router'; +import { APP_CONFIG } from '@dspace/config'; import { - BrowserModule, - By, -} from '@angular/platform-browser'; -import { - ActivatedRoute, - Router, -} from '@angular/router'; + DSONameService, + RemoteDataBuildService, + ObjectCacheService, + DSOChangeAnalyzer, + DSpaceObjectDataService, + AuthorizationDataService, + buildPaginatedList, + PaginatedList, + RemoteData, + EPersonDataService, + GroupDataService, + Group, + NotificationsService, + DSpaceObject, + HALEndpointService, + NoContent, + PageInfo, + UUIDService, + ActivatedRouteStub, + DSONameServiceMock, + GroupMock, + GroupMock2, + NotificationsServiceStub, + RouterMock, + createSuccessfulRemoteDataObject$, + XSRFService, +} from '@dspace/core' import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; import { Store } from '@ngrx/store'; import { TranslateModule } from '@ngx-translate/core'; import { Operation } from 'fast-json-patch'; -import { - Observable, - of, -} from 'rxjs'; +import { Observable, of } from 'rxjs'; -import { DSONameService } from '../../../core/breadcrumbs/dso-name.service'; -import { RemoteDataBuildService } from '../../../core/cache/builders/remote-data-build.service'; -import { ObjectCacheService } from '../../../core/cache/object-cache.service'; -import { DSOChangeAnalyzer } from '../../../core/data/dso-change-analyzer.service'; -import { DSpaceObjectDataService } from '../../../core/data/dspace-object-data.service'; -import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; -import { - buildPaginatedList, - PaginatedList, -} from '../../../core/data/paginated-list.model'; -import { RemoteData } from '../../../core/data/remote-data'; -import { EPersonDataService } from '../../../core/eperson/eperson-data.service'; -import { GroupDataService } from '../../../core/eperson/group-data.service'; -import { Group } from '../../../core/eperson/models/group.model'; -import { DSpaceObject } from '../../../core/shared/dspace-object.model'; -import { HALEndpointService } from '../../../core/shared/hal-endpoint.service'; -import { NoContent } from '../../../core/shared/NoContent.model'; -import { PageInfo } from '../../../core/shared/page-info.model'; -import { UUIDService } from '../../../core/shared/uuid.service'; -import { XSRFService } from '../../../core/xsrf/xsrf.service'; import { AlertComponent } from '../../../shared/alert/alert.component'; import { ContextHelpDirective } from '../../../shared/context-help.directive'; import { FormBuilderService } from '../../../shared/form/builder/form-builder.service'; import { FormComponent } from '../../../shared/form/form.component'; -import { DSONameServiceMock } from '../../../shared/mocks/dso-name.service.mock'; -import { getMockFormBuilderService } from '../../../shared/mocks/form-builder-service.mock'; -import { RouterMock } from '../../../shared/mocks/router.mock'; -import { NotificationsService } from '../../../shared/notifications/notifications.service'; -import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils'; -import { ActivatedRouteStub } from '../../../shared/testing/active-router.stub'; -import { - GroupMock, - GroupMock2, -} from '../../../shared/testing/group-mock'; -import { NotificationsServiceStub } from '../../../shared/testing/notifications-service.stub'; +import { getMockFormBuilderService } from '../../../shared/form/testing/form-builder-service.mock'; +import { GroupRegistryService } from '../group-registry.service'; import { GroupFormComponent } from './group-form.component'; import { MembersListComponent } from './members-list/members-list.component'; import { SubgroupsListComponent } from './subgroup-list/subgroups-list.component'; @@ -76,6 +63,7 @@ describe('GroupFormComponent', () => { let builderService: FormBuilderService; let ePersonDataServiceStub: any; let groupsDataServiceStub: any; + let groupRegistryServiceStub: any; let dsoDataServiceStub: any; let authorizationService: AuthorizationDataService; let notificationService: NotificationsServiceStub; @@ -86,6 +74,7 @@ describe('GroupFormComponent', () => { let groupName: string; let groupDescription: string; let expected: Group; + let activeGroup; beforeEach(waitForAsync(() => { groups = [GroupMock, GroupMock2]; @@ -111,19 +100,24 @@ describe('GroupFormComponent', () => { }, }); ePersonDataServiceStub = {}; + groupRegistryServiceStub = { + getActiveGroup(): Observable { + return of(activeGroup); + }, + cancelEditGroup(): void { + activeGroup = null; + }, + editGroup(group: Group) { + activeGroup = group; + }, + }; groupsDataServiceStub = { allGroups: groups, activeGroup: null, createdGroup: null, - getActiveGroup(): Observable { - return of(this.activeGroup); - }, getGroupRegistryRouterLink(): string { return '/access-control/groups'; }, - editGroup(group: Group) { - this.activeGroup = group; - }, clearGroupsRequests() { return null; }, @@ -133,9 +127,7 @@ describe('GroupFormComponent', () => { delete(objectId: string, copyVirtualMetadata?: string[]): Observable> { return createSuccessfulRemoteDataObject$({}); }, - cancelEditGroup(): void { - this.activeGroup = null; - }, + findById(id: string) { return of({ payload: null, hasSucceeded: true }); }, @@ -247,6 +239,7 @@ describe('GroupFormComponent', () => { { provide: DSONameService, useValue: new DSONameServiceMock() }, { provide: EPersonDataService, useValue: ePersonDataServiceStub }, { provide: GroupDataService, useValue: groupsDataServiceStub }, + { provide: GroupRegistryService, useValue: groupRegistryServiceStub }, { provide: DSpaceObjectDataService, useValue: dsoDataServiceStub }, { provide: NotificationsService, useValue: notificationService }, { provide: FormBuilderService, useValue: builderService }, @@ -261,6 +254,7 @@ describe('GroupFormComponent', () => { { provide: ActivatedRoute, useValue: route }, { provide: Router, useValue: router }, { provide: AuthorizationDataService, useValue: authorizationService }, + { provide: APP_CONFIG, useValue: { cache : { msToLive: { default: 15 * 60 * 1000 } } } }, ], schemas: [CUSTOM_ELEMENTS_SCHEMA], }) @@ -330,7 +324,7 @@ describe('GroupFormComponent', () => { }, }, }); - spyOn(groupsDataServiceStub, 'getActiveGroup').and.returnValue(of(expected)); + spyOn(groupRegistryServiceStub, 'getActiveGroup').and.returnValue(of(expected)); spyOn(groupsDataServiceStub, 'patch').and.returnValue(createSuccessfulRemoteDataObject$(expected2)); component.ngOnInit(); }); diff --git a/src/app/access-control/group-registry/group-form/group-form.component.ts b/src/app/access-control/group-registry/group-form/group-form.component.ts index 5c01f2e977c..25bf2f29644 100644 --- a/src/app/access-control/group-registry/group-form/group-form.component.ts +++ b/src/app/access-control/group-registry/group-form/group-form.component.ts @@ -8,14 +8,30 @@ import { OnInit, Output, } from '@angular/core'; +import { AbstractControl, UntypedFormGroup } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; import { - AbstractControl, - UntypedFormGroup, -} from '@angular/forms'; -import { - ActivatedRoute, - Router, -} from '@angular/router'; + DSONameService, + DSpaceObjectDataService, + AuthorizationDataService, + FeatureID, + PaginatedList, + RemoteData, + RequestService, + GroupDataService, + Group, + NotificationsService, + Collection, + Community, + DSpaceObject, + followLink, + NoContent, + getAllCompletedRemoteData, + getFirstCompletedRemoteData, + getFirstSucceededRemoteData, + getRemoteDataPayload, +} from '@dspace/core' +import { hasValue, hasValueOperator, isNotEmpty } from '@dspace/utils'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { DynamicFormControlModel, @@ -23,62 +39,26 @@ import { DynamicInputModel, DynamicTextAreaModel, } from '@ng-dynamic-forms/core'; -import { - TranslateModule, - TranslateService, -} from '@ngx-translate/core'; +import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { Operation } from 'fast-json-patch'; -import { - combineLatest as observableCombineLatest, - Observable, - Subscription, -} from 'rxjs'; -import { - debounceTime, - map, - switchMap, - take, -} from 'rxjs/operators'; +import { combineLatest as observableCombineLatest, Observable, Subscription } from 'rxjs'; +import { debounceTime, map, switchMap, take } from 'rxjs/operators'; import { environment } from '../../../../environments/environment'; -import { getCollectionEditRolesRoute } from '../../../collection-page/collection-page-routing-paths'; -import { getCommunityEditRolesRoute } from '../../../community-page/community-page-routing-paths'; -import { DSONameService } from '../../../core/breadcrumbs/dso-name.service'; -import { DSpaceObjectDataService } from '../../../core/data/dspace-object-data.service'; -import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; -import { FeatureID } from '../../../core/data/feature-authorization/feature-id'; -import { PaginatedList } from '../../../core/data/paginated-list.model'; -import { RemoteData } from '../../../core/data/remote-data'; -import { RequestService } from '../../../core/data/request.service'; -import { GroupDataService } from '../../../core/eperson/group-data.service'; -import { Group } from '../../../core/eperson/models/group.model'; -import { Collection } from '../../../core/shared/collection.model'; -import { Community } from '../../../core/shared/community.model'; -import { DSpaceObject } from '../../../core/shared/dspace-object.model'; -import { NoContent } from '../../../core/shared/NoContent.model'; import { - getAllCompletedRemoteData, - getFirstCompletedRemoteData, - getFirstSucceededRemoteData, - getRemoteDataPayload, -} from '../../../core/shared/operators'; + getCollectionEditRolesRoute, +} from '../../../collection-page/collection-page-routing-paths'; +import { getCommunityEditRolesRoute } from '../../../community-page/community-page-routing-paths'; import { AlertComponent } from '../../../shared/alert/alert.component'; import { AlertType } from '../../../shared/alert/alert-type'; -import { ConfirmationModalComponent } from '../../../shared/confirmation-modal/confirmation-modal.component'; -import { ContextHelpDirective } from '../../../shared/context-help.directive'; import { - hasValue, - hasValueOperator, - isNotEmpty, -} from '../../../shared/empty.util'; + ConfirmationModalComponent, +} from '../../../shared/confirmation-modal/confirmation-modal.component'; +import { ContextHelpDirective } from '../../../shared/context-help.directive'; import { FormBuilderService } from '../../../shared/form/builder/form-builder.service'; import { FormComponent } from '../../../shared/form/form.component'; -import { NotificationsService } from '../../../shared/notifications/notifications.service'; -import { followLink } from '../../../shared/utils/follow-link-config.model'; -import { - getGroupEditRoute, - getGroupsRoute, -} from '../../access-control-routing-paths'; +import { getGroupEditRoute, getGroupsRoute } from '../../access-control-routing-paths'; +import { GroupRegistryService } from '../group-registry.service'; import { MembersListComponent } from './members-list/members-list.component'; import { SubgroupsListComponent } from './subgroup-list/subgroups-list.component'; import { ValidateGroupExists } from './validators/group-exists.validator'; @@ -190,6 +170,7 @@ export class GroupFormComponent implements OnInit, OnDestroy { constructor( public groupDataService: GroupDataService, + public groupRegistryService: GroupRegistryService, protected dSpaceObjectDataService: DSpaceObjectDataService, protected formBuilderService: FormBuilderService, protected translateService: TranslateService, @@ -208,7 +189,7 @@ export class GroupFormComponent implements OnInit, OnDestroy { if (this.route.snapshot.params.groupId !== 'newGroup') { this.setActiveGroup(this.route.snapshot.params.groupId); } - this.activeGroup$ = this.groupDataService.getActiveGroup(); + this.activeGroup$ = this.groupRegistryService.getActiveGroup(); this.activeGroupLinkedDSO$ = this.getActiveGroupLinkedDSO(); this.linkedEditRolesRoute$ = this.getLinkedEditRolesRoute(); this.canEdit$ = this.activeGroupLinkedDSO$.pipe( @@ -311,7 +292,7 @@ export class GroupFormComponent implements OnInit, OnDestroy { * Stop editing the currently selected group */ onCancel() { - this.groupDataService.cancelEditGroup(); + this.groupRegistryService.cancelEditGroup(); this.cancelForm.emit(); void this.router.navigate([getGroupsRoute()]); } @@ -429,13 +410,13 @@ export class GroupFormComponent implements OnInit, OnDestroy { * @param groupId ID of group to set as active */ setActiveGroup(groupId: string) { - this.groupDataService.cancelEditGroup(); + this.groupRegistryService.cancelEditGroup(); this.groupDataService.findById(groupId) .pipe( getFirstSucceededRemoteData(), getRemoteDataPayload()) .subscribe((group: Group) => { - this.groupDataService.editGroup(group); + this.groupRegistryService.editGroup(group); }); } @@ -446,13 +427,13 @@ export class GroupFormComponent implements OnInit, OnDestroy { setActiveGroupWithLink(groupSelfLink: string) { this.activeGroup$.pipe(take(1)).subscribe((activeGroup: Group) => { if (activeGroup === null) { - this.groupDataService.cancelEditGroup(); + this.groupRegistryService.cancelEditGroup(); this.groupDataService.findByHref(groupSelfLink, false, false, followLink('subgroups'), followLink('epersons'), followLink('object')) .pipe( getFirstSucceededRemoteData(), getRemoteDataPayload()) .subscribe((group: Group) => { - this.groupDataService.editGroup(group); + this.groupRegistryService.editGroup(group); }); } }); @@ -497,7 +478,7 @@ export class GroupFormComponent implements OnInit, OnDestroy { */ @HostListener('window:beforeunload') ngOnDestroy(): void { - this.groupDataService.cancelEditGroup(); + this.groupRegistryService.cancelEditGroup(); this.subs.filter((sub) => hasValue(sub)).forEach((sub) => sub.unsubscribe()); if ( hasValue(this.groupNameValueChangeSubscribe) ) { diff --git a/src/app/access-control/group-registry/group-form/members-list/members-list.component.spec.ts b/src/app/access-control/group-registry/group-form/members-list/members-list.component.spec.ts index 0271dd4aad4..63e89c63130 100644 --- a/src/app/access-control/group-registry/group-form/members-list/members-list.component.spec.ts +++ b/src/app/access-control/group-registry/group-form/members-list/members-list.component.spec.ts @@ -1,8 +1,5 @@ import { CommonModule } from '@angular/common'; -import { - DebugElement, - NO_ERRORS_SCHEMA, -} from '@angular/core'; +import { DebugElement, NO_ERRORS_SCHEMA } from '@angular/core'; import { ComponentFixture, fakeAsync, @@ -12,60 +9,45 @@ import { tick, waitForAsync, } from '@angular/core/testing'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { BrowserModule, By } from '@angular/platform-browser'; +import { ActivatedRoute, Router } from '@angular/router'; import { - FormsModule, - ReactiveFormsModule, -} from '@angular/forms'; -import { - BrowserModule, - By, -} from '@angular/platform-browser'; -import { - ActivatedRoute, - Router, -} from '@angular/router'; -import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; -import { - TranslateLoader, - TranslateModule, - TranslateService, -} from '@ngx-translate/core'; -import { - Observable, - of, -} from 'rxjs'; - -import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; -import { RestResponse } from '../../../../core/cache/response.models'; -import { + DSONameService, + RestResponse, buildPaginatedList, PaginatedList, -} from '../../../../core/data/paginated-list.model'; -import { RemoteData } from '../../../../core/data/remote-data'; -import { EPersonDataService } from '../../../../core/eperson/eperson-data.service'; -import { GroupDataService } from '../../../../core/eperson/group-data.service'; -import { EPerson } from '../../../../core/eperson/models/eperson.model'; -import { Group } from '../../../../core/eperson/models/group.model'; -import { PaginationService } from '../../../../core/pagination/pagination.service'; -import { PageInfo } from '../../../../core/shared/page-info.model'; + RemoteData, + EPersonDataService, + GroupDataService, + EPerson, + Group, + NotificationsService, + PaginationService, + PageInfo, + ActivatedRouteStub, + DSONameServiceMock, + EPersonMock, + EPersonMock2, + GroupMock, + NotificationsServiceStub, + PaginationServiceStub, + RouterMock, + getMockTranslateService, + TranslateLoaderMock, + createSuccessfulRemoteDataObject$, +} from '@dspace/core' +import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core'; +import { Observable, of } from 'rxjs'; + import { ContextHelpDirective } from '../../../../shared/context-help.directive'; import { FormBuilderService } from '../../../../shared/form/builder/form-builder.service'; -import { DSONameServiceMock } from '../../../../shared/mocks/dso-name.service.mock'; -import { getMockFormBuilderService } from '../../../../shared/mocks/form-builder-service.mock'; -import { RouterMock } from '../../../../shared/mocks/router.mock'; -import { getMockTranslateService } from '../../../../shared/mocks/translate.service.mock'; -import { NotificationsService } from '../../../../shared/notifications/notifications.service'; -import { PaginationComponent } from '../../../../shared/pagination/pagination.component'; -import { createSuccessfulRemoteDataObject$ } from '../../../../shared/remote-data.utils'; -import { ActivatedRouteStub } from '../../../../shared/testing/active-router.stub'; import { - EPersonMock, - EPersonMock2, -} from '../../../../shared/testing/eperson.mock'; -import { GroupMock } from '../../../../shared/testing/group-mock'; -import { NotificationsServiceStub } from '../../../../shared/testing/notifications-service.stub'; -import { PaginationServiceStub } from '../../../../shared/testing/pagination-service.stub'; -import { TranslateLoaderMock } from '../../../../shared/testing/translate-loader.mock'; + getMockFormBuilderService, +} from '../../../../shared/form/testing/form-builder-service.mock'; +import { PaginationComponent } from '../../../../shared/pagination/pagination.component'; +import { GroupRegistryService } from '../../group-registry.service'; import { MembersListComponent } from './members-list.component'; // todo: optimize imports @@ -77,6 +59,7 @@ describe('MembersListComponent', () => { let builderService: FormBuilderService; let ePersonDataServiceStub: any; let groupsDataServiceStub: any; + let groupRegistryServiceStub: any; let activeGroup; let epersonMembers: EPerson[]; let epersonNonMembers: EPerson[]; @@ -108,13 +91,16 @@ describe('MembersListComponent', () => { // empty }, }; + groupRegistryServiceStub = { + getActiveGroup(): Observable { + return of(activeGroup); + }, + }; groupsDataServiceStub = { activeGroup: activeGroup, epersonMembers: epersonMembers, epersonNonMembers: epersonNonMembers, - getActiveGroup(): Observable { - return of(activeGroup); - }, + getEPersonMembers() { return this.epersonMembers; }, @@ -165,6 +151,7 @@ describe('MembersListComponent', () => { providers: [MembersListComponent, { provide: EPersonDataService, useValue: ePersonDataServiceStub }, { provide: GroupDataService, useValue: groupsDataServiceStub }, + { provide: GroupRegistryService, useValue: groupRegistryServiceStub }, { provide: NotificationsService, useValue: new NotificationsServiceStub() }, { provide: FormBuilderService, useValue: builderService }, { provide: Router, useValue: new RouterMock() }, diff --git a/src/app/access-control/group-registry/group-form/members-list/members-list.component.ts b/src/app/access-control/group-registry/group-form/members-list/members-list.component.ts index e8d90c1a0be..d54988cd7ca 100644 --- a/src/app/access-control/group-registry/group-form/members-list/members-list.component.ts +++ b/src/app/access-control/group-registry/group-form/members-list/members-list.component.ts @@ -1,25 +1,25 @@ +import { AsyncPipe, NgClass } from '@angular/common'; +import { Component, Input, OnDestroy, OnInit } from '@angular/core'; +import { ReactiveFormsModule, UntypedFormBuilder } from '@angular/forms'; +import { Router, RouterLink } from '@angular/router'; import { - AsyncPipe, - NgClass, -} from '@angular/common'; -import { - Component, - Input, - OnDestroy, - OnInit, -} from '@angular/core'; -import { - ReactiveFormsModule, - UntypedFormBuilder, -} from '@angular/forms'; -import { - Router, - RouterLink, -} from '@angular/router'; -import { - TranslateModule, - TranslateService, -} from '@ngx-translate/core'; + DSONameService, + buildPaginatedList, + PaginatedList, + RemoteData, + EPersonDataService, + GroupDataService, + EPerson, + EpersonDtoModel, + Group, + NotificationsService, + PaginationService, + PaginationComponentOptions, + getAllCompletedRemoteData, + getFirstCompletedRemoteData, + getRemoteDataPayload, +} from '@dspace/core' +import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { BehaviorSubject, combineLatest as observableCombineLatest, @@ -28,36 +28,13 @@ import { of, Subscription, } from 'rxjs'; -import { - defaultIfEmpty, - map, - switchMap, - take, -} from 'rxjs/operators'; +import { defaultIfEmpty, map, switchMap, take } from 'rxjs/operators'; -import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; -import { - buildPaginatedList, - PaginatedList, -} from '../../../../core/data/paginated-list.model'; -import { RemoteData } from '../../../../core/data/remote-data'; -import { EPersonDataService } from '../../../../core/eperson/eperson-data.service'; -import { GroupDataService } from '../../../../core/eperson/group-data.service'; -import { EPerson } from '../../../../core/eperson/models/eperson.model'; -import { EpersonDtoModel } from '../../../../core/eperson/models/eperson-dto.model'; -import { Group } from '../../../../core/eperson/models/group.model'; -import { PaginationService } from '../../../../core/pagination/pagination.service'; -import { - getAllCompletedRemoteData, - getFirstCompletedRemoteData, - getRemoteDataPayload, -} from '../../../../core/shared/operators'; import { BtnDisabledDirective } from '../../../../shared/btn-disabled.directive'; import { ContextHelpDirective } from '../../../../shared/context-help.directive'; -import { NotificationsService } from '../../../../shared/notifications/notifications.service'; import { PaginationComponent } from '../../../../shared/pagination/pagination.component'; -import { PaginationComponentOptions } from '../../../../shared/pagination/pagination-component-options.model'; import { getEPersonEditRoute } from '../../../access-control-routing-paths'; +import { GroupRegistryService } from '../../group-registry.service'; // todo: optimize imports @@ -183,6 +160,7 @@ export class MembersListComponent implements OnInit, OnDestroy { constructor( protected groupDataService: GroupDataService, + protected groupRegistryService: GroupRegistryService, public ePersonDataService: EPersonDataService, protected translateService: TranslateService, protected notificationsService: NotificationsService, @@ -198,7 +176,7 @@ export class MembersListComponent implements OnInit, OnDestroy { this.searchForm = this.formBuilder.group(({ query: '', })); - this.subs.set(SubKey.ActiveGroup, this.groupDataService.getActiveGroup().subscribe((activeGroup: Group) => { + this.subs.set(SubKey.ActiveGroup, this.groupRegistryService.getActiveGroup().subscribe((activeGroup: Group) => { if (activeGroup != null) { this.groupBeingEdited = activeGroup; this.retrieveMembers(this.config.currentPage); @@ -282,7 +260,7 @@ export class MembersListComponent implements OnInit, OnDestroy { * @param eperson EPerson we want to delete as member from group that is currently being edited */ deleteMemberFromGroup(eperson: EPerson) { - this.groupDataService.getActiveGroup().pipe(take(1)).subscribe((activeGroup: Group) => { + this.groupRegistryService.getActiveGroup().pipe(take(1)).subscribe((activeGroup: Group) => { if (activeGroup != null) { const response = this.groupDataService.deleteMemberFromGroup(activeGroup, eperson); this.showNotifications('deleteMember', response, this.dsoNameService.getName(eperson), activeGroup); @@ -302,7 +280,7 @@ export class MembersListComponent implements OnInit, OnDestroy { * @param eperson EPerson we want to add as member to group that is currently being edited */ addMemberToGroup(eperson: EPerson) { - this.groupDataService.getActiveGroup().pipe(take(1)).subscribe((activeGroup: Group) => { + this.groupRegistryService.getActiveGroup().pipe(take(1)).subscribe((activeGroup: Group) => { if (activeGroup != null) { const response = this.groupDataService.addMemberToGroup(activeGroup, eperson); this.showNotifications('addMember', response, this.dsoNameService.getName(eperson), activeGroup); diff --git a/src/app/access-control/group-registry/group-form/subgroup-list/subgroups-list.component.html b/src/app/access-control/group-registry/group-form/subgroup-list/subgroups-list.component.html index d09ab08c42a..c39298865ca 100644 --- a/src/app/access-control/group-registry/group-form/subgroup-list/subgroups-list.component.html +++ b/src/app/access-control/group-registry/group-form/subgroup-list/subgroups-list.component.html @@ -24,8 +24,8 @@

{{messagePrefix + '.headSubgroups' | translate}}

{{group.id}} - + {{ dsoNameService.getName(group) }} @@ -107,8 +107,8 @@