mirror of
https://github.com/hcengineering/platform.git
synced 2024-12-22 19:11:33 +03:00
Separate tracker deployment (#1245)
Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
This commit is contained in:
parent
8cd1797696
commit
6fcbd14d6f
10
.github/workflows/main.yml
vendored
10
.github/workflows/main.yml
vendored
@ -69,6 +69,7 @@ jobs:
|
||||
packages
|
||||
plugins
|
||||
pods
|
||||
products
|
||||
server
|
||||
server-plugins
|
||||
templates
|
||||
@ -99,6 +100,7 @@ jobs:
|
||||
packages
|
||||
plugins
|
||||
pods
|
||||
products
|
||||
server
|
||||
server-plugins
|
||||
templates
|
||||
@ -132,6 +134,7 @@ jobs:
|
||||
packages
|
||||
plugins
|
||||
pods
|
||||
products
|
||||
server
|
||||
server-plugins
|
||||
templates
|
||||
@ -165,6 +168,7 @@ jobs:
|
||||
packages
|
||||
plugins
|
||||
pods
|
||||
products
|
||||
server
|
||||
server-plugins
|
||||
templates
|
||||
@ -210,6 +214,7 @@ jobs:
|
||||
packages
|
||||
plugins
|
||||
pods
|
||||
products
|
||||
server
|
||||
server-plugins
|
||||
templates
|
||||
@ -222,9 +227,9 @@ jobs:
|
||||
- name: Installing...
|
||||
run: node common/scripts/install-run-rush.js install
|
||||
- name: Bundle
|
||||
run: node common/scripts/install-run-rush.js bundle
|
||||
run: node common/scripts/install-run-rush.js bundle --verbose
|
||||
- name: Docker build
|
||||
run: node common/scripts/install-run-rush.js docker:build
|
||||
run: node common/scripts/install-run-rush.js docker:build --verbose
|
||||
- name: Prepare server
|
||||
run: |
|
||||
cd ./tests
|
||||
@ -266,6 +271,7 @@ jobs:
|
||||
packages
|
||||
plugins
|
||||
pods
|
||||
products
|
||||
server
|
||||
server-plugins
|
||||
templates
|
||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -71,3 +71,4 @@ common/autoinstallers/*/.npmrc
|
||||
bundle.js
|
||||
dist
|
||||
tsconfig.tsbuildinfo
|
||||
ingest-attachment-*.zip
|
@ -80,12 +80,12 @@ specifiers:
|
||||
'@rush-temp/model-server-task': file:./projects/model-server-task.tgz
|
||||
'@rush-temp/model-server-telegram': file:./projects/model-server-telegram.tgz
|
||||
'@rush-temp/model-setting': file:./projects/model-setting.tgz
|
||||
'@rush-temp/model-tracker': file:./projects/model-tracker.tgz
|
||||
'@rush-temp/model-tags': file:./projects/model-tags.tgz
|
||||
'@rush-temp/model-task': file:./projects/model-task.tgz
|
||||
'@rush-temp/model-telegram': file:./projects/model-telegram.tgz
|
||||
'@rush-temp/model-templates': file:./projects/model-templates.tgz
|
||||
'@rush-temp/model-text-editor': file:./projects/model-text-editor.tgz
|
||||
'@rush-temp/model-tracker': file:./projects/model-tracker.tgz
|
||||
'@rush-temp/model-view': file:./projects/model-view.tgz
|
||||
'@rush-temp/model-workbench': file:./projects/model-workbench.tgz
|
||||
'@rush-temp/mongo': file:./projects/mongo.tgz
|
||||
@ -98,6 +98,7 @@ specifiers:
|
||||
'@rush-temp/pod-account': file:./projects/pod-account.tgz
|
||||
'@rush-temp/presentation': file:./projects/presentation.tgz
|
||||
'@rush-temp/prod': file:./projects/prod.tgz
|
||||
'@rush-temp/prod-tracker': file:./projects/prod-tracker.tgz
|
||||
'@rush-temp/query': file:./projects/query.tgz
|
||||
'@rush-temp/recruit': file:./projects/recruit.tgz
|
||||
'@rush-temp/recruit-assets': file:./projects/recruit-assets.tgz
|
||||
@ -137,9 +138,6 @@ specifiers:
|
||||
'@rush-temp/setting': file:./projects/setting.tgz
|
||||
'@rush-temp/setting-assets': file:./projects/setting-assets.tgz
|
||||
'@rush-temp/setting-resources': file:./projects/setting-resources.tgz
|
||||
'@rush-temp/tracker': file:./projects/tracker.tgz
|
||||
'@rush-temp/tracker-assets': file:./projects/tracker-assets.tgz
|
||||
'@rush-temp/tracker-resources': file:./projects/tracker-resources.tgz
|
||||
'@rush-temp/tags': file:./projects/tags.tgz
|
||||
'@rush-temp/tags-assets': file:./projects/tags-assets.tgz
|
||||
'@rush-temp/tags-resources': file:./projects/tags-resources.tgz
|
||||
@ -156,6 +154,9 @@ specifiers:
|
||||
'@rush-temp/text-editor': file:./projects/text-editor.tgz
|
||||
'@rush-temp/theme': file:./projects/theme.tgz
|
||||
'@rush-temp/tool': file:./projects/tool.tgz
|
||||
'@rush-temp/tracker': file:./projects/tracker.tgz
|
||||
'@rush-temp/tracker-assets': file:./projects/tracker-assets.tgz
|
||||
'@rush-temp/tracker-resources': file:./projects/tracker-resources.tgz
|
||||
'@rush-temp/ui': file:./projects/ui.tgz
|
||||
'@rush-temp/view': file:./projects/view.tgz
|
||||
'@rush-temp/view-assets': file:./projects/view-assets.tgz
|
||||
@ -343,12 +344,12 @@ dependencies:
|
||||
'@rush-temp/model-server-task': file:projects/model-server-task.tgz_typescript@4.5.4
|
||||
'@rush-temp/model-server-telegram': file:projects/model-server-telegram.tgz_typescript@4.5.4
|
||||
'@rush-temp/model-setting': file:projects/model-setting.tgz_typescript@4.5.4
|
||||
'@rush-temp/model-tracker': file:projects/model-tracker.tgz_typescript@4.5.4
|
||||
'@rush-temp/model-tags': file:projects/model-tags.tgz_typescript@4.5.4
|
||||
'@rush-temp/model-task': file:projects/model-task.tgz_typescript@4.5.4
|
||||
'@rush-temp/model-telegram': file:projects/model-telegram.tgz_typescript@4.5.4
|
||||
'@rush-temp/model-templates': file:projects/model-templates.tgz_typescript@4.5.4
|
||||
'@rush-temp/model-text-editor': file:projects/model-text-editor.tgz_typescript@4.5.4
|
||||
'@rush-temp/model-tracker': file:projects/model-tracker.tgz_typescript@4.5.4
|
||||
'@rush-temp/model-view': file:projects/model-view.tgz_typescript@4.5.4
|
||||
'@rush-temp/model-workbench': file:projects/model-workbench.tgz_typescript@4.5.4
|
||||
'@rush-temp/mongo': file:projects/mongo.tgz
|
||||
@ -361,6 +362,7 @@ dependencies:
|
||||
'@rush-temp/pod-account': file:projects/pod-account.tgz
|
||||
'@rush-temp/presentation': file:projects/presentation.tgz_096c09b0b673a57c275d9767a12070b1
|
||||
'@rush-temp/prod': file:projects/prod.tgz_a07ec81d4d975778878ca12202ea119e
|
||||
'@rush-temp/prod-tracker': file:projects/prod-tracker.tgz_a07ec81d4d975778878ca12202ea119e
|
||||
'@rush-temp/query': file:projects/query.tgz
|
||||
'@rush-temp/recruit': file:projects/recruit.tgz
|
||||
'@rush-temp/recruit-assets': file:projects/recruit-assets.tgz_typescript@4.5.4
|
||||
@ -400,9 +402,6 @@ dependencies:
|
||||
'@rush-temp/setting': file:projects/setting.tgz
|
||||
'@rush-temp/setting-assets': file:projects/setting-assets.tgz_typescript@4.5.4
|
||||
'@rush-temp/setting-resources': file:projects/setting-resources.tgz_096c09b0b673a57c275d9767a12070b1
|
||||
'@rush-temp/tracker': file:projects/tracker.tgz
|
||||
'@rush-temp/tracker-assets': file:projects/tracker-assets.tgz_typescript@4.5.4
|
||||
'@rush-temp/tracker-resources': file:projects/tracker-resources.tgz_096c09b0b673a57c275d9767a12070b1
|
||||
'@rush-temp/tags': file:projects/tags.tgz
|
||||
'@rush-temp/tags-assets': file:projects/tags-assets.tgz
|
||||
'@rush-temp/tags-resources': file:projects/tags-resources.tgz_096c09b0b673a57c275d9767a12070b1
|
||||
@ -419,6 +418,9 @@ dependencies:
|
||||
'@rush-temp/text-editor': file:projects/text-editor.tgz_096c09b0b673a57c275d9767a12070b1
|
||||
'@rush-temp/theme': file:projects/theme.tgz_096c09b0b673a57c275d9767a12070b1
|
||||
'@rush-temp/tool': file:projects/tool.tgz
|
||||
'@rush-temp/tracker': file:projects/tracker.tgz
|
||||
'@rush-temp/tracker-assets': file:projects/tracker-assets.tgz_typescript@4.5.4
|
||||
'@rush-temp/tracker-resources': file:projects/tracker-resources.tgz_096c09b0b673a57c275d9767a12070b1
|
||||
'@rush-temp/ui': file:projects/ui.tgz_096c09b0b673a57c275d9767a12070b1
|
||||
'@rush-temp/view': file:projects/view.tgz
|
||||
'@rush-temp/view-assets': file:projects/view-assets.tgz_typescript@4.5.4
|
||||
@ -12448,7 +12450,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/model-all.tgz_typescript@4.5.4:
|
||||
resolution: {integrity: sha512-LFMD9UgTqaXrqIVbVyZudBvzL8xL6KphHnShut9no15Y5ZozOYv9hksYqBU959YFHClTkUI22XzwaFUPTSideA==, tarball: file:projects/model-all.tgz}
|
||||
resolution: {integrity: sha512-lWOQv1FZnBGezRQTGOgS5vsZet1ex1Rlq1zid1v6aWHhmU8dZ6bt/msHNig4h1ugHZRGm5MOzhvLvtem5pvYUA==, tarball: file:projects/model-all.tgz}
|
||||
id: file:projects/model-all.tgz
|
||||
name: '@rush-temp/model-all'
|
||||
version: 0.0.0
|
||||
@ -13059,27 +13061,6 @@ packages:
|
||||
- typescript
|
||||
dev: false
|
||||
|
||||
file:projects/model-tracker.tgz_typescript@4.5.4:
|
||||
resolution: {integrity: sha512-PWxsEQ61Fe/moBL+dROHGw2bQRaaJBL/N7HozRZPxXoRfXkH/DwNMvH/UofBL4mIFVs8FfQU03FaFnNdahgNZw==, tarball: file:projects/model-tracker.tgz}
|
||||
id: file:projects/model-tracker.tgz
|
||||
name: '@rush-temp/model-tracker'
|
||||
version: 0.0.0
|
||||
dependencies:
|
||||
'@rushstack/heft': 0.41.8
|
||||
'@types/heft-jest': 1.0.2
|
||||
'@typescript-eslint/eslint-plugin': 5.7.0_c25e8c1f4f4f7aaed27aa6f9ce042237
|
||||
'@typescript-eslint/parser': 5.7.0_eslint@7.32.0+typescript@4.5.4
|
||||
eslint: 7.32.0
|
||||
eslint-config-standard-with-typescript: 21.0.1_ce2fa0c4dfa1c256100cababd749a13a
|
||||
eslint-plugin-import: 2.25.3_eslint@7.32.0
|
||||
eslint-plugin-node: 11.1.0_eslint@7.32.0
|
||||
eslint-plugin-promise: 5.2.0_eslint@7.32.0
|
||||
prettier: 2.5.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
- typescript
|
||||
dev: false
|
||||
|
||||
file:projects/model-tags.tgz_typescript@4.5.4:
|
||||
resolution: {integrity: sha512-tRhFRRosgUsAll6FSrGLSKycNeDNbH8M2JTvhOrMOQjsVafRvCz+oM+/sHg+tln4CSFTxU/+9cjPfHfQNx5fVA==, tarball: file:projects/model-tags.tgz}
|
||||
id: file:projects/model-tags.tgz
|
||||
@ -13186,6 +13167,27 @@ packages:
|
||||
- typescript
|
||||
dev: false
|
||||
|
||||
file:projects/model-tracker.tgz_typescript@4.5.4:
|
||||
resolution: {integrity: sha512-Cvk6XIrF0NOsFKh1T81iJVUELDVRZGmGgZk0PSNRf0h8YQ5NUSDwtVhlfcFYgMkjgwGLG3B/SgTR+0AM8moL6g==, tarball: file:projects/model-tracker.tgz}
|
||||
id: file:projects/model-tracker.tgz
|
||||
name: '@rush-temp/model-tracker'
|
||||
version: 0.0.0
|
||||
dependencies:
|
||||
'@rushstack/heft': 0.41.8
|
||||
'@types/heft-jest': 1.0.2
|
||||
'@typescript-eslint/eslint-plugin': 5.7.0_c25e8c1f4f4f7aaed27aa6f9ce042237
|
||||
'@typescript-eslint/parser': 5.7.0_eslint@7.32.0+typescript@4.5.4
|
||||
eslint: 7.32.0
|
||||
eslint-config-standard-with-typescript: 21.0.1_ce2fa0c4dfa1c256100cababd749a13a
|
||||
eslint-plugin-import: 2.25.3_eslint@7.32.0
|
||||
eslint-plugin-node: 11.1.0_eslint@7.32.0
|
||||
eslint-plugin-promise: 5.2.0_eslint@7.32.0
|
||||
prettier: 2.5.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
- typescript
|
||||
dev: false
|
||||
|
||||
file:projects/model-view.tgz_typescript@4.5.4:
|
||||
resolution: {integrity: sha512-xytdeNDVvutTczeeuGL1Lq0znNNLf6rjQjVG8ZoEjsTwMXVrho30xfPqKcBnyQC9sO0QRhPltSVdqV8GBCwnag==, tarball: file:projects/model-view.tgz}
|
||||
id: file:projects/model-view.tgz
|
||||
@ -13503,8 +13505,54 @@ packages:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
file:projects/prod-tracker.tgz_a07ec81d4d975778878ca12202ea119e:
|
||||
resolution: {integrity: sha512-ml5yu/H4Tqliw+NJQ3SJtajDjqJe+bMRtmG/yU0C7Yktuiz1KefgUnIzftkpLoVx1tFQhs9hLkIG2dYLp0GgPg==, tarball: file:projects/prod-tracker.tgz}
|
||||
id: file:projects/prod-tracker.tgz
|
||||
name: '@rush-temp/prod-tracker'
|
||||
version: 0.0.0
|
||||
dependencies:
|
||||
'@types/node': 16.11.14
|
||||
autoprefixer: 10.4.0_postcss@8.4.5
|
||||
compression-webpack-plugin: 9.0.1_webpack@5.65.0
|
||||
cross-env: 7.0.3
|
||||
css-loader: 5.2.7_webpack@5.65.0
|
||||
dotenv-webpack: 7.0.3_webpack@5.65.0
|
||||
file-loader: 6.2.0_webpack@5.65.0
|
||||
html-webpack-plugin: 5.5.0_webpack@5.65.0
|
||||
mini-css-extract-plugin: 2.4.5_webpack@5.65.0
|
||||
postcss: 8.4.5
|
||||
postcss-load-config: 3.1.0_ts-node@10.5.0
|
||||
postcss-loader: 6.2.1_postcss@8.4.5+webpack@5.65.0
|
||||
sass-loader: 12.4.0_sass@1.45.0+webpack@5.65.0
|
||||
style-loader: 3.3.1_webpack@5.65.0
|
||||
svelte: 3.44.3
|
||||
svelte-loader: 3.1.2_svelte@3.44.3
|
||||
svgo-loader: 3.0.0
|
||||
ts-loader: 9.2.6_typescript@4.5.4+webpack@5.65.0
|
||||
webpack: 5.65.0_9def3870c80213359789f9191dbd286a
|
||||
webpack-bundle-analyzer: 4.5.0
|
||||
webpack-cli: 4.9.1_4f2dbb6d08811eb2952e58098bb53992
|
||||
webpack-dev-server: 4.7.4_webpack-cli@4.9.1+webpack@5.65.0
|
||||
transitivePeerDependencies:
|
||||
- '@swc/core'
|
||||
- '@webpack-cli/generators'
|
||||
- '@webpack-cli/migrate'
|
||||
- acorn
|
||||
- bufferutil
|
||||
- debug
|
||||
- esbuild
|
||||
- fibers
|
||||
- node-sass
|
||||
- sass
|
||||
- supports-color
|
||||
- ts-node
|
||||
- typescript
|
||||
- uglify-js
|
||||
- utf-8-validate
|
||||
dev: false
|
||||
|
||||
file:projects/prod.tgz_a07ec81d4d975778878ca12202ea119e:
|
||||
resolution: {integrity: sha512-lAhrU2LvSbV+Hg0ug0LHYTe3RMC8MgyyuFOFXQNMwXftXqQfXkgciBMjWh+g9PB/aXcJwSLm3scgACCtGG0wWw==, tarball: file:projects/prod.tgz}
|
||||
resolution: {integrity: sha512-nDyFjQ3sOea0YCtOVvhhquRWOZi521nMCYd2ClE8AEtL5d7gIAkCgqVROEpOVVuNppMm0f+m77pmeg409J+Cgw==, tarball: file:projects/prod.tgz}
|
||||
id: file:projects/prod.tgz
|
||||
name: '@rush-temp/prod'
|
||||
version: 0.0.0
|
||||
@ -14424,84 +14472,6 @@ packages:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
file:projects/tracker-assets.tgz_typescript@4.5.4:
|
||||
resolution: {integrity: sha512-sTaCJb1JkS7lN4xuyIFPuQwlafQHtMB7yZ3lrWTX/MgMwxr4UWHnZODK631lGxhio4MlMgXX0KYqiDwfxnQJqg==, tarball: file:projects/tracker-assets.tgz}
|
||||
id: file:projects/tracker-assets.tgz
|
||||
name: '@rush-temp/tracker-assets'
|
||||
version: 0.0.0
|
||||
dependencies:
|
||||
'@rushstack/heft': 0.41.8
|
||||
'@types/heft-jest': 1.0.2
|
||||
'@types/node': 16.11.14
|
||||
'@typescript-eslint/eslint-plugin': 5.7.0_c25e8c1f4f4f7aaed27aa6f9ce042237
|
||||
'@typescript-eslint/parser': 5.7.0_eslint@7.32.0+typescript@4.5.4
|
||||
eslint: 7.32.0
|
||||
eslint-config-standard-with-typescript: 21.0.1_ce2fa0c4dfa1c256100cababd749a13a
|
||||
eslint-plugin-import: 2.25.3_eslint@7.32.0
|
||||
eslint-plugin-node: 11.1.0_eslint@7.32.0
|
||||
eslint-plugin-promise: 5.2.0_eslint@7.32.0
|
||||
prettier: 2.5.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
- typescript
|
||||
dev: false
|
||||
|
||||
file:projects/tracker-resources.tgz_096c09b0b673a57c275d9767a12070b1:
|
||||
resolution: {integrity: sha512-IwrLGQsCGO7NtMvEY2i7mA81An6fhYDq8Y4aKYZKSX/ptG85/xCJ+YayjxbX70iUoogHJfgYGPTklPJjBAXIKg==, tarball: file:projects/tracker-resources.tgz}
|
||||
id: file:projects/tracker-resources.tgz
|
||||
name: '@rush-temp/tracker-resources'
|
||||
version: 0.0.0
|
||||
dependencies:
|
||||
'@typescript-eslint/eslint-plugin': 5.7.0_c25e8c1f4f4f7aaed27aa6f9ce042237
|
||||
'@typescript-eslint/parser': 5.7.0_eslint@7.32.0+typescript@4.5.4
|
||||
eslint: 7.32.0
|
||||
eslint-config-standard-with-typescript: 21.0.1_ce2fa0c4dfa1c256100cababd749a13a
|
||||
eslint-plugin-import: 2.25.3_eslint@7.32.0
|
||||
eslint-plugin-node: 11.1.0_eslint@7.32.0
|
||||
eslint-plugin-promise: 5.2.0_eslint@7.32.0
|
||||
eslint-plugin-svelte3: 3.2.1_eslint@7.32.0+svelte@3.44.3
|
||||
lexorank: 1.0.4
|
||||
prettier: 2.5.1
|
||||
prettier-plugin-svelte: 2.5.1_prettier@2.5.1+svelte@3.44.3
|
||||
sass: 1.45.0
|
||||
svelte: 3.44.3
|
||||
svelte-check: 2.3.0_4374c622c67ed7479ff0e44c29d09bce
|
||||
svelte-loader: 3.1.2_svelte@3.44.3
|
||||
svelte-preprocess: 4.10.3_14d64cad431e31f100de7363af24a44f
|
||||
typescript: 4.5.4
|
||||
transitivePeerDependencies:
|
||||
- '@babel/core'
|
||||
- coffeescript
|
||||
- less
|
||||
- node-sass
|
||||
- postcss
|
||||
- postcss-load-config
|
||||
- pug
|
||||
- stylus
|
||||
- sugarss
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
file:projects/tracker.tgz:
|
||||
resolution: {integrity: sha512-4BE4OCd7TawHUfz5pI8hYADlDGMLsNrczRPbsuEy1hrA+4BSTkjn5rDDSZ3iu9TLtB3TV3anvbjiZhZOrbiDyw==, tarball: file:projects/tracker.tgz}
|
||||
name: '@rush-temp/tracker'
|
||||
version: 0.0.0
|
||||
dependencies:
|
||||
'@rushstack/heft': 0.41.8
|
||||
'@types/heft-jest': 1.0.2
|
||||
'@typescript-eslint/eslint-plugin': 5.7.0_c25e8c1f4f4f7aaed27aa6f9ce042237
|
||||
'@typescript-eslint/parser': 5.7.0_eslint@7.32.0+typescript@4.5.4
|
||||
eslint: 7.32.0
|
||||
eslint-config-standard-with-typescript: 21.0.1_ce2fa0c4dfa1c256100cababd749a13a
|
||||
eslint-plugin-import: 2.25.3_eslint@7.32.0
|
||||
eslint-plugin-node: 11.1.0_eslint@7.32.0
|
||||
eslint-plugin-promise: 5.2.0_eslint@7.32.0
|
||||
prettier: 2.5.1
|
||||
typescript: 4.5.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
file:projects/tags-assets.tgz:
|
||||
resolution: {integrity: sha512-c3kDt2CRIqT3lDJNJPawZ+M3j979cOkF1mYeRKUOsNQ1Zs9wnqXjxDxe1ZECpOAUbWXNhKj/Mru0XfEyaCxHQA==, tarball: file:projects/tags-assets.tgz}
|
||||
name: '@rush-temp/tags-assets'
|
||||
@ -14957,6 +14927,84 @@ packages:
|
||||
- utf-8-validate
|
||||
dev: false
|
||||
|
||||
file:projects/tracker-assets.tgz_typescript@4.5.4:
|
||||
resolution: {integrity: sha512-xhITadwF6UhanMThCsimB4+Cy5yh34Ig86wYOtV/8EZUJqrrfOSsIUQdXyvhx5E+JLWvE0K8E7CV8SdBCN3mUA==, tarball: file:projects/tracker-assets.tgz}
|
||||
id: file:projects/tracker-assets.tgz
|
||||
name: '@rush-temp/tracker-assets'
|
||||
version: 0.0.0
|
||||
dependencies:
|
||||
'@rushstack/heft': 0.41.8
|
||||
'@types/heft-jest': 1.0.2
|
||||
'@types/node': 16.11.14
|
||||
'@typescript-eslint/eslint-plugin': 5.7.0_c25e8c1f4f4f7aaed27aa6f9ce042237
|
||||
'@typescript-eslint/parser': 5.7.0_eslint@7.32.0+typescript@4.5.4
|
||||
eslint: 7.32.0
|
||||
eslint-config-standard-with-typescript: 21.0.1_ce2fa0c4dfa1c256100cababd749a13a
|
||||
eslint-plugin-import: 2.25.3_eslint@7.32.0
|
||||
eslint-plugin-node: 11.1.0_eslint@7.32.0
|
||||
eslint-plugin-promise: 5.2.0_eslint@7.32.0
|
||||
prettier: 2.5.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
- typescript
|
||||
dev: false
|
||||
|
||||
file:projects/tracker-resources.tgz_096c09b0b673a57c275d9767a12070b1:
|
||||
resolution: {integrity: sha512-tMI7AyIGVwPUgsQTjkViq/8wuEVgtl8748Vl34qS0BOuKGvJJzRFwYzpEG+l8OUiqW71PuotxgSQWDQi2xWgpw==, tarball: file:projects/tracker-resources.tgz}
|
||||
id: file:projects/tracker-resources.tgz
|
||||
name: '@rush-temp/tracker-resources'
|
||||
version: 0.0.0
|
||||
dependencies:
|
||||
'@typescript-eslint/eslint-plugin': 5.7.0_c25e8c1f4f4f7aaed27aa6f9ce042237
|
||||
'@typescript-eslint/parser': 5.7.0_eslint@7.32.0+typescript@4.5.4
|
||||
eslint: 7.32.0
|
||||
eslint-config-standard-with-typescript: 21.0.1_ce2fa0c4dfa1c256100cababd749a13a
|
||||
eslint-plugin-import: 2.25.3_eslint@7.32.0
|
||||
eslint-plugin-node: 11.1.0_eslint@7.32.0
|
||||
eslint-plugin-promise: 5.2.0_eslint@7.32.0
|
||||
eslint-plugin-svelte3: 3.2.1_eslint@7.32.0+svelte@3.44.3
|
||||
lexorank: 1.0.4
|
||||
prettier: 2.5.1
|
||||
prettier-plugin-svelte: 2.5.1_prettier@2.5.1+svelte@3.44.3
|
||||
sass: 1.45.0
|
||||
svelte: 3.44.3
|
||||
svelte-check: 2.3.0_4374c622c67ed7479ff0e44c29d09bce
|
||||
svelte-loader: 3.1.2_svelte@3.44.3
|
||||
svelte-preprocess: 4.10.3_14d64cad431e31f100de7363af24a44f
|
||||
typescript: 4.5.4
|
||||
transitivePeerDependencies:
|
||||
- '@babel/core'
|
||||
- coffeescript
|
||||
- less
|
||||
- node-sass
|
||||
- postcss
|
||||
- postcss-load-config
|
||||
- pug
|
||||
- stylus
|
||||
- sugarss
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
file:projects/tracker.tgz:
|
||||
resolution: {integrity: sha512-UcgyfcNVHNOiPO9WiY3Runp1GMqtJJqdHIff7nT7tJqAvl3Vns5nASmjrED129zW6bvVQJmgcMSJbyN0E3EAeQ==, tarball: file:projects/tracker.tgz}
|
||||
name: '@rush-temp/tracker'
|
||||
version: 0.0.0
|
||||
dependencies:
|
||||
'@rushstack/heft': 0.41.8
|
||||
'@types/heft-jest': 1.0.2
|
||||
'@typescript-eslint/eslint-plugin': 5.7.0_c25e8c1f4f4f7aaed27aa6f9ce042237
|
||||
'@typescript-eslint/parser': 5.7.0_eslint@7.32.0+typescript@4.5.4
|
||||
eslint: 7.32.0
|
||||
eslint-config-standard-with-typescript: 21.0.1_ce2fa0c4dfa1c256100cababd749a13a
|
||||
eslint-plugin-import: 2.25.3_eslint@7.32.0
|
||||
eslint-plugin-node: 11.1.0_eslint@7.32.0
|
||||
eslint-plugin-promise: 5.2.0_eslint@7.32.0
|
||||
prettier: 2.5.1
|
||||
typescript: 4.5.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
file:projects/ui.tgz_096c09b0b673a57c275d9767a12070b1:
|
||||
resolution: {integrity: sha512-+VUS/8pCD2vXIMkRLWtVtXBIRBkYboAdHBsDdyusTWJPx6LKVwuUw77IJAosqQEhwREbpVYq7GdP5q5ZgmwGEg==, tarball: file:projects/ui.tgz}
|
||||
id: file:projects/ui.tgz
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
roots='./server/server ./server/front ./pods/account'
|
||||
roots='./server/server ./server/front ./pods/account ./products/tracker'
|
||||
|
||||
for r in $roots
|
||||
do
|
||||
|
@ -35,7 +35,6 @@ export default async () => {
|
||||
await createDeps(client)
|
||||
}
|
||||
// Check if we had dev hook for client.
|
||||
// Check if we had dev hook for client.
|
||||
const hook = getMetadata(clientPlugin.metadata.ClientHook)
|
||||
if (hook !== undefined) {
|
||||
const hookProc = await getResource(hook)
|
||||
|
@ -76,6 +76,26 @@ services:
|
||||
- MINIO_ENDPOINT=minio
|
||||
- MINIO_ACCESS_KEY=minioadmin
|
||||
- MINIO_SECRET_KEY=minioadmin
|
||||
tracker-front:
|
||||
image: hardcoreeng/tracker-front
|
||||
links:
|
||||
- mongodb
|
||||
- minio
|
||||
- elastic
|
||||
- transactor
|
||||
ports:
|
||||
- 8084:8080
|
||||
environment:
|
||||
- SERVER_PORT=8080
|
||||
- SERVER_SECRET=secret
|
||||
- ACCOUNTS_URL=http://localhost:3000
|
||||
- FRONT_URL=http://localhost:8084
|
||||
- UPLOAD_URL=/files
|
||||
- TRANSACTOR_URL=ws://localhost:3333
|
||||
- ELASTIC_URL=http://elastic:9200
|
||||
- MINIO_ENDPOINT=minio
|
||||
- MINIO_ACCESS_KEY=minioadmin
|
||||
- MINIO_SECRET_KEY=minioadmin
|
||||
transactor:
|
||||
image: hardcoreeng/transactor
|
||||
links:
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "prod",
|
||||
"name": "@anticrm/prod",
|
||||
"version": "1.0.1",
|
||||
"license": "EPL-2.0",
|
||||
"scripts": {
|
||||
@ -134,6 +134,7 @@
|
||||
"@anticrm/presentation": "~0.6.2",
|
||||
"@anticrm/tracker": "~0.6.0",
|
||||
"@anticrm/tracker-assets": "~0.6.0",
|
||||
"@anticrm/tracker-resources": "~0.6.0"
|
||||
"@anticrm/tracker-resources": "~0.6.0",
|
||||
"@anticrm/text-editor": "~0.6.0"
|
||||
}
|
||||
}
|
||||
|
@ -58,16 +58,19 @@ import '@anticrm/notification-assets'
|
||||
import '@anticrm/tags-assets'
|
||||
import '@anticrm/calendar-assets'
|
||||
import '@anticrm/tracker-assets'
|
||||
import presentation from '@anticrm/presentation'
|
||||
import presentation, { presentationId } from '@anticrm/presentation'
|
||||
import { coreId } from '@anticrm/core'
|
||||
import { textEditorId } from '@anticrm/text-editor'
|
||||
|
||||
import { setMetadata } from '@anticrm/platform'
|
||||
|
||||
|
||||
export async function configurePlatform() {
|
||||
const config = await (await fetch('/config.json')).json()
|
||||
console.log('loading configuration', config)
|
||||
setMetadata(login.metadata.AccountsUrl, config.ACCOUNTS_URL)
|
||||
setMetadata(login.metadata.UploadUrl, config.UPLOAD_URL)
|
||||
|
||||
|
||||
if( config.MODEL_VERSION != null) {
|
||||
console.log('Minimal Model version requirement', config.MODEL_VERSION)
|
||||
setMetadata(presentation.metadata.RequiredVersion, config.MODEL_VERSION)
|
||||
@ -81,6 +84,10 @@ export async function configurePlatform() {
|
||||
|
||||
setMetadata(uiPlugin.metadata.DefaultApplication, workbench.component.WorkbenchApp )
|
||||
|
||||
addLocation(coreId, async () => ({ default: async () => ({}) }))
|
||||
addLocation(presentationId, async () => ({ default: async () => ({}) }))
|
||||
addLocation(textEditorId, async () => ({ default: async () => ({}) }))
|
||||
|
||||
addLocation(clientId, () => import(/* webpackChunkName: "client" */ '@anticrm/client-resources'))
|
||||
addLocation(loginId, () => import(/* webpackChunkName: "login" */ '@anticrm/login-resources'))
|
||||
addLocation(workbenchId, () => import(/* webpackChunkName: "workbench" */ '@anticrm/workbench-resources'))
|
||||
@ -103,4 +110,6 @@ export async function configurePlatform() {
|
||||
addLocation(calendarId, () => import(/* webpackChunkName: "calendar" */ '@anticrm/calendar-resources'))
|
||||
|
||||
addLocation(trackerId, () => import(/* webpackChunkName: "tracker" */ '@anticrm/tracker-resources'))
|
||||
|
||||
setMetadata(workbench.metadata.PlatformTitle, 'Platform')
|
||||
}
|
||||
|
@ -18,10 +18,12 @@ import { createDeps as createTaskDeps } from '@anticrm/model-task'
|
||||
import { createDeps as createLeadDeps } from '@anticrm/model-lead'
|
||||
import { createDeps as createRecruitDeps } from '@anticrm/model-recruit'
|
||||
import { createDeps as createDemoDeps } from '@anticrm/model-demo'
|
||||
import { createDeps as createTrackerDeps } from '@anticrm/model-tracker'
|
||||
|
||||
export async function createDeps (client: Client): Promise<void> {
|
||||
await createTaskDeps(client)
|
||||
await createLeadDeps(client)
|
||||
await createRecruitDeps(client)
|
||||
await createDemoDeps(client)
|
||||
await createTrackerDeps(client)
|
||||
}
|
||||
|
@ -13,7 +13,7 @@
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import core, { Data, Version } from '@anticrm/core'
|
||||
import core, { coreId, Data, PluginConfiguration, Ref, Tx, Version } from '@anticrm/core'
|
||||
import jsonVersion from './version.json'
|
||||
|
||||
import { Builder } from '@anticrm/model'
|
||||
@ -58,47 +58,62 @@ export const version: Data<Version> = jsonVersion as Data<Version>
|
||||
|
||||
const builder = new Builder()
|
||||
|
||||
const builders = [
|
||||
coreModel,
|
||||
activityModel,
|
||||
attachmentModel,
|
||||
viewModel,
|
||||
workbenchModel,
|
||||
contactModel,
|
||||
chunterModel,
|
||||
taskModel,
|
||||
recruitModel,
|
||||
settingModel,
|
||||
telegramModel,
|
||||
leadModel,
|
||||
gmailModel,
|
||||
inventoryModel,
|
||||
presentationModel,
|
||||
templatesModel,
|
||||
textEditorModel,
|
||||
notificationModel,
|
||||
serverCoreModel,
|
||||
serverAttachmentModel,
|
||||
serverContactModel,
|
||||
serverNotificationModel,
|
||||
serveSettingModel,
|
||||
tagsModel,
|
||||
calendarModel,
|
||||
serverChunterModel,
|
||||
serverInventoryModel,
|
||||
serverLeadModel,
|
||||
serverTagsModel,
|
||||
serverTaskModel,
|
||||
serverRecruitModel,
|
||||
serverCalendarModel,
|
||||
serverGmailModel,
|
||||
serverTelegramModel,
|
||||
trackerModel,
|
||||
createDemo
|
||||
const builders: [(b: Builder) => void, string][] = [
|
||||
[coreModel, coreId],
|
||||
[activityModel, 'activity'],
|
||||
[attachmentModel, 'attachment'],
|
||||
[viewModel, 'view'],
|
||||
[workbenchModel, 'workbench'],
|
||||
[contactModel, 'contact'],
|
||||
[chunterModel, 'chunter'],
|
||||
[taskModel, 'task'],
|
||||
[recruitModel, 'recruit'],
|
||||
[settingModel, 'setting'],
|
||||
[telegramModel, 'telegram'],
|
||||
[leadModel, 'lead'],
|
||||
[gmailModel, 'gmail'],
|
||||
[inventoryModel, 'inventory'],
|
||||
[presentationModel, 'presentation'],
|
||||
[templatesModel, 'templates'],
|
||||
[textEditorModel, 'text-editor'],
|
||||
[notificationModel, 'notification'],
|
||||
|
||||
[serverCoreModel, 'server-core'],
|
||||
[serverAttachmentModel, 'server-attachment'],
|
||||
[serverContactModel, 'server-contact'],
|
||||
[serverNotificationModel, 'server-notification'],
|
||||
[serveSettingModel, 'server-setting'],
|
||||
[tagsModel, 'tags'],
|
||||
[calendarModel, 'calendar'],
|
||||
[serverChunterModel, 'server-chunter'],
|
||||
[serverInventoryModel, 'server-inventory'],
|
||||
[serverLeadModel, 'server-lead'],
|
||||
[serverTagsModel, 'server-tags'],
|
||||
[serverTaskModel, 'server-task'],
|
||||
[serverRecruitModel, 'server-recruit'],
|
||||
[serverCalendarModel, 'server-calendar'],
|
||||
[serverGmailModel, 'server-gmail'],
|
||||
[serverTelegramModel, 'server-telegram'],
|
||||
[trackerModel, 'tracker'],
|
||||
[createDemo, 'demo']
|
||||
]
|
||||
|
||||
for (const b of builders) {
|
||||
for (const [b, id] of builders) {
|
||||
const txes: Tx[] = []
|
||||
builder.onTx = (tx) => {
|
||||
txes.push(tx)
|
||||
}
|
||||
b(builder)
|
||||
builder.createDoc(
|
||||
core.class.PluginConfiguration,
|
||||
core.space.Model,
|
||||
{
|
||||
pluginId: id,
|
||||
transactions: txes.map((it) => it._id)
|
||||
},
|
||||
('plugin-configuration-' + id) as Ref<PluginConfiguration>
|
||||
)
|
||||
builder.onTx = undefined
|
||||
}
|
||||
|
||||
builder.createDoc(core.class.Version, core.space.Model, version, core.version.Model)
|
||||
|
@ -20,6 +20,7 @@ import {
|
||||
ClassifierKind, Collection, Doc,
|
||||
Domain, DOMAIN_MODEL, IndexKind, Interface, Mixin,
|
||||
Obj,
|
||||
PluginConfiguration,
|
||||
Ref, RefTo, Space,
|
||||
Timestamp,
|
||||
Type, Version
|
||||
@ -143,3 +144,9 @@ export class TVersion extends TDoc implements Version {
|
||||
minor!: number
|
||||
patch!: number
|
||||
}
|
||||
|
||||
@Model(core.class.PluginConfiguration, core.class.Doc, DOMAIN_MODEL)
|
||||
export class TPluginConfiguration extends TDoc implements PluginConfiguration {
|
||||
pluginId!: string;
|
||||
transactions!: Ref<Doc>[]
|
||||
}
|
||||
|
@ -25,6 +25,7 @@ import {
|
||||
TInterface,
|
||||
TMixin,
|
||||
TObj,
|
||||
TPluginConfiguration,
|
||||
TRefTo,
|
||||
TType,
|
||||
TTypeBoolean,
|
||||
@ -81,6 +82,7 @@ export function createModel (builder: Builder): void {
|
||||
TArrOf,
|
||||
TVersion,
|
||||
TTypeNumber,
|
||||
TTypeIntlString
|
||||
TTypeIntlString,
|
||||
TPluginConfiguration
|
||||
)
|
||||
}
|
||||
|
@ -24,7 +24,12 @@ export async function createDeps (client: Client): Promise<void> {
|
||||
_id: tracker.team.DefaultTeam
|
||||
})
|
||||
|
||||
if (current === undefined) {
|
||||
const currentDeleted = await tx.findOne(core.class.TxRemoveDoc, {
|
||||
objectId: tracker.team.DefaultTeam
|
||||
})
|
||||
|
||||
// Create new if not deleted by customers.
|
||||
if (current === undefined && currentDeleted === undefined) {
|
||||
await tx.createDoc<Team>(
|
||||
tracker.class.Team,
|
||||
core.space.Space,
|
||||
|
@ -146,6 +146,15 @@ export interface Class<T extends Obj> extends Classifier {
|
||||
sortingKey?: string
|
||||
}
|
||||
|
||||
/**
|
||||
* @public
|
||||
* Define a set of plugin to model document bindings.
|
||||
*/
|
||||
export interface PluginConfiguration extends Doc {
|
||||
pluginId: string
|
||||
transactions: Ref<Doc>[]
|
||||
}
|
||||
|
||||
/**
|
||||
* @public
|
||||
*/
|
||||
|
@ -13,14 +13,15 @@
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import type { Class, Doc, Ref } from './classes'
|
||||
import { Plugin } from '@anticrm/platform'
|
||||
import type { Class, Doc, PluginConfiguration, Ref } from './classes'
|
||||
import { DOMAIN_MODEL } from './classes'
|
||||
import core from './component'
|
||||
import { Hierarchy } from './hierarchy'
|
||||
import { ModelDb } from './memdb'
|
||||
import type { DocumentQuery, FindOptions, FindResult, Storage, TxResult, WithLookup } from './storage'
|
||||
import { SortingOrder } from './storage'
|
||||
import type { Tx } from './tx'
|
||||
import { Tx, TxCreateDoc, TxProcessor, TxUpdateDoc } from './tx'
|
||||
|
||||
/**
|
||||
* @public
|
||||
@ -52,12 +53,19 @@ export interface ClientConnection extends Storage {
|
||||
class ClientImpl implements Client {
|
||||
notify?: (tx: Tx) => void
|
||||
|
||||
constructor (private readonly hierarchy: Hierarchy, private readonly model: ModelDb, private readonly conn: ClientConnection) {
|
||||
constructor (
|
||||
private readonly hierarchy: Hierarchy,
|
||||
private readonly model: ModelDb,
|
||||
private readonly conn: ClientConnection
|
||||
) {}
|
||||
|
||||
getHierarchy (): Hierarchy {
|
||||
return this.hierarchy
|
||||
}
|
||||
|
||||
getHierarchy (): Hierarchy { return this.hierarchy }
|
||||
|
||||
getModel (): ModelDb { return this.model }
|
||||
getModel (): ModelDb {
|
||||
return this.model
|
||||
}
|
||||
|
||||
async findAll<T extends Doc>(
|
||||
_class: Ref<Class<T>>,
|
||||
@ -65,14 +73,15 @@ class ClientImpl implements Client {
|
||||
options?: FindOptions<T>
|
||||
): Promise<FindResult<T>> {
|
||||
const domain = this.hierarchy.getDomain(_class)
|
||||
let result = (domain === DOMAIN_MODEL)
|
||||
let result =
|
||||
domain === DOMAIN_MODEL
|
||||
? await this.model.findAll(_class, query, options)
|
||||
: await this.conn.findAll(_class, query, options)
|
||||
|
||||
// In case of mixin we need to create mixin proxies.
|
||||
|
||||
// Update mixins & lookups
|
||||
result = result.map(v => {
|
||||
result = result.map((v) => {
|
||||
return this.hierarchy.updateLookupMixin(_class, v, options)
|
||||
})
|
||||
return result
|
||||
@ -115,7 +124,9 @@ class ClientImpl implements Client {
|
||||
* @public
|
||||
*/
|
||||
export async function createClient (
|
||||
connect: (txHandler: TxHander) => Promise<ClientConnection>
|
||||
connect: (txHandler: TxHander) => Promise<ClientConnection>,
|
||||
// If set will build model with only allowed plugins.
|
||||
allowedPlugins?: Plugin[]
|
||||
): Promise<Client> {
|
||||
let client: ClientImpl | null = null
|
||||
let txBuffer: Tx[] | undefined = []
|
||||
@ -133,14 +144,57 @@ export async function createClient (
|
||||
}
|
||||
|
||||
const conn = await connect(txHander)
|
||||
const atxes = await conn.findAll(core.class.Tx, { objectSpace: core.space.Model }, { sort: { _id: SortingOrder.Ascending } })
|
||||
const atxes = await conn.findAll(
|
||||
core.class.Tx,
|
||||
{ objectSpace: core.space.Model },
|
||||
{ sort: { _id: SortingOrder.Ascending } }
|
||||
)
|
||||
|
||||
const systemTr: Tx[] = []
|
||||
let systemTx: Tx[] = []
|
||||
const userTx: Tx[] = []
|
||||
|
||||
atxes.forEach(tx => ((tx.modifiedBy === core.account.System) ? systemTr : userTx).push(tx))
|
||||
atxes.forEach((tx) => (tx.modifiedBy === core.account.System ? systemTx : userTx).push(tx))
|
||||
|
||||
const txes = systemTr.concat(userTx)
|
||||
if (allowedPlugins !== undefined) {
|
||||
// Filter system transactions
|
||||
const configs = new Map<Ref<PluginConfiguration>, PluginConfiguration>()
|
||||
for (const t of systemTx) {
|
||||
if (t._class === core.class.TxCreateDoc) {
|
||||
const ct = t as TxCreateDoc<Doc>
|
||||
if (ct.objectClass === core.class.PluginConfiguration) {
|
||||
configs.set(ct.objectId as Ref<PluginConfiguration>,
|
||||
TxProcessor.createDoc2Doc(ct) as PluginConfiguration
|
||||
)
|
||||
}
|
||||
} else if (t._class === core.class.TxUpdateDoc) {
|
||||
const ut = t as TxUpdateDoc<Doc>
|
||||
if (ut.objectClass === core.class.PluginConfiguration) {
|
||||
const c = configs.get(ut.objectId as Ref<PluginConfiguration>)
|
||||
if (c !== undefined) {
|
||||
TxProcessor.updateDoc2Doc(c, ut)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const excludedPlugins = Array.from(configs.values()).filter(it => !allowedPlugins.includes(it.pluginId as Plugin))
|
||||
|
||||
for (const a of excludedPlugins) {
|
||||
for (const c of configs.values()) {
|
||||
if (a.pluginId === c.pluginId) {
|
||||
const excluded = new Set<Ref<Tx>>()
|
||||
for (const id of c.transactions) {
|
||||
excluded.add(id as Ref<Tx>)
|
||||
}
|
||||
const exclude = systemTx.filter(t => excluded.has(t._id))
|
||||
console.log('exclude plugin', c.pluginId, exclude.length)
|
||||
systemTx = systemTx.filter(t => !excluded.has(t._id))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const txes = systemTx.concat(userTx)
|
||||
|
||||
const txMap = new Map<Ref<Tx>, Ref<Tx>>()
|
||||
for (const tx of txes) txMap.set(tx._id, tx._id)
|
||||
|
@ -15,7 +15,7 @@
|
||||
import type { IntlString, Plugin, StatusCode } from '@anticrm/platform'
|
||||
import { plugin } from '@anticrm/platform'
|
||||
import { Mixin, Version } from '.'
|
||||
import type { Account, ArrOf, AnyAttribute, AttachedDoc, Class, Doc, Interface, Obj, PropertyType, Ref, Space, Timestamp, Type, Collection, RefTo } from './classes'
|
||||
import type { Account, AnyAttribute, ArrOf, AttachedDoc, Class, Collection, Doc, Interface, Obj, PluginConfiguration, PropertyType, Ref, RefTo, Space, Timestamp, Type } from './classes'
|
||||
import type { Tx, TxBulkWrite, TxCollectionCUD, TxCreateDoc, TxCUD, TxMixin, TxPutBag, TxRemoveDoc, TxUpdateDoc } from './tx'
|
||||
|
||||
/**
|
||||
@ -54,7 +54,8 @@ export default plugin(coreId, {
|
||||
ArrOf: '' as Ref<Class<ArrOf<Doc>>>,
|
||||
Collection: '' as Ref<Class<Collection<AttachedDoc>>>,
|
||||
Bag: '' as Ref<Class<Type<Record<string, PropertyType>>>>,
|
||||
Version: '' as Ref<Class<Version>>
|
||||
Version: '' as Ref<Class<Version>>,
|
||||
PluginConfiguration: '' as Ref<Class<PluginConfiguration>>
|
||||
},
|
||||
space: {
|
||||
Tx: '' as Ref<Space>,
|
||||
|
@ -75,7 +75,6 @@ function getValue (key: string, obj: any): any {
|
||||
export function matchQuery<T extends Doc> (docs: Doc[], query: DocumentQuery<T>, clazz: Ref<Class<T>>, hierarchy: Hierarchy): Doc[] {
|
||||
let result = [...docs]
|
||||
for (const key in query) {
|
||||
if (key === '_id' && ((query._id as any)?.$like === undefined || query._id === undefined)) continue
|
||||
const value = (query as any)[key]
|
||||
const tkey = checkMixinKey(key, clazz, hierarchy)
|
||||
result = findProperty(result, tkey, value)
|
||||
|
@ -249,7 +249,8 @@ function _generateTx (tx: ClassTxes): Tx[] {
|
||||
*/
|
||||
export class Builder {
|
||||
private readonly txes: Tx[] = []
|
||||
// private readonly hierarchy = new Hierarchy()
|
||||
|
||||
onTx?: (tx: Tx) => void
|
||||
|
||||
createModel (...classes: Array<new () => Obj>): void {
|
||||
const txes = classes.map((ctor) => getTxes(ctor.prototype))
|
||||
@ -263,6 +264,7 @@ export class Builder {
|
||||
|
||||
for (const tx of generated) {
|
||||
this.txes.push(tx)
|
||||
this.onTx?.(tx)
|
||||
// this.hierarchy.tx(tx)
|
||||
}
|
||||
}
|
||||
@ -302,6 +304,7 @@ export class Builder {
|
||||
tx.modifiedBy = modifiedBy
|
||||
}
|
||||
this.txes.push(tx)
|
||||
this.onTx?.(tx)
|
||||
return TxProcessor.createDoc2Doc(tx)
|
||||
}
|
||||
|
||||
@ -311,7 +314,9 @@ export class Builder {
|
||||
mixin: Ref<IMixin<M>>,
|
||||
attributes: MixinUpdate<D, M>
|
||||
): void {
|
||||
this.txes.push(txFactory.createTxMixin(objectId, objectClass, core.space.Model, mixin, attributes))
|
||||
const tx = txFactory.createTxMixin(objectId, objectClass, core.space.Model, mixin, attributes)
|
||||
this.txes.push(tx)
|
||||
this.onTx?.(tx)
|
||||
}
|
||||
|
||||
getTxes (): Tx[] {
|
||||
|
@ -52,6 +52,14 @@ export function addLocation<R extends Resources> (
|
||||
locations.set(plugin, module)
|
||||
}
|
||||
|
||||
/**
|
||||
* @public
|
||||
* return list of registred plugins.
|
||||
*/
|
||||
export function getPlugins (): Plugin[] {
|
||||
return Array.from(locations.keys())
|
||||
}
|
||||
|
||||
function getLocation (plugin: Plugin): PluginLoader<Resources> {
|
||||
const location = locations.get(plugin)
|
||||
if (location === undefined) {
|
||||
|
@ -16,29 +16,27 @@
|
||||
|
||||
import { addStringsLoader } from '@anticrm/platform'
|
||||
import { presentationId } from './plugin'
|
||||
export { presentationId }
|
||||
export * from './utils'
|
||||
export * from './attributes'
|
||||
export * from './types'
|
||||
|
||||
export { default as UserBox } from './components/UserBox.svelte'
|
||||
export { default as UserInfo } from './components/UserInfo.svelte'
|
||||
export { default as UserBoxList } from './components/UserBoxList.svelte'
|
||||
export { default as Avatar } from './components/Avatar.svelte'
|
||||
export { default as EditableAvatar } from './components/EditableAvatar.svelte'
|
||||
export { default as MessageViewer } from './components/MessageViewer.svelte'
|
||||
export { default as AttributesBar } from './components/AttributesBar.svelte'
|
||||
export { default as AttributeBarEditor } from './components/AttributeBarEditor.svelte'
|
||||
export { default as AttributeEditor } from './components/AttributeEditor.svelte'
|
||||
export { default as AttributesBar } from './components/AttributesBar.svelte'
|
||||
export { default as Avatar } from './components/Avatar.svelte'
|
||||
export { default as Card } from './components/Card.svelte'
|
||||
export { default as PDFViewer } from './components/PDFViewer.svelte'
|
||||
export { default as EditableAvatar } from './components/EditableAvatar.svelte'
|
||||
export { default as MessageBox } from './components/MessageBox.svelte'
|
||||
export { default as MessageViewer } from './components/MessageViewer.svelte'
|
||||
export { default as PDFViewer } from './components/PDFViewer.svelte'
|
||||
export { default as SpaceCreateCard } from './components/SpaceCreateCard.svelte'
|
||||
export { default as SpaceSelect } from './components/SpaceSelect.svelte'
|
||||
export { default as UserBox } from './components/UserBox.svelte'
|
||||
export { default as UserBoxList } from './components/UserBoxList.svelte'
|
||||
export { default as UserInfo } from './components/UserInfo.svelte'
|
||||
export { connect, versionError } from './connect'
|
||||
export { default } from './plugin'
|
||||
export * from './types'
|
||||
export * from './utils'
|
||||
export { presentationId }
|
||||
|
||||
addStringsLoader(presentationId, async (lang: string) => {
|
||||
return await import(`../lang/${lang}.json`)
|
||||
})
|
||||
|
||||
export { default } from './plugin'
|
||||
export { connect, versionError } from './connect'
|
||||
|
@ -15,6 +15,12 @@
|
||||
export let showButtons = true
|
||||
|
||||
let rawValue: string
|
||||
let oldContent = ''
|
||||
|
||||
$: if (oldContent !== content) {
|
||||
oldContent = content
|
||||
rawValue = content
|
||||
}
|
||||
|
||||
const Mode = {
|
||||
View: 1,
|
||||
|
@ -18,15 +18,15 @@ import { addStringsLoader } from '@anticrm/platform'
|
||||
import { textEditorId } from './plugin'
|
||||
|
||||
export * from '@anticrm/presentation/src/types'
|
||||
export * from './types'
|
||||
|
||||
export { default as ReferenceInput } from './components/ReferenceInput.svelte'
|
||||
export { default as TextEditor } from './components/TextEditor.svelte'
|
||||
export { default as StyledTextEditor } from './components/StyledTextEditor.svelte'
|
||||
export { default as StyledTextBox } from './components/StyledTextBox.svelte'
|
||||
export { default as StyledTextEditor } from './components/StyledTextEditor.svelte'
|
||||
export { default as TextEditor } from './components/TextEditor.svelte'
|
||||
export { default } from './plugin'
|
||||
export * from './types'
|
||||
|
||||
addStringsLoader(textEditorId, async (lang: string) => {
|
||||
return await import(`../lang/${lang}.json`)
|
||||
})
|
||||
|
||||
export { default } from './plugin'
|
||||
export { textEditorId }
|
||||
|
@ -14,7 +14,7 @@
|
||||
//
|
||||
|
||||
import { SvelteComponent } from 'svelte'
|
||||
import { addStringsLoader } from '@anticrm/platform'
|
||||
import { addLocation, addStringsLoader } from '@anticrm/platform'
|
||||
import { uiId } from './plugin'
|
||||
import { readable } from 'svelte/store'
|
||||
|
||||
@ -116,6 +116,8 @@ addStringsLoader(uiId, async (lang: string) => {
|
||||
return await import(`../lang/${lang}.json`)
|
||||
})
|
||||
|
||||
addLocation(uiId, async () => ({ default: async () => ({}) }))
|
||||
|
||||
export { default } from './plugin'
|
||||
export * from './colors'
|
||||
|
||||
|
@ -13,11 +13,11 @@
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import { createClient, Client, TxHander } from '@anticrm/core'
|
||||
|
||||
import { connect } from './connection'
|
||||
import clientPlugin from '@anticrm/client'
|
||||
import { getMetadata, getResource } from '@anticrm/platform'
|
||||
import { Client, createClient, TxHander } from '@anticrm/core'
|
||||
import { getMetadata, getPlugins, getResource } from '@anticrm/platform'
|
||||
import { connect } from './connection'
|
||||
|
||||
export { connect }
|
||||
|
||||
/*!
|
||||
@ -38,11 +38,12 @@ export default async () => {
|
||||
client = undefined
|
||||
}
|
||||
if (client === undefined) {
|
||||
const filterModel = getMetadata(clientPlugin.metadata.FilterModel) ?? false
|
||||
client = await createClient((handler: TxHander) => {
|
||||
const url = new URL(`/${token}`, endpoint)
|
||||
console.log('connecting to', url.href)
|
||||
return connect(url.href, handler)
|
||||
})
|
||||
}, filterModel ? getPlugins() : undefined)
|
||||
_token = token
|
||||
|
||||
// Check if we had dev hook for client.
|
||||
|
@ -58,7 +58,8 @@ export default plugin(clientId,
|
||||
{
|
||||
metadata: {
|
||||
ClientHook: '' as Metadata<Resource<ClientHook>>,
|
||||
ClientSocketFactory: '' as Metadata<ClientSocketFactory>
|
||||
ClientSocketFactory: '' as Metadata<ClientSocketFactory>,
|
||||
FilterModel: '' as Metadata<boolean>
|
||||
},
|
||||
function: {
|
||||
GetClient: '' as Resource<ClientFactory>
|
||||
|
@ -76,7 +76,6 @@
|
||||
emphasized
|
||||
content={object.description}
|
||||
on:value={(evt) => {
|
||||
console.log(evt.detail)
|
||||
client.update(object, { description: evt.detail })
|
||||
}}
|
||||
/>
|
||||
|
@ -60,7 +60,7 @@
|
||||
<StyledTextBox
|
||||
bind:content={object.description}
|
||||
placeholder={plugin.string.TaskDescriptionPlaceholder}
|
||||
on:value={() => change('description', object.description)}
|
||||
on:value={(evt) => change('description', evt.detail)}
|
||||
/>
|
||||
</div>
|
||||
</Grid>
|
||||
|
@ -56,7 +56,7 @@
|
||||
on:change={() => change('title', object.title) }
|
||||
/>
|
||||
<StyledTextBox alwaysEdit bind:content={object.description} placeholder={tracker.string.IssueDescriptionPlaceholder}
|
||||
on:change={() => change('description', object.description) }/>
|
||||
on:value={(evt) => change('description', evt.detail) }/>
|
||||
<UserBox
|
||||
_class={contact.class.Employee}
|
||||
title={tracker.string.Assignee}
|
||||
|
@ -15,7 +15,12 @@
|
||||
-->
|
||||
|
||||
<script lang="ts">
|
||||
import type { Type } from '@anticrm/core'
|
||||
|
||||
export let value: string
|
||||
|
||||
// eslint-disable-next-line
|
||||
export let attributeType: Type<any>
|
||||
</script>
|
||||
|
||||
<span class="lines-limit-2">{value}</span>
|
||||
|
@ -18,7 +18,7 @@
|
||||
import core, { Client, getCurrentAccount, Ref, Space } from '@anticrm/core'
|
||||
import notification, { NotificationStatus } from '@anticrm/notification'
|
||||
import { NotificationClientImpl } from '@anticrm/notification-resources'
|
||||
import { IntlString } from '@anticrm/platform'
|
||||
import { getMetadata, IntlString } from '@anticrm/platform'
|
||||
import { Avatar, createQuery, setClient } from '@anticrm/presentation'
|
||||
import {
|
||||
AnyComponent, closePopup,
|
||||
@ -178,8 +178,10 @@
|
||||
|
||||
let apps: Application[] = []
|
||||
|
||||
const excludedApps = getMetadata(workbench.metadata.ExcludedApplications) ?? []
|
||||
|
||||
const query = createQuery()
|
||||
$: query.query(workbench.class.Application, { hidden: false }, (result) => {
|
||||
$: query.query(workbench.class.Application, { hidden: false, _id: { $nin: excludedApps } }, (result) => {
|
||||
apps = result
|
||||
})
|
||||
|
||||
|
@ -14,13 +14,16 @@
|
||||
-->
|
||||
|
||||
<script lang="ts">
|
||||
import { getMetadata } from '@anticrm/platform'
|
||||
|
||||
import { connect, versionError } from '@anticrm/presentation'
|
||||
import { Loading } from '@anticrm/ui'
|
||||
import Workbench from './Workbench.svelte'
|
||||
import workbench from '../plugin'
|
||||
|
||||
</script>
|
||||
|
||||
{#await connect('Platform')}
|
||||
{#await connect(getMetadata(workbench.metadata.PlatformTitle) ?? 'Platform')}
|
||||
<Loading/>
|
||||
{:then client}
|
||||
{#if !client && versionError}
|
||||
|
@ -14,7 +14,7 @@
|
||||
//
|
||||
|
||||
import type { Class, Doc, Mixin, Obj, Ref, Space } from '@anticrm/core'
|
||||
import type { Asset, IntlString, Plugin, Resource } from '@anticrm/platform'
|
||||
import type { Asset, IntlString, Metadata, Plugin, Resource } from '@anticrm/platform'
|
||||
import { plugin } from '@anticrm/platform'
|
||||
import { AnyComponent } from '@anticrm/ui'
|
||||
|
||||
@ -100,5 +100,9 @@ export default plugin(workbenchId, {
|
||||
},
|
||||
component: {
|
||||
WorkbenchApp: '' as AnyComponent
|
||||
},
|
||||
metadata: {
|
||||
PlatformTitle: '' as Metadata<string>,
|
||||
ExcludedApplications: '' as Metadata<Ref<Application>[]>
|
||||
}
|
||||
})
|
||||
|
1
products/tracker/.browserslistrc
Normal file
1
products/tracker/.browserslistrc
Normal file
@ -0,0 +1 @@
|
||||
defaults
|
10
products/tracker/.env
Normal file
10
products/tracker/.env
Normal file
@ -0,0 +1,10 @@
|
||||
|
||||
LOGIN_ENDPOINT=ws://localhost:3333
|
||||
|
||||
LOGIN_TOKEN_DEV=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6InJvc2FtdW5kQGhjLmVuZ2luZWVyaW5nIiwid29ya3NwYWNlIjoidHJ4NDAifQ.dYsCF2VRbuc-zmRt0yLAww1_--xtX4P1EqPFREEzCjQ
|
||||
LOGIN_ENDPOINT_DEV=wss://transactor.hc.engineering/
|
||||
|
||||
TELEGRAM_URL=http://localhost:8086
|
||||
FRONT_URL=http://localhost:8080
|
||||
|
||||
REKONI_URL=http://localhost:4004
|
3
products/tracker/.env-prod
Normal file
3
products/tracker/.env-prod
Normal file
@ -0,0 +1,3 @@
|
||||
|
||||
TELEGRAM_URL = https://telegram.hc.engineering
|
||||
REKONI_URL = https://rekoni.hc.engineering
|
3
products/tracker/.gitignore
vendored
Normal file
3
products/tracker/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
stats.json
|
||||
dist/
|
||||
|
9
products/tracker/Dockerfile
Normal file
9
products/tracker/Dockerfile
Normal file
@ -0,0 +1,9 @@
|
||||
FROM node:16
|
||||
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
COPY bundle.js ./
|
||||
COPY dist/ ./dist/
|
||||
|
||||
EXPOSE 8080
|
||||
CMD [ "node", "bundle.js" ]
|
5
products/tracker/config.json
Normal file
5
products/tracker/config.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"ACCOUNTS_URL":"http://localhost:3000",
|
||||
"UPLOAD_URL":"/files",
|
||||
"REKONI_URL": "http://localhost:4004"
|
||||
}
|
125
products/tracker/package.json
Normal file
125
products/tracker/package.json
Normal file
@ -0,0 +1,125 @@
|
||||
{
|
||||
"name": "@anticrm/prod-tracker",
|
||||
"version": "1.0.0",
|
||||
"license": "EPL-2.0",
|
||||
"scripts": {
|
||||
"build": "rm -rf ./dist && cross-env NODE_ENV=production webpack --stats-error-details && echo 'done'",
|
||||
"bundle": "cp -r ../../server/front/bundle.js .",
|
||||
"docker:build": "docker build -t hardcoreeng/tracker-front .",
|
||||
"docker:staging": "../../common/scripts/docker_tag.sh hardcoreeng/tracker-front staging",
|
||||
"docker:push": "../../common/scripts/docker_tag.sh hardcoreeng/tracker-front",
|
||||
"analyze": "cross-env NODE_ENV=production webpack --json > stats.json",
|
||||
"show": "webpack-bundle-analyzer stats.json dist",
|
||||
"dev": "cross-env CLIENT_TYPE=dev webpack serve",
|
||||
"dev-server": "cross-env CLIENT_TYPE=dev-server webpack serve",
|
||||
"start": "cross-env NODE_ENV=production webpack serve",
|
||||
"preformat-svelte": "prettier -w src/**/*.svelte",
|
||||
"lint": "",
|
||||
"lint:fix": "yarn preformat-svelte && eslint --fix src",
|
||||
"deploy": "cp -p public/* dist && aws s3 sync dist s3://anticrm-platform --delete --acl public-read"
|
||||
},
|
||||
"devDependencies": {
|
||||
"cross-env": "~7.0.3",
|
||||
"webpack-cli": "^4.6.0",
|
||||
"webpack": "^5.32.0",
|
||||
"mini-css-extract-plugin": "^2.2.0",
|
||||
"dotenv-webpack": "^7.0.2",
|
||||
"ts-loader": "^9.2.5",
|
||||
"svelte-loader": "^3.1.2",
|
||||
"css-loader": "^5.2.1",
|
||||
"webpack-dev-server": "^4.7.4",
|
||||
"style-loader": "^3.2.1",
|
||||
"file-loader": "^6.2.0",
|
||||
"sass-loader": "^12.1.0",
|
||||
"@types/node": "~16.11.12",
|
||||
"webpack-bundle-analyzer": "^4.4.1",
|
||||
"svgo-loader": "^3.0.0",
|
||||
"autoprefixer": "^10.2.6",
|
||||
"postcss": "^8.3.4",
|
||||
"postcss-loader": "^6.1.0",
|
||||
"postcss-load-config": "^3.1.0",
|
||||
"compression-webpack-plugin": "~9.0.0",
|
||||
"html-webpack-plugin": "~5.5.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@anticrm/platform": "~0.6.5",
|
||||
"@anticrm/ui": "~0.6.0",
|
||||
"@anticrm/theme": "~0.6.0",
|
||||
"svelte": "^3.37.0",
|
||||
"@anticrm/login": "~0.6.1",
|
||||
"@anticrm/login-assets": "~0.6.0",
|
||||
"@anticrm/login-resources": "~0.6.2",
|
||||
"@anticrm/client": "~0.6.1",
|
||||
"@anticrm/dev-client-resources": "~0.6.1",
|
||||
"@anticrm/workbench": "~0.6.1",
|
||||
"@anticrm/workbench-resources": "~0.6.1",
|
||||
"@anticrm/view": "~0.6.0",
|
||||
"@anticrm/view-assets": "~0.6.0",
|
||||
"@anticrm/view-resources": "~0.6.0",
|
||||
"@anticrm/contact": "~0.6.5",
|
||||
"@anticrm/contact-resources": "~0.6.0",
|
||||
"@anticrm/task": "~0.6.0",
|
||||
"@anticrm/task-assets": "~0.6.0",
|
||||
"@anticrm/task-resources": "~0.6.0",
|
||||
"@anticrm/chunter": "~0.6.1",
|
||||
"@anticrm/chunter-assets": "~0.6.0",
|
||||
"@anticrm/chunter-resources": "~0.6.0",
|
||||
"@anticrm/setting": "~0.6.0",
|
||||
"@anticrm/setting-assets": "~0.6.0",
|
||||
"@anticrm/setting-resources": "~0.6.0",
|
||||
"@anticrm/client-resources": "~0.6.4",
|
||||
"@anticrm/contact-assets": "~0.6.0",
|
||||
"@anticrm/activity": "~0.6.0",
|
||||
"@anticrm/activity-assets": "~0.6.0",
|
||||
"@anticrm/activity-resources": "~0.6.0",
|
||||
"@anticrm/telegram": "~0.6.2",
|
||||
"@anticrm/telegram-assets": "~0.6.0",
|
||||
"@anticrm/telegram-resources": "~0.6.0",
|
||||
"@anticrm/workbench-assets": "~0.6.0",
|
||||
"@anticrm/attachment": "~0.6.1",
|
||||
"@anticrm/attachment-assets": "~0.6.0",
|
||||
"@anticrm/attachment-resources": "~0.6.0",
|
||||
"@anticrm/gmail": "~0.6.0",
|
||||
"@anticrm/gmail-assets": "~0.6.0",
|
||||
"@anticrm/gmail-resources": "~0.6.0",
|
||||
"@anticrm/image-cropper": "~0.6.0",
|
||||
"@anticrm/image-cropper-resources": "~0.6.0",
|
||||
"@anticrm/server-attachment": "~0.6.1",
|
||||
"@anticrm/server-attachment-resources": "~0.6.0",
|
||||
"@anticrm/server-contact": "~0.6.1",
|
||||
"@anticrm/server-contact-resources": "~0.6.0",
|
||||
"@anticrm/server-notification": "~0.6.0",
|
||||
"@anticrm/server-notification-resources": "~0.6.0",
|
||||
"@anticrm/server-setting": "~0.6.0",
|
||||
"@anticrm/server-setting-resources": "~0.6.0",
|
||||
"@anticrm/templates": "~0.6.0",
|
||||
"@anticrm/templates-assets": "~0.6.0",
|
||||
"@anticrm/templates-resources": "~0.6.0",
|
||||
"@anticrm/notification": "~0.6.0",
|
||||
"@anticrm/notification-assets": "~0.6.0",
|
||||
"@anticrm/notification-resources": "~0.6.0",
|
||||
"@anticrm/calendar": "~0.6.0",
|
||||
"@anticrm/calendar-assets": "~0.6.0",
|
||||
"@anticrm/calendar-resources": "~0.6.0",
|
||||
"@anticrm/core": "~0.6.16",
|
||||
"@anticrm/server-chunter": "~0.6.0",
|
||||
"@anticrm/server-chunter-resources": "~0.6.0",
|
||||
"@anticrm/server-task": "~0.6.0",
|
||||
"@anticrm/server-task-resources": "~0.6.0",
|
||||
"@anticrm/server-calendar": "~0.6.0",
|
||||
"@anticrm/server-calendar-resources": "~0.6.0",
|
||||
"@anticrm/server-gmail": "~0.6.0",
|
||||
"@anticrm/server-gmail-resources": "~0.6.0",
|
||||
"@anticrm/server-telegram": "~0.6.0",
|
||||
"@anticrm/server-telegram-resources": "~0.6.0",
|
||||
"@anticrm/presentation": "~0.6.2",
|
||||
"@anticrm/tracker": "~0.6.0",
|
||||
"@anticrm/tracker-assets": "~0.6.0",
|
||||
"@anticrm/tracker-resources": "~0.6.0",
|
||||
"@anticrm/prod": "~1.0.1",
|
||||
"@anticrm/text-editor": "~0.6.0",
|
||||
"@anticrm/devmodel": "~0.6.0",
|
||||
"@anticrm/devmodel-resources": "~0.6.0",
|
||||
"@anticrm/front": "~0.6.0"
|
||||
}
|
||||
}
|
5
products/tracker/postcss.config.js
Normal file
5
products/tracker/postcss.config.js
Normal file
@ -0,0 +1,5 @@
|
||||
module.exports = {
|
||||
plugins: [
|
||||
require('autoprefixer')
|
||||
]
|
||||
}
|
5
products/tracker/public/config.json
Normal file
5
products/tracker/public/config.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"ACCOUNTS_URL":"/account",
|
||||
"UPLOAD_URL":"/files",
|
||||
"MODEL_VERSION": null
|
||||
}
|
BIN
products/tracker/public/favicon.ico
Normal file
BIN
products/tracker/public/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
BIN
products/tracker/public/favicon.png
Normal file
BIN
products/tracker/public/favicon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.0 KiB |
5
products/tracker/public/favicon.svg
Normal file
5
products/tracker/public/favicon.svg
Normal file
@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
|
||||
<circle fill="#FFFFFF" cx="8" cy="8" r="8"/>
|
||||
<path fill="#C8C8C8" d="M8,0C3.6,0,0,3.6,0,8s3.6,8,8,8s8-3.6,8-8S12.4,0,8,0z M8,15.5c-4.1,0-7.5-3.4-7.5-7.5S3.9,0.5,8,0.5 s7.5,3.4,7.5,7.5S12.1,15.5,8,15.5z"/>
|
||||
<path d="M5,13.2V3.5h4.4c0.4,0,0.9,0.1,1.2,0.2c0.4,0.1,0.7,0.4,0.9,0.6s0.4,0.6,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2 c0,0.5-0.1,0.9-0.2,1.2s-0.3,0.7-0.6,1s-0.6,0.5-0.9,0.6S9.8,9.5,9.4,9.5H6.8v3.7H5z M6.8,7.9h2.4c0.4,0,0.6-0.1,0.8-0.3 s0.3-0.5,0.3-0.8V6.2c0-0.4-0.1-0.6-0.3-0.8S9.5,5.1,9.2,5.1H6.8V7.9z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 573 B |
BIN
products/tracker/public/favicon_16.png
Normal file
BIN
products/tracker/public/favicon_16.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 434 B |
BIN
products/tracker/public/favicon_192.png
Normal file
BIN
products/tracker/public/favicon_192.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.4 KiB |
BIN
products/tracker/public/favicon_32.png
Normal file
BIN
products/tracker/public/favicon_32.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 961 B |
20
products/tracker/src/index.ejs
Normal file
20
products/tracker/src/index.ejs
Normal file
@ -0,0 +1,20 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta charset="utf8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
|
||||
<title>Tracker</title>
|
||||
|
||||
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico">
|
||||
<link rel="icon" type="image/svg+xml" sizes="any" href="favicon.svg">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon_16.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon_32.png">
|
||||
<link rel="icon" type="image/png" sizes="192x192" href="favicon_192.png">
|
||||
</head>
|
||||
|
||||
<body style="margin: 0; overflow: hidden;">
|
||||
</body>
|
||||
|
||||
</html>
|
31
products/tracker/src/main-dev.ts
Normal file
31
products/tracker/src/main-dev.ts
Normal file
@ -0,0 +1,31 @@
|
||||
//
|
||||
// Copyright © 2020, 2021 Anticrm Platform Contributors.
|
||||
// Copyright © 2021 Hardcore Engineering, Inc.
|
||||
//
|
||||
// Licensed under the Eclipse Public 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 https://www.eclipse.org/legal/epl-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 { createApp } from '@anticrm/ui'
|
||||
import { configurePlatform } from './platform'
|
||||
import { configurePlatformDev, configurePlatformDevServer } from './platform-dev'
|
||||
|
||||
configurePlatform().then(() => {
|
||||
if (process.env.CLIENT_TYPE === 'dev') {
|
||||
configurePlatformDev()
|
||||
}
|
||||
if (process.env.CLIENT_TYPE === 'dev-server') {
|
||||
configurePlatformDevServer()
|
||||
}
|
||||
|
||||
createApp(document.body)
|
||||
})
|
||||
|
22
products/tracker/src/main.ts
Normal file
22
products/tracker/src/main.ts
Normal file
@ -0,0 +1,22 @@
|
||||
//
|
||||
// Copyright © 2020, 2021 Anticrm Platform Contributors.
|
||||
// Copyright © 2021 Hardcore Engineering, Inc.
|
||||
//
|
||||
// Licensed under the Eclipse Public 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 https://www.eclipse.org/legal/epl-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 { createApp } from '@anticrm/ui'
|
||||
import { configurePlatform } from './platform'
|
||||
|
||||
configurePlatform().then(() => {
|
||||
createApp(document.body)
|
||||
})
|
68
products/tracker/src/platform-dev.ts
Normal file
68
products/tracker/src/platform-dev.ts
Normal file
@ -0,0 +1,68 @@
|
||||
//
|
||||
// Copyright © 2020 Anticrm Platform Contributors.
|
||||
//
|
||||
// Licensed under the Eclipse Public 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 https://www.eclipse.org/legal/epl-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 { addLocation } from '@anticrm/platform'
|
||||
|
||||
import login from '@anticrm/login'
|
||||
import { clientId } from '@anticrm/client'
|
||||
import { serverAttachmentId } from '@anticrm/server-attachment'
|
||||
import { serverContactId } from '@anticrm/server-contact'
|
||||
import { serverNotificationId } from '@anticrm/server-notification'
|
||||
import { serverSettingId } from '@anticrm/server-setting'
|
||||
import { serverChunterId } from '@anticrm/server-chunter'
|
||||
import { serverTaskId } from '@anticrm/server-task'
|
||||
import { serverCalendarId } from '@anticrm/server-calendar'
|
||||
import { serverGmailId } from '@anticrm/server-gmail'
|
||||
import { serverTelegramId } from '@anticrm/server-telegram'
|
||||
|
||||
|
||||
import { setMetadata } from '@anticrm/platform'
|
||||
|
||||
import devmodel, { devModelId } from '@anticrm/devmodel'
|
||||
import client from '@anticrm/client'
|
||||
|
||||
export function configurePlatformDev() {
|
||||
setMetadata(login.metadata.OverrideLoginToken, process.env.LOGIN_TOKEN_DEV)
|
||||
setMetadata(login.metadata.OverrideEndpoint, process.env.LOGIN_ENDPOINT_DEV)
|
||||
console.log('Use DEV server')
|
||||
addLocation(clientId, () => import(/* webpackChunkName: "client-dev" */ '@anticrm/dev-client-resources'))
|
||||
|
||||
addLocation(serverAttachmentId, () => import(/* webpackChunkName: "server-attachment" */ '@anticrm/server-attachment-resources'))
|
||||
addLocation(serverContactId, () => import(/* webpackChunkName: "server-contact" */ '@anticrm/server-contact-resources'))
|
||||
addLocation(serverNotificationId, () => import(/* webpackChunkName: "server-notification" */ '@anticrm/server-notification-resources'))
|
||||
addLocation(serverSettingId, () => import(/* webpackChunkName: "server-setting" */ '@anticrm/server-setting-resources'))
|
||||
addLocation(serverChunterId, () => import(/* webpackChunkName: "server-chunter" */ '@anticrm/server-chunter-resources'))
|
||||
addLocation(serverTaskId, () => import/* webpackChunkName: "server-task" */ ('@anticrm/server-task-resources'))
|
||||
addLocation(serverCalendarId, () => import/* webpackChunkName: "server-calendar" */ ('@anticrm/server-calendar-resources'))
|
||||
addLocation(serverGmailId, () => import/* webpackChunkName: "server-gmail" */ ('@anticrm/server-gmail-resources'))
|
||||
addLocation(serverTelegramId, () => import/* webpackChunkName: "server-telegram" */ ('@anticrm/server-telegram-resources'))
|
||||
|
||||
// Set devmodel to hook client to be able to present all activity
|
||||
enableDevModel()
|
||||
}
|
||||
|
||||
|
||||
export function configurePlatformDevServer() {
|
||||
console.log('Use Endpoint override:', process.env.LOGIN_ENDPOINT)
|
||||
setMetadata(login.metadata.OverrideEndpoint, process.env.LOGIN_ENDPOINT)
|
||||
|
||||
// Set devmodel to hook client to be able to present all activity
|
||||
enableDevModel()
|
||||
}
|
||||
|
||||
function enableDevModel() {
|
||||
setMetadata(client.metadata.ClientHook, devmodel.hook.Hook)
|
||||
addLocation(devModelId, () => import(/* webpackChunkName: "devmodel" */ '@anticrm/devmodel-resources'))
|
||||
}
|
101
products/tracker/src/platform.ts
Normal file
101
products/tracker/src/platform.ts
Normal file
@ -0,0 +1,101 @@
|
||||
//
|
||||
// Copyright © 2020 Anticrm Platform Contributors.
|
||||
//
|
||||
// Licensed under the Eclipse Public 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 https://www.eclipse.org/legal/epl-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 { addLocation } from '@anticrm/platform'
|
||||
|
||||
import login, { loginId } from '@anticrm/login'
|
||||
import workbench, { workbenchId } from '@anticrm/workbench'
|
||||
import uiPlugin from '@anticrm/ui'
|
||||
import { viewId } from '@anticrm/view'
|
||||
import { taskId } from '@anticrm/task'
|
||||
import contact, { contactId } from '@anticrm/contact'
|
||||
import { chunterId } from '@anticrm/chunter'
|
||||
import { activityId } from '@anticrm/activity'
|
||||
import { settingId } from '@anticrm/setting'
|
||||
import { telegramId } from '@anticrm/telegram'
|
||||
import { attachmentId } from '@anticrm/attachment'
|
||||
import client, { clientId } from '@anticrm/client'
|
||||
import { gmailId } from '@anticrm/gmail'
|
||||
import { imageCropperId } from '@anticrm/image-cropper'
|
||||
import { templatesId } from '@anticrm/templates'
|
||||
import { notificationId } from '@anticrm/notification'
|
||||
import { calendarId } from '@anticrm/calendar'
|
||||
import { trackerId } from '@anticrm/tracker'
|
||||
|
||||
import '@anticrm/login-assets'
|
||||
import '@anticrm/task-assets'
|
||||
import '@anticrm/view-assets'
|
||||
import '@anticrm/chunter-assets'
|
||||
import '@anticrm/attachment-assets'
|
||||
import '@anticrm/contact-assets'
|
||||
import '@anticrm/activity-assets'
|
||||
import '@anticrm/setting-assets'
|
||||
import '@anticrm/telegram-assets'
|
||||
import '@anticrm/gmail-assets'
|
||||
import '@anticrm/workbench-assets'
|
||||
import '@anticrm/templates-assets'
|
||||
import '@anticrm/notification-assets'
|
||||
import '@anticrm/tracker-assets'
|
||||
import presentation, { presentationId } from '@anticrm/presentation'
|
||||
import { coreId } from '@anticrm/core'
|
||||
import { textEditorId } from '@anticrm/text-editor'
|
||||
|
||||
import { setMetadata } from '@anticrm/platform'
|
||||
|
||||
export async function configurePlatform() {
|
||||
const config = await (await fetch('/config.json')).json()
|
||||
console.log('loading configuration', config)
|
||||
setMetadata(login.metadata.AccountsUrl, config.ACCOUNTS_URL)
|
||||
setMetadata(login.metadata.UploadUrl, config.UPLOAD_URL)
|
||||
|
||||
|
||||
if( config.MODEL_VERSION != null) {
|
||||
console.log('Minimal Model version requirement', config.MODEL_VERSION)
|
||||
setMetadata(presentation.metadata.RequiredVersion, config.MODEL_VERSION)
|
||||
}
|
||||
setMetadata(login.metadata.TelegramUrl, process.env.TELEGRAM_URL ?? 'http://localhost:8086')
|
||||
setMetadata(login.metadata.GmailUrl, process.env.GMAIL_URL ?? 'http://localhost:8087')
|
||||
setMetadata(login.metadata.OverrideEndpoint, process.env.LOGIN_ENDPOINT)
|
||||
setMetadata(login.metadata.FrontUrl, process.env.FRONT_URL)
|
||||
|
||||
setMetadata(uiPlugin.metadata.DefaultApplication, workbench.component.WorkbenchApp )
|
||||
setMetadata(workbench.metadata.ExcludedApplications, [contact.app.Contacts] )
|
||||
|
||||
addLocation(coreId, async () => ({ default: async () => ({}) }))
|
||||
addLocation(presentationId, async () => ({ default: async () => ({}) }))
|
||||
addLocation(textEditorId, async () => ({ default: async () => ({}) }))
|
||||
|
||||
addLocation(clientId, () => import(/* webpackChunkName: "client" */ '@anticrm/client-resources'))
|
||||
addLocation(loginId, () => import(/* webpackChunkName: "login" */ '@anticrm/login-resources'))
|
||||
addLocation(workbenchId, () => import(/* webpackChunkName: "workbench" */ '@anticrm/workbench-resources'))
|
||||
addLocation(viewId, () => import(/* webpackChunkName: "view" */ '@anticrm/view-resources'))
|
||||
addLocation(taskId, () => import(/* webpackChunkName: "task" */ '@anticrm/task-resources'))
|
||||
addLocation(contactId, () => import(/* webpackChunkName: "contact" */ '@anticrm/contact-resources'))
|
||||
addLocation(chunterId, () => import(/* webpackChunkName: "chunter" */ '@anticrm/chunter-resources'))
|
||||
addLocation(activityId, () => import(/*webpackChunkName: "activity" */ '@anticrm/activity-resources'))
|
||||
addLocation(settingId, () => import(/* webpackChunkName: "setting" */ '@anticrm/setting-resources'))
|
||||
addLocation(telegramId, () => import(/* webpackChunkName: "telegram" */ '@anticrm/telegram-resources'))
|
||||
addLocation(attachmentId, () => import(/* webpackChunkName: "attachment" */ '@anticrm/attachment-resources'))
|
||||
addLocation(gmailId, () => import(/* webpackChunkName: "gmail" */ '@anticrm/gmail-resources'))
|
||||
addLocation(imageCropperId, () => import(/* webpackChunkName: "image-cropper" */ '@anticrm/image-cropper-resources'))
|
||||
addLocation(templatesId, () => import(/* webpackChunkName: "templates" */ '@anticrm/templates-resources'))
|
||||
addLocation(notificationId, () => import(/* webpackChunkName: "notification" */ '@anticrm/notification-resources'))
|
||||
addLocation(calendarId, () => import(/* webpackChunkName: "calendar" */ '@anticrm/calendar-resources'))
|
||||
|
||||
addLocation(trackerId, () => import(/* webpackChunkName: "tracker" */ '@anticrm/tracker-resources'))
|
||||
setMetadata(workbench.metadata.PlatformTitle, 'Tracker')
|
||||
|
||||
setMetadata(client.metadata.FilterModel, true)
|
||||
}
|
16
products/tracker/tsconfig.json
Normal file
16
products/tracker/tsconfig.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"outDir": "./dist/",
|
||||
"noImplicitAny": true,
|
||||
"module": "esnext",
|
||||
"target": "es2016",
|
||||
"allowJs": true,
|
||||
"sourceMap": true,
|
||||
"moduleResolution": "node",
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"lib": [
|
||||
"es2016",
|
||||
"dom"
|
||||
]
|
||||
}
|
||||
}
|
36
products/tracker/webpack.config.js
Normal file
36
products/tracker/webpack.config.js
Normal file
@ -0,0 +1,36 @@
|
||||
//
|
||||
// Copyright © 2020 Anticrm Platform Contributors.
|
||||
//
|
||||
// Licensed under the Eclipse Public 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 https://www.eclipse.org/legal/epl-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 CONDITIONSe OF ANY KIND, either express or implied.
|
||||
//
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
const path = require('path')
|
||||
const prodModule = require('@anticrm/prod/webpack.config')
|
||||
|
||||
module.exports = {
|
||||
...prodModule,
|
||||
output: {
|
||||
path: __dirname + '/dist',
|
||||
filename: '[name].[contenthash].js',
|
||||
chunkFilename: '[name].[contenthash].js',
|
||||
publicPath: '/'
|
||||
},
|
||||
devServer: {
|
||||
...prodModule.devServer,
|
||||
static: {
|
||||
directory: path.resolve(__dirname, "public"),
|
||||
publicPath: "/",
|
||||
serveIndex: true,
|
||||
watch: true,
|
||||
}
|
||||
}
|
||||
}
|
@ -487,9 +487,14 @@
|
||||
"shouldPublish": true
|
||||
},
|
||||
{
|
||||
"packageName": "prod",
|
||||
"packageName": "@anticrm/prod",
|
||||
"projectFolder": "dev/prod",
|
||||
"shouldPublish": true
|
||||
"shouldPublish": false
|
||||
},
|
||||
{
|
||||
"packageName": "@anticrm/prod-tracker",
|
||||
"projectFolder": "products/tracker",
|
||||
"shouldPublish": false
|
||||
},
|
||||
{
|
||||
"packageName": "@anticrm/server-core",
|
||||
|
7
tests/install-elastic-plugin.sh
Executable file
7
tests/install-elastic-plugin.sh
Executable file
@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Direct donwload, or use VPN.
|
||||
#wget https://artifacts.elastic.co/downloads/elasticsearch-plugins/ingest-attachment/ingest-attachment-7.14.2.zip
|
||||
docker cp ./ingest-attachment-7.14.2.zip sanity-elastic-1:/ingest-attachment-7.14.2.zip
|
||||
docker exec -ti sanity-elastic-1 ./bin/elasticsearch-plugin install file:///ingest-attachment-7.14.2.zip
|
||||
docker restart sanity-elastic-1
|
Loading…
Reference in New Issue
Block a user