Skip to content

Commit 7e892f0

Browse files
committed
Add library author and project sorting (#18)
1 parent bd43ac8 commit 7e892f0

15 files changed

Lines changed: 137 additions & 2 deletions

File tree

src/PrompterOne.Shared/Contracts/UiTestIds.Library.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ public static class Library
2828
public const string SortDuration = "library-sort-duration";
2929
public const string SortName = "library-sort-name";
3030
public const string SortWpm = "library-sort-wpm";
31+
public const string SortAuthor = "library-sort-author";
32+
public const string SortProject = "library-sort-project";
3133
public const string ToneMetadataToggle = "library-tone-metadata-toggle";
34+
public const string CardsGrid = "library-cards-grid";
3235

3336
public static string BreadcrumbCurrent(string folderId) => $"library-breadcrumb-{folderId}";
3437

src/PrompterOne.Shared/Library/Components/LibraryCardsGrid.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
@using PrompterOne.Shared.Localization
55
@inject IStringLocalizer<SharedResource> Localizer
66

7-
<div class="dcards-grid">
7+
<div class="dcards-grid" data-test="@UiTestIds.Library.CardsGrid">
88
@foreach (var card in Cards)
99
{
1010
<LibraryScriptCard Card="@card"

src/PrompterOne.Shared/Library/Components/LibrarySortMode.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,7 @@ public enum LibrarySortMode
55
Name,
66
Date,
77
Duration,
8-
Wpm
8+
Wpm,
9+
Author,
10+
Project
911
}

src/PrompterOne.Shared/Library/Pages/LibraryPage.ViewState.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,30 @@ private IEnumerable<LibraryCardViewModel> SortCards(IEnumerable<LibraryCardViewM
8080
LibrarySortMode.Date => cards.OrderByDescending(card => card.UpdatedAt),
8181
LibrarySortMode.Duration => cards.OrderByDescending(card => card.Duration),
8282
LibrarySortMode.Wpm => cards.OrderByDescending(card => card.AverageWpm),
83+
LibrarySortMode.Author => cards
84+
.OrderBy(card => card.Author, StringComparer.OrdinalIgnoreCase)
85+
.ThenBy(card => card.Title, StringComparer.OrdinalIgnoreCase),
86+
LibrarySortMode.Project => cards
87+
.OrderBy(card => ResolveProjectSortLabel(card), StringComparer.OrdinalIgnoreCase)
88+
.ThenBy(card => card.Title, StringComparer.OrdinalIgnoreCase),
8389
_ => cards
8490
.OrderBy(card => card.DisplayOrder)
8591
.ThenBy(card => card.Title, StringComparer.OrdinalIgnoreCase)
8692
};
8793

94+
private string ResolveProjectSortLabel(LibraryCardViewModel card)
95+
{
96+
if (string.IsNullOrWhiteSpace(card.FolderId))
97+
{
98+
return string.Empty;
99+
}
100+
101+
return _folders
102+
.FirstOrDefault(folder => string.Equals(folder.Id, card.FolderId, StringComparison.Ordinal))
103+
?.Name
104+
?? string.Empty;
105+
}
106+
88107
private string? GetSortClass(LibrarySortMode sortMode) => _sortMode == sortMode ? "active" : null;
89108

90109
private string ResolveSelectedFolderLabel()

src/PrompterOne.Shared/Library/Pages/LibraryPage.razor

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,14 @@
3737
@onclick="() => SetSortMode(LibrarySortMode.Wpm)"
3838
data-active="@(GetSortModeState(LibrarySortMode.Wpm))"
3939
data-test="@UiTestIds.Library.SortWpm">@Text(UiTextKey.LibrarySortWpm)</button>
40+
<button class="sort-btn @GetSortClass(LibrarySortMode.Author)"
41+
@onclick="() => SetSortMode(LibrarySortMode.Author)"
42+
data-active="@(GetSortModeState(LibrarySortMode.Author))"
43+
data-test="@UiTestIds.Library.SortAuthor">@Text(UiTextKey.LibrarySortAuthor)</button>
44+
<button class="sort-btn @GetSortClass(LibrarySortMode.Project)"
45+
@onclick="() => SetSortMode(LibrarySortMode.Project)"
46+
data-active="@(GetSortModeState(LibrarySortMode.Project))"
47+
data-test="@UiTestIds.Library.SortProject">@Text(UiTextKey.LibrarySortProject)</button>
4048
<button class="sort-btn tone-toggle @(_showToneMetadata ? "active" : null)"
4149
type="button"
4250
aria-pressed="@(_showToneMetadata ? "true" : "false")"

src/PrompterOne.Shared/Localization/SharedResource.de.resx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,12 @@
105105
<data name="LibrarySortWpm" xml:space="preserve">
106106
<value>WPM</value>
107107
</data>
108+
<data name="LibrarySortAuthor" xml:space="preserve">
109+
<value>Autor</value>
110+
</data>
111+
<data name="LibrarySortProject" xml:space="preserve">
112+
<value>Projekt</value>
113+
</data>
108114
<data name="LibraryToneMetadata" xml:space="preserve">
109115
<value>Ton</value>
110116
</data>

src/PrompterOne.Shared/Localization/SharedResource.es.resx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,12 @@
105105
<data name="LibrarySortWpm" xml:space="preserve">
106106
<value>PPM</value>
107107
</data>
108+
<data name="LibrarySortAuthor" xml:space="preserve">
109+
<value>Autor</value>
110+
</data>
111+
<data name="LibrarySortProject" xml:space="preserve">
112+
<value>Proyecto</value>
113+
</data>
108114
<data name="LibraryToneMetadata" xml:space="preserve">
109115
<value>Tono</value>
110116
</data>

src/PrompterOne.Shared/Localization/SharedResource.fr.resx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,12 @@
105105
<data name="LibrarySortWpm" xml:space="preserve">
106106
<value>MPM</value>
107107
</data>
108+
<data name="LibrarySortAuthor" xml:space="preserve">
109+
<value>Auteur</value>
110+
</data>
111+
<data name="LibrarySortProject" xml:space="preserve">
112+
<value>Projet</value>
113+
</data>
108114
<data name="LibraryToneMetadata" xml:space="preserve">
109115
<value>Ton</value>
110116
</data>

src/PrompterOne.Shared/Localization/SharedResource.it.resx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,12 @@
105105
<data name="LibrarySortWpm" xml:space="preserve">
106106
<value>PPM</value>
107107
</data>
108+
<data name="LibrarySortAuthor" xml:space="preserve">
109+
<value>Autore</value>
110+
</data>
111+
<data name="LibrarySortProject" xml:space="preserve">
112+
<value>Progetto</value>
113+
</data>
108114
<data name="LibraryToneMetadata" xml:space="preserve">
109115
<value>Tono</value>
110116
</data>

src/PrompterOne.Shared/Localization/SharedResource.pt.resx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,12 @@
105105
<data name="LibrarySortWpm" xml:space="preserve">
106106
<value>PPM</value>
107107
</data>
108+
<data name="LibrarySortAuthor" xml:space="preserve">
109+
<value>Autor</value>
110+
</data>
111+
<data name="LibrarySortProject" xml:space="preserve">
112+
<value>Projeto</value>
113+
</data>
108114
<data name="LibraryToneMetadata" xml:space="preserve">
109115
<value>Tom</value>
110116
</data>

0 commit comments

Comments
 (0)