Browse Source

Merge pull request #13306 from abpframework/berkan/cli-leptonx

Allow to use LeptonX as the UI theme for templates
pull/13332/head
maliming 4 years ago
committed by GitHub
parent
commit
2df949f1f5
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 108
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs
  2. 997
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ChangeThemeStep.cs
  3. 76
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ChangeThemeStyleStep.cs
  4. 2
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveDependencyFromPackageJsonFileStep.cs
  5. 9
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Theme.cs
  6. 8
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/ThemeStyle.cs
  7. 6
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ProjectBuildArgs.cs
  8. 6
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppNoLayersProTemplate.cs
  9. 6
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppNoLayersTemplate.cs
  10. 6
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppProTemplate.cs
  11. 6
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplate.cs
  12. 73
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs
  13. 6
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Microservice/MicroserviceProTemplate.cs
  14. 59
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Microservice/MicroserviceTemplateBase.cs
  15. 6
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ExceptionMessageHelper.cs

108
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs

@ -103,12 +103,18 @@ public abstract class ProjectCreationCommandBase
Logger.LogInformation("UI Framework: " + uiFramework); Logger.LogInformation("UI Framework: " + uiFramework);
} }
var theme = uiFramework == UiFramework.None ? (Theme?)null : GetTheme(commandLineArgs); var theme = uiFramework == UiFramework.None ? (Theme?)null : GetThemeByTemplateOrNull(commandLineArgs, template);
if (theme.HasValue) if (theme.HasValue)
{ {
Logger.LogInformation("Theme: " + theme); Logger.LogInformation("Theme: " + theme);
} }
var themeStyle = theme.HasValue ? GetThemeStyleOrNull(commandLineArgs, theme.Value) : (ThemeStyle?)null;
if(themeStyle.HasValue)
{
Logger.LogInformation("Theme Style: " + themeStyle);
}
var publicWebSite = uiFramework != UiFramework.None && commandLineArgs.Options.ContainsKey(Options.PublicWebSite.Long); var publicWebSite = uiFramework != UiFramework.None && commandLineArgs.Options.ContainsKey(Options.PublicWebSite.Long);
if (publicWebSite) if (publicWebSite)
{ {
@ -221,7 +227,8 @@ public abstract class ProjectCreationCommandBase
commandLineArgs.Options, commandLineArgs.Options,
connectionString, connectionString,
pwa, pwa,
theme theme,
themeStyle
); );
} }
@ -360,7 +367,7 @@ public abstract class ProjectCreationCommandBase
return DatabaseProvider.MongoDb; return DatabaseProvider.MongoDb;
} }
throw new CliUsageException("The option you provided for Database Provider is invalid!"); throw new CliUsageException(ExceptionMessageHelper.GetInvalidOptionExceptionMessage("Database Provider"));
} }
protected virtual async Task RunGraphBuildForMicroserviceServiceTemplate(ProjectBuildArgs projectArgs) protected virtual async Task RunGraphBuildForMicroserviceServiceTemplate(ProjectBuildArgs projectArgs)
@ -471,7 +478,7 @@ public abstract class ProjectCreationCommandBase
case "oracle": case "oracle":
return DatabaseManagementSystem.Oracle; return DatabaseManagementSystem.Oracle;
default: default:
throw new CliUsageException("The option you provided for Database Management System is invalid!"); throw new CliUsageException(ExceptionMessageHelper.GetInvalidOptionExceptionMessage("Database Management System"));
} }
} }
@ -487,7 +494,7 @@ public abstract class ProjectCreationCommandBase
case "react-native": case "react-native":
return MobileApp.ReactNative; return MobileApp.ReactNative;
default: default:
throw new CliUsageException("The option you provided for Mobile App is invalid!"); throw new CliUsageException(ExceptionMessageHelper.GetInvalidOptionExceptionMessage("Mobile App"));
} }
} }
@ -515,23 +522,59 @@ public abstract class ProjectCreationCommandBase
case "blazor-server": case "blazor-server":
return UiFramework.BlazorServer; return UiFramework.BlazorServer;
default: default:
throw new CliUsageException("The option you provided for UI Framework is invalid!"); throw new CliUsageException(ExceptionMessageHelper.GetInvalidOptionExceptionMessage("UI Framework"));
} }
} }
protected virtual Theme GetTheme(CommandLineArgs commandLineArgs) protected virtual Theme? GetThemeByTemplateOrNull(CommandLineArgs commandLineArgs, string template = "app")
{ {
var optionValue = commandLineArgs.Options.GetOrNull(Options.Theme.Long); var theme = commandLineArgs.Options.GetOrNull(Options.Theme.Long)?.ToLower();
switch (optionValue)
return template switch
{ {
case null: AppTemplate.TemplateName or AppNoLayersTemplate.TemplateName => GetAppTheme(),
case "leptonx-lite": AppProTemplate.TemplateName or AppNoLayersProTemplate.TemplateName or MicroserviceProTemplate.TemplateName => GetAppProTheme(),
return Theme.LeptonXLite; _ => null
case "basic": };
return Theme.Basic;
default: Theme GetAppTheme()
throw new CliUsageException("The option you provided for Theme is invalid!"); {
return theme switch
{
// null or "leptonx-lite" => Theme.LeptonXLite,
"basic" => Theme.Basic,
_ => Theme.LeptonXLite
};
} }
Theme GetAppProTheme()
{
return theme switch
{
// null or "leptonx" => Theme.LeptonX,
"lepton" => Theme.Lepton,
"basic" => Theme.Basic,
_ => Theme.LeptonX //TODO: default???
};
}
}
protected virtual ThemeStyle? GetThemeStyleOrNull(CommandLineArgs commandLineArgs, Theme theme)
{
if(theme != Theme.LeptonX)
{
return null;
}
var themeStyle = commandLineArgs.Options.GetOrNull(Options.ThemeStyle.Long)?.ToLower();
return themeStyle switch
{
// null => ThemeStyle.NotSpecified, TODO: remove it!!!
"dim" or null => ThemeStyle.Dim,
"light" => ThemeStyle.Light,
"dark" => ThemeStyle.Dark,
_ => null
};
} }
protected void ConfigureNpmPackagesForTheme(ProjectBuildArgs projectArgs) protected void ConfigureNpmPackagesForTheme(ProjectBuildArgs projectArgs)
@ -546,6 +589,15 @@ public abstract class ProjectCreationCommandBase
case Theme.Basic: case Theme.Basic:
ConfigureNpmPackagesForBasicTheme(projectArgs); ConfigureNpmPackagesForBasicTheme(projectArgs);
break; break;
case Theme.Lepton:
ConfigureNpmPackagesForLeptonTheme(projectArgs);
break;
case Theme.NotSpecified:
case Theme.LeptonXLite:
case Theme.LeptonX:
break;
default:
throw new CliUsageException(ExceptionMessageHelper.GetInvalidOptionExceptionMessage(Options.Theme.Long));
} }
} }
@ -566,6 +618,25 @@ public abstract class ProjectCreationCommandBase
ThemePackageAdder.AddAngularPackage(projectArgs.OutputFolder, "@abp/ng.theme.basic", projectArgs.Version); ThemePackageAdder.AddAngularPackage(projectArgs.OutputFolder, "@abp/ng.theme.basic", projectArgs.Version);
} }
} }
private void ConfigureNpmPackagesForLeptonTheme(ProjectBuildArgs projectArgs)
{
if (projectArgs.UiFramework is not UiFramework.None or UiFramework.Angular)
{
ThemePackageAdder.AddNpmPackage(projectArgs.OutputFolder, "@volo/abp.aspnetcore.mvc.ui.theme.lepton", projectArgs.Version);
}
if (projectArgs.UiFramework is UiFramework.BlazorServer)
{
ThemePackageAdder.AddNpmPackage(projectArgs.OutputFolder, "@volo/abp.aspnetcore.components.server.leptontheme", projectArgs.Version);
ThemePackageAdder.AddNpmPackage(projectArgs.OutputFolder, "@volo/abp.aspnetcore.mvc.ui.theme.lepton", projectArgs.Version);
}
if (projectArgs.UiFramework is UiFramework.Angular)
{
ThemePackageAdder.AddAngularPackage(projectArgs.OutputFolder, "@volo/abp.ng.theme.lepton", projectArgs.Version);
}
}
public static class Options public static class Options
{ {
@ -669,5 +740,10 @@ public abstract class ProjectCreationCommandBase
{ {
public const string Long = "theme"; public const string Long = "theme";
} }
public static class ThemeStyle
{
public const string Long = "theme-style";
}
} }
} }

