handsontable
Version:
Handsontable is a JavaScript Data Grid available for React, Angular and Vue.
51 lines (49 loc) • 1.4 kB
JavaScript
import { isObjectEqual } from "../../helpers/object.mjs";
export const VALIDATOR_TYPE = 'autocomplete';
/**
* The Autocomplete cell validator.
*
* @private
* @param {*} value Value of edited cell.
* @param {Function} callback Callback called with validation result.
*/
export function autocompleteValidator(value, callback) {
let valueToValidate = value;
if (valueToValidate === null || valueToValidate === undefined) {
valueToValidate = '';
}
if (this.allowEmpty && valueToValidate === '') {
callback(true);
return;
}
if (this.strict && this.source) {
if (typeof this.source === 'function') {
this.source(valueToValidate, process(valueToValidate, callback));
} else {
process(valueToValidate, callback)(this.source);
}
} else {
callback(true);
}
}
autocompleteValidator.VALIDATOR_TYPE = VALIDATOR_TYPE;
/**
* Function responsible for validation of autocomplete value.
*
* @param {*} value Value of edited cell.
* @param {Function} callback Callback called with validation result.
* @returns {Function}
*/
function process(value, callback) {
const originalVal = value;
return function (source) {
let found = false;
for (let s = 0, slen = source.length; s < slen; s++) {
if (isObjectEqual(originalVal, source[s])) {
found = true; // perfect match
break;
}
}
callback(found);
};
}