-
Notifications
You must be signed in to change notification settings - Fork 79
/
Copy pathAccordionHeader.tsx
43 lines (41 loc) · 1.28 KB
/
AccordionHeader.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import classNames from 'classnames';
import React, { ElementType, FC, HTMLAttributes, ReactNode } from 'react';
export interface AccordionHeaderProps extends HTMLAttributes<HTMLElement> {
/** Utilizzarlo in caso di utilizzo di componenti personalizzati */
tag?: ElementType;
/** Classi aggiuntive da usare per il componente AccordionHeader */
className?: string;
/** Utilizzare questo attributo per indicare se l'elemento è attivo o no */
active?: boolean;
/** Questa funzione verrà chiamata quando avviene un click sul componente AccordionHeader */
onToggle?: () => void;
/** Contenuto aggiuntivo all'interno del bottone dell'AccordionHeader */
append?: ReactNode;
testId?: string;
}
export const AccordionHeader: FC<AccordionHeaderProps> = ({
className,
tag = 'button',
active = false,
append,
onToggle,
testId,
...attributes
}) => {
const Tag = tag;
const toggleClasses = classNames(className, 'accordion-button', {
collapsed: !active
});
return (
<div className='accordion-header' data-testid={testId}>
<Tag
aria-expanded={active ? 'true' : 'false'}
className={toggleClasses}
onClick={onToggle}
{...attributes}
{...(tag === 'button' && { type: 'button' })}
></Tag>
{append}
</div>
);
};