@@ -8,6 +8,7 @@ const loader = document.querySelector('.container__body__loader');
8
8
const startLoading = ( ) => loader . classList . remove ( 'hidden' ) ;
9
9
const stopLoading = ( ) => loader . classList . add ( 'hidden' ) ;
10
10
let oooTabLink = document . getElementById ( OOO_TAB_ID ) ;
11
+ let extensionTabLink = document . getElementById ( EXTENSION_TAB_ID ) ;
11
12
let currentReqType = OOO_REQUEST_TYPE ;
12
13
let selected__tab__class = 'selected__tab' ;
13
14
let statusValue = null ;
@@ -25,7 +26,7 @@ const intersectionObserver = new IntersectionObserver(async (entries) => {
25
26
return ;
26
27
}
27
28
if ( entries [ 0 ] . isIntersecting && ! isDataLoading ) {
28
- await renderOooRequestCards ( {
29
+ await renderRequestCards ( {
29
30
state : statusValue ,
30
31
sort : sortByValue ,
31
32
next : nextLink ,
@@ -42,18 +43,35 @@ const removeIntersectionObserver = () => {
42
43
43
44
oooTabLink . addEventListener ( 'click' , async function ( ) {
44
45
if ( isDataLoading ) return ;
45
- oooTabLink . classList . add ( selected__tab__class ) ;
46
46
currentReqType = OOO_REQUEST_TYPE ;
47
+ nextLink = '' ;
48
+ oooTabLink . classList . add ( selected__tab__class ) ;
49
+ extensionTabLink . classList . remove ( selected__tab__class ) ;
50
+ changeFilter ( ) ;
51
+ updateUrlWithQuery ( currentReqType ) ;
52
+ await renderRequestCards ( { state : statusValue , sort : sortByValue } ) ;
53
+ } ) ;
54
+
55
+ extensionTabLink . addEventListener ( 'click' , async function ( ) {
56
+ if ( isDataLoading ) return ;
57
+ currentReqType = EXTENSION_REQUEST_TYPE ;
58
+ nextLink = '' ;
59
+ extensionTabLink . classList . add ( selected__tab__class ) ;
60
+ oooTabLink . classList . remove ( selected__tab__class ) ;
47
61
changeFilter ( ) ;
48
- await renderOooRequestCards ( { state : statusValue , sort : sortByValue } ) ;
62
+ updateUrlWithQuery ( currentReqType ) ;
63
+ await renderRequestCards ( { state : statusValue , sort : sortByValue } ) ;
49
64
} ) ;
50
65
66
+ function updateUrlWithQuery ( type ) {
67
+ const url = new URL ( window . location ) ;
68
+ url . searchParams . set ( 'type' , type . toLowerCase ( ) ) ;
69
+ window . history . pushState ( { path : url . toString ( ) } , '' , url . toString ( ) ) ;
70
+ }
71
+
51
72
async function getOooRequests ( query = { } ) {
52
73
let finalUrl =
53
74
API_BASE_URL + ( nextLink || '/requests' + getOooQueryParamsString ( query ) ) ;
54
- let windowUrl = `${ window . location . origin } ${ window . location . pathname } ` ;
55
-
56
- window . history . pushState ( { path : windowUrl } , '' , windowUrl ) ;
57
75
58
76
try {
59
77
const res = await fetch ( finalUrl , {
@@ -88,6 +106,44 @@ async function getOooRequests(query = {}) {
88
106
}
89
107
}
90
108
109
+ async function getExtensionRequests ( query = { } ) {
110
+ let finalUrl =
111
+ API_BASE_URL +
112
+ ( nextLink || '/requests' + getExtensionQueryParamsString ( query ) ) ;
113
+
114
+ try {
115
+ const res = await fetch ( finalUrl , {
116
+ credentials : 'include' ,
117
+ } ) ;
118
+
119
+ const data = await res . json ( ) ;
120
+ if ( res . ok ) {
121
+ return data ;
122
+ } else {
123
+ switch ( res . status ) {
124
+ case 401 :
125
+ showMessage ( 'ERROR' , ErrorMessages . UNAUTHENTICATED ) ;
126
+ return ;
127
+ case 403 :
128
+ showMessage ( 'ERROR' , ErrorMessages . UNAUTHORIZED ) ;
129
+ return ;
130
+ case 404 :
131
+ showMessage ( 'ERROR' , ErrorMessages . EXTENSION_NOT_FOUND ) ;
132
+ return ;
133
+ case 400 :
134
+ showMessage ( 'ERROR' , data . message ) ;
135
+ showToast ( data . message , 'failure' ) ;
136
+ return ;
137
+ default :
138
+ break ;
139
+ }
140
+ }
141
+ showMessage ( 'ERROR' , ErrorMessages . SERVER_ERROR ) ;
142
+ } catch ( e ) {
143
+ console . error ( e ) ;
144
+ }
145
+ }
146
+
91
147
function showMessage ( type , message ) {
92
148
const p = document . createElement ( 'p' ) ;
93
149
const classes = [ 'request__message' ] ;
@@ -106,11 +162,7 @@ const changeFilter = () => {
106
162
requestContainer . innerHTML = '' ;
107
163
} ;
108
164
109
- function createOooRequestCard (
110
- oooRequest ,
111
- superUserDetails ,
112
- requesterUserDetails ,
113
- ) {
165
+ function createRequestCard ( request , superUserDetails , requesterUserDetails ) {
114
166
let {
115
167
id,
116
168
state,
@@ -121,7 +173,7 @@ function createOooRequestCard(
121
173
lastModifiedBy,
122
174
reason,
123
175
updatedAt,
124
- } = oooRequest ;
176
+ } = request ;
125
177
let showSuperuserDetailsClass = 'notHidden' ;
126
178
let showActionButtonClass = 'notHidden' ;
127
179
if (
@@ -161,17 +213,17 @@ function createOooRequestCard(
161
213
child : [
162
214
generateRequesterInfo ( ) ,
163
215
generateRequestContent ( ) ,
164
- addHotizontalBreakLine ( ) ,
216
+ addHorizontalBreakLine ( ) ,
165
217
generateSuperuserInfo ( ) ,
166
218
generateActionButtonsContainer ( ) ,
167
219
] ,
168
220
} ) ;
169
221
return card ;
170
222
171
- function addHotizontalBreakLine ( ) {
223
+ function addHorizontalBreakLine ( ) {
172
224
return createElementFromMap ( {
173
225
tagName : 'hr' ,
174
- class : 'horizontal__line__saperator ' ,
226
+ class : 'horizontal__line__separator ' ,
175
227
} ) ;
176
228
}
177
229
@@ -378,28 +430,28 @@ function createOooRequestCard(
378
430
}
379
431
}
380
432
381
- async function renderOooRequestCards ( queries = { } ) {
433
+ async function renderRequestCards ( queries = { } ) {
382
434
if ( isDataLoading ) return ;
383
- let oooRequestResponse ;
435
+ let requestResponse ;
384
436
try {
385
437
isDataLoading = true ;
386
438
startLoading ( ) ;
387
439
if ( userDetails . length === 0 ) {
388
440
userDetails = await getInDiscordUserList ( ) ;
389
441
}
390
- oooRequestResponse = await getOooRequests ( queries ) ;
391
- for ( const oooRequest of oooRequestResponse ?. data || [ ] ) {
442
+ requestResponse =
443
+ currentReqType === OOO_REQUEST_TYPE
444
+ ? await getOooRequests ( queries )
445
+ : await getExtensionRequests ( queries ) ;
446
+
447
+ for ( const request of requestResponse ?. data || [ ] ) {
392
448
let superUserDetails ;
393
- let requesterUserDetails = await getUserDetails ( oooRequest . requestedBy ) ;
394
- if ( oooRequest . state !== 'PENDING' ) {
395
- superUserDetails = await getUserDetails ( oooRequest . lastModifiedBy ) ;
449
+ let requesterUserDetails = await getUserDetails ( request . requestedBy ) ;
450
+ if ( request . state !== 'PENDING' ) {
451
+ superUserDetails = await getUserDetails ( request . lastModifiedBy ) ;
396
452
}
397
453
requestContainer . appendChild (
398
- createOooRequestCard (
399
- oooRequest ,
400
- superUserDetails ,
401
- requesterUserDetails ,
402
- ) ,
454
+ createRequestCard ( request , superUserDetails , requesterUserDetails ) ,
403
455
) ;
404
456
}
405
457
} catch ( error ) {
@@ -410,15 +462,15 @@ async function renderOooRequestCards(queries = {}) {
410
462
isDataLoading = false ;
411
463
if (
412
464
requestContainer . innerHTML === '' ||
413
- oooRequestResponse === undefined ||
414
- oooRequestResponse ?. data ?. length === 0
465
+ requestResponse === undefined ||
466
+ requestResponse ?. data ?. length === 0
415
467
) {
416
- showMessage ( 'INFO' , ' No OOO requests found!' ) ;
468
+ showMessage ( 'INFO' , ` No ${ currentReqType . toLowerCase ( ) } requests found!` ) ;
417
469
}
418
470
}
419
471
420
472
addIntersectionObserver ( ) ;
421
- nextLink = oooRequestResponse ?. next ;
473
+ nextLink = requestResponse ?. next ;
422
474
}
423
475
424
476
async function acceptRejectRequest ( id , reqBody ) {
@@ -497,7 +549,7 @@ async function performAcceptRejectAction(isAccepted, e) {
497
549
updatedRequestDetails . requestedBy ,
498
550
) ;
499
551
500
- const updatedCard = createOooRequestCard (
552
+ const updatedCard = createRequestCard (
501
553
updatedRequestDetails ,
502
554
superUserDetails ,
503
555
requesterUserDetails ,
@@ -535,4 +587,4 @@ function showToast(message, type) {
535
587
} , 5000 ) ;
536
588
}
537
589
538
- renderOooRequestCards ( { state : statusValue , sort : sortByValue } ) ;
590
+ renderRequestCards ( { state : statusValue , sort : sortByValue } ) ;
0 commit comments