Browse Source

Merge pull request #24006 from abpframework/auto-merge/rel-10-0/4060

Merge branch dev with rel-10.0
pull/24011/head
Ma Liming 11 months ago
committed by GitHub
parent
commit
e4b7528b94
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 89
      npm/ng-packs/packages/schematics/src/commands/change-theme/index.ts
  2. 68
      npm/ng-packs/packages/schematics/src/commands/change-theme/style-map.ts

89
npm/ng-packs/packages/schematics/src/commands/change-theme/index.ts

@ -80,11 +80,11 @@ function updateAppModule(selectedProject: string, targetThemeName: ThemeOptionsE
isStandalone isStandalone
? removeImportsFromStandaloneProviders(appModulePath, targetThemeName) ? removeImportsFromStandaloneProviders(appModulePath, targetThemeName)
: removeProviderFromNgModuleMetadata(appModulePath, targetThemeName), : removeProviderFromNgModuleMetadata(appModulePath, targetThemeName),
insertHelperImports(appModulePath, targetThemeName),
insertImports(selectedProject, targetThemeName), insertImports(selectedProject, targetThemeName),
insertProviders(selectedProject, targetThemeName), insertProviders(selectedProject, targetThemeName),
adjustProvideAbpThemeShared(appModulePath, targetThemeName), adjustProvideAbpThemeShared(appModulePath, targetThemeName),
updateIndexHtml(selectedProject, targetThemeName), updateIndexHtml(selectedProject, targetThemeName),
formatFile(appModulePath),
cleanEmptyExpressions(appModulePath, isStandalone), cleanEmptyExpressions(appModulePath, isStandalone),
]); ]);
}; };
@ -318,39 +318,82 @@ export function removeProviderFromNgModuleMetadata(
}; };
} }
export function insertImports(projectName: string, selectedTheme: ThemeOptionsEnum): Rule { export function insertHelperImports(filePath: string, selectedTheme: ThemeOptionsEnum): Rule {
return addRootImport(projectName, code => { return (host: Tree) => {
const selectedThemeImports = importMap.get(selectedTheme); const selectedThemeImports = importMap.get(selectedTheme);
const selected = selectedThemeImports?.filter(s => !s.doNotImport); const helpers = selectedThemeImports?.filter(
if (!selected?.length) return code.code``; s => !s.doNotImport && s.importName && s.path && !s.expression && !s.provider
);
if (!helpers || helpers.length === 0) {
return host;
}
const expressions: string[] = []; const buffer = host.read(filePath);
if (!buffer) return host;
for (const { importName, path, expression } of selected) { const sourceText = buffer.toString('utf-8');
const source = ts.createSourceFile(filePath, sourceText, ts.ScriptTarget.Latest, true);
const recorder = host.beginUpdate(filePath);
for (const { importName, path } of helpers) {
const existingImport = findNodes(source, ts.isImportDeclaration).find(node => {
const moduleSpecifier = (node.moduleSpecifier as ts.StringLiteral).text;
const namedBindings = node.importClause?.namedBindings;
if (moduleSpecifier === path && namedBindings && ts.isNamedImports(namedBindings)) {
return namedBindings.elements.some(e => e.name.text === importName);
}
return false;
});
if (!existingImport) {
const importStatement = `import { ${importName} } from '${path}';\n`;
recorder.insertLeft(0, importStatement);
}
}
host.commitUpdate(recorder);
return host;
};
}
export function insertImports(projectName: string, selectedTheme: ThemeOptionsEnum): Rule {
const selectedThemeImports = importMap.get(selectedTheme);
const selected = selectedThemeImports?.filter(s => !s.doNotImport && !!s.expression);
if (!selected || selected.length === 0) {
return () => {};
}
return addRootImport(projectName, code => {
const expressions = selected.map(({ importName, path, expression }) => {
if (importName && path) { if (importName && path) {
code.external(importName, path); code.external(importName, path);
} }
if (expression) { return expression!.trim();
expressions.push(expression.trim()); });
}
} return code.code`
return code.code`${expressions}`; ${expressions.join(',\n')}`;
}); });
} }
export function insertProviders(projectName: string, selectedTheme: ThemeOptionsEnum): Rule { export function insertProviders(projectName: string, selectedTheme: ThemeOptionsEnum): Rule {
return addRootProvider(projectName, code => { const selectedThemeImports = importMap.get(selectedTheme);
const selectedThemeImports = importMap.get(selectedTheme); const selected = selectedThemeImports?.filter(s => !s.doNotImport && !!s.provider);
const selected = selectedThemeImports?.filter(s => !s.doNotImport);
if (!selected || selected.length === 0) return code.code``; if (!selected || selected.length === 0) {
return () => {};
}
const providers = selected return addRootProvider(projectName, code => {
.filter(s => !!s.provider) const providers = selected.map(({ provider, path, importName }) => {
.map(({ provider, path, importName }) => { code.external(importName, path);
code.external(importName, path); return provider;
return `${provider}`; });
});
return code.code`${providers}`; return code.code`
${providers.join(',\n')}`;
}); });
} }