997
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ChangeThemeStep.cs

File diff suppressed because it is too large

76
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ChangeThemeStyleStep.cs

@ -0,0 +1,76 @@
using System.Collections.Generic;
using System.Linq;
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps;
public class ChangeThemeStyleStep : ProjectBuildPipelineStep
{
public override void Execute(ProjectBuildContext context)
{
if (context.BuildArgs.Theme != Theme.LeptonX)
{
return;
}
switch (context.BuildArgs.ThemeStyle)
{
case ThemeStyle.Light:
ChangeThemeStyle(context, themeStyleName: "Light");
break;
case ThemeStyle.Dark:
ChangeThemeStyle(context, themeStyleName: "Dark");
break;
}
}
private void ChangeThemeStyle(ProjectBuildContext context, string themeStyleName)
{
var defaultThemeStyleName = "LeptonXStyleNames.Dim";
var newThemeStyleName = $"LeptonXStyleNames.{themeStyleName}";
var filePaths = new List<string>
{
"/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs",
"/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs",
"/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs",
"/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs",
"/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs",
"/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs",
"/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameModule.cs",
"/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyProjectNameModule.cs",
"/MyCompanyName.MyProjectName.Host/MyProjectNameModule.cs",
"/MyCompanyName.MyProjectName.Host.Mongo/MyProjectNameModule.cs",
"/MyCompanyName.MyProjectName.Mvc/MyProjectNameModule.cs",
"/MyCompanyName.MyProjectName.Mvc.Mongo/MyProjectNameModule.cs",
"/MyCompanyName.MyProjectName.Blazor.Server.Tiered/MyProjectNameBlazorModule.cs",
"/MyCompanyName.MyProjectName.AuthServer/MyProjectNameAuthServerModule.cs",
};
foreach(var filePath in filePaths)
{
ChangeThemeStyleName(context, filePath, defaultThemeStyleName, newThemeStyleName);
}
}
protected void ChangeThemeStyleName(ProjectBuildContext context, string filePath, string oldThemeStyleName, string newThemeStyleName)
{
var file = context.Files.FirstOrDefault(x => x.Name.Contains(filePath));
if (file == null)
{
return;
}
file.NormalizeLineEndings();
var lines = file.GetLines();
for (var i = 0; i < lines.Length; i++)
{
if (lines[i].Contains(oldThemeStyleName))
{
lines[i] = lines[i].Replace(oldThemeStyleName, newThemeStyleName);
}
}
file.SetLines(lines);
}
}

