@@ -40,13 +40,13 @@ export function buildResult<T>(
4040 const language = headers . get ( API_HEADER_CONTENT_LANGUAGE ) ;
4141
4242 return {
43- page : Number ( page ) || null ,
44- page_size : Number ( page_size ) || null ,
45- page_total : Number ( page_total ) || null ,
46- item_size : Number ( item_total ) || null ,
47- next_page : handlePagination ( Number ( page ) , true ) || null ,
48- prev_page : handlePagination ( Number ( page ) , false ) || null ,
49- language : language || null ,
43+ page : Number ( page ) || undefined ,
44+ page_size : Number ( page_size ) || undefined ,
45+ page_total : Number ( page_total ) || undefined ,
46+ item_size : Number ( item_total ) || undefined ,
47+ next_page : handlePagination ( Number ( page ) , true ) || undefined ,
48+ prev_page : handlePagination ( Number ( page ) , false ) || undefined ,
49+ language : language || undefined ,
5050 status : status ,
5151 data : body ,
5252 } ;
@@ -89,33 +89,56 @@ export function buildUrl(
8989 filters ?: Filters | null ,
9090 pageable ?: Pageable | null
9191) {
92- let params = '?' ;
92+ let params : string [ ] = [ ] ;
93+
94+ if ( options . language ) params . push ( `language=${ options . language } ` ) ;
95+ if ( options . size ) params . push ( `size=${ options . size } ` ) ;
9396
9497 // Get all filters names and values
9598 if ( filters ) {
9699 for ( const key in filters ) {
97100 const value = filters [ key ] ;
98101 if ( value !== undefined && value !== null ) {
99- params += ` ${ key } = ${ value } &` ;
102+ params = pushOrOverwrite ( params , key , value ) ;
100103 }
101104 }
102105 }
103106
104107 // Define the page, sort and order
105108 if ( pageable ) {
106- if ( pageable . page ) params += ` page= ${ pageable . page } &` ;
107- if ( pageable . size ) params += ` size= ${ pageable . size } &` ;
109+ if ( pageable . page ) params = pushOrOverwrite ( params , ' page' , pageable . page ) ;
110+ if ( pageable . size ) params = pushOrOverwrite ( params , ' size' , pageable . size ) ;
108111
109112 // 'Order' can only be applied when 'sort' is defined
110113 if ( pageable . sort ) {
111114 if ( pageable . order ) {
112- params += `sort=${ pageable . sort } ,${ pageable . order } &` ;
115+ params = pushOrOverwrite (
116+ params ,
117+ 'sort' ,
118+ `${ pageable . sort } ,${ pageable . order } `
119+ ) ;
113120 } else {
114- params += ` sort= ${ pageable . sort } &` ;
121+ params = pushOrOverwrite ( params , ' sort' , pageable . sort ) ;
115122 }
116123 }
117124 }
118125
119- params = params . slice ( 0 , - 1 ) ;
120- return options . endpoint + `/${ options . version } ${ target } ${ params } ` ;
126+ const stringOfParams = params . length !== 0 ? '?' + params . join ( '&' ) : '' ;
127+ return options . endpoint + `/${ options . version } ${ target } ${ stringOfParams } ` ;
128+ }
129+
130+ /**
131+ * Method to push new key/value or overwrite existing one
132+ * @param params A array of strings
133+ * @param key The param name
134+ * @param value The param value
135+ * @returns A array of strings with new key/value or overwritten value
136+ */
137+ function pushOrOverwrite ( params : string [ ] , key : string , value : unknown ) {
138+ const param = params . find ( ( e ) => e . includes ( key ) ) ;
139+
140+ if ( param !== undefined ) params [ params . indexOf ( param ) ] = `${ key } =${ value } ` ;
141+ else params . push ( `${ key } =${ value } ` ) ;
142+
143+ return params ;
121144}
0 commit comments