68
npm/ng-packs/packages/schematics/src/commands/change-theme/style-map.ts

@ -272,16 +272,13 @@ importMap.set(ThemeOptionsEnum.Basic, [
path: '@abp/ng.theme.basic', path: '@abp/ng.theme.basic',
importName: 'ThemeBasicModule', importName: 'ThemeBasicModule',
expression: 'ThemeBasicModule', expression: 'ThemeBasicModule',
}, doNotImport: true,
{
path: '@abp/ng.theme.basic',
importName: 'provideThemeBasicConfig',
provider: 'provideThemeBasicConfig()',
}, },
{ {
path: '@abp/ng.theme.shared', path: '@abp/ng.theme.shared',
importName: 'ThemeSharedModule', importName: 'ThemeSharedModule',
expression: 'ThemeSharedModule', expression: 'ThemeSharedModule',
doNotImport: true,
}, },
{ {
path: '@abp/ng.theme.shared', path: '@abp/ng.theme.shared',
@ -292,18 +289,24 @@ importMap.set(ThemeOptionsEnum.Basic, [
importName: 'provideAbpThemeShared', importName: 'provideAbpThemeShared',
provider: 'provideAbpThemeShared()', provider: 'provideAbpThemeShared()',
}, },
{
path: '@abp/ng.theme.basic',
importName: 'provideThemeBasicConfig',
provider: 'provideThemeBasicConfig()',
},
]); ]);
importMap.set(ThemeOptionsEnum.Lepton, [ importMap.set(ThemeOptionsEnum.Lepton, [
{
path: '@volo/abp.ng.theme.lepton',
importName: 'provideThemeLepton',
provider: 'provideThemeLepton()',
},
{ {
path: '@abp/ng.theme.shared', path: '@abp/ng.theme.shared',
importName: 'ThemeSharedModule', importName: 'ThemeSharedModule',
expression: 'ThemeSharedModule', expression: 'ThemeSharedModule',
doNotImport: true,
},
{
path: '@volo/abp.ng.theme.lepton',
importName: 'provideThemeLepton',
provider: 'provideThemeLepton()',
}, },
{ {
path: '@abp/ng.theme.shared', path: '@abp/ng.theme.shared',
@ -325,21 +328,31 @@ importMap.set(ThemeOptionsEnum.LeptonXLite, [
path: '@abp/ng.theme.lepton-x', path: '@abp/ng.theme.lepton-x',
importName: 'ThemeLeptonXModule', importName: 'ThemeLeptonXModule',
expression: 'ThemeLeptonXModule.forRoot()', expression: 'ThemeLeptonXModule.forRoot()',
doNotImport: true,
}, },
{ {
path: '@abp/ng.theme.lepton-x/layouts', path: '@abp/ng.theme.lepton-x/layouts',
importName: 'SideMenuLayoutModule', importName: 'SideMenuLayoutModule',
expression: 'SideMenuLayoutModule.forRoot()', expression: 'SideMenuLayoutModule.forRoot()',
doNotImport: true,
},
{
path: '@abp/ng.theme.lepton-x/layouts',
importName: 'TopMenuLayoutModule',
expression: 'TopMenuLayoutModule.forRoot()',
doNotImport: true,
}, },
{ {
path: '@abp/ng.theme.lepton-x/account', path: '@abp/ng.theme.lepton-x/account',
importName: 'AccountLayoutModule', importName: 'AccountLayoutModule',
expression: 'AccountLayoutModule.forRoot()', expression: 'AccountLayoutModule.forRoot()',
doNotImport: true,
}, },
{ {
path: '@abp/ng.theme.shared', path: '@abp/ng.theme.shared',
importName: 'ThemeSharedModule', importName: 'ThemeSharedModule',
expression: 'ThemeSharedModule', expression: 'ThemeSharedModule',
doNotImport: true,
}, },
{ {
path: '@abp/ng.theme.shared', path: '@abp/ng.theme.shared',
@ -354,6 +367,22 @@ importMap.set(ThemeOptionsEnum.LeptonXLite, [
importName: 'provideAbpThemeShared', importName: 'provideAbpThemeShared',
provider: 'provideAbpThemeShared()', provider: 'provideAbpThemeShared()',
}, },
{
path: '@abp/ng.theme.lepton-x',
importName: 'provideThemeLeptonX',
provider: 'provideThemeLeptonX()',
},
{
path: '@abp/ng.theme.lepton-x/layouts',
importName: 'provideSideMenuLayout',
provider: 'provideSideMenuLayout()',
},
{
path: '@abp/ng.theme.lepton-x/layouts',
importName: 'provideTopMenuLayout',
provider: 'provideTopMenuLayout()',
doNotImport: true,
},
]); ]);
importMap.set(ThemeOptionsEnum.LeptonX, [ importMap.set(ThemeOptionsEnum.LeptonX, [
@ -361,11 +390,13 @@ importMap.set(ThemeOptionsEnum.LeptonX, [
path: '@volosoft/abp.ng.theme.lepton-x', path: '@volosoft/abp.ng.theme.lepton-x',
importName: 'ThemeLeptonXModule', importName: 'ThemeLeptonXModule',
expression: 'ThemeLeptonXModule.forRoot()', expression: 'ThemeLeptonXModule.forRoot()',
doNotImport: true,
}, },
{ {
path: '@volosoft/abp.ng.theme.lepton-x/layouts', path: '@volosoft/abp.ng.theme.lepton-x/layouts',
importName: 'SideMenuLayoutModule', importName: 'SideMenuLayoutModule',
expression: 'SideMenuLayoutModule.forRoot()', expression: 'SideMenuLayoutModule.forRoot()',
doNotImport: true,
}, },
{ {
path: '@volosoft/abp.ng.theme.lepton-x/layouts', path: '@volosoft/abp.ng.theme.lepton-x/layouts',
@ -377,6 +408,7 @@ importMap.set(ThemeOptionsEnum.LeptonX, [
path: '@abp/ng.theme.shared', path: '@abp/ng.theme.shared',
importName: 'ThemeSharedModule', importName: 'ThemeSharedModule',
expression: 'ThemeSharedModule', expression: 'ThemeSharedModule',
doNotImport: true,
}, },
{ {
path: '@volosoft/abp.ng.theme.lepton-x', path: '@volosoft/abp.ng.theme.lepton-x',
@ -390,6 +422,22 @@ importMap.set(ThemeOptionsEnum.LeptonX, [
path: '@abp/ng.theme.shared', path: '@abp/ng.theme.shared',
importName: 'withValidationBluePrint', importName: 'withValidationBluePrint',
}, },
{
path: '@volosoft/abp.ng.theme.lepton-x',
importName: 'provideThemeLeptonX',
provider: 'provideThemeLeptonX()',
},
{
path: '@volosoft/abp.ng.theme.lepton-x/layouts',
importName: 'provideSideMenuLayout',
provider: 'provideSideMenuLayout()',
},
{
path: '@volosoft/abp.ng.theme.lepton-x/layouts',
importName: 'provideTopMenuLayout',
provider: 'provideTopMenuLayout()',
doNotImport: true,
},
{ {
path: '@abp/ng.theme.shared', path: '@abp/ng.theme.shared',
importName: 'provideAbpThemeShared', importName: 'provideAbpThemeShared',

Loading…
Cancel
Save