blob: 80765a8234a0c1045917a1615374e33ae41f9157 [file] [log] [blame]
/**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import {LitElement} from 'lit';
import {customElement, state} from 'lit/decorators.js';
import {ServerInfo} from '../../../types/common';
import {subscribe} from '../../lit/subscription-controller';
import {resolve} from '../../../models/dependency';
import {configModelToken} from '../../../models/config/config-model';
import {pluginLoaderToken} from '../../shared/gr-js-api-interface/gr-plugin-loader';
@customElement('gr-plugin-host')
export class GrPluginHost extends LitElement {
@state()
config?: ServerInfo;
private readonly getConfigModel = resolve(this, configModelToken);
private readonly getPluginLoader = resolve(this, pluginLoaderToken);
constructor() {
super();
subscribe(
this,
() => this.getConfigModel().serverConfig$,
config => {
if (!config) return;
const jsPlugins = config?.plugin?.js_resource_paths ?? [];
const themes: string[] = config?.default_theme
? [config.default_theme]
: [];
const instanceId = config?.gerrit?.instance_id;
this.getPluginLoader().loadPlugins(
[...themes, ...jsPlugins],
instanceId
);
}
);
}
}
declare global {
interface HTMLElementTagNameMap {
'gr-plugin-host': GrPluginHost;
}
}