Fixed #2872 - Dropdown: UpArrow triggers "Uncaught TypeError.." Firefox, Nuxt 3

pull/2888/head
mertsincan 2022-08-23 10:38:43 +01:00
parent aafa0ca3a1
commit 615c09a9c7
6 changed files with 33 additions and 14 deletions

View File

@ -738,14 +738,14 @@ export default {
return this.visibleOptions.findIndex(option => this.isValidOption(option)); return this.visibleOptions.findIndex(option => this.isValidOption(option));
}, },
findLastOptionIndex() { findLastOptionIndex() {
return this.visibleOptions.findLastIndex(option => this.isValidOption(option)); return ObjectUtils.findLastIndex(this.visibleOptions, option => this.isValidOption(option));
}, },
findNextOptionIndex(index) { findNextOptionIndex(index) {
const matchedOptionIndex = index < (this.visibleOptions.length - 1) ? this.visibleOptions.slice(index + 1).findIndex(option => this.isValidOption(option)) : -1; const matchedOptionIndex = index < (this.visibleOptions.length - 1) ? this.visibleOptions.slice(index + 1).findIndex(option => this.isValidOption(option)) : -1;
return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : index; return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : index;
}, },
findPrevOptionIndex(index) { findPrevOptionIndex(index) {
const matchedOptionIndex = index > 0 ? this.visibleOptions.slice(0, index).findLastIndex(option => this.isValidOption(option)) : -1; const matchedOptionIndex = index > 0 ? ObjectUtils.findLastIndex(this.visibleOptions.slice(0, index), option => this.isValidOption(option)) : -1;
return matchedOptionIndex > -1 ? matchedOptionIndex : index; return matchedOptionIndex > -1 ? matchedOptionIndex : index;
}, },
findSelectedOptionIndex() { findSelectedOptionIndex() {

View File

@ -547,14 +547,14 @@ export default {
return this.visibleOptions.findIndex(processedOption => this.isValidOption(processedOption)); return this.visibleOptions.findIndex(processedOption => this.isValidOption(processedOption));
}, },
findLastOptionIndex() { findLastOptionIndex() {
return this.visibleOptions.findLastIndex(processedOption => this.isValidOption(processedOption)); return ObjectUtils.findLastIndex(this.visibleOptions, processedOption => this.isValidOption(processedOption));
}, },
findNextOptionIndex(index) { findNextOptionIndex(index) {
const matchedOptionIndex = index < (this.visibleOptions.length - 1) ? this.visibleOptions.slice(index + 1).findIndex(processedOption => this.isValidOption(processedOption)) : -1; const matchedOptionIndex = index < (this.visibleOptions.length - 1) ? this.visibleOptions.slice(index + 1).findIndex(processedOption => this.isValidOption(processedOption)) : -1;
return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : index; return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : index;
}, },
findPrevOptionIndex(index) { findPrevOptionIndex(index) {
const matchedOptionIndex = index > 0 ? this.visibleOptions.slice(0, index).findLastIndex(processedOption => this.isValidOption(processedOption)) : -1; const matchedOptionIndex = index > 0 ? ObjectUtils.findLastIndex(this.visibleOptions.slice(0, index), processedOption => this.isValidOption(processedOption)) : -1;
return matchedOptionIndex > -1 ? matchedOptionIndex : index; return matchedOptionIndex > -1 ? matchedOptionIndex : index;
}, },
findSelectedOptionIndex() { findSelectedOptionIndex() {

View File

@ -678,14 +678,14 @@ export default {
return this.visibleOptions.findIndex(option => this.isValidOption(option)); return this.visibleOptions.findIndex(option => this.isValidOption(option));
}, },
findLastOptionIndex() { findLastOptionIndex() {
return this.visibleOptions.findLastIndex(option => this.isValidOption(option)); return ObjectUtils.findLastIndex(this.visibleOptions, option => this.isValidOption(option));
}, },
findNextOptionIndex(index) { findNextOptionIndex(index) {
const matchedOptionIndex = index < (this.visibleOptions.length - 1) ? this.visibleOptions.slice(index + 1).findIndex(option => this.isValidOption(option)) : -1; const matchedOptionIndex = index < (this.visibleOptions.length - 1) ? this.visibleOptions.slice(index + 1).findIndex(option => this.isValidOption(option)) : -1;
return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : index; return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : index;
}, },
findPrevOptionIndex(index) { findPrevOptionIndex(index) {
const matchedOptionIndex = index > 0 ? this.visibleOptions.slice(0, index).findLastIndex(option => this.isValidOption(option)) : -1; const matchedOptionIndex = index > 0 ? ObjectUtils.findLastIndex(this.visibleOptions.slice(0, index), option => this.isValidOption(option)) : -1;
return matchedOptionIndex > -1 ? matchedOptionIndex : index; return matchedOptionIndex > -1 ? matchedOptionIndex : index;
}, },
findSelectedOptionIndex() { findSelectedOptionIndex() {

View File

@ -510,28 +510,28 @@ export default {
return this.visibleOptions.findIndex(option => this.isValidOption(option)); return this.visibleOptions.findIndex(option => this.isValidOption(option));
}, },
findLastOptionIndex() { findLastOptionIndex() {
return this.visibleOptions.findLastIndex(option => this.isValidOption(option)); return ObjectUtils.findLastIndex(this.visibleOptions, option => this.isValidOption(option));
}, },
findNextOptionIndex(index) { findNextOptionIndex(index) {
const matchedOptionIndex = index < (this.visibleOptions.length - 1) ? this.visibleOptions.slice(index + 1).findIndex(option => this.isValidOption(option)) : -1; const matchedOptionIndex = index < (this.visibleOptions.length - 1) ? this.visibleOptions.slice(index + 1).findIndex(option => this.isValidOption(option)) : -1;
return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : index; return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : index;
}, },
findPrevOptionIndex(index) { findPrevOptionIndex(index) {
const matchedOptionIndex = index > 0 ? this.visibleOptions.slice(0, index).findLastIndex(option => this.isValidOption(option)) : -1; const matchedOptionIndex = index > 0 ? ObjectUtils.findLastIndex(this.visibleOptions.slice(0, index), option => this.isValidOption(option)) : -1;
return matchedOptionIndex > -1 ? matchedOptionIndex : index; return matchedOptionIndex > -1 ? matchedOptionIndex : index;
}, },
findFirstSelectedOptionIndex() { findFirstSelectedOptionIndex() {
return this.hasSelectedOption ? this.visibleOptions.findIndex(option => this.isValidSelectedOption(option)) : -1; return this.hasSelectedOption ? this.visibleOptions.findIndex(option => this.isValidSelectedOption(option)) : -1;
}, },
findLastSelectedOptionIndex() { findLastSelectedOptionIndex() {
return this.hasSelectedOption ? this.visibleOptions.findLastIndex(option => this.isValidSelectedOption(option)) : -1; return this.hasSelectedOption ? ObjectUtils.findLastIndex(this.visibleOptions, option => this.isValidSelectedOption(option)) : -1;
}, },
findNextSelectedOptionIndex(index) { findNextSelectedOptionIndex(index) {
const matchedOptionIndex = this.hasSelectedOption && index < (this.visibleOptions.length - 1) ? this.visibleOptions.slice(index + 1).findIndex(option => this.isValidSelectedOption(option)) : -1; const matchedOptionIndex = this.hasSelectedOption && index < (this.visibleOptions.length - 1) ? this.visibleOptions.slice(index + 1).findIndex(option => this.isValidSelectedOption(option)) : -1;
return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : -1; return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : -1;
}, },
findPrevSelectedOptionIndex(index) { findPrevSelectedOptionIndex(index) {
const matchedOptionIndex = this.hasSelectedOption && index > 0 ? this.visibleOptions.slice(0, index).findLastIndex(option => this.isValidSelectedOption(option)) : -1; const matchedOptionIndex = this.hasSelectedOption && index > 0 ? ObjectUtils.findLastIndex(this.visibleOptions.slice(0, index), option => this.isValidSelectedOption(option)) : -1;
return matchedOptionIndex > -1 ? matchedOptionIndex : -1; return matchedOptionIndex > -1 ? matchedOptionIndex : -1;
}, },
findNearestSelectedOptionIndex(index, firstCheckUp = false) { findNearestSelectedOptionIndex(index, firstCheckUp = false) {

View File

@ -795,28 +795,28 @@ export default {
return this.visibleOptions.findIndex(option => this.isValidOption(option)); return this.visibleOptions.findIndex(option => this.isValidOption(option));
}, },
findLastOptionIndex() { findLastOptionIndex() {
return this.visibleOptions.findLastIndex(option => this.isValidOption(option)); return ObjectUtils.findLastIndex(this.visibleOptions, option => this.isValidOption(option));
}, },
findNextOptionIndex(index) { findNextOptionIndex(index) {
const matchedOptionIndex = index < (this.visibleOptions.length - 1) ? this.visibleOptions.slice(index + 1).findIndex(option => this.isValidOption(option)) : -1; const matchedOptionIndex = index < (this.visibleOptions.length - 1) ? this.visibleOptions.slice(index + 1).findIndex(option => this.isValidOption(option)) : -1;
return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : index; return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : index;
}, },
findPrevOptionIndex(index) { findPrevOptionIndex(index) {
const matchedOptionIndex = index > 0 ? this.visibleOptions.slice(0, index).findLastIndex(option => this.isValidOption(option)) : -1; const matchedOptionIndex = index > 0 ? ObjectUtils.findLastIndex(this.visibleOptions.slice(0, index), option => this.isValidOption(option)) : -1;
return matchedOptionIndex > -1 ? matchedOptionIndex : index; return matchedOptionIndex > -1 ? matchedOptionIndex : index;
}, },
findFirstSelectedOptionIndex() { findFirstSelectedOptionIndex() {
return this.hasSelectedOption ? this.visibleOptions.findIndex(option => this.isValidSelectedOption(option)) : -1; return this.hasSelectedOption ? this.visibleOptions.findIndex(option => this.isValidSelectedOption(option)) : -1;
}, },
findLastSelectedOptionIndex() { findLastSelectedOptionIndex() {
return this.hasSelectedOption ? this.visibleOptions.findLastIndex(option => this.isValidSelectedOption(option)) : -1; return this.hasSelectedOption ? ObjectUtils.findLastIndex(this.visibleOptions, option => this.isValidSelectedOption(option)) : -1;
}, },
findNextSelectedOptionIndex(index) { findNextSelectedOptionIndex(index) {
const matchedOptionIndex = this.hasSelectedOption && index < (this.visibleOptions.length - 1) ? this.visibleOptions.slice(index + 1).findIndex(option => this.isValidSelectedOption(option)) : -1; const matchedOptionIndex = this.hasSelectedOption && index < (this.visibleOptions.length - 1) ? this.visibleOptions.slice(index + 1).findIndex(option => this.isValidSelectedOption(option)) : -1;
return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : -1; return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : -1;
}, },
findPrevSelectedOptionIndex(index) { findPrevSelectedOptionIndex(index) {
const matchedOptionIndex = this.hasSelectedOption && index > 0 ? this.visibleOptions.slice(0, index).findLastIndex(option => this.isValidSelectedOption(option)) : -1; const matchedOptionIndex = this.hasSelectedOption && index > 0 ? ObjectUtils.findLastIndex(this.visibleOptions.slice(0, index), option => this.isValidSelectedOption(option)) : -1;
return matchedOptionIndex > -1 ? matchedOptionIndex : -1; return matchedOptionIndex > -1 ? matchedOptionIndex : -1;
}, },
findNearestSelectedOptionIndex(index, firstCheckUp = false) { findNearestSelectedOptionIndex(index, firstCheckUp = false) {

View File

@ -222,5 +222,24 @@ export default {
isPrintableCharacter(char = '') { isPrintableCharacter(char = '') {
return this.isNotEmpty(char) && char.length === 1 && char.match(/\S| /); return this.isNotEmpty(char) && char.length === 1 && char.match(/\S| /);
},
/**
* Firefox-v103 does not currently support the "findLastIndex" method. It is stated that this method will be supported with Firefox-v104.
* https://caniuse.com/mdn-javascript_builtins_array_findlastindex
*/
findLastIndex(arr, callback) {
let index = -1;
if (this.isNotEmpty(arr)) {
try {
index = arr.findLastIndex(callback);
}
catch {
index = arr.lastIndexOf([...arr].reverse().find(callback));
}
}
return index;
} }
} }