2
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveDependencyFromPackageJsonFileStep.cs

@ -17,7 +17,7 @@ public class RemoveDependencyFromPackageJsonFileStep : ProjectBuildPipelineStep
public override void Execute(ProjectBuildContext context) public override void Execute(ProjectBuildContext context)
{ {
var packageJsonFile = context.Files.FirstOrDefault(f => f.Name == _packageJsonFilePath); var packageJsonFile = context.Files.FirstOrDefault(f => f.Name.Contains(_packageJsonFilePath));
if (packageJsonFile == null) if (packageJsonFile == null)
{ {

9
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Theme.cs

@ -1,7 +1,10 @@
namespace Volo.Abp.Cli.ProjectBuilding.Building; namespace Volo.Abp.Cli.ProjectBuilding.Building;
public enum Theme public enum Theme : byte
{ {
LeptonXLite = 0, NotSpecified = 0,
Basic = 1 Basic = 1,
Lepton = 2,
LeptonXLite = 3,
LeptonX = 4
} }

8
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/ThemeStyle.cs

@ -0,0 +1,8 @@
namespace Volo.Abp.Cli.ProjectBuilding.Building;
public enum ThemeStyle : byte
{
NotSpecified = 0,
Dim = 1,
Light = 2,
Dark = 3
}

6
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ProjectBuildArgs.cs

@ -44,6 +44,8 @@ public class ProjectBuildArgs
public Theme? Theme { get; set; } public Theme? Theme { get; set; }
public ThemeStyle? ThemeStyle { get; set; }
[NotNull] [NotNull]
public Dictionary<string, string> ExtraProperties { get; set; } public Dictionary<string, string> ExtraProperties { get; set; }
@ -63,7 +65,8 @@ public class ProjectBuildArgs
Dictionary<string, string> extraProperties = null, Dictionary<string, string> extraProperties = null,
[CanBeNull] string connectionString = null, [CanBeNull] string connectionString = null,
bool pwa = false, bool pwa = false,
Theme? theme = null) Theme? theme = null,
ThemeStyle? themeStyle = null)
{ {
SolutionName = Check.NotNull(solutionName, nameof(solutionName)); SolutionName = Check.NotNull(solutionName, nameof(solutionName));
TemplateName = templateName; TemplateName = templateName;
@ -81,5 +84,6 @@ public class ProjectBuildArgs
ConnectionString = connectionString; ConnectionString = connectionString;
Pwa = pwa; Pwa = pwa;
Theme = theme; Theme = theme;
ThemeStyle = themeStyle;
} }
} }

