Skip to content

Commit 00c4af9

Browse files
committed
Add library tone metadata toggle (#15)
1 parent 2ca6e8c commit 00c4af9

18 files changed

Lines changed: 117 additions & 1 deletion

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ 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 ToneMetadataToggle = "library-tone-metadata-toggle";
3132

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

@@ -53,6 +54,8 @@ public static class Library
5354

5455
public static string CardSegmentCount(string scriptId) => $"library-card-segment-count-{scriptId}";
5556

57+
public static string CardTone(string scriptId) => $"library-card-tone-{scriptId}";
58+
5659
public static string CardWordCount(string scriptId) => $"library-card-word-count-{scriptId}";
5760

5861
public static string CardWpm(string scriptId) => $"library-card-wpm-{scriptId}";

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<LibraryScriptCard Card="@card"
1111
FolderOptions="@FolderOptions"
1212
OrganizationTerminology="OrganizationTerminology"
13+
ShowToneMetadata="ShowToneMetadata"
1314
IsMenuOpen="@IsCardMenuOpen(card.Id)"
1415
OnCardClick="@(() => HandleCardClickAsync(card.Id))"
1516
OnDeleteScript="@(() => HandleDeleteScriptAsync(card.Id))"
@@ -61,6 +62,8 @@
6162
[Parameter, EditorRequired] public LibraryOrganizationTerminology OrganizationTerminology { get; set; } =
6263
LibraryOrganizationTerminologyCatalog.Resolve(LibraryOrganizationMode.Folders);
6364

65+
[Parameter] public bool ShowToneMetadata { get; set; } = true;
66+
6467
[Parameter, EditorRequired] public EventCallback<string> OnOpenScript { get; set; }
6568

6669
[Parameter, EditorRequired] public EventCallback<string> OnDuplicateScript { get; set; }

‎src/PrompterOne.Shared/Library/Components/LibraryScriptCard.razor‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,10 @@
9797
<div class="dcover-orb dcover-orb2"></div>
9898
<h3 class="dcard-title">@Card.Title</h3>
9999
<div class="dcover-meta">
100-
<span class="dcover-emo">@Card.Emotion</span>
100+
@if (ShowToneMetadata)
101+
{
102+
<span class="dcover-emo" data-test="@UiTestIds.Library.CardTone(Card.Id)">@Card.Emotion</span>
103+
}
101104
<span>@Card.ModeLabel</span>
102105
<span data-test="@UiTestIds.Library.CardDuration(Card.Id)">@Card.DurationLabel</span>
103106
</div>
@@ -151,6 +154,7 @@
151154
[Parameter, EditorRequired] public IReadOnlyList<LibraryFolderOptionViewModel> FolderOptions { get; set; } = [];
152155
[Parameter, EditorRequired] public LibraryOrganizationTerminology OrganizationTerminology { get; set; } =
153156
LibraryOrganizationTerminologyCatalog.Resolve(LibraryOrganizationMode.Folders);
157+
[Parameter] public bool ShowToneMetadata { get; set; } = true;
154158
[Parameter] public bool IsMenuOpen { get; set; }
155159
[Parameter] public EventCallback OnCardClick { get; set; }
156160
[Parameter] public EventCallback OnDeleteScript { get; set; }

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ private async Task SetOrganizationMode(LibraryOrganizationMode mode)
1919
await PersistViewStateAsync();
2020
}
2121

22+
private async Task ToggleToneMetadataAsync()
23+
{
24+
_showToneMetadata = !_showToneMetadata;
25+
await PersistViewStateAsync();
26+
}
27+
2228
private void RebuildLibraryView()
2329
{
2430
_folderNodes = LibraryFolderTreeBuilder.BuildTree(_folders, _allCards, _selectedFolderId, _expandedFolderIds);
@@ -124,6 +130,7 @@ private async Task RestoreViewStateAsync()
124130
: storedState.SelectedFolderId;
125131
_sortMode = storedState.SortMode;
126132
_organizationMode = storedState.OrganizationMode;
133+
_showToneMetadata = storedState.ShowToneMetadata ?? true;
127134
_expandedFolderIds = storedState.ExpandedFolderIds
128135
.Where(folderId => !string.IsNullOrWhiteSpace(folderId))
129136
.ToHashSet(StringComparer.Ordinal);
@@ -135,6 +142,7 @@ private Task PersistViewStateAsync()
135142
SelectedFolderId: _selectedFolderId,
136143
SortMode: _sortMode,
137144
OrganizationMode: _organizationMode,
145+
ShowToneMetadata: _showToneMetadata,
138146
ExpandedFolderIds: _expandedFolderIds.OrderBy(value => value, StringComparer.Ordinal).ToArray());
139147

