@univerjs/data-validation 0.2.4-alpha.0 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/cjs/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var H=Object.defineProperty;var G=(i,e,a)=>e in i?H(i,e,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[e]=a;var c=(i,e,a)=>G(i,typeof e!="symbol"?e+"":e,a);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("@univerjs/core"),E=require("rxjs"),I=require("@univerjs/sheets");var L=(i=>(i.SHEET="sheet",i))(L||{});class M{constructor(){c(this,"_validatorByScopes",new Map);c(this,"_validatorMap",new Map);c(this,"_validatorsChange$",new E.BehaviorSubject(void 0));c(this,"validatorsChange$",this._validatorsChange$.asObservable())}_addValidatorToScope(e,a){this._validatorByScopes.has(a)||this._validatorByScopes.set(a,[]);const t=this._validatorByScopes.get(a);if(t.findIndex(r=>r.id===e.id)>-1)throw new Error(`Validator item with the same id ${e.id} has already been added!`);t.push(e)}_removeValidatorFromScope(e,a){const t=this._validatorByScopes.get(a);if(!t)return;const r=t.findIndex(n=>n.id===e.id);r>-1&&t.splice(r,1)}register(e){return this._validatorMap.set(e.id,e),Array.isArray(e.scopes)?e.scopes.forEach(a=>{this._addValidatorToScope(e,a)}):this._addValidatorToScope(e,e.scopes),this._validatorsChange$.next(),o.toDisposable(()=>{this._validatorMap.delete(e.id),Array.isArray(e.scopes)?e.scopes.forEach(a=>{this._removeValidatorFromScope(e,a)}):this._removeValidatorFromScope(e,e.scopes),this._validatorsChange$.next()})}getValidatorItem(e){return this._validatorMap.get(e)}getValidatorsByScope(e){return this._validatorByScopes.get(e)}}var m=(i=>(i[i.SETTING=0]="SETTING",i[i.RANGE=1]="RANGE",i[i.OPTIONS=2]="OPTIONS",i))(m||{});function R(i){return{type:i.type,operator:i.operator,formula1:i.formula1,formula2:i.formula2,allowBlank:i.allowBlank}}function A(i){return{error:i.error,errorStyle:i.errorStyle,errorTitle:i.errorTitle,imeMode:i.imeMode,prompt:i.prompt,promptTitle:i.promptTitle,showDropDown:i.showDropDown,showErrorMessage:i.showErrorMessage,showInputMessage:i.showInputMessage,renderMode:i.renderMode,bizInfo:i.bizInfo}}function Q(i){const a=i.get(I.SheetsSelectionsService).getCurrentSelections().map(n=>n.range);return{uid:o.Tools.generateRandomId(6),type:o.DataValidationType.DECIMAL,operator:o.DataValidationOperator.EQUAL,formula1:"100",ranges:a!=null?a:[{startColumn:0,endColumn:0,startRow:0,endRow:0}]}}class w extends o.Disposable{constructor(a,t,r){super();c(this,"_dataValidations");c(this,"_dataValidationMap",new Map);c(this,"_dataValidations$",new E.Subject);c(this,"unitId");c(this,"subUnitId");c(this,"dataValidations$",this._dataValidations$.asObservable());this.unitId=a,this.subUnitId=t,r&&(this._insertRules(r),this._notice(),this.disposeWithMe({dispose:()=>{this._dataValidations$.complete()}}))}_notice(){this._dataValidations$.next(this._dataValidations)}_insertRules(a){this._dataValidations=a,a.forEach(t=>{this._dataValidationMap.set(t.uid,t)})}getRuleById(a){return this._dataValidationMap.get(a)}getRuleIndex(a){return this._dataValidations.findIndex(t=>t.uid===a)}addRule(a,t){const n=(Array.isArray(a)?a:[a]).filter(d=>!this._dataValidationMap.has(d.uid));typeof t=="number"&&t<this._dataValidations.length?this._dataValidations.splice(t,0,...n):this._dataValidations.push(...n),n.forEach(d=>{this._dataValidationMap.set(d.uid,d)}),this._notice()}removeRule(a){const t=this._dataValidations.findIndex(r=>r.uid===a);t>-1&&(this._dataValidations.splice(t,1),this._dataValidationMap.delete(a),this._notice())}updateRule(a,t){const r=this._dataValidationMap.get(a),n=this._dataValidations.findIndex(s=>a===s.uid);if(!r)throw new Error(`Data validation rule is not found, ruleId: ${a}.`);const d={...r};switch(t.type){case m.RANGE:{d.ranges=t.payload;break}case m.SETTING:{Object.assign(d,R(t.payload));break}case m.OPTIONS:{Object.assign(d,A(t.payload));break}}return this._dataValidations[n]=d,this._dataValidationMap.set(a,d),this._notice(),d}getDataValidations(){return this._dataValidations}toJSON(){return this._dataValidations}validator(a,t,r,n){return o.DataValidationStatus.VALID}}var W=Object.defineProperty,F=Object.getOwnPropertyDescriptor,J=(i,e,a,t)=>{for(var r=t>1?void 0:t?F(e,a):e,n=i.length-1,d;n>=0;n--)(d=i[n])&&(r=(t?d(e,a,r):d(r))||r);return t&&r&&W(e,a,r),r},z=(i,e)=>(a,t)=>e(a,t,i);exports.DataValidationModel=class extends o.Disposable{constructor(a){super();c(this,"_model",new Map);c(this,"_managerCreator",(a,t)=>new w(a,t,[]));c(this,"_ruleChange$",new E.Subject);c(this,"_validStatusChange$",new E.Subject);c(this,"ruleChange$",this._ruleChange$.asObservable());c(this,"ruleChangeDebounce$",this.ruleChange$.pipe(E.debounceTime(20)));c(this,"validStatusChange$",this._validStatusChange$.asObservable().pipe(E.debounceTime(20)));this._logService=a,this.disposeWithMe({dispose:()=>{this._ruleChange$.complete(),this._validStatusChange$.complete()}})}setManagerCreator(a){this._managerCreator=a}ensureManager(a,t){this._model.has(a)||this._model.set(a,new Map);const r=this._model.get(a);if(r.has(t))return r.get(t);const n=this._managerCreator(a,t);return r.set(t,n),n}_addRuleSideEffect(a,t,r){this.ensureManager(a,t).getRuleById(r.uid)||this._ruleChange$.next({rule:r,type:"add",unitId:a,subUnitId:t})}addRule(a,t,r,n){try{const d=this.ensureManager(a,t);(Array.isArray(r)?r:[r]).forEach(l=>{this._addRuleSideEffect(a,t,l)}),d.addRule(r,n)}catch(d){this._logService.error(d)}}updateRule(a,t,r,n){try{const s=this.ensureManager(a,t).updateRule(r,n);this._ruleChange$.next({rule:s,type:"update",unitId:a,subUnitId:t})}catch(d){this._logService.error(d)}}removeRule(a,t,r){try{const n=this.ensureManager(a,t),d=n.getRuleById(r);d&&(n.removeRule(r),this._ruleChange$.next({rule:d,type:"remove",unitId:a,subUnitId:t}))}catch(n){this._logService.error(n)}}getRuleById(a,t,r){return this.ensureManager(a,t).getRuleById(r)}getRuleIndex(a,t,r){return this.ensureManager(a,t).getRuleIndex(r)}getRules(a,t){return this.ensureManager(a,t).getDataValidations()}validator(a,t,r){const{unitId:n,subUnitId:d}=r;return this.ensureManager(n,d).validator(a,t,r,(l,u)=>{u&&this._validStatusChange$.next({unitId:n,subUnitId:d,ruleId:t.uid,status:l})})}getUnitRules(a){const t=this._model.get(a);if(!t)return[];const r=[];return t.forEach(n=>{r.push([n.subUnitId,n.getDataValidations()])}),r}deleteUnitRules(a){this._model.delete(a)}getSubUnitIds(a){var t,r;return Array.from((r=(t=this._model.get(a))==null?void 0:t.keys())!=null?r:[])}};exports.DataValidationModel=J([z(0,o.ILogService)],exports.DataValidationModel);const g={type:o.CommandType.MUTATION,id:"data-validation.mutation.addRule",handler(i,e){if(!e)return!1;const{unitId:a,subUnitId:t,rule:r,index:n}=e;return i.get(exports.DataValidationModel).addRule(a,t,r,n),!0}},_={type:o.CommandType.MUTATION,id:"data-validation.mutation.removeRule",handler(i,e){if(!e)return!1;const{unitId:a,subUnitId:t,ruleId:r}=e,n=i.get(exports.DataValidationModel);return Array.isArray(r)?r.forEach(d=>{n.removeRule(a,t,d)}):n.removeRule(a,t,r),!0}},V={type:o.CommandType.MUTATION,id:"data-validation.mutation.updateRule",handler(i,e){if(!e)return!1;const{unitId:a,subUnitId:t,ruleId:r,payload:n}=e;return i.get(exports.DataValidationModel).updateRule(a,t,r,n),!0}},b={type:o.CommandType.COMMAND,id:"data-validation.command.addRule",async handler(i,e){if(i.get(o.ILogService).warn("[Deprecated] AddDataValidationCommand is deprecated, please use AddSheetDataValidationCommand in @univerjs/sheets-data-validation instead!"),!e)return!1;const{rule:t,unitId:r,subUnitId:n}=e,d=i.get(o.ICommandService),s=i.get(o.IUndoRedoService),l={...e,rule:{...e.rule,ranges:[e.rule.range]}},u=[{id:g.id,params:l}],p=[{id:_.id,params:{unitId:r,subUnitId:n,ruleId:t.uid}}];return s.pushUndoRedo({unitID:r,redoMutations:u,undoMutations:p}),await d.executeCommand(g.id,l),!0}},K=(i,e)=>{const a=i.get(exports.DataValidationModel),{unitId:t,subUnitId:r,ruleId:n}=e;if(Array.isArray(n)){const s=n.map(l=>a.getRuleById(t,r,l)).filter(Boolean);return[{id:g.id,params:{unitId:t,subUnitId:r,rule:s}}]}return[{id:g.id,params:{unitId:t,subUnitId:r,rule:{...a.getRuleById(t,r,n)},index:a.getRuleIndex(t,r,n)}}]},P={type:o.CommandType.COMMAND,id:"data-validation.command.removeRule",handler(i,e){if(!e)return!1;const{unitId:a,subUnitId:t,ruleId:r}=e,n=i.get(o.ICommandService),d=i.get(o.IUndoRedoService),s=i.get(exports.DataValidationModel),l=[{id:_.id,params:e}],u=[{id:g.id,params:{unitId:a,subUnitId:t,rule:{...s.getRuleById(a,t,r)},index:s.getRuleIndex(a,t,r)}}];return d.pushUndoRedo({undoMutations:u,redoMutations:l,unitID:e.unitId}),n.executeCommand(_.id,e),!0}},B={type:o.CommandType.COMMAND,id:"data-validation.command.updateDataValidationSetting",handler(i,e){if(i.get(o.ILogService).warn("[Deprecated] UpdateDataValidationOptionsCommand is deprecated, please use UpdateSheetDataValidationOptionsCommand in @univerjs/sheets-data-validation instead!"),!e)return!1;const t=i.get(o.ICommandService),r=i.get(o.IUndoRedoService),n=i.get(exports.DataValidationModel),{unitId:d,subUnitId:s,ruleId:l,options:u}=e,p=n.getRuleById(d,s,l);if(!p)return!1;const h={unitId:d,subUnitId:s,ruleId:l,payload:{type:m.OPTIONS,payload:u}},v=[{id:V.id,params:h}],D={unitId:d,subUnitId:s,ruleId:l,payload:{type:m.OPTIONS,payload:A(p)}},O=[{id:V.id,params:D}];return r.pushUndoRedo({unitID:d,redoMutations:v,undoMutations:O}),t.executeCommand(V.id,h),!0}},$={type:o.CommandType.COMMAND,id:"data-validation.command.updateDataValidationOptions",handler(i,e){if(i.get(o.ILogService).warn("[Deprecated] UpdateDataValidationSettingCommand is deprecated, please use UpdateSheetDataValidationSettingCommand in @univerjs/sheets-data-validation instead!"),!e)return!1;const t=i.get(o.ICommandService),r=i.get(o.IUndoRedoService),n=i.get(exports.DataValidationModel),d=i.get(M),{unitId:s,subUnitId:l,ruleId:u,setting:p}=e,h=d.getValidatorItem(p.type);if(!h)return!1;const v=n.getRuleById(s,l,u);if(!v||!h.validatorFormula({...v,...p},s,l).success)return!1;const D={unitId:s,subUnitId:l,ruleId:u,payload:{type:m.SETTING,payload:p}},O=[{id:V.id,params:D}],j={unitId:s,subUnitId:l,ruleId:u,payload:{type:m.SETTING,payload:R(v)}},q=[{id:V.id,params:j}];return r.pushUndoRedo({unitID:s,redoMutations:O,undoMutations:q}),t.executeCommand(V.id,D),!0}},x={type:o.CommandType.COMMAND,id:"data-validation.command.removeAll",handler(i,e){if(!e)return!1;const{unitId:a,subUnitId:t}=e,r=i.get(o.ICommandService),n=i.get(exports.DataValidationModel),d=i.get(o.IUndoRedoService),s=[...n.getRules(a,t)],l={unitId:a,subUnitId:t,ruleId:s.map(h=>h.uid)},u=[{id:_.id,params:l}],p=[{id:g.id,params:{unitId:a,subUnitId:t,rule:s}}];return d.pushUndoRedo({redoMutations:u,undoMutations:p,unitID:a}),r.executeCommand(_.id,l),!0}};var X=Object.defineProperty,Y=Object.getOwnPropertyDescriptor,Z=(i,e,a,t)=>{for(var r=t>1?void 0:t?Y(e,a):e,n=i.length-1,d;n>=0;n--)(d=i[n])&&(r=(t?d(e,a,r):d(r))||r);return t&&r&&X(e,a,r),r},T=(i,e)=>(a,t)=>e(a,t,i);const k="SHEET_DATA_VALIDATION_PLUGIN";exports.DataValidationResourceController=class extends o.Disposable{constructor(e,a,t){super(),this._resourceManagerService=e,this._univerInstanceService=a,this._dataValidationModel=t,this._initSnapshot()}_initSnapshot(){const e=t=>{const r=this._dataValidationModel.getUnitRules(t),n={};return r?(r.forEach(([d,s])=>{n[d]=s}),JSON.stringify(n)):""},a=t=>{if(!t)return{};try{return JSON.parse(t)}catch{return{}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:k,businesses:[o.UniverInstanceType.UNIVER_SHEET],toJson:t=>e(t),parseJson:t=>a(t),onUnLoad:t=>{this._dataValidationModel.deleteUnitRules(t)},onLoad:(t,r)=>{Object.keys(r).forEach(n=>{r[n].forEach(s=>{this._dataValidationModel.addRule(t,n,s)})})}}))}};exports.DataValidationResourceController=Z([o.OnLifecycle(o.LifecycleStages.Ready,exports.DataValidationResourceController),T(0,o.IResourceManagerService),T(1,o.IUniverInstanceService),T(2,o.Inject(exports.DataValidationModel))],exports.DataValidationResourceController);var aa=Object.defineProperty,ta=Object.getOwnPropertyDescriptor,ea=(i,e,a,t)=>{for(var r=t>1?void 0:t?ta(e,a):e,n=i.length-1,d;n>=0;n--)(d=i[n])&&(r=(t?d(e,a,r):d(r))||r);return t&&r&&aa(e,a,r),r},f=(i,e)=>(a,t)=>e(a,t,i);exports.DataValidationSheetController=class extends o.Disposable{constructor(e,a,t){super(),this._sheetInterceptorService=e,this._univerInstanceService=a,this._dataValidationModel=t,this._initSheetChange()}_initSheetChange(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:e=>{var a;if(e.id===I.RemoveSheetCommand.id){const t=e.params,r=t.unitId||this._univerInstanceService.getCurrentUnitForType(o.UniverInstanceType.UNIVER_SHEET).getUnitId(),n=this._univerInstanceService.getUniverSheetInstance(r);if(!n)return{redos:[],undos:[]};const d=t.subUnitId||((a=n.getActiveSheet())==null?void 0:a.getSheetId());if(!d)return{redos:[],undos:[]};const s=this._dataValidationModel.ensureManager(r,d);if(!s)return{redos:[],undos:[]};const l=s.getDataValidations(),u=l.map(v=>v.uid),p={unitId:r,subUnitId:d,ruleId:u},h={unitId:r,subUnitId:d,rule:l};return{redos:[{id:_.id,params:p}],undos:[{id:g.id,params:h}]}}return{redos:[],undos:[]}}}))}};exports.DataValidationSheetController=ea([o.OnLifecycle(o.LifecycleStages.Ready,exports.DataValidationSheetController),f(0,o.Inject(I.SheetInterceptorService)),f(1,o.Inject(o.IUniverInstanceService)),f(2,o.Inject(exports.DataValidationModel))],exports.DataValidationSheetController);var ra=Object.defineProperty,oa=Object.getOwnPropertyDescriptor,ia=(i,e,a,t)=>{for(var r=t>1?void 0:t?oa(e,a):e,n=i.length-1,d;n>=0;n--)(d=i[n])&&(r=(t?d(e,a,r):d(r))||r);return t&&r&&ra(e,a,r),r},y=(i,e)=>(a,t)=>e(a,t,i);const na="UNIVER_DATA_VALIDATION_PLUGIN";var S;exports.UniverDataValidationPlugin=(S=class extends o.Plugin{constructor(e,a,t){super(),this._injector=a,this._commandService=t}onStarting(e){[[exports.DataValidationModel],[M],[exports.DataValidationResourceController],[exports.DataValidationSheetController]].forEach(a=>{e.add(a)}),[b,x,B,$,P,g,V,_].forEach(a=>{this._commandService.registerCommand(a)})}},c(S,"pluginName",na),c(S,"type",o.UniverInstanceType.UNIVER_SHEET),S);exports.UniverDataValidationPlugin=ia([y(1,o.Inject(o.Injector)),y(2,o.ICommandService)],exports.UniverDataValidationPlugin);o.DataValidationOperator.BETWEEN+"",o.DataValidationOperator.EQUAL+"",o.DataValidationOperator.GREATER_THAN+"",o.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",o.DataValidationOperator.LESS_THAN+"",o.DataValidationOperator.LESS_THAN_OR_EQUAL+"",o.DataValidationOperator.NOT_BETWEEN+"",o.DataValidationOperator.NOT_EQUAL+"";const da={[o.DataValidationOperator.BETWEEN]:"dataValidation.ruleName.between",[o.DataValidationOperator.EQUAL]:"dataValidation.ruleName.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.ruleName.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.ruleName.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.ruleName.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.ruleName.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.ruleName.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.ruleName.notEqual"},sa={[o.DataValidationOperator.BETWEEN]:"dataValidation.errorMsg.between",[o.DataValidationOperator.EQUAL]:"dataValidation.errorMsg.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.errorMsg.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.errorMsg.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.errorMsg.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.errorMsg.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.errorMsg.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.errorMsg.notEqual"},la={[o.DataValidationOperator.BETWEEN]:"dataValidation.textLength.errorMsg.between",[o.DataValidationOperator.EQUAL]:"dataValidation.textLength.errorMsg.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.textLength.errorMsg.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.textLength.errorMsg.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.textLength.errorMsg.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.textLength.errorMsg.notEqual"};var ua=Object.defineProperty,ca=Object.getOwnPropertyDescriptor,pa=(i,e,a,t)=>{for(var r=t>1?void 0:t?ca(e,a):e,n=i.length-1,d;n>=0;n--)(d=i[n])&&(r=(t?d(e,a,r):d(r))||r);return t&&r&&ua(e,a,r),r},N=(i,e)=>(a,t)=>e(a,t,i);const C="{FORMULA1}",U="{FORMULA2}",ha={[o.DataValidationOperator.BETWEEN]:"dataValidation.operators.between",[o.DataValidationOperator.EQUAL]:"dataValidation.operators.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.operators.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.operators.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.operators.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.operators.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.operators.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.operators.notEqual"};exports.BaseDataValidator=class{constructor(e,a){c(this,"canvasRender",null);c(this,"dropdown");c(this,"optionsInput");this.localeService=e,this.injector=a}get operatorNames(){return this.operators.map(e=>this.localeService.t(ha[e]))}get titleStr(){return this.localeService.t(this.title)}skipDefaultFontRender(e,a,t){return!1}generateRuleName(e){var t,r;if(!e.operator)return this.titleStr;const a=this.localeService.t(da[e.operator]).replace(C,(t=e.formula1)!=null?t:"").replace(U,(r=e.formula2)!=null?r:"");return`${this.titleStr} ${a}`}generateRuleErrorMessage(e){var t,r;return e.operator?`${this.localeService.t(sa[e.operator]).replace(C,(t=e.formula1)!=null?t:"").replace(U,(r=e.formula2)!=null?r:"")}`:this.titleStr}getRuleFinalError(e){return e.showInputMessage&&e.error?e.error:this.generateRuleErrorMessage(e)}isEmptyCellValue(e){return e===""||e===void 0||e===null}async isValidType(e,a,t){return!0}transform(e,a,t){return e}async validatorIsEqual(e,a,t){return!0}async validatorIsNotEqual(e,a,t){return!0}async validatorIsBetween(e,a,t){return!0}async validatorIsNotBetween(e,a,t){return!0}async validatorIsGreaterThan(e,a,t){return!0}async validatorIsGreaterThanOrEqual(e,a,t){return!0}async validatorIsLessThan(e,a,t){return!0}async validatorIsLessThanOrEqual(e,a,t){return!0}async validator(e,a){const{value:t,unitId:r,subUnitId:n}=e,d=this.isEmptyCellValue(t),{allowBlank:s=!0,operator:l}=a;if(d)return s;const u=await this.parseFormula(a,r,n);if(!await this.isValidType(e,u,a))return!1;if(!o.Tools.isDefine(l))return!0;const p=this.transform(e,u,a);switch(l){case o.DataValidationOperator.BETWEEN:return this.validatorIsBetween(p,u,a);case o.DataValidationOperator.EQUAL:return this.validatorIsEqual(p,u,a);case o.DataValidationOperator.GREATER_THAN:return this.validatorIsGreaterThan(p,u,a);case o.DataValidationOperator.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(p,u,a);case o.DataValidationOperator.LESS_THAN:return this.validatorIsLessThan(p,u,a);case o.DataValidationOperator.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(p,u,a);case o.DataValidationOperator.NOT_BETWEEN:return this.validatorIsNotBetween(p,u,a);case o.DataValidationOperator.NOT_EQUAL:return this.validatorIsNotEqual(p,u,a);default:throw new Error("Unknown operator.")}}};exports.BaseDataValidator=pa([N(0,o.Inject(o.LocaleService)),N(1,o.Inject(o.Injector))],exports.BaseDataValidator);const ma=[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.NOT_BETWEEN];exports.AddDataValidationCommand=b;exports.AddDataValidationMutation=g;exports.DataValidationManager=w;exports.DataValidatorRegistryScope=L;exports.DataValidatorRegistryService=M;exports.RemoveAllDataValidationCommand=x;exports.RemoveDataValidationCommand=P;exports.RemoveDataValidationMutation=_;exports.TWO_FORMULA_OPERATOR_COUNT=ma;exports.TextLengthErrorTitleMap=la;exports.UpdateDataValidationMutation=V;exports.UpdateDataValidationOptionsCommand=B;exports.UpdateDataValidationSettingCommand=$;exports.UpdateRuleType=m;exports.createDefaultNewRule=Q;exports.getRuleOptions=A;exports.getRuleSetting=R;exports.removeDataValidationUndoFactory=K;
1
+ "use strict";var H=Object.defineProperty;var G=(i,e,a)=>e in i?H(i,e,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[e]=a;var c=(i,e,a)=>G(i,typeof e!="symbol"?e+"":e,a);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("@univerjs/core"),E=require("rxjs"),I=require("@univerjs/sheets");var L=(i=>(i.SHEET="sheet",i))(L||{});class M{constructor(){c(this,"_validatorByScopes",new Map);c(this,"_validatorMap",new Map);c(this,"_validatorsChange$",new E.BehaviorSubject(void 0));c(this,"validatorsChange$",this._validatorsChange$.asObservable())}_addValidatorToScope(e,a){this._validatorByScopes.has(a)||this._validatorByScopes.set(a,[]);const t=this._validatorByScopes.get(a);if(t.findIndex(r=>r.id===e.id)>-1)throw new Error(`Validator item with the same id ${e.id} has already been added!`);t.push(e)}_removeValidatorFromScope(e,a){const t=this._validatorByScopes.get(a);if(!t)return;const r=t.findIndex(n=>n.id===e.id);r>-1&&t.splice(r,1)}register(e){return this._validatorMap.set(e.id,e),Array.isArray(e.scopes)?e.scopes.forEach(a=>{this._addValidatorToScope(e,a)}):this._addValidatorToScope(e,e.scopes),this._validatorsChange$.next(),o.toDisposable(()=>{this._validatorMap.delete(e.id),Array.isArray(e.scopes)?e.scopes.forEach(a=>{this._removeValidatorFromScope(e,a)}):this._removeValidatorFromScope(e,e.scopes),this._validatorsChange$.next()})}getValidatorItem(e){return this._validatorMap.get(e)}getValidatorsByScope(e){return this._validatorByScopes.get(e)}}var m=(i=>(i[i.SETTING=0]="SETTING",i[i.RANGE=1]="RANGE",i[i.OPTIONS=2]="OPTIONS",i))(m||{});function R(i){return{type:i.type,operator:i.operator,formula1:i.formula1,formula2:i.formula2,allowBlank:i.allowBlank}}function A(i){return{error:i.error,errorStyle:i.errorStyle,errorTitle:i.errorTitle,imeMode:i.imeMode,prompt:i.prompt,promptTitle:i.promptTitle,showDropDown:i.showDropDown,showErrorMessage:i.showErrorMessage,showInputMessage:i.showInputMessage,renderMode:i.renderMode,bizInfo:i.bizInfo}}function Q(i){const a=i.get(I.SheetsSelectionsService).getCurrentSelections().map(n=>n.range);return{uid:o.Tools.generateRandomId(6),type:o.DataValidationType.DECIMAL,operator:o.DataValidationOperator.EQUAL,formula1:"100",ranges:a!=null?a:[{startColumn:0,endColumn:0,startRow:0,endRow:0}]}}class w extends o.Disposable{constructor(a,t){super();c(this,"_dataValidations",[]);c(this,"_dataValidationMap",new Map);c(this,"_dataValidations$",new E.BehaviorSubject(this._dataValidations));c(this,"unitId");c(this,"subUnitId");c(this,"dataValidations$",this._dataValidations$.asObservable());this.unitId=a,this.subUnitId=t,this._notice(),this.disposeWithMe({dispose:()=>{this._dataValidations$.complete()}})}_notice(){this._dataValidations$.next(this._dataValidations)}getRuleById(a){return this._dataValidationMap.get(a)}getRuleIndex(a){return this._dataValidations.findIndex(t=>t.uid===a)}addRule(a,t){const n=(Array.isArray(a)?a:[a]).filter(d=>!this._dataValidationMap.has(d.uid));typeof t=="number"&&t<this._dataValidations.length?this._dataValidations.splice(t,0,...n):this._dataValidations.push(...n),n.forEach(d=>{this._dataValidationMap.set(d.uid,d)}),this._notice()}removeRule(a){const t=this._dataValidations.findIndex(r=>r.uid===a);t>-1&&(this._dataValidations.splice(t,1),this._dataValidationMap.delete(a),this._notice())}updateRule(a,t){const r=this._dataValidationMap.get(a),n=this._dataValidations.findIndex(s=>a===s.uid);if(!r)throw new Error(`Data validation rule is not found, ruleId: ${a}.`);const d={...r};switch(t.type){case m.RANGE:{d.ranges=t.payload;break}case m.SETTING:{Object.assign(d,R(t.payload));break}case m.OPTIONS:{Object.assign(d,A(t.payload));break}}return this._dataValidations[n]=d,this._dataValidationMap.set(a,d),this._notice(),d}getDataValidations(){return this._dataValidations}toJSON(){return this._dataValidations}validator(a,t,r,n){return o.DataValidationStatus.VALID}}var W=Object.defineProperty,F=Object.getOwnPropertyDescriptor,J=(i,e,a,t)=>{for(var r=t>1?void 0:t?F(e,a):e,n=i.length-1,d;n>=0;n--)(d=i[n])&&(r=(t?d(e,a,r):d(r))||r);return t&&r&&W(e,a,r),r},z=(i,e)=>(a,t)=>e(a,t,i);exports.DataValidationModel=class extends o.Disposable{constructor(a){super();c(this,"_model",new Map);c(this,"_managerCreator",(a,t)=>new w(a,t));c(this,"_ruleChange$",new E.Subject);c(this,"_validStatusChange$",new E.Subject);c(this,"ruleChange$",this._ruleChange$.asObservable());c(this,"ruleChangeDebounce$",this.ruleChange$.pipe(E.debounceTime(20)));c(this,"validStatusChange$",this._validStatusChange$.asObservable().pipe(E.debounceTime(20)));this._logService=a,this.disposeWithMe({dispose:()=>{this._ruleChange$.complete(),this._validStatusChange$.complete()}})}setManagerCreator(a){this._managerCreator=a}ensureManager(a,t){this._model.has(a)||this._model.set(a,new Map);const r=this._model.get(a);if(r.has(t))return r.get(t);const n=this._managerCreator(a,t);return r.set(t,n),this.disposeWithMe(n),n}_addRuleSideEffect(a,t,r,n){this.ensureManager(a,t).getRuleById(r.uid)||this._ruleChange$.next({rule:r,type:"add",unitId:a,subUnitId:t,source:n})}addRule(a,t,r,n,d){try{const s=this.ensureManager(a,t);(Array.isArray(r)?r:[r]).forEach(l=>{this._addRuleSideEffect(a,t,l,n)}),s.addRule(r,d)}catch(s){this._logService.error(s)}}updateRule(a,t,r,n,d){try{const u=this.ensureManager(a,t).updateRule(r,n);this._ruleChange$.next({rule:u,type:"update",unitId:a,subUnitId:t,source:d})}catch(s){this._logService.error(s)}}removeRule(a,t,r,n){try{const d=this.ensureManager(a,t),s=d.getRuleById(r);s&&(d.removeRule(r),this._ruleChange$.next({rule:s,type:"remove",unitId:a,subUnitId:t,source:n}))}catch(d){this._logService.error(d)}}getRuleById(a,t,r){return this.ensureManager(a,t).getRuleById(r)}getRuleIndex(a,t,r){return this.ensureManager(a,t).getRuleIndex(r)}getRules(a,t){return this.ensureManager(a,t).getDataValidations()}validator(a,t,r){const{unitId:n,subUnitId:d}=r;return this.ensureManager(n,d).validator(a,t,r,(u,l)=>{l&&this._validStatusChange$.next({unitId:n,subUnitId:d,ruleId:t.uid,status:u})})}getUnitRules(a){const t=this._model.get(a);if(!t)return[];const r=[];return t.forEach(n=>{r.push([n.subUnitId,n.getDataValidations()])}),r}deleteUnitRules(a){this._model.delete(a)}getSubUnitIds(a){var t,r;return Array.from((r=(t=this._model.get(a))==null?void 0:t.keys())!=null?r:[])}};exports.DataValidationModel=J([z(0,o.ILogService)],exports.DataValidationModel);const g={type:o.CommandType.MUTATION,id:"data-validation.mutation.addRule",handler(i,e){if(!e)return!1;const{unitId:a,subUnitId:t,rule:r,index:n,source:d="command"}=e;return i.get(exports.DataValidationModel).addRule(a,t,r,d,n),!0}},_={type:o.CommandType.MUTATION,id:"data-validation.mutation.removeRule",handler(i,e){if(!e)return!1;const{unitId:a,subUnitId:t,ruleId:r,source:n="command"}=e,d=i.get(exports.DataValidationModel);return Array.isArray(r)?r.forEach(s=>{d.removeRule(a,t,s,n)}):d.removeRule(a,t,r,n),!0}},V={type:o.CommandType.MUTATION,id:"data-validation.mutation.updateRule",handler(i,e){if(!e)return!1;const{unitId:a,subUnitId:t,ruleId:r,payload:n,source:d="command"}=e;return i.get(exports.DataValidationModel).updateRule(a,t,r,n,d),!0}},b={type:o.CommandType.COMMAND,id:"data-validation.command.addRule",async handler(i,e){if(i.get(o.ILogService).warn("[Deprecated] AddDataValidationCommand is deprecated, please use AddSheetDataValidationCommand in @univerjs/sheets-data-validation instead!"),!e)return!1;const{rule:t,unitId:r,subUnitId:n}=e,d=i.get(o.ICommandService),s=i.get(o.IUndoRedoService),u={...e,rule:{...e.rule,ranges:[e.rule.range]}},l=[{id:g.id,params:u}],p=[{id:_.id,params:{unitId:r,subUnitId:n,ruleId:t.uid}}];return s.pushUndoRedo({unitID:r,redoMutations:l,undoMutations:p}),await d.executeCommand(g.id,u),!0}},K=(i,e)=>{const a=i.get(exports.DataValidationModel),{unitId:t,subUnitId:r,ruleId:n,source:d}=e;if(Array.isArray(n)){const u=n.map(l=>a.getRuleById(t,r,l)).filter(Boolean);return[{id:g.id,params:{unitId:t,subUnitId:r,rule:u,source:d}}]}return[{id:g.id,params:{unitId:t,subUnitId:r,rule:{...a.getRuleById(t,r,n)},index:a.getRuleIndex(t,r,n)}}]},P={type:o.CommandType.COMMAND,id:"data-validation.command.removeRule",handler(i,e){if(!e)return!1;const{unitId:a,subUnitId:t,ruleId:r}=e,n=i.get(o.ICommandService),d=i.get(o.IUndoRedoService),s=i.get(exports.DataValidationModel),u=[{id:_.id,params:e}],l=[{id:g.id,params:{unitId:a,subUnitId:t,rule:{...s.getRuleById(a,t,r)},index:s.getRuleIndex(a,t,r)}}];return d.pushUndoRedo({undoMutations:l,redoMutations:u,unitID:e.unitId}),n.executeCommand(_.id,e),!0}},B={type:o.CommandType.COMMAND,id:"data-validation.command.updateDataValidationSetting",handler(i,e){if(i.get(o.ILogService).warn("[Deprecated] UpdateDataValidationOptionsCommand is deprecated, please use UpdateSheetDataValidationOptionsCommand in @univerjs/sheets-data-validation instead!"),!e)return!1;const t=i.get(o.ICommandService),r=i.get(o.IUndoRedoService),n=i.get(exports.DataValidationModel),{unitId:d,subUnitId:s,ruleId:u,options:l}=e,p=n.getRuleById(d,s,u);if(!p)return!1;const h={unitId:d,subUnitId:s,ruleId:u,payload:{type:m.OPTIONS,payload:l}},v=[{id:V.id,params:h}],D={unitId:d,subUnitId:s,ruleId:u,payload:{type:m.OPTIONS,payload:A(p)}},O=[{id:V.id,params:D}];return r.pushUndoRedo({unitID:d,redoMutations:v,undoMutations:O}),t.executeCommand(V.id,h),!0}},$={type:o.CommandType.COMMAND,id:"data-validation.command.updateDataValidationOptions",handler(i,e){if(i.get(o.ILogService).warn("[Deprecated] UpdateDataValidationSettingCommand is deprecated, please use UpdateSheetDataValidationSettingCommand in @univerjs/sheets-data-validation instead!"),!e)return!1;const t=i.get(o.ICommandService),r=i.get(o.IUndoRedoService),n=i.get(exports.DataValidationModel),d=i.get(M),{unitId:s,subUnitId:u,ruleId:l,setting:p}=e,h=d.getValidatorItem(p.type);if(!h)return!1;const v=n.getRuleById(s,u,l);if(!v||!h.validatorFormula({...v,...p},s,u).success)return!1;const D={unitId:s,subUnitId:u,ruleId:l,payload:{type:m.SETTING,payload:p}},O=[{id:V.id,params:D}],j={unitId:s,subUnitId:u,ruleId:l,payload:{type:m.SETTING,payload:R(v)}},q=[{id:V.id,params:j}];return r.pushUndoRedo({unitID:s,redoMutations:O,undoMutations:q}),t.executeCommand(V.id,D),!0}},x={type:o.CommandType.COMMAND,id:"data-validation.command.removeAll",handler(i,e){if(!e)return!1;const{unitId:a,subUnitId:t}=e,r=i.get(o.ICommandService),n=i.get(exports.DataValidationModel),d=i.get(o.IUndoRedoService),s=[...n.getRules(a,t)],u={unitId:a,subUnitId:t,ruleId:s.map(h=>h.uid)},l=[{id:_.id,params:u}],p=[{id:g.id,params:{unitId:a,subUnitId:t,rule:s}}];return d.pushUndoRedo({redoMutations:l,undoMutations:p,unitID:a}),r.executeCommand(_.id,u),!0}};var X=Object.defineProperty,Y=Object.getOwnPropertyDescriptor,Z=(i,e,a,t)=>{for(var r=t>1?void 0:t?Y(e,a):e,n=i.length-1,d;n>=0;n--)(d=i[n])&&(r=(t?d(e,a,r):d(r))||r);return t&&r&&X(e,a,r),r},T=(i,e)=>(a,t)=>e(a,t,i);const k="SHEET_DATA_VALIDATION_PLUGIN";exports.DataValidationResourceController=class extends o.Disposable{constructor(e,a,t){super(),this._resourceManagerService=e,this._univerInstanceService=a,this._dataValidationModel=t,this._initSnapshot()}_initSnapshot(){const e=t=>{const r=this._dataValidationModel.getUnitRules(t),n={};return r?(r.forEach(([d,s])=>{n[d]=s}),JSON.stringify(n)):""},a=t=>{if(!t)return{};try{return JSON.parse(t)}catch{return{}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:k,businesses:[o.UniverInstanceType.UNIVER_SHEET],toJson:t=>e(t),parseJson:t=>a(t),onUnLoad:t=>{this._dataValidationModel.deleteUnitRules(t)},onLoad:(t,r)=>{Object.keys(r).forEach(n=>{r[n].forEach(s=>{this._dataValidationModel.addRule(t,n,s,"patched")})})}}))}};exports.DataValidationResourceController=Z([o.OnLifecycle(o.LifecycleStages.Ready,exports.DataValidationResourceController),T(0,o.IResourceManagerService),T(1,o.IUniverInstanceService),T(2,o.Inject(exports.DataValidationModel))],exports.DataValidationResourceController);var aa=Object.defineProperty,ta=Object.getOwnPropertyDescriptor,ea=(i,e,a,t)=>{for(var r=t>1?void 0:t?ta(e,a):e,n=i.length-1,d;n>=0;n--)(d=i[n])&&(r=(t?d(e,a,r):d(r))||r);return t&&r&&aa(e,a,r),r},f=(i,e)=>(a,t)=>e(a,t,i);exports.DataValidationSheetController=class extends o.Disposable{constructor(e,a,t){super(),this._sheetInterceptorService=e,this._univerInstanceService=a,this._dataValidationModel=t,this._initSheetChange()}_initSheetChange(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:e=>{var a;if(e.id===I.RemoveSheetCommand.id){const t=e.params,r=t.unitId||this._univerInstanceService.getCurrentUnitForType(o.UniverInstanceType.UNIVER_SHEET).getUnitId(),n=this._univerInstanceService.getUniverSheetInstance(r);if(!n)return{redos:[],undos:[]};const d=t.subUnitId||((a=n.getActiveSheet())==null?void 0:a.getSheetId());if(!d)return{redos:[],undos:[]};const s=this._dataValidationModel.ensureManager(r,d);if(!s)return{redos:[],undos:[]};const u=s.getDataValidations(),l=u.map(v=>v.uid),p={unitId:r,subUnitId:d,ruleId:l,source:"patched"},h={unitId:r,subUnitId:d,rule:u,source:"patched"};return{redos:[{id:_.id,params:p}],undos:[{id:g.id,params:h}]}}return{redos:[],undos:[]}}}))}};exports.DataValidationSheetController=ea([o.OnLifecycle(o.LifecycleStages.Ready,exports.DataValidationSheetController),f(0,o.Inject(I.SheetInterceptorService)),f(1,o.Inject(o.IUniverInstanceService)),f(2,o.Inject(exports.DataValidationModel))],exports.DataValidationSheetController);var ra=Object.defineProperty,oa=Object.getOwnPropertyDescriptor,ia=(i,e,a,t)=>{for(var r=t>1?void 0:t?oa(e,a):e,n=i.length-1,d;n>=0;n--)(d=i[n])&&(r=(t?d(e,a,r):d(r))||r);return t&&r&&ra(e,a,r),r},y=(i,e)=>(a,t)=>e(a,t,i);const na="UNIVER_DATA_VALIDATION_PLUGIN";var S;exports.UniverDataValidationPlugin=(S=class extends o.Plugin{constructor(e,a,t){super(),this._injector=a,this._commandService=t}onStarting(e){[[exports.DataValidationModel],[M],[exports.DataValidationResourceController],[exports.DataValidationSheetController]].forEach(a=>{e.add(a)}),[b,x,B,$,P,g,V,_].forEach(a=>{this._commandService.registerCommand(a)})}},c(S,"pluginName",na),c(S,"type",o.UniverInstanceType.UNIVER_SHEET),S);exports.UniverDataValidationPlugin=ia([y(1,o.Inject(o.Injector)),y(2,o.ICommandService)],exports.UniverDataValidationPlugin);o.DataValidationOperator.BETWEEN+"",o.DataValidationOperator.EQUAL+"",o.DataValidationOperator.GREATER_THAN+"",o.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",o.DataValidationOperator.LESS_THAN+"",o.DataValidationOperator.LESS_THAN_OR_EQUAL+"",o.DataValidationOperator.NOT_BETWEEN+"",o.DataValidationOperator.NOT_EQUAL+"";const da={[o.DataValidationOperator.BETWEEN]:"dataValidation.ruleName.between",[o.DataValidationOperator.EQUAL]:"dataValidation.ruleName.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.ruleName.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.ruleName.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.ruleName.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.ruleName.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.ruleName.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.ruleName.notEqual"},sa={[o.DataValidationOperator.BETWEEN]:"dataValidation.errorMsg.between",[o.DataValidationOperator.EQUAL]:"dataValidation.errorMsg.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.errorMsg.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.errorMsg.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.errorMsg.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.errorMsg.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.errorMsg.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.errorMsg.notEqual"},la={[o.DataValidationOperator.BETWEEN]:"dataValidation.textLength.errorMsg.between",[o.DataValidationOperator.EQUAL]:"dataValidation.textLength.errorMsg.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.textLength.errorMsg.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.textLength.errorMsg.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.textLength.errorMsg.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.textLength.errorMsg.notEqual"};var ua=Object.defineProperty,ca=Object.getOwnPropertyDescriptor,pa=(i,e,a,t)=>{for(var r=t>1?void 0:t?ca(e,a):e,n=i.length-1,d;n>=0;n--)(d=i[n])&&(r=(t?d(e,a,r):d(r))||r);return t&&r&&ua(e,a,r),r},N=(i,e)=>(a,t)=>e(a,t,i);const C="{FORMULA1}",U="{FORMULA2}",ha={[o.DataValidationOperator.BETWEEN]:"dataValidation.operators.between",[o.DataValidationOperator.EQUAL]:"dataValidation.operators.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.operators.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.operators.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.operators.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.operators.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.operators.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.operators.notEqual"};exports.BaseDataValidator=class{constructor(e,a){c(this,"canvasRender",null);c(this,"dropdown");c(this,"optionsInput");this.localeService=e,this.injector=a}get operatorNames(){return this.operators.map(e=>this.localeService.t(ha[e]))}get titleStr(){return this.localeService.t(this.title)}skipDefaultFontRender(e,a,t){return!1}generateRuleName(e){var t,r;if(!e.operator)return this.titleStr;const a=this.localeService.t(da[e.operator]).replace(C,(t=e.formula1)!=null?t:"").replace(U,(r=e.formula2)!=null?r:"");return`${this.titleStr} ${a}`}generateRuleErrorMessage(e){var t,r;return e.operator?`${this.localeService.t(sa[e.operator]).replace(C,(t=e.formula1)!=null?t:"").replace(U,(r=e.formula2)!=null?r:"")}`:this.titleStr}getRuleFinalError(e){return e.showInputMessage&&e.error?e.error:this.generateRuleErrorMessage(e)}isEmptyCellValue(e){return e===""||e===void 0||e===null}async isValidType(e,a,t){return!0}transform(e,a,t){return e}async validatorIsEqual(e,a,t){return!0}async validatorIsNotEqual(e,a,t){return!0}async validatorIsBetween(e,a,t){return!0}async validatorIsNotBetween(e,a,t){return!0}async validatorIsGreaterThan(e,a,t){return!0}async validatorIsGreaterThanOrEqual(e,a,t){return!0}async validatorIsLessThan(e,a,t){return!0}async validatorIsLessThanOrEqual(e,a,t){return!0}async validator(e,a){const{value:t,unitId:r,subUnitId:n}=e,d=this.isEmptyCellValue(t),{allowBlank:s=!0,operator:u}=a;if(d)return s;const l=await this.parseFormula(a,r,n);if(!await this.isValidType(e,l,a))return!1;if(!o.Tools.isDefine(u))return!0;const p=this.transform(e,l,a);switch(u){case o.DataValidationOperator.BETWEEN:return this.validatorIsBetween(p,l,a);case o.DataValidationOperator.EQUAL:return this.validatorIsEqual(p,l,a);case o.DataValidationOperator.GREATER_THAN:return this.validatorIsGreaterThan(p,l,a);case o.DataValidationOperator.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(p,l,a);case o.DataValidationOperator.LESS_THAN:return this.validatorIsLessThan(p,l,a);case o.DataValidationOperator.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(p,l,a);case o.DataValidationOperator.NOT_BETWEEN:return this.validatorIsNotBetween(p,l,a);case o.DataValidationOperator.NOT_EQUAL:return this.validatorIsNotEqual(p,l,a);default:throw new Error("Unknown operator.")}}};exports.BaseDataValidator=pa([N(0,o.Inject(o.LocaleService)),N(1,o.Inject(o.Injector))],exports.BaseDataValidator);const ma=[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.NOT_BETWEEN];exports.AddDataValidationCommand=b;exports.AddDataValidationMutation=g;exports.DataValidationManager=w;exports.DataValidatorRegistryScope=L;exports.DataValidatorRegistryService=M;exports.RemoveAllDataValidationCommand=x;exports.RemoveDataValidationCommand=P;exports.RemoveDataValidationMutation=_;exports.TWO_FORMULA_OPERATOR_COUNT=ma;exports.TextLengthErrorTitleMap=la;exports.UpdateDataValidationMutation=V;exports.UpdateDataValidationOptionsCommand=B;exports.UpdateDataValidationSettingCommand=$;exports.UpdateRuleType=m;exports.createDefaultNewRule=Q;exports.getRuleOptions=A;exports.getRuleSetting=R;exports.removeDataValidationUndoFactory=K;
package/lib/es/index.js CHANGED
@@ -1,16 +1,16 @@
1
- var Z = Object.defineProperty;
2
- var k = (a, e, t) => e in a ? Z(a, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : a[e] = t;
3
- var u = (a, e, t) => k(a, typeof e != "symbol" ? e + "" : e, t);
4
- import { toDisposable as ee, Tools as G, DataValidationType as te, DataValidationOperator as s, Disposable as O, DataValidationStatus as ae, ILogService as y, CommandType as E, ICommandService as T, IUndoRedoService as M, UniverInstanceType as w, OnLifecycle as Q, LifecycleStages as j, Inject as v, IResourceManagerService as re, IUniverInstanceService as W, Plugin as ne, Injector as F, LocaleService as oe } from "@univerjs/core";
5
- import { BehaviorSubject as ie, Subject as C, debounceTime as b } from "rxjs";
1
+ var k = Object.defineProperty;
2
+ var ee = (a, e, t) => e in a ? k(a, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : a[e] = t;
3
+ var c = (a, e, t) => ee(a, typeof e != "symbol" ? e + "" : e, t);
4
+ import { toDisposable as te, Tools as G, DataValidationType as ae, DataValidationOperator as s, Disposable as O, DataValidationStatus as re, ILogService as y, CommandType as E, ICommandService as T, IUndoRedoService as M, UniverInstanceType as C, OnLifecycle as Q, LifecycleStages as j, Inject as v, IResourceManagerService as ne, IUniverInstanceService as W, Plugin as oe, Injector as F, LocaleService as ie } from "@univerjs/core";
5
+ import { BehaviorSubject as J, Subject as w, debounceTime as b } from "rxjs";
6
6
  import { SheetsSelectionsService as se, RemoveSheetCommand as de, SheetInterceptorService as le } from "@univerjs/sheets";
7
7
  var ue = /* @__PURE__ */ ((a) => (a.SHEET = "sheet", a))(ue || {});
8
- class J {
8
+ class z {
9
9
  constructor() {
10
- u(this, "_validatorByScopes", /* @__PURE__ */ new Map());
11
- u(this, "_validatorMap", /* @__PURE__ */ new Map());
12
- u(this, "_validatorsChange$", new ie(void 0));
13
- u(this, "validatorsChange$", this._validatorsChange$.asObservable());
10
+ c(this, "_validatorByScopes", /* @__PURE__ */ new Map());
11
+ c(this, "_validatorMap", /* @__PURE__ */ new Map());
12
+ c(this, "_validatorsChange$", new J(void 0));
13
+ c(this, "validatorsChange$", this._validatorsChange$.asObservable());
14
14
  }
15
15
  _addValidatorToScope(e, t) {
16
16
  this._validatorByScopes.has(t) || this._validatorByScopes.set(t, []);
@@ -29,7 +29,7 @@ class J {
29
29
  register(e) {
30
30
  return this._validatorMap.set(e.id, e), Array.isArray(e.scopes) ? e.scopes.forEach((t) => {
31
31
  this._addValidatorToScope(e, t);
32
- }) : this._addValidatorToScope(e, e.scopes), this._validatorsChange$.next(), ee(() => {
32
+ }) : this._addValidatorToScope(e, e.scopes), this._validatorsChange$.next(), te(() => {
33
33
  this._validatorMap.delete(e.id), Array.isArray(e.scopes) ? e.scopes.forEach((t) => {
34
34
  this._removeValidatorFromScope(e, t);
35
35
  }) : this._removeValidatorFromScope(e, e.scopes), this._validatorsChange$.next();
@@ -43,7 +43,7 @@ class J {
43
43
  }
44
44
  }
45
45
  var g = /* @__PURE__ */ ((a) => (a[a.SETTING = 0] = "SETTING", a[a.RANGE = 1] = "RANGE", a[a.OPTIONS = 2] = "OPTIONS", a))(g || {});
46
- function z(a) {
46
+ function K(a) {
47
47
  return {
48
48
  type: a.type,
49
49
  operator: a.operator,
@@ -52,7 +52,7 @@ function z(a) {
52
52
  allowBlank: a.allowBlank
53
53
  };
54
54
  }
55
- function K(a) {
55
+ function X(a) {
56
56
  return {
57
57
  error: a.error,
58
58
  errorStyle: a.errorStyle,
@@ -71,35 +71,30 @@ function Ge(a) {
71
71
  const t = a.get(se).getCurrentSelections().map((o) => o.range);
72
72
  return {
73
73
  uid: G.generateRandomId(6),
74
- type: te.DECIMAL,
74
+ type: ae.DECIMAL,
75
75
  operator: s.EQUAL,
76
76
  formula1: "100",
77
77
  ranges: t != null ? t : [{ startColumn: 0, endColumn: 0, startRow: 0, endRow: 0 }]
78
78
  };
79
79
  }
80
80
  class ce extends O {
81
- constructor(t, r, n) {
81
+ constructor(t, r) {
82
82
  super();
83
- u(this, "_dataValidations");
84
- u(this, "_dataValidationMap", /* @__PURE__ */ new Map());
85
- u(this, "_dataValidations$", new C());
86
- u(this, "unitId");
87
- u(this, "subUnitId");
88
- u(this, "dataValidations$", this._dataValidations$.asObservable());
89
- this.unitId = t, this.subUnitId = r, n && (this._insertRules(n), this._notice(), this.disposeWithMe({
83
+ c(this, "_dataValidations", []);
84
+ c(this, "_dataValidationMap", /* @__PURE__ */ new Map());
85
+ c(this, "_dataValidations$", new J(this._dataValidations));
86
+ c(this, "unitId");
87
+ c(this, "subUnitId");
88
+ c(this, "dataValidations$", this._dataValidations$.asObservable());
89
+ this.unitId = t, this.subUnitId = r, this._notice(), this.disposeWithMe({
90
90
  dispose: () => {
91
91
  this._dataValidations$.complete();
92
92
  }
93
- }));
93
+ });
94
94
  }
95
95
  _notice() {
96
96
  this._dataValidations$.next(this._dataValidations);
97
97
  }
98
- _insertRules(t) {
99
- this._dataValidations = t, t.forEach((r) => {
100
- this._dataValidationMap.set(r.uid, r);
101
- });
102
- }
103
98
  getRuleById(t) {
104
99
  return this._dataValidationMap.get(t);
105
100
  }
@@ -117,7 +112,7 @@ class ce extends O {
117
112
  r > -1 && (this._dataValidations.splice(r, 1), this._dataValidationMap.delete(t), this._notice());
118
113
  }
119
114
  updateRule(t, r) {
120
- const n = this._dataValidationMap.get(t), o = this._dataValidations.findIndex((l) => t === l.uid);
115
+ const n = this._dataValidationMap.get(t), o = this._dataValidations.findIndex((d) => t === d.uid);
121
116
  if (!n)
122
117
  throw new Error(`Data validation rule is not found, ruleId: ${t}.`);
123
118
  const i = { ...n };
@@ -127,11 +122,11 @@ class ce extends O {
127
122
  break;
128
123
  }
129
124
  case g.SETTING: {
130
- Object.assign(i, z(r.payload));
125
+ Object.assign(i, K(r.payload));
131
126
  break;
132
127
  }
133
128
  case g.OPTIONS: {
134
- Object.assign(i, K(r.payload));
129
+ Object.assign(i, X(r.payload));
135
130
  break;
136
131
  }
137
132
  }
@@ -144,7 +139,7 @@ class ce extends O {
144
139
  return this._dataValidations;
145
140
  }
146
141
  validator(t, r, n, o) {
147
- return ae.VALID;
142
+ return re.VALID;
148
143
  }
149
144
  }
150
145
  var he = Object.defineProperty, pe = Object.getOwnPropertyDescriptor, _e = (a, e, t, r) => {
@@ -155,13 +150,13 @@ var he = Object.defineProperty, pe = Object.getOwnPropertyDescriptor, _e = (a, e
155
150
  let h = class extends O {
156
151
  constructor(e) {
157
152
  super();
158
- u(this, "_model", /* @__PURE__ */ new Map());
159
- u(this, "_managerCreator", (e, t) => new ce(e, t, []));
160
- u(this, "_ruleChange$", new C());
161
- u(this, "_validStatusChange$", new C());
162
- u(this, "ruleChange$", this._ruleChange$.asObservable());
163
- u(this, "ruleChangeDebounce$", this.ruleChange$.pipe(b(20)));
164
- u(this, "validStatusChange$", this._validStatusChange$.asObservable().pipe(b(20)));
153
+ c(this, "_model", /* @__PURE__ */ new Map());
154
+ c(this, "_managerCreator", (e, t) => new ce(e, t));
155
+ c(this, "_ruleChange$", new w());
156
+ c(this, "_validStatusChange$", new w());
157
+ c(this, "ruleChange$", this._ruleChange$.asObservable());
158
+ c(this, "ruleChangeDebounce$", this.ruleChange$.pipe(b(20)));
159
+ c(this, "validStatusChange$", this._validStatusChange$.asObservable().pipe(b(20)));
165
160
  this._logService = e, this.disposeWithMe({
166
161
  dispose: () => {
167
162
  this._ruleChange$.complete(), this._validStatusChange$.complete();
@@ -177,50 +172,53 @@ let h = class extends O {
177
172
  if (r.has(t))
178
173
  return r.get(t);
179
174
  const n = this._managerCreator(e, t);
180
- return r.set(t, n), n;
175
+ return r.set(t, n), this.disposeWithMe(n), n;
181
176
  }
182
- _addRuleSideEffect(e, t, r) {
177
+ _addRuleSideEffect(e, t, r, n) {
183
178
  this.ensureManager(e, t).getRuleById(r.uid) || this._ruleChange$.next({
184
179
  rule: r,
185
180
  type: "add",
186
181
  unitId: e,
187
- subUnitId: t
182
+ subUnitId: t,
183
+ source: n
188
184
  });
189
185
  }
190
- addRule(e, t, r, n) {
186
+ addRule(e, t, r, n, o) {
191
187
  try {
192
- const o = this.ensureManager(e, t);
188
+ const i = this.ensureManager(e, t);
193
189
  (Array.isArray(r) ? r : [r]).forEach((l) => {
194
- this._addRuleSideEffect(e, t, l);
195
- }), o.addRule(r, n);
196
- } catch (o) {
197
- this._logService.error(o);
190
+ this._addRuleSideEffect(e, t, l, n);
191
+ }), i.addRule(r, o);
192
+ } catch (i) {
193
+ this._logService.error(i);
198
194
  }
199
195
  }
200
- updateRule(e, t, r, n) {
196
+ updateRule(e, t, r, n, o) {
201
197
  try {
202
- const i = this.ensureManager(e, t).updateRule(r, n);
198
+ const d = this.ensureManager(e, t).updateRule(r, n);
203
199
  this._ruleChange$.next({
204
- rule: i,
200
+ rule: d,
205
201
  type: "update",
206
202
  unitId: e,
207
- subUnitId: t
203
+ subUnitId: t,
204
+ source: o
208
205
  });
209
- } catch (o) {
210
- this._logService.error(o);
206
+ } catch (i) {
207
+ this._logService.error(i);
211
208
  }
212
209
  }
213
- removeRule(e, t, r) {
210
+ removeRule(e, t, r, n) {
214
211
  try {
215
- const n = this.ensureManager(e, t), o = n.getRuleById(r);
216
- o && (n.removeRule(r), this._ruleChange$.next({
217
- rule: o,
212
+ const o = this.ensureManager(e, t), i = o.getRuleById(r);
213
+ i && (o.removeRule(r), this._ruleChange$.next({
214
+ rule: i,
218
215
  type: "remove",
219
216
  unitId: e,
220
- subUnitId: t
217
+ subUnitId: t,
218
+ source: n
221
219
  }));
222
- } catch (n) {
223
- this._logService.error(n);
220
+ } catch (o) {
221
+ this._logService.error(o);
224
222
  }
225
223
  }
226
224
  getRuleById(e, t, r) {
@@ -234,12 +232,12 @@ let h = class extends O {
234
232
  }
235
233
  validator(e, t, r) {
236
234
  const { unitId: n, subUnitId: o } = r;
237
- return this.ensureManager(n, o).validator(e, t, r, (l, d) => {
238
- d && this._validStatusChange$.next({
235
+ return this.ensureManager(n, o).validator(e, t, r, (d, l) => {
236
+ l && this._validStatusChange$.next({
239
237
  unitId: n,
240
238
  subUnitId: o,
241
239
  ruleId: t.uid,
242
- status: l
240
+ status: d
243
241
  });
244
242
  });
245
243
  }
@@ -269,8 +267,8 @@ const m = {
269
267
  handler(a, e) {
270
268
  if (!e)
271
269
  return !1;
272
- const { unitId: t, subUnitId: r, rule: n, index: o } = e;
273
- return a.get(h).addRule(t, r, n, o), !0;
270
+ const { unitId: t, subUnitId: r, rule: n, index: o, source: i = "command" } = e;
271
+ return a.get(h).addRule(t, r, n, i, o), !0;
274
272
  }
275
273
  }, S = {
276
274
  type: E.MUTATION,
@@ -278,10 +276,10 @@ const m = {
278
276
  handler(a, e) {
279
277
  if (!e)
280
278
  return !1;
281
- const { unitId: t, subUnitId: r, ruleId: n } = e, o = a.get(h);
282
- return Array.isArray(n) ? n.forEach((i) => {
283
- o.removeRule(t, r, i);
284
- }) : o.removeRule(t, r, n), !0;
279
+ const { unitId: t, subUnitId: r, ruleId: n, source: o = "command" } = e, i = a.get(h);
280
+ return Array.isArray(n) ? n.forEach((d) => {
281
+ i.removeRule(t, r, d, o);
282
+ }) : i.removeRule(t, r, n, o), !0;
285
283
  }
286
284
  }, f = {
287
285
  type: E.MUTATION,
@@ -289,8 +287,8 @@ const m = {
289
287
  handler(a, e) {
290
288
  if (!e)
291
289
  return !1;
292
- const { unitId: t, subUnitId: r, ruleId: n, payload: o } = e;
293
- return a.get(h).updateRule(t, r, n, o), !0;
290
+ const { unitId: t, subUnitId: r, ruleId: n, payload: o, source: i = "command" } = e;
291
+ return a.get(h).updateRule(t, r, n, o, i), !0;
294
292
  }
295
293
  }, me = {
296
294
  type: E.COMMAND,
@@ -298,15 +296,15 @@ const m = {
298
296
  async handler(a, e) {
299
297
  if (a.get(y).warn("[Deprecated] AddDataValidationCommand is deprecated, please use AddSheetDataValidationCommand in @univerjs/sheets-data-validation instead!"), !e)
300
298
  return !1;
301
- const { rule: r, unitId: n, subUnitId: o } = e, i = a.get(T), l = a.get(M), d = {
299
+ const { rule: r, unitId: n, subUnitId: o } = e, i = a.get(T), d = a.get(M), l = {
302
300
  ...e,
303
301
  rule: {
304
302
  ...e.rule,
305
303
  ranges: [e.rule.range]
306
304
  }
307
- }, c = [{
305
+ }, u = [{
308
306
  id: m.id,
309
- params: d
307
+ params: l
310
308
  }], p = [{
311
309
  id: S.id,
312
310
  params: {
@@ -315,22 +313,23 @@ const m = {
315
313
  ruleId: r.uid
316
314
  }
317
315
  }];
318
- return l.pushUndoRedo({
316
+ return d.pushUndoRedo({
319
317
  unitID: n,
320
- redoMutations: c,
318
+ redoMutations: u,
321
319
  undoMutations: p
322
- }), await i.executeCommand(m.id, d), !0;
320
+ }), await i.executeCommand(m.id, l), !0;
323
321
  }
324
322
  }, Qe = (a, e) => {
325
- const t = a.get(h), { unitId: r, subUnitId: n, ruleId: o } = e;
323
+ const t = a.get(h), { unitId: r, subUnitId: n, ruleId: o, source: i } = e;
326
324
  if (Array.isArray(o)) {
327
- const l = o.map((d) => t.getRuleById(r, n, d)).filter(Boolean);
325
+ const l = o.map((u) => t.getRuleById(r, n, u)).filter(Boolean);
328
326
  return [{
329
327
  id: m.id,
330
328
  params: {
331
329
  unitId: r,
332
330
  subUnitId: n,
333
- rule: l
331
+ rule: l,
332
+ source: i
334
333
  }
335
334
  }];
336
335
  }
@@ -351,23 +350,23 @@ const m = {
351
350
  handler(a, e) {
352
351
  if (!e)
353
352
  return !1;
354
- const { unitId: t, subUnitId: r, ruleId: n } = e, o = a.get(T), i = a.get(M), l = a.get(h), d = [{
353
+ const { unitId: t, subUnitId: r, ruleId: n } = e, o = a.get(T), i = a.get(M), d = a.get(h), l = [{
355
354
  id: S.id,
356
355
  params: e
357
- }], c = [{
356
+ }], u = [{
358
357
  id: m.id,
359
358
  params: {
360
359
  unitId: t,
361
360
  subUnitId: r,
362
361
  rule: {
363
- ...l.getRuleById(t, r, n)
362
+ ...d.getRuleById(t, r, n)
364
363
  },
365
- index: l.getRuleIndex(t, r, n)
364
+ index: d.getRuleIndex(t, r, n)
366
365
  }
367
366
  }];
368
367
  return i.pushUndoRedo({
369
- undoMutations: c,
370
- redoMutations: d,
368
+ undoMutations: u,
369
+ redoMutations: l,
371
370
  unitID: e.unitId
372
371
  }), o.executeCommand(S.id, e), !0;
373
372
  }
@@ -377,27 +376,27 @@ const m = {
377
376
  handler(a, e) {
378
377
  if (a.get(y).warn("[Deprecated] UpdateDataValidationOptionsCommand is deprecated, please use UpdateSheetDataValidationOptionsCommand in @univerjs/sheets-data-validation instead!"), !e)
379
378
  return !1;
380
- const r = a.get(T), n = a.get(M), o = a.get(h), { unitId: i, subUnitId: l, ruleId: d, options: c } = e, p = o.getRuleById(i, l, d);
379
+ const r = a.get(T), n = a.get(M), o = a.get(h), { unitId: i, subUnitId: d, ruleId: l, options: u } = e, p = o.getRuleById(i, d, l);
381
380
  if (!p)
382
381
  return !1;
383
382
  const _ = {
384
383
  unitId: i,
385
- subUnitId: l,
386
- ruleId: d,
384
+ subUnitId: d,
385
+ ruleId: l,
387
386
  payload: {
388
387
  type: g.OPTIONS,
389
- payload: c
388
+ payload: u
390
389
  }
391
390
  }, V = [{
392
391
  id: f.id,
393
392
  params: _
394
393
  }], I = {
395
394
  unitId: i,
396
- subUnitId: l,
397
- ruleId: d,
395
+ subUnitId: d,
396
+ ruleId: l,
398
397
  payload: {
399
398
  type: g.OPTIONS,
400
- payload: K(p)
399
+ payload: X(p)
401
400
  }
402
401
  }, U = [{
403
402
  id: f.id,
@@ -415,16 +414,16 @@ const m = {
415
414
  handler(a, e) {
416
415
  if (a.get(y).warn("[Deprecated] UpdateDataValidationSettingCommand is deprecated, please use UpdateSheetDataValidationSettingCommand in @univerjs/sheets-data-validation instead!"), !e)
417
416
  return !1;
418
- const r = a.get(T), n = a.get(M), o = a.get(h), i = a.get(J), { unitId: l, subUnitId: d, ruleId: c, setting: p } = e, _ = i.getValidatorItem(p.type);
417
+ const r = a.get(T), n = a.get(M), o = a.get(h), i = a.get(z), { unitId: d, subUnitId: l, ruleId: u, setting: p } = e, _ = i.getValidatorItem(p.type);
419
418
  if (!_)
420
419
  return !1;
421
- const V = o.getRuleById(l, d, c);
422
- if (!V || !_.validatorFormula({ ...V, ...p }, l, d).success)
420
+ const V = o.getRuleById(d, l, u);
421
+ if (!V || !_.validatorFormula({ ...V, ...p }, d, l).success)
423
422
  return !1;
424
423
  const I = {
425
- unitId: l,
426
- subUnitId: d,
427
- ruleId: c,
424
+ unitId: d,
425
+ subUnitId: l,
426
+ ruleId: u,
428
427
  payload: {
429
428
  type: g.SETTING,
430
429
  payload: p
@@ -432,22 +431,22 @@ const m = {
432
431
  }, U = [{
433
432
  id: f.id,
434
433
  params: I
435
- }], X = {
436
- unitId: l,
437
- subUnitId: d,
438
- ruleId: c,
434
+ }], Y = {
435
+ unitId: d,
436
+ subUnitId: l,
437
+ ruleId: u,
439
438
  payload: {
440
439
  type: g.SETTING,
441
- payload: z(V)
440
+ payload: K(V)
442
441
  }
443
- }, Y = [{
442
+ }, Z = [{
444
443
  id: f.id,
445
- params: X
444
+ params: Y
446
445
  }];
447
446
  return n.pushUndoRedo({
448
- unitID: l,
447
+ unitID: d,
449
448
  redoMutations: U,
450
- undoMutations: Y
449
+ undoMutations: Z
451
450
  }), r.executeCommand(f.id, I), !0;
452
451
  }
453
452
  }, Se = {
@@ -456,26 +455,26 @@ const m = {
456
455
  handler(a, e) {
457
456
  if (!e)
458
457
  return !1;
459
- const { unitId: t, subUnitId: r } = e, n = a.get(T), o = a.get(h), i = a.get(M), l = [...o.getRules(t, r)], d = {
458
+ const { unitId: t, subUnitId: r } = e, n = a.get(T), o = a.get(h), i = a.get(M), d = [...o.getRules(t, r)], l = {
460
459
  unitId: t,
461
460
  subUnitId: r,
462
- ruleId: l.map((_) => _.uid)
463
- }, c = [{
461
+ ruleId: d.map((_) => _.uid)
462
+ }, u = [{
464
463
  id: S.id,
465
- params: d
464
+ params: l
466
465
  }], p = [{
467
466
  id: m.id,
468
467
  params: {
469
468
  unitId: t,
470
469
  subUnitId: r,
471
- rule: l
470
+ rule: d
472
471
  }
473
472
  }];
474
473
  return i.pushUndoRedo({
475
- redoMutations: c,
474
+ redoMutations: u,
476
475
  undoMutations: p,
477
476
  unitID: t
478
- }), n.executeCommand(S.id, d), !0;
477
+ }), n.executeCommand(S.id, l), !0;
479
478
  }
480
479
  };
481
480
  var Te = Object.defineProperty, Ve = Object.getOwnPropertyDescriptor, Me = (a, e, t, r) => {
@@ -506,7 +505,7 @@ let A = class extends O {
506
505
  this.disposeWithMe(
507
506
  this._resourceManagerService.registerPluginResource({
508
507
  pluginName: Ie,
509
- businesses: [w.UNIVER_SHEET],
508
+ businesses: [C.UNIVER_SHEET],
510
509
  toJson: (t) => a(t),
511
510
  parseJson: (t) => e(t),
512
511
  onUnLoad: (t) => {
@@ -515,7 +514,7 @@ let A = class extends O {
515
514
  onLoad: (t, r) => {
516
515
  Object.keys(r).forEach((n) => {
517
516
  r[n].forEach((i) => {
518
- this._dataValidationModel.addRule(t, n, i);
517
+ this._dataValidationModel.addRule(t, n, i, "patched");
519
518
  });
520
519
  });
521
520
  }
@@ -525,7 +524,7 @@ let A = class extends O {
525
524
  };
526
525
  A = Me([
527
526
  Q(j.Ready, A),
528
- D(0, re),
527
+ D(0, ne),
529
528
  D(1, W),
530
529
  D(2, v(h))
531
530
  ], A);
@@ -544,7 +543,7 @@ let N = class extends O {
544
543
  getMutations: (a) => {
545
544
  var e;
546
545
  if (a.id === de.id) {
547
- const t = a.params, r = t.unitId || this._univerInstanceService.getCurrentUnitForType(w.UNIVER_SHEET).getUnitId(), n = this._univerInstanceService.getUniverSheetInstance(r);
546
+ const t = a.params, r = t.unitId || this._univerInstanceService.getCurrentUnitForType(C.UNIVER_SHEET).getUnitId(), n = this._univerInstanceService.getUniverSheetInstance(r);
548
547
  if (!n)
549
548
  return { redos: [], undos: [] };
550
549
  const o = t.subUnitId || ((e = n.getActiveSheet()) == null ? void 0 : e.getSheetId());
@@ -553,19 +552,21 @@ let N = class extends O {
553
552
  const i = this._dataValidationModel.ensureManager(r, o);
554
553
  if (!i)
555
554
  return { redos: [], undos: [] };
556
- const l = i.getDataValidations(), d = l.map((_) => _.uid), c = {
555
+ const d = i.getDataValidations(), l = d.map((_) => _.uid), u = {
557
556
  unitId: r,
558
557
  subUnitId: o,
559
- ruleId: d
558
+ ruleId: l,
559
+ source: "patched"
560
560
  }, p = {
561
561
  unitId: r,
562
562
  subUnitId: o,
563
- rule: l
563
+ rule: d,
564
+ source: "patched"
564
565
  };
565
566
  return {
566
567
  redos: [{
567
568
  id: S.id,
568
- params: c
569
+ params: u
569
570
  }],
570
571
  undos: [{
571
572
  id: m.id,
@@ -592,7 +593,7 @@ var Oe = Object.defineProperty, ye = Object.getOwnPropertyDescriptor, Ue = (a, e
592
593
  }, B = (a, e) => (t, r) => e(t, r, a);
593
594
  const De = "UNIVER_DATA_VALIDATION_PLUGIN";
594
595
  var R;
595
- let P = (R = class extends ne {
596
+ let P = (R = class extends oe {
596
597
  constructor(a, e, t) {
597
598
  super(), this._injector = e, this._commandService = t;
598
599
  }
@@ -601,7 +602,7 @@ let P = (R = class extends ne {
601
602
  // model
602
603
  [h],
603
604
  // service
604
- [J],
605
+ [z],
605
606
  [A],
606
607
  [N]
607
608
  ].forEach(
@@ -623,7 +624,7 @@ let P = (R = class extends ne {
623
624
  this._commandService.registerCommand(e);
624
625
  });
625
626
  }
626
- }, u(R, "pluginName", De), u(R, "type", w.UNIVER_SHEET), R);
627
+ }, c(R, "pluginName", De), c(R, "type", C.UNIVER_SHEET), R);
627
628
  P = Ue([
628
629
  B(1, v(F)),
629
630
  B(2, T)
@@ -674,9 +675,9 @@ const x = "{FORMULA1}", H = "{FORMULA2}", Pe = {
674
675
  };
675
676
  let q = class {
676
677
  constructor(a, e) {
677
- u(this, "canvasRender", null);
678
- u(this, "dropdown");
679
- u(this, "optionsInput");
678
+ c(this, "canvasRender", null);
679
+ c(this, "dropdown");
680
+ c(this, "optionsInput");
680
681
  this.localeService = a, this.injector = e;
681
682
  }
682
683
  get operatorNames() {
@@ -736,39 +737,39 @@ let q = class {
736
737
  return !0;
737
738
  }
738
739
  async validator(a, e) {
739
- const { value: t, unitId: r, subUnitId: n } = a, o = this.isEmptyCellValue(t), { allowBlank: i = !0, operator: l } = e;
740
+ const { value: t, unitId: r, subUnitId: n } = a, o = this.isEmptyCellValue(t), { allowBlank: i = !0, operator: d } = e;
740
741
  if (o)
741
742
  return i;
742
- const d = await this.parseFormula(e, r, n);
743
- if (!await this.isValidType(a, d, e))
743
+ const l = await this.parseFormula(e, r, n);
744
+ if (!await this.isValidType(a, l, e))
744
745
  return !1;
745
- if (!G.isDefine(l))
746
+ if (!G.isDefine(d))
746
747
  return !0;
747
- const c = this.transform(a, d, e);
748
- switch (l) {
748
+ const u = this.transform(a, l, e);
749
+ switch (d) {
749
750
  case s.BETWEEN:
750
- return this.validatorIsBetween(c, d, e);
751
+ return this.validatorIsBetween(u, l, e);
751
752
  case s.EQUAL:
752
- return this.validatorIsEqual(c, d, e);
753
+ return this.validatorIsEqual(u, l, e);
753
754
  case s.GREATER_THAN:
754
- return this.validatorIsGreaterThan(c, d, e);
755
+ return this.validatorIsGreaterThan(u, l, e);
755
756
  case s.GREATER_THAN_OR_EQUAL:
756
- return this.validatorIsGreaterThanOrEqual(c, d, e);
757
+ return this.validatorIsGreaterThanOrEqual(u, l, e);
757
758
  case s.LESS_THAN:
758
- return this.validatorIsLessThan(c, d, e);
759
+ return this.validatorIsLessThan(u, l, e);
759
760
  case s.LESS_THAN_OR_EQUAL:
760
- return this.validatorIsLessThanOrEqual(c, d, e);
761
+ return this.validatorIsLessThanOrEqual(u, l, e);
761
762
  case s.NOT_BETWEEN:
762
- return this.validatorIsNotBetween(c, d, e);
763
+ return this.validatorIsNotBetween(u, l, e);
763
764
  case s.NOT_EQUAL:
764
- return this.validatorIsNotEqual(c, d, e);
765
+ return this.validatorIsNotEqual(u, l, e);
765
766
  default:
766
767
  throw new Error("Unknown operator.");
767
768
  }
768
769
  }
769
770
  };
770
771
  q = Be([
771
- $(0, v(oe)),
772
+ $(0, v(ie)),
772
773
  $(1, v(F))
773
774
  ], q);
774
775
  const We = [
@@ -784,7 +785,7 @@ export {
784
785
  A as DataValidationResourceController,
785
786
  N as DataValidationSheetController,
786
787
  ue as DataValidatorRegistryScope,
787
- J as DataValidatorRegistryService,
788
+ z as DataValidatorRegistryService,
788
789
  Se as RemoveAllDataValidationCommand,
789
790
  Ee as RemoveDataValidationCommand,
790
791
  S as RemoveDataValidationMutation,
@@ -796,7 +797,7 @@ export {
796
797
  fe as UpdateDataValidationSettingCommand,
797
798
  g as UpdateRuleType,
798
799
  Ge as createDefaultNewRule,
799
- K as getRuleOptions,
800
- z as getRuleSetting,
800
+ X as getRuleOptions,
801
+ K as getRuleSetting,
801
802
  Qe as removeDataValidationUndoFactory
802
803
  };
@@ -1,18 +1,22 @@
1
1
  import { ICommand, IDataValidationRule } from '@univerjs/core';
2
2
  import { ISheetCommandSharedParams } from '@univerjs/sheets';
3
3
  import { IUpdateRulePayload } from '../../types/interfaces/i-update-rule-payload';
4
+ import { DataValidationChangeSource } from '../../models/data-validation-model';
4
5
 
5
6
  export interface IAddDataValidationMutationParams extends ISheetCommandSharedParams {
6
7
  rule: IDataValidationRule | IDataValidationRule[];
7
8
  index?: number;
9
+ source?: DataValidationChangeSource;
8
10
  }
9
11
  export declare const AddDataValidationMutation: ICommand<IAddDataValidationMutationParams>;
10
12
  export interface IRemoveDataValidationMutationParams extends ISheetCommandSharedParams {
11
13
  ruleId: string | string[];
14
+ source?: DataValidationChangeSource;
12
15
  }
13
16
  export declare const RemoveDataValidationMutation: ICommand<IRemoveDataValidationMutationParams>;
14
17
  export interface IUpdateDataValidationMutationParams extends ISheetCommandSharedParams {
15
18
  payload: IUpdateRulePayload;
16
19
  ruleId: string;
20
+ source?: DataValidationChangeSource;
17
21
  }
18
22
  export declare const UpdateDataValidationMutation: ICommand<IUpdateDataValidationMutationParams>;
@@ -15,7 +15,7 @@
15
15
  */
16
16
  export { UniverDataValidationPlugin } from './plugin';
17
17
  export { DataValidatorRegistryService, DataValidatorRegistryScope } from './services/data-validator-registry.service';
18
- export { DataValidationModel } from './models/data-validation-model';
18
+ export { DataValidationModel, type DataValidationChangeSource } from './models/data-validation-model';
19
19
  export { createDefaultNewRule, getRuleOptions, getRuleSetting, } from './common/util';
20
20
  export { UpdateRuleType } from './types/enum/update-rule-type';
21
21
  export type { IDataValidatorOperatorConfig } from './types/interfaces/i-data-validator-operator-config';
@@ -8,9 +8,8 @@ export declare class DataValidationManager<T extends IDataValidationRule> extend
8
8
  readonly unitId: string;
9
9
  readonly subUnitId: string;
10
10
  readonly dataValidations$: import('rxjs').Observable<T[]>;
11
- constructor(unitId: string, subUnitId: string, dataValidations: T[] | undefined);
11
+ constructor(unitId: string, subUnitId: string);
12
12
  private _notice;
13
- private _insertRules;
14
13
  getRuleById(id: string): T | undefined;
15
14
  getRuleIndex(id: string): number;
16
15
  addRule(rule: T | T[], index?: number): void;
@@ -2,12 +2,14 @@ import { CellValue, DataValidationStatus, Disposable, IDataValidationRule, ILogS
2
2
  import { IUpdateRulePayload } from '../types/interfaces/i-update-rule-payload';
3
3
  import { DataValidationManager } from './data-validation-manager';
4
4
 
5
- type RuleChangeType = 'update' | 'add' | 'remove';
5
+ type DataValidationChangeType = 'update' | 'add' | 'remove';
6
+ export type DataValidationChangeSource = 'command' | 'patched';
6
7
  export interface IRuleChange<T extends IDataValidationRule> {
7
8
  rule?: T;
8
- type: RuleChangeType;
9
+ type: DataValidationChangeType;
9
10
  unitId: string;
10
11
  subUnitId: string;
12
+ source: DataValidationChangeSource;
11
13
  }
12
14
  export interface IValidStatusChange {
13
15
  unitId: string;
@@ -28,9 +30,9 @@ export declare class DataValidationModel<T extends IDataValidationRule = IDataVa
28
30
  setManagerCreator(creator: (unitId: string, subUnitId: string) => DataValidationManager<T>): void;
29
31
  ensureManager(unitId: string, subUnitId: string): DataValidationManager<T>;
30
32
  private _addRuleSideEffect;
31
- addRule(unitId: string, subUnitId: string, rule: T | T[], index?: number): void;
32
- updateRule(unitId: string, subUnitId: string, ruleId: string, payload: IUpdateRulePayload): void;
33
- removeRule(unitId: string, subUnitId: string, ruleId: string): void;
33
+ addRule(unitId: string, subUnitId: string, rule: T | T[], source: DataValidationChangeSource, index?: number): void;
34
+ updateRule(unitId: string, subUnitId: string, ruleId: string, payload: IUpdateRulePayload, source: DataValidationChangeSource): void;
35
+ removeRule(unitId: string, subUnitId: string, ruleId: string, source: DataValidationChangeSource): void;
34
36
  getRuleById(unitId: string, subUnitId: string, ruleId: string): T | undefined;
35
37
  getRuleIndex(unitId: string, subUnitId: string, ruleId: string): number;
36
38
  getRules(unitId: string, subUnitId: string): T[];
package/lib/umd/index.js CHANGED
@@ -1 +1 @@
1
- (function(s,n){typeof exports=="object"&&typeof module<"u"?n(exports,require("@univerjs/core"),require("rxjs"),require("@univerjs/sheets")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","rxjs","@univerjs/sheets"],n):(s=typeof globalThis<"u"?globalThis:s||self,n(s.UniverDataValidation={},s.UniverCore,s.rxjs,s.UniverSheets))})(this,function(s,n,m,O){"use strict";var ma=Object.defineProperty;var ga=(s,n,m)=>n in s?ma(s,n,{enumerable:!0,configurable:!0,writable:!0,value:m}):s[n]=m;var h=(s,n,m)=>ga(s,typeof n!="symbol"?n+"":n,m);var S;var N=(r=>(r.SHEET="sheet",r))(N||{});class T{constructor(){h(this,"_validatorByScopes",new Map);h(this,"_validatorMap",new Map);h(this,"_validatorsChange$",new m.BehaviorSubject(void 0));h(this,"validatorsChange$",this._validatorsChange$.asObservable())}_addValidatorToScope(e,a){this._validatorByScopes.has(a)||this._validatorByScopes.set(a,[]);const t=this._validatorByScopes.get(a);if(t.findIndex(i=>i.id===e.id)>-1)throw new Error(`Validator item with the same id ${e.id} has already been added!`);t.push(e)}_removeValidatorFromScope(e,a){const t=this._validatorByScopes.get(a);if(!t)return;const i=t.findIndex(o=>o.id===e.id);i>-1&&t.splice(i,1)}register(e){return this._validatorMap.set(e.id,e),Array.isArray(e.scopes)?e.scopes.forEach(a=>{this._addValidatorToScope(e,a)}):this._addValidatorToScope(e,e.scopes),this._validatorsChange$.next(),n.toDisposable(()=>{this._validatorMap.delete(e.id),Array.isArray(e.scopes)?e.scopes.forEach(a=>{this._removeValidatorFromScope(e,a)}):this._removeValidatorFromScope(e,e.scopes),this._validatorsChange$.next()})}getValidatorItem(e){return this._validatorMap.get(e)}getValidatorsByScope(e){return this._validatorByScopes.get(e)}}var g=(r=>(r[r.SETTING=0]="SETTING",r[r.RANGE=1]="RANGE",r[r.OPTIONS=2]="OPTIONS",r))(g||{});function I(r){return{type:r.type,operator:r.operator,formula1:r.formula1,formula2:r.formula2,allowBlank:r.allowBlank}}function M(r){return{error:r.error,errorStyle:r.errorStyle,errorTitle:r.errorTitle,imeMode:r.imeMode,prompt:r.prompt,promptTitle:r.promptTitle,showDropDown:r.showDropDown,showErrorMessage:r.showErrorMessage,showInputMessage:r.showInputMessage,renderMode:r.renderMode,bizInfo:r.bizInfo}}function H(r){const a=r.get(O.SheetsSelectionsService).getCurrentSelections().map(o=>o.range);return{uid:n.Tools.generateRandomId(6),type:n.DataValidationType.DECIMAL,operator:n.DataValidationOperator.EQUAL,formula1:"100",ranges:a!=null?a:[{startColumn:0,endColumn:0,startRow:0,endRow:0}]}}class C extends n.Disposable{constructor(a,t,i){super();h(this,"_dataValidations");h(this,"_dataValidationMap",new Map);h(this,"_dataValidations$",new m.Subject);h(this,"unitId");h(this,"subUnitId");h(this,"dataValidations$",this._dataValidations$.asObservable());this.unitId=a,this.subUnitId=t,i&&(this._insertRules(i),this._notice(),this.disposeWithMe({dispose:()=>{this._dataValidations$.complete()}}))}_notice(){this._dataValidations$.next(this._dataValidations)}_insertRules(a){this._dataValidations=a,a.forEach(t=>{this._dataValidationMap.set(t.uid,t)})}getRuleById(a){return this._dataValidationMap.get(a)}getRuleIndex(a){return this._dataValidations.findIndex(t=>t.uid===a)}addRule(a,t){const o=(Array.isArray(a)?a:[a]).filter(d=>!this._dataValidationMap.has(d.uid));typeof t=="number"&&t<this._dataValidations.length?this._dataValidations.splice(t,0,...o):this._dataValidations.push(...o),o.forEach(d=>{this._dataValidationMap.set(d.uid,d)}),this._notice()}removeRule(a){const t=this._dataValidations.findIndex(i=>i.uid===a);t>-1&&(this._dataValidations.splice(t,1),this._dataValidationMap.delete(a),this._notice())}updateRule(a,t){const i=this._dataValidationMap.get(a),o=this._dataValidations.findIndex(l=>a===l.uid);if(!i)throw new Error(`Data validation rule is not found, ruleId: ${a}.`);const d={...i};switch(t.type){case g.RANGE:{d.ranges=t.payload;break}case g.SETTING:{Object.assign(d,I(t.payload));break}case g.OPTIONS:{Object.assign(d,M(t.payload));break}}return this._dataValidations[o]=d,this._dataValidationMap.set(a,d),this._notice(),d}getDataValidations(){return this._dataValidations}toJSON(){return this._dataValidations}validator(a,t,i,o){return n.DataValidationStatus.VALID}}var G=Object.defineProperty,Q=Object.getOwnPropertyDescriptor,W=(r,e,a,t)=>{for(var i=t>1?void 0:t?Q(e,a):e,o=r.length-1,d;o>=0;o--)(d=r[o])&&(i=(t?d(e,a,i):d(i))||i);return t&&i&&G(e,a,i),i},F=(r,e)=>(a,t)=>e(a,t,r);s.DataValidationModel=class extends n.Disposable{constructor(a){super();h(this,"_model",new Map);h(this,"_managerCreator",(a,t)=>new C(a,t,[]));h(this,"_ruleChange$",new m.Subject);h(this,"_validStatusChange$",new m.Subject);h(this,"ruleChange$",this._ruleChange$.asObservable());h(this,"ruleChangeDebounce$",this.ruleChange$.pipe(m.debounceTime(20)));h(this,"validStatusChange$",this._validStatusChange$.asObservable().pipe(m.debounceTime(20)));this._logService=a,this.disposeWithMe({dispose:()=>{this._ruleChange$.complete(),this._validStatusChange$.complete()}})}setManagerCreator(a){this._managerCreator=a}ensureManager(a,t){this._model.has(a)||this._model.set(a,new Map);const i=this._model.get(a);if(i.has(t))return i.get(t);const o=this._managerCreator(a,t);return i.set(t,o),o}_addRuleSideEffect(a,t,i){this.ensureManager(a,t).getRuleById(i.uid)||this._ruleChange$.next({rule:i,type:"add",unitId:a,subUnitId:t})}addRule(a,t,i,o){try{const d=this.ensureManager(a,t);(Array.isArray(i)?i:[i]).forEach(u=>{this._addRuleSideEffect(a,t,u)}),d.addRule(i,o)}catch(d){this._logService.error(d)}}updateRule(a,t,i,o){try{const l=this.ensureManager(a,t).updateRule(i,o);this._ruleChange$.next({rule:l,type:"update",unitId:a,subUnitId:t})}catch(d){this._logService.error(d)}}removeRule(a,t,i){try{const o=this.ensureManager(a,t),d=o.getRuleById(i);d&&(o.removeRule(i),this._ruleChange$.next({rule:d,type:"remove",unitId:a,subUnitId:t}))}catch(o){this._logService.error(o)}}getRuleById(a,t,i){return this.ensureManager(a,t).getRuleById(i)}getRuleIndex(a,t,i){return this.ensureManager(a,t).getRuleIndex(i)}getRules(a,t){return this.ensureManager(a,t).getDataValidations()}validator(a,t,i){const{unitId:o,subUnitId:d}=i;return this.ensureManager(o,d).validator(a,t,i,(u,c)=>{c&&this._validStatusChange$.next({unitId:o,subUnitId:d,ruleId:t.uid,status:u})})}getUnitRules(a){const t=this._model.get(a);if(!t)return[];const i=[];return t.forEach(o=>{i.push([o.subUnitId,o.getDataValidations()])}),i}deleteUnitRules(a){this._model.delete(a)}getSubUnitIds(a){var t,i;return Array.from((i=(t=this._model.get(a))==null?void 0:t.keys())!=null?i:[])}},s.DataValidationModel=W([F(0,n.ILogService)],s.DataValidationModel);const V={type:n.CommandType.MUTATION,id:"data-validation.mutation.addRule",handler(r,e){if(!e)return!1;const{unitId:a,subUnitId:t,rule:i,index:o}=e;return r.get(s.DataValidationModel).addRule(a,t,i,o),!0}},v={type:n.CommandType.MUTATION,id:"data-validation.mutation.removeRule",handler(r,e){if(!e)return!1;const{unitId:a,subUnitId:t,ruleId:i}=e,o=r.get(s.DataValidationModel);return Array.isArray(i)?i.forEach(d=>{o.removeRule(a,t,d)}):o.removeRule(a,t,i),!0}},E={type:n.CommandType.MUTATION,id:"data-validation.mutation.updateRule",handler(r,e){if(!e)return!1;const{unitId:a,subUnitId:t,ruleId:i,payload:o}=e;return r.get(s.DataValidationModel).updateRule(a,t,i,o),!0}},U={type:n.CommandType.COMMAND,id:"data-validation.command.addRule",async handler(r,e){if(r.get(n.ILogService).warn("[Deprecated] AddDataValidationCommand is deprecated, please use AddSheetDataValidationCommand in @univerjs/sheets-data-validation instead!"),!e)return!1;const{rule:t,unitId:i,subUnitId:o}=e,d=r.get(n.ICommandService),l=r.get(n.IUndoRedoService),u={...e,rule:{...e.rule,ranges:[e.rule.range]}},c=[{id:V.id,params:u}],p=[{id:v.id,params:{unitId:i,subUnitId:o,ruleId:t.uid}}];return l.pushUndoRedo({unitID:i,redoMutations:c,undoMutations:p}),await d.executeCommand(V.id,u),!0}},J=(r,e)=>{const a=r.get(s.DataValidationModel),{unitId:t,subUnitId:i,ruleId:o}=e;if(Array.isArray(o)){const l=o.map(u=>a.getRuleById(t,i,u)).filter(Boolean);return[{id:V.id,params:{unitId:t,subUnitId:i,rule:l}}]}return[{id:V.id,params:{unitId:t,subUnitId:i,rule:{...a.getRuleById(t,i,o)},index:a.getRuleIndex(t,i,o)}}]},L={type:n.CommandType.COMMAND,id:"data-validation.command.removeRule",handler(r,e){if(!e)return!1;const{unitId:a,subUnitId:t,ruleId:i}=e,o=r.get(n.ICommandService),d=r.get(n.IUndoRedoService),l=r.get(s.DataValidationModel),u=[{id:v.id,params:e}],c=[{id:V.id,params:{unitId:a,subUnitId:t,rule:{...l.getRuleById(a,t,i)},index:l.getRuleIndex(a,t,i)}}];return d.pushUndoRedo({undoMutations:c,redoMutations:u,unitID:e.unitId}),o.executeCommand(v.id,e),!0}},w={type:n.CommandType.COMMAND,id:"data-validation.command.updateDataValidationSetting",handler(r,e){if(r.get(n.ILogService).warn("[Deprecated] UpdateDataValidationOptionsCommand is deprecated, please use UpdateSheetDataValidationOptionsCommand in @univerjs/sheets-data-validation instead!"),!e)return!1;const t=r.get(n.ICommandService),i=r.get(n.IUndoRedoService),o=r.get(s.DataValidationModel),{unitId:d,subUnitId:l,ruleId:u,options:c}=e,p=o.getRuleById(d,l,u);if(!p)return!1;const _={unitId:d,subUnitId:l,ruleId:u,payload:{type:g.OPTIONS,payload:c}},D=[{id:E.id,params:_}],f={unitId:d,subUnitId:l,ruleId:u,payload:{type:g.OPTIONS,payload:M(p)}},y=[{id:E.id,params:f}];return i.pushUndoRedo({unitID:d,redoMutations:D,undoMutations:y}),t.executeCommand(E.id,_),!0}},b={type:n.CommandType.COMMAND,id:"data-validation.command.updateDataValidationOptions",handler(r,e){if(r.get(n.ILogService).warn("[Deprecated] UpdateDataValidationSettingCommand is deprecated, please use UpdateSheetDataValidationSettingCommand in @univerjs/sheets-data-validation instead!"),!e)return!1;const t=r.get(n.ICommandService),i=r.get(n.IUndoRedoService),o=r.get(s.DataValidationModel),d=r.get(T),{unitId:l,subUnitId:u,ruleId:c,setting:p}=e,_=d.getValidatorItem(p.type);if(!_)return!1;const D=o.getRuleById(l,u,c);if(!D||!_.validatorFormula({...D,...p},l,u).success)return!1;const f={unitId:l,subUnitId:u,ruleId:c,payload:{type:g.SETTING,payload:p}},y=[{id:E.id,params:f}],ha={unitId:l,subUnitId:u,ruleId:c,payload:{type:g.SETTING,payload:I(D)}},pa=[{id:E.id,params:ha}];return i.pushUndoRedo({unitID:l,redoMutations:y,undoMutations:pa}),t.executeCommand(E.id,f),!0}},P={type:n.CommandType.COMMAND,id:"data-validation.command.removeAll",handler(r,e){if(!e)return!1;const{unitId:a,subUnitId:t}=e,i=r.get(n.ICommandService),o=r.get(s.DataValidationModel),d=r.get(n.IUndoRedoService),l=[...o.getRules(a,t)],u={unitId:a,subUnitId:t,ruleId:l.map(_=>_.uid)},c=[{id:v.id,params:u}],p=[{id:V.id,params:{unitId:a,subUnitId:t,rule:l}}];return d.pushUndoRedo({redoMutations:c,undoMutations:p,unitID:a}),i.executeCommand(v.id,u),!0}};var z=Object.defineProperty,K=Object.getOwnPropertyDescriptor,X=(r,e,a,t)=>{for(var i=t>1?void 0:t?K(e,a):e,o=r.length-1,d;o>=0;o--)(d=r[o])&&(i=(t?d(e,a,i):d(i))||i);return t&&i&&z(e,a,i),i},R=(r,e)=>(a,t)=>e(a,t,r);const Y="SHEET_DATA_VALIDATION_PLUGIN";s.DataValidationResourceController=class extends n.Disposable{constructor(e,a,t){super(),this._resourceManagerService=e,this._univerInstanceService=a,this._dataValidationModel=t,this._initSnapshot()}_initSnapshot(){const e=t=>{const i=this._dataValidationModel.getUnitRules(t),o={};return i?(i.forEach(([d,l])=>{o[d]=l}),JSON.stringify(o)):""},a=t=>{if(!t)return{};try{return JSON.parse(t)}catch{return{}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:Y,businesses:[n.UniverInstanceType.UNIVER_SHEET],toJson:t=>e(t),parseJson:t=>a(t),onUnLoad:t=>{this._dataValidationModel.deleteUnitRules(t)},onLoad:(t,i)=>{Object.keys(i).forEach(o=>{i[o].forEach(l=>{this._dataValidationModel.addRule(t,o,l)})})}}))}},s.DataValidationResourceController=X([n.OnLifecycle(n.LifecycleStages.Ready,s.DataValidationResourceController),R(0,n.IResourceManagerService),R(1,n.IUniverInstanceService),R(2,n.Inject(s.DataValidationModel))],s.DataValidationResourceController);var Z=Object.defineProperty,x=Object.getOwnPropertyDescriptor,k=(r,e,a,t)=>{for(var i=t>1?void 0:t?x(e,a):e,o=r.length-1,d;o>=0;o--)(d=r[o])&&(i=(t?d(e,a,i):d(i))||i);return t&&i&&Z(e,a,i),i},A=(r,e)=>(a,t)=>e(a,t,r);s.DataValidationSheetController=class extends n.Disposable{constructor(e,a,t){super(),this._sheetInterceptorService=e,this._univerInstanceService=a,this._dataValidationModel=t,this._initSheetChange()}_initSheetChange(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:e=>{var a;if(e.id===O.RemoveSheetCommand.id){const t=e.params,i=t.unitId||this._univerInstanceService.getCurrentUnitForType(n.UniverInstanceType.UNIVER_SHEET).getUnitId(),o=this._univerInstanceService.getUniverSheetInstance(i);if(!o)return{redos:[],undos:[]};const d=t.subUnitId||((a=o.getActiveSheet())==null?void 0:a.getSheetId());if(!d)return{redos:[],undos:[]};const l=this._dataValidationModel.ensureManager(i,d);if(!l)return{redos:[],undos:[]};const u=l.getDataValidations(),c=u.map(D=>D.uid),p={unitId:i,subUnitId:d,ruleId:c},_={unitId:i,subUnitId:d,rule:u};return{redos:[{id:v.id,params:p}],undos:[{id:V.id,params:_}]}}return{redos:[],undos:[]}}}))}},s.DataValidationSheetController=k([n.OnLifecycle(n.LifecycleStages.Ready,s.DataValidationSheetController),A(0,n.Inject(O.SheetInterceptorService)),A(1,n.Inject(n.IUniverInstanceService)),A(2,n.Inject(s.DataValidationModel))],s.DataValidationSheetController);var aa=Object.defineProperty,ta=Object.getOwnPropertyDescriptor,ea=(r,e,a,t)=>{for(var i=t>1?void 0:t?ta(e,a):e,o=r.length-1,d;o>=0;o--)(d=r[o])&&(i=(t?d(e,a,i):d(i))||i);return t&&i&&aa(e,a,i),i},B=(r,e)=>(a,t)=>e(a,t,r);const ia="UNIVER_DATA_VALIDATION_PLUGIN";s.UniverDataValidationPlugin=(S=class extends n.Plugin{constructor(e,a,t){super(),this._injector=a,this._commandService=t}onStarting(e){[[s.DataValidationModel],[T],[s.DataValidationResourceController],[s.DataValidationSheetController]].forEach(a=>{e.add(a)}),[U,P,w,b,L,V,E,v].forEach(a=>{this._commandService.registerCommand(a)})}},h(S,"pluginName",ia),h(S,"type",n.UniverInstanceType.UNIVER_SHEET),S),s.UniverDataValidationPlugin=ea([B(1,n.Inject(n.Injector)),B(2,n.ICommandService)],s.UniverDataValidationPlugin),n.DataValidationOperator.BETWEEN+"",n.DataValidationOperator.EQUAL+"",n.DataValidationOperator.GREATER_THAN+"",n.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",n.DataValidationOperator.LESS_THAN+"",n.DataValidationOperator.LESS_THAN_OR_EQUAL+"",n.DataValidationOperator.NOT_BETWEEN+"",n.DataValidationOperator.NOT_EQUAL+"";const na={[n.DataValidationOperator.BETWEEN]:"dataValidation.ruleName.between",[n.DataValidationOperator.EQUAL]:"dataValidation.ruleName.equal",[n.DataValidationOperator.GREATER_THAN]:"dataValidation.ruleName.greaterThan",[n.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.ruleName.greaterThanOrEqual",[n.DataValidationOperator.LESS_THAN]:"dataValidation.ruleName.lessThan",[n.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.ruleName.lessThanOrEqual",[n.DataValidationOperator.NOT_BETWEEN]:"dataValidation.ruleName.notBetween",[n.DataValidationOperator.NOT_EQUAL]:"dataValidation.ruleName.notEqual"},ra={[n.DataValidationOperator.BETWEEN]:"dataValidation.errorMsg.between",[n.DataValidationOperator.EQUAL]:"dataValidation.errorMsg.equal",[n.DataValidationOperator.GREATER_THAN]:"dataValidation.errorMsg.greaterThan",[n.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.errorMsg.greaterThanOrEqual",[n.DataValidationOperator.LESS_THAN]:"dataValidation.errorMsg.lessThan",[n.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.errorMsg.lessThanOrEqual",[n.DataValidationOperator.NOT_BETWEEN]:"dataValidation.errorMsg.notBetween",[n.DataValidationOperator.NOT_EQUAL]:"dataValidation.errorMsg.notEqual"},oa={[n.DataValidationOperator.BETWEEN]:"dataValidation.textLength.errorMsg.between",[n.DataValidationOperator.EQUAL]:"dataValidation.textLength.errorMsg.equal",[n.DataValidationOperator.GREATER_THAN]:"dataValidation.textLength.errorMsg.greaterThan",[n.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.greaterThanOrEqual",[n.DataValidationOperator.LESS_THAN]:"dataValidation.textLength.errorMsg.lessThan",[n.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.lessThanOrEqual",[n.DataValidationOperator.NOT_BETWEEN]:"dataValidation.textLength.errorMsg.notBetween",[n.DataValidationOperator.NOT_EQUAL]:"dataValidation.textLength.errorMsg.notEqual"};var da=Object.defineProperty,sa=Object.getOwnPropertyDescriptor,la=(r,e,a,t)=>{for(var i=t>1?void 0:t?sa(e,a):e,o=r.length-1,d;o>=0;o--)(d=r[o])&&(i=(t?d(e,a,i):d(i))||i);return t&&i&&da(e,a,i),i},$=(r,e)=>(a,t)=>e(a,t,r);const j="{FORMULA1}",q="{FORMULA2}",ua={[n.DataValidationOperator.BETWEEN]:"dataValidation.operators.between",[n.DataValidationOperator.EQUAL]:"dataValidation.operators.equal",[n.DataValidationOperator.GREATER_THAN]:"dataValidation.operators.greaterThan",[n.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.operators.greaterThanOrEqual",[n.DataValidationOperator.LESS_THAN]:"dataValidation.operators.lessThan",[n.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.operators.lessThanOrEqual",[n.DataValidationOperator.NOT_BETWEEN]:"dataValidation.operators.notBetween",[n.DataValidationOperator.NOT_EQUAL]:"dataValidation.operators.notEqual"};s.BaseDataValidator=class{constructor(e,a){h(this,"canvasRender",null);h(this,"dropdown");h(this,"optionsInput");this.localeService=e,this.injector=a}get operatorNames(){return this.operators.map(e=>this.localeService.t(ua[e]))}get titleStr(){return this.localeService.t(this.title)}skipDefaultFontRender(e,a,t){return!1}generateRuleName(e){var t,i;if(!e.operator)return this.titleStr;const a=this.localeService.t(na[e.operator]).replace(j,(t=e.formula1)!=null?t:"").replace(q,(i=e.formula2)!=null?i:"");return`${this.titleStr} ${a}`}generateRuleErrorMessage(e){var t,i;return e.operator?`${this.localeService.t(ra[e.operator]).replace(j,(t=e.formula1)!=null?t:"").replace(q,(i=e.formula2)!=null?i:"")}`:this.titleStr}getRuleFinalError(e){return e.showInputMessage&&e.error?e.error:this.generateRuleErrorMessage(e)}isEmptyCellValue(e){return e===""||e===void 0||e===null}async isValidType(e,a,t){return!0}transform(e,a,t){return e}async validatorIsEqual(e,a,t){return!0}async validatorIsNotEqual(e,a,t){return!0}async validatorIsBetween(e,a,t){return!0}async validatorIsNotBetween(e,a,t){return!0}async validatorIsGreaterThan(e,a,t){return!0}async validatorIsGreaterThanOrEqual(e,a,t){return!0}async validatorIsLessThan(e,a,t){return!0}async validatorIsLessThanOrEqual(e,a,t){return!0}async validator(e,a){const{value:t,unitId:i,subUnitId:o}=e,d=this.isEmptyCellValue(t),{allowBlank:l=!0,operator:u}=a;if(d)return l;const c=await this.parseFormula(a,i,o);if(!await this.isValidType(e,c,a))return!1;if(!n.Tools.isDefine(u))return!0;const p=this.transform(e,c,a);switch(u){case n.DataValidationOperator.BETWEEN:return this.validatorIsBetween(p,c,a);case n.DataValidationOperator.EQUAL:return this.validatorIsEqual(p,c,a);case n.DataValidationOperator.GREATER_THAN:return this.validatorIsGreaterThan(p,c,a);case n.DataValidationOperator.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(p,c,a);case n.DataValidationOperator.LESS_THAN:return this.validatorIsLessThan(p,c,a);case n.DataValidationOperator.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(p,c,a);case n.DataValidationOperator.NOT_BETWEEN:return this.validatorIsNotBetween(p,c,a);case n.DataValidationOperator.NOT_EQUAL:return this.validatorIsNotEqual(p,c,a);default:throw new Error("Unknown operator.")}}},s.BaseDataValidator=la([$(0,n.Inject(n.LocaleService)),$(1,n.Inject(n.Injector))],s.BaseDataValidator);const ca=[n.DataValidationOperator.BETWEEN,n.DataValidationOperator.NOT_BETWEEN];s.AddDataValidationCommand=U,s.AddDataValidationMutation=V,s.DataValidationManager=C,s.DataValidatorRegistryScope=N,s.DataValidatorRegistryService=T,s.RemoveAllDataValidationCommand=P,s.RemoveDataValidationCommand=L,s.RemoveDataValidationMutation=v,s.TWO_FORMULA_OPERATOR_COUNT=ca,s.TextLengthErrorTitleMap=oa,s.UpdateDataValidationMutation=E,s.UpdateDataValidationOptionsCommand=w,s.UpdateDataValidationSettingCommand=b,s.UpdateRuleType=g,s.createDefaultNewRule=H,s.getRuleOptions=M,s.getRuleSetting=I,s.removeDataValidationUndoFactory=J,Object.defineProperty(s,Symbol.toStringTag,{value:"Module"})});
1
+ (function(s,n){typeof exports=="object"&&typeof module<"u"?n(exports,require("@univerjs/core"),require("rxjs"),require("@univerjs/sheets")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","rxjs","@univerjs/sheets"],n):(s=typeof globalThis<"u"?globalThis:s||self,n(s.UniverDataValidation={},s.UniverCore,s.rxjs,s.UniverSheets))})(this,function(s,n,m,f){"use strict";var ma=Object.defineProperty;var ga=(s,n,m)=>n in s?ma(s,n,{enumerable:!0,configurable:!0,writable:!0,value:m}):s[n]=m;var h=(s,n,m)=>ga(s,typeof n!="symbol"?n+"":n,m);var S;var N=(r=>(r.SHEET="sheet",r))(N||{});class T{constructor(){h(this,"_validatorByScopes",new Map);h(this,"_validatorMap",new Map);h(this,"_validatorsChange$",new m.BehaviorSubject(void 0));h(this,"validatorsChange$",this._validatorsChange$.asObservable())}_addValidatorToScope(e,a){this._validatorByScopes.has(a)||this._validatorByScopes.set(a,[]);const t=this._validatorByScopes.get(a);if(t.findIndex(i=>i.id===e.id)>-1)throw new Error(`Validator item with the same id ${e.id} has already been added!`);t.push(e)}_removeValidatorFromScope(e,a){const t=this._validatorByScopes.get(a);if(!t)return;const i=t.findIndex(o=>o.id===e.id);i>-1&&t.splice(i,1)}register(e){return this._validatorMap.set(e.id,e),Array.isArray(e.scopes)?e.scopes.forEach(a=>{this._addValidatorToScope(e,a)}):this._addValidatorToScope(e,e.scopes),this._validatorsChange$.next(),n.toDisposable(()=>{this._validatorMap.delete(e.id),Array.isArray(e.scopes)?e.scopes.forEach(a=>{this._removeValidatorFromScope(e,a)}):this._removeValidatorFromScope(e,e.scopes),this._validatorsChange$.next()})}getValidatorItem(e){return this._validatorMap.get(e)}getValidatorsByScope(e){return this._validatorByScopes.get(e)}}var g=(r=>(r[r.SETTING=0]="SETTING",r[r.RANGE=1]="RANGE",r[r.OPTIONS=2]="OPTIONS",r))(g||{});function I(r){return{type:r.type,operator:r.operator,formula1:r.formula1,formula2:r.formula2,allowBlank:r.allowBlank}}function M(r){return{error:r.error,errorStyle:r.errorStyle,errorTitle:r.errorTitle,imeMode:r.imeMode,prompt:r.prompt,promptTitle:r.promptTitle,showDropDown:r.showDropDown,showErrorMessage:r.showErrorMessage,showInputMessage:r.showInputMessage,renderMode:r.renderMode,bizInfo:r.bizInfo}}function H(r){const a=r.get(f.SheetsSelectionsService).getCurrentSelections().map(o=>o.range);return{uid:n.Tools.generateRandomId(6),type:n.DataValidationType.DECIMAL,operator:n.DataValidationOperator.EQUAL,formula1:"100",ranges:a!=null?a:[{startColumn:0,endColumn:0,startRow:0,endRow:0}]}}class C extends n.Disposable{constructor(a,t){super();h(this,"_dataValidations",[]);h(this,"_dataValidationMap",new Map);h(this,"_dataValidations$",new m.BehaviorSubject(this._dataValidations));h(this,"unitId");h(this,"subUnitId");h(this,"dataValidations$",this._dataValidations$.asObservable());this.unitId=a,this.subUnitId=t,this._notice(),this.disposeWithMe({dispose:()=>{this._dataValidations$.complete()}})}_notice(){this._dataValidations$.next(this._dataValidations)}getRuleById(a){return this._dataValidationMap.get(a)}getRuleIndex(a){return this._dataValidations.findIndex(t=>t.uid===a)}addRule(a,t){const o=(Array.isArray(a)?a:[a]).filter(d=>!this._dataValidationMap.has(d.uid));typeof t=="number"&&t<this._dataValidations.length?this._dataValidations.splice(t,0,...o):this._dataValidations.push(...o),o.forEach(d=>{this._dataValidationMap.set(d.uid,d)}),this._notice()}removeRule(a){const t=this._dataValidations.findIndex(i=>i.uid===a);t>-1&&(this._dataValidations.splice(t,1),this._dataValidationMap.delete(a),this._notice())}updateRule(a,t){const i=this._dataValidationMap.get(a),o=this._dataValidations.findIndex(l=>a===l.uid);if(!i)throw new Error(`Data validation rule is not found, ruleId: ${a}.`);const d={...i};switch(t.type){case g.RANGE:{d.ranges=t.payload;break}case g.SETTING:{Object.assign(d,I(t.payload));break}case g.OPTIONS:{Object.assign(d,M(t.payload));break}}return this._dataValidations[o]=d,this._dataValidationMap.set(a,d),this._notice(),d}getDataValidations(){return this._dataValidations}toJSON(){return this._dataValidations}validator(a,t,i,o){return n.DataValidationStatus.VALID}}var G=Object.defineProperty,Q=Object.getOwnPropertyDescriptor,W=(r,e,a,t)=>{for(var i=t>1?void 0:t?Q(e,a):e,o=r.length-1,d;o>=0;o--)(d=r[o])&&(i=(t?d(e,a,i):d(i))||i);return t&&i&&G(e,a,i),i},F=(r,e)=>(a,t)=>e(a,t,r);s.DataValidationModel=class extends n.Disposable{constructor(a){super();h(this,"_model",new Map);h(this,"_managerCreator",(a,t)=>new C(a,t));h(this,"_ruleChange$",new m.Subject);h(this,"_validStatusChange$",new m.Subject);h(this,"ruleChange$",this._ruleChange$.asObservable());h(this,"ruleChangeDebounce$",this.ruleChange$.pipe(m.debounceTime(20)));h(this,"validStatusChange$",this._validStatusChange$.asObservable().pipe(m.debounceTime(20)));this._logService=a,this.disposeWithMe({dispose:()=>{this._ruleChange$.complete(),this._validStatusChange$.complete()}})}setManagerCreator(a){this._managerCreator=a}ensureManager(a,t){this._model.has(a)||this._model.set(a,new Map);const i=this._model.get(a);if(i.has(t))return i.get(t);const o=this._managerCreator(a,t);return i.set(t,o),this.disposeWithMe(o),o}_addRuleSideEffect(a,t,i,o){this.ensureManager(a,t).getRuleById(i.uid)||this._ruleChange$.next({rule:i,type:"add",unitId:a,subUnitId:t,source:o})}addRule(a,t,i,o,d){try{const l=this.ensureManager(a,t);(Array.isArray(i)?i:[i]).forEach(u=>{this._addRuleSideEffect(a,t,u,o)}),l.addRule(i,d)}catch(l){this._logService.error(l)}}updateRule(a,t,i,o,d){try{const c=this.ensureManager(a,t).updateRule(i,o);this._ruleChange$.next({rule:c,type:"update",unitId:a,subUnitId:t,source:d})}catch(l){this._logService.error(l)}}removeRule(a,t,i,o){try{const d=this.ensureManager(a,t),l=d.getRuleById(i);l&&(d.removeRule(i),this._ruleChange$.next({rule:l,type:"remove",unitId:a,subUnitId:t,source:o}))}catch(d){this._logService.error(d)}}getRuleById(a,t,i){return this.ensureManager(a,t).getRuleById(i)}getRuleIndex(a,t,i){return this.ensureManager(a,t).getRuleIndex(i)}getRules(a,t){return this.ensureManager(a,t).getDataValidations()}validator(a,t,i){const{unitId:o,subUnitId:d}=i;return this.ensureManager(o,d).validator(a,t,i,(c,u)=>{u&&this._validStatusChange$.next({unitId:o,subUnitId:d,ruleId:t.uid,status:c})})}getUnitRules(a){const t=this._model.get(a);if(!t)return[];const i=[];return t.forEach(o=>{i.push([o.subUnitId,o.getDataValidations()])}),i}deleteUnitRules(a){this._model.delete(a)}getSubUnitIds(a){var t,i;return Array.from((i=(t=this._model.get(a))==null?void 0:t.keys())!=null?i:[])}},s.DataValidationModel=W([F(0,n.ILogService)],s.DataValidationModel);const V={type:n.CommandType.MUTATION,id:"data-validation.mutation.addRule",handler(r,e){if(!e)return!1;const{unitId:a,subUnitId:t,rule:i,index:o,source:d="command"}=e;return r.get(s.DataValidationModel).addRule(a,t,i,d,o),!0}},v={type:n.CommandType.MUTATION,id:"data-validation.mutation.removeRule",handler(r,e){if(!e)return!1;const{unitId:a,subUnitId:t,ruleId:i,source:o="command"}=e,d=r.get(s.DataValidationModel);return Array.isArray(i)?i.forEach(l=>{d.removeRule(a,t,l,o)}):d.removeRule(a,t,i,o),!0}},E={type:n.CommandType.MUTATION,id:"data-validation.mutation.updateRule",handler(r,e){if(!e)return!1;const{unitId:a,subUnitId:t,ruleId:i,payload:o,source:d="command"}=e;return r.get(s.DataValidationModel).updateRule(a,t,i,o,d),!0}},U={type:n.CommandType.COMMAND,id:"data-validation.command.addRule",async handler(r,e){if(r.get(n.ILogService).warn("[Deprecated] AddDataValidationCommand is deprecated, please use AddSheetDataValidationCommand in @univerjs/sheets-data-validation instead!"),!e)return!1;const{rule:t,unitId:i,subUnitId:o}=e,d=r.get(n.ICommandService),l=r.get(n.IUndoRedoService),c={...e,rule:{...e.rule,ranges:[e.rule.range]}},u=[{id:V.id,params:c}],p=[{id:v.id,params:{unitId:i,subUnitId:o,ruleId:t.uid}}];return l.pushUndoRedo({unitID:i,redoMutations:u,undoMutations:p}),await d.executeCommand(V.id,c),!0}},J=(r,e)=>{const a=r.get(s.DataValidationModel),{unitId:t,subUnitId:i,ruleId:o,source:d}=e;if(Array.isArray(o)){const c=o.map(u=>a.getRuleById(t,i,u)).filter(Boolean);return[{id:V.id,params:{unitId:t,subUnitId:i,rule:c,source:d}}]}return[{id:V.id,params:{unitId:t,subUnitId:i,rule:{...a.getRuleById(t,i,o)},index:a.getRuleIndex(t,i,o)}}]},L={type:n.CommandType.COMMAND,id:"data-validation.command.removeRule",handler(r,e){if(!e)return!1;const{unitId:a,subUnitId:t,ruleId:i}=e,o=r.get(n.ICommandService),d=r.get(n.IUndoRedoService),l=r.get(s.DataValidationModel),c=[{id:v.id,params:e}],u=[{id:V.id,params:{unitId:a,subUnitId:t,rule:{...l.getRuleById(a,t,i)},index:l.getRuleIndex(a,t,i)}}];return d.pushUndoRedo({undoMutations:u,redoMutations:c,unitID:e.unitId}),o.executeCommand(v.id,e),!0}},w={type:n.CommandType.COMMAND,id:"data-validation.command.updateDataValidationSetting",handler(r,e){if(r.get(n.ILogService).warn("[Deprecated] UpdateDataValidationOptionsCommand is deprecated, please use UpdateSheetDataValidationOptionsCommand in @univerjs/sheets-data-validation instead!"),!e)return!1;const t=r.get(n.ICommandService),i=r.get(n.IUndoRedoService),o=r.get(s.DataValidationModel),{unitId:d,subUnitId:l,ruleId:c,options:u}=e,p=o.getRuleById(d,l,c);if(!p)return!1;const _={unitId:d,subUnitId:l,ruleId:c,payload:{type:g.OPTIONS,payload:u}},D=[{id:E.id,params:_}],O={unitId:d,subUnitId:l,ruleId:c,payload:{type:g.OPTIONS,payload:M(p)}},y=[{id:E.id,params:O}];return i.pushUndoRedo({unitID:d,redoMutations:D,undoMutations:y}),t.executeCommand(E.id,_),!0}},b={type:n.CommandType.COMMAND,id:"data-validation.command.updateDataValidationOptions",handler(r,e){if(r.get(n.ILogService).warn("[Deprecated] UpdateDataValidationSettingCommand is deprecated, please use UpdateSheetDataValidationSettingCommand in @univerjs/sheets-data-validation instead!"),!e)return!1;const t=r.get(n.ICommandService),i=r.get(n.IUndoRedoService),o=r.get(s.DataValidationModel),d=r.get(T),{unitId:l,subUnitId:c,ruleId:u,setting:p}=e,_=d.getValidatorItem(p.type);if(!_)return!1;const D=o.getRuleById(l,c,u);if(!D||!_.validatorFormula({...D,...p},l,c).success)return!1;const O={unitId:l,subUnitId:c,ruleId:u,payload:{type:g.SETTING,payload:p}},y=[{id:E.id,params:O}],ha={unitId:l,subUnitId:c,ruleId:u,payload:{type:g.SETTING,payload:I(D)}},pa=[{id:E.id,params:ha}];return i.pushUndoRedo({unitID:l,redoMutations:y,undoMutations:pa}),t.executeCommand(E.id,O),!0}},P={type:n.CommandType.COMMAND,id:"data-validation.command.removeAll",handler(r,e){if(!e)return!1;const{unitId:a,subUnitId:t}=e,i=r.get(n.ICommandService),o=r.get(s.DataValidationModel),d=r.get(n.IUndoRedoService),l=[...o.getRules(a,t)],c={unitId:a,subUnitId:t,ruleId:l.map(_=>_.uid)},u=[{id:v.id,params:c}],p=[{id:V.id,params:{unitId:a,subUnitId:t,rule:l}}];return d.pushUndoRedo({redoMutations:u,undoMutations:p,unitID:a}),i.executeCommand(v.id,c),!0}};var z=Object.defineProperty,K=Object.getOwnPropertyDescriptor,X=(r,e,a,t)=>{for(var i=t>1?void 0:t?K(e,a):e,o=r.length-1,d;o>=0;o--)(d=r[o])&&(i=(t?d(e,a,i):d(i))||i);return t&&i&&z(e,a,i),i},R=(r,e)=>(a,t)=>e(a,t,r);const Y="SHEET_DATA_VALIDATION_PLUGIN";s.DataValidationResourceController=class extends n.Disposable{constructor(e,a,t){super(),this._resourceManagerService=e,this._univerInstanceService=a,this._dataValidationModel=t,this._initSnapshot()}_initSnapshot(){const e=t=>{const i=this._dataValidationModel.getUnitRules(t),o={};return i?(i.forEach(([d,l])=>{o[d]=l}),JSON.stringify(o)):""},a=t=>{if(!t)return{};try{return JSON.parse(t)}catch{return{}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:Y,businesses:[n.UniverInstanceType.UNIVER_SHEET],toJson:t=>e(t),parseJson:t=>a(t),onUnLoad:t=>{this._dataValidationModel.deleteUnitRules(t)},onLoad:(t,i)=>{Object.keys(i).forEach(o=>{i[o].forEach(l=>{this._dataValidationModel.addRule(t,o,l,"patched")})})}}))}},s.DataValidationResourceController=X([n.OnLifecycle(n.LifecycleStages.Ready,s.DataValidationResourceController),R(0,n.IResourceManagerService),R(1,n.IUniverInstanceService),R(2,n.Inject(s.DataValidationModel))],s.DataValidationResourceController);var Z=Object.defineProperty,x=Object.getOwnPropertyDescriptor,k=(r,e,a,t)=>{for(var i=t>1?void 0:t?x(e,a):e,o=r.length-1,d;o>=0;o--)(d=r[o])&&(i=(t?d(e,a,i):d(i))||i);return t&&i&&Z(e,a,i),i},A=(r,e)=>(a,t)=>e(a,t,r);s.DataValidationSheetController=class extends n.Disposable{constructor(e,a,t){super(),this._sheetInterceptorService=e,this._univerInstanceService=a,this._dataValidationModel=t,this._initSheetChange()}_initSheetChange(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:e=>{var a;if(e.id===f.RemoveSheetCommand.id){const t=e.params,i=t.unitId||this._univerInstanceService.getCurrentUnitForType(n.UniverInstanceType.UNIVER_SHEET).getUnitId(),o=this._univerInstanceService.getUniverSheetInstance(i);if(!o)return{redos:[],undos:[]};const d=t.subUnitId||((a=o.getActiveSheet())==null?void 0:a.getSheetId());if(!d)return{redos:[],undos:[]};const l=this._dataValidationModel.ensureManager(i,d);if(!l)return{redos:[],undos:[]};const c=l.getDataValidations(),u=c.map(D=>D.uid),p={unitId:i,subUnitId:d,ruleId:u,source:"patched"},_={unitId:i,subUnitId:d,rule:c,source:"patched"};return{redos:[{id:v.id,params:p}],undos:[{id:V.id,params:_}]}}return{redos:[],undos:[]}}}))}},s.DataValidationSheetController=k([n.OnLifecycle(n.LifecycleStages.Ready,s.DataValidationSheetController),A(0,n.Inject(f.SheetInterceptorService)),A(1,n.Inject(n.IUniverInstanceService)),A(2,n.Inject(s.DataValidationModel))],s.DataValidationSheetController);var aa=Object.defineProperty,ta=Object.getOwnPropertyDescriptor,ea=(r,e,a,t)=>{for(var i=t>1?void 0:t?ta(e,a):e,o=r.length-1,d;o>=0;o--)(d=r[o])&&(i=(t?d(e,a,i):d(i))||i);return t&&i&&aa(e,a,i),i},B=(r,e)=>(a,t)=>e(a,t,r);const ia="UNIVER_DATA_VALIDATION_PLUGIN";s.UniverDataValidationPlugin=(S=class extends n.Plugin{constructor(e,a,t){super(),this._injector=a,this._commandService=t}onStarting(e){[[s.DataValidationModel],[T],[s.DataValidationResourceController],[s.DataValidationSheetController]].forEach(a=>{e.add(a)}),[U,P,w,b,L,V,E,v].forEach(a=>{this._commandService.registerCommand(a)})}},h(S,"pluginName",ia),h(S,"type",n.UniverInstanceType.UNIVER_SHEET),S),s.UniverDataValidationPlugin=ea([B(1,n.Inject(n.Injector)),B(2,n.ICommandService)],s.UniverDataValidationPlugin),n.DataValidationOperator.BETWEEN+"",n.DataValidationOperator.EQUAL+"",n.DataValidationOperator.GREATER_THAN+"",n.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",n.DataValidationOperator.LESS_THAN+"",n.DataValidationOperator.LESS_THAN_OR_EQUAL+"",n.DataValidationOperator.NOT_BETWEEN+"",n.DataValidationOperator.NOT_EQUAL+"";const na={[n.DataValidationOperator.BETWEEN]:"dataValidation.ruleName.between",[n.DataValidationOperator.EQUAL]:"dataValidation.ruleName.equal",[n.DataValidationOperator.GREATER_THAN]:"dataValidation.ruleName.greaterThan",[n.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.ruleName.greaterThanOrEqual",[n.DataValidationOperator.LESS_THAN]:"dataValidation.ruleName.lessThan",[n.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.ruleName.lessThanOrEqual",[n.DataValidationOperator.NOT_BETWEEN]:"dataValidation.ruleName.notBetween",[n.DataValidationOperator.NOT_EQUAL]:"dataValidation.ruleName.notEqual"},ra={[n.DataValidationOperator.BETWEEN]:"dataValidation.errorMsg.between",[n.DataValidationOperator.EQUAL]:"dataValidation.errorMsg.equal",[n.DataValidationOperator.GREATER_THAN]:"dataValidation.errorMsg.greaterThan",[n.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.errorMsg.greaterThanOrEqual",[n.DataValidationOperator.LESS_THAN]:"dataValidation.errorMsg.lessThan",[n.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.errorMsg.lessThanOrEqual",[n.DataValidationOperator.NOT_BETWEEN]:"dataValidation.errorMsg.notBetween",[n.DataValidationOperator.NOT_EQUAL]:"dataValidation.errorMsg.notEqual"},oa={[n.DataValidationOperator.BETWEEN]:"dataValidation.textLength.errorMsg.between",[n.DataValidationOperator.EQUAL]:"dataValidation.textLength.errorMsg.equal",[n.DataValidationOperator.GREATER_THAN]:"dataValidation.textLength.errorMsg.greaterThan",[n.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.greaterThanOrEqual",[n.DataValidationOperator.LESS_THAN]:"dataValidation.textLength.errorMsg.lessThan",[n.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.lessThanOrEqual",[n.DataValidationOperator.NOT_BETWEEN]:"dataValidation.textLength.errorMsg.notBetween",[n.DataValidationOperator.NOT_EQUAL]:"dataValidation.textLength.errorMsg.notEqual"};var da=Object.defineProperty,sa=Object.getOwnPropertyDescriptor,la=(r,e,a,t)=>{for(var i=t>1?void 0:t?sa(e,a):e,o=r.length-1,d;o>=0;o--)(d=r[o])&&(i=(t?d(e,a,i):d(i))||i);return t&&i&&da(e,a,i),i},$=(r,e)=>(a,t)=>e(a,t,r);const j="{FORMULA1}",q="{FORMULA2}",ua={[n.DataValidationOperator.BETWEEN]:"dataValidation.operators.between",[n.DataValidationOperator.EQUAL]:"dataValidation.operators.equal",[n.DataValidationOperator.GREATER_THAN]:"dataValidation.operators.greaterThan",[n.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.operators.greaterThanOrEqual",[n.DataValidationOperator.LESS_THAN]:"dataValidation.operators.lessThan",[n.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.operators.lessThanOrEqual",[n.DataValidationOperator.NOT_BETWEEN]:"dataValidation.operators.notBetween",[n.DataValidationOperator.NOT_EQUAL]:"dataValidation.operators.notEqual"};s.BaseDataValidator=class{constructor(e,a){h(this,"canvasRender",null);h(this,"dropdown");h(this,"optionsInput");this.localeService=e,this.injector=a}get operatorNames(){return this.operators.map(e=>this.localeService.t(ua[e]))}get titleStr(){return this.localeService.t(this.title)}skipDefaultFontRender(e,a,t){return!1}generateRuleName(e){var t,i;if(!e.operator)return this.titleStr;const a=this.localeService.t(na[e.operator]).replace(j,(t=e.formula1)!=null?t:"").replace(q,(i=e.formula2)!=null?i:"");return`${this.titleStr} ${a}`}generateRuleErrorMessage(e){var t,i;return e.operator?`${this.localeService.t(ra[e.operator]).replace(j,(t=e.formula1)!=null?t:"").replace(q,(i=e.formula2)!=null?i:"")}`:this.titleStr}getRuleFinalError(e){return e.showInputMessage&&e.error?e.error:this.generateRuleErrorMessage(e)}isEmptyCellValue(e){return e===""||e===void 0||e===null}async isValidType(e,a,t){return!0}transform(e,a,t){return e}async validatorIsEqual(e,a,t){return!0}async validatorIsNotEqual(e,a,t){return!0}async validatorIsBetween(e,a,t){return!0}async validatorIsNotBetween(e,a,t){return!0}async validatorIsGreaterThan(e,a,t){return!0}async validatorIsGreaterThanOrEqual(e,a,t){return!0}async validatorIsLessThan(e,a,t){return!0}async validatorIsLessThanOrEqual(e,a,t){return!0}async validator(e,a){const{value:t,unitId:i,subUnitId:o}=e,d=this.isEmptyCellValue(t),{allowBlank:l=!0,operator:c}=a;if(d)return l;const u=await this.parseFormula(a,i,o);if(!await this.isValidType(e,u,a))return!1;if(!n.Tools.isDefine(c))return!0;const p=this.transform(e,u,a);switch(c){case n.DataValidationOperator.BETWEEN:return this.validatorIsBetween(p,u,a);case n.DataValidationOperator.EQUAL:return this.validatorIsEqual(p,u,a);case n.DataValidationOperator.GREATER_THAN:return this.validatorIsGreaterThan(p,u,a);case n.DataValidationOperator.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(p,u,a);case n.DataValidationOperator.LESS_THAN:return this.validatorIsLessThan(p,u,a);case n.DataValidationOperator.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(p,u,a);case n.DataValidationOperator.NOT_BETWEEN:return this.validatorIsNotBetween(p,u,a);case n.DataValidationOperator.NOT_EQUAL:return this.validatorIsNotEqual(p,u,a);default:throw new Error("Unknown operator.")}}},s.BaseDataValidator=la([$(0,n.Inject(n.LocaleService)),$(1,n.Inject(n.Injector))],s.BaseDataValidator);const ca=[n.DataValidationOperator.BETWEEN,n.DataValidationOperator.NOT_BETWEEN];s.AddDataValidationCommand=U,s.AddDataValidationMutation=V,s.DataValidationManager=C,s.DataValidatorRegistryScope=N,s.DataValidatorRegistryService=T,s.RemoveAllDataValidationCommand=P,s.RemoveDataValidationCommand=L,s.RemoveDataValidationMutation=v,s.TWO_FORMULA_OPERATOR_COUNT=ca,s.TextLengthErrorTitleMap=oa,s.UpdateDataValidationMutation=E,s.UpdateDataValidationOptionsCommand=w,s.UpdateDataValidationSettingCommand=b,s.UpdateRuleType=g,s.createDefaultNewRule=H,s.getRuleOptions=M,s.getRuleSetting=I,s.removeDataValidationUndoFactory=J,Object.defineProperty(s,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@univerjs/data-validation",
3
- "version": "0.2.4-alpha.0",
3
+ "version": "0.2.5",
4
4
  "private": false,
5
5
  "description": "Data validation library for Univer",
6
6
  "author": "DreamNum <developer@univer.ai>",
@@ -50,8 +50,8 @@
50
50
  ],
51
51
  "peerDependencies": {
52
52
  "rxjs": ">=7.0.0",
53
- "@univerjs/core": "0.2.4-alpha.0",
54
- "@univerjs/sheets": "0.2.4-alpha.0"
53
+ "@univerjs/core": "0.2.5",
54
+ "@univerjs/sheets": "0.2.5"
55
55
  },
56
56
  "dependencies": {
57
57
  "@univerjs/protocol": "0.1.38-alpha.23"
@@ -61,9 +61,9 @@
61
61
  "typescript": "^5.5.3",
62
62
  "vite": "^5.3.4",
63
63
  "vitest": "^2.0.3",
64
- "@univerjs/core": "0.2.4-alpha.0",
65
- "@univerjs/sheets": "0.2.4-alpha.0",
66
- "@univerjs/shared": "0.2.4-alpha.0"
64
+ "@univerjs/core": "0.2.5",
65
+ "@univerjs/shared": "0.2.5",
66
+ "@univerjs/sheets": "0.2.5"
67
67
  },
68
68
  "univerSpace": {
69
69
  ".": {