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