0
0
mirror of https://github.com/twbs/bootstrap.git synced 2025-01-18 10:52:19 +01:00

Refactor: move disposing properties into the base class (#33740)

Moves more functionality to `base-component`, transferring the responsibility of disposal to parent class.
Each component, dusting disposal, sets its protected properties to `null`. So the same can be done in one place for all children components .
This commit is contained in:
GeoSot 2021-05-11 09:04:42 +03:00 committed by GitHub
parent 052def4568
commit 03842b5f25
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 6 additions and 52 deletions

View File

@ -36,7 +36,10 @@ class BaseComponent {
dispose() {
Data.remove(this._element, this.constructor.DATA_KEY)
EventHandler.off(this._element, `.${this.constructor.DATA_KEY}`)
this._element = null
Object.getOwnPropertyNames(this).forEach(propertyName => {
this[propertyName] = null
})
}
_queueCallback(callback, element, isAnimated = true) {

View File

@ -213,18 +213,6 @@ class Carousel extends BaseComponent {
this._slide(order, this._items[index])
}
dispose() {
this._items = null
this._config = null
this._interval = null
this._isPaused = null
this._isSliding = null
this._activeElement = null
this._indicatorsElement = null
super.dispose()
}
// Private
_getConfig(config) {

View File

@ -253,14 +253,6 @@ class Collapse extends BaseComponent {
this._isTransitioning = isTransitioning
}
dispose() {
super.dispose()
this._config = null
this._parent = null
this._triggerArray = null
this._isTransitioning = null
}
// Private
_getConfig(config) {

View File

@ -217,11 +217,8 @@ class Dropdown extends BaseComponent {
}
dispose() {
this._menu = null
if (this._popper) {
this._popper.destroy()
this._popper = null
}
super.dispose()

View File

@ -183,6 +183,7 @@ class Modal extends BaseComponent {
[window, this._dialog]
.forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY))
this._backdrop.dispose()
super.dispose()
/**
@ -191,14 +192,6 @@ class Modal extends BaseComponent {
* It will remove `EVENT_CLICK_DATA_API` event that should remain
*/
EventHandler.off(document, EVENT_FOCUSIN)
this._config = null
this._dialog = null
this._backdrop.dispose()
this._backdrop = null
this._isShown = null
this._ignoreBackdropClick = null
this._isTransitioning = null
}
handleUpdate() {

View File

@ -162,9 +162,6 @@ class Offcanvas extends BaseComponent {
this._backdrop.dispose()
super.dispose()
EventHandler.off(document, EVENT_FOCUSIN)
this._config = null
this._backdrop = null
}
// Private

View File

@ -137,16 +137,8 @@ class ScrollSpy extends BaseComponent {
}
dispose() {
super.dispose()
EventHandler.off(this._scrollElement, EVENT_KEY)
this._scrollElement = null
this._config = null
this._selector = null
this._offsets = null
this._targets = null
this._activeTarget = null
this._scrollHeight = null
super.dispose()
}
// Private

View File

@ -144,7 +144,6 @@ class Toast extends BaseComponent {
}
super.dispose()
this._config = null
}
// Private

View File

@ -219,17 +219,10 @@ class Tooltip extends BaseComponent {
this.tip.parentNode.removeChild(this.tip)
}
this._isEnabled = null
this._timeout = null
this._hoverState = null
this._activeTrigger = null
if (this._popper) {
this._popper.destroy()
}
this._popper = null
this.config = null
this.tip = null
super.dispose()
}