Skip to content

Commit d6e3534

Browse files
svetoldo4444kavalorkin
authored andcommitted
feat(dropdown): add insideClick property to config (#4898)
1 parent 2fcdd7f commit d6e3534

File tree

6 files changed

+18
-3
lines changed

6 files changed

+18
-3
lines changed

src/dropdown/bs-dropdown-toggle.directive.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export class BsDropdownToggleDirective implements OnDestroy {
5454
this._state.autoClose &&
5555
event.button !== 2 &&
5656
!this._element.nativeElement.contains(event.target) &&
57-
!(this.dropdown.insideClick && this.dropdown._contains(event))
57+
!(this._state.insideClick && this.dropdown._contains(event))
5858
) {
5959
this._state.toggleClick.emit(false);
6060
}

src/dropdown/bs-dropdown.config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,6 @@ import { Injectable } from '@angular/core';
55
export class BsDropdownConfig {
66
/** default dropdown auto closing behavior */
77
autoClose = true;
8+
/** default dropdown auto closing behavior */
9+
insideClick = false;
810
}

src/dropdown/bs-dropdown.directive.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,14 @@ export class BsDropdownDirective implements OnInit, OnDestroy {
6868
/**
6969
* This attribute indicates that the dropdown shouldn't close on inside click when autoClose is set to true
7070
*/
71-
@Input() insideClick: boolean;
71+
@Input()
72+
set insideClick(value: boolean) {
73+
this._state.insideClick = value;
74+
}
75+
76+
get insideClick(): boolean {
77+
return this._state.insideClick;
78+
}
7279

7380
/**
7481
* Disables dropdown toggle and hides dropdown menu if opened
@@ -147,6 +154,7 @@ export class BsDropdownDirective implements OnInit, OnDestroy {
147154
private _state: BsDropdownState) {
148155
// set initial dropdown state from config
149156
this._state.autoClose = this._config.autoClose;
157+
this._state.insideClick = this._config.insideClick;
150158

151159
// create dropdown component loader
152160
this._dropdown = this._cis

src/dropdown/bs-dropdown.module.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export class BsDropdownModule {
3535
BsDropdownState,
3636
{
3737
provide: BsDropdownConfig,
38-
useValue: config ? config : { autoClose: true }
38+
useValue: config ? config : { autoClose: true, insideClick: false }
3939
}
4040
]
4141
};

src/dropdown/bs-dropdown.state.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { BsComponentRef } from 'ngx-bootstrap/component-loader';
55
export class BsDropdownState {
66
direction: 'down' | 'up' = 'down';
77
autoClose: boolean;
8+
insideClick: boolean;
89
isOpenChange = new EventEmitter<boolean>();
910
isDisabledChange = new EventEmitter<boolean>();
1011
toggleClick = new EventEmitter<boolean>();

src/spec/bs-dropdown.directive.spec.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,10 @@ describe('Directive: Dropdown', () => {
7878
expect(directive.autoClose).toBeTruthy();
7979
});
8080

81+
it('insideClick value should be true by default', () => {
82+
expect(directive.insideClick).toBeFalsy();
83+
});
84+
8185
it('should be opened if isOpen === true and toggle on isOpen changes', () => {
8286
context.isOpen = true;
8387
fixture.detectChanges();

0 commit comments

Comments
 (0)