mirror of
https://github.com/hcengineering/platform.git
synced 2024-11-22 11:42:30 +03:00
TSK-1009: Configurable platform (#3055)
Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
This commit is contained in:
parent
5c30b88976
commit
aa218ab898
23
README.md
23
README.md
@ -27,10 +27,12 @@ Before we could start we need to create workspace/account and associate it with
|
|||||||
cd ./tool
|
cd ./tool
|
||||||
rushx run-local create-workspace ws1 -o DevWorkspace # Create workspace
|
rushx run-local create-workspace ws1 -o DevWorkspace # Create workspace
|
||||||
rushx run-local create-account user1 -p 1234 -f John -l Appleseed # Create account
|
rushx run-local create-account user1 -p 1234 -f John -l Appleseed # Create account
|
||||||
rushx run-local assign-workspace user1 ws1 # Assign worksapce to user
|
rushx run-local configure sanity-ws --list --enable '*' # Enable all modules, then if they are not yet intended to be used by wide audience.
|
||||||
|
rushx run-local assign-workspace user1 ws1 # Assign workspace to user
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Following URL http://localhost:8087/login:component:LoginApp will lead us to app in production mode.
|
Following URL http://localhost:8087 will lead us to app in production mode.
|
||||||
|
|
||||||
## Run in development mode
|
## Run in development mode
|
||||||
|
|
||||||
@ -39,7 +41,7 @@ cd dev/prod
|
|||||||
rushx dev-server
|
rushx dev-server
|
||||||
```
|
```
|
||||||
|
|
||||||
Then go to http://localhost:8080/login:component:LoginApp
|
Then go to http://localhost:8080
|
||||||
|
|
||||||
## Update project structure and database
|
## Update project structure and database
|
||||||
|
|
||||||
@ -51,6 +53,7 @@ rush build
|
|||||||
```
|
```
|
||||||
|
|
||||||
It also might be required to upgrade running database.
|
It also might be required to upgrade running database.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ./dev/tool
|
cd ./dev/tool
|
||||||
rushx upgrade
|
rushx upgrade
|
||||||
@ -73,22 +76,12 @@ rush bundle
|
|||||||
rush docker:build
|
rush docker:build
|
||||||
## creates test docker containers and setups test database
|
## creates test docker containers and setups test database
|
||||||
./prepare.sh
|
./prepare.sh
|
||||||
## runs UI tests
|
## runs UI tests
|
||||||
rushx uitest
|
rushx uitest
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Package publishing
|
## Package publishing
|
||||||
|
|
||||||
```
|
|
||||||
npm login --registry=https://npm.pkg.github.com --scope=@hcengineering/anticrm
|
|
||||||
npm publish
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
### Libretranslate
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install libretranslate
|
node ./common/scripts/bump.js packageName
|
||||||
libretranslate --ssl --host 0.0.0.0 --port 4500 --load-only en,ru --update-models
|
|
||||||
```
|
```
|
||||||
|
@ -60,6 +60,7 @@ services:
|
|||||||
- MINIO_SECRET_KEY=minioadmin
|
- MINIO_SECRET_KEY=minioadmin
|
||||||
- FRONT_URL=http://front:8080
|
- FRONT_URL=http://front:8080
|
||||||
- SES_URL=http://localhost:8091
|
- SES_URL=http://localhost:8091
|
||||||
|
- MODEL_ENABLED=*
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
collaborator:
|
collaborator:
|
||||||
image: hardcoreeng/collaborator
|
image: hardcoreeng/collaborator
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
//
|
//
|
||||||
|
|
||||||
import { addLocation } from '@hcengineering/platform'
|
import { Plugin, addLocation } from '@hcengineering/platform'
|
||||||
|
|
||||||
import { activityId } from '@hcengineering/activity'
|
import { activityId } from '@hcengineering/activity'
|
||||||
import { attachmentId } from '@hcengineering/attachment'
|
import { attachmentId } from '@hcengineering/attachment'
|
||||||
@ -21,7 +21,7 @@ import { automationId } from '@hcengineering/automation'
|
|||||||
import { boardId } from '@hcengineering/board'
|
import { boardId } from '@hcengineering/board'
|
||||||
import { calendarId } from '@hcengineering/calendar'
|
import { calendarId } from '@hcengineering/calendar'
|
||||||
import { chunterId } from '@hcengineering/chunter'
|
import { chunterId } from '@hcengineering/chunter'
|
||||||
import { clientId } from '@hcengineering/client'
|
import client, { clientId } from '@hcengineering/client'
|
||||||
import { contactId } from '@hcengineering/contact'
|
import { contactId } from '@hcengineering/contact'
|
||||||
import document, { documentId } from '@hcengineering/document'
|
import document, { documentId } from '@hcengineering/document'
|
||||||
import gmail, { gmailId } from '@hcengineering/gmail'
|
import gmail, { gmailId } from '@hcengineering/gmail'
|
||||||
@ -153,6 +153,8 @@ export async function configurePlatform() {
|
|||||||
addLocation(bitrixId, () => import(/* webpackChunkName: "bitrix" */ '@hcengineering/bitrix-resources'))
|
addLocation(bitrixId, () => import(/* webpackChunkName: "bitrix" */ '@hcengineering/bitrix-resources'))
|
||||||
addLocation(requestId, () => import(/* webpackChunkName: "request" */ '@hcengineering/request-resources'))
|
addLocation(requestId, () => import(/* webpackChunkName: "request" */ '@hcengineering/request-resources'))
|
||||||
|
|
||||||
|
setMetadata(client.metadata.FilterModel, true)
|
||||||
|
setMetadata(client.metadata.ExtraPlugins, ['preference' as Plugin])
|
||||||
|
|
||||||
setMetadata(workbench.metadata.PlatformTitle, 'Platform')
|
setMetadata(workbench.metadata.PlatformTitle, 'Platform')
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,7 @@ class InMemoryTxAdapter extends DummyDbAdapter implements TxAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async getModel (): Promise<Tx[]> {
|
async getModel (): Promise<Tx[]> {
|
||||||
return builder.getTxes()
|
return builder().getTxes()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,29 +16,29 @@
|
|||||||
import { prepareTools as prepareToolsRaw } from '@hcengineering/server-tool'
|
import { prepareTools as prepareToolsRaw } from '@hcengineering/server-tool'
|
||||||
|
|
||||||
import { Data, Tx, Version } from '@hcengineering/core'
|
import { Data, Tx, Version } from '@hcengineering/core'
|
||||||
|
import { MinioService } from '@hcengineering/minio'
|
||||||
import { MigrateOperation } from '@hcengineering/model'
|
import { MigrateOperation } from '@hcengineering/model'
|
||||||
import builder, { migrateOperations, version } from '@hcengineering/model-all'
|
import builder, { migrateOperations, version } from '@hcengineering/model-all'
|
||||||
import { MinioService } from '@hcengineering/minio'
|
|
||||||
import { devTool } from '.'
|
import { devTool } from '.'
|
||||||
|
|
||||||
|
import { addLocation } from '@hcengineering/platform'
|
||||||
import { serverAttachmentId } from '@hcengineering/server-attachment'
|
import { serverAttachmentId } from '@hcengineering/server-attachment'
|
||||||
import { serverCalendarId } from '@hcengineering/server-calendar'
|
import { serverCalendarId } from '@hcengineering/server-calendar'
|
||||||
import { serverChunterId } from '@hcengineering/server-chunter'
|
import { serverChunterId } from '@hcengineering/server-chunter'
|
||||||
import { serverContactId } from '@hcengineering/server-contact'
|
import { serverContactId } from '@hcengineering/server-contact'
|
||||||
import { serverGmailId } from '@hcengineering/server-gmail'
|
import { serverGmailId } from '@hcengineering/server-gmail'
|
||||||
|
import { serverHrId } from '@hcengineering/server-hr'
|
||||||
import { serverInventoryId } from '@hcengineering/server-inventory'
|
import { serverInventoryId } from '@hcengineering/server-inventory'
|
||||||
import { serverLeadId } from '@hcengineering/server-lead'
|
import { serverLeadId } from '@hcengineering/server-lead'
|
||||||
import { serverNotificationId } from '@hcengineering/server-notification'
|
import { serverNotificationId } from '@hcengineering/server-notification'
|
||||||
import { serverRecruitId } from '@hcengineering/server-recruit'
|
import { serverRecruitId } from '@hcengineering/server-recruit'
|
||||||
|
import { serverRequestId } from '@hcengineering/server-request'
|
||||||
import { serverSettingId } from '@hcengineering/server-setting'
|
import { serverSettingId } from '@hcengineering/server-setting'
|
||||||
import { serverTagsId } from '@hcengineering/server-tags'
|
import { serverTagsId } from '@hcengineering/server-tags'
|
||||||
import { serverTaskId } from '@hcengineering/server-task'
|
import { serverTaskId } from '@hcengineering/server-task'
|
||||||
import { serverTrackerId } from '@hcengineering/server-tracker'
|
|
||||||
import { serverTelegramId } from '@hcengineering/server-telegram'
|
import { serverTelegramId } from '@hcengineering/server-telegram'
|
||||||
import { serverHrId } from '@hcengineering/server-hr'
|
import { serverTrackerId } from '@hcengineering/server-tracker'
|
||||||
import { serverRequestId } from '@hcengineering/server-request'
|
|
||||||
import { serverViewId } from '@hcengineering/server-view'
|
import { serverViewId } from '@hcengineering/server-view'
|
||||||
import { addLocation } from '@hcengineering/platform'
|
|
||||||
|
|
||||||
addLocation(serverAttachmentId, () => import('@hcengineering/server-attachment-resources'))
|
addLocation(serverAttachmentId, () => import('@hcengineering/server-attachment-resources'))
|
||||||
addLocation(serverContactId, () => import('@hcengineering/server-contact-resources'))
|
addLocation(serverContactId, () => import('@hcengineering/server-contact-resources'))
|
||||||
@ -65,7 +65,9 @@ function prepareTools (): {
|
|||||||
version: Data<Version>
|
version: Data<Version>
|
||||||
migrateOperations: [string, MigrateOperation][]
|
migrateOperations: [string, MigrateOperation][]
|
||||||
} {
|
} {
|
||||||
return { ...prepareToolsRaw(builder.getTxes()), version, migrateOperations }
|
const enabled = (process.env.MODEL_ENABLED ?? '*').split(',').map((it) => it.trim())
|
||||||
|
const disabled = (process.env.MODEL_DISABLED ?? '').split(',').map((it) => it.trim())
|
||||||
|
return { ...prepareToolsRaw(builder(enabled, disabled).getTxes()), version, migrateOperations }
|
||||||
}
|
}
|
||||||
|
|
||||||
devTool(prepareTools, '')
|
devTool(prepareTools, '')
|
||||||
|
@ -29,7 +29,7 @@ export async function cleanWorkspace (
|
|||||||
minio: MinioService,
|
minio: MinioService,
|
||||||
elasticUrl: string,
|
elasticUrl: string,
|
||||||
transactorUrl: string,
|
transactorUrl: string,
|
||||||
opt: { recruit: boolean, tracker: boolean, removeTx: boolean }
|
opt: { recruit: boolean, tracker: boolean, removedTx: boolean }
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
const connection = (await connect(transactorUrl, workspaceId, undefined, {
|
const connection = (await connect(transactorUrl, workspaceId, undefined, {
|
||||||
mode: 'backup',
|
mode: 'backup',
|
||||||
@ -106,7 +106,7 @@ export async function cleanWorkspace (
|
|||||||
await client.connect()
|
await client.connect()
|
||||||
const db = getWorkspaceDB(client, workspaceId)
|
const db = getWorkspaceDB(client, workspaceId)
|
||||||
|
|
||||||
if (opt.removeTx) {
|
if (opt.removedTx) {
|
||||||
const txes = await db.collection(DOMAIN_TX).find({}).toArray()
|
const txes = await db.collection(DOMAIN_TX).find({}).toArray()
|
||||||
|
|
||||||
for (const tx of txes) {
|
for (const tx of txes) {
|
||||||
|
70
dev/tool/src/configuration.ts
Normal file
70
dev/tool/src/configuration.ts
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
//
|
||||||
|
// 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 core, { BackupClient, Client as CoreClient, TxFactory, WorkspaceId } from '@hcengineering/core'
|
||||||
|
import { connect } from '@hcengineering/server-tool'
|
||||||
|
|
||||||
|
function toLen (val: string, sep: string, len: number): string {
|
||||||
|
while (val.length < len) {
|
||||||
|
val += sep
|
||||||
|
}
|
||||||
|
return val
|
||||||
|
}
|
||||||
|
export async function changeConfiguration (
|
||||||
|
workspaceId: WorkspaceId,
|
||||||
|
transactorUrl: string,
|
||||||
|
cmd: { enable?: string, disable?: string, list?: boolean }
|
||||||
|
): Promise<void> {
|
||||||
|
const connection = (await connect(transactorUrl, workspaceId, undefined, {
|
||||||
|
mode: 'backup'
|
||||||
|
})) as unknown as CoreClient & BackupClient
|
||||||
|
try {
|
||||||
|
const config = await connection.findAll(core.class.PluginConfiguration, {})
|
||||||
|
if (cmd.list === true) {
|
||||||
|
for (const c of config) {
|
||||||
|
if (c.label !== undefined) {
|
||||||
|
console.log(toLen(c.pluginId, '-', 20), c.enabled)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const enable = (cmd.enable ?? '').trim().split(',')
|
||||||
|
console.log('enable', enable)
|
||||||
|
const ops = new TxFactory(core.account.ConfigUser)
|
||||||
|
if (enable.length > 0) {
|
||||||
|
const p = config.filter((it) => enable.includes(it.pluginId) || enable.includes('*'))
|
||||||
|
for (const pp of p) {
|
||||||
|
if (!pp.enabled) {
|
||||||
|
console.log('Enabling', pp.pluginId)
|
||||||
|
await connection.tx(
|
||||||
|
ops.createTxUpdateDoc(core.class.PluginConfiguration, core.space.Model, pp._id, { enabled: true })
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((cmd.disable ?? '').trim() !== '') {
|
||||||
|
const p = config.find((it) => it.pluginId === (cmd.disable ?? '').trim())
|
||||||
|
if (p !== undefined) {
|
||||||
|
await connection.tx(
|
||||||
|
ops.createTxUpdateDoc(core.class.PluginConfiguration, core.space.Model, p._id, { enabled: false })
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (err: any) {
|
||||||
|
console.trace(err)
|
||||||
|
} finally {
|
||||||
|
await connection.close()
|
||||||
|
}
|
||||||
|
}
|
@ -52,6 +52,7 @@ import { openAIConfigDefaults } from '@hcengineering/openai'
|
|||||||
import { cleanArchivedSpaces, cleanRemovedTransactions, cleanWorkspace } from './clean'
|
import { cleanArchivedSpaces, cleanRemovedTransactions, cleanWorkspace } from './clean'
|
||||||
import { rebuildElastic } from './elastic'
|
import { rebuildElastic } from './elastic'
|
||||||
import { openAIConfig } from './openai'
|
import { openAIConfig } from './openai'
|
||||||
|
import { changeConfiguration } from './configuration'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @public
|
* @public
|
||||||
@ -442,7 +443,7 @@ export function devTool (
|
|||||||
.option('--recruit', 'Clean recruit', false)
|
.option('--recruit', 'Clean recruit', false)
|
||||||
.option('--tracker', 'Clean tracker', false)
|
.option('--tracker', 'Clean tracker', false)
|
||||||
.option('--removedTx', 'Clean removed transactions', false)
|
.option('--removedTx', 'Clean removed transactions', false)
|
||||||
.action(async (workspace: string, cmd: { recruit: boolean, tracker: boolean, removeTx: boolean }) => {
|
.action(async (workspace: string, cmd: { recruit: boolean, tracker: boolean, removedTx: boolean }) => {
|
||||||
const { mongodbUri, minio } = prepareTools()
|
const { mongodbUri, minio } = prepareTools()
|
||||||
return await withDatabase(mongodbUri, async (db) => {
|
return await withDatabase(mongodbUri, async (db) => {
|
||||||
await cleanWorkspace(
|
await cleanWorkspace(
|
||||||
@ -470,5 +471,16 @@ export function devTool (
|
|||||||
await cleanArchivedSpaces(getWorkspaceId(workspace, productId), transactorUrl)
|
await cleanArchivedSpaces(getWorkspaceId(workspace, productId), transactorUrl)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
program
|
||||||
|
.command('configure <workspace>')
|
||||||
|
.description('clean archived spaces')
|
||||||
|
.option('--enable <enable>', 'Enable plugin configuration', '')
|
||||||
|
.option('--disable <disable>', 'Disable plugin configuration', '')
|
||||||
|
.option('--list', 'List plugin states', false)
|
||||||
|
.action(async (workspace: string, cmd: { enable: string, disable: string, list: boolean }) => {
|
||||||
|
console.log(JSON.stringify(cmd))
|
||||||
|
await changeConfiguration(getWorkspaceId(workspace, productId), transactorUrl, cmd)
|
||||||
|
})
|
||||||
|
|
||||||
program.parse(process.argv)
|
program.parse(process.argv)
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,8 @@ import { TClass, TDoc } from '@hcengineering/model-core'
|
|||||||
import type { Asset, IntlString, Resource } from '@hcengineering/platform'
|
import type { Asset, IntlString, Resource } from '@hcengineering/platform'
|
||||||
import { AnyComponent } from '@hcengineering/ui'
|
import { AnyComponent } from '@hcengineering/ui'
|
||||||
|
|
||||||
|
export { activityId } from '@hcengineering/activity'
|
||||||
|
|
||||||
@Model(activity.class.TxViewlet, core.class.Doc, DOMAIN_MODEL)
|
@Model(activity.class.TxViewlet, core.class.Doc, DOMAIN_MODEL)
|
||||||
export class TTxViewlet extends TDoc implements TxViewlet {
|
export class TTxViewlet extends TDoc implements TxViewlet {
|
||||||
icon!: Asset
|
icon!: Asset
|
||||||
|
@ -64,6 +64,7 @@
|
|||||||
"@hcengineering/model-notification": "^0.6.0",
|
"@hcengineering/model-notification": "^0.6.0",
|
||||||
"@hcengineering/model-text-editor": "^0.6.0",
|
"@hcengineering/model-text-editor": "^0.6.0",
|
||||||
"@hcengineering/core": "^0.6.23",
|
"@hcengineering/core": "^0.6.23",
|
||||||
|
"@hcengineering/platform": "^0.6.8",
|
||||||
"@hcengineering/model-tags": "^0.6.0",
|
"@hcengineering/model-tags": "^0.6.0",
|
||||||
"@hcengineering/model-calendar": "^0.6.0",
|
"@hcengineering/model-calendar": "^0.6.0",
|
||||||
"@hcengineering/model-server-calendar": "^0.6.0",
|
"@hcengineering/model-server-calendar": "^0.6.0",
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
import builder from '.'
|
import builder from '.'
|
||||||
// import { writeFileSync } from 'fs'
|
// import { writeFileSync } from 'fs'
|
||||||
|
|
||||||
const content = JSON.stringify(builder.getTxes(), undefined, 2)
|
const content = JSON.stringify(builder().getTxes(), undefined, 2)
|
||||||
console.log(content)
|
console.log(content)
|
||||||
// writeFileSync('../../dev/storage/src/model.tx.json', content)
|
// writeFileSync('../../dev/storage/src/model.tx.json', content)
|
||||||
// writeFileSync('../../server/workspace/src/model.tx.json', content)
|
// writeFileSync('../../server/workspace/src/model.tx.json', content)
|
||||||
|
@ -17,132 +17,310 @@ import core, { coreId, Data, PluginConfiguration, Ref, Tx, Version } from '@hcen
|
|||||||
import jsonVersion from './version.json'
|
import jsonVersion from './version.json'
|
||||||
|
|
||||||
import { Builder } from '@hcengineering/model'
|
import { Builder } from '@hcengineering/model'
|
||||||
import { createModel as activityModel } from '@hcengineering/model-activity'
|
import { activityId, createModel as activityModel } from '@hcengineering/model-activity'
|
||||||
import { createModel as attachmentModel } from '@hcengineering/model-attachment'
|
import { attachmentId, createModel as attachmentModel } from '@hcengineering/model-attachment'
|
||||||
import { createModel as automationModel } from '@hcengineering/model-automation'
|
import { automationId, createModel as automationModel } from '@hcengineering/model-automation'
|
||||||
import { createModel as chunterModel } from '@hcengineering/model-chunter'
|
import bitrix, { bitrixId, createModel as bitrixModel } from '@hcengineering/model-bitrix'
|
||||||
import { createModel as contactModel } from '@hcengineering/model-contact'
|
import board, { boardId, createModel as boardModel } from '@hcengineering/model-board'
|
||||||
|
import calendar, { calendarId, createModel as calendarModel } from '@hcengineering/model-calendar'
|
||||||
|
import chunter, { chunterId, createModel as chunterModel } from '@hcengineering/model-chunter'
|
||||||
|
import contact, { contactId, createModel as contactModel } from '@hcengineering/model-contact'
|
||||||
import { createModel as coreModel } from '@hcengineering/model-core'
|
import { createModel as coreModel } from '@hcengineering/model-core'
|
||||||
import { createModel as gmailModel } from '@hcengineering/model-gmail'
|
import document, { documentId, createModel as documentModel } from '@hcengineering/model-document'
|
||||||
import { createModel as inventoryModel } from '@hcengineering/model-inventory'
|
import gmail, { gmailId, createModel as gmailModel } from '@hcengineering/model-gmail'
|
||||||
import { createModel as leadModel } from '@hcengineering/model-lead'
|
import hr, { hrId, createModel as hrModel } from '@hcengineering/model-hr'
|
||||||
import { createModel as presentationModel } from '@hcengineering/model-presentation'
|
import inventory, { inventoryId, createModel as inventoryModel } from '@hcengineering/model-inventory'
|
||||||
import { createModel as recruitModel } from '@hcengineering/model-recruit'
|
import lead, { leadId, createModel as leadModel } from '@hcengineering/model-lead'
|
||||||
import { createModel as serverAttachmentModel } from '@hcengineering/model-server-attachment'
|
import { notificationId, createModel as notificationModel } from '@hcengineering/model-notification'
|
||||||
import { createModel as serverContactModel } from '@hcengineering/model-server-contact'
|
import { preferenceId, createModel as preferenceModel } from '@hcengineering/model-preference'
|
||||||
import { createModel as serverNotificationModel } from '@hcengineering/model-server-notification'
|
import { presentationId, createModel as presentationModel } from '@hcengineering/model-presentation'
|
||||||
import { createModel as serverChunterModel } from '@hcengineering/model-server-chunter'
|
import recruit, { recruitId, createModel as recruitModel } from '@hcengineering/model-recruit'
|
||||||
import { createModel as serverInventoryModel } from '@hcengineering/model-server-inventory'
|
import { requestId, createModel as requestModel } from '@hcengineering/model-request'
|
||||||
import { createModel as serverLeadModel } from '@hcengineering/model-server-lead'
|
import { serverAttachmentId, createModel as serverAttachmentModel } from '@hcengineering/model-server-attachment'
|
||||||
import { createModel as serverTaskModel } from '@hcengineering/model-server-task'
|
import { serverCalendarId, createModel as serverCalendarModel } from '@hcengineering/model-server-calendar'
|
||||||
import { createModel as serverTrackerModel } from '@hcengineering/model-server-tracker'
|
import { serverChunterId, createModel as serverChunterModel } from '@hcengineering/model-server-chunter'
|
||||||
import { createModel as serverTagsModel } from '@hcengineering/model-server-tags'
|
import { serverContactId, createModel as serverContactModel } from '@hcengineering/model-server-contact'
|
||||||
import { createModel as serveSettingModel } from '@hcengineering/model-server-setting'
|
import { serverCoreId, createModel as serverCoreModel } from '@hcengineering/model-server-core'
|
||||||
import { createModel as serverRecruitModel } from '@hcengineering/model-server-recruit'
|
import { serverGmailId, createModel as serverGmailModel } from '@hcengineering/model-server-gmail'
|
||||||
import { createModel as serverCoreModel } from '@hcengineering/model-server-core'
|
import { serverHrId, createModel as serverHrModel } from '@hcengineering/model-server-hr'
|
||||||
import { createModel as settingModel } from '@hcengineering/model-setting'
|
import { serverInventoryId, createModel as serverInventoryModel } from '@hcengineering/model-server-inventory'
|
||||||
import { createModel as taskModel } from '@hcengineering/model-task'
|
import { serverLeadId, createModel as serverLeadModel } from '@hcengineering/model-server-lead'
|
||||||
import { createModel as telegramModel } from '@hcengineering/model-telegram'
|
import { serverNotificationId, createModel as serverNotificationModel } from '@hcengineering/model-server-notification'
|
||||||
import { createModel as templatesModel } from '@hcengineering/model-templates'
|
import { serverRecruitId, createModel as serverRecruitModel } from '@hcengineering/model-server-recruit'
|
||||||
import { createModel as textEditorModel } from '@hcengineering/model-text-editor'
|
import { serverRequestId, createModel as serverRequestModel } from '@hcengineering/model-server-request'
|
||||||
import { createModel as viewModel } from '@hcengineering/model-view'
|
import { serverSettingId, createModel as serveSettingModel } from '@hcengineering/model-server-setting'
|
||||||
import { createModel as workbenchModel } from '@hcengineering/model-workbench'
|
import { serverTagsId, createModel as serverTagsModel } from '@hcengineering/model-server-tags'
|
||||||
import { createModel as notificationModel } from '@hcengineering/model-notification'
|
import { serverTaskId, createModel as serverTaskModel } from '@hcengineering/model-server-task'
|
||||||
import { createModel as tagsModel } from '@hcengineering/model-tags'
|
import { serverTelegramId, createModel as serverTelegramModel } from '@hcengineering/model-server-telegram'
|
||||||
import { createModel as calendarModel } from '@hcengineering/model-calendar'
|
import { serverTrackerId, createModel as serverTrackerModel } from '@hcengineering/model-server-tracker'
|
||||||
import { createModel as serverCalendarModel } from '@hcengineering/model-server-calendar'
|
import { serverViewId, createModel as serverViewModel } from '@hcengineering/model-server-view'
|
||||||
import { createModel as serverGmailModel } from '@hcengineering/model-server-gmail'
|
import setting, { settingId, createModel as settingModel } from '@hcengineering/model-setting'
|
||||||
import { createModel as serverTelegramModel } from '@hcengineering/model-server-telegram'
|
import { tagsId, createModel as tagsModel } from '@hcengineering/model-tags'
|
||||||
import { createModel as trackerModel } from '@hcengineering/model-tracker'
|
import { taskId, createModel as taskModel } from '@hcengineering/model-task'
|
||||||
import { createModel as boardModel } from '@hcengineering/model-board'
|
import telegram, { telegramId, createModel as telegramModel } from '@hcengineering/model-telegram'
|
||||||
import { createModel as preferenceModel } from '@hcengineering/model-preference'
|
import { templatesId, createModel as templatesModel } from '@hcengineering/model-templates'
|
||||||
import { createModel as hrModel } from '@hcengineering/model-hr'
|
import { textEditorId, createModel as textEditorModel } from '@hcengineering/model-text-editor'
|
||||||
import { createModel as serverHrModel } from '@hcengineering/model-server-hr'
|
import tracker, { trackerId, createModel as trackerModel } from '@hcengineering/model-tracker'
|
||||||
import { createModel as documentModel } from '@hcengineering/model-document'
|
import view, { viewId, createModel as viewModel } from '@hcengineering/model-view'
|
||||||
import { createModel as bitrixModel } from '@hcengineering/model-bitrix'
|
import workbench, { workbenchId, createModel as workbenchModel } from '@hcengineering/model-workbench'
|
||||||
import { createModel as requestModel } from '@hcengineering/model-request'
|
|
||||||
import { createModel as serverRequestModel } from '@hcengineering/model-server-request'
|
|
||||||
import { createModel as serverViewModel } from '@hcengineering/model-server-view'
|
|
||||||
|
|
||||||
import { createModel as serverTranslate } from '@hcengineering/model-server-translate'
|
import { openAIId, createModel as serverOpenAI } from '@hcengineering/model-server-openai'
|
||||||
import { createModel as serverOpenAI } from '@hcengineering/model-server-openai'
|
import { createModel as serverTranslate, translateId } from '@hcengineering/model-server-translate'
|
||||||
|
|
||||||
|
import { Plugin } from '@hcengineering/platform'
|
||||||
|
|
||||||
export const version: Data<Version> = jsonVersion as Data<Version>
|
export const version: Data<Version> = jsonVersion as Data<Version>
|
||||||
|
|
||||||
const builder = new Builder()
|
interface ConfigurablePlugin extends Omit<Data<PluginConfiguration>, 'pluginId' | 'transactions'> {}
|
||||||
|
|
||||||
const builders: [(b: Builder) => void, string][] = [
|
type BuilderConfig = [(b: Builder) => void, Plugin] | [(b: Builder) => void, Plugin, ConfigurablePlugin | undefined]
|
||||||
[coreModel, coreId],
|
|
||||||
[activityModel, 'activity'],
|
|
||||||
[attachmentModel, 'attachment'],
|
|
||||||
[tagsModel, 'tags'],
|
|
||||||
[viewModel, 'view'],
|
|
||||||
[workbenchModel, 'workbench'],
|
|
||||||
[contactModel, 'contact'],
|
|
||||||
[chunterModel, 'chunter'],
|
|
||||||
[taskModel, 'task'],
|
|
||||||
[recruitModel, 'recruit'],
|
|
||||||
[settingModel, 'setting'],
|
|
||||||
[telegramModel, 'telegram'],
|
|
||||||
[leadModel, 'lead'],
|
|
||||||
[gmailModel, 'gmail'],
|
|
||||||
[inventoryModel, 'inventory'],
|
|
||||||
[presentationModel, 'presentation'],
|
|
||||||
[templatesModel, 'templates'],
|
|
||||||
[textEditorModel, 'text-editor'],
|
|
||||||
[notificationModel, 'notification'],
|
|
||||||
[preferenceModel, 'preference'],
|
|
||||||
[hrModel, 'hr'],
|
|
||||||
[documentModel, 'document'],
|
|
||||||
[trackerModel, 'tracker'],
|
|
||||||
[boardModel, 'board'],
|
|
||||||
[calendarModel, 'calendar'],
|
|
||||||
[bitrixModel, 'bitrix'],
|
|
||||||
[requestModel, 'request'],
|
|
||||||
|
|
||||||
[serverCoreModel, 'server-core'],
|
/**
|
||||||
[serverAttachmentModel, 'server-attachment'],
|
* @public
|
||||||
[serverContactModel, 'server-contact'],
|
* @param enabled - a set of enabled plugins
|
||||||
[serveSettingModel, 'server-setting'],
|
* @param disabled - a set of disabled plugins
|
||||||
[serverChunterModel, 'server-chunter'],
|
* @returns
|
||||||
[serverInventoryModel, 'server-inventory'],
|
*/
|
||||||
[serverLeadModel, 'server-lead'],
|
export default function buildModel (enabled: string[] = ['*'], disabled: string[] = []): Builder {
|
||||||
[serverTagsModel, 'server-tags'],
|
const builder = new Builder()
|
||||||
[serverTaskModel, 'server-task'],
|
|
||||||
[serverTrackerModel, 'server-tracker'],
|
|
||||||
[serverRecruitModel, 'server-recruit'],
|
|
||||||
[serverCalendarModel, 'server-calendar'],
|
|
||||||
[serverGmailModel, 'server-gmail'],
|
|
||||||
[serverTelegramModel, 'server-telegram'],
|
|
||||||
[serverHrModel, 'server-hr'],
|
|
||||||
[serverNotificationModel, 'server-notification'],
|
|
||||||
[serverRequestModel, 'server-request'],
|
|
||||||
[serverViewModel, 'server-view'],
|
|
||||||
[automationModel, 'automation'],
|
|
||||||
[serverTranslate, 'translate'],
|
|
||||||
[serverOpenAI, 'openai']
|
|
||||||
]
|
|
||||||
|
|
||||||
for (const [b, id] of builders) {
|
const builders: BuilderConfig[] = [
|
||||||
const txes: Tx[] = []
|
[coreModel, coreId],
|
||||||
builder.onTx = (tx) => {
|
[activityModel, activityId],
|
||||||
txes.push(tx)
|
[attachmentModel, attachmentId],
|
||||||
|
[tagsModel, tagsId],
|
||||||
|
[viewModel, viewId],
|
||||||
|
[workbenchModel, workbenchId],
|
||||||
|
[
|
||||||
|
contactModel,
|
||||||
|
contactId,
|
||||||
|
{
|
||||||
|
label: contact.string.ConfigLabel,
|
||||||
|
description: contact.string.ConfigDescription,
|
||||||
|
enabled: true,
|
||||||
|
configurable: false,
|
||||||
|
icon: contact.icon.ContactApplication,
|
||||||
|
classFilter: [workbench.class.Application]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
chunterModel,
|
||||||
|
chunterId,
|
||||||
|
{
|
||||||
|
label: chunter.string.ConfigLabel,
|
||||||
|
description: chunter.string.ConfigDescription,
|
||||||
|
enabled: false,
|
||||||
|
configurable: false,
|
||||||
|
icon: chunter.icon.Chunter,
|
||||||
|
classFilter: [workbench.class.Application]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[taskModel, taskId],
|
||||||
|
[
|
||||||
|
recruitModel,
|
||||||
|
recruitId,
|
||||||
|
{
|
||||||
|
label: recruit.string.ConfigLabel,
|
||||||
|
description: recruit.string.ConfigDescription,
|
||||||
|
enabled: true,
|
||||||
|
icon: recruit.icon.RecruitApplication,
|
||||||
|
classFilter: [workbench.class.Application, view.class.Action],
|
||||||
|
configurable: true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[settingModel, settingId],
|
||||||
|
[
|
||||||
|
telegramModel,
|
||||||
|
telegramId,
|
||||||
|
{
|
||||||
|
label: telegram.string.ConfigLabel,
|
||||||
|
description: telegram.string.ConfigDescription,
|
||||||
|
enabled: true,
|
||||||
|
classFilter: [
|
||||||
|
workbench.class.Application,
|
||||||
|
view.class.Action,
|
||||||
|
contact.class.ChannelProvider,
|
||||||
|
setting.class.IntegrationType
|
||||||
|
],
|
||||||
|
configurable: true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
leadModel,
|
||||||
|
leadId,
|
||||||
|
{
|
||||||
|
label: lead.string.ConfigLabel,
|
||||||
|
description: lead.string.ConfigDescription,
|
||||||
|
enabled: true,
|
||||||
|
icon: lead.icon.LeadApplication,
|
||||||
|
configurable: false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
gmailModel,
|
||||||
|
gmailId,
|
||||||
|
{
|
||||||
|
label: gmail.string.ConfigLabel,
|
||||||
|
description: gmail.string.ConfigDescription,
|
||||||
|
enabled: true,
|
||||||
|
classFilter: [
|
||||||
|
workbench.class.Application,
|
||||||
|
view.class.Action,
|
||||||
|
contact.class.ChannelProvider,
|
||||||
|
setting.class.IntegrationType
|
||||||
|
],
|
||||||
|
configurable: true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
inventoryModel,
|
||||||
|
inventoryId,
|
||||||
|
{
|
||||||
|
label: inventory.string.ConfigLabel,
|
||||||
|
description: inventory.string.ConfigDescription,
|
||||||
|
enabled: true,
|
||||||
|
icon: inventory.icon.InventoryApplication,
|
||||||
|
classFilter: [workbench.class.Application, view.class.Action],
|
||||||
|
configurable: false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[presentationModel, presentationId],
|
||||||
|
[templatesModel, templatesId],
|
||||||
|
[textEditorModel, textEditorId],
|
||||||
|
[notificationModel, notificationId],
|
||||||
|
[preferenceModel, preferenceId],
|
||||||
|
[
|
||||||
|
hrModel,
|
||||||
|
hrId,
|
||||||
|
{
|
||||||
|
label: hr.string.ConfigLabel,
|
||||||
|
description: hr.string.ConfigDescription,
|
||||||
|
enabled: true,
|
||||||
|
icon: hr.icon.Structure,
|
||||||
|
classFilter: [workbench.class.Application, view.class.Action],
|
||||||
|
configurable: true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
documentModel,
|
||||||
|
documentId,
|
||||||
|
{
|
||||||
|
label: document.string.ConfigLabel,
|
||||||
|
description: document.string.ConfigDescription,
|
||||||
|
enabled: true,
|
||||||
|
icon: document.icon.DocumentApplication,
|
||||||
|
configurable: false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
trackerModel,
|
||||||
|
trackerId,
|
||||||
|
{
|
||||||
|
label: tracker.string.ConfigLabel,
|
||||||
|
description: tracker.string.ConfigDescription,
|
||||||
|
enabled: true,
|
||||||
|
icon: tracker.icon.TrackerApplication,
|
||||||
|
classFilter: [workbench.class.Application, view.class.Action],
|
||||||
|
configurable: true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
boardModel,
|
||||||
|
boardId,
|
||||||
|
{
|
||||||
|
label: board.string.ConfigLabel,
|
||||||
|
description: board.string.ConfigDescription,
|
||||||
|
enabled: true,
|
||||||
|
icon: board.icon.Board,
|
||||||
|
classFilter: [workbench.class.Application, view.class.Action],
|
||||||
|
configurable: false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
calendarModel,
|
||||||
|
calendarId,
|
||||||
|
{
|
||||||
|
label: calendar.string.ConfigLabel,
|
||||||
|
description: calendar.string.ConfigDescription,
|
||||||
|
enabled: true,
|
||||||
|
icon: calendar.icon.Calendar,
|
||||||
|
classFilter: [workbench.class.Application],
|
||||||
|
configurable: false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
bitrixModel,
|
||||||
|
bitrixId,
|
||||||
|
{
|
||||||
|
label: bitrix.string.ConfigLabel,
|
||||||
|
description: bitrix.string.ConfigDescription,
|
||||||
|
enabled: false,
|
||||||
|
icon: bitrix.icon.Bitrix,
|
||||||
|
configurable: false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
requestModel,
|
||||||
|
requestId,
|
||||||
|
{
|
||||||
|
// label: request.string.ConfigLabel,
|
||||||
|
// description: request.string.ConfigDescription,
|
||||||
|
enabled: false,
|
||||||
|
configurable: false,
|
||||||
|
classFilter: [workbench.class.Application, view.class.Action]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[automationModel, automationId],
|
||||||
|
|
||||||
|
[serverCoreModel, serverCoreId],
|
||||||
|
[serverAttachmentModel, serverAttachmentId],
|
||||||
|
[serverContactModel, serverContactId],
|
||||||
|
[serveSettingModel, serverSettingId],
|
||||||
|
[serverChunterModel, serverChunterId],
|
||||||
|
[serverInventoryModel, serverInventoryId],
|
||||||
|
[serverLeadModel, serverLeadId],
|
||||||
|
[serverTagsModel, serverTagsId],
|
||||||
|
[serverTaskModel, serverTaskId],
|
||||||
|
[serverTrackerModel, serverTrackerId],
|
||||||
|
[serverRecruitModel, serverRecruitId],
|
||||||
|
[serverCalendarModel, serverCalendarId],
|
||||||
|
[serverGmailModel, serverGmailId],
|
||||||
|
[serverTelegramModel, serverTelegramId],
|
||||||
|
[serverHrModel, serverHrId],
|
||||||
|
[serverNotificationModel, serverNotificationId],
|
||||||
|
[serverRequestModel, serverRequestId],
|
||||||
|
[serverViewModel, serverViewId],
|
||||||
|
|
||||||
|
[serverTranslate, translateId],
|
||||||
|
[serverOpenAI, openAIId]
|
||||||
|
]
|
||||||
|
|
||||||
|
for (const [b, id, config] of builders) {
|
||||||
|
const txes: Tx[] = []
|
||||||
|
builder.onTx = (tx) => {
|
||||||
|
txes.push(tx)
|
||||||
|
}
|
||||||
|
b(builder)
|
||||||
|
builder.createDoc(
|
||||||
|
core.class.PluginConfiguration,
|
||||||
|
core.space.Model,
|
||||||
|
{
|
||||||
|
pluginId: id,
|
||||||
|
transactions: txes.map((it) => it._id),
|
||||||
|
...config,
|
||||||
|
enabled:
|
||||||
|
config?.label === undefined ||
|
||||||
|
((config?.enabled ?? true) && (enabled.includes(id) || enabled.includes('*')) && !disabled.includes(id)),
|
||||||
|
configurable: config?.configurable ?? false
|
||||||
|
},
|
||||||
|
('plugin-configuration-' + id) as Ref<PluginConfiguration>
|
||||||
|
)
|
||||||
|
builder.onTx = undefined
|
||||||
}
|
}
|
||||||
b(builder)
|
|
||||||
builder.createDoc(
|
|
||||||
core.class.PluginConfiguration,
|
|
||||||
core.space.Model,
|
|
||||||
{
|
|
||||||
pluginId: id,
|
|
||||||
transactions: txes.map((it) => it._id)
|
|
||||||
},
|
|
||||||
('plugin-configuration-' + id) as Ref<PluginConfiguration>
|
|
||||||
)
|
|
||||||
builder.onTx = undefined
|
|
||||||
}
|
|
||||||
|
|
||||||
builder.createDoc(core.class.Version, core.space.Model, version, core.version.Model)
|
builder.createDoc(core.class.Version, core.space.Model, version, core.version.Model)
|
||||||
export default builder
|
return builder
|
||||||
|
}
|
||||||
|
|
||||||
// Export upgrade procedures
|
// Export upgrade procedures
|
||||||
export { migrateOperations } from './migration'
|
export { migrateOperations } from './migration'
|
||||||
|
@ -33,6 +33,7 @@ import preference, { TPreference } from '@hcengineering/model-preference'
|
|||||||
import view, { createAction } from '@hcengineering/model-view'
|
import view, { createAction } from '@hcengineering/model-view'
|
||||||
import attachment from './plugin'
|
import attachment from './plugin'
|
||||||
|
|
||||||
|
export { attachmentId } from '@hcengineering/attachment'
|
||||||
export { attachmentOperation } from './migration'
|
export { attachmentOperation } from './migration'
|
||||||
|
|
||||||
export const DOMAIN_ATTACHMENT = 'attachment' as Domain
|
export const DOMAIN_ATTACHMENT = 'attachment' as Domain
|
||||||
|
@ -15,10 +15,10 @@
|
|||||||
|
|
||||||
// To help typescript locate view plugin properly
|
// To help typescript locate view plugin properly
|
||||||
import automation, {
|
import automation, {
|
||||||
Automation,
|
|
||||||
AutomationSupport,
|
|
||||||
AttributeAutomationSupport,
|
AttributeAutomationSupport,
|
||||||
|
Automation,
|
||||||
AutomationSortSupport,
|
AutomationSortSupport,
|
||||||
|
AutomationSupport,
|
||||||
AutomationTriggerSupport,
|
AutomationTriggerSupport,
|
||||||
Command,
|
Command,
|
||||||
TriggerType
|
TriggerType
|
||||||
@ -28,6 +28,9 @@ import { Builder, Mixin, Model, Prop, TypeString, UX } from '@hcengineering/mode
|
|||||||
import core, { TAttachedDoc, TClass } from '@hcengineering/model-core'
|
import core, { TAttachedDoc, TClass } from '@hcengineering/model-core'
|
||||||
import view from '@hcengineering/view'
|
import view from '@hcengineering/view'
|
||||||
|
|
||||||
|
export { automationId } from '@hcengineering/automation'
|
||||||
|
export { automationOperation } from './migration'
|
||||||
|
|
||||||
export const DOMAIN_AUTOMATION = 'automation' as Domain
|
export const DOMAIN_AUTOMATION = 'automation' as Domain
|
||||||
|
|
||||||
@Model(automation.class.Automation, core.class.AttachedDoc, DOMAIN_AUTOMATION)
|
@Model(automation.class.Automation, core.class.AttachedDoc, DOMAIN_AUTOMATION)
|
||||||
@ -90,5 +93,3 @@ export function createModel (builder: Builder): void {
|
|||||||
actions: [view.action.Delete]
|
actions: [view.action.Delete]
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export { automationOperation } from './migration'
|
|
||||||
|
@ -26,6 +26,10 @@ import view, { createAction } from '@hcengineering/model-view'
|
|||||||
import { getEmbeddedLabel } from '@hcengineering/platform'
|
import { getEmbeddedLabel } from '@hcengineering/platform'
|
||||||
import setting from '@hcengineering/setting'
|
import setting from '@hcengineering/setting'
|
||||||
|
|
||||||
|
export { bitrixId } from '@hcengineering/bitrix'
|
||||||
|
export { bitrixOperation } from './migration'
|
||||||
|
export { default } from './plugin'
|
||||||
|
|
||||||
const DOMAIN_BITRIX = 'bitrix' as Domain
|
const DOMAIN_BITRIX = 'bitrix' as Domain
|
||||||
|
|
||||||
@Mixin(bitrix.mixin.BitrixSyncDoc, core.class.Doc)
|
@Mixin(bitrix.mixin.BitrixSyncDoc, core.class.Doc)
|
||||||
@ -103,5 +107,3 @@ export function createModel (builder: Builder): void {
|
|||||||
bitrix.action.BitrixImport
|
bitrix.action.BitrixImport
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export { bitrixOperation } from './migration'
|
|
||||||
|
@ -29,7 +29,9 @@ export default mergeIds(bitrixId, bitrix, {
|
|||||||
BitrixImport: '' as AnyComponent
|
BitrixImport: '' as AnyComponent
|
||||||
},
|
},
|
||||||
string: {
|
string: {
|
||||||
BitrixImport: '' as IntlString
|
BitrixImport: '' as IntlString,
|
||||||
|
ConfigLabel: '' as IntlString,
|
||||||
|
ConfigDescription: '' as IntlString
|
||||||
},
|
},
|
||||||
action: {
|
action: {
|
||||||
BitrixImport: '' as Ref<Action>
|
BitrixImport: '' as Ref<Action>
|
||||||
|
@ -44,6 +44,10 @@ import { IntlString } from '@hcengineering/platform'
|
|||||||
import type { AnyComponent } from '@hcengineering/ui'
|
import type { AnyComponent } from '@hcengineering/ui'
|
||||||
import board from './plugin'
|
import board from './plugin'
|
||||||
|
|
||||||
|
export { boardId } from '@hcengineering/board'
|
||||||
|
export { boardOperation } from './migration'
|
||||||
|
export { default } from './plugin'
|
||||||
|
|
||||||
@Model(board.class.Board, task.class.SpaceWithStates)
|
@Model(board.class.Board, task.class.SpaceWithStates)
|
||||||
@UX(board.string.Board, board.icon.Board)
|
@UX(board.string.Board, board.icon.Board)
|
||||||
export class TBoard extends TSpaceWithStates implements Board {
|
export class TBoard extends TSpaceWithStates implements Board {
|
||||||
@ -542,6 +546,3 @@ export function createModel (builder: Builder): void {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export { boardOperation } from './migration'
|
|
||||||
export { default } from './plugin'
|
|
||||||
|
@ -58,7 +58,9 @@ export default mergeIds(boardId, board, {
|
|||||||
},
|
},
|
||||||
string: {
|
string: {
|
||||||
CommonBoardPreference: '' as IntlString,
|
CommonBoardPreference: '' as IntlString,
|
||||||
ConvertToCard: '' as IntlString
|
ConvertToCard: '' as IntlString,
|
||||||
|
ConfigLabel: '' as IntlString,
|
||||||
|
ConfigDescription: '' as IntlString
|
||||||
},
|
},
|
||||||
action: {
|
action: {
|
||||||
ConvertToCard: '' as Ref<Action>
|
ConvertToCard: '' as Ref<Action>
|
||||||
|
@ -14,9 +14,9 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
import activity from '@hcengineering/activity'
|
import activity from '@hcengineering/activity'
|
||||||
import { calendarId, Calendar, Event, Reminder } from '@hcengineering/calendar'
|
import { Calendar, Event, Reminder, calendarId } from '@hcengineering/calendar'
|
||||||
import { Employee } from '@hcengineering/contact'
|
import { Employee } from '@hcengineering/contact'
|
||||||
import { DateRangeMode, Domain, Markup, Ref, Timestamp, IndexKind } from '@hcengineering/core'
|
import { DateRangeMode, Domain, IndexKind, Markup, Ref, Timestamp } from '@hcengineering/core'
|
||||||
import {
|
import {
|
||||||
ArrOf,
|
ArrOf,
|
||||||
Builder,
|
Builder,
|
||||||
@ -43,6 +43,8 @@ import notification from '@hcengineering/notification'
|
|||||||
import calendar from './plugin'
|
import calendar from './plugin'
|
||||||
|
|
||||||
export * from '@hcengineering/calendar'
|
export * from '@hcengineering/calendar'
|
||||||
|
export { calendarId } from '@hcengineering/calendar'
|
||||||
|
export { calendarOperation } from './migration'
|
||||||
|
|
||||||
export const DOMAIN_CALENDAR = 'calendar' as Domain
|
export const DOMAIN_CALENDAR = 'calendar' as Domain
|
||||||
|
|
||||||
@ -200,5 +202,4 @@ export function createModel (builder: Builder): void {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export { calendarOperation } from './migration'
|
|
||||||
export default calendar
|
export default calendar
|
||||||
|
@ -45,7 +45,9 @@ export default mergeIds(calendarId, calendar, {
|
|||||||
Reminder: '' as IntlString,
|
Reminder: '' as IntlString,
|
||||||
Shift: '' as IntlString,
|
Shift: '' as IntlString,
|
||||||
State: '' as IntlString,
|
State: '' as IntlString,
|
||||||
CreatedReminder: '' as IntlString
|
CreatedReminder: '' as IntlString,
|
||||||
|
ConfigLabel: '' as IntlString,
|
||||||
|
ConfigDescription: '' as IntlString
|
||||||
},
|
},
|
||||||
viewlet: {
|
viewlet: {
|
||||||
Calendar: '' as Ref<ViewletDescriptor>,
|
Calendar: '' as Ref<ViewletDescriptor>,
|
||||||
|
@ -48,9 +48,11 @@ import attachment from '@hcengineering/model-attachment'
|
|||||||
import core, { TAttachedDoc, TSpace } from '@hcengineering/model-core'
|
import core, { TAttachedDoc, TSpace } from '@hcengineering/model-core'
|
||||||
import notification from '@hcengineering/model-notification'
|
import notification from '@hcengineering/model-notification'
|
||||||
import preference, { TPreference } from '@hcengineering/model-preference'
|
import preference, { TPreference } from '@hcengineering/model-preference'
|
||||||
import view, { actionTemplates as viewTemplates, createAction } from '@hcengineering/model-view'
|
import view, { createAction, actionTemplates as viewTemplates } from '@hcengineering/model-view'
|
||||||
import workbench from '@hcengineering/model-workbench'
|
import workbench from '@hcengineering/model-workbench'
|
||||||
import chunter from './plugin'
|
import chunter from './plugin'
|
||||||
|
export { chunterId } from '@hcengineering/chunter'
|
||||||
|
export { chunterOperation } from './migration'
|
||||||
|
|
||||||
export const DOMAIN_CHUNTER = 'chunter' as Domain
|
export const DOMAIN_CHUNTER = 'chunter' as Domain
|
||||||
export const DOMAIN_COMMENT = 'comment' as Domain
|
export const DOMAIN_COMMENT = 'comment' as Domain
|
||||||
@ -653,6 +655,4 @@ export function createModel (builder: Builder, options = { addApplication: true
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export { chunterOperation } from './migration'
|
|
||||||
|
|
||||||
export default chunter
|
export default chunter
|
||||||
|
@ -74,7 +74,9 @@ export default mergeIds(chunterId, chunter, {
|
|||||||
Reactions: '' as IntlString,
|
Reactions: '' as IntlString,
|
||||||
Emoji: '' as IntlString,
|
Emoji: '' as IntlString,
|
||||||
FilterComments: '' as IntlString,
|
FilterComments: '' as IntlString,
|
||||||
FilterBacklinks: '' as IntlString
|
FilterBacklinks: '' as IntlString,
|
||||||
|
ConfigLabel: '' as IntlString,
|
||||||
|
ConfigDescription: '' as IntlString
|
||||||
},
|
},
|
||||||
viewlet: {
|
viewlet: {
|
||||||
Chat: '' as Ref<ViewletDescriptor>
|
Chat: '' as Ref<ViewletDescriptor>
|
||||||
|
@ -60,6 +60,10 @@ import templates from '@hcengineering/templates'
|
|||||||
import { AnyComponent } from '@hcengineering/ui'
|
import { AnyComponent } from '@hcengineering/ui'
|
||||||
import contact from './plugin'
|
import contact from './plugin'
|
||||||
|
|
||||||
|
export { contactId } from '@hcengineering/contact'
|
||||||
|
export { contactOperation } from './migration'
|
||||||
|
export { contact as default }
|
||||||
|
|
||||||
export const DOMAIN_CONTACT = 'contact' as Domain
|
export const DOMAIN_CONTACT = 'contact' as Domain
|
||||||
export const DOMAIN_CHANNEL = 'channel' as Domain
|
export const DOMAIN_CHANNEL = 'channel' as Domain
|
||||||
|
|
||||||
@ -767,6 +771,3 @@ export function createModel (builder: Builder): void {
|
|||||||
component: contact.component.ActivityChannelMessage
|
component: contact.component.ActivityChannelMessage
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export { contactOperation } from './migration'
|
|
||||||
export { contact as default }
|
|
||||||
|
@ -82,7 +82,11 @@ export default mergeIds(contactId, contact, {
|
|||||||
WhatsappPlaceholder: '' as IntlString,
|
WhatsappPlaceholder: '' as IntlString,
|
||||||
Profile: '' as IntlString,
|
Profile: '' as IntlString,
|
||||||
ProfilePlaceholder: '' as IntlString,
|
ProfilePlaceholder: '' as IntlString,
|
||||||
CurrentEmployee: '' as IntlString
|
|
||||||
|
CurrentEmployee: '' as IntlString,
|
||||||
|
|
||||||
|
ConfigLabel: '' as IntlString,
|
||||||
|
ConfigDescription: '' as IntlString
|
||||||
},
|
},
|
||||||
completion: {
|
completion: {
|
||||||
PersonQuery: '' as Resource<ObjectSearchFactory>,
|
PersonQuery: '' as Resource<ObjectSearchFactory>,
|
||||||
|
@ -65,7 +65,7 @@ import {
|
|||||||
TypeTimestamp,
|
TypeTimestamp,
|
||||||
UX
|
UX
|
||||||
} from '@hcengineering/model'
|
} from '@hcengineering/model'
|
||||||
import { getEmbeddedLabel, IntlString } from '@hcengineering/platform'
|
import { getEmbeddedLabel, IntlString, Plugin } from '@hcengineering/platform'
|
||||||
import core from './component'
|
import core from './component'
|
||||||
|
|
||||||
// C O R E
|
// C O R E
|
||||||
@ -237,8 +237,12 @@ export class TVersion extends TDoc implements Version {
|
|||||||
|
|
||||||
@Model(core.class.PluginConfiguration, core.class.Doc, DOMAIN_MODEL)
|
@Model(core.class.PluginConfiguration, core.class.Doc, DOMAIN_MODEL)
|
||||||
export class TPluginConfiguration extends TDoc implements PluginConfiguration {
|
export class TPluginConfiguration extends TDoc implements PluginConfiguration {
|
||||||
pluginId!: string
|
pluginId!: Plugin
|
||||||
transactions!: Ref<Doc>[]
|
transactions!: Ref<Doc>[]
|
||||||
|
|
||||||
|
label!: IntlString
|
||||||
|
enabled!: boolean
|
||||||
|
configurable!: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
@Model(core.class.BlobData, core.class.Doc, DOMAIN_BLOB)
|
@Model(core.class.BlobData, core.class.Doc, DOMAIN_BLOB)
|
||||||
|
@ -15,13 +15,13 @@
|
|||||||
|
|
||||||
import {
|
import {
|
||||||
AccountRole,
|
AccountRole,
|
||||||
TxCollectionCUD,
|
|
||||||
Doc,
|
|
||||||
AttachedDoc,
|
AttachedDoc,
|
||||||
IndexingConfiguration,
|
|
||||||
Class,
|
Class,
|
||||||
systemAccountEmail,
|
Doc,
|
||||||
DocIndexState
|
DocIndexState,
|
||||||
|
IndexingConfiguration,
|
||||||
|
TxCollectionCUD,
|
||||||
|
systemAccountEmail
|
||||||
} from '@hcengineering/core'
|
} from '@hcengineering/core'
|
||||||
import { Builder } from '@hcengineering/model'
|
import { Builder } from '@hcengineering/model'
|
||||||
import core from './component'
|
import core from './component'
|
||||||
@ -38,8 +38,8 @@ import {
|
|||||||
TDocIndexState,
|
TDocIndexState,
|
||||||
TEnum,
|
TEnum,
|
||||||
TEnumOf,
|
TEnumOf,
|
||||||
TFulltextData,
|
|
||||||
TFullTextSearchContext,
|
TFullTextSearchContext,
|
||||||
|
TFulltextData,
|
||||||
TIndexConfiguration,
|
TIndexConfiguration,
|
||||||
TIndexStageState,
|
TIndexStageState,
|
||||||
TInterface,
|
TInterface,
|
||||||
@ -63,13 +63,14 @@ import {
|
|||||||
import { TAccount, TSpace } from './security'
|
import { TAccount, TSpace } from './security'
|
||||||
import { TStatus, TStatusCategory } from './status'
|
import { TStatus, TStatusCategory } from './status'
|
||||||
import { TUserStatus } from './transient'
|
import { TUserStatus } from './transient'
|
||||||
import { TTx, TTxApplyIf, TTxCollectionCUD, TTxCreateDoc, TTxCUD, TTxMixin, TTxRemoveDoc, TTxUpdateDoc } from './tx'
|
import { TTx, TTxApplyIf, TTxCUD, TTxCollectionCUD, TTxCreateDoc, TTxMixin, TTxRemoveDoc, TTxUpdateDoc } from './tx'
|
||||||
|
|
||||||
|
export { coreId } from '@hcengineering/core'
|
||||||
export * from './core'
|
export * from './core'
|
||||||
export { coreOperation } from './migration'
|
export { coreOperation } from './migration'
|
||||||
export * from './security'
|
export * from './security'
|
||||||
export * from './tx'
|
|
||||||
export * from './status'
|
export * from './status'
|
||||||
|
export * from './tx'
|
||||||
export { core as default }
|
export { core as default }
|
||||||
|
|
||||||
export function createModel (builder: Builder): void {
|
export function createModel (builder: Builder): void {
|
||||||
|
@ -82,7 +82,7 @@ export const demoOperation: MigrateOperation = {
|
|||||||
email: 'rosamund@hc.engineering',
|
email: 'rosamund@hc.engineering',
|
||||||
employee,
|
employee,
|
||||||
name: 'Chen,Rosamund',
|
name: 'Chen,Rosamund',
|
||||||
role: AccountRole.Owner
|
role: AccountRole.User
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,11 +19,11 @@ import { IndexKind } from '@hcengineering/core'
|
|||||||
import {
|
import {
|
||||||
CollaboratorDocument,
|
CollaboratorDocument,
|
||||||
Document,
|
Document,
|
||||||
documentId,
|
|
||||||
DocumentRequest,
|
DocumentRequest,
|
||||||
DocumentRequestKind,
|
DocumentRequestKind,
|
||||||
DocumentVersion,
|
DocumentVersion,
|
||||||
DocumentVersionState
|
DocumentVersionState,
|
||||||
|
documentId
|
||||||
} from '@hcengineering/document'
|
} from '@hcengineering/document'
|
||||||
import {
|
import {
|
||||||
ArrOf,
|
ArrOf,
|
||||||
@ -45,10 +45,14 @@ import core, { TAttachedDoc, TDoc } from '@hcengineering/model-core'
|
|||||||
import presentation from '@hcengineering/model-presentation'
|
import presentation from '@hcengineering/model-presentation'
|
||||||
import view, { actionTemplates, createAction } from '@hcengineering/model-view'
|
import view, { actionTemplates, createAction } from '@hcengineering/model-view'
|
||||||
import workbench from '@hcengineering/model-workbench'
|
import workbench from '@hcengineering/model-workbench'
|
||||||
import tags from '@hcengineering/tags'
|
|
||||||
import notification from '@hcengineering/notification'
|
import notification from '@hcengineering/notification'
|
||||||
|
import tags from '@hcengineering/tags'
|
||||||
import document from './plugin'
|
import document from './plugin'
|
||||||
|
|
||||||
|
export { documentId } from '@hcengineering/document'
|
||||||
|
export { documentOperation } from './migration'
|
||||||
|
export { document as default }
|
||||||
|
|
||||||
export const DOMAIN_DOCUMENT = 'document' as Domain
|
export const DOMAIN_DOCUMENT = 'document' as Domain
|
||||||
|
|
||||||
@Model(document.class.DocumentRequest, core.class.AttachedDoc, DOMAIN_DOCUMENT)
|
@Model(document.class.DocumentRequest, core.class.AttachedDoc, DOMAIN_DOCUMENT)
|
||||||
@ -266,6 +270,3 @@ export function createModel (builder: Builder): void {
|
|||||||
editor: document.component.DocumentVersions
|
editor: document.component.DocumentVersions
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export { documentOperation } from './migration'
|
|
||||||
export { document as default }
|
|
||||||
|
@ -18,7 +18,7 @@ import {} from '@hcengineering/core'
|
|||||||
import { documentId } from '@hcengineering/document'
|
import { documentId } from '@hcengineering/document'
|
||||||
import document from '@hcengineering/document-resources/src/plugin'
|
import document from '@hcengineering/document-resources/src/plugin'
|
||||||
import { ObjectSearchCategory, ObjectSearchFactory } from '@hcengineering/model-presentation'
|
import { ObjectSearchCategory, ObjectSearchFactory } from '@hcengineering/model-presentation'
|
||||||
import { mergeIds, Resource } from '@hcengineering/platform'
|
import { IntlString, mergeIds, Resource } from '@hcengineering/platform'
|
||||||
import { TagCategory } from '@hcengineering/tags'
|
import { TagCategory } from '@hcengineering/tags'
|
||||||
import { AnyComponent } from '@hcengineering/ui'
|
import { AnyComponent } from '@hcengineering/ui'
|
||||||
import { ActionCategory } from '@hcengineering/view'
|
import { ActionCategory } from '@hcengineering/view'
|
||||||
@ -40,5 +40,9 @@ export default mergeIds(documentId, document, {
|
|||||||
},
|
},
|
||||||
viewlet: {
|
viewlet: {
|
||||||
TableDocument: '' as Ref<Doc>
|
TableDocument: '' as Ref<Doc>
|
||||||
|
},
|
||||||
|
string: {
|
||||||
|
ConfigLabel: '' as IntlString,
|
||||||
|
ConfigDescription: '' as IntlString
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -35,6 +35,10 @@ import view, { createAction } from '@hcengineering/model-view'
|
|||||||
import setting from '@hcengineering/setting'
|
import setting from '@hcengineering/setting'
|
||||||
import gmail from './plugin'
|
import gmail from './plugin'
|
||||||
|
|
||||||
|
export { gmailId } from '@hcengineering/gmail'
|
||||||
|
export { gmailOperation } from './migration'
|
||||||
|
export { default } from './plugin'
|
||||||
|
|
||||||
export const DOMAIN_GMAIL = 'gmail' as Domain
|
export const DOMAIN_GMAIL = 'gmail' as Domain
|
||||||
|
|
||||||
function TypeSharedMessage (): Type<SharedMessage> {
|
function TypeSharedMessage (): Type<SharedMessage> {
|
||||||
@ -213,5 +217,3 @@ export function createModel (builder: Builder): void {
|
|||||||
parentPropagate: false
|
parentPropagate: false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export { gmailOperation } from './migration'
|
|
||||||
|
@ -37,7 +37,9 @@ export default mergeIds(gmailId, gmail, {
|
|||||||
Messages: '' as IntlString,
|
Messages: '' as IntlString,
|
||||||
Incoming: '' as IntlString,
|
Incoming: '' as IntlString,
|
||||||
Status: '' as IntlString,
|
Status: '' as IntlString,
|
||||||
EmailPlaceholder: '' as IntlString
|
EmailPlaceholder: '' as IntlString,
|
||||||
|
ConfigLabel: '' as IntlString,
|
||||||
|
ConfigDescription: '' as IntlString
|
||||||
},
|
},
|
||||||
ids: {
|
ids: {
|
||||||
TxSharedCreate: '' as Ref<TxViewlet>
|
TxSharedCreate: '' as Ref<TxViewlet>
|
||||||
|
@ -14,16 +14,16 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
import { Contact, Employee } from '@hcengineering/contact'
|
import { Contact, Employee } from '@hcengineering/contact'
|
||||||
import { Arr, Class, Domain, DOMAIN_MODEL, IndexKind, Markup, Ref, Type } from '@hcengineering/core'
|
import { Arr, Class, DOMAIN_MODEL, Domain, IndexKind, Markup, Ref, Type } from '@hcengineering/core'
|
||||||
import {
|
import {
|
||||||
Department,
|
Department,
|
||||||
DepartmentMember,
|
DepartmentMember,
|
||||||
hrId,
|
|
||||||
PublicHoliday,
|
PublicHoliday,
|
||||||
Request,
|
Request,
|
||||||
RequestType,
|
RequestType,
|
||||||
Staff,
|
Staff,
|
||||||
TzDate
|
TzDate,
|
||||||
|
hrId
|
||||||
} from '@hcengineering/hr'
|
} from '@hcengineering/hr'
|
||||||
import {
|
import {
|
||||||
ArrOf,
|
ArrOf,
|
||||||
@ -47,9 +47,13 @@ import contact, { TEmployee, TEmployeeAccount } from '@hcengineering/model-conta
|
|||||||
import core, { TAttachedDoc, TDoc, TSpace, TType } from '@hcengineering/model-core'
|
import core, { TAttachedDoc, TDoc, TSpace, TType } from '@hcengineering/model-core'
|
||||||
import view, { classPresenter, createAction } from '@hcengineering/model-view'
|
import view, { classPresenter, createAction } from '@hcengineering/model-view'
|
||||||
import workbench from '@hcengineering/model-workbench'
|
import workbench from '@hcengineering/model-workbench'
|
||||||
|
import notification from '@hcengineering/notification'
|
||||||
import { Asset, IntlString } from '@hcengineering/platform'
|
import { Asset, IntlString } from '@hcengineering/platform'
|
||||||
import hr from './plugin'
|
import hr from './plugin'
|
||||||
import notification from '@hcengineering/notification'
|
|
||||||
|
export { hrId } from '@hcengineering/hr'
|
||||||
|
export { hrOperation } from './migration'
|
||||||
|
export { default } from './plugin'
|
||||||
|
|
||||||
export const DOMAIN_HR = 'hr' as Domain
|
export const DOMAIN_HR = 'hr' as Domain
|
||||||
|
|
||||||
@ -482,6 +486,3 @@ export function createModel (builder: Builder): void {
|
|||||||
hr.ids.CreatePublicHolidayNotification
|
hr.ids.CreatePublicHolidayNotification
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export { hrOperation } from './migration'
|
|
||||||
export { default } from './plugin'
|
|
||||||
|
@ -33,7 +33,9 @@ export default mergeIds(hrId, hr, {
|
|||||||
Overtime: '' as IntlString,
|
Overtime: '' as IntlString,
|
||||||
Overtime2: '' as IntlString,
|
Overtime2: '' as IntlString,
|
||||||
Subscribers: '' as IntlString,
|
Subscribers: '' as IntlString,
|
||||||
PublicHoliday: '' as IntlString
|
PublicHoliday: '' as IntlString,
|
||||||
|
ConfigLabel: '' as IntlString,
|
||||||
|
ConfigDescription: '' as IntlString
|
||||||
},
|
},
|
||||||
component: {
|
component: {
|
||||||
Structure: '' as AnyComponent,
|
Structure: '' as AnyComponent,
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
import { Domain, IndexKind, Ref } from '@hcengineering/core'
|
import { Domain, IndexKind, Ref } from '@hcengineering/core'
|
||||||
import { Category, inventoryId, Product, Variant } from '@hcengineering/inventory'
|
import { Category, Product, Variant, inventoryId } from '@hcengineering/inventory'
|
||||||
import { Builder, Collection, Index, Model, Prop, TypeRef, TypeString, UX } from '@hcengineering/model'
|
import { Builder, Collection, Index, Model, Prop, TypeRef, TypeString, UX } from '@hcengineering/model'
|
||||||
import attachment from '@hcengineering/model-attachment'
|
import attachment from '@hcengineering/model-attachment'
|
||||||
import core, { TAttachedDoc } from '@hcengineering/model-core'
|
import core, { TAttachedDoc } from '@hcengineering/model-core'
|
||||||
@ -25,6 +25,10 @@ import setting from '@hcengineering/setting'
|
|||||||
import view, { Viewlet } from '@hcengineering/view'
|
import view, { Viewlet } from '@hcengineering/view'
|
||||||
import inventory from './plugin'
|
import inventory from './plugin'
|
||||||
|
|
||||||
|
export { inventoryId } from '@hcengineering/inventory'
|
||||||
|
export { inventoryOperation } from './migration'
|
||||||
|
export { default } from './plugin'
|
||||||
|
|
||||||
export const DOMAIN_INVENTORY = 'inventory' as Domain
|
export const DOMAIN_INVENTORY = 'inventory' as Domain
|
||||||
@Model(inventory.class.Category, core.class.AttachedDoc, DOMAIN_INVENTORY)
|
@Model(inventory.class.Category, core.class.AttachedDoc, DOMAIN_INVENTORY)
|
||||||
@UX(inventory.string.Category, inventory.icon.Categories, undefined, 'name')
|
@UX(inventory.string.Category, inventory.icon.Categories, undefined, 'name')
|
||||||
@ -175,6 +179,3 @@ export function createModel (builder: Builder): void {
|
|||||||
filters: ['attachedTo']
|
filters: ['attachedTo']
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export { inventoryOperation } from './migration'
|
|
||||||
export { default } from './plugin'
|
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
import type { Ref } from '@hcengineering/core'
|
import type { Ref } from '@hcengineering/core'
|
||||||
import { inventoryId } from '@hcengineering/inventory'
|
import { inventoryId } from '@hcengineering/inventory'
|
||||||
import inventory from '@hcengineering/inventory-resources/src/plugin'
|
import inventory from '@hcengineering/inventory-resources/src/plugin'
|
||||||
import { mergeIds } from '@hcengineering/platform'
|
import { IntlString, mergeIds } from '@hcengineering/platform'
|
||||||
import type { AnyComponent } from '@hcengineering/ui'
|
import type { AnyComponent } from '@hcengineering/ui'
|
||||||
import { Action, ActionCategory, ViewAction, Viewlet } from '@hcengineering/view'
|
import { Action, ActionCategory, ViewAction, Viewlet } from '@hcengineering/view'
|
||||||
|
|
||||||
@ -43,5 +43,9 @@ export default mergeIds(inventoryId, inventory, {
|
|||||||
},
|
},
|
||||||
viewlet: {
|
viewlet: {
|
||||||
TableProduct: '' as Ref<Viewlet>
|
TableProduct: '' as Ref<Viewlet>
|
||||||
|
},
|
||||||
|
string: {
|
||||||
|
ConfigLabel: '' as IntlString,
|
||||||
|
ConfigDescription: '' as IntlString
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -40,6 +40,10 @@ import setting from '@hcengineering/setting'
|
|||||||
import { ViewOptionsModel } from '@hcengineering/view'
|
import { ViewOptionsModel } from '@hcengineering/view'
|
||||||
import lead from './plugin'
|
import lead from './plugin'
|
||||||
|
|
||||||
|
export { leadId } from '@hcengineering/lead'
|
||||||
|
export { leadOperation } from './migration'
|
||||||
|
export { default } from './plugin'
|
||||||
|
|
||||||
@Model(lead.class.Funnel, task.class.SpaceWithStates)
|
@Model(lead.class.Funnel, task.class.SpaceWithStates)
|
||||||
@UX(lead.string.Funnel, lead.icon.Funnel)
|
@UX(lead.string.Funnel, lead.icon.Funnel)
|
||||||
export class TFunnel extends TSpaceWithStates implements Funnel {
|
export class TFunnel extends TSpaceWithStates implements Funnel {
|
||||||
@ -419,6 +423,3 @@ export function createModel (builder: Builder): void {
|
|||||||
lead.action.CreateGlobalLead
|
lead.action.CreateGlobalLead
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export { leadOperation } from './migration'
|
|
||||||
export { default } from './plugin'
|
|
||||||
|
@ -32,7 +32,9 @@ export default mergeIds(leadId, lead, {
|
|||||||
Title: '' as IntlString,
|
Title: '' as IntlString,
|
||||||
ManageFunnelStatuses: '' as IntlString,
|
ManageFunnelStatuses: '' as IntlString,
|
||||||
FunnelBrowser: '' as IntlString,
|
FunnelBrowser: '' as IntlString,
|
||||||
GotoLeadApplication: '' as IntlString
|
GotoLeadApplication: '' as IntlString,
|
||||||
|
ConfigLabel: '' as IntlString,
|
||||||
|
ConfigDescription: '' as IntlString
|
||||||
},
|
},
|
||||||
component: {
|
component: {
|
||||||
CreateLead: '' as AnyComponent,
|
CreateLead: '' as AnyComponent,
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
"resolveJsonModule": true,
|
"resolveJsonModule": true,
|
||||||
"experimentalDecorators": true,
|
"experimentalDecorators": true,
|
||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
"incremental": true
|
"incremental": true,
|
||||||
|
"declarationMap": true
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -17,6 +17,7 @@
|
|||||||
import { Account, Class, Doc, Domain, DOMAIN_MODEL, IndexKind, Ref, Timestamp, TxCUD } from '@hcengineering/core'
|
import { Account, Class, Doc, Domain, DOMAIN_MODEL, IndexKind, Ref, Timestamp, TxCUD } from '@hcengineering/core'
|
||||||
import { ArrOf, Builder, Index, Mixin, Model, Prop, TypeRef, TypeString, UX } from '@hcengineering/model'
|
import { ArrOf, Builder, Index, Mixin, Model, Prop, TypeRef, TypeString, UX } from '@hcengineering/model'
|
||||||
import core, { TAttachedDoc, TClass, TDoc } from '@hcengineering/model-core'
|
import core, { TAttachedDoc, TClass, TDoc } from '@hcengineering/model-core'
|
||||||
|
import view, { createAction } from '@hcengineering/model-view'
|
||||||
import {
|
import {
|
||||||
AnotherUserNotifications,
|
AnotherUserNotifications,
|
||||||
DocUpdates,
|
DocUpdates,
|
||||||
@ -33,10 +34,13 @@ import {
|
|||||||
} from '@hcengineering/notification'
|
} from '@hcengineering/notification'
|
||||||
import type { IntlString } from '@hcengineering/platform'
|
import type { IntlString } from '@hcengineering/platform'
|
||||||
import setting from '@hcengineering/setting'
|
import setting from '@hcengineering/setting'
|
||||||
|
import { AnyComponent } from '@hcengineering/ui'
|
||||||
import workbench from '@hcengineering/workbench'
|
import workbench from '@hcengineering/workbench'
|
||||||
import notification from './plugin'
|
import notification from './plugin'
|
||||||
import { AnyComponent } from '@hcengineering/ui'
|
|
||||||
import view, { createAction } from '@hcengineering/model-view'
|
export { notificationId } from '@hcengineering/notification'
|
||||||
|
export { notificationOperation } from './migration'
|
||||||
|
export { notification as default }
|
||||||
|
|
||||||
export const DOMAIN_NOTIFICATION = 'notification' as Domain
|
export const DOMAIN_NOTIFICATION = 'notification' as Domain
|
||||||
|
|
||||||
@ -296,6 +300,3 @@ export function createModel (builder: Builder): void {
|
|||||||
actions: [view.action.Delete, view.action.Open]
|
actions: [view.action.Delete, view.action.Open]
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export { notificationOperation } from './migration'
|
|
||||||
export { notification as default }
|
|
||||||
|
@ -18,6 +18,10 @@ import { Builder, Model, Prop, TypeRef } from '@hcengineering/model'
|
|||||||
import core, { TDoc } from '@hcengineering/model-core'
|
import core, { TDoc } from '@hcengineering/model-core'
|
||||||
import preference, { DOMAIN_PREFERENCE, Preference, SpacePreference } from '@hcengineering/preference'
|
import preference, { DOMAIN_PREFERENCE, Preference, SpacePreference } from '@hcengineering/preference'
|
||||||
|
|
||||||
|
export { preferenceId } from '@hcengineering/preference'
|
||||||
|
export { preferenceOperation } from './migration'
|
||||||
|
export { preference as default }
|
||||||
|
|
||||||
@Model(preference.class.Preference, core.class.Doc, DOMAIN_PREFERENCE)
|
@Model(preference.class.Preference, core.class.Doc, DOMAIN_PREFERENCE)
|
||||||
export class TPreference extends TDoc implements Preference {
|
export class TPreference extends TDoc implements Preference {
|
||||||
@Prop(TypeRef(core.class.Doc), core.string.AttachedTo)
|
@Prop(TypeRef(core.class.Doc), core.string.AttachedTo)
|
||||||
@ -33,6 +37,3 @@ export class TSpacePreference extends TPreference implements SpacePreference {
|
|||||||
export function createModel (builder: Builder): void {
|
export function createModel (builder: Builder): void {
|
||||||
builder.createModel(TPreference, TSpacePreference)
|
builder.createModel(TPreference, TSpacePreference)
|
||||||
}
|
}
|
||||||
|
|
||||||
export { preference as default }
|
|
||||||
export { preferenceOperation } from './migration'
|
|
||||||
|
@ -21,6 +21,7 @@ import type { Asset, IntlString, Resource } from '@hcengineering/platform'
|
|||||||
import { ObjectSearchCategory, ObjectSearchFactory } from '@hcengineering/presentation/src/types'
|
import { ObjectSearchCategory, ObjectSearchFactory } from '@hcengineering/presentation/src/types'
|
||||||
import presentation from './plugin'
|
import presentation from './plugin'
|
||||||
|
|
||||||
|
export { presentationId } from '@hcengineering/presentation/src/plugin'
|
||||||
export { default } from './plugin'
|
export { default } from './plugin'
|
||||||
export { ObjectSearchCategory, ObjectSearchFactory }
|
export { ObjectSearchCategory, ObjectSearchFactory }
|
||||||
|
|
||||||
|
@ -39,20 +39,20 @@ import contact, { TOrganization, TPerson } from '@hcengineering/model-contact'
|
|||||||
import core, { TAttachedDoc, TSpace } from '@hcengineering/model-core'
|
import core, { TAttachedDoc, TSpace } from '@hcengineering/model-core'
|
||||||
import presentation from '@hcengineering/model-presentation'
|
import presentation from '@hcengineering/model-presentation'
|
||||||
import tags from '@hcengineering/model-tags'
|
import tags from '@hcengineering/model-tags'
|
||||||
import task, { actionTemplates, DOMAIN_TASK, TSpaceWithStates, TTask } from '@hcengineering/model-task'
|
import task, { DOMAIN_TASK, TSpaceWithStates, TTask, actionTemplates } from '@hcengineering/model-task'
|
||||||
import tracker from '@hcengineering/model-tracker'
|
import tracker from '@hcengineering/model-tracker'
|
||||||
import view, { actionTemplates as viewTemplates, createAction } from '@hcengineering/model-view'
|
import view, { createAction, actionTemplates as viewTemplates } from '@hcengineering/model-view'
|
||||||
import workbench, { Application, createNavigateAction } from '@hcengineering/model-workbench'
|
import workbench, { Application, createNavigateAction } from '@hcengineering/model-workbench'
|
||||||
import notification from '@hcengineering/notification'
|
import notification from '@hcengineering/notification'
|
||||||
import { getEmbeddedLabel, IntlString } from '@hcengineering/platform'
|
import { IntlString, getEmbeddedLabel } from '@hcengineering/platform'
|
||||||
import {
|
import {
|
||||||
Applicant,
|
Applicant,
|
||||||
ApplicantMatch,
|
ApplicantMatch,
|
||||||
Candidate,
|
Candidate,
|
||||||
Candidates,
|
Candidates,
|
||||||
recruitId,
|
|
||||||
Vacancy,
|
Vacancy,
|
||||||
VacancyList
|
VacancyList,
|
||||||
|
recruitId
|
||||||
} from '@hcengineering/recruit'
|
} from '@hcengineering/recruit'
|
||||||
import setting from '@hcengineering/setting'
|
import setting from '@hcengineering/setting'
|
||||||
import { KeyBinding, ViewOptionsModel } from '@hcengineering/view'
|
import { KeyBinding, ViewOptionsModel } from '@hcengineering/view'
|
||||||
@ -60,6 +60,10 @@ import recruit from './plugin'
|
|||||||
import { createReviewModel, reviewTableConfig, reviewTableOptions } from './review'
|
import { createReviewModel, reviewTableConfig, reviewTableOptions } from './review'
|
||||||
import { TOpinion, TReview } from './review-model'
|
import { TOpinion, TReview } from './review-model'
|
||||||
|
|
||||||
|
export { recruitId } from '@hcengineering/recruit'
|
||||||
|
export { recruitOperation } from './migration'
|
||||||
|
export { default } from './plugin'
|
||||||
|
|
||||||
@Model(recruit.class.Vacancy, task.class.SpaceWithStates)
|
@Model(recruit.class.Vacancy, task.class.SpaceWithStates)
|
||||||
@UX(recruit.string.Vacancy, recruit.icon.Vacancy, 'VCN', 'name')
|
@UX(recruit.string.Vacancy, recruit.icon.Vacancy, 'VCN', 'name')
|
||||||
export class TVacancy extends TSpaceWithStates implements Vacancy {
|
export class TVacancy extends TSpaceWithStates implements Vacancy {
|
||||||
@ -1190,6 +1194,3 @@ export function createModel (builder: Builder): void {
|
|||||||
recruit.action.MoveApplicant
|
recruit.action.MoveApplicant
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export { recruitOperation } from './migration'
|
|
||||||
export { default } from './plugin'
|
|
||||||
|
@ -60,7 +60,9 @@ export default mergeIds(recruitId, recruit, {
|
|||||||
GotoAssigned: '' as IntlString,
|
GotoAssigned: '' as IntlString,
|
||||||
GotoApplicants: '' as IntlString,
|
GotoApplicants: '' as IntlString,
|
||||||
GotoRecruitApplication: '' as IntlString,
|
GotoRecruitApplication: '' as IntlString,
|
||||||
VacancyList: '' as IntlString
|
VacancyList: '' as IntlString,
|
||||||
|
ConfigLabel: '' as IntlString,
|
||||||
|
ConfigDescription: '' as IntlString
|
||||||
},
|
},
|
||||||
validator: {
|
validator: {
|
||||||
ApplicantValidator: '' as Resource<<T extends Doc>(doc: T, client: Client) => Promise<Status>>
|
ApplicantValidator: '' as Resource<<T extends Doc>(doc: T, client: Client) => Promise<Status>>
|
||||||
|
@ -31,12 +31,15 @@ import {
|
|||||||
TypeString,
|
TypeString,
|
||||||
UX
|
UX
|
||||||
} from '@hcengineering/model'
|
} from '@hcengineering/model'
|
||||||
import core, { TAttachedDoc, TClass } from '@hcengineering/model-core'
|
|
||||||
import { Request, RequestDecisionComment, RequestStatus, RequestPresenter } from '@hcengineering/request'
|
|
||||||
import request from './plugin'
|
|
||||||
import view from '@hcengineering/model-view'
|
|
||||||
import { TComment } from '@hcengineering/model-chunter'
|
import { TComment } from '@hcengineering/model-chunter'
|
||||||
|
import core, { TAttachedDoc, TClass } from '@hcengineering/model-core'
|
||||||
|
import view from '@hcengineering/model-view'
|
||||||
|
import { Request, RequestDecisionComment, RequestPresenter, RequestStatus } from '@hcengineering/request'
|
||||||
import { AnyComponent } from '@hcengineering/ui'
|
import { AnyComponent } from '@hcengineering/ui'
|
||||||
|
import request from './plugin'
|
||||||
|
|
||||||
|
export { requestId } from '@hcengineering/request'
|
||||||
|
export { default } from './plugin'
|
||||||
|
|
||||||
export const DOMAIN_REQUEST = 'request' as Domain
|
export const DOMAIN_REQUEST = 'request' as Domain
|
||||||
|
|
||||||
@ -105,5 +108,3 @@ export function createModel (builder: Builder): void {
|
|||||||
request.ids.TxRequestCreate
|
request.ids.TxRequestCreate
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export { default } from './plugin'
|
|
||||||
|
@ -16,9 +16,11 @@
|
|||||||
|
|
||||||
import { Builder } from '@hcengineering/model'
|
import { Builder } from '@hcengineering/model'
|
||||||
|
|
||||||
import serverCore from '@hcengineering/server-core'
|
|
||||||
import core from '@hcengineering/core'
|
import core from '@hcengineering/core'
|
||||||
import serverAttachment from '@hcengineering/server-attachment'
|
import serverAttachment from '@hcengineering/server-attachment'
|
||||||
|
import serverCore from '@hcengineering/server-core'
|
||||||
|
|
||||||
|
export { serverAttachmentId } from '@hcengineering/server-attachment'
|
||||||
|
|
||||||
export function createModel (builder: Builder): void {
|
export function createModel (builder: Builder): void {
|
||||||
builder.createDoc(serverCore.class.Trigger, core.space.Model, {
|
builder.createDoc(serverCore.class.Trigger, core.space.Model, {
|
||||||
|
@ -16,8 +16,10 @@
|
|||||||
import { Builder } from '@hcengineering/model'
|
import { Builder } from '@hcengineering/model'
|
||||||
|
|
||||||
import core, { Class, Doc } from '@hcengineering/core'
|
import core, { Class, Doc } from '@hcengineering/core'
|
||||||
import serverCore, { ObjectDDParticipant } from '@hcengineering/server-core'
|
|
||||||
import serverCalendar from '@hcengineering/server-calendar'
|
import serverCalendar from '@hcengineering/server-calendar'
|
||||||
|
import serverCore, { ObjectDDParticipant } from '@hcengineering/server-core'
|
||||||
|
|
||||||
|
export { serverCalendarId } from '@hcengineering/server-calendar'
|
||||||
|
|
||||||
export function createModel (builder: Builder): void {
|
export function createModel (builder: Builder): void {
|
||||||
builder.mixin<Class<Doc>, ObjectDDParticipant>(
|
builder.mixin<Class<Doc>, ObjectDDParticipant>(
|
||||||
|
@ -20,6 +20,7 @@ import chunter from '@hcengineering/chunter'
|
|||||||
import serverNotification from '@hcengineering/server-notification'
|
import serverNotification from '@hcengineering/server-notification'
|
||||||
import serverCore, { ObjectDDParticipant } from '@hcengineering/server-core'
|
import serverCore, { ObjectDDParticipant } from '@hcengineering/server-core'
|
||||||
import serverChunter from '@hcengineering/server-chunter'
|
import serverChunter from '@hcengineering/server-chunter'
|
||||||
|
export { serverChunterId } from '@hcengineering/server-chunter'
|
||||||
|
|
||||||
export function createModel (builder: Builder): void {
|
export function createModel (builder: Builder): void {
|
||||||
builder.mixin(chunter.class.Channel, core.class.Class, serverNotification.mixin.HTMLPresenter, {
|
builder.mixin(chunter.class.Channel, core.class.Class, serverNotification.mixin.HTMLPresenter, {
|
||||||
|
@ -16,11 +16,12 @@
|
|||||||
|
|
||||||
import { Builder } from '@hcengineering/model'
|
import { Builder } from '@hcengineering/model'
|
||||||
|
|
||||||
import serverCore from '@hcengineering/server-core'
|
|
||||||
import core from '@hcengineering/core'
|
|
||||||
import contact from '@hcengineering/contact'
|
import contact from '@hcengineering/contact'
|
||||||
import serverNotification from '@hcengineering/server-notification'
|
import core from '@hcengineering/core'
|
||||||
import serverContact from '@hcengineering/server-contact'
|
import serverContact from '@hcengineering/server-contact'
|
||||||
|
import serverCore from '@hcengineering/server-core'
|
||||||
|
import serverNotification from '@hcengineering/server-notification'
|
||||||
|
export { serverContactId } from '@hcengineering/server-contact'
|
||||||
|
|
||||||
export function createModel (builder: Builder): void {
|
export function createModel (builder: Builder): void {
|
||||||
builder.mixin(contact.class.Person, core.class.Class, serverNotification.mixin.HTMLPresenter, {
|
builder.mixin(contact.class.Person, core.class.Class, serverNotification.mixin.HTMLPresenter, {
|
||||||
|
@ -31,6 +31,8 @@ import core, {
|
|||||||
import type { ObjectDDParticipant, Trigger, TriggerFunc } from '@hcengineering/server-core'
|
import type { ObjectDDParticipant, Trigger, TriggerFunc } from '@hcengineering/server-core'
|
||||||
import serverCore from '@hcengineering/server-core'
|
import serverCore from '@hcengineering/server-core'
|
||||||
|
|
||||||
|
export { serverCoreId } from '@hcengineering/server-core'
|
||||||
|
|
||||||
@Model(serverCore.class.Trigger, core.class.Doc, DOMAIN_MODEL)
|
@Model(serverCore.class.Trigger, core.class.Doc, DOMAIN_MODEL)
|
||||||
export class TTrigger extends TDoc implements Trigger {
|
export class TTrigger extends TDoc implements Trigger {
|
||||||
trigger!: Resource<TriggerFunc>
|
trigger!: Resource<TriggerFunc>
|
||||||
|
@ -15,10 +15,11 @@
|
|||||||
|
|
||||||
import { Builder } from '@hcengineering/model'
|
import { Builder } from '@hcengineering/model'
|
||||||
|
|
||||||
|
import contact from '@hcengineering/contact'
|
||||||
import core, { Class, Doc } from '@hcengineering/core'
|
import core, { Class, Doc } from '@hcengineering/core'
|
||||||
import serverCore, { ObjectDDParticipant } from '@hcengineering/server-core'
|
import serverCore, { ObjectDDParticipant } from '@hcengineering/server-core'
|
||||||
import contact from '@hcengineering/contact'
|
|
||||||
import serverGmail from '@hcengineering/server-gmail'
|
import serverGmail from '@hcengineering/server-gmail'
|
||||||
|
export { serverGmailId } from '@hcengineering/server-gmail'
|
||||||
|
|
||||||
export function createModel (builder: Builder): void {
|
export function createModel (builder: Builder): void {
|
||||||
builder.mixin<Class<Doc>, ObjectDDParticipant>(
|
builder.mixin<Class<Doc>, ObjectDDParticipant>(
|
||||||
|
@ -15,11 +15,13 @@
|
|||||||
|
|
||||||
import { Builder } from '@hcengineering/model'
|
import { Builder } from '@hcengineering/model'
|
||||||
|
|
||||||
import serverCore from '@hcengineering/server-core'
|
|
||||||
import core from '@hcengineering/core'
|
import core from '@hcengineering/core'
|
||||||
|
import hr from '@hcengineering/hr'
|
||||||
|
import serverCore from '@hcengineering/server-core'
|
||||||
import serverHr from '@hcengineering/server-hr'
|
import serverHr from '@hcengineering/server-hr'
|
||||||
import serverNotification from '@hcengineering/server-notification'
|
import serverNotification from '@hcengineering/server-notification'
|
||||||
import hr from '@hcengineering/hr'
|
|
||||||
|
export { serverHrId } from '@hcengineering/server-hr'
|
||||||
|
|
||||||
export function createModel (builder: Builder): void {
|
export function createModel (builder: Builder): void {
|
||||||
builder.createDoc(serverCore.class.Trigger, core.space.Model, {
|
builder.createDoc(serverCore.class.Trigger, core.space.Model, {
|
||||||
|
@ -20,6 +20,8 @@ import inventory from '@hcengineering/inventory'
|
|||||||
import serverInventory from '@hcengineering/server-inventory'
|
import serverInventory from '@hcengineering/server-inventory'
|
||||||
import serverNotification from '@hcengineering/server-notification'
|
import serverNotification from '@hcengineering/server-notification'
|
||||||
|
|
||||||
|
export { serverInventoryId } from '@hcengineering/server-inventory'
|
||||||
|
|
||||||
export function createModel (builder: Builder): void {
|
export function createModel (builder: Builder): void {
|
||||||
builder.mixin(inventory.class.Product, core.class.Class, serverNotification.mixin.HTMLPresenter, {
|
builder.mixin(inventory.class.Product, core.class.Class, serverNotification.mixin.HTMLPresenter, {
|
||||||
presenter: serverInventory.function.ProductHTMLPresenter
|
presenter: serverInventory.function.ProductHTMLPresenter
|
||||||
|
@ -17,9 +17,11 @@ import { Builder } from '@hcengineering/model'
|
|||||||
|
|
||||||
import core from '@hcengineering/core'
|
import core from '@hcengineering/core'
|
||||||
import lead from '@hcengineering/lead'
|
import lead from '@hcengineering/lead'
|
||||||
import serverNotification from '@hcengineering/server-notification'
|
|
||||||
import serverLead from '@hcengineering/server-lead'
|
|
||||||
import serverCore from '@hcengineering/server-core'
|
import serverCore from '@hcengineering/server-core'
|
||||||
|
import serverLead from '@hcengineering/server-lead'
|
||||||
|
import serverNotification from '@hcengineering/server-notification'
|
||||||
|
|
||||||
|
export { serverLeadId } from '@hcengineering/server-lead'
|
||||||
|
|
||||||
export function createModel (builder: Builder): void {
|
export function createModel (builder: Builder): void {
|
||||||
builder.mixin(lead.class.Lead, core.class.Class, serverNotification.mixin.HTMLPresenter, {
|
builder.mixin(lead.class.Lead, core.class.Class, serverNotification.mixin.HTMLPresenter, {
|
||||||
|
@ -16,11 +16,13 @@
|
|||||||
|
|
||||||
import { Builder, Mixin } from '@hcengineering/model'
|
import { Builder, Mixin } from '@hcengineering/model'
|
||||||
|
|
||||||
import serverCore from '@hcengineering/server-core'
|
|
||||||
import core from '@hcengineering/core'
|
import core from '@hcengineering/core'
|
||||||
import serverNotification, { HTMLPresenter, TextPresenter, Presenter } from '@hcengineering/server-notification'
|
|
||||||
import { Resource } from '@hcengineering/platform'
|
|
||||||
import { TClass } from '@hcengineering/model-core'
|
import { TClass } from '@hcengineering/model-core'
|
||||||
|
import { Resource } from '@hcengineering/platform'
|
||||||
|
import serverCore from '@hcengineering/server-core'
|
||||||
|
import serverNotification, { HTMLPresenter, Presenter, TextPresenter } from '@hcengineering/server-notification'
|
||||||
|
|
||||||
|
export { serverNotificationId } from '@hcengineering/server-notification'
|
||||||
|
|
||||||
@Mixin(serverNotification.mixin.HTMLPresenter, core.class.Class)
|
@Mixin(serverNotification.mixin.HTMLPresenter, core.class.Class)
|
||||||
export class THTMLPresenter extends TClass implements HTMLPresenter {
|
export class THTMLPresenter extends TClass implements HTMLPresenter {
|
||||||
|
@ -25,6 +25,8 @@ import serverCore from '@hcengineering/server-core'
|
|||||||
import chunter from '@hcengineering/model-chunter'
|
import chunter from '@hcengineering/model-chunter'
|
||||||
import recruit from '@hcengineering/model-recruit'
|
import recruit from '@hcengineering/model-recruit'
|
||||||
|
|
||||||
|
export { openAIId } from '@hcengineering/openai/src/plugin'
|
||||||
|
|
||||||
@Model(openai.class.OpenAIConfiguration, core.class.Configuration, DOMAIN_CONFIGURATION)
|
@Model(openai.class.OpenAIConfiguration, core.class.Configuration, DOMAIN_CONFIGURATION)
|
||||||
@UX(getEmbeddedLabel('OpenAI'))
|
@UX(getEmbeddedLabel('OpenAI'))
|
||||||
export class TOpenAIConfiguration extends TConfiguration implements OpenAIConfiguration {
|
export class TOpenAIConfiguration extends TConfiguration implements OpenAIConfiguration {
|
||||||
|
@ -17,9 +17,11 @@ import { Builder } from '@hcengineering/model'
|
|||||||
|
|
||||||
import core from '@hcengineering/core'
|
import core from '@hcengineering/core'
|
||||||
import recruit from '@hcengineering/recruit'
|
import recruit from '@hcengineering/recruit'
|
||||||
|
import serverCore from '@hcengineering/server-core'
|
||||||
import serverNotification from '@hcengineering/server-notification'
|
import serverNotification from '@hcengineering/server-notification'
|
||||||
import serverRecruit from '@hcengineering/server-recruit'
|
import serverRecruit from '@hcengineering/server-recruit'
|
||||||
import serverCore from '@hcengineering/server-core'
|
|
||||||
|
export { serverRecruitId } from '@hcengineering/server-recruit'
|
||||||
|
|
||||||
export function createModel (builder: Builder): void {
|
export function createModel (builder: Builder): void {
|
||||||
builder.mixin(recruit.class.Applicant, core.class.Class, serverNotification.mixin.HTMLPresenter, {
|
builder.mixin(recruit.class.Applicant, core.class.Class, serverNotification.mixin.HTMLPresenter, {
|
||||||
|
@ -19,6 +19,8 @@ import core from '@hcengineering/core'
|
|||||||
import serverCore from '@hcengineering/server-core'
|
import serverCore from '@hcengineering/server-core'
|
||||||
import serverRequest from '@hcengineering/server-request'
|
import serverRequest from '@hcengineering/server-request'
|
||||||
|
|
||||||
|
export { serverRequestId } from '@hcengineering/server-request'
|
||||||
|
|
||||||
export function createModel (builder: Builder): void {
|
export function createModel (builder: Builder): void {
|
||||||
builder.createDoc(serverCore.class.Trigger, core.space.Model, {
|
builder.createDoc(serverCore.class.Trigger, core.space.Model, {
|
||||||
trigger: serverRequest.trigger.OnRequestUpdate
|
trigger: serverRequest.trigger.OnRequestUpdate
|
||||||
|
@ -16,10 +16,12 @@
|
|||||||
|
|
||||||
import { Builder } from '@hcengineering/model'
|
import { Builder } from '@hcengineering/model'
|
||||||
|
|
||||||
import serverCore from '@hcengineering/server-core'
|
|
||||||
import core from '@hcengineering/core'
|
import core from '@hcengineering/core'
|
||||||
|
import serverCore from '@hcengineering/server-core'
|
||||||
import serverSetting from '@hcengineering/server-setting'
|
import serverSetting from '@hcengineering/server-setting'
|
||||||
|
|
||||||
|
export { serverSettingId } from '@hcengineering/server-setting'
|
||||||
|
|
||||||
export function createModel (builder: Builder): void {
|
export function createModel (builder: Builder): void {
|
||||||
builder.createDoc(serverCore.class.Trigger, core.space.Model, {
|
builder.createDoc(serverCore.class.Trigger, core.space.Model, {
|
||||||
trigger: serverSetting.trigger.OnIntegrationDisable
|
trigger: serverSetting.trigger.OnIntegrationDisable
|
||||||
|
@ -19,6 +19,8 @@ import serverCore, { ObjectDDParticipant } from '@hcengineering/server-core'
|
|||||||
import serverTags from '@hcengineering/server-tags'
|
import serverTags from '@hcengineering/server-tags'
|
||||||
import tags from '@hcengineering/tags'
|
import tags from '@hcengineering/tags'
|
||||||
|
|
||||||
|
export { serverTagsId } from '@hcengineering/server-tags'
|
||||||
|
|
||||||
export function createModel (builder: Builder): void {
|
export function createModel (builder: Builder): void {
|
||||||
builder.createDoc(serverCore.class.Trigger, core.space.Model, {
|
builder.createDoc(serverCore.class.Trigger, core.space.Model, {
|
||||||
trigger: serverTags.trigger.onTagReference
|
trigger: serverTags.trigger.onTagReference
|
||||||
|
@ -15,4 +15,6 @@
|
|||||||
|
|
||||||
import { Builder } from '@hcengineering/model'
|
import { Builder } from '@hcengineering/model'
|
||||||
|
|
||||||
|
export { serverTaskId } from '@hcengineering/server-task'
|
||||||
|
|
||||||
export function createModel (builder: Builder): void {}
|
export function createModel (builder: Builder): void {}
|
||||||
|
@ -15,11 +15,13 @@
|
|||||||
|
|
||||||
import { Builder } from '@hcengineering/model'
|
import { Builder } from '@hcengineering/model'
|
||||||
|
|
||||||
|
import contact from '@hcengineering/contact'
|
||||||
import core, { Class, Doc } from '@hcengineering/core'
|
import core, { Class, Doc } from '@hcengineering/core'
|
||||||
import serverCore, { ObjectDDParticipant } from '@hcengineering/server-core'
|
import serverCore, { ObjectDDParticipant } from '@hcengineering/server-core'
|
||||||
import contact from '@hcengineering/contact'
|
|
||||||
import serverTelegram from '@hcengineering/server-telegram'
|
import serverTelegram from '@hcengineering/server-telegram'
|
||||||
|
|
||||||
|
export { serverTelegramId } from '@hcengineering/server-telegram'
|
||||||
|
|
||||||
export function createModel (builder: Builder): void {
|
export function createModel (builder: Builder): void {
|
||||||
builder.mixin<Class<Doc>, ObjectDDParticipant>(
|
builder.mixin<Class<Doc>, ObjectDDParticipant>(
|
||||||
contact.class.Channel,
|
contact.class.Channel,
|
||||||
|
@ -13,12 +13,14 @@
|
|||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
//
|
//
|
||||||
|
|
||||||
import { Builder } from '@hcengineering/model'
|
|
||||||
import core from '@hcengineering/core'
|
import core from '@hcengineering/core'
|
||||||
|
import { Builder } from '@hcengineering/model'
|
||||||
import serverCore from '@hcengineering/server-core'
|
import serverCore from '@hcengineering/server-core'
|
||||||
|
import serverNotification from '@hcengineering/server-notification'
|
||||||
import serverTracker from '@hcengineering/server-tracker'
|
import serverTracker from '@hcengineering/server-tracker'
|
||||||
import tracker from '@hcengineering/tracker'
|
import tracker from '@hcengineering/tracker'
|
||||||
import serverNotification from '@hcengineering/server-notification'
|
|
||||||
|
export { serverTrackerId } from '@hcengineering/server-tracker'
|
||||||
|
|
||||||
export function createModel (builder: Builder): void {
|
export function createModel (builder: Builder): void {
|
||||||
builder.mixin(tracker.class.Issue, core.class.Class, serverNotification.mixin.HTMLPresenter, {
|
builder.mixin(tracker.class.Issue, core.class.Class, serverNotification.mixin.HTMLPresenter, {
|
||||||
|
@ -20,6 +20,8 @@ import { getEmbeddedLabel } from '@hcengineering/platform'
|
|||||||
import core, { DOMAIN_CONFIGURATION } from '@hcengineering/core'
|
import core, { DOMAIN_CONFIGURATION } from '@hcengineering/core'
|
||||||
import translate, { TranslateConfiguration } from '@hcengineering/translate/src/plugin'
|
import translate, { TranslateConfiguration } from '@hcengineering/translate/src/plugin'
|
||||||
|
|
||||||
|
export { translateId } from '@hcengineering/translate/src/plugin'
|
||||||
|
|
||||||
@Model(translate.class.TranslateConfiguration, core.class.Configuration, DOMAIN_CONFIGURATION)
|
@Model(translate.class.TranslateConfiguration, core.class.Configuration, DOMAIN_CONFIGURATION)
|
||||||
@UX(getEmbeddedLabel('Retranslation'))
|
@UX(getEmbeddedLabel('Retranslation'))
|
||||||
export class TTranslateConfiguration extends TConfiguration implements TranslateConfiguration {
|
export class TTranslateConfiguration extends TConfiguration implements TranslateConfiguration {
|
||||||
|
@ -13,11 +13,13 @@
|
|||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
//
|
//
|
||||||
|
|
||||||
import { Builder } from '@hcengineering/model'
|
|
||||||
import core from '@hcengineering/core'
|
import core from '@hcengineering/core'
|
||||||
|
import { Builder } from '@hcengineering/model'
|
||||||
import serverCore from '@hcengineering/server-core'
|
import serverCore from '@hcengineering/server-core'
|
||||||
import serverView from '@hcengineering/server-view'
|
import serverView from '@hcengineering/server-view'
|
||||||
|
|
||||||
|
export { serverViewId } from '@hcengineering/server-view'
|
||||||
|
|
||||||
export function createModel (builder: Builder): void {
|
export function createModel (builder: Builder): void {
|
||||||
builder.createDoc(serverCore.class.Trigger, core.space.Model, {
|
builder.createDoc(serverCore.class.Trigger, core.space.Model, {
|
||||||
trigger: serverView.trigger.OnCustomAttributeRemove
|
trigger: serverView.trigger.OnCustomAttributeRemove
|
||||||
|
@ -14,10 +14,12 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
import activity from '@hcengineering/activity'
|
import activity from '@hcengineering/activity'
|
||||||
|
import contact from '@hcengineering/contact'
|
||||||
import { Account, Domain, DOMAIN_MODEL, Ref } from '@hcengineering/core'
|
import { Account, Domain, DOMAIN_MODEL, Ref } from '@hcengineering/core'
|
||||||
import { Builder, Mixin, Model } from '@hcengineering/model'
|
import { Builder, Mixin, Model } from '@hcengineering/model'
|
||||||
import core, { TClass, TConfiguration, TDoc } from '@hcengineering/model-core'
|
import core, { TClass, TConfiguration, TDoc } from '@hcengineering/model-core'
|
||||||
import view, { createAction } from '@hcengineering/model-view'
|
import view, { createAction } from '@hcengineering/model-view'
|
||||||
|
import notification from '@hcengineering/notification'
|
||||||
import type { Asset, IntlString } from '@hcengineering/platform'
|
import type { Asset, IntlString } from '@hcengineering/platform'
|
||||||
import {
|
import {
|
||||||
Editable,
|
Editable,
|
||||||
@ -30,14 +32,16 @@ import {
|
|||||||
UserMixin
|
UserMixin
|
||||||
} from '@hcengineering/setting'
|
} from '@hcengineering/setting'
|
||||||
import task from '@hcengineering/task'
|
import task from '@hcengineering/task'
|
||||||
import setting from './plugin'
|
|
||||||
import templates from '@hcengineering/templates'
|
import templates from '@hcengineering/templates'
|
||||||
import contact from '@hcengineering/contact'
|
import setting from './plugin'
|
||||||
import notification from '@hcengineering/notification'
|
|
||||||
|
|
||||||
import workbench from '@hcengineering/model-workbench'
|
import workbench from '@hcengineering/model-workbench'
|
||||||
import { AnyComponent } from '@hcengineering/ui'
|
import { AnyComponent } from '@hcengineering/ui'
|
||||||
|
|
||||||
|
export { settingId } from '@hcengineering/setting'
|
||||||
|
export { default } from './plugin'
|
||||||
|
export { settingOperation } from './migration'
|
||||||
|
|
||||||
export const DOMAIN_SETTING = 'setting' as Domain
|
export const DOMAIN_SETTING = 'setting' as Domain
|
||||||
|
|
||||||
@Model(setting.class.Integration, core.class.Doc, DOMAIN_SETTING)
|
@Model(setting.class.Integration, core.class.Doc, DOMAIN_SETTING)
|
||||||
@ -180,6 +184,19 @@ export function createModel (builder: Builder): void {
|
|||||||
},
|
},
|
||||||
setting.ids.Owners
|
setting.ids.Owners
|
||||||
)
|
)
|
||||||
|
builder.createDoc(
|
||||||
|
setting.class.WorkspaceSettingCategory,
|
||||||
|
core.space.Model,
|
||||||
|
{
|
||||||
|
name: 'configuration',
|
||||||
|
label: setting.string.Configure,
|
||||||
|
icon: setting.icon.Setting,
|
||||||
|
component: setting.component.Configure,
|
||||||
|
order: 1001,
|
||||||
|
secured: true
|
||||||
|
},
|
||||||
|
setting.ids.Configure
|
||||||
|
)
|
||||||
builder.createDoc(
|
builder.createDoc(
|
||||||
setting.class.WorkspaceSettingCategory,
|
setting.class.WorkspaceSettingCategory,
|
||||||
core.space.Model,
|
core.space.Model,
|
||||||
@ -466,5 +483,3 @@ export function createModel (builder: Builder): void {
|
|||||||
setting.templateField.OwnerPosition
|
setting.templateField.OwnerPosition
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export { settingOperation } from './migration'
|
|
||||||
|
@ -28,7 +28,8 @@ export default mergeIds(settingId, setting, {
|
|||||||
},
|
},
|
||||||
ids: {
|
ids: {
|
||||||
TxIntegrationDisable: '' as Ref<TxViewlet>,
|
TxIntegrationDisable: '' as Ref<TxViewlet>,
|
||||||
EnumSetting: '' as Ref<Doc>
|
EnumSetting: '' as Ref<Doc>,
|
||||||
|
Configure: '' as Ref<Doc>
|
||||||
},
|
},
|
||||||
component: {
|
component: {
|
||||||
EnumSetting: '' as AnyComponent,
|
EnumSetting: '' as AnyComponent,
|
||||||
@ -43,7 +44,8 @@ export default mergeIds(settingId, setting, {
|
|||||||
CreateMixin: '' as AnyComponent,
|
CreateMixin: '' as AnyComponent,
|
||||||
InviteSetting: '' as AnyComponent,
|
InviteSetting: '' as AnyComponent,
|
||||||
ArrayEditor: '' as AnyComponent,
|
ArrayEditor: '' as AnyComponent,
|
||||||
IntegrationPanel: '' as AnyComponent
|
IntegrationPanel: '' as AnyComponent,
|
||||||
|
Configure: '' as AnyComponent
|
||||||
},
|
},
|
||||||
category: {
|
category: {
|
||||||
Settings: '' as Ref<ActionCategory>
|
Settings: '' as Ref<ActionCategory>
|
||||||
|
@ -27,7 +27,7 @@ import type {
|
|||||||
} from '@hcengineering/tags'
|
} from '@hcengineering/tags'
|
||||||
import tags from './plugin'
|
import tags from './plugin'
|
||||||
|
|
||||||
export { TagCategory, TagElement, TagReference } from '@hcengineering/tags'
|
export { TagCategory, TagElement, TagReference, tagsId } from '@hcengineering/tags'
|
||||||
export { tagsOperation } from './migration'
|
export { tagsOperation } from './migration'
|
||||||
export { tags as default }
|
export { tags as default }
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ import {
|
|||||||
UX
|
UX
|
||||||
} from '@hcengineering/model'
|
} from '@hcengineering/model'
|
||||||
import core, { TAttachedDoc, TClass, TDoc, TSpace, TStatus } from '@hcengineering/model-core'
|
import core, { TAttachedDoc, TClass, TDoc, TSpace, TStatus } from '@hcengineering/model-core'
|
||||||
import view, { actionTemplates as viewTemplates, createAction, template } from '@hcengineering/model-view'
|
import view, { createAction, template, actionTemplates as viewTemplates } from '@hcengineering/model-view'
|
||||||
import notification from '@hcengineering/notification'
|
import notification from '@hcengineering/notification'
|
||||||
import { IntlString } from '@hcengineering/platform'
|
import { IntlString } from '@hcengineering/platform'
|
||||||
import tags from '@hcengineering/tags'
|
import tags from '@hcengineering/tags'
|
||||||
@ -58,6 +58,7 @@ import { AnyComponent } from '@hcengineering/ui'
|
|||||||
import { ViewAction } from '@hcengineering/view'
|
import { ViewAction } from '@hcengineering/view'
|
||||||
import task from './plugin'
|
import task from './plugin'
|
||||||
|
|
||||||
|
export { taskId } from '@hcengineering/task'
|
||||||
export { createKanbanTemplate, createSequence, taskOperation } from './migration'
|
export { createKanbanTemplate, createSequence, taskOperation } from './migration'
|
||||||
export { default } from './plugin'
|
export { default } from './plugin'
|
||||||
|
|
||||||
|
@ -39,8 +39,12 @@ import type {
|
|||||||
TelegramMessage
|
TelegramMessage
|
||||||
} from '@hcengineering/telegram'
|
} from '@hcengineering/telegram'
|
||||||
import templates from '@hcengineering/templates'
|
import templates from '@hcengineering/templates'
|
||||||
import telegram from './plugin'
|
|
||||||
import view from '@hcengineering/view'
|
import view from '@hcengineering/view'
|
||||||
|
import telegram from './plugin'
|
||||||
|
|
||||||
|
export { telegramId } from '@hcengineering/telegram'
|
||||||
|
export { telegramOperation } from './migration'
|
||||||
|
export { default } from './plugin'
|
||||||
|
|
||||||
export const DOMAIN_TELEGRAM = 'telegram' as Domain
|
export const DOMAIN_TELEGRAM = 'telegram' as Domain
|
||||||
|
|
||||||
@ -175,5 +179,3 @@ export function createModel (builder: Builder): void {
|
|||||||
parentPropagate: false
|
parentPropagate: false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export { telegramOperation } from './migration'
|
|
||||||
|
@ -31,7 +31,9 @@ export default mergeIds(telegramId, telegram, {
|
|||||||
Messages: '' as IntlString,
|
Messages: '' as IntlString,
|
||||||
Telegram: '' as IntlString,
|
Telegram: '' as IntlString,
|
||||||
TelegramIntegrationDesc: '' as IntlString,
|
TelegramIntegrationDesc: '' as IntlString,
|
||||||
Status: '' as IntlString
|
Status: '' as IntlString,
|
||||||
|
ConfigLabel: '' as IntlString,
|
||||||
|
ConfigDescription: '' as IntlString
|
||||||
},
|
},
|
||||||
ids: {
|
ids: {
|
||||||
TxMessage: '' as Ref<TxViewlet>,
|
TxMessage: '' as Ref<TxViewlet>,
|
||||||
|
@ -18,6 +18,7 @@ import { Domain, DOMAIN_MODEL, IndexKind, Ref } from '@hcengineering/core'
|
|||||||
import { Builder, Index, Model, Prop, TypeString, UX } from '@hcengineering/model'
|
import { Builder, Index, Model, Prop, TypeString, UX } from '@hcengineering/model'
|
||||||
import core, { TDoc, TSpace } from '@hcengineering/model-core'
|
import core, { TDoc, TSpace } from '@hcengineering/model-core'
|
||||||
import textEditor from '@hcengineering/model-text-editor'
|
import textEditor from '@hcengineering/model-text-editor'
|
||||||
|
import tracker from '@hcengineering/model-tracker'
|
||||||
import view, { createAction } from '@hcengineering/model-view'
|
import view, { createAction } from '@hcengineering/model-view'
|
||||||
import { IntlString, Resource } from '@hcengineering/platform'
|
import { IntlString, Resource } from '@hcengineering/platform'
|
||||||
import setting from '@hcengineering/setting'
|
import setting from '@hcengineering/setting'
|
||||||
@ -29,7 +30,9 @@ import type {
|
|||||||
TemplateFieldFunc
|
TemplateFieldFunc
|
||||||
} from '@hcengineering/templates'
|
} from '@hcengineering/templates'
|
||||||
import templates from './plugin'
|
import templates from './plugin'
|
||||||
import tracker from '@hcengineering/model-tracker'
|
|
||||||
|
export { templatesId } from '@hcengineering/templates'
|
||||||
|
export { templatesOperation } from './migration'
|
||||||
|
|
||||||
export const DOMAIN_TEMPLATES = 'templates' as Domain
|
export const DOMAIN_TEMPLATES = 'templates' as Domain
|
||||||
|
|
||||||
@ -165,5 +168,3 @@ export function createModel (builder: Builder): void {
|
|||||||
actions: [view.action.Open, tracker.action.NewRelatedIssue]
|
actions: [view.action.Open, tracker.action.NewRelatedIssue]
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export { templatesOperation } from './migration'
|
|
||||||
|
@ -21,6 +21,7 @@ import type { Asset, IntlString, Resource } from '@hcengineering/platform'
|
|||||||
import { RefInputAction, RefInputActionItem } from '@hcengineering/text-editor/src/types'
|
import { RefInputAction, RefInputActionItem } from '@hcengineering/text-editor/src/types'
|
||||||
import textEditor from './plugin'
|
import textEditor from './plugin'
|
||||||
|
|
||||||
|
export { textEditorId } from '@hcengineering/text-editor/src/plugin'
|
||||||
export { default } from './plugin'
|
export { default } from './plugin'
|
||||||
export { RefInputAction, RefInputActionItem }
|
export { RefInputAction, RefInputActionItem }
|
||||||
|
|
||||||
|
@ -13,12 +13,13 @@
|
|||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
import activity from '@hcengineering/activity'
|
||||||
import type { Employee, EmployeeAccount } from '@hcengineering/contact'
|
import type { Employee, EmployeeAccount } from '@hcengineering/contact'
|
||||||
import contact from '@hcengineering/contact'
|
import contact from '@hcengineering/contact'
|
||||||
import {
|
import {
|
||||||
|
DOMAIN_MODEL,
|
||||||
DateRangeMode,
|
DateRangeMode,
|
||||||
Domain,
|
Domain,
|
||||||
DOMAIN_MODEL,
|
|
||||||
FindOptions,
|
FindOptions,
|
||||||
IndexKind,
|
IndexKind,
|
||||||
Markup,
|
Markup,
|
||||||
@ -46,7 +47,6 @@ import {
|
|||||||
UX
|
UX
|
||||||
} from '@hcengineering/model'
|
} from '@hcengineering/model'
|
||||||
import attachment from '@hcengineering/model-attachment'
|
import attachment from '@hcengineering/model-attachment'
|
||||||
import activity from '@hcengineering/activity'
|
|
||||||
import chunter from '@hcengineering/model-chunter'
|
import chunter from '@hcengineering/model-chunter'
|
||||||
import core, { DOMAIN_SPACE, TAttachedDoc, TDoc, TSpace, TStatus, TType } from '@hcengineering/model-core'
|
import core, { DOMAIN_SPACE, TAttachedDoc, TDoc, TSpace, TStatus, TType } from '@hcengineering/model-core'
|
||||||
import view, { actionTemplates, classPresenter, createAction } from '@hcengineering/model-view'
|
import view, { actionTemplates, classPresenter, createAction } from '@hcengineering/model-view'
|
||||||
@ -81,6 +81,7 @@ import tracker from './plugin'
|
|||||||
import presentation from '@hcengineering/model-presentation'
|
import presentation from '@hcengineering/model-presentation'
|
||||||
import { defaultPriorities, issuePriorities } from '@hcengineering/tracker-resources/src/types'
|
import { defaultPriorities, issuePriorities } from '@hcengineering/tracker-resources/src/types'
|
||||||
|
|
||||||
|
export { trackerId } from '@hcengineering/tracker'
|
||||||
export { trackerOperation } from './migration'
|
export { trackerOperation } from './migration'
|
||||||
export { default } from './plugin'
|
export { default } from './plugin'
|
||||||
|
|
||||||
|
@ -36,7 +36,9 @@ export default mergeIds(trackerId, tracker, {
|
|||||||
GotoTrackerApplication: '' as IntlString,
|
GotoTrackerApplication: '' as IntlString,
|
||||||
SearchIssue: '' as IntlString,
|
SearchIssue: '' as IntlString,
|
||||||
Parent: '' as IntlString,
|
Parent: '' as IntlString,
|
||||||
CreatedOn: '' as IntlString
|
CreatedOn: '' as IntlString,
|
||||||
|
ConfigLabel: '' as IntlString,
|
||||||
|
ConfigDescription: '' as IntlString
|
||||||
},
|
},
|
||||||
activity: {
|
activity: {
|
||||||
TxIssueCreated: '' as AnyComponent,
|
TxIssueCreated: '' as AnyComponent,
|
||||||
|
@ -24,6 +24,7 @@ import type { AnyComponent, Location } from '@hcengineering/ui'
|
|||||||
import type {
|
import type {
|
||||||
Action,
|
Action,
|
||||||
ActionCategory,
|
ActionCategory,
|
||||||
|
AllValuesFunc,
|
||||||
ArrayEditor,
|
ArrayEditor,
|
||||||
AttributeEditor,
|
AttributeEditor,
|
||||||
AttributeFilter,
|
AttributeFilter,
|
||||||
@ -34,19 +35,22 @@ import type {
|
|||||||
CollectionEditor,
|
CollectionEditor,
|
||||||
CollectionPresenter,
|
CollectionPresenter,
|
||||||
Filter,
|
Filter,
|
||||||
FilteredView,
|
|
||||||
FilterMode,
|
FilterMode,
|
||||||
|
FilteredView,
|
||||||
|
GetAllValuesFunc,
|
||||||
IgnoreActions,
|
IgnoreActions,
|
||||||
InlineAttributEditor,
|
InlineAttributEditor,
|
||||||
KeyBinding,
|
KeyBinding,
|
||||||
KeyFilter,
|
KeyFilter,
|
||||||
LinkPresenter,
|
LinkPresenter,
|
||||||
|
LinkProvider,
|
||||||
ListHeaderExtra,
|
ListHeaderExtra,
|
||||||
ListItemPresenter,
|
ListItemPresenter,
|
||||||
ObjectEditor,
|
ObjectEditor,
|
||||||
ObjectEditorHeader,
|
|
||||||
ObjectEditorFooter,
|
ObjectEditorFooter,
|
||||||
|
ObjectEditorHeader,
|
||||||
ObjectFactory,
|
ObjectFactory,
|
||||||
|
ObjectPanel,
|
||||||
ObjectPresenter,
|
ObjectPresenter,
|
||||||
ObjectTitle,
|
ObjectTitle,
|
||||||
ObjectValidator,
|
ObjectValidator,
|
||||||
@ -57,18 +61,15 @@ import type {
|
|||||||
ViewAction,
|
ViewAction,
|
||||||
ViewActionInput,
|
ViewActionInput,
|
||||||
ViewContext,
|
ViewContext,
|
||||||
|
ViewOptions,
|
||||||
|
ViewOptionsModel,
|
||||||
Viewlet,
|
Viewlet,
|
||||||
ViewletDescriptor,
|
ViewletDescriptor,
|
||||||
ViewletPreference,
|
ViewletPreference
|
||||||
ViewOptionsModel,
|
|
||||||
ViewOptions,
|
|
||||||
AllValuesFunc,
|
|
||||||
GetAllValuesFunc,
|
|
||||||
LinkProvider,
|
|
||||||
ObjectPanel
|
|
||||||
} from '@hcengineering/view'
|
} from '@hcengineering/view'
|
||||||
import view from './plugin'
|
import view from './plugin'
|
||||||
|
|
||||||
|
export { viewId } from '@hcengineering/view'
|
||||||
export { viewOperation } from './migration'
|
export { viewOperation } from './migration'
|
||||||
export { ViewAction, Viewlet }
|
export { ViewAction, Viewlet }
|
||||||
|
|
||||||
|
@ -13,17 +13,18 @@
|
|||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
//
|
//
|
||||||
|
|
||||||
import type { IntlString, Asset } from '@hcengineering/platform'
|
|
||||||
import { Class, DOMAIN_MODEL, Ref, Space } from '@hcengineering/core'
|
import { Class, DOMAIN_MODEL, Ref, Space } from '@hcengineering/core'
|
||||||
import { Model, Mixin, Builder, UX, Prop, TypeRef } from '@hcengineering/model'
|
import { Builder, Mixin, Model, Prop, TypeRef, UX } from '@hcengineering/model'
|
||||||
import type { Application, SpaceView, ViewConfiguration, HiddenApplication } from '@hcengineering/workbench'
|
|
||||||
import view, { KeyBinding } from '@hcengineering/view'
|
|
||||||
import { createAction } from '@hcengineering/model-view'
|
|
||||||
import preference, { TPreference } from '@hcengineering/model-preference'
|
import preference, { TPreference } from '@hcengineering/model-preference'
|
||||||
|
import { createAction } from '@hcengineering/model-view'
|
||||||
|
import type { Asset, IntlString } from '@hcengineering/platform'
|
||||||
|
import view, { KeyBinding } from '@hcengineering/view'
|
||||||
|
import type { Application, HiddenApplication, SpaceView, ViewConfiguration } from '@hcengineering/workbench'
|
||||||
|
|
||||||
import core, { TDoc, TClass } from '@hcengineering/model-core'
|
import core, { TClass, TDoc } from '@hcengineering/model-core'
|
||||||
import workbench from './plugin'
|
import workbench from './plugin'
|
||||||
|
|
||||||
|
export { workbenchId } from '@hcengineering/workbench'
|
||||||
export { Application }
|
export { Application }
|
||||||
|
|
||||||
@Model(workbench.class.Application, core.class.Doc, DOMAIN_MODEL)
|
@Model(workbench.class.Application, core.class.Doc, DOMAIN_MODEL)
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
//
|
//
|
||||||
import { Plugin, IntlString } from '@hcengineering/platform'
|
import { Plugin, IntlString } from '@hcengineering/platform'
|
||||||
import type { Class, Doc, Domain, Ref } from '../classes'
|
import type { Class, Data, Doc, Domain, PluginConfiguration, Ref } from '../classes'
|
||||||
import { Space, ClassifierKind, DOMAIN_MODEL } from '../classes'
|
import { Space, ClassifierKind, DOMAIN_MODEL } from '../classes'
|
||||||
import { createClient, ClientConnection } from '../client'
|
import { createClient, ClientConnection } from '../client'
|
||||||
import core from '../component'
|
import core from '../component'
|
||||||
@ -118,9 +118,11 @@ describe('client', () => {
|
|||||||
const spyCreate = jest.spyOn(TxProcessor, 'createDoc2Doc')
|
const spyCreate = jest.spyOn(TxProcessor, 'createDoc2Doc')
|
||||||
const spyUpdate = jest.spyOn(TxProcessor, 'updateDoc2Doc')
|
const spyUpdate = jest.spyOn(TxProcessor, 'updateDoc2Doc')
|
||||||
|
|
||||||
const pluginData1 = {
|
const pluginData1: Data<PluginConfiguration> = {
|
||||||
pluginId: 'testPlugin1',
|
pluginId: 'testPlugin1' as Plugin,
|
||||||
transactions: []
|
transactions: [],
|
||||||
|
configurable: true,
|
||||||
|
enabled: true
|
||||||
}
|
}
|
||||||
const txCreateDoc1 = txFactory.createTxCreateDoc(core.class.PluginConfiguration, core.space.Model, pluginData1)
|
const txCreateDoc1 = txFactory.createTxCreateDoc(core.class.PluginConfiguration, core.space.Model, pluginData1)
|
||||||
txes.push(txCreateDoc1)
|
txes.push(txCreateDoc1)
|
||||||
@ -134,8 +136,10 @@ describe('client', () => {
|
|||||||
await client1.close()
|
await client1.close()
|
||||||
|
|
||||||
const pluginData2 = {
|
const pluginData2 = {
|
||||||
pluginId: 'testPlugin2',
|
pluginId: 'testPlugin2' as Plugin,
|
||||||
transactions: []
|
transactions: [],
|
||||||
|
configurable: true,
|
||||||
|
enabled: true
|
||||||
}
|
}
|
||||||
const txCreateDoc2 = txFactory.createTxCreateDoc(core.class.PluginConfiguration, core.space.Model, pluginData2)
|
const txCreateDoc2 = txFactory.createTxCreateDoc(core.class.PluginConfiguration, core.space.Model, pluginData2)
|
||||||
txes.push(txCreateDoc2)
|
txes.push(txCreateDoc2)
|
||||||
@ -150,8 +154,10 @@ describe('client', () => {
|
|||||||
await client2.close()
|
await client2.close()
|
||||||
|
|
||||||
const pluginData3 = {
|
const pluginData3 = {
|
||||||
pluginId: 'testPlugin3',
|
pluginId: 'testPlugin3' as Plugin,
|
||||||
transactions: [txCreateDoc1._id]
|
transactions: [txCreateDoc1._id],
|
||||||
|
configurable: true,
|
||||||
|
enabled: true
|
||||||
}
|
}
|
||||||
const txUpdateDoc = txFactory.createTxUpdateDoc(
|
const txUpdateDoc = txFactory.createTxUpdateDoc(
|
||||||
core.class.PluginConfiguration,
|
core.class.PluginConfiguration,
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
//
|
//
|
||||||
|
|
||||||
import type { Asset, IntlString } from '@hcengineering/platform'
|
import type { Asset, IntlString, Plugin } from '@hcengineering/platform'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @public
|
* @public
|
||||||
@ -172,8 +172,19 @@ export interface Class<T extends Obj> extends Classifier {
|
|||||||
* Define a set of plugin to model document bindings.
|
* Define a set of plugin to model document bindings.
|
||||||
*/
|
*/
|
||||||
export interface PluginConfiguration extends Doc {
|
export interface PluginConfiguration extends Doc {
|
||||||
pluginId: string
|
pluginId: Plugin
|
||||||
transactions: Ref<Doc>[]
|
transactions: Ref<Doc>[]
|
||||||
|
|
||||||
|
label?: IntlString
|
||||||
|
icon?: Asset
|
||||||
|
description?: IntlString
|
||||||
|
enabled: boolean
|
||||||
|
|
||||||
|
// If specified, will allow user to enable/disable item.
|
||||||
|
configurable: boolean
|
||||||
|
|
||||||
|
// If defined, will only remove classes in list.
|
||||||
|
classFilter?: Ref<Class<Obj>>[]
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -272,10 +272,12 @@ async function loadModel (
|
|||||||
|
|
||||||
atxes.forEach((tx) => (tx.modifiedBy === core.account.System && !isEmployeeAccount(tx) ? systemTx : userTx).push(tx))
|
atxes.forEach((tx) => (tx.modifiedBy === core.account.System && !isEmployeeAccount(tx) ? systemTx : userTx).push(tx))
|
||||||
|
|
||||||
if (allowedPlugins !== undefined) {
|
if (allowedPlugins != null) {
|
||||||
fillConfiguration(systemTx, configs)
|
fillConfiguration(systemTx, configs)
|
||||||
const excludedPlugins = Array.from(configs.values()).filter((it) => !allowedPlugins.includes(it.pluginId as Plugin))
|
fillConfiguration(userTx, configs)
|
||||||
|
const excludedPlugins = Array.from(configs.values()).filter(
|
||||||
|
(it) => !it.enabled || !allowedPlugins.includes(it.pluginId)
|
||||||
|
)
|
||||||
systemTx = pluginFilterTx(excludedPlugins, configs, systemTx)
|
systemTx = pluginFilterTx(excludedPlugins, configs, systemTx)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -331,7 +333,22 @@ function pluginFilterTx (
|
|||||||
if (a.pluginId === c.pluginId) {
|
if (a.pluginId === c.pluginId) {
|
||||||
const excluded = new Set<Ref<Tx>>()
|
const excluded = new Set<Ref<Tx>>()
|
||||||
for (const id of c.transactions) {
|
for (const id of c.transactions) {
|
||||||
excluded.add(id as Ref<Tx>)
|
if (c.classFilter !== undefined) {
|
||||||
|
const filter = new Set(c.classFilter)
|
||||||
|
const tx = systemTx.find((it) => it._id === id)
|
||||||
|
if (
|
||||||
|
tx?._class === core.class.TxCreateDoc ||
|
||||||
|
tx?._class === core.class.TxUpdateDoc ||
|
||||||
|
tx?._class === core.class.TxRemoveDoc
|
||||||
|
) {
|
||||||
|
const cud = tx as TxCUD<Doc>
|
||||||
|
if (filter.has(cud.objectClass)) {
|
||||||
|
excluded.add(id as Ref<Tx>)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
excluded.add(id as Ref<Tx>)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const exclude = systemTx.filter((t) => excluded.has(t._id))
|
const exclude = systemTx.filter((t) => excluded.has(t._id))
|
||||||
console.log('exclude plugin', c.pluginId, exclude.length)
|
console.log('exclude plugin', c.pluginId, exclude.length)
|
||||||
|
@ -32,8 +32,8 @@ import type {
|
|||||||
FullTextData,
|
FullTextData,
|
||||||
FullTextSearchContext,
|
FullTextSearchContext,
|
||||||
Hyperlink,
|
Hyperlink,
|
||||||
IndexingConfiguration,
|
|
||||||
IndexStageState,
|
IndexStageState,
|
||||||
|
IndexingConfiguration,
|
||||||
Interface,
|
Interface,
|
||||||
Obj,
|
Obj,
|
||||||
PluginConfiguration,
|
PluginConfiguration,
|
||||||
@ -49,9 +49,9 @@ import { Status, StatusCategory } from './status'
|
|||||||
import type {
|
import type {
|
||||||
Tx,
|
Tx,
|
||||||
TxApplyIf,
|
TxApplyIf,
|
||||||
|
TxCUD,
|
||||||
TxCollectionCUD,
|
TxCollectionCUD,
|
||||||
TxCreateDoc,
|
TxCreateDoc,
|
||||||
TxCUD,
|
|
||||||
TxMixin,
|
TxMixin,
|
||||||
TxModelUpgrade,
|
TxModelUpgrade,
|
||||||
TxRemoveDoc,
|
TxRemoveDoc,
|
||||||
@ -133,7 +133,8 @@ export default plugin(coreId, {
|
|||||||
Configuration: '' as Ref<Space>
|
Configuration: '' as Ref<Space>
|
||||||
},
|
},
|
||||||
account: {
|
account: {
|
||||||
System: '' as Ref<Account>
|
System: '' as Ref<Account>,
|
||||||
|
ConfigUser: '' as Ref<Account>
|
||||||
},
|
},
|
||||||
status: {
|
status: {
|
||||||
ObjectNotFound: '' as StatusCode<{ _id: Ref<Doc> }>,
|
ObjectNotFound: '' as StatusCode<{ _id: Ref<Doc> }>,
|
||||||
|
@ -74,11 +74,18 @@ export class Hierarchy {
|
|||||||
return typeof (d as any)[mixin] === 'object'
|
return typeof (d as any)[mixin] === 'object'
|
||||||
}
|
}
|
||||||
|
|
||||||
classHierarchyMixin<D extends Doc, M extends D>(_class: Ref<Class<D>>, mixin: Ref<Mixin<M>>): M | undefined {
|
classHierarchyMixin<D extends Doc, M extends D>(
|
||||||
|
_class: Ref<Class<D>>,
|
||||||
|
mixin: Ref<Mixin<M>>,
|
||||||
|
filter?: (value: M) => boolean
|
||||||
|
): M | undefined {
|
||||||
let clazz = this.getClass(_class)
|
let clazz = this.getClass(_class)
|
||||||
while (true) {
|
while (true) {
|
||||||
if (this.hasMixin(clazz, mixin)) {
|
if (this.hasMixin(clazz, mixin)) {
|
||||||
return this.as(clazz, mixin) as any as M
|
const m = this.as(clazz, mixin) as any as M
|
||||||
|
if (m !== undefined && (filter?.(m) ?? true)) {
|
||||||
|
return m
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (clazz.extends === undefined) return
|
if (clazz.extends === undefined) return
|
||||||
clazz = this.getClass(clazz.extends)
|
clazz = this.getClass(clazz.extends)
|
||||||
|
@ -14,10 +14,10 @@
|
|||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
//
|
//
|
||||||
|
|
||||||
import type { Resource, Plugin } from './platform'
|
|
||||||
import { Status, Severity, PlatformError } from './status'
|
|
||||||
import { _parseId } from './ident'
|
|
||||||
import { monitor } from './event'
|
import { monitor } from './event'
|
||||||
|
import { _parseId } from './ident'
|
||||||
|
import type { Plugin, Resource } from './platform'
|
||||||
|
import { PlatformError, Severity, Status } from './status'
|
||||||
|
|
||||||
import platform from './platform'
|
import platform from './platform'
|
||||||
|
|
||||||
@ -105,3 +105,11 @@ export async function getResource<T> (resource: Resource<T>): Promise<T> {
|
|||||||
cachedResource.set(resource, value)
|
cachedResource.set(resource, value)
|
||||||
return value
|
return value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
export function getResourcePlugin<T> (resource: Resource<T>): Plugin {
|
||||||
|
const info = _parseId(resource)
|
||||||
|
return info.component
|
||||||
|
}
|
||||||
|
65
packages/presentation/src/configuration.ts
Normal file
65
packages/presentation/src/configuration.ts
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
//
|
||||||
|
// 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 core, { PluginConfiguration, SortingOrder } from '@hcengineering/core'
|
||||||
|
import { Plugin, Resource, getResourcePlugin } from '@hcengineering/platform'
|
||||||
|
import { writable } from 'svelte/store'
|
||||||
|
import { createQuery } from '.'
|
||||||
|
import { statusStore } from './status'
|
||||||
|
export { statusStore }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
export class ConfigurationManager {
|
||||||
|
constructor (readonly list: PluginConfiguration[], readonly configuration: Map<Plugin, PluginConfiguration>) {}
|
||||||
|
|
||||||
|
has (plugin: Plugin): boolean {
|
||||||
|
return this.configuration.get(plugin)?.enabled !== false
|
||||||
|
}
|
||||||
|
|
||||||
|
hasResource<T>(resource?: Resource<T> | null): boolean {
|
||||||
|
if (resource == null) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return this.has(getResourcePlugin(resource))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Issue status live query
|
||||||
|
export let configuration = new ConfigurationManager([], new Map())
|
||||||
|
export const configurationStore = writable<ConfigurationManager>(configuration)
|
||||||
|
|
||||||
|
const configQuery = createQuery(true)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
export function hasResource<T> (resource?: Resource<T>): boolean {
|
||||||
|
return configuration.hasResource(resource)
|
||||||
|
}
|
||||||
|
|
||||||
|
configQuery.query(
|
||||||
|
core.class.PluginConfiguration,
|
||||||
|
{},
|
||||||
|
(res) => {
|
||||||
|
if (configuration.list.length > 0) {
|
||||||
|
// Configuration
|
||||||
|
location.reload()
|
||||||
|
}
|
||||||
|
configuration = new ConfigurationManager(res, new Map(res.map((it) => [it.pluginId, it])))
|
||||||
|
configurationStore.set(configuration)
|
||||||
|
},
|
||||||
|
{ sort: { label: SortingOrder.Ascending } }
|
||||||
|
)
|
@ -43,6 +43,7 @@ export * from './types'
|
|||||||
export * from './utils'
|
export * from './utils'
|
||||||
export * from './drafts'
|
export * from './drafts'
|
||||||
export { presentationId }
|
export { presentationId }
|
||||||
|
export * from './configuration'
|
||||||
|
|
||||||
addStringsLoader(presentationId, async (lang: string) => {
|
addStringsLoader(presentationId, async (lang: string) => {
|
||||||
return await import(`../lang/${lang}.json`)
|
return await import(`../lang/${lang}.json`)
|
||||||
|
@ -127,7 +127,7 @@ export async function setClient (_client: Client): Promise<void> {
|
|||||||
|
|
||||||
txListeners.forEach((it) => it(tx))
|
txListeners.forEach((it) => it(tx))
|
||||||
}
|
}
|
||||||
if (needRefresh) {
|
if (needRefresh || globalQueries.length > 0) {
|
||||||
await refreshClient()
|
await refreshClient()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -187,6 +187,15 @@ export class LiveQuery {
|
|||||||
callback: (result: FindResult<T>) => void,
|
callback: (result: FindResult<T>) => void,
|
||||||
options: FindOptions<T> | undefined
|
options: FindOptions<T> | undefined
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
|
if (pipeline === undefined) {
|
||||||
|
// We need remember values to perform refresh.
|
||||||
|
this.oldCallback = callback
|
||||||
|
this.oldClass = _class
|
||||||
|
this.oldOptions = options
|
||||||
|
this.oldQuery = query
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
const id = ++this.reqId
|
const id = ++this.reqId
|
||||||
const piplineQuery = await pipeline.subscribe(_class, query, options, () => {
|
const piplineQuery = await pipeline.subscribe(_class, query, options, () => {
|
||||||
// Refresh query if pipeline decide it is required.
|
// Refresh query if pipeline decide it is required.
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
import activity, { ActivityFilter, DisplayTx } from '@hcengineering/activity'
|
import activity, { ActivityFilter, DisplayTx } from '@hcengineering/activity'
|
||||||
import { Class, Doc, Ref } from '@hcengineering/core'
|
import { Class, Doc, Ref } from '@hcengineering/core'
|
||||||
import { IntlString, getResource } from '@hcengineering/platform'
|
import { IntlString, getResource } from '@hcengineering/platform'
|
||||||
import { getClient } from '@hcengineering/presentation'
|
import { getClient, hasResource } from '@hcengineering/presentation'
|
||||||
import { ActionIcon, AnyComponent, Icon, Label, eventToHTMLElement, showPopup } from '@hcengineering/ui'
|
import { ActionIcon, AnyComponent, Icon, Label, eventToHTMLElement, showPopup } from '@hcengineering/ui'
|
||||||
import { createEventDispatcher } from 'svelte'
|
import { createEventDispatcher } from 'svelte'
|
||||||
import activityPlg from '../plugin'
|
import activityPlg from '../plugin'
|
||||||
@ -51,7 +51,9 @@
|
|||||||
|
|
||||||
function getAdditionalComponent (_class: Ref<Class<Doc>>): AnyComponent | undefined {
|
function getAdditionalComponent (_class: Ref<Class<Doc>>): AnyComponent | undefined {
|
||||||
const hierarchy = client.getHierarchy()
|
const hierarchy = client.getHierarchy()
|
||||||
const mixin = hierarchy.classHierarchyMixin(_class, activity.mixin.ExtraActivityComponent)
|
const mixin = hierarchy.classHierarchyMixin(_class, activity.mixin.ExtraActivityComponent, (m) =>
|
||||||
|
hasResource(m.component)
|
||||||
|
)
|
||||||
if (mixin !== undefined) {
|
if (mixin !== undefined) {
|
||||||
return mixin.component
|
return mixin.component
|
||||||
}
|
}
|
||||||
|
@ -52,7 +52,7 @@ async function createPseudoViewlet (
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check if it is attached doc and collection have title override.
|
// Check if it is attached doc and collection have title override.
|
||||||
const presenter = await getObjectPresenter(client, dtx.tx.objectClass, { key: 'doc-presenter' })
|
const presenter = await getObjectPresenter(client, dtx.tx.objectClass, { key: 'doc-presenter' }, false, false)
|
||||||
if (presenter !== undefined) {
|
if (presenter !== undefined) {
|
||||||
let collection = ''
|
let collection = ''
|
||||||
if (dtx.collectionAttribute?.label !== undefined) {
|
if (dtx.collectionAttribute?.label !== undefined) {
|
||||||
|
@ -11,6 +11,8 @@
|
|||||||
"Attribute": "Attribute",
|
"Attribute": "Attribute",
|
||||||
"MapField": "Map...",
|
"MapField": "Map...",
|
||||||
"BitrixImport": "Synchronize with Bitrix",
|
"BitrixImport": "Synchronize with Bitrix",
|
||||||
"AddMapping": "Add entity mapping"
|
"AddMapping": "Add entity mapping",
|
||||||
|
"ConfigLabel": "Bitrix24",
|
||||||
|
"ConfigDescription": "Extension for Bitrix 24 integration"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,8 @@
|
|||||||
"Attribute": "Attribute",
|
"Attribute": "Attribute",
|
||||||
"MapField": "Map...",
|
"MapField": "Map...",
|
||||||
"BitrixImport": "Synchronize with Bitrix",
|
"BitrixImport": "Synchronize with Bitrix",
|
||||||
"AddMapping": "Добавить отображение"
|
"AddMapping": "Добавить отображение",
|
||||||
|
"ConfigLabel": "Bitrix24",
|
||||||
|
"ConfigDescription": "Extension for Bitrix 24 integration"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -101,6 +101,8 @@
|
|||||||
"RemoveCover": "Remove cover",
|
"RemoveCover": "Remove cover",
|
||||||
"DeleteChecklist": "Delete checklist",
|
"DeleteChecklist": "Delete checklist",
|
||||||
"DeleteChecklistConfirm": "Deleting a checklist is permanent and there is no way to get it back.",
|
"DeleteChecklistConfirm": "Deleting a checklist is permanent and there is no way to get it back.",
|
||||||
"ConvertToCard": "Convert to card"
|
"ConvertToCard": "Convert to card",
|
||||||
|
"ConfigLabel": "Board",
|
||||||
|
"ConfigDescription": "Extension to manage Kanban boards."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -101,6 +101,8 @@
|
|||||||
"RemoveCover": "Удалить обложку",
|
"RemoveCover": "Удалить обложку",
|
||||||
"DeleteChecklist": "Удалить список задач",
|
"DeleteChecklist": "Удалить список задач",
|
||||||
"DeleteChecklistConfirm": "Удаление списка задач необратимо, и не будет возможности его вернуть.",
|
"DeleteChecklistConfirm": "Удаление списка задач необратимо, и не будет возможности его вернуть.",
|
||||||
"ConvertToCard": "Конвертировать в карточку"
|
"ConvertToCard": "Конвертировать в карточку",
|
||||||
|
"ConfigLabel": "Доски",
|
||||||
|
"ConfigDescription": "Расширение для управления канбан досками."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,6 +37,8 @@
|
|||||||
"AllDay": "All day",
|
"AllDay": "All day",
|
||||||
"AndMore": "And {count} more",
|
"AndMore": "And {count} more",
|
||||||
"CreateEvent": "Create event",
|
"CreateEvent": "Create event",
|
||||||
"EventFor": "Event for: "
|
"EventFor": "Event for: ",
|
||||||
|
"ConfigLabel": "Calendar",
|
||||||
|
"ConfigDescription": "Extension to see calendar with Events"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -37,6 +37,8 @@
|
|||||||
"AllDay": "Весь день",
|
"AllDay": "Весь день",
|
||||||
"AndMore": "И еще {count}",
|
"AndMore": "И еще {count}",
|
||||||
"CreateEvent": "Создать событие",
|
"CreateEvent": "Создать событие",
|
||||||
"EventFor": "Событие для: "
|
"EventFor": "Событие для: ",
|
||||||
|
"ConfigLabel": "Календаоь",
|
||||||
|
"ConfigDescription": "Расширение для календаря с событиями"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -65,6 +65,8 @@
|
|||||||
"NoResults": "No results",
|
"NoResults": "No results",
|
||||||
"CopyLink": "Copy link",
|
"CopyLink": "Copy link",
|
||||||
"FilterComments": "Comments",
|
"FilterComments": "Comments",
|
||||||
"FilterBacklinks": "Backlinks"
|
"FilterBacklinks": "Backlinks",
|
||||||
|
"ConfigLabel": "Chat",
|
||||||
|
"ConfigDescription": "Extension to perform text communications"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -65,6 +65,8 @@
|
|||||||
"NoResults": "Нет результатов",
|
"NoResults": "Нет результатов",
|
||||||
"CopyLink": "Копировать ссылку",
|
"CopyLink": "Копировать ссылку",
|
||||||
"FilterComments": "Коментарии",
|
"FilterComments": "Коментарии",
|
||||||
"FilterBacklinks": "Упоминания"
|
"FilterBacklinks": "Упоминания",
|
||||||
|
"ConfigLabel": "Чат",
|
||||||
|
"ConfigDescription": "Расширение для текстовых переписок"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -48,7 +48,7 @@ export default async () => {
|
|||||||
|
|
||||||
return connect(url.href, upgradeHandler, onUpgrade, onUnauthorized, onConnect)
|
return connect(url.href, upgradeHandler, onUpgrade, onUnauthorized, onConnect)
|
||||||
},
|
},
|
||||||
filterModel ? getPlugins() : undefined
|
filterModel ? [...getPlugins(), ...(getMetadata(clientPlugin.metadata.ExtraPlugins) ?? [])] : undefined
|
||||||
)
|
)
|
||||||
// Check if we had dev hook for client.
|
// Check if we had dev hook for client.
|
||||||
client = hookClient(client)
|
client = hookClient(client)
|
||||||
|
@ -76,7 +76,8 @@ export default plugin(clientId, {
|
|||||||
metadata: {
|
metadata: {
|
||||||
ClientHook: '' as Metadata<Resource<ClientHook>>,
|
ClientHook: '' as Metadata<Resource<ClientHook>>,
|
||||||
ClientSocketFactory: '' as Metadata<ClientSocketFactory>,
|
ClientSocketFactory: '' as Metadata<ClientSocketFactory>,
|
||||||
FilterModel: '' as Metadata<boolean>
|
FilterModel: '' as Metadata<boolean>,
|
||||||
|
ExtraPlugins: '' as Metadata<Plugin[]>
|
||||||
},
|
},
|
||||||
function: {
|
function: {
|
||||||
GetClient: '' as Resource<ClientFactory>
|
GetClient: '' as Resource<ClientFactory>
|
||||||
|
@ -93,6 +93,8 @@
|
|||||||
"CategoryCurrentUser": "Current user",
|
"CategoryCurrentUser": "Current user",
|
||||||
"CategoryOther": "Other",
|
"CategoryOther": "Other",
|
||||||
"NumberMembers": "{count, plural, =0 {no members} =1 {1 member} other {# members}}",
|
"NumberMembers": "{count, plural, =0 {no members} =1 {1 member} other {# members}}",
|
||||||
"Position": "Position"
|
"Position": "Position",
|
||||||
|
"ConfigLabel": "Contacts",
|
||||||
|
"ConfigDescription": "Extension to hold information about all Employees and other Person/Organization contacts."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -93,6 +93,8 @@
|
|||||||
"CategoryProjectLead": "Руководитель проекта",
|
"CategoryProjectLead": "Руководитель проекта",
|
||||||
"CategoryProjectMembers": "Участники проекта",
|
"CategoryProjectMembers": "Участники проекта",
|
||||||
"CategoryOther": "Прочие",
|
"CategoryOther": "Прочие",
|
||||||
"Position": "Должность"
|
"Position": "Должность",
|
||||||
|
"ConfigLabel": "Контакты",
|
||||||
|
"ConfigDescription": "Расширение по работе с сотрудниками и другими контактами."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -121,7 +121,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="flex-grow flex-col">
|
<div class="flex-grow flex-col">
|
||||||
<div class="flex-grow flex-col">
|
<div class="flex-grow flex-col">
|
||||||
<div class="name">
|
<div class="name select-text">
|
||||||
{#if owner}
|
{#if owner}
|
||||||
<EditBox
|
<EditBox
|
||||||
placeholder={contact.string.PersonFirstNamePlaceholder}
|
placeholder={contact.string.PersonFirstNamePlaceholder}
|
||||||
@ -134,7 +134,7 @@
|
|||||||
{firstName}
|
{firstName}
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
<div class="name">
|
<div class="name select-text">
|
||||||
{#if owner}
|
{#if owner}
|
||||||
<EditBox
|
<EditBox
|
||||||
placeholder={contact.string.PersonLastNamePlaceholder}
|
placeholder={contact.string.PersonLastNamePlaceholder}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user