Skip to content

Commit 82e78f0

Browse files
authored
[W-12646073] fix collapsible behaviour (#40)
* chore: fix collapsible behaviour * 4.3.8 * chore: fix unit test
1 parent c8ec4c3 commit 82e78f0

File tree

5 files changed

+31
-25
lines changed

5 files changed

+31
-25
lines changed

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@api-components/api-resource-example-document",
33
"description": "A viewer for examples in a resource based on AMF model",
4-
"version": "4.3.7",
4+
"version": "4.3.8",
55
"license": "Apache-2.0",
66
"main": "index.js",
77
"module": "index.js",

src/ApiResourceExampleDocument.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,5 +217,5 @@ export class ApiResourceExampleDocument extends AmfHelperMixin(LitElement) {
217217

218218
_exampleTitleIsMediaType(example: Example): boolean;
219219

220-
_handleCollapsePanel(): void;
220+
_handleCollapsePanel(example: Example, index: Number): void;
221221
}

src/ApiResourceExampleDocument.js

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -568,38 +568,40 @@ export class ApiResourceExampleDocument extends AmfHelperMixin(LitElement) {
568568
}
569569

570570
/**
571+
* @param {Example} example
572+
* @param {number} index
571573
* Collapse the current example panel
572574
*/
573-
_handleCollapsePanel() {
574-
const examplePanel = this.shadowRoot.querySelector('.renderer')
575-
const icon = this.shadowRoot.querySelector('.expand-icon')
576-
icon.classList.toggle('expand-icon-collapse')
577-
examplePanel.classList.toggle('collapse')
578-
579-
this._collapseExamplePanel = !this._collapseExamplePanel
575+
_handleCollapsePanel(example, index) {
576+
const examplePanels = this.shadowRoot.querySelectorAll('.renderer')
577+
const icons = this.shadowRoot.querySelectorAll('.expand-icon')
578+
icons[index].classList.toggle('expand-icon-collapse')
579+
examplePanels[index].classList.toggle('collapse')
580+
example.opened = !example.opened
580581
}
581582

582583
/**
583584
* @param {Example} example
584-
* @returns {TemplateResult|string}
585+
* @param {number} index
586+
* @returns {TemplateResult|string}
585587
*/
586-
_titleTemplate(example) {
588+
_titleTemplate(example, index) {
587589
if (example.isScalar) {
588590
return '';
589591
}
590592
const label = this._computeExampleTitle(example);
591593
return html`<div
592594
class="example-title"
593-
@click="${this._handleCollapsePanel}"
594-
@keyup="${this._handleCollapsePanel}"
595+
@click="${() => this._handleCollapsePanel(example, index)}"
596+
@keyup="${() => this._handleCollapsePanel(example, index)}"
595597
>
596598
<span>${label}</span>
597599
<anypoint-icon-button
598600
class="expand-icon-wrapper"
599601
data-action="collapse"
600602
title="Collapse panel"
601603
>
602-
<arc-icon class="expand-icon" icon="expandLess"></arc-icon>
604+
<arc-icon class="expand-icon" icon="expandLess"></arc-icon>
603605
</anypoint-icon-button>
604606
</div>`;
605607
}
@@ -630,7 +632,7 @@ export class ApiResourceExampleDocument extends AmfHelperMixin(LitElement) {
630632

631633
/**
632634
* Returns title to render for example
633-
* @param {Example} example
635+
* @param {Example} example
634636
* @returns {String} 'Example' or the example's title
635637
*/
636638
_computeExampleTitle(example) {
@@ -643,7 +645,7 @@ export class ApiResourceExampleDocument extends AmfHelperMixin(LitElement) {
643645
/**
644646
* Determines whether an example's title is just a variation
645647
* of the current media type + a number
646-
* @param {Example} example
648+
* @param {Example} example
647649
* @returns {Boolean}
648650
*/
649651
_exampleTitleIsMediaType(example) {
@@ -653,23 +655,27 @@ export class ApiResourceExampleDocument extends AmfHelperMixin(LitElement) {
653655
}
654656

655657
/**
656-
* @param {Example[]} examples
657-
* @returns {TemplateResult[]}
658+
* @param {Example[]} initialExamples
659+
* @returns {TemplateResult[]}
658660
*/
659-
_examplesTemplate(examples) {
661+
_examplesTemplate(initialExamples) {
662+
const examples = initialExamples.map(example => {
663+
example.opened = !!this._collapseExamplePanel
664+
return example
665+
});
660666
let parts = 'content-action-button, code-content-action-button, content-action-button-disabled, ';
661667
parts += 'code-content-action-button-disabled content-action-button-active, ';
662668
parts += 'code-content-action-button-active, code-wrapper, example-code-wrapper, markdown-html';
663-
return examples.map((item) => html`
669+
return examples.map((example, index) => html`
664670
<div class="item-container">
665-
${this._titleTemplate(item)}
666-
${this._descriptionTemplate(item)}
671+
${this._titleTemplate(example, index)}
672+
${this._descriptionTemplate(example)}
667673
<div class="renderer">
668674
<arc-icon class="info-icon" icon="code"></arc-icon>
669675
<api-example-render
670676
exportParts="${parts}"
671677
class="example"
672-
.example="${item}"
678+
.example="${example}"
673679
.mediaType="${this.mediaType}"
674680
?isJson="${this.isJson}"
675681
?table="${this.table}"

test/api-resource-example-document.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,7 @@ describe('ApiResourceExampleDocument', () => {
552552
const expandIconNoCollapsed = /** @type HTMLElement */ (element.shadowRoot.querySelector('.expand-icon-collapse'));
553553
assert.isNull(expandIconNoCollapsed);
554554

555-
setTimeout(() => element._handleCollapsePanel());
555+
setTimeout(() => element._handleCollapsePanel(element.examples[0], 0));
556556

557557
const examplePanelCollapsed = /** @type HTMLElement */ (element.shadowRoot.querySelector('.collapse'));
558558
assert.isDefined(examplePanelCollapsed);

0 commit comments

Comments
 (0)