From 504d6495fc44df540e4dca4653e959dc27948510 Mon Sep 17 00:00:00 2001 From: Berkan Sasmaz Date: Wed, 22 Jun 2022 10:54:40 +0300 Subject: [PATCH] cli: add leptonx theme compatibility --- .../Commands/ProjectCreationCommandBase.cs | 50 +++++++++++++------ .../Abp/Cli/ProjectBuilding/Building/Theme.cs | 9 ++-- .../Templates/App/AppProTemplate.cs | 6 ++- .../Templates/App/AppTemplate.cs | 6 ++- .../Templates/App/AppTemplateBase.cs | 6 +-- .../Abp/Cli/Utils/ExceptionMessageHelper.cs | 30 +++++++++++ 6 files changed, 84 insertions(+), 23 deletions(-) create mode 100644 framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ExceptionMessageHelper.cs diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs index c422646337..469eba3089 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs @@ -98,7 +98,7 @@ 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 : GetTheme(commandLineArgs, template); if (theme.HasValue) { Logger.LogInformation("Theme: " + theme); @@ -329,7 +329,7 @@ public abstract class ProjectCreationCommandBase return DatabaseProvider.MongoDb; } - throw new CliUsageException("The option you provided for Database Provider is invalid!"); + throw new CliUsageException(ExceptionMessageHelper.GetInvalidArgExceptionMessage("Database Provider")); } protected virtual void RunGraphBuildForMicroserviceServiceTemplate(ProjectBuildArgs projectArgs) @@ -423,7 +423,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.GetInvalidArgExceptionMessage("Database Management System")); } } @@ -439,7 +439,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.GetInvalidArgExceptionMessage("Mobile App")); } } @@ -467,23 +467,43 @@ 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.GetInvalidArgExceptionMessage("UI Framework")); } } - protected virtual Theme GetTheme(CommandLineArgs commandLineArgs) + protected virtual Theme GetTheme(CommandLineArgs commandLineArgs, string template = "app") { - var optionValue = commandLineArgs.Options.GetOrNull(Options.Theme.Long); - switch (optionValue) + var theme = commandLineArgs.Options.GetOrNull(Options.Theme.Long); + theme = theme?.ToLower(); + + Theme GetAppTheme() { - 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!"); + return theme switch + { + null => AppTemplate.DefaultTheme, + "leptonx-lite" => Theme.LeptonXLite, + "basic" => Theme.Basic, + _ => Theme.NotSpecified + }; } + + Theme GetAppProTheme() + { + return theme switch + { + null => AppProTemplate.DefaultTheme, + "leptonx" => Theme.LeptonX, + "lepton" => Theme.Lepton, + _ => Theme.NotSpecified + }; + } + + return template switch + { + AppTemplate.TemplateName or null => GetAppTheme(), + AppProTemplate.TemplateName => GetAppProTheme(), + _ => throw new CliUsageException(ExceptionMessageHelper.GetInvalidArgExceptionMessage(Options.Theme.Long)) + }; } protected void ConfigureNpmPackagesForTheme(ProjectBuildArgs projectArgs) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Theme.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Theme.cs index bc2ba89589..1ef1c0da55 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Theme.cs +++ b/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 } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppProTemplate.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppProTemplate.cs index 25a4797f7d..d9f32ee834 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppProTemplate.cs +++ b/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". /// public const string TemplateName = "app-pro"; + + public const Theme DefaultTheme = Theme.LeptonX; public AppProTemplate() : base(TemplateName) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplate.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplate.cs index 8c533b1d94..ae9516f597 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplate.cs +++ b/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". /// public const string TemplateName = "app"; + + public const Theme DefaultTheme = Theme.LeptonXLite; public AppTemplate() : base(TemplateName) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs index 75441af295..2dc0d43da1 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs @@ -184,14 +184,14 @@ public abstract class AppTemplateBase : TemplateInfo return; } - if (context.BuildArgs.Theme != Theme.LeptonXLite) + if (context.BuildArgs.Theme != AppTemplate.DefaultTheme || context.BuildArgs.Theme != AppProTemplate.DefaultTheme) { steps.Add(new ChangeThemeStep()); - RemoveLeptonXThemePackagesFromPackageJsonFiles(steps); + RemoveLeptonXThemePackagesFromPackageJsonFiles(steps, context.BuildArgs.Theme.Value); } } - private void RemoveLeptonXThemePackagesFromPackageJsonFiles(List steps) + private void RemoveLeptonXThemePackagesFromPackageJsonFiles(List steps, Theme theme) { var packageJsonFilePaths = new List() { diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ExceptionMessageHelper.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ExceptionMessageHelper.cs new file mode 100644 index 0000000000..4274993cd1 --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ExceptionMessageHelper.cs @@ -0,0 +1,30 @@ +using System; +using System.Text; + +namespace Volo.Abp.Cli.Utils; + +public static class ExceptionMessageHelper +{ + public static string GetInvalidArgExceptionMessage(string args) + { + Check.NotNullOrEmpty(args, nameof(args), minLength: 2); + + var exceptionMessageBuilder = new StringBuilder(); + exceptionMessageBuilder.Append("The option you provided for "); + if (args.Contains(" ")) + { + foreach (var arg in args.Split(' ')) + { + exceptionMessageBuilder.Append(arg.ToPascalCase()); + } + } + else + { + exceptionMessageBuilder.Append(args.ToPascalCase()); + } + + exceptionMessageBuilder.Append(" is invalid!"); + + return exceptionMessageBuilder.ToString(); + } +} \ No newline at end of file