blob: b0993b9beb18f276f66f5a1c20d5ddfe5c5c9d67 [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 {getPluginLoader} from '../../shared/gr-js-api-interface/gr-plugin-loader';
import {ServerInfo} from '../../../types/common';
import {subscribe} from '../../lit/subscription-controller';
import {resolve} from '../../../models/dependency';
import {configModelToken} from '../../../models/config/config-model';
@customElement('gr-plugin-host')
export class GrPluginHost extends LitElement {
@state()
config?: ServerInfo;
// visible for testing
readonly getConfigModel = resolve(this, configModelToken);
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;
getPluginLoader().loadPlugins([...themes, ...jsPlugins], instanceId);
}
);
}
}
declare global {
interface HTMLElementTagNameMap {
'gr-plugin-host': GrPluginHost;
}
}