mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2026-09-16 18:13:06 +00:00
Compare commits
121
Commits
ACS-5551-UI
...
APPS-2136
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fe9300c8e1 | ||
|
|
fc147074ce | ||
|
|
e42e0869ba | ||
|
|
93f45062fe | ||
|
|
ea65756660 | ||
|
|
ecbee581a7 | ||
|
|
93fe29503a | ||
|
|
441d8003af | ||
|
|
11b4f5186b | ||
|
|
c548fc7763 | ||
|
|
43242b1185 | ||
|
|
e638b54fcd | ||
|
|
0b1fc4faa4 | ||
|
|
fc8a443d32 | ||
|
|
8a6fe3071d | ||
|
|
0811525c95 | ||
|
|
a69c089f87 | ||
|
|
e76d2fb169 | ||
|
|
034e9574d0 | ||
|
|
94baaf7d33 | ||
|
|
e21ad3ca02 | ||
|
|
c2d45e10f8 | ||
|
|
21a029163a | ||
|
|
d72eb5ebd3 | ||
|
|
501516c8f5 | ||
|
|
d78dcd2156 | ||
|
|
a48438e1c1 | ||
|
|
b03011c3d2 | ||
|
|
016e5ec089 | ||
|
|
65d70bffb2 | ||
|
|
d7e0bb6cd3 | ||
|
|
a0c79e6c64 | ||
|
|
094acf77ce | ||
|
|
ed0dd094b4 | ||
|
|
a488a729eb | ||
|
|
44694c0ee1 | ||
|
|
06bfded238 | ||
|
|
4786a26320 | ||
|
|
8f684a9f6a | ||
|
|
6d8c513180 | ||
|
|
83b2d9f8bc | ||
|
|
0933e2dada | ||
|
|
926347b8fc | ||
|
|
3638ed06ef | ||
|
|
f488520752 | ||
|
|
ef551a9c71 | ||
|
|
8370a3de66 | ||
|
|
5345838744 | ||
|
|
919a8ba80c | ||
|
|
16ab6e3306 | ||
|
|
9ca7dbdce9 | ||
|
|
15219c3cc6 | ||
|
|
3d867d728b | ||
|
|
87a00e0672 | ||
|
|
d2d6a31bdb | ||
|
|
a1dd270c5d | ||
|
|
99f591ed67 | ||
|
|
f20df680aa | ||
|
|
6df6fd16fc | ||
|
|
d7cf12d89b | ||
|
|
e14e489d2d | ||
|
|
13b6bf37ff | ||
|
|
8080a0699f | ||
|
|
0d5e70ebf7 | ||
|
|
3aa55996bf | ||
|
|
d2ef772e0a | ||
|
|
a1b39fb6dc | ||
|
|
ce881b7dcf | ||
|
|
a8db044092 | ||
|
|
76e2870c66 | ||
|
|
876ca7a0a7 | ||
|
|
8a9f828894 | ||
|
|
70a7e5f4e1 | ||
|
|
bd518b6c59 | ||
|
|
60099a2d7d | ||
|
|
b4ffc866d7 | ||
|
|
9ce8b01914 | ||
|
|
95537c4c50 | ||
|
|
c6fdbd601a | ||
|
|
c83d92c539 | ||
|
|
c73e95c9bf | ||
|
|
1c30eb2814 | ||
|
|
780800453a | ||
|
|
bb3000346f | ||
|
|
3b4ce3b857 | ||
|
|
a5b05b3e5f | ||
|
|
657711e808 | ||
|
|
a66b3d0846 | ||
|
|
79df220434 | ||
|
|
af3c7eb783 | ||
|
|
885c5a52fe | ||
|
|
d839531d08 | ||
|
|
377dd5d3a2 | ||
|
|
efa691b249 | ||
|
|
b77691bb08 | ||
|
|
837b3b1b92 | ||
|
|
87e57272fa | ||
|
|
de16072171 | ||
|
|
729a65ca5c | ||
|
|
ce855ec36e | ||
|
|
c9fdf24553 | ||
|
|
a8be9d64e1 | ||
|
|
b58e6f628a | ||
|
|
9a349f27d9 | ||
|
|
29ec2fcc96 | ||
|
|
d0c35c28ee | ||
|
|
40adcfec2d | ||
|
|
03b93721ab | ||
|
|
3e56b9a4cc | ||
|
|
f8d587bc2e | ||
|
|
673010d271 | ||
|
|
d0b1f77b7b | ||
|
|
005115ee19 | ||
|
|
dcd1c4e21c | ||
|
|
1b06742eb6 | ||
|
|
f1d9e0a92f | ||
|
|
6cb881e8cf | ||
|
|
57ff885483 | ||
|
|
e7dbedd497 | ||
|
|
f201efd56a | ||
|
|
ca60b392d4 |
+183
-189
@@ -1,193 +1,187 @@
|
||||
path = require('path');
|
||||
module.exports = {
|
||||
root: true,
|
||||
ignorePatterns: [
|
||||
'projects/**/*',
|
||||
'**/node_modules/**/*',
|
||||
'lib/cli/node_modules/**/*',
|
||||
'**/node_modules',
|
||||
'**/docker',
|
||||
'**/assets',
|
||||
'**/scripts',
|
||||
'**/docs'
|
||||
],
|
||||
overrides: [
|
||||
{
|
||||
files: [
|
||||
'*.ts'
|
||||
],
|
||||
parserOptions: {
|
||||
project: [
|
||||
path.join(__dirname, 'tsconfig.json'),
|
||||
path.join(__dirname, 'e2e/tsconfig.e2e.json')
|
||||
],
|
||||
createDefaultProgram: true
|
||||
},
|
||||
extends: [
|
||||
'plugin:@angular-eslint/ng-cli-compat',
|
||||
'plugin:@angular-eslint/ng-cli-compat--formatting-add-on',
|
||||
'plugin:@angular-eslint/template/process-inline-templates'
|
||||
],
|
||||
plugins: [
|
||||
'eslint-plugin-unicorn',
|
||||
'eslint-plugin-rxjs',
|
||||
'ban',
|
||||
'license-header'
|
||||
],
|
||||
rules: {
|
||||
'ban/ban': [
|
||||
'error',
|
||||
{ name: 'eval', message: 'Calls to eval is not allowed.' },
|
||||
{ name: 'fdescribe', message: 'Calls to fdescribe is not allowed' },
|
||||
{ name: 'fit', message: 'Calls to fit is not allowed' },
|
||||
{ name: 'xit', message: 'Calls to xit is not allowed' },
|
||||
{ name: 'xdescribe', message: 'Calls to xdescribe is not allowed' },
|
||||
{ name: ['test', 'only'], message: 'Calls to test.only is not allowed' },
|
||||
{ name: ['describe', 'only'], message: 'Calls to describe.only is not allowed' }
|
||||
],
|
||||
'@angular-eslint/component-selector': [
|
||||
'error',
|
||||
{
|
||||
type: 'element',
|
||||
prefix: [
|
||||
'adf',
|
||||
'app'
|
||||
root: true,
|
||||
ignorePatterns: [
|
||||
'projects/**/*',
|
||||
'**/node_modules/**/*',
|
||||
'lib/cli/node_modules/**/*',
|
||||
'**/node_modules',
|
||||
'**/docker',
|
||||
'**/assets',
|
||||
'**/scripts',
|
||||
'**/docs'
|
||||
],
|
||||
plugins: ['@nrwl/nx'],
|
||||
overrides: [
|
||||
{
|
||||
files: ['*.ts'],
|
||||
parserOptions: {
|
||||
project: ['tsconfig.json', 'e2e/tsconfig.e2e.json'],
|
||||
createDefaultProgram: true
|
||||
},
|
||||
extends: [
|
||||
'plugin:@nrwl/nx/typescript',
|
||||
'plugin:@nrwl/nx/angular',
|
||||
'plugin:@cspell/recommended',
|
||||
'plugin:@angular-eslint/ng-cli-compat',
|
||||
'plugin:@angular-eslint/ng-cli-compat--formatting-add-on',
|
||||
'plugin:@angular-eslint/template/process-inline-templates',
|
||||
'plugin:jsdoc/recommended-typescript-error'
|
||||
],
|
||||
style: 'kebab-case'
|
||||
}
|
||||
],
|
||||
'@angular-eslint/directive-selector': [
|
||||
'error',
|
||||
{
|
||||
type: [
|
||||
'element',
|
||||
'attribute'
|
||||
plugins: [
|
||||
'eslint-plugin-unicorn',
|
||||
'eslint-plugin-rxjs',
|
||||
'prettier',
|
||||
'ban',
|
||||
'license-header',
|
||||
'@cspell',
|
||||
'eslint-plugin-import',
|
||||
'@angular-eslint/eslint-plugin',
|
||||
'@typescript-eslint',
|
||||
'jsdoc'
|
||||
],
|
||||
prefix: [
|
||||
'adf',
|
||||
'app'
|
||||
],
|
||||
style: 'kebab-case'
|
||||
}
|
||||
],
|
||||
'@angular-eslint/no-host-metadata-property': 'off',
|
||||
'@angular-eslint/no-input-prefix': 'error',
|
||||
'@typescript-eslint/consistent-type-definitions': 'error',
|
||||
'@typescript-eslint/dot-notation': 'off',
|
||||
'@typescript-eslint/explicit-member-accessibility': [
|
||||
'off',
|
||||
{
|
||||
accessibility: 'explicit'
|
||||
}
|
||||
],
|
||||
'@typescript-eslint/no-inferrable-types': 'off',
|
||||
'@typescript-eslint/no-require-imports': 'off',
|
||||
'@typescript-eslint/no-var-requires': 'error',
|
||||
'@typescript-eslint/naming-convention': [
|
||||
'error',
|
||||
{
|
||||
selector: [
|
||||
'classProperty',
|
||||
'objectLiteralProperty',
|
||||
'typeProperty',
|
||||
'classMethod',
|
||||
'objectLiteralMethod',
|
||||
'typeMethod',
|
||||
'accessor',
|
||||
'enumMember'
|
||||
],
|
||||
format: null,
|
||||
modifiers: ['requiresQuotes']
|
||||
}
|
||||
],
|
||||
'@typescript-eslint/member-ordering': 'off',
|
||||
'prefer-arrow/prefer-arrow-functions': 'off',
|
||||
rules: {
|
||||
// Uncomment this to enable prettier checks as part of the ESLint
|
||||
// 'prettier/prettier': 'error',
|
||||
'ban/ban': [
|
||||
'error',
|
||||
{ name: 'eval', message: 'Calls to eval is not allowed.' },
|
||||
{ name: 'fdescribe', message: 'Calls to fdescribe is not allowed' },
|
||||
{ name: 'fit', message: 'Calls to fit is not allowed' },
|
||||
{ name: 'xit', message: 'Calls to xit is not allowed' },
|
||||
{ name: 'xdescribe', message: 'Calls to xdescribe is not allowed' },
|
||||
{ name: ['test', 'only'], message: 'Calls to test.only is not allowed' },
|
||||
{ name: ['describe', 'only'], message: 'Calls to describe.only is not allowed' }
|
||||
],
|
||||
'@angular-eslint/component-selector': [
|
||||
'error',
|
||||
{
|
||||
type: 'element',
|
||||
prefix: ['adf', 'app'],
|
||||
style: 'kebab-case'
|
||||
}
|
||||
],
|
||||
'@angular-eslint/directive-selector': [
|
||||
'error',
|
||||
{
|
||||
type: ['element', 'attribute'],
|
||||
prefix: ['adf', 'app'],
|
||||
style: 'kebab-case'
|
||||
}
|
||||
],
|
||||
'@angular-eslint/no-host-metadata-property': 'off',
|
||||
'@angular-eslint/no-input-prefix': 'error',
|
||||
'@typescript-eslint/consistent-type-definitions': 'error',
|
||||
'@typescript-eslint/dot-notation': 'off',
|
||||
'@typescript-eslint/explicit-member-accessibility': [
|
||||
'off',
|
||||
{
|
||||
accessibility: 'explicit'
|
||||
}
|
||||
],
|
||||
'@typescript-eslint/prefer-optional-chain': 'warn',
|
||||
'@typescript-eslint/no-inferrable-types': 'off',
|
||||
'@typescript-eslint/no-require-imports': 'off',
|
||||
'@typescript-eslint/no-var-requires': 'error',
|
||||
'@typescript-eslint/naming-convention': [
|
||||
'error',
|
||||
{
|
||||
selector: [
|
||||
'classProperty',
|
||||
'objectLiteralProperty',
|
||||
'typeProperty',
|
||||
'classMethod',
|
||||
'objectLiteralMethod',
|
||||
'typeMethod',
|
||||
'accessor',
|
||||
'enumMember'
|
||||
],
|
||||
format: null,
|
||||
modifiers: ['requiresQuotes']
|
||||
}
|
||||
],
|
||||
'@typescript-eslint/member-ordering': 'off',
|
||||
'prefer-arrow/prefer-arrow-functions': 'off',
|
||||
|
||||
'brace-style': [
|
||||
'error',
|
||||
'1tbs'
|
||||
],
|
||||
'comma-dangle': 'error',
|
||||
'default-case': 'error',
|
||||
'import/order': 'off',
|
||||
'max-len': [
|
||||
'error',
|
||||
{
|
||||
code: 240
|
||||
}
|
||||
],
|
||||
'no-bitwise': 'off',
|
||||
'no-console': [
|
||||
'error',
|
||||
{
|
||||
allow: [
|
||||
'warn',
|
||||
'dir',
|
||||
'timeLog',
|
||||
'assert',
|
||||
'clear',
|
||||
'count',
|
||||
'countReset',
|
||||
'group',
|
||||
'groupEnd',
|
||||
'table',
|
||||
'dirxml',
|
||||
'error',
|
||||
'groupCollapsed',
|
||||
'Console',
|
||||
'profile',
|
||||
'profileEnd',
|
||||
'timeStamp',
|
||||
'context'
|
||||
]
|
||||
}
|
||||
],
|
||||
'no-duplicate-imports': 'error',
|
||||
'no-multiple-empty-lines': 'error',
|
||||
'no-redeclare': 'error',
|
||||
'no-return-await': 'error',
|
||||
'rxjs/no-create': 'error',
|
||||
'rxjs/no-subject-unsubscribe': 'error',
|
||||
'rxjs/no-subject-value': 'error',
|
||||
'rxjs/no-unsafe-takeuntil': 'error',
|
||||
'unicorn/filename-case': 'error',
|
||||
'@typescript-eslint/no-unused-expressions': [
|
||||
'error',
|
||||
{
|
||||
allowShortCircuit: true,
|
||||
allowTernary: true
|
||||
}
|
||||
],
|
||||
'license-header/header': ['error',
|
||||
[
|
||||
'/*!',
|
||||
' * @license',
|
||||
' * Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.',
|
||||
' *',
|
||||
' * Licensed under the Apache License, Version 2.0 (the \"License\");',
|
||||
' * you may not use this file except in compliance with the License.',
|
||||
' * You may obtain a copy of the License at',
|
||||
' *',
|
||||
' * http://www.apache.org/licenses/LICENSE-2.0',
|
||||
' *',
|
||||
' * Unless required by applicable law or agreed to in writing, software',
|
||||
' * distributed under the License is distributed on an \"AS IS\" BASIS,',
|
||||
' * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.',
|
||||
' * See the License for the specific language governing permissions and',
|
||||
' * limitations under the License.',
|
||||
' */'
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
files: [
|
||||
'*.html'
|
||||
],
|
||||
extends: [
|
||||
'plugin:@angular-eslint/template/recommended'
|
||||
],
|
||||
rules: {}
|
||||
}
|
||||
]
|
||||
}
|
||||
'brace-style': 'off',
|
||||
'@typescript-eslint/brace-style': 'error',
|
||||
'comma-dangle': 'error',
|
||||
'default-case': 'error',
|
||||
'import/order': 'off',
|
||||
'max-len': [
|
||||
'error',
|
||||
{
|
||||
code: 240
|
||||
}
|
||||
],
|
||||
'no-bitwise': 'off',
|
||||
'no-console': [
|
||||
'error',
|
||||
{
|
||||
allow: [
|
||||
'warn',
|
||||
'dir',
|
||||
'timeLog',
|
||||
'assert',
|
||||
'clear',
|
||||
'count',
|
||||
'countReset',
|
||||
'group',
|
||||
'groupEnd',
|
||||
'table',
|
||||
'dirxml',
|
||||
'error',
|
||||
'groupCollapsed',
|
||||
'Console',
|
||||
'profile',
|
||||
'profileEnd',
|
||||
'timeStamp',
|
||||
'context'
|
||||
]
|
||||
}
|
||||
],
|
||||
'no-duplicate-imports': 'error',
|
||||
'no-multiple-empty-lines': 'error',
|
||||
'no-redeclare': 'error',
|
||||
'no-return-await': 'error',
|
||||
'rxjs/no-create': 'error',
|
||||
'rxjs/no-subject-unsubscribe': 'error',
|
||||
'rxjs/no-subject-value': 'error',
|
||||
'rxjs/no-unsafe-takeuntil': 'error',
|
||||
'unicorn/filename-case': 'error',
|
||||
'@typescript-eslint/no-unused-expressions': [
|
||||
'error',
|
||||
{
|
||||
allowShortCircuit: true,
|
||||
allowTernary: true
|
||||
}
|
||||
],
|
||||
'license-header/header': [
|
||||
'error',
|
||||
[
|
||||
'/*!',
|
||||
' * @license',
|
||||
' * Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.',
|
||||
' *',
|
||||
' * Licensed under the Apache License, Version 2.0 (the "License");',
|
||||
' * you may not use this file except in compliance with the License.',
|
||||
' * You may obtain a copy of the License at',
|
||||
' *',
|
||||
' * http://www.apache.org/licenses/LICENSE-2.0',
|
||||
' *',
|
||||
' * Unless required by applicable law or agreed to in writing, software',
|
||||
' * distributed under the License is distributed on an "AS IS" BASIS,',
|
||||
' * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.',
|
||||
' * See the License for the specific language governing permissions and',
|
||||
' * limitations under the License.',
|
||||
' */'
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
files: ['*.html'],
|
||||
extends: ['plugin:@angular-eslint/template/recommended'],
|
||||
rules: {}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
name: "CodeQL config"
|
||||
|
||||
paths-ignore:
|
||||
- 'e2e/resources/**/*.*'
|
||||
- 'docs/**/*.*'
|
||||
|
||||
@@ -3,9 +3,15 @@ name: "CodeQL"
|
||||
on:
|
||||
push:
|
||||
branches: [develop, master]
|
||||
paths-ignore:
|
||||
- 'e2e/resources/**/*.*'
|
||||
- 'docs/**/*.*'
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [develop]
|
||||
paths-ignore:
|
||||
- 'e2e/resources/**/*.*'
|
||||
- 'docs/**/*.*'
|
||||
schedule:
|
||||
- cron: '0 5 * * 0'
|
||||
|
||||
@@ -28,6 +34,7 @@ jobs:
|
||||
# Override language selection by uncommenting this and choosing your languages
|
||||
with:
|
||||
languages: javascript
|
||||
config-file: ./.github/codeql/codeql-config.yml
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
|
||||
@@ -0,0 +1,157 @@
|
||||
name: Release lib on branch
|
||||
run-name: Release lib on branch ${{ github.ref_name }}
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
dry-run-flag:
|
||||
description: 'enable dry-run on artifact push'
|
||||
required: false
|
||||
type: boolean
|
||||
default: true
|
||||
|
||||
env:
|
||||
BASE_REF: ${{ github.base_ref }}
|
||||
HEAD_REF: ${{ github.head_ref }}
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
GITHUB_BRANCH: ${{ github.ref_name }}
|
||||
GH_BUILD_DIR: ${{ github.workspace }}
|
||||
GH_COMMIT: ${{ github.sha }}
|
||||
BUILD_ID: ${{ github.run_id }}
|
||||
GH_RUN_NUMBER: ${{ github.run_attempt }}
|
||||
GH_BUILD_NUMBER: ${{ github.run_id }}
|
||||
JOB_ID: ${{ github.run_id }}
|
||||
PROXY_HOST_BPM: ${{ secrets.E2E_HOST }}
|
||||
E2E_IDENTITY_HOST_APA: ${{ secrets.E2E_IDENTITY_HOST_APA }}
|
||||
E2E_HOST_APA: ${{ secrets.E2E_HOST_APA }}
|
||||
E2E_HOST: ${{ secrets.E2E_HOST }}
|
||||
E2E_USERNAME: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
|
||||
E2E_PASSWORD: ${{ secrets.E2E_PASSWORD }}
|
||||
E2E_ADMIN_EMAIL_IDENTITY: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
|
||||
E2E_ADMIN_PASSWORD_IDENTITY: ${{ secrets.E2E_ADMIN_PASSWORD_IDENTITY }}
|
||||
#USERNAME_ADF: ${{ secrets.E2E_USERNAME }}
|
||||
USERNAME_ADF: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
|
||||
PASSWORD_ADF: ${{ secrets.E2E_PASSWORD }}
|
||||
URL_HOST_ADF: "http://localhost:4200"
|
||||
IDENTITY_ADMIN_EMAIL: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
|
||||
IDENTITY_ADMIN_PASSWORD: ${{ secrets.E2E_ADMIN_PASSWORD_IDENTITY }}
|
||||
AWS_S3_BUCKET_ACTIVITI_LICENSE: ${{ secrets.AWS_S3_BUCKET_ACTIVITI_LICENSE }}
|
||||
HOST_SSO: ${{ secrets.HOST_SSO }}
|
||||
LOG_LEVEL: "ERROR"
|
||||
E2E_LOG_LEVEL: "ERROR"
|
||||
E2E_MODELER_USERNAME: ${{ secrets.E2E_MODELER_USERNAME }}
|
||||
E2E_MODELER_PASSWORD: ${{ secrets.E2E_MODELER_PASSWORD }}
|
||||
EXTERNAL_ACS_HOST: ${{ secrets.EXTERNAL_ACS_HOST }}
|
||||
E2E_DEVOPS_USERNAME: ${{ secrets.E2E_DEVOPS_USERNAME }}
|
||||
E2E_DEVOPS_PASSWORD: ${{ secrets.E2E_DEVOPS_PASSWORD }}
|
||||
USERNAME_SUPER_ADMIN_ADF: ${{ secrets.USERNAME_SUPER_ADMIN_ADF }}
|
||||
PASSWORD_SUPER_ADMIN_ADF: ${{ secrets.PASSWORD_SUPER_ADMIN_ADF }}
|
||||
HR_USER: ${{ secrets.HR_USER }}
|
||||
HR_USER_PASSWORD: ${{ secrets.HR_USER_PASSWORD }}
|
||||
SMART_RUNNER_PATH: ".protractor-smartrunner"
|
||||
S3_DBP_PATH: ${{ secrets.S3_DBP_PATH }}
|
||||
S3_BUILD_BUCKET_SHORT_NAME: ${{ secrets.S3_BUILD_BUCKET_SHORT_NAME }}
|
||||
NODE_OPTIONS: "--max-old-space-size=5120"
|
||||
DOCKER_REPOSITORY_DOMAIN: ${{ secrets.DOCKER_REPOSITORY_DOMAIN }}
|
||||
DOCKER_REPOSITORY_USER: ${{ secrets.DOCKER_REPOSITORY_USER }}
|
||||
DOCKER_REPOSITORY_PASSWORD: ${{ secrets.DOCKER_REPOSITORY_PASSWORD }}
|
||||
DOCKER_REPOSITORY_STORYBOOK: "${{ secrets.DOCKER_REPOSITORY_DOMAIN }}/alfresco/storybook"
|
||||
DOCKER_REPOSITORY: "${{ secrets.DOCKER_REPOSITORY_DOMAIN }}/alfresco/demo-shell"
|
||||
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
|
||||
REPO_OWNER: "Alfresco"
|
||||
REPO_NAME: "alfresco-ng2-components"
|
||||
DEMO_SHELL_DIR: "./dist/demo-shell"
|
||||
STORYBOOK_DIR: "./dist/storybook/stories"
|
||||
BUILT_LIBS_DIR: "./dist/libs"
|
||||
NODE_MODULES_DIR: "./node_modules"
|
||||
SMART_RUNNER_DIRECTORY: ".protractor-smartrunner"
|
||||
SAVE_SCREENSHOT: true
|
||||
REDIRECT_URI: /
|
||||
BROWSER_RUN: false
|
||||
MAXINSTANCES: 2
|
||||
PLAYWRIGHT_WORKERS: 2
|
||||
PLAYWRIGHT_STORYBOOK_E2E_HOST: http://localhost
|
||||
PLAYWRIGHT_STORYBOOK_E2E_PORT: 4400
|
||||
|
||||
jobs:
|
||||
setup:
|
||||
timeout-minutes: 20
|
||||
name: "Setup"
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: set TAG_NPM BRANCH
|
||||
shell: bash
|
||||
run: |
|
||||
TAG_NPM="branch"
|
||||
echo "Set TAG with name: ${TAG_NPM}"
|
||||
echo "TAG_NPM=${TAG_NPM}" >> $GITHUB_ENV
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- uses: ./.github/actions/setup
|
||||
with:
|
||||
enable-cache: false
|
||||
enable-node-modules-cache: false
|
||||
- name: install
|
||||
run: |
|
||||
npm ci
|
||||
npx nx run cli:bundle
|
||||
npx nx run testing:bundle
|
||||
- uses: ./.github/actions/upload-node-modules-and-artifacts
|
||||
|
||||
release-npm:
|
||||
needs: [setup]
|
||||
timeout-minutes: 30
|
||||
runs-on: ubuntu-22.04
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- uses: ./.github/actions/setup
|
||||
with:
|
||||
enable-cache: false
|
||||
enable-node-modules-cache: false
|
||||
- id: set-dryrun
|
||||
uses: ./.github/actions/enable-dryrun
|
||||
with:
|
||||
dry-run-flag: ${{ inputs.dry-run-flag }}
|
||||
- uses: ./.github/actions/download-node-modules-and-artifacts
|
||||
- name: build libraries
|
||||
run: |
|
||||
set -u;
|
||||
./scripts/update-version.sh -gnu -nextalpha|| exit 1;
|
||||
npx nx affected:build $NX_CALCULATION_FLAGS --prod --exclude="demoshell" --skip-nx-cache
|
||||
npx nx affected $NX_CALCULATION_FLAGS --target=pretheme
|
||||
- uses: actions/setup-node@v3
|
||||
name: release libraries GH registry
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
registry-url: 'https://npm.pkg.github.com'
|
||||
scope: '@alfresco'
|
||||
- run: npx nx affected --target=npm-publish $NX_CALCULATION_FLAGS --tag=branch|| exit 1
|
||||
env:
|
||||
NODE_AUTH_TOKEN: ${{ secrets.PAT_WRITE_PKG }}
|
||||
- uses: actions/setup-node@v3
|
||||
name: release libraries Npm registry
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
registry-url: 'https://${{ vars.NPM_REGISTRY_ADDRESS }}'
|
||||
scope: '@alfresco'
|
||||
- run: npx nx affected --target=npm-publish $NX_CALCULATION_FLAGS --tag=branch || exit 1
|
||||
env:
|
||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_REGISTRY_TOKEN }}
|
||||
|
||||
npm-check-bundle:
|
||||
needs: [release-npm]
|
||||
timeout-minutes: 15
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
- uses: ./.github/actions/npm-check-bundle
|
||||
@@ -177,17 +177,6 @@ jobs:
|
||||
with:
|
||||
dry-run-flag: ${{ inputs.dry-run-flag }}
|
||||
- uses: ./.github/actions/download-node-modules-and-artifacts
|
||||
- name: check PR number
|
||||
id: action
|
||||
uses: kamatama41/get-pr-number-action@5c77b38a1b4974ebf8a9521a689f38a5898eadd6
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: save PR number
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
shell: bash
|
||||
run: |
|
||||
echo "PR_NUMBER=${{ steps.action.outputs.number }}" >> $GITHUB_ENV
|
||||
- name: build libraries
|
||||
run: |
|
||||
set -u;
|
||||
|
||||
@@ -210,16 +210,6 @@
|
||||
"demo-shell/**/*.html"
|
||||
]
|
||||
}
|
||||
},
|
||||
"spellcheck": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
"commands": [
|
||||
{
|
||||
"command": "npx cspell 'demo-shell/**/*.ts'"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -346,16 +336,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"spellcheck": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
"commands": [
|
||||
{
|
||||
"command": "npx cspell 'lib/core/**/*.ts'"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"stylelint": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
@@ -484,16 +464,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"spellcheck": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
"commands": [
|
||||
{
|
||||
"command": "npx cspell 'lib/content-services/**/*.ts'"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"stylelint": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
@@ -560,26 +530,6 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"spellcheck": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
"commands": [
|
||||
{
|
||||
"command": "npx cspell 'lib/process-services/**/*.ts'"
|
||||
}
|
||||
]
|
||||
},
|
||||
"stylelint": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
"commands": [
|
||||
{
|
||||
"command": "npx stylelint lib/process-services/**/*.scss --config stylelint-config.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"stylelint": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
@@ -699,16 +649,6 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"spellcheck": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
"commands": [
|
||||
{
|
||||
"command": "npx cspell 'lib/process-services-cloud/**/*.ts'"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"stylelint": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
@@ -775,16 +715,6 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"spellcheck": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
"commands": [
|
||||
{
|
||||
"command": "npx cspell 'lib/insights/**/*.ts'"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"stylelint": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
@@ -848,17 +778,6 @@
|
||||
"lib/extensions/**/*.ts",
|
||||
"lib/extensions/**/*.html"
|
||||
]
|
||||
},
|
||||
"dependsOn": ["spellcheck"]
|
||||
},
|
||||
"spellcheck": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
"commands": [
|
||||
{
|
||||
"command": "npx cspell 'lib/extensions/**/*.ts'"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"npm-publish": {
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"docx",
|
||||
"dropdownrestprocess",
|
||||
"Droppable",
|
||||
"dryrun",
|
||||
"ECMBPM",
|
||||
"ECMHOST",
|
||||
"Examinate",
|
||||
@@ -125,6 +126,7 @@
|
||||
"typeahed",
|
||||
"uncheck",
|
||||
"Unclaim",
|
||||
"Undeployed",
|
||||
"unfavorite",
|
||||
"unlisten",
|
||||
"unshare",
|
||||
|
||||
+71
-93
@@ -1,95 +1,73 @@
|
||||
path = require('path');
|
||||
module.exports = {
|
||||
extends: '../.eslintrc.js',
|
||||
ignorePatterns: [
|
||||
'!**/*'
|
||||
],
|
||||
overrides: [
|
||||
{
|
||||
files: [
|
||||
'*.ts'
|
||||
],
|
||||
parserOptions: {
|
||||
project: [
|
||||
path.join(__dirname, 'tsconfig.app.json'),
|
||||
path.join(__dirname, 'src/tsconfig.spec.json'),
|
||||
path.join(__dirname, 'e2e/tsconfig.e2e.json')
|
||||
],
|
||||
createDefaultProgram: true
|
||||
},
|
||||
plugins: [
|
||||
'eslint-plugin-unicorn',
|
||||
'eslint-plugin-rxjs'
|
||||
],
|
||||
rules: {
|
||||
'@angular-eslint/component-selector': [
|
||||
'error',
|
||||
{
|
||||
type: 'element',
|
||||
prefix: [
|
||||
'adf',
|
||||
'app'
|
||||
],
|
||||
style: 'kebab-case'
|
||||
}
|
||||
],
|
||||
'@angular-eslint/directive-selector': [
|
||||
'error',
|
||||
{
|
||||
type: [
|
||||
'element',
|
||||
'attribute'
|
||||
],
|
||||
prefix: [
|
||||
'adf',
|
||||
'app'
|
||||
],
|
||||
style: 'kebab-case'
|
||||
}
|
||||
],
|
||||
'@angular-eslint/no-host-metadata-property': 'off',
|
||||
'@angular-eslint/no-input-prefix': 'error',
|
||||
'@typescript-eslint/consistent-type-definitions': 'error',
|
||||
'@typescript-eslint/dot-notation': 'off',
|
||||
'@typescript-eslint/explicit-member-accessibility': [
|
||||
'off',
|
||||
{
|
||||
accessibility: 'explicit'
|
||||
}
|
||||
],
|
||||
'@typescript-eslint/no-inferrable-types': 'off',
|
||||
'@typescript-eslint/no-require-imports': 'off',
|
||||
'@typescript-eslint/no-var-requires': 'error',
|
||||
'brace-style': [
|
||||
'error',
|
||||
'1tbs'
|
||||
],
|
||||
'comma-dangle': 'error',
|
||||
'default-case': 'error',
|
||||
'import/order': 'off',
|
||||
'max-len': [
|
||||
'error',
|
||||
{
|
||||
code: 240
|
||||
}
|
||||
],
|
||||
'no-bitwise': 'off',
|
||||
'no-duplicate-imports': 'error',
|
||||
'no-multiple-empty-lines': 'error',
|
||||
'no-redeclare': 'error',
|
||||
'no-return-await': 'error',
|
||||
'rxjs/no-create': 'error',
|
||||
'rxjs/no-subject-unsubscribe': 'error',
|
||||
'rxjs/no-subject-value': 'error',
|
||||
'rxjs/no-unsafe-takeuntil': 'error',
|
||||
'unicorn/filename-case': 'error'
|
||||
}
|
||||
},
|
||||
{
|
||||
files: [
|
||||
'*.html'
|
||||
],
|
||||
rules: {}
|
||||
}
|
||||
]
|
||||
}
|
||||
extends: '../.eslintrc.js',
|
||||
ignorePatterns: ['!**/*'],
|
||||
overrides: [
|
||||
{
|
||||
files: ['*.ts'],
|
||||
parserOptions: {
|
||||
project: [
|
||||
path.join(__dirname, 'tsconfig.app.json'),
|
||||
path.join(__dirname, 'src/tsconfig.spec.json'),
|
||||
path.join(__dirname, 'e2e/tsconfig.e2e.json')
|
||||
],
|
||||
createDefaultProgram: true
|
||||
},
|
||||
plugins: ['eslint-plugin-unicorn', 'eslint-plugin-rxjs'],
|
||||
rules: {
|
||||
'@angular-eslint/component-selector': [
|
||||
'error',
|
||||
{
|
||||
type: 'element',
|
||||
prefix: ['adf', 'app'],
|
||||
style: 'kebab-case'
|
||||
}
|
||||
],
|
||||
'@angular-eslint/directive-selector': [
|
||||
'error',
|
||||
{
|
||||
type: ['element', 'attribute'],
|
||||
prefix: ['adf', 'app'],
|
||||
style: 'kebab-case'
|
||||
}
|
||||
],
|
||||
'@angular-eslint/no-host-metadata-property': 'off',
|
||||
'@angular-eslint/no-input-prefix': 'error',
|
||||
'@typescript-eslint/consistent-type-definitions': 'error',
|
||||
'@typescript-eslint/dot-notation': 'off',
|
||||
'@typescript-eslint/explicit-member-accessibility': [
|
||||
'off',
|
||||
{
|
||||
accessibility: 'explicit'
|
||||
}
|
||||
],
|
||||
'@typescript-eslint/no-inferrable-types': 'off',
|
||||
'@typescript-eslint/no-require-imports': 'off',
|
||||
'@typescript-eslint/no-var-requires': 'error',
|
||||
'comma-dangle': 'error',
|
||||
'default-case': 'error',
|
||||
'import/order': 'off',
|
||||
'max-len': [
|
||||
'error',
|
||||
{
|
||||
code: 240
|
||||
}
|
||||
],
|
||||
'no-bitwise': 'off',
|
||||
'no-duplicate-imports': 'error',
|
||||
'no-multiple-empty-lines': 'error',
|
||||
'no-redeclare': 'error',
|
||||
'no-return-await': 'error',
|
||||
'rxjs/no-create': 'error',
|
||||
'rxjs/no-subject-unsubscribe': 'error',
|
||||
'rxjs/no-subject-value': 'error',
|
||||
'rxjs/no-unsafe-takeuntil': 'error',
|
||||
'unicorn/filename-case': 'error'
|
||||
}
|
||||
},
|
||||
{
|
||||
files: ['*.html'],
|
||||
rules: {}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
@@ -1,77 +0,0 @@
|
||||
var port = process.env.PORT || 3000,
|
||||
http = require('http'),
|
||||
fs = require('fs'),
|
||||
url = require('url'),
|
||||
mime = require('mime'),
|
||||
html = fs.readFileSync('index.html');
|
||||
|
||||
var log = function(entry) {
|
||||
fs.appendFileSync('/tmp/sample-app.log', new Date().toISOString() + ' - ' + entry + '\n');
|
||||
};
|
||||
|
||||
var server = http.createServer(function (req, res) {
|
||||
|
||||
// Parse the request containing file name
|
||||
var pathname = url.parse(req.url).pathname;
|
||||
|
||||
// Print the name of the file for which request is made.
|
||||
console.log("Request for " + pathname + " received.");
|
||||
|
||||
if (req.method === 'POST') {
|
||||
var body = '';
|
||||
|
||||
req.on('data', function(chunk) {
|
||||
body += chunk;
|
||||
});
|
||||
|
||||
req.on('end', function() {
|
||||
if (req.url === '/') {
|
||||
log('Received message: ' + body);
|
||||
} else if (req.url === '/scheduled') {
|
||||
log('Received task ' + req.headers['x-aws-sqsd-taskname'] + ' scheduled at ' + req.headers['x-aws-sqsd-scheduled-at']);
|
||||
}
|
||||
|
||||
res.writeHead(200, 'OK', {'Content-Type': 'text/plain'});
|
||||
res.end();
|
||||
});
|
||||
} else {
|
||||
var filename = pathname.substr(1);
|
||||
if(filename === '' || filename.indexOf('.') === -1){
|
||||
filename = 'index.html';
|
||||
}
|
||||
// Read the requested file content from file system
|
||||
fs.readFile(filename, function (err, data) {
|
||||
if (err) {
|
||||
console.log(err, filename);
|
||||
// HTTP Status: 404 : NOT FOUND
|
||||
// Content Type: text/plain
|
||||
res.writeHead(404, {'Content-Type': 'text/html'});
|
||||
}else{
|
||||
//Page found
|
||||
// HTTP Status: 200 : OK
|
||||
// Content Type: text/plain
|
||||
var type = mime.lookup(filename);
|
||||
console.log('type',type);
|
||||
if (!res.getHeader('content-type')) {
|
||||
var charset = mime.charsets.lookup(type);
|
||||
res.setHeader('Content-Type', type + (charset ? '; charset=' + charset : ''));
|
||||
}
|
||||
if(type.indexOf('image') > -1 || type.indexOf('font') > -1){
|
||||
var img = fs.readFileSync(pathname.substr(1));
|
||||
res.end(img, 'binary');
|
||||
}else{
|
||||
res.write(data.toString());
|
||||
}
|
||||
// Write the content of the file to response body
|
||||
}
|
||||
// Send the response body
|
||||
res.end();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Listen on port 3000, IP defaults to 127.0.0.1
|
||||
server.listen(port);
|
||||
|
||||
// Put a friendly message on the terminal
|
||||
console.log('Server running at http://127.0.0.1:' + port + '/');
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "Alfresco-ADF-Angular-Demo",
|
||||
"description": "Demo shell for Alfresco Angular components",
|
||||
"version": "6.2.0",
|
||||
"version": "6.3.0",
|
||||
"author": "Hyland Software, Inc. and its affiliates",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"title": "مرحبًا",
|
||||
"NOTIFICATIONS": {
|
||||
"TASK_ASSIGNED": "تم تعيين المهمة {{taskName}} إلى {{assignee}}",
|
||||
"PROCESS_STARTED": "تم بدء عملية {{processName}}",
|
||||
"TASK_UPDATED": "تم تحديث تفاصيل مهمة {{taskName}}",
|
||||
"TASK_CREATED": "تم إنشاء المهمة {{TaskName}}"
|
||||
},
|
||||
"SEARCH": {
|
||||
"RESULTS": "نتائج البحث",
|
||||
"NO_RESULT": "لم يتم العثور على نتائج",
|
||||
"FACET_FIELDS": {
|
||||
"TYPE": "1:النوع",
|
||||
"SIZE": "2:الحجم",
|
||||
"CREATOR": "3:المُنشئ",
|
||||
"MODIFIER": "4:المُعدل",
|
||||
"CREATED": "5:تم الإنشاء"
|
||||
},
|
||||
"FACET_QUERIES": {
|
||||
"MY_FACET_QUERIES": "استعلامات واجهتي",
|
||||
"CREATED_THIS_YEAR": "1.تم الإنشاء هذا العام",
|
||||
"MIMETYPE": "2.النوع: HTML",
|
||||
"XTRASMALL": "3.الحجم: فائق الصغر",
|
||||
"SMALL": "4.الحجم: صغير",
|
||||
"MEDIUM": "5.الحجم: متوسط",
|
||||
"LARGE": "6.الحجم: كبير",
|
||||
"XTRALARGE": "7.الحجم: فائق الكبر",
|
||||
"XXTRALARGE": "8.الحجم: كبير XX"
|
||||
}
|
||||
},
|
||||
"GROUP-TITLE1-TRANSLATION-KEY": "الترجمة الأولى للعنوان المخصص",
|
||||
"GROUP-TITLE2-TRANSLATION-KEY": "الترجمة الثانية للعنوان المخصص",
|
||||
"ERROR_CONTENT": {
|
||||
"507": {
|
||||
"TITLE": "قرص ACS ممتلئ",
|
||||
"DESCRIPTION": "يتجاوز المحتوى حد سعة التخزين المكون للشبكة أو النظام"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"title": "Vítejte",
|
||||
"NOTIFICATIONS": {
|
||||
"TASK_ASSIGNED": "Úkol {{taskName}} byl přiřazen uživateli {{assignee}}",
|
||||
"PROCESS_STARTED": "Byl spuštěn proces {{processName}}",
|
||||
"TASK_UPDATED": "Byly aktualizovány podrobnosti úkolu {{taskName}}",
|
||||
"TASK_CREATED": "Úkol {{taskName}} byl vytvořen"
|
||||
},
|
||||
"SEARCH": {
|
||||
"RESULTS": "Výsledky hledání",
|
||||
"NO_RESULT": "Nebyly nalezeny žádné výsledky",
|
||||
"FACET_FIELDS": {
|
||||
"TYPE": "1:Typ",
|
||||
"SIZE": "2:Velikost",
|
||||
"CREATOR": "3:Autor",
|
||||
"MODIFIER": "4:Upravil(a)",
|
||||
"CREATED": "5:Vytvořeno"
|
||||
},
|
||||
"FACET_QUERIES": {
|
||||
"MY_FACET_QUERIES": "Moje dotazy na aspekty",
|
||||
"CREATED_THIS_YEAR": "1.Vytvořeno tento rok",
|
||||
"MIMETYPE": "2.Typ: HTML",
|
||||
"XTRASMALL": "3.Velikost: extra malé",
|
||||
"SMALL": "4.Velikost: malé",
|
||||
"MEDIUM": "5.Velikost: střední",
|
||||
"LARGE": "6.Velikost: velké",
|
||||
"XTRALARGE": "7.Velikost: extra velké",
|
||||
"XXTRALARGE": "8.Velikost: XX velké"
|
||||
}
|
||||
},
|
||||
"GROUP-TITLE1-TRANSLATION-KEY": "Vlastní překlad názvu 1",
|
||||
"GROUP-TITLE2-TRANSLATION-KEY": "Vlastní překlad názvu 2",
|
||||
"ERROR_CONTENT": {
|
||||
"507": {
|
||||
"TITLE": "Disk ACS plný",
|
||||
"DESCRIPTION": "Obsah přesahuje celkovou kvótu úložiště nastavenou pro síť nebo systém"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"title": "Velkommen",
|
||||
"NOTIFICATIONS": {
|
||||
"TASK_ASSIGNED": "{{taskName}} opgave er blevet tildelt til {{assignee}}",
|
||||
"PROCESS_STARTED": "{{processName}} processen er startet",
|
||||
"TASK_UPDATED": "{{taskName}} opgavedetaljer er blevet opdateret",
|
||||
"TASK_CREATED": "Opgaven {{taskName}} blev oprettet"
|
||||
},
|
||||
"SEARCH": {
|
||||
"RESULTS": "Søgeresultater",
|
||||
"NO_RESULT": "Der blev ikke fundet nogen resultater",
|
||||
"FACET_FIELDS": {
|
||||
"TYPE": "1: Type",
|
||||
"SIZE": "2: Størrelse",
|
||||
"CREATOR": "3: Opretter",
|
||||
"MODIFIER": "4: Modifikator",
|
||||
"CREATED": "5: Oprettet"
|
||||
},
|
||||
"FACET_QUERIES": {
|
||||
"MY_FACET_QUERIES": "Mine facetforespørgsler",
|
||||
"CREATED_THIS_YEAR": "1. Oprettet i år",
|
||||
"MIMETYPE": "2. Type: HTML",
|
||||
"XTRASMALL": "3. Størrelse: xtra small",
|
||||
"SMALL": "4. Størrelse: small",
|
||||
"MEDIUM": "5. Størrelse: medium",
|
||||
"LARGE": "6. Størrelse: large",
|
||||
"XTRALARGE": "7. Størrelse: xtra large",
|
||||
"XXTRALARGE": "8. Størrelse: XX large"
|
||||
}
|
||||
},
|
||||
"GROUP-TITLE1-TRANSLATION-KEY": "Brugerdefineret titel oversættelse et",
|
||||
"GROUP-TITLE2-TRANSLATION-KEY": "Brugerdefineret titel oversættelse to",
|
||||
"ERROR_CONTENT": {
|
||||
"507": {
|
||||
"TITLE": "ACS-disken er fuld",
|
||||
"DESCRIPTION": "Indholdet overskrider den generelle lagerkvotegrænse, der er konfigureret for netværket eller systemet"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"title": "Willkommen",
|
||||
"NOTIFICATIONS": {
|
||||
"TASK_ASSIGNED": "Aufgabe '{{taskName}}' wurde {{assignee}} zugewiesen",
|
||||
"PROCESS_STARTED": "Prozess '{{processName}}' wurde gestartet",
|
||||
"TASK_UPDATED": "Aufgabe '{{taskName}}' wurde aktualisiert",
|
||||
"TASK_CREATED": "Die Aufgabe {{taskName}} wurde erstellt"
|
||||
},
|
||||
"SEARCH": {
|
||||
"RESULTS": "Ergebnisse durchsuchen",
|
||||
"NO_RESULT": "Keine Ergebnisse gefunden",
|
||||
"FACET_FIELDS": {
|
||||
"TYPE": "1:Typ",
|
||||
"SIZE": "2:Größe",
|
||||
"CREATOR": "3:Erstellt von",
|
||||
"MODIFIER": "4:Bearbeitet von",
|
||||
"CREATED": "5:Erstellt am"
|
||||
},
|
||||
"FACET_QUERIES": {
|
||||
"MY_FACET_QUERIES": "Meine Facet-Abfragen",
|
||||
"CREATED_THIS_YEAR": "1.Dieses Jahr erstellt",
|
||||
"MIMETYPE": "2.Typ: HTML",
|
||||
"XTRASMALL": "3.Größe: sehr klein",
|
||||
"SMALL": "4.Größe: klein",
|
||||
"MEDIUM": "5.Größe: mittel",
|
||||
"LARGE": "6.Größe: groß",
|
||||
"XTRALARGE": "7.Größe: sehr groß",
|
||||
"XXTRALARGE": "8.Größe: extrem groß"
|
||||
}
|
||||
},
|
||||
"GROUP-TITLE1-TRANSLATION-KEY": "Übersetzung benutzerdefinierter Titel 1",
|
||||
"GROUP-TITLE2-TRANSLATION-KEY": "Übersetzung benutzerdefinierter Titel 2",
|
||||
"ERROR_CONTENT": {
|
||||
"507": {
|
||||
"TITLE": "ACS-Datenträger voll",
|
||||
"DESCRIPTION": "Inhalt übersteigt die für das Netzwerk oder System konfigurierte Gesamtspeicherbegrenzung"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"title": "Bienvenido",
|
||||
"NOTIFICATIONS": {
|
||||
"TASK_ASSIGNED": "La tarea {{taskName}} ha sido asignada a {{assignee}}",
|
||||
"PROCESS_STARTED": "Se ha iniciado el proceso {{processName}}",
|
||||
"TASK_UPDATED": "Se actualizaron los detalles de la tarea {{taskName}}",
|
||||
"TASK_CREATED": "Se ha creado la tarea {{taskName}}"
|
||||
},
|
||||
"SEARCH": {
|
||||
"RESULTS": "Resultados de la búsqueda",
|
||||
"NO_RESULT": "Ningún resultado encontrado",
|
||||
"FACET_FIELDS": {
|
||||
"TYPE": "1:Tipo",
|
||||
"SIZE": "2:Tamaño",
|
||||
"CREATOR": "3:Creador",
|
||||
"MODIFIER": "4:Modificador",
|
||||
"CREATED": "5:Creados"
|
||||
},
|
||||
"FACET_QUERIES": {
|
||||
"MY_FACET_QUERIES": "Mis consultas por filtros",
|
||||
"CREATED_THIS_YEAR": "1.Creadas este año",
|
||||
"MIMETYPE": "2.Tipo: HTML",
|
||||
"XTRASMALL": "3.Tamaño: extrapequeño",
|
||||
"SMALL": "4.Tamaño: pequeño",
|
||||
"MEDIUM": "5.Tamaño: mediano",
|
||||
"LARGE": "6.Tamaño: grande",
|
||||
"XTRALARGE": "7.Tamaño: extragrande",
|
||||
"XXTRALARGE": "8.Tamaño: extraextragrande"
|
||||
}
|
||||
},
|
||||
"GROUP-TITLE1-TRANSLATION-KEY": "Traducción de título personalizado 1",
|
||||
"GROUP-TITLE2-TRANSLATION-KEY": "Traducción de título personalizado 2",
|
||||
"ERROR_CONTENT": {
|
||||
"507": {
|
||||
"TITLE": "Disco ACS lleno",
|
||||
"DESCRIPTION": "El contenido supera el límite de la cuota de almacenamiento general configurado para la red o sistema."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"title": "Tervetuloa",
|
||||
"NOTIFICATIONS": {
|
||||
"TASK_ASSIGNED": "{{taskName}} -tehtävä on määritetty käyttäjälle {{assignee}}",
|
||||
"PROCESS_STARTED": "{{processName}} -prosessi on käynnistetty",
|
||||
"TASK_UPDATED": "{{taskName}} -tehtävän tiedot on päivitetty",
|
||||
"TASK_CREATED": "{{taskName}} -tehtävä luotiin"
|
||||
},
|
||||
"SEARCH": {
|
||||
"RESULTS": "Hakutulokset",
|
||||
"NO_RESULT": "Tuloksia ei löydy",
|
||||
"FACET_FIELDS": {
|
||||
"TYPE": "1: tyyppi",
|
||||
"SIZE": "2: koko",
|
||||
"CREATOR": "3: tekijä",
|
||||
"MODIFIER": "4: muokkaaja",
|
||||
"CREATED": "5: luotu"
|
||||
},
|
||||
"FACET_QUERIES": {
|
||||
"MY_FACET_QUERIES": "Omat kyselyt",
|
||||
"CREATED_THIS_YEAR": "1. Luotu tänä vuonna",
|
||||
"MIMETYPE": "2. Tyyppi: HTML",
|
||||
"XTRASMALL": "3. Koko: XS",
|
||||
"SMALL": "4. Koko: S",
|
||||
"MEDIUM": "5. Koko: M",
|
||||
"LARGE": "6. Koko: L",
|
||||
"XTRALARGE": "7. Koko: XL",
|
||||
"XXTRALARGE": "8. Koko: XXL"
|
||||
}
|
||||
},
|
||||
"GROUP-TITLE1-TRANSLATION-KEY": "Oma otsikkokäännös yksi",
|
||||
"GROUP-TITLE2-TRANSLATION-KEY": "Oma otsikkokäännös kaksi",
|
||||
"ERROR_CONTENT": {
|
||||
"507": {
|
||||
"TITLE": "ACS-levy täynnä",
|
||||
"DESCRIPTION": "Sisältö ylittää verkolle tai järjestelmälle määritetyn tallennustilan kokonaisrajoituksen"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"title": "Bienvenue",
|
||||
"NOTIFICATIONS": {
|
||||
"TASK_ASSIGNED": "La tâche {{taskName}} a été assignée à {{assignee}}",
|
||||
"PROCESS_STARTED": "Le processus {{processName}} a été démarré",
|
||||
"TASK_UPDATED": "Les détails de la tâche {{taskName}} ont été mis à jour",
|
||||
"TASK_CREATED": "{{taskName}} tâche a été créée"
|
||||
},
|
||||
"SEARCH": {
|
||||
"RESULTS": "Résultats de la recherche",
|
||||
"NO_RESULT": "Aucun résultat trouvé",
|
||||
"FACET_FIELDS": {
|
||||
"TYPE": "1:Type",
|
||||
"SIZE": "2:Taille",
|
||||
"CREATOR": "3:Créateur",
|
||||
"MODIFIER": "4:Modificateur",
|
||||
"CREATED": "5:Créé"
|
||||
},
|
||||
"FACET_QUERIES": {
|
||||
"MY_FACET_QUERIES": "Mes recherches avec filtre",
|
||||
"CREATED_THIS_YEAR": "1.Créé cette année",
|
||||
"MIMETYPE": "2.Type : HTML",
|
||||
"XTRASMALL": "3.Taille : très petit",
|
||||
"SMALL": "4.Taille : petit",
|
||||
"MEDIUM": "5.Taille : moyen",
|
||||
"LARGE": "6.Taille : gros",
|
||||
"XTRALARGE": "7.Taille : très gros",
|
||||
"XXTRALARGE": "8.Taille : énorme"
|
||||
}
|
||||
},
|
||||
"GROUP-TITLE1-TRANSLATION-KEY": "Titre personnalisé traduction un",
|
||||
"GROUP-TITLE2-TRANSLATION-KEY": "Titre personnalisé traduction deux",
|
||||
"ERROR_CONTENT": {
|
||||
"507": {
|
||||
"TITLE": "Disque ACS plein",
|
||||
"DESCRIPTION": "Le contenu dépasse le quota maximum de stockage configuré pour le réseau ou système"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"title": "Benvenuto",
|
||||
"NOTIFICATIONS": {
|
||||
"TASK_ASSIGNED": "Il compito {{taskName}} è stato assegnato a {{assignee}}",
|
||||
"PROCESS_STARTED": "Il processo {{processName}} è stato avviato",
|
||||
"TASK_UPDATED": "I dettagli del compito {{taskName}} sono stati aggiornati",
|
||||
"TASK_CREATED": "Il compito {{taskName}} è stato creato"
|
||||
},
|
||||
"SEARCH": {
|
||||
"RESULTS": "Risultati della ricerca",
|
||||
"NO_RESULT": "Nessun risultato trovato",
|
||||
"FACET_FIELDS": {
|
||||
"TYPE": "1. Tipo",
|
||||
"SIZE": "2. Dimensioni",
|
||||
"CREATOR": "3. Autore",
|
||||
"MODIFIER": "4. Modificatore",
|
||||
"CREATED": "5. Creati"
|
||||
},
|
||||
"FACET_QUERIES": {
|
||||
"MY_FACET_QUERIES": "Le mie query filtri",
|
||||
"CREATED_THIS_YEAR": "1. Creati quest'anno",
|
||||
"MIMETYPE": "2.Tipo: HTML",
|
||||
"XTRASMALL": "3. Dimensioni: extra piccolo",
|
||||
"SMALL": "4. Dimensioni: piccolo",
|
||||
"MEDIUM": "5. Dimensioni: medio",
|
||||
"LARGE": "6. Dimensioni: grande",
|
||||
"XTRALARGE": "7. Dimensioni: extra grande",
|
||||
"XXTRALARGE": "8. Dimensioni: extra extra grande"
|
||||
}
|
||||
},
|
||||
"GROUP-TITLE1-TRANSLATION-KEY": "Custom Title Translation One",
|
||||
"GROUP-TITLE2-TRANSLATION-KEY": "Custom Title Translation Two",
|
||||
"ERROR_CONTENT": {
|
||||
"507": {
|
||||
"TITLE": "Dico ACS pieno",
|
||||
"DESCRIPTION": "Il contenuto supera il limite di archiviazione complessivo configurato per la rete o il sistema"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"title": "ようこそ",
|
||||
"NOTIFICATIONS": {
|
||||
"TASK_ASSIGNED": "{{taskName}}タスクが{{assignee}}に割り当てられました",
|
||||
"PROCESS_STARTED": "{{processName}}プロセスが開始しました",
|
||||
"TASK_UPDATED": "{{taskName}}タスクの詳細が更新されました",
|
||||
"TASK_CREATED": "{{taskName}}タスクが作成されました"
|
||||
},
|
||||
"SEARCH": {
|
||||
"RESULTS": "検索結果",
|
||||
"NO_RESULT": "一致するアイテムはありません",
|
||||
"FACET_FIELDS": {
|
||||
"TYPE": "1:タイプ",
|
||||
"SIZE": "2:サイズ",
|
||||
"CREATOR": "3:作成者",
|
||||
"MODIFIER": "4:変更者",
|
||||
"CREATED": "5:作成日"
|
||||
},
|
||||
"FACET_QUERIES": {
|
||||
"MY_FACET_QUERIES": "あなたのファセットクエリ",
|
||||
"CREATED_THIS_YEAR": "1.今年作成",
|
||||
"MIMETYPE": "2.タイプ: HTML",
|
||||
"XTRASMALL": "3.サイズ: 極小",
|
||||
"SMALL": "4.サイズ: 小",
|
||||
"MEDIUM": "5.サイズ: 中",
|
||||
"LARGE": "6.サイズ: 大",
|
||||
"XTRALARGE": "7.サイズ: 特大",
|
||||
"XXTRALARGE": "8.サイズ: 超特大"
|
||||
}
|
||||
},
|
||||
"GROUP-TITLE1-TRANSLATION-KEY": "カスタムのタイトル翻訳 1",
|
||||
"GROUP-TITLE2-TRANSLATION-KEY": "カスタムのタイトル翻訳 2",
|
||||
"ERROR_CONTENT": {
|
||||
"507": {
|
||||
"TITLE": "ACS のディスクがいっぱいです",
|
||||
"DESCRIPTION": "コンテンツのサイズが、ネットワークまたはシステムに設定されているストレージクォータの上限を超えています。"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"title": "Velkommen",
|
||||
"NOTIFICATIONS": {
|
||||
"TASK_ASSIGNED": "{{taskName}}-oppgaven er tilordnet til {{assignee}}",
|
||||
"PROCESS_STARTED": "{{processName}}-prosessen er startet",
|
||||
"TASK_UPDATED": "{{taskName}}-oppgavedetaljene er oppdatert",
|
||||
"TASK_CREATED": "Oppgaven {{taskName}} ble opprettet"
|
||||
},
|
||||
"SEARCH": {
|
||||
"RESULTS": "Søkeresultater",
|
||||
"NO_RESULT": "Ingen resultater funnet",
|
||||
"FACET_FIELDS": {
|
||||
"TYPE": "1:Type",
|
||||
"SIZE": "2:Størrelse",
|
||||
"CREATOR": "3:Oppretter",
|
||||
"MODIFIER": "4:Modifikator",
|
||||
"CREATED": "5:Opprettet"
|
||||
},
|
||||
"FACET_QUERIES": {
|
||||
"MY_FACET_QUERIES": "Mine egenskapsspørringer",
|
||||
"CREATED_THIS_YEAR": "1.Opprettet i år",
|
||||
"MIMETYPE": "2.Type: HTML",
|
||||
"XTRASMALL": "3.Størrelse: xtra small",
|
||||
"SMALL": "4.Størrelse: small",
|
||||
"MEDIUM": "5.Størrelse: medium",
|
||||
"LARGE": "6.Størrelse: large",
|
||||
"XTRALARGE": "7.Størrelse: xtra large",
|
||||
"XXTRALARGE": "8.Størrelse: XX large"
|
||||
}
|
||||
},
|
||||
"GROUP-TITLE1-TRANSLATION-KEY": "Egendefinert tittel, oversettelse én",
|
||||
"GROUP-TITLE2-TRANSLATION-KEY": "Egendefinert tittel, oversettelse to",
|
||||
"ERROR_CONTENT": {
|
||||
"507": {
|
||||
"TITLE": "ACS-disk er full",
|
||||
"DESCRIPTION": "Innhold overgår samlet lagringskvotegrense konfigurert for nettverket eller systemet"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"title": "Welkom",
|
||||
"NOTIFICATIONS": {
|
||||
"TASK_ASSIGNED": "{{taskName}}-taak is toegewezen aan {{assignee}}",
|
||||
"PROCESS_STARTED": "{{processName}}-proces is gestart",
|
||||
"TASK_UPDATED": "{{taskName}}-taakdetails zijn bijgewerkt",
|
||||
"TASK_CREATED": "Taak {{taskName}} is gemaakt"
|
||||
},
|
||||
"SEARCH": {
|
||||
"RESULTS": "Zoekresultaten",
|
||||
"NO_RESULT": "Geen resultaten gevonden",
|
||||
"FACET_FIELDS": {
|
||||
"TYPE": "1:Type",
|
||||
"SIZE": "2:Grootte",
|
||||
"CREATOR": "3:Maker",
|
||||
"MODIFIER": "4:Gewijzigd door",
|
||||
"CREATED": "5:Gemaakt"
|
||||
},
|
||||
"FACET_QUERIES": {
|
||||
"MY_FACET_QUERIES": "Mijn facetquery's",
|
||||
"CREATED_THIS_YEAR": "1.Dit jaar gemaakt",
|
||||
"MIMETYPE": "2.Type: HTML",
|
||||
"XTRASMALL": "3.Grootte: extra klein",
|
||||
"SMALL": "4.Grootte: klein",
|
||||
"MEDIUM": "5.Grootte: middelgroot",
|
||||
"LARGE": "6.Grootte: groot",
|
||||
"XTRALARGE": "7.Grootte: extra groot",
|
||||
"XXTRALARGE": "8.Grootte: XX groot"
|
||||
}
|
||||
},
|
||||
"GROUP-TITLE1-TRANSLATION-KEY": "Aangepaste titel vertaling één",
|
||||
"GROUP-TITLE2-TRANSLATION-KEY": "Aangepaste titel vertaling twee",
|
||||
"ERROR_CONTENT": {
|
||||
"507": {
|
||||
"TITLE": "ACS-schijf vol",
|
||||
"DESCRIPTION": "Content overschrijdt de totale opslaglimiet die is geconfigureerd voor het netwerk of systeem"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"title": "Witaj",
|
||||
"NOTIFICATIONS": {
|
||||
"TASK_ASSIGNED": "Zadanie {{taskName}} zostało przydzielone do {{assignee}}",
|
||||
"PROCESS_STARTED": "Proces {{processName}} został uruchomiony",
|
||||
"TASK_UPDATED": "Szczegóły zadania {{taskName}} zostały zaktualizowane",
|
||||
"TASK_CREATED": "Zadanie {{taskName}} zostało utworzone"
|
||||
},
|
||||
"SEARCH": {
|
||||
"RESULTS": "Wyniki wyszukiwania",
|
||||
"NO_RESULT": "Brak wyników",
|
||||
"FACET_FIELDS": {
|
||||
"TYPE": "1: Typ",
|
||||
"SIZE": "2: Rozmiar",
|
||||
"CREATOR": "3: Twórca",
|
||||
"MODIFIER": "4: Modyfikator",
|
||||
"CREATED": "5: Utworzono"
|
||||
},
|
||||
"FACET_QUERIES": {
|
||||
"MY_FACET_QUERIES": "Moje zapytania dotyczące aspektu",
|
||||
"CREATED_THIS_YEAR": "1. Utworzone w tym roku",
|
||||
"MIMETYPE": "2. Typ: HTML",
|
||||
"XTRASMALL": "3. Rozmiar: bardzo mały",
|
||||
"SMALL": "4. Rozmiar: mały",
|
||||
"MEDIUM": "5. Rozmiar: średni",
|
||||
"LARGE": "6. Rozmiar: duży",
|
||||
"XTRALARGE": "7. Rozmiar: bardzo duży",
|
||||
"XXTRALARGE": "8. Rozmiar: wyjątkowo duży"
|
||||
}
|
||||
},
|
||||
"GROUP-TITLE1-TRANSLATION-KEY": "Tytuł niestandardowy — tłumaczenie pierwsze",
|
||||
"GROUP-TITLE2-TRANSLATION-KEY": "Tytuł niestandardowy — tłumaczenie drugie",
|
||||
"ERROR_CONTENT": {
|
||||
"507": {
|
||||
"TITLE": "Dysk ACS pełny",
|
||||
"DESCRIPTION": "Zawartość przekracza limit łącznego przydziału miejsca w magazynie skonfigurowany w sieci lub systemie"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"title": "Bem-vindo",
|
||||
"NOTIFICATIONS": {
|
||||
"TASK_ASSIGNED": "A tarefa {{taskName}} foi atribuída a {{assignee}}",
|
||||
"PROCESS_STARTED": "O processo {{processName}} foi iniciado",
|
||||
"TASK_UPDATED": "Os detalhes da tarefa {{taskName}} foram atualizados",
|
||||
"TASK_CREATED": "A tarefa {{taskName}} foi criada"
|
||||
},
|
||||
"SEARCH": {
|
||||
"RESULTS": "Resultados da pesquisa",
|
||||
"NO_RESULT": "Nenhum resultado encontrado",
|
||||
"FACET_FIELDS": {
|
||||
"TYPE": "1:Tipo",
|
||||
"SIZE": "2:Tamanho",
|
||||
"CREATOR": "3:Criador",
|
||||
"MODIFIER": "4:Modificador",
|
||||
"CREATED": "5:Criado"
|
||||
},
|
||||
"FACET_QUERIES": {
|
||||
"MY_FACET_QUERIES": "Minhas consultas de faceta",
|
||||
"CREATED_THIS_YEAR": "1.Criado este ano",
|
||||
"MIMETYPE": "2.Tipo: HTML",
|
||||
"XTRASMALL": "3.Tamanho: muito pequeno",
|
||||
"SMALL": "4.Tamanho: pequeno",
|
||||
"MEDIUM": "5.Tamanho: médio",
|
||||
"LARGE": "6.Tamanho: grande",
|
||||
"XTRALARGE": "7.Tamanho: muito grande",
|
||||
"XXTRALARGE": "8.Tamanho: extragrande"
|
||||
}
|
||||
},
|
||||
"GROUP-TITLE1-TRANSLATION-KEY": "Tradução um de título personalizado",
|
||||
"GROUP-TITLE2-TRANSLATION-KEY": "Tradução dois de título personalizado",
|
||||
"ERROR_CONTENT": {
|
||||
"507": {
|
||||
"TITLE": "Disco ACS cheio",
|
||||
"DESCRIPTION": "O conteúdo excede o limite de armazenamento geral configurado para a rede ou o sistema"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"title": "Добро пожаловать",
|
||||
"NOTIFICATIONS": {
|
||||
"TASK_ASSIGNED": "Задача {{taskName}} была назначена {{assignee}}",
|
||||
"PROCESS_STARTED": "Процесс {{processName}} запущен",
|
||||
"TASK_UPDATED": "Сведения о задаче {{taskName}} обновлены",
|
||||
"TASK_CREATED": "{{taskName}} задача создана"
|
||||
},
|
||||
"SEARCH": {
|
||||
"RESULTS": "Результаты поиска",
|
||||
"NO_RESULT": "Результаты не найдены",
|
||||
"FACET_FIELDS": {
|
||||
"TYPE": "1: тип",
|
||||
"SIZE": "2: размер",
|
||||
"CREATOR": "3: автор",
|
||||
"MODIFIER": "4: редактор",
|
||||
"CREATED": "5: создано"
|
||||
},
|
||||
"FACET_QUERIES": {
|
||||
"MY_FACET_QUERIES": "Мои фасетные запросы",
|
||||
"CREATED_THIS_YEAR": "1. Создано в этом году",
|
||||
"MIMETYPE": "2. Тип HTML",
|
||||
"XTRASMALL": "3. Размер: крайне малый",
|
||||
"SMALL": "4. Размер: малый",
|
||||
"MEDIUM": "5. Размер: средний",
|
||||
"LARGE": "6. Размер: большой",
|
||||
"XTRALARGE": "7. Размер: очень большой",
|
||||
"XXTRALARGE": "8. Размер: огромный"
|
||||
}
|
||||
},
|
||||
"GROUP-TITLE1-TRANSLATION-KEY": "Перевод пользовательского заголовка один",
|
||||
"GROUP-TITLE2-TRANSLATION-KEY": "Перевод пользовательского заголовка два",
|
||||
"ERROR_CONTENT": {
|
||||
"507": {
|
||||
"TITLE": "Диск ACS заполнен",
|
||||
"DESCRIPTION": "Объем данных превысил максимально допустимое значение, установленное для сети или системы"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"title": "Välkommen",
|
||||
"NOTIFICATIONS": {
|
||||
"TASK_ASSIGNED": "{{taskName}} uppgiften har tilldelats till {{assignee}}",
|
||||
"PROCESS_STARTED": "{{processName}} processen har startats",
|
||||
"TASK_UPDATED": "{{taskName}} uppgiftsinformation har uppdaterats",
|
||||
"TASK_CREATED": "Uppgiften {{taskName}} skapades"
|
||||
},
|
||||
"SEARCH": {
|
||||
"RESULTS": "Sökresultat",
|
||||
"NO_RESULT": "Inga resultat hittades",
|
||||
"FACET_FIELDS": {
|
||||
"TYPE": "1:Typ",
|
||||
"SIZE": "2:Storlek",
|
||||
"CREATOR": "3:Skapad av",
|
||||
"MODIFIER": "4:Ändrad av",
|
||||
"CREATED": "5:Skapad den"
|
||||
},
|
||||
"FACET_QUERIES": {
|
||||
"MY_FACET_QUERIES": "Mina fasettförfrågningar",
|
||||
"CREATED_THIS_YEAR": "1.Skapad det här året",
|
||||
"MIMETYPE": "2.Typ: HTML",
|
||||
"XTRASMALL": "3.Storlek: extra small",
|
||||
"SMALL": "4.Storlek: small",
|
||||
"MEDIUM": "5.Storlek: medium",
|
||||
"LARGE": "6.Storlek: large",
|
||||
"XTRALARGE": "7.Storlek: extra large",
|
||||
"XXTRALARGE": "8.Storlek: XX large"
|
||||
}
|
||||
},
|
||||
"GROUP-TITLE1-TRANSLATION-KEY": "Anpassad titelöversättning ett",
|
||||
"GROUP-TITLE2-TRANSLATION-KEY": "Anpassad titelöversättning två",
|
||||
"ERROR_CONTENT": {
|
||||
"507": {
|
||||
"TITLE": "ACS disk full",
|
||||
"DESCRIPTION": "Innehållet överskrider övergripande kvotbegränsning som är konfigurerad för nätverket eller systemet"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"title": "欢迎使用",
|
||||
"NOTIFICATIONS": {
|
||||
"TASK_ASSIGNED": "{{taskName}} 任务已分配给 {{assignee}}",
|
||||
"PROCESS_STARTED": "{{processName}} 进程已启动",
|
||||
"TASK_UPDATED": "{{taskName}} 任务详细信息已更新",
|
||||
"TASK_CREATED": "{{taskName}} 任务已创建"
|
||||
},
|
||||
"SEARCH": {
|
||||
"RESULTS": "搜索结果",
|
||||
"NO_RESULT": "未找到结果",
|
||||
"FACET_FIELDS": {
|
||||
"TYPE": "1:类型",
|
||||
"SIZE": "2:字号",
|
||||
"CREATOR": "3:创建者",
|
||||
"MODIFIER": "4:修改者",
|
||||
"CREATED": "5:已创建"
|
||||
},
|
||||
"FACET_QUERIES": {
|
||||
"MY_FACET_QUERIES": "我的分面查询",
|
||||
"CREATED_THIS_YEAR": "1. 今年创建",
|
||||
"MIMETYPE": "2. 类型: HTML",
|
||||
"XTRASMALL": "3. 字号:超小",
|
||||
"SMALL": "4. 字号:小",
|
||||
"MEDIUM": "5. 字号:中等",
|
||||
"LARGE": "6. 字号:大",
|
||||
"XTRALARGE": "7. 字号:特大",
|
||||
"XXTRALARGE": "8. 字号:超大"
|
||||
}
|
||||
},
|
||||
"GROUP-TITLE1-TRANSLATION-KEY": "自定义标题翻译 1",
|
||||
"GROUP-TITLE2-TRANSLATION-KEY": "自定义标题翻译 2",
|
||||
"ERROR_CONTENT": {
|
||||
"507": {
|
||||
"TITLE": "ACS 磁盘已满",
|
||||
"DESCRIPTION": "内容超出为网络或系统配置的总存储配额限制"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
import { BrowserModule } from '@angular/platform-browser';
|
||||
import { APP_INITIALIZER, NgModule } from '@angular/core';
|
||||
import { NgModule } from '@angular/core';
|
||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||
import { NgChartsModule } from 'ng2-charts';
|
||||
import { HttpClientModule } from '@angular/common/http';
|
||||
@@ -39,8 +39,6 @@ import { HomeComponent } from './components/home/home.component';
|
||||
import { SearchBarComponent } from './components/search/search-bar.component';
|
||||
import { SearchResultComponent } from './components/search/search-result.component';
|
||||
import { FormComponent } from './components/form/form.component';
|
||||
import { FormListComponent } from './components/form/form-list.component';
|
||||
import { FormLoadingComponent } from './components/form/form-loading.component';
|
||||
import { ProcessServiceComponent } from './components/process-service/process-service.component';
|
||||
import { ShowDiagramComponent } from './components/process-service/show-diagram.component';
|
||||
import { FormViewerComponent } from './components/process-service/form-viewer.component';
|
||||
@@ -52,7 +50,6 @@ import { MetadataDialogAdapterComponent } from './components/files/metadata-dial
|
||||
import { appRoutes } from './app.routes';
|
||||
import { TaskAttachmentsComponent } from './components/process-service/task-attachments.component';
|
||||
import { ProcessAttachmentsComponent } from './components/process-service/process-attachments.component';
|
||||
import { SharedLinkViewComponent } from './components/shared-link-view/shared-link-view.component';
|
||||
import { DemoPermissionComponent } from './components/permissions/demo-permissions.component';
|
||||
import { MonacoEditorModule } from 'ngx-monaco-editor-v2';
|
||||
import { ContentModule } from '@alfresco/adf-content-services';
|
||||
@@ -64,15 +61,12 @@ import { AppsCloudDemoComponent } from './components/cloud/apps-cloud-demo.compo
|
||||
import { TasksCloudDemoComponent } from './components/cloud/tasks-cloud-demo.component';
|
||||
import { ProcessesCloudDemoComponent } from './components/cloud/processes-cloud-demo.component';
|
||||
import { TaskDetailsCloudDemoComponent } from './components/cloud/task-details-cloud-demo.component';
|
||||
import { TaskHeaderCloudDemoComponent } from './components/cloud/task-header-cloud-demo.component';
|
||||
import { ServiceTaskListCloudDemoComponent } from './components/cloud/service-task-list-cloud-demo.component';
|
||||
import { CloudViewerComponent } from './components/cloud/cloud-viewer.component';
|
||||
import { ProcessDetailsCloudDemoComponent } from './components/cloud/process-details-cloud-demo.component';
|
||||
import { StartTaskCloudDemoComponent } from './components/cloud/start-task-cloud-demo.component';
|
||||
import { StartProcessCloudDemoComponent } from './components/cloud/start-process-cloud-demo.component';
|
||||
import { CloudBreadcrumbsComponent } from './components/cloud/cloud-breadcrumb-component';
|
||||
import { CloudFiltersDemoComponent } from './components/cloud/cloud-filters-demo.component';
|
||||
import { PeopleGroupCloudDemoComponent } from './components/cloud/people-groups-cloud-demo.component';
|
||||
import { FormCloudDemoComponent } from './components/app-layout/cloud/form-demo/cloud-form-demo.component';
|
||||
import { environment } from '../environments/environment';
|
||||
import { AppCloudSharedModule } from './components/cloud/shared/cloud.shared.module';
|
||||
@@ -81,46 +75,9 @@ import { ProcessServicesCloudModule } from '@alfresco/adf-process-services-cloud
|
||||
import { RouterModule } from '@angular/router';
|
||||
import { ProcessCloudLayoutComponent } from './components/cloud/process-cloud-layout.component';
|
||||
import { CustomEditorComponent, CustomWidgetComponent } from './components/cloud/custom-form-components/custom-editor.component';
|
||||
|
||||
import { registerLocaleData } from '@angular/common';
|
||||
import localeFr from '@angular/common/locales/fr';
|
||||
import localeDe from '@angular/common/locales/de';
|
||||
import localeIt from '@angular/common/locales/it';
|
||||
import localeEs from '@angular/common/locales/es';
|
||||
import localeJa from '@angular/common/locales/ja';
|
||||
import localeNl from '@angular/common/locales/nl';
|
||||
import localePt from '@angular/common/locales/pt';
|
||||
import localeNb from '@angular/common/locales/nb';
|
||||
import localeRu from '@angular/common/locales/ru';
|
||||
import localeCh from '@angular/common/locales/zh';
|
||||
import localeAr from '@angular/common/locales/ar';
|
||||
import localeCs from '@angular/common/locales/cs';
|
||||
import localePl from '@angular/common/locales/pl';
|
||||
import localeFi from '@angular/common/locales/fi';
|
||||
import localeDa from '@angular/common/locales/da';
|
||||
import localeSv from '@angular/common/locales/sv';
|
||||
import { setupAppNotifications } from './services/app-notifications-factory';
|
||||
import { AppNotificationsService } from './services/app-notifications.service';
|
||||
import { SearchFilterChipsComponent } from './components/search/search-filter-chips.component';
|
||||
import { UserInfoComponent } from './components/app-layout/user-info/user-info.component';
|
||||
|
||||
registerLocaleData(localeFr);
|
||||
registerLocaleData(localeDe);
|
||||
registerLocaleData(localeIt);
|
||||
registerLocaleData(localeEs);
|
||||
registerLocaleData(localeJa);
|
||||
registerLocaleData(localeNl);
|
||||
registerLocaleData(localePt);
|
||||
registerLocaleData(localeNb);
|
||||
registerLocaleData(localeRu);
|
||||
registerLocaleData(localeCh);
|
||||
registerLocaleData(localeAr);
|
||||
registerLocaleData(localeCs);
|
||||
registerLocaleData(localePl);
|
||||
registerLocaleData(localeFi);
|
||||
registerLocaleData(localeDa);
|
||||
registerLocaleData(localeSv);
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
BrowserModule,
|
||||
@@ -157,47 +114,33 @@ registerLocaleData(localeSv);
|
||||
AppsViewComponent,
|
||||
FilesComponent,
|
||||
FormComponent,
|
||||
FormListComponent,
|
||||
VersionManagerDialogAdapterComponent,
|
||||
MetadataDialogAdapterComponent,
|
||||
TaskAttachmentsComponent,
|
||||
ProcessAttachmentsComponent,
|
||||
SharedLinkViewComponent,
|
||||
FormLoadingComponent,
|
||||
DemoPermissionComponent,
|
||||
DemoErrorComponent,
|
||||
FormLoadingComponent,
|
||||
TreeViewSampleComponent,
|
||||
CloudLayoutComponent,
|
||||
AppsCloudDemoComponent,
|
||||
TasksCloudDemoComponent,
|
||||
ProcessesCloudDemoComponent,
|
||||
TaskDetailsCloudDemoComponent,
|
||||
TaskHeaderCloudDemoComponent,
|
||||
CloudViewerComponent,
|
||||
ProcessDetailsCloudDemoComponent,
|
||||
StartTaskCloudDemoComponent,
|
||||
StartProcessCloudDemoComponent,
|
||||
CloudBreadcrumbsComponent,
|
||||
CloudFiltersDemoComponent,
|
||||
PeopleGroupCloudDemoComponent,
|
||||
FormCloudDemoComponent,
|
||||
CustomEditorComponent,
|
||||
CustomWidgetComponent,
|
||||
ProcessCloudLayoutComponent,
|
||||
ServiceTaskListCloudDemoComponent,
|
||||
SearchFilterChipsComponent
|
||||
],
|
||||
providers: [
|
||||
{ provide: AppConfigService, useClass: DebugAppConfigService }, // not use this service in production
|
||||
provideTranslations('app', 'resources'),
|
||||
AppNotificationsService,
|
||||
{
|
||||
provide: APP_INITIALIZER,
|
||||
useFactory: setupAppNotifications,
|
||||
deps: [AppNotificationsService],
|
||||
multi: true
|
||||
}
|
||||
provideTranslations('app', 'resources')
|
||||
],
|
||||
bootstrap: [AppComponent]
|
||||
})
|
||||
|
||||
@@ -28,14 +28,10 @@ import { AppsViewComponent } from './components/process-service/apps-view.compon
|
||||
import { SearchResultComponent } from './components/search/search-result.component';
|
||||
import { FilesComponent } from './components/files/files.component';
|
||||
import { FormComponent } from './components/form/form.component';
|
||||
import { FormListComponent } from './components/form/form-list.component';
|
||||
import { SharedLinkViewComponent } from './components/shared-link-view/shared-link-view.component';
|
||||
import { FormLoadingComponent } from './components/form/form-loading.component';
|
||||
import { DemoPermissionComponent } from './components/permissions/demo-permissions.component';
|
||||
import { AppComponent } from './app.component';
|
||||
import { TreeViewSampleComponent } from './components/tree-view/tree-view-sample.component';
|
||||
import { AppsCloudDemoComponent } from './components/cloud/apps-cloud-demo.component';
|
||||
import { PeopleGroupCloudDemoComponent } from './components/cloud/people-groups-cloud-demo.component';
|
||||
import { CloudLayoutComponent } from './components/cloud/cloud-layout.component';
|
||||
import { TasksCloudDemoComponent } from './components/cloud/tasks-cloud-demo.component';
|
||||
import { ProcessesCloudDemoComponent } from './components/cloud/processes-cloud-demo.component';
|
||||
@@ -46,9 +42,7 @@ import { CloudViewerComponent } from './components/cloud/cloud-viewer.component'
|
||||
import { ProcessDetailsCloudDemoComponent } from './components/cloud/process-details-cloud-demo.component';
|
||||
import { FormCloudDemoComponent } from './components/app-layout/cloud/form-demo/cloud-form-demo.component';
|
||||
import { DemoErrorComponent } from './components/error/demo-error.component';
|
||||
import { TaskHeaderCloudDemoComponent } from './components/cloud/task-header-cloud-demo.component';
|
||||
import { ProcessCloudLayoutComponent } from './components/cloud/process-cloud-layout.component';
|
||||
import { ServiceTaskListCloudDemoComponent } from './components/cloud/service-task-list-cloud-demo.component';
|
||||
import { SearchFilterChipsComponent } from './components/search/search-filter-chips.component';
|
||||
|
||||
export const appRoutes: Routes = [
|
||||
@@ -81,7 +75,6 @@ export const appRoutes: Routes = [
|
||||
pathMatch: 'full',
|
||||
loadChildren: () => import('./components/file-view/file-view.module').then(m => m.FileViewModule)
|
||||
},
|
||||
{ path: 'preview/s/:id', component: SharedLinkViewComponent },
|
||||
{
|
||||
path: '',
|
||||
component: AppLayoutComponent,
|
||||
@@ -92,10 +85,6 @@ export const appRoutes: Routes = [
|
||||
redirectTo: `/home`,
|
||||
pathMatch: 'full'
|
||||
},
|
||||
{
|
||||
path: 'config-editor',
|
||||
loadChildren: () => import('./components/config-editor/config-editor.module').then(m => m.AppConfigEditorModule)
|
||||
},
|
||||
{
|
||||
path: 'card-view',
|
||||
loadChildren: () => import('./components/card-view/card-view.module').then(m => m.AppCardViewModule)
|
||||
@@ -118,26 +107,6 @@ export const appRoutes: Routes = [
|
||||
data: { roles: ['ACTIVITI_USER'], redirectUrl: '/error/403' },
|
||||
component: AppsCloudDemoComponent
|
||||
},
|
||||
{
|
||||
path: 'people-group-cloud',
|
||||
data: { roles: ['ACTIVITI_USER'], redirectUrl: '/error/403' },
|
||||
component: PeopleGroupCloudDemoComponent
|
||||
},
|
||||
{
|
||||
path: 'task-header-cloud',
|
||||
data: { roles: ['ACTIVITI_USER'], redirectUrl: '/error/403' },
|
||||
component: TaskHeaderCloudDemoComponent
|
||||
},
|
||||
{
|
||||
path: 'service-task-list',
|
||||
data: { roles: ['ACTIVITI_ADMIN'], redirectUrl: '/error/403' },
|
||||
component: ServiceTaskListCloudDemoComponent
|
||||
},
|
||||
{
|
||||
path: 'community',
|
||||
data: { roles: ['ACTIVITI_USER'], redirectUrl: '/error/403' },
|
||||
loadChildren: () => import('./components/cloud/community/community.module').then(m => m.AppCommunityModule)
|
||||
},
|
||||
{
|
||||
path: ':appName',
|
||||
canActivate: [AuthGuardSsoRoleService],
|
||||
@@ -187,11 +156,6 @@ export const appRoutes: Routes = [
|
||||
path: 'settings-layout',
|
||||
loadChildren: () => import('./components/settings/settings.module').then(m => m.AppSettingsModule)
|
||||
},
|
||||
{
|
||||
path: 'trashcan',
|
||||
canActivate: [AuthGuardEcm],
|
||||
loadChildren: () => import('./components/trashcan/trashcan.module').then(m => m.AppTrashcanModule)
|
||||
},
|
||||
{
|
||||
path: 'files',
|
||||
component: FilesComponent,
|
||||
@@ -207,11 +171,6 @@ export const appRoutes: Routes = [
|
||||
component: FilesComponent,
|
||||
canActivate: [AuthGuardEcm]
|
||||
},
|
||||
{
|
||||
path: 'dl-custom-sources',
|
||||
canActivate: [AuthGuardEcm],
|
||||
loadChildren: () => import('./components/files/custom-sources.module').then(m => m.AppCustomSourcesModule)
|
||||
},
|
||||
{
|
||||
path: 'search',
|
||||
component: SearchResultComponent,
|
||||
@@ -291,14 +250,8 @@ export const appRoutes: Routes = [
|
||||
component: TreeViewSampleComponent,
|
||||
canActivate: [AuthGuardEcm]
|
||||
},
|
||||
{
|
||||
path: 'about',
|
||||
loadChildren: () => import('./components/about/about.module').then(m => m.AppAboutModule)
|
||||
},
|
||||
{ path: 'form-cloud', component: FormCloudDemoComponent },
|
||||
{ path: 'form', component: FormComponent },
|
||||
{ path: 'form-list', component: FormListComponent },
|
||||
{ path: 'form-loading', component: FormLoadingComponent },
|
||||
{
|
||||
path: 'task-list',
|
||||
canActivate: [AuthGuardBpm],
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
<mat-slide-toggle [(ngModel)]="dev">Dev Mode</mat-slide-toggle>
|
||||
|
||||
<adf-about>
|
||||
<adf-about-panel *ngIf="dev" [label]="'ABOUT.SERVER_SETTINGS.TITLE' | translate">
|
||||
<ng-template>
|
||||
<adf-about-server-settings></adf-about-server-settings>
|
||||
</ng-template>
|
||||
</adf-about-panel>
|
||||
|
||||
<adf-about-panel *ngIf="dev" [label]="'ABOUT.PACKAGES.TITLE' | translate">
|
||||
<ng-template>
|
||||
<adf-about-package-list [dependencies]="pkg?.dependencies"></adf-about-package-list>
|
||||
</ng-template>
|
||||
</adf-about-panel>
|
||||
|
||||
<adf-about-panel [label]="'ABOUT.REPOSITORY' | translate" *ngIf="repository">
|
||||
<ng-template>
|
||||
<adf-about-repository-info [data]="repository"></adf-about-repository-info>
|
||||
</ng-template>
|
||||
</adf-about-panel>
|
||||
|
||||
<adf-about-panel [label]="'ABOUT.VERSIONS.TITLE' | translate">
|
||||
<ng-template>
|
||||
<adf-about-platform-version [repository]="repository" [process]="bpmVersion"></adf-about-platform-version>
|
||||
</ng-template>
|
||||
</adf-about-panel>
|
||||
|
||||
<adf-about-panel *ngIf="extensions$ | async as extensions" [label]="'ABOUT.PLUGINS.TITLE' | translate">
|
||||
<ng-template>
|
||||
<adf-about-extension-list [data]="extensions"></adf-about-extension-list>
|
||||
</ng-template>
|
||||
</adf-about-panel>
|
||||
</adf-about>
|
||||
|
||||
@@ -1,67 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { AppExtensionService, ExtensionRef } from '@alfresco/adf-extensions';
|
||||
import { AuthenticationService, BpmProductVersionModel, RepositoryInfo } from '@alfresco/adf-core';
|
||||
import { DiscoveryApiService } from '@alfresco/adf-content-services';
|
||||
import pkg from '../../../../../package.json';
|
||||
import { Observable } from 'rxjs';
|
||||
|
||||
@Component({
|
||||
selector: 'app-about-page',
|
||||
templateUrl: './about.component.html'
|
||||
})
|
||||
export class AboutComponent implements OnInit {
|
||||
pkg: any;
|
||||
dev: true;
|
||||
|
||||
extensions$: Observable<ExtensionRef[]>;
|
||||
repository: RepositoryInfo = null;
|
||||
bpmVersion: BpmProductVersionModel = null;
|
||||
|
||||
constructor(
|
||||
private authenticationService: AuthenticationService,
|
||||
private appExtensionService: AppExtensionService,
|
||||
private discoveryApiService: DiscoveryApiService
|
||||
) {
|
||||
this.pkg = pkg;
|
||||
this.extensions$ = this.appExtensionService.references$;
|
||||
}
|
||||
|
||||
ngOnInit(): void {
|
||||
if (this.authenticationService.isEcmLoggedIn()) {
|
||||
this.setECMInfo();
|
||||
}
|
||||
|
||||
if (this.authenticationService.isBpmLoggedIn()) {
|
||||
this.setBPMInfo();
|
||||
}
|
||||
}
|
||||
|
||||
setECMInfo() {
|
||||
this.discoveryApiService.getEcmProductInfo().subscribe((repository) => {
|
||||
this.repository = repository as RepositoryInfo;
|
||||
});
|
||||
}
|
||||
|
||||
setBPMInfo() {
|
||||
this.discoveryApiService.getBpmProductInfo().subscribe((bpmVersion) => {
|
||||
this.bpmVersion = bpmVersion;
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { NgModule } from '@angular/core';
|
||||
import { Routes, RouterModule } from '@angular/router';
|
||||
import { AboutComponent } from './about.component';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { CoreModule } from '@alfresco/adf-core';
|
||||
|
||||
const routes: Routes = [
|
||||
{
|
||||
path: '',
|
||||
component: AboutComponent
|
||||
}
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule,
|
||||
CoreModule,
|
||||
RouterModule.forChild(routes)
|
||||
],
|
||||
declarations: [AboutComponent]
|
||||
})
|
||||
export class AppAboutModule {}
|
||||
@@ -18,15 +18,6 @@
|
||||
<app-search-bar></app-search-bar>
|
||||
|
||||
<app-shell-user-info [menuPositionX]="'before'" [menuPositionY]="'above'"></app-shell-user-info>
|
||||
|
||||
<button data-automation-id="language-menu-button" mat-icon-button [matMenuTriggerFor]="langMenu">
|
||||
<mat-icon>language</mat-icon>
|
||||
</button>
|
||||
<mat-menu #langMenu="matMenu" class="app-menu">
|
||||
<adf-language-menu></adf-language-menu>
|
||||
</mat-menu>
|
||||
|
||||
<adf-notification-history menuPositionX="before" menuPositionY="above"></adf-notification-history>
|
||||
</adf-layout-header>
|
||||
</ng-template>
|
||||
</adf-sidenav-layout-header>
|
||||
|
||||
@@ -33,27 +33,17 @@ export class AppLayoutComponent {
|
||||
{
|
||||
href: '/cloud', icon: 'cloud', title: 'Process Cloud', children: [
|
||||
{ href: '/cloud/', icon: 'cloud', title: 'Home' },
|
||||
{ href: '/cloud/community', icon: 'cloud', title: 'Community' },
|
||||
{ href: '/form-cloud', icon: 'poll', title: 'Form' },
|
||||
{ href: '/cloud/people-group-cloud', icon: 'group', title: 'People/Group Cloud' },
|
||||
{ href: '/cloud/task-header-cloud', icon: 'cloud', title: 'Task Header Cloud' },
|
||||
{ href: '/cloud/service-task-list', icon: 'cloud', title: 'Service Task List' }
|
||||
{ href: '/form-cloud', icon: 'poll', title: 'Form' }
|
||||
]
|
||||
},
|
||||
{ href: '/activiti', icon: 'device_hub', title: 'Process Services', children: [
|
||||
{ href: '/activiti', icon: 'vpn_key', title: 'App' },
|
||||
{ href: '/process-list', icon: 'assignment', title: 'Process List' },
|
||||
{ href: '/form', icon: 'poll', title: 'Form' },
|
||||
{ href: '/form-list', icon: 'library_books', title: 'Form List' },
|
||||
{ href: '/form-loading', icon: 'cached', title: 'Form Loading' }
|
||||
{ href: '/form', icon: 'poll', title: 'Form' }
|
||||
]},
|
||||
{ href: '/login', icon: 'vpn_key', title: 'Login' },
|
||||
{ href: '/trashcan', icon: 'delete', title: 'Trashcan' },
|
||||
{ href: '/dl-custom-sources', icon: 'extension', title: 'Custom Sources' },
|
||||
{ href: '/settings-layout', icon: 'settings', title: 'Settings' },
|
||||
{ href: '/config-editor', icon: 'code', title: 'Configuration Editor' },
|
||||
{ href: '/treeview', icon: 'nature', title: 'Tree View' },
|
||||
{ href: '/about', icon: 'info_outline', title: 'About' }
|
||||
{ href: '/treeview', icon: 'nature', title: 'Tree View' }
|
||||
];
|
||||
|
||||
enableRedirect = true;
|
||||
|
||||
+5
-14
@@ -1,6 +1,5 @@
|
||||
<div class="main-content">
|
||||
|
||||
<mat-tab-group>
|
||||
<mat-tab-group [animationDuration]="0">
|
||||
<mat-tab label="Form" class="form-cloud-render">
|
||||
<div class="app-form-container">
|
||||
<adf-cloud-form
|
||||
@@ -13,8 +12,7 @@
|
||||
|
||||
<div class="app-console" #console>
|
||||
<h3>Error log:</h3>
|
||||
<p *ngFor="let error of errorFields">Error {{ error.name }} {{error.validationSummary.message |
|
||||
translate}}</p>
|
||||
<p *ngFor="let error of errorFields">Error {{ error.name }} {{error.validationSummary.message | translate}}</p>
|
||||
</div>
|
||||
</mat-tab>
|
||||
<mat-tab label="Editor" class="form-cloud-editor">
|
||||
@@ -26,15 +24,9 @@
|
||||
(onInit)="onInitFormEditor($event)">
|
||||
</ngx-monaco-editor>
|
||||
<div class="app-form-editor-buttons">
|
||||
<button mat-raised-button id="app-form-config-save" (click)="onSaveFormConfig()" color="primary">Save
|
||||
form config
|
||||
</button>
|
||||
<button mat-raised-button id="app-form-config-clear" (click)="onClearFormConfig()" color="primary">Clear
|
||||
form config
|
||||
</button>
|
||||
</div>
|
||||
<div class="app-upload-config-button">
|
||||
<a mat-raised-button color="primary" >
|
||||
<button mat-raised-button id="app-form-config-save" (click)="onSaveFormConfig()">Save form config</button>
|
||||
<button mat-raised-button id="app-form-config-clear" (click)="onClearFormConfig()">Clear form config</button>
|
||||
<a mat-raised-button class="app-upload-config-button">
|
||||
<mat-icon>file_upload</mat-icon>
|
||||
<label for="upload-config-file">Upload JSON File</label>
|
||||
<input
|
||||
@@ -46,7 +38,6 @@
|
||||
(change)="onConfigAdded($event)">
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</mat-tab>
|
||||
|
||||
</mat-tab-group>
|
||||
|
||||
+3
-12
@@ -6,11 +6,6 @@
|
||||
padding: 0 15px;
|
||||
}
|
||||
|
||||
.app-card-view {
|
||||
width: 30%;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.app-console {
|
||||
width: 60%;
|
||||
display: inline-block;
|
||||
@@ -36,22 +31,18 @@
|
||||
}
|
||||
|
||||
.app-form-editor-buttons {
|
||||
display: flex;
|
||||
justify-content: space-evenly;
|
||||
& > .mat-raised-button {
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.app-upload-config-button {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
||||
input {
|
||||
cursor: pointer;
|
||||
height: 100%;
|
||||
right: 0;
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
width: 300px;
|
||||
z-index: 4;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,6 +49,4 @@
|
||||
</mat-slide-toggle>
|
||||
</p>
|
||||
|
||||
<button mat-button id="adf-reset-card-log" (click)="reset()" color="primary">Reset Log</button>
|
||||
|
||||
<br>
|
||||
<button mat-raised-button id="adf-reset-card-log" (click)="reset()">Reset Log</button>
|
||||
|
||||
@@ -53,7 +53,7 @@ export class CloudFiltersDemoComponent implements OnInit {
|
||||
this.currentProcessFilter$ = this.cloudLayoutService.processFilter$;
|
||||
|
||||
let root = '';
|
||||
if (this.route.snapshot && this.route.snapshot.firstChild) {
|
||||
if (this.route.snapshot?.firstChild) {
|
||||
root = this.route.snapshot.firstChild.url[0].path;
|
||||
if (root === 'tasks') {
|
||||
this.expandTaskFilter = true;
|
||||
|
||||
@@ -41,7 +41,7 @@ export class CloudLayoutComponent implements OnInit {
|
||||
this.appName = params.appName;
|
||||
});
|
||||
|
||||
if (this.route.snapshot && this.route.snapshot.firstChild) {
|
||||
if (this.route.snapshot?.firstChild) {
|
||||
root = this.route.snapshot.firstChild.url[0].path;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
<mat-tab-group class="app-cloud-layout-tab-body">
|
||||
<mat-tab label="App">
|
||||
<adf-sidenav-layout [sidenavMin]="70" [sidenavMax]="270" [stepOver]="780">
|
||||
<adf-sidenav-layout-navigation>
|
||||
<ng-template>
|
||||
<adf-sidebar-action-menu [expanded]="true" [width]="205" title="CREATE">
|
||||
<mat-icon adf-sidebar-menu-title-icon>arrow_drop_down</mat-icon>
|
||||
<div adf-sidebar-menu-options>
|
||||
<button mat-menu-item data-automation-id="btn-start-task" (click)="onStartTask()">
|
||||
<mat-icon>assessment</mat-icon>
|
||||
<span>New Task</span>
|
||||
</button>
|
||||
</div>
|
||||
<div adf-sidebar-menu-options>
|
||||
<button mat-menu-item data-automation-id="btn-start-process" (click)="onStartProcess()">
|
||||
<mat-icon>assessment</mat-icon>
|
||||
<span>New Process</span>
|
||||
</button>
|
||||
</div>
|
||||
</adf-sidebar-action-menu>
|
||||
<app-community-cloud-filters-demo></app-community-cloud-filters-demo>
|
||||
</ng-template>
|
||||
</adf-sidenav-layout-navigation>
|
||||
<adf-sidenav-layout-content>
|
||||
<ng-template>
|
||||
<router-outlet></router-outlet>
|
||||
</ng-template>
|
||||
</adf-sidenav-layout-content>
|
||||
</adf-sidenav-layout>
|
||||
</mat-tab>
|
||||
<mat-tab label="Settings">
|
||||
<app-cloud-settings></app-cloud-settings>
|
||||
</mat-tab>
|
||||
</mat-tab-group>
|
||||
@@ -1,20 +0,0 @@
|
||||
.app-cloud-layout-overflow {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.app-cloud-layout-tab-body {
|
||||
height: 100%;
|
||||
min-height: 100%;
|
||||
min-width: 100%;
|
||||
width: 100%;
|
||||
|
||||
.mat-tab-body-wrapper {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
adf-sidenav-layout {
|
||||
min-height: 100%;
|
||||
min-width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Component, OnInit, ViewEncapsulation } from '@angular/core';
|
||||
import { Router, ActivatedRoute } from '@angular/router';
|
||||
import { CloudLayoutService } from '../services/cloud-layout.service';
|
||||
|
||||
@Component({
|
||||
templateUrl: './community-cloud.component.html',
|
||||
styleUrls: ['./community-cloud.component.scss'],
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class CommunityCloudComponent implements OnInit {
|
||||
|
||||
constructor(
|
||||
private router: Router,
|
||||
private route: ActivatedRoute,
|
||||
private cloudLayoutService: CloudLayoutService
|
||||
) { }
|
||||
|
||||
ngOnInit() {
|
||||
let root: string = '';
|
||||
if (this.route.snapshot && this.route.snapshot.firstChild) {
|
||||
root = this.route.snapshot.firstChild.url[0].path;
|
||||
}
|
||||
|
||||
this.route.queryParams.subscribe((params) => {
|
||||
if (root === 'tasks' && params.id) {
|
||||
this.cloudLayoutService.setCurrentTaskFilterParam({ id: params.id });
|
||||
}
|
||||
|
||||
if (root === 'processes' && params.id) {
|
||||
this.cloudLayoutService.setCurrentProcessFilterParam({ id: params.id });
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
onStartTask() {
|
||||
this.router.navigate([`/cloud/community/start-task/`]);
|
||||
}
|
||||
|
||||
onStartProcess() {
|
||||
this.router.navigate([`/cloud/community/start-process/`]);
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
<mat-accordion>
|
||||
<mat-expansion-panel [expanded]="expandTaskFilter" (opened)="onTaskFilterOpen()" (closed)="onTaskFilterClose()" data-automation-id='Task Filters'>
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-title>
|
||||
Task Filters
|
||||
</mat-panel-title>
|
||||
</mat-expansion-panel-header>
|
||||
<adf-cloud-task-filters
|
||||
*ngIf="expandTaskFilter"
|
||||
[showIcons]="true"
|
||||
[filterParam]="currentTaskFilter$ | async"
|
||||
(filterClick)="onTaskFilterSelected($event)">
|
||||
</adf-cloud-task-filters>
|
||||
</mat-expansion-panel>
|
||||
|
||||
<mat-expansion-panel [expanded]="expandProcessFilter" (opened)="onProcessFilterOpen()" (closed)="onProcessFilterClose()" data-automation-id='Process Filters'>
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-title>
|
||||
Process Filters
|
||||
</mat-panel-title>
|
||||
</mat-expansion-panel-header>
|
||||
<adf-cloud-process-filters
|
||||
*ngIf="expandProcessFilter"
|
||||
[showIcons]="true"
|
||||
[filterParam]="currentProcessFilter$ | async"
|
||||
(filterClick)="onProcessFilterSelected($event)">
|
||||
</adf-cloud-process-filters>
|
||||
</mat-expansion-panel>
|
||||
</mat-accordion>
|
||||
@@ -1,92 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Component, ViewEncapsulation, OnInit } from '@angular/core';
|
||||
import { Observable } from 'rxjs';
|
||||
import { Router, ActivatedRoute } from '@angular/router';
|
||||
import { CloudLayoutService } from '../services/cloud-layout.service';
|
||||
@Component({
|
||||
selector: 'app-community-cloud-filters-demo',
|
||||
templateUrl: './community-filters.component.html',
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class CommunityCloudFiltersDemoComponent implements OnInit {
|
||||
|
||||
currentTaskFilter$: Observable<any>;
|
||||
currentProcessFilter$: Observable<any>;
|
||||
|
||||
toggleTaskFilter = true;
|
||||
toggleProcessFilter = true;
|
||||
|
||||
expandTaskFilter = true;
|
||||
expandProcessFilter = false;
|
||||
|
||||
constructor(
|
||||
private cloudLayoutService: CloudLayoutService,
|
||||
private router: Router,
|
||||
private route: ActivatedRoute
|
||||
) {}
|
||||
|
||||
ngOnInit() {
|
||||
this.currentTaskFilter$ = this.cloudLayoutService.taskFilter$;
|
||||
this.currentProcessFilter$ = this.cloudLayoutService.processFilter$;
|
||||
|
||||
let root = '';
|
||||
if (this.route.snapshot && this.route.snapshot.firstChild) {
|
||||
root = this.route.snapshot.firstChild.url[0].path;
|
||||
if (root === 'tasks') {
|
||||
this.expandTaskFilter = true;
|
||||
this.expandProcessFilter = false;
|
||||
} else if (root === 'processes') {
|
||||
this.expandProcessFilter = true;
|
||||
this.expandTaskFilter = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onTaskFilterSelected(filter) {
|
||||
this.cloudLayoutService.setCurrentTaskFilterParam({id: filter.id});
|
||||
const currentFilter = Object.assign({}, filter);
|
||||
this.router.navigate([`/cloud/community/tasks/`], { queryParams: currentFilter });
|
||||
}
|
||||
|
||||
onProcessFilterSelected(filter) {
|
||||
this.cloudLayoutService.setCurrentProcessFilterParam({id: filter.id});
|
||||
const currentFilter = Object.assign({}, filter);
|
||||
this.router.navigate([`/cloud/community/processes/`], { queryParams: currentFilter });
|
||||
}
|
||||
|
||||
onTaskFilterOpen(): boolean {
|
||||
this.expandTaskFilter = true;
|
||||
this.expandProcessFilter = false;
|
||||
return this.toggleTaskFilter;
|
||||
}
|
||||
|
||||
onTaskFilterClose(): boolean {
|
||||
return !this.toggleTaskFilter;
|
||||
}
|
||||
|
||||
onProcessFilterOpen(): boolean {
|
||||
this.expandProcessFilter = true;
|
||||
this.expandTaskFilter = false;
|
||||
return this.toggleProcessFilter;
|
||||
}
|
||||
|
||||
onProcessFilterClose(): boolean {
|
||||
return !this.toggleProcessFilter;
|
||||
}
|
||||
}
|
||||
-21
@@ -1,21 +0,0 @@
|
||||
|
||||
<button data-automation-id="go-back" mat-icon-button (click)="onGoBack()">
|
||||
<mat-icon>arrow_back</mat-icon> Go Back
|
||||
</button>
|
||||
|
||||
<h4 data-automation-id="process-details-header">Simple page to show the process instance: {{ processInstanceId }}</h4>
|
||||
|
||||
<div class="app-process-cloud-container">
|
||||
|
||||
<adf-cloud-task-list
|
||||
class="app-cloud-layout-overflow"
|
||||
[processInstanceId]="processInstanceId"
|
||||
(rowClick)="onRowClick($event)">
|
||||
</adf-cloud-task-list>
|
||||
|
||||
<adf-cloud-process-header
|
||||
class="app-process-cloud-header"
|
||||
[processInstanceId]="processInstanceId">
|
||||
</adf-cloud-process-header>
|
||||
</div>
|
||||
|
||||
-17
@@ -1,17 +0,0 @@
|
||||
app-community-process-details-cloud {
|
||||
.app {
|
||||
&-process-cloud-container {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
&-cloud-layout-overflow {
|
||||
width: 67%;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
&-process-cloud-header {
|
||||
margin-left: 10px;
|
||||
width: 25%;
|
||||
}
|
||||
}
|
||||
}
|
||||
-46
@@ -1,46 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Component, ViewEncapsulation } from '@angular/core';
|
||||
import { ActivatedRoute, Router } from '@angular/router';
|
||||
|
||||
@Component({
|
||||
selector: 'app-community-process-details-cloud',
|
||||
templateUrl: './community-process-details-cloud.component.html',
|
||||
styleUrls: ['./community-process-details-cloud.component.scss'],
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class CommunityProcessDetailsCloudDemoComponent {
|
||||
|
||||
processInstanceId: string;
|
||||
|
||||
constructor(private route: ActivatedRoute, private router: Router) {
|
||||
this.route.params.subscribe((params) => {
|
||||
this.processInstanceId = params.processInstanceId;
|
||||
});
|
||||
}
|
||||
|
||||
onGoBack() {
|
||||
this.router.navigate([`/cloud/community/`]);
|
||||
}
|
||||
|
||||
onRowClick(taskId: string) {
|
||||
if (taskId) {
|
||||
this.router.navigate([`/cloud/community/task-details/${taskId}`]);
|
||||
}
|
||||
}
|
||||
}
|
||||
-42
@@ -1,42 +0,0 @@
|
||||
<adf-cloud-edit-process-filter
|
||||
[id]="filterId"
|
||||
[filterProperties]="processFilterProperties.filterProperties"
|
||||
[sortProperties]="processFilterProperties.sortProperties"
|
||||
[actions]="processFilterProperties.actions"
|
||||
(filterChange)="onFilterChange($event)"
|
||||
(action)="onProcessFilterAction($event)">
|
||||
</adf-cloud-edit-process-filter>
|
||||
<div
|
||||
class="app-cloud-process-list-container"
|
||||
*ngIf="editedFilter">
|
||||
<adf-cloud-process-list
|
||||
#processCloud
|
||||
class="app-cloud-layout-overflow"
|
||||
[initiator]="editedFilter.initiator"
|
||||
[processDefinitionId]="editedFilter.processDefinitionId"
|
||||
[processDefinitionKey]="editedFilter.processDefinitionKey"
|
||||
[id]="editedFilter.processInstanceId"
|
||||
[status]="editedFilter.status"
|
||||
[name]="editedFilter.processName"
|
||||
[businessKey]="editedFilter['businessKey']"
|
||||
[lastModifiedFrom]="editedFilter.lastModifiedFrom"
|
||||
[lastModifiedTo]="editedFilter.lastModifiedTo"
|
||||
[sorting]="sortArray"
|
||||
[selectionMode]="selectionMode"
|
||||
[multiselect]="multiselect"
|
||||
(rowClick)="onRowClick($event)"
|
||||
(rowsSelected)="onRowsSelected($event)">
|
||||
</adf-cloud-process-list>
|
||||
<adf-pagination
|
||||
[target]="processCloud"
|
||||
(changePageSize)="onChangePageSize($event)"
|
||||
(nextPage)="resetSelectedRows()"
|
||||
(prevPage)="resetSelectedRows()">
|
||||
</adf-pagination>
|
||||
<div *ngIf="testingMode">
|
||||
Selected rows:
|
||||
<ul>
|
||||
<li *ngFor="let row of selectedRows">{{ row.id }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
-21
@@ -1,21 +0,0 @@
|
||||
app-community-processes-cloud-demo {
|
||||
height: 100%;
|
||||
min-height: 100%;
|
||||
min-width: 100%;
|
||||
width: 100%;
|
||||
|
||||
.app-cloud-process-list-container {
|
||||
place-content: stretch space-between;
|
||||
align-items: stretch;
|
||||
margin-top: 2px;
|
||||
}
|
||||
|
||||
&, .app-cloud-process-list-container {
|
||||
flex-direction: column;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.app-cloud-layout-overflow, .app-cloud-process-list-container {
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
@@ -1,153 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Component, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';
|
||||
import {
|
||||
ProcessFilterCloudModel,
|
||||
ProcessFilterCloudService,
|
||||
ProcessFiltersCloudComponent,
|
||||
ProcessListCloudComponent,
|
||||
ProcessListCloudSortingModel
|
||||
} from '@alfresco/adf-process-services-cloud';
|
||||
|
||||
import { ActivatedRoute, Router } from '@angular/router';
|
||||
import { AppConfigService, UserPreferencesService } from '@alfresco/adf-core';
|
||||
import { CloudLayoutService } from '../services/cloud-layout.service';
|
||||
import { Subject } from 'rxjs';
|
||||
import { takeUntil } from 'rxjs/operators';
|
||||
import { Pagination } from '@alfresco/js-api';
|
||||
|
||||
const PROCESS_FILTER_PROPERTY_KEYS = 'adf-edit-process-filter';
|
||||
const ACTION_SAVE_AS = 'saveAs';
|
||||
|
||||
@Component({
|
||||
selector: 'app-community-processes-cloud-demo',
|
||||
templateUrl: './community-processes-cloud.component.html',
|
||||
styleUrls: ['./community-processes-cloud.component.scss'],
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class CommunityProcessesCloudDemoComponent implements OnInit, OnDestroy {
|
||||
@ViewChild('processCloud')
|
||||
processCloud: ProcessListCloudComponent;
|
||||
|
||||
@ViewChild('processFiltersCloud')
|
||||
processFiltersCloud: ProcessFiltersCloudComponent;
|
||||
|
||||
isFilterLoaded: boolean;
|
||||
filterId: string = '';
|
||||
sortArray: any = [];
|
||||
selectedRow: any;
|
||||
multiselect: boolean;
|
||||
selectionMode: string;
|
||||
selectedRows: any[] = [];
|
||||
testingMode: boolean;
|
||||
processFilterProperties: any = { filterProperties: [], sortProperties: [], actions: [] };
|
||||
|
||||
editedFilter: ProcessFilterCloudModel;
|
||||
|
||||
private onDestroy$ = new Subject<boolean>();
|
||||
|
||||
constructor(
|
||||
private route: ActivatedRoute,
|
||||
private router: Router,
|
||||
private cloudLayoutService: CloudLayoutService,
|
||||
private userPreference: UserPreferencesService,
|
||||
private processFilterCloudService: ProcessFilterCloudService,
|
||||
private appConfig: AppConfigService) {
|
||||
const properties = this.appConfig.get<Array<any>>(
|
||||
PROCESS_FILTER_PROPERTY_KEYS
|
||||
);
|
||||
|
||||
if (properties) {
|
||||
this.processFilterProperties = properties;
|
||||
}
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.isFilterLoaded = false;
|
||||
|
||||
this.route.queryParams.subscribe((params) => {
|
||||
if (Object.keys(params).length > 0) {
|
||||
this.isFilterLoaded = true;
|
||||
this.onFilterChange(params);
|
||||
this.filterId = params.id;
|
||||
} else {
|
||||
this.loadDefaultFilters();
|
||||
}
|
||||
});
|
||||
|
||||
this.cloudLayoutService
|
||||
.settings$
|
||||
.pipe(takeUntil(this.onDestroy$))
|
||||
.subscribe(settings => this.setCurrentSettings(settings));
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
this.onDestroy$.next(true);
|
||||
this.onDestroy$.complete();
|
||||
}
|
||||
|
||||
loadDefaultFilters() {
|
||||
this.processFilterCloudService
|
||||
.getProcessFilters('community')
|
||||
.subscribe((filters: ProcessFilterCloudModel[]) => {
|
||||
this.onFilterChange(filters[0]);
|
||||
});
|
||||
}
|
||||
|
||||
setCurrentSettings(settings) {
|
||||
if (settings) {
|
||||
this.multiselect = settings.multiselect;
|
||||
this.testingMode = settings.testingMode;
|
||||
this.selectionMode = settings.selectionMode;
|
||||
}
|
||||
}
|
||||
|
||||
onChangePageSize(event: Pagination) {
|
||||
this.userPreference.paginationSize = event.maxItems;
|
||||
}
|
||||
|
||||
resetSelectedRows() {
|
||||
this.selectedRows = [];
|
||||
}
|
||||
|
||||
onRowClick(processInstanceId: string) {
|
||||
this.router.navigate([`/cloud/community/process-details/${processInstanceId}`]);
|
||||
}
|
||||
|
||||
onFilterChange(query: any) {
|
||||
this.editedFilter = Object.assign({}, query);
|
||||
this.sortArray = [
|
||||
new ProcessListCloudSortingModel({
|
||||
orderBy: this.editedFilter.sort,
|
||||
direction: this.editedFilter.order
|
||||
})
|
||||
];
|
||||
}
|
||||
|
||||
onProcessFilterAction(filterAction: any) {
|
||||
this.cloudLayoutService.setCurrentProcessFilterParam({ id: filterAction.filter.id });
|
||||
if (filterAction.actionType === ACTION_SAVE_AS) {
|
||||
this.router.navigate([`/cloud/community/processes/`], { queryParams: filterAction.filter });
|
||||
}
|
||||
}
|
||||
|
||||
onRowsSelected(nodes) {
|
||||
this.resetSelectedRows();
|
||||
this.selectedRows = nodes.map((node) => node.obj);
|
||||
}
|
||||
}
|
||||
-6
@@ -1,6 +0,0 @@
|
||||
<adf-cloud-start-process
|
||||
[name]="processName"
|
||||
(error)="openSnackMessage($event)"
|
||||
(success)="onStartProcessSuccess()"
|
||||
(cancel)="onCancelStartProcess()">
|
||||
</adf-cloud-start-process>
|
||||
-55
@@ -1,55 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { Router } from '@angular/router';
|
||||
import { NotificationService, AppConfigService } from '@alfresco/adf-core';
|
||||
import { CloudLayoutService } from '../services/cloud-layout.service';
|
||||
|
||||
@Component({
|
||||
templateUrl: './community-start-process-cloud.component.html'
|
||||
})
|
||||
export class CommunityStartProcessCloudDemoComponent implements OnInit {
|
||||
|
||||
processName: string;
|
||||
|
||||
constructor(private appConfig: AppConfigService,
|
||||
private cloudLayoutService: CloudLayoutService,
|
||||
private notificationService: NotificationService,
|
||||
private router: Router) {
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.processName = this.appConfig.get<string>('adf-start-process-cloud.name');
|
||||
}
|
||||
|
||||
onStartProcessSuccess() {
|
||||
this.cloudLayoutService.setCurrentProcessFilterParam({ key: 'running-processes' });
|
||||
this.router.navigate([`/cloud/community/processes`]);
|
||||
}
|
||||
|
||||
onCancelStartProcess() {
|
||||
this.cloudLayoutService.setCurrentProcessFilterParam({ key: 'all-processes' });
|
||||
this.router.navigate([`/cloud/community/processes`]);
|
||||
}
|
||||
|
||||
openSnackMessage(event: any) {
|
||||
this.notificationService.openSnackMessage(
|
||||
event.response.body.message
|
||||
);
|
||||
}
|
||||
}
|
||||
-5
@@ -1,5 +0,0 @@
|
||||
<adf-cloud-start-task
|
||||
(error)="openSnackMessage($event)"
|
||||
(success)="onStartTaskSuccess()"
|
||||
(cancel)="onCancelStartTask()">
|
||||
</adf-cloud-start-task>
|
||||
@@ -1,48 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Component } from '@angular/core';
|
||||
import { Router } from '@angular/router';
|
||||
import { NotificationService } from '@alfresco/adf-core';
|
||||
import { CloudLayoutService } from '../services/cloud-layout.service';
|
||||
@Component({
|
||||
templateUrl: './community-start-task-cloud.component.html'
|
||||
})
|
||||
export class CommunityStartTaskCloudDemoComponent {
|
||||
|
||||
constructor(
|
||||
private cloudLayoutService: CloudLayoutService,
|
||||
private notificationService: NotificationService,
|
||||
private router: Router) {
|
||||
}
|
||||
|
||||
onStartTaskSuccess() {
|
||||
this.cloudLayoutService.setCurrentTaskFilterParam({key: 'community'});
|
||||
this.router.navigate([`/cloud/community/tasks`]);
|
||||
}
|
||||
|
||||
onCancelStartTask() {
|
||||
this.cloudLayoutService.setCurrentTaskFilterParam({key: 'community'});
|
||||
this.router.navigate([`/cloud/community/tasks`]);
|
||||
}
|
||||
|
||||
openSnackMessage(event: any) {
|
||||
this.notificationService.openSnackMessage(
|
||||
event.response.body.message
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
<adf-cloud-edit-task-filter
|
||||
[id]="filterId"
|
||||
[filterProperties]="taskFilterProperties.filterProperties"
|
||||
[sortProperties]="taskFilterProperties.sortProperties"
|
||||
[actions]="taskFilterProperties.actions"
|
||||
(action)="onTaskFilterAction($event)"
|
||||
(filterChange)="onFilterChange($event)">
|
||||
</adf-cloud-edit-task-filter>
|
||||
<div
|
||||
class="app-cloud-task-list-container"
|
||||
*ngIf="editedFilter">
|
||||
<adf-cloud-task-list
|
||||
#taskCloud
|
||||
class="app-cloud-layout-overflow"
|
||||
[processDefinitionId]="editedFilter.processDefinitionId"
|
||||
[processInstanceId]="editedFilter.processInstanceId"
|
||||
[name]="editedFilter.taskName"
|
||||
[id]="editedFilter.taskId"
|
||||
[parentTaskId]="editedFilter.parentTaskId"
|
||||
[priority]="editedFilter.priority"
|
||||
[owner]="editedFilter.owner"
|
||||
[lastModifiedFrom]="editedFilter.lastModifiedFrom"
|
||||
[lastModifiedTo]="editedFilter.lastModifiedTo"
|
||||
[status]="editedFilter.status"
|
||||
[assignee]="editedFilter.assignee"
|
||||
[createdDate]="editedFilter.createdDate"
|
||||
[dueDate]="editedFilter.dueDate"
|
||||
[sorting]="sortArray"
|
||||
[multiselect]="multiselect"
|
||||
[selectionMode]="selectionMode"
|
||||
(rowClick)="onRowClick($event)"
|
||||
(rowsSelected)="onRowsSelected($event)">
|
||||
</adf-cloud-task-list>
|
||||
<adf-pagination
|
||||
[target]="taskCloud"
|
||||
(changePageSize)="onChangePageSize($event)"
|
||||
(nextPage)="resetSelectedRows()"
|
||||
(prevPage)="resetSelectedRows()">
|
||||
</adf-pagination>
|
||||
<div *ngIf="testingMode">
|
||||
Selected rows:
|
||||
<ul>
|
||||
<li *ngFor="let row of selectedRows" [attr.data-automation-id]="row.id">{{ row.name }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,27 +0,0 @@
|
||||
app-community-tasks-cloud-demo {
|
||||
height: 100%;
|
||||
min-height: 100%;
|
||||
min-width: 100%;
|
||||
width: 100%;
|
||||
|
||||
.adf-cloud-layout-tab-body {
|
||||
.mat-tab-body-wrapper {
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.app-cloud-task-list-container {
|
||||
place-content: stretch space-between;
|
||||
align-items: stretch;
|
||||
margin-top: 2px;
|
||||
}
|
||||
|
||||
&, .app-cloud-task-list-container {
|
||||
flex-direction: column;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.app-cloud-layout-overflow, .app-cloud-task-list-container {
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
@@ -1,148 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Component, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';
|
||||
import {
|
||||
TaskFilterCloudModel,
|
||||
TaskFilterCloudService,
|
||||
TaskListCloudComponent,
|
||||
TaskListCloudSortingModel
|
||||
} from '@alfresco/adf-process-services-cloud';
|
||||
import { AppConfigService, UserPreferencesService } from '@alfresco/adf-core';
|
||||
import { ActivatedRoute, Router } from '@angular/router';
|
||||
import { CloudLayoutService } from '../services/cloud-layout.service';
|
||||
import { Subject } from 'rxjs';
|
||||
import { takeUntil } from 'rxjs/operators';
|
||||
import { Pagination } from '@alfresco/js-api';
|
||||
|
||||
const ACTION_SAVE_AS = 'saveAs';
|
||||
const TASK_FILTER_PROPERTY_KEYS = 'adf-edit-task-filter';
|
||||
|
||||
@Component({
|
||||
selector: 'app-community-tasks-cloud-demo',
|
||||
templateUrl: './community-task-cloud.component.html',
|
||||
styleUrls: ['./community-task-cloud.component.scss'],
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class CommunityTasksCloudDemoComponent implements OnInit, OnDestroy {
|
||||
@ViewChild('taskCloud')
|
||||
taskCloud: TaskListCloudComponent;
|
||||
|
||||
isFilterLoaded = false;
|
||||
|
||||
selectedRow: any;
|
||||
|
||||
sortArray: TaskListCloudSortingModel[];
|
||||
editedFilter: TaskFilterCloudModel;
|
||||
taskFilterProperties: any = { filterProperties: [], sortProperties: [], actions: [] };
|
||||
|
||||
filterId;
|
||||
multiselect: boolean;
|
||||
selectedRows: any[] = [];
|
||||
testingMode: boolean;
|
||||
selectionMode: string;
|
||||
taskDetailsRedirection: boolean;
|
||||
|
||||
private onDestroy$ = new Subject<boolean>();
|
||||
|
||||
constructor(
|
||||
private cloudLayoutService: CloudLayoutService,
|
||||
private route: ActivatedRoute,
|
||||
private router: Router,
|
||||
private taskFilterCloudService: TaskFilterCloudService,
|
||||
private userPreference: UserPreferencesService,
|
||||
private appConfig: AppConfigService) {
|
||||
|
||||
const properties = this.appConfig.get<Array<any>>(TASK_FILTER_PROPERTY_KEYS);
|
||||
if (properties) {
|
||||
this.taskFilterProperties = properties;
|
||||
}
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.isFilterLoaded = false;
|
||||
this.route.queryParams.subscribe((params) => {
|
||||
if (Object.keys(params).length > 0) {
|
||||
this.isFilterLoaded = true;
|
||||
this.onFilterChange(params);
|
||||
this.filterId = params.id;
|
||||
} else {
|
||||
setTimeout( () => {
|
||||
this.loadDefaultFilters();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
this.cloudLayoutService
|
||||
.settings$
|
||||
.pipe(takeUntil(this.onDestroy$))
|
||||
.subscribe(settings => this.setCurrentSettings(settings));
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
this.onDestroy$.next(true);
|
||||
this.onDestroy$.complete();
|
||||
}
|
||||
|
||||
loadDefaultFilters() {
|
||||
this.taskFilterCloudService
|
||||
.getTaskListFilters('community')
|
||||
.subscribe((filters: TaskFilterCloudModel[]) => {
|
||||
this.onFilterChange(filters[0]);
|
||||
});
|
||||
}
|
||||
|
||||
setCurrentSettings(settings) {
|
||||
if (settings) {
|
||||
this.multiselect = settings.multiselect;
|
||||
this.testingMode = settings.testingMode;
|
||||
this.selectionMode = settings.selectionMode;
|
||||
this.taskDetailsRedirection = settings.taskDetailsRedirection;
|
||||
}
|
||||
}
|
||||
|
||||
onChangePageSize(event: Pagination) {
|
||||
this.userPreference.paginationSize = event.maxItems;
|
||||
}
|
||||
|
||||
resetSelectedRows() {
|
||||
this.selectedRows = [];
|
||||
}
|
||||
|
||||
onRowClick(taskId: string) {
|
||||
if (!this.multiselect && this.selectionMode !== 'multiple' && this.taskDetailsRedirection) {
|
||||
this.router.navigate([`/cloud/community/task-details/${taskId}`]);
|
||||
}
|
||||
}
|
||||
|
||||
onRowsSelected(nodes) {
|
||||
this.resetSelectedRows();
|
||||
this.selectedRows = nodes.map((node) => node.obj);
|
||||
}
|
||||
|
||||
onFilterChange(filter: any) {
|
||||
this.editedFilter = Object.assign({}, filter);
|
||||
this.sortArray = [new TaskListCloudSortingModel({ orderBy: this.editedFilter.sort, direction: this.editedFilter.order })];
|
||||
}
|
||||
|
||||
onTaskFilterAction(filterAction: any) {
|
||||
this.cloudLayoutService.setCurrentTaskFilterParam({ id: filterAction.filter.id });
|
||||
if (filterAction.actionType === ACTION_SAVE_AS) {
|
||||
this.router.navigate([`/cloud/community/tasks/`], { queryParams: filterAction.filter });
|
||||
}
|
||||
}
|
||||
}
|
||||
-16
@@ -1,16 +0,0 @@
|
||||
<h4 data-automation-id="task-details-header">Simple page to show the taskId: {{ taskId }}</h4>
|
||||
|
||||
<div class="app-community-task-details-cloud-column">
|
||||
<div class="app-community-task-details-cloud-row">
|
||||
<adf-cloud-task-form
|
||||
[taskId]="taskId"
|
||||
(cancelClick)="goBack()"
|
||||
(taskClaimed)="onClaimTask()"
|
||||
(taskCompleted)="onTaskCompleted()"
|
||||
(taskUnclaimed)="onUnclaimTask()"
|
||||
(formSaved)="onFormSaved()"
|
||||
(error)="onError($event)">
|
||||
</adf-cloud-task-form>
|
||||
<adf-cloud-task-header [taskId]="taskId"></adf-cloud-task-header>
|
||||
</div>
|
||||
</div>
|
||||
-48
@@ -1,48 +0,0 @@
|
||||
app-community-task-details-cloud {
|
||||
.app {
|
||||
&-task-detail-container {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
&-task-title {
|
||||
margin-left: 15px;
|
||||
}
|
||||
|
||||
&-task-control {
|
||||
width: 70%;
|
||||
}
|
||||
|
||||
&-demop-card-container {
|
||||
width: 30%;
|
||||
font-family: inherit;
|
||||
}
|
||||
|
||||
&-community-task-details-cloud-column {
|
||||
margin: 0;
|
||||
flex-direction: column;
|
||||
|
||||
.app-community-task-details-cloud-row {
|
||||
flex-direction: row;
|
||||
|
||||
adf-cloud-task-form {
|
||||
flex: 1 1 100%;
|
||||
flex-direction: column;
|
||||
display: flex;
|
||||
max-width: 80%;
|
||||
}
|
||||
|
||||
adf-cloud-task-header {
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&-community-task-details-cloud-column, &-community-task-details-cloud-row {
|
||||
height: 100%;
|
||||
min-height: 100%;
|
||||
min-width: 100%;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
}
|
||||
-78
@@ -1,78 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Component, ViewEncapsulation } from '@angular/core';
|
||||
import { ActivatedRoute, Router } from '@angular/router';
|
||||
import { NotificationService } from '@alfresco/adf-core';
|
||||
|
||||
@Component({
|
||||
selector: 'app-community-task-details-cloud',
|
||||
templateUrl: './community-task-details-cloud.component.html',
|
||||
styleUrls: ['./community-task-details-cloud.component.scss'],
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class CommunityTaskDetailsCloudDemoComponent {
|
||||
|
||||
taskId: string;
|
||||
|
||||
constructor(
|
||||
private route: ActivatedRoute,
|
||||
private router: Router,
|
||||
private notificationService: NotificationService
|
||||
) {
|
||||
this.route.params.subscribe((params) => {
|
||||
this.taskId = params.taskId;
|
||||
});
|
||||
}
|
||||
|
||||
isTaskValid(): boolean {
|
||||
return this.taskId !== undefined;
|
||||
}
|
||||
|
||||
goBack() {
|
||||
this.router.navigate([`/cloud/community/`]);
|
||||
}
|
||||
|
||||
onCompletedTask() {
|
||||
this.goBack();
|
||||
}
|
||||
|
||||
onUnclaimTask() {
|
||||
this.goBack();
|
||||
}
|
||||
|
||||
onClaimTask() {
|
||||
this.goBack();
|
||||
}
|
||||
|
||||
onTaskCompleted() {
|
||||
this.goBack();
|
||||
}
|
||||
|
||||
onFormSaved() {
|
||||
this.notificationService.openSnackMessage('Task has been saved successfully');
|
||||
}
|
||||
|
||||
onError({ message: error }: Error) {
|
||||
let errorMessage;
|
||||
try {
|
||||
errorMessage = JSON.parse(error).message || JSON.parse(error).entry?.message;
|
||||
errorMessage = JSON.parse(errorMessage).message;
|
||||
} catch {}
|
||||
this.notificationService.showError(errorMessage || error);
|
||||
}
|
||||
}
|
||||
@@ -1,95 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { NgModule } from '@angular/core';
|
||||
import { Routes, RouterModule } from '@angular/router';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { CoreModule } from '@alfresco/adf-core';
|
||||
import {
|
||||
ProcessServicesCloudModule,
|
||||
LocalPreferenceCloudService,
|
||||
PROCESS_FILTERS_SERVICE_TOKEN,
|
||||
TASK_FILTERS_SERVICE_TOKEN
|
||||
} from '@alfresco/adf-process-services-cloud';
|
||||
|
||||
import { CommunityCloudComponent } from './community-cloud.component';
|
||||
import { CommunityTasksCloudDemoComponent } from './community-task-cloud.component';
|
||||
import { CommunityCloudFiltersDemoComponent } from './community-filters.component';
|
||||
import { CommunityProcessesCloudDemoComponent } from './community-processes-cloud.component';
|
||||
import { CommunityStartProcessCloudDemoComponent } from './community-start-process-cloud.component';
|
||||
import { CommunityStartTaskCloudDemoComponent } from './community-start-task-cloud.component';
|
||||
import { CommunityProcessDetailsCloudDemoComponent } from './community-process-details-cloud.component';
|
||||
import { CommunityTaskDetailsCloudDemoComponent } from './community-task-details-cloud.component';
|
||||
import { AppCloudSharedModule } from '../shared/cloud.shared.module';
|
||||
|
||||
const routes: Routes = [
|
||||
{
|
||||
path: '',
|
||||
component: CommunityCloudComponent,
|
||||
children: [
|
||||
{
|
||||
path: 'tasks',
|
||||
component: CommunityTasksCloudDemoComponent
|
||||
},
|
||||
{
|
||||
path: 'processes',
|
||||
component: CommunityProcessesCloudDemoComponent
|
||||
},
|
||||
{
|
||||
path: 'start-task',
|
||||
component: CommunityStartTaskCloudDemoComponent
|
||||
},
|
||||
{
|
||||
path: 'start-process',
|
||||
component: CommunityStartProcessCloudDemoComponent
|
||||
},
|
||||
{
|
||||
path: 'task-details/:taskId',
|
||||
component: CommunityTaskDetailsCloudDemoComponent
|
||||
},
|
||||
{
|
||||
path: 'process-details/:processInstanceId',
|
||||
component: CommunityProcessDetailsCloudDemoComponent
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule,
|
||||
CoreModule,
|
||||
ProcessServicesCloudModule,
|
||||
RouterModule.forChild(routes),
|
||||
AppCloudSharedModule
|
||||
],
|
||||
declarations: [
|
||||
CommunityCloudComponent,
|
||||
CommunityTasksCloudDemoComponent,
|
||||
CommunityCloudFiltersDemoComponent,
|
||||
CommunityProcessesCloudDemoComponent,
|
||||
CommunityStartProcessCloudDemoComponent,
|
||||
CommunityStartTaskCloudDemoComponent,
|
||||
CommunityProcessDetailsCloudDemoComponent,
|
||||
CommunityTaskDetailsCloudDemoComponent
|
||||
],
|
||||
providers: [
|
||||
{ provide: PROCESS_FILTERS_SERVICE_TOKEN, useClass: LocalPreferenceCloudService },
|
||||
{ provide: TASK_FILTERS_SERVICE_TOKEN, useClass: LocalPreferenceCloudService }
|
||||
]
|
||||
})
|
||||
export class AppCommunityModule {}
|
||||
@@ -1,128 +0,0 @@
|
||||
<mat-card class="app-section">
|
||||
<mat-card-title>People Cloud Component</mat-card-title>
|
||||
|
||||
<mat-card-content>
|
||||
<br>
|
||||
<mat-radio-group (change)="onChangePeopleMode($event)">
|
||||
<mat-radio-button [checked]="true" class="app-people-single-mode" data-automation-id="app-people-single-mode" value="single">Single Selection</mat-radio-button>
|
||||
<mat-radio-button class="app-people-multiple-mode" data-automation-id="app-people-multiple-mode" value="multiple">Multiple Selection</mat-radio-button>
|
||||
</mat-radio-group>
|
||||
<div class="app-people-control-options">
|
||||
<mat-form-field *ngIf="isPeopleAppNameSelected()" class="app-preselect-value">
|
||||
<mat-label>Application Name</mat-label>
|
||||
<input matInput (input)="setPeopleAppName($any($event).target?.value)" data-automation-id="app-people-app-input" />
|
||||
</mat-form-field>
|
||||
<mat-form-field class="app-preselect-value">
|
||||
<mat-label>Roles: ["ACTIVITI_ADMIN", "ACTIVITI_USER"]</mat-label>
|
||||
<input matInput (input)="setPeopleRoles($any($event).target?.value)" data-automation-id="app-people-roles-input"/>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="app-preselect-value">
|
||||
<mat-label>Groups Restriction ["hr", "sales"]</mat-label>
|
||||
<input matInput
|
||||
(input)="setPeopleGroupsRestriction($any($event).target?.value)"
|
||||
data-automation-id="app-people-groups-restriction-input"/>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="app-preselect-value-full">
|
||||
<mat-label>Preselect: {{ defaultPeoplePlaceholder }}</mat-label>
|
||||
<input matInput (input)="setPeoplePreselectValue($any($event).target?.value)" data-automation-id="app-people-preselect-input" />
|
||||
</mat-form-field>
|
||||
<mat-checkbox class="app-preselect-value" (change)="onChangePeopleValidation($event)">Preselect validation</mat-checkbox>
|
||||
<mat-checkbox data-automation-id="app-people-readonly" value="{{ peopleReadonly }}" (change)="onChangePeopleReadonly($event)">Read-only Mode</mat-checkbox>
|
||||
</div>
|
||||
<div>
|
||||
<adf-cloud-people
|
||||
[preSelectUsers]="preSelectUsers"
|
||||
[readOnly]="peopleReadonly"
|
||||
[validate]="peoplePreselectValidation"
|
||||
[appName]="peopleAppName"
|
||||
[roles]="peopleRoles"
|
||||
[groupsRestriction]="groupsRestriction"
|
||||
[title]="'ADF_TASK_LIST.START_TASK.FORM.LABEL.ASSIGNEE'"
|
||||
[mode]="peopleMode"
|
||||
(warning)="onUsersWarning($event)"></adf-cloud-people>
|
||||
</div>
|
||||
|
||||
<div class="app-people-list" *ngIf="peopleMode === 'multiple'">
|
||||
<h4>All Preselected Users</h4>
|
||||
<mat-list role="list">
|
||||
<mat-list-item *ngFor="let item of preSelectUsers" role="listitem">
|
||||
<mat-icon mat-list-icon>person</mat-icon>
|
||||
{{item | fullName}}
|
||||
</mat-list-item>
|
||||
</mat-list>
|
||||
|
||||
<div *ngIf="invalidUsers.length > 0">
|
||||
<h4>Invalid Users <mat-icon>warning</mat-icon> </h4>
|
||||
<mat-list role="list">
|
||||
<mat-list-item *ngFor="let invalidUser of invalidUsers" role="listitem">
|
||||
<mat-icon mat-list-icon>person</mat-icon>
|
||||
{{invalidUser | fullName}}
|
||||
</mat-list-item>
|
||||
</mat-list>
|
||||
</div>
|
||||
</div>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
|
||||
<mat-card class="app-section">
|
||||
<mat-card-title>Groups Cloud Component</mat-card-title>
|
||||
|
||||
<mat-card-content>
|
||||
<br>
|
||||
<mat-radio-group (change)="onChangeGroupsMode($event)">
|
||||
<mat-radio-button [checked]="true" class="app-people-single-mode" data-automation-id="app-group-single-mode" value="single">Single Selection</mat-radio-button>
|
||||
<mat-radio-button class="app-people-multiple-mode" data-automation-id="app-group-multiple-mode" value="multiple">Multiple Selection</mat-radio-button>
|
||||
</mat-radio-group>
|
||||
<div class="app-groups-control-options">
|
||||
<mat-form-field *ngIf="isGroupAppNameSelected()" class="app-preselect-value">
|
||||
<mat-label>Application Name</mat-label>
|
||||
<input matInput (input)="setGroupAppName($any($event).target?.value)" data-automation-id="app-group-app-input"/>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="app-preselect-value">
|
||||
<mat-label>Roles: ["ACTIVITI_ADMIN", "ACTIVITI_USER"]</mat-label>
|
||||
<input matInput (input)="setGroupRoles($any($event).target?.value)" data-automation-id="app-group-roles-input"/>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="app-preselect-value-full">
|
||||
<mat-label>Preselect: {{ defaultGroupPlaceholder }}</mat-label>
|
||||
<input matInput (input)="setGroupsPreselectValue($any($event).target?.value)" data-automation-id="app-group-preselect-input" />
|
||||
</mat-form-field>
|
||||
<mat-checkbox class="app-preselect-value" (change)="onChangeGroupValidation($event)">Preselect validation</mat-checkbox>
|
||||
<mat-checkbox
|
||||
data-automation-id="app-group-readonly"
|
||||
value="{{ groupReadonly }}"
|
||||
(change)="onChangeGroupReadonly($event)">
|
||||
Read-only Mode
|
||||
</mat-checkbox>
|
||||
</div>
|
||||
<div>
|
||||
<adf-cloud-group
|
||||
[mode]="groupMode"
|
||||
[readOnly]="groupReadonly"
|
||||
[validate]="groupPreselectValidation"
|
||||
[roles]="groupRoles"
|
||||
[appName]="groupAppName"
|
||||
[preSelectGroups]="preSelectGroup"
|
||||
(warning)="onGroupsWarning($event)"></adf-cloud-group>
|
||||
</div>
|
||||
|
||||
<div class="app-group-list" *ngIf="groupMode === 'multiple'">
|
||||
<h4>All Preselected Groups</h4>
|
||||
<mat-list role="list">
|
||||
<mat-list-item *ngFor="let item of preSelectGroup" role="listitem">
|
||||
<mat-icon mat-list-icon>group</mat-icon>
|
||||
{{ item.name }}
|
||||
</mat-list-item>
|
||||
</mat-list>
|
||||
|
||||
<div *ngIf="invalidGroups.length > 0">
|
||||
<h4>Invalid Groups <mat-icon>warning</mat-icon> </h4>
|
||||
<mat-list role="list">
|
||||
<mat-list-item *ngFor="let invalidGroup of invalidGroups" role="listitem">
|
||||
<mat-icon mat-list-icon>group</mat-icon>
|
||||
{{invalidGroup?.name}}
|
||||
</mat-list-item>
|
||||
</mat-list>
|
||||
</div>
|
||||
</div>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
@@ -1,31 +0,0 @@
|
||||
.app {
|
||||
&-section {
|
||||
mat-card-title {
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
mat-radio-group {
|
||||
margin: 7px 10px;
|
||||
|
||||
mat-radio-button {
|
||||
margin: 0 3px;
|
||||
}
|
||||
}
|
||||
|
||||
mat-card-content {
|
||||
.app-preselect-value {
|
||||
margin-right: 15px;
|
||||
min-width: 25%;
|
||||
|
||||
&-big {
|
||||
width: 60%;
|
||||
}
|
||||
|
||||
&-full {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,164 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Component, ViewEncapsulation } from '@angular/core';
|
||||
import { ComponentSelectionMode, IdentityUserModel, IdentityGroupModel } from '@alfresco/adf-process-services-cloud';
|
||||
import { MatCheckboxChange } from '@angular/material/checkbox';
|
||||
import { MatRadioChange } from '@angular/material/radio';
|
||||
|
||||
@Component({
|
||||
selector: 'app-people-groups-cloud',
|
||||
templateUrl: './people-groups-cloud-demo.component.html',
|
||||
styleUrls: ['./people-groups-cloud-demo.component.scss'],
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class PeopleGroupCloudDemoComponent {
|
||||
|
||||
defaultFilterMode: string = 'appName';
|
||||
defaultGroupPlaceholder: string = `[{"id": "1", "name":"activitiUserGroup"}]`;
|
||||
defaultPeoplePlaceholder: string = `[{"id": "1", email": "user@user.com", "firstName":"user", "lastName": "lastName", "username": "user"}]`;
|
||||
|
||||
peopleMode: ComponentSelectionMode = 'single';
|
||||
preSelectUsers: IdentityUserModel[] = [];
|
||||
invalidUsers: IdentityUserModel[] = [];
|
||||
peopleRoles: string[] = [];
|
||||
groupsRestriction: string[] = [];
|
||||
peopleAppName: string;
|
||||
peopleFilterMode: string = this.defaultFilterMode;
|
||||
peoplePreselectValidation = false;
|
||||
groupPreselectValidation = false;
|
||||
peopleReadonly = false;
|
||||
groupReadonly = false;
|
||||
|
||||
groupMode: ComponentSelectionMode = 'single';
|
||||
preSelectGroup: IdentityGroupModel[] = [];
|
||||
invalidGroups: IdentityGroupModel[] = [];
|
||||
groupRoles: string[];
|
||||
groupAppName: string;
|
||||
groupFilterMode: string = this.defaultFilterMode;
|
||||
|
||||
setPeoplePreselectValue(value: string): void {
|
||||
this.preSelectUsers = this.getArrayFromString(value);
|
||||
}
|
||||
|
||||
setGroupsPreselectValue(value: string): void {
|
||||
this.preSelectGroup = this.getArrayFromString(value);
|
||||
}
|
||||
|
||||
setPeopleRoles(value: string): void {
|
||||
this.peopleRoles = this.getArrayFromString(value);
|
||||
}
|
||||
|
||||
setGroupRoles(value: string): void {
|
||||
this.groupRoles = this.getArrayFromString(value);
|
||||
}
|
||||
|
||||
setPeopleAppName(value: string): void {
|
||||
this.peopleAppName = value;
|
||||
}
|
||||
|
||||
setGroupAppName(value: string): void {
|
||||
this.groupAppName = value;
|
||||
}
|
||||
|
||||
setPeopleGroupsRestriction(value: string): void {
|
||||
this.groupsRestriction = this.getArrayFromString(value);
|
||||
}
|
||||
|
||||
onChangePeopleMode(event: MatRadioChange): void {
|
||||
this.peopleMode = event.value;
|
||||
}
|
||||
|
||||
onChangePeopleReadonly(event: MatCheckboxChange): void {
|
||||
this.peopleReadonly = event.checked;
|
||||
}
|
||||
|
||||
onChangeGroupReadonly(event: MatCheckboxChange): void {
|
||||
this.groupReadonly = event.checked;
|
||||
}
|
||||
|
||||
onChangeGroupsMode(event: MatRadioChange): void {
|
||||
this.groupMode = event.value;
|
||||
}
|
||||
|
||||
onChangePeopleFilterMode(event: MatRadioChange): void {
|
||||
this.peopleFilterMode = event.value;
|
||||
this.resetPeopleFilter();
|
||||
}
|
||||
|
||||
onChangeGroupsFilterMode(event: MatRadioChange): void {
|
||||
this.groupFilterMode = event.value;
|
||||
this.restGroupFilter();
|
||||
}
|
||||
|
||||
isPeopleAppNameSelected(): boolean {
|
||||
return this.peopleFilterMode === 'appName';
|
||||
}
|
||||
|
||||
isGroupAppNameSelected(): boolean {
|
||||
return this.groupFilterMode === 'appName';
|
||||
}
|
||||
|
||||
resetPeopleFilter(): void {
|
||||
if (this.isPeopleAppNameSelected()) {
|
||||
this.peopleRoles = [];
|
||||
} else {
|
||||
this.peopleAppName = '';
|
||||
}
|
||||
}
|
||||
|
||||
restGroupFilter(): void {
|
||||
if (this.isGroupAppNameSelected()) {
|
||||
this.groupRoles = [];
|
||||
} else {
|
||||
this.groupAppName = '';
|
||||
}
|
||||
}
|
||||
|
||||
onChangePeopleValidation(event: MatCheckboxChange): void {
|
||||
this.peoplePreselectValidation = event.checked;
|
||||
}
|
||||
|
||||
onChangeGroupValidation(event: MatCheckboxChange): void {
|
||||
this.groupPreselectValidation = event.checked;
|
||||
}
|
||||
|
||||
onGroupsWarning(warning: any): void {
|
||||
this.invalidGroups = warning.groups;
|
||||
}
|
||||
|
||||
onUsersWarning(warning: any): void {
|
||||
this.invalidUsers = warning.users;
|
||||
}
|
||||
|
||||
isStringArray(str: string): boolean {
|
||||
try {
|
||||
const result = JSON.parse(str);
|
||||
return Array.isArray(result);
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private getArrayFromString<T = any>(value: string): T[] {
|
||||
if (this.isStringArray(value)) {
|
||||
return JSON.parse(value);
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -185,7 +185,7 @@ export class ProcessesCloudDemoComponent implements OnInit, OnDestroy {
|
||||
}
|
||||
|
||||
private loadFilter(model: ProcessFilterCloudModel) {
|
||||
if (model && model.appName && model.id) {
|
||||
if (model?.appName && model.id) {
|
||||
this.editedFilter = model;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
<adf-cloud-service-task-filters
|
||||
[appName]="appName"
|
||||
[filterParam]="{index: 0}"
|
||||
(filterClicked)="onTaskFilterSelected($event)"
|
||||
(filterSelected)="onTaskFilterSelected($event)">
|
||||
</adf-cloud-service-task-filters>
|
||||
<div class="app-task-list-with-filter">
|
||||
<adf-cloud-edit-service-task-filter
|
||||
[id]="filterId"
|
||||
[appName]="appName"
|
||||
[filterProperties]="taskFilterProperties.filterProperties"
|
||||
[sortProperties]="taskFilterProperties.sortProperties"
|
||||
[actions]="taskFilterProperties.actions"
|
||||
(filterChange)="onFilterChange($event)">
|
||||
</adf-cloud-edit-service-task-filter>
|
||||
<div
|
||||
class="app-task-list-container"
|
||||
*ngIf="editedFilter">
|
||||
<adf-cloud-service-task-list
|
||||
#taskCloud
|
||||
[queryParams]="editedFilter"
|
||||
class="app-cloud-layout-overflow"
|
||||
[appName]="editedFilter.appName"
|
||||
[sorting]="sortArray"
|
||||
[multiselect]="multiselect"
|
||||
[selectionMode]="selectionMode"
|
||||
[stickyHeader]="true"
|
||||
[showActions]="actionMenu"
|
||||
[showContextMenu]="contextMenu">
|
||||
</adf-cloud-service-task-list>
|
||||
<adf-pagination
|
||||
[target]="taskCloud"
|
||||
(changePageSize)="onChangePageSize($event)"
|
||||
(nextPage)="resetSelectedRows()"
|
||||
(prevPage)="resetSelectedRows()">
|
||||
</adf-pagination>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,25 +0,0 @@
|
||||
app-service-task-list-cloud-demo {
|
||||
min-height: 100%;
|
||||
min-width: 100%;
|
||||
display: flex;
|
||||
|
||||
.app-task-list-with-filter, .app-task-list-container {
|
||||
flex-direction: column;
|
||||
display: flex;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
&, .app-task-list-container {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.app-task-list-container {
|
||||
place-content: stretch space-between;
|
||||
align-items: stretch;
|
||||
|
||||
.app-cloud-layout-overflow {
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,114 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Component, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';
|
||||
import {
|
||||
ServiceTaskFilterCloudModel,
|
||||
ServiceTaskListCloudComponent,
|
||||
TaskListCloudSortingModel
|
||||
} from '@alfresco/adf-process-services-cloud';
|
||||
import { AppConfigService, PaginationModel, UserPreferencesService } from '@alfresco/adf-core';
|
||||
import { CloudLayoutService, CloudServiceSettings } from './services/cloud-layout.service';
|
||||
import { Subject } from 'rxjs';
|
||||
import { takeUntil } from 'rxjs/operators';
|
||||
|
||||
const TASK_FILTER_PROPERTY_KEYS = 'adf-edit-service-task-filter';
|
||||
|
||||
@Component({
|
||||
selector: 'app-service-task-list-cloud-demo',
|
||||
templateUrl: './service-task-list-cloud-demo.component.html',
|
||||
styleUrls: ['./service-task-list-cloud-demo.component.scss'],
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class ServiceTaskListCloudDemoComponent implements OnInit, OnDestroy {
|
||||
@ViewChild('taskCloud')
|
||||
taskCloud: ServiceTaskListCloudComponent;
|
||||
|
||||
appName = 'simpleapp';
|
||||
|
||||
isFilterLoaded = false;
|
||||
|
||||
selectedRow: any;
|
||||
|
||||
sortArray: TaskListCloudSortingModel[];
|
||||
editedFilter: ServiceTaskFilterCloudModel;
|
||||
taskFilterProperties: any = { filterProperties: [], sortProperties: [], actions: [] };
|
||||
|
||||
multiselect: boolean;
|
||||
selectedRows: string[] = [];
|
||||
actionMenu: boolean;
|
||||
contextMenu: boolean;
|
||||
actions: any[] = [];
|
||||
selectedAction: { id: number; name: string; actionType: string};
|
||||
selectedContextAction: { id: number; name: string; actionType: string};
|
||||
selectionMode: string;
|
||||
filterId: string;
|
||||
|
||||
private onDestroy$ = new Subject<boolean>();
|
||||
|
||||
constructor(
|
||||
private cloudLayoutService: CloudLayoutService,
|
||||
private userPreference: UserPreferencesService,
|
||||
private appConfig: AppConfigService) {
|
||||
|
||||
const properties = this.appConfig.get<Array<any>>(TASK_FILTER_PROPERTY_KEYS);
|
||||
if (properties === this.taskFilterProperties) {
|
||||
this.taskFilterProperties = properties;
|
||||
}
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.isFilterLoaded = false;
|
||||
this.cloudLayoutService.settings$
|
||||
.pipe(takeUntil(this.onDestroy$))
|
||||
.subscribe(settings => this.setCurrentSettings(settings));
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
this.onDestroy$.next(true);
|
||||
this.onDestroy$.complete();
|
||||
}
|
||||
|
||||
setCurrentSettings(settings: CloudServiceSettings) {
|
||||
if (settings) {
|
||||
this.multiselect = settings.multiselect;
|
||||
this.selectionMode = settings.selectionMode;
|
||||
this.actionMenu = settings.actionMenu;
|
||||
this.contextMenu = settings.contextMenu;
|
||||
this.actions = settings.actions;
|
||||
}
|
||||
}
|
||||
|
||||
onTaskFilterSelected(filter: ServiceTaskFilterCloudModel) {
|
||||
this.filterId = filter.id;
|
||||
this.editedFilter = filter;
|
||||
}
|
||||
|
||||
onChangePageSize(event: PaginationModel) {
|
||||
this.userPreference.paginationSize = event.maxItems;
|
||||
}
|
||||
|
||||
resetSelectedRows() {
|
||||
this.selectedRows = [];
|
||||
}
|
||||
|
||||
onFilterChange(filter: ServiceTaskFilterCloudModel) {
|
||||
this.appName = filter.appName;
|
||||
this.editedFilter = Object.assign({}, filter);
|
||||
this.sortArray = [new TaskListCloudSortingModel({ orderBy: this.editedFilter.sort, direction: this.editedFilter.order })];
|
||||
}
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
<h2>Task Header Cloud</h2>
|
||||
|
||||
<mat-form-field class="app-appName-input">
|
||||
App name
|
||||
<input matInput
|
||||
[type]="'text'"
|
||||
[formControl]="appNameFormControl"
|
||||
(change)="updateTaskHeader()">
|
||||
</mat-form-field>
|
||||
|
||||
<mat-form-field class="app-taskId-input">
|
||||
Task id
|
||||
<input matInput
|
||||
[type]="'text'"
|
||||
[formControl]="taskIdFormControl"
|
||||
(change)="updateTaskHeader()">
|
||||
</mat-form-field>
|
||||
|
||||
<mat-error *ngIf="errorMessage">{{errorMessage}}</mat-error>
|
||||
|
||||
<div>
|
||||
<adf-cloud-task-header #taskHeader
|
||||
[appName]="appName"
|
||||
[taskId]="taskId"
|
||||
(error)="onError($event)">
|
||||
</adf-cloud-task-header>
|
||||
</div>
|
||||
@@ -1,15 +0,0 @@
|
||||
.app {
|
||||
&-appName-input {
|
||||
width: 500px;
|
||||
margin-right: 50px;
|
||||
}
|
||||
|
||||
&-taskId-input {
|
||||
width: 500px;
|
||||
}
|
||||
|
||||
&-find-task-button {
|
||||
background-color: #ff9800;
|
||||
margin-left: 30px;
|
||||
}
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Component, ViewChild } from '@angular/core';
|
||||
import { TaskHeaderCloudComponent } from '@alfresco/adf-process-services-cloud';
|
||||
import { UntypedFormControl } from '@angular/forms';
|
||||
|
||||
@Component({
|
||||
templateUrl: './task-header-cloud-demo.component.html',
|
||||
styleUrls: ['./task-header-cloud-demo.component.scss']
|
||||
})
|
||||
export class TaskHeaderCloudDemoComponent {
|
||||
@ViewChild('taskHeader', { static: true })
|
||||
taskHeader: TaskHeaderCloudComponent;
|
||||
|
||||
appName: string;
|
||||
taskId: string;
|
||||
|
||||
errorMessage;
|
||||
|
||||
appNameFormControl = new UntypedFormControl('');
|
||||
taskIdFormControl = new UntypedFormControl('');
|
||||
|
||||
constructor() {}
|
||||
|
||||
updateTaskHeader() {
|
||||
this.errorMessage = undefined;
|
||||
this.appName = this.appNameFormControl.value;
|
||||
this.taskId = this.taskIdFormControl.value;
|
||||
}
|
||||
|
||||
onError(error) {
|
||||
this.errorMessage = error;
|
||||
}
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
<div>
|
||||
<mat-nav-list class="app-list-confgurations">
|
||||
|
||||
<mat-list-item (click)="appConfigClick()">
|
||||
<a matLine id="adf-app-conf">App Config Editor</a>
|
||||
<button mat-icon-button>
|
||||
<mat-icon>info</mat-icon>
|
||||
</button>
|
||||
</mat-list-item>
|
||||
|
||||
<mat-list-item (click)="infinitePaginationConfClick()">
|
||||
<a matLine id="adf-infinite-pagination-conf">Infinite pagination</a>
|
||||
<button mat-icon-button>
|
||||
<mat-icon>info</mat-icon>
|
||||
</button>
|
||||
</mat-list-item>
|
||||
|
||||
<mat-list-item (click)="supportedPageSizesClick()">
|
||||
<a matLine id="adf-supported-page-size">Supported Page Sizes </a>
|
||||
<button mat-icon-button>
|
||||
<mat-icon>info</mat-icon>
|
||||
</button>
|
||||
</mat-list-item>
|
||||
|
||||
<mat-list-item (click)="textOrientationClick()">
|
||||
<a matLine id="adf-page-orientation-conf">Page Orientation</a>
|
||||
<button mat-icon-button>
|
||||
<mat-icon>info</mat-icon>
|
||||
</button>
|
||||
</mat-list-item>
|
||||
</mat-nav-list>
|
||||
|
||||
<div>
|
||||
<ngx-monaco-editor id="adf-code-configuration-editor"
|
||||
class="app-file-editor"
|
||||
[options]="editorOptions"
|
||||
[(ngModel)]="code"
|
||||
(onInit)="onInit($event)">
|
||||
</ngx-monaco-editor>
|
||||
<div class="app-list-confgurations-buttons">
|
||||
<button mat-raised-button id="adf-configuration-save" (click)="onSave()" color="primary">
|
||||
Save
|
||||
</button>
|
||||
<button mat-raised-button id="adf-configuration-clear" (click)="onClear()" color="primary">
|
||||
Clear
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,16 +0,0 @@
|
||||
.app-file-editor {
|
||||
height: 500px;
|
||||
width: 65%;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.app-list-configurations {
|
||||
float: left;
|
||||
width: 30%;
|
||||
}
|
||||
|
||||
.app-list-configurations-buttons {
|
||||
width: 200px;
|
||||
margin-left: 30%;
|
||||
float: left;
|
||||
}
|
||||
@@ -1,143 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Component, OnDestroy } from '@angular/core';
|
||||
import {
|
||||
AppConfigService,
|
||||
NotificationService,
|
||||
UserPreferencesService,
|
||||
UserPreferenceValues
|
||||
} from '@alfresco/adf-core';
|
||||
import { Subject } from 'rxjs';
|
||||
import { takeUntil } from 'rxjs/operators';
|
||||
|
||||
@Component({
|
||||
selector: 'app-config-editor',
|
||||
templateUrl: './config-editor.component.html',
|
||||
styleUrls: ['./config-editor.component.scss']
|
||||
})
|
||||
export class ConfigEditorComponent implements OnDestroy {
|
||||
|
||||
private onDestroy$ = new Subject<boolean>();
|
||||
|
||||
editor: any;
|
||||
code: any;
|
||||
field: string;
|
||||
invalidJson = false;
|
||||
isUserPreference = false;
|
||||
userPreferenceProperty: string;
|
||||
|
||||
editorOptions = {
|
||||
theme: 'vs-dark',
|
||||
language: 'json',
|
||||
autoIndent: true,
|
||||
formatOnPaste: true,
|
||||
formatOnType: true
|
||||
};
|
||||
|
||||
onInit(editor) {
|
||||
this.editor = editor;
|
||||
this.indentCode();
|
||||
}
|
||||
|
||||
constructor(private appConfig: AppConfigService,
|
||||
private userPreferencesService: UserPreferencesService,
|
||||
private notificationService: NotificationService) {
|
||||
this.code = JSON.stringify(appConfig.config);
|
||||
}
|
||||
|
||||
onSave() {
|
||||
try {
|
||||
if (this.isUserPreference) {
|
||||
this.userPreferencesService.set(this.userPreferenceProperty, JSON.parse(this.editor.getValue()));
|
||||
} else {
|
||||
this.appConfig.config = JSON.parse(this.editor.getValue());
|
||||
}
|
||||
} catch (error) {
|
||||
this.invalidJson = true;
|
||||
this.notificationService.openSnackMessage('Wrong Code configuration ' + error);
|
||||
} finally {
|
||||
if (!this.invalidJson) {
|
||||
this.notificationService.openSnackMessage('Saved');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onClear() {
|
||||
this.code = '';
|
||||
}
|
||||
|
||||
appConfigClick() {
|
||||
this.isUserPreference = false;
|
||||
this.code = JSON.stringify(this.appConfig.config);
|
||||
this.indentCode();
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
this.onDestroy$.next(true);
|
||||
this.onDestroy$.complete();
|
||||
}
|
||||
|
||||
textOrientationClick() {
|
||||
this.isUserPreference = true;
|
||||
this.userPreferenceProperty = 'textOrientation';
|
||||
|
||||
this.userPreferencesService
|
||||
.select(this.userPreferenceProperty)
|
||||
.pipe(takeUntil(this.onDestroy$))
|
||||
.subscribe((textOrientation: number) => {
|
||||
this.code = JSON.stringify(textOrientation);
|
||||
this.field = 'textOrientation';
|
||||
this.indentCode();
|
||||
});
|
||||
|
||||
this.indentCode();
|
||||
}
|
||||
|
||||
infinitePaginationConfClick() {
|
||||
this.isUserPreference = true;
|
||||
this.userPreferenceProperty = UserPreferenceValues.PaginationSize;
|
||||
this.userPreferencesService
|
||||
.select(this.userPreferenceProperty)
|
||||
.pipe(takeUntil(this.onDestroy$))
|
||||
.subscribe((pageSize: number) => {
|
||||
this.code = JSON.stringify(pageSize);
|
||||
this.field = 'adf-infinite-pagination';
|
||||
this.indentCode();
|
||||
});
|
||||
}
|
||||
|
||||
supportedPageSizesClick() {
|
||||
this.isUserPreference = true;
|
||||
this.userPreferenceProperty = UserPreferenceValues.SupportedPageSizes;
|
||||
this.userPreferencesService
|
||||
.select(this.userPreferenceProperty)
|
||||
.pipe(takeUntil(this.onDestroy$))
|
||||
.subscribe((supportedPageSizes: number) => {
|
||||
this.code = JSON.stringify(supportedPageSizes);
|
||||
this.field = 'adf-supported-page-size';
|
||||
this.indentCode();
|
||||
});
|
||||
}
|
||||
|
||||
indentCode() {
|
||||
setTimeout(() => {
|
||||
this.editor.getAction('editor.action.formatDocument').run();
|
||||
}, 300);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { NgModule } from '@angular/core';
|
||||
import { ConfigEditorComponent } from './config-editor.component';
|
||||
import { Routes, RouterModule } from '@angular/router';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { CoreModule } from '@alfresco/adf-core';
|
||||
import { MonacoEditorModule } from 'ngx-monaco-editor-v2';
|
||||
|
||||
const routes: Routes = [
|
||||
{
|
||||
path: '',
|
||||
component: ConfigEditorComponent
|
||||
}
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule,
|
||||
CoreModule,
|
||||
RouterModule.forChild(routes),
|
||||
MonacoEditorModule
|
||||
],
|
||||
declarations: [ConfigEditorComponent]
|
||||
})
|
||||
export class AppConfigEditorModule {}
|
||||
@@ -84,7 +84,7 @@ export class FileViewComponent implements OnInit {
|
||||
if (id) {
|
||||
this.nodeApiService.getNode(id).subscribe(
|
||||
(node) => {
|
||||
if (node && node.isFile) {
|
||||
if (node?.isFile) {
|
||||
this.isCommentEnabled = this.contentServices.hasPermissions(node, PermissionsEnum.NOT_CONSUMER) ||
|
||||
this.contentServices.hasAllowableOperations(node, AllowableOperationsEnum.UPDATE);
|
||||
this.nodeId = id;
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
<adf-toolbar>
|
||||
<adf-toolbar-title>
|
||||
<mat-form-field>
|
||||
<mat-select [(ngModel)]="selectedSource" data-automation-id="custom-sources-select">
|
||||
<mat-option *ngFor="let source of sources" [value]="source.value">
|
||||
{{ source.title }}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
</adf-toolbar-title>
|
||||
<adf-toolbar-divider></adf-toolbar-divider>
|
||||
<button mat-icon-button
|
||||
[disabled]="!hasSelection(customSourcesDocumentList.selection)"
|
||||
title="Download"
|
||||
[adfNodeDownload]="customSourcesDocumentList.selection">
|
||||
<mat-icon>get_app</mat-icon>
|
||||
</button>
|
||||
</adf-toolbar>
|
||||
<adf-document-list
|
||||
#customSourcesDocumentList
|
||||
[currentFolderId]="selectedSource"
|
||||
locationFormat="/files"
|
||||
selectionMode="multiple">
|
||||
</adf-document-list>
|
||||
@@ -1,49 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Component, Input, ViewChild, ViewEncapsulation } from '@angular/core';
|
||||
import { DocumentListComponent } from '@alfresco/adf-content-services';
|
||||
|
||||
@Component({
|
||||
selector: 'app-custom-sources',
|
||||
templateUrl: './custom-sources.component.html',
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class CustomSourcesComponent {
|
||||
|
||||
@Input()
|
||||
selectedSource = '-recent-';
|
||||
|
||||
@ViewChild('customSourcesDocumentList', { static: true })
|
||||
documentList: DocumentListComponent;
|
||||
|
||||
sources = [
|
||||
{ title: 'Favorites', value: '-favorites-' },
|
||||
{ title: 'Recent', value: '-recent-' },
|
||||
{ title: 'Shared Links', value: '-sharedlinks-' },
|
||||
{ title: 'Sites', value: '-sites-' },
|
||||
{ title: 'My Sites', value: '-mysites-' },
|
||||
{ title: 'Trashcan', value: '-trashcan-' },
|
||||
{ title: 'Root', value: '-root-' },
|
||||
{ title: 'My', value: '-my-' },
|
||||
{ title: 'Shared', value: '-shared-' }
|
||||
];
|
||||
|
||||
hasSelection(selection: any[]): boolean {
|
||||
return selection && selection.length > 0;
|
||||
}
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { NgModule } from '@angular/core';
|
||||
import { CustomSourcesComponent } from './custom-sources.component';
|
||||
import { Routes, RouterModule } from '@angular/router';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { CoreModule } from '@alfresco/adf-core';
|
||||
import { ContentModule } from '@alfresco/adf-content-services';
|
||||
|
||||
const routes: Routes = [
|
||||
{
|
||||
path: '',
|
||||
component: CustomSourcesComponent
|
||||
}
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule,
|
||||
RouterModule.forChild(routes),
|
||||
CoreModule,
|
||||
ContentModule.forChild()
|
||||
],
|
||||
declarations: [CustomSourcesComponent]
|
||||
})
|
||||
export class AppCustomSourcesModule {}
|
||||
@@ -50,23 +50,6 @@
|
||||
[adf-create-folder]="currentFolderId">
|
||||
<mat-icon>create_new_folder</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
mat-icon-button
|
||||
title="Create Library}"
|
||||
data-automation-id="create-new-library"
|
||||
(click)="createLibrary()">
|
||||
<mat-icon>library_add</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
data-automation-id="edit-folder"
|
||||
mat-icon-button
|
||||
[disabled]="!canEditFolder(documentList.selection)"
|
||||
title="Edit folder"
|
||||
(error)="openSnackMessageError($event)"
|
||||
[adf-edit-folder]="documentList.selection[0]?.entry"
|
||||
(success)="documentList.reload()">
|
||||
<mat-icon>create</mat-icon>
|
||||
</button>
|
||||
<button mat-icon-button
|
||||
[disabled]="!hasSelection(documentList.selection)"
|
||||
title="Download"
|
||||
@@ -83,23 +66,6 @@
|
||||
[adf-delete]="documentList.selection">
|
||||
<mat-icon>delete</mat-icon>
|
||||
</button>
|
||||
<button
|
||||
data-automation-id="favorite"
|
||||
mat-icon-button
|
||||
[disabled]="!documentList.selection.length"
|
||||
#favorite="adfFavorite"
|
||||
[adf-node-favorite]="documentList.selection"
|
||||
title="Add to favorites">
|
||||
<mat-icon>{{ favorite.hasFavorites() ? 'star' :'star_border' }}</mat-icon>
|
||||
</button>
|
||||
<button mat-icon-button
|
||||
[disabled]="documentList.selection.length && !shareRef.isFile"
|
||||
[baseShareUrl]="baseShareUrl"
|
||||
#shareRef="adfShare"
|
||||
[adf-share]="documentList.selection[0]"
|
||||
[title]="(shareRef.isShared ? 'Edit settings' : 'Share')">
|
||||
<mat-icon>share</mat-icon>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<button mat-icon-button (click)="showVersions = !showVersions" class="app-show-versions-button"
|
||||
@@ -124,11 +90,6 @@
|
||||
<mat-icon>create_new_folder</mat-icon>
|
||||
<span>New folder</span>
|
||||
</button>
|
||||
<button mat-menu-item
|
||||
(click)="createLibrary()">
|
||||
<mat-icon>library_add</mat-icon>
|
||||
<span>Create Library</span>
|
||||
</button>
|
||||
<button mat-menu-item
|
||||
[disabled]="!canEditFolder(documentList.selection)"
|
||||
(error)="openSnackMessageError($event)"
|
||||
@@ -270,24 +231,6 @@
|
||||
title="Download"
|
||||
handler="download">
|
||||
</content-action>
|
||||
<content-action
|
||||
icon="content_copy"
|
||||
title="Copy"
|
||||
permission="copy"
|
||||
[disableWithNoPermission]="true"
|
||||
(error)="onContentActionError($event)"
|
||||
(success)="onContentActionSuccess($event)"
|
||||
handler="copy">
|
||||
</content-action>
|
||||
<content-action
|
||||
icon="redo"
|
||||
title="Move"
|
||||
permission="update"
|
||||
[disableWithNoPermission]="true"
|
||||
(error)="onContentActionError($event)"
|
||||
(success)="onContentActionSuccess($event)"
|
||||
handler="move">
|
||||
</content-action>
|
||||
<content-action
|
||||
icon="delete"
|
||||
permission="delete"
|
||||
@@ -316,13 +259,6 @@
|
||||
title="Manage versions"
|
||||
(execute)="onManageVersions($event)">
|
||||
</content-action>
|
||||
<content-action
|
||||
target="document"
|
||||
icon="lock"
|
||||
permission="lock"
|
||||
handler="lock"
|
||||
title="Lock">
|
||||
</content-action>
|
||||
<content-action
|
||||
icon="beach_access"
|
||||
target="document"
|
||||
@@ -450,12 +386,6 @@
|
||||
</mat-slide-toggle>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<mat-slide-toggle id="adf-document-list-enable-drop-files" [checked]="allowDropFiles" (change)="toggleAllowDropFiles()">
|
||||
Enable Drop Files in a folder or a file
|
||||
</mat-slide-toggle>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<mat-slide-toggle id="adf-version-upload-switch" [(ngModel)]="versioning">
|
||||
Enable versioning
|
||||
@@ -504,39 +434,6 @@
|
||||
</mat-slide-toggle>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<mat-slide-toggle [(ngModel)]="enableDownloadPrompt" id="enableDownloadPrompt" (change)="onEnableDownloadPrompt()">
|
||||
Enable Download Prompt
|
||||
</mat-slide-toggle>
|
||||
</section>
|
||||
<section *ngIf="enableDownloadPrompt">
|
||||
<mat-form-field>
|
||||
<input matInput type="number" [(ngModel)]="downloadPromptDelay" (change)="onDownloadPromptDelayChange()">
|
||||
</mat-form-field>
|
||||
</section>
|
||||
|
||||
<section *ngIf="enableDownloadPrompt">
|
||||
<mat-slide-toggle [(ngModel)]="enableDownloadPromptReminder" id="enableDownloadPromptReminders" (change)="onEnableDownloadPromptReminderChange()">
|
||||
Enable Download Prompt Reminders
|
||||
</mat-slide-toggle>
|
||||
</section>
|
||||
<section *ngIf="enableDownloadPrompt && enableDownloadPromptReminder">
|
||||
<mat-form-field>
|
||||
<input matInput type="number" [(ngModel)]="downloadPromptReminderDelay" (change)="onDownloadPromptReminderChange()">
|
||||
</mat-form-field>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<mat-slide-toggle [(ngModel)]="enableFileAutoDownload" id="enableFileAutoDownload" (change)="onEnableFileAutoDownloadChange()">
|
||||
Enable FileAutoDownload
|
||||
</mat-slide-toggle>
|
||||
</section>
|
||||
<section *ngIf="enableFileAutoDownload">
|
||||
<mat-form-field>
|
||||
<input matInput type="number" [(ngModel)]="fileAutoDownloadSizeThresholdInMB" (change)="onFileAutoDownloadSizeThresholdChange()">
|
||||
</mat-form-field>
|
||||
</section>
|
||||
|
||||
<h5>Upload</h5>
|
||||
<section *ngIf="acceptedFilesTypeShow">
|
||||
<mat-form-field floatPlaceholder="float">
|
||||
@@ -555,7 +452,6 @@
|
||||
<div *ngIf="!acceptedFilesTypeShow">
|
||||
<adf-upload-button
|
||||
#uploadButton
|
||||
tooltip="Custom tooltip"
|
||||
[disabled]="!enableUpload"
|
||||
[rootFolderId]="documentList.currentFolderId"
|
||||
[multipleFiles]="multipleFileUpload"
|
||||
@@ -572,7 +468,6 @@
|
||||
<div *ngIf="acceptedFilesTypeShow">
|
||||
<adf-upload-button
|
||||
#uploadButton
|
||||
tooltip="Custom tooltip"
|
||||
[disabled]="!enableUpload"
|
||||
[rootFolderId]="documentList.currentFolderId"
|
||||
[acceptedFilesType]="acceptedFilesType"
|
||||
|
||||
@@ -31,17 +31,8 @@ import {
|
||||
import { Location } from '@angular/common';
|
||||
import { MatDialog } from '@angular/material/dialog';
|
||||
import { ActivatedRoute, Params, Router } from '@angular/router';
|
||||
import { NodeEntry, NodePaging, Pagination, Node, SiteEntry, SearchEntry } from '@alfresco/js-api';
|
||||
import {
|
||||
MinimalNodeEntity,
|
||||
NodePaging,
|
||||
Pagination,
|
||||
MinimalNodeEntryEntity,
|
||||
SiteEntry,
|
||||
SearchEntry
|
||||
} from '@alfresco/js-api';
|
||||
import {
|
||||
AppConfigService,
|
||||
AppConfigValues,
|
||||
NotificationService,
|
||||
DataRow,
|
||||
UserPreferencesService,
|
||||
@@ -60,13 +51,11 @@ import {
|
||||
PermissionStyleModel,
|
||||
UploadFilesEvent,
|
||||
ConfirmDialogComponent,
|
||||
LibraryDialogComponent,
|
||||
ContentMetadataService,
|
||||
FilterSearch,
|
||||
DialogAspectListService,
|
||||
FileUploadEvent,
|
||||
NodesApiService,
|
||||
SharedLinksApiService
|
||||
NodesApiService
|
||||
} from '@alfresco/adf-content-services';
|
||||
import { ProcessFormRenderingService } from '@alfresco/adf-process-services';
|
||||
import { VersionManagerDialogAdapterComponent } from './version-manager-dialog-adapter.component';
|
||||
@@ -82,12 +71,9 @@ const DEFAULT_FOLDER_TO_SHOW = '-my-';
|
||||
templateUrl: './files.component.html',
|
||||
styleUrls: ['./files.component.scss'],
|
||||
encapsulation: ViewEncapsulation.None,
|
||||
providers: [
|
||||
{provide: FormRenderingService, useClass: ProcessFormRenderingService}
|
||||
]
|
||||
providers: [{ provide: FormRenderingService, useClass: ProcessFormRenderingService }]
|
||||
})
|
||||
export class FilesComponent implements OnInit, OnChanges, OnDestroy {
|
||||
|
||||
protected onDestroy$ = new Subject<boolean>();
|
||||
|
||||
errorMessage: string = null;
|
||||
@@ -98,14 +84,10 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
|
||||
displayMode = DisplayMode.List;
|
||||
includeFields = ['isFavorite', 'isLocked', 'aspectNames', 'definition'];
|
||||
|
||||
baseShareUrl = (
|
||||
this.appConfig.get<string>(AppConfigValues.BASESHAREURL) ||
|
||||
this.appConfig.get<string>(AppConfigValues.ECMHOST)) + '/preview/s/';
|
||||
|
||||
selectionModes = [
|
||||
{value: 'none', viewValue: 'None'},
|
||||
{value: 'single', viewValue: 'Single'},
|
||||
{value: 'multiple', viewValue: 'Multiple'}
|
||||
{ value: 'none', viewValue: 'None' },
|
||||
{ value: 'single', viewValue: 'Single' },
|
||||
{ value: 'multiple', viewValue: 'Multiple' }
|
||||
];
|
||||
|
||||
// The identifier of a node. You can also use one of these well-known aliases: -my- | -shared- | -root-
|
||||
@@ -214,13 +196,13 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
|
||||
@Output()
|
||||
deleteElementSuccess: EventEmitter<any> = new EventEmitter();
|
||||
|
||||
@ViewChild('documentList', {static: true})
|
||||
@ViewChild('documentList', { static: true })
|
||||
documentList: DocumentListComponent;
|
||||
|
||||
@ViewChild('standardPagination')
|
||||
standardPagination: PaginationComponent;
|
||||
|
||||
@ViewChild(InfinitePaginationComponent, {static: true})
|
||||
@ViewChild(InfinitePaginationComponent, { static: true })
|
||||
infinitePaginationComponent: InfinitePaginationComponent;
|
||||
|
||||
permissionsStyle: PermissionStyleModel[] = [];
|
||||
@@ -232,32 +214,24 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
|
||||
displayEmptyMetadata = false;
|
||||
hyperlinkNavigation = false;
|
||||
|
||||
enableDownloadPrompt = this.appConfig.get<boolean>('viewer.enableDownloadPrompt', false);
|
||||
enableDownloadPromptReminder: boolean = this.appConfig.get('viewer.enableDownloadPromptReminders', false);
|
||||
downloadPromptDelay = this.appConfig.get('viewer.downloadPromptDelay', 50);
|
||||
downloadPromptReminderDelay = this.appConfig.get('viewer.downloadPromptReminderDelay', 30);
|
||||
enableFileAutoDownload: boolean = this.appConfig.get('viewer.enableFileAutoDownload', true);
|
||||
fileAutoDownloadSizeThresholdInMB: number = this.appConfig.get('viewer.fileAutoDownloadSizeThresholdInMB', 15);
|
||||
|
||||
constructor(private notificationService: NotificationService,
|
||||
private uploadService: UploadService,
|
||||
private contentService: ContentService,
|
||||
private dialog: MatDialog,
|
||||
private location: Location,
|
||||
private router: Router,
|
||||
private appConfig: AppConfigService,
|
||||
private preference: UserPreferencesService,
|
||||
private preview: PreviewService,
|
||||
@Optional() private route: ActivatedRoute,
|
||||
private contentMetadataService: ContentMetadataService,
|
||||
private sharedLinksApiService: SharedLinksApiService,
|
||||
private dialogAspectListService: DialogAspectListService,
|
||||
private nodeService: NodesApiService) {
|
||||
}
|
||||
constructor(
|
||||
private notificationService: NotificationService,
|
||||
private uploadService: UploadService,
|
||||
private contentService: ContentService,
|
||||
private dialog: MatDialog,
|
||||
private location: Location,
|
||||
private router: Router,
|
||||
private preference: UserPreferencesService,
|
||||
private preview: PreviewService,
|
||||
@Optional() private route: ActivatedRoute,
|
||||
private contentMetadataService: ContentMetadataService,
|
||||
private dialogAspectListService: DialogAspectListService,
|
||||
private nodeService: NodesApiService
|
||||
) {}
|
||||
|
||||
showFile(event) {
|
||||
const entry = event.value.entry;
|
||||
if (entry && entry.isFile) {
|
||||
if (entry?.isFile) {
|
||||
this.preview.showResource(entry.id);
|
||||
}
|
||||
}
|
||||
@@ -267,11 +241,6 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
|
||||
this.documentList.reload();
|
||||
}
|
||||
|
||||
toggleAllowDropFiles() {
|
||||
this.allowDropFiles = !this.allowDropFiles;
|
||||
this.documentList.reload();
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
if (!this.pagination) {
|
||||
this.pagination = {
|
||||
@@ -302,33 +271,17 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
|
||||
this.onFileUploadEvent(value[0]);
|
||||
});
|
||||
|
||||
this.uploadService.fileUploadDeleted
|
||||
.pipe(takeUntil(this.onDestroy$))
|
||||
.subscribe(value => this.onFileUploadEvent(value));
|
||||
this.uploadService.fileUploadDeleted.pipe(takeUntil(this.onDestroy$)).subscribe((value) => this.onFileUploadEvent(value));
|
||||
|
||||
this.contentService.folderCreated
|
||||
.pipe(takeUntil(this.onDestroy$))
|
||||
.subscribe(value => this.onFolderCreated(value));
|
||||
this.contentService.folderCreated.pipe(takeUntil(this.onDestroy$)).subscribe((value) => this.onFolderCreated(value));
|
||||
|
||||
this.contentService.folderCreate
|
||||
.pipe(takeUntil(this.onDestroy$))
|
||||
.subscribe(value => this.onFolderAction(value));
|
||||
this.contentService.folderCreate.pipe(takeUntil(this.onDestroy$)).subscribe((value) => this.onFolderAction(value));
|
||||
|
||||
this.contentService.folderEdit
|
||||
.pipe(takeUntil(this.onDestroy$))
|
||||
.subscribe(value => this.onFolderAction(value));
|
||||
this.contentService.folderEdit.pipe(takeUntil(this.onDestroy$)).subscribe((value) => this.onFolderAction(value));
|
||||
|
||||
this.contentMetadataService.error
|
||||
.pipe(takeUntil(this.onDestroy$))
|
||||
.subscribe((err: { message: string }) => {
|
||||
this.notificationService.showError(err.message);
|
||||
});
|
||||
|
||||
this.sharedLinksApiService.error
|
||||
.pipe(takeUntil(this.onDestroy$))
|
||||
.subscribe((err: { message: string }) => {
|
||||
this.notificationService.showError(err.message);
|
||||
});
|
||||
this.contentMetadataService.error.pipe(takeUntil(this.onDestroy$)).subscribe((err: { message: string }) => {
|
||||
this.notificationService.showError(err.message);
|
||||
});
|
||||
}
|
||||
|
||||
onFileUploadEvent(event: FileUploadEvent) {
|
||||
@@ -343,7 +296,7 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
|
||||
}
|
||||
|
||||
ngOnChanges(changes: SimpleChanges) {
|
||||
if (changes.nodeResult && changes.nodeResult.currentValue) {
|
||||
if (changes.nodeResult?.currentValue) {
|
||||
this.nodeResult = changes.nodeResult.currentValue;
|
||||
this.pagination = this.nodeResult.list.pagination;
|
||||
}
|
||||
@@ -361,9 +314,9 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
|
||||
} as Pagination;
|
||||
}
|
||||
|
||||
getCurrentDocumentListNode(): MinimalNodeEntity[] {
|
||||
getCurrentDocumentListNode(): NodeEntry[] {
|
||||
if (this.documentList.folderNode) {
|
||||
return [{entry: this.documentList.folderNode}];
|
||||
return [{ entry: this.documentList.folderNode }];
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
@@ -433,11 +386,6 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
|
||||
this.openSnackMessageError(message);
|
||||
}
|
||||
|
||||
onContentActionSuccess(message: string) {
|
||||
this.openSnackMessageInfo(message);
|
||||
this.documentList.reload();
|
||||
}
|
||||
|
||||
onDeleteActionSuccess(message: string) {
|
||||
this.uploadService.fileDeleted.next(message);
|
||||
this.deleteElementSuccess.emit();
|
||||
@@ -456,7 +404,7 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
|
||||
|
||||
if (this.contentService.hasAllowableOperations(contentEntry, 'update')) {
|
||||
this.dialog.open(VersionManagerDialogAdapterComponent, {
|
||||
data: {contentEntry, showComments, allowDownload},
|
||||
data: { contentEntry, showComments, allowDownload },
|
||||
panelClass: 'adf-version-manager-dialog',
|
||||
width: '630px'
|
||||
});
|
||||
@@ -467,7 +415,7 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
|
||||
|
||||
onAspectUpdate(event: any) {
|
||||
this.dialogAspectListService.openAspectListDialog(event.value.entry.id).subscribe((aspectList) => {
|
||||
this.nodeService.updateNode(event.value.entry.id, {aspectNames: [...aspectList]}).subscribe(() => {
|
||||
this.nodeService.updateNode(event.value.entry.id, { aspectNames: [...aspectList] }).subscribe(() => {
|
||||
this.openSnackMessageInfo('Node Aspects Updated');
|
||||
});
|
||||
});
|
||||
@@ -516,18 +464,18 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
|
||||
return null;
|
||||
}
|
||||
|
||||
canEditFolder(selection: Array<MinimalNodeEntity>): boolean {
|
||||
canEditFolder(selection: Array<NodeEntry>): boolean {
|
||||
if (selection && selection.length === 1) {
|
||||
const entry = selection[0].entry;
|
||||
|
||||
if (entry && entry.isFolder) {
|
||||
if (entry?.isFolder) {
|
||||
return this.contentService.hasAllowableOperations(entry, 'update');
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
canCreateContent(parentNode: MinimalNodeEntryEntity): boolean {
|
||||
canCreateContent(parentNode: Node): boolean {
|
||||
if (parentNode) {
|
||||
return this.contentService.hasAllowableOperations(parentNode, 'create');
|
||||
}
|
||||
@@ -561,10 +509,7 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
|
||||
|
||||
toggleGalleryView(): void {
|
||||
this.displayMode = this.displayMode === DisplayMode.List ? DisplayMode.Gallery : DisplayMode.List;
|
||||
const url = this
|
||||
.router
|
||||
.createUrlTree(['/files', this.currentFolderId, 'display', this.displayMode])
|
||||
.toString();
|
||||
const url = this.router.createUrlTree(['/files', this.currentFolderId, 'display', this.displayMode]).toString();
|
||||
|
||||
this.location.go(url);
|
||||
}
|
||||
@@ -624,18 +569,8 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
|
||||
return this.acceptedFilesTypeShow ? this.acceptedFilesType : '*';
|
||||
}
|
||||
|
||||
createLibrary(): void {
|
||||
const dialogInstance: any = this.dialog.open(LibraryDialogComponent, {
|
||||
width: '400px'
|
||||
});
|
||||
|
||||
dialogInstance.componentInstance.error.subscribe((message: string) => {
|
||||
this.notificationService.openSnackMessage(message);
|
||||
});
|
||||
}
|
||||
|
||||
searchResultsHighlight(search: SearchEntry): string {
|
||||
if (search && search.highlight) {
|
||||
if (search?.highlight) {
|
||||
return search.highlight.map((currentHighlight) => currentHighlight.snippets).join(', ');
|
||||
}
|
||||
return '';
|
||||
@@ -653,7 +588,7 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
|
||||
const objectFromMap = {};
|
||||
activeFilters.forEach((filter: FilterSearch) => {
|
||||
let paramValue = null;
|
||||
if (filter.value && filter.value.from && filter.value.to) {
|
||||
if (filter.value?.from && filter.value.to) {
|
||||
paramValue = `${filter.value.from}||${filter.value.to}`;
|
||||
} else {
|
||||
paramValue = filter.value;
|
||||
@@ -661,7 +596,7 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
|
||||
objectFromMap[filter.key] = paramValue;
|
||||
});
|
||||
|
||||
this.router.navigate([], {relativeTo: this.route, queryParams: objectFromMap});
|
||||
this.router.navigate([], { relativeTo: this.route, queryParams: objectFromMap });
|
||||
}
|
||||
|
||||
clearFilterNavigation() {
|
||||
@@ -673,34 +608,4 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
|
||||
}
|
||||
this.documentList.reload();
|
||||
}
|
||||
|
||||
onEnableDownloadPrompt() {
|
||||
const previewConfig = this.appConfig?.config['viewer'];
|
||||
previewConfig['enableDownloadPrompt'] = this.enableDownloadPrompt;
|
||||
}
|
||||
|
||||
onDownloadPromptDelayChange() {
|
||||
const previewConfig = this.appConfig?.config['viewer'];
|
||||
previewConfig['downloadPromptDelay'] = this.downloadPromptDelay;
|
||||
}
|
||||
|
||||
onEnableDownloadPromptReminderChange() {
|
||||
const previewConfig = this.appConfig?.config['viewer'];
|
||||
previewConfig['enableDownloadPromptReminder'] = this.enableDownloadPromptReminder;
|
||||
}
|
||||
|
||||
onDownloadPromptReminderChange() {
|
||||
const previewConfig = this.appConfig?.config['viewer'];
|
||||
previewConfig['downloadPromptReminderDelay'] = this.downloadPromptReminderDelay;
|
||||
}
|
||||
|
||||
onEnableFileAutoDownloadChange() {
|
||||
const previewConfig = this.appConfig?.config['viewer'];
|
||||
previewConfig['enableFileAutoDownload'] = this.enableFileAutoDownload;
|
||||
}
|
||||
|
||||
onFileAutoDownloadSizeThresholdChange() {
|
||||
const previewConfig = this.appConfig?.config['viewer'];
|
||||
previewConfig['fileAutoDownloadSizeThresholdInMB'] = this.fileAutoDownloadSizeThresholdInMB;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,20 +17,17 @@
|
||||
|
||||
import { Component, Inject, ViewEncapsulation } from '@angular/core';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import { MinimalNodeEntryEntity } from '@alfresco/js-api';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
|
||||
@Component({
|
||||
templateUrl: './metadata-dialog-adapter.component.html',
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class MetadataDialogAdapterComponent {
|
||||
|
||||
public contentEntry: MinimalNodeEntryEntity;
|
||||
|
||||
contentEntry: Node;
|
||||
displayEmptyMetadata = false;
|
||||
|
||||
constructor(@Inject(MAT_DIALOG_DATA) data: any,
|
||||
private containingDialog?: MatDialogRef<MetadataDialogAdapterComponent>) {
|
||||
constructor(@Inject(MAT_DIALOG_DATA) data: any, private containingDialog?: MatDialogRef<MetadataDialogAdapterComponent>) {
|
||||
this.contentEntry = data.contentEntry;
|
||||
this.displayEmptyMetadata = data.displayEmptyMetadata;
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
import { Component, Inject, ViewEncapsulation } from '@angular/core';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import { MinimalNodeEntryEntity } from '@alfresco/js-api';
|
||||
import { Node } from '@alfresco/js-api';
|
||||
import { PreviewService } from '../../services/preview.service';
|
||||
import { NotificationService } from '@alfresco/adf-core';
|
||||
import { FileUploadErrorEvent } from '@alfresco/adf-content-services';
|
||||
@@ -27,28 +27,27 @@ import { FileUploadErrorEvent } from '@alfresco/adf-content-services';
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class VersionManagerDialogAdapterComponent {
|
||||
|
||||
public contentEntry: MinimalNodeEntryEntity;
|
||||
public newFileVersion: File;
|
||||
|
||||
contentEntry: Node;
|
||||
newFileVersion: File;
|
||||
showComments = true;
|
||||
allowDownload = true;
|
||||
readOnly = false;
|
||||
showVersionComparison = false;
|
||||
|
||||
constructor(private previewService: PreviewService,
|
||||
private notificationService: NotificationService,
|
||||
@Inject(MAT_DIALOG_DATA) data: any,
|
||||
private containingDialog?: MatDialogRef<VersionManagerDialogAdapterComponent>) {
|
||||
constructor(
|
||||
private previewService: PreviewService,
|
||||
private notificationService: NotificationService,
|
||||
@Inject(MAT_DIALOG_DATA) data: any,
|
||||
private containingDialog?: MatDialogRef<VersionManagerDialogAdapterComponent>
|
||||
) {
|
||||
this.contentEntry = data.contentEntry;
|
||||
this.newFileVersion = data.hasOwnProperty('newFileVersion') ? data.newFileVersion : this.newFileVersion;
|
||||
this.showComments = data.hasOwnProperty('showComments') ? data.showComments : this.showComments;
|
||||
this.allowDownload = data.hasOwnProperty('allowDownload') ? data.allowDownload : this.allowDownload;
|
||||
this.newFileVersion = Object.prototype.hasOwnProperty.call(data, 'newFileVersion') ? data.newFileVersion : this.newFileVersion;
|
||||
this.showComments = Object.prototype.hasOwnProperty.call(data, 'showComments') ? data.showComments : this.showComments;
|
||||
this.allowDownload = Object.prototype.hasOwnProperty.call(data, 'allowDownload') ? data.allowDownload : this.allowDownload;
|
||||
}
|
||||
|
||||
uploadError(event: FileUploadErrorEvent) {
|
||||
const errorMessage = event.error;
|
||||
this.notificationService.showError(errorMessage);
|
||||
this.notificationService.showError(event.error);
|
||||
}
|
||||
|
||||
close() {
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Observable, of } from 'rxjs';
|
||||
import { Injectable } from '@angular/core';
|
||||
|
||||
import {
|
||||
TaskFormService
|
||||
} from '@alfresco/adf-process-services';
|
||||
import { AlfrescoApiService, LogService } from '@alfresco/adf-core';
|
||||
|
||||
@Injectable()
|
||||
export class FakeTaskFormService extends TaskFormService {
|
||||
|
||||
constructor(apiService: AlfrescoApiService, logService: LogService) {
|
||||
super(apiService, logService);
|
||||
}
|
||||
|
||||
public getRestFieldValues(
|
||||
taskId: string,
|
||||
fieldId: string
|
||||
): Observable<any> {
|
||||
if (fieldId === 'typeaheadField') {
|
||||
return of([
|
||||
{ id: '1', name: 'Leanne Graham' },
|
||||
{ id: '2', name: 'Ervin Howell' },
|
||||
{ id: '3', name: 'Clementine Bauch' },
|
||||
{ id: '4', name: 'Patricia Lebsack' },
|
||||
{ id: '5', name: 'Chelsey Dietrich' },
|
||||
{ id: '6', name: 'Mrs. Dennis Schulist' },
|
||||
{ id: '7', name: 'Kurtis Weissnat' },
|
||||
{ id: '8', name: 'Nicholas Runolfsdottir V' },
|
||||
{ id: '9', name: 'Glenna Reichert' },
|
||||
{ id: '10', name: 'Clementina DuBuque' }
|
||||
]);
|
||||
} else {
|
||||
return super.getRestFieldValues(taskId, fieldId);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
<adf-form-list [forms]="formList" (row-dblclick)="onRowDblClick($any($event))">
|
||||
</adf-form-list>
|
||||
<div class="app-form-container" *ngIf="!isEmptyForm()">
|
||||
<adf-form #adfForm [form]="form" [data]="restoredData" [showValidationIcon]="showValidationIcon">
|
||||
</adf-form>
|
||||
</div>
|
||||
<button mat-button (click)="store()">Store</button>
|
||||
<button mat-button (click)="restore()">Restore</button>
|
||||
<section class="app-form-list-margin">
|
||||
<mat-slide-toggle [(ngModel)]="showValidationIcon">Show Validation Icon</mat-slide-toggle>
|
||||
</section>
|
||||
@@ -1,12 +0,0 @@
|
||||
.app-form-container {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.app-store-form-container {
|
||||
width: 80%;
|
||||
height: 80%;
|
||||
}
|
||||
|
||||
.app-form-list-margin {
|
||||
margin-left: 26px;
|
||||
}
|
||||
@@ -1,100 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Component, ViewChild, OnDestroy, OnInit } from '@angular/core';
|
||||
import { FormModel, FormService, LogService, FormOutcomeEvent } from '@alfresco/adf-core';
|
||||
import { FormComponent, EditorService } from '@alfresco/adf-process-services';
|
||||
import { Subject } from 'rxjs';
|
||||
import { takeUntil } from 'rxjs/operators';
|
||||
|
||||
@Component({
|
||||
selector: 'app-form-list',
|
||||
templateUrl: './form-list.component.html',
|
||||
styleUrls: ['./form-list.component.scss']
|
||||
})
|
||||
export class FormListComponent implements OnInit, OnDestroy {
|
||||
|
||||
@ViewChild('adfForm')
|
||||
activitiForm: FormComponent;
|
||||
|
||||
formList: any [] = [];
|
||||
|
||||
form: FormModel;
|
||||
formId: string;
|
||||
|
||||
storedData: any = {};
|
||||
restoredData: any = {};
|
||||
|
||||
showValidationIcon = false;
|
||||
private onDestroy$ = new Subject<boolean>();
|
||||
|
||||
constructor(private formService: FormService, private editorService: EditorService, private logService: LogService) {
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
// Prevent default outcome actions
|
||||
this.formService.executeOutcome
|
||||
.pipe(takeUntil(this.onDestroy$))
|
||||
.subscribe((formOutcomeEvent: FormOutcomeEvent) => {
|
||||
formOutcomeEvent.preventDefault();
|
||||
this.logService.log(formOutcomeEvent.outcome);
|
||||
});
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
this.onDestroy$.next(true);
|
||||
this.onDestroy$.complete();
|
||||
}
|
||||
|
||||
onRowDblClick(event: CustomEvent<any>) {
|
||||
const rowForm = event.detail.value.obj;
|
||||
|
||||
this.editorService.getFormDefinitionById(rowForm.id).subscribe((formModel) => {
|
||||
const form = this.formService.parseForm(formModel.formDefinition);
|
||||
this.form = form;
|
||||
});
|
||||
|
||||
this.logService.log(rowForm);
|
||||
}
|
||||
|
||||
isEmptyForm() {
|
||||
return this.form === null || this.form === undefined;
|
||||
}
|
||||
|
||||
store() {
|
||||
this.clone(this.activitiForm.form.values, this.storedData);
|
||||
this.logService.log('DATA SAVED');
|
||||
this.logService.log(this.storedData);
|
||||
this.logService.log('DATA SAVED');
|
||||
this.restoredData = null;
|
||||
}
|
||||
|
||||
clone(objToCopyFrom, objToCopyTo) {
|
||||
for (const attribute in objToCopyFrom) {
|
||||
if (objToCopyFrom.hasOwnProperty(attribute)) {
|
||||
objToCopyTo[attribute] = objToCopyFrom[attribute];
|
||||
}
|
||||
}
|
||||
return objToCopyTo;
|
||||
}
|
||||
|
||||
restore() {
|
||||
this.restoredData = this.storedData;
|
||||
this.storedData = {};
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
<div class="app-form-container">
|
||||
<mat-accordion>
|
||||
<mat-expansion-panel>
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-title>Form Data</mat-panel-title>
|
||||
<mat-panel-description>Enter values to populate the form</mat-panel-description>
|
||||
</mat-expansion-panel-header>
|
||||
<mat-list>
|
||||
<mat-list-item>
|
||||
<mat-form-field>
|
||||
<input matInput placeholder="Typeahead" [(ngModel)]="typeaheadFieldValue">
|
||||
</mat-form-field>
|
||||
</mat-list-item>
|
||||
<mat-list-item>
|
||||
<mat-form-field>
|
||||
<input matInput placeholder="DropDown" [(ngModel)]="selectFieldValue">
|
||||
</mat-form-field>
|
||||
</mat-list-item>
|
||||
<mat-list-item>
|
||||
<mat-form-field>
|
||||
<input matInput placeholder="Radio Button" [(ngModel)]="radioButtonFieldValue">
|
||||
</mat-form-field>
|
||||
</mat-list-item>
|
||||
</mat-list>
|
||||
<button mat-button color="primary" (click)="onLoadButtonClicked()">Load</button>
|
||||
</mat-expansion-panel>
|
||||
</mat-accordion>
|
||||
<mat-divider></mat-divider>
|
||||
<adf-form [showRefreshButton]="false" [form]="form" [data]="formattedData">
|
||||
</adf-form>
|
||||
</div>
|
||||
@@ -1,3 +0,0 @@
|
||||
.app-form-container {
|
||||
padding: 10px;
|
||||
}
|
||||
@@ -1,77 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Component, Inject, OnInit, OnDestroy } from '@angular/core';
|
||||
import {
|
||||
FormModel,
|
||||
FormService,
|
||||
FormOutcomeEvent,
|
||||
CoreAutomationService
|
||||
} from '@alfresco/adf-core';
|
||||
import {
|
||||
TaskFormService
|
||||
} from '@alfresco/adf-process-services';
|
||||
import { InMemoryFormService } from '../../services/in-memory-form.service';
|
||||
import { FakeTaskFormService } from './fake-tak-form.service';
|
||||
import { Subject } from 'rxjs';
|
||||
import { takeUntil } from 'rxjs/operators';
|
||||
|
||||
@Component({
|
||||
selector: 'app-form-loading',
|
||||
templateUrl: './form-loading.component.html',
|
||||
styleUrls: ['./form-loading.component.scss'],
|
||||
providers: [{ provide: FakeTaskFormService, useClass: TaskFormService }]
|
||||
})
|
||||
export class FormLoadingComponent implements OnInit, OnDestroy {
|
||||
form: FormModel;
|
||||
typeaheadFieldValue = '';
|
||||
selectFieldValue = '';
|
||||
radioButtonFieldValue = '';
|
||||
formattedData = {};
|
||||
|
||||
private onDestroy$ = new Subject<boolean>();
|
||||
|
||||
constructor(
|
||||
@Inject(FormService) private formService: InMemoryFormService,
|
||||
private automationService: CoreAutomationService
|
||||
) {}
|
||||
|
||||
ngOnInit() {
|
||||
this.formService.executeOutcome
|
||||
.pipe(takeUntil(this.onDestroy$))
|
||||
.subscribe((formOutcomeEvent: FormOutcomeEvent) => {
|
||||
formOutcomeEvent.preventDefault();
|
||||
});
|
||||
|
||||
this.formattedData = {};
|
||||
const formDefinitionJSON: any = this.automationService.forms.getSimpleFormDefinition();
|
||||
this.form = this.formService.parseForm(formDefinitionJSON);
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
this.onDestroy$.next(true);
|
||||
this.onDestroy$.complete();
|
||||
}
|
||||
|
||||
onLoadButtonClicked() {
|
||||
this.formattedData = {
|
||||
typeaheadField: this.typeaheadFieldValue,
|
||||
selectBox: this.selectFieldValue,
|
||||
radioButton: this.radioButtonFieldValue
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -1,20 +1,18 @@
|
||||
<div class="main-content">
|
||||
|
||||
<mat-tab-group>
|
||||
<mat-tab-group [animationDuration]="'0'">
|
||||
<mat-tab label="Form">
|
||||
<div class="app-form-container">
|
||||
<adf-form
|
||||
[showRefreshButton]="false"
|
||||
[form]="form"
|
||||
[enableFixedSpacedForm]="keepPrefixedSpace"
|
||||
(formError)="logErrors($event)">
|
||||
</adf-form>
|
||||
</div>
|
||||
|
||||
<div class="app-console" #console>
|
||||
<h3>Error log:</h3>
|
||||
<p *ngFor="let error of errorFields">Error {{ error.name }} {{error.validationSummary.message |
|
||||
translate}}</p>
|
||||
<p *ngFor="let error of errorFields">Error {{ error.name }} {{error.validationSummary.message | translate}}</p>
|
||||
</div>
|
||||
</mat-tab>
|
||||
<mat-tab label="Editor">
|
||||
@@ -26,15 +24,11 @@
|
||||
(onInit)="onInitFormEditor($event)">
|
||||
</ngx-monaco-editor>
|
||||
<div class="app-form-editor-buttons">
|
||||
<button mat-raised-button id="app-form-config-save" (click)="onSaveFormConfig()" color="primary">Save
|
||||
form config
|
||||
</button>
|
||||
<button mat-raised-button id="app-form-config-clear" (click)="onClearFormConfig()" color="primary">Clear
|
||||
form config
|
||||
</button>
|
||||
<button mat-raised-button id="app-form-config-save" (click)="onSaveFormConfig()">Save form config</button>
|
||||
<button mat-raised-button id="app-form-config-clear" (click)="onClearFormConfig()">Clear form config</button>
|
||||
</div>
|
||||
<div class="app-upload-config-button">
|
||||
<a mat-raised-button color="primary" >
|
||||
<a mat-raised-button>
|
||||
<mat-icon>file_upload</mat-icon>
|
||||
<label for="upload-config-file">Upload JSON File</label>
|
||||
<input
|
||||
@@ -46,14 +40,7 @@
|
||||
(change)="onConfigAdded($event)">
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</mat-tab>
|
||||
<mat-tab label="Options">
|
||||
<mat-slide-toggle [checked]="keepPrefixedSpace" (change)="togglePrefixedSpace()" >
|
||||
Keep prefixed space for hidden field
|
||||
</mat-slide-toggle>
|
||||
</mat-tab>
|
||||
|
||||
</mat-tab-group>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -33,12 +33,10 @@ import { takeUntil } from 'rxjs/operators';
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class FormComponent implements OnInit, OnDestroy {
|
||||
|
||||
form: FormModel;
|
||||
errorFields: FormFieldModel[] = [];
|
||||
formConfig: string;
|
||||
editor: any;
|
||||
keepPrefixedSpace = true;
|
||||
|
||||
editorOptions = {
|
||||
theme: 'vs-dark',
|
||||
@@ -86,7 +84,7 @@ export class FormComponent implements OnInit, OnDestroy {
|
||||
}
|
||||
|
||||
parseForm() {
|
||||
this.form = this.formService.parseForm(JSON.parse(this.formConfig), null, false, this.keepPrefixedSpace);
|
||||
this.form = this.formService.parseForm(JSON.parse(this.formConfig), null, false, true);
|
||||
}
|
||||
|
||||
onSaveFormConfig() {
|
||||
@@ -114,8 +112,4 @@ export class FormComponent implements OnInit, OnDestroy {
|
||||
|
||||
$event.target.value = '';
|
||||
}
|
||||
|
||||
togglePrefixedSpace() {
|
||||
this.keepPrefixedSpace = !this.keepPrefixedSpace;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,9 +64,7 @@
|
||||
</mat-error>
|
||||
</mat-form-field>
|
||||
|
||||
<div class="app-reset-button">
|
||||
<button mat-raised-button (click)="resetProcessForm()">Reset</button>
|
||||
</div>
|
||||
<button mat-raised-button (click)="resetProcessForm()">Reset</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -7,14 +7,3 @@
|
||||
width: calc(100% * (1 / 4) - 10px);
|
||||
}
|
||||
}
|
||||
|
||||
.app-reset-button {
|
||||
margin-bottom: 50px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.app-process-list-error-message {
|
||||
color: var(--theme-warn-color);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@@ -124,7 +124,7 @@ export class ProcessListDemoComponent implements OnInit, OnDestroy {
|
||||
}
|
||||
|
||||
isFormValid() {
|
||||
return this.processListForm && this.processListForm.dirty && this.processListForm.valid;
|
||||
return this.processListForm?.dirty && this.processListForm.valid;
|
||||
}
|
||||
|
||||
resetProcessForm() {
|
||||
|
||||
@@ -28,6 +28,14 @@ import { PreviewService } from '../../services/preview.service';
|
||||
import { Subject } from 'rxjs';
|
||||
import { takeUntil } from 'rxjs/operators';
|
||||
|
||||
/**
|
||||
* Provide a factory for process upload service
|
||||
*
|
||||
* @param api api client
|
||||
* @param config config service
|
||||
* @param discoveryApiService discovery service
|
||||
* @returns factory function
|
||||
*/
|
||||
export function processUploadServiceFactory(api: AlfrescoApiService, config: AppConfigService, discoveryApiService: DiscoveryApiService) {
|
||||
return new ProcessUploadService(api, config, discoveryApiService);
|
||||
}
|
||||
@@ -93,7 +101,7 @@ export class ProcessAttachmentsComponent implements OnInit, OnChanges, OnDestroy
|
||||
}
|
||||
|
||||
isCompletedProcess(): boolean {
|
||||
return this.processInstance && this.processInstance.ended !== undefined && this.processInstance.ended !== null;
|
||||
return this.processInstance?.ended != null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,288 +1,174 @@
|
||||
<mat-tab-group [(selectedIndex)]="activeTab" (selectedTabChange)="onTabChange($event)"
|
||||
data-automation-id="navigation-bar">
|
||||
<mat-tab id="app-tasks-header" href="#tasks" label="Tasks">
|
||||
<div class="app-page-content" *ngIf="showTaskTab">
|
||||
<div class="app-grid">
|
||||
<div class="app-grid-item app-tasks-menu">
|
||||
<div class="app-list-buttons">
|
||||
<adf-sidebar-action-menu [expanded]="true" [width]="205" title="CREATE">
|
||||
<mat-icon sidebar-menu-title-icon>arrow_drop_down</mat-icon>
|
||||
<div adf-sidebar-menu-options>
|
||||
<button mat-menu-item data-automation-id="btn-start-task" (click)="navigateStartTask()">
|
||||
<mat-icon>assessment</mat-icon>
|
||||
<span>New Task</span>
|
||||
</button>
|
||||
</div>
|
||||
</adf-sidebar-action-menu>
|
||||
</div>
|
||||
<mat-accordion class="app-accordion-panel" displayMode="flat">
|
||||
<mat-expansion-panel class="mat-elevation-z0" [expanded]="true">
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-title>
|
||||
<mat-icon>assignment</mat-icon>
|
||||
<div id="tasks-accordion-title" class="app-accordion-title-padding">Tasks</div>
|
||||
</mat-panel-title>
|
||||
</mat-expansion-panel-header>
|
||||
<adf-task-filters [filterParam]="filterSelected"
|
||||
role="group"
|
||||
aria-labelledby="tasks-accordion-title"
|
||||
[appId]="appId"
|
||||
[showIcon]="showTaskFilterIcon"
|
||||
(filterClicked)="onTaskFilterClick($event)"
|
||||
(filterSelected)="onTaskFilterClick($event)"
|
||||
(success)="onSuccessTaskFilterList()" #activitiFilter>
|
||||
</adf-task-filters>
|
||||
</mat-expansion-panel>
|
||||
</mat-accordion>
|
||||
</div>
|
||||
<div
|
||||
class="app-grid-item app-tasks-list"
|
||||
*ngIf="taskFilter && !isStartTaskMode()">
|
||||
<adf-tasklist
|
||||
[appId]="taskFilter?.appId"
|
||||
[presetColumn]="presetColumn"
|
||||
[page]="taskPage"
|
||||
[size]="paginationPageSize"
|
||||
[selectionMode]="selectionMode"
|
||||
[name]="taskFilter?.filter?.name"
|
||||
[assignment]="taskFilter?.filter?.assignment"
|
||||
[state]="taskFilter?.filter?.state"
|
||||
[sort]="taskFilter?.filter?.sort"
|
||||
[landingTaskId]="currentTaskId"
|
||||
[showContextMenu]="taskContextMenu"
|
||||
(showRowContextMenu)="onShowTaskRowContextMenu($event)"
|
||||
(rowClick)="onTaskRowClick($event)"
|
||||
(success)="onSuccessTaskList()"
|
||||
(row-click)="onRowClick($event)"
|
||||
(row-dblclick)="onTaskRowDblClick($any($event))"
|
||||
[multiselect]="multiSelectTask"
|
||||
#taskList>
|
||||
</adf-tasklist>
|
||||
|
||||
<adf-pagination
|
||||
*ngIf="taskList"
|
||||
[target]="taskList"
|
||||
(changePageSize)="onChangePageSize($event)"
|
||||
#taskListPagination>
|
||||
</adf-pagination>
|
||||
</div>
|
||||
<div
|
||||
class="app-grid-item app-tasks-details"
|
||||
*ngIf="!isStartTaskMode()"
|
||||
data-automation-id="app-tasks-details">
|
||||
<adf-task-details #activitiDetails
|
||||
[debugMode]="true"
|
||||
[taskId]="currentTaskId"
|
||||
[showFormTitle]="true"
|
||||
[fieldValidators]="fieldValidators"
|
||||
[showHeaderContent]="showHeaderContent"
|
||||
(formCompleted)="onFormCompleted()"
|
||||
(formContentClicked)="onContentClick($event)"
|
||||
(taskCreated)="onTaskCreated($event)"
|
||||
(assignTask)="onAssignTask()"
|
||||
(taskDeleted)="onTaskDeleted()">
|
||||
</adf-task-details>
|
||||
<mat-divider></mat-divider>
|
||||
<div *ngIf="currentTaskId">
|
||||
Task Audit log
|
||||
<button
|
||||
adf-task-audit
|
||||
[task-id]="currentTaskId"
|
||||
[download]="true"
|
||||
mat-icon-button (clicked)="onAuditClick($event)" (error)="onAuditError($event)">
|
||||
<mat-icon>assignment_ind</mat-icon>
|
||||
</button>
|
||||
<mat-divider></mat-divider>
|
||||
</div>
|
||||
<mat-card>
|
||||
<mat-card-content>
|
||||
<app-task-attachments [taskId]="currentTaskId"></app-task-attachments>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
</div>
|
||||
<div
|
||||
class="app-grid-item app-tasks-start"
|
||||
*ngIf="isStartTaskMode()">
|
||||
<adf-start-task
|
||||
[appId]="appId"
|
||||
[name]="defaultTaskName"
|
||||
(success)="onStartTaskSuccess($event)"
|
||||
(cancel)="onCancelStartTask()">
|
||||
</adf-start-task>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</mat-tab>
|
||||
<mat-tab id="processes-header" href="#processes" label="Process">
|
||||
<div class="app-page-content" *ngIf="showProcessTab">
|
||||
<div class="app-grid">
|
||||
<div
|
||||
id="app-processes-menu"
|
||||
class="app-grid-item app-processes-menu">
|
||||
<div class="app-list-buttons">
|
||||
<adf-sidebar-action-menu [expanded]="true" [width]="205" title="CREATE">
|
||||
<mat-icon sidebar-menu-title-icon>arrow_drop_down</mat-icon>
|
||||
<div adf-sidebar-menu-options>
|
||||
<button mat-menu-item data-automation-id="btn-start-process" (click)="navigateStartProcess()">
|
||||
<mat-icon>assessment</mat-icon>
|
||||
<span>New Process</span>
|
||||
</button>
|
||||
</div>
|
||||
</adf-sidebar-action-menu>
|
||||
</div>
|
||||
<mat-accordion class="app-accordion-panel" displayMode="flat">
|
||||
<mat-expansion-panel class="mat-elevation-z0" [expanded]="true">
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-title>
|
||||
<mat-icon>assessment</mat-icon>
|
||||
<div id="process-accordion-title" class="app-accordion-title-padding">Processes</div>
|
||||
</mat-panel-title>
|
||||
</mat-expansion-panel-header>
|
||||
<adf-process-instance-filters
|
||||
#activitiProcessFilter
|
||||
role="group"
|
||||
aria-labelledby="process-accordion-title"
|
||||
[appId]="appId"
|
||||
[filterParam]="filterSelected"
|
||||
[showIcon]="showProcessFilterIcon"
|
||||
(filterClicked)="onProcessFilterChange($event)"
|
||||
(filterSelected)="onProcessFilterChange($event)"
|
||||
(success)="onSuccessProcessFilterList()">
|
||||
</adf-process-instance-filters>
|
||||
</mat-expansion-panel>
|
||||
</mat-accordion>
|
||||
</div>
|
||||
<div
|
||||
class="app-grid-item app-processes-list app-list"
|
||||
*ngIf="processFilter && !isStartProcessMode()">
|
||||
<adf-process-instance-list
|
||||
#processList
|
||||
*ngIf="processFilter?.filter" [appId]="processFilter?.appId"
|
||||
[selectionMode]="selectionMode"
|
||||
[presetColumn]="presetColumn"
|
||||
[state]="processFilter?.filter?.state"
|
||||
[page]="processPage"
|
||||
[size]="paginationPageSize"
|
||||
[sort]="processFilter?.filter?.sort"
|
||||
[showContextMenu]="processContextMenu"
|
||||
(showRowContextMenu)="onShowProcessRowContextMenu($event)"
|
||||
(rowClick)="onProcessRowClick($event)"
|
||||
(row-dblclick)="onProcessRowDblClick($any($event))"
|
||||
[multiselect]="multiSelectProcess"
|
||||
(success)="onSuccessProcessList()">
|
||||
</adf-process-instance-list>
|
||||
<adf-pagination
|
||||
*ngIf="processList"
|
||||
[target]="processList"
|
||||
(changePageSize)="onChangePageSize($event)"
|
||||
#processListPagination>
|
||||
</adf-pagination>
|
||||
</div>
|
||||
<div
|
||||
class="app-grid-item app-processes-details"
|
||||
*ngIf="!isStartProcessMode()">
|
||||
<adf-process-instance-details
|
||||
#activitiProcessDetails
|
||||
[processInstanceId]="currentProcessInstanceId"
|
||||
(processCancelled)="processCancelled()"
|
||||
(showProcessDiagram)="onShowProcessDiagram($event)"
|
||||
(taskClick)="onProcessDetailsTaskClick($event)">
|
||||
</adf-process-instance-details>
|
||||
<mat-divider></mat-divider>
|
||||
<div *ngIf="currentProcessInstanceId">
|
||||
Process Audit log
|
||||
<button adf-process-audit
|
||||
[process-id]="currentProcessInstanceId"
|
||||
[download]="true" mat-icon-button
|
||||
[format]="'pdf'"
|
||||
(clicked)="onAuditClick($event)"
|
||||
(error)="onAuditError($event)">
|
||||
<mat-icon>assignment_ind</mat-icon>
|
||||
</button>
|
||||
<mat-divider></mat-divider>
|
||||
</div>
|
||||
<mat-card>
|
||||
<mat-card-content>
|
||||
<app-process-attachments [processInstanceId]="currentProcessInstanceId">
|
||||
</app-process-attachments>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
</div>
|
||||
<div
|
||||
class="app-grid-item app-processes-start"
|
||||
*ngIf="isStartProcessMode()">
|
||||
<adf-start-process
|
||||
#activitiStartProcess
|
||||
[appId]="applicationId"
|
||||
[processDefinitionName]="processDefinitionName"
|
||||
[showSelectApplicationDropdown]="showApplications"
|
||||
[title]="'Start Process'"
|
||||
[name]="defaultProcessName"
|
||||
(formContentClicked)="onContentClick($event)"
|
||||
(start)="onStartProcessInstance($event)"
|
||||
(cancel)="onCancelProcessInstance()"
|
||||
(error)="onStartProcessError($event)">
|
||||
</adf-start-process>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</mat-tab>
|
||||
<mat-tab id="settings-header" href="#settings" label="Settings">
|
||||
data-automation-id="navigation-bar" [animationDuration]="'0'">
|
||||
<mat-tab id="app-tasks-header" label="Tasks">
|
||||
<div class="app-grid">
|
||||
<div class="app-grid-item app-settings-menu">
|
||||
<span><h3>Settings Menu</h3></span>
|
||||
<div class="app-grid-item app-tasks-menu">
|
||||
<adf-sidebar-action-menu [expanded]="true" [width]="205" title="CREATE">
|
||||
<mat-icon sidebar-menu-title-icon>arrow_drop_down</mat-icon>
|
||||
<div adf-sidebar-menu-options>
|
||||
<button mat-menu-item data-automation-id="btn-start-task" (click)="navigateStartTask()">
|
||||
<mat-icon>assessment</mat-icon>
|
||||
<span>New Task</span>
|
||||
</button>
|
||||
</div>
|
||||
</adf-sidebar-action-menu>
|
||||
<adf-task-filters [filterParam]="filterSelected"
|
||||
role="group"
|
||||
[appId]="appId"
|
||||
(filterClicked)="onTaskFilterClick($event)"
|
||||
(filterSelected)="onTaskFilterClick($event)"
|
||||
(success)="onSuccessTaskFilterList()" #activitiFilter>
|
||||
</adf-task-filters>
|
||||
</div>
|
||||
<div class="app-grid-item app-settings-details">
|
||||
<div>
|
||||
<mat-slide-toggle id="adf-show-task-filter-icon" [(ngModel)]="showTaskFilterIcon">Show task filters icons
|
||||
</mat-slide-toggle>
|
||||
<div
|
||||
class="app-grid-item app-tasks-list"
|
||||
*ngIf="taskFilter && !isStartTaskMode()">
|
||||
<adf-tasklist
|
||||
[appId]="taskFilter?.appId"
|
||||
[presetColumn]="presetColumn"
|
||||
[page]="taskPage"
|
||||
[size]="paginationPageSize"
|
||||
[name]="taskFilter?.filter?.name"
|
||||
[assignment]="taskFilter?.filter?.assignment"
|
||||
[state]="taskFilter?.filter?.state"
|
||||
[sort]="taskFilter?.filter?.sort"
|
||||
[landingTaskId]="currentTaskId"
|
||||
(rowClick)="onTaskRowClick($event)"
|
||||
(success)="onSuccessTaskList()"
|
||||
(row-dblclick)="onTaskRowDblClick($any($event))"
|
||||
#taskList>
|
||||
</adf-tasklist>
|
||||
|
||||
<adf-pagination
|
||||
*ngIf="taskList"
|
||||
[target]="taskList"
|
||||
(changePageSize)="onChangePageSize($event)"
|
||||
#taskListPagination>
|
||||
</adf-pagination>
|
||||
</div>
|
||||
<div
|
||||
class="app-grid-item app-tasks-details"
|
||||
*ngIf="!isStartTaskMode()"
|
||||
data-automation-id="app-tasks-details">
|
||||
<adf-task-details #activitiDetails
|
||||
[debugMode]="true"
|
||||
[taskId]="currentTaskId"
|
||||
[showFormTitle]="true"
|
||||
[fieldValidators]="fieldValidators"
|
||||
[showHeaderContent]="true"
|
||||
(formCompleted)="onFormCompleted()"
|
||||
(formContentClicked)="onContentClick($event)"
|
||||
(taskCreated)="onTaskCreated($event)"
|
||||
(assignTask)="onAssignTask()"
|
||||
(taskDeleted)="onTaskDeleted()">
|
||||
</adf-task-details>
|
||||
|
||||
<div *ngIf="currentTaskId">
|
||||
Task Audit log
|
||||
<button
|
||||
adf-task-audit
|
||||
[task-id]="currentTaskId"
|
||||
[download]="true"
|
||||
mat-icon-button>
|
||||
<mat-icon>download</mat-icon>
|
||||
</button>
|
||||
</div>
|
||||
<div>
|
||||
<mat-slide-toggle id="adf-show-process-filter-icon" [(ngModel)]="showProcessFilterIcon">Show process filters icons
|
||||
</mat-slide-toggle>
|
||||
<app-task-attachments [taskId]="currentTaskId"></app-task-attachments>
|
||||
</div>
|
||||
|
||||
<div class="app-grid-item app-tasks-start" *ngIf="isStartTaskMode()">
|
||||
<adf-start-task
|
||||
[appId]="appId"
|
||||
[name]="defaultTaskName"
|
||||
(success)="onStartTaskSuccess($event)"
|
||||
(cancel)="onCancelStartTask()">
|
||||
</adf-start-task>
|
||||
</div>
|
||||
</div>
|
||||
</mat-tab>
|
||||
|
||||
<mat-tab id="processes-header" label="Process">
|
||||
<div class="app-grid">
|
||||
<div id="app-processes-menu" class="app-grid-item app-processes-menu">
|
||||
<adf-sidebar-action-menu [expanded]="true" [width]="205" title="CREATE">
|
||||
<mat-icon sidebar-menu-title-icon>arrow_drop_down</mat-icon>
|
||||
<div adf-sidebar-menu-options>
|
||||
<button mat-menu-item data-automation-id="btn-start-process" (click)="navigateStartProcess()">
|
||||
<mat-icon>assessment</mat-icon>
|
||||
<span>New Process</span>
|
||||
</button>
|
||||
</div>
|
||||
</adf-sidebar-action-menu>
|
||||
|
||||
<adf-process-instance-filters
|
||||
#activitiProcessFilter
|
||||
[appId]="appId"
|
||||
[filterParam]="filterSelected"
|
||||
[showIcon]="false"
|
||||
(filterClicked)="onProcessFilterChange($event)"
|
||||
(filterSelected)="onProcessFilterChange($event)"
|
||||
(success)="onSuccessProcessFilterList()">
|
||||
</adf-process-instance-filters>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="app-grid-item app-processes-list"
|
||||
*ngIf="processFilter && !isStartProcessMode()">
|
||||
<adf-process-instance-list
|
||||
#processList
|
||||
*ngIf="processFilter?.filter" [appId]="processFilter?.appId"
|
||||
[presetColumn]="presetColumn"
|
||||
[state]="processFilter?.filter?.state"
|
||||
[page]="processPage"
|
||||
[size]="paginationPageSize"
|
||||
[sort]="processFilter?.filter?.sort"
|
||||
(rowClick)="onProcessRowClick($event)"
|
||||
(row-dblclick)="onProcessRowDblClick($any($event))"
|
||||
(success)="onSuccessProcessList()">
|
||||
</adf-process-instance-list>
|
||||
<adf-pagination
|
||||
*ngIf="processList"
|
||||
[target]="processList"
|
||||
(changePageSize)="onChangePageSize($event)"
|
||||
#processListPagination>
|
||||
</adf-pagination>
|
||||
</div>
|
||||
|
||||
<div class="app-grid-item app-processes-details" *ngIf="!isStartProcessMode()">
|
||||
<adf-process-instance-details
|
||||
#activitiProcessDetails
|
||||
[processInstanceId]="currentProcessInstanceId"
|
||||
(processCancelled)="processCancelled()"
|
||||
(showProcessDiagram)="onShowProcessDiagram($event)"
|
||||
(taskClick)="onProcessDetailsTaskClick($event)">
|
||||
</adf-process-instance-details>
|
||||
|
||||
<div *ngIf="currentProcessInstanceId">
|
||||
Process Audit log
|
||||
<button adf-process-audit
|
||||
[process-id]="currentProcessInstanceId"
|
||||
[download]="true" mat-icon-button
|
||||
[format]="'pdf'">
|
||||
<mat-icon>download</mat-icon>
|
||||
</button>
|
||||
</div>
|
||||
<div>
|
||||
<mat-slide-toggle id="adf-show-header" (change)="toggleHeaderContent()" [checked]="showHeaderContent">Show details header
|
||||
</mat-slide-toggle>
|
||||
</div>
|
||||
<div>
|
||||
<mat-slide-toggle id="adf-process-multiselect" [(ngModel)]="multiSelectProcess">Multiselect Process List
|
||||
</mat-slide-toggle>
|
||||
</div>
|
||||
<div>
|
||||
<mat-slide-toggle id="adf-task-multiselect" [(ngModel)]="multiSelectTask">Multiselect Task List
|
||||
</mat-slide-toggle>
|
||||
</div>
|
||||
<div>
|
||||
<mat-slide-toggle id="adf-task-context-menu" [(ngModel)]="taskContextMenu">Show Task list Context menu</mat-slide-toggle>
|
||||
</div>
|
||||
<div>
|
||||
<mat-slide-toggle id="adf-process-context-menu" [(ngModel)]="processContextMenu">Show Process list Context menu</mat-slide-toggle>
|
||||
</div>
|
||||
<div>
|
||||
<mat-slide-toggle id="adf-start-process-app-drop-down" [(ngModel)]="showApplications">Show Application dropdown on start process</mat-slide-toggle>
|
||||
<mat-card class="example-card" *ngIf="showApplications">
|
||||
<mat-card-header >
|
||||
<mat-card-title>Filter Process definitions</mat-card-title>
|
||||
</mat-card-header>
|
||||
<mat-card-content class="app-filter-process-definitions-inputs">
|
||||
<mat-form-field>
|
||||
<mat-label>ApplicationId</mat-label>
|
||||
<input matInput [(ngModel)]="applicationId">
|
||||
</mat-form-field>
|
||||
<mat-form-field>
|
||||
<mat-label>ProcessDefinitionName</mat-label>
|
||||
<input matInput [(ngModel)]="processDefinitionName">
|
||||
</mat-form-field>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
</div>
|
||||
<br>
|
||||
<mat-radio-group [(ngModel)]="selectionMode">
|
||||
<mat-radio-button value="multiple">multiple</mat-radio-button>
|
||||
<mat-radio-button value="single">single</mat-radio-button>
|
||||
<mat-radio-button value="none">none</mat-radio-button>
|
||||
</mat-radio-group>
|
||||
<app-process-attachments [processInstanceId]="currentProcessInstanceId">
|
||||
</app-process-attachments>
|
||||
</div>
|
||||
<div
|
||||
class="app-grid-item app-processes-start"
|
||||
*ngIf="isStartProcessMode()">
|
||||
<adf-start-process
|
||||
#activitiStartProcess
|
||||
[appId]="applicationId"
|
||||
[processDefinitionName]="processDefinitionName"
|
||||
[title]="'Start Process'"
|
||||
[name]="defaultProcessName"
|
||||
(formContentClicked)="onContentClick($event)"
|
||||
(start)="onStartProcessInstance($event)"
|
||||
(cancel)="onCancelProcessInstance()"
|
||||
(error)="onStartProcessError($event)">
|
||||
</adf-start-process>
|
||||
</div>
|
||||
</div>
|
||||
</mat-tab>
|
||||
|
||||
@@ -1,88 +1,16 @@
|
||||
.app-no-form-container {
|
||||
text-align: center;
|
||||
font-weight: 600;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.app-grid {
|
||||
flex-direction: row;
|
||||
display: flex;
|
||||
max-height: 100%;
|
||||
place-content: stretch flex-start;
|
||||
align-items: stretch;
|
||||
background-color: white;
|
||||
|
||||
.app-grid-item {
|
||||
flex: 1;
|
||||
margin: 4px;
|
||||
box-shadow:
|
||||
0 2px 2px 0 rgba(0, 0, 0, 0.14),
|
||||
0 3px 1px -2px rgba(0, 0, 0, 0.2),
|
||||
0 1px 5px 0 rgba(0, 0, 0, 0.12);
|
||||
border: 1px solid rgba(0, 0, 0, 0.14);
|
||||
padding: 10px;
|
||||
|
||||
.app-filter-process-definitions-inputs {
|
||||
flex-direction: column;
|
||||
display: flex;
|
||||
max-width: 100%;
|
||||
place-content: stretch space-around;
|
||||
align-items: stretch;
|
||||
}
|
||||
}
|
||||
|
||||
.app-list-buttons {
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.app-tasks-list.app-small-pagination,
|
||||
.app-processes-list.app-small-pagination {
|
||||
.app-pagination {
|
||||
flex-wrap: wrap;
|
||||
padding-bottom: 24px;
|
||||
padding-top: 8px;
|
||||
|
||||
&__range-block.app-pagination__block:first-child {
|
||||
order: 1;
|
||||
width: 60%;
|
||||
flex: 0 0 auto;
|
||||
box-sizing: border-box;
|
||||
padding-left: 2px;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
&__perpage-block {
|
||||
order: 3;
|
||||
width: 60%;
|
||||
box-sizing: border-box;
|
||||
padding-left: 2px;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
&__actualinfo-block {
|
||||
order: 2;
|
||||
width: 40%;
|
||||
box-sizing: border-box;
|
||||
padding-right: 2px;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
&__controls-block {
|
||||
order: 4;
|
||||
width: 40%;
|
||||
box-sizing: border-box;
|
||||
padding-right: 2px;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.app-list {
|
||||
.app-datatable-list {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
|
||||
mat-slide-toggle {
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1280px) {
|
||||
@@ -104,13 +32,7 @@
|
||||
min-width: 225px;
|
||||
}
|
||||
|
||||
.app-settings-menu {
|
||||
flex: 1 1 300px;
|
||||
max-width: 300px;
|
||||
min-width: 300px;
|
||||
}
|
||||
|
||||
.app-tasks-details, .app-tasks-start, .app-processes-details, .app-processes-start, .app-settings-details {
|
||||
.app-tasks-details, .app-tasks-start, .app-processes-details, .app-processes-start {
|
||||
flex: 1 1 auto;
|
||||
min-width: auto;
|
||||
}
|
||||
@@ -130,24 +52,3 @@
|
||||
max-height: initial;
|
||||
}
|
||||
}
|
||||
|
||||
.app-accordion-panel {
|
||||
.mat-expansion-panel {
|
||||
background: inherit;
|
||||
}
|
||||
|
||||
.mat-expansion-panel-header-title,
|
||||
.mat-expansion-panel-header-description {
|
||||
flex-basis: 0;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.mat-expansion-panel-header-description {
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.app-accordion-title-padding {
|
||||
padding-left: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,14 +29,10 @@ import {
|
||||
Output
|
||||
} from '@angular/core';
|
||||
import { ActivatedRoute, Router } from '@angular/router';
|
||||
import {
|
||||
Pagination,
|
||||
UserProcessInstanceFilterRepresentation,
|
||||
ScriptFilesApi
|
||||
} from '@alfresco/js-api';
|
||||
import { Pagination, UserProcessInstanceFilterRepresentation, ScriptFilesApi } from '@alfresco/js-api';
|
||||
import {
|
||||
FORM_FIELD_VALIDATORS, FormRenderingService, FormService, AppConfigService, PaginationComponent, UserPreferenceValues,
|
||||
AlfrescoApiService, UserPreferencesService, LogService, DataCellEvent, NotificationService
|
||||
AlfrescoApiService, UserPreferencesService, NotificationService
|
||||
} from '@alfresco/adf-core';
|
||||
import {
|
||||
ProcessFiltersComponent,
|
||||
@@ -114,24 +110,15 @@ export class ProcessServiceComponent implements AfterViewInit, OnDestroy, OnInit
|
||||
@Output()
|
||||
changePageSize = new EventEmitter<Pagination>();
|
||||
|
||||
multiSelectTask = false;
|
||||
multiSelectProcess = false;
|
||||
selectionMode = 'single';
|
||||
taskContextMenu = false;
|
||||
processContextMenu = false;
|
||||
|
||||
private tabs = { tasks: 0, processes: 1, reports: 2 };
|
||||
|
||||
layoutType: string;
|
||||
currentTaskId: string;
|
||||
currentProcessInstanceId: string;
|
||||
|
||||
taskSchemaColumns: any[] = [];
|
||||
taskPage = 0;
|
||||
processPage = 0;
|
||||
paginationPageSize = 0;
|
||||
processSchemaColumns: any[] = [];
|
||||
showHeaderContent = true;
|
||||
|
||||
defaultProcessDefinitionName: string;
|
||||
defaultProcessName: string;
|
||||
@@ -146,11 +133,6 @@ export class ProcessServiceComponent implements AfterViewInit, OnDestroy, OnInit
|
||||
|
||||
presetColumn = 'default';
|
||||
|
||||
showTaskTab: boolean;
|
||||
showProcessTab: boolean;
|
||||
|
||||
showProcessFilterIcon: boolean;
|
||||
showTaskFilterIcon: boolean;
|
||||
showApplications: boolean;
|
||||
applicationId: number;
|
||||
processDefinitionName: string;
|
||||
@@ -167,7 +149,6 @@ export class ProcessServiceComponent implements AfterViewInit, OnDestroy, OnInit
|
||||
private route: ActivatedRoute,
|
||||
private router: Router,
|
||||
private apiService: AlfrescoApiService,
|
||||
private logService: LogService,
|
||||
private appConfig: AppConfigService,
|
||||
private preview: PreviewService,
|
||||
formRenderingService: FormRenderingService,
|
||||
@@ -187,18 +168,6 @@ export class ProcessServiceComponent implements AfterViewInit, OnDestroy, OnInit
|
||||
// Uncomment this line to map 'custom_stencil_01' to local editor component
|
||||
formRenderingService.setComponentTypeResolver('custom_stencil_01', () => CustomStencil01, true);
|
||||
|
||||
formService.formLoaded
|
||||
.pipe(takeUntil(this.onDestroy$))
|
||||
.subscribe(formEvent => {
|
||||
this.logService.log(`Form loaded: ${formEvent.form.id}`);
|
||||
});
|
||||
|
||||
formService.formFieldValueChanged
|
||||
.pipe(takeUntil(this.onDestroy$))
|
||||
.subscribe(formFieldEvent => {
|
||||
this.logService.log(`Field value changed. Form: ${formFieldEvent.form.id}, Field: ${formFieldEvent.field.id}, Value: ${formFieldEvent.field.value}`);
|
||||
});
|
||||
|
||||
this.preferenceService
|
||||
.select(UserPreferenceValues.PaginationSize)
|
||||
.pipe(takeUntil(this.onDestroy$))
|
||||
@@ -211,7 +180,7 @@ export class ProcessServiceComponent implements AfterViewInit, OnDestroy, OnInit
|
||||
.subscribe(
|
||||
(validateDynamicTableRowEvent: ValidateDynamicTableRowEvent) => {
|
||||
const row: DynamicTableRow = validateDynamicTableRowEvent.row;
|
||||
if (row && row.value && row.value.name === 'admin') {
|
||||
if (row?.value && row.value.name === 'admin') {
|
||||
validateDynamicTableRowEvent.summary.isValid = false;
|
||||
validateDynamicTableRowEvent.summary.message = 'Sorry, wrong value. You cannot use "admin".';
|
||||
validateDynamicTableRowEvent.preventDefault();
|
||||
@@ -224,30 +193,12 @@ export class ProcessServiceComponent implements AfterViewInit, OnDestroy, OnInit
|
||||
.subscribe((content) => {
|
||||
this.showContentPreview(content);
|
||||
});
|
||||
|
||||
formService.validateForm
|
||||
.pipe(takeUntil(this.onDestroy$))
|
||||
.subscribe(validateFormEvent => {
|
||||
this.logService.log('Error form:' + validateFormEvent.errorsField);
|
||||
});
|
||||
|
||||
// Uncomment this block to see form event handling in action
|
||||
/*
|
||||
formService.formEvents
|
||||
.pipe(takeUntil(this.onDestroy$))
|
||||
.subscribe((event: Event) => {
|
||||
this.logService.log('Event fired:' + event.type);
|
||||
this.logService.log('Event Target:' + event.target);
|
||||
});
|
||||
*/
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
if (this.router.url.includes('processes')) {
|
||||
this.activeTab = this.tabs.processes;
|
||||
}
|
||||
this.showProcessTab = this.activeTab === this.tabs.processes;
|
||||
this.showTaskTab = this.activeTab === this.tabs.tasks;
|
||||
this.route.params.subscribe((params) => {
|
||||
const applicationId = params['appId'];
|
||||
|
||||
@@ -273,24 +224,14 @@ export class ProcessServiceComponent implements AfterViewInit, OnDestroy, OnInit
|
||||
|
||||
onTaskFilterClick(filter: FilterRepresentationModel): void {
|
||||
this.applyTaskFilter(filter);
|
||||
this.resetTaskPaginationPage();
|
||||
}
|
||||
|
||||
resetTaskPaginationPage() {
|
||||
this.taskPage = 0;
|
||||
}
|
||||
|
||||
toggleHeaderContent(): void {
|
||||
this.showHeaderContent = !this.showHeaderContent;
|
||||
}
|
||||
|
||||
onTabChange(event: any): void {
|
||||
const index = event.index;
|
||||
if (index === TASK_ROUTE) {
|
||||
this.showTaskTab = event.index === this.tabs.tasks;
|
||||
this.relocateLocationToTask();
|
||||
} else if (index === PROCESS_ROUTE) {
|
||||
this.showProcessTab = event.index === this.tabs.processes;
|
||||
this.relocateLocationToProcess();
|
||||
if (this.processList) {
|
||||
this.processList.reload();
|
||||
@@ -445,14 +386,6 @@ export class ProcessServiceComponent implements AfterViewInit, OnDestroy, OnInit
|
||||
}
|
||||
}
|
||||
|
||||
onAuditClick(event: any) {
|
||||
this.logService.log(event);
|
||||
}
|
||||
|
||||
onAuditError(event: any): void {
|
||||
this.logService.error('My custom error message' + event);
|
||||
}
|
||||
|
||||
onTaskCreated(data: any): void {
|
||||
this.currentTaskId = data.parentTaskId;
|
||||
this.taskList.reload();
|
||||
@@ -466,7 +399,7 @@ export class ProcessServiceComponent implements AfterViewInit, OnDestroy, OnInit
|
||||
this.loadStencilScriptsInPageFromProcessService();
|
||||
}
|
||||
|
||||
loadStencilScriptsInPageFromProcessService() {
|
||||
private loadStencilScriptsInPageFromProcessService() {
|
||||
this.scriptFileApi.getControllers().then((response) => {
|
||||
if (response) {
|
||||
const stencilScript = document.createElement('script');
|
||||
@@ -507,46 +440,8 @@ export class ProcessServiceComponent implements AfterViewInit, OnDestroy, OnInit
|
||||
this.activitiFilter.selectFilter(this.activitiFilter.getCurrentFilter());
|
||||
}
|
||||
|
||||
onRowClick(event): void {
|
||||
this.logService.log(event);
|
||||
}
|
||||
|
||||
onRowDblClick(event): void {
|
||||
this.logService.log(event);
|
||||
}
|
||||
|
||||
onAssignTask() {
|
||||
this.taskList.reload();
|
||||
this.currentTaskId = null;
|
||||
}
|
||||
|
||||
onShowTaskRowContextMenu(event: DataCellEvent) {
|
||||
event.value.actions = [
|
||||
{
|
||||
data: event.value.row['obj'],
|
||||
model: {
|
||||
key: 'taskDetails',
|
||||
icon: 'open',
|
||||
title: 'Task List Context Menu',
|
||||
visible: true
|
||||
},
|
||||
subject: new Subject()
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
onShowProcessRowContextMenu(event: DataCellEvent) {
|
||||
event.value.actions = [
|
||||
{
|
||||
data: event.value.row['obj'],
|
||||
model: {
|
||||
key: 'processDetails',
|
||||
icon: 'open',
|
||||
title: 'Process List Context Menu',
|
||||
visible: true
|
||||
},
|
||||
subject: new Subject()
|
||||
}
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
<div>
|
||||
<button mat-mini-fab (click)="onClickBack()" ><mat-icon>keyboard_backspace</mat-icon></button>
|
||||
<button id="btn-diagram-back" mat-icon-button (click)="onClickBack()">
|
||||
<mat-icon>keyboard_backspace</mat-icon>
|
||||
</button>
|
||||
<adf-diagram [processInstanceId]="processDefinitionId"></adf-diagram>
|
||||
</div>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user