ckgl/node_modules/vant/es/picker/utils.mjs
2024-12-21 13:52:42 +08:00

79 lines
2.3 KiB
JavaScript

import { isDef, clamp, extend, createNamespace } from "../utils/index.mjs";
const [name, bem, t] = createNamespace("picker");
const getFirstEnabledOption = (options) => options.find((option) => !option.disabled) || options[0];
function getColumnsType(columns, fields) {
const firstColumn = columns[0];
if (firstColumn) {
if (Array.isArray(firstColumn)) {
return "multiple";
}
if (fields.children in firstColumn) {
return "cascade";
}
}
return "default";
}
function findIndexOfEnabledOption(options, index) {
index = clamp(index, 0, options.length);
for (let i = index; i < options.length; i++) {
if (!options[i].disabled) return i;
}
for (let i = index - 1; i >= 0; i--) {
if (!options[i].disabled) return i;
}
return 0;
}
const isOptionExist = (options, value, fields) => value !== void 0 && !!options.find((option) => option[fields.value] === value);
function findOptionByValue(options, value, fields) {
const index = options.findIndex((option) => option[fields.value] === value);
const enabledIndex = findIndexOfEnabledOption(options, index);
return options[enabledIndex];
}
function formatCascadeColumns(columns, fields, selectedValues) {
const formatted = [];
let cursor = {
[fields.children]: columns
};
let columnIndex = 0;
while (cursor && cursor[fields.children]) {
const options = cursor[fields.children];
const value = selectedValues.value[columnIndex];
cursor = isDef(value) ? findOptionByValue(options, value, fields) : void 0;
if (!cursor && options.length) {
const firstValue = getFirstEnabledOption(options)[fields.value];
cursor = findOptionByValue(options, firstValue, fields);
}
columnIndex++;
formatted.push(options);
}
return formatted;
}
function getElementTranslateY(element) {
const { transform } = window.getComputedStyle(element);
const translateY = transform.slice(7, transform.length - 1).split(", ")[5];
return Number(translateY);
}
function assignDefaultFields(fields) {
return extend(
{
text: "text",
value: "value",
children: "children"
},
fields
);
}
export {
assignDefaultFields,
bem,
findIndexOfEnabledOption,
findOptionByValue,
formatCascadeColumns,
getColumnsType,
getElementTranslateY,
getFirstEnabledOption,
isOptionExist,
name,
t
};