From f80a78f8cb32f10abc5912a61884a411bd7b3753 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=9A=D0=BE=D0=BB=D0=BE=D1=81=D0=BE=D0=B2?= <dnwSilver@gmail.com> Date: Mon, 1 Apr 2024 18:37:40 +0500 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Add=20title=20for=20project=20depen?= =?UTF-8?q?dency?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Domain/NewFile1.txt => docs/Features.txt | 66 +++++++++++++------ src/TUI.Engine/Components/Sketch.cs | 3 + src/TUI.Engine/SymbolExtensions.cs | 2 +- src/TUI.Engine/Symbols.cs | 2 +- src/TUI/Controls/Components/ProjectTitle.cs | 47 +++++++++++++ src/TUI/Controls/Components/Tag.cs | 61 ----------------- .../Controls/Containers/DashboardContainer.cs | 3 +- .../Containers/DependenciesContainer.cs | 3 +- src/TUI/Controls/Statics/Hints/TagHints.cs | 2 +- src/TUI/Domain/Hub.cs | 6 ++ src/TUI/Domain/Project.cs | 12 ++++ src/TUI/Pages/DependenciesPage.cs | 22 +++++-- .../Dependencies/DependencyRepository.cs | 20 +++++- src/TUI/Store/DependenciesStore.cs | 51 ++++++++------ src/TUI/TUI.csproj | 3 - src/TUI/UserInterface/Icons.cs | 2 +- 16 files changed, 186 insertions(+), 119 deletions(-) rename src/TUI/Domain/NewFile1.txt => docs/Features.txt (63%) create mode 100644 src/TUI/Controls/Components/ProjectTitle.cs delete mode 100644 src/TUI/Controls/Components/Tag.cs create mode 100644 src/TUI/Domain/Hub.cs create mode 100644 src/TUI/Domain/Project.cs diff --git a/src/TUI/Domain/NewFile1.txt b/docs/Features.txt similarity index 63% rename from src/TUI/Domain/NewFile1.txt rename to docs/Features.txt index e9fb9e2..49b2b06 100644 --- a/src/TUI/Domain/NewFile1.txt +++ b/docs/Features.txt @@ -9,35 +9,52 @@ be nice SEO site too old VCS api - wait build release - reopen testing hotfix - in progress done publish - review cancel - - releases Fact 2023 - releases Fact - releases Planned - releases Planned 2024-12-31 xfirm - competencies - growth zone - dependencies + releases Fact 2023 + releases Fact + releases Planned + releases Planned 2024-12-31 xfirm + competencies + growth zone + dependencies + tools + + + + wait build + reopen testing + in progress done + review cancel ┌──────────────────────────────────────────────────────────────────────── Planned release ─────────────────────────────────────────────────────────────────┐ -│ 2024-12-31 4/11 xfirm [############# ] //green - done, blue - test, pink review/build, orange WIP -│ 4/11 xfirm [###############.......] //green - done, blue - test, pink review/build -│ 2024-12-31 4/11 xfirm [###############.......] //green - done, blue - test, pink review/build -│ 2024-12-31 xfirm 4/11 [############..........] //green - done, blue - test, pink review/build -│ 2024-12-31 xfirm 4/11 [############..........] //green - done, blue - test, pink review/build -│ 2024-12-31 xfirm 4/11 [############..........] //green - done, blue - test, pink review/build -│ 2024-12-31 xfirm 4/11 [############..........] //green - done, blue - test, pink review/build -│ 2024-12-31 xfirm 4/11 [############..........] //green - done, blue - test, pink review/build +│ Planned application Tasks +│ 2024-12-31 1d elk-site 4/11 +│ elk-site 2/5 +│ elk-site 22/22 +│ 2024-12-31 12d xfirm 4/12 └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ + + + + + show stopper wait build feature + first of all reopen testing bug + just do it in progress done + doesn't rush review cancel + ┌──────────────────────────────────────────────────────────────────────── checkperson-site ────────────────────────────────────────────────────────────────┐ │ ELK-3628 Create new menu. Anna P. Petrov A. Ivanov I. │ XF-12 Change input hover. Alex K. Ivanov I. Petrov A., Petrov B. │ ELK-3628 Crete new project with menu, profile, issues and # Anna P. Ivanov I. Petrov A., Petrov B. └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ + + + + publish + release + hotfix + release candidate + ┌─────────────────────────────────────────────────────────────────────────── Actual releases 2023 ─────────────────────────────────────────────────────────┐ │ Jan Feb Mar Apl May Jun Jul Aug Sep Oct Nov Dec │ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ @@ -48,5 +65,12 @@ + GA4 Jaeger Fallback Screenshots Connected Auth +Я YM Prometheus Renovate End2End Disconnected WWW + Husky Sentry Lighthouse Unit Not implemented SEO + Probs Grafana Kibana Coverage No need - +┌─────────────────────────────────────────────────────────────────────────── Tools ──────────────────────────────────┐ +│ Я +│ elk-site +└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ diff --git a/src/TUI.Engine/Components/Sketch.cs b/src/TUI.Engine/Components/Sketch.cs index 6cd7da4..ed96902 100644 --- a/src/TUI.Engine/Components/Sketch.cs +++ b/src/TUI.Engine/Components/Sketch.cs @@ -1,3 +1,4 @@ +using System.Text; using TUI.Engine.Attributes; namespace TUI.Engine.Components; @@ -8,6 +9,8 @@ public sealed class Sketch : IEnumerable<string> public Sketch(string content) => ContentRows = content.Split(Symbols.LineBreak); + public Sketch(StringBuilder builder) => ContentRows = builder.ToString().Split(Symbols.LineBreak); + public IEnumerator<string> GetEnumerator() => ContentRows.GetEnumerator(); public IEnumerable<string> Crop(Size maxSize) => ContentRows diff --git a/src/TUI.Engine/SymbolExtensions.cs b/src/TUI.Engine/SymbolExtensions.cs index 86e6a65..9454063 100644 --- a/src/TUI.Engine/SymbolExtensions.cs +++ b/src/TUI.Engine/SymbolExtensions.cs @@ -18,7 +18,7 @@ public static class SymbolExtensions { Symbols.Api, "7F52FF" }, { Symbols.DockerImage, "086DD7" }, { Symbols.NpmPackage, "CB0000" }, - { Symbols.SEO, "4285F4" }, + { Symbols.Seo, "4285F4" }, { Symbols.Auth, "FFD700" }, }; } \ No newline at end of file diff --git a/src/TUI.Engine/Symbols.cs b/src/TUI.Engine/Symbols.cs index a96a98f..b88094e 100644 --- a/src/TUI.Engine/Symbols.cs +++ b/src/TUI.Engine/Symbols.cs @@ -15,7 +15,7 @@ public static class Symbols public const string Api = ""; public const string DockerImage = ""; public const string NpmPackage = ""; - public const string SEO = ""; + public const string Seo = ""; public const string Auth = ""; public const string NotFound = ""; diff --git a/src/TUI/Controls/Components/ProjectTitle.cs b/src/TUI/Controls/Components/ProjectTitle.cs new file mode 100644 index 0000000..2a75355 --- /dev/null +++ b/src/TUI/Controls/Components/ProjectTitle.cs @@ -0,0 +1,47 @@ +using System.Text; +using TUI.Domain; +using TUI.Engine; +using TUI.Engine.Attributes; +using TUI.Engine.Components; +using TUI.Engine.Theme; +using TUI.UserInterface; +using static TUI.Engine.Symbols; + +namespace TUI.Controls.Components; + +public class ProjectTitle : ComponentBase +{ + private readonly Project _project; + + public ProjectTitle(Project project) + { + _project = project; + } + + protected override Sketch DrawComponent(Size minSize) + { + var builder = new StringBuilder(); + builder.Append(GetHub().Colorized()); + builder.Append(Space); + builder.Append((_project.IsPublicNetwork ? NetworkPublic : NetworkPrivate).Colorized()); + builder.Append(Space); + builder.Append(_project.SeoDependent ? Seo.Colorized() : Seo.Disable()); + builder.Append(Space); + builder.Append(_project.HasAuth ? Auth.Colorized() : Auth.Disable()); + builder.Append(Space); + builder.Append(GetApplicationType().Colorized()); + builder.Append(Space); + builder.Append(_project.Name.Disable()); + return new Sketch(builder); + } + + private string GetHub() => _project.Hub == "gitlab" ? GitLab : GitHub; + + private string GetApplicationType() + { + foreach (var application in Icons.Applications.Where(application => _project.Tags.Have(application.Value))) + return application.Key; + + return Undefined.Hint(); + } +} \ No newline at end of file diff --git a/src/TUI/Controls/Components/Tag.cs b/src/TUI/Controls/Components/Tag.cs deleted file mode 100644 index 392064c..0000000 --- a/src/TUI/Controls/Components/Tag.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System.Text; -using TUI.Engine; -using TUI.Engine.Attributes; -using TUI.Engine.Attributes.Alignments; -using TUI.Engine.Components; -using TUI.Engine.Theme; -using TUI.UserInterface; - -namespace TUI.Controls.Components; - -public class Tag : ComponentBase -{ - private IEnumerable<string> _tags; - private string _gitType; - - public void Bind(IEnumerable<string> tags, string gitType) - { - _tags = tags; - _gitType = gitType; - } - - public void Render(Horizontal horizontal, Size size) - { - var tagBuilder = new StringBuilder(); - - tagBuilder.Append(GetGitTypeImage(_gitType)); - tagBuilder.Append(Symbols.Space); - tagBuilder.Append(_tags.Have("public") ? Symbols.NetworkPublic : Symbols.NetworkPrivate); - tagBuilder.Append(Symbols.Space); - tagBuilder.Append(_tags.Have("seo") ? Symbols.SEO : Symbols.SEO.Disable()); - tagBuilder.Append(Symbols.Space); - tagBuilder.Append(_tags.Have("auth") ? Symbols.Auth : Symbols.Auth.Disable()); - tagBuilder.Append(Symbols.Space); - tagBuilder.Append(GetApplicationType()); - tagBuilder.Append(Symbols.Space); - - // base.Render(tagBuilder, position, size); - } - - private string GetApplicationType() - { - foreach (var application in Icons.Applications) - if (_tags.Have(application.Value)) - return application.Key; - - return Symbols.Undefined; - } - - private static string GetGitTypeImage(string gitType) => - gitType switch - { - "gitlab" => Symbols.GitLab, - "github" => Symbols.GitHub, - _ => Symbols.Git - }; - - protected override Sketch DrawComponent(Size minSize) - { - throw new NotImplementedException(); - } -} \ No newline at end of file diff --git a/src/TUI/Controls/Containers/DashboardContainer.cs b/src/TUI/Controls/Containers/DashboardContainer.cs index e083c49..d2ab1d0 100644 --- a/src/TUI/Controls/Containers/DashboardContainer.cs +++ b/src/TUI/Controls/Containers/DashboardContainer.cs @@ -13,8 +13,7 @@ public class DashboardContainer : ContainerBase public DashboardContainer() { - // var panel = new PanelComponent("Dependencies ".Info() + Symbols.Node.Colorized()); - var panel = new PanelComponent("Dependencies".Info()); + var panel = new PanelComponent(" ".Info() + "Dependencies".Main()); _content = new ContentContainer(); _content.SetOrientationVertical(); SetOrientationVertical(); diff --git a/src/TUI/Controls/Containers/DependenciesContainer.cs b/src/TUI/Controls/Containers/DependenciesContainer.cs index 37b9c8f..a6be9db 100644 --- a/src/TUI/Controls/Containers/DependenciesContainer.cs +++ b/src/TUI/Controls/Containers/DependenciesContainer.cs @@ -14,7 +14,7 @@ namespace TUI.Controls.Containers; public class DependenciesContainer : ContainerBase { private const int VersionColumnWidth = 10; - private const int TitleColumnWidth = 20; + private const int TitleColumnWidth = 25; private readonly Nodes _dependencies = new(); @@ -31,6 +31,7 @@ public class DependenciesContainer : ContainerBase { title.SetPadding(Level.Normal); title.SetFixed(Orientation.Horizontal, TitleColumnWidth); + title.SetAlignment(Horizontal.Left); _dependencies.Add(title); } diff --git a/src/TUI/Controls/Statics/Hints/TagHints.cs b/src/TUI/Controls/Statics/Hints/TagHints.cs index 912c605..8ee1a95 100644 --- a/src/TUI/Controls/Statics/Hints/TagHints.cs +++ b/src/TUI/Controls/Statics/Hints/TagHints.cs @@ -11,7 +11,7 @@ public class TagHints : StaticComponentBase { { Symbols.Auth, "Auth" }, { Symbols.NetworkPublic, "WWW" }, - { Symbols.SEO, "SEO" }, + { Symbols.Seo, "SEO" }, { Symbols.Git, "VCS" } }; diff --git a/src/TUI/Domain/Hub.cs b/src/TUI/Domain/Hub.cs new file mode 100644 index 0000000..ff0a924 --- /dev/null +++ b/src/TUI/Domain/Hub.cs @@ -0,0 +1,6 @@ +namespace TUI.Domain; + +public record Hub +{ + +} \ No newline at end of file diff --git a/src/TUI/Domain/Project.cs b/src/TUI/Domain/Project.cs new file mode 100644 index 0000000..1764c0b --- /dev/null +++ b/src/TUI/Domain/Project.cs @@ -0,0 +1,12 @@ +namespace TUI.Domain; + +public record Project(int Id, string Name, IEnumerable<string> Tags, string Hub) +{ + private IEnumerable<Dependency> Dependencies => new List<Dependency>(); + + public bool IsPublicNetwork => Tags.Contains("public"); + + public bool HasAuth => Tags.Contains("auth"); + + public bool SeoDependent => Tags.Contains("seo"); +} \ No newline at end of file diff --git a/src/TUI/Pages/DependenciesPage.cs b/src/TUI/Pages/DependenciesPage.cs index bd1862a..aa2ecd1 100644 --- a/src/TUI/Pages/DependenciesPage.cs +++ b/src/TUI/Pages/DependenciesPage.cs @@ -1,10 +1,12 @@ using System.Diagnostics; +using TUI.Controls.Components; using TUI.Controls.Containers; using TUI.Controls.Layouts; using TUI.Controls.Statics; using TUI.Domain; using TUI.Engine.Rendering.Canvas; using TUI.Providers.Dependencies; +using TUI.Store; namespace TUI.Pages; @@ -31,7 +33,7 @@ public abstract class PageBase : IPage public class DependenciesPage : PageBase { - private IEnumerable<Dependency> ConventionDependencies; + private DependenciesStore _store; public override void Render() { @@ -43,23 +45,31 @@ public class DependenciesPage : PageBase var dependenciesHeader = new DependenciesContainer(); dependenciesHeader.AddTitleStub(); - foreach (var conventionDependency in ConventionDependencies) + foreach (var conventionDependency in _store.ConventionDependencies) { dependenciesHeader.AddDependency(conventionDependency); } dashboard.AddChildren(dependenciesHeader); - // CommandLine = new CommandLine(); - // DependenciesView = new DependenciesView(); + + foreach (var project in _store.Projects) + { + var projectDependencies = new DependenciesContainer(); + projectDependencies.AddTitle(new ProjectTitle(project)); + dashboard.AddChildren(projectDependencies); + } var layout = new DashboardLayout(header, dashboard, copyright); canvas.Draw(layout); + + // CommandLine = new CommandLine(); + // DependenciesView = new DependenciesView(); } public override void Bind() { - var repo = new DependencyRepository(); - ConventionDependencies = repo.Read("javascript"); + _store = new DependenciesStore(); + _store.Bind(); } // private bool _commandLineInDisplay; diff --git a/src/TUI/Providers/Dependencies/DependencyRepository.cs b/src/TUI/Providers/Dependencies/DependencyRepository.cs index 9b2845d..80d5c91 100644 --- a/src/TUI/Providers/Dependencies/DependencyRepository.cs +++ b/src/TUI/Providers/Dependencies/DependencyRepository.cs @@ -29,7 +29,7 @@ public class DependencyRepository } } - public IEnumerable<Dependency> Read(string stackName) + public IEnumerable<Dependency> ReadConventions(string stackName) { return DependenciesDto.Stacks .Single(stack => stack.Name == stackName) @@ -40,4 +40,22 @@ public class DependencyRepository return new Dependency(convention.Version, brand); }); } + + public IEnumerable<Project> ReadProjects(string stackName) + { + var projects = new List<Project>(); + + var hubs = DependenciesDto.Stacks + .Single(stack => stack.Name == stackName) + .Hubs; + + foreach (var hub in hubs) + { + projects.AddRange(hub + .Projects + .Select(proj => new Project(proj.Id, proj.Name, proj.Tags, hub.Type))); + } + + return projects; + } } \ No newline at end of file diff --git a/src/TUI/Store/DependenciesStore.cs b/src/TUI/Store/DependenciesStore.cs index d7f4388..e32d540 100644 --- a/src/TUI/Store/DependenciesStore.cs +++ b/src/TUI/Store/DependenciesStore.cs @@ -1,30 +1,41 @@ -using System.Text.Json; +using TUI.Domain; using TUI.Providers.Dependencies; namespace TUI.Store; -public static class DependenciesStore +public class DependenciesStore { - private readonly static Dictionary<string, Package> Packages = new(); + public IEnumerable<Dependency> ConventionDependencies; - private static Package DownloadPackage(ProjectDto projectDto) + public IEnumerable<Project> Projects; + + public void Bind() { - // var endpoint = projectDto.Tags.Have("gitlab") ? GetGitlabEndpoint(projectDto) : projectDto.Repo; - var endpoint = ""; - if (Packages.TryGetValue(endpoint, out var downloadPackage)) return downloadPackage; - - using HttpClient client = new(); - var json = client.GetStringAsync(endpoint).GetAwaiter().GetResult(); - var package = JsonSerializer.Deserialize<Package>(json); - Packages.Add(endpoint, package); - return package; + var repo = new DependencyRepository(); + ConventionDependencies = repo.ReadConventions("javascript"); + Projects = repo.ReadProjects("javascript"); } - private static string GetGitlabEndpoint(ProjectDto projectDto) - { - var token = Environment.GetEnvironmentVariable("TLD_GITLAB_PAT"); - // return $"{projectDto.Repo}/api/v4/projects/{projectDto.ProjectId}/repository/files/package.json/raw?" + - // $"private_token={token}&ref=dev"; - return ""; - } + // private readonly static Dictionary<string, Package> Packages = new(); + // + // private static Package DownloadPackage(ProjectDto projectDto) + // { + // // var endpoint = projectDto.Tags.Have("gitlab") ? GetGitlabEndpoint(projectDto) : projectDto.Repo; + // var endpoint = ""; + // if (Packages.TryGetValue(endpoint, out var downloadPackage)) return downloadPackage; + // + // using HttpClient client = new(); + // var json = client.GetStringAsync(endpoint).GetAwaiter().GetResult(); + // var package = JsonSerializer.Deserialize<Package>(json); + // Packages.Add(endpoint, package); + // return package; + // } + // + // private static string GetGitlabEndpoint(ProjectDto projectDto) + // { + // var token = Environment.GetEnvironmentVariable("TLD_GITLAB_PAT"); + // // return $"{projectDto.Repo}/api/v4/projects/{projectDto.ProjectId}/repository/files/package.json/raw?" + + // // $"private_token={token}&ref=dev"; + // return ""; + // } } \ No newline at end of file diff --git a/src/TUI/TUI.csproj b/src/TUI/TUI.csproj index f38e70b..8cf2073 100644 --- a/src/TUI/TUI.csproj +++ b/src/TUI/TUI.csproj @@ -30,8 +30,5 @@ <ItemGroup> <ProjectReference Include="..\TUI.Engine\TUI.Engine.csproj"/> </ItemGroup> - <ItemGroup> - <Folder Include="Settings\" /> - </ItemGroup> </Project> diff --git a/src/TUI/UserInterface/Icons.cs b/src/TUI/UserInterface/Icons.cs index e904383..1819575 100644 --- a/src/TUI/UserInterface/Icons.cs +++ b/src/TUI/UserInterface/Icons.cs @@ -10,7 +10,7 @@ public static class Icons { { Symbols.NpmPackage.Colorized(), "package" }, { Symbols.DockerImage.Colorized(), "image" }, - { Symbols.Site.Pastel("666666"), "site" }, + { Symbols.Site.Colorized(), "site" }, { Symbols.Api, "api" } }; } \ No newline at end of file