Skip to content

Commit 21746a7

Browse files
committed
fixes #726 #763 - Example in focused mode should reset to original on navigating from one endpoint to another
1 parent 9411596 commit 21746a7

File tree

2 files changed

+52
-16
lines changed

2 files changed

+52
-16
lines changed

src/components/api-request.js

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -213,24 +213,51 @@ export default class ApiRequest extends LitElement {
213213
`;
214214
}
215215

216-
updated(changedProperties) {
216+
/*
217+
async updated(changedProperties) {
217218
// In focused mode after rendering the request component, update the text-areas(which contains examples) using
218219
// the original values from hidden textareas
219220
// This is done coz, user may update the dom by editing the textarea's and once the DOM is updated externally change detection wont happen, therefore update the values manually
220221
if (this.renderStyle === 'focused') {
221222
if (changedProperties.size === 1 && changedProperties.has('activeSchemaTab')) {
222223
// dont update example as only tabs is switched
223224
} else {
224-
const exampleTextAreaEls = [...this.shadowRoot.querySelectorAll('textarea[data-ptype="form-data"]')];
225-
exampleTextAreaEls.forEach((el) => {
226-
const origExampleEl = this.shadowRoot.querySelector(`textarea[data-pname='hidden-${el.dataset.pname}']`);
227-
if (origExampleEl) {
228-
el.value = origExampleEl.value;
229-
}
230-
});
225+
this.requestUpdate();
231226
}
232227
}
233228
}
229+
*/
230+
231+
async saveExampleState() {
232+
if (this.renderStyle === 'focused') {
233+
const reqBodyTextAreaEls = [...this.shadowRoot.querySelectorAll('textarea.request-body-param-user-input')];
234+
reqBodyTextAreaEls.forEach((el) => {
235+
el.dataset.user_example = el.value;
236+
});
237+
const exampleTextAreaEls = [...this.shadowRoot.querySelectorAll('textarea[data-ptype="form-data"]')];
238+
exampleTextAreaEls.forEach((el) => {
239+
el.dataset.user_example = el.value;
240+
});
241+
this.requestUpdate();
242+
}
243+
}
244+
245+
async updateExamplesFromDataAttr() {
246+
// In focused mode after rendering the request component, update the text-areas(which contains examples) using
247+
// the original values from hidden textareas
248+
// This is done coz, user may update the dom by editing the textarea's and once the DOM is updated externally change detection wont happen, therefore update the values manually
249+
if (this.renderStyle === 'focused') {
250+
const reqBodyTextAreaEls = [...this.shadowRoot.querySelectorAll('textarea.request-body-param-user-input')];
251+
reqBodyTextAreaEls.forEach((el) => {
252+
el.value = el.dataset.user_example || el.dataset.example;
253+
});
254+
const exampleTextAreaEls = [...this.shadowRoot.querySelectorAll('textarea[data-ptype="form-data"]')];
255+
exampleTextAreaEls.forEach((el) => {
256+
el.value = el.dataset.user_example || el.dataset.example;
257+
});
258+
this.requestUpdate();
259+
}
260+
}
234261

235262
renderExample(example, paramType, paramName) {
236263
return html`
@@ -508,9 +535,16 @@ export default class ApiRequest extends LitElement {
508535
</div>`;
509536
}
510537

511-
resetRequestBodySelection() {
538+
// This method is called before navigation change in focusd mode
539+
async beforerNavigationFocusedMode() {
540+
// this.saveExampleState();
541+
}
542+
543+
// This method is called after navigation change in focusd mode
544+
async afterNavigationFocusedMode() {
512545
this.selectedRequestBodyType = '';
513546
this.selectedRequestBodyExample = '';
547+
this.updateExamplesFromDataAttr();
514548
this.clearResponseData();
515549
}
516550

@@ -724,10 +758,8 @@ export default class ApiRequest extends LitElement {
724758
<button class="tab-btn ${this.activeSchemaTab === 'example' ? 'active' : ''}" data-tab = 'example'>EXAMPLE</button>
725759
<button class="tab-btn ${this.activeSchemaTab !== 'example' ? 'active' : ''}" data-tab = 'schema'>SCHEMA</button>
726760
</div>
727-
${this.activeSchemaTab === 'example'
728-
? html`<div class="tab-content col"> ${reqBodyExampleHtml}</div>`
729-
: html`<div class="tab-content col"> ${reqBodySchemaHtml}</div>`
730-
}
761+
${html`<div class="tab-content col" style="display:${this.activeSchemaTab === 'example' ? 'block' : 'none'};"> ${reqBodyExampleHtml}</div>`}
762+
${html`<div class="tab-content col" style="display:${this.activeSchemaTab === 'example' ? 'none' : 'block'};"> ${reqBodySchemaHtml}</div>`}
731763
</div>`
732764
: html`
733765
${reqBodyFileInputHtml}
@@ -788,8 +820,6 @@ export default class ApiRequest extends LitElement {
788820
.textContent = "${this.fillRequestFieldsWithExample === 'true' ? formdataPartExample[0].exampleValue : ''}"
789821
spellcheck = "false"
790822
></textarea>
791-
<!-- This textarea(hidden) is to store the original example value, in focused mode on navbar change it is used to update the example text -->
792-
<textarea data-pname = "hidden-${fieldName}" data-ptype = "${mimeType.includes('form-urlencode') ? 'hidden-form-urlencode' : 'hidden-form-data'}" class="is-hidden" style="display:none">${formdataPartExample[0].exampleValue}</textarea>
793823
</div>`
794824
}
795825
${html`

src/rapidoc.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -884,6 +884,12 @@ export default class RapiDoc extends LitElement {
884884
return;
885885
}
886886
this.isIntersectionObserverActive = false;
887+
if (this.renderStyle === 'focused') {
888+
const requestEl = this.shadowRoot.querySelector('api-request');
889+
if (requestEl) {
890+
requestEl.beforerNavigationFocusedMode();
891+
}
892+
}
887893
this.scrollTo(navEl.dataset.contentId, true, scrollNavItemToView);
888894
setTimeout(() => {
889895
this.isIntersectionObserverActive = true;
@@ -914,7 +920,7 @@ export default class RapiDoc extends LitElement {
914920
if (this.renderStyle === 'focused') {
915921
const requestEl = this.shadowRoot.querySelector('api-request');
916922
if (requestEl) {
917-
requestEl.resetRequestBodySelection();
923+
requestEl.afterNavigationFocusedMode();
918924
}
919925
const responseEl = this.shadowRoot.querySelector('api-response');
920926
if (responseEl) {

0 commit comments

Comments
 (0)