mirror of
https://github.com/tenrok/OverlayScrollbars.git
synced 2026-06-01 00:14:07 +03:00
improve tests
This commit is contained in:
@@ -7,25 +7,34 @@ const noop = <T>(): T => {
|
||||
return {} as T;
|
||||
};
|
||||
|
||||
const getSelectOptions = (selectElement: HTMLSelectElement) => Array.from(selectElement.options).map((option) => option.value);
|
||||
const getSelectOptions = (selectElement: HTMLSelectElement) =>
|
||||
Array.from(selectElement.options).map((option) => option.value);
|
||||
|
||||
export const generateSelectCallback = (
|
||||
targetElms: HTMLElement[] | HTMLElement | null,
|
||||
callback: (targetAffectedElm: HTMLElement, possibleValues: string[], selectedValue: string) => any
|
||||
) => (event: Event | HTMLSelectElement | null) => {
|
||||
const target: HTMLSelectElement | null = isEvent(event) ? (event.target as HTMLSelectElement) : event;
|
||||
if (target) {
|
||||
const selectedOption = target.value;
|
||||
const selectOptions = getSelectOptions(target);
|
||||
const elmsArr = Array.isArray(targetElms) ? targetElms : [targetElms];
|
||||
export const generateSelectCallback =
|
||||
(
|
||||
targetElms: HTMLElement[] | HTMLElement | null,
|
||||
callback: (
|
||||
targetAffectedElm: HTMLElement,
|
||||
possibleValues: string[],
|
||||
selectedValue: string
|
||||
) => any
|
||||
) =>
|
||||
(event: Event | HTMLSelectElement | null) => {
|
||||
const target: HTMLSelectElement | null = isEvent(event)
|
||||
? (event.target as HTMLSelectElement)
|
||||
: event;
|
||||
if (target) {
|
||||
const selectedOption = target.value;
|
||||
const selectOptions = getSelectOptions(target);
|
||||
const elmsArr = Array.isArray(targetElms) ? targetElms : [targetElms];
|
||||
|
||||
elmsArr.forEach((elm) => {
|
||||
if (elm) {
|
||||
callback(elm, selectOptions, selectedOption);
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
elmsArr.forEach((elm) => {
|
||||
if (elm) {
|
||||
callback(elm, selectOptions, selectedOption);
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const generateClassChangeSelectCallback = (targetElms: HTMLElement[] | HTMLElement | null) =>
|
||||
generateSelectCallback(targetElms, (targetAffectedElm, possibleValues, selectedValue) => {
|
||||
@@ -33,7 +42,10 @@ export const generateClassChangeSelectCallback = (targetElms: HTMLElement[] | HT
|
||||
targetAffectedElm.classList.add(selectedValue);
|
||||
});
|
||||
|
||||
export const selectOption = (select: HTMLSelectElement | null, selectedOption: string | number): boolean => {
|
||||
export const selectOption = (
|
||||
select: HTMLSelectElement | null,
|
||||
selectedOption: string | number
|
||||
): boolean => {
|
||||
if (!select) {
|
||||
return false;
|
||||
}
|
||||
@@ -47,7 +59,11 @@ export const selectOption = (select: HTMLSelectElement | null, selectedOption: s
|
||||
|
||||
if (typeof selectedOption === 'string' && options.includes(selectedOption)) {
|
||||
select.value = selectedOption;
|
||||
} else if (typeof selectedOption === 'number' && options.length < selectedOption && selectedOption > -1) {
|
||||
} else if (
|
||||
typeof selectedOption === 'number' &&
|
||||
options.length < selectedOption &&
|
||||
selectedOption > -1
|
||||
) {
|
||||
select.selectedIndex = selectedOption;
|
||||
}
|
||||
|
||||
@@ -66,16 +82,19 @@ export const selectOption = (select: HTMLSelectElement | null, selectedOption: s
|
||||
export const iterateSelect = async <T>(
|
||||
select: HTMLSelectElement | null,
|
||||
options?: {
|
||||
filter?: (value: string, index: number, array: string[]) => boolean;
|
||||
beforeEach?: () => T | Promise<T>;
|
||||
check?: (input: T, selectedOptions: string) => void | Promise<void>;
|
||||
afterEach?: () => void | Promise<void>;
|
||||
}
|
||||
) => {
|
||||
if (select) {
|
||||
const { beforeEach = noop, check = noop, afterEach = noop } = options || {};
|
||||
const { beforeEach = noop, check = noop, afterEach = noop, filter } = options || {};
|
||||
const selectOptions = getSelectOptions(select);
|
||||
const selectOptionsReversed = getSelectOptions(select).reverse();
|
||||
const iterateOptions = [...selectOptions, ...selectOptionsReversed];
|
||||
const iterateOptions = [...selectOptions, ...selectOptionsReversed].filter(
|
||||
filter || (() => true)
|
||||
);
|
||||
for (let i = 0; i < iterateOptions.length; i++) {
|
||||
const option = iterateOptions[i];
|
||||
// eslint-disable-next-line
|
||||
|
||||
Reference in New Issue
Block a user