|
20 | 20 | let responseEditorContainer: HTMLElement
|
21 | 21 | let responseIsVisible = false
|
22 | 22 | let editorSyntaxIsVisible = true
|
| 23 | + let isMultipartFormRequest = false |
23 | 24 |
|
24 | 25 | let loadingModal: HTMLDialogElement
|
25 | 26 | let addFilesModal: HTMLDialogElement
|
|
110 | 111 | $collections = await window.KulalaApi.getCollectionNames()
|
111 | 112 | }
|
112 | 113 |
|
113 |
| - const setFormDataValues = (formData: RequestFormData) => { |
| 114 | + const setMultipartFormDataValues = (formData: RequestFormData): void => { |
114 | 115 | requestBodyTypeSelect.value = 'form-data'
|
115 | 116 | console.log({ formData })
|
116 | 117 | }
|
117 | 118 |
|
| 119 | + const setRequestType = (block: Block): void => { |
| 120 | + if (block.request.multipartFormData) { |
| 121 | + requestBodyTypeSelect.value = 'form-data' |
| 122 | + } else if (block.request.formData) { |
| 123 | + requestBodyTypeSelect.value = 'x-www-form-urlencoded' |
| 124 | + } else if (block.request.body) { |
| 125 | + requestBodyTypeSelect.value = 'raw' |
| 126 | + } else { |
| 127 | + requestBodyTypeSelect.value = 'none' |
| 128 | + } |
| 129 | + } |
| 130 | +
|
118 | 131 | const setValuesBasedOnBlock = (block: Block): void => {
|
119 | 132 | requestMethodSelect.value = block.request.method
|
120 | 133 | requestUrlInput.value = block.request.url
|
121 | 134 | const body = block.request.body?.trim() || ''
|
122 |
| - if (block.request.formData) { |
123 |
| - setFormDataValues(block.request.formData) |
| 135 | + if (block.request.multipartFormData) { |
| 136 | + isMultipartFormRequest = true |
| 137 | + editorSyntaxIsVisible = false |
| 138 | + setMultipartFormDataValues(block.request.multipartFormData) |
| 139 | + } else { |
| 140 | + isMultipartFormRequest = false |
| 141 | + editorSyntaxIsVisible = true |
124 | 142 | }
|
| 143 | + setRequestType(block) |
125 | 144 | editor.setValue(body)
|
126 | 145 | }
|
127 | 146 |
|
|
196 | 215 | processResponse(data)
|
197 | 216 | })
|
198 | 217 | .catch((err) => {
|
199 |
| - showInfoModal = true |
200 |
| - infoModalContent = err |
| 218 | + console.error(err) |
| 219 | + // TODO: show error via modal |
201 | 220 | })
|
202 | 221 | .finally(() => {
|
203 | 222 | isLoading = false
|
|
229 | 248 | })
|
230 | 249 | responseEditor.setModel(monaco.editor.createModel('', 'text'))
|
231 | 250 |
|
232 |
| - window.addEventListener('resize', () => { |
| 251 | + const layoutEditors = (): void => { |
233 | 252 | editor.layout()
|
234 | 253 | responseEditor.layout()
|
235 |
| - }) |
| 254 | + } |
| 255 | + window.addEventListener('resize', layoutEditors) |
236 | 256 | const layout = await window.KulalaApi.getLayout()
|
| 257 | + NewResizer( |
| 258 | + containerLeftSection, |
| 259 | + true, |
| 260 | + false, |
| 261 | + async (w) => { |
| 262 | + await window.KulalaApi.saveLayout({ |
| 263 | + leftSectionWidth: w |
| 264 | + }) |
| 265 | + }, |
| 266 | + () => { |
| 267 | + layoutEditors() |
| 268 | + } |
| 269 | + ) |
| 270 | + console.log(layout.leftSectionWidth) |
237 | 271 | containerLeftSection.style.width = layout.leftSectionWidth + 'px'
|
238 |
| - NewResizer(containerLeftSection, true, false, (w) => { |
239 |
| - window.KulalaApi.saveLayout({ |
240 |
| - leftSectionWidth: w |
241 |
| - }) |
242 |
| - }) |
| 272 | + layoutEditors() |
243 | 273 | })
|
244 | 274 | onDestroy(() => {
|
245 | 275 | monaco?.editor.getModels().forEach((model) => model.dispose())
|
|
278 | 308 | $: if (editor) {
|
279 | 309 | onRawSyntaxSelectChange = createOnSyntaxChangeHandler(editor)
|
280 | 310 | }
|
281 |
| - $: editorSyntax, |
282 |
| - (): void => { |
283 |
| - alert('Syntax changed to ' + editorSyntax) |
284 |
| - editorSyntaxIsVisible = |
285 |
| - editorSyntax !== 'form-data' && editorSyntax !== 'x-www-form-urlencoded' |
286 |
| - } |
287 | 311 | $: $collections, onCollectionsChange()
|
288 | 312 | </script>
|
289 | 313 |
|
|
356 | 380 |
|
357 | 381 | <div class="join w-full">
|
358 | 382 | <div
|
359 |
| - class="join-item ui-resizable ui-resizable-width w-full p-5" |
| 383 | + class="relative join-item ui-resizable ui-resizable-width w-full p-5" |
360 | 384 | bind:this={containerLeftSection}
|
361 | 385 | >
|
362 | 386 | <div>
|
|
470 | 494 | {/each}
|
471 | 495 | </div>
|
472 | 496 | </div>
|
| 497 | + <div class="ui-resizable-handle"></div> |
473 | 498 | </div>
|
474 | 499 | <div class="join-item w-full p-5">
|
475 | 500 | {#if selectedRequest.block}
|
|
581 | 606 | </select>
|
582 | 607 | </div>
|
583 | 608 |
|
584 |
| - <div class="field mt-5"> |
585 |
| - <div class="control"> |
586 |
| - <div> |
587 |
| - <div class="editor-wrap"> |
588 |
| - <div class="editor-container" bind:this={editorContainer} /> |
589 |
| - </div> |
590 |
| - </div> |
| 609 | + <div class="mt-5 {isMultipartFormRequest ? 'hidden' : ''}"> |
| 610 | + <div class="editor-wrap"> |
| 611 | + <div class="editor-container" bind:this={editorContainer} /> |
591 | 612 | </div>
|
592 | 613 | </div>
|
593 | 614 |
|
594 |
| - <div class="field mt-5"> |
595 |
| - <div class="control"> |
596 |
| - <div class="editor-wrap {responseIsVisible ? '' : 'hidden'}"> |
597 |
| - <div class="editor-container" bind:this={responseEditorContainer} /> |
598 |
| - </div> |
| 615 | + <div class="mt-5 {isMultipartFormRequest ? '' : 'hidden'}"> |
| 616 | + {#if isMultipartFormRequest} |
| 617 | + {#each selectedRequest.block.request.multipartFormData as item} |
| 618 | + <div class="join w-full mb-5"> |
| 619 | + <input type="text" value={item.key} class="join-item input w-full" placeholder="Name" /> |
| 620 | + <input type="text" value={item.value} class="join-item input w-full" placeholder="Value" /> |
| 621 | + <button class="join-item btn btn-error"> |
| 622 | + <span class="icon"> |
| 623 | + <i class="fa fa-trash"></i> |
| 624 | + </span> |
| 625 | + </button> |
| 626 | + </div> |
| 627 | + {/each} |
| 628 | + <button class="btn btn-success"> |
| 629 | + <span class="icon"> |
| 630 | + <i class="fa fa-plus"></i> |
| 631 | + Add a new field |
| 632 | + </span> |
| 633 | + </button> |
| 634 | + {/if} |
| 635 | + </div> |
| 636 | + |
| 637 | + <div class="mt-5"> |
| 638 | + <div class="editor-wrap {responseIsVisible ? '' : 'hidden'}"> |
| 639 | + <div class="editor-container" bind:this={responseEditorContainer} /> |
599 | 640 | </div>
|
600 | 641 | </div>
|
601 | 642 | </div>
|
|
0 commit comments