6
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppNoLayersProTemplate.cs

@ -1,4 +1,6 @@
namespace Volo.Abp.Cli.ProjectBuilding.Templates.App; using Volo.Abp.Cli.ProjectBuilding.Building;
namespace Volo.Abp.Cli.ProjectBuilding.Templates.App;
public class AppNoLayersProTemplate : AppNoLayersTemplateBase public class AppNoLayersProTemplate : AppNoLayersTemplateBase
{ {
@ -6,6 +8,8 @@ public class AppNoLayersProTemplate : AppNoLayersTemplateBase
/// "app-nolayers-pro". /// "app-nolayers-pro".
/// </summary> /// </summary>
public const string TemplateName = "app-nolayers-pro"; public const string TemplateName = "app-nolayers-pro";
public const Theme DefaultTheme = Theme.LeptonX;
public AppNoLayersProTemplate() public AppNoLayersProTemplate()
: base(TemplateName) : base(TemplateName)

6
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppNoLayersTemplate.cs

@ -1,4 +1,6 @@
namespace Volo.Abp.Cli.ProjectBuilding.Templates.App; using Volo.Abp.Cli.ProjectBuilding.Building;
namespace Volo.Abp.Cli.ProjectBuilding.Templates.App;
public class AppNoLayersTemplate : AppNoLayersTemplateBase public class AppNoLayersTemplate : AppNoLayersTemplateBase
{ {
@ -7,6 +9,8 @@ public class AppNoLayersTemplate : AppNoLayersTemplateBase
/// </summary> /// </summary>
public const string TemplateName = "app-nolayers"; public const string TemplateName = "app-nolayers";
public const Theme DefaultTheme = Theme.LeptonXLite;
public AppNoLayersTemplate() public AppNoLayersTemplate()
: base(TemplateName) : base(TemplateName)
{ {

6
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppProTemplate.cs

@ -1,4 +1,6 @@
namespace Volo.Abp.Cli.ProjectBuilding.Templates.App; using Volo.Abp.Cli.ProjectBuilding.Building;
namespace Volo.Abp.Cli.ProjectBuilding.Templates.App;
public class AppProTemplate : AppTemplateBase public class AppProTemplate : AppTemplateBase
{ {
@ -6,6 +8,8 @@ public class AppProTemplate : AppTemplateBase
/// "app-pro". /// "app-pro".
/// </summary> /// </summary>
public const string TemplateName = "app-pro"; public const string TemplateName = "app-pro";
public const Theme DefaultTheme = Theme.LeptonX;
public AppProTemplate() public AppProTemplate()
: base(TemplateName) : base(TemplateName)

6
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplate.cs

@ -1,4 +1,6 @@
namespace Volo.Abp.Cli.ProjectBuilding.Templates.App; using Volo.Abp.Cli.ProjectBuilding.Building;
namespace Volo.Abp.Cli.ProjectBuilding.Templates.App;
public class AppTemplate : AppTemplateBase public class AppTemplate : AppTemplateBase
{ {
@ -6,6 +8,8 @@ public class AppTemplate : AppTemplateBase
/// "app". /// "app".
/// </summary> /// </summary>
public const string TemplateName = "app"; public const string TemplateName = "app";
public const Theme DefaultTheme = Theme.LeptonXLite;
public AppTemplate() public AppTemplate()
: base(TemplateName) : base(TemplateName)

73
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs

@ -1,9 +1,11 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using NuGet.Versioning; using NuGet.Versioning;
using Volo.Abp.Cli.Commands; using Volo.Abp.Cli.Commands;
using Volo.Abp.Cli.ProjectBuilding.Building; using Volo.Abp.Cli.ProjectBuilding.Building;
using Volo.Abp.Cli.ProjectBuilding.Building.Steps; using Volo.Abp.Cli.ProjectBuilding.Building.Steps;
using Volo.Abp.Cli.ProjectBuilding.Templates.Microservice;
namespace Volo.Abp.Cli.ProjectBuilding.Templates.App; namespace Volo.Abp.Cli.ProjectBuilding.Templates.App;
@ -183,55 +185,76 @@ public abstract class AppTemplateBase : TemplateInfo
{ {
return; return;
} }
if (context.BuildArgs.Theme != Theme.LeptonXLite) if (context.BuildArgs.Theme == Theme.LeptonX)
{ {
steps.Add(new ChangeThemeStep()); context.Symbols.Add("LEPTONX");
RemoveLeptonXThemePackagesFromPackageJsonFiles(steps); steps.Add(new ChangeThemeStyleStep());
} }
if (IsDefaultThemeForTemplate(context.BuildArgs.Theme.Value))
{
return;
}
steps.Add(new ChangeThemeStep());
RemoveLeptonXThemePackagesFromPackageJsonFiles(steps, isProTemplate: IsPro());
} }
private void RemoveLeptonXThemePackagesFromPackageJsonFiles(List<ProjectBuildPipelineStep> steps) private static bool IsDefaultThemeForTemplate(Theme theme)
{ {
var packageJsonFilePaths = new List<string>() var defaultThemesForTemplates = new[]
{ {
"/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json", AppTemplate.DefaultTheme, AppProTemplate.DefaultTheme,
"/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json", AppNoLayersTemplate.DefaultTheme, AppNoLayersProTemplate.DefaultTheme
"/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json", };
"/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/package.json",
"/aspnet-core/MyCompanyName.MyProjectName.Mvc/package.json", return defaultThemesForTemplates.Any(defaultTheme => defaultTheme == theme);
"/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/package.json", }
"/aspnet-core/MyCompanyName.MyProjectName.Host/package.json",
"/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/package.json", private static void RemoveLeptonXThemePackagesFromPackageJsonFiles(List<ProjectBuildPipelineStep> steps, bool isProTemplate)
{
var packageJsonFilePaths = new List<string>
{
"/MyCompanyName.MyProjectName.Web/package.json",
"/MyCompanyName.MyProjectName.Web.Host/package.json",
"/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json",
"/MyCompanyName.MyProjectName.AuthServer/package.json",
"/MyCompanyName.MyProjectName/package.json",
"/MyCompanyName.MyProjectName.Host/package.json",
"/MyCompanyName.MyProjectName.Host.Mongo/package.json"
}; };
var blazorServerPackageJsonFilePaths = new List<string>() var blazorServerPackageJsonFilePaths = new List<string>
{ {
"/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/package.json", "/MyCompanyName.MyProjectName.Blazor.Server/package.json",
"/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/package.json", "/MyCompanyName.MyProjectName.Blazor.Server.Tiered/package.json",
"/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/package.json", "/MyCompanyName.MyProjectName.Blazor.Server.Mongo/package.json"
"/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/package.json"
}; };
var angularPackageJsonFilePaths = new List<string>() var angularPackageJsonFilePaths = new List<string>
{ {
"/angular/package.json" "/angular/package.json"
}; };
var mvcUiPackageName = isProTemplate ? "@volo/abp.aspnetcore.mvc.ui.theme.leptonx" : "@abp/aspnetcore.mvc.ui.theme.leptonxlite";
var blazorServerUiPackageName = isProTemplate ? "@volo/aspnetcore.components.server.leptonxtheme" : "@abp/aspnetcore.components.server.leptonxlitetheme";
var ngUiPackageName = isProTemplate ? "@volosoft/abp.ng.theme.lepton-x" : "@abp/ng.theme.lepton-x";
foreach (var packageJsonFilePath in packageJsonFilePaths) foreach (var packageJsonFilePath in packageJsonFilePaths)
{ {
steps.Add(new RemoveDependencyFromPackageJsonFileStep(packageJsonFilePath, "@abp/aspnetcore.mvc.ui.theme.leptonxlite")); steps.Add(new RemoveDependencyFromPackageJsonFileStep(packageJsonFilePath, mvcUiPackageName));
} }
foreach (var blazorServerPackageJsonFilePath in blazorServerPackageJsonFilePaths) foreach (var blazorServerPackageJsonFilePath in blazorServerPackageJsonFilePaths)
{ {
steps.Add(new RemoveDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, "@abp/aspnetcore.mvc.ui.theme.leptonxlite")); steps.Add(new RemoveDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, mvcUiPackageName));
steps.Add(new RemoveDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, "@abp/aspnetcore.components.server.leptonxlitetheme")); steps.Add(new RemoveDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, blazorServerUiPackageName));
} }
foreach (var angularPackageJsonFilePath in angularPackageJsonFilePaths) foreach (var angularPackageJsonFilePath in angularPackageJsonFilePaths)
{ {
steps.Add(new RemoveDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, "@abp/ng.theme.lepton-x")); steps.Add(new RemoveDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, ngUiPackageName));
steps.Add(new RemoveDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, "bootstrap-icons")); steps.Add(new RemoveDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, "bootstrap-icons"));
} }
} }

