summaryrefslogtreecommitdiffstats
path: root/portal-FE-common/src/app/shared/plugin/plugin-loader/client-plugin-loader.service.ts
diff options
context:
space:
mode:
authorSudarshan Kumar <sudarshan.kumar@att.com>2020-01-23 17:06:22 +0530
committerSudarshan Kumar <sudarshan.kumar@att.com>2020-01-28 07:29:04 +0000
commit91e3434fc7c515416ff2da10d55acf1d2dbcde71 (patch)
treeac29f6ea8a20d06255c47ebdb8e4e2692621c0ab /portal-FE-common/src/app/shared/plugin/plugin-loader/client-plugin-loader.service.ts
parent16c3ddbf7f9f644adc23b8f834e6453c5260ada6 (diff)
Adding new components with portal-FE-common
added layout, admins, functional-menu, portal-admins, plugins components along with helpers class, models, pipes and dependent angular services. Issue-ID: PORTAL-795 Change-Id: I8e9771fcee5d0e58c4a48711c943761f29ae48b8 Signed-off-by: Sudarshan Kumar <sudarshan.kumar@att.com>
Diffstat (limited to 'portal-FE-common/src/app/shared/plugin/plugin-loader/client-plugin-loader.service.ts')
-rw-r--r--portal-FE-common/src/app/shared/plugin/plugin-loader/client-plugin-loader.service.ts86
1 files changed, 86 insertions, 0 deletions
diff --git a/portal-FE-common/src/app/shared/plugin/plugin-loader/client-plugin-loader.service.ts b/portal-FE-common/src/app/shared/plugin/plugin-loader/client-plugin-loader.service.ts
new file mode 100644
index 00000000..2666a523
--- /dev/null
+++ b/portal-FE-common/src/app/shared/plugin/plugin-loader/client-plugin-loader.service.ts
@@ -0,0 +1,86 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ *
+ */
+
+import { Injectable, NgModuleFactory } from '@angular/core';
+import { PluginLoaderService } from './plugin-loader.service';
+import { PLUGIN_EXTERNALS_MAP } from './plugin-externals';
+import { PluginsConfigProvider } from '../plugins-config.provider';
+
+const SystemJs = window.System;
+
+@Injectable({
+ providedIn: 'root',
+})
+export class ClientPluginLoaderService extends PluginLoaderService {
+ constructor(private configProvider: PluginsConfigProvider) {
+ super();
+ configProvider.loadConfig()
+ .toPromise()
+ .then(config => {
+ configProvider.config = config;
+ console.log(config);
+ });
+ }
+
+ provideExternals() {
+ Object.keys(PLUGIN_EXTERNALS_MAP).forEach(externalKey =>
+ window.define(externalKey, [], () => PLUGIN_EXTERNALS_MAP[externalKey])
+ );
+ }
+
+ load<T>(pluginName): Promise<NgModuleFactory<T>> {
+
+ const { config } = this.configProvider;
+ if (!config[pluginName]) {
+ throw Error(`Can't find appropriate plugin`);
+ }
+
+ const depsPromises = (config[pluginName].deps || []).map(dep => {
+ return SystemJs.import(window['base'] + config[dep].path).then(m => {
+ window['define'](dep, [], () => m.default);
+ });
+ });
+
+ return Promise.all(depsPromises).then(() => {
+
+ return SystemJs.import(window['base'] + config[pluginName].path).then(
+ module => module.default.default
+ );
+ });
+ }
+}