80 lines
1.8 KiB
TypeScript
80 lines
1.8 KiB
TypeScript
/**
|
|
* --------------------------------------------
|
|
* @file AdminLTE direct-chat.ts
|
|
* @description Direct chat for AdminLTE.
|
|
* @license MIT
|
|
* --------------------------------------------
|
|
*/
|
|
|
|
import {
|
|
onDOMContentLoaded
|
|
} from './util/index'
|
|
|
|
/**
|
|
* Constants
|
|
* ====================================================
|
|
*/
|
|
|
|
const DATA_KEY = 'lte.direct-chat'
|
|
const EVENT_KEY = `.${DATA_KEY}`
|
|
const EVENT_EXPANDED = `expanded${EVENT_KEY}`
|
|
const EVENT_COLLAPSED = `collapsed${EVENT_KEY}`
|
|
|
|
const SELECTOR_DATA_TOGGLE = '[data-lte-toggle="chat-pane"]'
|
|
const SELECTOR_DIRECT_CHAT = '.direct-chat'
|
|
|
|
const CLASS_NAME_DIRECT_CHAT_OPEN = 'direct-chat-contacts-open'
|
|
|
|
/**
|
|
* Class Definition
|
|
* ====================================================
|
|
*/
|
|
|
|
class DirectChat {
|
|
_element: HTMLElement
|
|
constructor(element: HTMLElement) {
|
|
this._element = element
|
|
}
|
|
|
|
toggle(): void {
|
|
if (this._element.classList.contains(CLASS_NAME_DIRECT_CHAT_OPEN)) {
|
|
const event = new Event(EVENT_COLLAPSED)
|
|
|
|
this._element.classList.remove(CLASS_NAME_DIRECT_CHAT_OPEN)
|
|
|
|
this._element.dispatchEvent(event)
|
|
} else {
|
|
const event = new Event(EVENT_EXPANDED)
|
|
|
|
this._element.classList.add(CLASS_NAME_DIRECT_CHAT_OPEN)
|
|
|
|
this._element.dispatchEvent(event)
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Data Api implementation
|
|
* ====================================================
|
|
*/
|
|
|
|
onDOMContentLoaded(() => {
|
|
const button = document.querySelectorAll(SELECTOR_DATA_TOGGLE)
|
|
|
|
button.forEach(btn => {
|
|
btn.addEventListener('click', event => {
|
|
event.preventDefault()
|
|
const target = event.target as HTMLElement
|
|
const chatPane = target.closest(SELECTOR_DIRECT_CHAT) as HTMLElement | undefined
|
|
|
|
if (chatPane) {
|
|
const data = new DirectChat(chatPane)
|
|
data.toggle()
|
|
}
|
|
})
|
|
})
|
|
})
|
|
|
|
export default DirectChat
|