Send email notification when mentioned (#1031)

Signed-off-by: Denis Bykhov <80476319+BykhovDenis@users.noreply.github.com>
This commit is contained in:
Denis Bykhov 2022-02-22 15:09:13 +06:00 committed by GitHub
parent 42a4ecc676
commit d8de94da59
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
192 changed files with 2895 additions and 210 deletions

View File

@ -67,6 +67,7 @@ jobs:
plugins
pods
server
server-plugins
templates
tests
rush.json
@ -96,6 +97,7 @@ jobs:
plugins
pods
server
server-plugins
templates
tests
rush.json
@ -128,6 +130,7 @@ jobs:
plugins
pods
server
server-plugins
templates
tests
rush.json
@ -160,6 +163,7 @@ jobs:
plugins
pods
server
server-plugins
templates
tests
rush.json
@ -204,6 +208,7 @@ jobs:
plugins
pods
server
server-plugins
templates
tests
rush.json

View File

@ -62,9 +62,14 @@ specifiers:
'@rush-temp/model-recruit': file:./projects/model-recruit.tgz
'@rush-temp/model-rig': file:./projects/model-rig.tgz
'@rush-temp/model-server-attachment': file:./projects/model-server-attachment.tgz
'@rush-temp/model-server-chunter': file:./projects/model-server-chunter.tgz
'@rush-temp/model-server-contact': file:./projects/model-server-contact.tgz
'@rush-temp/model-server-core': file:./projects/model-server-core.tgz
'@rush-temp/model-server-inventory': file:./projects/model-server-inventory.tgz
'@rush-temp/model-server-lead': file:./projects/model-server-lead.tgz
'@rush-temp/model-server-notification': file:./projects/model-server-notification.tgz
'@rush-temp/model-server-recruit': file:./projects/model-server-recruit.tgz
'@rush-temp/model-server-task': file:./projects/model-server-task.tgz
'@rush-temp/model-setting': file:./projects/model-setting.tgz
'@rush-temp/model-tags': file:./projects/model-tags.tgz
'@rush-temp/model-task': file:./projects/model-task.tgz
@ -91,11 +96,21 @@ specifiers:
'@rush-temp/server': file:./projects/server.tgz
'@rush-temp/server-attachment': file:./projects/server-attachment.tgz
'@rush-temp/server-attachment-resources': file:./projects/server-attachment-resources.tgz
'@rush-temp/server-chunter': file:./projects/server-chunter.tgz
'@rush-temp/server-chunter-resources': file:./projects/server-chunter-resources.tgz
'@rush-temp/server-contact': file:./projects/server-contact.tgz
'@rush-temp/server-contact-resources': file:./projects/server-contact-resources.tgz
'@rush-temp/server-core': file:./projects/server-core.tgz
'@rush-temp/server-inventory': file:./projects/server-inventory.tgz
'@rush-temp/server-inventory-resources': file:./projects/server-inventory-resources.tgz
'@rush-temp/server-lead': file:./projects/server-lead.tgz
'@rush-temp/server-lead-resources': file:./projects/server-lead-resources.tgz
'@rush-temp/server-notification': file:./projects/server-notification.tgz
'@rush-temp/server-notification-resources': file:./projects/server-notification-resources.tgz
'@rush-temp/server-recruit': file:./projects/server-recruit.tgz
'@rush-temp/server-recruit-resources': file:./projects/server-recruit-resources.tgz
'@rush-temp/server-task': file:./projects/server-task.tgz
'@rush-temp/server-task-resources': file:./projects/server-task-resources.tgz
'@rush-temp/server-token': file:./projects/server-token.tgz
'@rush-temp/server-tool': file:./projects/server-tool.tgz
'@rush-temp/server-ws': file:./projects/server-ws.tgz
@ -272,9 +287,14 @@ dependencies:
'@rush-temp/model-recruit': file:projects/model-recruit.tgz_typescript@4.5.4
'@rush-temp/model-rig': file:projects/model-rig.tgz_37f79b97d0d86442e45d380c86f520c5
'@rush-temp/model-server-attachment': file:projects/model-server-attachment.tgz_typescript@4.5.4
'@rush-temp/model-server-chunter': file:projects/model-server-chunter.tgz_typescript@4.5.4
'@rush-temp/model-server-contact': file:projects/model-server-contact.tgz_typescript@4.5.4
'@rush-temp/model-server-core': file:projects/model-server-core.tgz_typescript@4.5.4
'@rush-temp/model-server-inventory': file:projects/model-server-inventory.tgz_typescript@4.5.4
'@rush-temp/model-server-lead': file:projects/model-server-lead.tgz_typescript@4.5.4
'@rush-temp/model-server-notification': file:projects/model-server-notification.tgz_typescript@4.5.4
'@rush-temp/model-server-recruit': file:projects/model-server-recruit.tgz_typescript@4.5.4
'@rush-temp/model-server-task': file:projects/model-server-task.tgz_typescript@4.5.4
'@rush-temp/model-setting': file:projects/model-setting.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
@ -301,11 +321,21 @@ dependencies:
'@rush-temp/server': file:projects/server.tgz
'@rush-temp/server-attachment': file:projects/server-attachment.tgz
'@rush-temp/server-attachment-resources': file:projects/server-attachment-resources.tgz
'@rush-temp/server-chunter': file:projects/server-chunter.tgz
'@rush-temp/server-chunter-resources': file:projects/server-chunter-resources.tgz
'@rush-temp/server-contact': file:projects/server-contact.tgz
'@rush-temp/server-contact-resources': file:projects/server-contact-resources.tgz
'@rush-temp/server-core': file:projects/server-core.tgz
'@rush-temp/server-inventory': file:projects/server-inventory.tgz
'@rush-temp/server-inventory-resources': file:projects/server-inventory-resources.tgz
'@rush-temp/server-lead': file:projects/server-lead.tgz
'@rush-temp/server-lead-resources': file:projects/server-lead-resources.tgz
'@rush-temp/server-notification': file:projects/server-notification.tgz
'@rush-temp/server-notification-resources': file:projects/server-notification-resources.tgz
'@rush-temp/server-recruit': file:projects/server-recruit.tgz
'@rush-temp/server-recruit-resources': file:projects/server-recruit-resources.tgz
'@rush-temp/server-task': file:projects/server-task.tgz
'@rush-temp/server-task-resources': file:projects/server-task-resources.tgz
'@rush-temp/server-token': file:projects/server-token.tgz
'@rush-temp/server-tool': file:projects/server-tool.tgz
'@rush-temp/server-ws': file:projects/server-ws.tgz
@ -11364,7 +11394,7 @@ packages:
dev: false
file:projects/chunter-resources.tgz_096c09b0b673a57c275d9767a12070b1:
resolution: {integrity: sha512-Ah0rr5uVXgAWSijLuVIxdtLjpc//rR4gw6AwtdF0adV89ZA70k/B7mKpjHAw2kIRkMjfgS5P30bRhx83Fh2CdQ==, tarball: file:projects/chunter-resources.tgz}
resolution: {integrity: sha512-Md1h3nCkA2oUfOAP3oAABH2W8boFJODkrjbPyxccaay48TEkZN7BJLE3UoexttqCxQa4+4PL3zWWjMLlMrJ/Kw==, tarball: file:projects/chunter-resources.tgz}
id: file:projects/chunter-resources.tgz
name: '@rush-temp/chunter-resources'
version: 0.0.0
@ -11993,7 +12023,7 @@ packages:
dev: false
file:projects/inventory-resources.tgz_096c09b0b673a57c275d9767a12070b1:
resolution: {integrity: sha512-QPMUPTMuvahinsVH8OO3BUj9lpAq2cITHPgk/EL8XlZ0xEq497JjXy3N8KW4gHSwrM8kGBPfpwD2bRbXI4V7Vg==, tarball: file:projects/inventory-resources.tgz}
resolution: {integrity: sha512-XFicFpfQR9nWoYlVHWCt+gHjwN3MybHXwNrxQ3g03Pir85+ROEF0ArGmxZa5BsIWjHWDfv1xMcLA/ryt3QKcKQ==, tarball: file:projects/inventory-resources.tgz}
id: file:projects/inventory-resources.tgz
name: '@rush-temp/inventory-resources'
version: 0.0.0
@ -12070,7 +12100,7 @@ packages:
dev: false
file:projects/lead-resources.tgz_096c09b0b673a57c275d9767a12070b1:
resolution: {integrity: sha512-gd3fCKU/E1ZrIFQBm966XaGVIH/RB0C4XyfWQFueKhy95cUbjiEe88Jf6Xh+4a7hkF96VMKc3z51SH1pLGtnFA==, tarball: file:projects/lead-resources.tgz}
resolution: {integrity: sha512-9FpuEornHpauniIpp79200ur4mvE5PmPSLSx5fUDvkVl+jl/HM+GYLodRKtE++YsgYHuS0dncqF8Qe92ltCpUQ==, tarball: file:projects/lead-resources.tgz}
id: file:projects/lead-resources.tgz
name: '@rush-temp/lead-resources'
version: 0.0.0
@ -12223,7 +12253,7 @@ packages:
dev: false
file:projects/model-all.tgz_typescript@4.5.4:
resolution: {integrity: sha512-MnTIVPbt9yvy+dNZaMUPScfjYp12cF1P8GXay1jUizfZyTaeMsb+uN3Z2jnzQPhrAJxW4DDjAoCLO+yK7xGbRA==, tarball: file:projects/model-all.tgz}
resolution: {integrity: sha512-eR9zQnuCAirRYMRife5HzyLfg8oDLAz1YZffs2tyK4fb6++U7q9RfNYfaPHEGkcVVscJ8MvWYI6CcHk5khOc4g==, tarball: file:projects/model-all.tgz}
id: file:projects/model-all.tgz
name: '@rush-temp/model-all'
version: 0.0.0
@ -12290,7 +12320,7 @@ packages:
dev: false
file:projects/model-contact.tgz_typescript@4.5.4:
resolution: {integrity: sha512-a2k6USkc9xrm3ba78A0pOps3X4Ox8A+uHm3cdNpfrSA8ihdfU9p6imeFr+ZotWF8YCcnwagz9sVHpT5dtmH4Mg==, tarball: file:projects/model-contact.tgz}
resolution: {integrity: sha512-SCSm1wH4jXL45vpA1013yTbU7mE8VsXilHHxF5dMWJT/lyHFiRkn0D0NEqA15tm37KF0bGXuvn9/jTSSG+hFqA==, tarball: file:projects/model-contact.tgz}
id: file:projects/model-contact.tgz
name: '@rush-temp/model-contact'
version: 0.0.0
@ -12416,7 +12446,7 @@ packages:
dev: false
file:projects/model-notification.tgz_typescript@4.5.4:
resolution: {integrity: sha512-oXjmLAI4ablTqm5zdk23LYWTRRdqLGxshn164t87FLm4T/6sFK7xlikIuxGNn+XED0/m1T9ShPXEwXcYFJ/YQw==, tarball: file:projects/model-notification.tgz}
resolution: {integrity: sha512-WhD1VyRSZ7EB9HYyGawyxHxuKkfogkfdibpRcSXkJ9SPy+MNmnABMhG5Jj2d9Man/3FRqiAwJhSxsHYoKpwkNQ==, tarball: file:projects/model-notification.tgz}
id: file:projects/model-notification.tgz
name: '@rush-temp/model-notification'
version: 0.0.0
@ -12518,8 +12548,29 @@ packages:
- typescript
dev: false
file:projects/model-server-chunter.tgz_typescript@4.5.4:
resolution: {integrity: sha512-pZ0hgyMtDyGJopCGoeZXNCazD74U19JDyouKTIb8ATvmQt93TTjtH74urp6EomfuWzoxBRPprSAs8csuE7tBSw==, tarball: file:projects/model-server-chunter.tgz}
id: file:projects/model-server-chunter.tgz
name: '@rush-temp/model-server-chunter'
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-server-contact.tgz_typescript@4.5.4:
resolution: {integrity: sha512-cS09KWx82ek8kc0tutF538kEZMRkOMLnY0sQSUScOPEYHb4cLR4M94PrIhsY8DiP6TJctkT0ddnvwXMApAwyGA==, tarball: file:projects/model-server-contact.tgz}
resolution: {integrity: sha512-EUI1TgMMuwfrCoZPz63atVRrb+7uNnoqxuWrxHiRNeGvHb7F5/cPOg0MyT/i2juOBTyfkzJbraDZMrRd04Ymwg==, tarball: file:projects/model-server-contact.tgz}
id: file:projects/model-server-contact.tgz
name: '@rush-temp/model-server-contact'
version: 0.0.0
@ -12560,6 +12611,48 @@ packages:
- typescript
dev: false
file:projects/model-server-inventory.tgz_typescript@4.5.4:
resolution: {integrity: sha512-5oAiV68Hl0v9mlQ7wa6/RAG0KazJRdu1BD71w60NBhh97qGhrSi/GDDNs8bdYaqB6uxUE9xNWVC1NulRuL1crA==, tarball: file:projects/model-server-inventory.tgz}
id: file:projects/model-server-inventory.tgz
name: '@rush-temp/model-server-inventory'
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-server-lead.tgz_typescript@4.5.4:
resolution: {integrity: sha512-9bqF5Che49x6QLONfohycz76v2viNTq93TtAczUXMsimgxK7yEWMdKQda7qY2bH8rtkwV58XSgbMWfX14L1l4g==, tarball: file:projects/model-server-lead.tgz}
id: file:projects/model-server-lead.tgz
name: '@rush-temp/model-server-lead'
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-server-notification.tgz_typescript@4.5.4:
resolution: {integrity: sha512-bO0DgNGdJGxJjDU05x1HPNHfprIFhRYhauMT9eH4zKMlsQZNO5Rx5h77SxepW2HiAxVYMqjOR2GwsTN3h7C8wQ==, tarball: file:projects/model-server-notification.tgz}
id: file:projects/model-server-notification.tgz
@ -12581,6 +12674,48 @@ packages:
- typescript
dev: false
file:projects/model-server-recruit.tgz_typescript@4.5.4:
resolution: {integrity: sha512-yidHAiSSXgFfl990q/d3A9KkucgEmMQ3pkp0HISrOIEJHUoazU5A4VgqDR2B/STjLpgH8ZhgOD3VMSNv5D6NKg==, tarball: file:projects/model-server-recruit.tgz}
id: file:projects/model-server-recruit.tgz
name: '@rush-temp/model-server-recruit'
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-server-task.tgz_typescript@4.5.4:
resolution: {integrity: sha512-UGeEby4x4ZUjOO3ECPvg3wVKQUAXjNMw8zQFiQmCemiMQk+6NNvGhwkHgV674dt5rGDCNBjKJfFaShTj7jcDlw==, tarball: file:projects/model-server-task.tgz}
id: file:projects/model-server-task.tgz
name: '@rush-temp/model-server-task'
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-setting.tgz_typescript@4.5.4:
resolution: {integrity: sha512-zwbVN3PDOfDeqGcL36IHQIufdePTd68yLUm83rfIg4v8+uilseid981y/BrAysmxTXAfhVYWlDmtYXvNPS4DMQ==, tarball: file:projects/model-setting.tgz}
id: file:projects/model-setting.tgz
@ -12817,7 +12952,7 @@ packages:
dev: false
file:projects/notification-resources.tgz_096c09b0b673a57c275d9767a12070b1:
resolution: {integrity: sha512-saNzTGP0Bz7u0f2qimEbhL3w9xhZb8pgenUpAuDpeT6fMPmG7CNYpkwefhayEeIUmU4frbIC5kjAOMSPUxsg6A==, tarball: file:projects/notification-resources.tgz}
resolution: {integrity: sha512-XFpqe60nZYFgS9+a5fMJSJeBIyb8tsmHawXI1Ee0B5eb38R7oUmnE6ezb2hYXl/EKPabYL/Pt1cxMjkRMz4Njw==, tarball: file:projects/notification-resources.tgz}
id: file:projects/notification-resources.tgz
name: '@rush-temp/notification-resources'
version: 0.0.0
@ -12832,6 +12967,7 @@ packages:
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
just-clone: 3.2.1
prettier: 2.5.1
prettier-plugin-svelte: 2.5.1_prettier@2.5.1+svelte@3.44.3
sass: 1.45.0
@ -13025,7 +13161,7 @@ packages:
dev: false
file:projects/prod.tgz_sass@1.45.0+typescript@4.5.4:
resolution: {integrity: sha512-a6wHdZhYC1h8QOrfCkS6HQz4L0llPz8YJqJaJPH/tkMHanaUSixCiCcjr+T+ANBfacXQf8GjTqvPBir/Hd3FzQ==, tarball: file:projects/prod.tgz}
resolution: {integrity: sha512-oVRjx2sc3JPmU3Q2PFONILjWWm9cxER23AgY+wHq4BX+H1zcsriCbRruGDNEwchO3PddlB1QhvlUZtC+grCNZQ==, tarball: file:projects/prod.tgz}
id: file:projects/prod.tgz
name: '@rush-temp/prod'
version: 0.0.0
@ -13117,7 +13253,7 @@ packages:
dev: false
file:projects/recruit-resources.tgz_096c09b0b673a57c275d9767a12070b1:
resolution: {integrity: sha512-nZLvaOr850iq0AQidGvnFlzPWLdwosv9ORArSA5ihRGea8X+RpzD/pjDswtJp6nF7G2ctmL8tFLN9cvFA45lDw==, tarball: file:projects/recruit-resources.tgz}
resolution: {integrity: sha512-T1NOP+NczA00alZvYaKQBqG34P72zCy5RwowxbViP31o8ahRH8CS0msHAGeJXZPrF/E2XeMXY2xgAFKn9ywRCg==, tarball: file:projects/recruit-resources.tgz}
id: file:projects/recruit-resources.tgz
name: '@rush-temp/recruit-resources'
version: 0.0.0
@ -13154,7 +13290,7 @@ packages:
dev: false
file:projects/recruit.tgz:
resolution: {integrity: sha512-vvQ892DoJCDRaRuVWx+DBpuKPtCic0O0PdgPDtbKxl+pWk31MVdEhO6m+ySpqkPsu297ot/D7lpYXcK/775fow==, tarball: file:projects/recruit.tgz}
resolution: {integrity: sha512-d/Wv2gldoJfJnyC5d318UhRa+iqzh7r2+CsBHHEPDAabL73kdQsbkyPNEqoTOapyMdGwIPbnF3R3tSNP7TFH4g==, tarball: file:projects/recruit.tgz}
name: '@rush-temp/recruit'
version: 0.0.0
dependencies:
@ -13241,8 +13377,49 @@ packages:
- supports-color
dev: false
file:projects/server-chunter-resources.tgz:
resolution: {integrity: sha512-9xWukPv4zWMIAampn8JogHVzz/r0YZXMx/6Dobyp1YdZLAFfMRdey5dPJ2FOSTvIztwZhmzddYrlmVlOw/gK/g==, tarball: file:projects/server-chunter-resources.tgz}
name: '@rush-temp/server-chunter-resources'
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/server-chunter.tgz:
resolution: {integrity: sha512-kpo3OPoldUkUrnRvxa/xZYRIyKd12a5q1XcdXlPkPN1ZDiJVp6PFF8fuwc5hjjf8T6/jKOYmLw+JCafTb7rSOA==, tarball: file:projects/server-chunter.tgz}
name: '@rush-temp/server-chunter'
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
typescript: 4.5.4
transitivePeerDependencies:
- supports-color
dev: false
file:projects/server-contact-resources.tgz:
resolution: {integrity: sha512-4yOcy58wmHdLoBsIlawD4KAe5I+q9NtlKXnZRvuyF0Gdb8UZcEvL2NjxHZNJkDmTGvvmmr2ihwYKJE+g4N//jg==, tarball: file:projects/server-contact-resources.tgz}
resolution: {integrity: sha512-0wv176Ajvj6Hh72NgA3j3LY4To7FkWv9f/U8P5oCJadU9kEPz0H8GsUaaAhSEtmYaXdsisiuKzTIVVFORrmVCQ==, tarball: file:projects/server-contact-resources.tgz}
name: '@rush-temp/server-contact-resources'
version: 0.0.0
dependencies:
@ -13306,8 +13483,90 @@ packages:
- supports-color
dev: false
file:projects/server-inventory-resources.tgz:
resolution: {integrity: sha512-ihg8bdAMvtJ3pZvpK4Gv/PjvQJqvoIKaGfzWOvTFQhcf2PsIWXSu7B2/gB8ekBTC20jkrjEJxHyobhZtGmH53g==, tarball: file:projects/server-inventory-resources.tgz}
name: '@rush-temp/server-inventory-resources'
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/server-inventory.tgz:
resolution: {integrity: sha512-gO3q96c7gOS29+NmDAOORJ9eMzBHCnIqo9udZUt8TsTHm4r2v1faCYJw57toSnU1PJ60RtXxmqBQTXXFQtdBKA==, tarball: file:projects/server-inventory.tgz}
name: '@rush-temp/server-inventory'
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
typescript: 4.5.4
transitivePeerDependencies:
- supports-color
dev: false
file:projects/server-lead-resources.tgz:
resolution: {integrity: sha512-YhcEDAOqvt8LiaS+cXUj4NnuN4bqRdtIj10c0qBFPiLU2Csr753Ef5g5gtNeztZRNtnRJK2T4K/c+Fk7oKGEkA==, tarball: file:projects/server-lead-resources.tgz}
name: '@rush-temp/server-lead-resources'
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/server-lead.tgz:
resolution: {integrity: sha512-gjRjRrQT8bxy4CEd1vs3hiIccdR1j2x8xvveoue+MxNu1IRaxws0KE7ggk9AOn7KmZl2Cl2UtktlXEJkZ7tvOQ==, tarball: file:projects/server-lead.tgz}
name: '@rush-temp/server-lead'
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
typescript: 4.5.4
transitivePeerDependencies:
- supports-color
dev: false
file:projects/server-notification-resources.tgz:
resolution: {integrity: sha512-9EXWxHdVb5DvmZORxWPquKpxThiRV6zaEtpFbat4drf5i/br5cERKka5+oBJK27WyYYeB8rUGjjQ7AFx/dJzbQ==, tarball: file:projects/server-notification-resources.tgz}
resolution: {integrity: sha512-t5tHG0WoQJPHnXjZMkXJXXGMo6Xzz02ah4GJC/fnox0WpgyFh5iw3F33jDdIf8tRFRSifNg/bp4ZbZ9lDh+ARQ==, tarball: file:projects/server-notification-resources.tgz}
name: '@rush-temp/server-notification-resources'
version: 0.0.0
dependencies:
@ -13347,6 +13606,88 @@ packages:
- supports-color
dev: false
file:projects/server-recruit-resources.tgz:
resolution: {integrity: sha512-8UTVnSBjVhuf5Qvp80Z7iZ+IO1jSRVG2czLgNL/GMbtjFZw8b5dE3USi9vv9Q2AtAGpbWUgSUqODW24qkYjiUQ==, tarball: file:projects/server-recruit-resources.tgz}
name: '@rush-temp/server-recruit-resources'
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/server-recruit.tgz:
resolution: {integrity: sha512-UrQBEwX6cZgSk+HMfhJort5tzGaCe1cv0Thg3sITzNaB4yb3FExUTeVphI16hgh6Hcv/2m53zsdcNscnpoTROg==, tarball: file:projects/server-recruit.tgz}
name: '@rush-temp/server-recruit'
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
typescript: 4.5.4
transitivePeerDependencies:
- supports-color
dev: false
file:projects/server-task-resources.tgz:
resolution: {integrity: sha512-3HkiHH62jBO6wGrvum0PMVDiAavRHud0u/BExVz15exJRm9YzXK3bklmm8XZr5BsS3vhTqb+q1XwdDXUv0n5Fg==, tarball: file:projects/server-task-resources.tgz}
name: '@rush-temp/server-task-resources'
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/server-task.tgz:
resolution: {integrity: sha512-qaB/cZSAPKuvTUfBv5wsqD0r/YoQO/hy7rD7WBC0lx2TOWIp0/aacYKVkEltinbYjJzP4gg9cQQNful4Mvpp5Q==, tarball: file:projects/server-task.tgz}
name: '@rush-temp/server-task'
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
typescript: 4.5.4
transitivePeerDependencies:
- supports-color
dev: false
file:projects/server-token.tgz:
resolution: {integrity: sha512-74lvKW1J8vMQI7r+UUFCO8KDItftmBVTc9ecLL9kbWHdFT/kfR1ua57O8XG7MMJDmBVsWylHmM1kr6lxwNpNBA==, tarball: file:projects/server-token.tgz}
name: '@rush-temp/server-token'
@ -13426,7 +13767,7 @@ packages:
dev: false
file:projects/server.tgz:
resolution: {integrity: sha512-SuwXbo0xvalgyA3m9i/bbm9ae2I3Tx548KKj8wDffAJxDq0t0tqncuVtUmhrwG06HD9p5myf165I6apGZZocSg==, tarball: file:projects/server.tgz}
resolution: {integrity: sha512-h1M/Y+zV/J0wUEgDj+iHeyMbS/otfYdWS8l2APj78c38/Hso/hi70cB5A1VUq2NsB/hKEE3bywIyn2yuJRnDug==, tarball: file:projects/server.tgz}
name: '@rush-temp/server'
version: 0.0.0
dependencies:
@ -13945,7 +14286,7 @@ packages:
dev: false
file:projects/tool.tgz:
resolution: {integrity: sha512-g3G79v0AQpHzqbZpmFsGU4wNu3BIcTMgR/Rod6Cfi9w0TpNS1XnSSckZeHB0LtTOovvFbj82x5ESBEwq1g0hFA==, tarball: file:projects/tool.tgz}
resolution: {integrity: sha512-3L/wr78VWV79qjSBCDWg37qMPdsEzAf5STbeXuHPOaMCvkhij64Nv0wN3vzj8CRwWRuKrX0o3Ts0NLw2SSl7hQ==, tarball: file:projects/tool.tgz}
name: '@rush-temp/tool'
version: 0.0.0
dependencies:

View File

@ -65,6 +65,7 @@ services:
- 8081:8080
environment:
- ACCOUNTS_URL=http://localhost:3000
- FRONT_URL=http://localhost:8081
- UPLOAD_URL=/files
- TRANSACTOR_URL=ws://localhost:3333
- ELASTIC_URL=http://elastic:9200

View File

@ -5,5 +5,6 @@ LOGIN_TOKEN_DEV=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6InJvc2FtdW5kQGh
LOGIN_ENDPOINT_DEV=wss://transactor.hc.engineering/
TELEGRAM_URL=http://localhost:8086
FRONT_URL=http://localhost:8080
REKONI_URL=http://localhost:4004

View File

@ -106,6 +106,16 @@
"@anticrm/rekoni": "~0.6.0",
"@anticrm/tags-assets": "~0.6.0",
"@anticrm/tags": "~0.6.0",
"@anticrm/tags-resources": "~0.6.0"
"@anticrm/tags-resources": "~0.6.0",
"@anticrm/server-chunter": "~0.6.0",
"@anticrm/server-chunter-resources": "~0.6.0",
"@anticrm/server-inventory": "~0.6.0",
"@anticrm/server-inventory-resources": "~0.6.0",
"@anticrm/server-lead": "~0.6.0",
"@anticrm/server-lead-resources": "~0.6.0",
"@anticrm/server-recruit": "~0.6.0",
"@anticrm/server-recruit-resources": "~0.6.0",
"@anticrm/server-task": "~0.6.0",
"@anticrm/server-task-resources": "~0.6.0"
}
}

View File

@ -20,6 +20,11 @@ import { clientId } from '@anticrm/client'
import { serverAttachmentId } from '@anticrm/server-attachment'
import { serverContactId } from '@anticrm/server-contact'
import { serverNotificationId } from '@anticrm/server-notification'
import { serverChunterId } from '@anticrm/server-chunter'
import { serverInventoryId } from '@anticrm/server-inventory'
import { serverLeadId } from '@anticrm/server-lead'
import { serverRecruitId } from '@anticrm/server-recruit'
import { serverTaskId } from '@anticrm/server-task'
import { setMetadata } from '@anticrm/platform'
@ -35,7 +40,11 @@ export function configurePlatformDev() {
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(serverChunterId, () => import(/* webpackChunkName: "server-chunter" */ '@anticrm/server-chunter-resources'))
addLocation(serverInventoryId, () => import(/* webpackChunkName: "server-inventory" */ '@anticrm/server-inventory-resources'))
addLocation(serverLeadId, () => import(/* webpackChunkName: "server-lead" */ '@anticrm/server-lead-resources'))
addLocation(serverRecruitId, () => import(/* webpackChunkName: "server-recruit" */ '@anticrm/server-recruit-resources'))
addLocation(serverTaskId, () => import/* webpackChunkName: "server-task" */ ('@anticrm/server-task-resources'))
// Set devmodel to hook client to be able to present all activity
enableDevModel()
}

View File

@ -69,6 +69,7 @@ export async function configurePlatform() {
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(rekoni.metadata.RekoniUrl, process.env.REKONI_URL)

View File

@ -75,6 +75,16 @@
"@anticrm/server-contact-resources": "~0.6.0",
"@anticrm/server-notification": "~0.6.0",
"@anticrm/server-notification-resources": "~0.6.0",
"@anticrm/server-tool": "~0.6.0"
"@anticrm/server-tool": "~0.6.0",
"@anticrm/server-chunter": "~0.6.0",
"@anticrm/server-chunter-resources": "~0.6.0",
"@anticrm/server-inventory": "~0.6.0",
"@anticrm/server-inventory-resources": "~0.6.0",
"@anticrm/server-lead": "~0.6.0",
"@anticrm/server-lead-resources": "~0.6.0",
"@anticrm/server-recruit": "~0.6.0",
"@anticrm/server-recruit-resources": "~0.6.0",
"@anticrm/server-task": "~0.6.0",
"@anticrm/server-task-resources": "~0.6.0"
}
}

