@@ -57,30 +57,29 @@ const initialState = {
57
57
</ button >
58
58
</ header >
59
59
` ,
60
+ list : async state => {
61
+ if ( state . contacts ?. length === 0 ) {
62
+ return html `< span class ="flex flex-fill center "> No Contacts found</ span > `
63
+ }
64
+
65
+ return (
66
+ await Promise . all (
67
+ state . contacts
68
+ . filter (
69
+ state . showUnpaired
70
+ ? filterUnpairedContacts
71
+ : filterPairedContacts
72
+ )
73
+ . sort ( sortContactsByAlias )
74
+ . map ( async c => await state . item ( c ) ) ,
75
+ )
76
+ ) . join ( '' )
77
+ } ,
60
78
content : async state => html `
61
79
${ state . header ( state ) }
62
80
63
81
< div >
64
- ${
65
- state . contacts ?. length > 0
66
- ? (
67
- await Promise . all (
68
- state . contacts
69
- . filter (
70
- state . showUnpaired
71
- ? filterUnpairedContacts
72
- : filterPairedContacts
73
- )
74
- . sort ( sortContactsByAlias )
75
- . map ( async c => await state . item ( c ) ) ,
76
- )
77
- ) . join ( '' )
78
- : ''
79
- }
80
- ${
81
- state . contacts . length === 0 ?
82
- html `< span class ="flex flex-fill center "> No Contacts found</ span > ` : ''
83
- }
82
+ ${ await state . list ( state ) }
84
83
</ div >
85
84
86
85
${ await state . footer ( state ) }
@@ -158,47 +157,36 @@ const initialState = {
158
157
</ a >
159
158
`
160
159
} ,
160
+ datalist : async ( state , direction = 'outgoing' ) => {
161
+ if ( state . contacts ?. length === 0 ) {
162
+ return ''
163
+ }
164
+
165
+ return (
166
+ await Promise . all (
167
+ state . contacts
168
+ . filter (
169
+ c => c . alias &&
170
+ Object . keys ( c [ direction ] || { } ) . length > 0
171
+ ) . map ( contact => {
172
+ return html `< option value ="@ ${
173
+ contact . alias
174
+ } "> ${
175
+ contact . info ?. name || contact . alias
176
+ } </ option > `
177
+ } )
178
+ )
179
+ ) . join ( '' )
180
+ } ,
161
181
footer : async state => html `
162
182
< datalist id ="contactSendAliases ">
163
183
${
164
- state . contacts . length > 0
165
- ? (
166
- await Promise . all (
167
- state . contacts
168
- . filter (
169
- c => c . alias &&
170
- Object . keys ( c . outgoing || { } ) . length > 0
171
- ) . map ( contact => {
172
- return html `< option value ="@ ${
173
- contact . alias
174
- } "> ${
175
- contact . info ?. name || contact . alias
176
- } </ option > `
177
- } )
178
- )
179
- ) . join ( '' )
180
- : ''
184
+ await state . datalist ( state , 'outgoing' )
181
185
}
182
186
</ datalist >
183
187
< datalist id ="contactReceiveAliases ">
184
188
${
185
- state . contacts . length > 0
186
- ? (
187
- await Promise . all (
188
- state . contacts
189
- . filter (
190
- c => c . alias &&
191
- Object . keys ( c . incoming || { } ) . length > 0
192
- ) . map ( contact => {
193
- return html `< option value ="@ ${
194
- contact . alias
195
- } "> ${
196
- contact . info ?. name || contact . alias
197
- } </ option > `
198
- } )
199
- )
200
- ) . join ( '' )
201
- : ''
189
+ await state . datalist ( state , 'incoming' )
202
190
}
203
191
</ datalist >
204
192
` ,
@@ -247,6 +235,22 @@ export async function setupContactsList(
247
235
248
236
state . elements . section = section
249
237
238
+ const list = section . querySelector ( '& > div' )
239
+ const sendDataList = section . querySelector ( '#contactSendAliases' )
240
+ const receiveDataList = section . querySelector ( '#contactReceiveAliases' )
241
+ const hdrPaired = section . querySelector ( '#paired_contacts' )
242
+ const hdrUnpaired = section . querySelector ( '#unpaired_contacts' )
243
+ const hdrPairedIndicator = hdrPaired . querySelector ( '.indicator' )
244
+ const hdrUnpairedIndicator = hdrUnpaired . querySelector ( '.indicator' )
245
+
246
+ state . elements . list = list
247
+ state . elements . sendDataList = sendDataList
248
+ state . elements . receiveDataList = receiveDataList
249
+ state . elements . hdrPaired = hdrPaired
250
+ state . elements . hdrUnpaired = hdrUnpaired
251
+ state . elements . hdrPairedIndicator = hdrPairedIndicator
252
+ state . elements . hdrUnpairedIndicator = hdrUnpairedIndicator
253
+
250
254
function addListener (
251
255
node ,
252
256
event ,
@@ -288,7 +292,22 @@ export async function setupContactsList(
288
292
await restate ( state , renderState )
289
293
290
294
state . elements . section . id = state . slugs . section
291
- state . elements . section . innerHTML = await state . content ( state )
295
+ // state.elements.section.innerHTML = await state.content(state)
296
+
297
+ state . elements . list . innerHTML = await state . list ( state )
298
+ state . elements . sendDataList . innerHTML = await state . datalist ( state , 'outgoing' )
299
+ state . elements . receiveDataList . innerHTML = await state . datalist ( state , 'incoming' )
300
+
301
+ if ( state . showUnpaired ) {
302
+ state . elements . hdrPaired . classList . remove ( 'active' )
303
+ state . elements . hdrUnpaired . classList . add ( 'active' )
304
+ } else {
305
+ state . elements . hdrPaired . classList . add ( 'active' )
306
+ state . elements . hdrUnpaired . classList . remove ( 'active' )
307
+ }
308
+
309
+ state . elements . hdrPairedIndicator . innerText = state . contacts . filter ( filterPairedContacts ) . length
310
+ state . elements . hdrUnpairedIndicator . innerText = state . contacts . filter ( filterUnpairedContacts ) . length
292
311
293
312
state . removeAllListeners ( )
294
313
state . addListeners ( )
0 commit comments