140148
return SettingsStore.SaveAsync(LibrarySettingsKey, state);

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,19 @@
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 tone-toggle @(_showToneMetadata ? "active" : null)"
41+
type="button"
42+
aria-pressed="@(_showToneMetadata ? "true" : "false")"
43+
@onclick="ToggleToneMetadataAsync"
44+
data-active="@(_showToneMetadata ? ActiveStateValue : InactiveStateValue)"
45+
data-test="@UiTestIds.Library.ToneMetadataToggle">@Text(UiTextKey.LibraryToneMetadata)</button>
4046
</div>
4147

4248
<LibraryCardsGrid Cards="_cards"
4349
DismissMenuRevision="_dismissCardMenuRevision"
4450
FolderOptions="_folderOptions"
4551
OrganizationTerminology="OrganizationTerminology"
52+
ShowToneMetadata="_showToneMetadata"
4653
OnOpenScript="OpenScriptAsync"
4754
OnDuplicateScript="DuplicateScriptAsync"
4855
OnMoveScript="MoveScriptAsync"

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public partial class LibraryPage : ComponentBase, IDisposable
4444
private string _selectedFolderId = LibrarySelectionKeys.All;
4545
private LibrarySortMode _sortMode = LibrarySortMode.Name;
4646
private LibraryOrganizationMode _organizationMode = LibraryOrganizationMode.Folders;
47+
private bool _showToneMetadata = true;
4748
private IReadOnlyList<StoredLibraryFolder> _folders = [];
4849
private IReadOnlyList<LibraryCardViewModel> _allCards = [];
4950
private IReadOnlyList<LibraryCardViewModel> _cards = [];

‎src/PrompterOne.Shared/Library/Services/LibraryViewState.cs‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ public sealed record LibraryViewState(
66
string SelectedFolderId,
77
LibrarySortMode SortMode,
88
LibraryOrganizationMode OrganizationMode,
9+
bool? ShowToneMetadata,
910
IReadOnlyList<string> ExpandedFolderIds)
1011
{
1112
public static LibraryViewState Default { get; } = new(
1213
SelectedFolderId: LibrarySelectionKeys.All,
1314
SortMode: LibrarySortMode.Name,
1415
OrganizationMode: LibraryOrganizationMode.Folders,
16+
ShowToneMetadata: true,
1517
ExpandedFolderIds: []);
1618
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,9 @@
105105
<data name="LibrarySortWpm" xml:space="preserve">
106106
<value>WPM</value>
107107
</data>
108+
<data name="LibraryToneMetadata" xml:space="preserve">
109+
<value>Ton</value>
110+
</data>
108111
<data name="LibraryCreateFolderTitle" xml:space="preserve">
109112
<value>Ordner erstellen</value>
110113
</data>

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,9 @@
105105
<data name="LibrarySortWpm" xml:space="preserve">
106106
<value>PPM</value>
107107
</data>
108+
<data name="LibraryToneMetadata" xml:space="preserve">
109+
<value>Tono</value>
110+
</data>
108111
<data name="LibraryCreateFolderTitle" xml:space="preserve">
109112
<value>Crear carpeta</value>
110113
</data>

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,9 @@
105105
<data name="LibrarySortWpm" xml:space="preserve">
106106
<value>MPM</value>
107107
</data>
108+
<data name="LibraryToneMetadata" xml:space="preserve">
109+
<value>Ton</value>
110+
</data>
108111
<data name="LibraryCreateFolderTitle" xml:space="preserve">
109112
<value>Créer un dossier</value>
110113
</data>

0 commit comments

Comments
 (0)