View File

@ -50,6 +50,11 @@ import {
import { serverAttachmentId } from '@anticrm/server-attachment'
import { serverContactId } from '@anticrm/server-contact'
import { serverNotificationId } from '@anticrm/server-notification'
import { serverChunterId } from '@anticrm/server-chunter'
import { serverInventoryId } from '@anticrm/server-inventory'
import { serverLeadId } from '@anticrm/server-lead'
import { serverRecruitId } from '@anticrm/server-recruit'
import { serverTaskId } from '@anticrm/server-task'
import { Client as ElasticClient } from '@elastic/elasticsearch'
import { Client } from 'minio'
import { Db, MongoClient } from 'mongodb'
@ -106,6 +111,11 @@ export class ElasticTool {
addLocation(serverAttachmentId, () => import('@anticrm/server-attachment-resources'))
addLocation(serverContactId, () => import('@anticrm/server-contact-resources'))
addLocation(serverNotificationId, () => import('@anticrm/server-notification-resources'))
addLocation(serverChunterId, () => import(/* webpackChunkName: "server-chunter" */ '@anticrm/server-chunter-resources'))
addLocation(serverInventoryId, () => import(/* webpackChunkName: "server-inventory" */ '@anticrm/server-inventory-resources'))
addLocation(serverLeadId, () => import(/* webpackChunkName: "server-lead" */ '@anticrm/server-lead-resources'))
addLocation(serverRecruitId, () => import(/* webpackChunkName: "server-recruit" */ '@anticrm/server-recruit-resources'))
addLocation(serverTaskId, () => import/* webpackChunkName: "server-task" */ ('@anticrm/server-task-resources'))
this.mongoClient = new MongoClient(mongoUrl)
}

View File

@ -46,6 +46,11 @@
"@anticrm/model-server-attachment": "~0.6.0",
"@anticrm/model-server-contact": "~0.6.0",
"@anticrm/model-server-notification": "~0.6.0",
"@anticrm/model-server-chunter": "~0.6.0",
"@anticrm/model-server-task": "~0.6.0",
"@anticrm/model-server-recruit": "~0.6.0",
"@anticrm/model-server-lead": "~0.6.0",
"@anticrm/model-server-inventory": "~0.6.0",
"@anticrm/model-activity": "~0.6.0",
"@anticrm/model-attachment": "~0.6.0",
"@anticrm/model-gmail": "~0.6.0",

View File

@ -31,6 +31,11 @@ import { createModel as recruitModel } from '@anticrm/model-recruit'
import { createModel as serverAttachmentModel } from '@anticrm/model-server-attachment'
import { createModel as serverContactModel } from '@anticrm/model-server-contact'
import { createModel as serverNotificationModel } from '@anticrm/model-server-notification'
import { createModel as serverChunterModel } from '@anticrm/model-server-chunter'
import { createModel as serverInventoryModel } from '@anticrm/model-server-inventory'
import { createModel as serverLeadModel } from '@anticrm/model-server-lead'
import { createModel as serverTaskModel } from '@anticrm/model-server-task'
import { createModel as serverRecruitModel } from '@anticrm/model-server-recruit'
import { createModel as serverCoreModel } from '@anticrm/model-server-core'
import { createModel as settingModel } from '@anticrm/model-setting'
import { createModel as taskModel } from '@anticrm/model-task'
@ -70,7 +75,11 @@ const builders = [
serverContactModel,
serverNotificationModel,
tagsModel,
serverChunterModel,
serverInventoryModel,
serverLeadModel,
serverTaskModel,
serverRecruitModel,
createDemo
]

View File

@ -20,6 +20,7 @@ import { coreOperation } from '@anticrm/model-core'
import { taskOperation } from '@anticrm/model-task'
import { attachmentOperation } from '@anticrm/model-attachment'
import { leadOperation } from '@anticrm/model-lead'
import { notificationOperation } from '@anticrm/model-notification'
import { recruitOperation } from '@anticrm/model-recruit'
import { viewOperation } from '@anticrm/model-view'
import { contactOperation } from '@anticrm/model-contact'
@ -33,5 +34,6 @@ export const migrateOperations: MigrateOperation[] = [
recruitOperation,
viewOperation,
contactOperation,
tagsOperation
tagsOperation,
notificationOperation
]

View File

@ -36,6 +36,6 @@
"@anticrm/ui": "~0.6.0",
"@anticrm/platform": "~0.6.5",
"@anticrm/contact": "~0.6.2",
"@anticrm/workbench": "~0.6.1"
"@anticrm/contact-resources": "~0.6.0"
}
}

