jiaqingjiayi-xiaochengxu/甲情_甲意/node_modules/antd-mini/es/Picker/index.js
2024-11-15 11:51:28 +08:00

225 lines
8.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { __awaiter, __generator } from "tslib";
import { Component, triggerEvent, triggerEventOnly, triggerEventValues, getValueFromProps, } from '../_util/simply';
import equal from 'fast-deep-equal';
import { PickerDefaultProps } from './props';
import { getMatchedItemByValue, getMatchedItemByIndex, getStrictMatchedItemByValue, } from './utils';
import mixinValue from '../mixins/value';
Component(PickerDefaultProps, {
// visible受控判断
isVisibleControlled: function () {
return 'visible' in getValueFromProps(this);
},
initData: function () {
var _this = this;
var _a = getValueFromProps(this, [
'options',
'visible',
'defaultVisible',
]), options = _a[0], visible = _a[1], defaultVisible = _a[2];
var columns = this.getterColumns(options);
this.setData({
columns: columns,
}, function () {
var formatValue = _this.getterFormatText();
var selectedIndex = _this.getterSelectedIndex();
_this.setData({
formatValue: formatValue,
selectedIndex: selectedIndex,
visible: _this.isVisibleControlled() ? visible : defaultVisible,
});
});
},
getterColumns: function (options) {
var columns = [];
if (options.length > 0) {
if (options.every(function (item) { return Array.isArray(item); })) {
this.single = false;
columns = options.slice();
}
else {
this.single = true;
columns = [options];
}
}
return columns;
},
defaultFormat: function (value, column) {
if (Array.isArray(column)) {
return column
.filter(function (c) { return c !== undefined; })
.map(function (c) {
if (typeof c === 'object') {
return c.label;
}
return c;
})
.join('-');
}
return (column && column.label) || column || '';
},
getterFormatText: function () {
var _a = getValueFromProps(this, [
'onFormat',
'formattedValueText',
]), onFormat = _a[0], formattedValueText = _a[1];
if (typeof formattedValueText === 'string') {
return formattedValueText;
}
var columns = this.data.columns;
var realValue = this.getValue();
var matchedColumn = getStrictMatchedItemByValue(columns, realValue, this.single).matchedColumn;
var formatValueByProps = onFormat && onFormat(realValue, matchedColumn);
if (formatValueByProps !== undefined && formatValueByProps !== null) {
return formatValueByProps;
}
return this.defaultFormat(realValue, matchedColumn);
},
getterSelectedIndex: function () {
var selectedIndex = [];
var columns = this.data.columns;
var realValue = this.getValue();
var value = realValue || [];
if (this.single) {
value = [realValue];
}
var _loop_1 = function (i) {
var column = columns[i];
var compareValue = value[i];
if (compareValue === undefined || compareValue === null) {
selectedIndex[i] = 0;
}
var index = column.findIndex(function (c) {
return c === compareValue || c.value === compareValue;
});
if (index === -1) {
index = 0;
}
selectedIndex[i] = index;
};
for (var i = 0; i < columns.length; i++) {
_loop_1(i);
}
return selectedIndex;
},
onOpen: function () {
var disabled = getValueFromProps(this, 'disabled');
if (!disabled) {
this.tempSelectedIndex = null;
var selectedIndex = this.getterSelectedIndex();
this.setData({
selectedIndex: selectedIndex,
});
this.triggerPicker(true);
}
},
triggerPicker: function (visible) {
this.setData({
visible: visible,
});
triggerEvent(this, 'visibleChange', visible);
},
onMaskDismiss: function () {
var maskClosable = getValueFromProps(this, 'maskClosable');
if (!maskClosable) {
return;
}
this.triggerPicker(false);
triggerEventOnly(this, 'cancel', { detail: { type: 'mask' } });
},
onCancel: function () {
this.triggerPicker(false);
triggerEventOnly(this, 'cancel', { detail: { type: 'cancel' } });
},
onChange: function (e) {
var selectedIndex = e.detail.value;
this.tempSelectedIndex = selectedIndex;
this.isChangingPickerView = true;
var _a = getMatchedItemByIndex(this.data.columns, this.tempSelectedIndex, this.single), matchedColumn = _a.matchedColumn, matchedValues = _a.matchedValues;
this.setData({
selectedIndex: selectedIndex,
});
triggerEventValues(this, 'change', [matchedValues, matchedColumn], e);
},
onOk: function () {
return __awaiter(this, void 0, void 0, function () {
var result, matchedColumn, matchedValues;
return __generator(this, function (_a) {
if (this.tempSelectedIndex) {
result = getMatchedItemByIndex(this.data.columns, this.tempSelectedIndex, this.single);
}
else {
result = getMatchedItemByValue(this.data.columns, this.getValue(), this.single);
}
matchedColumn = result.matchedColumn, matchedValues = result.matchedValues;
this.triggerPicker(false);
if (!this.isControlled()) {
this.update(matchedValues);
}
triggerEventValues(this, 'ok', [matchedValues, matchedColumn]);
return [2 /*return*/];
});
});
},
}, {
formatValue: '',
columns: [],
visible: false,
selectedIndex: [],
}, [
mixinValue({
transformValue: function (value) {
return {
needUpdate: true,
value: value === undefined ? [] : value,
};
},
}),
], {
tempSelectedIndex: null,
single: false,
isChangingPickerView: false,
onInit: function () {
this.initData();
},
didUpdate: function (prevProps) {
var _this = this;
var options = getValueFromProps(this, 'options');
if (!equal(options, prevProps.options)) {
var newColums = this.getterColumns(options);
this.setData({
columns: newColums,
}, function () {
// 如果是在滚动过程中columns发生变化以onChange里抛出的selectedIndex为准
if (!_this.isChangingPickerView) {
_this.tempSelectedIndex = null;
var selectedIndex = _this.getterSelectedIndex();
_this.setData({
selectedIndex: selectedIndex,
});
}
});
}
var value = getValueFromProps(this, 'value');
if (!equal(prevProps.value, value)) {
var selectedIndex = this.getterSelectedIndex();
this.tempSelectedIndex = null;
this.setData({
selectedIndex: selectedIndex,
});
}
var visible = getValueFromProps(this, 'visible');
if (!equal(prevProps.visible, visible)) {
this.setData({ visible: visible });
}
var formatValue = this.getterFormatText();
var formattedValueText = getValueFromProps(this, 'formattedValueText');
if (formatValue !== this.data.formatValue ||
prevProps.formattedValueText !== formattedValueText) {
this.setData({
formatValue: formatValue,
});
}
this.isChangingPickerView = false;
},
});