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);
}
var theme = uiFramework == UiFramework.None ? (Theme?)null : GetTheme(commandLineArgs);
var theme = uiFramework == UiFramework.None ? (Theme?)null : GetThemeByTemplateOrNull(commandLineArgs, template);
if (theme.HasValue)
{
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);
if (publicWebSite)
{
@ -221,7 +227,8 @@ public abstract class ProjectCreationCommandBase
commandLineArgs.Options,
connectionString,
pwa,
theme
theme,
themeStyle
);
}
@ -360,7 +367,7 @@ public abstract class ProjectCreationCommandBase
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)
@ -471,7 +478,7 @@ public abstract class ProjectCreationCommandBase
case "oracle":
return DatabaseManagementSystem.Oracle;
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":
return MobileApp.ReactNative;
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":
return UiFramework.BlazorServer;
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);
switch (optionValue)
var theme = commandLineArgs.Options.GetOrNull(Options.Theme.Long)?.ToLower();
return template switch
{
case null:
case "leptonx-lite":
return Theme.LeptonXLite;
case "basic":
return Theme.Basic;
default:
throw new CliUsageException("The option you provided for Theme is invalid!");
AppTemplate.TemplateName or AppNoLayersTemplate.TemplateName => GetAppTheme(),
AppProTemplate.TemplateName or AppNoLayersProTemplate.TemplateName or MicroserviceProTemplate.TemplateName => GetAppProTheme(),
_ => null
};
Theme GetAppTheme()
{
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)
@ -546,6 +589,15 @@ public abstract class ProjectCreationCommandBase
case Theme.Basic:
ConfigureNpmPackagesForBasicTheme(projectArgs);
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);
}
}
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
{
@ -669,5 +740,10 @@ public abstract class ProjectCreationCommandBase
{
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)
{
var packageJsonFile = context.Files.FirstOrDefault(f => f.Name == _packageJsonFilePath);
var packageJsonFile = context.Files.FirstOrDefault(f => f.Name.Contains(_packageJsonFilePath));
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;
public enum Theme
public enum Theme : byte
{
LeptonXLite = 0,
Basic = 1
NotSpecified = 0,
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 ThemeStyle? ThemeStyle { get; set; }
[NotNull]
public Dictionary<string, string> ExtraProperties { get; set; }
@ -63,7 +65,8 @@ public class ProjectBuildArgs
Dictionary<string, string> extraProperties = null,
[CanBeNull] string connectionString = null,
bool pwa = false,
Theme? theme = null)
Theme? theme = null,
ThemeStyle? themeStyle = null)
{
SolutionName = Check.NotNull(solutionName, nameof(solutionName));
TemplateName = templateName;
@ -81,5 +84,6 @@ public class ProjectBuildArgs
ConnectionString = connectionString;
Pwa = pwa;
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
{
@ -6,6 +8,8 @@ public class AppNoLayersProTemplate : AppNoLayersTemplateBase
/// "app-nolayers-pro".
/// </summary>
public const string TemplateName = "app-nolayers-pro";
public const Theme DefaultTheme = Theme.LeptonX;
public AppNoLayersProTemplate()
: 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
{
@ -7,6 +9,8 @@ public class AppNoLayersTemplate : AppNoLayersTemplateBase
/// </summary>
public const string TemplateName = "app-nolayers";
public const Theme DefaultTheme = Theme.LeptonXLite;
public AppNoLayersTemplate()
: 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
{
@ -6,6 +8,8 @@ public class AppProTemplate : AppTemplateBase
/// "app-pro".
/// </summary>
public const string TemplateName = "app-pro";
public const Theme DefaultTheme = Theme.LeptonX;
public AppProTemplate()
: 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
{
@ -6,6 +8,8 @@ public class AppTemplate : AppTemplateBase
/// "app".
/// </summary>
public const string TemplateName = "app";
public const Theme DefaultTheme = Theme.LeptonXLite;
public AppTemplate()
: 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.Collections.Generic;
using System.Linq;
using NuGet.Versioning;
using Volo.Abp.Cli.Commands;
using Volo.Abp.Cli.ProjectBuilding.Building;
using Volo.Abp.Cli.ProjectBuilding.Building.Steps;
using Volo.Abp.Cli.ProjectBuilding.Templates.Microservice;
namespace Volo.Abp.Cli.ProjectBuilding.Templates.App;
@ -183,55 +185,76 @@ public abstract class AppTemplateBase : TemplateInfo
{
return;
}
if (context.BuildArgs.Theme != Theme.LeptonXLite)
if (context.BuildArgs.Theme == Theme.LeptonX)
{
steps.Add(new ChangeThemeStep());
RemoveLeptonXThemePackagesFromPackageJsonFiles(steps);
context.Symbols.Add("LEPTONX");
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>()
{
"/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json",
"/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json",
"/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json",
"/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/package.json",
"/aspnet-core/MyCompanyName.MyProjectName.Mvc/package.json",
"/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/package.json",
"/aspnet-core/MyCompanyName.MyProjectName.Host/package.json",
"/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/package.json",
var defaultThemesForTemplates = new[]
{
AppTemplate.DefaultTheme, AppProTemplate.DefaultTheme,
AppNoLayersTemplate.DefaultTheme, AppNoLayersProTemplate.DefaultTheme
};
return defaultThemesForTemplates.Any(defaultTheme => defaultTheme == theme);
}
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",
"/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/package.json",
"/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/package.json",
"/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/package.json"
"/MyCompanyName.MyProjectName.Blazor.Server/package.json",
"/MyCompanyName.MyProjectName.Blazor.Server.Tiered/package.json",
"/MyCompanyName.MyProjectName.Blazor.Server.Mongo/package.json"
};
var angularPackageJsonFilePaths = new List<string>()
var angularPackageJsonFilePaths = new List<string>
{
"/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)
{
steps.Add(new RemoveDependencyFromPackageJsonFileStep(packageJsonFilePath, "@abp/aspnetcore.mvc.ui.theme.leptonxlite"));
steps.Add(new RemoveDependencyFromPackageJsonFileStep(packageJsonFilePath, mvcUiPackageName));
}
foreach (var blazorServerPackageJsonFilePath in blazorServerPackageJsonFilePaths)
{
steps.Add(new RemoveDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, "@abp/aspnetcore.mvc.ui.theme.leptonxlite"));
steps.Add(new RemoveDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, "@abp/aspnetcore.components.server.leptonxlitetheme"));
steps.Add(new RemoveDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, mvcUiPackageName));
steps.Add(new RemoveDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, blazorServerUiPackageName));
}
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"));
}
}

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
{
@ -7,6 +9,8 @@ public class MicroserviceProTemplate : MicroserviceTemplateBase
/// </summary>
public const string TemplateName = "microservice-pro";
public const Theme DefaultTheme = Theme.LeptonX;
public MicroserviceProTemplate()
: 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);
RandomizeStringEncryption(context, steps);
UpdateNuGetConfig(context, steps);
ConfigureTheme(context, 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)
{

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