6
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Microservice/MicroserviceProTemplate.cs

@ -1,4 +1,6 @@
namespace Volo.Abp.Cli.ProjectBuilding.Templates.Microservice; using Volo.Abp.Cli.ProjectBuilding.Building;
namespace Volo.Abp.Cli.ProjectBuilding.Templates.Microservice;
public class MicroserviceProTemplate : MicroserviceTemplateBase public class MicroserviceProTemplate : MicroserviceTemplateBase
{ {
@ -7,6 +9,8 @@ public class MicroserviceProTemplate : MicroserviceTemplateBase
/// </summary> /// </summary>
public const string TemplateName = "microservice-pro"; public const string TemplateName = "microservice-pro";
public const Theme DefaultTheme = Theme.LeptonX;
public MicroserviceProTemplate() public MicroserviceProTemplate()
: base(TemplateName) : base(TemplateName)
{ {

59
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Microservice/MicroserviceTemplateBase.cs

@ -24,9 +24,68 @@ public abstract class MicroserviceTemplateBase : TemplateInfo
DeleteUnrelatedProjects(context, steps); DeleteUnrelatedProjects(context, steps);
RandomizeStringEncryption(context, steps); RandomizeStringEncryption(context, steps);
UpdateNuGetConfig(context, steps); UpdateNuGetConfig(context, steps);
ConfigureTheme(context, steps);
return steps; return steps;
} }
protected void ConfigureTheme(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps)
{
if (!context.BuildArgs.Theme.HasValue)
{
return;
}
if (context.BuildArgs.Theme == Theme.LeptonX)
{
context.Symbols.Add("LEPTONX");
steps.Add(new ChangeThemeStyleStep());
return;
}
steps.Add(new ChangeThemeStep());
RemoveLeptonXThemePackagesFromPackageJsonFiles(steps);
}
private static void RemoveLeptonXThemePackagesFromPackageJsonFiles(List<ProjectBuildPipelineStep> steps)
{
var packageJsonFilePaths = new List<string>
{
"/MyCompanyName.MyProjectName.AuthServer/package.json",
"/MyCompanyName.MyProjectName.Web/package.json"
};
var blazorServerPackageJsonFilePaths = new List<string>
{
"/MyCompanyName.MyProjectName.Blazor.Server/package.json"
};
var angularPackageJsonFilePaths = new List<string>
{
"/angular/package.json"
};
var mvcUiPackageName = "@volo/abp.aspnetcore.mvc.ui.theme.leptonx";
var blazorServerUiPackageName = "@volo/aspnetcore.components.server.leptonxtheme";
var ngUiPackageName = "@volosoft/abp.ng.theme.lepton-x";
foreach (var packageJsonFilePath in packageJsonFilePaths)
{
steps.Add(new RemoveDependencyFromPackageJsonFileStep(packageJsonFilePath, mvcUiPackageName));
}
foreach (var blazorServerPackageJsonFilePath in blazorServerPackageJsonFilePaths)
{
steps.Add(new RemoveDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, mvcUiPackageName));
steps.Add(new RemoveDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, blazorServerUiPackageName));
}
foreach (var angularPackageJsonFilePath in angularPackageJsonFilePaths)
{
steps.Add(new RemoveDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, ngUiPackageName));
steps.Add(new RemoveDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, "bootstrap-icons"));
}
}
private static void DeleteUnrelatedProjects(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps) private static void DeleteUnrelatedProjects(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps)
{ {

6
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ExceptionMessageHelper.cs

@ -0,0 +1,6 @@
namespace Volo.Abp.Cli.Utils;
public static class ExceptionMessageHelper
{
public static string GetInvalidOptionExceptionMessage(string optionName) => $"The option you provided for {optionName} is invalid!";
}
Loading…
Cancel
Save