///
import * as React from 'react';
import classNames from 'classnames';
const element = {};
const prefix = 'tsp-component-Accordion';
class Accordion extends React.Component {
constructor(props: TspComponentAccordionProps, state: TspComponentAccordionState) {
super(props, state);
}
public elem: HTMLElement;
public height: number;
public state: TspComponentAccordionState = {
open: this.props.defaultOpen
};
public componentDidMount(): void {
this.elem = this.refs.elem as HTMLElement;
element[this.props.id] = this.elem;
if (this.props.defaultOpen) {
this.elem.dataset.height = this.elem.clientHeight.toString();
this.elem.style.height = this.elem.dataset.height + 'px';
} else {
this.elem.dataset.height = '0';
this.elem.style.height = '0px';
}
}
public componentDidUpdate(nextProps: TspComponentAccordionProps): void {
if (this.props.updateId !== nextProps.updateId) {
this.elem.style.height = 'auto';
this.elem.dataset.height = this.elem.clientHeight.toString();
this.elem.style.height = this.elem.dataset.height + 'px';
}
}
public render(): JSX.Element {
return (
{this.props.children}
);
}
}
function accordionOpen(id: string): void {
const elem = element[id];
elem.classList.add(`${prefix}-animation`);
elem.classList.remove(`${prefix}-hidden`);
setTimeout(() => {
elem.classList.remove(`${prefix}-animation`);
elem.dataset.hidden = 'false';
}, 300);
}
function accordionClose(id: string): void {
const elem = element[id];
elem.classList.add(`${prefix}-animation`);
elem.classList.add(`${prefix}-hidden`);
setTimeout(() => {
elem.classList.remove(`${prefix}-animation`);
elem.dataset.hidden = 'true';
}, 300);
}
export { Accordion, accordionOpen, accordionClose };