Counter.razor 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. @page "/counter"
  2. @using System.Text.Json;
  3. @using VeloeKemonoPartyApp.Data;
  4. @using VeloeKemonoPartyApp.Services;
  5. @inject KemonoHttpClient HttpClient
  6. <!--
  7. <h1>Hello, world!</h1>
  8. Welcome to your new app.
  9. <SurveyPrompt Title="How is Blazor working for you?" />
  10. -->
  11. <div class="text-center bg-blue-100">
  12. <input class="border-2 rounded border-blue-300" @bind-value="SearchText" @bind-value:event="oninput" placeholder="Search by title" />
  13. </div>
  14. @if (!CreatorList.Any())
  15. {
  16. if (Message != "")
  17. {
  18. <div class="p-2 grid grid-cols-1 sm:grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-3">
  19. <div class="alert alert-danger mt-4">
  20. <p>@Message</p>
  21. </div>
  22. </div>
  23. }
  24. else
  25. {
  26. <div class="p-2 grid grid-cols-1 sm:grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-3">
  27. <div class="alert alert-secondary mt-4">
  28. <p>Loading favorites list...</p>
  29. </div>
  30. </div>
  31. }
  32. }
  33. else
  34. {
  35. <div class="p-2 grid grid-cols-1 sm:grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-3">
  36. @foreach (var creator in FilteredCreators)
  37. {
  38. <div class="alert alert-secondary mt-4">
  39. <table style="width:100%;">
  40. <tr>
  41. <td>
  42. <img src="@creator.Icon" style="width:20vw;height:20vw;">
  43. </td>
  44. <td>
  45. <div style="">
  46. <a href="/fetchdata/@creator.service/@creator.id">@creator.name</a>
  47. <p>@creator.service</p>
  48. </div>
  49. </td>
  50. <td align="right">
  51. <button class="btn btn-outline-danger" @onclick="@(()=>RemoveFromFavorite(creator))" type="button" value="Add Dir">
  52. <i class="bi bi-dash"></i>
  53. </button>
  54. <p>@creator.favorited</p>
  55. </td>
  56. </tr>
  57. </table>
  58. </div>
  59. }
  60. </div>
  61. }
  62. @code {
  63. private string SearchText { get; set; }
  64. private string Message { get; set; } = "";
  65. private List<Creator> CreatorList { get; set; }
  66. protected override async Task OnInitializedAsync()
  67. {
  68. CreatorList = new List<Creator>();
  69. SearchText = "";
  70. int i = 0;
  71. do
  72. {
  73. try
  74. {
  75. var json = Preferences.Get("favorites", "[]");
  76. CreatorList = JsonSerializer.Deserialize<List<Creator>>(json);
  77. if (CreatorList.Count == 0)
  78. {
  79. Message = "Empty";
  80. }
  81. return;
  82. }
  83. catch (Exception ex)
  84. {
  85. await Task.Delay(1000);
  86. }
  87. i++;
  88. }
  89. while (i < 5);
  90. Message = "Getting data failed!";
  91. }
  92. private List<Creator> FilteredCreators => CreatorList.Where(
  93. creator => creator.name.ToLower().Contains(SearchText.ToLower())).Take(100).ToList();
  94. private async Task OpenLink(string link)
  95. {
  96. await Launcher.OpenAsync(link);
  97. }
  98. private void AddToFavorite(Creator creator)
  99. {
  100. CreatorList.Add(creator);
  101. Preferences.Set("favorites", JsonSerializer.Serialize(CreatorList));
  102. }
  103. private void RemoveFromFavorite(Creator creator)
  104. {
  105. CreatorList.Remove(creator);
  106. Preferences.Set("favorites", JsonSerializer.Serialize(CreatorList));
  107. }
  108. }