Finish working in basic functionality
This commit is contained in:
parent
2f64f9f3a6
commit
f3f6d754df
@ -39,11 +39,12 @@ export class SGSelect implements ISgSelect {
|
|||||||
constructor(setting: ISgSelect) {
|
constructor(setting: ISgSelect) {
|
||||||
this.init(setting);
|
this.init(setting);
|
||||||
this.render();
|
this.render();
|
||||||
|
this.closeSelectClick();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Приватный метод инициализации экземпляра класса DropDown
|
* Приватный метод инициализации экземпляра класса DropDown
|
||||||
* @method #init
|
* @method init
|
||||||
* @member
|
* @member
|
||||||
* @protected
|
* @protected
|
||||||
* @param {ISgSelect} setting передаваемые настройки селекта
|
* @param {ISgSelect} setting передаваемые настройки селекта
|
||||||
@ -104,7 +105,7 @@ export class SGSelect implements ISgSelect {
|
|||||||
/**
|
/**
|
||||||
* Приватный метод рендера экземпляра класса DropDown
|
* Приватный метод рендера экземпляра класса DropDown
|
||||||
*@protected
|
*@protected
|
||||||
* @method #render
|
* @method render
|
||||||
* @param {string} select необязательный елемент. Передаеться в метод initSelected
|
* @param {string} select необязательный елемент. Передаеться в метод initSelected
|
||||||
* @description Рендер елементов в селекте.
|
* @description Рендер елементов в селекте.
|
||||||
*/
|
*/
|
||||||
@ -178,7 +179,7 @@ export class SGSelect implements ISgSelect {
|
|||||||
this.list = this.element?.querySelector('.list');
|
this.list = this.element?.querySelector('.list');
|
||||||
this.caret = this.element?.querySelector('.caret');
|
this.caret = this.element?.querySelector('.caret');
|
||||||
|
|
||||||
// this.#addOptionsBehaviour();
|
this.addOptionsBehaviour();
|
||||||
}
|
}
|
||||||
|
|
||||||
private renderUrl() {}
|
private renderUrl() {}
|
||||||
@ -186,7 +187,7 @@ export class SGSelect implements ISgSelect {
|
|||||||
/**
|
/**
|
||||||
* Привaтный метод экземпляра класса DropDown
|
* Привaтный метод экземпляра класса DropDown
|
||||||
*
|
*
|
||||||
* @method #initSelected
|
* @method initSelected
|
||||||
* @param {string} select необязательный елемент. Используется в методе selectIndex
|
* @param {string} select необязательный елемент. Используется в методе selectIndex
|
||||||
* @description Отрисовывает и стилизует селект
|
* @description Отрисовывает и стилизует селект
|
||||||
* @protected
|
* @protected
|
||||||
@ -212,7 +213,7 @@ export class SGSelect implements ISgSelect {
|
|||||||
* @protected
|
* @protected
|
||||||
* @param {boolean} oneClick необязательный параметр передаваемый из функции buttonControl
|
* @param {boolean} oneClick необязательный параметр передаваемый из функции buttonControl
|
||||||
* @description Открывает список для выбора элемента
|
* @description Открывает список для выбора элемента
|
||||||
* @method #open
|
* @method open
|
||||||
*/
|
*/
|
||||||
private open(oneClick?: boolean): void {
|
private open(oneClick?: boolean): void {
|
||||||
if (oneClick === true) {
|
if (oneClick === true) {
|
||||||
@ -224,5 +225,76 @@ export class SGSelect implements ISgSelect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private addOptionsBehaviour() {}
|
/**
|
||||||
|
* Приватный метод экземпляра класса DropDown
|
||||||
|
* @protected
|
||||||
|
* @description Закрывает список
|
||||||
|
* @method #close
|
||||||
|
*/
|
||||||
|
private close() {
|
||||||
|
this.list?.classList.remove('open');
|
||||||
|
this.caret?.classList.remove('caret_rotate');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Приватный метод экземпляра класса DropDown
|
||||||
|
* @protected
|
||||||
|
* @description Закрывает список по клику вне элемента
|
||||||
|
* @method #closeSelectClick
|
||||||
|
*/
|
||||||
|
private closeSelectClick() {
|
||||||
|
const dropdown = document.querySelector(`${this.options.selector}`);
|
||||||
|
|
||||||
|
document.addEventListener('click', (e) => {
|
||||||
|
const withinBoundaries = e.composedPath().includes(dropdown!);
|
||||||
|
if (!withinBoundaries) {
|
||||||
|
// if (this.btn) {
|
||||||
|
// return;
|
||||||
|
// } else {
|
||||||
|
// this.#close();
|
||||||
|
// }
|
||||||
|
this.close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Приватный метод экземпляра класса DropDown
|
||||||
|
* @protected
|
||||||
|
* @description Метод реализовывающий выбор элементов в разных режимах. Обычный/Мультиселект/Мультиселект + Мультиселект Таг.
|
||||||
|
* @method addOptionsBehaviour
|
||||||
|
*/
|
||||||
|
private addOptionsBehaviour() {
|
||||||
|
const {
|
||||||
|
multiselect,
|
||||||
|
placeholder,
|
||||||
|
selected,
|
||||||
|
multiselectTag,
|
||||||
|
searchMode,
|
||||||
|
closeOnSelect,
|
||||||
|
darkTheme,
|
||||||
|
} = this.options;
|
||||||
|
|
||||||
|
const options = this.element?.querySelectorAll('.list__item');
|
||||||
|
const select = this.element?.querySelector('.selected');
|
||||||
|
const nativeOption = this.element?.querySelectorAll('.nativeSelect__nativeOption');
|
||||||
|
|
||||||
|
const ulMultipul = document.createElement('ul');
|
||||||
|
|
||||||
|
if (multiselect && multiselect == true) {
|
||||||
|
ulMultipul.classList.add('multiselect-tag');
|
||||||
|
select?.classList.add('overflow-hidden');
|
||||||
|
}
|
||||||
|
|
||||||
|
options?.forEach((option: Element, index: number) => {
|
||||||
|
option.addEventListener('click', (event) => {
|
||||||
|
const item = this.itemsSelect[index];
|
||||||
|
const checkIndex = this.indexes.indexOf(index);
|
||||||
|
|
||||||
|
select!.textContent = item.title;
|
||||||
|
this.selectedItems = item;
|
||||||
|
console.log(this.selectedItems);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user