diff --git a/package-lock.json b/package-lock.json
index e0a76b7..2ecf8d0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "@api-components/api-resource-example-document",
- "version": "4.3.4",
+ "version": "4.3.5",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
diff --git a/package.json b/package.json
index b8668bd..f75e34f 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "@api-components/api-resource-example-document",
"description": "A viewer for examples in a resource based on AMF model",
- "version": "4.3.4",
+ "version": "4.3.5",
"license": "Apache-2.0",
"main": "index.js",
"module": "index.js",
diff --git a/src/ApiExampleRender.js b/src/ApiExampleRender.js
index 3a49c56..906cf64 100644
--- a/src/ApiExampleRender.js
+++ b/src/ApiExampleRender.js
@@ -410,15 +410,17 @@ export class ApiExampleRender extends LitElement {
const isJson = this._computeIsJson(this.isJson, example.value);
return html`
-
Copy
- ${isJson ? html`
+
+
+
Copy
+ ${isJson ? html`
Table view` : ''}
- ${hasRaw ? html`
-
Source view` : ''}
+ ${hasRaw ? html`
+
Source view` : ''}
+
`;
}
diff --git a/src/ApiResourceExampleDocument.d.ts b/src/ApiResourceExampleDocument.d.ts
index 260dcee..7dcae0b 100644
--- a/src/ApiResourceExampleDocument.d.ts
+++ b/src/ApiResourceExampleDocument.d.ts
@@ -216,4 +216,6 @@ export class ApiResourceExampleDocument extends AmfHelperMixin(LitElement) {
_computeExampleDescription(example: Example): string;
_exampleTitleIsMediaType(example: Example): boolean;
+
+ _handleCollapsePanel(): void;
}
diff --git a/src/ApiResourceExampleDocument.js b/src/ApiResourceExampleDocument.js
index 8fed051..a885a2a 100644
--- a/src/ApiResourceExampleDocument.js
+++ b/src/ApiResourceExampleDocument.js
@@ -117,6 +117,10 @@ export class ApiResourceExampleDocument extends AmfHelperMixin(LitElement) {
* read-only properties to the example
*/
renderReadOnly: { type: Boolean },
+ /**
+ * If enabled, the example panel would be closed
+ */
+ _collapseExamplePanel: { type: Boolean, reflect: true },
};
}
@@ -313,6 +317,19 @@ export class ApiResourceExampleDocument extends AmfHelperMixin(LitElement) {
}));
}
+ get _collapseExamplePanel() {
+ return this.__collapseExamplePanel
+ }
+
+ set _collapseExamplePanel(value) {
+ const old = this.__collapseExamplePanel;
+ if (old === value) {
+ return;
+ }
+ this.__collapseExamplePanel = value;
+ this.requestUpdate('_collapseExamplePanel', old);
+ }
+
constructor() {
super();
this._onStorageChanged = this._onStorageChanged.bind(this);
@@ -324,6 +341,7 @@ export class ApiResourceExampleDocument extends AmfHelperMixin(LitElement) {
this.hasExamples = false;
this.compatibility = false;
this.renderReadOnly = false;
+ this._collapseExamplePanel = false;
this._ensureJsonTable();
}
@@ -549,16 +567,44 @@ export class ApiResourceExampleDocument extends AmfHelperMixin(LitElement) {
this.table = e.detail.value;
}
+ /**
+ * Collapse the current example panel
+ */
+ _handleCollapsePanel() {
+ const examplePanel = this.shadowRoot.querySelector('.renderer')
+ const icon = this.shadowRoot.querySelector('.expand-icon')
+ icon.classList.toggle('expand-icon-collapse')
+ examplePanel.classList.toggle('collapse')
+
+ this._collapseExamplePanel = !this._collapseExamplePanel
+ }
+
/**
* @param {Example} example
* @returns {TemplateResult|string}
*/
_titleTemplate(example) {
+ const { compatibility } = this;
+
if (example.isScalar) {
return '';
}
const label = this._computeExampleTitle(example);
- return html`${label}
`;
+ return html``;
}
/**
@@ -622,7 +668,6 @@ export class ApiResourceExampleDocument extends AmfHelperMixin(LitElement) {
${this._titleTemplate(item)}
${this._descriptionTemplate(item)}
-
{
assert.equal(titles[2].innerText.trim(), 'User 3');
assert.equal(titles[3].innerText.trim(), 'User 4');
});
+
+ it('should expand example panel when _handleCollapsePanel is called', async () => {
+ const payloads = getPayload(element, amf, '/IncludedInline', 'post');
+ element.examples = payloads;
+ await aTimeout(100);
+
+ const examplePanelNoCollapsed = /** @type HTMLElement */ (element.shadowRoot.querySelector('.collapse'));
+ assert.isNull(examplePanelNoCollapsed);
+ const expandIconNoCollapsed = /** @type HTMLElement */ (element.shadowRoot.querySelector('.expand-icon-collapse'));
+ assert.isNull(expandIconNoCollapsed);
+
+ setTimeout(() => element._handleCollapsePanel());
+
+ const examplePanelCollapsed = /** @type HTMLElement */ (element.shadowRoot.querySelector('.collapse'));
+ assert.isDefined(examplePanelCollapsed);
+ const expandIconCollapsed = /** @type HTMLElement */ (element.shadowRoot.querySelector('.expand-icon-collapse'));
+ assert.isDefined(expandIconCollapsed);
+ });
+
+ it('should expand example panel on click ', async () => {
+ const payloads = getPayload(element, amf, '/IncludedInline', 'post');
+ element.examples = payloads;
+ await aTimeout(100);
+
+ const examplePanel = /** @type HTMLElement */ (element.shadowRoot.querySelector('.renderer'));
+ examplePanel.click()
+ await aTimeout(100);
+
+ const examplePanelCollapsed = /** @type HTMLElement */ (element.shadowRoot.querySelector('.collapse'));
+ const expandIconCollapsed = /** @type HTMLElement */ (element.shadowRoot.querySelector('.expand-icon-collapse'));
+ assert.isDefined(examplePanelCollapsed);
+ assert.isDefined(expandIconCollapsed);
+ });
});
});
});