32
32
<div >
33
33
@if (projects .Count > 0 )
34
34
{
35
- <span role =" button" class =" material-icons fs-3 opacity-10 btn-angor user-select-none" @onclick =" ToggleView" >
36
- @viewModeIcon
35
+ <span role =" button" class =" user-select-none" @onclick =" ToggleView" >
36
+ < Icon IconName = " @viewModeIcon" />
37
37
</span >
38
38
}
39
39
</div >
47
47
<!-- Search Section -->
48
48
<div class =" input-group" >
49
49
<input type =" text" class =" form-control" placeholder =" Enter Angor project identifier" id =" searchQuery" @oninput =" UpdateSearchQuery" @onkeydown =" HandleKeyDown" >
50
- <button class =" btn btn-primary" type =" button" @onclick =" SearchProject" disabled =" @searchInProgress" data-cy =" find-button" >Find</button >
50
+ <button class =" btn btn-border" type =" button" @onclick =" SearchProject" disabled =" @searchInProgress" data-cy =" find-button" >
51
+ <Icon IconName =" search" />
52
+ </button >
51
53
</div >
52
54
</div >
53
55
</div >
54
56
</div >
55
57
56
- @if (searchInProgress )
58
+ @if (searchInProgress )
57
59
{
58
60
<div class =" d-flex justify-content-center mt-4" >
59
61
<div class =" loader" ></div >
60
62
</div >
61
63
}
62
64
63
- @if (! projects .Any () && ! searchInProgress )
65
+ @if (! projects .Any () && ! searchInProgress && noProject )
64
66
{
65
67
<div class =" row mt-4" >
66
68
<div class =" card card-body angor-alert-info pt-2 pb-2" >
67
69
<div class =" d-flex align-items-center" >
68
- <span class =" material-icons opacity-10 fs-1 me-3 text-white user-select-none" >info </span >
70
+ <span class =" me-3 user-select-none" >
71
+ <Icon IconName =" info" Width =" 40" Height =" 40" Color =" var(--bs-primary-btn-icon)" />
72
+ </span >
69
73
<span class =" text-white" data-cy =" projectsGrid" >No projects found .</span >
70
74
</div >
71
75
</div >
80
84
{
81
85
<div class =" col d-flex align-items-stretch" >
82
86
<div class =" card mt-4 w-100 project-card" >
83
- <a class =" d-block blur-shadow-image " >
87
+ <a class =" d-block" >
84
88
@if (! nostrSearchInProgress && SessionStorage .IsProjectInStorageById (indexerData .ProjectIdentifier ))
85
89
{
86
90
var project = SessionStorage .GetProjectById (indexerData .ProjectIdentifier );
87
- <img class =" card-img-top" src =" @(project?.Metadata?.Banner ?? " /assets /img /no-image.jpg " )" alt =" @(project?.Metadata?.Banner != null ? " " : " no-image " )" onerror =" this.onerror=null; this.src='/assets/img/no-image.jpg';" />
91
+ <div class =" banner-container" >
92
+ <img class =" banner-image" src =" @(project?.Metadata?.Banner ?? " /assets /img /no-image.jpg " )" alt =" @(project?.Metadata?.Banner != null ? " " : " no-image " )" onerror =" this.onerror=null; this.src='/assets/img/no-image.jpg';" />
93
+ <div class =" profile-container" >
94
+ <img class =" profile-image" src =" @(project?.Metadata?.Picture ?? " /assets /img /no-image.jpg " )" alt =" @(project?.Metadata?.Banner != null ? " " : " no-image " )" onerror =" this.onerror=null; this.src='/assets/img/no-image.jpg';" />
95
+ </div >
96
+ </div >
88
97
}
89
98
</a >
90
99
119
128
<hr class =" horizontal light mt-3" >
120
129
<div role =" button" class =" btn btn-view w-100" @onclick =" () => ViewProjectDetails(indexerData.ProjectIdentifier)" >
121
130
<div class =" d-flex align-items-center justify-content-center" >
122
- <span class =" material-icons opacity-10 me-1" data-cy =" generate-wallet-words" >chevron_right </span >
123
131
<span >View Project </span >
124
132
</div >
125
133
</div >
128
136
</div >
129
137
}
130
138
</div >
139
+
131
140
}
132
141
else
133
142
{
@@ -136,19 +145,20 @@ else
136
145
{
137
146
<div class =" card mt-4 project-card" >
138
147
<div class =" row g-0" >
139
- <div class =" col-md-4" >
140
- <div class =" img-responsive img-responsive-16by9 position-relative blur-shadow-image " role = " button " @onclick = " () => ViewProjectDetails(indexerData.ProjectIdentifier) " >
148
+ <div class =" col-md-4 position-relative " >
149
+ <div class =" banner-container-list " >
141
150
@if (! nostrSearchInProgress && SessionStorage .IsProjectInStorageById (indexerData .ProjectIdentifier ))
142
151
{
143
152
var project = SessionStorage .GetProjectById (indexerData .ProjectIdentifier );
144
- <div class =" card-header card-header-img" >
145
- <img class =" img-responsive-item" src =" @(project?.Metadata?.Banner ?? " /assets /img /no-image.jpg " )" alt =" @(project?.Metadata?.Banner != null ? " " : " no-image " )" onerror =" this.onerror=null; this.src='/assets/img/no-image.jpg';" />
153
+ <img class =" banner-image" src =" @(project?.Metadata?.Banner ?? " /assets /img /no-image.jpg " )" alt =" @(project?.Metadata?.Banner != null ? " " : " no-image " )" onerror =" this.onerror=null; this.src='/assets/img/no-image.jpg';" />
154
+ <div class =" profile-container" >
155
+ <img class =" profile-image" src =" @(project?.Metadata?.Picture ?? " /assets /img /no-image.jpg " )" alt =" Profile Image" />
146
156
</div >
147
157
}
148
158
</div >
149
159
</div >
150
- <div class =" col-md-8 d-flex align-items-center position-relative " >
151
- <div class =" card-body card-loader loading " >
160
+ <div class =" col-md-8 d-flex align-items-center" >
161
+ <div class =" card-body" >
152
162
@if (nostrSearchInProgress )
153
163
{
154
164
<div class =" p-3" >
@@ -173,12 +183,9 @@ else
173
183
<p class =" text-warning-emphasis" >Project not found in any relay ! </p >
174
184
}
175
185
</div >
176
-
177
186
<hr class =" horizontal light m-only" >
178
-
179
187
<div role =" button" class =" btn btn-view vertical-button w-100-m" @onclick =" () => ViewProjectDetails(indexerData.ProjectIdentifier)" >
180
188
<div class =" d-flex align-items-center justify-content-center" >
181
- <span class =" material-icons opacity-10 me-1" data-cy =" generate-wallet-words" >chevron_right </span >
182
189
<span >View Project </span >
183
190
</div >
184
191
</div >
@@ -190,14 +197,17 @@ else
190
197
</div >
191
198
}
192
199
</div >
200
+
193
201
}
194
202
}
195
203
196
204
@if (! searchInProgress )
197
205
{
198
206
<div class =" d-flex justify-content-center mt-4" >
199
207
<a class =" btn btn-secondary my-3" href =" https://browse.angor.io" target =" _blank" >
200
- <i class =" material-icons opacity-10" >search </i >
208
+ <i >
209
+ <Icon IconName =" browse" Color =" var(--bs-primary-btn-icon)" ></Icon >
210
+ </i >
201
211
<span class =" nav-link-text ms-1" >Project Explorer </span >
202
212
</a >
203
213
</div >
@@ -209,13 +219,15 @@ else
209
219
private bool searchInProgress = false ;
210
220
private bool nostrSearchInProgress ;
211
221
private bool isGridView = true ;
212
- private string viewModeIcon = " grid_view" ;
222
+ private string viewModeIcon = " list" ;
223
+ private bool noProject = false ;
213
224
214
225
private ProjectIndexerData ? findProject = null ;
215
226
private List <ProjectIndexerData > projects = new ();
216
227
217
228
protected override async Task OnInitializedAsync ()
218
229
{
230
+ await GetAllProjects ();
219
231
projects = SessionStorage .GetProjectIndexerData () ?? new List <ProjectIndexerData >();
220
232
221
233
if (projects .Any ())
228
240
}
229
241
else
230
242
{
243
+ searchInProgress = true ;
231
244
// No projects are cached, fetch new projects after ensuring services are available
232
245
await FetchAndEnsureServices ();
233
246
}
246
259
if (primaryIndexer == null || primaryRelay == null )
247
260
{
248
261
notificationComponent .ShowNotificationMessage (" No primary indexer or relay found. Please configure them in settings." );
262
+ searchInProgress = false ;
263
+ noProject = true ;
249
264
return ;
250
265
}
251
266
309
324
private void ToggleView ()
310
325
{
311
326
isGridView = ! isGridView ;
312
- viewModeIcon = isGridView ? " grid_view " : " view_list " ;
327
+ viewModeIcon = isGridView ? " list " : " grid " ;
313
328
}
314
329
315
330
private async Task SearchProject ()
0 commit comments