fonteva-design-guide
Version:
## Dev, Build and Test
100 lines (84 loc) • 2.86 kB
JavaScript
import { LightningElement, api, track } from 'lwc';
import PFM_Base from 'c/pfmBase';
export default class PfmCollapse extends PFM_Base {
collapseState = false;
collapseHeight;
headerClasses;
hasHeader;
classes;
noHeader; // not supported
iconPosition;
loader;
labels = {
title: 'Section title',
loading: 'Section loading'
};
get padding() {
return super.paddingStr;
}
set padding(value) {
super.paddingStr = value;
}
get margin() {
return super.marginStr;
}
set margin(value) {
super.marginStr = value;
}
connectedCallback() {
super.connectedCallback('');
const headerClassBase = 'pfm-collapse_header',
self = this;
let valIconPosition = this.iconPosition,
valClassStr = this.classStr,
classStr,
iconPosition;
iconPosition = valIconPosition === 'left' ? ' slds-grid_reverse' : '';
classStr = valClassStr ? ' ' + valClassStr : '';
this.headerClasses = headerClassBase + iconPosition + classStr;
}
renderedCallback() {
if (this.loader) {
this.template.querySelector('c-pfm-button').startLoader();
}
const header = this.querySelectorAll('span[slot="header"]');
if (header.length === 0) {
this.hasHeader = false;
}
super.renderedCallback('pfm-collapse');
}
expand() {
let collapsed = this.collapseState;
const wrapper = this.template.querySelector('.pfm-collapse'),
content = this.template.querySelector('.pfm-collapse_content');
if (this.collapseState === true) {
this.collapseState = false;
wrapper.classList.remove('js-expand');
content.style.height = 0;
const changeEvent = new CustomEvent('close', {
detail: {}
});
this.dispatchEvent(changeEvent);
} else {
this.collapseState = true;
setTimeout(() => {
content.style.height = content.scrollHeight + 'px';
wrapper.classList.add('js-expand');
}, 1);
const changeEvent = new CustomEvent('open', {
detail: {}
});
this.dispatchEvent(changeEvent);
}
}
resetHeight() {
const content = this.template.querySelector('.pfm-collapse_content');
content.setAttribute('style', 'height: auto');
setTimeout(() => {
content.setAttribute('style', 'height: ' + content.offsetHeight + 'px');
}, 1);
}
}