Merge pull request #12859 from vvlladd28/improvement/flex-layout/remove

Remove flex-layout
This commit is contained in:
Igor Kulikov 2025-03-10 19:29:30 +02:00 committed by GitHub
commit ae95cef789
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 39 additions and 176 deletions

View File

@ -18,7 +18,6 @@
"@angular/common": "18.2.13",
"@angular/compiler": "18.2.13",
"@angular/core": "18.2.13",
"@angular/flex-layout": "^15.0.0-beta.42",
"@angular/forms": "18.2.13",
"@angular/material": "18.2.14",
"@angular/platform-browser": "18.2.13",

File diff suppressed because one or more lines are too long

View File

@ -15,11 +15,10 @@
///
import { Component, Injectable, Type, ɵComponentDef, ɵNG_COMP_DEF } from '@angular/core';
import { forkJoin, from, Observable, of } from 'rxjs';
import { from, Observable, of } from 'rxjs';
import { CommonModule } from '@angular/common';
import { mergeMap } from 'rxjs/operators';
import { guid } from '@core/utils';
import { getFlexLayoutModule } from '@shared/legacy/flex-layout.models';
@Injectable({
providedIn: 'root'
@ -35,9 +34,9 @@ export class DynamicComponentFactoryService {
imports?: Type<any>[],
preserveWhitespaces?: boolean,
styles?: string[]): Observable<Type<T>> {
return forkJoin({flexLayoutModule: getFlexLayoutModule(), compiler: from(import('@angular/compiler'))}).pipe(
mergeMap((data) => {
let componentImports: Type<any>[] = [CommonModule, data.flexLayoutModule];
return from(import('@angular/compiler')).pipe(
mergeMap(() => {
let componentImports: Type<any>[] = [CommonModule];
if (imports) {
componentImports = [...componentImports, ...imports];
}

View File

@ -38,7 +38,6 @@ import { selectIsAuthenticated } from '@core/auth/auth.selectors';
import { AppState } from '@core/core.state';
import { map, tap } from 'rxjs/operators';
import { RequestConfig } from '@core/http/http-utils';
import { getFlexLayoutModule } from '@app/shared/legacy/flex-layout.models';
import { isJSResource, removeTbResourcePrefix } from '@shared/models/resource.models';
export interface ModuleInfo {
@ -206,42 +205,25 @@ export class ResourcesService {
const subject = new ReplaySubject<ModulesWithComponents>();
this.loadedModulesWithComponents[url] = subject;
forkJoin(
[
forkJoin([
modulesMap.init(),
from(import('@angular/compiler'))
]
).subscribe(
]).subscribe(
() => {
// @ts-ignore
System.import(url, undefined, meta).then(
(module: any) => {
try {
const modulesWithComponents = this.extractModulesWithComponents(module);
this.patchModulesWithFlexLayout(modulesWithComponents).subscribe(
{
next: modules => {
if (modules.modules.length || modules.standaloneComponents.length) {
try {
for (const module of modules.modules) {
if (modulesWithComponents.modules.length || modulesWithComponents.standaloneComponents.length) {
for (const module of modulesWithComponents.modules) {
createNgModule(module.module.type, this.injector);
}
this.loadedModulesWithComponents[url].next(modulesWithComponents);
this.loadedModulesWithComponents[url].complete();
} catch (e) {
console.log(`Unable to parse module from url: ${url}`, e);
this.loadedModulesWithComponents[url].error(new Error(`Unable to parse module from url: ${url}`));
}
} else {
this.loadedModulesWithComponents[url].error(new Error(`Module '${url}' doesn't have exported modules or components!`));
}
},
error: err => {
console.log(`Unable to patch module with flexLayout, module url: ${url}`, err);
this.loadedModulesWithComponents[url].error(new Error(`Unable to patch module with flexLayout, module url: ${url}`));
}
}
);
} catch (e) {
console.log(`Unable to parse module from url: ${url}`, e);
this.loadedModulesWithComponents[url].error(new Error(`Unable to parse module from url: ${url}`));
@ -343,40 +325,6 @@ export class ResourcesService {
return modulesWithComponents;
}
private patchModulesWithFlexLayout(modulesWithComponents: ModulesWithComponents): Observable<ModulesWithComponents> {
return getFlexLayoutModule().pipe(
map((flexLayoutModule) => {
modulesWithComponents.modules.forEach(m => {
if (Array.isArray(m.module.imports)) {
if (!m.module.imports.includes(flexLayoutModule)) {
m.module.imports.push(flexLayoutModule);
}
} else {
const imports = m.module.imports();
if (!imports.includes(flexLayoutModule)) {
imports.push(flexLayoutModule);
m.module.imports = imports;
}
}
});
modulesWithComponents.standaloneComponents.forEach(c => {
if (Array.isArray(c.dependencies)) {
if (!c.dependencies.includes(flexLayoutModule)) {
c.dependencies.push(flexLayoutModule);
}
} else {
const dependencies = c.dependencies();
if (!dependencies.includes(flexLayoutModule)) {
dependencies.push(flexLayoutModule);
c.dependencies = dependencies;
}
}
});
return modulesWithComponents;
})
);
}
private loadResourceByType(type: 'css' | 'js', url: string): Observable<any> {
const subject = new ReplaySubject<void>();
this.loadedResources[url] = subject;

View File

@ -338,8 +338,7 @@ import * as AggregationOptionsConfigComponent from '@shared/components/time/aggr
import * as IntervalOptionsConfigPanelComponent from '@shared/components/time/interval-options-config-panel.component';
import { IModulesMap } from '@modules/common/modules-map.models';
import { Observable, map, of } from 'rxjs';
import { getFlexLayout } from '@shared/legacy/flex-layout.models';
import { Observable, of } from 'rxjs';
import { isJSResourceUrl } from '@shared/public-api';
class ModulesMap implements IModulesMap {
@ -352,10 +351,6 @@ class ModulesMap implements IModulesMap {
'@angular/common': AngularCommon,
'@angular/common/http': HttpClientModule,
'@angular/forms': AngularForms,
'@angular/flex-layout': {},
'@angular/flex-layout/flex': {},
'@angular/flex-layout/grid': {},
'@angular/flex-layout/extended': {},
'@angular/platform-browser': AngularPlatformBrowser,
'@angular/platform-browser/animations': AngularPlatformBrowserAnimations,
'@angular/router': AngularRouter,
@ -678,12 +673,6 @@ class ModulesMap implements IModulesMap {
init(): Observable<any> {
if (!this.initialized) {
return getFlexLayout().pipe(
map((flexLayout) => {
this.modulesMap['@angular/flex-layout'] = flexLayout;
this.modulesMap['@angular/flex-layout/flex'] = flexLayout;
this.modulesMap['@angular/flex-layout/grid'] = flexLayout;
this.modulesMap['@angular/flex-layout/extended'] = flexLayout;
System.constructor.prototype.resolve = (id: string) => {
try {
if (this.modulesMap[id]) {
@ -706,11 +695,8 @@ class ModulesMap implements IModulesMap {
return fetch(url, options);
};
this.initialized = true;
})
);
} else {
return of(null);
}
return of(null);
}
}

View File

@ -1,41 +0,0 @@
///
/// Copyright © 2016-2025 The Thingsboard Authors
///
/// Licensed under the Apache License, Version 2.0 (the "License");
/// you may not use this file 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.
///
import { Observable } from 'rxjs/internal/Observable';
import { from, of } from 'rxjs';
import { map, tap } from 'rxjs/operators';
import { Type } from '@angular/core';
let flexLayoutModule: any;
export function getFlexLayout(): Observable<any> {
if (flexLayoutModule) {
return of(flexLayoutModule);
} else {
return from(import('@angular/flex-layout')).pipe(
tap((module) => {
module.DEFAULT_CONFIG.addFlexToParent = false;
flexLayoutModule = module;
})
);
}
}
export function getFlexLayoutModule(): Observable<Type<any>> {
return getFlexLayout().pipe(
map(module => module.FlexLayoutModule)
);
}

View File

@ -307,13 +307,6 @@
dependencies:
tslib "^2.3.0"
"@angular/flex-layout@^15.0.0-beta.42":
version "15.0.0-beta.42"
resolved "https://registry.yarnpkg.com/@angular/flex-layout/-/flex-layout-15.0.0-beta.42.tgz#ad5e1dda32ee6280ba73765be10fd916c222e38e"
integrity sha512-cTAPVMMxnyIFwpZwdq0PL5mdP9Qh+R8MB7ZBezVaN3Rz2fRrkagzKpLvPX3TFzepXrvHBdpKsU4b8u+NxEC/6g==
dependencies:
tslib "^2.3.0"
"@angular/forms@18.2.13":
version "18.2.13"
resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-18.2.13.tgz#119f9b32b0da5e2f1bc3c07f506a645e5635f583"