diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 4feba9a8405..b05dbbaf511 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -37,9 +37,6 @@ importers: '@hcengineering/account-client': specifier: ^0.7.3 version: 0.7.3 - '@hcengineering/analytics': - specifier: ^0.7.3 - version: 0.7.3 '@hcengineering/analytics-service': specifier: ^0.7.3 version: 0.7.3(encoding@0.1.13) @@ -31332,6 +31329,7 @@ snapshots: '@rush-temp/telegram-resources@file:projects/telegram-resources.tgz(@babel/core@7.23.9)(@jest/types@29.6.3)(@types/node@22.15.29)(babel-jest@29.7.0(@babel/core@7.23.9))(esbuild@0.25.9)(postcss-load-config@4.0.2(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.15.29)(typescript@5.9.3)))(postcss@8.5.3)(prosemirror-inputrules@1.4.0)(prosemirror-model@1.24.1)(prosemirror-state@1.4.3)(prosemirror-view@1.37.2)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.15.29)(typescript@5.9.3))': dependencies: '@hcengineering/account-client': 0.7.3 + '@hcengineering/analytics': 0.7.3 '@hcengineering/core': 0.7.3 '@hcengineering/platform': 0.7.3 '@hcengineering/platform-rig': 0.7.15 diff --git a/packages/integration-client/src/client.ts b/packages/integration-client/src/client.ts index 4645c5039f6..8241e22c699 100644 --- a/packages/integration-client/src/client.ts +++ b/packages/integration-client/src/client.ts @@ -337,4 +337,38 @@ export class IntegrationClientImpl implements IntegrationClient { await this.client.addIntegrationSecret(data) } } + + async setIntegrationEnabled (integrationKey: IntegrationKey, enabled: boolean): Promise { + try { + const integration = await this.client.getIntegration(integrationKey) + if (integration == null) { + throw new Error(`Integration not found: ${JSON.stringify(integrationKey)}`) + } + + const data = { + ...integration.data, + disabled: !enabled + } + + await this.client.updateIntegration({ + ...integration, + data + }) + + const eventData: IntegrationEventData = { + integration: { ...integration, data }, + timestamp: Date.now() + } + this.emit('integration:updated', eventData) + } catch (error) { + const errorData: IntegrationErrorData = { + operation: 'setIntegrationEnabled', + error: error instanceof Error ? error.message : String(error), + integrationKey, + timestamp: Date.now() + } + this.emit('integration:error', errorData) + throw error + } + } } diff --git a/packages/integration-client/src/types.ts b/packages/integration-client/src/types.ts index aaf1c3761fd..3afbc3e5a93 100644 --- a/packages/integration-client/src/types.ts +++ b/packages/integration-client/src/types.ts @@ -72,6 +72,11 @@ export interface IntegrationClient { * Set or update integration secret */ setSecret: (data: IntegrationSecret) => Promise + + /** + * Disable or enable an integration + */ + setIntegrationEnabled: (integrationKey: IntegrationKey, enabled: boolean) => Promise } export interface IntegrationEventData { diff --git a/packages/integration-client/src/utils.ts b/packages/integration-client/src/utils.ts index 62f93d9c932..a08d2b13b9a 100644 --- a/packages/integration-client/src/utils.ts +++ b/packages/integration-client/src/utils.ts @@ -14,6 +14,7 @@ // import { Integration } from '@hcengineering/account-client' +import platform, { PlatformError } from '@hcengineering/platform' import { IntegrationEventData } from './types' export function isWorkspaceIntegration (integration: Integration): boolean { @@ -34,3 +35,17 @@ export function isSameIntegrationEvent (event: IntegrationEventData, integration export function getIntegrationConfig (integration: Integration): Record | undefined { return integration?.data?.config } + +export function isDisabled (integration: Integration): boolean { + return integration?.data?.disabled === true +} + +export function isUnauthorizedError (error: any): boolean { + if (error instanceof PlatformError && error.status.code === platform.status.Unauthorized) { + return true + } + if (error?.status === 401 || error?.status?.code === 401) { + return true + } + return false +} diff --git a/packages/theme/styles/_colors.scss b/packages/theme/styles/_colors.scss index b44a16306da..de226a53a8a 100644 --- a/packages/theme/styles/_colors.scss +++ b/packages/theme/styles/_colors.scss @@ -403,6 +403,10 @@ --theme-label-blue-bg-color: rgba(59, 130, 246, .08); --theme-label-blue-border-color: rgba(59, 130, 246, .2); + --theme-label-orange-color: rgba(249, 115, 22, .8); + --theme-label-orange-bg-color: rgba(249, 115, 22, .08); + --theme-label-orange-border-color: rgba(249, 115, 22, .2); + --theme-label-gray-color: rgba(255, 255, 255, .6); --theme-label-gray-bg-color: rgba(255, 255, 255, .02); --theme-label-gray-border-color: rgba(255, 255, 255, .09); @@ -718,6 +722,10 @@ --theme-label-blue-bg-color: rgba(59, 130, 246, .08); --theme-label-blue-border-color: rgba(59, 130, 246, .15); + --theme-label-orange-color: rgba(194, 65, 12, 0.9); + --theme-label-orange-bg-color: rgba(249, 115, 22, .08); + --theme-label-orange-border-color: rgba(249, 115, 22, .15); + --theme-label-gray-color: rgba(0, 0, 0, .6); --theme-label-gray-bg-color: rgba(0, 0, 0, .02); --theme-label-gray-border-color: rgba(0, 0, 0, .09); diff --git a/plugins/setting-assets/lang/cs.json b/plugins/setting-assets/lang/cs.json index 006026a9a81..43f8618c7dc 100644 --- a/plugins/setting-assets/lang/cs.json +++ b/plugins/setting-assets/lang/cs.json @@ -191,6 +191,7 @@ "ServiceIsUnavailable": "Služba není k dispozici", "Integrated": "Integrované", "Connected": "Připojené", + "Disconnected": "Odpojené", "Available": "Dostupné", "NotConnectedIntegration": "Účet {account} není integrován s pracovním prostorem", "IntegrationIsUnstable": "Integrační služba má problémy. Některé funkce nemusí fungovat správně.", diff --git a/plugins/setting-assets/lang/de.json b/plugins/setting-assets/lang/de.json index 22712912b0e..2a41cbcb148 100644 --- a/plugins/setting-assets/lang/de.json +++ b/plugins/setting-assets/lang/de.json @@ -193,6 +193,7 @@ "ServiceIsUnavailable": "Dienst ist nicht verfügbar", "Integrated": "Integriert", "Connected": "Verbunden", + "Disconnected": "Getrennt", "Available": "Verfügbar", "NotConnectedIntegration": "Das Konto {account} ist nicht mit dem Arbeitsbereich integriert", "IntegrationIsUnstable": "Der Integrationsdienst hat Probleme. Einige Funktionen funktionieren möglicherweise nicht richtig.", diff --git a/plugins/setting-assets/lang/en.json b/plugins/setting-assets/lang/en.json index 42d5d81be98..2aab6077414 100644 --- a/plugins/setting-assets/lang/en.json +++ b/plugins/setting-assets/lang/en.json @@ -193,6 +193,7 @@ "ServiceIsUnavailable": "Service is unavailable", "Integrated": "Integrated", "Connected": "Connected", + "Disconnected": "Disconnected", "Available": "Available", "NotConnectedIntegration": "The account {account} is not integrated with the workspace", "IntegrationIsUnstable": "Integration service is experiencing issues. Some features may not work properly.", diff --git a/plugins/setting-assets/lang/es.json b/plugins/setting-assets/lang/es.json index 7dcf0014e63..e0e20d0a3f6 100644 --- a/plugins/setting-assets/lang/es.json +++ b/plugins/setting-assets/lang/es.json @@ -184,6 +184,7 @@ "ServiceIsUnavailable": "El servicio no está disponible", "Integrated": "Integrado", "Connected": "Conectado", + "Disconnected": "Desconectado", "Available": "Disponible", "NotConnectedIntegration": "La cuenta {account} no está integrada con el espacio de trabajo", "IntegrationIsUnstable": "El servicio de integración está experimentando problemas. Es posible que algunas funciones no funcionen correctamente.", diff --git a/plugins/setting-assets/lang/fr.json b/plugins/setting-assets/lang/fr.json index 1ad81df5da4..4c6d4262d38 100644 --- a/plugins/setting-assets/lang/fr.json +++ b/plugins/setting-assets/lang/fr.json @@ -193,6 +193,7 @@ "ServiceIsUnavailable": "Le service n'est pas disponible", "Integrated": "Intégré", "Connected": "Connecté", + "Disconnected": "Déconnecté", "Available": "Disponible", "NotConnectedIntegration": "Le compte {account} n'est pas intégré au workspace", "IntegrationIsUnstable": "Le service d'intégration rencontre des problèmes. Certaines fonctionnalités peuvent ne pas fonctionner correctement.", diff --git a/plugins/setting-assets/lang/it.json b/plugins/setting-assets/lang/it.json index c8a6dd2048e..443521c7e10 100644 --- a/plugins/setting-assets/lang/it.json +++ b/plugins/setting-assets/lang/it.json @@ -193,6 +193,7 @@ "ServiceIsUnavailable": "Il servizio non è disponibile", "Integrated": "Integrato", "Connected": "Connesso", + "Disconnected": "Disconnesso", "Available": "Disponibile", "NotConnectedIntegration": "L'account {account} non è integrato con il workspace", "IntegrationIsUnstable": "L'integrazione è instabile. Alcune funzionalità potrebbero non funzionare correttamente.", diff --git a/plugins/setting-assets/lang/ja.json b/plugins/setting-assets/lang/ja.json index bd985a94d1d..3066a7f0641 100644 --- a/plugins/setting-assets/lang/ja.json +++ b/plugins/setting-assets/lang/ja.json @@ -193,6 +193,7 @@ "ServiceIsUnavailable": "サービスは利用できません", "Integrated": "統合済み", "Connected": "接続済み", + "Disconnected": "切断済み", "Available": "利用可能", "NotConnectedIntegration": "アカウント {account} はワークスペースに統合されていません", "IntegrationIsUnstable": "統合サービスに問題が発生しています。一部の機能が正しく動作しない可能性があります。", diff --git a/plugins/setting-assets/lang/pt.json b/plugins/setting-assets/lang/pt.json index ee572f5e4f2..8a035c42553 100644 --- a/plugins/setting-assets/lang/pt.json +++ b/plugins/setting-assets/lang/pt.json @@ -184,6 +184,7 @@ "ServiceIsUnavailable": "Serviço indisponível", "Integrated": "Integrado", "Connected": "Conectado", + "Disconnected": "Desconectado", "Available": "Disponível", "NotConnectedIntegration": "A conta {account} não está integrada com o espaço de trabalho", "IntegrationIsUnstable": "O serviço de integração está enfrentando problemas. Algumas funcionalidades podem não funcionar corretamente." diff --git a/plugins/setting-assets/lang/ru.json b/plugins/setting-assets/lang/ru.json index 9be6eba8a7c..63c1a5d8607 100644 --- a/plugins/setting-assets/lang/ru.json +++ b/plugins/setting-assets/lang/ru.json @@ -196,6 +196,7 @@ "ServiceIsUnavailable": "Сервис недоступен", "Integrated": "Интегрировано", "Connected": "Подключено", + "Disconnected": "Отключено", "Available": "Доступно", "NotConnectedIntegration": "Учетная запись {account} не интегрирована с рабочим пространством", "IntegrationIsUnstable": "Сервис интеграции испытывает проблемы. Некоторые функции могут работать некорректно." diff --git a/plugins/setting-assets/lang/tr.json b/plugins/setting-assets/lang/tr.json index 151eac57749..56b726bdb2c 100644 --- a/plugins/setting-assets/lang/tr.json +++ b/plugins/setting-assets/lang/tr.json @@ -193,6 +193,7 @@ "ServiceIsUnavailable": "Servis kullanılamıyor", "Integrated": "Entegre", "Connected": "Bağlandı", + "Disconnected": "Bağlantı Kesildi", "Available": "Kullanılabilir", "NotConnectedIntegration": "{account} hesabı çalışma alanıyla entegre değil", "IntegrationIsUnstable": "Entegrasyon servisi sorunlar yaşıyor. Bazı özellikler düzgün çalışmayabilir.", diff --git a/plugins/setting-assets/lang/zh.json b/plugins/setting-assets/lang/zh.json index e38267b81c9..a1af841d2f8 100644 --- a/plugins/setting-assets/lang/zh.json +++ b/plugins/setting-assets/lang/zh.json @@ -193,6 +193,7 @@ "ServiceIsUnavailable": "服务不可用", "Integrated": "已集成", "Connected": "已连接", + "Disconnected": "已断开", "Available": "可用", "NotConnectedIntegration": "帐户 {account} 未与工作区集成", "IntegrationIsUnstable": "集成服务出现问题。某些功能可能无法正常工作。", diff --git a/plugins/setting-resources/src/components/integrations/IntegrationCard.svelte b/plugins/setting-resources/src/components/integrations/IntegrationCard.svelte index d4e5c627573..4a2269c6037 100644 --- a/plugins/setting-resources/src/components/integrations/IntegrationCard.svelte +++ b/plugins/setting-resources/src/components/integrations/IntegrationCard.svelte @@ -13,10 +13,9 @@ // limitations under the License. --> - +