mirror of
https://github.com/hcengineering/platform.git
synced 2024-11-22 03:14:40 +03:00
UBERF-4632: refactor activity classes structure (#4190)
Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com>
This commit is contained in:
parent
d54422d737
commit
2bf1a03907
@ -248,6 +248,9 @@ dependencies:
|
||||
'@rush-temp/model-request':
|
||||
specifier: file:./projects/model-request.tgz
|
||||
version: file:projects/model-request.tgz(svelte@4.2.5)(typescript@5.2.2)
|
||||
'@rush-temp/model-server-activity':
|
||||
specifier: file:./projects/model-server-activity.tgz
|
||||
version: file:projects/model-server-activity.tgz(svelte@4.2.5)(typescript@5.2.2)
|
||||
'@rush-temp/model-server-attachment':
|
||||
specifier: file:./projects/model-server-attachment.tgz
|
||||
version: file:projects/model-server-attachment.tgz(svelte@4.2.5)(typescript@5.2.2)
|
||||
@ -419,6 +422,12 @@ dependencies:
|
||||
'@rush-temp/server':
|
||||
specifier: file:./projects/server.tgz
|
||||
version: file:projects/server.tgz(esbuild@0.16.17)(svelte@4.2.5)
|
||||
'@rush-temp/server-activity':
|
||||
specifier: file:./projects/server-activity.tgz
|
||||
version: file:projects/server-activity.tgz(esbuild@0.16.17)(svelte@4.2.5)(ts-node@10.9.1)
|
||||
'@rush-temp/server-activity-resources':
|
||||
specifier: file:./projects/server-activity-resources.tgz
|
||||
version: file:projects/server-activity-resources.tgz(@types/node@16.11.68)(esbuild@0.16.17)(svelte@4.2.5)(ts-node@10.9.1)
|
||||
'@rush-temp/server-attachment':
|
||||
specifier: file:./projects/server-attachment.tgz
|
||||
version: file:projects/server-attachment.tgz(esbuild@0.16.17)(svelte@4.2.5)(ts-node@10.9.1)
|
||||
@ -17385,7 +17394,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/activity-resources.tgz(@types/node@16.11.68)(esbuild@0.16.17)(postcss-load-config@4.0.1)(postcss@8.4.31)(ts-node@10.9.1):
|
||||
resolution: {integrity: sha512-DVHj9i9C5lbJ32UBOF+g2PFNkto0xeOjjTO3q0lfOUw/pyRji3eDOomUlQowQF/Ssfj2ENj2zbVf0qfwkajqFg==, tarball: file:projects/activity-resources.tgz}
|
||||
resolution: {integrity: sha512-F4DXewrthjnPi36RuMEgym+/VACMDSyCmP8QvXHUPvwu7x113/rtbhzOhSPSaj+jwZCzMiKTKXOU68B8Q1j+fw==, tarball: file:projects/activity-resources.tgz}
|
||||
id: file:projects/activity-resources.tgz
|
||||
name: '@rush-temp/activity-resources'
|
||||
version: 0.0.0
|
||||
@ -17431,7 +17440,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/activity.tgz(@types/node@16.11.68)(esbuild@0.16.17)(svelte@4.2.5)(ts-node@10.9.1):
|
||||
resolution: {integrity: sha512-h7I/WsfTBnPccjlbHUvZmZk8FQLucSPZ7kHmei9tY1rqKMX6MgDYnRN5sDQlrcKOJSwxoGRBK63OU1L2WBnzZg==, tarball: file:projects/activity.tgz}
|
||||
resolution: {integrity: sha512-DwKYrRwF0ueeZMJ/FS/LEg+r/HhwqApV4K8cCmy0snR8ANFai7ySCs+4kswontH7boYtqqYXPc0Mh3GbJt9PKw==, tarball: file:projects/activity.tgz}
|
||||
id: file:projects/activity.tgz
|
||||
name: '@rush-temp/activity'
|
||||
version: 0.0.0
|
||||
@ -17529,7 +17538,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/attachment-resources.tgz(@types/node@16.11.68)(esbuild@0.16.17)(postcss-load-config@4.0.1)(postcss@8.4.31)(ts-node@10.9.1):
|
||||
resolution: {integrity: sha512-QPfn6dtMu8QvYwO0UoayUlCuk6qMfyOo836hndO4KKPvt71Q+1uTw5c2Q4vMNckG50tOH65S/gmTuPuNm9DQug==, tarball: file:projects/attachment-resources.tgz}
|
||||
resolution: {integrity: sha512-+Zr0eBeCAPnbhW+YAVY53/OQ0IY+ORNdIJXxWONDojcEvg7ANDm7EL/P/fyXMC6zst21/rJK/Wr+QDSK0zxQXA==, tarball: file:projects/attachment-resources.tgz}
|
||||
id: file:projects/attachment-resources.tgz
|
||||
name: '@rush-temp/attachment-resources'
|
||||
version: 0.0.0
|
||||
@ -17690,7 +17699,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/bitrix.tgz(@types/node@16.11.68)(esbuild@0.16.17)(svelte@4.2.5)(ts-node@10.9.1):
|
||||
resolution: {integrity: sha512-KSTAiioVIT5On4ssg74B1eLoBrcbAMC7iO6LIoIIvVZu9bftEF+3jJ443j4x9mdgUPABKo/c31bRwLNxl+K+Lw==, tarball: file:projects/bitrix.tgz}
|
||||
resolution: {integrity: sha512-b6hu02DfbmNCgR4rJ3btQJeOMKvH5Ce/+ctqexUT48rqdVQCcETVqLM7OU1oUKekwU5wRpiW5lhwXKeYqwh5Sw==, tarball: file:projects/bitrix.tgz}
|
||||
id: file:projects/bitrix.tgz
|
||||
name: '@rush-temp/bitrix'
|
||||
version: 0.0.0
|
||||
@ -17979,7 +17988,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/chunter-resources.tgz(@types/node@16.11.68)(esbuild@0.16.17)(postcss-load-config@4.0.1)(postcss@8.4.31)(ts-node@10.9.1):
|
||||
resolution: {integrity: sha512-gjwoANHcUvGbxTXLdl0tFOzdiSsOMVy7Jm2zzArXY9+EVyrURwq2qEjgnA36KnkWHd7mUEpEUJBd8MWndKCJgA==, tarball: file:projects/chunter-resources.tgz}
|
||||
resolution: {integrity: sha512-IW9B1wnQQ6r603qhRGUI498gj5Cn4qsdnRmbd/z6F+6nYCCw2vfYDY1SihlRZBfs31U8f6qgJNov5rGhjhv5ZQ==, tarball: file:projects/chunter-resources.tgz}
|
||||
id: file:projects/chunter-resources.tgz
|
||||
name: '@rush-temp/chunter-resources'
|
||||
version: 0.0.0
|
||||
@ -18026,7 +18035,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/chunter.tgz(@types/node@16.11.68)(esbuild@0.16.17)(svelte@4.2.5)(ts-node@10.9.1):
|
||||
resolution: {integrity: sha512-B2Pz7GnpUA31Hb83fZQ1q9X6/iOcEkczKPZQKCD1Nrht24HS9Z6i7SE72vXcUPFsdX0UPaSmla7CI0P3oKc/Mg==, tarball: file:projects/chunter.tgz}
|
||||
resolution: {integrity: sha512-smJiIU6iEoGU0Oz30Mor08eJ2/ZIlXH04X79HJqzD9q1rIBvq4KLR+iNv9j4TjExVNpehJYuTq2zqNBgBGSM9w==, tarball: file:projects/chunter.tgz}
|
||||
id: file:projects/chunter.tgz
|
||||
name: '@rush-temp/chunter'
|
||||
version: 0.0.0
|
||||
@ -18205,7 +18214,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/contact-resources.tgz(@types/node@16.11.68)(esbuild@0.16.17)(postcss-load-config@4.0.1)(postcss@8.4.31)(ts-node@10.9.1):
|
||||
resolution: {integrity: sha512-NNyNiZh6k3d0hvff3u/ACdOhijULgmE+SxgjNWdVyptGY0/IP8uLu2CNwDSnq3M5j+yZ4gywPIZkKdPZ4FG5IQ==, tarball: file:projects/contact-resources.tgz}
|
||||
resolution: {integrity: sha512-4UeqrLhyCcUboXTol2cKsbL3WlG4SA8CWSDhlgIwEmAC3UQqowbGnHmjMkf+pDree4znfESF0Sch1pho04SDDg==, tarball: file:projects/contact-resources.tgz}
|
||||
id: file:projects/contact-resources.tgz
|
||||
name: '@rush-temp/contact-resources'
|
||||
version: 0.0.0
|
||||
@ -18614,7 +18623,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/generator.tgz(bufferutil@4.0.7)(svelte@4.2.5):
|
||||
resolution: {integrity: sha512-WqJiSVlaQiwgbKKdFJwEQPa2Ush2vKE2fpdG7g7YHA9dutOf15zJRRmsHh2tOPB3uXMK9Zuwt/6Z86VaCtLcvQ==, tarball: file:projects/generator.tgz}
|
||||
resolution: {integrity: sha512-bCdu7ucZf1ZuL61Q87kjGOzabTM8XkD11vvWNi7o7DPDr8ud3/aHp6y4SICqjMbUhrl/2ZEgLkUPYVCvfPifqw==, tarball: file:projects/generator.tgz}
|
||||
id: file:projects/generator.tgz
|
||||
name: '@rush-temp/generator'
|
||||
version: 0.0.0
|
||||
@ -19405,7 +19414,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/model-activity.tgz(svelte@4.2.5)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-h99S1TU2W/00QUaigRyLYFQRVkDEVgftPYEQQ9rDFBriWC+jXu7A0ki5kn2DBOhMXElrVt29fH6u1apC3VSn/Q==, tarball: file:projects/model-activity.tgz}
|
||||
resolution: {integrity: sha512-Fx/yJE88VjyIbfkipf4pXcHNPE7mis0NAl7OuOnSpHfDwrIwmroHlqiK39MFkhdaGNG7jXq0mS5IS6E3/Gp7Qg==, tarball: file:projects/model-activity.tgz}
|
||||
id: file:projects/model-activity.tgz
|
||||
name: '@rush-temp/model-activity'
|
||||
version: 0.0.0
|
||||
@ -19426,7 +19435,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/model-all.tgz(svelte@4.2.5)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-Rkcl3FSS5XChGZeskMQWLQDsT0AH9qgeWXwmIdIZs13ZlCjEZnPdRyRu354eRIFbwiY9f0atB/Oesw1RlL5R0A==, tarball: file:projects/model-all.tgz}
|
||||
resolution: {integrity: sha512-PEl4zAGjvSsQ5stSRUuj2PYcZ0BdWTkxyaJNP63dbX4U6QA5sf7BuXamJRgETTD74jA40pGRXUAMnprS6t9z4w==, tarball: file:projects/model-all.tgz}
|
||||
id: file:projects/model-all.tgz
|
||||
name: '@rush-temp/model-all'
|
||||
version: 0.0.0
|
||||
@ -19451,7 +19460,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/model-attachment.tgz(svelte@4.2.5)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-ScJBJ4HDMgGndwGTTm/BcYC2YRSdWn8L2OgZkWtWL4B5BtcKOGoiA5u9DZkov/zNHquW35XsT32zY2zCxpCqXQ==, tarball: file:projects/model-attachment.tgz}
|
||||
resolution: {integrity: sha512-tfIKh4gsy4ZnW70ClMfiKnGFIOz6S/vrzhJL7/Duz5CyR74+8woJjkXWS5iEO6d8XeuC1T3mpWVg2wb2FFLhmg==, tarball: file:projects/model-attachment.tgz}
|
||||
id: file:projects/model-attachment.tgz
|
||||
name: '@rush-temp/model-attachment'
|
||||
version: 0.0.0
|
||||
@ -19535,7 +19544,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/model-chunter.tgz(svelte@4.2.5)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-krEyc8zzxs/qe5tQdmEK6rzvW/unCd4dl6VyVev0QPucCbW2KAsT6jSTgQx99RoG4qL5bDuNpZQVeKPJ4mVZVg==, tarball: file:projects/model-chunter.tgz}
|
||||
resolution: {integrity: sha512-dKEGvo+qbnjpaBnAkCoQp5V+DRidHKAnUkaxpM87AVMf86KgbMXyauA9I5MMsiYxntETGbYKvtm+t86WHUKvsw==, tarball: file:projects/model-chunter.tgz}
|
||||
id: file:projects/model-chunter.tgz
|
||||
name: '@rush-temp/model-chunter'
|
||||
version: 0.0.0
|
||||
@ -19556,7 +19565,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/model-contact.tgz(svelte@4.2.5)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-L8P7WOkR+5RqHAuVB+TTReXzNT3c2ZIEEACc6/6QG1Y7dRyg4tUAlVJC2dZsJDx3seIkT4x1K33MdQZUqZ8vng==, tarball: file:projects/model-contact.tgz}
|
||||
resolution: {integrity: sha512-M46mpKqdQgbjeeHdXvxnczaR0jNyeeeCjNeIHZKbei23cva8BKI9X2CPgAKtR3UtMlpW3WMjES0YaYllG4XSzw==, tarball: file:projects/model-contact.tgz}
|
||||
id: file:projects/model-contact.tgz
|
||||
name: '@rush-temp/model-contact'
|
||||
version: 0.0.0
|
||||
@ -19621,7 +19630,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/model-hr.tgz(svelte@4.2.5)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-XAFnodBxPnnUfZ6BoXhKfgOsZdorvnDHcD4SB4RcBuxCaiqEcGvwLIM8Ju1fRS9ve8Vw8vYID8DDV3SHG0zUcw==, tarball: file:projects/model-hr.tgz}
|
||||
resolution: {integrity: sha512-UBeHLgRS2KIY+XTo/250tjhfqPD7zLv3cBGLK2FcV0hV+X/a6/6prm5d3NvK1vtO5TLwXmKRbws2Ceu1TlqlHA==, tarball: file:projects/model-hr.tgz}
|
||||
id: file:projects/model-hr.tgz
|
||||
name: '@rush-temp/model-hr'
|
||||
version: 0.0.0
|
||||
@ -19642,7 +19651,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/model-inventory.tgz(svelte@4.2.5)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-yeVONwzUERSl/byljh8wOhy3bIrJtgDrVm8acBe3labVP1c0N+OZI5hKw8vuNwit0eZfWrSN7XROBq1J/D4lqA==, tarball: file:projects/model-inventory.tgz}
|
||||
resolution: {integrity: sha512-qYr/7r2WlSUcUtcN3oWdUrPd6uyTx8JiKjpsbFOX+vcqTZpZdhDQJSswbk6g5NSdw7MsZfFoA7l4h9vCXI0OIg==, tarball: file:projects/model-inventory.tgz}
|
||||
id: file:projects/model-inventory.tgz
|
||||
name: '@rush-temp/model-inventory'
|
||||
version: 0.0.0
|
||||
@ -19663,7 +19672,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/model-lead.tgz(svelte@4.2.5)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-bWWfPoFmx7IpwRci83NyRUA5Eb3Cq4UXlXbMQUZo8oEcaslbN+6r720qxt6UrbInutM+FKG5H/O0LVh3vebEXQ==, tarball: file:projects/model-lead.tgz}
|
||||
resolution: {integrity: sha512-WYB9YatMv90U6eoANMNLyRGiiggqyG2e0R8X8HlKTQ0fuuvuC5WXCJb+cJpobKbPTLiFKQ/yw2tHKjiXxgzyQA==, tarball: file:projects/model-lead.tgz}
|
||||
id: file:projects/model-lead.tgz
|
||||
name: '@rush-temp/model-lead'
|
||||
version: 0.0.0
|
||||
@ -19747,7 +19756,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/model-recruit.tgz(svelte@4.2.5)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-GhR4U4IsfC7Vf9izqW7yNlHyF3eiG/IhzQBdj44KaHk9nc8Kli4OR/Z0V08M8IIxAVWW1hrkuzw7fTbNZCk6LA==, tarball: file:projects/model-recruit.tgz}
|
||||
resolution: {integrity: sha512-JQlaVZDojvVRJ4gGlmdZBnXGM2vXijUYOuAS06+s4TBrw1JzZ8dLpkVat38F+sys6uSR05sIC9dLU89EyewfLg==, tarball: file:projects/model-recruit.tgz}
|
||||
id: file:projects/model-recruit.tgz
|
||||
name: '@rush-temp/model-recruit'
|
||||
version: 0.0.0
|
||||
@ -19789,6 +19798,27 @@ packages:
|
||||
- typescript
|
||||
dev: false
|
||||
|
||||
file:projects/model-server-activity.tgz(svelte@4.2.5)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-ddPj4Y8/1G2ItDMmgLbaasdkjTTY66I3XKmyV3KfZNjeRq7DJZquF5VG1GM09TpfAkQkLJBJcoHoqtqQ9OgluA==, tarball: file:projects/model-server-activity.tgz}
|
||||
id: file:projects/model-server-activity.tgz
|
||||
name: '@rush-temp/model-server-activity'
|
||||
version: 0.0.0
|
||||
dependencies:
|
||||
'@typescript-eslint/eslint-plugin': 6.11.0(@typescript-eslint/parser@6.11.0)(eslint@8.54.0)(typescript@5.2.2)
|
||||
'@typescript-eslint/parser': 6.11.0(eslint@8.54.0)(typescript@5.2.2)
|
||||
eslint: 8.54.0
|
||||
eslint-config-standard-with-typescript: 40.0.0(@typescript-eslint/eslint-plugin@6.11.0)(eslint-plugin-import@2.28.1)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.54.0)(typescript@5.2.2)
|
||||
eslint-plugin-import: 2.28.1(eslint@8.54.0)
|
||||
eslint-plugin-n: 15.7.0(eslint@8.54.0)
|
||||
eslint-plugin-promise: 6.1.1(eslint@8.54.0)
|
||||
prettier: 3.1.0
|
||||
prettier-plugin-svelte: 3.1.0(prettier@3.1.0)(svelte@4.2.5)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
- svelte
|
||||
- typescript
|
||||
dev: false
|
||||
|
||||
file:projects/model-server-attachment.tgz(svelte@4.2.5)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-n2Qsi8ZMslvChqvzREluoqFZUIn0NKrOini0P+lYqCnQpWdhT5GRUFdcq0uzw5WXSssyh5su2Hv7B9PWmK23pA==, tarball: file:projects/model-server-attachment.tgz}
|
||||
id: file:projects/model-server-attachment.tgz
|
||||
@ -19979,7 +20009,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/model-server-notification.tgz(svelte@4.2.5)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-4F8IILvkrQD0AD9NOXKjHQLO/vEmgqbGAFg97Jg1KSgQQCLTbai0Igh67eP+CQEolOIKNgn2Jy315UlUd+ZmEw==, tarball: file:projects/model-server-notification.tgz}
|
||||
resolution: {integrity: sha512-BmWHvQtuRizjJE87k3thPWrhHJBfOEx1tg62HmPHUMsWxoS6nBKVzTa4zzwFqHPb4tlzBS7S8ux1n5tTwtJiMQ==, tarball: file:projects/model-server-notification.tgz}
|
||||
id: file:projects/model-server-notification.tgz
|
||||
name: '@rush-temp/model-server-notification'
|
||||
version: 0.0.0
|
||||
@ -20000,7 +20030,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/model-server-openai.tgz(svelte@4.2.5)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-F3GyJcngnQm+XiZOom711tSgbyDnxPesEMrF5E99OcAo/OSAuq5FRuQApJIiSvIzxG3OkY5d9xg1fdqa/se27A==, tarball: file:projects/model-server-openai.tgz}
|
||||
resolution: {integrity: sha512-Y1pj31vk0lLKbre1OFF7s/GCeeaybWeJz2OAecowV5DvM4TV6kmhdbzy/Yxm/OpSdSv5eeNQt0NMMg+OhBkPHQ==, tarball: file:projects/model-server-openai.tgz}
|
||||
id: file:projects/model-server-openai.tgz
|
||||
name: '@rush-temp/model-server-openai'
|
||||
version: 0.0.0
|
||||
@ -20273,7 +20303,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/model-task.tgz(svelte@4.2.5)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-/XjIgfOs85WSw9zRSG1qO85SgLU+V0H4BWMSg7bRznAPcikjvgpcItgaNslZZfU7+k/QSyKl+1CF97TdXqH0dQ==, tarball: file:projects/model-task.tgz}
|
||||
resolution: {integrity: sha512-56qSfouGLl0idf3X7qFQVjeAmCT0eg2iDPoErUQzeQpaYgJ2sbI1wp0Czj3hDm83NlA0eiIYkOIgqtHuSULM7w==, tarball: file:projects/model-task.tgz}
|
||||
id: file:projects/model-task.tgz
|
||||
name: '@rush-temp/model-task'
|
||||
version: 0.0.0
|
||||
@ -20357,7 +20387,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/model-tracker.tgz(svelte@4.2.5)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-Y2c+Z8HD/+Y1TM/YunTdFgA7psJjgf6SPFXREQSFXE8Xl+lEFg9UCiQlNDEjuyYEVbwgTWKw96jdTlcZnW7p6w==, tarball: file:projects/model-tracker.tgz}
|
||||
resolution: {integrity: sha512-m+LFruPo0Q57JMp+IgOv3junFBwLU8sDR/rNtCJS/5ZP8RyR95iTVex5LhzuExj1G5vvrpanWyuO8DXoA+DEmg==, tarball: file:projects/model-tracker.tgz}
|
||||
id: file:projects/model-tracker.tgz
|
||||
name: '@rush-temp/model-tracker'
|
||||
version: 0.0.0
|
||||
@ -20567,7 +20597,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/notification.tgz(@types/node@16.11.68)(esbuild@0.16.17)(postcss-load-config@4.0.1)(postcss@8.4.31)(svelte@4.2.5)(ts-node@10.9.1)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-oNhayGgvuFovvHZ4jXtAQg4j2EvLraxND2eh1kFBvkwgIMN7yE6Y2Fu+298r4A6Es69WO9tKicFJN8HXMxnUFw==, tarball: file:projects/notification.tgz}
|
||||
resolution: {integrity: sha512-ar2cczMbBPlEJLB9iMq+CyXItQyV5U1AFGt0XDpV2VtotNt0zGvRX9xNddmhZR3WnfPoiJ+dgK+9zErCsOKUVQ==, tarball: file:projects/notification.tgz}
|
||||
id: file:projects/notification.tgz
|
||||
name: '@rush-temp/notification'
|
||||
version: 0.0.0
|
||||
@ -20611,7 +20641,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/openai.tgz(esbuild@0.16.17)(svelte@4.2.5)(ts-node@10.9.1):
|
||||
resolution: {integrity: sha512-2CuxM12rHcF5scfPqNHy+a6+Zb0f7Ff1Pi2jxSitF3QCVlxjc/RRemwcBBlnbqDVK3OMooYsGhIvFaV5c4b3AA==, tarball: file:projects/openai.tgz}
|
||||
resolution: {integrity: sha512-UHhuZXtZmgJWqGKl5NeenuYo69rrXtEsdind7OXNXM7MRmli9p0l66mX2fqAKgioALCU6nYFqtB1VCSPO4w+OQ==, tarball: file:projects/openai.tgz}
|
||||
id: file:projects/openai.tgz
|
||||
name: '@rush-temp/openai'
|
||||
version: 0.0.0
|
||||
@ -20914,7 +20944,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/pod-server.tgz(svelte@4.2.5):
|
||||
resolution: {integrity: sha512-KcjxWIMH/sM3O1t4304w4M8u6lR5S4s8SD12ffCTtZvtAKcp69LQm+qa4BQyz+rxw3Z5VYWE5A27wOZdk4Zyng==, tarball: file:projects/pod-server.tgz}
|
||||
resolution: {integrity: sha512-7Griqc83Xh/jubUWlO8qA+Cx1+2pjzZgouGteeQZXfCokol6X813h3O5vkKO3fenjg6doFII5zI+DJx1R4jBnQ==, tarball: file:projects/pod-server.tgz}
|
||||
id: file:projects/pod-server.tgz
|
||||
name: '@rush-temp/pod-server'
|
||||
version: 0.0.0
|
||||
@ -21062,7 +21092,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/prod.tgz(bufferutil@4.0.7)(esbuild@0.16.17)(sass@1.69.0)(ts-node@10.9.1)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-x0wE4A9teW8YW6GDoACqUW5C+62fV944pyLE6JdqfVgqQJekR8lraKzh/R+refqKGjiUoZE2oHjj53Jc7w/n/g==, tarball: file:projects/prod.tgz}
|
||||
resolution: {integrity: sha512-AMQUJ8O71HSvI9iGDSj/32iyRs75Qepku6ir0Xq6n2/IwVW4BE3n0Fzhh5tfFTsbPtjL2p4qcA0mmJ0zg28D+g==, tarball: file:projects/prod.tgz}
|
||||
id: file:projects/prod.tgz
|
||||
name: '@rush-temp/prod'
|
||||
version: 0.0.0
|
||||
@ -21365,7 +21395,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/request.tgz(@types/node@16.11.68)(esbuild@0.16.17)(svelte@4.2.5)(ts-node@10.9.1):
|
||||
resolution: {integrity: sha512-zd3j5QUy82jmuGhaPB2ZvI0kR1kE8m0IUdU7ICnsFYfwk1UL3IPYZ1tkAPlYmNwWpYJ16Ll6pkq96hXNXdOIbg==, tarball: file:projects/request.tgz}
|
||||
resolution: {integrity: sha512-RH9Wtmwqxgp8ByBW5JJmLNai8oD3GYCgGJQqQHRJKmoU0h+nOBA6apNFp42PRE0U4GIyD0U88hILq1VILae7aA==, tarball: file:projects/request.tgz}
|
||||
id: file:projects/request.tgz
|
||||
name: '@rush-temp/request'
|
||||
version: 0.0.0
|
||||
@ -21430,6 +21460,70 @@ packages:
|
||||
- ts-node
|
||||
dev: false
|
||||
|
||||
file:projects/server-activity-resources.tgz(@types/node@16.11.68)(esbuild@0.16.17)(svelte@4.2.5)(ts-node@10.9.1):
|
||||
resolution: {integrity: sha512-NJwDYiOdiOtH/MMY/pcUduYzJIBgDHdVwmquqQ82r0Dg39c/Zz8de7At1VrAnvnfpbSSKFZLsBC8GtfGwdIHRA==, tarball: file:projects/server-activity-resources.tgz}
|
||||
id: file:projects/server-activity-resources.tgz
|
||||
name: '@rush-temp/server-activity-resources'
|
||||
version: 0.0.0
|
||||
dependencies:
|
||||
'@types/jest': 29.5.5
|
||||
'@typescript-eslint/eslint-plugin': 6.11.0(@typescript-eslint/parser@6.11.0)(eslint@8.54.0)(typescript@5.2.2)
|
||||
'@typescript-eslint/parser': 6.11.0(eslint@8.54.0)(typescript@5.2.2)
|
||||
eslint: 8.54.0
|
||||
eslint-config-standard-with-typescript: 40.0.0(@typescript-eslint/eslint-plugin@6.11.0)(eslint-plugin-import@2.28.1)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.54.0)(typescript@5.2.2)
|
||||
eslint-plugin-import: 2.28.1(eslint@8.54.0)
|
||||
eslint-plugin-n: 15.7.0(eslint@8.54.0)
|
||||
eslint-plugin-promise: 6.1.1(eslint@8.54.0)
|
||||
jest: 29.7.0(@types/node@16.11.68)(ts-node@10.9.1)
|
||||
prettier: 3.1.0
|
||||
prettier-plugin-svelte: 3.1.0(prettier@3.1.0)(svelte@4.2.5)
|
||||
ts-jest: 29.1.1(esbuild@0.16.17)(jest@29.7.0)(typescript@5.2.2)
|
||||
typescript: 5.2.2
|
||||
transitivePeerDependencies:
|
||||
- '@babel/core'
|
||||
- '@jest/types'
|
||||
- '@types/node'
|
||||
- babel-jest
|
||||
- babel-plugin-macros
|
||||
- esbuild
|
||||
- node-notifier
|
||||
- supports-color
|
||||
- svelte
|
||||
- ts-node
|
||||
dev: false
|
||||
|
||||
file:projects/server-activity.tgz(esbuild@0.16.17)(svelte@4.2.5)(ts-node@10.9.1):
|
||||
resolution: {integrity: sha512-DneWyxHhW1vXrtKGwcLBuE7tkcbRkQVg4L/X4YamviGOuSWNSwUMb4KeJk7tqRhNwt0ldg3GcXvP7p01oPyVnA==, tarball: file:projects/server-activity.tgz}
|
||||
id: file:projects/server-activity.tgz
|
||||
name: '@rush-temp/server-activity'
|
||||
version: 0.0.0
|
||||
dependencies:
|
||||
'@types/jest': 29.5.5
|
||||
'@types/node': 16.11.68
|
||||
'@typescript-eslint/eslint-plugin': 6.11.0(@typescript-eslint/parser@6.11.0)(eslint@8.54.0)(typescript@5.2.2)
|
||||
'@typescript-eslint/parser': 6.11.0(eslint@8.54.0)(typescript@5.2.2)
|
||||
eslint: 8.54.0
|
||||
eslint-config-standard-with-typescript: 40.0.0(@typescript-eslint/eslint-plugin@6.11.0)(eslint-plugin-import@2.28.1)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.54.0)(typescript@5.2.2)
|
||||
eslint-plugin-import: 2.28.1(eslint@8.54.0)
|
||||
eslint-plugin-n: 15.7.0(eslint@8.54.0)
|
||||
eslint-plugin-promise: 6.1.1(eslint@8.54.0)
|
||||
jest: 29.7.0(@types/node@16.11.68)(ts-node@10.9.1)
|
||||
prettier: 3.1.0
|
||||
prettier-plugin-svelte: 3.1.0(prettier@3.1.0)(svelte@4.2.5)
|
||||
ts-jest: 29.1.1(esbuild@0.16.17)(jest@29.7.0)(typescript@5.2.2)
|
||||
typescript: 5.2.2
|
||||
transitivePeerDependencies:
|
||||
- '@babel/core'
|
||||
- '@jest/types'
|
||||
- babel-jest
|
||||
- babel-plugin-macros
|
||||
- esbuild
|
||||
- node-notifier
|
||||
- supports-color
|
||||
- svelte
|
||||
- ts-node
|
||||
dev: false
|
||||
|
||||
file:projects/server-attachment-resources.tgz(@types/node@16.11.68)(esbuild@0.16.17)(svelte@4.2.5)(ts-node@10.9.1):
|
||||
resolution: {integrity: sha512-25yaizWNA1rXmhGvsw6fz5Vg03LXTF2uL+oLaM56GxI5gZnP2t/vixxD+7G1CJT2YNcFaK1HiqCDUrjMN2zQ5g==, tarball: file:projects/server-attachment-resources.tgz}
|
||||
id: file:projects/server-attachment-resources.tgz
|
||||
@ -22012,7 +22106,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/server-notification-resources.tgz(@types/node@16.11.68)(esbuild@0.16.17)(svelte@4.2.5)(ts-node@10.9.1):
|
||||
resolution: {integrity: sha512-ULb1Qwv/+6OqeJCA3DxrvUmzQg9yAGMO5vioAc/C+l0aVzNpfVJPKIX03NGlGe7CvT4Ys3w0xXEusFJ7+pawhw==, tarball: file:projects/server-notification-resources.tgz}
|
||||
resolution: {integrity: sha512-MB40NnTz/EsrbX5vaVJp4Ste2YhwqLP9MXzH/9Vw3gfL/2hbbegKWzemMKiH8lU4/EQoTd0ay6YhVUWLSe1eBA==, tarball: file:projects/server-notification-resources.tgz}
|
||||
id: file:projects/server-notification-resources.tgz
|
||||
name: '@rush-temp/server-notification-resources'
|
||||
version: 0.0.0
|
||||
@ -22563,7 +22657,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/server-tracker-resources.tgz(@types/node@16.11.68)(esbuild@0.16.17)(svelte@4.2.5)(ts-node@10.9.1):
|
||||
resolution: {integrity: sha512-rzxlBU4Qtlyl6AO2W9zl7OY1GqKFrsbcZeenImwi2A3L+d79DYg2IWm+3ay8feGL6TVsOYZTwapA/yTyBD/1eg==, tarball: file:projects/server-tracker-resources.tgz}
|
||||
resolution: {integrity: sha512-eP7iOhbsVOTizFoVY89Fk5u29U3U9y1EqKA9thJX/xy7E6WIsB9FZv0pfyBNPR0RTbvEEOb8lAhJmogmKijaoQ==, tarball: file:projects/server-tracker-resources.tgz}
|
||||
id: file:projects/server-tracker-resources.tgz
|
||||
name: '@rush-temp/server-tracker-resources'
|
||||
version: 0.0.0
|
||||
@ -23697,7 +23791,7 @@ packages:
|
||||
dev: false
|
||||
|
||||
file:projects/tool.tgz(bufferutil@4.0.7)(svelte@4.2.5):
|
||||
resolution: {integrity: sha512-YiOLUsyhvShU6cXfy9vf+CMJ+i0fQlj/nP5izXKEgU3/pzMwCnbWDlwkk5HKVplbPh1o/mx5s6m9cFt4Gp5Tng==, tarball: file:projects/tool.tgz}
|
||||
resolution: {integrity: sha512-/U8HgaP/9AhnOrrWwdMZEkYyQtGxiUbTFjywYBbPv4LMgEB9YdAhgGF3N/nO/QbeSEgTWGVEn25pbGv7GT5I0Q==, tarball: file:projects/tool.tgz}
|
||||
id: file:projects/tool.tgz
|
||||
name: '@rush-temp/tool'
|
||||
version: 0.0.0
|
||||
|
@ -39,6 +39,7 @@
|
||||
"dependencies": {
|
||||
"@hcengineering/account": "^0.6.0",
|
||||
"@hcengineering/attachment": "^0.6.9",
|
||||
"@hcengineering/chunter": "^0.6.12",
|
||||
"@hcengineering/client": "^0.6.14",
|
||||
"@hcengineering/client-resources": "^0.6.23",
|
||||
"@hcengineering/contact": "^0.6.20",
|
||||
@ -54,7 +55,6 @@
|
||||
"@hcengineering/task": "^0.6.13",
|
||||
"@hcengineering/telegram": "^0.6.14",
|
||||
"@hcengineering/tracker": "^0.6.13",
|
||||
"@hcengineering/notification": "^0.6.16",
|
||||
"@types/pdfkit": "~0.12.3",
|
||||
"commander": "^8.1.0",
|
||||
"faker": "~5.5.3",
|
||||
|
@ -1,5 +1,5 @@
|
||||
import chunter, { ChatMessage } from '@hcengineering/chunter'
|
||||
import { AttachedData, Class, Doc, generateId, Ref, Space, TxOperations } from '@hcengineering/core'
|
||||
import notification, { ChatMessage } from '@hcengineering/notification'
|
||||
import faker from 'faker'
|
||||
|
||||
export interface CommentOptions {
|
||||
@ -25,20 +25,12 @@ export async function addComments<T extends Doc> (
|
||||
const commentData: AttachedData<ChatMessage> = {
|
||||
message: faker.lorem.paragraphs(options.paragraphMin + faker.datatype.number(options.paragraphMax))
|
||||
}
|
||||
await client.addCollection(
|
||||
notification.class.ChatMessage,
|
||||
space,
|
||||
objectId,
|
||||
_class,
|
||||
collection,
|
||||
commentData,
|
||||
commentId
|
||||
)
|
||||
await client.addCollection(chunter.class.ChatMessage, space, objectId, _class, collection, commentData, commentId)
|
||||
|
||||
if (faker.datatype.number(100) > options.updateFactor) {
|
||||
const updateMsg = faker.lorem.paragraphs(options.paragraphMin + faker.datatype.number(options.paragraphMax))
|
||||
|
||||
await client.updateCollection(notification.class.ChatMessage, space, commentId, objectId, _class, collection, {
|
||||
await client.updateCollection(chunter.class.ChatMessage, space, commentId, objectId, _class, collection, {
|
||||
message: updateMsg
|
||||
})
|
||||
}
|
||||
|
@ -167,6 +167,8 @@
|
||||
"@hcengineering/server-request": "^0.6.0",
|
||||
"@hcengineering/server-request-resources": "^0.6.0",
|
||||
"@hcengineering/server-view": "^0.6.0",
|
||||
"@hcengineering/server-view-resources": "^0.6.0"
|
||||
"@hcengineering/server-view-resources": "^0.6.0",
|
||||
"@hcengineering/server-activity": "^0.6.0",
|
||||
"@hcengineering/server-activity-resources": "^0.6.0"
|
||||
}
|
||||
}
|
||||
|
@ -49,6 +49,7 @@
|
||||
"@elastic/elasticsearch": "^7.14.0",
|
||||
"@hcengineering/account": "^0.6.0",
|
||||
"@hcengineering/attachment": "^0.6.9",
|
||||
"@hcengineering/chunter": "^0.6.12",
|
||||
"@hcengineering/client": "^0.6.14",
|
||||
"@hcengineering/client-resources": "^0.6.23",
|
||||
"@hcengineering/contact": "^0.6.20",
|
||||
@ -64,7 +65,6 @@
|
||||
"@hcengineering/model-recruit": "^0.6.0",
|
||||
"@hcengineering/model-telegram": "^0.6.0",
|
||||
"@hcengineering/mongo": "^0.6.1",
|
||||
"@hcengineering/notification": "^0.6.16",
|
||||
"@hcengineering/openai": "^0.6.0",
|
||||
"@hcengineering/platform": "^0.6.9",
|
||||
"@hcengineering/recruit": "^0.6.21",
|
||||
@ -107,6 +107,8 @@
|
||||
"@hcengineering/server-tracker-resources": "^0.6.0",
|
||||
"@hcengineering/server-view": "^0.6.0",
|
||||
"@hcengineering/server-view-resources": "^0.6.0",
|
||||
"@hcengineering/server-activity": "^0.6.0",
|
||||
"@hcengineering/server-activity-resources": "^0.6.0",
|
||||
"@hcengineering/setting": "^0.6.11",
|
||||
"@hcengineering/tags": "^0.6.12",
|
||||
"@hcengineering/task": "^0.6.13",
|
||||
|
@ -22,6 +22,7 @@ import builder, { migrateOperations, version } from '@hcengineering/model-all'
|
||||
import { devTool } from '.'
|
||||
|
||||
import { addLocation } from '@hcengineering/platform'
|
||||
import { serverActivityId } from '@hcengineering/server-activity'
|
||||
import { serverAttachmentId } from '@hcengineering/server-attachment'
|
||||
import { serverCalendarId } from '@hcengineering/server-calendar'
|
||||
import { serverChunterId } from '@hcengineering/server-chunter'
|
||||
@ -40,6 +41,7 @@ import { serverTelegramId } from '@hcengineering/server-telegram'
|
||||
import { serverTrackerId } from '@hcengineering/server-tracker'
|
||||
import { serverViewId } from '@hcengineering/server-view'
|
||||
|
||||
addLocation(serverActivityId, () => import('@hcengineering/server-activity-resources'))
|
||||
addLocation(serverAttachmentId, () => import('@hcengineering/server-attachment-resources'))
|
||||
addLocation(serverContactId, () => import('@hcengineering/server-contact-resources'))
|
||||
addLocation(serverNotificationId, () => import('@hcengineering/server-notification-resources'))
|
||||
|
@ -38,9 +38,9 @@ import { connect } from '@hcengineering/server-tool'
|
||||
import tracker from '@hcengineering/tracker'
|
||||
import tags, { TagCategory, TagElement, TagReference } from '@hcengineering/tags'
|
||||
import { MongoClient } from 'mongodb'
|
||||
import notification, { ChatMessage } from '@hcengineering/notification'
|
||||
import chunter, { ChatMessage } from '@hcengineering/chunter'
|
||||
|
||||
export const DOMAIN_COMMENT = 'comment' as Domain
|
||||
export const DOMAIN_CHUNTER = 'chunter' as Domain
|
||||
|
||||
export async function cleanWorkspace (
|
||||
mongoUrl: string,
|
||||
@ -322,11 +322,11 @@ export async function fixCommentDoubleIdCreate (workspaceId: WorkspaceId, transa
|
||||
try {
|
||||
const commentTxes = await connection.findAll(core.class.TxCollectionCUD, {
|
||||
'tx._class': core.class.TxCreateDoc,
|
||||
'tx.objectClass': notification.class.ChatMessage
|
||||
'tx.objectClass': chunter.class.ChatMessage
|
||||
})
|
||||
const commentTxesRemoved = await connection.findAll(core.class.TxCollectionCUD, {
|
||||
'tx._class': core.class.TxRemoveDoc,
|
||||
'tx.objectClass': notification.class.ChatMessage
|
||||
'tx.objectClass': chunter.class.ChatMessage
|
||||
})
|
||||
const removed = new Map(commentTxesRemoved.map((it) => [it.tx.objectId, it]))
|
||||
// Do not checked removed
|
||||
@ -354,7 +354,7 @@ export async function fixCommentDoubleIdCreate (workspaceId: WorkspaceId, transa
|
||||
doc._id = c.tx.objectId as Ref<ChatMessage>
|
||||
await connection.upload(DOMAIN_TX, [c])
|
||||
// Also we need to create snapsot
|
||||
await connection.upload(DOMAIN_COMMENT, [doc])
|
||||
await connection.upload(DOMAIN_CHUNTER, [doc])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -31,8 +31,6 @@ import { getWorkspaceDB } from '@hcengineering/mongo'
|
||||
import { connect } from '@hcengineering/server-tool'
|
||||
import { MongoClient } from 'mongodb'
|
||||
|
||||
export const DOMAIN_COMMENT = 'comment' as Domain
|
||||
|
||||
interface PropertyInfo {
|
||||
name: string
|
||||
cValue: any
|
||||
|
@ -31,6 +31,7 @@
|
||||
"@hcengineering/model": "^0.6.7",
|
||||
"@hcengineering/model-core": "^0.6.0",
|
||||
"@hcengineering/platform": "^0.6.9",
|
||||
"@hcengineering/ui": "^0.6.11"
|
||||
"@hcengineering/ui": "^0.6.11",
|
||||
"@hcengineering/model-view": "^0.6.0"
|
||||
}
|
||||
}
|
||||
|
@ -13,17 +13,63 @@
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import type { TxViewlet } from '@hcengineering/activity'
|
||||
import core, { DOMAIN_MODEL, type Class, type Doc, type DocumentQuery, type Ref, type Tx } from '@hcengineering/core'
|
||||
import { Model, type Builder } from '@hcengineering/model'
|
||||
import { TDoc } from '@hcengineering/model-core'
|
||||
import type { Asset, IntlString } from '@hcengineering/platform'
|
||||
import {
|
||||
type ActivityDoc,
|
||||
type ActivityExtension,
|
||||
type ActivityExtensionKind,
|
||||
type ActivityMessage,
|
||||
type ActivityMessageExtension,
|
||||
type ActivityMessageExtensionKind,
|
||||
type ActivityMessagesFilter,
|
||||
type DocAttributeUpdates,
|
||||
type DocUpdateAction,
|
||||
type DocUpdateMessage,
|
||||
type DocUpdateMessageViewlet,
|
||||
type DocUpdateMessageViewletAttributesConfig,
|
||||
type Reaction,
|
||||
type TxViewlet
|
||||
} from '@hcengineering/activity'
|
||||
import core, {
|
||||
DOMAIN_MODEL,
|
||||
type Class,
|
||||
type Doc,
|
||||
type DocumentQuery,
|
||||
type Ref,
|
||||
type Tx,
|
||||
IndexKind,
|
||||
type TxCUD,
|
||||
type Domain,
|
||||
type Account
|
||||
} from '@hcengineering/core'
|
||||
import {
|
||||
Model,
|
||||
type Builder,
|
||||
Prop,
|
||||
Index,
|
||||
TypeRef,
|
||||
TypeString,
|
||||
Mixin,
|
||||
Collection,
|
||||
TypeBoolean
|
||||
} from '@hcengineering/model'
|
||||
import { TAttachedDoc, TClass, TDoc } from '@hcengineering/model-core'
|
||||
import type { Asset, IntlString, Resource } from '@hcengineering/platform'
|
||||
import { type AnyComponent } from '@hcengineering/ui/src/types'
|
||||
|
||||
import activity from './plugin'
|
||||
import view from '@hcengineering/model-view'
|
||||
|
||||
export { activityOperation } from './migration'
|
||||
export { activityId } from '@hcengineering/activity'
|
||||
|
||||
export const DOMAIN_ACTIVITY = 'activity' as Domain
|
||||
|
||||
@Mixin(activity.mixin.ActivityDoc, core.class.Class)
|
||||
export class TActivityDoc extends TClass implements ActivityDoc {
|
||||
preposition?: IntlString
|
||||
ignoreCollections?: string[]
|
||||
}
|
||||
|
||||
@Model(activity.class.TxViewlet, core.class.Doc, DOMAIN_MODEL)
|
||||
export class TTxViewlet extends TDoc implements TxViewlet {
|
||||
icon!: Asset
|
||||
@ -39,8 +85,141 @@ export class TTxViewlet extends TDoc implements TxViewlet {
|
||||
hideOnRemove!: boolean
|
||||
}
|
||||
|
||||
@Model(activity.class.ActivityMessage, core.class.AttachedDoc, DOMAIN_ACTIVITY)
|
||||
export class TActivityMessage extends TAttachedDoc implements ActivityMessage {
|
||||
@Prop(TypeBoolean(), activity.string.Pinned)
|
||||
isPinned?: boolean
|
||||
|
||||
@Prop(Collection(activity.class.Reaction), activity.string.Reactions)
|
||||
reactions?: number
|
||||
}
|
||||
|
||||
@Model(activity.class.DocUpdateMessage, activity.class.ActivityMessage, DOMAIN_ACTIVITY)
|
||||
export class TDocUpdateMessage extends TActivityMessage implements DocUpdateMessage {
|
||||
@Prop(TypeRef(core.class.Doc), core.string.Object)
|
||||
@Index(IndexKind.Indexed)
|
||||
objectId!: Ref<Doc>
|
||||
|
||||
@Prop(TypeRef(core.class.Class), core.string.Class)
|
||||
@Index(IndexKind.Indexed)
|
||||
objectClass!: Ref<Class<Doc>>
|
||||
|
||||
@Prop(TypeRef(core.class.TxCUD), core.string.Object)
|
||||
@Index(IndexKind.Indexed)
|
||||
txId!: Ref<TxCUD<Doc>>
|
||||
|
||||
action!: DocUpdateAction
|
||||
updateCollection?: string
|
||||
attributeUpdates?: DocAttributeUpdates
|
||||
}
|
||||
|
||||
@Model(activity.class.DocUpdateMessageViewlet, core.class.Doc, DOMAIN_MODEL)
|
||||
export class TDocUpdateMessageViewlet extends TDoc implements DocUpdateMessageViewlet {
|
||||
@Prop(TypeRef(core.class.Doc), core.string.Class)
|
||||
@Index(IndexKind.Indexed)
|
||||
objectClass!: Ref<Class<Doc>>
|
||||
|
||||
@Prop(TypeString(), core.string.String)
|
||||
@Index(IndexKind.Indexed)
|
||||
action!: DocUpdateAction
|
||||
|
||||
label?: IntlString
|
||||
labelComponent?: AnyComponent
|
||||
|
||||
valueAttr?: string
|
||||
|
||||
icon?: Asset
|
||||
component?: AnyComponent
|
||||
config?: DocUpdateMessageViewletAttributesConfig
|
||||
hideIfRemoved?: boolean
|
||||
onlyWithParent?: boolean
|
||||
}
|
||||
|
||||
@Model(activity.class.ActivityMessageExtension, core.class.Doc, DOMAIN_MODEL)
|
||||
export class TActivityMessageExtension extends TDoc implements ActivityMessageExtension {
|
||||
@Prop(TypeRef(activity.class.ActivityMessage), core.string.Class)
|
||||
@Index(IndexKind.Indexed)
|
||||
ofMessage!: Ref<Class<ActivityMessage>>
|
||||
|
||||
components!: { kind: ActivityMessageExtensionKind, component: AnyComponent }[]
|
||||
}
|
||||
|
||||
@Model(activity.class.ActivityExtension, core.class.Doc, DOMAIN_MODEL)
|
||||
export class TActivityExtension extends TDoc implements ActivityExtension {
|
||||
@Prop(TypeRef(core.class.Class), core.string.Class)
|
||||
@Index(IndexKind.Indexed)
|
||||
ofClass!: Ref<Class<Doc>>
|
||||
|
||||
components!: Record<ActivityExtensionKind, AnyComponent>
|
||||
}
|
||||
|
||||
@Model(activity.class.ActivityMessagesFilter, core.class.Doc, DOMAIN_MODEL)
|
||||
export class TActivityMessagesFilter extends TDoc implements ActivityMessagesFilter {
|
||||
label!: IntlString
|
||||
filter!: Resource<(message: ActivityMessage, _class?: Ref<Doc>) => boolean>
|
||||
}
|
||||
|
||||
@Model(activity.class.Reaction, core.class.AttachedDoc, DOMAIN_ACTIVITY)
|
||||
export class TReaction extends TAttachedDoc implements Reaction {
|
||||
@Prop(TypeString(), activity.string.Emoji)
|
||||
emoji!: string
|
||||
|
||||
@Prop(TypeRef(core.class.Account), view.string.Created)
|
||||
createBy!: Ref<Account>
|
||||
}
|
||||
export function createModel (builder: Builder): void {
|
||||
builder.createModel(TTxViewlet)
|
||||
builder.createModel(
|
||||
TTxViewlet,
|
||||
TActivityDoc,
|
||||
TActivityMessagesFilter,
|
||||
TActivityMessageExtension,
|
||||
TActivityMessage,
|
||||
TDocUpdateMessage,
|
||||
TDocUpdateMessageViewlet,
|
||||
TActivityExtension,
|
||||
TReaction
|
||||
)
|
||||
|
||||
builder.mixin(activity.class.DocUpdateMessage, core.class.Class, activity.mixin.ActivityDoc, {})
|
||||
|
||||
builder.mixin(activity.class.DocUpdateMessage, core.class.Class, view.mixin.ObjectPresenter, {
|
||||
presenter: activity.component.DocUpdateMessagePresenter
|
||||
})
|
||||
|
||||
builder.createDoc(activity.class.ActivityMessagesFilter, core.space.Model, {
|
||||
label: activity.string.Attributes,
|
||||
filter: activity.filter.AttributesFilter
|
||||
})
|
||||
|
||||
builder.createDoc(activity.class.ActivityMessagesFilter, core.space.Model, {
|
||||
label: activity.string.Pinned,
|
||||
filter: activity.filter.PinnedFilter
|
||||
})
|
||||
|
||||
builder.createDoc(
|
||||
activity.class.DocUpdateMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: activity.class.Reaction,
|
||||
action: 'create',
|
||||
component: activity.component.ReactionAddedMessage,
|
||||
label: activity.string.Reacted,
|
||||
onlyWithParent: true,
|
||||
hideIfRemoved: true
|
||||
},
|
||||
activity.ids.ReactionAddedActivityViewlet
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
activity.class.DocUpdateMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: activity.class.Reaction,
|
||||
action: 'remove',
|
||||
hideIfRemoved: true
|
||||
},
|
||||
activity.ids.ReactionRemovedActivityViewlet
|
||||
)
|
||||
}
|
||||
|
||||
export default activity
|
||||
|
48
models/activity/src/migration.ts
Normal file
48
models/activity/src/migration.ts
Normal file
@ -0,0 +1,48 @@
|
||||
//
|
||||
// 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 { type Class, type Doc, type Domain, type Ref } from '@hcengineering/core'
|
||||
import {
|
||||
type MigrateOperation,
|
||||
type MigrationClient,
|
||||
type MigrationUpgradeClient,
|
||||
tryMigrate
|
||||
} from '@hcengineering/model'
|
||||
|
||||
import activity from './plugin'
|
||||
import { activityId, DOMAIN_ACTIVITY } from './index'
|
||||
|
||||
const DOMAIN_CHUNTER = 'chunter' as Domain
|
||||
|
||||
async function migrateReactions (client: MigrationClient): Promise<void> {
|
||||
await client.update(
|
||||
DOMAIN_CHUNTER,
|
||||
{ _class: 'chunter:class:Reaction' as Ref<Class<Doc>> },
|
||||
{ _class: activity.class.Reaction }
|
||||
)
|
||||
await client.move(DOMAIN_CHUNTER, { _class: activity.class.Reaction }, DOMAIN_ACTIVITY)
|
||||
}
|
||||
|
||||
export const activityOperation: MigrateOperation = {
|
||||
async migrate (client: MigrationClient): Promise<void> {
|
||||
await tryMigrate(client, activityId, [
|
||||
{
|
||||
state: 'reactions',
|
||||
func: migrateReactions
|
||||
}
|
||||
])
|
||||
},
|
||||
async upgrade (client: MigrationUpgradeClient): Promise<void> {}
|
||||
}
|
@ -12,8 +12,24 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
import { activityId } from '@hcengineering/activity'
|
||||
import { activityId, type ActivityMessage, type DocUpdateMessageViewlet } from '@hcengineering/activity'
|
||||
import activity from '@hcengineering/activity-resources/src/plugin'
|
||||
import { mergeIds } from '@hcengineering/platform'
|
||||
import { type IntlString, mergeIds, type Resource } from '@hcengineering/platform'
|
||||
import { type Doc, type Ref } from '@hcengineering/core'
|
||||
|
||||
export default mergeIds(activityId, activity, {})
|
||||
export default mergeIds(activityId, activity, {
|
||||
string: {
|
||||
Attributes: '' as IntlString,
|
||||
Pinned: '' as IntlString,
|
||||
Emoji: '' as IntlString,
|
||||
Reacted: '' as IntlString
|
||||
},
|
||||
filter: {
|
||||
AttributesFilter: '' as Resource<(message: ActivityMessage, _class?: Ref<Doc>) => boolean>,
|
||||
PinnedFilter: '' as Resource<(message: ActivityMessage, _class?: Ref<Doc>) => boolean>
|
||||
},
|
||||
ids: {
|
||||
ReactionAddedActivityViewlet: '' as Ref<DocUpdateMessageViewlet>,
|
||||
ReactionRemovedActivityViewlet: '' as Ref<DocUpdateMessageViewlet>
|
||||
}
|
||||
})
|
||||
|
@ -77,6 +77,7 @@
|
||||
"@hcengineering/model-request": "^0.6.0",
|
||||
"@hcengineering/model-server-request": "^0.6.0",
|
||||
"@hcengineering/model-server-view": "^0.6.0",
|
||||
"@hcengineering/model-server-activity": "^0.6.0",
|
||||
"@hcengineering/model-server-openai": "^0.6.0",
|
||||
"@hcengineering/model-server-translate": "^0.6.0",
|
||||
"@hcengineering/model-support": "^0.6.0"
|
||||
|
@ -52,6 +52,7 @@ import { serverTaskId, createModel as serverTaskModel } from '@hcengineering/mod
|
||||
import { serverTelegramId, createModel as serverTelegramModel } from '@hcengineering/model-server-telegram'
|
||||
import { serverTrackerId, createModel as serverTrackerModel } from '@hcengineering/model-server-tracker'
|
||||
import { serverViewId, createModel as serverViewModel } from '@hcengineering/model-server-view'
|
||||
import { serverActivityId, createModel as serverActivityModel } from '@hcengineering/model-server-activity'
|
||||
import setting, { settingId, createModel as settingModel } from '@hcengineering/model-setting'
|
||||
import { supportId, createModel as supportModel } from '@hcengineering/model-support'
|
||||
import { tagsId, createModel as tagsModel } from '@hcengineering/model-tags'
|
||||
@ -279,7 +280,7 @@ export default function buildModel (enabled: string[] = ['*'], disabled: string[
|
||||
[serverNotificationModel, serverNotificationId],
|
||||
[serverRequestModel, serverRequestId],
|
||||
[serverViewModel, serverViewId],
|
||||
|
||||
[serverActivityModel, serverActivityId],
|
||||
[serverTranslate, translateId],
|
||||
[serverOpenAI, openAIId]
|
||||
]
|
||||
|
@ -36,10 +36,12 @@ import { boardOperation } from '@hcengineering/model-board'
|
||||
import { hrOperation } from '@hcengineering/model-hr'
|
||||
import { bitrixOperation } from '@hcengineering/model-bitrix'
|
||||
import { calendarOperation } from '@hcengineering/model-calendar'
|
||||
import { notificationServerOperation } from '@hcengineering/model-server-notification'
|
||||
import { activityOperation } from '@hcengineering/model-activity'
|
||||
import { activityServerOperation } from '@hcengineering/model-server-activity'
|
||||
|
||||
export const migrateOperations: [string, MigrateOperation][] = [
|
||||
['core', coreOperation],
|
||||
['activity', activityOperation],
|
||||
['chunter', chunterOperation],
|
||||
['calendar', calendarOperation],
|
||||
['gmail', gmailOperation],
|
||||
@ -60,5 +62,5 @@ export const migrateOperations: [string, MigrateOperation][] = [
|
||||
['hr', hrOperation],
|
||||
['bitrix', bitrixOperation],
|
||||
['inventiry', inventoryOperation],
|
||||
['notificationServer', notificationServerOperation]
|
||||
['activityServer', activityServerOperation]
|
||||
]
|
||||
|
@ -33,7 +33,6 @@
|
||||
"@hcengineering/model-core": "^0.6.0",
|
||||
"@hcengineering/model-preference": "^0.6.0",
|
||||
"@hcengineering/model-view": "^0.6.0",
|
||||
"@hcengineering/notification": "^0.6.16",
|
||||
"@hcengineering/platform": "^0.6.9",
|
||||
"@hcengineering/ui": "^0.6.11",
|
||||
"@hcengineering/view": "^0.6.9"
|
||||
|
@ -32,7 +32,6 @@ import core, { TAttachedDoc } from '@hcengineering/model-core'
|
||||
import preference, { TPreference } from '@hcengineering/model-preference'
|
||||
import view, { createAction } from '@hcengineering/model-view'
|
||||
import attachment from './plugin'
|
||||
import notification from '@hcengineering/notification'
|
||||
|
||||
export { attachmentId } from '@hcengineering/attachment'
|
||||
export { attachmentOperation } from './migration'
|
||||
@ -124,32 +123,32 @@ export function createModel (builder: Builder): void {
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.DocUpdateMessageViewlet,
|
||||
activity.class.DocUpdateMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: attachment.class.Attachment,
|
||||
action: 'create',
|
||||
icon: attachment.icon.Attachment,
|
||||
label: attachment.string.AddAttachment,
|
||||
component: attachment.notification.NotificationAttachmentChanged
|
||||
component: attachment.activity.AttachmentsUpdatedMessage
|
||||
},
|
||||
attachment.ids.NotificationAttachmentCreated
|
||||
attachment.ids.AttachmentCreatedActivityViewlet
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.DocUpdateMessageViewlet,
|
||||
activity.class.DocUpdateMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: attachment.class.Attachment,
|
||||
action: 'remove',
|
||||
icon: attachment.icon.Attachment,
|
||||
label: attachment.string.RemovedAttachment,
|
||||
component: attachment.notification.NotificationAttachmentChanged
|
||||
component: attachment.activity.AttachmentsUpdatedMessage
|
||||
},
|
||||
attachment.ids.NotificationAttachmentRemoved
|
||||
attachment.ids.AttachmentRemovedActivityViewlet
|
||||
)
|
||||
|
||||
builder.createDoc(notification.class.ActivityMessagesFilter, core.space.Model, {
|
||||
builder.createDoc(activity.class.ActivityMessagesFilter, core.space.Model, {
|
||||
label: attachment.string.FilterAttachments,
|
||||
filter: attachment.filter.AttachmentsFilter
|
||||
})
|
||||
|
@ -13,7 +13,7 @@
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import type { TxViewlet } from '@hcengineering/activity'
|
||||
import type { TxViewlet, ActivityMessage, DocUpdateMessageViewlet } from '@hcengineering/activity'
|
||||
import { attachmentId } from '@hcengineering/attachment'
|
||||
import attachment from '@hcengineering/attachment-resources/src/plugin'
|
||||
import type { Ref, Doc } from '@hcengineering/core'
|
||||
@ -21,7 +21,6 @@ import type { IntlString, Resource } from '@hcengineering/platform'
|
||||
import { mergeIds } from '@hcengineering/platform'
|
||||
import type { AnyComponent } from '@hcengineering/ui/src/types'
|
||||
import type { ActionCategory } from '@hcengineering/view'
|
||||
import { type ActivityMessage, type DocUpdateMessageViewlet } from '@hcengineering/notification'
|
||||
|
||||
export default mergeIds(attachmentId, attachment, {
|
||||
component: {
|
||||
@ -47,14 +46,12 @@ export default mergeIds(attachmentId, attachment, {
|
||||
ids: {
|
||||
TxAttachmentCreate: '' as Ref<TxViewlet>,
|
||||
TxAttachmentRemove: '' as Ref<TxViewlet>,
|
||||
NotificationAttachmentCreated: '' as Ref<DocUpdateMessageViewlet>,
|
||||
NotificationAttachmentRemoved: '' as Ref<DocUpdateMessageViewlet>
|
||||
AttachmentCreatedActivityViewlet: '' as Ref<DocUpdateMessageViewlet>,
|
||||
AttachmentRemovedActivityViewlet: '' as Ref<DocUpdateMessageViewlet>
|
||||
},
|
||||
activity: {
|
||||
TxAttachmentCreate: '' as AnyComponent
|
||||
},
|
||||
notification: {
|
||||
NotificationAttachmentChanged: '' as AnyComponent
|
||||
TxAttachmentCreate: '' as AnyComponent,
|
||||
AttachmentsUpdatedMessage: '' as AnyComponent
|
||||
},
|
||||
category: {
|
||||
Attachments: '' as Ref<ActionCategory>
|
||||
|
@ -244,7 +244,7 @@ export function createModel (builder: Builder): void {
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.DocUpdateMessageViewlet,
|
||||
activity.class.DocUpdateMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: calendar.class.Event,
|
||||
@ -252,7 +252,7 @@ export function createModel (builder: Builder): void {
|
||||
action: 'update',
|
||||
hideIfRemoved: true
|
||||
},
|
||||
calendar.ids.UpdateRemainderNotificationViewlet
|
||||
calendar.ids.UpdateRemainderActivityViewlet
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
|
@ -13,11 +13,11 @@
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import { type TxViewlet } from '@hcengineering/activity'
|
||||
import { type DocUpdateMessageViewlet, type TxViewlet } from '@hcengineering/activity'
|
||||
import { calendarId } from '@hcengineering/calendar'
|
||||
import calendar from '@hcengineering/calendar-resources/src/plugin'
|
||||
import { type Ref } from '@hcengineering/core'
|
||||
import { type DocUpdateMessageViewlet, type NotificationGroup } from '@hcengineering/notification'
|
||||
import { type NotificationGroup } from '@hcengineering/notification'
|
||||
import type { IntlString } from '@hcengineering/platform'
|
||||
import { mergeIds } from '@hcengineering/platform'
|
||||
import { type AnyComponent } from '@hcengineering/ui/src/types'
|
||||
@ -66,7 +66,7 @@ export default mergeIds(calendarId, calendar, {
|
||||
},
|
||||
ids: {
|
||||
ReminderViewlet: '' as Ref<TxViewlet>,
|
||||
UpdateRemainderNotificationViewlet: '' as Ref<DocUpdateMessageViewlet>,
|
||||
UpdateRemainderActivityViewlet: '' as Ref<DocUpdateMessageViewlet>,
|
||||
CalendarNotificationGroup: '' as Ref<NotificationGroup>
|
||||
}
|
||||
})
|
||||
|
@ -33,6 +33,7 @@
|
||||
"@hcengineering/core": "^0.6.28",
|
||||
"@hcengineering/model": "^0.6.7",
|
||||
"@hcengineering/model-attachment": "^0.6.0",
|
||||
"@hcengineering/model-activity": "^0.6.0",
|
||||
"@hcengineering/model-core": "^0.6.0",
|
||||
"@hcengineering/model-notification": "^0.6.0",
|
||||
"@hcengineering/model-preference": "^0.6.0",
|
||||
|
@ -24,17 +24,28 @@ import {
|
||||
type Comment,
|
||||
type DirectMessage,
|
||||
type Message,
|
||||
type Reaction,
|
||||
type SavedMessages,
|
||||
type ThreadMessage,
|
||||
type DirectMessageInput
|
||||
type DirectMessageInput,
|
||||
type ChatMessage,
|
||||
type ChatMessageViewlet
|
||||
} from '@hcengineering/chunter'
|
||||
import contact, { type Person } from '@hcengineering/contact'
|
||||
import type { Account, Class, Doc, Domain, Ref, Space, Timestamp } from '@hcengineering/core'
|
||||
import { IndexKind } from '@hcengineering/core'
|
||||
import {
|
||||
type Account,
|
||||
type Class,
|
||||
type Doc,
|
||||
type Domain,
|
||||
DOMAIN_MODEL,
|
||||
type Ref,
|
||||
type Space,
|
||||
type Timestamp,
|
||||
IndexKind
|
||||
} from '@hcengineering/core'
|
||||
import {
|
||||
ArrOf,
|
||||
type Builder,
|
||||
Collection as PropCollection,
|
||||
Collection,
|
||||
Index,
|
||||
Mixin,
|
||||
@ -48,7 +59,7 @@ import {
|
||||
UX
|
||||
} from '@hcengineering/model'
|
||||
import attachment from '@hcengineering/model-attachment'
|
||||
import core, { TAttachedDoc, TClass, TSpace } from '@hcengineering/model-core'
|
||||
import core, { TAttachedDoc, TClass, TDoc, TSpace } from '@hcengineering/model-core'
|
||||
import notification from '@hcengineering/model-notification'
|
||||
import preference, { TPreference } from '@hcengineering/model-preference'
|
||||
import view, { createAction, actionTemplates as viewTemplates } from '@hcengineering/model-view'
|
||||
@ -56,6 +67,8 @@ import workbench from '@hcengineering/model-workbench'
|
||||
import chunter from './plugin'
|
||||
import { type AnyComponent } from '@hcengineering/ui/src/types'
|
||||
import { TypeBoolean } from '@hcengineering/model'
|
||||
import type { IntlString } from '@hcengineering/platform'
|
||||
import { TActivityMessage } from '@hcengineering/model-activity'
|
||||
export { chunterId } from '@hcengineering/chunter'
|
||||
export { chunterOperation } from './migration'
|
||||
|
||||
@ -99,7 +112,7 @@ export class TChunterMessage extends TAttachedDoc implements ChunterMessage {
|
||||
@Prop(TypeTimestamp(), chunter.string.Edit)
|
||||
editedOn?: Timestamp
|
||||
|
||||
@Prop(Collection(chunter.class.Reaction), chunter.string.Reactions)
|
||||
@Prop(Collection(activity.class.Reaction), activity.string.Reactions)
|
||||
reactions?: number
|
||||
}
|
||||
|
||||
@ -130,18 +143,6 @@ export class TMessage extends TChunterMessage implements Message {
|
||||
lastReply?: Timestamp
|
||||
}
|
||||
|
||||
@Model(chunter.class.Reaction, core.class.AttachedDoc, DOMAIN_CHUNTER)
|
||||
export class TReaction extends TAttachedDoc implements Reaction {
|
||||
@Prop(TypeString(), chunter.string.Emoji)
|
||||
emoji!: string
|
||||
|
||||
@Prop(TypeRef(core.class.Account), chunter.string.CreateBy)
|
||||
createBy!: Ref<Account>
|
||||
|
||||
declare attachedTo: Ref<ChunterMessage>
|
||||
declare attachedToClass: Ref<Class<ChunterMessage>>
|
||||
}
|
||||
|
||||
@Model(chunter.class.Comment, core.class.AttachedDoc, DOMAIN_COMMENT)
|
||||
@UX(chunter.string.Comment, undefined, 'COM')
|
||||
export class TComment extends TAttachedDoc implements Comment {
|
||||
@ -152,7 +153,7 @@ export class TComment extends TAttachedDoc implements Comment {
|
||||
@Prop(Collection(attachment.class.Attachment), attachment.string.Attachments, { shortLabel: attachment.string.Files })
|
||||
attachments?: number
|
||||
|
||||
@Prop(Collection(chunter.class.Reaction), chunter.string.Reactions)
|
||||
@Prop(Collection(activity.class.Reaction), activity.string.Reactions)
|
||||
reactions?: number
|
||||
|
||||
@Prop(TypeBoolean(), chunter.string.PinMessage)
|
||||
@ -177,6 +178,31 @@ export class TDirectMessageInput extends TClass implements DirectMessageInput {
|
||||
component!: AnyComponent
|
||||
}
|
||||
|
||||
@Model(chunter.class.ChatMessage, activity.class.ActivityMessage, DOMAIN_CHUNTER)
|
||||
export class TChatMessage extends TActivityMessage implements ChatMessage {
|
||||
@Prop(TypeMarkup(), chunter.string.Message)
|
||||
@Index(IndexKind.FullText)
|
||||
message!: string
|
||||
|
||||
@Prop(PropCollection(attachment.class.Attachment), attachment.string.Attachments, {
|
||||
shortLabel: attachment.string.Files
|
||||
})
|
||||
attachments?: number
|
||||
|
||||
@Prop(TypeBoolean(), core.string.Boolean)
|
||||
isEdited?: boolean
|
||||
}
|
||||
|
||||
@Model(chunter.class.ChatMessageViewlet, core.class.Doc, DOMAIN_MODEL)
|
||||
export class TChatMessageViewlet extends TDoc implements ChatMessageViewlet {
|
||||
@Prop(TypeRef(core.class.Doc), core.string.Class)
|
||||
@Index(IndexKind.Indexed)
|
||||
objectClass!: Ref<Class<Doc>>
|
||||
|
||||
label?: IntlString
|
||||
onlyWithParent?: boolean
|
||||
}
|
||||
|
||||
export function createModel (builder: Builder, options = { addApplication: true }): void {
|
||||
builder.createModel(
|
||||
TChunterSpace,
|
||||
@ -189,13 +215,14 @@ export function createModel (builder: Builder, options = { addApplication: true
|
||||
TBacklink,
|
||||
TDirectMessage,
|
||||
TSavedMessages,
|
||||
TReaction,
|
||||
TDirectMessageInput
|
||||
TDirectMessageInput,
|
||||
TChatMessage,
|
||||
TChatMessageViewlet
|
||||
)
|
||||
const spaceClasses = [chunter.class.Channel, chunter.class.DirectMessage]
|
||||
|
||||
spaceClasses.forEach((spaceClass) => {
|
||||
builder.mixin(spaceClass, core.class.Class, notification.mixin.ActivityDoc, {})
|
||||
builder.mixin(spaceClass, core.class.Class, activity.mixin.ActivityDoc, {})
|
||||
|
||||
builder.mixin(spaceClass, core.class.Class, workbench.mixin.SpaceView, {
|
||||
view: {
|
||||
@ -497,7 +524,7 @@ export function createModel (builder: Builder, options = { addApplication: true
|
||||
activity.class.TxViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: notification.class.ChatMessage,
|
||||
objectClass: chunter.class.ChatMessage,
|
||||
icon: chunter.icon.Chunter,
|
||||
txClass: core.class.TxCreateDoc,
|
||||
component: chunter.activity.TxCommentCreate,
|
||||
@ -616,7 +643,7 @@ export function createModel (builder: Builder, options = { addApplication: true
|
||||
activity.class.TxViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: notification.class.ChatMessage,
|
||||
objectClass: chunter.class.ChatMessage,
|
||||
icon: chunter.icon.Chunter,
|
||||
txClass: core.class.TxRemoveDoc,
|
||||
display: 'inline',
|
||||
@ -672,7 +699,7 @@ export function createModel (builder: Builder, options = { addApplication: true
|
||||
chunter.ids.TxBacklinkRemove
|
||||
)
|
||||
|
||||
builder.createDoc(notification.class.ActivityMessagesFilter, core.space.Model, {
|
||||
builder.createDoc(activity.class.ActivityMessagesFilter, core.space.Model, {
|
||||
label: chunter.string.FilterBacklinks,
|
||||
filter: chunter.filter.BacklinksFilter
|
||||
})
|
||||
@ -758,44 +785,6 @@ export function createModel (builder: Builder, options = { addApplication: true
|
||||
chunter.ids.ChannelNotification
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.ActivityMessageExtension,
|
||||
core.space.Model,
|
||||
{
|
||||
ofMessage: notification.class.DocUpdateMessage,
|
||||
components: [
|
||||
{
|
||||
kind: 'footer',
|
||||
component: chunter.component.ReactionsPresenter
|
||||
},
|
||||
{
|
||||
kind: 'action',
|
||||
component: chunter.component.ActivityMessageReactionsAction
|
||||
}
|
||||
]
|
||||
},
|
||||
chunter.ids.DocUpdateMessageExtension
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.ActivityMessageExtension,
|
||||
core.space.Model,
|
||||
{
|
||||
ofMessage: notification.class.ChatMessage,
|
||||
components: [
|
||||
{
|
||||
kind: 'footer',
|
||||
component: chunter.component.ReactionsPresenter
|
||||
},
|
||||
{
|
||||
kind: 'action',
|
||||
component: chunter.component.ActivityMessageReactionsAction
|
||||
}
|
||||
]
|
||||
},
|
||||
chunter.ids.ChatMessageExtension
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.NotificationType,
|
||||
core.space.Model,
|
||||
@ -814,52 +803,27 @@ export function createModel (builder: Builder, options = { addApplication: true
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.DocUpdateMessageViewlet,
|
||||
activity.class.DocUpdateMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: chunter.class.Backlink,
|
||||
action: 'create',
|
||||
component: chunter.component.BacklinkContent,
|
||||
labelComponent: chunter.component.NotificationBacklinkLabel,
|
||||
labelComponent: chunter.activity.BacklinkCreatedLabel,
|
||||
hideIfRemoved: true
|
||||
},
|
||||
chunter.ids.NotificationBacklinkCreated
|
||||
chunter.ids.BacklinkCreatedActivityViewlet
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.DocUpdateMessageViewlet,
|
||||
activity.class.DocUpdateMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: chunter.class.Backlink,
|
||||
action: 'remove',
|
||||
hideIfRemoved: true
|
||||
},
|
||||
chunter.ids.NotificationBacklinkRemoved
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.DocUpdateMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: chunter.class.Reaction,
|
||||
action: 'create',
|
||||
component: chunter.component.NotificationReactionCreated,
|
||||
label: chunter.string.Reacted,
|
||||
onlyWithParent: true,
|
||||
hideIfRemoved: true
|
||||
},
|
||||
chunter.ids.NotificationReactionCreated
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.DocUpdateMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: chunter.class.Reaction,
|
||||
action: 'remove',
|
||||
hideIfRemoved: true
|
||||
},
|
||||
chunter.ids.NotificationReactionRemoved
|
||||
chunter.ids.BacklinkRemovedActivityViewlet
|
||||
)
|
||||
|
||||
createAction(builder, {
|
||||
@ -874,6 +838,35 @@ export function createModel (builder: Builder, options = { addApplication: true
|
||||
mode: 'space'
|
||||
}
|
||||
})
|
||||
|
||||
builder.createDoc(activity.class.ActivityMessagesFilter, core.space.Model, {
|
||||
label: chunter.string.Comments,
|
||||
filter: chunter.filter.ChatMessagesFilter
|
||||
})
|
||||
builder.mixin(chunter.class.ChatMessage, core.class.Class, activity.mixin.ActivityDoc, {})
|
||||
|
||||
builder.mixin(chunter.class.ChatMessage, core.class.Class, view.mixin.CollectionPresenter, {
|
||||
presenter: chunter.component.ChatMessagesPresenter
|
||||
})
|
||||
|
||||
builder.mixin(chunter.class.ChatMessage, core.class.Class, view.mixin.ObjectPresenter, {
|
||||
presenter: chunter.component.ChatMessagePresenter
|
||||
})
|
||||
|
||||
createAction(
|
||||
builder,
|
||||
{
|
||||
action: chunter.actionImpl.DeleteChatMessage,
|
||||
label: view.string.Delete,
|
||||
icon: view.icon.Delete,
|
||||
input: 'focus',
|
||||
keyBinding: ['Backspace'],
|
||||
category: chunter.category.Chunter,
|
||||
target: chunter.class.ChatMessage,
|
||||
context: { mode: ['context', 'browser'], group: 'edit' }
|
||||
},
|
||||
chunter.action.DeleteChatMessage
|
||||
)
|
||||
}
|
||||
|
||||
export default chunter
|
||||
|
@ -21,7 +21,6 @@ import {
|
||||
tryMigrate
|
||||
} from '@hcengineering/model'
|
||||
import { chunterId } from '@hcengineering/chunter'
|
||||
import notification from '@hcengineering/notification'
|
||||
import { DOMAIN_NOTIFICATION } from '@hcengineering/model-notification'
|
||||
|
||||
import { DOMAIN_COMMENT } from './index'
|
||||
@ -90,8 +89,8 @@ async function createBacklink (tx: TxOperations): Promise<void> {
|
||||
}
|
||||
|
||||
async function convertCommentsToChatMessages (client: MigrationClient): Promise<void> {
|
||||
await client.update(DOMAIN_COMMENT, { _class: chunter.class.Comment }, { _class: notification.class.ChatMessage })
|
||||
await client.move(DOMAIN_COMMENT, { _class: notification.class.ChatMessage }, DOMAIN_NOTIFICATION)
|
||||
await client.update(DOMAIN_COMMENT, { _class: chunter.class.Comment }, { _class: chunter.class.ChatMessage })
|
||||
await client.move(DOMAIN_COMMENT, { _class: chunter.class.ChatMessage }, DOMAIN_NOTIFICATION)
|
||||
}
|
||||
|
||||
export const chunterOperation: MigrateOperation = {
|
||||
|
@ -13,16 +13,11 @@
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import type { TxViewlet } from '@hcengineering/activity'
|
||||
import type { ActivityMessage, DocUpdateMessageViewlet, TxViewlet } from '@hcengineering/activity'
|
||||
import { chunterId, type Channel } from '@hcengineering/chunter'
|
||||
import chunter from '@hcengineering/chunter-resources/src/plugin'
|
||||
import type { Doc, Ref, Space } from '@hcengineering/core'
|
||||
import {
|
||||
type ActivityMessage,
|
||||
type ActivityMessageExtension,
|
||||
type DocUpdateMessageViewlet,
|
||||
type NotificationGroup
|
||||
} from '@hcengineering/notification'
|
||||
import { type NotificationGroup } from '@hcengineering/notification'
|
||||
import type { IntlString, Resource } from '@hcengineering/platform'
|
||||
import { mergeIds } from '@hcengineering/platform'
|
||||
import type { AnyComponent, Location } from '@hcengineering/ui/src/types'
|
||||
@ -37,9 +32,6 @@ export default mergeIds(chunterId, chunter, {
|
||||
Threads: '' as AnyComponent,
|
||||
SavedMessages: '' as AnyComponent,
|
||||
ChunterBrowser: '' as AnyComponent,
|
||||
ReactionsPresenter: '' as AnyComponent,
|
||||
ReactionsAction: '' as AnyComponent,
|
||||
ActivityMessageReactionsAction: '' as AnyComponent,
|
||||
BacklinkContent: '' as AnyComponent,
|
||||
BacklinkReference: '' as AnyComponent
|
||||
},
|
||||
@ -58,14 +50,14 @@ export default mergeIds(chunterId, chunter, {
|
||||
MarkCommentUnread: '' as ViewAction,
|
||||
ArchiveChannel: '' as ViewAction,
|
||||
UnarchiveChannel: '' as ViewAction,
|
||||
ConvertDmToPrivateChannel: '' as ViewAction
|
||||
ConvertDmToPrivateChannel: '' as ViewAction,
|
||||
DeleteChatMessage: '' as ViewAction
|
||||
},
|
||||
category: {
|
||||
Chunter: '' as Ref<ActionCategory>
|
||||
},
|
||||
string: {
|
||||
ApplicationLabelChunter: '' as IntlString,
|
||||
LeftComment: '' as IntlString,
|
||||
MentionedIn: '' as IntlString,
|
||||
Content: '' as IntlString,
|
||||
Comment: '' as IntlString,
|
||||
@ -100,16 +92,13 @@ export default mergeIds(chunterId, chunter, {
|
||||
TxChatMessageCreate: '' as Ref<TxViewlet>,
|
||||
TxChatMessageRemove: '' as Ref<TxViewlet>,
|
||||
ChunterNotificationGroup: '' as Ref<NotificationGroup>,
|
||||
DocUpdateMessageExtension: '' as Ref<ActivityMessageExtension>,
|
||||
ChatMessageExtension: '' as Ref<ActivityMessageExtension>,
|
||||
NotificationBacklinkCreated: '' as Ref<DocUpdateMessageViewlet>,
|
||||
NotificationBacklinkRemoved: '' as Ref<DocUpdateMessageViewlet>,
|
||||
NotificationReactionCreated: '' as Ref<DocUpdateMessageViewlet>,
|
||||
NotificationReactionRemoved: '' as Ref<DocUpdateMessageViewlet>
|
||||
BacklinkCreatedActivityViewlet: '' as Ref<DocUpdateMessageViewlet>,
|
||||
BacklinkRemovedActivityViewlet: '' as Ref<DocUpdateMessageViewlet>
|
||||
},
|
||||
activity: {
|
||||
TxCommentCreate: '' as AnyComponent,
|
||||
TxMessageCreate: '' as AnyComponent
|
||||
TxMessageCreate: '' as AnyComponent,
|
||||
BacklinkCreatedLabel: '' as AnyComponent
|
||||
},
|
||||
space: {
|
||||
General: '' as Ref<Channel>,
|
||||
@ -121,6 +110,7 @@ export default mergeIds(chunterId, chunter, {
|
||||
GetFragment: '' as Resource<(doc: Doc, props: Record<string, any>) => Promise<Location>>
|
||||
},
|
||||
filter: {
|
||||
BacklinksFilter: '' as Resource<(message: ActivityMessage, _class?: Ref<Doc>) => boolean>
|
||||
BacklinksFilter: '' as Resource<(message: ActivityMessage, _class?: Ref<Doc>) => boolean>,
|
||||
ChatMessagesFilter: '' as Resource<(message: ActivityMessage, _class?: Ref<Doc>) => boolean>
|
||||
}
|
||||
})
|
||||
|
@ -25,24 +25,25 @@
|
||||
"prettier-plugin-svelte": "^3.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@hcengineering/model-core": "^0.6.0",
|
||||
"@hcengineering/model-chunter": "^0.6.0",
|
||||
"@hcengineering/model-workbench": "^0.6.1",
|
||||
"@hcengineering/model-attachment": "^0.6.0",
|
||||
"@hcengineering/model-notification": "^0.6.0",
|
||||
"@hcengineering/model-view": "^0.6.0",
|
||||
"@hcengineering/model-presentation": "^0.6.0",
|
||||
"@hcengineering/model": "^0.6.7",
|
||||
"@hcengineering/setting": "^0.6.11",
|
||||
"@hcengineering/core": "^0.6.28",
|
||||
"@hcengineering/ui": "^0.6.11",
|
||||
"@hcengineering/platform": "^0.6.9",
|
||||
"@hcengineering/activity": "^0.6.0",
|
||||
"@hcengineering/chunter": "^0.6.12",
|
||||
"@hcengineering/contact": "^0.6.20",
|
||||
"@hcengineering/notification": "^0.6.16",
|
||||
"@hcengineering/contact-resources": "^0.6.0",
|
||||
"@hcengineering/core": "^0.6.28",
|
||||
"@hcengineering/model": "^0.6.7",
|
||||
"@hcengineering/model-attachment": "^0.6.0",
|
||||
"@hcengineering/model-chunter": "^0.6.0",
|
||||
"@hcengineering/model-core": "^0.6.0",
|
||||
"@hcengineering/model-notification": "^0.6.0",
|
||||
"@hcengineering/model-presentation": "^0.6.0",
|
||||
"@hcengineering/model-view": "^0.6.0",
|
||||
"@hcengineering/model-workbench": "^0.6.1",
|
||||
"@hcengineering/notification": "^0.6.16",
|
||||
"@hcengineering/platform": "^0.6.9",
|
||||
"@hcengineering/setting": "^0.6.11",
|
||||
"@hcengineering/templates": "^0.6.7",
|
||||
"@hcengineering/ui": "^0.6.11",
|
||||
"@hcengineering/view": "^0.6.9",
|
||||
"cross-fetch": "^3.1.5",
|
||||
"@hcengineering/templates": "^0.6.7"
|
||||
"cross-fetch": "^3.1.5"
|
||||
}
|
||||
}
|
||||
|
@ -112,7 +112,7 @@ export class TContact extends TDoc implements Contact {
|
||||
@Prop(Collection(attachment.class.Attachment), attachment.string.Attachments, { shortLabel: attachment.string.Files })
|
||||
attachments?: number
|
||||
|
||||
@Prop(Collection(notification.class.ChatMessage), notification.string.Comments)
|
||||
@Prop(Collection(chunter.class.ChatMessage), chunter.string.Comments)
|
||||
comments?: number
|
||||
|
||||
@Prop(TypeString(), contact.string.Location)
|
||||
@ -221,24 +221,37 @@ export function createModel (builder: Builder): void {
|
||||
TContactsTab
|
||||
)
|
||||
|
||||
builder.mixin(contact.class.Contact, core.class.Class, notification.mixin.ActivityDoc, {
|
||||
ignoreCollections: ['comments']
|
||||
})
|
||||
builder.mixin(contact.class.Person, core.class.Class, notification.mixin.ActivityDoc, {
|
||||
ignoreCollections: ['comments']
|
||||
})
|
||||
builder.mixin(contact.mixin.Employee, core.class.Class, notification.mixin.ActivityDoc, {
|
||||
ignoreCollections: ['comments']
|
||||
})
|
||||
builder.mixin(contact.class.Organization, core.class.Class, notification.mixin.ActivityDoc, {
|
||||
builder.mixin(contact.class.Contact, core.class.Class, activity.mixin.ActivityDoc, {
|
||||
ignoreCollections: ['comments']
|
||||
})
|
||||
|
||||
builder.mixin(contact.class.Person, core.class.Class, notification.mixin.NotificationObjectPreposition, {
|
||||
preposition: contact.string.For
|
||||
builder.mixin(contact.class.Person, core.class.Class, activity.mixin.ActivityDoc, {
|
||||
preposition: contact.string.For,
|
||||
ignoreCollections: ['comments']
|
||||
})
|
||||
builder.mixin(contact.mixin.Employee, core.class.Class, notification.mixin.NotificationObjectPreposition, {
|
||||
preposition: contact.string.For
|
||||
|
||||
builder.mixin(contact.mixin.Employee, core.class.Class, activity.mixin.ActivityDoc, {
|
||||
preposition: contact.string.For,
|
||||
ignoreCollections: ['comments']
|
||||
})
|
||||
|
||||
builder.mixin(contact.class.Organization, core.class.Class, activity.mixin.ActivityDoc, {
|
||||
ignoreCollections: ['comments']
|
||||
})
|
||||
|
||||
builder.createDoc(activity.class.ActivityExtension, core.space.Model, {
|
||||
ofClass: contact.class.Contact,
|
||||
components: { input: chunter.component.ChatMessageInput }
|
||||
})
|
||||
|
||||
builder.createDoc(activity.class.ActivityExtension, core.space.Model, {
|
||||
ofClass: contact.class.Person,
|
||||
components: { input: chunter.component.ChatMessageInput }
|
||||
})
|
||||
|
||||
builder.createDoc(activity.class.ActivityExtension, core.space.Model, {
|
||||
ofClass: contact.class.Organization,
|
||||
components: { input: chunter.component.ChatMessageInput }
|
||||
})
|
||||
|
||||
builder.mixin(contact.mixin.Employee, core.class.Class, view.mixin.ObjectFactory, {
|
||||
@ -329,12 +342,12 @@ export function createModel (builder: Builder): void {
|
||||
match: { 'operations.name': { $exists: true } }
|
||||
})
|
||||
|
||||
builder.createDoc(notification.class.DocUpdateMessageViewlet, core.space.Model, {
|
||||
builder.createDoc(activity.class.DocUpdateMessageViewlet, core.space.Model, {
|
||||
objectClass: contact.class.Person,
|
||||
action: 'update',
|
||||
config: {
|
||||
name: {
|
||||
presenter: contact.notification.NotificationNameChanged
|
||||
presenter: contact.activity.NameChangedActivityMessage
|
||||
}
|
||||
}
|
||||
})
|
||||
@ -968,7 +981,7 @@ export function createModel (builder: Builder): void {
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.ChatMessageViewlet,
|
||||
chunter.class.ChatMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: contact.class.Person,
|
||||
@ -978,7 +991,7 @@ export function createModel (builder: Builder): void {
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.ChatMessageViewlet,
|
||||
chunter.class.ChatMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: contact.mixin.Employee,
|
||||
@ -988,7 +1001,7 @@ export function createModel (builder: Builder): void {
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.ChatMessageViewlet,
|
||||
chunter.class.ChatMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: contact.class.Organization,
|
||||
|
@ -18,18 +18,17 @@ import { contactId } from '@hcengineering/contact'
|
||||
import contact from '@hcengineering/contact-resources/src/plugin'
|
||||
import type { Client, Doc, Ref } from '@hcengineering/core'
|
||||
import { type ObjectSearchCategory, type ObjectSearchFactory } from '@hcengineering/model-presentation'
|
||||
import { type ChatMessageViewlet, type NotificationGroup } from '@hcengineering/notification'
|
||||
import { type NotificationGroup } from '@hcengineering/notification'
|
||||
import { type IntlString, mergeIds, type Resource } from '@hcengineering/platform'
|
||||
import { type TemplateFieldFunc } from '@hcengineering/templates'
|
||||
import type { AnyComponent } from '@hcengineering/ui/src/types'
|
||||
import { type Action, type ActionCategory, type ViewAction } from '@hcengineering/view'
|
||||
import { type ChatMessageViewlet } from '@hcengineering/chunter'
|
||||
|
||||
export default mergeIds(contactId, contact, {
|
||||
activity: {
|
||||
TxNameChange: '' as AnyComponent
|
||||
},
|
||||
notification: {
|
||||
NotificationNameChanged: '' as AnyComponent
|
||||
TxNameChange: '' as AnyComponent,
|
||||
NameChangedActivityMessage: '' as AnyComponent
|
||||
},
|
||||
component: {
|
||||
PersonPresenter: '' as AnyComponent,
|
||||
|
@ -25,20 +25,21 @@
|
||||
"prettier-plugin-svelte": "^3.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@hcengineering/core": "^0.6.28",
|
||||
"@hcengineering/model": "^0.6.7",
|
||||
"@hcengineering/ui": "^0.6.11",
|
||||
"@hcengineering/contact": "^0.6.20",
|
||||
"@hcengineering/platform": "^0.6.9",
|
||||
"@hcengineering/model-core": "^0.6.0",
|
||||
"@hcengineering/notification": "^0.6.16",
|
||||
"@hcengineering/model-view": "^0.6.0",
|
||||
"@hcengineering/model-workbench": "^0.6.1",
|
||||
"@hcengineering/model-contact": "^0.6.1",
|
||||
"@hcengineering/model-calendar": "^0.6.0",
|
||||
"@hcengineering/model-attachment": "^0.6.0",
|
||||
"@hcengineering/core": "^0.6.28",
|
||||
"@hcengineering/hr": "^0.6.12",
|
||||
"@hcengineering/hr-resources": "^0.6.0",
|
||||
"@hcengineering/model": "^0.6.7",
|
||||
"@hcengineering/model-attachment": "^0.6.0",
|
||||
"@hcengineering/model-calendar": "^0.6.0",
|
||||
"@hcengineering/model-chunter": "^0.6.0",
|
||||
"@hcengineering/model-contact": "^0.6.1",
|
||||
"@hcengineering/model-core": "^0.6.0",
|
||||
"@hcengineering/model-view": "^0.6.0",
|
||||
"@hcengineering/model-workbench": "^0.6.1",
|
||||
"@hcengineering/notification": "^0.6.16",
|
||||
"@hcengineering/platform": "^0.6.9",
|
||||
"@hcengineering/ui": "^0.6.11",
|
||||
"@hcengineering/view": "^0.6.9"
|
||||
}
|
||||
}
|
||||
|
@ -59,6 +59,7 @@ import notification from '@hcengineering/notification'
|
||||
import { type Asset, type IntlString } from '@hcengineering/platform'
|
||||
import hr from './plugin'
|
||||
import { PaletteColorIndexes } from '@hcengineering/ui/src/colors'
|
||||
import chunter from '@hcengineering/model-chunter'
|
||||
|
||||
export { hrId } from '@hcengineering/hr'
|
||||
export { hrOperation } from './migration'
|
||||
@ -83,7 +84,7 @@ export class TDepartment extends TSpace implements Department {
|
||||
@Prop(Collection(attachment.class.Attachment), attachment.string.Attachments, { shortLabel: attachment.string.Files })
|
||||
attachments?: number
|
||||
|
||||
@Prop(Collection(notification.class.ChatMessage), notification.string.Comments)
|
||||
@Prop(Collection(chunter.class.ChatMessage), chunter.string.Comments)
|
||||
comments?: number
|
||||
|
||||
avatar?: string | null
|
||||
@ -157,7 +158,7 @@ export class TRequest extends TAttachedDoc implements Request {
|
||||
@Hidden()
|
||||
type!: Ref<RequestType>
|
||||
|
||||
@Prop(Collection(notification.class.ChatMessage), notification.string.Comments)
|
||||
@Prop(Collection(chunter.class.ChatMessage), chunter.string.Comments)
|
||||
comments?: number
|
||||
|
||||
@Prop(Collection(attachment.class.Attachment), attachment.string.Attachments, { shortLabel: attachment.string.Files })
|
||||
|
@ -25,20 +25,21 @@
|
||||
"prettier-plugin-svelte": "^3.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@hcengineering/activity": "^0.6.0",
|
||||
"@hcengineering/chunter": "^0.6.12",
|
||||
"@hcengineering/core": "^0.6.28",
|
||||
"@hcengineering/model": "^0.6.7",
|
||||
"@hcengineering/model-workbench": "^0.6.1",
|
||||
"@hcengineering/model-attachment": "^0.6.0",
|
||||
"@hcengineering/model-core": "^0.6.0",
|
||||
"@hcengineering/ui": "^0.6.11",
|
||||
"@hcengineering/platform": "^0.6.9",
|
||||
"@hcengineering/notification": "^0.6.16",
|
||||
"@hcengineering/inventory": "^0.6.7",
|
||||
"@hcengineering/inventory-resources": "^0.6.0",
|
||||
"@hcengineering/view": "^0.6.9",
|
||||
"@hcengineering/setting": "^0.6.11",
|
||||
"@hcengineering/workbench": "^0.6.9",
|
||||
"@hcengineering/model": "^0.6.7",
|
||||
"@hcengineering/model-attachment": "^0.6.0",
|
||||
"@hcengineering/model-chunter": "^0.6.0",
|
||||
"@hcengineering/model-core": "^0.6.0",
|
||||
"@hcengineering/model-view": "^0.6.0",
|
||||
"@hcengineering/model-chunter": "^0.6.0"
|
||||
"@hcengineering/model-workbench": "^0.6.1",
|
||||
"@hcengineering/platform": "^0.6.9",
|
||||
"@hcengineering/setting": "^0.6.11",
|
||||
"@hcengineering/ui": "^0.6.11",
|
||||
"@hcengineering/view": "^0.6.9",
|
||||
"@hcengineering/workbench": "^0.6.9"
|
||||
}
|
||||
}
|
||||
|
@ -22,8 +22,8 @@ import { createAction } from '@hcengineering/model-view'
|
||||
import workbench from '@hcengineering/model-workbench'
|
||||
import setting from '@hcengineering/setting'
|
||||
import view, { type Viewlet } from '@hcengineering/view'
|
||||
import notification from '@hcengineering/notification'
|
||||
import chunter from '@hcengineering/model-chunter'
|
||||
import activity from '@hcengineering/activity'
|
||||
|
||||
import inventory from './plugin'
|
||||
export { inventoryId } from '@hcengineering/inventory'
|
||||
@ -79,9 +79,24 @@ export class TVariant extends TAttachedDoc implements Variant {
|
||||
export function createModel (builder: Builder): void {
|
||||
builder.createModel(TCategory, TProduct, TVariant)
|
||||
|
||||
builder.mixin(inventory.class.Product, core.class.Class, notification.mixin.ActivityDoc, {})
|
||||
builder.mixin(inventory.class.Category, core.class.Class, notification.mixin.ActivityDoc, {})
|
||||
builder.mixin(inventory.class.Variant, core.class.Class, notification.mixin.ActivityDoc, {})
|
||||
builder.mixin(inventory.class.Product, core.class.Class, activity.mixin.ActivityDoc, {})
|
||||
builder.mixin(inventory.class.Category, core.class.Class, activity.mixin.ActivityDoc, {})
|
||||
builder.mixin(inventory.class.Variant, core.class.Class, activity.mixin.ActivityDoc, {})
|
||||
|
||||
builder.createDoc(activity.class.ActivityExtension, core.space.Model, {
|
||||
ofClass: inventory.class.Product,
|
||||
components: { input: chunter.component.ChatMessageInput }
|
||||
})
|
||||
|
||||
builder.createDoc(activity.class.ActivityExtension, core.space.Model, {
|
||||
ofClass: inventory.class.Category,
|
||||
components: { input: chunter.component.ChatMessageInput }
|
||||
})
|
||||
|
||||
builder.createDoc(activity.class.ActivityExtension, core.space.Model, {
|
||||
ofClass: inventory.class.Variant,
|
||||
components: { input: chunter.component.ChatMessageInput }
|
||||
})
|
||||
|
||||
builder.mixin(inventory.class.Category, core.class.Class, view.mixin.ObjectPresenter, {
|
||||
presenter: inventory.component.CategoryPresenter
|
||||
@ -169,7 +184,7 @@ export function createModel (builder: Builder): void {
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.ChatMessageViewlet,
|
||||
chunter.class.ChatMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: inventory.class.Product,
|
||||
@ -179,7 +194,7 @@ export function createModel (builder: Builder): void {
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.ChatMessageViewlet,
|
||||
chunter.class.ChatMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: inventory.class.Category,
|
||||
|
@ -14,13 +14,13 @@
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import { type ChatMessageViewlet } from '@hcengineering/chunter'
|
||||
import type { Ref } from '@hcengineering/core'
|
||||
import { inventoryId } from '@hcengineering/inventory'
|
||||
import inventory from '@hcengineering/inventory-resources/src/plugin'
|
||||
import { type IntlString, mergeIds } from '@hcengineering/platform'
|
||||
import type { AnyComponent } from '@hcengineering/ui/src/types'
|
||||
import { type Action, type ActionCategory, type ViewAction, type Viewlet } from '@hcengineering/view'
|
||||
import { type ChatMessageViewlet } from '@hcengineering/notification'
|
||||
export default mergeIds(inventoryId, inventory, {
|
||||
action: {
|
||||
CreateSubcategory: '' as Ref<Action>
|
||||
|
@ -25,26 +25,28 @@
|
||||
"prettier-plugin-svelte": "^3.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@hcengineering/core": "^0.6.28",
|
||||
"@hcengineering/model": "^0.6.7",
|
||||
"@hcengineering/ui": "^0.6.11",
|
||||
"@hcengineering/activity": "^0.6.0",
|
||||
"@hcengineering/contact": "^0.6.20",
|
||||
"@hcengineering/platform": "^0.6.9",
|
||||
"@hcengineering/core": "^0.6.28",
|
||||
"@hcengineering/lead": "^0.6.0",
|
||||
"@hcengineering/chunter": "^0.6.12",
|
||||
"@hcengineering/lead-resources": "^0.6.0",
|
||||
"@hcengineering/model": "^0.6.7",
|
||||
"@hcengineering/model-attachment": "^0.6.0",
|
||||
"@hcengineering/model-chunter": "^0.6.0",
|
||||
"@hcengineering/model-contact": "^0.6.1",
|
||||
"@hcengineering/model-core": "^0.6.0",
|
||||
"@hcengineering/model-notification": "^0.6.0",
|
||||
"@hcengineering/model-task": "^0.6.0",
|
||||
"@hcengineering/model-tracker": "^0.6.0",
|
||||
"@hcengineering/model-view": "^0.6.0",
|
||||
"@hcengineering/model-workbench": "^0.6.1",
|
||||
"@hcengineering/model-contact": "^0.6.1",
|
||||
"@hcengineering/model-chunter": "^0.6.0",
|
||||
"@hcengineering/model-attachment": "^0.6.0",
|
||||
"@hcengineering/lead": "^0.6.0",
|
||||
"@hcengineering/lead-resources": "^0.6.0",
|
||||
"@hcengineering/setting": "^0.6.11",
|
||||
"@hcengineering/view": "^0.6.9",
|
||||
"@hcengineering/task": "^0.6.13",
|
||||
"@hcengineering/model-notification": "^0.6.0",
|
||||
"@hcengineering/notification": "^0.6.16",
|
||||
"@hcengineering/model-task": "^0.6.0",
|
||||
"@hcengineering/workbench": "^0.6.9",
|
||||
"@hcengineering/model-tracker": "^0.6.0"
|
||||
"@hcengineering/platform": "^0.6.9",
|
||||
"@hcengineering/setting": "^0.6.11",
|
||||
"@hcengineering/task": "^0.6.13",
|
||||
"@hcengineering/ui": "^0.6.11",
|
||||
"@hcengineering/view": "^0.6.9",
|
||||
"@hcengineering/workbench": "^0.6.9"
|
||||
}
|
||||
}
|
||||
|
@ -43,6 +43,8 @@ import workbench from '@hcengineering/model-workbench'
|
||||
import notification from '@hcengineering/notification'
|
||||
import setting from '@hcengineering/setting'
|
||||
import { type ViewOptionsModel } from '@hcengineering/view'
|
||||
import activity from '@hcengineering/activity'
|
||||
|
||||
import lead from './plugin'
|
||||
|
||||
export { leadId } from '@hcengineering/lead'
|
||||
@ -59,7 +61,7 @@ export class TFunnel extends TProject implements Funnel {
|
||||
@Prop(Collection(attachment.class.Attachment), attachment.string.Attachments, { shortLabel: attachment.string.Files })
|
||||
attachments?: number
|
||||
|
||||
@Prop(Collection(notification.class.ChatMessage), notification.string.Comments)
|
||||
@Prop(Collection(chunter.class.ChatMessage), chunter.string.Comments)
|
||||
comments?: number
|
||||
}
|
||||
|
||||
@ -102,13 +104,25 @@ export function createModel (builder: Builder): void {
|
||||
|
||||
builder.createModel(TFunnel, TLead, TCustomer)
|
||||
|
||||
builder.mixin(lead.class.Lead, core.class.Class, notification.mixin.ActivityDoc, {
|
||||
builder.mixin(lead.class.Lead, core.class.Class, activity.mixin.ActivityDoc, {
|
||||
ignoreCollections: ['comments']
|
||||
})
|
||||
builder.mixin(lead.mixin.Customer, core.class.Class, notification.mixin.ActivityDoc, {
|
||||
|
||||
builder.mixin(lead.mixin.Customer, core.class.Class, activity.mixin.ActivityDoc, {
|
||||
ignoreCollections: ['comments']
|
||||
})
|
||||
builder.mixin(lead.class.Funnel, core.class.Class, notification.mixin.ActivityDoc, {})
|
||||
|
||||
builder.mixin(lead.class.Funnel, core.class.Class, activity.mixin.ActivityDoc, {})
|
||||
|
||||
builder.createDoc(activity.class.ActivityExtension, core.space.Model, {
|
||||
ofClass: lead.class.Lead,
|
||||
components: { input: chunter.component.ChatMessageInput }
|
||||
})
|
||||
|
||||
builder.createDoc(activity.class.ActivityExtension, core.space.Model, {
|
||||
ofClass: lead.class.Funnel,
|
||||
components: { input: chunter.component.ChatMessageInput }
|
||||
})
|
||||
|
||||
builder.mixin(lead.class.Funnel, core.class.Class, workbench.mixin.SpaceView, {
|
||||
view: {
|
||||
@ -518,7 +532,7 @@ export function createModel (builder: Builder): void {
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.ChatMessageViewlet,
|
||||
chunter.class.ChatMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: lead.class.Lead,
|
||||
|
@ -14,10 +14,11 @@
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import { type ChatMessageViewlet } from '@hcengineering/chunter'
|
||||
import type { Ref } from '@hcengineering/core'
|
||||
import { type Funnel, leadId } from '@hcengineering/lead'
|
||||
import lead from '@hcengineering/lead-resources/src/plugin'
|
||||
import { type ChatMessageViewlet, type NotificationGroup, type NotificationType } from '@hcengineering/notification'
|
||||
import { type NotificationGroup, type NotificationType } from '@hcengineering/notification'
|
||||
import type { IntlString } from '@hcengineering/platform'
|
||||
import { mergeIds } from '@hcengineering/platform'
|
||||
import { type ProjectType } from '@hcengineering/task'
|
||||
|
@ -1,148 +0,0 @@
|
||||
import { type Builder } from '@hcengineering/model'
|
||||
import view, { createAction } from '@hcengineering/model-view'
|
||||
import core from '@hcengineering/model-core'
|
||||
|
||||
import notification from './plugin'
|
||||
|
||||
export function buildActivityMessages (builder: Builder): void {
|
||||
builder.mixin(notification.class.DocUpdateMessage, core.class.Class, notification.mixin.ActivityDoc, {})
|
||||
builder.mixin(notification.class.ChatMessage, core.class.Class, notification.mixin.ActivityDoc, {})
|
||||
|
||||
builder.mixin(notification.class.ChatMessage, core.class.Class, view.mixin.CollectionPresenter, {
|
||||
presenter: notification.component.ChatMessagesPresenter
|
||||
})
|
||||
|
||||
builder.mixin(notification.class.ChatMessage, core.class.Class, view.mixin.ObjectPresenter, {
|
||||
presenter: notification.component.ChatMessagePresenter
|
||||
})
|
||||
|
||||
builder.mixin(notification.class.DocUpdateMessage, core.class.Class, view.mixin.ObjectPresenter, {
|
||||
presenter: notification.component.DocUpdateMessagePresenter
|
||||
})
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.ActivityMessageExtension,
|
||||
core.space.Model,
|
||||
{
|
||||
ofMessage: notification.class.DocUpdateMessage,
|
||||
components: [
|
||||
{
|
||||
kind: 'action',
|
||||
component: notification.component.PinMessageAction
|
||||
}
|
||||
]
|
||||
},
|
||||
notification.ids.DocUpdateMessagePinExtension
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.ActivityMessageExtension,
|
||||
core.space.Model,
|
||||
{
|
||||
ofMessage: notification.class.ChatMessage,
|
||||
components: [
|
||||
{
|
||||
kind: 'action',
|
||||
component: notification.component.PinMessageAction
|
||||
}
|
||||
]
|
||||
},
|
||||
notification.ids.ChatMessagePinExtension
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.DocUpdateMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: notification.mixin.Collaborators,
|
||||
action: 'update',
|
||||
icon: notification.icon.Notifications,
|
||||
component: notification.activity.TxCollaboratorsChange,
|
||||
label: notification.string.ChangeCollaborators
|
||||
},
|
||||
notification.ids.NotificationCollaboratorsChanged
|
||||
)
|
||||
|
||||
builder.mixin(notification.mixin.Collaborators, core.class.Class, notification.mixin.NotificationAttributePresenter, {
|
||||
presenter: notification.component.NotificationCollaboratorsChanged
|
||||
})
|
||||
|
||||
builder.createDoc(notification.class.ActivityMessagesFilter, core.space.Model, {
|
||||
label: notification.string.Attributes,
|
||||
filter: notification.filter.AttributesFilter
|
||||
})
|
||||
|
||||
builder.createDoc(notification.class.ActivityMessagesFilter, core.space.Model, {
|
||||
label: notification.string.Pinned,
|
||||
filter: notification.filter.PinnedFilter
|
||||
})
|
||||
|
||||
builder.createDoc(notification.class.ActivityMessagesFilter, core.space.Model, {
|
||||
label: notification.string.Comments,
|
||||
filter: notification.filter.ChatMessagesFilter
|
||||
})
|
||||
|
||||
buildActions(builder)
|
||||
}
|
||||
|
||||
function buildActions (builder: Builder): void {
|
||||
createAction(
|
||||
builder,
|
||||
{
|
||||
action: notification.actionImpl.DeleteChatMessage,
|
||||
label: view.string.Delete,
|
||||
icon: view.icon.Delete,
|
||||
input: 'focus',
|
||||
keyBinding: ['Backspace'],
|
||||
category: notification.category.Notification,
|
||||
target: notification.class.ChatMessage,
|
||||
context: { mode: ['context', 'browser'], group: 'edit' }
|
||||
},
|
||||
notification.action.DeleteChatMessage
|
||||
)
|
||||
|
||||
createAction(
|
||||
builder,
|
||||
{
|
||||
action: notification.actionImpl.MarkAsReadInboxNotification,
|
||||
label: notification.string.MarkAsRead,
|
||||
icon: notification.icon.Notifications,
|
||||
input: 'focus',
|
||||
visibilityTester: notification.function.HasInboxNotifications,
|
||||
category: notification.category.Notification,
|
||||
target: notification.class.ActivityMessage,
|
||||
context: { mode: 'context', application: notification.app.Notification, group: 'edit' }
|
||||
},
|
||||
notification.action.MarkAsReadInboxNotification
|
||||
)
|
||||
|
||||
createAction(
|
||||
builder,
|
||||
{
|
||||
action: notification.actionImpl.MarkAsUnreadInboxNotification,
|
||||
label: notification.string.MarkAsUnread,
|
||||
icon: notification.icon.Track,
|
||||
input: 'focus',
|
||||
visibilityTester: notification.function.HasntInboxNotifications,
|
||||
category: notification.category.Notification,
|
||||
target: notification.class.ActivityMessage,
|
||||
context: { mode: 'context', application: notification.app.Notification, group: 'edit' }
|
||||
},
|
||||
notification.action.MarkAsUnreadInboxNotification
|
||||
)
|
||||
|
||||
createAction(
|
||||
builder,
|
||||
{
|
||||
action: notification.actionImpl.DeleteInboxNotification,
|
||||
label: notification.string.Archive,
|
||||
icon: view.icon.Archive,
|
||||
input: 'focus',
|
||||
keyBinding: ['Backspace'],
|
||||
category: notification.category.Notification,
|
||||
target: notification.class.ActivityMessage,
|
||||
context: { mode: ['context', 'browser'], group: 'edit' }
|
||||
},
|
||||
notification.action.DeleteInboxNotification
|
||||
)
|
||||
}
|
@ -14,7 +14,7 @@
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import activity from '@hcengineering/activity'
|
||||
import activity, { type ActivityMessage } from '@hcengineering/activity'
|
||||
import chunter from '@hcengineering/chunter'
|
||||
import {
|
||||
type Account,
|
||||
@ -39,11 +39,9 @@ import {
|
||||
Mixin,
|
||||
Model,
|
||||
Prop,
|
||||
TypeMarkup,
|
||||
TypeRef,
|
||||
TypeString,
|
||||
UX,
|
||||
Collection as PropCollection,
|
||||
TypeBoolean,
|
||||
TypeDate
|
||||
} from '@hcengineering/model'
|
||||
@ -52,16 +50,6 @@ import preference, { TPreference } from '@hcengineering/model-preference'
|
||||
import view, { createAction } from '@hcengineering/model-view'
|
||||
import workbench from '@hcengineering/model-workbench'
|
||||
import {
|
||||
type ActivityMessage,
|
||||
type ActivityMessageExtension,
|
||||
type ActivityMessageExtensionKind,
|
||||
type ChatMessage,
|
||||
type ChatMessageViewlet,
|
||||
type DocUpdateAction,
|
||||
type DocAttributeUpdates,
|
||||
type DocUpdateMessage,
|
||||
type DocUpdateMessageViewlet,
|
||||
type DocUpdateMessageViewletAttributesConfig,
|
||||
type DocUpdates,
|
||||
type DocUpdateTx,
|
||||
inboxId,
|
||||
@ -69,7 +57,6 @@ import {
|
||||
type DocNotifyContext,
|
||||
type Notification,
|
||||
type NotificationGroup,
|
||||
type NotificationObjectPresenter,
|
||||
type NotificationPreferencesGroup,
|
||||
type NotificationPreview,
|
||||
type NotificationProvider,
|
||||
@ -77,19 +64,14 @@ import {
|
||||
type NotificationStatus,
|
||||
type NotificationTemplate,
|
||||
type NotificationType,
|
||||
type ActivityMessagesFilter,
|
||||
type ActivityDoc,
|
||||
type NotificationObjectPreposition,
|
||||
notificationId
|
||||
notificationId,
|
||||
type NotificationObjectPresenter
|
||||
} from '@hcengineering/notification'
|
||||
import { type Asset, type IntlString, type Resource } from '@hcengineering/platform'
|
||||
import { type Asset, type IntlString } from '@hcengineering/platform'
|
||||
import setting from '@hcengineering/setting'
|
||||
import { type AnyComponent } from '@hcengineering/ui/src/types'
|
||||
import attachment from '@hcengineering/model-attachment'
|
||||
import { type NotificationAttributePresenter } from '@hcengineering/view'
|
||||
|
||||
import notification from './plugin'
|
||||
import { buildActivityMessages } from './activityMessages'
|
||||
|
||||
export { notificationId } from '@hcengineering/notification'
|
||||
export { notificationOperation } from './migration'
|
||||
@ -174,21 +156,6 @@ export class TNotificationPreview extends TClass implements NotificationPreview
|
||||
presenter!: AnyComponent
|
||||
}
|
||||
|
||||
@Mixin(notification.mixin.ActivityDoc, core.class.Class)
|
||||
export class TActivityDoc extends TClass implements ActivityDoc {
|
||||
ignoreCollections?: string[]
|
||||
}
|
||||
|
||||
@Mixin(notification.mixin.NotificationObjectPreposition, core.class.Class)
|
||||
export class TNotificationObjectPreposition extends TClass implements NotificationObjectPreposition {
|
||||
preposition!: IntlString
|
||||
}
|
||||
|
||||
@Mixin(notification.mixin.NotificationAttributePresenter, core.class.Class)
|
||||
export class TNotificationAttributePresenter extends TClass implements NotificationAttributePresenter {
|
||||
presenter!: AnyComponent
|
||||
}
|
||||
|
||||
@Model(notification.class.DocUpdates, core.class.Doc, DOMAIN_NOTIFICATION)
|
||||
export class TDocUpdates extends TDoc implements DocUpdates {
|
||||
@Index(IndexKind.Indexed)
|
||||
@ -232,58 +199,13 @@ export class TDocNotifyContext extends TDoc implements DocNotifyContext {
|
||||
lastUpdateTimestamp?: Timestamp
|
||||
}
|
||||
|
||||
@Model(notification.class.ActivityMessage, core.class.AttachedDoc, DOMAIN_NOTIFICATION)
|
||||
export class TActivityMessage extends TAttachedDoc implements ActivityMessage {
|
||||
@Prop(TypeBoolean(), notification.string.Pinned)
|
||||
@Index(IndexKind.Indexed)
|
||||
isPinned?: boolean
|
||||
|
||||
@Prop(PropCollection(chunter.class.Reaction), chunter.string.Reactions)
|
||||
reactions?: number
|
||||
}
|
||||
|
||||
@Model(notification.class.DocUpdateMessage, notification.class.ActivityMessage, DOMAIN_NOTIFICATION)
|
||||
export class TDocUpdateMessage extends TActivityMessage implements DocUpdateMessage {
|
||||
@Prop(TypeRef(core.class.Doc), core.string.Object)
|
||||
@Index(IndexKind.Indexed)
|
||||
objectId!: Ref<Doc>
|
||||
|
||||
@Prop(TypeRef(core.class.Class), core.string.Class)
|
||||
@Index(IndexKind.Indexed)
|
||||
objectClass!: Ref<Class<Doc>>
|
||||
|
||||
@Prop(TypeRef(core.class.TxCUD), core.string.Object)
|
||||
@Index(IndexKind.Indexed)
|
||||
txId!: Ref<TxCUD<Doc>>
|
||||
|
||||
action!: DocUpdateAction
|
||||
updateCollection?: string
|
||||
attributeUpdates?: DocAttributeUpdates
|
||||
}
|
||||
|
||||
@Model(notification.class.ChatMessage, notification.class.ActivityMessage, DOMAIN_NOTIFICATION)
|
||||
export class TChatMessage extends TActivityMessage implements ChatMessage {
|
||||
@Prop(TypeMarkup(), chunter.string.Message)
|
||||
@Index(IndexKind.FullText)
|
||||
message!: string
|
||||
|
||||
@Prop(PropCollection(attachment.class.Attachment), attachment.string.Attachments, {
|
||||
shortLabel: attachment.string.Files
|
||||
})
|
||||
attachments?: number
|
||||
|
||||
@Prop(TypeBoolean(), core.string.Boolean)
|
||||
@Index(IndexKind.Indexed)
|
||||
isEdited?: boolean
|
||||
}
|
||||
|
||||
@Model(notification.class.InboxNotification, core.class.Doc, DOMAIN_NOTIFICATION)
|
||||
export class TInboxNotification extends TDoc implements InboxNotification {
|
||||
@Prop(TypeRef(notification.class.ActivityMessage), core.string.AttachedTo)
|
||||
@Prop(TypeRef(activity.class.ActivityMessage), core.string.AttachedTo)
|
||||
@Index(IndexKind.Indexed)
|
||||
attachedTo!: Ref<ActivityMessage>
|
||||
|
||||
@Prop(TypeRef(notification.class.ActivityMessage), core.string.AttachedToClass)
|
||||
@Prop(TypeRef(activity.class.ActivityMessage), core.string.AttachedToClass)
|
||||
@Index(IndexKind.Indexed)
|
||||
attachedToClass!: Ref<Class<ActivityMessage>>
|
||||
|
||||
@ -300,54 +222,6 @@ export class TInboxNotification extends TDoc implements InboxNotification {
|
||||
isViewed!: boolean
|
||||
}
|
||||
|
||||
@Model(notification.class.DocUpdateMessageViewlet, core.class.Doc, DOMAIN_MODEL)
|
||||
export class TDocUpdateMessageViewlet extends TDoc implements DocUpdateMessageViewlet {
|
||||
@Prop(TypeRef(core.class.Doc), core.string.Class)
|
||||
@Index(IndexKind.Indexed)
|
||||
objectClass!: Ref<Class<Doc>>
|
||||
|
||||
@Prop(TypeString(), core.string.String)
|
||||
@Index(IndexKind.Indexed)
|
||||
action!: DocUpdateAction
|
||||
|
||||
label?: IntlString
|
||||
labelComponent?: AnyComponent
|
||||
|
||||
valueAttr?: string
|
||||
|
||||
icon?: Asset
|
||||
component?: AnyComponent
|
||||
config?: DocUpdateMessageViewletAttributesConfig
|
||||
hideIfRemoved?: boolean
|
||||
onlyWithParent?: boolean
|
||||
}
|
||||
|
||||
@Model(notification.class.ChatMessageViewlet, core.class.Doc, DOMAIN_MODEL)
|
||||
export class TChatMessageViewlet extends TDoc implements ChatMessageViewlet {
|
||||
@Prop(TypeRef(core.class.Doc), core.string.Class)
|
||||
@Index(IndexKind.Indexed)
|
||||
objectClass!: Ref<Class<Doc>>
|
||||
|
||||
label?: IntlString
|
||||
hidden?: boolean
|
||||
onlyWithParent?: boolean
|
||||
}
|
||||
|
||||
@Model(notification.class.ActivityMessageExtension, core.class.Doc, DOMAIN_MODEL)
|
||||
export class TActivityMessageExtension extends TDoc implements ActivityMessageExtension {
|
||||
@Prop(TypeRef(notification.class.ActivityMessage), core.string.Class)
|
||||
@Index(IndexKind.Indexed)
|
||||
ofMessage!: Ref<Class<ActivityMessage>>
|
||||
|
||||
components!: { kind: ActivityMessageExtensionKind, component: AnyComponent }[]
|
||||
}
|
||||
|
||||
@Model(notification.class.ActivityMessagesFilter, core.class.Doc, DOMAIN_MODEL)
|
||||
export class TActivityMessagesFilter extends TDoc implements ActivityMessagesFilter {
|
||||
label!: IntlString
|
||||
filter!: Resource<(message: ActivityMessage, _class?: Ref<Doc>) => boolean>
|
||||
}
|
||||
|
||||
export function createModel (builder: Builder): void {
|
||||
builder.createModel(
|
||||
TNotification,
|
||||
@ -362,17 +236,7 @@ export function createModel (builder: Builder): void {
|
||||
TNotificationObjectPresenter,
|
||||
TNotificationPreview,
|
||||
TDocNotifyContext,
|
||||
TDocUpdateMessage,
|
||||
TChatMessage,
|
||||
TActivityMessage,
|
||||
TInboxNotification,
|
||||
TDocUpdateMessageViewlet,
|
||||
TActivityMessageExtension,
|
||||
TChatMessageViewlet,
|
||||
TActivityMessagesFilter,
|
||||
TActivityDoc,
|
||||
TNotificationObjectPreposition,
|
||||
TNotificationAttributePresenter
|
||||
TInboxNotification
|
||||
)
|
||||
|
||||
// Temporarily disabled, we should think about it
|
||||
@ -449,21 +313,21 @@ export function createModel (builder: Builder): void {
|
||||
{
|
||||
id: 'all',
|
||||
component: notification.component.NewInbox,
|
||||
icon: notification.icon.Activity,
|
||||
label: notification.string.AllActivity,
|
||||
icon: activity.icon.Activity,
|
||||
label: activity.string.AllActivity,
|
||||
componentProps: {
|
||||
type: 'all',
|
||||
label: notification.string.AllActivity
|
||||
label: activity.string.AllActivity
|
||||
}
|
||||
},
|
||||
{
|
||||
id: 'reactions',
|
||||
component: notification.component.NewInbox,
|
||||
icon: notification.icon.Emoji,
|
||||
label: notification.string.Reactions,
|
||||
icon: activity.icon.Emoji,
|
||||
label: activity.string.Reactions,
|
||||
componentProps: {
|
||||
_class: chunter.class.Reaction,
|
||||
label: notification.string.Reactions
|
||||
_class: activity.class.Reaction,
|
||||
label: activity.string.Reactions
|
||||
}
|
||||
}
|
||||
]
|
||||
@ -597,7 +461,68 @@ export function createModel (builder: Builder): void {
|
||||
notification.ids.TxDmCreation
|
||||
)
|
||||
|
||||
buildActivityMessages(builder)
|
||||
builder.createDoc(
|
||||
activity.class.DocUpdateMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: notification.mixin.Collaborators,
|
||||
action: 'update',
|
||||
icon: notification.icon.Notifications,
|
||||
component: notification.activity.TxCollaboratorsChange,
|
||||
label: notification.string.ChangeCollaborators
|
||||
},
|
||||
notification.ids.NotificationCollaboratorsChanged
|
||||
)
|
||||
|
||||
builder.mixin(notification.mixin.Collaborators, core.class.Class, view.mixin.ActivityAttributePresenter, {
|
||||
presenter: notification.component.NotificationCollaboratorsChanged
|
||||
})
|
||||
|
||||
createAction(
|
||||
builder,
|
||||
{
|
||||
action: notification.actionImpl.MarkAsReadInboxNotification,
|
||||
label: notification.string.MarkAsRead,
|
||||
icon: notification.icon.Notifications,
|
||||
input: 'focus',
|
||||
visibilityTester: notification.function.HasMarkAsReadAction,
|
||||
category: notification.category.Notification,
|
||||
target: activity.class.ActivityMessage,
|
||||
context: { mode: 'context', application: notification.app.Notification, group: 'edit' }
|
||||
},
|
||||
notification.action.MarkAsReadInboxNotification
|
||||
)
|
||||
|
||||
createAction(
|
||||
builder,
|
||||
{
|
||||
action: notification.actionImpl.MarkAsUnreadInboxNotification,
|
||||
label: notification.string.MarkAsUnread,
|
||||
icon: notification.icon.Track,
|
||||
input: 'focus',
|
||||
visibilityTester: notification.function.HasMarkAsUnreadAction,
|
||||
category: notification.category.Notification,
|
||||
target: activity.class.ActivityMessage,
|
||||
context: { mode: 'context', application: notification.app.Notification, group: 'edit' }
|
||||
},
|
||||
notification.action.MarkAsUnreadInboxNotification
|
||||
)
|
||||
|
||||
createAction(
|
||||
builder,
|
||||
{
|
||||
action: notification.actionImpl.DeleteInboxNotification,
|
||||
label: notification.string.Archive,
|
||||
icon: view.icon.Archive,
|
||||
input: 'focus',
|
||||
keyBinding: ['Backspace'],
|
||||
category: notification.category.Notification,
|
||||
visibilityTester: notification.function.HasDeleteNotificationAction,
|
||||
target: activity.class.ActivityMessage,
|
||||
context: { mode: ['context', 'browser'], group: 'edit' }
|
||||
},
|
||||
notification.action.DeleteInboxNotification
|
||||
)
|
||||
}
|
||||
|
||||
export function generateClassNotificationTypes (
|
||||
|
@ -15,16 +15,12 @@
|
||||
//
|
||||
|
||||
import { type Doc, type Ref } from '@hcengineering/core'
|
||||
import notification, {
|
||||
type ActivityMessageExtension,
|
||||
type DocUpdateMessageViewlet,
|
||||
notificationId
|
||||
} from '@hcengineering/notification'
|
||||
import notification, { notificationId } from '@hcengineering/notification'
|
||||
import { type IntlString, type Resource, mergeIds } from '@hcengineering/platform'
|
||||
import { type AnyComponent } from '@hcengineering/ui/src/types'
|
||||
import { type Action, type ActionCategory, type ViewAction } from '@hcengineering/view'
|
||||
import { type Application } from '@hcengineering/workbench'
|
||||
import { type TxViewlet } from '@hcengineering/activity'
|
||||
import { type DocUpdateMessageViewlet, type TxViewlet } from '@hcengineering/activity'
|
||||
|
||||
export default mergeIds(notificationId, notification, {
|
||||
string: {
|
||||
@ -35,11 +31,7 @@ export default mergeIds(notificationId, notification, {
|
||||
Archive: '' as IntlString,
|
||||
MarkAsUnread: '' as IntlString,
|
||||
MarkAsRead: '' as IntlString,
|
||||
ChangeCollaborators: '' as IntlString,
|
||||
AllActivity: '' as IntlString,
|
||||
Threads: '' as IntlString,
|
||||
Mentions: '' as IntlString,
|
||||
Reactions: '' as IntlString
|
||||
ChangeCollaborators: '' as IntlString
|
||||
},
|
||||
app: {
|
||||
Notification: '' as Ref<Application>,
|
||||
@ -51,9 +43,7 @@ export default mergeIds(notificationId, notification, {
|
||||
ids: {
|
||||
TxCollaboratorsChange: '' as Ref<TxViewlet>,
|
||||
TxDmCreation: '' as Ref<TxViewlet>,
|
||||
NotificationCollaboratorsChanged: '' as Ref<DocUpdateMessageViewlet>,
|
||||
DocUpdateMessagePinExtension: '' as Ref<ActivityMessageExtension>,
|
||||
ChatMessagePinExtension: '' as Ref<ActivityMessageExtension>
|
||||
NotificationCollaboratorsChanged: '' as Ref<DocUpdateMessageViewlet>
|
||||
},
|
||||
component: {
|
||||
NotificationSettings: '' as AnyComponent,
|
||||
@ -64,8 +54,9 @@ export default mergeIds(notificationId, notification, {
|
||||
},
|
||||
function: {
|
||||
HasntNotifications: '' as Resource<(doc?: Doc | Doc[]) => Promise<boolean>>,
|
||||
HasntInboxNotifications: '' as Resource<(doc?: Doc | Doc[]) => Promise<boolean>>,
|
||||
HasInboxNotifications: '' as Resource<(doc?: Doc | Doc[]) => Promise<boolean>>
|
||||
HasMarkAsUnreadAction: '' as Resource<(doc?: Doc | Doc[]) => Promise<boolean>>,
|
||||
HasMarkAsReadAction: '' as Resource<(doc?: Doc | Doc[]) => Promise<boolean>>,
|
||||
HasDeleteNotificationAction: '' as Resource<(doc?: Doc | Doc[]) => Promise<boolean>>
|
||||
},
|
||||
category: {
|
||||
Notification: '' as Ref<ActionCategory>
|
||||
@ -82,7 +73,6 @@ export default mergeIds(notificationId, notification, {
|
||||
MarkAsUnread: '' as ViewAction,
|
||||
MarkAsUnreadInboxNotification: '' as ViewAction,
|
||||
MarkAsReadInboxNotification: '' as ViewAction,
|
||||
DeleteInboxNotification: '' as ViewAction,
|
||||
DeleteChatMessage: '' as ViewAction
|
||||
DeleteInboxNotification: '' as ViewAction
|
||||
}
|
||||
})
|
||||
|
@ -26,6 +26,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@anticrm/skillset": "^0.6.0",
|
||||
"@hcengineering/activity": "^0.6.0",
|
||||
"@hcengineering/chunter": "^0.6.12",
|
||||
"@hcengineering/contact": "^0.6.20",
|
||||
"@hcengineering/core": "^0.6.28",
|
||||
"@hcengineering/model": "^0.6.7",
|
||||
|
@ -56,6 +56,7 @@ import {
|
||||
} from '@hcengineering/recruit'
|
||||
import setting from '@hcengineering/setting'
|
||||
import { type KeyBinding, type ViewOptionModel, type ViewOptionsModel } from '@hcengineering/view'
|
||||
import activity from '@hcengineering/activity'
|
||||
|
||||
import recruit from './plugin'
|
||||
import { createReviewModel, reviewTableConfig, reviewTableOptions } from './review'
|
||||
@ -85,7 +86,7 @@ export class TVacancy extends TProject implements Vacancy {
|
||||
@Prop(TypeRef(contact.class.Organization), recruit.string.Company, { icon: contact.icon.Company })
|
||||
company?: Ref<Organization>
|
||||
|
||||
@Prop(Collection(notification.class.ChatMessage), notification.string.Comments)
|
||||
@Prop(Collection(chunter.class.ChatMessage), chunter.string.Comments)
|
||||
comments?: number
|
||||
|
||||
@Prop(TypeString(), recruit.string.Vacancy)
|
||||
@ -197,18 +198,33 @@ export class TApplicantMatch extends TAttachedDoc implements ApplicantMatch {
|
||||
export function createModel (builder: Builder): void {
|
||||
builder.createModel(TVacancy, TCandidates, TCandidate, TApplicant, TReview, TOpinion, TVacancyList, TApplicantMatch)
|
||||
|
||||
builder.mixin(recruit.class.Vacancy, core.class.Class, notification.mixin.ActivityDoc, {
|
||||
builder.mixin(recruit.class.Vacancy, core.class.Class, activity.mixin.ActivityDoc, {
|
||||
ignoreCollections: ['comments']
|
||||
})
|
||||
builder.mixin(recruit.class.Applicant, core.class.Class, notification.mixin.ActivityDoc, {
|
||||
builder.mixin(recruit.class.Applicant, core.class.Class, activity.mixin.ActivityDoc, {
|
||||
ignoreCollections: ['comments']
|
||||
})
|
||||
builder.mixin(recruit.class.Review, core.class.Class, notification.mixin.ActivityDoc, {})
|
||||
builder.mixin(recruit.class.Review, core.class.Class, activity.mixin.ActivityDoc, {})
|
||||
|
||||
builder.mixin(recruit.mixin.Candidate, core.class.Class, notification.mixin.ActivityDoc, {
|
||||
builder.mixin(recruit.mixin.Candidate, core.class.Class, activity.mixin.ActivityDoc, {
|
||||
ignoreCollections: ['comments']
|
||||
})
|
||||
|
||||
builder.createDoc(activity.class.ActivityExtension, core.space.Model, {
|
||||
ofClass: recruit.class.Vacancy,
|
||||
components: { input: chunter.component.ChatMessageInput }
|
||||
})
|
||||
|
||||
builder.createDoc(activity.class.ActivityExtension, core.space.Model, {
|
||||
ofClass: recruit.class.Applicant,
|
||||
components: { input: chunter.component.ChatMessageInput }
|
||||
})
|
||||
|
||||
builder.createDoc(activity.class.ActivityExtension, core.space.Model, {
|
||||
ofClass: recruit.class.Review,
|
||||
components: { input: chunter.component.ChatMessageInput }
|
||||
})
|
||||
|
||||
builder.mixin(recruit.class.Vacancy, core.class.Class, workbench.mixin.SpaceView, {
|
||||
view: {
|
||||
class: recruit.class.Applicant,
|
||||
@ -1585,7 +1601,7 @@ export function createModel (builder: Builder): void {
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.ChatMessageViewlet,
|
||||
chunter.class.ChatMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: recruit.class.Vacancy,
|
||||
@ -1595,7 +1611,7 @@ export function createModel (builder: Builder): void {
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.ChatMessageViewlet,
|
||||
chunter.class.ChatMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: recruit.class.Applicant,
|
||||
@ -1605,7 +1621,7 @@ export function createModel (builder: Builder): void {
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.ChatMessageViewlet,
|
||||
chunter.class.ChatMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: recruit.class.Review,
|
||||
@ -1625,7 +1641,7 @@ export function createModel (builder: Builder): void {
|
||||
propagate: [recruit.class.Applicant],
|
||||
propagateClasses: [
|
||||
tags.class.TagReference,
|
||||
notification.class.ChatMessage,
|
||||
chunter.class.ChatMessage,
|
||||
attachment.class.Attachment,
|
||||
contact.class.Channel
|
||||
]
|
||||
@ -1679,7 +1695,7 @@ export function createModel (builder: Builder): void {
|
||||
})
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.DocUpdateMessageViewlet,
|
||||
activity.class.DocUpdateMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: recruit.class.Applicant,
|
||||
@ -1690,7 +1706,7 @@ export function createModel (builder: Builder): void {
|
||||
}
|
||||
}
|
||||
},
|
||||
recruit.ids.NotificationApplicantUpdated
|
||||
recruit.ids.ApplicantUpdatedActivityViewlet
|
||||
)
|
||||
|
||||
createAction(
|
||||
|
@ -14,12 +14,7 @@
|
||||
//
|
||||
|
||||
import type { Client, Doc, Ref } from '@hcengineering/core'
|
||||
import {
|
||||
type ChatMessageViewlet,
|
||||
type DocUpdateMessageViewlet,
|
||||
type NotificationGroup,
|
||||
type NotificationType
|
||||
} from '@hcengineering/notification'
|
||||
import { type NotificationGroup, type NotificationType } from '@hcengineering/notification'
|
||||
import type { IntlString, Resource, Status } from '@hcengineering/platform'
|
||||
import { mergeIds } from '@hcengineering/platform'
|
||||
import { recruitId } from '@hcengineering/recruit'
|
||||
@ -27,6 +22,8 @@ import recruit from '@hcengineering/recruit-resources/src/plugin'
|
||||
import { type ProjectType } from '@hcengineering/task'
|
||||
import type { AnyComponent, Location } from '@hcengineering/ui/src/types'
|
||||
import type { Action, ActionCategory, ViewAction, ViewQueryAction, Viewlet } from '@hcengineering/view'
|
||||
import { type DocUpdateMessageViewlet } from '@hcengineering/activity'
|
||||
import { type ChatMessageViewlet } from '@hcengineering/chunter'
|
||||
|
||||
export default mergeIds(recruitId, recruit, {
|
||||
action: {
|
||||
@ -88,7 +85,7 @@ export default mergeIds(recruitId, recruit, {
|
||||
AssigneeNotification: '' as Ref<NotificationType>,
|
||||
ApplicationCreateNotification: '' as Ref<NotificationType>,
|
||||
ReviewCreateNotification: '' as Ref<NotificationType>,
|
||||
NotificationApplicantUpdated: '' as Ref<DocUpdateMessageViewlet>,
|
||||
ApplicantUpdatedActivityViewlet: '' as Ref<DocUpdateMessageViewlet>,
|
||||
ApplicantChatMessageViewlet: '' as Ref<ChatMessageViewlet>,
|
||||
VacancyChatMessageViewlet: '' as Ref<ChatMessageViewlet>,
|
||||
ReviewChatMessageViewlet: '' as Ref<ChatMessageViewlet>
|
||||
|
@ -7,8 +7,9 @@ import contact from '@hcengineering/model-contact'
|
||||
import core, { TAttachedDoc } from '@hcengineering/model-core'
|
||||
import task from '@hcengineering/model-task'
|
||||
import { type Applicant, type Candidate, type Opinion, type Review } from '@hcengineering/recruit'
|
||||
import chunter from '@hcengineering/model-chunter'
|
||||
|
||||
import recruit from './plugin'
|
||||
import notification from '@hcengineering/notification'
|
||||
|
||||
@Model(recruit.class.Review, calendar.class.Event)
|
||||
@UX(recruit.string.Review, recruit.icon.Review, 'RVE', 'number')
|
||||
@ -47,7 +48,7 @@ export class TOpinion extends TAttachedDoc implements Opinion {
|
||||
@Prop(Collection(attachment.class.Attachment), attachment.string.Attachments, { shortLabel: attachment.string.Files })
|
||||
attachments?: number
|
||||
|
||||
@Prop(Collection(notification.class.ChatMessage), notification.string.Comments)
|
||||
@Prop(Collection(chunter.class.ChatMessage), chunter.string.Comments)
|
||||
comments?: number
|
||||
|
||||
@Prop(TypeMarkup(), recruit.string.Description)
|
||||
|
@ -30,7 +30,7 @@ import {
|
||||
TypeString,
|
||||
UX
|
||||
} from '@hcengineering/model'
|
||||
import { TComment } from '@hcengineering/model-chunter'
|
||||
import chunter, { TComment } from '@hcengineering/model-chunter'
|
||||
import core, { TAttachedDoc, TClass } from '@hcengineering/model-core'
|
||||
import { generateClassNotificationTypes } from '@hcengineering/model-notification'
|
||||
import view from '@hcengineering/model-view'
|
||||
@ -72,11 +72,11 @@ export class TRequest extends TAttachedDoc implements Request {
|
||||
@ReadOnly()
|
||||
rejected?: Ref<PersonAccount>
|
||||
|
||||
@Prop(Collection(notification.class.ChatMessage), notification.string.Comments)
|
||||
@Prop(Collection(chunter.class.ChatMessage), chunter.string.Comments)
|
||||
comments?: number
|
||||
}
|
||||
|
||||
@Mixin(request.mixin.RequestDecisionComment, notification.class.ChatMessage)
|
||||
@Mixin(request.mixin.RequestDecisionComment, chunter.class.ChatMessage)
|
||||
export class TRequestDecisionComment extends TComment implements RequestDecisionComment {}
|
||||
|
||||
@Mixin(request.mixin.RequestPresenter, core.class.Class)
|
||||
|
7
models/server-activity/.eslintrc.js
Normal file
7
models/server-activity/.eslintrc.js
Normal file
@ -0,0 +1,7 @@
|
||||
module.exports = {
|
||||
extends: ['./node_modules/@hcengineering/platform-rig/profiles/model/eslint.config.json'],
|
||||
parserOptions: {
|
||||
tsconfigRootDir: __dirname,
|
||||
project: './tsconfig.json'
|
||||
}
|
||||
}
|
4
models/server-activity/.npmignore
Normal file
4
models/server-activity/.npmignore
Normal file
@ -0,0 +1,4 @@
|
||||
*
|
||||
!/lib/**
|
||||
!CHANGELOG.md
|
||||
/lib/**/__tests__/
|
5
models/server-activity/config/rig.json
Normal file
5
models/server-activity/config/rig.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"$schema": "https://developer.microsoft.com/json-schemas/rig-package/rig.schema.json",
|
||||
"rigPackageName": "@hcengineering/platform-rig",
|
||||
"rigProfile": "model"
|
||||
}
|
36
models/server-activity/package.json
Normal file
36
models/server-activity/package.json
Normal file
@ -0,0 +1,36 @@
|
||||
{
|
||||
"name": "@hcengineering/model-server-activity",
|
||||
"version": "0.6.0",
|
||||
"main": "lib/index.js",
|
||||
"author": "Anticrm Platform Contributors",
|
||||
"license": "EPL-2.0",
|
||||
"scripts": {
|
||||
"build": "tsc",
|
||||
"build:watch": "tsc",
|
||||
"lint:fix": "eslint --fix src",
|
||||
"lint": "eslint src",
|
||||
"format": "format src"
|
||||
},
|
||||
"template": "@hcengineering/model-package",
|
||||
"devDependencies": {
|
||||
"@hcengineering/platform-rig": "^0.6.0",
|
||||
"@typescript-eslint/eslint-plugin": "^6.11.0",
|
||||
"eslint-plugin-import": "^2.26.0",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
"eslint-plugin-n": "^15.4.0",
|
||||
"eslint": "^8.54.0",
|
||||
"@typescript-eslint/parser": "^6.11.0",
|
||||
"eslint-config-standard-with-typescript": "^40.0.0",
|
||||
"prettier": "^3.1.0",
|
||||
"prettier-plugin-svelte": "^3.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@hcengineering/activity": "^0.6.0",
|
||||
"@hcengineering/core": "^0.6.28",
|
||||
"@hcengineering/model": "^0.6.7",
|
||||
"@hcengineering/platform": "^0.6.9",
|
||||
"@hcengineering/server-activity": "^0.6.0",
|
||||
"@hcengineering/server-activity-resources": "^0.6.0",
|
||||
"@hcengineering/server-core": "^0.6.1"
|
||||
}
|
||||
}
|
38
models/server-activity/src/index.ts
Normal file
38
models/server-activity/src/index.ts
Normal file
@ -0,0 +1,38 @@
|
||||
//
|
||||
// Copyright © 2023 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 { type Builder } from '@hcengineering/model'
|
||||
import serverCore from '@hcengineering/server-core'
|
||||
import core from '@hcengineering/core/lib/component'
|
||||
import serverActivity from '@hcengineering/server-activity'
|
||||
|
||||
export { activityServerOperation } from './migration'
|
||||
export { serverActivityId } from '@hcengineering/server-activity'
|
||||
|
||||
export function createModel (builder: Builder): void {
|
||||
// NOTE: temporarily disabled
|
||||
// builder.createDoc(serverCore.class.Trigger, core.space.Model, {
|
||||
// trigger: serverNotification.trigger.OnReactionChanged,
|
||||
// txMatch: {
|
||||
// collection: 'reactions',
|
||||
// objectClass: activity.class.ActivityMessage,
|
||||
// _class: core.class.TxCollectionCUD
|
||||
// }
|
||||
// })
|
||||
|
||||
builder.createDoc(serverCore.class.Trigger, core.space.Model, {
|
||||
trigger: serverActivity.trigger.ActivityMessagesHandler
|
||||
})
|
||||
}
|
@ -14,25 +14,30 @@
|
||||
//
|
||||
|
||||
import core, {
|
||||
SortingOrder,
|
||||
TxFactory,
|
||||
toFindResult,
|
||||
toIdMap,
|
||||
type AttachedDoc,
|
||||
type Class,
|
||||
type Doc,
|
||||
type Ref,
|
||||
type TxCUD,
|
||||
type TxCollectionCUD,
|
||||
type TxCreateDoc,
|
||||
TxProcessor
|
||||
TxProcessor,
|
||||
toIdMap,
|
||||
SortingOrder,
|
||||
TxFactory,
|
||||
toFindResult,
|
||||
type TxCreateDoc
|
||||
} from '@hcengineering/core'
|
||||
import { type MigrateOperation, type MigrationClient, type MigrationIterator, tryMigrate } from '@hcengineering/model'
|
||||
import notification, { type DocUpdateMessage } from '@hcengineering/notification'
|
||||
import { getAllObjectTransactions, type DocObjectCache, serverNotificationId } from '@hcengineering/server-notification'
|
||||
import { generateDocUpdateMessages, type NotificationControl } from '@hcengineering/server-notification-resources'
|
||||
import activity, { type DocUpdateMessage } from '@hcengineering/activity'
|
||||
import { tryMigrate, type MigrateOperation, type MigrationClient, type MigrationIterator } from '@hcengineering/model'
|
||||
import {
|
||||
type ActivityControl,
|
||||
type DocObjectCache,
|
||||
getAllObjectTransactions,
|
||||
serverActivityId
|
||||
} from '@hcengineering/server-activity'
|
||||
import { generateDocUpdateMessages } from '@hcengineering/server-activity-resources'
|
||||
|
||||
function getNotificationControl (client: MigrationClient): NotificationControl {
|
||||
function getActivityControl (client: MigrationClient): ActivityControl {
|
||||
const txFactory = new TxFactory(core.account.System, false)
|
||||
|
||||
return {
|
||||
@ -46,7 +51,7 @@ function getNotificationControl (client: MigrationClient): NotificationControl {
|
||||
|
||||
async function generateDocUpdateMessageByTx (
|
||||
tx: TxCUD<Doc>,
|
||||
control: NotificationControl,
|
||||
control: ActivityControl,
|
||||
client: MigrationClient,
|
||||
objectCache?: DocObjectCache
|
||||
): Promise<void> {
|
||||
@ -70,14 +75,14 @@ async function generateDocUpdateMessageByTx (
|
||||
}
|
||||
|
||||
async function createDocUpdateMessages (client: MigrationClient): Promise<void> {
|
||||
const activityDocs = await client.model.findAll(notification.mixin.ActivityDoc, {
|
||||
_id: { $nin: [notification.class.DocUpdateMessage, notification.class.ChatMessage] }
|
||||
})
|
||||
const activityDocClasses = activityDocs.map(({ _id }) => _id)
|
||||
const activityDocs = await client.model.findAll(activity.mixin.ActivityDoc, {})
|
||||
const activityDocClasses = activityDocs
|
||||
.map(({ _id }) => _id)
|
||||
.filter((_class) => !client.hierarchy.isDerived(_class, activity.class.ActivityMessage))
|
||||
|
||||
const notificationControl = getNotificationControl(client)
|
||||
const notificationControl = getActivityControl(client)
|
||||
|
||||
const txClient: Pick<NotificationControl, 'hierarchy' | 'findAll'> = {
|
||||
const txClient: Pick<ActivityControl, 'hierarchy' | 'findAll'> = {
|
||||
hierarchy: notificationControl.hierarchy,
|
||||
findAll: notificationControl.findAll
|
||||
}
|
||||
@ -197,11 +202,11 @@ async function createDocUpdateMessages (client: MigrationClient): Promise<void>
|
||||
console.log('process-finished', processed)
|
||||
}
|
||||
|
||||
export const notificationServerOperation: MigrateOperation = {
|
||||
export const activityServerOperation: MigrateOperation = {
|
||||
async migrate (client: MigrationClient): Promise<void> {
|
||||
await tryMigrate(client, serverNotificationId, [
|
||||
await tryMigrate(client, serverActivityId, [
|
||||
{
|
||||
state: 'notifications',
|
||||
state: 'activity-messages',
|
||||
func: createDocUpdateMessages
|
||||
}
|
||||
])
|
9
models/server-activity/tsconfig.json
Normal file
9
models/server-activity/tsconfig.json
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"extends": "./node_modules/@hcengineering/platform-rig/profiles/model/tsconfig.json",
|
||||
|
||||
"compilerOptions": {
|
||||
"rootDir": "./src",
|
||||
"outDir": "./lib",
|
||||
"tsBuildInfoFile": ".build/build.tsbuildinfo"
|
||||
}
|
||||
}
|
@ -33,7 +33,7 @@ export function createModel (builder: Builder): void {
|
||||
})
|
||||
|
||||
builder.mixin<Class<Doc>, ObjectDDParticipant>(
|
||||
notification.class.ChatMessage,
|
||||
chunter.class.ChatMessage,
|
||||
core.class.Class,
|
||||
serverCore.mixin.ObjectDDParticipant,
|
||||
{
|
||||
|
@ -25,14 +25,15 @@
|
||||
"prettier-plugin-svelte": "^3.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@hcengineering/activity": "^0.6.0",
|
||||
"@hcengineering/core": "^0.6.28",
|
||||
"@hcengineering/model": "^0.6.7",
|
||||
"@hcengineering/model-chunter": "^0.6.0",
|
||||
"@hcengineering/model-core": "^0.6.0",
|
||||
"@hcengineering/model-notification": "^0.6.0",
|
||||
"@hcengineering/notification": "^0.6.16",
|
||||
"@hcengineering/platform": "^0.6.9",
|
||||
"@hcengineering/server-core": "^0.6.1",
|
||||
"@hcengineering/server-notification": "^0.6.1",
|
||||
"@hcengineering/server-notification-resources": "^0.6.0"
|
||||
"@hcengineering/server-notification": "^0.6.1"
|
||||
}
|
||||
}
|
||||
|
@ -30,9 +30,9 @@ import serverNotification, {
|
||||
type TypeMatch,
|
||||
type NotificationContentProvider
|
||||
} from '@hcengineering/server-notification'
|
||||
import chunter from '@hcengineering/model-chunter'
|
||||
|
||||
export { serverNotificationId } from '@hcengineering/server-notification'
|
||||
export { notificationServerOperation } from './migration'
|
||||
|
||||
@Mixin(serverNotification.mixin.HTMLPresenter, core.class.Class)
|
||||
export class THTMLPresenter extends TClass implements HTMLPresenter {
|
||||
@ -63,16 +63,6 @@ export function createModel (builder: Builder): void {
|
||||
trigger: serverNotification.trigger.OnBacklinkCreate
|
||||
})
|
||||
|
||||
// NOTE: temporarily disabled
|
||||
// builder.createDoc(serverCore.class.Trigger, core.space.Model, {
|
||||
// trigger: serverNotification.trigger.OnReactionChanged,
|
||||
// txMatch: {
|
||||
// collection: 'reactions',
|
||||
// objectClass: notification.class.ActivityMessage,
|
||||
// _class: core.class.TxCollectionCUD
|
||||
// }
|
||||
// })
|
||||
|
||||
builder.createDoc(serverCore.class.Trigger, core.space.Model, {
|
||||
trigger: serverNotification.trigger.NotificationMessagesHandler
|
||||
})
|
||||
@ -80,7 +70,7 @@ export function createModel (builder: Builder): void {
|
||||
builder.createDoc(serverCore.class.Trigger, core.space.Model, {
|
||||
trigger: serverNotification.trigger.OnChatMessageSent,
|
||||
txMatch: {
|
||||
objectClass: notification.class.ChatMessage
|
||||
objectClass: chunter.class.ChatMessage
|
||||
}
|
||||
})
|
||||
|
||||
|
@ -27,9 +27,9 @@
|
||||
"dependencies": {
|
||||
"@hcengineering/core": "^0.6.28",
|
||||
"@hcengineering/model": "^0.6.7",
|
||||
"@hcengineering/model-chunter": "^0.6.0",
|
||||
"@hcengineering/model-core": "^0.6.0",
|
||||
"@hcengineering/model-recruit": "^0.6.0",
|
||||
"@hcengineering/notification": "^0.6.16",
|
||||
"@hcengineering/openai": "^0.6.0",
|
||||
"@hcengineering/platform": "^0.6.9",
|
||||
"@hcengineering/server-core": "^0.6.1"
|
||||
|
@ -23,7 +23,7 @@ import openai, { type OpenAIConfiguration } from '@hcengineering/openai/src/plug
|
||||
import serverCore from '@hcengineering/server-core'
|
||||
|
||||
import recruit from '@hcengineering/model-recruit'
|
||||
import notification from '@hcengineering/notification'
|
||||
import chunter from '@hcengineering/model-chunter'
|
||||
|
||||
export { openAIId } from '@hcengineering/openai/src/plugin'
|
||||
|
||||
@ -49,7 +49,7 @@ export function createModel (builder: Builder): void {
|
||||
builder.createDoc(serverCore.class.Trigger, core.space.Model, {
|
||||
trigger: openai.trigger.AsyncOnGPTRequest,
|
||||
txMatch: {
|
||||
objectClass: { $in: [notification.class.ChatMessage, recruit.class.ApplicantMatch] },
|
||||
objectClass: { $in: [chunter.class.ChatMessage, recruit.class.ApplicantMatch] },
|
||||
_class: core.class.TxCreateDoc
|
||||
}
|
||||
})
|
||||
|
@ -329,7 +329,7 @@ export function createModel (builder: Builder): void {
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.DocUpdateMessageViewlet,
|
||||
activity.class.DocUpdateMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: setting.class.Integration,
|
||||
@ -338,7 +338,7 @@ export function createModel (builder: Builder): void {
|
||||
action: 'update',
|
||||
hideIfRemoved: true
|
||||
},
|
||||
setting.ids.UpdateIntegrationNotificationViewlet
|
||||
setting.ids.UpdateIntegrationActivityViewlet
|
||||
)
|
||||
|
||||
builder.mixin(core.class.TypeString, core.class.Class, view.mixin.ObjectEditor, {
|
||||
|
@ -13,7 +13,7 @@
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import type { TxViewlet } from '@hcengineering/activity'
|
||||
import type { DocUpdateMessageViewlet, TxViewlet } from '@hcengineering/activity'
|
||||
import { type Doc, type Ref } from '@hcengineering/core'
|
||||
import { type IntlString, mergeIds, type Resource } from '@hcengineering/platform'
|
||||
import { settingId } from '@hcengineering/setting'
|
||||
@ -21,11 +21,7 @@ import setting from '@hcengineering/setting-resources/src/plugin'
|
||||
import { type AnyComponent } from '@hcengineering/ui/src/types'
|
||||
import { type Action, type ActionCategory, type ViewAction } from '@hcengineering/view'
|
||||
import { type TemplateFieldFunc } from '@hcengineering/templates'
|
||||
import {
|
||||
type DocUpdateMessageViewlet,
|
||||
type NotificationGroup,
|
||||
type NotificationType
|
||||
} from '@hcengineering/notification'
|
||||
import { type NotificationGroup, type NotificationType } from '@hcengineering/notification'
|
||||
|
||||
export default mergeIds(settingId, setting, {
|
||||
activity: {
|
||||
@ -37,7 +33,7 @@ export default mergeIds(settingId, setting, {
|
||||
Configure: '' as Ref<Doc>,
|
||||
SettingNotificationGroup: '' as Ref<NotificationGroup>,
|
||||
IntegrationDisabledNotification: '' as Ref<NotificationType>,
|
||||
UpdateIntegrationNotificationViewlet: '' as Ref<DocUpdateMessageViewlet>
|
||||
UpdateIntegrationActivityViewlet: '' as Ref<DocUpdateMessageViewlet>
|
||||
},
|
||||
component: {
|
||||
EnumSetting: '' as AnyComponent,
|
||||
|
@ -29,13 +29,13 @@
|
||||
"@hcengineering/core": "^0.6.28",
|
||||
"@hcengineering/model": "^0.6.7",
|
||||
"@hcengineering/model-attachment": "^0.6.0",
|
||||
"@hcengineering/model-chunter": "^0.6.0",
|
||||
"@hcengineering/model-contact": "^0.6.1",
|
||||
"@hcengineering/model-core": "^0.6.0",
|
||||
"@hcengineering/model-presentation": "^0.6.0",
|
||||
"@hcengineering/model-tags": "^0.6.0",
|
||||
"@hcengineering/model-view": "^0.6.0",
|
||||
"@hcengineering/model-workbench": "^0.6.1",
|
||||
"@hcengineering/notification": "^0.6.16",
|
||||
"@hcengineering/platform": "^0.6.9",
|
||||
"@hcengineering/tags": "^0.6.12",
|
||||
"@hcengineering/task": "^0.6.13",
|
||||
|
@ -59,8 +59,9 @@ import {
|
||||
} from '@hcengineering/task'
|
||||
import type { AnyComponent } from '@hcengineering/ui/src/types'
|
||||
import { type ViewAction } from '@hcengineering/view'
|
||||
import chunter from '@hcengineering/model-chunter'
|
||||
|
||||
import task from './plugin'
|
||||
import notification from '@hcengineering/notification'
|
||||
|
||||
export { taskId } from '@hcengineering/task'
|
||||
export { createProjectType, createSequence, taskOperation } from './migration'
|
||||
@ -95,7 +96,7 @@ export class TTask extends TAttachedDoc implements Task {
|
||||
@Prop(Collection(tags.class.TagReference, task.string.TaskLabels), task.string.TaskLabels)
|
||||
labels?: number
|
||||
|
||||
@Prop(Collection(notification.class.ChatMessage), notification.string.Comments)
|
||||
@Prop(Collection(chunter.class.ChatMessage), chunter.string.Comments)
|
||||
comments?: number
|
||||
|
||||
@Prop(Collection(attachment.class.Attachment), attachment.string.Attachments, { shortLabel: attachment.string.Files })
|
||||
|
@ -21,7 +21,6 @@ import { taskId } from '@hcengineering/task'
|
||||
import task from '@hcengineering/task-resources/src/plugin'
|
||||
import type { AnyComponent } from '@hcengineering/ui/src/types'
|
||||
import type { Action, ActionCategory, ViewAction, Viewlet } from '@hcengineering/view'
|
||||
import {} from '@hcengineering/notification'
|
||||
|
||||
export default mergeIds(taskId, task, {
|
||||
action: {
|
||||
|
@ -134,7 +134,7 @@ export function createModel (builder: Builder): void {
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.DocUpdateMessageViewlet,
|
||||
activity.class.DocUpdateMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: telegram.class.Message,
|
||||
@ -143,7 +143,7 @@ export function createModel (builder: Builder): void {
|
||||
component: telegram.notification.NotificationMessageCreated,
|
||||
label: telegram.string.SharedMessages
|
||||
},
|
||||
telegram.ids.NotificationMessageCreated
|
||||
telegram.ids.TelegramMessageCreatedActivityViewlet
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
@ -191,7 +191,7 @@ export function createModel (builder: Builder): void {
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.DocUpdateMessageViewlet,
|
||||
activity.class.DocUpdateMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: telegram.class.SharedMessages,
|
||||
@ -201,7 +201,7 @@ export function createModel (builder: Builder): void {
|
||||
label: telegram.string.SharedMessages,
|
||||
hideIfRemoved: true
|
||||
},
|
||||
telegram.ids.NotificationMessageShared
|
||||
telegram.ids.TelegramMessageSharedActivityViewlet
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
|
@ -19,9 +19,9 @@ import { type IntlString, type Resource, mergeIds } from '@hcengineering/platfor
|
||||
import { telegramId } from '@hcengineering/telegram'
|
||||
import telegram from '@hcengineering/telegram-resources/src/plugin'
|
||||
import type { AnyComponent } from '@hcengineering/ui/src/types'
|
||||
import type { TxViewlet } from '@hcengineering/activity'
|
||||
import type { DocUpdateMessageViewlet, TxViewlet } from '@hcengineering/activity'
|
||||
import { type TemplateFieldFunc } from '@hcengineering/templates'
|
||||
import { type DocUpdateMessageViewlet, type NotificationGroup } from '@hcengineering/notification'
|
||||
import { type NotificationGroup } from '@hcengineering/notification'
|
||||
|
||||
export default mergeIds(telegramId, telegram, {
|
||||
string: {
|
||||
@ -43,8 +43,8 @@ export default mergeIds(telegramId, telegram, {
|
||||
TxSharedCreate: '' as Ref<TxViewlet>,
|
||||
NewMessageNotificationViewlet: '' as Ref<TxViewlet>,
|
||||
NotificationGroup: '' as Ref<NotificationGroup>,
|
||||
NotificationMessageShared: '' as Ref<DocUpdateMessageViewlet>,
|
||||
NotificationMessageCreated: '' as Ref<DocUpdateMessageViewlet>
|
||||
TelegramMessageSharedActivityViewlet: '' as Ref<DocUpdateMessageViewlet>,
|
||||
TelegramMessageCreatedActivityViewlet: '' as Ref<DocUpdateMessageViewlet>
|
||||
},
|
||||
function: {
|
||||
GetCurrentEmployeeTG: '' as Resource<TemplateFieldFunc>,
|
||||
|
@ -26,6 +26,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@hcengineering/activity": "^0.6.0",
|
||||
"@hcengineering/chunter": "^0.6.12",
|
||||
"@hcengineering/contact": "^0.6.20",
|
||||
"@hcengineering/core": "^0.6.28",
|
||||
"@hcengineering/model": "^0.6.7",
|
||||
|
@ -22,11 +22,12 @@ import workbench from '@hcengineering/model-workbench'
|
||||
import notification from '@hcengineering/notification'
|
||||
import setting from '@hcengineering/setting'
|
||||
import { trackerId } from '@hcengineering/tracker'
|
||||
import tracker from './plugin'
|
||||
|
||||
import { generateClassNotificationTypes } from '@hcengineering/model-notification'
|
||||
import presentation from '@hcengineering/model-presentation'
|
||||
import { PaletteColorIndexes } from '@hcengineering/ui/src/colors'
|
||||
import chunter from '@hcengineering/chunter'
|
||||
|
||||
import tracker from './plugin'
|
||||
import { createActions as defineActions } from './actions'
|
||||
import { definePresenters } from './presenters'
|
||||
import {
|
||||
@ -445,20 +446,40 @@ export function createModel (builder: Builder): void {
|
||||
TTypeRemainingTime
|
||||
)
|
||||
|
||||
builder.mixin(tracker.class.Project, core.class.Class, notification.mixin.ActivityDoc, {})
|
||||
builder.mixin(tracker.class.Issue, core.class.Class, notification.mixin.ActivityDoc, {
|
||||
builder.mixin(tracker.class.Project, core.class.Class, activity.mixin.ActivityDoc, {})
|
||||
builder.mixin(tracker.class.Issue, core.class.Class, activity.mixin.ActivityDoc, {
|
||||
ignoreCollections: ['comments']
|
||||
})
|
||||
builder.mixin(tracker.class.Milestone, core.class.Class, notification.mixin.ActivityDoc, {
|
||||
builder.mixin(tracker.class.Milestone, core.class.Class, activity.mixin.ActivityDoc, {
|
||||
ignoreCollections: ['comments']
|
||||
})
|
||||
builder.mixin(tracker.class.Component, core.class.Class, notification.mixin.ActivityDoc, {
|
||||
builder.mixin(tracker.class.Component, core.class.Class, activity.mixin.ActivityDoc, {
|
||||
ignoreCollections: ['comments']
|
||||
})
|
||||
builder.mixin(tracker.class.IssueTemplate, core.class.Class, notification.mixin.ActivityDoc, {
|
||||
builder.mixin(tracker.class.IssueTemplate, core.class.Class, activity.mixin.ActivityDoc, {
|
||||
ignoreCollections: ['comments']
|
||||
})
|
||||
|
||||
builder.createDoc(activity.class.ActivityExtension, core.space.Model, {
|
||||
ofClass: tracker.class.Issue,
|
||||
components: { input: chunter.component.ChatMessageInput }
|
||||
})
|
||||
|
||||
builder.createDoc(activity.class.ActivityExtension, core.space.Model, {
|
||||
ofClass: tracker.class.Milestone,
|
||||
components: { input: chunter.component.ChatMessageInput }
|
||||
})
|
||||
|
||||
builder.createDoc(activity.class.ActivityExtension, core.space.Model, {
|
||||
ofClass: tracker.class.Component,
|
||||
components: { input: chunter.component.ChatMessageInput }
|
||||
})
|
||||
|
||||
builder.createDoc(activity.class.ActivityExtension, core.space.Model, {
|
||||
ofClass: tracker.class.IssueTemplate,
|
||||
components: { input: chunter.component.ChatMessageInput }
|
||||
})
|
||||
|
||||
defineViewlets(builder)
|
||||
|
||||
defineStatusCategories(builder)
|
||||
@ -517,7 +538,7 @@ export function createModel (builder: Builder): void {
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.DocUpdateMessageViewlet,
|
||||
activity.class.DocUpdateMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: tracker.class.Issue,
|
||||
@ -535,11 +556,11 @@ export function createModel (builder: Builder): void {
|
||||
}
|
||||
}
|
||||
},
|
||||
tracker.ids.NotificationIssueUpdated
|
||||
tracker.ids.IssueUpdatedActivityViewlet
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.DocUpdateMessageViewlet,
|
||||
activity.class.DocUpdateMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: tracker.class.Issue,
|
||||
@ -547,11 +568,11 @@ export function createModel (builder: Builder): void {
|
||||
icon: tracker.icon.Issue,
|
||||
valueAttr: 'title'
|
||||
},
|
||||
tracker.ids.NotificationIssueCreated
|
||||
tracker.ids.IssueCreatedActivityViewlet
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.DocUpdateMessageViewlet,
|
||||
activity.class.DocUpdateMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: tracker.class.Issue,
|
||||
@ -559,11 +580,11 @@ export function createModel (builder: Builder): void {
|
||||
icon: tracker.icon.Issue,
|
||||
valueAttr: 'title'
|
||||
},
|
||||
tracker.ids.NotificationIssueRemoved
|
||||
tracker.ids.IssueRemovedActivityViewlet
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.DocUpdateMessageViewlet,
|
||||
activity.class.DocUpdateMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: tracker.class.Milestone,
|
||||
@ -574,11 +595,11 @@ export function createModel (builder: Builder): void {
|
||||
}
|
||||
}
|
||||
},
|
||||
tracker.ids.NotificationMilestoneUpdated
|
||||
tracker.ids.MilestionUpdatedActivityViewlet
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.DocUpdateMessageViewlet,
|
||||
activity.class.DocUpdateMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: tracker.class.IssueTemplate,
|
||||
@ -589,7 +610,7 @@ export function createModel (builder: Builder): void {
|
||||
}
|
||||
}
|
||||
},
|
||||
tracker.ids.NotificationIssueTemplateUpdated
|
||||
tracker.ids.IssueTemplateUpdatedActivityViewlet
|
||||
)
|
||||
|
||||
defineApplication(builder, { myIssuesId, allIssuesId, issuesId, componentsId, milestonesId, templatesId })
|
||||
@ -625,41 +646,41 @@ export function createModel (builder: Builder): void {
|
||||
})
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.ChatMessageViewlet,
|
||||
chunter.class.ChatMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: tracker.class.Issue,
|
||||
label: notification.string.LeftComment
|
||||
label: chunter.string.LeftComment
|
||||
},
|
||||
tracker.ids.IssueChatMessageViewlet
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.ChatMessageViewlet,
|
||||
chunter.class.ChatMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: tracker.class.IssueTemplate,
|
||||
label: notification.string.LeftComment
|
||||
label: chunter.string.LeftComment
|
||||
},
|
||||
tracker.ids.IssueTemplateChatMessageViewlet
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.ChatMessageViewlet,
|
||||
chunter.class.ChatMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: tracker.class.Component,
|
||||
label: notification.string.LeftComment
|
||||
label: chunter.string.LeftComment
|
||||
},
|
||||
tracker.ids.ComponentChatMessageViewlet
|
||||
)
|
||||
|
||||
builder.createDoc(
|
||||
notification.class.ChatMessageViewlet,
|
||||
chunter.class.ChatMessageViewlet,
|
||||
core.space.Model,
|
||||
{
|
||||
objectClass: tracker.class.Milestone,
|
||||
label: notification.string.LeftComment
|
||||
label: chunter.string.LeftComment
|
||||
},
|
||||
tracker.ids.MilestoneChatMessageViewlet
|
||||
)
|
||||
|
@ -22,13 +22,9 @@ import tracker from '@hcengineering/tracker-resources/src/plugin'
|
||||
import type { AnyComponent } from '@hcengineering/ui/src/types'
|
||||
import { type Action, type ViewAction, type Viewlet } from '@hcengineering/view'
|
||||
import { type Application } from '@hcengineering/workbench'
|
||||
import { type TxViewlet } from '@hcengineering/activity'
|
||||
import {
|
||||
type ChatMessageViewlet,
|
||||
type DocUpdateMessageViewlet,
|
||||
type NotificationGroup,
|
||||
type NotificationType
|
||||
} from '@hcengineering/notification'
|
||||
import { type DocUpdateMessageViewlet, type TxViewlet } from '@hcengineering/activity'
|
||||
import { type NotificationGroup, type NotificationType } from '@hcengineering/notification'
|
||||
import { type ChatMessageViewlet } from '@hcengineering/chunter'
|
||||
|
||||
export default mergeIds(trackerId, tracker, {
|
||||
string: {
|
||||
@ -81,11 +77,11 @@ export default mergeIds(trackerId, tracker, {
|
||||
TrackerNotificationGroup: '' as Ref<NotificationGroup>,
|
||||
AssigneeNotification: '' as Ref<NotificationType>,
|
||||
BaseProjectType: '' as Ref<ProjectType>,
|
||||
NotificationIssueUpdated: '' as Ref<DocUpdateMessageViewlet>,
|
||||
NotificationIssueCreated: '' as Ref<DocUpdateMessageViewlet>,
|
||||
NotificationIssueRemoved: '' as Ref<DocUpdateMessageViewlet>,
|
||||
NotificationMilestoneUpdated: '' as Ref<DocUpdateMessageViewlet>,
|
||||
NotificationIssueTemplateUpdated: '' as Ref<DocUpdateMessageViewlet>,
|
||||
IssueUpdatedActivityViewlet: '' as Ref<DocUpdateMessageViewlet>,
|
||||
IssueCreatedActivityViewlet: '' as Ref<DocUpdateMessageViewlet>,
|
||||
IssueRemovedActivityViewlet: '' as Ref<DocUpdateMessageViewlet>,
|
||||
MilestionUpdatedActivityViewlet: '' as Ref<DocUpdateMessageViewlet>,
|
||||
IssueTemplateUpdatedActivityViewlet: '' as Ref<DocUpdateMessageViewlet>,
|
||||
IssueChatMessageViewlet: '' as Ref<ChatMessageViewlet>,
|
||||
IssueTemplateChatMessageViewlet: '' as Ref<ChatMessageViewlet>,
|
||||
ComponentChatMessageViewlet: '' as Ref<ChatMessageViewlet>,
|
||||
|
@ -64,7 +64,7 @@ import {
|
||||
type TimeSpendReport
|
||||
} from '@hcengineering/tracker'
|
||||
import tracker from './plugin'
|
||||
import notification from '@hcengineering/notification'
|
||||
import chunter from '@hcengineering/chunter'
|
||||
|
||||
export const DOMAIN_TRACKER = 'tracker' as Domain
|
||||
|
||||
@ -288,7 +288,7 @@ export class TIssueTemplate extends TDoc implements IssueTemplate {
|
||||
@Prop(ArrOf(TypeRef(tracker.class.IssueTemplate)), tracker.string.IssueTemplate)
|
||||
children!: IssueTemplateChild[]
|
||||
|
||||
@Prop(Collection(notification.class.ChatMessage), tracker.string.Comments)
|
||||
@Prop(Collection(chunter.class.ChatMessage), tracker.string.Comments)
|
||||
comments!: number
|
||||
|
||||
@Prop(Collection(attachment.class.Attachment), tracker.string.Attachments)
|
||||
@ -336,7 +336,7 @@ export class TComponent extends TDoc implements Component {
|
||||
@Prop(TypeRef(contact.mixin.Employee), tracker.string.ComponentLead)
|
||||
lead!: Ref<Employee> | null
|
||||
|
||||
@Prop(Collection(notification.class.ChatMessage), notification.string.Comments)
|
||||
@Prop(Collection(chunter.class.ChatMessage), chunter.string.Comments)
|
||||
comments!: number
|
||||
|
||||
@Prop(Collection(attachment.class.Attachment), attachment.string.Attachments, { shortLabel: attachment.string.Files })
|
||||
@ -362,7 +362,7 @@ export class TMilestone extends TDoc implements Milestone {
|
||||
@Index(IndexKind.Indexed)
|
||||
status!: MilestoneStatus
|
||||
|
||||
@Prop(Collection(notification.class.ChatMessage), notification.string.Comments)
|
||||
@Prop(Collection(chunter.class.ChatMessage), chunter.string.Comments)
|
||||
comments!: number
|
||||
|
||||
@Prop(Collection(attachment.class.Attachment), attachment.string.Attachments, { shortLabel: attachment.string.Files })
|
||||
|
@ -85,7 +85,6 @@ import {
|
||||
type Viewlet,
|
||||
type ViewletDescriptor,
|
||||
type ViewletPreference,
|
||||
type NotificationAttributePresenter,
|
||||
type ObjectIdentifier
|
||||
} from '@hcengineering/view'
|
||||
|
||||
@ -127,9 +126,6 @@ export function classPresenter (
|
||||
builder.mixin(_class, core.class.Class, view.mixin.ActivityAttributePresenter, {
|
||||
presenter: activity
|
||||
})
|
||||
builder.mixin(_class, core.class.Class, view.mixin.NotificationAttributePresenter, {
|
||||
presenter: activity
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@ -210,11 +206,6 @@ export class TActivityAttributePresenter extends TClass implements ActivityAttri
|
||||
presenter!: AnyComponent
|
||||
}
|
||||
|
||||
@Mixin(view.mixin.NotificationAttributePresenter, core.class.Class)
|
||||
export class TNotificationAttributePresenter extends TClass implements NotificationAttributePresenter {
|
||||
presenter!: AnyComponent
|
||||
}
|
||||
|
||||
@Mixin(view.mixin.SpacePresenter, core.class.Class)
|
||||
export class TSpacePresenter extends TClass implements SpacePresenter {
|
||||
presenter!: AnyComponent
|
||||
@ -424,7 +415,6 @@ export function createModel (builder: Builder): void {
|
||||
TAttributePresenter,
|
||||
TAttributeFilterPresenter,
|
||||
TActivityAttributePresenter,
|
||||
TNotificationAttributePresenter,
|
||||
TListItemPresenter,
|
||||
TCollectionEditor,
|
||||
TCollectionPresenter,
|
||||
@ -479,8 +469,7 @@ export function createModel (builder: Builder): void {
|
||||
core.class.TypeMarkup,
|
||||
view.component.MarkupPresenter,
|
||||
view.component.MarkupEditor,
|
||||
view.component.MarkupEditorPopup,
|
||||
view.component.MarkupDiffPresenter
|
||||
view.component.MarkupEditorPopup
|
||||
)
|
||||
|
||||
builder.mixin(core.class.TypeMarkup, core.class.Class, view.mixin.InlineAttributEditor, {
|
||||
|
@ -20,19 +20,19 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@hcengineering/platform-rig": "^0.6.0",
|
||||
"@typescript-eslint/eslint-plugin": "^6.11.0",
|
||||
"eslint-plugin-import": "^2.26.0",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
"eslint-plugin-n": "^15.4.0",
|
||||
"eslint": "^8.54.0",
|
||||
"@typescript-eslint/parser": "^6.11.0",
|
||||
"eslint-config-standard-with-typescript": "^40.0.0",
|
||||
"prettier": "^3.1.0",
|
||||
"typescript": "^5.2.2",
|
||||
"jest": "^29.7.0",
|
||||
"ts-jest": "^29.1.1",
|
||||
"@types/jest": "^29.5.5",
|
||||
"prettier-plugin-svelte": "^3.1.0"
|
||||
"@typescript-eslint/eslint-plugin": "^6.11.0",
|
||||
"@typescript-eslint/parser": "^6.11.0",
|
||||
"eslint": "^8.54.0",
|
||||
"eslint-config-standard-with-typescript": "^40.0.0",
|
||||
"eslint-plugin-import": "^2.26.0",
|
||||
"eslint-plugin-n": "^15.4.0",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
"jest": "^29.7.0",
|
||||
"prettier": "^3.1.0",
|
||||
"prettier-plugin-svelte": "^3.1.0",
|
||||
"ts-jest": "^29.1.1",
|
||||
"typescript": "^5.2.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"intl-messageformat": "^9.7.1"
|
||||
|
@ -4,4 +4,9 @@
|
||||
<path d="M13.3,4.7c1,0,1.9-0.8,1.9-1.9c0-1-0.8-1.9-1.9-1.9s-1.9,0.8-1.9,1.9C11.4,3.8,12.3,4.7,13.3,4.7z M13.3,2.1 c0.4,0,0.7,0.3,0.7,0.7c0,0.4-0.3,0.7-0.7,0.7s-0.7-0.3-0.7-0.7C12.6,2.4,13,2.1,13.3,2.1z"/>
|
||||
<path d="M14.1,5.6c-0.3,0-0.6,0.3-0.6,0.6v4.7c0,1.7-1,2.8-2.7,2.8H5.1c-1.6,0-2.7-1.1-2.7-2.8V5.5c0-1.7,1-2.8,2.7-2.8h4.8 c0.3,0,0.6-0.3,0.6-0.6s-0.3-0.6-0.6-0.6H5.1c-2.3,0-3.9,1.6-3.9,4v5.4c0,2.4,1.5,4,3.9,4h5.7c2.3,0,3.9-1.6,3.9-4V6.2 C14.7,5.9,14.4,5.6,14.1,5.6z"/>
|
||||
</symbol>
|
||||
<symbol id="emoji" viewBox="0 0 24 24">
|
||||
<path
|
||||
d="M10 2C14.4183 2 18 5.58172 18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2ZM10 3C6.13401 3 3 6.13401 3 10C3 13.866 6.13401 17 10 17C13.866 17 17 13.866 17 10C17 6.13401 13.866 3 10 3ZM7.15467 12.4273C8.66416 13.9463 11.0877 14.0045 12.6671 12.5961L12.8453 12.4273C13.04 12.2314 13.3566 12.2304 13.5524 12.4251C13.7265 12.5981 13.7467 12.8674 13.6123 13.0627L13.5547 13.1322L13.5323 13.1545C11.5691 15.1054 8.39616 15.0953 6.44533 13.1322C6.25069 12.9363 6.25169 12.6197 6.44757 12.4251C6.64344 12.2304 6.96002 12.2314 7.15467 12.4273ZM12.5 7.5C13.0523 7.5 13.5 7.94772 13.5 8.5C13.5 9.05228 13.0523 9.5 12.5 9.5C11.9477 9.5 11.5 9.05228 11.5 8.5C11.5 7.94772 11.9477 7.5 12.5 7.5ZM7.5 7.5C8.05228 7.5 8.5 7.94772 8.5 8.5C8.5 9.05228 8.05228 9.5 7.5 9.5C6.94772 9.5 6.5 9.05228 6.5 8.5C6.5 7.94772 6.94772 7.5 7.5 7.5Z"
|
||||
/>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 891 B After Width: | Height: | Size: 1.8 KiB |
@ -3,15 +3,31 @@
|
||||
"Activity": "Activity",
|
||||
"Added": "added",
|
||||
"All": "All",
|
||||
"AllActivity": "All activity",
|
||||
"Attributes": "Attributes",
|
||||
"Changed": "changed",
|
||||
"CollectionUpdated": "Update {collection}",
|
||||
"Created": "Created",
|
||||
"DocAdded": "added {_class}",
|
||||
"DocCreated": "created {_class}",
|
||||
"DocDeleted": "deleted {_class}",
|
||||
"Edited": "edited",
|
||||
"Edit": "Edit",
|
||||
"Edited": "Edited",
|
||||
"Emoji": "Emoji",
|
||||
"For": "For",
|
||||
"From": "from",
|
||||
"In": "In",
|
||||
"New": "New",
|
||||
"NewestFirst": "Newest first",
|
||||
"Pinned": "Pinned",
|
||||
"Reacted": "Reacted",
|
||||
"Reactions": "Reactions",
|
||||
"Removed": "removed",
|
||||
"Set": "set",
|
||||
"To": "to",
|
||||
"Unset": "unset"
|
||||
"Unset": "Unset",
|
||||
"Update": "Update",
|
||||
"Updated": "Updated",
|
||||
"UpdatedCollection": "Updated"
|
||||
}
|
||||
}
|
@ -1,17 +1,33 @@
|
||||
{
|
||||
"string": {
|
||||
"Activity": "Активность",
|
||||
"Added": "добавила(а)",
|
||||
"Added": "Добавила(а)",
|
||||
"All": "Все",
|
||||
"Changed": "изменил(а)",
|
||||
"AllActivity": "Вся активнось",
|
||||
"Attributes": "Атрибуты",
|
||||
"Changed": "Изменил(а)",
|
||||
"CollectionUpdated": "Обновлена {collection}",
|
||||
"Created": "Создал(a)",
|
||||
"DocAdded": "добавил(а) {_class}",
|
||||
"DocCreated": "создал(а) {_class}",
|
||||
"DocDeleted": "удалил(а) {_class}",
|
||||
"Edited": "отредактировал(а)",
|
||||
"Edit": "Редактировать",
|
||||
"Edited": "Изменено",
|
||||
"Emoji": "Эмодзи",
|
||||
"For": "Для",
|
||||
"From": "из",
|
||||
"Removed": "удалил(а)",
|
||||
"In": "В",
|
||||
"New": "Новые",
|
||||
"NewestFirst": "Сначала новые",
|
||||
"Pinned": "Закрепленные",
|
||||
"Reacted": "Отреагировал(а)",
|
||||
"Reactions": "Реакции",
|
||||
"Removed": "Удалил(а)",
|
||||
"Set": "установлен",
|
||||
"To": "на",
|
||||
"Unset": "сбросил"
|
||||
"Unset": "Cбросил",
|
||||
"Update": "Обновить",
|
||||
"Updated": "Обновил(а)",
|
||||
"UpdatedCollection": "Обновленные"
|
||||
}
|
||||
}
|
@ -18,5 +18,6 @@ import { loadMetadata } from '@hcengineering/platform'
|
||||
|
||||
const icons = require('../assets/icons.svg') as string // eslint-disable-line
|
||||
loadMetadata(activity.icon, {
|
||||
Activity: `${icons}#activity`
|
||||
Activity: `${icons}#activity`,
|
||||
Emoji: `${icons}#emoji`
|
||||
})
|
||||
|
@ -36,8 +36,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@hcengineering/activity": "^0.6.0",
|
||||
"@hcengineering/contact": "^0.6.20",
|
||||
"@hcengineering/contact-resources": "^0.6.0",
|
||||
"@hcengineering/core": "^0.6.28",
|
||||
"@hcengineering/notification": "^0.6.16",
|
||||
"@hcengineering/platform": "^0.6.9",
|
||||
"@hcengineering/presentation": "^0.6.2",
|
||||
"@hcengineering/ui": "^0.6.11",
|
||||
|
@ -28,19 +28,8 @@ import core, {
|
||||
type TxCUD,
|
||||
type TxMixin,
|
||||
TxProcessor,
|
||||
type TxUpdateDoc,
|
||||
type WithLookup
|
||||
type TxUpdateDoc
|
||||
} from '@hcengineering/core'
|
||||
import notification, {
|
||||
type ActivityMessage,
|
||||
type ChatMessage,
|
||||
type DisplayActivityMessage,
|
||||
type DisplayDocUpdateMessage,
|
||||
type DocAttributeUpdates,
|
||||
type DocNotifyContext,
|
||||
type DocUpdateMessage,
|
||||
type InboxNotification
|
||||
} from '@hcengineering/notification'
|
||||
import view, { type AttributeModel } from '@hcengineering/view'
|
||||
import { getClient, getFiltredKeys } from '@hcengineering/presentation'
|
||||
import { getAttributePresenter, getDocLinkTitle } from '@hcengineering/view-resources'
|
||||
@ -49,6 +38,13 @@ import { type IntlString } from '@hcengineering/platform'
|
||||
import { type AnyComponent } from '@hcengineering/ui'
|
||||
import { get } from 'svelte/store'
|
||||
import { personAccountByIdStore } from '@hcengineering/contact-resources'
|
||||
import activity, {
|
||||
type ActivityMessage,
|
||||
type DisplayActivityMessage,
|
||||
type DisplayDocUpdateMessage,
|
||||
type DocAttributeUpdates,
|
||||
type DocUpdateMessage
|
||||
} from '@hcengineering/activity'
|
||||
|
||||
// Use 5 minutes to combine similar messages
|
||||
const combineThresholdMs = 5 * 60 * 1000
|
||||
@ -131,7 +127,7 @@ export function getCollectionAttribute (
|
||||
return undefined
|
||||
}
|
||||
|
||||
export async function getNotificationObject (
|
||||
export async function getActivityObject (
|
||||
client: Client,
|
||||
objectId: Ref<Doc>,
|
||||
objectClass: Ref<Class<Doc>>
|
||||
@ -176,65 +172,20 @@ export async function getAttributeModel (
|
||||
attrObjectClass,
|
||||
attrKey,
|
||||
{ key: attrKey },
|
||||
view.mixin.NotificationAttributePresenter
|
||||
view.mixin.ActivityAttributePresenter
|
||||
)
|
||||
} catch (e) {
|
||||
// ignore error
|
||||
}
|
||||
}
|
||||
|
||||
function activityMessagesComparator (message1: ActivityMessage, message2: ActivityMessage): number {
|
||||
export function activityMessagesComparator (message1: ActivityMessage, message2: ActivityMessage): number {
|
||||
const time1 = getMessageTime(message1)
|
||||
const time2 = getMessageTime(message2)
|
||||
|
||||
return time1 - time2
|
||||
}
|
||||
|
||||
export function getDisplayActivityMessagesByNotifications (
|
||||
inboxNotifications: Array<WithLookup<InboxNotification>>,
|
||||
docNotifyContextById: Map<Ref<DocNotifyContext>, DocNotifyContext>,
|
||||
filter: 'all' | 'read' | 'unread',
|
||||
objectClass?: Ref<Class<Doc>>
|
||||
): DisplayActivityMessage[] {
|
||||
const messages = inboxNotifications
|
||||
.filter(({ docNotifyContext, isViewed }) => {
|
||||
const update = docNotifyContextById.get(docNotifyContext)
|
||||
const isVisible = update !== undefined && !update.hidden
|
||||
|
||||
if (!isVisible) {
|
||||
return false
|
||||
}
|
||||
|
||||
switch (filter) {
|
||||
case 'unread':
|
||||
return !isViewed
|
||||
case 'all':
|
||||
return true
|
||||
case 'read':
|
||||
return !!isViewed
|
||||
}
|
||||
|
||||
return false
|
||||
})
|
||||
.map(({ $lookup }) => $lookup?.attachedTo)
|
||||
.filter((message): message is ActivityMessage => {
|
||||
if (message === undefined) {
|
||||
return false
|
||||
}
|
||||
if (objectClass === undefined) {
|
||||
return true
|
||||
}
|
||||
if (message._class === notification.class.ChatMessage) {
|
||||
return false
|
||||
}
|
||||
|
||||
return (message as DocUpdateMessage).objectClass === objectClass
|
||||
})
|
||||
.sort(activityMessagesComparator)
|
||||
|
||||
return combineActivityMessages(messages, SortingOrder.Descending)
|
||||
}
|
||||
|
||||
function getMessageTime (message: ActivityMessage): number {
|
||||
return message.createdOn ?? message.modifiedOn
|
||||
}
|
||||
@ -265,15 +216,13 @@ export function combineActivityMessages (
|
||||
messages: ActivityMessage[],
|
||||
sortingOrder: SortingOrder = SortingOrder.Ascending
|
||||
): DisplayActivityMessage[] {
|
||||
const chatMessages = messages.filter(
|
||||
(message): message is ChatMessage => message._class === notification.class.ChatMessage
|
||||
)
|
||||
const uncombinedMessages = messages.filter((message) => message._class !== activity.class.DocUpdateMessage)
|
||||
|
||||
const docUpdateMessages = combineByCreateThreshold(
|
||||
messages.filter((message): message is DocUpdateMessage => message._class === notification.class.DocUpdateMessage)
|
||||
messages.filter((message): message is DocUpdateMessage => message._class === activity.class.DocUpdateMessage)
|
||||
)
|
||||
|
||||
const result: DisplayActivityMessage[] = [...chatMessages]
|
||||
const result: DisplayActivityMessage[] = [...uncombinedMessages]
|
||||
|
||||
const groupedByType: Map<string, DocUpdateMessage[]> = groupByArray(docUpdateMessages, getDocUpdateMessageKey)
|
||||
|
||||
@ -473,17 +422,13 @@ function getAttributeUpdatesKey (message: DocUpdateMessage): string {
|
||||
}
|
||||
|
||||
export function attributesFilter (message: ActivityMessage, _class?: Ref<Doc>): boolean {
|
||||
if (message._class === notification.class.DocUpdateMessage) {
|
||||
if (message._class === activity.class.DocUpdateMessage) {
|
||||
return (message as DocUpdateMessage).objectClass === _class
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
export function chatMessagesFilter (message: ActivityMessage): boolean {
|
||||
return message._class === notification.class.ChatMessage
|
||||
}
|
||||
|
||||
export function pinnedFilter (message: ActivityMessage, _class?: Ref<Doc>): boolean {
|
||||
return message.isPinned === true
|
||||
}
|
||||
@ -506,9 +451,9 @@ export async function getLinkData (
|
||||
|
||||
let linkObject: Doc | undefined
|
||||
|
||||
if (hierarchy.isDerived(message.attachedToClass, notification.class.ActivityMessage)) {
|
||||
if (hierarchy.isDerived(message.attachedToClass, activity.class.ActivityMessage)) {
|
||||
linkObject = parentObject
|
||||
} else if (message._class === notification.class.DocUpdateMessage) {
|
||||
} else if (message._class === activity.class.DocUpdateMessage) {
|
||||
linkObject = (message as DocUpdateMessage).action === 'update' ? object : parentObject ?? object
|
||||
} else {
|
||||
linkObject = parentObject ?? object
|
||||
@ -524,13 +469,12 @@ export async function getLinkData (
|
||||
|
||||
const title = await getDocLinkTitle(client, linkObject._id, linkObject._class, linkObject)
|
||||
|
||||
const preposition = hierarchy.classHierarchyMixin(linkObject._class, notification.mixin.NotificationObjectPreposition)
|
||||
?.preposition
|
||||
const preposition = hierarchy.classHierarchyMixin(linkObject._class, activity.mixin.ActivityDoc)?.preposition
|
||||
const panelComponent = hierarchy.classHierarchyMixin(linkObject._class, view.mixin.ObjectPanel)
|
||||
|
||||
return {
|
||||
title,
|
||||
preposition: preposition ?? notification.string.In,
|
||||
preposition: preposition ?? activity.string.In,
|
||||
panelComponent: panelComponent?.component ?? view.component.EditDoc,
|
||||
object: linkObject
|
||||
}
|
@ -13,14 +13,14 @@
|
||||
// limitations under the License.
|
||||
-->
|
||||
<script lang="ts">
|
||||
import activity from '@hcengineering/activity'
|
||||
import activity, { ActivityExtension, ActivityMessage, DisplayActivityMessage } from '@hcengineering/activity'
|
||||
import { Doc, Ref, SortingOrder } from '@hcengineering/core'
|
||||
import notification, { DisplayActivityMessage, ActivityMessage } from '@hcengineering/notification'
|
||||
import { getResource } from '@hcengineering/platform'
|
||||
import { createQuery } from '@hcengineering/presentation'
|
||||
import { createQuery, getClient } from '@hcengineering/presentation'
|
||||
import { Component, Grid, Label, Lazy, Spinner } from '@hcengineering/ui'
|
||||
import ActivityExtensionComponent from './ActivityExtension.svelte'
|
||||
|
||||
import ActivityFilter from './ActivityFilter.svelte'
|
||||
import { combineActivityMessages } from '../activityMessagesUtils'
|
||||
|
||||
export let object: Doc
|
||||
export let showCommenInput: boolean = true
|
||||
@ -28,23 +28,29 @@
|
||||
export let focusIndex: number = -1
|
||||
export let boundary: HTMLElement | undefined = undefined
|
||||
|
||||
const client = getClient()
|
||||
const activityMessagesQuery = createQuery()
|
||||
|
||||
let extensions: ActivityExtension[] = []
|
||||
|
||||
let filteredMessages: DisplayActivityMessage[] = []
|
||||
let activityMessages: ActivityMessage[] = []
|
||||
let isLoading = false
|
||||
|
||||
let isNewestFirst = JSON.parse(localStorage.getItem('activity-newest-first') ?? 'false')
|
||||
|
||||
$: client.findAll(activity.class.ActivityExtension, { ofClass: object._class }).then((res) => {
|
||||
extensions = res
|
||||
})
|
||||
|
||||
async function updateActivityMessages (objectId: Ref<Doc>, order: SortingOrder): Promise<void> {
|
||||
isLoading = true
|
||||
const combineMessagesFn = await getResource(notification.function.CombineActivityMessages)
|
||||
|
||||
const res = activityMessagesQuery.query(
|
||||
notification.class.ActivityMessage,
|
||||
activity.class.ActivityMessage,
|
||||
{ attachedTo: objectId },
|
||||
(result: ActivityMessage[]) => {
|
||||
activityMessages = combineMessagesFn(result, order)
|
||||
activityMessages = combineActivityMessages(result, order)
|
||||
isLoading = false
|
||||
},
|
||||
{
|
||||
@ -85,7 +91,7 @@
|
||||
{#each filteredMessages as message}
|
||||
<Lazy>
|
||||
<Component
|
||||
is={notification.component.ActivityMessagePresenter}
|
||||
is={activity.component.ActivityMessagePresenter}
|
||||
props={{
|
||||
value: message,
|
||||
boundary
|
||||
@ -98,7 +104,7 @@
|
||||
</div>
|
||||
{#if showCommenInput}
|
||||
<div class="ref-input">
|
||||
<Component is={notification.component.ChatMessageInput} props={{ object, boundary, focusIndex }} />
|
||||
<ActivityExtensionComponent kind="input" {extensions} props={{ object, boundary, focusIndex }} />
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
|
@ -13,18 +13,16 @@
|
||||
// limitations under the License.
|
||||
-->
|
||||
<script lang="ts">
|
||||
import { getClient } from '@hcengineering/presentation'
|
||||
import { ActivityExtension, ActivityExtensionKind } from '@hcengineering/activity'
|
||||
import { Component } from '@hcengineering/ui'
|
||||
|
||||
import ReactionsAction from '../ReactionsAction.svelte'
|
||||
import notification, { ActivityMessage } from '@hcengineering/notification'
|
||||
export let kind: ActivityExtensionKind
|
||||
export let extensions: ActivityExtension[] = []
|
||||
export let props: Record<string, any> = {}
|
||||
|
||||
export let object: ActivityMessage | undefined = undefined
|
||||
|
||||
const client = getClient()
|
||||
$: isVisible =
|
||||
object !== undefined && !client.getHierarchy().isDerived(object.attachedToClass, notification.class.ActivityMessage)
|
||||
$: extension = extensions.find((e) => e.components[kind] !== undefined)
|
||||
</script>
|
||||
|
||||
{#if isVisible}
|
||||
<ReactionsAction {object} />
|
||||
{#if extension}
|
||||
<Component is={extension.components[kind]} {props} on:close on:open />
|
||||
{/if}
|
@ -18,12 +18,13 @@
|
||||
import { getResource } from '@hcengineering/platform'
|
||||
import { getClient } from '@hcengineering/presentation'
|
||||
import { ActionIcon, eventToHTMLElement, Icon, Label, showPopup } from '@hcengineering/ui'
|
||||
import notification, { ActivityMessage, ActivityMessagesFilter } from '@hcengineering/notification'
|
||||
import { ActivityMessage, ActivityMessagesFilter } from '@hcengineering/activity'
|
||||
|
||||
import activity from '../plugin'
|
||||
import FilterPopup from './FilterPopup.svelte'
|
||||
import IconClose from './icons/Close.svelte'
|
||||
import IconFilter from './icons/Filter.svelte'
|
||||
import { sortActivityMessages } from '../activityMessagesUtils'
|
||||
|
||||
export let messages: ActivityMessage[]
|
||||
export let object: Doc
|
||||
@ -40,7 +41,7 @@
|
||||
$: localStorage.setItem('activity-filter', JSON.stringify(selectedFiltersRefs))
|
||||
$: localStorage.setItem('activity-newest-first', JSON.stringify(isNewestFirst))
|
||||
|
||||
client.findAll(notification.class.ActivityMessagesFilter, {}).then((res) => {
|
||||
client.findAll(activity.class.ActivityMessagesFilter, {}).then((res) => {
|
||||
filters = res
|
||||
|
||||
if (saved !== null && saved !== undefined) {
|
||||
@ -83,9 +84,7 @@
|
||||
selected: Ref<Doc>[] | 'All',
|
||||
sortOrder: SortingOrder
|
||||
): Promise<void> {
|
||||
const sortMessagesFn = await getResource(notification.function.SortActivityMessages)
|
||||
|
||||
const sortedMessages = sortMessagesFn(messages, sortOrder).sort(({ isPinned }) =>
|
||||
const sortedMessages = sortActivityMessages(messages, sortOrder).sort(({ isPinned }) =>
|
||||
isPinned && sortOrder === SortingOrder.Ascending ? -1 : 1
|
||||
)
|
||||
|
||||
|
@ -17,7 +17,7 @@
|
||||
import { IntlString } from '@hcengineering/platform'
|
||||
import { Label, resizeObserver, CheckBox, MiniToggle } from '@hcengineering/ui'
|
||||
import { Doc, Ref } from '@hcengineering/core'
|
||||
import notification, { ActivityMessagesFilter } from '@hcengineering/notification'
|
||||
import { ActivityMessagesFilter } from '@hcengineering/activity'
|
||||
|
||||
import activity from '../plugin'
|
||||
|
||||
@ -132,7 +132,7 @@
|
||||
<div class="ml-3 mt-2 mb-2 mr-3">
|
||||
<MiniToggle
|
||||
bind:on={activityOrderNewestFirst}
|
||||
label={notification.string.NewestFirst}
|
||||
label={activity.string.NewestFirst}
|
||||
on:change={() => {
|
||||
dispatch('update', { action: 'toggle', value: activityOrderNewestFirst })
|
||||
}}
|
||||
|
@ -13,7 +13,7 @@
|
||||
// limitations under the License.
|
||||
-->
|
||||
<script lang="ts">
|
||||
import { ActivityMessageExtension, ActivityMessageExtensionKind } from '@hcengineering/notification'
|
||||
import { ActivityMessageExtension, ActivityMessageExtensionKind } from '@hcengineering/activity'
|
||||
import { Component } from '@hcengineering/ui'
|
||||
|
||||
export let kind: ActivityMessageExtensionKind
|
@ -13,7 +13,7 @@
|
||||
// limitations under the License.
|
||||
-->
|
||||
<script lang="ts">
|
||||
import { DisplayActivityMessage } from '@hcengineering/notification'
|
||||
import { DisplayActivityMessage } from '@hcengineering/activity'
|
||||
import view from '@hcengineering/view'
|
||||
import { getClient } from '@hcengineering/presentation'
|
||||
import { Component } from '@hcengineering/ui'
|
||||
@ -26,7 +26,6 @@
|
||||
export let shouldScroll: boolean = false
|
||||
export let embedded: boolean = false
|
||||
export let hasActionsMenu: boolean = true
|
||||
export let hasNotifyActions = false
|
||||
export let onClick: (() => void) | undefined = undefined
|
||||
|
||||
const client = getClient()
|
||||
@ -46,7 +45,6 @@
|
||||
shouldScroll,
|
||||
embedded,
|
||||
hasActionsMenu,
|
||||
hasNotifyActions,
|
||||
onClick
|
||||
}}
|
||||
/>
|
@ -17,26 +17,28 @@
|
||||
import { Avatar, EmployeePresenter, SystemAvatar } from '@hcengineering/contact-resources'
|
||||
import { getClient } from '@hcengineering/presentation'
|
||||
import core from '@hcengineering/core/lib/component'
|
||||
import notification, {
|
||||
import activity, {
|
||||
DisplayActivityMessage,
|
||||
ActivityMessageExtension,
|
||||
DocUpdateMessageViewlet,
|
||||
ChatMessageViewlet
|
||||
} from '@hcengineering/notification'
|
||||
ActivityMessageViewlet
|
||||
} from '@hcengineering/activity'
|
||||
import { Action, ActionIcon, IconMoreH, Label, showPopup } from '@hcengineering/ui'
|
||||
import { getActions, Menu } from '@hcengineering/view-resources'
|
||||
import { getDisplayTime } from '@hcengineering/core'
|
||||
|
||||
import ActivityMessageExtensionComponent from './ActivityMessageExtension.svelte'
|
||||
import ActivityMessagePresenter from './ActivityMessagePresenter.svelte'
|
||||
import AddReactionAction from '../reactions/AddReactionAction.svelte'
|
||||
import ReactionsPresenter from '../reactions/ReactionsPresenter.svelte'
|
||||
import PinMessageAction from './PinMessageAction.svelte'
|
||||
|
||||
export let message: DisplayActivityMessage
|
||||
export let parentMessage: DisplayActivityMessage | undefined
|
||||
export let viewlet: DocUpdateMessageViewlet | ChatMessageViewlet | undefined
|
||||
|
||||
export let viewlet: ActivityMessageViewlet | undefined
|
||||
export let person: Person | undefined = undefined
|
||||
export let actions: Action[] = []
|
||||
export let excludedActions: string[] = []
|
||||
export let hasNotifyActions = false
|
||||
export let showNotify: boolean = false
|
||||
export let isHighlighted: boolean = false
|
||||
export let isSelected: boolean = false
|
||||
@ -47,17 +49,12 @@
|
||||
|
||||
const client = getClient()
|
||||
let allActionIds: string[] = []
|
||||
const notifyActions = [
|
||||
notification.action.MarkAsUnreadInboxNotification,
|
||||
notification.action.MarkAsReadInboxNotification,
|
||||
notification.action.DeleteInboxNotification
|
||||
]
|
||||
|
||||
let element: HTMLDivElement | undefined = undefined
|
||||
let extensions: ActivityMessageExtension[] = []
|
||||
let isActionMenuOpened = false
|
||||
|
||||
$: getActions(client, message, notification.class.ActivityMessage).then((res) => {
|
||||
$: getActions(client, message, activity.class.ActivityMessage).then((res) => {
|
||||
allActionIds = res.map(({ _id }) => _id)
|
||||
})
|
||||
|
||||
@ -73,7 +70,7 @@
|
||||
}
|
||||
|
||||
client
|
||||
.findAll(notification.class.ActivityMessageExtension, { ofMessage: message._class })
|
||||
.findAll(activity.class.ActivityMessageExtension, { ofMessage: message._class })
|
||||
.then((res: ActivityMessageExtension[]) => {
|
||||
extensions = res
|
||||
})
|
||||
@ -87,15 +84,14 @@
|
||||
}
|
||||
|
||||
$: key = parentMessage ? `${message._id}_${parentMessage._id}` : message._id
|
||||
$: actualExcludedActions = hasNotifyActions ? excludedActions : [...notifyActions, ...excludedActions]
|
||||
|
||||
function showMenu (ev: MouseEvent) {
|
||||
showPopup(
|
||||
Menu,
|
||||
{
|
||||
object: message,
|
||||
baseMenuClass: notification.class.ActivityMessage,
|
||||
excludedActions: actualExcludedActions,
|
||||
baseMenuClass: activity.class.ActivityMessage,
|
||||
excludedActions,
|
||||
actions
|
||||
},
|
||||
ev.target as HTMLElement,
|
||||
@ -106,13 +102,12 @@
|
||||
|
||||
$: isHidden = !!viewlet?.onlyWithParent && parentMessage === undefined
|
||||
$: withActionMenu =
|
||||
!embedded &&
|
||||
hasActionsMenu &&
|
||||
(actions.length > 0 || allActionIds.some((id) => !actualExcludedActions.includes(id)))
|
||||
!embedded && hasActionsMenu && (actions.length > 0 || allActionIds.some((id) => !excludedActions.includes(id)))
|
||||
</script>
|
||||
|
||||
{#if !isHidden}
|
||||
{#key key}
|
||||
<!-- svelte-ignore a11y-no-static-element-interactions -->
|
||||
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
||||
<div
|
||||
bind:this={element}
|
||||
@ -157,6 +152,8 @@
|
||||
|
||||
<ActivityMessageExtensionComponent kind="footer" {extensions} props={{ object: message }} />
|
||||
|
||||
<ReactionsPresenter object={message} />
|
||||
|
||||
{#if parentMessage}
|
||||
<div class="mt-2" />
|
||||
<ActivityMessagePresenter value={parentMessage} embedded />
|
||||
@ -167,6 +164,9 @@
|
||||
class="actions clear-mins flex flex-gap-2 items-center"
|
||||
class:menuShowed={isActionMenuOpened || message.isPinned}
|
||||
>
|
||||
<AddReactionAction object={message} />
|
||||
<PinMessageAction object={message} />
|
||||
|
||||
<ActivityMessageExtensionComponent
|
||||
kind="action"
|
||||
{extensions}
|
@ -16,7 +16,7 @@
|
||||
import { ActionIcon } from '@hcengineering/ui'
|
||||
import { getClient } from '@hcengineering/presentation'
|
||||
import view from '@hcengineering/view'
|
||||
import { ActivityMessage } from '@hcengineering/notification'
|
||||
import { ActivityMessage } from '@hcengineering/activity'
|
||||
|
||||
export let object: ActivityMessage
|
||||
|
@ -13,10 +13,10 @@
|
||||
// limitations under the License.
|
||||
-->
|
||||
<script lang="ts">
|
||||
import notification, { DocAttributeUpdates, DocUpdateMessageViewlet } from '@hcengineering/notification'
|
||||
import { Component } from '@hcengineering/ui'
|
||||
import { AttributeModel } from '@hcengineering/view'
|
||||
import view, { AttributeModel } from '@hcengineering/view'
|
||||
import { getClient } from '@hcengineering/presentation'
|
||||
import { DocAttributeUpdates, DocUpdateMessageViewlet } from '@hcengineering/activity'
|
||||
|
||||
import AddedAttributesPresenter from './attributes/AddedAttributesPresenter.svelte'
|
||||
import RemovedAttributesPresenter from './attributes/RemovedAttributesPresenter.svelte'
|
||||
@ -31,8 +31,7 @@
|
||||
|
||||
$: presenter =
|
||||
viewlet?.config?.[attributeModel.key]?.presenter ??
|
||||
hierarchy.classHierarchyMixin(attributeUpdates.attrClass, notification.mixin.NotificationAttributePresenter)
|
||||
?.presenter
|
||||
hierarchy.classHierarchyMixin(attributeUpdates.attrClass, view.mixin.ActivityAttributePresenter)?.presenter
|
||||
</script>
|
||||
|
||||
{#if presenter}
|
@ -15,14 +15,10 @@
|
||||
<script lang="ts">
|
||||
import { AttachedDoc, Attribute, Class, Collection, Doc, Ref } from '@hcengineering/core'
|
||||
import { Icon, Label } from '@hcengineering/ui'
|
||||
import notification, {
|
||||
DocUpdateMessageViewlet,
|
||||
DisplayDocUpdateMessage,
|
||||
DocUpdateMessage
|
||||
} from '@hcengineering/notification'
|
||||
import { IntlString } from '@hcengineering/platform'
|
||||
import { getClient } from '@hcengineering/presentation'
|
||||
import view from '@hcengineering/view'
|
||||
import activity, { DisplayDocUpdateMessage, DocUpdateMessage, DocUpdateMessageViewlet } from '@hcengineering/activity'
|
||||
|
||||
import NotificationObjectValue from './DocUpdateMessageObjectValue.svelte'
|
||||
|
||||
@ -46,7 +42,8 @@
|
||||
|
||||
$: valueMessages = message.previousMessages?.length ? [...message.previousMessages, message] : [message]
|
||||
$: hasDifferentActions = message.previousMessages?.some(({ action }) => action !== message.action)
|
||||
$: icon = viewlet?.icon ?? collectionAttribute?.icon ?? clazz.icon ?? notification.icon.Notifications
|
||||
// TODO: use AcrivityIcon
|
||||
$: icon = viewlet?.icon ?? collectionAttribute?.icon ?? clazz.icon ?? activity.icon.Activity
|
||||
</script>
|
||||
|
||||
<div class="content">
|
||||
@ -54,11 +51,11 @@
|
||||
<Icon {icon} size="small" />
|
||||
</span>
|
||||
{#if hasDifferentActions}
|
||||
<Label label={notification.string.UpdatedCollection} />
|
||||
<Label label={activity.string.UpdatedCollection} />
|
||||
{:else if message.action === 'create'}
|
||||
<Label label={notification.string.New} />
|
||||
<Label label={activity.string.New} />
|
||||
{:else if message.action === 'remove' && message.updateCollection}
|
||||
<Label label={notification.string.Removed} />
|
||||
<Label label={activity.string.Removed} />
|
||||
{/if}
|
||||
<span class="lower">
|
||||
{#if collectionName && (message.previousMessages?.length || !isOwn)}
|
@ -16,9 +16,9 @@
|
||||
import { DocNavLink } from '@hcengineering/view-resources'
|
||||
import { Doc } from '@hcengineering/core'
|
||||
import { Label } from '@hcengineering/ui'
|
||||
import notification, { DocUpdateMessageViewlet, DisplayDocUpdateMessage } from '@hcengineering/notification'
|
||||
import { IntlString } from '@hcengineering/platform'
|
||||
import { AttributeModel } from '@hcengineering/view'
|
||||
import activity, { DisplayDocUpdateMessage, DocUpdateMessageViewlet } from '@hcengineering/activity'
|
||||
import { Person } from '@hcengineering/contact'
|
||||
|
||||
import { LinkData, getLinkData } from '../../activityMessagesUtils'
|
||||
@ -46,13 +46,13 @@
|
||||
const removed = attributeUpdates?.removed ?? []
|
||||
|
||||
if (added.length > 0 && removed.length === 0) {
|
||||
return notification.string.Added
|
||||
return activity.string.Added
|
||||
}
|
||||
if (removed.length > 0 && added.length === 0) {
|
||||
return notification.string.Removed
|
||||
return activity.string.Removed
|
||||
}
|
||||
|
||||
return notification.string.Changed
|
||||
return activity.string.Changed
|
||||
}
|
||||
</script>
|
||||
|
||||
@ -61,14 +61,14 @@
|
||||
{:else if message.previousMessages?.some(({ action }) => action !== message.action)}
|
||||
{@const name = collectionName ?? objectName}
|
||||
<span class="text-sm lower">
|
||||
<Label label={notification.string.Updated} />
|
||||
<Label label={activity.string.Updated} />
|
||||
{#if name}
|
||||
<Label label={name} />
|
||||
{/if}
|
||||
</span>
|
||||
{:else if message.action === 'create' && objectName}
|
||||
<span class="text-sm lower">
|
||||
<Label label={isOwn ? notification.string.Created : notification.string.Added} />
|
||||
<Label label={isOwn ? activity.string.Created : activity.string.Added} />
|
||||
{#if collectionName && (!isOwn || message.previousMessages?.length)}
|
||||
<Label label={collectionName} />
|
||||
{:else}
|
||||
@ -77,7 +77,7 @@
|
||||
</span>
|
||||
{:else if message.action === 'remove' && objectName}
|
||||
<span class="text-sm lower">
|
||||
<Label label={notification.string.Removed} />
|
||||
<Label label={activity.string.Removed} />
|
||||
{#if collectionName && message.previousMessages?.length}
|
||||
<Label label={collectionName} />
|
||||
{:else}
|
@ -15,12 +15,12 @@
|
||||
<script lang="ts">
|
||||
import { DocNavLink, getDocLinkTitle } from '@hcengineering/view-resources'
|
||||
import { Component, Icon, IconAdd, IconDelete } from '@hcengineering/ui'
|
||||
import { DocUpdateMessageViewlet, DisplayDocUpdateMessage } from '@hcengineering/notification'
|
||||
import { getClient } from '@hcengineering/presentation'
|
||||
import view, { ObjectPanel, ObjectPresenter } from '@hcengineering/view'
|
||||
import { Doc } from '@hcengineering/core'
|
||||
import { DisplayDocUpdateMessage, DocUpdateMessageViewlet } from '@hcengineering/activity'
|
||||
|
||||
import { getNotificationObject } from '../../activityMessagesUtils'
|
||||
import { getActivityObject } from '../../activityMessagesUtils'
|
||||
|
||||
export let message: DisplayDocUpdateMessage
|
||||
export let viewlet: DocUpdateMessageViewlet | undefined
|
||||
@ -44,7 +44,7 @@
|
||||
}
|
||||
</script>
|
||||
|
||||
{#await getNotificationObject(client, message.objectId, message.objectClass) then { object }}
|
||||
{#await getActivityObject(client, message.objectId, message.objectClass) then { object }}
|
||||
{#await getValue(object) then value}
|
||||
{#if withIcon && message.action === 'create'}
|
||||
<Icon icon={IconAdd} size="x-small" />
|
@ -17,28 +17,27 @@
|
||||
import { personByIdStore } from '@hcengineering/contact-resources'
|
||||
import { Account, AttachedDoc, Class, Collection, Doc, Ref } from '@hcengineering/core'
|
||||
import { createQuery, getClient } from '@hcengineering/presentation'
|
||||
import notification, {
|
||||
ActivityMessage,
|
||||
DocUpdateMessageViewlet,
|
||||
DocUpdateMessage,
|
||||
DisplayDocUpdateMessage,
|
||||
DisplayActivityMessage,
|
||||
DocUpdateAction
|
||||
} from '@hcengineering/notification'
|
||||
import core from '@hcengineering/core/lib/component'
|
||||
import { AttributeModel } from '@hcengineering/view'
|
||||
import { IntlString } from '@hcengineering/platform'
|
||||
import { Component, ShowMore } from '@hcengineering/ui'
|
||||
import activity, {
|
||||
ActivityMessage,
|
||||
DisplayActivityMessage,
|
||||
DisplayDocUpdateMessage,
|
||||
DocUpdateAction,
|
||||
DocUpdateMessage,
|
||||
DocUpdateMessageViewlet
|
||||
} from '@hcengineering/activity'
|
||||
|
||||
import ActivityMessageTemplate from '../activity-message/ActivityMessageTemplate.svelte'
|
||||
import DocUpdateMessageHeader from './DocUpdateMessageHeader.svelte'
|
||||
import DocUpdateMessageContent from './DocUpdateMessageContent.svelte'
|
||||
import DocUpdateMessageAttributes from './DocUpdateMessageAttributes.svelte'
|
||||
|
||||
import { getAttributeModel, getCollectionAttribute, getNotificationObject } from '../../activityMessagesUtils'
|
||||
import { getAttributeModel, getCollectionAttribute, getActivityObject } from '../../activityMessagesUtils'
|
||||
|
||||
export let value: DisplayDocUpdateMessage
|
||||
export let hasNotifyActions = false
|
||||
export let showNotify: boolean = false
|
||||
export let isHighlighted: boolean = false
|
||||
export let isSelected: boolean = false
|
||||
@ -79,7 +78,7 @@
|
||||
isViewletLoading = true
|
||||
|
||||
const res = viewletQuery.query(
|
||||
notification.class.DocUpdateMessageViewlet,
|
||||
activity.class.DocUpdateMessageViewlet,
|
||||
{ action, objectClass },
|
||||
(result: DocUpdateMessageViewlet[]) => {
|
||||
viewlet = result[0]
|
||||
@ -97,8 +96,8 @@
|
||||
})
|
||||
|
||||
async function getParentMessage (_class: Ref<Class<Doc>>, _id: Ref<Doc>): Promise<ActivityMessage | undefined> {
|
||||
if (hierarchy.isDerived(_class, notification.class.ActivityMessage)) {
|
||||
return await client.findOne(notification.class.ActivityMessage, { _id: _id as Ref<ActivityMessage> })
|
||||
if (hierarchy.isDerived(_class, activity.class.ActivityMessage)) {
|
||||
return await client.findOne(activity.class.ActivityMessage, { _id: _id as Ref<ActivityMessage> })
|
||||
}
|
||||
}
|
||||
|
||||
@ -112,7 +111,7 @@
|
||||
|
||||
$: person = user?.person && $personByIdStore.get(user.person)
|
||||
|
||||
$: getNotificationObject(client, value.objectId, value.objectClass).then((result) => {
|
||||
$: getActivityObject(client, value.objectId, value.objectClass).then((result) => {
|
||||
isObjectLoading = false
|
||||
object = result.object
|
||||
isObjectRemoved = result.isRemoved
|
||||
@ -124,14 +123,14 @@
|
||||
|
||||
async function getParentObject (message: DocUpdateMessage, parentMessage?: ActivityMessage) {
|
||||
if (parentMessage) {
|
||||
return await getNotificationObject(client, parentMessage.attachedTo, parentMessage.attachedToClass)
|
||||
return await getActivityObject(client, parentMessage.attachedTo, parentMessage.attachedToClass)
|
||||
}
|
||||
|
||||
if (message.objectId === message.attachedTo) {
|
||||
return
|
||||
}
|
||||
|
||||
return await getNotificationObject(client, message.attachedTo, message.attachedToClass)
|
||||
return await getActivityObject(client, message.attachedTo, message.attachedToClass)
|
||||
}
|
||||
|
||||
$: if (object && value.objectClass !== object._class) {
|
||||
@ -151,7 +150,6 @@
|
||||
{embedded}
|
||||
{hasActionsMenu}
|
||||
{viewlet}
|
||||
{hasNotifyActions}
|
||||
{onClick}
|
||||
>
|
||||
<svelte:fragment slot="header">
|
||||
@ -175,7 +173,7 @@
|
||||
<ShowMore>
|
||||
<div class="customContent">
|
||||
{#each [...(value?.previousMessages ?? []), value] as msg}
|
||||
{#await getNotificationObject(client, msg.objectId, msg.objectClass) then { object }}
|
||||
{#await getActivityObject(client, msg.objectId, msg.objectClass) then { object }}
|
||||
{#if object}
|
||||
<Component is={viewlet.component} props={{ message: value, value: object }} />
|
||||
{/if}
|
@ -13,10 +13,10 @@
|
||||
// limitations under the License.
|
||||
-->
|
||||
<script lang="ts">
|
||||
import notification, { DocAttributeUpdates, DocUpdateMessageViewlet } from '@hcengineering/notification'
|
||||
import { Label } from '@hcengineering/ui'
|
||||
import { AttributeModel } from '@hcengineering/view'
|
||||
import ChangeAttributesTemplate from './ChangeAttributesTemplate.svelte'
|
||||
import activity, { DocAttributeUpdates, DocUpdateMessageViewlet } from '@hcengineering/activity'
|
||||
|
||||
export let viewlet: DocUpdateMessageViewlet | undefined
|
||||
export let attributeModel: AttributeModel
|
||||
@ -25,7 +25,7 @@
|
||||
|
||||
<ChangeAttributesTemplate {viewlet} {attributeModel} {values}>
|
||||
<svelte:fragment slot="text">
|
||||
<Label label={notification.string.New} />
|
||||
<Label label={activity.string.New} />
|
||||
<span class="lower"><Label label={attributeModel.label} />:</span>
|
||||
</svelte:fragment>
|
||||
</ChangeAttributesTemplate>
|
@ -13,16 +13,16 @@
|
||||
// limitations under the License.
|
||||
-->
|
||||
<script lang="ts">
|
||||
import { DocAttributeUpdates, DocUpdateMessageViewlet } from '@hcengineering/notification'
|
||||
import { Icon, IconEdit, Component } from '@hcengineering/ui'
|
||||
import { ObjectPresenter } from '@hcengineering/view-resources'
|
||||
import { getClient } from '@hcengineering/presentation'
|
||||
import { Doc } from '@hcengineering/core'
|
||||
import { AttributeModel } from '@hcengineering/view'
|
||||
import { DocAttributeUpdates, DocUpdateMessageViewlet } from '@hcengineering/activity'
|
||||
|
||||
import { getAttributeValues } from '../../../activityMessagesUtils'
|
||||
|
||||
type Values = DocAttributeUpdates['set'] | DocAttributeUpdates['added'] | DocAttributeUpdates['removed']
|
||||
type Values = DocAttributeUpdates['set' | 'added' | 'removed']
|
||||
export let viewlet: DocUpdateMessageViewlet | undefined
|
||||
export let attributeModel: AttributeModel
|
||||
export let values: Values
|
@ -13,9 +13,9 @@
|
||||
// limitations under the License.
|
||||
-->
|
||||
<script lang="ts">
|
||||
import notification, { DocAttributeUpdates, DocUpdateMessageViewlet } from '@hcengineering/notification'
|
||||
import { Label } from '@hcengineering/ui'
|
||||
import { AttributeModel } from '@hcengineering/view'
|
||||
import activity, { DocAttributeUpdates, DocUpdateMessageViewlet } from '@hcengineering/activity'
|
||||
|
||||
import ChangeAttributesTemplate from './ChangeAttributesTemplate.svelte'
|
||||
|
||||
@ -26,7 +26,7 @@
|
||||
|
||||
<ChangeAttributesTemplate {viewlet} {attributeModel} {values}>
|
||||
<svelte:fragment slot="text">
|
||||
<Label label={notification.string.Removed} />
|
||||
<Label label={activity.string.Removed} />
|
||||
<span class="lower"> <Label label={attributeModel.label} />:</span>
|
||||
</svelte:fragment>
|
||||
</ChangeAttributesTemplate>
|
@ -13,10 +13,10 @@
|
||||
// limitations under the License.
|
||||
-->
|
||||
<script lang="ts">
|
||||
import notification, { DocAttributeUpdates, DocUpdateMessageViewlet } from '@hcengineering/notification'
|
||||
import ui, { Icon, Label, IconEdit } from '@hcengineering/ui'
|
||||
import { AttributeModel } from '@hcengineering/view'
|
||||
import core from '@hcengineering/core/lib/component'
|
||||
import core from '@hcengineering/core'
|
||||
import activity, { DocAttributeUpdates, DocUpdateMessageViewlet } from '@hcengineering/activity'
|
||||
|
||||
import ChangeAttributesTemplate from './ChangeAttributesTemplate.svelte'
|
||||
|
||||
@ -45,7 +45,7 @@
|
||||
{#if isUnset}
|
||||
<div class="unset">
|
||||
<span class="mr-1"><Icon icon={attributeIcon} size="small" /></span>
|
||||
<Label label={notification.string.Unset} />
|
||||
<Label label={activity.string.Unset} />
|
||||
<span class="lower"><Label label={attributeModel.label} /></span>
|
||||
</div>
|
||||
{:else if isTextType}
|
||||
@ -62,8 +62,8 @@
|
||||
<ChangeAttributesTemplate {viewlet} {attributeModel} {values}>
|
||||
<svelte:fragment slot="text">
|
||||
<Label label={attributeModel.label} />
|
||||
<span class="lower"><Label label={notification.string.Set} /></span>
|
||||
<span class="lower"><Label label={notification.string.To} /></span>
|
||||
<span class="lower"><Label label={activity.string.Set} /></span>
|
||||
<span class="lower"><Label label={activity.string.To} /></span>
|
||||
</svelte:fragment>
|
||||
</ChangeAttributesTemplate>
|
||||
{/if}
|
@ -13,14 +13,13 @@
|
||||
// limitations under the License.
|
||||
-->
|
||||
<script lang="ts">
|
||||
import { createEventDispatcher } from 'svelte'
|
||||
import { ActionIcon, EmojiPopup, IconEmoji, showPopup } from '@hcengineering/ui'
|
||||
import { createQuery, getClient } from '@hcengineering/presentation'
|
||||
import { Reaction } from '@hcengineering/chunter'
|
||||
import activity, { Reaction } from '@hcengineering/activity'
|
||||
import { Doc } from '@hcengineering/core'
|
||||
|
||||
import chunter from '../plugin'
|
||||
import { updateDocReactions } from '../utils'
|
||||
import { createEventDispatcher } from 'svelte'
|
||||
import { updateDocReactions } from '../../utils'
|
||||
|
||||
export let object: Doc | undefined = undefined
|
||||
|
||||
@ -32,7 +31,7 @@
|
||||
let reactions: Reaction[] = []
|
||||
|
||||
$: if (object) {
|
||||
reactionsQuery.query(chunter.class.Reaction, { attachedTo: object._id }, (res?: Reaction[]) => {
|
||||
reactionsQuery.query(activity.class.Reaction, { attachedTo: object._id }, (res?: Reaction[]) => {
|
||||
reactions = res || []
|
||||
})
|
||||
}
|
@ -13,7 +13,8 @@
|
||||
// limitations under the License.
|
||||
-->
|
||||
<script lang="ts">
|
||||
import type { Reaction } from '@hcengineering/chunter'
|
||||
import { Reaction } from '@hcengineering/activity'
|
||||
|
||||
export let value: Reaction | undefined
|
||||
</script>
|
||||
|
@ -14,13 +14,13 @@
|
||||
-->
|
||||
<script lang="ts">
|
||||
import { createEventDispatcher } from 'svelte'
|
||||
import { Reaction } from '@hcengineering/chunter'
|
||||
import { Reaction } from '@hcengineering/activity'
|
||||
import { Account, Doc, Ref } from '@hcengineering/core'
|
||||
import { EmojiPopup, IconAdd, showPopup, tooltip } from '@hcengineering/ui'
|
||||
import { getClient } from '@hcengineering/presentation'
|
||||
|
||||
import ReactionsTooltip from './ReactionsTooltip.svelte'
|
||||
import { updateDocReactions } from '../utils'
|
||||
import { updateDocReactions } from '../../utils'
|
||||
|
||||
export let reactions: Reaction[] = []
|
||||
export let object: Doc | undefined = undefined
|
@ -14,13 +14,11 @@
|
||||
-->
|
||||
<script lang="ts">
|
||||
import { createQuery, getClient } from '@hcengineering/presentation'
|
||||
import { Reaction } from '@hcengineering/chunter'
|
||||
import activity, { Reaction } from '@hcengineering/activity'
|
||||
import { Doc } from '@hcengineering/core'
|
||||
|
||||
import Reactions from './Reactions.svelte'
|
||||
|
||||
import { updateDocReactions } from '../utils'
|
||||
import chunter from '../plugin'
|
||||
import { updateDocReactions } from '../../utils'
|
||||
|
||||
export let object: Doc | undefined
|
||||
|
||||
@ -30,7 +28,7 @@
|
||||
let reactions: Reaction[] = []
|
||||
|
||||
$: if (object) {
|
||||
reactionsQuery.query(chunter.class.Reaction, { attachedTo: object._id }, (res?: Reaction[]) => {
|
||||
reactionsQuery.query(activity.class.Reaction, { attachedTo: object._id }, (res?: Reaction[]) => {
|
||||
reactions = res || []
|
||||
})
|
||||
}
|
@ -16,11 +16,30 @@
|
||||
import { type Resources } from '@hcengineering/platform'
|
||||
|
||||
import Activity from './components/Activity.svelte'
|
||||
import ActivityMessagePresenter from './components/activity-message/ActivityMessagePresenter.svelte'
|
||||
import DocUpdateMessagePresenter from './components/doc-update-message/DocUpdateMessagePresenter.svelte'
|
||||
import ReactionAddedMessage from './components/reactions/ReactionAddedMessage.svelte'
|
||||
|
||||
import { attributesFilter, pinnedFilter } from './activityMessagesUtils'
|
||||
|
||||
export * from './activity'
|
||||
export * from './utils'
|
||||
export * from './activityMessagesUtils'
|
||||
|
||||
export { default as Reactions } from './components/reactions/Reactions.svelte'
|
||||
export { default as ActivityMessageTemplate } from './components/activity-message/ActivityMessageTemplate.svelte'
|
||||
export { default as ActivityMessagePresenter } from './components/activity-message/ActivityMessagePresenter.svelte'
|
||||
export { default as ActivityExtension } from './components/ActivityExtension.svelte'
|
||||
|
||||
export default async (): Promise<Resources> => ({
|
||||
component: {
|
||||
Activity
|
||||
Activity,
|
||||
ActivityMessagePresenter,
|
||||
DocUpdateMessagePresenter,
|
||||
ReactionAddedMessage
|
||||
},
|
||||
filter: {
|
||||
AttributesFilter: attributesFilter,
|
||||
PinnedFilter: pinnedFilter
|
||||
}
|
||||
})
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { get } from 'svelte/store'
|
||||
import type { DisplayTx, TxViewlet } from '@hcengineering/activity'
|
||||
import type { DisplayTx, Reaction, TxViewlet } from '@hcengineering/activity'
|
||||
import core, {
|
||||
type AttachedDoc,
|
||||
type Class,
|
||||
@ -16,7 +16,8 @@ import core, {
|
||||
type TxOperations,
|
||||
TxProcessor,
|
||||
type TxUpdateDoc,
|
||||
matchQuery
|
||||
matchQuery,
|
||||
getCurrentAccount
|
||||
} from '@hcengineering/core'
|
||||
import { type Asset, type IntlString, getResource, translate } from '@hcengineering/platform'
|
||||
import { getAttributePresenterClass } from '@hcengineering/presentation'
|
||||
@ -391,3 +392,27 @@ export async function getValue (client: TxOperations, m: AttributeModel, tx: Dis
|
||||
}
|
||||
return value
|
||||
}
|
||||
|
||||
export async function updateDocReactions (
|
||||
client: TxOperations,
|
||||
reactions: Reaction[],
|
||||
object?: Doc,
|
||||
emoji?: string
|
||||
): Promise<void> {
|
||||
if (emoji === undefined || object === undefined) {
|
||||
return
|
||||
}
|
||||
|
||||
const currentAccount = getCurrentAccount()
|
||||
|
||||
const reaction = reactions.find((r) => r.emoji === emoji && r.createBy === currentAccount._id)
|
||||
|
||||
if (reaction == null) {
|
||||
await client.addCollection(activity.class.Reaction, object.space, object._id, object._class, 'reactions', {
|
||||
emoji,
|
||||
createBy: currentAccount._id
|
||||
})
|
||||
} else {
|
||||
await client.remove(reaction)
|
||||
}
|
||||
}
|
||||
|
@ -30,7 +30,6 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@hcengineering/core": "^0.6.28",
|
||||
"@hcengineering/notification": "^0.6.16",
|
||||
"@hcengineering/platform": "^0.6.9",
|
||||
"@hcengineering/ui": "^0.6.11"
|
||||
}
|
||||
|
@ -13,21 +13,24 @@
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import type {
|
||||
import {
|
||||
Account,
|
||||
AttachedDoc,
|
||||
Attribute,
|
||||
Class,
|
||||
Collection,
|
||||
Doc,
|
||||
DocumentQuery,
|
||||
Mixin,
|
||||
Ref,
|
||||
Timestamp,
|
||||
Tx,
|
||||
TxCreateDoc,
|
||||
TxCUD,
|
||||
TxMixin,
|
||||
TxUpdateDoc
|
||||
} from '@hcengineering/core'
|
||||
import type { Asset, IntlString, Plugin } from '@hcengineering/platform'
|
||||
import type { Asset, IntlString, Plugin, Resource } from '@hcengineering/platform'
|
||||
import { plugin } from '@hcengineering/platform'
|
||||
import type { AnyComponent } from '@hcengineering/ui'
|
||||
|
||||
@ -98,14 +101,158 @@ export interface DisplayTx {
|
||||
originTx: TxCUD<Doc>
|
||||
}
|
||||
|
||||
/**
|
||||
* @public
|
||||
*/
|
||||
export interface ActivityMessage extends AttachedDoc {
|
||||
modifiedBy: Ref<Account>
|
||||
modifiedOn: Timestamp
|
||||
|
||||
isPinned?: boolean
|
||||
|
||||
reactions?: number
|
||||
}
|
||||
|
||||
export type DisplayActivityMessage = DisplayDocUpdateMessage | ActivityMessage
|
||||
|
||||
export interface DisplayDocUpdateMessage extends DocUpdateMessage {
|
||||
previousMessages?: DocUpdateMessage[]
|
||||
combinedMessagesIds?: Ref<DocUpdateMessage>[]
|
||||
}
|
||||
|
||||
export type ActivityMessageExtensionKind = 'action' | 'footer'
|
||||
|
||||
/**
|
||||
* @public
|
||||
*/
|
||||
export interface ActivityMessageExtension extends Doc {
|
||||
ofMessage: Ref<Class<ActivityMessage>>
|
||||
components: { kind: ActivityMessageExtensionKind, component: AnyComponent }[]
|
||||
}
|
||||
|
||||
/**
|
||||
* @public
|
||||
*/
|
||||
export interface DocUpdateMessage extends ActivityMessage {
|
||||
objectId: Ref<Doc>
|
||||
objectClass: Ref<Class<Doc>>
|
||||
|
||||
txId: Ref<TxCUD<Doc>>
|
||||
|
||||
action: DocUpdateAction
|
||||
updateCollection?: string
|
||||
attributeUpdates?: DocAttributeUpdates
|
||||
}
|
||||
|
||||
/**
|
||||
* @public
|
||||
*/
|
||||
export interface DocAttributeUpdates {
|
||||
attrKey: string
|
||||
attrClass: Ref<Class<Doc>>
|
||||
set: (string | number | null)[]
|
||||
prevValue?: any // Need for description diff
|
||||
added: (string | number | null)[]
|
||||
removed: (string | number | null)[]
|
||||
isMixin: boolean
|
||||
}
|
||||
|
||||
export type DocUpdateAction = 'create' | 'update' | 'remove'
|
||||
|
||||
export type DocUpdateMessageViewletAttributesConfig = Record<
|
||||
string,
|
||||
{
|
||||
presenter?: AnyComponent
|
||||
icon?: Asset
|
||||
iconPresenter?: AnyComponent
|
||||
}
|
||||
>
|
||||
|
||||
/**
|
||||
* @public
|
||||
*/
|
||||
export interface ActivityMessageViewlet extends Doc {
|
||||
objectClass: Ref<Class<Doc>>
|
||||
onlyWithParent?: boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* @public
|
||||
*/
|
||||
export interface DocUpdateMessageViewlet extends ActivityMessageViewlet {
|
||||
action: DocUpdateAction
|
||||
valueAttr?: string
|
||||
|
||||
label?: IntlString
|
||||
labelComponent?: AnyComponent
|
||||
|
||||
icon?: Asset
|
||||
component?: AnyComponent
|
||||
|
||||
config?: DocUpdateMessageViewletAttributesConfig
|
||||
|
||||
hideIfRemoved?: boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* @public
|
||||
*/
|
||||
export const activityId = 'activity' as Plugin
|
||||
|
||||
/**
|
||||
* @public
|
||||
*/
|
||||
export interface ActivityMessagesFilter extends Doc {
|
||||
label: IntlString
|
||||
filter: Resource<(message: ActivityMessage, _class?: Ref<Doc>) => boolean>
|
||||
}
|
||||
|
||||
/**
|
||||
* @public
|
||||
*/
|
||||
export interface ActivityDoc extends Class<Doc> {
|
||||
preposition?: IntlString
|
||||
ignoreCollections?: string[]
|
||||
}
|
||||
|
||||
/**
|
||||
* @public
|
||||
*/
|
||||
export type ActivityExtensionKind = 'input'
|
||||
|
||||
/**
|
||||
* @public
|
||||
*/
|
||||
export interface ActivityExtension extends Doc {
|
||||
ofClass: Ref<Class<Doc>>
|
||||
components: Record<ActivityExtensionKind, AnyComponent>
|
||||
}
|
||||
|
||||
/**
|
||||
* @public
|
||||
*/
|
||||
export interface Reaction extends AttachedDoc {
|
||||
emoji: string
|
||||
createBy: Ref<Account>
|
||||
}
|
||||
|
||||
export default plugin(activityId, {
|
||||
mixin: {
|
||||
ActivityDoc: '' as Ref<Mixin<ActivityDoc>>
|
||||
},
|
||||
class: {
|
||||
TxViewlet: '' as Ref<Class<TxViewlet>>,
|
||||
DocUpdateMessage: '' as Ref<Class<DocUpdateMessage>>,
|
||||
ActivityMessage: '' as Ref<Class<ActivityMessage>>,
|
||||
DocUpdateMessageViewlet: '' as Ref<Class<DocUpdateMessageViewlet>>,
|
||||
ActivityMessageExtension: '' as Ref<Class<ActivityMessageExtension>>,
|
||||
ActivityMessagesFilter: '' as Ref<Class<ActivityMessagesFilter>>,
|
||||
ActivityExtension: '' as Ref<Class<ActivityExtension>>,
|
||||
Reaction: '' as Ref<Class<Reaction>>
|
||||
},
|
||||
icon: {
|
||||
Activity: '' as Asset
|
||||
Activity: '' as Asset,
|
||||
Emoji: '' as Asset
|
||||
},
|
||||
string: {
|
||||
Activity: '' as IntlString,
|
||||
@ -115,12 +262,24 @@ export default plugin(activityId, {
|
||||
From: '' as IntlString,
|
||||
Removed: '' as IntlString,
|
||||
To: '' as IntlString,
|
||||
Unset: '' as IntlString
|
||||
},
|
||||
class: {
|
||||
TxViewlet: '' as Ref<Class<TxViewlet>>
|
||||
Unset: '' as IntlString,
|
||||
In: '' as IntlString,
|
||||
NewestFirst: '' as IntlString,
|
||||
Edit: '' as IntlString,
|
||||
Updated: '' as IntlString,
|
||||
Created: '' as IntlString,
|
||||
UpdatedCollection: '' as IntlString,
|
||||
New: '' as IntlString,
|
||||
Set: '' as IntlString,
|
||||
Update: '' as IntlString,
|
||||
For: '' as IntlString,
|
||||
AllActivity: '' as IntlString,
|
||||
Reactions: '' as IntlString
|
||||
},
|
||||
component: {
|
||||
Activity: '' as AnyComponent
|
||||
Activity: '' as AnyComponent,
|
||||
ActivityMessagePresenter: '' as AnyComponent,
|
||||
DocUpdateMessagePresenter: '' as AnyComponent,
|
||||
ReactionAddedMessage: '' as AnyComponent
|
||||
}
|
||||
})
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user