mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2026-09-16 18:13:06 +00:00
Compare commits
113
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fb2a5a64b6 | ||
|
|
735ed25ac5 | ||
|
|
405dd7f581 | ||
|
|
c36fc128ab | ||
|
|
c96d2313ef | ||
|
|
4c929ef117 | ||
|
|
ec54b7dbf1 | ||
|
|
0da2ccb762 | ||
|
|
b34b5994d7 | ||
|
|
c2da21301e | ||
|
|
eff9591cf2 | ||
|
|
7e84f63aad | ||
|
|
3ba3cc40e2 | ||
|
|
ceb8af6323 | ||
|
|
ceaa12c27d | ||
|
|
fc55d31b7c | ||
|
|
b0a75b9cf5 | ||
|
|
6e2b0ef78b | ||
|
|
3d3c03184e | ||
|
|
3874f20751 | ||
|
|
f3ae284fdd | ||
|
|
f5fbabf2f8 | ||
|
|
48c42af3f0 | ||
|
|
de19677eef | ||
|
|
b73c53c580 | ||
|
|
e69efed069 | ||
|
|
54751f4c84 | ||
|
|
f3727f7ca8 | ||
|
|
32e0439660 | ||
|
|
587adf7ec1 | ||
|
|
d14c1556d6 | ||
|
|
838950de9e | ||
|
|
2e44fcf06b | ||
|
|
cc6aa22f92 | ||
|
|
d2bbc68984 | ||
|
|
1d38be9071 | ||
|
|
24bbc007fe | ||
|
|
0f087101c3 | ||
|
|
87f1bdf0d3 | ||
|
|
c770de8fd3 | ||
|
|
57168c7b59 | ||
|
|
b803044361 | ||
|
|
e86fa2ac8a | ||
|
|
2ab0979382 | ||
|
|
f748033b17 | ||
|
|
8a280b5537 | ||
|
|
a298633a69 | ||
|
|
b177cff3ea | ||
|
|
d1f6d427bf | ||
|
|
07bcedb215 | ||
|
|
ba822eb044 | ||
|
|
10354b1910 | ||
|
|
2f9ff4fe2c | ||
|
|
d8fa2c3763 | ||
|
|
13668f3ed9 | ||
|
|
d110cdfe10 | ||
|
|
4ed0fb5a04 | ||
|
|
caa5f68b3f | ||
|
|
6d928a6b86 | ||
|
|
57d9ac5ada | ||
|
|
b6733b5d96 | ||
|
|
00739e30a9 | ||
|
|
b3236b598b | ||
|
|
3b60d90b85 | ||
|
|
9d4166ff2f | ||
|
|
fcfe070674 | ||
|
|
51c795675f | ||
|
|
e0027c35f4 | ||
|
|
8cb8236328 | ||
|
|
e3b708dd07 | ||
|
|
d67f830775 | ||
|
|
7f8b51cf3c | ||
|
|
6f75dbecd8 | ||
|
|
a9c67f8c58 | ||
|
|
6b1fd0ff7e | ||
|
|
df52ad8d9e | ||
|
|
de7e00658d | ||
|
|
b4635f076a | ||
|
|
1b5c8bfd31 | ||
|
|
b079435c2c | ||
|
|
b7f489d917 | ||
|
|
0204f46737 | ||
|
|
0fa2f77ee5 | ||
|
|
d3406a5e56 | ||
|
|
1166ae6d01 | ||
|
|
b85b395851 | ||
|
|
f13a7537bf | ||
|
|
ed27cbc7c4 | ||
|
|
55800b7a2e | ||
|
|
09fbe131f3 | ||
|
|
af1f0c9d7e | ||
|
|
88983ea134 | ||
|
|
891cd2ffe9 | ||
|
|
93604f1bdd | ||
|
|
61d3c96ec8 | ||
|
|
df3848e07d | ||
|
|
4b3d70873a | ||
|
|
c3b0aaf856 | ||
|
|
fbe1d8b144 | ||
|
|
b58663461d | ||
|
|
d37a96e3c2 | ||
|
|
faebeae1c0 | ||
|
|
e428657ea2 | ||
|
|
76cdea615c | ||
|
|
498934101f | ||
|
|
97495da1a3 | ||
|
|
a20f40eaf5 | ||
|
|
89338213d8 | ||
|
|
b9a6130938 | ||
|
|
cccf6d4247 | ||
|
|
1caacd6407 | ||
|
|
aceef495a2 | ||
|
|
c8790d2d54 |
+6
-1
@@ -1,5 +1,6 @@
|
||||
module.exports = {
|
||||
root: true,
|
||||
|
||||
ignorePatterns: [
|
||||
'projects/**/*',
|
||||
'**/node_modules/**/*',
|
||||
@@ -10,7 +11,9 @@ module.exports = {
|
||||
'**/scripts',
|
||||
'**/docs'
|
||||
],
|
||||
|
||||
plugins: ['@nrwl/nx'],
|
||||
|
||||
overrides: [
|
||||
{
|
||||
files: ['*.ts'],
|
||||
@@ -191,5 +194,7 @@ module.exports = {
|
||||
'@alfresco/eslint-angular/no-angular-material-selectors': 'error'
|
||||
}
|
||||
}
|
||||
]
|
||||
],
|
||||
|
||||
extends: ['plugin:storybook/recommended']
|
||||
};
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"extends": ["./.eslintrc.js"]
|
||||
}
|
||||
@@ -35,3 +35,4 @@ licenses.txt
|
||||
.DS_Store
|
||||
.angular
|
||||
NX
|
||||
.nx
|
||||
|
||||
+9
-4
@@ -1,7 +1,12 @@
|
||||
module.exports = {
|
||||
framework: {
|
||||
name: '@storybook/angular',
|
||||
options: {}
|
||||
},
|
||||
staticDirs: [{ from: '../../../demo-shell/src/app.config.json', to: 'app.config.json' }],
|
||||
docs: {
|
||||
autodocs: true
|
||||
},
|
||||
stories: [],
|
||||
addons: ['@storybook/addon-essentials'],
|
||||
framework: '@storybook/angular',
|
||||
staticDirs: [ { from: '../../../demo-shell/src/app.config.json', to: 'app.config.json' } ],
|
||||
core: { builder: 'webpack5' }
|
||||
addons:[],
|
||||
};
|
||||
|
||||
Vendored
+2
-1
@@ -31,5 +31,6 @@
|
||||
"postcss",
|
||||
"scss"
|
||||
],
|
||||
"editor.guides.indentation": true
|
||||
"editor.guides.indentation": true,
|
||||
"typescript.tsdk": "node_modules/typescript/lib"
|
||||
}
|
||||
|
||||
+20
-25
@@ -20,7 +20,8 @@
|
||||
"zen-observable",
|
||||
"subscriptions-transport-ws",
|
||||
"d",
|
||||
"chart.js"
|
||||
"chart.js",
|
||||
"cropperjs"
|
||||
],
|
||||
"outputPath": "dist/demo-shell",
|
||||
"index": "demo-shell/src/index.html",
|
||||
@@ -283,7 +284,7 @@
|
||||
]
|
||||
},
|
||||
"test": {
|
||||
"executor": "nx:run-commands",
|
||||
"builder": "nx:run-commands",
|
||||
"options": {
|
||||
"commands": ["TS_NODE_PROJECT=lib/js-api/test/tsconfig.json mocha --full-trace --config lib/js-api/.mocharc.json"]
|
||||
}
|
||||
@@ -297,7 +298,7 @@
|
||||
}
|
||||
},
|
||||
"npm-publish": {
|
||||
"executor": "nx:run-commands",
|
||||
"builder": "nx:run-commands",
|
||||
"dependsOn": [
|
||||
"build"
|
||||
],
|
||||
@@ -433,7 +434,7 @@
|
||||
}
|
||||
},
|
||||
"license": {
|
||||
"executor": "nx:run-commands",
|
||||
"builder": "nx:run-commands",
|
||||
"options": {
|
||||
"commands": [
|
||||
{
|
||||
@@ -443,7 +444,7 @@
|
||||
}
|
||||
},
|
||||
"pretheme": {
|
||||
"executor": "nx:run-commands",
|
||||
"builder": "nx:run-commands",
|
||||
"options": {
|
||||
"commands": [
|
||||
{
|
||||
@@ -453,9 +454,9 @@
|
||||
}
|
||||
},
|
||||
"npm-publish": {
|
||||
"executor": "nx:run-commands",
|
||||
"builder": "nx:run-commands",
|
||||
"dependsOn": [
|
||||
"build"
|
||||
"build", "pretheme"
|
||||
],
|
||||
"options": {
|
||||
"cwd": "dist/libs/core",
|
||||
@@ -569,7 +570,7 @@
|
||||
}
|
||||
},
|
||||
"stylelint": {
|
||||
"executor": "nx:run-commands",
|
||||
"builder": "nx:run-commands",
|
||||
"options": {
|
||||
"commands": [
|
||||
{
|
||||
@@ -640,7 +641,7 @@
|
||||
}
|
||||
},
|
||||
"stylelint": {
|
||||
"executor": "nx:run-commands",
|
||||
"builder": "nx:run-commands",
|
||||
"options": {
|
||||
"commands": [
|
||||
{
|
||||
@@ -782,7 +783,7 @@
|
||||
}
|
||||
},
|
||||
"npm-publish": {
|
||||
"executor": "nx:run-commands",
|
||||
"builder": "nx:run-commands",
|
||||
"dependsOn": [
|
||||
"build"
|
||||
],
|
||||
@@ -843,7 +844,7 @@
|
||||
}
|
||||
},
|
||||
"stylelint": {
|
||||
"executor": "nx:run-commands",
|
||||
"builder": "nx:run-commands",
|
||||
"options": {
|
||||
"commands": [
|
||||
{
|
||||
@@ -853,7 +854,7 @@
|
||||
}
|
||||
},
|
||||
"npm-publish": {
|
||||
"executor": "nx:run-commands",
|
||||
"builder": "nx:run-commands",
|
||||
"dependsOn": [
|
||||
"build"
|
||||
],
|
||||
@@ -943,12 +944,6 @@
|
||||
"main": "lib/testing/index.ts",
|
||||
"generatePackageJson" : true,
|
||||
"tsConfig": "lib/testing/tsconfig.lib.prod.json",
|
||||
"additionalEntryPoints": [
|
||||
{
|
||||
"entryName": "shared",
|
||||
"entryPath": "/lib/testing/src/lib/shared/index.ts"
|
||||
}
|
||||
],
|
||||
"stylePreprocessorOptions": {
|
||||
"includePaths": [
|
||||
"lib", "lib/core/src/lib"
|
||||
@@ -976,7 +971,7 @@
|
||||
}
|
||||
},
|
||||
"bundle": {
|
||||
"executor": "nx:run-commands",
|
||||
"builder": "nx:run-commands",
|
||||
"options": {
|
||||
"commands": [
|
||||
{
|
||||
@@ -989,7 +984,7 @@
|
||||
]
|
||||
},
|
||||
"copyToNodeModules": {
|
||||
"executor": "nx:run-commands",
|
||||
"builder": "nx:run-commands",
|
||||
"options": {
|
||||
"commands": [
|
||||
{
|
||||
@@ -1005,7 +1000,7 @@
|
||||
]
|
||||
},
|
||||
"npm-publish": {
|
||||
"executor": "nx:run-commands",
|
||||
"builder": "nx:run-commands",
|
||||
"dependsOn": [
|
||||
"build"
|
||||
],
|
||||
@@ -1071,7 +1066,7 @@
|
||||
}
|
||||
},
|
||||
"npm-publish": {
|
||||
"executor": "nx:run-commands",
|
||||
"builder": "nx:run-commands",
|
||||
"dependsOn": [
|
||||
"build"
|
||||
],
|
||||
@@ -1112,7 +1107,7 @@
|
||||
"defaultConfiguration": "production"
|
||||
},
|
||||
"bundle": {
|
||||
"executor": "nx:run-commands",
|
||||
"builder": "nx:run-commands",
|
||||
"options": {
|
||||
"commands": [
|
||||
{
|
||||
@@ -1125,7 +1120,7 @@
|
||||
]
|
||||
},
|
||||
"copyToNodeModules": {
|
||||
"executor": "nx:run-commands",
|
||||
"builder": "nx:run-commands",
|
||||
"options": {
|
||||
"commands": [
|
||||
{
|
||||
@@ -1150,7 +1145,7 @@
|
||||
}
|
||||
},
|
||||
"npm-publish": {
|
||||
"executor": "nx:run-commands",
|
||||
"builder": "nx:run-commands",
|
||||
"dependsOn": [
|
||||
"build"
|
||||
],
|
||||
|
||||
@@ -0,0 +1,201 @@
|
||||
{
|
||||
"name": "demoshell",
|
||||
"$schema": "../node_modules/nx/schemas/project-schema.json",
|
||||
"sourceRoot": "demo-shell/src",
|
||||
"projectType": "application",
|
||||
"targets": {
|
||||
"build": {
|
||||
"executor": "@angular-devkit/build-angular:browser",
|
||||
"options": {
|
||||
"allowedCommonJsDependencies": [
|
||||
"minimatch",
|
||||
"minimatch-browser",
|
||||
"superagent",
|
||||
"event-emitter",
|
||||
"brace-expansion",
|
||||
"zen-observable",
|
||||
"subscriptions-transport-ws",
|
||||
"d",
|
||||
"chart.js",
|
||||
"cropperjs"
|
||||
],
|
||||
"outputPath": "dist/demo-shell",
|
||||
"index": "demo-shell/src/index.html",
|
||||
"main": "demo-shell/src/main.ts",
|
||||
"tsConfig": "tsconfig.dev.json",
|
||||
"polyfills": "demo-shell/src/polyfills.ts",
|
||||
"stylePreprocessorOptions": {
|
||||
"includePaths": ["lib", "lib/core/src/lib"]
|
||||
},
|
||||
"assets": [
|
||||
"demo-shell/src/assets",
|
||||
"demo-shell/src/favicon-96x96.png",
|
||||
"demo-shell/src/app.config.json",
|
||||
{
|
||||
"glob": "**/*",
|
||||
"input": "demo-shell/src/assets",
|
||||
"output": "/assets"
|
||||
},
|
||||
{
|
||||
"glob": "app.config.json",
|
||||
"input": "demo-shell/src",
|
||||
"output": "/"
|
||||
},
|
||||
{
|
||||
"glob": "**/*",
|
||||
"input": "demo-shell/resources",
|
||||
"output": "/resources"
|
||||
},
|
||||
{
|
||||
"glob": "**/*",
|
||||
"input": "lib/core/src/lib/assets",
|
||||
"output": "/assets"
|
||||
},
|
||||
{
|
||||
"glob": "**/*",
|
||||
"input": "lib/process-services/src/lib/assets",
|
||||
"output": "/assets"
|
||||
},
|
||||
{
|
||||
"glob": "**/*",
|
||||
"input": "lib/process-services-cloud/src/lib/assets",
|
||||
"output": "/assets"
|
||||
},
|
||||
{
|
||||
"glob": "**/*",
|
||||
"input": "lib/content-services/src/lib/assets",
|
||||
"output": "/assets"
|
||||
},
|
||||
{
|
||||
"glob": "**/*",
|
||||
"input": "lib/core/src/lib/i18n",
|
||||
"output": "/assets/adf-core/i18n"
|
||||
},
|
||||
{
|
||||
"glob": "**/*",
|
||||
"input": "lib/content-services/src/lib/i18n",
|
||||
"output": "/assets/adf-content-services/i18n"
|
||||
},
|
||||
{
|
||||
"glob": "**/*",
|
||||
"input": "lib/process-services/src/lib/i18n",
|
||||
"output": "/assets/adf-process-services/i18n"
|
||||
},
|
||||
{
|
||||
"glob": "**/*",
|
||||
"input": "lib/process-services-cloud/src/lib/i18n",
|
||||
"output": "/assets/adf-process-services-cloud/i18n"
|
||||
},
|
||||
{
|
||||
"glob": "**/*",
|
||||
"input": "lib/insights/src/lib/i18n",
|
||||
"output": "/assets/adf-insights/i18n"
|
||||
},
|
||||
{
|
||||
"glob": "pdf.worker.min.js",
|
||||
"input": "node_modules/pdfjs-dist/build",
|
||||
"output": "/"
|
||||
},
|
||||
{
|
||||
"glob": "**/*",
|
||||
"input": "node_modules/monaco-editor",
|
||||
"output": "/assets/monaco/"
|
||||
}
|
||||
],
|
||||
"styles": [
|
||||
"demo-shell/src/styles.scss",
|
||||
"demo-shell/src/custom-style-dev.scss",
|
||||
"node_modules/cropperjs/dist/cropper.min.css",
|
||||
"node_modules/pdfjs-dist/web/pdf_viewer.css"
|
||||
],
|
||||
"scripts": ["node_modules/pdfjs-dist/build/pdf.js", "node_modules/pdfjs-dist/web/pdf_viewer.js", "node_modules/raphael/raphael.min.js"],
|
||||
"vendorChunk": true,
|
||||
"extractLicenses": false,
|
||||
"buildOptimizer": false,
|
||||
"sourceMap": true,
|
||||
"optimization": false,
|
||||
"namedChunks": true
|
||||
},
|
||||
"configurations": {
|
||||
"production": {
|
||||
"budgets": [
|
||||
{
|
||||
"type": "anyComponentStyle",
|
||||
"maximumWarning": "12kb"
|
||||
}
|
||||
],
|
||||
"optimization": true,
|
||||
"outputHashing": "all",
|
||||
"sourceMap": false,
|
||||
"namedChunks": false,
|
||||
"extractLicenses": true,
|
||||
"buildOptimizer": true,
|
||||
"verbose": false,
|
||||
"fileReplacements": [
|
||||
{
|
||||
"replace": "demo-shell/src/environments/environment.ts",
|
||||
"with": "demo-shell/src/environments/environment.prod.ts"
|
||||
}
|
||||
]
|
||||
},
|
||||
"canary": {
|
||||
"fileReplacements": [
|
||||
{
|
||||
"replace": "demo-shell/src/environments/environment.ts",
|
||||
"with": "demo-shell/src/environments/environment.canary.ts"
|
||||
}
|
||||
]
|
||||
},
|
||||
"e2e": {
|
||||
"budgets": [
|
||||
{
|
||||
"type": "anyComponentStyle",
|
||||
"maximumWarning": "6kb"
|
||||
}
|
||||
],
|
||||
"optimization": true,
|
||||
"outputHashing": "all",
|
||||
"sourceMap": false,
|
||||
"namedChunks": false,
|
||||
"extractLicenses": true,
|
||||
"buildOptimizer": true,
|
||||
"verbose": false,
|
||||
"fileReplacements": [
|
||||
{
|
||||
"replace": "demo-shell/src/environments/environment.ts",
|
||||
"with": "demo-shell/src/environments/environment.e2e.ts"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"defaultConfiguration": ""
|
||||
},
|
||||
"serve": {
|
||||
"executor": "@angular-devkit/build-angular:dev-server",
|
||||
"options": {
|
||||
"browserTarget": "demoshell:build",
|
||||
"host": "0.0.0.0",
|
||||
"port": 3000,
|
||||
"proxyConfig": "demo-shell/proxy.conf.js",
|
||||
"disableHostCheck": true
|
||||
},
|
||||
"configurations": {
|
||||
"production": {
|
||||
"browserTarget": "demoshell:build:production"
|
||||
},
|
||||
"canary": {
|
||||
"browserTarget": "demoshell:build:canary"
|
||||
},
|
||||
"e2e": {
|
||||
"browserTarget": "demoshell:build:e2e"
|
||||
}
|
||||
}
|
||||
},
|
||||
"lint": {
|
||||
"executor": "@nrwl/linter:eslint",
|
||||
"options": {
|
||||
"lintFilePatterns": ["demo-shell/**/*.ts", "demo-shell/**/*.html"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -622,7 +622,7 @@
|
||||
"unit": "Byte",
|
||||
"field": "cm:content.size",
|
||||
"min": 0,
|
||||
"max": 18,
|
||||
"max": 4000,
|
||||
"step": 1,
|
||||
"thumbLabel": true
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ import { UserInfoComponent } from './components/app-layout/user-info/user-info.c
|
||||
BrowserModule,
|
||||
environment.e2e ? NoopAnimationsModule : BrowserAnimationsModule,
|
||||
ReactiveFormsModule,
|
||||
RouterModule.forRoot(appRoutes, { useHash: true, relativeLinkResolution: 'legacy' }),
|
||||
RouterModule.forRoot(appRoutes, { useHash: true }),
|
||||
AuthModule.forRoot({ useHash: true }),
|
||||
FormsModule,
|
||||
HttpClientModule,
|
||||
|
||||
+3
-1
@@ -1,3 +1,5 @@
|
||||
@import 'styles/mat-selectors';
|
||||
|
||||
.app-form-container {
|
||||
padding: 10px;
|
||||
}
|
||||
@@ -31,7 +33,7 @@
|
||||
}
|
||||
|
||||
.app-form-editor-buttons {
|
||||
& > .mat-raised-button {
|
||||
& > #{$mat-raised-button} {
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
@import 'styles/mat-selectors';
|
||||
|
||||
.app-cloud-layout-overflow {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.app-cloud-layout-tab-body .mat-tab-body-wrapper {
|
||||
.app-cloud-layout-tab-body #{$mat-tab-body-content} {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
|
||||
@@ -43,11 +43,11 @@
|
||||
<button mat-raised-button (click)="addAction()">Add</button>
|
||||
</form>
|
||||
<div *ngIf="actions.length > 0">
|
||||
<mat-chip-list>
|
||||
<mat-chip *ngFor="let action of actions" [removable]="true">
|
||||
<mat-chip-listbox>
|
||||
<mat-chip-option *ngFor="let action of actions" [removable]="true">
|
||||
{{action.title}}
|
||||
<mat-icon matChipRemove (click)="removeAction(action)">cancel</mat-icon>
|
||||
</mat-chip>
|
||||
</mat-chip-list>
|
||||
</mat-chip-option>
|
||||
</mat-chip-listbox>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
@use '@angular/material' as mat;
|
||||
@import '../../lib/core/src/lib/styles/index';
|
||||
@import '../../lib/core/src/lib/styles/typography';
|
||||
@include mat.all-component-typographies;
|
||||
@include mat.core;
|
||||
|
||||
$primary: mat.define-palette($alfresco-accent-orange);
|
||||
@@ -19,19 +20,3 @@ $theme: mat.define-light-theme(
|
||||
|
||||
@include mat.all-component-themes($theme);
|
||||
@include alfresco-material-theme($theme);
|
||||
|
||||
$typography: map-get($theme, typography);
|
||||
|
||||
body,
|
||||
html {
|
||||
margin: 0;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
font-size: mat.font-size($typography, body-1);
|
||||
font-family: mat.font-family($typography);
|
||||
line-height: mat.line-height($typography, body-1);
|
||||
}
|
||||
|
||||
body {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
@use '@angular/material' as mat;
|
||||
@import '~@alfresco/adf-core/theming';
|
||||
@include mat.core($alfresco-typography);
|
||||
@include mat.all-component-typographies($alfresco-typography);
|
||||
@include mat.core;
|
||||
|
||||
$primary: mat.define-palette($alfresco-accent-orange);
|
||||
$accent: mat.define-palette($alfresco-accent-purple);
|
||||
@@ -16,17 +17,3 @@ $theme: mat.define-light-theme(
|
||||
|
||||
@include mat.all-component-themes($theme);
|
||||
@include alfresco-material-theme($theme);
|
||||
|
||||
body,
|
||||
html {
|
||||
margin: 0;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
font-size: mat.font-size($alfresco-typography, body-1);
|
||||
font-family: mat.font-family($alfresco-typography);
|
||||
line-height: mat.line-height($alfresco-typography, body-1);
|
||||
}
|
||||
|
||||
body {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
@@ -96,7 +96,7 @@ However, you can use a more complex template if necessary:
|
||||
class="adf-search-autocomplete-item"
|
||||
(click)="elementClicked(item)"
|
||||
(keyup.enter)="elementClicked(item)">
|
||||
<mat-icon mat-list-icon>
|
||||
<mat-icon matListItemLine>
|
||||
<img [src]="getMimeTypeIcon(item)" />
|
||||
</mat-icon>
|
||||
<h4 mat-line id="result_name_{{idx}}"
|
||||
|
||||
@@ -20,6 +20,7 @@ export const materialLocators = {
|
||||
root: 'mat-error'
|
||||
},
|
||||
Tooltip: {
|
||||
root: 'mat-tooltip-component'
|
||||
root: 'mat-tooltip-component',
|
||||
message: '.mdc-tooltip__surface'
|
||||
}
|
||||
};
|
||||
|
||||
@@ -21,7 +21,7 @@ import { materialLocators } from './material-locators';
|
||||
|
||||
export class TooltipComponent extends BaseComponent {
|
||||
private static rootElement = materialLocators.Tooltip.root;
|
||||
public content = this.getChild('div');
|
||||
public content = this.getChild(materialLocators.Tooltip.message);
|
||||
|
||||
constructor(page: Page) {
|
||||
super(page, TooltipComponent.rootElement);
|
||||
|
||||
@@ -397,6 +397,11 @@ describe('Content Services Viewer', () => {
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
*
|
||||
* @param originalFileName
|
||||
* @param newVersionLocation
|
||||
*/
|
||||
async function uploadNewVersion(originalFileName: string, newVersionLocation: string): Promise<void> {
|
||||
await contentServicesPage.doubleClickRow(originalFileName);
|
||||
await viewerPage.waitTillContentLoaded();
|
||||
@@ -410,14 +415,23 @@ describe('Content Services Viewer', () => {
|
||||
await browser.refresh();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param unsupportedFileName
|
||||
*/
|
||||
async function previewUnsupportedFile(unsupportedFileName: string): Promise<void> {
|
||||
await contentServicesPage.doubleClickRow(unsupportedFileName);
|
||||
await viewerPage.waitTillContentLoaded();
|
||||
await viewerPage.checkUnknownFormatIsDisplayed();
|
||||
await expect(await viewerPage.getUnknownFormatMessage()).toBe("Couldn't load preview. Unknown format.");
|
||||
await expect(await viewerPage.getUnknownFormatMessage()).toBe('Couldn\'t load preview. Unknown format.');
|
||||
await viewerPage.clickCloseButton();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param fileName
|
||||
* @param newName
|
||||
*/
|
||||
async function changeFileNameInViewer(fileName: string, newName: string): Promise<void> {
|
||||
await contentServicesPage.doubleClickRow(fileName);
|
||||
await viewerPage.waitTillContentLoaded();
|
||||
|
||||
@@ -21,7 +21,8 @@ import { createApiService,
|
||||
UploadActions,
|
||||
UserModel,
|
||||
UsersActions,
|
||||
ViewerPage
|
||||
ViewerPage,
|
||||
TogglePage
|
||||
} from '@alfresco/adf-testing';
|
||||
import { MetadataViewPage } from '../../core/pages/metadata-view.page';
|
||||
import { FileModel } from '../../models/ACS/file.model';
|
||||
@@ -45,6 +46,7 @@ describe('CardView Component - properties', () => {
|
||||
const viewerPage = new ViewerPage();
|
||||
const metadataViewPage = new MetadataViewPage();
|
||||
const contentServicesPage = new ContentServicesPage();
|
||||
const togglePage = new TogglePage();
|
||||
|
||||
let acsUser: UserModel;
|
||||
|
||||
@@ -137,13 +139,13 @@ describe('CardView Component - properties', () => {
|
||||
await viewerPage.checkInfoSideBarIsDisplayed();
|
||||
await metadataViewPage.clickOnPropertiesTab();
|
||||
|
||||
await CheckboxPage.uncheck(metadataViewPage.defaultPropertiesSwitch);
|
||||
await togglePage.disableToggle(metadataViewPage.defaultPropertiesSwitch);
|
||||
|
||||
await metadataViewPage.checkMetadataGroupIsNotPresent('properties');
|
||||
await metadataViewPage.checkMetadataGroupIsPresent('Versionable');
|
||||
await metadataViewPage.checkMetadataGroupIsExpand('Versionable');
|
||||
|
||||
await CheckboxPage.check(metadataViewPage.defaultPropertiesSwitch);
|
||||
await togglePage.enableToggle(metadataViewPage.defaultPropertiesSwitch);
|
||||
|
||||
await metadataViewPage.checkMetadataGroupIsPresent('properties');
|
||||
await metadataViewPage.checkMetadataGroupIsExpand('properties');
|
||||
@@ -155,7 +157,11 @@ describe('CardView Component - properties', () => {
|
||||
await viewerPage.checkInfoSideBarIsDisplayed();
|
||||
await metadataViewPage.clickOnPropertiesTab();
|
||||
|
||||
await CheckboxPage.uncheck(metadataViewPage.defaultPropertiesSwitch);
|
||||
await metadataViewPage.checkMetadataGroupIsPresent('properties');
|
||||
|
||||
await togglePage.disableToggle(metadataViewPage.defaultPropertiesSwitch);
|
||||
|
||||
await metadataViewPage.checkMetadataGroupIsNotPresent('properties');
|
||||
});
|
||||
|
||||
it('[C307975] Should be able to choose which aspect to show expanded in the info-drawer', async () => {
|
||||
|
||||
@@ -38,11 +38,12 @@ export class MetadataViewPage {
|
||||
multiSwitch = $(`#adf-metadata-multi`);
|
||||
defaultPropertiesSwitch = $('#adf-metadata-default-properties');
|
||||
closeButton = element(by.cssContainingText(`button${materialLocators.Button.class} span`, 'Close'));
|
||||
displayAspect = $(`input[data-placeholder='Display Aspect']`);
|
||||
applyAspect = element(by.cssContainingText(`button span${materialLocators.Button.wrapper}`, 'Apply Aspect'));
|
||||
displayAspect = $(`input[placeholder='Display Aspect']`);
|
||||
applyAspect = element(by.cssContainingText(`button span${materialLocators.Button.label}`, 'Apply Aspect'));
|
||||
saveMetadataButton = $(`[data-automation-id='save-metadata']`);
|
||||
saveGeneralMetadataButton = $(`[data-automation-id='save-general-info-metadata']`);
|
||||
resetMetadataButton = $(`[data-automation-id='reset-metadata']`);
|
||||
informationButton = $(`button[data-automation-id='meta-data-card-toggle-expand']`);
|
||||
|
||||
private getMetadataGroupLocator = async (groupName: string): Promise<ElementFinder> =>
|
||||
$(`[data-automation-id="adf-metadata-group-${groupName}"]`);
|
||||
@@ -114,7 +115,7 @@ export class MetadataViewPage {
|
||||
|
||||
async clickOnPropertiesTab(): Promise<void> {
|
||||
const propertiesTab = element(
|
||||
by.cssContainingText(`.adf-info-drawer-layout-content div${materialLocators.Tab.labels.class} div ${materialLocators.Tab.label.content.class}`, `Properties`)
|
||||
by.cssContainingText(`.adf-info-drawer-layout-content div${materialLocators.Tab.labels.container.class} div ${materialLocators.Tab.label.content.class}`, `Properties`)
|
||||
);
|
||||
await BrowserActions.click(propertiesTab);
|
||||
}
|
||||
@@ -271,4 +272,12 @@ export class MetadataViewPage {
|
||||
async clickSaveGeneralMetadata(): Promise<void> {
|
||||
await BrowserActions.click(this.saveGeneralMetadataButton);
|
||||
}
|
||||
|
||||
async informationButtonIsDisplayed(): Promise<void> {
|
||||
await BrowserVisibility.waitUntilElementIsClickable(this.informationButton);
|
||||
}
|
||||
|
||||
async informationButtonIsNotDisplayed(): Promise<void> {
|
||||
await BrowserVisibility.waitUntilElementIsNotVisible(this.informationButton);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,12 +116,10 @@ describe('Form Field Component - Dropdown Widget', () => {
|
||||
await taskFormCloudComponent.formFields().checkFormIsDisplayed();
|
||||
await taskFormCloudComponent.formFields().checkWidgetIsVisible('DropdownMultiselect');
|
||||
|
||||
optionsSelected.push(await dropdown.getSelectedOptionText('DropdownMultiselect'));
|
||||
|
||||
await expect(optionsSelected.toString().replace(/\s+/g, '')).toEqual([optionsToSelect, optionsToSelect].toString());
|
||||
await expect(optionsSelected.toString().replace(/\s+/g, '')).toEqual([optionsToSelect].toString());
|
||||
});
|
||||
|
||||
it('[C309878] Should be able to select a dropdown option, save and complete the task form', async () => {
|
||||
fit('[C309878] Should be able to select a dropdown option, save and complete the task form', async () => {
|
||||
const { name: dropdownOptionTaskName } = runningTasks['dropdownOptionsProcess'];
|
||||
await taskFilter.clickTaskFilter('my-tasks');
|
||||
await taskList.getDataTable().waitTillContentLoaded();
|
||||
|
||||
@@ -106,6 +106,7 @@ describe('Start Task Form', () => {
|
||||
await apiService.login(testUser.username, testUser.password);
|
||||
processDefinitionService = new ProcessDefinitionsService(apiService);
|
||||
processInstancesService = new ProcessInstancesService(apiService);
|
||||
|
||||
processDefinition = await processDefinitionService
|
||||
.getProcessDefinitionByName(browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.processes.uploadFileProcess, candidateBaseApp);
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ import { ProcessServicesPage } from '../pages/process-services.page';
|
||||
import { ChecklistDialog } from '../pages/dialog/create-checklist-dialog.page';
|
||||
import { NavigationBarPage } from '../../core/pages/navigation-bar.page';
|
||||
import { browser } from 'protractor';
|
||||
import CONSTANTS = require('../../util/constants');
|
||||
import * as CONSTANTS from '../../util/constants';
|
||||
|
||||
describe('Checklist component', () => {
|
||||
const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM;
|
||||
@@ -75,10 +75,11 @@ describe('Checklist component', () => {
|
||||
await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]);
|
||||
await taskPage.tasksListPage().selectRow(tasks[0]);
|
||||
|
||||
await (await taskPage.clickOnAddChecklistButton()).clickCreateChecklistButton();
|
||||
await taskPage.clickOnAddChecklistButton();
|
||||
await checklistDialog.clickCreateChecklistButton();
|
||||
await taskPage.checkChecklistDialogIsNotDisplayed();
|
||||
await taskPage.checkNoChecklistIsDisplayed();
|
||||
await expect(await taskPage.getNumberOfChecklists()).toEqual('0');
|
||||
expect(await taskPage.getNumberOfChecklists()).toEqual('0');
|
||||
});
|
||||
|
||||
it('[C279975] Should no checklist be created when clicking on Cancel button on checklist dialog', async () => {
|
||||
|
||||
@@ -20,7 +20,7 @@ import { TasksPage } from './../pages/tasks.page';
|
||||
import { NavigationBarPage } from '../../core/pages/navigation-bar.page';
|
||||
import { ProcessServicesPage } from './../pages/process-services.page';
|
||||
import { browser } from 'protractor';
|
||||
import CONSTANTS = require('../../util/constants');
|
||||
import * as CONSTANTS from '../../util/constants';
|
||||
|
||||
describe('People component', () => {
|
||||
|
||||
|
||||
@@ -21,8 +21,8 @@ import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing';
|
||||
export class ChecklistDialog {
|
||||
|
||||
nameField = $('input[data-automation-id="checklist-name"]');
|
||||
addChecklistButton = $('button[id="add-check"] span');
|
||||
closeButton = $('button[id="close-check-dialog"] span');
|
||||
addChecklistButton = $('button[id="add-check"]');
|
||||
closeButton = $('button[id="close-check-dialog"]');
|
||||
dialogTitle = $('#add-checklist-title');
|
||||
|
||||
async addName(name: string): Promise<void> {
|
||||
@@ -42,7 +42,7 @@ export class ChecklistDialog {
|
||||
}
|
||||
|
||||
async getNameFieldPlaceholder(): Promise<string> {
|
||||
return BrowserActions.getAttribute(this.nameField, 'data-placeholder');
|
||||
return BrowserActions.getAttribute(this.nameField, 'placeholder');
|
||||
}
|
||||
|
||||
async checkCancelButtonIsEnabled(): Promise<void> {
|
||||
|
||||
@@ -58,7 +58,7 @@ export class StartTaskDialogPage {
|
||||
}
|
||||
|
||||
async getAssignee(): Promise<string> {
|
||||
return BrowserActions.getAttribute(this.assignee, 'data-placeholder');
|
||||
return BrowserActions.getAttribute(this.assignee, 'placeholder');
|
||||
}
|
||||
|
||||
async selectForm(form): Promise<void> {
|
||||
|
||||
@@ -20,19 +20,19 @@ import { element, by, browser } from 'protractor';
|
||||
|
||||
export class ProcessServiceTabBarPage {
|
||||
|
||||
tasksButton = element.all(by.cssContainingText(`div[class*="${materialLocators.Tab.label.root}"] ${materialLocators.Tab.labels.class} div`, 'Tasks')).first();
|
||||
processButton = element.all(by.cssContainingText(`div[class*="${materialLocators.Tab.label.root}"] ${materialLocators.Tab.labels.class} div`, 'Process')).first();
|
||||
reportsButton = element.all(by.cssContainingText(`div[class*="${materialLocators.Tab.label.root}"] ${materialLocators.Tab.labels.class} div`, 'Reports')).first();
|
||||
reportsButtonSelected = element.all(by.cssContainingText(`div[class*="${materialLocators.Tab.label.root}"] ${materialLocators.Tab.labels.class} div[aria-selected="true"]`, 'Reports')).first();
|
||||
tasksButton = element.all(by.cssContainingText(`div${materialLocators.Tab.labels.container.class} ${materialLocators.Tab.labels.class}`, 'Tasks')).first();
|
||||
processButton = element.all(by.cssContainingText(`div${materialLocators.Tab.labels.container.class} ${materialLocators.Tab.labels.class}`, 'Process')).first();
|
||||
reportsButton = element.all(by.cssContainingText(`div${materialLocators.Tab.labels.container.class} ${materialLocators.Tab.labels.class}`, 'Reports')).first();
|
||||
reportsButtonSelected = element.all(by.cssContainingText(`div${materialLocators.Tab.labels.container.class} ${materialLocators.Tab.labels.class} div[aria-selected="true"]`, 'Reports')).first();
|
||||
|
||||
async clickTasksButton(): Promise<void> {
|
||||
await BrowserActions.click(this.tasksButton);
|
||||
await browser.sleep(500);
|
||||
await browser.sleep(100);
|
||||
}
|
||||
|
||||
async clickProcessButton(): Promise<void> {
|
||||
await BrowserActions.click(this.processButton);
|
||||
await browser.sleep(500);
|
||||
await browser.sleep(100);
|
||||
}
|
||||
|
||||
async clickReportsButton(): Promise<void> {
|
||||
|
||||
@@ -180,7 +180,7 @@ export class TaskDetailsPage {
|
||||
}
|
||||
|
||||
async getDescriptionPlaceholder(): Promise<string> {
|
||||
return BrowserActions.getAttribute(this.descriptionField, 'data-placeholder');
|
||||
return BrowserActions.getAttribute(this.descriptionField, 'placeholder');
|
||||
}
|
||||
|
||||
getDueDate(): Promise<string> {
|
||||
@@ -310,7 +310,7 @@ export class TaskDetailsPage {
|
||||
}
|
||||
|
||||
async getInvolvePeoplePlaceholder(): Promise<string> {
|
||||
return BrowserActions.getAttribute(this.addPeopleField, 'data-placeholder');
|
||||
return BrowserActions.getAttribute(this.addPeopleField, 'placeholder');
|
||||
}
|
||||
|
||||
async checkCancelButtonIsEnabled(): Promise<void> {
|
||||
|
||||
@@ -43,7 +43,7 @@ export class TaskFiltersDemoPage {
|
||||
return new TaskFiltersPage(this.involvedTask);
|
||||
}
|
||||
|
||||
customTaskFilter(filterName: string): TaskFiltersPage {
|
||||
customTaskFilter(filterName: string): TaskFiltersPage {
|
||||
return new TaskFiltersPage($(`button[data-automation-id="${filterName}_filter"]`));
|
||||
}
|
||||
|
||||
|
||||
@@ -21,6 +21,8 @@ import { browser, $, $$ } from 'protractor';
|
||||
export class TasksListPage {
|
||||
|
||||
taskList = $('adf-tasklist');
|
||||
selectedTab = $('[data-automation-id="navigation-bar"] .mdc-tab--active .mdc-tab__text-label');
|
||||
taskTab = $$('[data-automation-id="navigation-bar"] .mdc-tab__text-label').first();
|
||||
noTasksFound = $$('.adf-empty-content__title').first();
|
||||
dataTable = new DataTableComponentPage(this.taskList);
|
||||
|
||||
@@ -61,4 +63,11 @@ export class TasksListPage {
|
||||
return BrowserActions.getText(this.noTasksFound);
|
||||
}
|
||||
|
||||
async selectTaskTab() {
|
||||
const currentTab = await BrowserActions.getText(this.selectedTab);
|
||||
if(currentTab && currentTab.toLowerCase().trim() !== 'tasks') {
|
||||
await BrowserActions.click(this.taskTab);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -27,13 +27,13 @@ import { BrowserActions, BrowserVisibility, FormFields, materialLocators } from
|
||||
export class TasksPage {
|
||||
createButton = $('button[data-automation-id="create-button"');
|
||||
addChecklistButton = $('button[class*="adf-add-to-checklist-button"]');
|
||||
rowByRowName = by.xpath(`ancestor::${materialLocators.Chip.root}`);
|
||||
rowByRowName = by.xpath(`ancestor::${materialLocators.Chip.list.option.class}`);
|
||||
checklistContainer = $('div[class*="checklist-menu"]');
|
||||
taskTitle = '.adf-activiti-task-details__header span';
|
||||
completeButtonNoForm = $('#adf-no-form-complete-button');
|
||||
checklistDialog = $('#checklist-dialog');
|
||||
checklistNoMessage = $('#checklist-none-message');
|
||||
numberOfChecklists = $(`[data-automation-id="checklist-label"] ${materialLocators.Chip.root}`);
|
||||
numberOfChecklists = $(`[data-automation-id="checklist-label"] ${materialLocators.Chip.list.option.value}`);
|
||||
|
||||
async createNewTask(): Promise<StartTaskDialogPage> {
|
||||
await this.clickOnCreateButton();
|
||||
@@ -82,7 +82,7 @@ export class TasksPage {
|
||||
}
|
||||
|
||||
getRowsName(name: string) {
|
||||
return this.checklistContainer.element(by.cssContainingText('span', name));
|
||||
return this.checklistContainer.element(by.cssContainingText(`span${materialLocators.Chip.list.option.value}`, name));
|
||||
}
|
||||
|
||||
getChecklistByName(name: string) {
|
||||
|
||||
@@ -95,6 +95,7 @@ describe('Task Filters Sorting', () => {
|
||||
await userFiltersUtil.createUserTaskFilter(newFilter);
|
||||
|
||||
await browser.refresh();
|
||||
await tasksListPage.selectTaskTab();
|
||||
await taskFiltersDemoPage.customTaskFilter(newFilter.name).clickTaskFilter();
|
||||
|
||||
await expect(await tasksListPage.getDataTable().contentInPosition(1)).toBe(tasks[2].name);
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
import { createApiService, ApplicationsUtil, LoginPage, ProcessUtil, UsersActions, Widget, UserModel } from '@alfresco/adf-testing';
|
||||
import { TasksPage } from '../pages/tasks.page';
|
||||
import { browser } from 'protractor';
|
||||
import CONSTANTS = require('../../util/constants');
|
||||
import * as CONSTANTS from '../../util/constants';
|
||||
import { ProcessServicesPage } from '../pages/process-services.page';
|
||||
import { AppDefinitionRepresentation, ProcessInstanceRepresentation } from '@alfresco/js-api';
|
||||
|
||||
@@ -65,6 +65,12 @@ describe('Checkbox Widget', () => {
|
||||
await usersActions.deleteTenant(processUserModel.tenantId);
|
||||
});
|
||||
|
||||
it('[C272812] Should be able to set visibility settings for Checkbox widget', async () => {
|
||||
await widget.checkboxWidget().isCheckboxHidden(app.FIELD.checkbox_field_id);
|
||||
await taskPage.formFields().setValueInInputById(app.FIELD.number_input_id, '2');
|
||||
await widget.checkboxWidget().isCheckboxDisplayed(app.FIELD.checkbox_field_id);
|
||||
});
|
||||
|
||||
it('[C268554] Should be able to set general settings for Checkbox widget ', async () => {
|
||||
await taskPage.formFields().setValueInInputById(app.FIELD.number_input_id, '2');
|
||||
await expect(await widget.checkboxWidget().getCheckboxLabel()).toContain(app.FIELD.checkbox_label);
|
||||
@@ -72,10 +78,4 @@ describe('Checkbox Widget', () => {
|
||||
await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_input_id);
|
||||
await expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(true);
|
||||
});
|
||||
|
||||
it('[C272812] Should be able to set visibility settings for Checkbox widget', async () => {
|
||||
await widget.checkboxWidget().isCheckboxHidden(app.FIELD.checkbox_field_id);
|
||||
await taskPage.formFields().setValueInInputById(app.FIELD.number_input_id, '2');
|
||||
await widget.checkboxWidget().isCheckboxDisplayed(app.FIELD.checkbox_field_id);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -318,6 +318,7 @@ describe('Search Number Range Filter', () => {
|
||||
await expect(await sizeRangeFilter.getFromNumber()).toEqual('');
|
||||
await expect(await sizeRangeFilter.getToNumber()).toEqual('');
|
||||
|
||||
await dataTable.waitTillContentLoaded();
|
||||
const resultsSize = (await dataTable.geCellElementDetail('Size')) as ElementFinder[];
|
||||
for (const currentResult of resultsSize) {
|
||||
const currentSize = await BrowserActions.getAttribute(currentResult, 'title');
|
||||
|
||||
@@ -100,7 +100,7 @@ describe('Search Slider Filter', () => {
|
||||
});
|
||||
|
||||
it('[C276972] Should be keep value when Search Size Slider is collapsed', async () => {
|
||||
const size = 5;
|
||||
const size = 10;
|
||||
|
||||
await searchFilters.checkSizeSliderFilterIsDisplayed();
|
||||
await searchFilters.clickSizeSliderFilterHeader();
|
||||
@@ -108,11 +108,13 @@ describe('Search Slider Filter', () => {
|
||||
await sizeSliderFilter.setValue(size);
|
||||
await searchFilters.clickSizeSliderFilterHeader();
|
||||
await searchFilters.checkSizeSliderFilterIsCollapsed();
|
||||
await searchFilters.checkSizeSliderFilterIsDisplayed();
|
||||
await searchFilters.clickSizeSliderFilterHeader();
|
||||
await searchFilters.checkSizeSliderFilterIsExpanded();
|
||||
await searchFilters.checkSizeSliderFilterIsDisplayed();
|
||||
|
||||
await expect(await sizeSliderFilter.getValue()).toEqual(`${size}`);
|
||||
const currentValue = await sizeSliderFilter.getValue();
|
||||
|
||||
await expect(currentValue).toEqual(`${size}`);
|
||||
});
|
||||
|
||||
it('[C276981] Should be able to clear value in Search Size Slider', async () => {
|
||||
@@ -129,7 +131,7 @@ describe('Search Slider Filter', () => {
|
||||
const currentSize = await BrowserActions.getAttribute(currentResult, 'title');
|
||||
|
||||
if (currentSize && currentSize.trim() !== '') {
|
||||
await expect(parseInt(currentSize, 10) <= 5000).toBe(true);
|
||||
await expect(parseInt(currentSize, 10) <= 5000).toBe(true, `${parseInt(currentSize, 10)} is not bigger than 5000`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -143,7 +145,7 @@ describe('Search Slider Filter', () => {
|
||||
const currentSize = await BrowserActions.getAttribute(currentResult, 'title');
|
||||
|
||||
if (currentSize && currentSize.trim() !== '') {
|
||||
await expect(parseInt(currentSize, 10) >= 5000).toBe(true);
|
||||
await expect(parseInt(currentSize, 10) >= 5000).toBe(true, `${parseInt(currentSize, 10)} is not bigger than 5000`);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -23,7 +23,7 @@ export class SearchBarPage {
|
||||
searchBar = $(`adf-search-control input`);
|
||||
searchBarExpanded = TestElement.byCss(`adf-search-control ${materialLocators.Form.field.root}[class*="${materialLocators.Focused.root}"] input`);
|
||||
noResultMessage = $(`p[class*='adf-search-fixed-text']`);
|
||||
rowsAuthor = `${materialLocators.List.text.class} p[class*='adf-search-fixed-text']`;
|
||||
rowsAuthor = `${materialLocators.List.content.class} p[class*='adf-search-fixed-text']`;
|
||||
completeName = `h4[class*='adf-search-fixed-text']`;
|
||||
highlightName = `.adf-highlight`;
|
||||
searchBarPage = $(`${materialLocators.List.root}[id='autocomplete-search-result-list']`);
|
||||
|
||||
@@ -199,7 +199,7 @@ describe('Search Filters', () => {
|
||||
it('[C287796] Should be able to display the correct bucket number after selecting a filter', async () => {
|
||||
await BrowserActions.getUrl(`${browser.baseUrl}/search;q=*`);
|
||||
|
||||
await searchFiltersPage.fileTypeCheckListFiltersPage().clickCheckListOption('PNG Image');
|
||||
await searchFiltersPage.fileTypeCheckListFiltersPage().clickCheckListOption('PNG');
|
||||
|
||||
const bucketNumberForFilter = await searchFiltersPage.fileTypeCheckListFiltersPage().getBucketNumberOfFilterType(filter.type);
|
||||
const resultFileNames: any = await contentList.getAllRowsColumnValues('Display name');
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
"version": "6.8.0",
|
||||
"author": "Hyland Software, Inc. and its affiliates",
|
||||
"bin": {
|
||||
"adf-cli": "./bin/adf-cli",
|
||||
"adf": "./bin/adf-cli"
|
||||
"adf-cli": "bin/adf-cli",
|
||||
"adf": "bin/adf-cli"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Alfresco/alfresco-ng2-components.git"
|
||||
"url": "git+https://github.com/Alfresco/alfresco-ng2-components.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/Alfresco/alfresco-ng2-components/issues"
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"name": "cli",
|
||||
"$schema": "../../node_modules/nx/schemas/project-schema.json",
|
||||
"sourceRoot": "lib/cli",
|
||||
"projectType": "library",
|
||||
"prefix": "adf",
|
||||
"targets": {
|
||||
"build": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
"command": "cd lib/cli && npm i && npm run dist",
|
||||
"stylePreprocessorOptions": {
|
||||
"includePaths": ["lib", "lib/core/src/lib"]
|
||||
}
|
||||
},
|
||||
"configurations": {
|
||||
"production": {
|
||||
"tsConfig": "lib/cli/tsconfig.json"
|
||||
}
|
||||
},
|
||||
"defaultConfiguration": "production"
|
||||
},
|
||||
"bundle": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
"commands": [
|
||||
{
|
||||
"command": "echo cli bundle created"
|
||||
}
|
||||
]
|
||||
},
|
||||
"dependsOn": ["copyToNodeModules"]
|
||||
},
|
||||
"copyToNodeModules": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
"commands": [
|
||||
{
|
||||
"command": "rm -rf ./node_modules/@alfresco/adf-cli/ && mkdir -p ./node_modules/@alfresco/adf-cli/ && cp -R ./dist/libs/cli/* ./node_modules/@alfresco/adf-cli/"
|
||||
}
|
||||
]
|
||||
},
|
||||
"dependsOn": [
|
||||
{
|
||||
"projects": "self",
|
||||
"target": "build"
|
||||
}
|
||||
]
|
||||
},
|
||||
"lint": {
|
||||
"executor": "@nrwl/linter:eslint",
|
||||
"options": {
|
||||
"lintFilePatterns": ["lib/cli/**/*.ts", "lib/cli/**/*.html"]
|
||||
}
|
||||
},
|
||||
"npm-publish": {
|
||||
"executor": "nx:run-commands",
|
||||
"dependsOn": ["build"],
|
||||
"options": {
|
||||
"cwd": "dist/libs/cli",
|
||||
"commands": [
|
||||
{
|
||||
"command": "npm publish --tag {args.tag}",
|
||||
"forwardAllArgs": true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,27 @@
|
||||
const rootMain = require('../../../.storybook/main');
|
||||
var rootPath = require('../../../.storybook/main');
|
||||
|
||||
module.exports = {
|
||||
...rootMain,
|
||||
core: { ...rootMain.core, builder: 'webpack5' },
|
||||
stories: [...rootMain.stories, '../**/*.stories.@(js|jsx|ts|tsx)'],
|
||||
staticDirs: [...rootMain.staticDirs, { from: __dirname + '/../src/lib/i18n', to: 'assets/adf-content-services/i18n' }],
|
||||
addons: [...rootMain.addons]
|
||||
rootMain: rootPath,
|
||||
stories: [...rootPath.stories, '../**/*.stories.@(js|jsx|ts|tsx)'],
|
||||
|
||||
staticDirs: [
|
||||
...rootPath.staticDirs,
|
||||
{ from: __dirname + '/../src/lib/i18n', to: 'assets/adf-core/i18n' },
|
||||
{ from: __dirname + '/../src/lib/assets/images', to: 'assets/images' }
|
||||
],
|
||||
|
||||
addons: ['@storybook/addon-essentials', ...rootPath.addons],
|
||||
|
||||
framework: {
|
||||
name: '@storybook/angular',
|
||||
options: {}
|
||||
},
|
||||
|
||||
docs: {
|
||||
autodocs: true
|
||||
},
|
||||
|
||||
core: {
|
||||
builder: '@storybook/builder-webpack5'
|
||||
}
|
||||
};
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
{
|
||||
"name": "content-services",
|
||||
"$schema": "../../node_modules/nx/schemas/project-schema.json",
|
||||
"sourceRoot": "lib/content-services/src",
|
||||
"projectType": "library",
|
||||
"prefix": "adf",
|
||||
"targets": {
|
||||
"build": {
|
||||
"executor": "@angular-devkit/build-angular:ng-packagr",
|
||||
"options": {
|
||||
"tsConfig": "lib/content-services/tsconfig.lib.json",
|
||||
"project": "lib/content-services/ng-package.json"
|
||||
},
|
||||
"configurations": {
|
||||
"production": {
|
||||
"project": "lib/content-services/ng-package.json",
|
||||
"tsConfig": "lib/content-services/tsconfig.lib.prod.json"
|
||||
}
|
||||
},
|
||||
"defaultConfiguration": "production"
|
||||
},
|
||||
"test": {
|
||||
"executor": "@angular-devkit/build-angular:karma",
|
||||
"options": {
|
||||
"main": "lib/content-services/src/test.ts",
|
||||
"tsConfig": "lib/content-services/tsconfig.spec.json",
|
||||
"karmaConfig": "lib/content-services/karma.conf.js",
|
||||
"sourceMap": true,
|
||||
"codeCoverage": true,
|
||||
"stylePreprocessorOptions": {
|
||||
"includePaths": ["lib", "lib/core/src/lib"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"lint": {
|
||||
"executor": "@nrwl/linter:eslint",
|
||||
"options": {
|
||||
"lintFilePatterns": ["lib/content-services/**/*.ts", "lib/content-services/**/*.html"]
|
||||
}
|
||||
},
|
||||
"storybook": {
|
||||
"executor": "@storybook/angular:start-storybook",
|
||||
"options": {
|
||||
"port": 4400,
|
||||
"browserTarget": "content-services:storybook",
|
||||
"configDir": "lib/content-services/.storybook",
|
||||
"compodoc": false,
|
||||
"styles": [
|
||||
"demo-shell/src/styles.scss",
|
||||
"demo-shell/src/custom-style-dev.scss",
|
||||
"node_modules/cropperjs/dist/cropper.min.css",
|
||||
"node_modules/pdfjs-dist/web/pdf_viewer.css"
|
||||
],
|
||||
"stylePreprocessorOptions": {
|
||||
"includePaths": ["lib", "lib/core/src/lib"]
|
||||
}
|
||||
},
|
||||
"configurations": {
|
||||
"ci": {
|
||||
"quiet": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"build-storybook": {
|
||||
"executor": "@storybook/angular:build-storybook",
|
||||
"options": {
|
||||
"browserTarget": "content-services:build-storybook",
|
||||
"configDir": "lib/content-services/.storybook",
|
||||
"outputDir": "dist/storybook/content-services",
|
||||
"compodoc": false,
|
||||
"styles": [
|
||||
"demo-shell/src/styles.scss",
|
||||
"demo-shell/src/custom-style-dev.scss",
|
||||
"node_modules/cropperjs/dist/cropper.min.css",
|
||||
"node_modules/pdfjs-dist/web/pdf_viewer.css"
|
||||
],
|
||||
"stylePreprocessorOptions": {
|
||||
"includePaths": ["lib", "lib/core/src/lib"]
|
||||
}
|
||||
},
|
||||
"configurations": {
|
||||
"ci": {
|
||||
"quiet": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"stylelint": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
"commands": [
|
||||
{
|
||||
"command": "npx stylelint lib/content-services/**/*.scss --config stylelint-config.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"npm-publish": {
|
||||
"executor": "nx:run-commands",
|
||||
"dependsOn": ["build"],
|
||||
"options": {
|
||||
"cwd": "dist/libs/content-services",
|
||||
"commands": [
|
||||
{
|
||||
"command": "npm publish --tag {args.tag}",
|
||||
"forwardAllArgs": true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,9 @@
|
||||
@import 'styles/mat-selectors';
|
||||
|
||||
adf-aspect-list-dialog {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.adf {
|
||||
&-aspect-list-dialog-title {
|
||||
font-size: large;
|
||||
@@ -13,21 +19,35 @@
|
||||
&-aspect-list-dialog-information {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
padding-top: 10px;
|
||||
padding-left: 4px;
|
||||
padding-right: 4px;
|
||||
font-size: small;
|
||||
}
|
||||
|
||||
&-aspect-list-dialog {
|
||||
justify-content: space-between;
|
||||
padding-left: 4px;
|
||||
padding-right: 4px;
|
||||
padding-top: 0;
|
||||
|
||||
#{$mat-dialog-content} {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
&::before {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
&-aspect-dialog-content {
|
||||
padding-top: 3px;
|
||||
margin-bottom: 8px;
|
||||
|
||||
.adf-aspect-property-table {
|
||||
.adf-aspect-property-table-cell {
|
||||
font-size: smaller;
|
||||
color: var(--adf-theme-foreground-text-color-087);
|
||||
}
|
||||
|
||||
.adf-aspect-property-table-column {
|
||||
|
||||
@@ -27,6 +27,7 @@ import { AspectEntry, Node } from '@alfresco/js-api';
|
||||
import { NodesApiService } from '../common/services/nodes-api.service';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { AspectListComponent } from './aspect-list.component';
|
||||
import { HttpClientTestingModule } from '@angular/common/http/testing';
|
||||
|
||||
const aspectListMock: AspectEntry[] = [
|
||||
{
|
||||
@@ -113,7 +114,7 @@ describe('AspectListDialogComponent', () => {
|
||||
excludedAspects: []
|
||||
};
|
||||
await TestBed.configureTestingModule({
|
||||
imports: [ContentTestingModule, MatDialogModule],
|
||||
imports: [HttpClientTestingModule, ContentTestingModule, MatDialogModule],
|
||||
providers: [
|
||||
{ provide: MAT_DIALOG_DATA, useValue: data },
|
||||
{
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
@import 'styles/mat-selectors';
|
||||
|
||||
.adf {
|
||||
&-aspect-list-spinner {
|
||||
display: flex;
|
||||
@@ -19,6 +21,7 @@
|
||||
}
|
||||
|
||||
.adf-aspect-list-element-title {
|
||||
font-size: smaller;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
@@ -26,8 +29,14 @@
|
||||
.adf-accordion-aspect-list-expansion-panel {
|
||||
margin: 0;
|
||||
|
||||
#{$mat-checkbox-background} {
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
}
|
||||
|
||||
&-header {
|
||||
font-size: smaller;
|
||||
padding-left: 16px;
|
||||
}
|
||||
|
||||
&-header-title {
|
||||
@@ -48,6 +57,13 @@
|
||||
&-aspect-property-table {
|
||||
width: 100%;
|
||||
|
||||
.adf-aspect-property-table-column-name,
|
||||
.adf-aspect-property-table-column-title,
|
||||
.adf-aspect-property-table-column-data-type {
|
||||
font-size: 12px;
|
||||
color: var(--adf-theme-foreground-text-color-054);
|
||||
}
|
||||
|
||||
.adf-aspect-property-table-column {
|
||||
&-name {
|
||||
width: 15%;
|
||||
|
||||
@@ -16,31 +16,29 @@
|
||||
*/
|
||||
|
||||
import { TestBed } from '@angular/core/testing';
|
||||
import { AlfrescoApiService, CoreTestingModule } from '@alfresco/adf-core';
|
||||
import { AlfrescoApiService } from '@alfresco/adf-core';
|
||||
import { AspectListService } from './aspect-list.service';
|
||||
import { AspectPaging, AspectsApi, AspectEntry } from '@alfresco/js-api';
|
||||
import { HttpClientTestingModule } from '@angular/common/http/testing';
|
||||
|
||||
const stdAspect1: AspectEntry = { entry: { id: 'std:standardAspectOne', description: 'Standard Aspect One', title: 'StandardAspectOne' } };
|
||||
const stdAspect2: AspectEntry = { entry: { id: 'std:standardAspectTwo', description: 'Standard Aspect Two', title: 'StandardAspectTwo' } };
|
||||
const stdAspect3: AspectEntry = { entry: { id: 'std:standardAspectThree', description: 'Standard Aspect Three', title: 'StandardAspectThree' } };
|
||||
const standardAspectPagingMock: AspectPaging = { list: { entries: [ stdAspect1, stdAspect2, stdAspect3 ] } };
|
||||
const standardAspectPagingMock: AspectPaging = { list: { entries: [stdAspect1, stdAspect2, stdAspect3] } };
|
||||
|
||||
const cstAspect1: AspectEntry = { entry: { id: 'cst:customAspectOne', description: 'Custom Aspect One', title: 'CustomAspectOne' } };
|
||||
const cstAspect2: AspectEntry = { entry: { id: 'cst:customAspectTwo', description: 'Custom Aspect Two', title: 'CustomAspectTwo' } };
|
||||
const cstAspect3: AspectEntry = { entry: { id: 'cst:customAspectThree', description: 'Custom Aspect Three', title: 'CustomAspectThree' } };
|
||||
const customAspectPagingMock: AspectPaging = { list: { entries: [ cstAspect1, cstAspect2, cstAspect3 ] } };
|
||||
const customAspectPagingMock: AspectPaging = { list: { entries: [cstAspect1, cstAspect2, cstAspect3] } };
|
||||
|
||||
describe('AspectListService', () => {
|
||||
|
||||
let aspectListService: AspectListService;
|
||||
let apiService: AlfrescoApiService;
|
||||
let aspectsApi: AspectsApi;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [
|
||||
CoreTestingModule
|
||||
]
|
||||
imports: [HttpClientTestingModule]
|
||||
});
|
||||
|
||||
aspectListService = TestBed.inject(AspectListService);
|
||||
|
||||
+31
-33
@@ -15,7 +15,6 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { CoreTestingModule } from '@alfresco/adf-core';
|
||||
import { fakeAsync, TestBed } from '@angular/core/testing';
|
||||
import { CategoryService } from '../services/category.service';
|
||||
import { CategoryNode, CategoryTreeDatasourceService } from '@alfresco/adf-content-services';
|
||||
@@ -25,17 +24,12 @@ import { EMPTY, of } from 'rxjs';
|
||||
import { Pagination } from '@alfresco/js-api';
|
||||
|
||||
describe('CategoryTreeDatasourceService', () => {
|
||||
let categoryTreeDatasourceService: CategoryTreeDatasourceService;
|
||||
let categoryService: CategoryService;
|
||||
let categoryTreeDatasourceService: CategoryTreeDatasourceService;
|
||||
let categoryService: CategoryService;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [
|
||||
CoreTestingModule
|
||||
],
|
||||
providers: [
|
||||
{ provide: CategoryService, useClass: CategoryServiceMock }
|
||||
]
|
||||
providers: [CategoryTreeDatasourceService, { provide: CategoryService, useClass: CategoryServiceMock }]
|
||||
});
|
||||
|
||||
categoryTreeDatasourceService = TestBed.inject(CategoryTreeDatasourceService);
|
||||
@@ -44,7 +38,7 @@ describe('CategoryTreeDatasourceService', () => {
|
||||
|
||||
it('should get root level categories', fakeAsync(() => {
|
||||
spyOn(categoryTreeDatasourceService, 'getParentNode').and.returnValue(undefined);
|
||||
categoryTreeDatasourceService.getSubNodes(null, 0 , 100).subscribe((treeResponse: TreeResponse<CategoryNode>) => {
|
||||
categoryTreeDatasourceService.getSubNodes(null, 0, 100).subscribe((treeResponse: TreeResponse<CategoryNode>) => {
|
||||
expect(treeResponse.entries.length).toBe(1);
|
||||
expect(treeResponse.entries[0].level).toBe(0);
|
||||
expect(treeResponse.entries[0].nodeType).toBe(TreeNodeType.RegularNode);
|
||||
@@ -62,7 +56,7 @@ describe('CategoryTreeDatasourceService', () => {
|
||||
nodeType: TreeNodeType.RegularNode
|
||||
};
|
||||
spyOn(categoryTreeDatasourceService, 'getParentNode').and.returnValue(parentNode);
|
||||
categoryTreeDatasourceService.getSubNodes(parentNode.id, 0 , 100).subscribe((treeResponse: TreeResponse<CategoryNode>) => {
|
||||
categoryTreeDatasourceService.getSubNodes(parentNode.id, 0, 100).subscribe((treeResponse: TreeResponse<CategoryNode>) => {
|
||||
expect(treeResponse.entries.length).toBe(2);
|
||||
expect(treeResponse.entries[0].parentId).toBe(parentNode.id);
|
||||
expect(treeResponse.entries[0].level).toBe(1);
|
||||
@@ -84,7 +78,8 @@ describe('CategoryTreeDatasourceService', () => {
|
||||
});
|
||||
|
||||
it('should call getCategory for every instance if value of name parameter is defined', (done) => {
|
||||
spyOn(categoryService, 'getCategory').and.returnValues(of({
|
||||
spyOn(categoryService, 'getCategory').and.returnValues(
|
||||
of({
|
||||
entry: {
|
||||
name: 'name',
|
||||
id: 'some id 1',
|
||||
@@ -97,18 +92,18 @@ describe('CategoryTreeDatasourceService', () => {
|
||||
id: 'some id 2',
|
||||
hasChildren: false
|
||||
}
|
||||
}));
|
||||
categoryTreeDatasourceService.getSubNodes('id', undefined, undefined, 'name')
|
||||
.subscribe(() => {
|
||||
|
||||
expect(categoryService.getCategory).toHaveBeenCalledWith('some id 1');
|
||||
expect(categoryService.getCategory).toHaveBeenCalledWith('some id 2');
|
||||
done();
|
||||
});
|
||||
})
|
||||
);
|
||||
categoryTreeDatasourceService.getSubNodes('id', undefined, undefined, 'name').subscribe(() => {
|
||||
expect(categoryService.getCategory).toHaveBeenCalledWith('some id 1');
|
||||
expect(categoryService.getCategory).toHaveBeenCalledWith('some id 2');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should return observable which emits correct categories', (done) => {
|
||||
spyOn(categoryService, 'getCategory').and.returnValues(of({
|
||||
spyOn(categoryService, 'getCategory').and.returnValues(
|
||||
of({
|
||||
entry: {
|
||||
name: 'some name',
|
||||
id: 'some id 1',
|
||||
@@ -121,14 +116,15 @@ describe('CategoryTreeDatasourceService', () => {
|
||||
id: 'some id 2',
|
||||
hasChildren: false
|
||||
}
|
||||
}));
|
||||
categoryTreeDatasourceService.getSubNodes('id', undefined, undefined, 'name')
|
||||
.subscribe((response) => {
|
||||
const pagination = new Pagination();
|
||||
pagination.count = 2;
|
||||
expect(response).toEqual({
|
||||
pagination,
|
||||
entries: [{
|
||||
})
|
||||
);
|
||||
categoryTreeDatasourceService.getSubNodes('id', undefined, undefined, 'name').subscribe((response) => {
|
||||
const pagination = new Pagination();
|
||||
pagination.count = 2;
|
||||
expect(response).toEqual({
|
||||
pagination,
|
||||
entries: [
|
||||
{
|
||||
id: 'some id 1',
|
||||
nodeName: 'some name',
|
||||
parentId: 'parent id 1',
|
||||
@@ -136,7 +132,8 @@ describe('CategoryTreeDatasourceService', () => {
|
||||
nodeType: TreeNodeType.RegularNode,
|
||||
hasChildren: true,
|
||||
isLoading: false
|
||||
}, {
|
||||
},
|
||||
{
|
||||
id: 'some id 2',
|
||||
nodeName: 'Language/some other name',
|
||||
parentId: 'parent id 2',
|
||||
@@ -144,9 +141,10 @@ describe('CategoryTreeDatasourceService', () => {
|
||||
nodeType: TreeNodeType.RegularNode,
|
||||
hasChildren: false,
|
||||
isLoading: false
|
||||
}]
|
||||
});
|
||||
done();
|
||||
}
|
||||
]
|
||||
});
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { AppConfigService, CoreTestingModule, UserPreferencesService } from '@alfresco/adf-core';
|
||||
import { AppConfigService, TranslationMock, TranslationService, UserPreferencesService } from '@alfresco/adf-core';
|
||||
import {
|
||||
CategoryBody,
|
||||
CategoryEntry,
|
||||
@@ -29,6 +29,8 @@ import {
|
||||
} from '@alfresco/js-api';
|
||||
import { fakeAsync, TestBed } from '@angular/core/testing';
|
||||
import { CategoryService } from './category.service';
|
||||
import { HttpClientTestingModule } from '@angular/common/http/testing';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
describe('CategoryService', () => {
|
||||
let categoryService: CategoryService;
|
||||
@@ -44,7 +46,8 @@ describe('CategoryService', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [CoreTestingModule]
|
||||
imports: [HttpClientTestingModule, TranslateModule.forRoot()],
|
||||
providers: [CategoryService, UserPreferencesService, { provide: TranslationService, useClass: TranslationMock }]
|
||||
});
|
||||
|
||||
categoryService = TestBed.inject(CategoryService);
|
||||
|
||||
@@ -17,8 +17,10 @@
|
||||
|
||||
import { TestBed } from '@angular/core/testing';
|
||||
import { ContentService } from './content.service';
|
||||
import { AppConfigService, AuthenticationService, StorageService, CoreTestingModule } from '@alfresco/adf-core';
|
||||
import { AppConfigService, AuthenticationService, RedirectAuthService, StorageService } from '@alfresco/adf-core';
|
||||
import { Node, PermissionsInfo } from '@alfresco/js-api';
|
||||
import { EMPTY } from 'rxjs';
|
||||
import { HttpClientTestingModule } from '@angular/common/http/testing';
|
||||
|
||||
describe('ContentService', () => {
|
||||
let contentService: ContentService;
|
||||
@@ -27,7 +29,8 @@ describe('ContentService', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [CoreTestingModule]
|
||||
imports: [HttpClientTestingModule],
|
||||
providers: [ContentService, AuthenticationService, { provide: RedirectAuthService, useValue: { onLogin: EMPTY } }]
|
||||
});
|
||||
authService = TestBed.inject(AuthenticationService);
|
||||
contentService = TestBed.inject(ContentService);
|
||||
|
||||
@@ -16,17 +16,23 @@
|
||||
*/
|
||||
|
||||
import { createNewPersonMock, fakeEcmAdminUser, fakeEcmUser, fakeEcmUser2, fakeEcmUserList } from '../mocks/ecm-user.service.mock';
|
||||
import { AlfrescoApiService, AlfrescoApiServiceMock, CoreTestingModule } from '@alfresco/adf-core';
|
||||
import { AlfrescoApiService, AlfrescoApiServiceMock, RedirectAuthService } from '@alfresco/adf-core';
|
||||
import { PeopleContentQueryRequestModel, PeopleContentService } from './people-content.service';
|
||||
import { TestBed } from '@angular/core/testing';
|
||||
import { HttpClientTestingModule } from '@angular/common/http/testing';
|
||||
import { EMPTY } from 'rxjs';
|
||||
|
||||
describe('PeopleContentService', () => {
|
||||
let peopleContentService: PeopleContentService;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [CoreTestingModule],
|
||||
providers: [{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock }]
|
||||
imports: [HttpClientTestingModule],
|
||||
providers: [
|
||||
PeopleContentService,
|
||||
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },
|
||||
{ provide: RedirectAuthService, useValue: { onLogin: EMPTY } }
|
||||
]
|
||||
});
|
||||
|
||||
peopleContentService = TestBed.inject(PeopleContentService);
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
import { EventEmitter } from '@angular/core';
|
||||
import { TestBed } from '@angular/core/testing';
|
||||
import { AppConfigModule, AppConfigService, CoreTestingModule } from '@alfresco/adf-core';
|
||||
import { AlfrescoApiService, AlfrescoApiServiceMock, AppConfigModule, AppConfigService } from '@alfresco/adf-core';
|
||||
import { UploadService } from './upload.service';
|
||||
import { RepositoryInfo } from '@alfresco/js-api';
|
||||
import { BehaviorSubject } from 'rxjs';
|
||||
@@ -35,8 +35,10 @@ describe('UploadService', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [CoreTestingModule, AppConfigModule],
|
||||
imports: [AppConfigModule],
|
||||
providers: [
|
||||
UploadService,
|
||||
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },
|
||||
{
|
||||
provide: DiscoveryApiService,
|
||||
useValue: {
|
||||
@@ -281,9 +283,7 @@ describe('UploadService', () => {
|
||||
service.cancelUpload(...file);
|
||||
|
||||
const request = jasmine.Ajax.requests.mostRecent();
|
||||
expect(request.url).toBe(
|
||||
'http://localhost:9876/ecm/alfresco/api/-default-/public/alfresco/versions/1/nodes/fakeId/content?include=allowableOperations'
|
||||
);
|
||||
expect(request.url).toContain('ecm/alfresco/api/-default-/public/alfresco/versions/1/nodes/fakeId/content?include=allowableOperations');
|
||||
expect(request.method).toBe('PUT');
|
||||
|
||||
jasmine.Ajax.requests.mostRecent().respondWith({
|
||||
@@ -338,8 +338,8 @@ describe('UploadService', () => {
|
||||
service.uploadFilesInTheQueue(emitter);
|
||||
|
||||
const request = jasmine.Ajax.requests.mostRecent();
|
||||
expect(request.url).toBe(
|
||||
'http://localhost:9876/ecm/alfresco/api/-default-/public/alfresco/versions/1/nodes/123/children?autoRename=true&include=allowableOperations'
|
||||
expect(request.url).toContain(
|
||||
'/ecm/alfresco/api/-default-/public/alfresco/versions/1/nodes/123/children?autoRename=true&include=allowableOperations'
|
||||
);
|
||||
expect(request.method).toBe('POST');
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
<mat-card *ngIf="node" class="adf-content-metadata-card-view">
|
||||
<mat-card appearance="outlined" *ngIf="node" class="adf-content-metadata-card-view">
|
||||
<mat-card-content class="adf-content-metadata-card-view-content">
|
||||
<adf-content-metadata
|
||||
[displayDefaultProperties]="displayDefaultProperties"
|
||||
|
||||
+42
-3
@@ -20,12 +20,23 @@ import { By } from '@angular/platform-browser';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
import { ContentMetadataCardComponent } from './content-metadata-card.component';
|
||||
import { ContentMetadataComponent } from '../content-metadata/content-metadata.component';
|
||||
import { ContentTestingModule } from '../../../testing/content.testing.module';
|
||||
import { SimpleChange } from '@angular/core';
|
||||
import { APP_INITIALIZER, SimpleChange } from '@angular/core';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { NodeAspectService } from '../../../aspect-list/services/node-aspect.service';
|
||||
import { ContentMetadataService } from '../../services/content-metadata.service';
|
||||
import { AllowableOperationsEnum } from '../../../common/models/allowable-operations.enum';
|
||||
import { of } from 'rxjs';
|
||||
import { AlfrescoApiService, AlfrescoApiServiceMock, AuthModule, PipeModule, TranslationMock, TranslationService } from '@alfresco/adf-core';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { HttpClientModule } from '@angular/common/http';
|
||||
import { versionCompatibilityFactory } from '../../../version-compatibility/version-compatibility-factory';
|
||||
import { VersionCompatibilityService } from '../../../version-compatibility';
|
||||
import { MatDialogModule } from '@angular/material/dialog';
|
||||
import { MatSnackBarModule } from '@angular/material/snack-bar';
|
||||
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||
import { CategoryService } from '../../../category';
|
||||
import { TagService } from '../../../tag';
|
||||
import { PropertyDescriptorsService } from '../../public-api';
|
||||
|
||||
describe('ContentMetadataCardComponent', () => {
|
||||
let component: ContentMetadataCardComponent;
|
||||
@@ -34,15 +45,40 @@ describe('ContentMetadataCardComponent', () => {
|
||||
let node: Node;
|
||||
const preset = 'custom-preset';
|
||||
let nodeAspectService: NodeAspectService = null;
|
||||
let tagService: TagService = null;
|
||||
let categoryService: CategoryService = null;
|
||||
let propertyDescriptorsService: PropertyDescriptorsService = null;
|
||||
|
||||
const getToggleEditButton = () => fixture.debugElement.query(By.css('[data-automation-id="meta-data-card-toggle-edit"]'));
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [ContentTestingModule]
|
||||
imports: [
|
||||
TranslateModule.forRoot(),
|
||||
NoopAnimationsModule,
|
||||
AuthModule.forRoot({ useHash: true }),
|
||||
HttpClientModule,
|
||||
MatDialogModule,
|
||||
PipeModule,
|
||||
MatSnackBarModule,
|
||||
MatTooltipModule
|
||||
],
|
||||
providers: [
|
||||
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },
|
||||
{ provide: TranslationService, useClass: TranslationMock },
|
||||
{
|
||||
provide: APP_INITIALIZER,
|
||||
useFactory: versionCompatibilityFactory,
|
||||
deps: [ VersionCompatibilityService ],
|
||||
multi: true
|
||||
}
|
||||
]
|
||||
});
|
||||
fixture = TestBed.createComponent(ContentMetadataCardComponent);
|
||||
contentMetadataService = TestBed.inject(ContentMetadataService);
|
||||
tagService = TestBed.inject(TagService);
|
||||
categoryService = TestBed.inject(CategoryService);
|
||||
propertyDescriptorsService = TestBed.inject(PropertyDescriptorsService);
|
||||
component = fixture.componentInstance;
|
||||
node = {
|
||||
aspectNames: [],
|
||||
@@ -59,6 +95,9 @@ describe('ContentMetadataCardComponent', () => {
|
||||
component.editAspectSupported = true;
|
||||
nodeAspectService = TestBed.inject(NodeAspectService);
|
||||
spyOn(contentMetadataService, 'getContentTypeProperty').and.returnValue(of([]));
|
||||
spyOn(tagService, 'getTagsByNodeId').and.returnValue(of());
|
||||
spyOn(categoryService, 'getCategoryLinksForNode').and.returnValue(of());
|
||||
spyOn(propertyDescriptorsService, 'load').and.returnValue(of());
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
|
||||
+14
-14
@@ -28,21 +28,21 @@ import { TranslateModule } from '@ngx-translate/core';
|
||||
encapsulation: ViewEncapsulation.None,
|
||||
styles: [
|
||||
`
|
||||
adf-content-metadata-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
}
|
||||
adf-content-metadata-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.adf-metadata-properties-title {
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
font-weight: 700;
|
||||
font-size: 15px;
|
||||
padding-left: 12px;
|
||||
}
|
||||
`
|
||||
.adf-metadata-properties-title {
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
font-weight: 700;
|
||||
font-size: 15px;
|
||||
padding-left: 12px;
|
||||
}
|
||||
`
|
||||
],
|
||||
template: `
|
||||
<ng-container>
|
||||
|
||||
+51
-47
@@ -21,10 +21,10 @@ import { By } from '@angular/platform-browser';
|
||||
import { Category, CategoryPaging, ClassesApi, Node, Tag, TagBody, TagEntry, TagPaging, TagPagingList } from '@alfresco/js-api';
|
||||
import { ContentMetadataComponent } from './content-metadata.component';
|
||||
import { ContentMetadataService } from '../../services/content-metadata.service';
|
||||
import { AppConfigService, CardViewBaseItemModel, CardViewComponent, NotificationService, UpdateNotification } from '@alfresco/adf-core';
|
||||
import { AppConfigService, AuthModule, CardViewBaseItemModel, CardViewComponent, NotificationService, PipeModule, TranslationMock, TranslationService, UpdateNotification } from '@alfresco/adf-core';
|
||||
import { NodesApiService } from '../../../common/services/nodes-api.service';
|
||||
import { EMPTY, of, throwError } from 'rxjs';
|
||||
import { ContentTestingModule } from '../../../testing/content.testing.module';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { CardViewContentUpdateService } from '../../../common/services/card-view-content-update.service';
|
||||
import { PropertyGroup } from '../../interfaces/property-group.interface';
|
||||
import { PropertyDescriptorsService } from '../../services/property-descriptors.service';
|
||||
@@ -37,6 +37,12 @@ import {
|
||||
TagService
|
||||
} from '@alfresco/adf-content-services';
|
||||
import { MatExpansionPanel } from '@angular/material/expansion';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { HttpClientModule } from '@angular/common/http';
|
||||
import { MatDialogModule } from '@angular/material/dialog';
|
||||
import { MatSnackBarModule } from '@angular/material/snack-bar';
|
||||
import { MatProgressBarModule } from '@angular/material/progress-bar';
|
||||
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||
|
||||
describe('ContentMetadataComponent', () => {
|
||||
let component: ContentMetadataComponent;
|
||||
@@ -50,6 +56,7 @@ describe('ContentMetadataComponent', () => {
|
||||
let categoryService: CategoryService;
|
||||
let getClassSpy: jasmine.Spy;
|
||||
let notificationService: NotificationService;
|
||||
let getGroupedPropertiesSpy: jasmine.Spy;
|
||||
|
||||
const preset = 'custom-preset';
|
||||
|
||||
@@ -158,8 +165,17 @@ describe('ContentMetadataComponent', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [ContentTestingModule],
|
||||
imports: [TranslateModule.forRoot(),
|
||||
NoopAnimationsModule,
|
||||
AuthModule.forRoot({ useHash: true }),
|
||||
HttpClientModule,
|
||||
MatDialogModule,
|
||||
MatSnackBarModule,
|
||||
MatProgressBarModule,
|
||||
MatTooltipModule,
|
||||
PipeModule],
|
||||
providers: [
|
||||
{ provide: TranslationService, useClass: TranslationMock },
|
||||
{
|
||||
provide: TagService,
|
||||
useValue: {
|
||||
@@ -210,6 +226,7 @@ describe('ContentMetadataComponent', () => {
|
||||
component.node = node;
|
||||
component.preset = preset;
|
||||
spyOn(contentMetadataService, 'getContentTypeProperty').and.returnValue(of([]));
|
||||
getGroupedPropertiesSpy = spyOn(contentMetadataService, 'getGroupedProperties');
|
||||
getClassSpy = spyOn(classesApi, 'getClass');
|
||||
fixture.detectChanges();
|
||||
});
|
||||
@@ -231,6 +248,7 @@ describe('ContentMetadataComponent', () => {
|
||||
describe('Folder', () => {
|
||||
it('should show the folder node', (done) => {
|
||||
component.expanded = false;
|
||||
getGroupedPropertiesSpy.and.returnValue(of([]));
|
||||
fixture.detectChanges();
|
||||
|
||||
component.basicProperties$.subscribe(() => {
|
||||
@@ -258,7 +276,7 @@ describe('ContentMetadataComponent', () => {
|
||||
|
||||
it('nodeAspectUpdate', fakeAsync(() => {
|
||||
const fakeNode = { id: 'fake-minimal-node', aspectNames: ['ft:a', 'ft:b', 'ft:c'], name: 'fake-node' } as Node;
|
||||
spyOn(contentMetadataService, 'getGroupedProperties').and.stub();
|
||||
getGroupedPropertiesSpy.and.stub();
|
||||
spyOn(contentMetadataService, 'getBasicProperties').and.stub();
|
||||
updateService.updateNodeAspect(fakeNode);
|
||||
|
||||
@@ -268,15 +286,11 @@ describe('ContentMetadataComponent', () => {
|
||||
}));
|
||||
|
||||
it('should save changedProperties on save click', fakeAsync(() => {
|
||||
spyOn(contentMetadataService, 'getGroupedProperties').and.returnValue(
|
||||
of([
|
||||
{
|
||||
editable: true,
|
||||
title: 'test',
|
||||
properties: []
|
||||
}
|
||||
])
|
||||
);
|
||||
getGroupedPropertiesSpy.and.returnValue(of([{
|
||||
editable: true,
|
||||
title: 'test',
|
||||
properties: []
|
||||
}]));
|
||||
updateService.itemUpdated$.next({
|
||||
changed: {}
|
||||
} as UpdateNotification);
|
||||
@@ -350,6 +364,8 @@ describe('ContentMetadataComponent', () => {
|
||||
it('should throw error on unsuccessful save', fakeAsync(() => {
|
||||
component.readOnly = false;
|
||||
const property = { key: 'properties.property-key', value: 'original-value' } as CardViewBaseItemModel;
|
||||
spyOn(nodesApiService, 'updateNode').and.returnValue(throwError(new Error('My bad')));
|
||||
|
||||
updateService.update(property, 'updated-value');
|
||||
tick(600);
|
||||
|
||||
@@ -359,7 +375,6 @@ describe('ContentMetadataComponent', () => {
|
||||
sub.unsubscribe();
|
||||
});
|
||||
|
||||
spyOn(nodesApiService, 'updateNode').and.returnValue(throwError(new Error('My bad')));
|
||||
|
||||
fixture.detectChanges();
|
||||
toggleEditModeForGeneralInfo();
|
||||
@@ -456,15 +471,11 @@ describe('ContentMetadataComponent', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
showErrorSpy = spyOn(notificationService, 'showError').and.stub();
|
||||
spyOn(contentMetadataService, 'getGroupedProperties').and.returnValue(
|
||||
of([
|
||||
{
|
||||
editable: true,
|
||||
title: 'test',
|
||||
properties: []
|
||||
}
|
||||
])
|
||||
);
|
||||
getGroupedPropertiesSpy.and.returnValue(of([{
|
||||
editable: true,
|
||||
title: 'test',
|
||||
properties: []
|
||||
}]));
|
||||
component.displayCategories = true;
|
||||
component.displayTags = true;
|
||||
component.ngOnInit();
|
||||
@@ -612,15 +623,11 @@ describe('ContentMetadataComponent', () => {
|
||||
});
|
||||
|
||||
it('should reset group edit ability on reset click', () => {
|
||||
spyOn(contentMetadataService, 'getGroupedProperties').and.returnValue(
|
||||
of([
|
||||
{
|
||||
editable: true,
|
||||
title: 'test',
|
||||
properties: []
|
||||
}
|
||||
])
|
||||
);
|
||||
getGroupedPropertiesSpy.and.returnValue(of([{
|
||||
editable: true,
|
||||
title: 'test',
|
||||
properties: []
|
||||
}]));
|
||||
component.ngOnInit();
|
||||
component.readOnly = false;
|
||||
fixture.detectChanges();
|
||||
@@ -684,7 +691,7 @@ describe('ContentMetadataComponent', () => {
|
||||
});
|
||||
|
||||
it('should load the group properties on node change', () => {
|
||||
spyOn(contentMetadataService, 'getGroupedProperties');
|
||||
getGroupedPropertiesSpy.and.stub();
|
||||
|
||||
component.ngOnChanges({ node: new SimpleChange(node, expectedNode, false) });
|
||||
|
||||
@@ -708,7 +715,7 @@ describe('ContentMetadataComponent', () => {
|
||||
}
|
||||
];
|
||||
component.preset = presetConfig;
|
||||
spyOn(contentMetadataService, 'getGroupedProperties');
|
||||
getGroupedPropertiesSpy.and.stub();
|
||||
|
||||
component.ngOnChanges({ node: new SimpleChange(node, expectedNode, false) });
|
||||
|
||||
@@ -719,7 +726,7 @@ describe('ContentMetadataComponent', () => {
|
||||
const expectedProperties = [];
|
||||
component.expanded = true;
|
||||
|
||||
spyOn(contentMetadataService, 'getGroupedProperties').and.returnValue(of([{ properties: expectedProperties } as any]));
|
||||
getGroupedPropertiesSpy.and.returnValue(of([{ properties: expectedProperties } as any]));
|
||||
spyOn(component, 'showGroup').and.returnValue(true);
|
||||
|
||||
component.ngOnChanges({ node: new SimpleChange(node, expectedNode, false) });
|
||||
@@ -733,7 +740,7 @@ describe('ContentMetadataComponent', () => {
|
||||
component.expanded = true;
|
||||
component.displayEmpty = false;
|
||||
|
||||
spyOn(contentMetadataService, 'getGroupedProperties').and.returnValue(of([{ properties: [] } as any]));
|
||||
getGroupedPropertiesSpy.and.returnValue(of([{ properties: [] } as any]));
|
||||
spyOn(component, 'showGroup').and.returnValue(true);
|
||||
|
||||
component.ngOnChanges({ node: new SimpleChange(node, expectedNode, false) });
|
||||
@@ -744,7 +751,7 @@ describe('ContentMetadataComponent', () => {
|
||||
});
|
||||
|
||||
it('should hide card views group when the grouped properties are empty', async () => {
|
||||
spyOn(contentMetadataService, 'getGroupedProperties').and.stub();
|
||||
getGroupedPropertiesSpy.and.stub();
|
||||
|
||||
component.ngOnChanges({ node: new SimpleChange(node, expectedNode, false) });
|
||||
|
||||
@@ -757,7 +764,7 @@ describe('ContentMetadataComponent', () => {
|
||||
|
||||
it('should display card views group when there is at least one property that is not empty', async () => {
|
||||
component.expanded = true;
|
||||
spyOn(contentMetadataService, 'getGroupedProperties').and.stub();
|
||||
getGroupedPropertiesSpy.and.stub();
|
||||
|
||||
component.ngOnChanges({ node: new SimpleChange(node, expectedNode, false) });
|
||||
|
||||
@@ -779,15 +786,11 @@ describe('ContentMetadataComponent', () => {
|
||||
});
|
||||
|
||||
it('should reload properties for group panel on cancel', () => {
|
||||
const getGroupedPropertiesSpy = spyOn(contentMetadataService, 'getGroupedProperties').and.returnValue(
|
||||
of([
|
||||
{
|
||||
editable: true,
|
||||
title: 'test',
|
||||
properties: []
|
||||
}
|
||||
])
|
||||
);
|
||||
getGroupedPropertiesSpy.and.returnValue(of([{
|
||||
editable: true,
|
||||
title: 'test',
|
||||
properties: []
|
||||
}]));
|
||||
component.ngOnChanges({ node: new SimpleChange(node, expectedNode, false) });
|
||||
component.readOnly = false;
|
||||
fixture.detectChanges();
|
||||
@@ -947,6 +950,7 @@ describe('ContentMetadataComponent', () => {
|
||||
|
||||
component.expanded = true;
|
||||
component.preset = 'default';
|
||||
getGroupedPropertiesSpy.and.callThrough();
|
||||
});
|
||||
|
||||
it('should show Versionable with given content-metadata config', async () => {
|
||||
|
||||
+10
-8
@@ -33,15 +33,17 @@ describe('PropertyDescriptorLoaderService', () => {
|
||||
classesApi = service['classesApi'];
|
||||
});
|
||||
|
||||
it('should load the groups passed by paramter', () => {
|
||||
spyOn(classesApi, 'getClass');
|
||||
it('should load the groups passed by paramter', (done) => {
|
||||
spyOn(classesApi, 'getClass').and.returnValue(Promise.resolve({}));
|
||||
|
||||
service.load(['exif:exif', 'cm:content', 'custom:custom']).subscribe(() => {});
|
||||
|
||||
expect(classesApi.getClass).toHaveBeenCalledTimes(3);
|
||||
expect(classesApi.getClass).toHaveBeenCalledWith('exif_exif');
|
||||
expect(classesApi.getClass).toHaveBeenCalledWith('cm_content');
|
||||
expect(classesApi.getClass).toHaveBeenCalledWith('custom_custom');
|
||||
service.load(['exif:exif', 'cm:content', 'custom:custom'])
|
||||
.subscribe(() => {
|
||||
expect(classesApi.getClass).toHaveBeenCalledTimes(3);
|
||||
expect(classesApi.getClass).toHaveBeenCalledWith('exif_exif');
|
||||
expect(classesApi.getClass).toHaveBeenCalledWith('cm_content');
|
||||
expect(classesApi.getClass).toHaveBeenCalledWith('custom_custom');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should merge the forked values', (done) => {
|
||||
|
||||
+5
-2
@@ -1,10 +1,13 @@
|
||||
<div class="adf-content-node-selector-content">
|
||||
<mat-form-field floatPlaceholder="never" class="adf-content-node-selector-content-input" *ngIf="showSearch">
|
||||
<mat-form-field floatPlaceholder="never"
|
||||
class="adf-content-node-selector-content-input"
|
||||
subscriptSizing="dynamic"
|
||||
*ngIf="showSearch">
|
||||
<mat-label>{{'NODE_SELECTOR.SEARCH' | translate}}</mat-label>
|
||||
<input matInput
|
||||
id="searchInput"
|
||||
[formControl]="searchInput"
|
||||
type="text"
|
||||
placeholder="{{'NODE_SELECTOR.SEARCH' | translate}}"
|
||||
[value]="searchTerm"
|
||||
adf-auto-focus
|
||||
data-automation-id="content-node-selector-search-input">
|
||||
|
||||
+119
-104
@@ -1,3 +1,5 @@
|
||||
@import 'styles/mat-selectors';
|
||||
|
||||
/* stylelint-disable no-descending-specificity */
|
||||
$content-node-selector-thumbnail-width: 35px !default;
|
||||
$content-node-selector-thumbnail-max-width: 40px !default;
|
||||
@@ -28,6 +30,7 @@ h2.adf-search-results-label {
|
||||
}
|
||||
|
||||
&-document-list-container {
|
||||
margin-top: 16px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@@ -48,70 +51,99 @@ h2.adf-search-results-label {
|
||||
}
|
||||
|
||||
.adf-site-dropdown-container {
|
||||
.adf-sites-dropdown-form-field {
|
||||
display: block;
|
||||
margin-bottom: 15px;
|
||||
display: block;
|
||||
margin-bottom: 15px;
|
||||
|
||||
#{$mat-form-field-label} {
|
||||
padding-top: 16px;
|
||||
}
|
||||
|
||||
#{$mat-floating-label-above} {
|
||||
padding-top: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.adf-site-dropdown-list-element {
|
||||
width: 100%;
|
||||
margin-bottom: 0;
|
||||
.adf-sites-dropdown-form-field {
|
||||
margin-top: 4px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.adf-sites-dropdown-select-trigger {
|
||||
font-size: var(--theme-body-1-font-size);
|
||||
}
|
||||
.adf-site-dropdown-list-element {
|
||||
width: 100%;
|
||||
margin-bottom: 0;
|
||||
|
||||
.adf-sites-dropdown-select-trigger {
|
||||
font-size: var(--theme-body-1-font-size);
|
||||
}
|
||||
}
|
||||
|
||||
&-breadcrumb {
|
||||
.adf-dropdown-breadcrumb-trigger {
|
||||
outline: none;
|
||||
&-breadcrumb {
|
||||
.adf-dropdown-breadcrumb-trigger {
|
||||
outline: none;
|
||||
|
||||
.adf-dropdown-breadcrumb-icon {
|
||||
color: var(--adf-theme-foreground-base-color-045);
|
||||
|
||||
&:hover {
|
||||
color: var(--adf-theme-foreground-base-color-065);
|
||||
}
|
||||
}
|
||||
|
||||
&:focus .adf-dropdown-breadcrumb-icon {
|
||||
color: var(--theme-primary-color);
|
||||
}
|
||||
}
|
||||
|
||||
.adf-dropdown-breadcrumb-item-chevron {
|
||||
.adf-dropdown-breadcrumb-icon {
|
||||
color: var(--adf-theme-foreground-base-color-045);
|
||||
|
||||
&:hover {
|
||||
color: var(--adf-theme-foreground-base-color-065);
|
||||
}
|
||||
}
|
||||
|
||||
&:focus .adf-dropdown-breadcrumb-icon {
|
||||
color: var(--theme-primary-color);
|
||||
}
|
||||
}
|
||||
|
||||
&-list {
|
||||
height: 40vh;
|
||||
overflow: auto;
|
||||
border: 1px solid var(--adf-theme-foreground-text-color-007);
|
||||
border-top: 0;
|
||||
position: relative;
|
||||
.adf-dropdown-breadcrumb-item-chevron {
|
||||
color: var(--adf-theme-foreground-base-color-045);
|
||||
}
|
||||
}
|
||||
|
||||
&-empty + adf-infinite-pagination {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
&-content-list,
|
||||
&-list {
|
||||
height: 40vh;
|
||||
overflow: auto;
|
||||
border: 1px solid var(--adf-theme-foreground-text-color-007);
|
||||
border-top: 0;
|
||||
position: relative;
|
||||
|
||||
&-empty + adf-infinite-pagination {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.adf-highlight {
|
||||
color: var(--theme-primary-color);
|
||||
}
|
||||
|
||||
.adf-datatable-list {
|
||||
border: none;
|
||||
|
||||
.adf-datatable-selected {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.adf-highlight {
|
||||
color: var(--theme-primary-color);
|
||||
.adf-datatable-selected > svg {
|
||||
fill: var(--theme-primary-color);
|
||||
}
|
||||
|
||||
.adf-datatable-list {
|
||||
.adf-no-content-container.adf-datatable-cell {
|
||||
text-align: center;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.adf-datatable-selected {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
.adf-datatable-cell {
|
||||
&--image {
|
||||
min-width: $content-node-selector-thumbnail-width;
|
||||
width: $content-node-selector-thumbnail-width;
|
||||
max-width: $content-node-selector-thumbnail-max-width;
|
||||
}
|
||||
|
||||
.adf-datatable-selected > svg {
|
||||
fill: var(--theme-primary-color);
|
||||
&:nth-child(2) {
|
||||
flex: 1 0 95px;
|
||||
}
|
||||
|
||||
.adf-no-content-container.adf-datatable-cell {
|
||||
@@ -119,78 +151,61 @@ h2.adf-search-results-label {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.adf-datatable-cell {
|
||||
&--image {
|
||||
min-width: $content-node-selector-thumbnail-width;
|
||||
width: $content-node-selector-thumbnail-width;
|
||||
max-width: $content-node-selector-thumbnail-max-width;
|
||||
}
|
||||
&.adf-content-selector-visibility-cell {
|
||||
flex: 0 1 auto;
|
||||
min-width: 1px;
|
||||
|
||||
&:nth-child(2) {
|
||||
flex: 1 0 95px;
|
||||
}
|
||||
|
||||
.adf-name-location-cell-location {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&.adf-content-selector-visibility-cell {
|
||||
flex: 0 1 auto;
|
||||
min-width: 1px;
|
||||
|
||||
.adf-datatable-cell-value {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.adf-datatable-body .adf-datatable-row {
|
||||
min-height: 40px;
|
||||
|
||||
@media screen and (-ms-high-contrast: active),
|
||||
screen and (-ms-high-contrast: none) {
|
||||
padding-top: 15px;
|
||||
}
|
||||
|
||||
&:first-child {
|
||||
.adf-datatable-cell {
|
||||
border-top: none;
|
||||
}
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
.adf-datatable-cell {
|
||||
border-bottom: none;
|
||||
}
|
||||
.adf-datatable-cell-value {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&-searchLayout {
|
||||
.adf-datatable-list .adf-datatable-body .adf-datatable-row {
|
||||
min-height: 65px;
|
||||
.adf-datatable-body .adf-datatable-row {
|
||||
min-height: 40px;
|
||||
|
||||
@media screen and (-ms-high-contrast: active), screen and (-ms-high-contrast: none) {
|
||||
padding-top: 15px;
|
||||
}
|
||||
|
||||
&:first-child {
|
||||
.adf-datatable-cell {
|
||||
.adf-name-location-cell-location {
|
||||
padding: 0 10px;
|
||||
display: block;
|
||||
}
|
||||
border-top: none;
|
||||
}
|
||||
}
|
||||
|
||||
.adf-name-location-cell-name {
|
||||
padding: 5px 10px 2px;
|
||||
}
|
||||
&:last-child {
|
||||
.adf-datatable-cell {
|
||||
border-bottom: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.adf-content-selector-modified-cell {
|
||||
display: none;
|
||||
}
|
||||
&-searchLayout {
|
||||
.adf-datatable-list .adf-datatable-body .adf-datatable-row {
|
||||
min-height: 65px;
|
||||
|
||||
&.adf-content-selector-modifier-cell {
|
||||
display: none;
|
||||
}
|
||||
.adf-datatable-cell {
|
||||
.adf-name-location-cell-location {
|
||||
padding: 0 10px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
&.adf-content-selector-visibility-cell {
|
||||
display: none;
|
||||
}
|
||||
.adf-name-location-cell-name {
|
||||
padding: 5px 10px 2px;
|
||||
}
|
||||
|
||||
&.adf-content-selector-modified-cell {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&.adf-content-selector-modifier-cell {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&.adf-content-selector-visibility-cell {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+42
-1
@@ -1,3 +1,5 @@
|
||||
@import 'styles/mat-selectors';
|
||||
|
||||
adf-content-node-selector {
|
||||
.adf-upload-dialog {
|
||||
box-shadow: none;
|
||||
@@ -40,7 +42,46 @@ adf-content-node-selector {
|
||||
}
|
||||
|
||||
.adf-content-node-selector-dialog {
|
||||
#{$mat-form-field} {
|
||||
width: 100%;
|
||||
|
||||
#{$mat-select-arrow-wrapper} {
|
||||
transform: translateY(2px);
|
||||
padding-right: 4px;
|
||||
}
|
||||
|
||||
#{$mat-form-field-infix} {
|
||||
border-top: 0.8438em solid transparent;
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
|
||||
#{$mat-floating-label} {
|
||||
padding-top: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.adf-content-node-selector-content-input-icon {
|
||||
font-size: 20px;
|
||||
padding: 32px 0 0 0;
|
||||
margin-right: -4px;
|
||||
}
|
||||
|
||||
.adf-dropdown-breadcrumb-icon {
|
||||
color: var(--adf-theme-foreground-base-color-045);
|
||||
}
|
||||
|
||||
#{$mat-dialog-title} {
|
||||
margin-bottom: 0;
|
||||
padding: 0;
|
||||
|
||||
&::before {
|
||||
display: none
|
||||
}
|
||||
}
|
||||
|
||||
.adf-content-node-selector-dialog-title {
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
font-size: var(--theme-title-font-size);
|
||||
font-weight: 600;
|
||||
font-style: normal;
|
||||
@@ -57,7 +98,7 @@ adf-content-node-selector {
|
||||
|
||||
.adf-content-node-selector-dialog-actions {
|
||||
padding: 8px;
|
||||
height: 61px;
|
||||
height: 77px;
|
||||
background-color: var(--theme-background-color);
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
|
||||
+34
-44
@@ -148,13 +148,13 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
|
||||
it('should pass through the injected currentFolderId to the documentList', () => {
|
||||
const documentList = fixture.debugElement.query(By.directive(DocumentListComponent));
|
||||
expect(documentList).not.toBeNull();
|
||||
expect(documentList).not.toBeNull('Document list should be shown');
|
||||
expect(documentList.componentInstance.currentFolderId).toBe('cat-girl-nuku-nuku');
|
||||
});
|
||||
|
||||
it('should pass through the injected rowFilter to the documentList', () => {
|
||||
const documentList = fixture.debugElement.query(By.directive(DocumentListComponent));
|
||||
expect(documentList).not.toBeNull();
|
||||
expect(documentList).not.toBeNull('Document list should be shown');
|
||||
expect(
|
||||
documentList.componentInstance.rowFilter({
|
||||
node: {
|
||||
@@ -178,69 +178,66 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
|
||||
it('should pass through the injected imageResolver to the documentList', () => {
|
||||
const documentList = fixture.debugElement.query(By.directive(DocumentListComponent));
|
||||
expect(documentList).not.toBeNull();
|
||||
expect(documentList).not.toBeNull('Document list should be shown');
|
||||
expect(documentList.componentInstance.imageResolver).toBe(data.imageResolver);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Cancel button', () => {
|
||||
const getCancelButton = () => fixture.debugElement.query(By.css('[data-automation-id="content-node-selector-actions-cancel"]'));
|
||||
|
||||
it('should not be shown if dialogRef is NOT injected', () => {
|
||||
const closeButton = fixture.debugElement.query(By.css('[content-node-selector-actions-cancel]'));
|
||||
expect(closeButton).toBeNull();
|
||||
});
|
||||
|
||||
it('should close the dialog', () => {
|
||||
let cancelButton = getCancelButton();
|
||||
let cancelButton = fixture.debugElement.query(By.css('[data-automation-id="content-node-selector-actions-cancel"]'));
|
||||
cancelButton.triggerEventHandler('click', {});
|
||||
expect(dialog.close).toHaveBeenCalled();
|
||||
|
||||
fixture.detectChanges();
|
||||
cancelButton = getCancelButton();
|
||||
cancelButton = fixture.debugElement.query(By.css('[data-automation-id="content-node-selector-actions-cancel"]'));
|
||||
expect(cancelButton).not.toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
describe('Action button for the chosen node', () => {
|
||||
const getActionButton = () =>
|
||||
fixture.debugElement.query(By.css('[data-automation-id="content-node-selector-actions-choose"]'))?.nativeElement as HTMLButtonElement;
|
||||
|
||||
it('should be disabled by default', () => {
|
||||
fixture.detectChanges();
|
||||
|
||||
const actionButton = getActionButton();
|
||||
expect(actionButton.disabled).toBeTruthy();
|
||||
const actionButton = fixture.debugElement.query(By.css('[data-automation-id="content-node-selector-actions-choose"]'));
|
||||
expect(actionButton.nativeElement.disabled).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should be enabled when a node is chosen', () => {
|
||||
component.onSelect([new Node({ id: 'fake' })]);
|
||||
fixture.detectChanges();
|
||||
|
||||
const actionButton = getActionButton();
|
||||
expect(actionButton.disabled).toBeFalsy();
|
||||
const actionButton = fixture.debugElement.query(By.css('[data-automation-id="content-node-selector-actions-choose"]'));
|
||||
expect(actionButton.nativeElement.disabled).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should be disabled when no node chosen', () => {
|
||||
component.onSelect([new Node({ id: 'fake' })]);
|
||||
fixture.detectChanges();
|
||||
|
||||
const actionButtonWithNodeSelected = getActionButton();
|
||||
expect(actionButtonWithNodeSelected.disabled).toBe(false);
|
||||
const actionButtonWithNodeSelected = fixture.debugElement.query(By.css('[data-automation-id="content-node-selector-actions-choose"]'));
|
||||
|
||||
expect(actionButtonWithNodeSelected.nativeElement.disabled).toBe(false);
|
||||
|
||||
component.onSelect([]);
|
||||
fixture.detectChanges();
|
||||
|
||||
const actionButtonWithoutNodeSelected = getActionButton();
|
||||
expect(actionButtonWithoutNodeSelected.disabled).toBe(true);
|
||||
const actionButtonWithoutNodeSelected = fixture.debugElement.query(By.css('[data-automation-id="content-node-selector-actions-choose"]'));
|
||||
|
||||
expect(actionButtonWithoutNodeSelected.nativeElement.disabled).toBe(true);
|
||||
});
|
||||
|
||||
it('should close the dialog when action button is clicked', () => {
|
||||
it('should close the dialog when action button is clicked', async () => {
|
||||
component.onSelect([new Node({ id: 'fake' })]);
|
||||
fixture.detectChanges();
|
||||
|
||||
const actionButton = getActionButton();
|
||||
actionButton.click();
|
||||
const actionButton = fixture.debugElement.query(By.css('[data-automation-id="content-node-selector-actions-choose"]'));
|
||||
await actionButton.nativeElement.click();
|
||||
|
||||
expect(dialog.close).toHaveBeenCalled();
|
||||
});
|
||||
@@ -260,8 +257,6 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
});
|
||||
|
||||
describe('Upload button', () => {
|
||||
const getUploadButton = () => fixture.debugElement.query(By.css('adf-upload-button button'))?.nativeElement as HTMLButtonElement;
|
||||
|
||||
it('Should not be able to upload a file whilst a search is still running', async () => {
|
||||
enableLocalUpload();
|
||||
fixture.detectChanges();
|
||||
@@ -308,10 +303,10 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
component.hasAllowableOperations = true;
|
||||
|
||||
fixture.detectChanges();
|
||||
const adfUploadButton = getUploadButton();
|
||||
const adfUploadButton = fixture.debugElement.query(By.css('adf-upload-button button'));
|
||||
|
||||
expect(adfUploadButton).not.toBeNull();
|
||||
expect(adfUploadButton.disabled).toBe(true);
|
||||
expect(adfUploadButton.nativeElement.disabled).toBe(true);
|
||||
});
|
||||
|
||||
it('should be able to enable UploadButton if showingSearch set to false', async () => {
|
||||
@@ -320,10 +315,10 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
component.hasAllowableOperations = true;
|
||||
|
||||
fixture.detectChanges();
|
||||
const adfUploadButton = getUploadButton();
|
||||
const adfUploadButton = fixture.debugElement.query(By.css('adf-upload-button button'));
|
||||
|
||||
expect(adfUploadButton).not.toBeNull();
|
||||
expect(adfUploadButton.disabled).toBe(false);
|
||||
expect(adfUploadButton.nativeElement.disabled).toBe(false);
|
||||
});
|
||||
|
||||
it('should be able to show warning message while searching', async () => {
|
||||
@@ -333,7 +328,7 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
await selectTabByIndex(1);
|
||||
|
||||
fixture.detectChanges();
|
||||
const infoMatIcon = getTabInfoButton();
|
||||
const infoMatIcon = fixture.debugElement.query(By.css('[data-automation-id="adf-content-node-selector-disabled-tab-info-icon"]'));
|
||||
const iconTooltipMessage = infoMatIcon.attributes['ng-reflect-message'];
|
||||
|
||||
const expectedMessage = 'NODE_SELECTOR.UPLOAD_BUTTON_SEARCH_WARNING_MESSAGE';
|
||||
@@ -359,10 +354,10 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
component.onTabSelectionChange(1);
|
||||
|
||||
fixture.detectChanges();
|
||||
const adfUploadButton = getUploadButton();
|
||||
const adfUploadButton = fixture.debugElement.query(By.css('adf-upload-button button'));
|
||||
|
||||
expect(adfUploadButton).not.toBeNull();
|
||||
expect(adfUploadButton.disabled).toBe(true);
|
||||
expect(adfUploadButton.nativeElement.disabled).toBe(true);
|
||||
});
|
||||
|
||||
it('should be able to enable UploadButton if user has allowable operations', async () => {
|
||||
@@ -370,10 +365,10 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
component.hasAllowableOperations = true;
|
||||
|
||||
fixture.detectChanges();
|
||||
const adfUploadButton = getUploadButton();
|
||||
const adfUploadButton = fixture.debugElement.query(By.css('adf-upload-button button'));
|
||||
|
||||
expect(adfUploadButton).not.toBeNull();
|
||||
expect(adfUploadButton.disabled).toBe(false);
|
||||
expect(adfUploadButton.nativeElement.disabled).toBe(false);
|
||||
});
|
||||
|
||||
it('should not be able to show warning message if user has allowable operations', async () => {
|
||||
@@ -393,7 +388,7 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
await selectTabByIndex(1);
|
||||
|
||||
fixture.detectChanges();
|
||||
const infoMatIcon = getTabInfoButton();
|
||||
const infoMatIcon = fixture.debugElement.query(By.css('[data-automation-id="adf-content-node-selector-disabled-tab-info-icon"]'));
|
||||
const iconTooltipMessage = infoMatIcon.attributes['ng-reflect-message'];
|
||||
const expectedMessage = 'NODE_SELECTOR.UPLOAD_BUTTON_PERMISSION_WARNING_MESSAGE';
|
||||
|
||||
@@ -448,8 +443,6 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
});
|
||||
|
||||
describe('Drag and drop area', () => {
|
||||
const getEmptyList = () => fixture.nativeElement.querySelector('[data-automation-id="adf-empty-list"]');
|
||||
|
||||
it('should uploadStarted be false by default', () => {
|
||||
expect(component.uploadStarted).toBe(false);
|
||||
});
|
||||
@@ -467,8 +460,7 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
await fixture.whenRenderingDone();
|
||||
|
||||
const emptyListTemplate = getEmptyList();
|
||||
const emptyListTemplate = fixture.nativeElement.querySelector('[data-automation-id="adf-empty-list"]');
|
||||
const dragAndDropArea = fixture.debugElement.query(By.css('.adf-upload-drag-area'));
|
||||
|
||||
expect(emptyListTemplate).not.toBeNull();
|
||||
@@ -482,15 +474,13 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
component.uploadStarted = true;
|
||||
fixture.detectChanges();
|
||||
await fixture.whenRenderingDone();
|
||||
const emptyListTemplate = fixture.nativeElement.querySelector('[data-automation-id="adf-empty-list"]');
|
||||
|
||||
const emptyListTemplate = getEmptyList();
|
||||
expect(emptyListTemplate).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
describe('Selected nodes counter', () => {
|
||||
const getNodeCounter = () => fixture.debugElement.nativeElement.querySelector('adf-node-counter');
|
||||
|
||||
it('should getSelectedCount return 0 by default', () => {
|
||||
expect(component.getSelectedCount()).toBe(0);
|
||||
});
|
||||
@@ -504,19 +494,19 @@ describe('ContentNodeSelectorComponent', () => {
|
||||
it('should show the counter depending on the action', () => {
|
||||
component.action = NodeAction.ATTACH;
|
||||
fixture.detectChanges();
|
||||
expect(getNodeCounter()).not.toBe(null);
|
||||
expect(fixture.debugElement.nativeElement.querySelector('adf-node-counter')).not.toBe(null);
|
||||
|
||||
component.action = NodeAction.CHOOSE;
|
||||
fixture.detectChanges();
|
||||
expect(getNodeCounter()).not.toBe(null);
|
||||
expect(fixture.debugElement.nativeElement.querySelector('adf-node-counter')).not.toBe(null);
|
||||
|
||||
component.action = NodeAction.COPY;
|
||||
fixture.detectChanges();
|
||||
expect(getNodeCounter()).toBe(null);
|
||||
expect(fixture.debugElement.nativeElement.querySelector('adf-node-counter')).toBe(null);
|
||||
|
||||
component.action = NodeAction.MOVE;
|
||||
fixture.detectChanges();
|
||||
expect(getNodeCounter()).toBe(null);
|
||||
expect(fixture.debugElement.nativeElement.querySelector('adf-node-counter')).toBe(null);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<div class="adf-share-link__dialog-content">
|
||||
<div class="adf-share-link__dialog-container">
|
||||
<div class="adf-share-link--row">
|
||||
<div class="adf-share-link--header adf-share-link--row">
|
||||
<div
|
||||
data-automation-id="adf-share-dialog-title"
|
||||
class="adf-share-link__title adf-share-link__label adf-share-link__heading"
|
||||
@@ -10,10 +10,10 @@
|
||||
</div>
|
||||
<mat-icon mat-dialog-close class="adf-share-link__close adf-share-link__icon">close</mat-icon>
|
||||
</div>
|
||||
<mat-dialog-content>
|
||||
<mat-dialog-content class="adf-share-link--dialog-content">
|
||||
<hr class="adf-share-link__separation-line" />
|
||||
<form [formGroup]="form" class="adf-share-link__form">
|
||||
<div class="adf-share-link--row">
|
||||
<div class="adf-share-link--row adf-share-link--row-sharable">
|
||||
<mat-icon class="adf-share-link__icon">timer</mat-icon>
|
||||
<div class="adf-share-link__label adf-sharable-link">{{ 'SHARE.LINK-EXPIRY-DATE' | translate }}
|
||||
</div>
|
||||
@@ -31,7 +31,7 @@
|
||||
[style.display]="isExpiryDateToggleChecked ? 'block' : 'none'"
|
||||
data-automation-id="adf-slide-toggle-checked"
|
||||
class="adf-share-link__date-time-container">
|
||||
<mat-form-field class="adf-full-width" floatLabel="never" data-automation-id="adf-content-share-expiration-field">
|
||||
<mat-form-field class="adf-full-width" subscriptSizing="dynamic" data-automation-id="adf-content-share-expiration-field" floatLabel="always">
|
||||
<mat-label>{{ 'SHARE.EXPIRATION-PLACEHOLDER' | translate }}</mat-label>
|
||||
<mat-datepicker-toggle
|
||||
[disabled]="time.disabled"
|
||||
@@ -47,7 +47,6 @@
|
||||
class="adf-share-link__input"
|
||||
#datePickerInput
|
||||
matInput
|
||||
placeholder="{{ 'SHARE.EXPIRATION-PLACEHOLDER' | translate }}"
|
||||
[attr.aria-label]="'SHARE.EXPIRATION-LABEL' | translate"
|
||||
[min]="minDate"
|
||||
formControlName="time"
|
||||
@@ -60,10 +59,11 @@
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<p class="adf-share-link__info adf-share-link__para">{{ 'SHARE.SHARE-LINK' | translate }}</p>
|
||||
<div class="adf-share-link--row">
|
||||
<div class="adf-share-link--row adf-share-link--sharable-container">
|
||||
<mat-slide-toggle
|
||||
color="primary"
|
||||
data-automation-id="adf-share-toggle"
|
||||
class="adf-share-link--row__slide-toggle"
|
||||
aria-label="{{ 'SHARE.TITLE' | translate }}"
|
||||
[checked]="isFileShared"
|
||||
[disabled]="!canUpdate || isDisabled"
|
||||
@@ -73,8 +73,9 @@
|
||||
</div>
|
||||
</div>
|
||||
<mat-form-field
|
||||
class="adf-full-width"
|
||||
floatLabel="never"
|
||||
subscriptSizing="dynamic"
|
||||
floatLabel="always"
|
||||
class="adf-full-width adf-share-link__form--field"
|
||||
data-automation-id="adf-content-share-public-link-field"
|
||||
[ngClass]="isLinkWithExpiryDate? 'adf-share-link__border-color' : ''">
|
||||
<input
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
@import 'styles/mat-selectors';
|
||||
|
||||
.adf-share-link-dialog {
|
||||
.adf-share-link {
|
||||
#{$mat-form-field-flex} {
|
||||
height: 48px;
|
||||
}
|
||||
|
||||
&__dialog-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
@@ -8,7 +14,6 @@
|
||||
&__dialog-container {
|
||||
background-color: var(--theme-card-background-color);
|
||||
border-radius: 16px;
|
||||
padding: 16px 24px;
|
||||
}
|
||||
|
||||
&__label,
|
||||
@@ -29,6 +34,15 @@
|
||||
|
||||
&__form {
|
||||
padding-top: 8px;
|
||||
|
||||
#{$mat-form-field-infix}:has(.adf-share-link__input) {
|
||||
border-top: 0.9375em solid transparent;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
&--field {
|
||||
padding-bottom: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
&__public-content {
|
||||
@@ -48,6 +62,23 @@
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
margin: 8px 0;
|
||||
|
||||
&-sharable {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
&--sharable-container {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
&--header {
|
||||
padding: 16px 24px 0;
|
||||
}
|
||||
|
||||
&--dialog-content {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
&__input {
|
||||
@@ -66,6 +97,7 @@
|
||||
|
||||
&__icon {
|
||||
color: var(--adf-theme-foreground-icon-color-054);
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
&__para {
|
||||
@@ -79,11 +111,12 @@
|
||||
}
|
||||
|
||||
&__calender-icon {
|
||||
font-size: 18px;
|
||||
top: 12px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
&__date-time-container {
|
||||
padding-bottom: 8px;
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
|
||||
&__border-color {
|
||||
@@ -101,12 +134,13 @@
|
||||
}
|
||||
|
||||
.adf-sharable-link {
|
||||
margin-top: 2px;
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
.adf-share-link__actions {
|
||||
justify-content: flex-end;
|
||||
padding: 0;
|
||||
padding: 8px 24px 32px 0;
|
||||
margin: 8px 0 0;
|
||||
|
||||
& > button {
|
||||
|
||||
@@ -300,7 +300,7 @@ describe('ShareDialogComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
expect(fixture.debugElement.query(By.css('[data-automation-id="adf-content-share-expiration-field"]')).componentInstance.floatLabel).toBe(
|
||||
'never'
|
||||
'always'
|
||||
);
|
||||
});
|
||||
|
||||
@@ -312,7 +312,7 @@ describe('ShareDialogComponent', () => {
|
||||
|
||||
fixture.detectChanges();
|
||||
expect(fixture.debugElement.query(By.css('[data-automation-id="adf-content-share-public-link-field"]')).componentInstance.floatLabel).toBe(
|
||||
'never'
|
||||
'always'
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
@@ -15,18 +15,18 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';
|
||||
import { TypeEntry } from '@alfresco/js-api';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { of, Subject } from 'rxjs';
|
||||
import { ContentTestingModule } from '../testing/content.testing.module';
|
||||
import { ContentTypeDialogComponent } from './content-type-dialog.component';
|
||||
import { ContentTypeService } from './content-type.service';
|
||||
import { ContentTypeDialogComponentData } from './content-type-metadata.interface';
|
||||
import { TypeEntry } from '@alfresco/js-api';
|
||||
import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { MatExpansionPanelHarness } from '@angular/material/expansion/testing';
|
||||
import { MatTableHarness } from '@angular/material/table/testing';
|
||||
import { ContentTypeService } from './content-type.service';
|
||||
import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';
|
||||
|
||||
const elementCustom: TypeEntry = {
|
||||
entry: {
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
<mat-menu #menu="matMenu" id="user-profile-lists" [xPosition]="menuPositionX" [yPosition]="menuPositionY"
|
||||
[overlapTrigger]="false" class="adf-userinfo-menu">
|
||||
<mat-card *ngIf="mode === userInfoMode.CONTENT" class="adf-userinfo-card adf-content-userinfo-card">
|
||||
<mat-card appearance="outlined" *ngIf="mode === userInfoMode.CONTENT" class="adf-userinfo-card adf-content-userinfo-card">
|
||||
<mat-card-header class="adf-userinfo-card-header"
|
||||
[style.background-image]="'url(' + ecmBackgroundImage + ')'">
|
||||
<div *ngIf="ecmUser.avatarId; else initialTemplate"
|
||||
@@ -51,7 +51,7 @@
|
||||
[outerHTML]="ecmUser | usernameInitials:'adf-userinfo-profile-initials adf-hide-small'"></div>
|
||||
</ng-template>
|
||||
|
||||
<div class="mat-title" id="ecm-username">{{ecmUser | fullName}}</div>
|
||||
<div class="mat-headline-6" id="ecm-username">{{ecmUser | fullName}}</div>
|
||||
</mat-card-header>
|
||||
<mat-card-content>
|
||||
<div class="adf-userinfo-supporting-text">
|
||||
@@ -71,7 +71,7 @@
|
||||
</div>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
<mat-card *ngIf="mode === userInfoMode.CONTENT_SSO" class="adf-userinfo-card adf-content-userinfo-card">
|
||||
<mat-card appearance="outlined" *ngIf="mode === userInfoMode.CONTENT_SSO" class="adf-userinfo-card adf-content-userinfo-card">
|
||||
<mat-card-header class="adf-userinfo-card-header"
|
||||
[style.background-image]="'url(' + bpmBackgroundImage + ')'">
|
||||
<div *ngIf="ecmUser.avatarId; else initialTemplate"
|
||||
@@ -83,7 +83,7 @@
|
||||
<div
|
||||
[outerHTML]="identityUser | usernameInitials:'adf-userinfo-profile-initials adf-hide-small'"></div>
|
||||
</ng-template>
|
||||
<div class="mat-title" id="identity-username">{{identityUser | fullName}}</div>
|
||||
<div class="mat-headline-6" id="identity-username">{{identityUser | fullName}}</div>
|
||||
</mat-card-header>
|
||||
<mat-card-content>
|
||||
<div class="adf-userinfo-supporting-text">
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { CoreTestingModule, IdentityUserModel, InitialUsernamePipe, UserInfoMode } from '@alfresco/adf-core';
|
||||
import { IdentityUserModel, InitialUsernamePipe, UserInfoMode } from '@alfresco/adf-core';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { MatMenuModule } from '@angular/material/menu';
|
||||
import { By, DomSanitizer } from '@angular/platform-browser';
|
||||
@@ -79,7 +79,7 @@ describe('ContentUserInfoComponent', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [CoreTestingModule, ContentTestingModule, MatMenuModule]
|
||||
imports: [ContentTestingModule, MatMenuModule]
|
||||
});
|
||||
fixture = TestBed.createComponent(ContentUserInfoComponent);
|
||||
component = fixture.componentInstance;
|
||||
|
||||
@@ -19,9 +19,13 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { CategorySelectorDialogComponent, CategorySelectorDialogOptions } from './category-selector.dialog';
|
||||
import { Subject } from 'rxjs';
|
||||
import { Category } from '@alfresco/js-api';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import { CoreTestingModule } from '@alfresco/adf-core';
|
||||
import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { AppConfigService, AppConfigServiceMock, TranslationMock, TranslationService } from '@alfresco/adf-core';
|
||||
import { CategoriesManagementComponent } from '../category';
|
||||
import { HttpClientTestingModule } from '@angular/common/http/testing';
|
||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||
|
||||
describe('Category selector dialog component', () => {
|
||||
let fixture: ComponentFixture<CategorySelectorDialogComponent>;
|
||||
@@ -36,7 +40,10 @@ describe('Category selector dialog component', () => {
|
||||
select: new Subject<Category[]>()
|
||||
};
|
||||
|
||||
const categories: Category[] = [{id: 'id1', name: 'cat1'}, {id: 'id2', name: 'cat3'}];
|
||||
const categories: Category[] = [
|
||||
{ id: 'id1', name: 'cat1' },
|
||||
{ id: 'id2', name: 'cat3' }
|
||||
];
|
||||
|
||||
const setCategories = () => {
|
||||
component.categories = categories;
|
||||
@@ -45,11 +52,14 @@ describe('Category selector dialog component', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [CoreTestingModule],
|
||||
imports: [MatFormFieldModule, TranslateModule.forRoot(), MatDialogModule, HttpClientTestingModule],
|
||||
providers: [
|
||||
{ provide: AppConfigService, useClass: AppConfigServiceMock },
|
||||
{ provide: MatDialogRef, useValue: dialogRef },
|
||||
{ provide: MAT_DIALOG_DATA, useValue: options }
|
||||
]
|
||||
{ provide: MAT_DIALOG_DATA, useValue: options },
|
||||
{ provide: TranslationService, useClass: TranslationMock }
|
||||
],
|
||||
declarations: [CategoriesManagementComponent, CategorySelectorDialogComponent]
|
||||
});
|
||||
dialogRef.close.calls.reset();
|
||||
fixture = TestBed.createComponent(CategorySelectorDialogComponent);
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
<h1 mat-dialog-title data-automation-id="adf-confirm-dialog-title">{{ title | translate }}</h1>
|
||||
<mat-dialog-content>
|
||||
<p *ngIf="!htmlContent; else cutomContent" data-automation-id="adf-confirm-dialog-base-message">
|
||||
{{ message | translate }}
|
||||
</p>
|
||||
<ng-template #cutomContent>
|
||||
<div class="adf-confirm-dialog-content">
|
||||
<p *ngIf="!htmlContent; else cutomContent" data-automation-id="adf-confirm-dialog-base-message">
|
||||
{{ message | translate }}
|
||||
</p>
|
||||
<ng-template #cutomContent>
|
||||
<span [innerHTML]="sanitizedHtmlContent()" data-automation-id="adf-confirm-dialog-custom-content">
|
||||
</span>
|
||||
</ng-template>
|
||||
</ng-template>
|
||||
</div>
|
||||
</mat-dialog-content>
|
||||
<mat-dialog-actions>
|
||||
<span class="adf-dialog-spacer" data-automation-id="adf-confirm-dialog-spacer"></span>
|
||||
|
||||
@@ -6,4 +6,12 @@
|
||||
& .adf-confirm-dialog-button {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
& .adf-confirm-dialog-content {
|
||||
margin: 0 -24px;
|
||||
|
||||
p {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,11 +16,14 @@
|
||||
*/
|
||||
|
||||
import { TestBed, ComponentFixture } from '@angular/core/testing';
|
||||
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
||||
import { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
|
||||
import { DownloadZipDialogComponent } from './download-zip.dialog';
|
||||
import { CoreTestingModule } from '@alfresco/adf-core';
|
||||
import { DownloadZipService } from './services/download-zip.service';
|
||||
import { Observable } from 'rxjs';
|
||||
import { EMPTY, Observable } from 'rxjs';
|
||||
import { AlfrescoApiService, AlfrescoApiServiceMock, RedirectAuthService, TranslationMock, TranslationService } from '@alfresco/adf-core';
|
||||
import { HttpClientTestingModule } from '@angular/common/http/testing';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
|
||||
describe('DownloadZipDialogComponent', () => {
|
||||
let fixture: ComponentFixture<DownloadZipDialogComponent>;
|
||||
@@ -37,10 +40,14 @@ describe('DownloadZipDialogComponent', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [CoreTestingModule],
|
||||
imports: [HttpClientTestingModule, TranslateModule.forRoot(), MatDialogModule, NoopAnimationsModule],
|
||||
providers: [
|
||||
DownloadZipService,
|
||||
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },
|
||||
{ provide: TranslationService, useClass: TranslationMock },
|
||||
{ provide: MatDialogRef, useValue: dialogRef },
|
||||
{ provide: MAT_DIALOG_DATA, useValue: dataMock }
|
||||
{ provide: MAT_DIALOG_DATA, useValue: dataMock },
|
||||
{ provide: RedirectAuthService, useValue: { onLogin: EMPTY } }
|
||||
]
|
||||
});
|
||||
dialogRef.close.calls.reset();
|
||||
|
||||
@@ -16,11 +16,14 @@
|
||||
*/
|
||||
|
||||
import { ChangeDetectorRef, Component, ElementRef, SimpleChange } from '@angular/core';
|
||||
import { CoreTestingModule } from '@alfresco/adf-core';
|
||||
import { ContentService } from '../common/services/content.service';
|
||||
import { CheckAllowableOperationDirective } from './check-allowable-operation.directive';
|
||||
import { TestBed } from '@angular/core/testing';
|
||||
import { NodeAllowableOperationSubject } from '../interfaces/node-allowable-operation-subject.interface';
|
||||
import { ContentDirectiveModule } from './content-directive.module';
|
||||
import { RedirectAuthService } from '@alfresco/adf-core';
|
||||
import { EMPTY } from 'rxjs';
|
||||
import { HttpClientTestingModule } from '@angular/common/http/testing';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-text-subject',
|
||||
@@ -35,7 +38,8 @@ describe('CheckAllowableOperationDirective', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [CoreTestingModule]
|
||||
imports: [ContentDirectiveModule, HttpClientTestingModule],
|
||||
providers: [{ provide: RedirectAuthService, useValue: { onLogin: EMPTY } }]
|
||||
});
|
||||
changeDetectorMock = { detectChanges: () => {} } as ChangeDetectorRef;
|
||||
});
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
import { Component, ViewChild } from '@angular/core';
|
||||
import { LibraryFavoriteDirective } from './library-favorite.directive';
|
||||
import { TestBed, ComponentFixture } from '@angular/core/testing';
|
||||
import { CoreTestingModule } from '@alfresco/adf-core';
|
||||
import { LibraryEntity } from '../interfaces/library-entity.interface';
|
||||
import { HttpClientTestingModule } from '@angular/common/http/testing';
|
||||
|
||||
@Component({
|
||||
selector: 'app-test-component',
|
||||
@@ -39,7 +39,7 @@ describe('LibraryFavoriteDirective', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [CoreTestingModule],
|
||||
imports: [HttpClientTestingModule],
|
||||
declarations: [TestComponent, LibraryFavoriteDirective]
|
||||
});
|
||||
fixture = TestBed.createComponent(TestComponent);
|
||||
|
||||
@@ -17,11 +17,12 @@
|
||||
|
||||
import { fakeAsync, TestBed, tick } from '@angular/core/testing';
|
||||
import { LibraryMembershipDirective } from './library-membership.directive';
|
||||
import { NO_ERRORS_SCHEMA, SimpleChange } from '@angular/core';
|
||||
import { SimpleChange } from '@angular/core';
|
||||
import { of, throwError, Subject } from 'rxjs';
|
||||
import { AlfrescoApiService, CoreModule, CoreTestingModule } from '@alfresco/adf-core';
|
||||
import { AlfrescoApiService, AlfrescoApiServiceMock } from '@alfresco/adf-core';
|
||||
import { ContentDirectiveModule } from './content-directive.module';
|
||||
import { SitesService } from '../common/services/sites.service';
|
||||
import { HttpClientTestingModule } from '@angular/common/http/testing';
|
||||
|
||||
describe('LibraryMembershipDirective', () => {
|
||||
let alfrescoApiService: AlfrescoApiService;
|
||||
@@ -37,8 +38,8 @@ describe('LibraryMembershipDirective', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [ContentDirectiveModule, CoreModule.forRoot(), CoreTestingModule],
|
||||
schemas: [NO_ERRORS_SCHEMA]
|
||||
imports: [HttpClientTestingModule, ContentDirectiveModule],
|
||||
providers: [SitesService, { provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock }]
|
||||
});
|
||||
|
||||
testSiteEntry = {
|
||||
|
||||
@@ -19,8 +19,11 @@ import { Component, DebugElement, ViewChild } from '@angular/core';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { NodeDeleteDirective } from './node-delete.directive';
|
||||
import { CoreTestingModule } from '@alfresco/adf-core';
|
||||
import { ContentDirectiveModule } from './content-directive.module';
|
||||
import { HttpClientTestingModule } from '@angular/common/http/testing';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { RedirectAuthService, TranslationMock, TranslationService } from '@alfresco/adf-core';
|
||||
import { EMPTY } from 'rxjs';
|
||||
|
||||
@Component({
|
||||
template: ` <div id="delete-component" [adf-delete]="selection" (delete)="onDelete()"></div>`
|
||||
@@ -76,7 +79,11 @@ describe('NodeDeleteDirective', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [CoreTestingModule, ContentDirectiveModule],
|
||||
imports: [ContentDirectiveModule, HttpClientTestingModule, TranslateModule.forRoot()],
|
||||
providers: [
|
||||
{ provide: TranslationService, useClass: TranslationMock },
|
||||
{ provide: RedirectAuthService, useValue: { onLogin: EMPTY } }
|
||||
],
|
||||
declarations: [TestComponent, TestWithPermissionsComponent, TestDeletePermanentComponent]
|
||||
});
|
||||
fixture = TestBed.createComponent(TestComponent);
|
||||
|
||||
@@ -19,9 +19,10 @@ import { TestBed, ComponentFixture } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { MatDialog } from '@angular/material/dialog';
|
||||
import { Component, DebugElement, ViewChild } from '@angular/core';
|
||||
import { AlfrescoApiService, CoreTestingModule } from '@alfresco/adf-core';
|
||||
import { AlfrescoApiService, AlfrescoApiServiceMock } from '@alfresco/adf-core';
|
||||
import { NodeDownloadDirective } from './node-download.directive';
|
||||
import { ContentDirectiveModule } from '@alfresco/adf-content-services';
|
||||
import { HttpClientTestingModule } from '@angular/common/http/testing';
|
||||
|
||||
@Component({
|
||||
template: '<div [adfNodeDownload]="selection" [version]="version"></div>'
|
||||
@@ -52,8 +53,9 @@ describe('NodeDownloadDirective', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [ContentDirectiveModule, CoreTestingModule],
|
||||
declarations: [TestComponent]
|
||||
imports: [ContentDirectiveModule, HttpClientTestingModule],
|
||||
declarations: [TestComponent],
|
||||
providers: [{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock }]
|
||||
});
|
||||
fixture = TestBed.createComponent(TestComponent);
|
||||
component = fixture.componentInstance;
|
||||
|
||||
@@ -18,7 +18,8 @@
|
||||
import { SimpleChange } from '@angular/core';
|
||||
import { fakeAsync, TestBed, tick } from '@angular/core/testing';
|
||||
import { NodeFavoriteDirective } from './node-favorite.directive';
|
||||
import { AlfrescoApiService, CoreTestingModule } from '@alfresco/adf-core';
|
||||
import { AlfrescoApiService, AlfrescoApiServiceMock, AppConfigService, AppConfigServiceMock } from '@alfresco/adf-core';
|
||||
import { HttpClientTestingModule } from '@angular/common/http/testing';
|
||||
|
||||
describe('NodeFavoriteDirective', () => {
|
||||
let directive: NodeFavoriteDirective;
|
||||
@@ -26,7 +27,11 @@ describe('NodeFavoriteDirective', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [CoreTestingModule]
|
||||
imports: [HttpClientTestingModule],
|
||||
providers: [
|
||||
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },
|
||||
{ provide: AppConfigService, useClass: AppConfigServiceMock }
|
||||
]
|
||||
});
|
||||
alfrescoApiService = TestBed.inject(AlfrescoApiService);
|
||||
directive = new NodeFavoriteDirective(alfrescoApiService);
|
||||
|
||||
@@ -19,8 +19,10 @@ import { Component, DebugElement } from '@angular/core';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { NodeRestoreDirective } from './node-restore.directive';
|
||||
import { TranslationService, CoreTestingModule } from '@alfresco/adf-core';
|
||||
import { TranslationMock, TranslationService } from '@alfresco/adf-core';
|
||||
import { ContentDirectiveModule } from './content-directive.module';
|
||||
import { HttpClientTestingModule } from '@angular/common/http/testing';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
template: ` <div [adf-restore]="selection" (restore)="doneSpy()"></div>`
|
||||
@@ -42,7 +44,8 @@ describe('NodeRestoreDirective', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [CoreTestingModule, ContentDirectiveModule],
|
||||
imports: [ContentDirectiveModule, HttpClientTestingModule, TranslateModule.forRoot()],
|
||||
providers: [{ provide: TranslationService, useClass: TranslationMock }],
|
||||
declarations: [TestComponent]
|
||||
});
|
||||
fixture = TestBed.createComponent(TestComponent);
|
||||
|
||||
+10
-7
@@ -18,10 +18,13 @@
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { FileAutoDownloadComponent } from './file-auto-download.component';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { CoreTestingModule } from '@alfresco/adf-core';
|
||||
import { NO_ERRORS_SCHEMA } from '@angular/core';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { TranslationMock, TranslationService } from '@alfresco/adf-core';
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { NodeDownloadDirective } from '../../../directives';
|
||||
import { HttpClientTestingModule } from '@angular/common/http/testing';
|
||||
|
||||
const mockDialog = {
|
||||
close: jasmine.createSpy('close')
|
||||
@@ -34,12 +37,12 @@ describe('FileAutoDownloadComponent', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [FileAutoDownloadComponent],
|
||||
imports: [CoreTestingModule],
|
||||
schemas: [NO_ERRORS_SCHEMA],
|
||||
imports: [HttpClientTestingModule, TranslateModule.forRoot(), MatDialogModule, MatButtonModule],
|
||||
declarations: [FileAutoDownloadComponent, NodeDownloadDirective],
|
||||
providers: [
|
||||
{ provide: MatDialogRef, useValue: mockDialog },
|
||||
{ provide: MAT_DIALOG_DATA, useValue: null }
|
||||
{ provide: MAT_DIALOG_DATA, useValue: null },
|
||||
{ provide: TranslationService, useClass: TranslationMock }
|
||||
]
|
||||
});
|
||||
|
||||
|
||||
@@ -17,11 +17,13 @@
|
||||
|
||||
import { TestBed } from '@angular/core/testing';
|
||||
import { LockService } from './lock.service';
|
||||
import { CoreTestingModule, AuthenticationService } from '@alfresco/adf-core';
|
||||
import { AuthenticationService, RedirectAuthService } from '@alfresco/adf-core';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
import { addDays, subDays } from 'date-fns';
|
||||
import { HttpClientTestingModule } from '@angular/common/http/testing';
|
||||
import { EMPTY } from 'rxjs';
|
||||
|
||||
describe('PeopleProcessService', () => {
|
||||
describe('LockService', () => {
|
||||
let service: LockService;
|
||||
let authenticationService: AuthenticationService;
|
||||
|
||||
@@ -31,7 +33,8 @@ describe('PeopleProcessService', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [CoreTestingModule]
|
||||
imports: [HttpClientTestingModule],
|
||||
providers: [{ provide: RedirectAuthService, useValue: { onLogin: EMPTY } }]
|
||||
});
|
||||
service = TestBed.inject(LockService);
|
||||
authenticationService = TestBed.inject(AuthenticationService);
|
||||
|
||||
+3
-2
@@ -122,8 +122,9 @@ describe('InfiniteScrollDatasource', () => {
|
||||
expect(renderedItems[0].innerText).toBe('test1');
|
||||
expect(renderedItems[2].innerText).toBe('test3');
|
||||
});
|
||||
|
||||
it('should load next batch when user scrolls towards the end of the list', fakeAsync(() => {
|
||||
// Disabling this test as it's flaky (fails 3 out of 4 on CI)
|
||||
//eslint-disable-next-line
|
||||
xit('should load next batch when user scrolls towards the end of the list', fakeAsync(() => {
|
||||
fixture.autoDetectChanges();
|
||||
const stable = fixture.whenStable();
|
||||
const renderingDone = fixture.whenRenderingDone();
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
</adf-version-upload>
|
||||
</section>
|
||||
<ng-container *ngIf="data.showVersionsOnly">
|
||||
<section mat-dialog-content>
|
||||
<section class="adf-new-version-uploader-dialog-content" mat-dialog-content>
|
||||
<div class="adf-version-list-container">
|
||||
<div class="adf-version-list-table">
|
||||
<adf-version-list
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
height: 500px;
|
||||
}
|
||||
|
||||
&-title {
|
||||
.adf-new-version-uploader-dialog-title {
|
||||
flex: 0 0 auto;
|
||||
font-size: 20px;
|
||||
font-weight: 600;
|
||||
@@ -36,12 +36,12 @@
|
||||
color: var(--adf-theme-foreground-text-color-087);
|
||||
}
|
||||
|
||||
&-content {
|
||||
.adf-new-version-uploader-dialog-content {
|
||||
padding: 0;
|
||||
flex: 1 1 auto;
|
||||
position: relative;
|
||||
max-height: 100vh;
|
||||
overflow: hidden;
|
||||
padding: 2px 26px;
|
||||
}
|
||||
|
||||
&-actions {
|
||||
|
||||
@@ -16,9 +16,11 @@
|
||||
*/
|
||||
|
||||
import { TestBed } from '@angular/core/testing';
|
||||
import { CommentModel, CoreTestingModule } from '@alfresco/adf-core';
|
||||
import { AlfrescoApiService, AlfrescoApiServiceMock, CommentModel, RedirectAuthService } from '@alfresco/adf-core';
|
||||
import { fakeContentComment, fakeContentComments } from '../mocks/node-comments.mock';
|
||||
import { NodeCommentsService } from './node-comments.service';
|
||||
import { HttpClientTestingModule } from '@angular/common/http/testing';
|
||||
import { EMPTY } from 'rxjs';
|
||||
|
||||
declare let jasmine: any;
|
||||
|
||||
@@ -27,7 +29,11 @@ describe('NodeCommentsService', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [CoreTestingModule]
|
||||
imports: [HttpClientTestingModule],
|
||||
providers: [
|
||||
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },
|
||||
{ provide: RedirectAuthService, useValue: { onLogin: EMPTY } }
|
||||
]
|
||||
});
|
||||
service = TestBed.inject(NodeCommentsService);
|
||||
|
||||
|
||||
+4
@@ -49,6 +49,10 @@
|
||||
}
|
||||
}
|
||||
|
||||
.adf-datatable-cell .adf-cell-value adf-user-role-column {
|
||||
position: unset;
|
||||
}
|
||||
|
||||
.adf {
|
||||
&-search-user-button {
|
||||
width: 100%;
|
||||
|
||||
+3
-1
@@ -1,3 +1,5 @@
|
||||
@import 'styles/mat-selectors';
|
||||
|
||||
$search-result-height: calc(100% - 75px);
|
||||
|
||||
.adf {
|
||||
@@ -7,7 +9,7 @@ $search-result-height: calc(100% - 75px);
|
||||
overflow: auto;
|
||||
border: 2px solid var(--adf-theme-foreground-text-color-007);
|
||||
|
||||
mat-pseudo-checkbox {
|
||||
#{$mat-list-item-end} {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
+5
-5
@@ -40,15 +40,15 @@
|
||||
</div>
|
||||
|
||||
<button
|
||||
mat-button
|
||||
mat-flat-button
|
||||
data-automation-id="permission-info-button"
|
||||
[adf-pop-over]="inheritedPermission"
|
||||
[target]="target"
|
||||
#popOver="adfPopOver"
|
||||
*ngIf="model.node.permissions.isInheritanceEnabled">
|
||||
{{ (popOver.open ? 'PERMISSION_MANAGER.LABELS.HIDE' : 'PERMISSION_MANAGER.LABELS.SHOW') | translate }}
|
||||
<mat-icon *ngIf="popOver.open"> keyboard_arrow_up </mat-icon>
|
||||
<mat-icon *ngIf="!popOver.open"> keyboard_arrow_down </mat-icon>
|
||||
<mat-icon *ngIf="popOver.open" iconPositionEnd> keyboard_arrow_up </mat-icon>
|
||||
<mat-icon *ngIf="!popOver.open" iconPositionEnd> keyboard_arrow_down </mat-icon>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
<div class="adf-toolbar--spacer"></div>
|
||||
|
||||
<button
|
||||
mat-button
|
||||
mat-icon-button
|
||||
title="{{'PERMISSION_MANAGER.ACTION.ADD-PERMISSION' | translate}}"
|
||||
(click)="openAddPermissionDialog()"
|
||||
data-automation-id="adf-add-permission-button">
|
||||
@@ -81,7 +81,7 @@
|
||||
</button>
|
||||
|
||||
<button
|
||||
mat-button
|
||||
mat-icon-button
|
||||
title="{{'PERMISSION_MANAGER.ACTION.DELETE' | translate}}"
|
||||
[disabled]="!selectedPermissions?.length"
|
||||
(click)="deleteSelection()"
|
||||
|
||||
+5
-1
@@ -1,3 +1,5 @@
|
||||
@import 'styles/mat-selectors';
|
||||
|
||||
.adf {
|
||||
&-permission-card {
|
||||
height: 100%;
|
||||
@@ -5,6 +7,7 @@
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
padding: 16px;
|
||||
}
|
||||
|
||||
&-permission-loader {
|
||||
@@ -66,9 +69,10 @@
|
||||
height: calc(100% - 63px);
|
||||
}
|
||||
|
||||
&-local-permission-container {
|
||||
&-local-permission-container#{$mat-card-content} {
|
||||
overflow: hidden;
|
||||
flex: 1 1 auto;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+17
-15
@@ -21,14 +21,15 @@ import { RoleModel } from '../../models/role.model';
|
||||
@Component({
|
||||
selector: 'adf-user-role-column',
|
||||
template: `
|
||||
<mat-form-field floatLabel="never" class="adf-role-selector-field" *ngIf="!readonly">
|
||||
<mat-form-field class="adf-role-selector-field" *ngIf="!readonly">
|
||||
<mat-select
|
||||
(click)="$event.stopPropagation()"
|
||||
[placeholder]="placeholder | translate"
|
||||
[value]="value"
|
||||
(selectionChange)="onRoleChanged($event.value)"
|
||||
(keyup.arrowdown)="$event.stopPropagation()"
|
||||
(keyup.arrowup)="$event.stopPropagation()">
|
||||
(keyup.arrowup)="$event.stopPropagation()"
|
||||
>
|
||||
<mat-option *ngFor="let role of roles" [value]="role.role">
|
||||
{{ role.label | adfLocalizedRole }}
|
||||
</mat-option>
|
||||
@@ -36,28 +37,29 @@ import { RoleModel } from '../../models/role.model';
|
||||
</mat-form-field>
|
||||
|
||||
<span class="adf-datatable-cell-value adf-readonly-role" [title]="value | adfLocalizedRole" *ngIf="readonly">
|
||||
{{value | adfLocalizedRole}}
|
||||
</span>
|
||||
{{ value | adfLocalizedRole }}
|
||||
</span>
|
||||
`,
|
||||
host: { class: 'adf-user-role-column adf-datatable-content-cell adf-expand-cell-4' },
|
||||
styles: [
|
||||
`.adf-role-selector-field {
|
||||
width: 100%;
|
||||
}
|
||||
`
|
||||
.adf-role-selector-field.mat-mdc-form-field {
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
max-width: 200px;
|
||||
|
||||
.adf-role-selector-field .mat-form-field {
|
||||
width: 100%;
|
||||
max-width: 200px;
|
||||
}
|
||||
.mat-mdc-form-field-infix {
|
||||
padding-top: 8px;
|
||||
}
|
||||
|
||||
.adf-readonly-role {
|
||||
padding-left: 0 !important;
|
||||
}
|
||||
.mat-mdc-form-field-subscript-wrapper {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
`
|
||||
]
|
||||
})
|
||||
export class UserRoleColumnComponent {
|
||||
|
||||
@Input()
|
||||
roles: RoleModel[];
|
||||
|
||||
|
||||
+4
-4
@@ -1,6 +1,6 @@
|
||||
<mat-form-field class="adf-chip-list" appearance="outline">
|
||||
<mat-chip-list #chipList [attr.aria-label]="'SEARCH.FILTER.ARIA-LABEL.OPTIONS-SELECTION' | translate">
|
||||
<mat-chip
|
||||
<mat-chip-grid #chipList [attr.aria-label]="'SEARCH.FILTER.ARIA-LABEL.OPTIONS-SELECTION' | translate">
|
||||
<mat-chip-row
|
||||
class="adf-option-chips adf-autocomplete-added-option-chips"
|
||||
*ngFor="let option of selectedOptions"
|
||||
(removed)="remove(option)">
|
||||
@@ -14,7 +14,7 @@
|
||||
[attr.aria-label]="('SEARCH.FILTER.BUTTONS.REMOVE' | translate) + ' ' + option.value">
|
||||
<mat-icon class="adf-option-chips-delete-icon adf-autocomplete-added-option-chips-delete-icon">close</mat-icon>
|
||||
</button>
|
||||
</mat-chip>
|
||||
</mat-chip-row>
|
||||
<input
|
||||
placeholder="{{ placeholder | translate }}"
|
||||
aria-controls="adf-search-chip-autocomplete"
|
||||
@@ -27,7 +27,7 @@
|
||||
(matChipInputTokenEnd)="add($event)"
|
||||
(blur)="activeAnyOption = false"
|
||||
data-automation-id="adf-search-chip-autocomplete-input">
|
||||
</mat-chip-list>
|
||||
</mat-chip-grid>
|
||||
<mat-autocomplete #auto="matAutocomplete" (optionSelected)="selected($event)" id="adf-search-chip-autocomplete"
|
||||
(optionActivated)="activeAnyOption = true" (closed)="activeAnyOption = false">
|
||||
<ng-container *ngIf="optionInput.value.length > 0">
|
||||
|
||||
+6
-4
@@ -1,11 +1,13 @@
|
||||
/* stylelint-disable selector-class-pattern */
|
||||
@import 'styles/mat-selectors';
|
||||
|
||||
adf-search-chip-autocomplete-input {
|
||||
.adf-chip-list {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* stylelint-disable-next-line */
|
||||
.mat-form-field-infix {
|
||||
border: none;
|
||||
}
|
||||
#{$mat-form--text-field-infix} {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.adf-autocomplete-added-option-chips.adf-option-chips {
|
||||
|
||||
+3
-3
@@ -24,7 +24,7 @@ import { SearchChipAutocompleteInputComponent } from './search-chip-autocomplete
|
||||
import { DebugElement } from '@angular/core';
|
||||
import { HarnessLoader } from '@angular/cdk/testing';
|
||||
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
|
||||
import { MatChipHarness, MatChipListHarness } from '@angular/material/chips/testing';
|
||||
import { MatChipHarness, MatChipGridHarness } from '@angular/material/chips/testing';
|
||||
import { MatAutocompleteHarness } from '@angular/material/autocomplete/testing';
|
||||
import { MatOptionHarness } from '@angular/material/core/testing';
|
||||
|
||||
@@ -89,8 +89,8 @@ describe('SearchChipAutocompleteInputComponent', () => {
|
||||
* @returns list of chips
|
||||
*/
|
||||
async function getChipList(): Promise<MatChipHarness[]> {
|
||||
const harness = await loader.getHarness(MatChipListHarness);
|
||||
return harness.getChips();
|
||||
const harness = await loader.getHarness(MatChipGridHarness);
|
||||
return harness.getRows();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+6
-6
@@ -1,6 +1,6 @@
|
||||
<mat-chip-list>
|
||||
<mat-chip-listbox>
|
||||
<ng-container *ngIf="facetFiltersService.selectedBuckets.length">
|
||||
<mat-chip *ngIf="clearAll && facetFiltersService.selectedBuckets.length > 1"
|
||||
<mat-chip-option *ngIf="clearAll && facetFiltersService.selectedBuckets.length > 1"
|
||||
data-automation-id="reset-filter"
|
||||
color="primary"
|
||||
selected
|
||||
@@ -9,9 +9,9 @@
|
||||
matTooltipPosition="right"
|
||||
(click)="facetFiltersService.resetAllSelectedBuckets()">
|
||||
{{ 'SEARCH.FILTER.BUTTONS.CLEAR-ALL.LABEL' | translate }}
|
||||
</mat-chip>
|
||||
</mat-chip-option>
|
||||
|
||||
<mat-chip
|
||||
<mat-chip-option
|
||||
data-automation-id="chip-list-entry"
|
||||
class="adf-search-chip-list-item"
|
||||
*ngFor="let selection of facetFiltersService.selectedBuckets"
|
||||
@@ -19,6 +19,6 @@
|
||||
(removed)="facetFiltersService.unselectFacetBucket(selection.field, selection.bucket)">
|
||||
{{ (selection.bucket.display || selection.bucket.label) | translate }}
|
||||
<mat-icon class="adf-search-chip-list-item-remove" matChipRemove>cancel</mat-icon>
|
||||
</mat-chip>
|
||||
</mat-chip-option>
|
||||
</ng-container>
|
||||
</mat-chip-list>
|
||||
</mat-chip-listbox>
|
||||
|
||||
@@ -30,20 +30,20 @@
|
||||
(keyup.enter)="elementClicked(item)"
|
||||
(touchend)="elementClicked(item)">
|
||||
<!-- This is a comment -->
|
||||
<mat-icon mat-list-icon>
|
||||
<mat-icon matListItemLine>
|
||||
<img [alt]="getMimeType(item)" [src]="getMimeTypeIcon(item)"/>
|
||||
</mat-icon>
|
||||
<h4 mat-line id="result_name_{{idx}}"
|
||||
<h4 matListItemTitle id="result_name_{{idx}}"
|
||||
*ngIf="highlight; else elseBlock"
|
||||
class="adf-search-fixed-text"
|
||||
[innerHtml]="item.entry.name | highlight: searchTerm">
|
||||
{{ item?.entry.name }}
|
||||
</h4>
|
||||
<ng-template #elseBlock>
|
||||
<h4 class="adf-search-fixed-text" mat-line id="result_name_{{idx}}"
|
||||
<h4 class="adf-search-fixed-text" matListItemTitle id="result_name_{{idx}}"
|
||||
[innerHtml]="item.entry.name"></h4>
|
||||
</ng-template>
|
||||
<p mat-line class="adf-search-fixed-text"> {{item?.entry.createdByUser.displayName}} </p>
|
||||
<p matListItemLine class="adf-search-fixed-text"> {{item?.entry.createdByUser.displayName}} </p>
|
||||
</mat-list-item>
|
||||
<mat-list-item id="search_no_result"
|
||||
data-automation-id="search_no_result_found"
|
||||
@@ -53,7 +53,7 @@
|
||||
*ngIf="isNoSearchTemplatePresent() else defaultNoResult">
|
||||
</ng-content>
|
||||
<ng-template #defaultNoResult>
|
||||
<p mat-line class="adf-search-fixed-text">{{ 'SEARCH.RESULTS.NONE' | translate:{searchTerm:
|
||||
<p matListItemLine class="adf-search-fixed-text">{{ 'SEARCH.RESULTS.NONE' | translate:{searchTerm:
|
||||
searchTerm} }}</p>
|
||||
</ng-template>
|
||||
</mat-list-item>
|
||||
|
||||
@@ -167,7 +167,7 @@ export class SearchControlComponent implements OnDestroy {
|
||||
if (this.listResultElement && this.listResultElement.length > 0) {
|
||||
const firstElement = this.listResultElement.first as MatListItem;
|
||||
// eslint-disable-next-line no-underscore-dangle
|
||||
firstElement._getHostElement().focus();
|
||||
firstElement._hostElement.focus();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -4,10 +4,10 @@
|
||||
<button mat-icon-button class="adf-facet-search-icon" tabindex="-1">
|
||||
<mat-icon class="adf-search-field-icon">search</mat-icon>
|
||||
</button>
|
||||
<mat-form-field class="adf-facet-search-field" floatLabel="never">
|
||||
<mat-form-field class="adf-facet-search-field">
|
||||
<input matInput placeholder="{{ 'SEARCH.FILTER.ACTIONS.SEARCH' | translate }}"
|
||||
[attr.data-automation-id]="'facet-result-filter-'+field.label" [(ngModel)]="field.buckets.filterText">
|
||||
<button *ngIf="field.buckets.filterText" mat-button matSuffix mat-icon-button
|
||||
<button *ngIf="field.buckets.filterText" mat-button matSuffix
|
||||
[attr.title]="'SEARCH.FILTER.BUTTONS.CLEAR' | translate"
|
||||
(click)="field.buckets.filterText = ''">
|
||||
<mat-icon role="button" [attr.aria-label]="'SEARCH.FILTER.BUTTONS.CLEAR' | translate">clear</mat-icon>
|
||||
|
||||
+3
-3
@@ -1,5 +1,5 @@
|
||||
<mat-chip [attr.data-automation-id]="'search-filter-chip-tabbed-' + tabbedFacet.label"
|
||||
[disableRipple]="true"
|
||||
<mat-chip-option [attr.data-automation-id]="'search-filter-chip-tabbed-' + tabbedFacet.label"
|
||||
disableRipple
|
||||
class="adf-search-filter-chip-tabbed"
|
||||
[class.adf-search-toggle-chip]="displayValue || menuTrigger.menuOpen"
|
||||
[disabled]="!isPopulated"
|
||||
@@ -21,7 +21,7 @@
|
||||
<ng-template #disabledIcon>
|
||||
<mat-icon>remove</mat-icon>
|
||||
</ng-template>
|
||||
</mat-chip>
|
||||
</mat-chip-option>
|
||||
|
||||
<mat-menu #menu="matMenu" class="adf-search-widget-extra-width" backdropClass="adf-search-filter-chip-menu" (closed)="onClosed()">
|
||||
<div #menuContainer [attr.data-automation-id]="'search-field-' + tabbedFacet.label">
|
||||
|
||||
+3
-3
@@ -1,5 +1,5 @@
|
||||
<mat-chip [attr.data-automation-id]="'search-filter-chip-' + field.label"
|
||||
[disableRipple]="true"
|
||||
<mat-chip-option [attr.data-automation-id]="'search-filter-chip-' + field.label"
|
||||
disableRipple
|
||||
class="adf-search-filter-chip adf-search-filter-facet-chip"
|
||||
[class.adf-search-toggle-chip]="(facetField.displayValue$ | async) || menuTrigger.menuOpen"
|
||||
[disabled]="!isPopulated()"
|
||||
@@ -23,7 +23,7 @@
|
||||
<ng-template #disabledIcon>
|
||||
<mat-icon>remove</mat-icon>
|
||||
</ng-template>
|
||||
</mat-chip>
|
||||
</mat-chip-option>
|
||||
|
||||
<mat-menu #menu="matMenu" backdropClass="adf-search-filter-chip-menu" (closed)="onClosed()">
|
||||
<div #menuContainer [attr.data-automation-id]="'search-field-' + field.label">
|
||||
|
||||
+6
-3
@@ -25,6 +25,7 @@ import { MatMenuHarness } from '@angular/material/menu/testing';
|
||||
import { HarnessLoader, TestKey } from '@angular/cdk/testing';
|
||||
import { MatButtonHarness } from '@angular/material/button/testing';
|
||||
import { MatIconHarness } from '@angular/material/icon/testing';
|
||||
import { MatChipOptionHarness } from '@angular/material/chips/testing';
|
||||
|
||||
describe('SearchFacetChipComponent', () => {
|
||||
let loader: HarnessLoader;
|
||||
@@ -87,11 +88,13 @@ describe('SearchFacetChipComponent', () => {
|
||||
});
|
||||
|
||||
it('should display remove icon and disable facet when no items are loaded', async () => {
|
||||
const menu = await loader.getHarness(MatMenuHarness);
|
||||
expect(await menu.isDisabled()).toBe(true);
|
||||
const menu = await loader.getHarness(MatChipOptionHarness);
|
||||
const disabled = await menu.isDisabled();
|
||||
expect(disabled).toBe(true);
|
||||
|
||||
const icon = await loader.getHarness(MatIconHarness);
|
||||
expect(await icon.getName()).toBe('remove');
|
||||
const iconName = await icon.getName();
|
||||
expect(iconName).toBe('remove');
|
||||
});
|
||||
|
||||
it('should not open context menu when no items are loaded', async () => {
|
||||
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
<mat-chip-list role="listbox" [attr.aria-label]="'SEARCH.FILTER.ARIA-LABEL.SEARCH_FILTER' | translate">
|
||||
<mat-chip-listbox role="listbox" [attr.aria-label]="'SEARCH.FILTER.ARIA-LABEL.SEARCH_FILTER' | translate">
|
||||
<ng-container *ngFor="let category of categories">
|
||||
<adf-search-widget-chip [category]="category"></adf-search-widget-chip>
|
||||
</ng-container>
|
||||
@@ -17,4 +17,4 @@
|
||||
</ng-container>
|
||||
|
||||
<ng-content></ng-content>
|
||||
</mat-chip-list>
|
||||
</mat-chip-listbox>
|
||||
|
||||
+3
-3
@@ -1,5 +1,5 @@
|
||||
<mat-chip [attr.data-automation-id]="'search-filter-chip-' + category.name"
|
||||
[disableRipple]="true"
|
||||
<mat-chip-option [attr.data-automation-id]="'search-filter-chip-' + category.name"
|
||||
disableRipple
|
||||
class="adf-search-filter-chip"
|
||||
[class.adf-search-toggle-chip]="(widget.getDisplayValue() | async) || menuTrigger.menuOpen"
|
||||
[tabIndex]="0"
|
||||
@@ -17,7 +17,7 @@
|
||||
</span>
|
||||
<ng-template #showAny><span class="adf-search-filter-ellipsis adf-filter-value"> {{ 'SEARCH.FILTER.ANY' | translate }}</span></ng-template>
|
||||
<mat-icon class="adf-search-filter-chip-icon">{{ chipIcon }}</mat-icon>
|
||||
</mat-chip>
|
||||
</mat-chip-option>
|
||||
|
||||
<mat-menu #menu="matMenu" class="adf-search-widget-extra-width" backdropClass="adf-search-filter-chip-menu" [class]="'adf-search-filter-chip-menu-panel adf-search-filter-chip-menu-panel-' + category.id" (closed)="onClosed()">
|
||||
<div #menuContainer [attr.data-automation-id]="'search-field-' + category.name">
|
||||
|
||||
+4
-4
@@ -26,10 +26,10 @@ import { SearchWidgetContainerComponent } from '../../search-widget-container/se
|
||||
templateUrl: './search-widget-chip.component.html',
|
||||
styles: [
|
||||
`
|
||||
.adf-search-widget-extra-width {
|
||||
max-width: 500px;
|
||||
}
|
||||
`
|
||||
.adf-search-widget-extra-width {
|
||||
max-width: 500px;
|
||||
}
|
||||
`
|
||||
],
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user