Skip to content

Commit b138c48

Browse files
committed
Popover: add triggerActiveClass
1 parent 5c07363 commit b138c48

File tree

2 files changed

+23
-5
lines changed

2 files changed

+23
-5
lines changed

src/components/popover/Popover.ts

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,12 @@ export interface IPopoverAttrs extends IOverlayableAttrs, IAttrs {
8484

8585
/** Trigger element */
8686
trigger: m.Vnode<any, any>;
87+
88+
/**
89+
* Class added to trigger element on interaction
90+
* @default 'cui-active'
91+
*/
92+
triggerActiveClass?: string;
8793
}
8894

8995
export interface IPopoverTriggerAttrs extends IAttrs {
@@ -109,7 +115,8 @@ export class Popover extends AbstractComponent<IPopoverAttrs> {
109115
hoverOpenDelay: 0,
110116
interactionType: 'click',
111117
position: 'bottom',
112-
hasArrow: true
118+
hasArrow: true,
119+
triggerActiveClass: Classes.ACTIVE
113120
} as IPopoverAttrs;
114121
}
115122

@@ -167,9 +174,9 @@ export class Popover extends AbstractComponent<IPopoverAttrs> {
167174
onmouseleave: this.handleTriggerMouseLeave,
168175
style
169176
}, [
170-
hasArrow && m(`.${Classes.POPOVER_ARROW}`),
171-
m(`.${Classes.POPOVER_CONTENT}`, content)
172-
]);
177+
hasArrow && m(`.${Classes.POPOVER_ARROW}`),
178+
m(`.${Classes.POPOVER_CONTENT}`, content)
179+
]);
173180

174181
return m.fragment({}, [
175182
this.trigger,
@@ -262,7 +269,7 @@ export class Popover extends AbstractComponent<IPopoverAttrs> {
262269
if (this.isOpen) {
263270
triggerAttrs.class = classnames(
264271
triggerAttrs.className || triggerAttrs.class,
265-
Classes.ACTIVE,
272+
this.attrs.triggerActiveClass,
266273
Classes.POPOVER_TRIGGER_ACTIVE
267274
);
268275
} else triggerAttrs.class = triggerAttrs.className || triggerAttrs.class || '';

src/components/popover/index.spec.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,17 @@ describe('popover', () => {
223223
assert.equal(popover().getAttribute('x-placement'), 'right');
224224
});
225225

226+
it('Correctly sets triggerActiveClass', () => {
227+
const triggerActiveClass = 'trigger-active';
228+
229+
mount({
230+
defaultIsOpen: true,
231+
triggerActiveClass
232+
});
233+
234+
assert(hasClass(trigger(), triggerActiveClass));
235+
});
236+
226237
// TODO: add controlled mode tests
227238

228239
function mount(attrs: Partial<IPopoverAttrs>, triggerAttrs?: IButtonAttrs) {

0 commit comments

Comments
 (0)