Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _xeUtils=_interopRequireDefault(require("xe-utils")),_ui=require("../../../ui"),_utils=require("../../../ui/src/utils"),_dom=require("../../../ui/src/dom"),_util=require("../../src/util"),_log=require("../../../ui/src/log");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let{getConfig,validators}=_ui.VxeUI;class Rule{constructor(e){Object.defineProperty(this,"$options",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.assign(this,{$options:e,required:e.required,min:e.min,max:e.max,type:e.type,pattern:e.pattern,validator:e.validator,trigger:e.trigger,maxWidth:e.maxWidth})}get content(){return(0,_utils.getFuncText)(this.$options.content||this.$options.message)}get message(){return this.content}}function validREValue(e,t){return!(e&&!(_xeUtils.default.isRegExp(e)?e:new RegExp(e)).test(t))}function validMaxValue(e,t){return!(!_xeUtils.default.eqNull(e)&&t>_xeUtils.default.toNumber(e))}function validMinValue(e,t){return!(!_xeUtils.default.eqNull(e)&&t<_xeUtils.default.toNumber(e))}function validRuleValue(e,t,l){var{type:e,min:i,max:r,pattern:a}=e,s="array"===e,u="number"===e,e="string"===e,n=""+t;if(!validREValue(a,n))return!1;if(s){if(!_xeUtils.default.isArray(t))return!1;if(l&&!t.length)return!1;if(!validMinValue(i,t.length))return!1;if(!validMaxValue(r,t.length))return!1}else if(u){a=Number(t);if(isNaN(a))return!1;if(!validMinValue(i,a))return!1;if(!validMaxValue(r,a))return!1}else{if(e&&!_xeUtils.default.isString(t))return!1;if(l&&!n)return!1;if(!validMinValue(i,n.length))return!1;if(!validMaxValue(r,n.length))return!1}return!0}function checkRuleStatus(e,t){var l=e.required,i=_xeUtils.default.isArray(t)?!t.length:(0,_utils.eqEmptyValue)(t);if(l){if(i)return!1;if(!validRuleValue(e,t,l))return!1}else if(!i&&!validRuleValue(e,t,l))return!1;return!0}var _default=exports.default={methods:{_fullValidate(e,t){return _xeUtils.default.isFunction(t)&&(0,_log.warnLog)("vxe.error.notValidators",["fullValidate(rows, callback)","fullValidate(rows)"]),this.beginValidate(e,null,t,!0)},_validate(e,t){return _xeUtils.default.isFunction(t)&&(0,_log.warnLog)("vxe.error.notValidators",["validate(rows, callback)","validate(rows)"]),this.beginValidate(e,null,t)},_fullValidateField(e,t){t=(_xeUtils.default.isArray(t)?t:t?[t]:[]).map(e=>(0,_util.handleFieldOrColumn)(this,e));return t.length?this.beginValidate(e,t,null,!0):this.$nextTick()},_validateField(e,t){t=(_xeUtils.default.isArray(t)?t:t?[t]:[]).map(e=>(0,_util.handleFieldOrColumn)(this,e));return t.length?this.beginValidate(e,t,null):this.$nextTick()},handleValidError(t){let l=this.validOpts;return new Promise(e=>{!1===l.autoPos?(this.emitEvent("valid-error",t),e()):this.handleEdit(t,{type:"valid-error",trigger:"call"}).then(()=>{setTimeout(()=>{e(this.showValidTooltip(t))},10)})})},handleErrMsgMode(e){var t,l=this.validOpts;return"single"===l.msgMode?(l={},(t=Object.keys(e)).length&&(l[t=t[0]]=e[t]),l):e},beginValidate(e,l,s,a){let i=this;var r=i,u=i,n=i;let o={},{editRules:d,treeConfig:h}=r;r=u.isRowGroupStatus;let{afterFullData:t,pendingRowMaps:g,removeRowMaps:c}=n;u=i.computeTreeOpts,n=i.computeAggregateOpts;let f,v=(!0===e?f=t:e&&(_xeUtils.default.isFunction(e)?s=e:f=_xeUtils.default.isArray(e)?e:[e]),f=f||this.getInsertRecords().concat(this.getUpdateRecords()),[]),m=(this.lastCallTime=Date.now(),this.validRuleErr=!1,this.clearValidate(),{});if(d){let t=l&&l.length?l:this.getColumns();e=r=>{var e=(0,_util.getRowid)(i,r);if(!c[e]&&!g[e]&&!i.isAggregateRecord(r)&&(a||!this.validRuleErr)){let e=[];t.forEach(l=>{let i=_xeUtils.default.isString(l)?l:l.field;!a&&this.validRuleErr||!_xeUtils.default.has(d,i)||e.push(this.validCellRules("all",r,l).catch(({rule:e,rules:t})=>{t={rule:e,rules:t,rowIndex:this.getRowIndex(r),row:r,columnIndex:this.getColumnIndex(l),column:l,field:i,$table:this};if(o[i]||(o[i]=[]),m[(0,_util.getRowid)(this,r)+":"+l.id]={column:l,row:r,rule:e,content:e.content},o[i].push(t),!a)return this.validRuleErr=!0,Promise.reject(t)}))}),v.push(Promise.all(e))}};return r?_xeUtils.default.eachTree(f,e,{children:n.mapChildrenField}):h?(l=u.children||u.childrenField,_xeUtils.default.eachTree(f,e,{children:l})):f.forEach(e),Promise.all(v).then(()=>{let e=Object.keys(o);return this.validErrorMaps=this.handleErrMsgMode(m),this.$nextTick().then(()=>{if(e.length)return Promise.reject(o[e[0]][0]);s&&s()})}).catch(a=>new Promise((e,t)=>{let l=()=>{this.$nextTick(()=>{s?(s(o),e()):("obsolete"===getConfig().validToReject?t:e)(o)})};var i,r=()=>{a.cell=this.getCellElement(a.row,a.column),(0,_dom.scrollToView)(a.cell),this.handleValidError(a).then(l)};!1===this.validOpts.autoPos?l():(i=a.row,this.scrollToRow(i,a.column).then(r))}))}return this.validErrorMaps={},this.$nextTick().then(()=>{s&&s()})},hasCellRules(t,e,l){var i=this.editRules,l=l.property;return!(!l||!i)&&(i=_xeUtils.default.get(i,l))&&_xeUtils.default.find(i,e=>"all"===t||!e.trigger||t===e.trigger)},validCellRules(e,n,o,t){var l=this.editRules,i=o.property;let d=[],h=[];if(i&&l){let u=_xeUtils.default.get(l,i);if(u){let s=_xeUtils.default.isUndefined(t)?_xeUtils.default.get(n,i):t;u.forEach(t=>{let{trigger:l,validator:i}=t;if("all"===e||!l||e===l)if(i){var r,a={cellValue:s,rule:t,rules:u,row:n,rowIndex:this.getRowIndex(n),column:o,columnIndex:this.getColumnIndex(o),field:o.property,$table:this};let e;_xeUtils.default.isString(i)?(r=validators.get(i))&&(r=r.tableCellValidatorMethod||r.cellValidatorMethod)?e=r(a):(0,_log.errLog)("vxe.error.notValidators",[i]):e=i(a),e&&(_xeUtils.default.isError(e)?(this.validRuleErr=!0,d.push(new Rule({type:"custom",trigger:l,content:e.message,rule:new Rule(t)}))):e.catch&&h.push(e.catch(e=>{this.validRuleErr=!0,d.push(new Rule({type:"custom",trigger:l,content:e&&e.message?e.message:t.content||t.message,rule:new Rule(t)}))})))}else checkRuleStatus(t,s)||(this.validRuleErr=!0,d.push(new Rule(t)))})}}return Promise.all(h).then(()=>{var e;if(d.length)return e={rules:d,rule:d[0]},Promise.reject(e)})},_clearValidate(e,t){var{validOpts:l,validErrorMaps:i}=this,r=this.$refs.refValidTooltip,e=_xeUtils.default.isArray(e)?e:e?[e]:[];let a=(_xeUtils.default.isArray(t)?t:t?[t]:[]).map(e=>(0,_util.handleFieldOrColumn)(this,e)),s={};if(r&&r.visible&&r.close(),"single"===l.msgMode)this.validErrorMaps={};else{if(e.length&&a.length)s=Object.assign({},i),e.forEach(t=>{a.forEach(e=>{e=(0,_util.getRowid)(this,t)+":"+e.id;s[e]&&delete s[e]})});else if(e.length){let l=e.map(e=>""+(0,_util.getRowid)(this,e));_xeUtils.default.each(i,(e,t)=>{-1""+e.id);_xeUtils.default.each(i,(e,t)=>{-1{"row"===a.mode&&this.clearValidate(t,l)}).catch(({rule:e})=>e.trigger&&r!==e.trigger?Promise.resolve():(e={rule:e,row:t,column:l,cell:i},this.showValidTooltip(e),Promise.reject(e)))}return Promise.resolve()},showValidTooltip(e){var{$refs:t,height:l,validStore:i,validErrorMaps:r,tableData:a,validOpts:s}=this,{rule:u,row:n,column:o,cell:d}=e,t=t.refValidTooltip,h=u.content;return i.visible=!0,"single"===s.msgMode?this.validErrorMaps={[(0,_util.getRowid)(this,n)+":"+o.id]:{column:o,row:n,rule:u,content:h}}:this.validErrorMaps=Object.assign({},r,{[(0,_util.getRowid)(this,n)+":"+o.id]:{column:o,row:n,rule:u,content:h}}),this.emitEvent("valid-error",e,null),t&&("tooltip"===s.message||"default"===s.message&&!l&&a.length<2)?t.open(d,h):this.$nextTick()}}};