Skip to content

Commit 77b3862

Browse files
committed
Feat: Allow to disable any plugin and few extra stuff
Signed-off-by: Andrey Sobolev <[email protected]>
1 parent 57c1286 commit 77b3862

File tree

16 files changed

+78
-10
lines changed

16 files changed

+78
-10
lines changed

dev/prod/src/platform.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ export interface Config {
201201
EXCLUDED_APPLICATIONS_FOR_ANONYMOUS?: string
202202
PULSE_URL?: string
203203
HULYLAKE_URL?: string
204+
DISABLED_FEATURES?: string
204205
}
205206

206207
export interface Branding {
@@ -479,10 +480,15 @@ export async function configurePlatform() {
479480
setMetadata(presentation.metadata.StatsUrl, config.STATS_URL)
480481
setMetadata(presentation.metadata.LinkPreviewUrl, config.LINK_PREVIEW_URL)
481482
setMetadata(presentation.metadata.MailUrl, config.MAIL_URL)
483+
484+
const disabledFeatures = (config.DISABLED_FEATURES ??'').split(',').map(it => it.trim()).filter(it => it.length > 0)
485+
setMetadata(presentation.metadata.DisabledFeatures, new Set(disabledFeatures))
486+
482487
setMetadata(recorder.metadata.StreamUrl, config.STREAM_URL)
483488
setMetadata(textEditor.metadata.Collaborator, config.COLLABORATOR)
484489
setMetadata(communication.metadata.Enabled, config.COMMUNICATION_API_ENABLED === 'true')
485490

491+
486492
if (config.MODEL_VERSION != null) {
487493
console.log('Minimal Model version requirement', config.MODEL_VERSION)
488494
setMetadata(presentation.metadata.ModelVersion, config.MODEL_VERSION)
@@ -695,6 +701,7 @@ export async function configurePlatform() {
695701
addLocation(ratingId, async () => await import(/* webpackChunkName: "rating" */ '@hcengineering/rating-resources'))
696702

697703
setMetadata(client.metadata.FilterModel, 'ui')
704+
setMetadata(client.metadata.ExtraFilter, disabledFeatures)
698705
setMetadata(client.metadata.ExtraPlugins, ['preference' as Plugin])
699706
setMetadata(login.metadata.TransactorOverride, config.TRANSACTOR_OVERRIDE)
700707

docs/disableFeatures.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Overview
2+
3+
A configuration guide, for self-hosted users.
4+
5+
## Disable features
6+
Installation could have force disabled one of unused features for all workspaces.
7+
8+
Please set a DISABLED_FEATURES environment variable for front service container, a comma separated list is supported.
9+
10+
- auto-translate - Will disable auto translate
11+
- github - Will disable Github
12+
- mailboxes - Will disable Huly Mail
13+
- export - Will disable export
14+
- integration - Will disable all integrations
15+
- backup - Will disable backup UI
16+
- invites - Will disable invites UI
17+
- documents - Will disable Control Documents
18+
- calendar - Will disable Calendar UI
19+
- inventory - Will disable inventory
20+
- survey - Will disable Surveys
21+
- lead - Will disable leada
22+
- products - Will disable products
23+
- telegram - Will disable telegram
24+
- recruit - Will disable Recruit
25+
- training - Will disable trainings
26+
- testManagement - Will disable test management
27+
- process - Will disable process module
28+
- cards - Will disable cards

models/billing/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ export function createModel (builder: Builder): void {
4848
component: billing.component.Settings,
4949
group: 'settings-editor',
5050
role: AccountRole.Owner,
51+
feature: 'billing',
5152
order: 920
5253
})
5354

models/contact/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1425,6 +1425,7 @@ export function createModel (builder: Builder): void {
14251425
component: contact.component.TranslationSettings,
14261426
group: 'settings-account',
14271427
role: AccountRole.Guest,
1428+
feature: 'auto-translate',
14281429
order: 1600
14291430
})
14301431
}

models/love/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,7 @@ export function createModel (builder: Builder): void {
343343
component: love.component.Settings,
344344
group: 'settings-account',
345345
role: AccountRole.Guest,
346+
feature: 'love',
346347
order: 1600
347348
},
348349
love.ids.Settings

models/setting/src/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ export function createModel (builder: Builder): void {
216216
component: setting.component.Integrations,
217217
group: 'settings-account',
218218
role: AccountRole.User,
219+
feature: 'integrations',
219220
order: 1500
220221
},
221222
setting.ids.Integrations
@@ -229,6 +230,7 @@ export function createModel (builder: Builder): void {
229230
icon: setting.icon.Mailbox,
230231
component: setting.component.Mailboxes,
231232
group: 'settings-account',
233+
feature: 'mailboxes',
232234
role: AccountRole.User,
233235
order: 1700
234236
},
@@ -255,6 +257,7 @@ export function createModel (builder: Builder): void {
255257
label: setting.string.Backup,
256258
icon: setting.icon.Setting,
257259
component: setting.component.Backup,
260+
feature: 'backup',
258261
order: 950,
259262
role: AccountRole.Owner
260263
},
@@ -351,6 +354,7 @@ export function createModel (builder: Builder): void {
351354
icon: setting.icon.InviteSettings,
352355
component: setting.component.InviteSetting,
353356
group: 'settings-editor',
357+
feature: 'invites',
354358
role: AccountRole.Maintainer,
355359
order: 4700
356360
},
@@ -365,6 +369,7 @@ export function createModel (builder: Builder): void {
365369
icon: exportPlugin.icon.Export,
366370
component: exportPlugin.component.ExportSettings,
367371
group: 'settings-editor',
372+
feature: 'export',
368373
role: AccountRole.User,
369374
order: 4800
370375
},

models/templates/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ export function createModel (builder: Builder): void {
7676
icon: templates.icon.Templates,
7777
component: templates.component.Templates,
7878
group: 'settings-editor',
79+
feature: 'templates',
7980
role: AccountRole.User,
8081
order: 3500
8182
},

models/training/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -893,6 +893,7 @@ function defineSettings (builder: Builder): void {
893893
icon: training.icon.Training,
894894
component: training.component.Settings,
895895
order: 1150,
896+
feature: 'trainings',
896897
role: AccountRole.Maintainer
897898
},
898899
training.setting.Trainings

packages/presentation/src/plugin.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ export default plugin(presentationId, {
183183
SessionId: '' as Metadata<string>,
184184
StatsUrl: '' as Metadata<string>,
185185
MailUrl: '' as Metadata<string>,
186+
DisabledFeatures: '' as Metadata<Set<string>>,
186187
PreviewUrl: '' as Metadata<string>,
187188
PulseUrl: '' as Metadata<string>,
188189
HulylakeUrl: '' as Metadata<string>,

packages/presentation/src/utils.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,13 @@ export function getClient (): TxOperations & Client {
254254
return clientProxy
255255
}
256256

257+
export function isDisabled (feature?: string): boolean {
258+
if (feature === undefined) {
259+
return false
260+
}
261+
return getMetadata(plugin.metadata.DisabledFeatures)?.has(feature) ?? false
262+
}
263+
257264
export type OnClientListener = (client: Client, account: Account) => void | Promise<void>
258265
const onClientListeners: OnClientListener[] = []
259266

0 commit comments

Comments
 (0)