Skip to content

Commit f646901

Browse files
committed
disable try btn while making request
1 parent 2d0dcff commit f646901

File tree

4 files changed

+27
-10
lines changed

4 files changed

+27
-10
lines changed

index.html

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
<rapi-doc
2121
spec-url="./examples/specs/petstore.json"
2222
layout="row"
23-
theme="dark"
2423
>
2524
</rapi-doc>
2625
</body>

src/components/api-request.js

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import FlexStyles from '@/styles/flex-styles';
88
import InputStyles from '@/styles/input-styles';
99
import FontStyles from '@/styles/font-styles';
1010
import CommonStyles from '@/styles/common-styles';
11-
import { schemaToModel, getTypeInfo, generateExample, removeCircularReferences} from '@/utils/common-utils';
11+
import { schemaToModel, getTypeInfo, generateExample, removeCircularReferences, wait} from '@/utils/common-utils';
1212
import marked from 'marked';
1313
import {unsafeHTML} from 'lit-html/directives/unsafe-html.js';
1414

@@ -407,7 +407,7 @@ export default class ApiRequest extends LitElement {
407407
:html`<div style="color:var(--light-fg)">No Authentication Token provided</div>`}
408408
</div>
409409
</div>
410-
<button class="m-btn" style="padding: 6px 0px;width:60px" @click="${this.onTryClick}">TRY</button>
410+
<button class="m-btn try-btn" style="padding: 6px 0px;width:60px" @click="${this.onTryClick}">TRY</button>
411411
</div>
412412
${this.responseMessage===''?'':html`
413413
<div class="row" style="font-size:var(--small-font-size); margin:5px 0">
@@ -461,16 +461,16 @@ export default class ApiRequest extends LitElement {
461461
}
462462
}
463463

464-
465464
onMimeTypeChange(e){
466465
let textareaEls = e.target.closest('.tab-panel').querySelectorAll(`textarea.request-body-param`);
467466
[...textareaEls].map(function(el){
468467
el.style.display = el.classList.contains(e.target.value)?"block":"none";
469468
});
470469
}
471470

472-
onTryClick(e){
471+
async onTryClick(e){
473472
let me = this;
473+
let tryBtnEl = e.target;
474474
let fetchUrl, fetchOptions, curlUrl, curl="", curlHeaders="", curlData="", curlForm="";
475475
let requestPanelEl = e.target.closest(".request-panel");
476476
let pathParamEls = [...requestPanelEl.querySelectorAll(".request-param[data-ptype='path']")];
@@ -632,7 +632,11 @@ export default class ApiRequest extends LitElement {
632632
me.responseBlobUrl = '';
633633
}
634634
me.curlSyntax = `${curl} ${curlHeaders} ${curlData} ${curlForm}`;
635-
fetch(fetchUrl,fetchOptions).then(function(resp){
635+
try {
636+
tryBtnEl.disabled = true;
637+
await wait(1000);
638+
const resp = await fetch(fetchUrl,fetchOptions);
639+
tryBtnEl.disabled = false;
636640
me.responseStatus = resp.ok ? 'success':'error';
637641
me.responseMessage = `${resp.statusText}:${resp.status}`;
638642
me.responseUrl = resp.url;
@@ -665,10 +669,11 @@ export default class ApiRequest extends LitElement {
665669
me.responseText = respText;
666670
})
667671
}
668-
})
669-
.catch(function(err){
672+
}
673+
catch(err){
674+
tryBtnEl.disabled = false;
670675
me.responseMessage = err.message + " (CORS or Network Issue)";
671-
});
676+
}
672677
}
673678

674679
downloadResponseBlob(){

src/styles/input-styles.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@ input, select, button {
3232
.m-btn.small{padding:5px 12px;}
3333
.m-btn.circle{border-radius:50%;}
3434
.m-btn:hover{ background-color: var(--primary-color)}
35+
.m-btn:disabled{
36+
background-color: var(--bg2);
37+
color:var(--fg2);
38+
border-color:var(--fg2);
39+
cursor:not-allowed;
40+
opacity:0.4;
41+
}
3542
3643
/* Form Inputs */
3744
textarea,

src/utils/common-utils.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,4 +402,10 @@ export function removeCircularReferences(level=0) {
402402
}
403403
return value;
404404
};
405-
};
405+
};
406+
407+
export async function wait(ms) {
408+
return new Promise(resolve => {
409+
setTimeout(resolve, ms);
410+
});
411+
}

0 commit comments

Comments
 (0)