View File

@ -29,7 +29,7 @@ import presentation from '@anticrm/model-presentation'
import view from '@anticrm/model-view'
import workbench from '@anticrm/model-workbench'
import type { Asset, IntlString } from '@anticrm/platform'
import { ids as contact } from './plugin'
import contact from './plugin'
export const DOMAIN_CONTACT = 'contact' as Domain
export const DOMAIN_CHANNEL = 'channel' as Domain

View File

@ -15,16 +15,13 @@
import { IntlString, mergeIds, Resource } from '@anticrm/platform'
import type { Ref } from '@anticrm/core'
import contact, { contactId } from '@anticrm/contact'
import { contactId } from '@anticrm/contact'
import contact from '@anticrm/contact-resources/src/plugin'
import type { AnyComponent } from '@anticrm/ui'
import {} from '@anticrm/core'
import { Application } from '@anticrm/workbench'
import { ObjectSearchCategory, ObjectSearchFactory } from '@anticrm/model-presentation'
export const ids = mergeIds(contactId, contact, {
app: {
Contacts: '' as Ref<Application>
},
export default mergeIds(contactId, contact, {
component: {
PersonPresenter: '' as AnyComponent,
ContactPresenter: '' as AnyComponent,
@ -39,13 +36,7 @@ export const ids = mergeIds(contactId, contact, {
Contacts: '' as AnyComponent
},
string: {
Organizations: '' as IntlString,
OrganizationsFolder: '' as IntlString,
PersonsFolder: '' as IntlString,
Persons: '' as IntlString,
Contacts: '' as IntlString,
CreatePersons: '' as IntlString,
CreateOrganizations: '' as IntlString,
SearchEmployee: '' as IntlString,
SearchPerson: '' as IntlString,
SearchOrganization: '' as IntlString,

View File

@ -20,12 +20,8 @@ import inventory from '@anticrm/inventory-resources/src/plugin'
import { mergeIds, Resource } from '@anticrm/platform'
import type { AnyComponent } from '@anticrm/ui'
import { Action } from '@anticrm/view'
import { Application } from '@anticrm/workbench'
export default mergeIds(inventoryId, inventory, {
app: {
Inventory: '' as Ref<Application>
},
action: {
CreateSubcategory: '' as Ref<Action>
},

View File

@ -21,12 +21,8 @@ import type { IntlString } from '@anticrm/platform'
import { mergeIds } from '@anticrm/platform'
import { KanbanTemplate } from '@anticrm/task'
import type { AnyComponent } from '@anticrm/ui'
import { Application } from '@anticrm/workbench'
export default mergeIds(leadId, lead, {
app: {
Lead: '' as Ref<Application>
},
string: {
Funnel: '' as IntlString,
Funnels: '' as IntlString,

View File

@ -30,6 +30,7 @@
"@anticrm/ui": "~0.6.0",
"@anticrm/platform": "~0.6.5",
"@anticrm/model-core": "~0.6.0",
"@anticrm/notification": "~0.6.0"
"@anticrm/notification": "~0.6.0",
"@anticrm/setting": "~0.6.0"
}
}

View File

@ -14,25 +14,26 @@
// limitations under the License.
//
import type { Account, Doc, Domain, Ref, Timestamp, TxCUD } from '@anticrm/core'
import { Builder, Model, Prop, TypeRef, TypeString, TypeTimestamp } from '@anticrm/model'
import core, { TAttachedDoc } from '@anticrm/model-core'
import type { LastView, Notification, NotificationStatus } from '@anticrm/notification'
import notificaton from './plugin'
import { Account, Doc, Domain, DOMAIN_MODEL, Ref, Timestamp, TxCUD } from '@anticrm/core'
import { ArrOf, Builder, Model, Prop, TypeRef, TypeString, TypeTimestamp } from '@anticrm/model'
import core, { TAttachedDoc, TDoc } from '@anticrm/model-core'
import type { EmailNotification, LastView, NotificationType, NotificationProvider, NotificationSetting, Notification, NotificationStatus } from '@anticrm/notification'
import type { IntlString } from '@anticrm/platform'
import notification from './plugin'
import setting from '@anticrm/setting'
export const DOMAIN_NOTIFICATION = 'notification' as Domain
@Model(notificaton.class.LastView, core.class.AttachedDoc, DOMAIN_NOTIFICATION)
@Model(notification.class.LastView, core.class.AttachedDoc, DOMAIN_NOTIFICATION)
export class TLastView extends TAttachedDoc implements LastView {
@Prop(TypeTimestamp(), notificaton.string.LastView)
@Prop(TypeTimestamp(), notification.string.LastView)
lastView!: Timestamp
@Prop(TypeRef(core.class.Account), 'Modified By' as IntlString)
user!: Ref<Account>
}
@Model(notificaton.class.Notification, core.class.AttachedDoc, DOMAIN_NOTIFICATION)
@Model(notification.class.Notification, core.class.AttachedDoc, DOMAIN_NOTIFICATION)
export class TNotification extends TAttachedDoc implements Notification {
@Prop(TypeRef(core.class.Tx), 'TX' as IntlString)
tx!: Ref<TxCUD<Doc>>
@ -41,6 +42,66 @@ export class TNotification extends TAttachedDoc implements Notification {
status!: NotificationStatus
}
export function createModel (builder: Builder): void {
builder.createModel(TLastView, TNotification)
@Model(notification.class.EmailNotification, core.class.Doc, DOMAIN_NOTIFICATION)
export class TEmaiNotification extends TDoc implements EmailNotification {
@Prop(TypeString(), 'Sender' as IntlString)
sender!: string
@Prop(ArrOf(TypeString()), 'Receivers' as IntlString)
receivers!: string[]
@Prop(TypeString(), 'Subject' as IntlString)
subject!: string
@Prop(TypeString(), 'Text' as IntlString)
text!: string
@Prop(TypeString(), 'Html' as IntlString)
html?: string
@Prop(TypeString(), 'Status' as IntlString)
status!: 'new' | 'sent'
}
@Model(notification.class.NotificationType, core.class.Doc, DOMAIN_MODEL)
export class TNotificationType extends TDoc implements NotificationType {
label!: IntlString
}
@Model(notification.class.NotificationProvider, core.class.Doc, DOMAIN_MODEL)
export class TNotificationProvider extends TDoc implements NotificationProvider {
label!: IntlString
}
@Model(notification.class.NotificationSetting, core.class.Doc, DOMAIN_NOTIFICATION)
export class TNotificationSetting extends TDoc implements NotificationSetting {
type!: Ref<TNotificationType>
provider!: Ref<TNotificationProvider>
enabled!: boolean
}
export function createModel (builder: Builder): void {
builder.createModel(TLastView, TNotification, TEmaiNotification, TNotificationType, TNotificationProvider, TNotificationSetting)
builder.createDoc(notification.class.NotificationType, core.space.Model, {
label: notification.string.MentionNotification
}, notification.ids.MentionNotification)
builder.createDoc(notification.class.NotificationProvider, core.space.Model, {
label: notification.string.PlatformNotification
}, notification.ids.PlatformNotification)
builder.createDoc(notification.class.NotificationProvider, core.space.Model, {
label: notification.string.EmailNotification
}, notification.ids.EmailNotification)
builder.createDoc(setting.class.SettingsCategory, core.space.Model, {
name: 'notifications',
label: notification.string.Notifications,
icon: notification.icon.Notifications,
component: notification.component.NotificationSettings,
order: 2500
}, notification.ids.NotificationSettings)
}
export { notificationOperation } from './migration'

View File

@ -0,0 +1,31 @@
//
// Copyright © 2022 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 { Doc, DOMAIN_TX, TxCUD } from '@anticrm/core'
import { MigrateOperation, MigrationClient, MigrationUpgradeClient } from '@anticrm/model'
import notification from './plugin'
export const notificationOperation: MigrateOperation = {
async migrate (client: MigrationClient): Promise<void> {
const txes = await client.find<TxCUD<Doc>>(DOMAIN_TX, {
objectClass: notification.class.LastView
})
await Promise.all(txes.map(async (tx) => {
await client.delete(DOMAIN_TX, tx._id)
}))
},
async upgrade (client: MigrationUpgradeClient): Promise<void> {
}
}

View File

@ -14,12 +14,18 @@
// limitations under the License.
//
import { IntlString, mergeIds } from '@anticrm/platform'
import notification, { notificationId } from '@anticrm/notification'
import {} from '@anticrm/ui'
import { IntlString, mergeIds } from '@anticrm/platform'
import { AnyComponent } from '@anticrm/ui'
export default mergeIds(notificationId, notification, {
string: {
LastView: '' as IntlString
LastView: '' as IntlString,
MentionNotification: '' as IntlString,
PlatformNotification: '' as IntlString,
EmailNotification: '' as IntlString
},
component: {
NotificationSettings: '' as AnyComponent
}
})

View File

@ -21,13 +21,9 @@ import recruit from '@anticrm/recruit-resources/src/plugin'
import { KanbanTemplate } from '@anticrm/task'
import type { AnyComponent } from '@anticrm/ui'
import type { Action } from '@anticrm/view'
import { Application } from '@anticrm/workbench'
import { ObjectSearchFactory, ObjectSearchCategory } from '@anticrm/model-presentation'
export default mergeIds(recruitId, recruit, {
app: {
Recruit: '' as Ref<Application>
},
action: {
CreateApplication: '' as Ref<Action>
},

View File

@ -0,0 +1,7 @@
module.exports = {
extends: ['./node_modules/@anticrm/model-rig/profiles/default/config/eslint.config.json'],
parserOptions: {
tsconfigRootDir: __dirname,
project: './tsconfig.json'
}
}

View File

@ -0,0 +1,18 @@
// The "rig.json" file directs tools to look for their config files in an external package.
// Documentation for this system: https://www.npmjs.com/package/@rushstack/rig-package
{
"$schema": "https://developer.microsoft.com/json-schemas/rig-package/rig.schema.json",
/**
* (Required) The name of the rig package to inherit from.
* It should be an NPM package name with the "-rig" suffix.
*/
"rigPackageName": "@anticrm/model-rig"
/**
* (Optional) Selects a config profile from the rig package. The name must consist of
* lowercase alphanumeric words separated by hyphens, for example "sample-profile".
* If omitted, then the "default" profile will be used."
*/
// "rigProfile": "your-profile-name"
}

View File

@ -0,0 +1,36 @@
{
"name": "@anticrm/model-server-chunter",
"version": "0.6.0",
"main": "lib/index.js",
"author": "Anticrm Platform Contributors",
"license": "EPL-2.0",
"scripts": {
"build": "heft build",
"build:watch": "tsc",
"lint:fix": "eslint --fix src",
"lint": "eslint src",
"format": "prettier --write src && eslint --fix src"
},
"devDependencies": {
"@anticrm/model-rig": "~0.6.0",
"@typescript-eslint/eslint-plugin": "^5.4.0",
"eslint-plugin-import": "^2.25.3",
"eslint-plugin-promise": "^5.1.1",
"eslint-plugin-node": "^11.1.0",
"eslint": "^7.32.0",
"@types/heft-jest": "^1.0.2",
"@typescript-eslint/parser": "^5.4.0",
"eslint-config-standard-with-typescript": "^21.0.1",
"prettier": "^2.4.1",
"@rushstack/heft": "^0.41.1"
},
"dependencies": {
"@anticrm/core": "~0.6.11",
"@anticrm/model": "~0.6.0",
"@anticrm/platform": "~0.6.5",
"@anticrm/server-chunter": "~0.6.0",
"@anticrm/server-core": "~0.6.0",
"@anticrm/chunter": "~0.6.0",
"@anticrm/view": "~0.6.0"
}
}

View File

@ -0,0 +1,31 @@
//
// Copyright © 2022 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 { Builder } from '@anticrm/model'
import core from '@anticrm/core'
import chunter from '@anticrm/chunter'
import view from '@anticrm/view'
import serverChunter from '@anticrm/server-chunter'
export function createModel (builder: Builder): void {
builder.mixin(chunter.class.Channel, core.class.Class, view.mixin.HTMLPresenter, {
presenter: serverChunter.function.ChannelHTMLPresenter
})
builder.mixin(chunter.class.Channel, core.class.Class, view.mixin.TextPresenter, {
presenter: serverChunter.function.ChannelTextPresenter
})
}

View File

@ -0,0 +1,8 @@
{
"extends": "./node_modules/@anticrm/model-rig/profiles/default/tsconfig.json",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./lib",
}
}

View File

@ -29,6 +29,8 @@
"@anticrm/model": "~0.6.0",
"@anticrm/platform": "~0.6.5",
"@anticrm/server-contact": "~0.6.0",
"@anticrm/server-core": "~0.6.0"
"@anticrm/server-core": "~0.6.0",
"@anticrm/contact": "~0.6.2",
"@anticrm/view": "~0.6.0"
}
}

View File

@ -18,9 +18,27 @@ import { Builder } from '@anticrm/model'
import serverCore from '@anticrm/server-core'
import core from '@anticrm/core'
import contact from '@anticrm/contact'
import view from '@anticrm/view'
import serverContact from '@anticrm/server-contact'
export function createModel (builder: Builder): void {
builder.mixin(contact.class.Person, core.class.Class, view.mixin.HTMLPresenter, {
presenter: serverContact.function.PersonHTMLPresenter
})
builder.mixin(contact.class.Person, core.class.Class, view.mixin.TextPresenter, {
presenter: serverContact.function.PersonTextPresenter
})
builder.mixin(contact.class.Organization, core.class.Class, view.mixin.HTMLPresenter, {
presenter: serverContact.function.OrganizationHTMLPresenter
})
builder.mixin(contact.class.Organization, core.class.Class, view.mixin.TextPresenter, {
presenter: serverContact.function.OrganizationTextPresenter
})
builder.createDoc(serverCore.class.Trigger, core.space.Model, {
trigger: serverContact.trigger.OnContactDelete
})

View File

@ -0,0 +1,7 @@
module.exports = {
extends: ['./node_modules/@anticrm/model-rig/profiles/default/config/eslint.config.json'],
parserOptions: {
tsconfigRootDir: __dirname,
project: './tsconfig.json'
}
}

View File

@ -0,0 +1,18 @@
// The "rig.json" file directs tools to look for their config files in an external package.
// Documentation for this system: https://www.npmjs.com/package/@rushstack/rig-package
{
"$schema": "https://developer.microsoft.com/json-schemas/rig-package/rig.schema.json",
/**
* (Required) The name of the rig package to inherit from.
* It should be an NPM package name with the "-rig" suffix.
*/
"rigPackageName": "@anticrm/model-rig"
/**
* (Optional) Selects a config profile from the rig package. The name must consist of
* lowercase alphanumeric words separated by hyphens, for example "sample-profile".
* If omitted, then the "default" profile will be used."
*/
// "rigProfile": "your-profile-name"
}

View File

@ -0,0 +1,36 @@
{
"name": "@anticrm/model-server-inventory",
"version": "0.6.0",
"main": "lib/index.js",
"author": "Anticrm Platform Contributors",
"license": "EPL-2.0",
"scripts": {
"build": "heft build",
"build:watch": "tsc",
"lint:fix": "eslint --fix src",
"lint": "eslint src",
"format": "prettier --write src && eslint --fix src"
},
"devDependencies": {
"@anticrm/model-rig": "~0.6.0",
"@typescript-eslint/eslint-plugin": "^5.4.0",
"eslint-plugin-import": "^2.25.3",
"eslint-plugin-promise": "^5.1.1",
"eslint-plugin-node": "^11.1.0",
"eslint": "^7.32.0",
"@types/heft-jest": "^1.0.2",
"@typescript-eslint/parser": "^5.4.0",
"eslint-config-standard-with-typescript": "^21.0.1",
"prettier": "^2.4.1",
"@rushstack/heft": "^0.41.1"
},
"dependencies": {
"@anticrm/core": "~0.6.11",
"@anticrm/model": "~0.6.0",
"@anticrm/platform": "~0.6.5",
"@anticrm/server-inventory": "~0.6.0",
"@anticrm/server-core": "~0.6.0",
"@anticrm/inventory": "~0.6.0",
"@anticrm/view": "~0.6.0"
}
}

View File

@ -0,0 +1,31 @@
//
// Copyright © 2022 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 { Builder } from '@anticrm/model'
import core from '@anticrm/core'
import inventory from '@anticrm/inventory'
import view from '@anticrm/view'
import serverInventory from '@anticrm/server-inventory'
export function createModel (builder: Builder): void {
builder.mixin(inventory.class.Product, core.class.Class, view.mixin.HTMLPresenter, {
presenter: serverInventory.function.ProductHTMLPresenter
})
builder.mixin(inventory.class.Product, core.class.Class, view.mixin.TextPresenter, {
presenter: serverInventory.function.ProductTextPresenter
})
}

View File

@ -0,0 +1,8 @@
{
"extends": "./node_modules/@anticrm/model-rig/profiles/default/tsconfig.json",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./lib",
}
}

View File

@ -0,0 +1,7 @@
module.exports = {
extends: ['./node_modules/@anticrm/model-rig/profiles/default/config/eslint.config.json'],
parserOptions: {
tsconfigRootDir: __dirname,
project: './tsconfig.json'
}
}

View File

@ -0,0 +1,18 @@
// The "rig.json" file directs tools to look for their config files in an external package.
// Documentation for this system: https://www.npmjs.com/package/@rushstack/rig-package
{
"$schema": "https://developer.microsoft.com/json-schemas/rig-package/rig.schema.json",
/**
* (Required) The name of the rig package to inherit from.
* It should be an NPM package name with the "-rig" suffix.
*/
"rigPackageName": "@anticrm/model-rig"
/**
* (Optional) Selects a config profile from the rig package. The name must consist of
* lowercase alphanumeric words separated by hyphens, for example "sample-profile".
* If omitted, then the "default" profile will be used."
*/
// "rigProfile": "your-profile-name"
}

View File

@ -0,0 +1,36 @@
{
"name": "@anticrm/model-server-lead",
"version": "0.6.0",
"main": "lib/index.js",
"author": "Anticrm Platform Contributors",
"license": "EPL-2.0",
"scripts": {
"build": "heft build",
"build:watch": "tsc",
"lint:fix": "eslint --fix src",
"lint": "eslint src",
"format": "prettier --write src && eslint --fix src"
},
"devDependencies": {
"@anticrm/model-rig": "~0.6.0",
"@typescript-eslint/eslint-plugin": "^5.4.0",
"eslint-plugin-import": "^2.25.3",
"eslint-plugin-promise": "^5.1.1",
"eslint-plugin-node": "^11.1.0",
"eslint": "^7.32.0",
"@types/heft-jest": "^1.0.2",
"@typescript-eslint/parser": "^5.4.0",
"eslint-config-standard-with-typescript": "^21.0.1",
"prettier": "^2.4.1",
"@rushstack/heft": "^0.41.1"
},
"dependencies": {
"@anticrm/core": "~0.6.11",
"@anticrm/model": "~0.6.0",
"@anticrm/platform": "~0.6.5",
"@anticrm/server-lead": "~0.6.0",
"@anticrm/server-core": "~0.6.0",
"@anticrm/lead": "~0.6.0",
"@anticrm/view": "~0.6.0"
}
}

View File

@ -0,0 +1,31 @@
//
// Copyright © 2022 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 { Builder } from '@anticrm/model'
import core from '@anticrm/core'
import lead from '@anticrm/lead'
import view from '@anticrm/view'
import serverLead from '@anticrm/server-lead'
export function createModel (builder: Builder): void {
builder.mixin(lead.class.Lead, core.class.Class, view.mixin.HTMLPresenter, {
presenter: serverLead.function.LeadHTMLPresenter
})
builder.mixin(lead.class.Lead, core.class.Class, view.mixin.TextPresenter, {
presenter: serverLead.function.LeadTextPresenter
})
}

View File

@ -0,0 +1,8 @@
{
"extends": "./node_modules/@anticrm/model-rig/profiles/default/tsconfig.json",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./lib",
}
}

View File

@ -0,0 +1,7 @@
module.exports = {
extends: ['./node_modules/@anticrm/model-rig/profiles/default/config/eslint.config.json'],
parserOptions: {
tsconfigRootDir: __dirname,
project: './tsconfig.json'
}
}

View File

@ -0,0 +1,18 @@
// The "rig.json" file directs tools to look for their config files in an external package.
// Documentation for this system: https://www.npmjs.com/package/@rushstack/rig-package
{
"$schema": "https://developer.microsoft.com/json-schemas/rig-package/rig.schema.json",
/**
* (Required) The name of the rig package to inherit from.
* It should be an NPM package name with the "-rig" suffix.
*/
"rigPackageName": "@anticrm/model-rig"
/**
* (Optional) Selects a config profile from the rig package. The name must consist of
* lowercase alphanumeric words separated by hyphens, for example "sample-profile".
* If omitted, then the "default" profile will be used."
*/
// "rigProfile": "your-profile-name"
}

View File

@ -0,0 +1,36 @@
{
"name": "@anticrm/model-server-recruit",
"version": "0.6.0",
"main": "lib/index.js",
"author": "Anticrm Platform Contributors",
"license": "EPL-2.0",
"scripts": {
"build": "heft build",
"build:watch": "tsc",
"lint:fix": "eslint --fix src",
"lint": "eslint src",
"format": "prettier --write src && eslint --fix src"
},
"devDependencies": {
"@anticrm/model-rig": "~0.6.0",
"@typescript-eslint/eslint-plugin": "^5.4.0",
"eslint-plugin-import": "^2.25.3",
"eslint-plugin-promise": "^5.1.1",
"eslint-plugin-node": "^11.1.0",
"eslint": "^7.32.0",
"@types/heft-jest": "^1.0.2",
"@typescript-eslint/parser": "^5.4.0",
"eslint-config-standard-with-typescript": "^21.0.1",
"prettier": "^2.4.1",
"@rushstack/heft": "^0.41.1"
},
"dependencies": {
"@anticrm/core": "~0.6.11",
"@anticrm/model": "~0.6.0",
"@anticrm/platform": "~0.6.5",
"@anticrm/server-recruit": "~0.6.0",
"@anticrm/server-core": "~0.6.0",
"@anticrm/recruit": "~0.6.0",
"@anticrm/view": "~0.6.0"
}
}

View File

@ -0,0 +1,39 @@
//
// Copyright © 2022 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 { Builder } from '@anticrm/model'
import core from '@anticrm/core'
import recruit from '@anticrm/recruit'
import view from '@anticrm/view'
import serverRecruit from '@anticrm/server-recruit'
export function createModel (builder: Builder): void {
builder.mixin(recruit.class.Applicant, core.class.Class, view.mixin.HTMLPresenter, {
presenter: serverRecruit.function.ApplicationHTMLPresenter
})
builder.mixin(recruit.class.Applicant, core.class.Class, view.mixin.TextPresenter, {
presenter: serverRecruit.function.ApplicationTextPresenter
})
builder.mixin(recruit.class.Vacancy, core.class.Class, view.mixin.HTMLPresenter, {
presenter: serverRecruit.function.VacancyHTMLPresenter
})
builder.mixin(recruit.class.Vacancy, core.class.Class, view.mixin.TextPresenter, {
presenter: serverRecruit.function.VacancyTextPresenter
})
}

View File

@ -0,0 +1,8 @@
{
"extends": "./node_modules/@anticrm/model-rig/profiles/default/tsconfig.json",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./lib",
}
}

View File

@ -0,0 +1,7 @@
module.exports = {
extends: ['./node_modules/@anticrm/model-rig/profiles/default/config/eslint.config.json'],
parserOptions: {
tsconfigRootDir: __dirname,
project: './tsconfig.json'
}
}

View File

@ -0,0 +1,18 @@
// The "rig.json" file directs tools to look for their config files in an external package.
// Documentation for this system: https://www.npmjs.com/package/@rushstack/rig-package
{
"$schema": "https://developer.microsoft.com/json-schemas/rig-package/rig.schema.json",
/**
* (Required) The name of the rig package to inherit from.
* It should be an NPM package name with the "-rig" suffix.
*/
"rigPackageName": "@anticrm/model-rig"
/**
* (Optional) Selects a config profile from the rig package. The name must consist of
* lowercase alphanumeric words separated by hyphens, for example "sample-profile".
* If omitted, then the "default" profile will be used."
*/
// "rigProfile": "your-profile-name"
}

View File

@ -0,0 +1,36 @@
{
"name": "@anticrm/model-server-task",
"version": "0.6.0",
"main": "lib/index.js",
"author": "Anticrm Platform Contributors",
"license": "EPL-2.0",
"scripts": {
"build": "heft build",
"build:watch": "tsc",
"lint:fix": "eslint --fix src",
"lint": "eslint src",
"format": "prettier --write src && eslint --fix src"
},
"devDependencies": {
"@anticrm/model-rig": "~0.6.0",
"@typescript-eslint/eslint-plugin": "^5.4.0",
"eslint-plugin-import": "^2.25.3",
"eslint-plugin-promise": "^5.1.1",
"eslint-plugin-node": "^11.1.0",
"eslint": "^7.32.0",
"@types/heft-jest": "^1.0.2",
"@typescript-eslint/parser": "^5.4.0",
"eslint-config-standard-with-typescript": "^21.0.1",
"prettier": "^2.4.1",
"@rushstack/heft": "^0.41.1"
},
"dependencies": {
"@anticrm/core": "~0.6.11",
"@anticrm/model": "~0.6.0",
"@anticrm/platform": "~0.6.5",
"@anticrm/server-task": "~0.6.0",
"@anticrm/server-core": "~0.6.0",
"@anticrm/task": "~0.6.0",
"@anticrm/view": "~0.6.0"
}
}

View File

@ -0,0 +1,31 @@
//
// Copyright © 2022 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 { Builder } from '@anticrm/model'
import core from '@anticrm/core'
import task from '@anticrm/task'
import view from '@anticrm/view'
import serverTask from '@anticrm/server-task'
export function createModel (builder: Builder): void {
builder.mixin(task.class.Issue, core.class.Class, view.mixin.HTMLPresenter, {
presenter: serverTask.function.IssueHTMLPresenter
})
builder.mixin(task.class.Issue, core.class.Class, view.mixin.TextPresenter, {
presenter: serverTask.function.IssueTextPresenter
})
}

View File

@ -0,0 +1,8 @@
{
"extends": "./node_modules/@anticrm/model-rig/profiles/default/tsconfig.json",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./lib",
}
}

View File

@ -20,14 +20,10 @@ import { mergeIds } from '@anticrm/platform'
import { KanbanTemplate, taskId } from '@anticrm/task'
import task from '@anticrm/task-resources/src/plugin'
import type { AnyComponent } from '@anticrm/ui'
import { Application } from '@anticrm/workbench'
import type { Action } from '@anticrm/view'
import { ObjectSearchCategory, ObjectSearchFactory } from '@anticrm/model-presentation'
export default mergeIds(taskId, task, {
app: {
Tasks: '' as Ref<Application>
},
action: {
CreateTask: '' as Ref<Action>,
EditStatuses: '' as Ref<Action>,

View File

@ -30,6 +30,8 @@ import type {
ObjectFactory,
ObjectValidator,
Viewlet,
HTMLPresenter,
TextPresenter,
ViewletDescriptor
} from '@anticrm/view'
import view from './plugin'
@ -98,6 +100,16 @@ export class TActionTarget extends TDoc implements ActionTarget {
action!: Ref<Action>
}
@Mixin(view.mixin.HTMLPresenter, core.class.Class)
export class THTMLPresenter extends TClass implements HTMLPresenter {
presenter!: Resource<(doc: Doc) => string>
}
@Mixin(view.mixin.TextPresenter, core.class.Class)
export class TTextPresenter extends TClass implements TextPresenter {
presenter!: Resource<(doc: Doc) => string>
}
export function createModel (builder: Builder): void {
builder.createModel(
TAttributeEditor,
@ -110,7 +122,9 @@ export function createModel (builder: Builder): void {
TObjectValidator,
TObjectFactory,
TObjectEditorHeader,
TObjectDDParticipant
TObjectDDParticipant,
THTMLPresenter,
TTextPresenter
)
builder.mixin(core.class.TypeString, core.class.Class, view.mixin.AttributeEditor, {

View File

@ -17,7 +17,7 @@
export let rowGap: number = 2.5
export let columnGap: number = 1.5
const style = `grid-template-columns: repeat(${column}, 1fr); row-gap: ${rowGap}rem; column-gap: ${columnGap}rem;`
$: style = `grid-template-columns: repeat(${column}, 1fr); row-gap: ${rowGap}rem; column-gap: ${columnGap}rem;`
</script>
<div class="grid" {style}>

View File

@ -18,7 +18,7 @@
</script>
<label class="toggle">
<input class="chBox" type="checkbox" bind:checked={on}>
<input class="chBox" type="checkbox" bind:checked={on} on:change>
<span class="toggle-switch"></span>
</label>

View File

@ -16,13 +16,16 @@
<script lang="ts">
import type { IntlString } from '@anticrm/platform'
import Toggle from './Toggle.svelte'
import Label from './Label.svelte'
import { createEventDispatcher } from 'svelte'
export let label: IntlString
export let description: IntlString | undefined = undefined
export let on: boolean = false
const dispatch = createEventDispatcher()
</script>
<div class="flex-between">
@ -32,7 +35,7 @@
<span><Label label={description} /></span>
{/if}
</div>
<Toggle bind:on={on}/>
<Toggle bind:on={on} on:change={() => {dispatch('change', on)}} />
</div>
<style lang="scss">

View File

@ -36,11 +36,13 @@
"@anticrm/ui": "~0.6.0",
"@anticrm/presentation": "~0.6.2",
"@anticrm/chunter": "~0.6.0",
"@anticrm/login": "~0.6.1",
"svelte": "^3.37.0",
"@anticrm/text-editor": "~0.6.0",
"@anticrm/contact": "~0.6.2",
"@anticrm/contact-resources": "~0.6.0",
"@anticrm/view-resources": "~0.6.0",
"@anticrm/view": "~0.6.0"
"@anticrm/view": "~0.6.0",
"@anticrm/workbench": "~0.6.1"
}
}

View File

@ -13,7 +13,10 @@
// limitations under the License.
//
import { Resources } from '@anticrm/platform'
import { Channel } from '@anticrm/chunter'
import { Doc } from '@anticrm/core'
import login from '@anticrm/login'
import { getMetadata, Resources } from '@anticrm/platform'
import { collectBacklinks } from './backlinks'
import TxBacklinkCreate from './components/activity/TxBacklinkCreate.svelte'
import TxBacklinkReference from './components/activity/TxBacklinkReference.svelte'
@ -24,6 +27,8 @@ import CommentInput from './components/CommentInput.svelte'
import CommentPresenter from './components/CommentPresenter.svelte'
import CommentsPresenter from './components/CommentsPresenter.svelte'
import CreateChannel from './components/CreateChannel.svelte'
import chunter from './plugin'
import workbench from '@anticrm/workbench'
export { CommentsPresenter }

View File

@ -13,9 +13,7 @@
// limitations under the License.
//
import type { Channel } from '@anticrm/chunter'
import chunter, { chunterId } from '@anticrm/chunter'
import type { Class, Doc, Ref } from '@anticrm/core'
import type { IntlString } from '@anticrm/platform'
import { mergeIds } from '@anticrm/platform'
import type { AnyComponent } from '@anticrm/ui'
@ -25,9 +23,6 @@ export default mergeIds(chunterId, chunter, {
CreateChannel: '' as AnyComponent,
ChannelView: '' as AnyComponent
},
class: {
Channel: '' as Ref<Class<Channel>>
},
string: {
Channel: '' as IntlString,
Channels: '' as IntlString,
@ -37,8 +32,5 @@ export default mergeIds(chunterId, chunter, {
ChannelDescription: '' as IntlString,
MakePrivate: '' as IntlString,
MakePrivateDescription: '' as IntlString
},
app: {
Chunter: '' as Ref<Doc>
}
})

View File

@ -13,9 +13,9 @@
// limitations under the License.
//
import { IntlString, plugin } from '@anticrm/platform'
import type { AttachedDoc, Class, Doc, Ref, Space } from '@anticrm/core'
import type { Asset, Plugin } from '@anticrm/platform'
import type { Space, Doc, Ref, Class, AttachedDoc } from '@anticrm/core'
import { IntlString, plugin } from '@anticrm/platform'
import { AnyComponent } from '@anticrm/ui'
/**
@ -71,7 +71,8 @@ export default plugin(chunterId, {
class: {
Message: '' as Ref<Class<Message>>,
Backlink: '' as Ref<Class<Backlink>>,
Comment: '' as Ref<Class<Comment>>
Comment: '' as Ref<Class<Comment>>,
Channel: '' as Ref<Class<Channel>>
},
space: {
Backlinks: '' as Ref<Space>
@ -80,5 +81,8 @@ export default plugin(chunterId, {
EditUpdate: '' as IntlString,
EditCancel: '' as IntlString,
Comments: '' as IntlString
},
app: {
Chunter: '' as Ref<Doc>
}
})

View File

@ -18,8 +18,8 @@ import { Contact, formatName } from '@anticrm/contact'
import { Class, Client, Ref } from '@anticrm/core'
import { Resources } from '@anticrm/platform'
import { Avatar, ObjectSearchResult, UserInfo } from '@anticrm/presentation'
import ChannelsEditor from './components/ChannelsEditor.svelte'
import Channels from './components/Channels.svelte'
import ChannelsEditor from './components/ChannelsEditor.svelte'
import ChannelsPresenter from './components/ChannelsPresenter.svelte'
import ChannelsView from './components/ChannelsView.svelte'
import ContactPresenter from './components/ContactPresenter.svelte'

View File

@ -163,5 +163,8 @@ export default plugin(contactId, {
space: {
Employee: '' as Ref<Space>,
Contacts: '' as Ref<Space>
},
app: {
Contacts: '' as Ref<Doc>
}
})

View File

@ -39,6 +39,8 @@
"@anticrm/presentation": "~0.6.2",
"@anticrm/view": "~0.6.0",
"@anticrm/view-resources": "~0.6.0",
"@anticrm/core": "~0.6.11"
"@anticrm/core": "~0.6.11",
"@anticrm/login": "~0.6.1",
"@anticrm/workbench": "~0.6.1"
}
}

View File

@ -14,17 +14,17 @@
// limitations under the License.
//
import { Resources } from '@anticrm/platform'
import Categories from './components/Categories.svelte'
import CreateCategory from './components/CreateCategory.svelte'
import CategoryPresenter from './components/CategoryPresenter.svelte'
import Products from './components/Products.svelte'
import ProductPresenter from './components/ProductPresenter.svelte'
import EditProduct from './components/EditProduct.svelte'
import Variants from './components/Variants.svelte'
import VariantPresenter from './components/VariantPresenter.svelte'
import { Doc } from '@anticrm/core'
import { Resources } from '@anticrm/platform'
import { showPopup } from '@anticrm/ui'
import Categories from './components/Categories.svelte'
import CategoryPresenter from './components/CategoryPresenter.svelte'
import CreateCategory from './components/CreateCategory.svelte'
import EditProduct from './components/EditProduct.svelte'
import ProductPresenter from './components/ProductPresenter.svelte'
import Products from './components/Products.svelte'
import VariantPresenter from './components/VariantPresenter.svelte'
import Variants from './components/Variants.svelte'
async function createSubcategory (object: Doc): Promise<void> {
showPopup(CreateCategory, { attachedTo: object._id })

View File

@ -14,9 +14,9 @@
// limitations under the License.
//
import inventory, { inventoryId } from '@anticrm/inventory'
import { IntlString, mergeIds, StatusCode } from '@anticrm/platform'
import inventory, { inventoryId } from '@anticrm/inventory'
export default mergeIds(inventoryId, inventory, {
status: {

View File

@ -14,7 +14,7 @@
// limitations under the License.
//
import { AttachedDoc, Class, Ref, Space } from '@anticrm/core'
import { AttachedDoc, Class, Doc, Ref, Space } from '@anticrm/core'
import type { Asset, Plugin } from '@anticrm/platform'
import { plugin } from '@anticrm/platform'
@ -70,6 +70,9 @@ const inventory = plugin(inventoryId, {
space: {
Category: '' as Ref<Space>,
Products: '' as Ref<Space>
},
app: {
Inventory: '' as Ref<Doc>
}
})

View File

@ -40,6 +40,8 @@
"@anticrm/contact": "~0.6.2",
"@anticrm/view": "~0.6.0",
"@anticrm/task": "~0.6.0",
"@anticrm/login": "~0.6.1",
"@anticrm/workbench": "~0.6.1",
"@anticrm/view-resources": "~0.6.0",
"@anticrm/attachment-resources": "~0.6.0",
"@anticrm/contact-resources": "~0.6.0",

View File

@ -21,9 +21,9 @@ import Customers from './components/Customers.svelte'
import EditLead from './components/EditLead.svelte'
import KanbanCard from './components/KanbanCard.svelte'
import LeadPresenter from './components/LeadPresenter.svelte'
import Leads from './components/Leads.svelte'
import LeadsPresenter from './components/LeadsPresenter.svelte'
import TemplatesIcon from './components/TemplatesIcon.svelte'
import Leads from './components/Leads.svelte'
export default async (): Promise<Resources> => ({
component: {

View File

@ -13,9 +13,8 @@
// limitations under the License.
//
import { IntlString, mergeIds } from '@anticrm/platform'
import lead, { leadId } from '@anticrm/lead'
import { IntlString, mergeIds } from '@anticrm/platform'
import { AnyComponent } from '@anticrm/ui'
export default mergeIds(leadId, lead, {

View File

@ -15,7 +15,7 @@
//
import type { Contact } from '@anticrm/contact'
import type { Class, Ref } from '@anticrm/core'
import type { Class, Doc, Ref } from '@anticrm/core'
import { Mixin } from '@anticrm/core'
import type { Asset, Plugin } from '@anticrm/platform'
import { plugin } from '@anticrm/platform'
@ -57,6 +57,9 @@ export const leadId = 'lead' as Plugin
* @public
*/
const lead = plugin(leadId, {
app: {
Lead: '' as Ref<Doc>
},
class: {
Lead: '' as Ref<Class<Lead>>,
Funnel: '' as Ref<Class<Funnel>>

View File

@ -37,6 +37,7 @@ export const loginId = 'login' as Plugin
export default plugin(loginId, {
metadata: {
AccountsUrl: '' as Asset,
FrontUrl: '' as Asset,
UploadUrl: '' as Asset,
TelegramUrl: '' as Asset,
GmailUrl: '' as Asset,

View File

@ -3,6 +3,9 @@
"LastView": "Last View",
"Notification": "Notification",
"Notifications": "Notifications",
"NoNotifications": "No notifications"
"NoNotifications": "No notifications",
"MentionNotification": "Mentioned",
"EmailNotification": "by email",
"PlatformNotification": "in platform"
}
}

View File

@ -40,6 +40,7 @@
"@anticrm/activity-resources": "~0.6.0",
"@anticrm/activity": "~0.6.0",
"@anticrm/contact": "~0.6.0",
"just-clone": "^3.2.1",
"@anticrm/core": "~0.6.11"
}
}

View File

@ -0,0 +1,135 @@
<!--
// Copyright © 2020, 2021 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.
-->
<script lang="ts">
import { getCurrentAccount,Ref,Space,Tx, TxProcessor } from '@anticrm/core'
import type { NotificationProvider,NotificationSetting,NotificationType } from '@anticrm/notification'
import presentation,{ createQuery,getClient } from '@anticrm/presentation'
import { Button,Grid,Icon,Label,ToggleWithLabel } from '@anticrm/ui'
import notification from '../plugin'
import justClone from 'just-clone'
const accountId = getCurrentAccount()._id
const typeQuery = createQuery()
const providersQuery = createQuery()
const settingsQuery = createQuery()
const client = getClient()
const space = accountId as string as Ref<Space>
let types: NotificationType[] = []
let providers: NotificationProvider[] = []
let settings: Map<Ref<NotificationType>, Map<Ref<NotificationProvider>, NotificationSetting>> = new Map<Ref<NotificationType>, Map<Ref<NotificationProvider>, NotificationSetting>>()
let oldSettings: Map<Ref<NotificationType>, Map<Ref<NotificationProvider>, NotificationSetting>> = new Map<Ref<NotificationType>, Map<Ref<NotificationProvider>, NotificationSetting>>()
typeQuery.query(notification.class.NotificationType, {}, (res) => (types = res))
providersQuery.query(notification.class.NotificationProvider, { }, (res) => (providers = res))
settingsQuery.query(notification.class.NotificationSetting, { space }, (res) => {
settings = convertToMap(res)
oldSettings = convertToMap(justClone(res))
})
function convertToMap (settings: NotificationSetting[]): Map<Ref<NotificationType>, Map<Ref<NotificationProvider>, NotificationSetting>> {
const result = new Map<Ref<NotificationType>, Map<Ref<NotificationProvider>, NotificationSetting>>()
for (const setting of settings) {
setSetting(result, setting)
}
return result
}
function change (type: Ref<NotificationType>, provider: Ref<NotificationProvider>, value: boolean): void {
const current = getSetting(settings, type, provider)
if (current === undefined) {
const tx = client.txFactory.createTxCreateDoc(notification.class.NotificationSetting, space, {
provider,
type,
enabled: value
})
const setting = TxProcessor.createDoc2Doc(tx)
setSetting(settings, setting)
} else {
current.enabled = value
}
}
function getSetting (map: Map<Ref<NotificationType>, Map<Ref<NotificationProvider>, NotificationSetting>>, type: Ref<NotificationType>, provider: Ref<NotificationProvider>): NotificationSetting | undefined {
const typeMap = map.get(type)
if (typeMap === undefined) return
return typeMap.get(provider)
}
function setSetting (result: Map<Ref<NotificationType>, Map<Ref<NotificationProvider>, NotificationSetting>>, setting: NotificationSetting): void {
let typeMap = result.get(setting.type)
if (typeMap === undefined) {
typeMap = new Map<Ref<NotificationProvider>, NotificationSetting>()
result.set(setting.type, typeMap)
}
typeMap.set(setting.provider, setting)
}
async function save (): Promise<void> {
const promises: Promise<any>[] = []
for (const type of settings.values()) {
for (const setting of type.values()) {
const old = getSetting(oldSettings, setting.type, setting.provider)
if (old === undefined) {
promises.push(client.createDoc(setting._class, setting.space, setting))
} else if (old.enabled !== setting.enabled) {
promises.push(client.updateDoc(old._class, old.space, old._id, {
enabled: setting.enabled
}))
}
}
}
await Promise.all(promises)
}
$: column = providers.length + 1
</script>
<div class="antiComponent">
<div class="ac-header short divide">
<div class="ac-header__icon"><Icon icon={notification.icon.Notifications} size={'medium'} /></div>
<div class="ac-header__title"><Label label={notification.string.Notifications}/></div>
</div>
<div class="flex-row-streach flex-grow container">
<div class="flex-col flex-grow">
<div class="flex-grow">
<Grid {column} columnGap={5} rowGap={1.5} >
{#each types as type (type._id)}
<Label label={type.label} />
{#each providers as provider (provider._id)}
<ToggleWithLabel label={provider.label} on={getSetting(settings, type._id, provider._id)?.enabled} on:change={(e) => change(type._id, provider._id, e.detail)} />
{/each}
{/each}
</Grid>
</div>
<div class="flex-row-reverse">
<Button
label={presentation.string.Save}
primary
on:click={() => {
save()
}}
/>
</div>
</div>
</div>
</div>
<style lang="scss">
.container {
padding: 3rem;
}
</style>

View File

@ -16,11 +16,13 @@
import { Resources } from '@anticrm/platform'
import NotificationsPopup from './components/NotificationsPopup.svelte'
import NotificationSettings from './components/NotificationSettings.svelte'
export * from './utils'
export default async (): Promise<Resources> => ({
component: {
NotificationsPopup
NotificationsPopup,
NotificationSettings
}
})

View File

@ -35,15 +35,49 @@ export interface Notification extends AttachedDoc {
status: NotificationStatus
}
/**
* @public
*/
export interface EmailNotification extends Doc {
sender: string
receivers: string[]
subject: string
text: string
html?: string
status: 'new' | 'sent'
}
/**
* @public
*/
export enum NotificationStatus {
New,
EmailSent,
Read
}
/**
* @public
*/
export interface NotificationType extends Doc {
label: IntlString
}
/**
* @public
*/
export interface NotificationProvider extends Doc {
label: IntlString
}
/**
* @public
*/
export interface NotificationSetting extends Doc {
type: Ref<NotificationType>
provider: Ref<NotificationProvider>
enabled: boolean
}
/**
* @public
*/
@ -55,7 +89,17 @@ export const notificationId = 'notification' as Plugin
const notification = plugin(notificationId, {
class: {
LastView: '' as Ref<Class<LastView>>,
Notification: '' as Ref<Class<Notification>>
Notification: '' as Ref<Class<Notification>>,
EmailNotification: '' as Ref<Class<EmailNotification>>,
NotificationType: '' as Ref<Class<NotificationType>>,
NotificationProvider: '' as Ref<Class<NotificationProvider>>,
NotificationSetting: '' as Ref<Class<NotificationSetting>>
},
ids: {
MentionNotification: '' as Ref<NotificationType>,
PlatformNotification: '' as Ref<NotificationProvider>,
EmailNotification: '' as Ref<NotificationProvider>,
NotificationSettings: '' as Ref<Doc>
},
component: {
NotificationsPopup: '' as AnyComponent

View File

@ -41,6 +41,7 @@
"@anticrm/chunter": "~0.6.0",
"@anticrm/contact": "~0.6.2",
"@anticrm/login": "~0.6.1",
"@anticrm/workbench": "~0.6.1",
"deep-equal": "^2.0.5",
"@anticrm/panel": "~0.6.0",
"@anticrm/activity": "~0.6.0",

View File

@ -14,8 +14,8 @@
//
import type { Client, Doc } from '@anticrm/core'
import { IntlString, OK, Resources, Severity, Status, translate } from '@anticrm/platform'
import { Applicant } from '@anticrm/recruit'
import { getMetadata, IntlString, OK, Resources, Severity, Status, translate } from '@anticrm/platform'
import { Applicant, Vacancy } from '@anticrm/recruit'
import { showPopup } from '@anticrm/ui'
import ApplicationPresenter from './components/ApplicationPresenter.svelte'
import Applications from './components/Applications.svelte'
@ -34,6 +34,9 @@ import task from '@anticrm/task'
import ApplicationItem from './components/ApplicationItem.svelte'
import VacancyPresenter from './components/VacancyPresenter.svelte'
import SkillsView from './components/SkillsView.svelte'
import login from '@anticrm/login'
import workbench from '@anticrm/workbench'
import view from '@anticrm/view'
async function createApplication (object: Doc): Promise<void> {
showPopup(CreateApplication, { candidate: object._id, preserveCandidate: true })

View File

@ -17,7 +17,6 @@ import { Ref, Space } from '@anticrm/core'
import type { IntlString, StatusCode } from '@anticrm/platform'
import { mergeIds } from '@anticrm/platform'
import recruit, { recruitId } from '@anticrm/recruit'
import { AnyComponent } from '@anticrm/ui'
export default mergeIds(recruitId, recruit, {
status: {
@ -63,8 +62,5 @@ export default mergeIds(recruitId, recruit, {
},
space: {
CandidatesPublic: '' as Ref<Space>
},
component: {
EditVacancy: '' as AnyComponent
}
})

View File

@ -30,6 +30,7 @@
"@anticrm/core": "~0.6.11",
"@anticrm/contact": "~0.6.2",
"@anticrm/chunter": "~0.6.0",
"@anticrm/task": "~0.6.0"
"@anticrm/task": "~0.6.0",
"@anticrm/ui": "~0.6.0"
}
}

View File

@ -14,10 +14,11 @@
//
import type { Person } from '@anticrm/contact'
import type { Class, Mixin, Ref, Space, Timestamp } from '@anticrm/core'
import type { Class, Doc, Mixin, Ref, Space, Timestamp } from '@anticrm/core'
import type { Asset, Plugin } from '@anticrm/platform'
import { plugin } from '@anticrm/platform'
import type { KanbanTemplateSpace, SpaceWithStates, Task } from '@anticrm/task'
import { AnyComponent } from '@anticrm/ui'
/**
* @public
@ -64,6 +65,9 @@ export const recruitId = 'recruit' as Plugin
* @public
*/
const recruit = plugin(recruitId, {
app: {
Recruit: '' as Ref<Doc>
},
class: {
Applicant: '' as Ref<Class<Applicant>>,
Candidates: '' as Ref<Class<Candidates>>,
@ -72,6 +76,9 @@ const recruit = plugin(recruitId, {
mixin: {
Candidate: '' as Ref<Mixin<Candidate>>
},
component: {
EditVacancy: '' as AnyComponent
},
icon: {
RecruitApplication: '' as Asset,
Vacancy: '' as Asset,

View File

@ -15,32 +15,35 @@
//
import { Class, Client, Doc, Ref } from '@anticrm/core'
import { IntlString, Resources, translate } from '@anticrm/platform'
import login from '@anticrm/login'
import { getMetadata, IntlString, Resources, translate } from '@anticrm/platform'
import { getClient, MessageBox, ObjectSearchResult } from '@anticrm/presentation'
import task, { SpaceWithStates, Task, TodoItem } from '@anticrm/task'
import { Issue, SpaceWithStates, Task, TodoItem } from '@anticrm/task'
import task from './plugin'
import { showPopup } from '@anticrm/ui'
import TaskItem from './components/TaskItem.svelte'
import view from '@anticrm/view'
import workbench from '@anticrm/workbench'
import CreateProject from './components/CreateProject.svelte'
import CreateTask from './components/CreateTask.svelte'
import EditIssue from './components/EditIssue.svelte'
import KanbanTemplateEditor from './components/kanban/KanbanTemplateEditor.svelte'
import KanbanTemplateSelector from './components/kanban/KanbanTemplateSelector.svelte'
import KanbanView from './components/kanban/KanbanView.svelte'
import KanbanCard from './components/KanbanCard.svelte'
import DoneStatePresenter from './components/state/DoneStatePresenter.svelte'
import DoneStateEditor from './components/state/DoneStateEditor.svelte'
import DoneStatePresenter from './components/state/DoneStatePresenter.svelte'
import EditStatuses from './components/state/EditStatuses.svelte'
import StateEditor from './components/state/StateEditor.svelte'
import StatePresenter from './components/state/StatePresenter.svelte'
import StatusTableView from './components/StatusTableView.svelte'
import TaskHeader from './components/TaskHeader.svelte'
import TaskItem from './components/TaskItem.svelte'
import TaskPresenter from './components/TaskPresenter.svelte'
import TemplatesIcon from './components/TemplatesIcon.svelte'
import TodoItemPresenter from './components/todos/TodoItemPresenter.svelte'
import Todos from './components/todos/Todos.svelte'
import TodoStatePresenter from './components/todos/TodoStatePresenter.svelte'
import KanbanTemplateEditor from './components/kanban/KanbanTemplateEditor.svelte'
import KanbanTemplateSelector from './components/kanban/KanbanTemplateSelector.svelte'
async function createTask (object: Doc): Promise<void> {
showPopup(CreateTask, { parent: object._id, space: object.space })
}

View File

@ -29,7 +29,6 @@ import type { Asset, IntlString, Plugin } from '@anticrm/platform'
import { plugin } from '@anticrm/platform'
import type { AnyComponent } from '@anticrm/ui'
import { ViewletDescriptor } from '@anticrm/view'
import { genRanks } from './utils'
/**
@ -176,6 +175,9 @@ export const taskId = 'task' as Plugin
* @public
*/
const task = plugin(taskId, {
app: {
Tasks: '' as Ref<Doc>
},
mixin: {
KanbanCard: '' as Ref<Mixin<KanbanCard>>
},

View File

@ -88,6 +88,20 @@ export interface ActionTarget<T extends Doc = Doc> extends Doc {
query?: DocumentQuery<T>
}
/**
* @public
*/
export interface HTMLPresenter extends Class<Doc> {
presenter: Resource<(doc: Doc) => string>
}
/**
* @public
*/
export interface TextPresenter extends Class<Doc> {
presenter: Resource<(doc: Doc) => string>
}
/**
* @public
*/
@ -164,7 +178,9 @@ const view = plugin(viewId, {
ObjectEditorHeader: '' as Ref<Mixin<ObjectEditorHeader>>,
ObjectValidator: '' as Ref<Mixin<ObjectValidator>>,
ObjectFactory: '' as Ref<Mixin<ObjectFactory>>,
ObjectDDParticipant: '' as Ref<ObjectDDParticipant>
ObjectDDParticipant: '' as Ref<ObjectDDParticipant>,
HTMLPresenter: '' as Ref<Mixin<HTMLPresenter>>,
TextPresenter: '' as Ref<Mixin<TextPresenter>>
},
class: {
ViewletDescriptor: '' as Ref<Class<ViewletDescriptor>>,

View File

@ -205,7 +205,7 @@
notification.class.Notification,
{
attachedTo: (getCurrentAccount() as EmployeeAccount).employee,
status: { $in: [NotificationStatus.New, NotificationStatus.EmailSent] }
status: NotificationStatus.New
},
(res) => {
hasNotification = res.length > 0

View File

@ -723,7 +723,7 @@
},
{
"packageName": "@anticrm/server-attachment",
"projectFolder": "server/attachment",
"projectFolder": "server-plugins/attachment",
"shouldPublish": true
},
{
@ -733,12 +733,12 @@
},
{
"packageName": "@anticrm/server-attachment-resources",
"projectFolder": "server/attachment-resources",
"projectFolder": "server-plugins/attachment-resources",
"shouldPublish": true
},
{
"packageName": "@anticrm/server-contact",
"projectFolder": "server/contact",
"projectFolder": "server-plugins/contact",
"shouldPublish": true
},
{
@ -748,7 +748,7 @@
},
{
"packageName": "@anticrm/server-contact-resources",
"projectFolder": "server/contact-resources",
"projectFolder": "server-plugins/contact-resources",
"shouldPublish": true
},
{
@ -1008,7 +1008,7 @@
},
{
"packageName": "@anticrm/server-notification",
"projectFolder": "server/notification",
"projectFolder": "server-plugins/notification",
"shouldPublish": true
},
{
@ -1018,7 +1018,7 @@
},
{
"packageName": "@anticrm/server-notification-resources",
"projectFolder": "server/notification-resources",
"projectFolder": "server-plugins/notification-resources",
"shouldPublish": true
},
{
@ -1041,5 +1041,80 @@
"projectFolder": "models/tags",
"shouldPublish": true
},
{
"packageName": "@anticrm/server-chunter",
"projectFolder": "server-plugins/chunter",
"shouldPublish": true
},
{
"packageName": "@anticrm/model-server-chunter",
"projectFolder": "models/server-chunter",
"shouldPublish": true
},
{
"packageName": "@anticrm/server-chunter-resources",
"projectFolder": "server-plugins/chunter-resources",
"shouldPublish": true
},
{
"packageName": "@anticrm/server-inventory",
"projectFolder": "server-plugins/inventory",
"shouldPublish": true
},
{
"packageName": "@anticrm/model-server-inventory",
"projectFolder": "models/server-inventory",
"shouldPublish": true
},
{
"packageName": "@anticrm/server-inventory-resources",
"projectFolder": "server-plugins/inventory-resources",
"shouldPublish": true
},
{
"packageName": "@anticrm/server-lead",
"projectFolder": "server-plugins/lead",
"shouldPublish": true
},
{
"packageName": "@anticrm/model-server-lead",
"projectFolder": "models/server-lead",
"shouldPublish": true
},
{
"packageName": "@anticrm/server-lead-resources",
"projectFolder": "server-plugins/lead-resources",
"shouldPublish": true
},
{
"packageName": "@anticrm/server-recruit",
"projectFolder": "server-plugins/recruit",
"shouldPublish": true
},
{
"packageName": "@anticrm/model-server-recruit",
"projectFolder": "models/server-recruit",
"shouldPublish": true
},
{
"packageName": "@anticrm/server-recruit-resources",
"projectFolder": "server-plugins/recruit-resources",
"shouldPublish": true
},
{
"packageName": "@anticrm/server-task",
"projectFolder": "server-plugins/task",
"shouldPublish": true
},
{
"packageName": "@anticrm/model-server-task",
"projectFolder": "models/server-task",
"shouldPublish": true
},
{
"packageName": "@anticrm/server-task-resources",
"projectFolder": "server-plugins/task-resources",
"shouldPublish": true
},
]
}

View File

@ -0,0 +1,4 @@
*
!/lib/**
!CHANGELOG.md
/lib/**/__tests__/

Some files were not shown because too many files have changed in this diff Show More