@univerjs/data-validation 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/cjs/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var H=Object.defineProperty;var Q=(o,t,a)=>t in o?H(o,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):o[t]=a;var c=(o,t,a)=>(Q(o,typeof t!="symbol"?t+"":t,a),a);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("@univerjs/core"),m=require("@wendellhu/redi"),E=require("rxjs"),T=require("@univerjs/sheets");var C=(o=>(o.SHEET="sheet",o))(C||{});class I{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(t,a){this._validatorByScopes.has(a)||this._validatorByScopes.set(a,[]);const e=this._validatorByScopes.get(a);if(e.findIndex(r=>r.id===t.id)>-1)throw new Error(`Validator item with the same id ${t.id} has already been added!`);e.push(t)}_removeValidatorFromScope(t,a){const e=this._validatorByScopes.get(a);if(!e)return;const r=e.findIndex(n=>n.id===t.id);r>-1&&e.splice(r,1)}register(t){return this._validatorMap.set(t.id,t),Array.isArray(t.scopes)?t.scopes.forEach(a=>{this._addValidatorToScope(t,a)}):this._addValidatorToScope(t,t.scopes),this._validatorsChange$.next(),i.toDisposable(()=>{this._validatorMap.delete(t.id),Array.isArray(t.scopes)?t.scopes.forEach(a=>{this._removeValidatorFromScope(t,a)}):this._removeValidatorFromScope(t,t.scopes),this._validatorsChange$.next()})}getValidatorItem(t){return this._validatorMap.get(t)}getValidatorsByScope(t){return this._validatorByScopes.get(t)}}var g=(o=>(o[o.SETTING=0]="SETTING",o[o.RANGE=1]="RANGE",o[o.OPTIONS=2]="OPTIONS",o))(g||{});class U extends i.Disposable{constructor(a,e,r){super();c(this,"_dataValidations");c(this,"_dataValidationMap",new Map);c(this,"_dataValidations$",new E.Subject);c(this,"unitId");c(this,"subUnitId");c(this,"dataValidations$",this._dataValidations$.asObservable());this.unitId=a,this.subUnitId=e,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(e=>{this._dataValidationMap.set(e.uid,e)})}getRuleById(a){return this._dataValidationMap.get(a)}getRuleIndex(a){return this._dataValidations.findIndex(e=>e.uid===a)}addRule(a,e){typeof e=="number"&&e<this._dataValidations.length?this._dataValidations.splice(e,0,a):this._dataValidations.push(a),this._dataValidationMap.set(a.uid,a),this._notice()}removeRule(a){const e=this._dataValidations.findIndex(r=>r.uid===a);this._dataValidations.splice(e,1),this._dataValidationMap.delete(a),this._notice()}updateRule(a,e){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(e.type){case g.RANGE:{d.ranges=e.payload;break}case g.SETTING:{Object.assign(d,e.payload);break}case g.OPTIONS:{Object.assign(d,e.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,e,r,n){return i.DataValidationStatus.VALID}}var W=Object.defineProperty,F=Object.getOwnPropertyDescriptor,J=(o,t,a,e)=>{for(var r=e>1?void 0:e?F(t,a):t,n=o.length-1,d;n>=0;n--)(d=o[n])&&(r=(e?d(t,a,r):d(r))||r);return e&&r&&W(t,a,r),r},z=(o,t)=>(a,e)=>t(a,e,o);exports.DataValidationModel=class extends i.Disposable{constructor(a){super();c(this,"_model",new Map);c(this,"_managerCreator",(a,e)=>new U(a,e,[]));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,e){this._model.has(a)||this._model.set(a,new Map);const r=this._model.get(a);if(r.has(e))return r.get(e);const n=this._managerCreator(a,e);return r.set(e,n),n}addRule(a,e,r,n){try{this.ensureManager(a,e).addRule(r,n),this._ruleChange$.next({rule:r,type:"add",unitId:a,subUnitId:e})}catch(d){this._logService.error(d)}}updateRule(a,e,r,n){try{const s=this.ensureManager(a,e).updateRule(r,n);this._ruleChange$.next({rule:s,type:"update",unitId:a,subUnitId:e})}catch(d){this._logService.error(d)}}removeRule(a,e,r){try{const n=this.ensureManager(a,e),d=n.getRuleById(r);n.removeRule(r),this._ruleChange$.next({rule:d,type:"remove",unitId:a,subUnitId:e})}catch(n){this._logService.error(n)}}getRuleById(a,e,r){return this.ensureManager(a,e).getRuleById(r)}getRuleIndex(a,e,r){return this.ensureManager(a,e).getRuleIndex(r)}getRules(a,e){return this.ensureManager(a,e).getDataValidations()}validator(a,e,r){const{unitId:n,subUnitId:d}=r;return this.ensureManager(n,d).validator(a,e,r,u=>{this._validStatusChange$.next({unitId:n,subUnitId:d,ruleId:e.uid,status:u})})}getUnitRules(a){const e=this._model.get(a);if(!e)return[];const r=[];return e.forEach(n=>{r.push([n.subUnitId,n.getDataValidations()])}),r}};exports.DataValidationModel=J([z(0,i.ILogService)],exports.DataValidationModel);const _={type:i.CommandType.MUTATION,id:"data-validation.mutation.addRule",handler(o,t){if(!t)return!1;const{unitId:a,subUnitId:e,rule:r,index:n}=t,d=o.get(exports.DataValidationModel);return Array.isArray(r)?r.forEach(s=>{d.addRule(a,e,s,n)}):d.addRule(a,e,r,n),!0}},v={type:i.CommandType.MUTATION,id:"data-validation.mutation.removeRule",handler(o,t){if(!t)return!1;const{unitId:a,subUnitId:e,ruleId:r}=t,n=o.get(exports.DataValidationModel);return Array.isArray(r)?r.forEach(d=>{n.removeRule(a,e,d)}):n.removeRule(a,e,r),!0}},V={type:i.CommandType.MUTATION,id:"data-validation.mutation.updateRule",handler(o,t){if(!t)return!1;const{unitId:a,subUnitId:e,ruleId:r,payload:n}=t;return o.get(exports.DataValidationModel).updateRule(a,e,r,n),!0}};function L(o){return{type:o.type,operator:o.operator,formula1:o.formula1,formula2:o.formula2,allowBlank:o.allowBlank}}function w(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}}function K(o){const a=o.get(T.SelectionManagerService).getSelectionRanges();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}]}}const b={type:i.CommandType.COMMAND,id:"data-validation.command.addRule",async handler(o,t){if(!t)return!1;const{rule:a,unitId:e,subUnitId:r}=t,n=o.get(i.ICommandService),d=o.get(i.IUndoRedoService),s={...t,rule:{...t.rule,ranges:[t.rule.range]}},u=[{id:_.id,params:s}],l=[{id:v.id,params:{unitId:e,subUnitId:r,ruleId:a.uid}}];return d.pushUndoRedo({unitID:e,redoMutations:u,undoMutations:l}),await n.executeCommand(_.id,s),!0}},X=(o,t)=>{const a=o.get(exports.DataValidationModel),{unitId:e,subUnitId:r,ruleId:n}=t;if(Array.isArray(n)){const s=n.map(u=>a.getRuleById(e,r,u)).filter(Boolean);return[{id:_.id,params:{unitId:e,subUnitId:r,rule:s}}]}return[{id:_.id,params:{unitId:e,subUnitId:r,rule:{...a.getRuleById(e,r,n)},index:a.getRuleIndex(e,r,n)}}]},P={type:i.CommandType.COMMAND,id:"data-validation.command.removeRule",handler(o,t){if(!t)return!1;const{unitId:a,subUnitId:e,ruleId:r}=t,n=o.get(i.ICommandService),d=o.get(i.IUndoRedoService),s=o.get(exports.DataValidationModel),u=[{id:v.id,params:t}],l=[{id:_.id,params:{unitId:a,subUnitId:e,rule:{...s.getRuleById(a,e,r)},index:s.getRuleIndex(a,e,r)}}];return d.pushUndoRedo({undoMutations:l,redoMutations:u,unitID:t.unitId}),n.executeCommand(v.id,t),!0}},B={type:i.CommandType.COMMAND,id:"data-validation.command.updateDataValidationSetting",handler(o,t){if(!t)return!1;const a=o.get(i.ICommandService),e=o.get(i.IUndoRedoService),r=o.get(exports.DataValidationModel),{unitId:n,subUnitId:d,ruleId:s,options:u}=t,l=r.getRuleById(n,d,s);if(!l)return!1;const p={unitId:n,subUnitId:d,ruleId:s,payload:{type:g.OPTIONS,payload:u}},h=[{id:V.id,params:p}],D={unitId:n,subUnitId:d,ruleId:s,payload:{type:g.OPTIONS,payload:w(l)}},O=[{id:V.id,params:D}];return e.pushUndoRedo({unitID:n,redoMutations:h,undoMutations:O}),a.executeCommand(V.id,p),!0}},$={type:i.CommandType.COMMAND,id:"data-validation.command.updateDataValidationOptions",handler(o,t){if(!t)return!1;const a=o.get(i.ICommandService),e=o.get(i.IUndoRedoService),r=o.get(exports.DataValidationModel),n=o.get(I),{unitId:d,subUnitId:s,ruleId:u,setting:l}=t,p=n.getValidatorItem(l.type);if(!p||!p.validatorFormula(l).success)return!1;const h=r.getRuleById(d,s,u);if(!h)return!1;const D={unitId:d,subUnitId:s,ruleId:u,payload:{type:g.SETTING,payload:l}},O=[{id:V.id,params:D}],j={unitId:d,subUnitId:s,ruleId:u,payload:{type:g.SETTING,payload:L(h)}},G=[{id:V.id,params:j}];return e.pushUndoRedo({unitID:d,redoMutations:O,undoMutations:G}),a.executeCommand(V.id,D),!0}},x={type:i.CommandType.COMMAND,id:"data-validation.command.removeAll",handler(o,t){if(!t)return!1;const{unitId:a,subUnitId:e}=t,r=o.get(i.ICommandService),n=o.get(exports.DataValidationModel),d=o.get(i.IUndoRedoService),s=[...n.getRules(a,e)],u={unitId:a,subUnitId:e,ruleId:s.map(h=>h.uid)},l=[{id:v.id,params:u}],p=[{id:_.id,params:{unitId:a,subUnitId:e,rule:s}}];return d.pushUndoRedo({redoMutations:l,undoMutations:p,unitID:a}),r.executeCommand(v.id,u),!0}};var Y=Object.defineProperty,Z=Object.getOwnPropertyDescriptor,k=(o,t,a,e)=>{for(var r=e>1?void 0:e?Z(t,a):t,n=o.length-1,d;n>=0;n--)(d=o[n])&&(r=(e?d(t,a,r):d(r))||r);return e&&r&&Y(t,a,r),r},M=(o,t)=>(a,e)=>t(a,e,o);const f="SHEET_DATA_VALIDATION";exports.DataValidationResourceController=class extends i.Disposable{constructor(t,a,e){super(),this._resourceManagerService=t,this._univerInstanceService=a,this._dataValidationModel=e,this._initSnapshot()}_initSnapshot(){const t=n=>{const d=this._dataValidationModel.getUnitRules(n),s={};return d?(d.forEach(([u,l])=>{s[u]=l}),JSON.stringify(s)):""},a=n=>{if(!n)return{};try{return JSON.parse(n)}catch{return{}}},e=n=>{const d=n.getUnitId();this.disposeWithMe(this._resourceManagerService.registerPluginResource(d,f,{toJson:s=>t(s),parseJson:s=>a(s),onChange:(s,u)=>{Object.keys(u).forEach(l=>{u[l].forEach(h=>{this._dataValidationModel.addRule(s,l,h)})})}}))};this.disposeWithMe(i.toDisposable(this._univerInstanceService.sheetAdded$.subscribe(e))),this.disposeWithMe(i.toDisposable(this._univerInstanceService.sheetDisposed$.subscribe(n=>{const d=n.getUnitId();this._resourceManagerService.disposePluginResource(d,f)})));const r=this._univerInstanceService.getCurrentUniverSheetInstance();e(r)}};exports.DataValidationResourceController=k([i.OnLifecycle(i.LifecycleStages.Ready,exports.DataValidationResourceController),M(0,i.IResourceManagerService),M(1,i.IUniverInstanceService),M(2,m.Inject(exports.DataValidationModel))],exports.DataValidationResourceController);var aa=Object.defineProperty,ta=Object.getOwnPropertyDescriptor,ea=(o,t,a,e)=>{for(var r=e>1?void 0:e?ta(t,a):t,n=o.length-1,d;n>=0;n--)(d=o[n])&&(r=(e?d(t,a,r):d(r))||r);return e&&r&&aa(t,a,r),r},S=(o,t)=>(a,e)=>t(a,e,o);exports.DataValidationSheetController=class extends i.Disposable{constructor(t,a,e){super(),this._sheetInterceptorService=t,this._univerInstanceService=a,this._dataValidationModel=e,this._initSheetChange()}_initSheetChange(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:t=>{if(t.id===T.RemoveSheetCommand.id){const a=t.params,e=a.unitId||this._univerInstanceService.getCurrentUniverSheetInstance().getUnitId(),r=this._univerInstanceService.getUniverSheetInstance(e);if(!r)return{redos:[],undos:[]};const n=a.subUnitId||r.getActiveSheet().getSheetId(),d=this._dataValidationModel.ensureManager(e,n);if(!d)return{redos:[],undos:[]};const s=d.getDataValidations(),u=s.map(h=>h.uid),l={unitId:e,subUnitId:n,ruleId:u},p={unitId:e,subUnitId:n,rule:s};return{redos:[{id:v.id,params:l}],undos:[{id:_.id,params:p}]}}return{redos:[],undos:[]}}}))}};exports.DataValidationSheetController=ea([i.OnLifecycle(i.LifecycleStages.Ready,exports.DataValidationSheetController),S(0,m.Inject(T.SheetInterceptorService)),S(1,m.Inject(i.IUniverInstanceService)),S(2,m.Inject(exports.DataValidationModel))],exports.DataValidationSheetController);const q={type:i.CommandType.MUTATION,id:"sheet.mutation.data-validation-formula-mark-dirty",handler(){return!0}};var ra=Object.defineProperty,oa=Object.getOwnPropertyDescriptor,ia=(o,t,a,e)=>{for(var r=e>1?void 0:e?oa(t,a):t,n=o.length-1,d;n>=0;n--)(d=o[n])&&(r=(e?d(t,a,r):d(r))||r);return e&&r&&ra(t,a,r),r},R=(o,t)=>(a,e)=>t(a,e,o);const na="data-validation";exports.UniverDataValidationPlugin=class extends i.Plugin{constructor(t,a,e){super(na),this._injector=a,this._commandService=e}onStarting(t){[[exports.DataValidationModel],[I],[exports.DataValidationResourceController],[exports.DataValidationSheetController]].forEach(a=>{t.add(a)}),[b,x,B,$,P,q,_,V,v].forEach(a=>{this._commandService.registerCommand(a)})}};exports.UniverDataValidationPlugin=ia([R(1,m.Inject(m.Injector)),R(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 da={[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"},sa={[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"},la={[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 ua=Object.defineProperty,ca=Object.getOwnPropertyDescriptor,pa=(o,t,a,e)=>{for(var r=e>1?void 0:e?ca(t,a):t,n=o.length-1,d;n>=0;n--)(d=o[n])&&(r=(e?d(t,a,r):d(r))||r);return e&&r&&ua(t,a,r),r},A=(o,t)=>(a,e)=>t(a,e,o);const y="{FORMULA1}",N="{FORMULA2}",ha={[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(t,a){c(this,"canvasRender",null);c(this,"dropdown");c(this,"optionsInput");this.localeService=t,this.injector=a}get operatorNames(){return this.operators.map(t=>this.localeService.t(ha[t]))}get titleStr(){return this.localeService.t(this.title)}skipDefaultFontRender(t,a,e){return!1}generateRuleName(t){var e,r;if(!t.operator)return this.titleStr;const a=this.localeService.t(da[t.operator]).replace(y,(e=t.formula1)!=null?e:"").replace(N,(r=t.formula2)!=null?r:"");return`${this.titleStr} ${a}`}generateRuleErrorMessage(t){var e,r;return t.operator?`${this.localeService.t(sa[t.operator]).replace(y,(e=t.formula1)!=null?e:"").replace(N,(r=t.formula2)!=null?r:"")}`:this.titleStr}getRuleFinalError(t){return t.showInputMessage&&t.error?t.error:this.generateRuleErrorMessage(t)}isEmptyCellValue(t){return t===""||t===void 0||t===null}async isValidType(t,a,e){return!0}transform(t,a,e){return t}async validatorIsEqual(t,a,e){return!0}async validatorIsNotEqual(t,a,e){return!0}async validatorIsBetween(t,a,e){return!0}async validatorIsNotBetween(t,a,e){return!0}async validatorIsGreaterThan(t,a,e){return!0}async validatorIsGreaterThanOrEqual(t,a,e){return!0}async validatorIsLessThan(t,a,e){return!0}async validatorIsLessThanOrEqual(t,a,e){return!0}async validator(t,a){const{value:e,unitId:r,subUnitId:n}=t,d=this.isEmptyCellValue(e),{allowBlank:s=!0,operator:u}=a;if(d)return s;const l=await this.parseFormula(a,r,n);if(!await this.isValidType(t,l,a))return!1;if(!i.Tools.isDefine(u))return!0;const p=this.transform(t,l,a);switch(u){case i.DataValidationOperator.BETWEEN:return this.validatorIsBetween(p,l,a);case i.DataValidationOperator.EQUAL:return this.validatorIsEqual(p,l,a);case i.DataValidationOperator.GREATER_THAN:return this.validatorIsGreaterThan(p,l,a);case i.DataValidationOperator.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(p,l,a);case i.DataValidationOperator.LESS_THAN:return this.validatorIsLessThan(p,l,a);case i.DataValidationOperator.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(p,l,a);case i.DataValidationOperator.NOT_BETWEEN:return this.validatorIsNotBetween(p,l,a);case i.DataValidationOperator.NOT_EQUAL:return this.validatorIsNotEqual(p,l,a);default:throw new Error("Unknown operator.")}}};exports.BaseDataValidator=pa([A(0,m.Inject(i.LocaleService)),A(1,m.Inject(m.Injector))],exports.BaseDataValidator);const ma=[i.DataValidationOperator.BETWEEN,i.DataValidationOperator.NOT_BETWEEN];exports.AddDataValidationCommand=b;exports.AddDataValidationMutation=_;exports.DataValidationFormulaMarkDirty=q;exports.DataValidationManager=U;exports.DataValidatorRegistryScope=C;exports.DataValidatorRegistryService=I;exports.RemoveAllDataValidationCommand=x;exports.RemoveDataValidationCommand=P;exports.RemoveDataValidationMutation=v;exports.TWO_FORMULA_OPERATOR_COUNT=ma;exports.TextLengthErrorTitleMap=la;exports.UpdateDataValidationMutation=V;exports.UpdateDataValidationOptionsCommand=B;exports.UpdateDataValidationSettingCommand=$;exports.UpdateRuleType=g;exports.createDefaultNewRule=K;exports.getRuleOptions=w;exports.getRuleSetting=L;exports.removeDataValidationUndoFactory=X;
1
+ "use strict";var H=Object.defineProperty;var G=(o,e,a)=>e in o?H(o,e,{enumerable:!0,configurable:!0,writable:!0,value:a}):o[e]=a;var c=(o,e,a)=>(G(o,typeof e!="symbol"?e+"":e,a),a);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("@univerjs/core"),h=require("@wendellhu/redi"),v=require("rxjs"),f=require("@univerjs/sheets");var L=(o=>(o.SHEET="sheet",o))(L||{});class R{constructor(){c(this,"_validatorByScopes",new Map);c(this,"_validatorMap",new Map);c(this,"_validatorsChange$",new v.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 _=(o=>(o[o.SETTING=0]="SETTING",o[o.RANGE=1]="RANGE",o[o.OPTIONS=2]="OPTIONS",o))(_||{});function I(o){return{type:o.type,operator:o.operator,formula1:o.formula1,formula2:o.formula2,allowBlank:o.allowBlank}}function A(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}}function Q(o){const a=o.get(f.SelectionManagerService).getSelectionRanges();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 w extends i.Disposable{constructor(a,t,r){super();c(this,"_dataValidations");c(this,"_dataValidationMap",new Map);c(this,"_dataValidations$",new v.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 _.RANGE:{d.ranges=t.payload;break}case _.SETTING:{Object.assign(d,I(t.payload));break}case _.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 i.DataValidationStatus.VALID}}var W=Object.defineProperty,F=Object.getOwnPropertyDescriptor,J=(o,e,a,t)=>{for(var r=t>1?void 0:t?F(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&&W(e,a,r),r},z=(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 w(a,t,[]));c(this,"_ruleChange$",new v.Subject);c(this,"_validStatusChange$",new v.Subject);c(this,"ruleChange$",this._ruleChange$.asObservable());c(this,"ruleChangeDebounce$",this.ruleChange$.pipe(v.debounceTime(20)));c(this,"validStatusChange$",this._validStatusChange$.asObservable().pipe(v.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(u=>{this._addRuleSideEffect(a,t,u)}),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,u=>{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)}};exports.DataValidationModel=J([z(0,i.ILogService)],exports.DataValidationModel);const m={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}},E={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}},g={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}},b={type:i.CommandType.COMMAND,id:"data-validation.command.addRule",async handler(o,e){if(!e)return!1;const{rule:a,unitId:t,subUnitId:r}=e,n=o.get(i.ICommandService),d=o.get(i.IUndoRedoService),s={...e,rule:{...e.rule,ranges:[e.rule.range]}},u=[{id:m.id,params:s}],l=[{id:E.id,params:{unitId:t,subUnitId:r,ruleId:a.uid}}];return d.pushUndoRedo({unitID:t,redoMutations:u,undoMutations:l}),await n.executeCommand(m.id,s),!0}},K=(o,e)=>{const a=o.get(exports.DataValidationModel),{unitId:t,subUnitId:r,ruleId:n}=e;if(Array.isArray(n)){const s=n.map(u=>a.getRuleById(t,r,u)).filter(Boolean);return[{id:m.id,params:{unitId:t,subUnitId:r,rule:s}}]}return[{id:m.id,params:{unitId:t,subUnitId:r,rule:{...a.getRuleById(t,r,n)},index:a.getRuleIndex(t,r,n)}}]},P={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),u=[{id:E.id,params:e}],l=[{id:m.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(E.id,e),!0}},B={type:i.CommandType.COMMAND,id:"data-validation.command.updateDataValidationSetting",handler(o,e){if(!e)return!1;const a=o.get(i.ICommandService),t=o.get(i.IUndoRedoService),r=o.get(exports.DataValidationModel),{unitId:n,subUnitId:d,ruleId:s,options:u}=e,l=r.getRuleById(n,d,s);if(!l)return!1;const p={unitId:n,subUnitId:d,ruleId:s,payload:{type:_.OPTIONS,payload:u}},V=[{id:g.id,params:p}],O={unitId:n,subUnitId:d,ruleId:s,payload:{type:_.OPTIONS,payload:A(l)}},T=[{id:g.id,params:O}];return t.pushUndoRedo({unitID:n,redoMutations:V,undoMutations:T}),a.executeCommand(g.id,p),!0}},$={type:i.CommandType.COMMAND,id:"data-validation.command.updateDataValidationOptions",handler(o,e){if(!e)return!1;const a=o.get(i.ICommandService),t=o.get(i.IUndoRedoService),r=o.get(exports.DataValidationModel),n=o.get(R),{unitId:d,subUnitId:s,ruleId:u,setting:l}=e,p=n.getValidatorItem(l.type);if(!p||!p.validatorFormula(l).success)return!1;const V=r.getRuleById(d,s,u);if(!V)return!1;const O={unitId:d,subUnitId:s,ruleId:u,payload:{type:_.SETTING,payload:l}},T=[{id:g.id,params:O}],q={unitId:d,subUnitId:s,ruleId:u,payload:{type:_.SETTING,payload:I(V)}},j=[{id:g.id,params:q}];return t.pushUndoRedo({unitID:d,redoMutations:T,undoMutations:j}),a.executeCommand(g.id,O),!0}},x={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)],u={unitId:a,subUnitId:t,ruleId:s.map(V=>V.uid)},l=[{id:E.id,params:u}],p=[{id:m.id,params:{unitId:a,subUnitId:t,rule:s}}];return d.pushUndoRedo({redoMutations:l,undoMutations:p,unitID:a}),r.executeCommand(E.id,u),!0}};var X=Object.defineProperty,Y=Object.getOwnPropertyDescriptor,Z=(o,e,a,t)=>{for(var r=t>1?void 0:t?Y(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&&X(e,a,r),r},S=(o,e)=>(a,t)=>e(a,t,o);const k="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:k,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=Z([i.OnLifecycle(i.LifecycleStages.Ready,exports.DataValidationResourceController),S(0,i.IResourceManagerService),S(1,i.IUniverInstanceService),S(2,h.Inject(exports.DataValidationModel))],exports.DataValidationResourceController);var aa=Object.defineProperty,ta=Object.getOwnPropertyDescriptor,ea=(o,e,a,t)=>{for(var r=t>1?void 0:t?ta(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&&aa(e,a,r),r},M=(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=>{if(e.id===f.RemoveSheetCommand.id){const a=e.params,t=a.unitId||this._univerInstanceService.getCurrentUnitForType(i.UniverInstanceType.UNIVER_SHEET).getUnitId(),r=this._univerInstanceService.getUniverSheetInstance(t);if(!r)return{redos:[],undos:[]};const n=a.subUnitId||r.getActiveSheet().getSheetId(),d=this._dataValidationModel.ensureManager(t,n);if(!d)return{redos:[],undos:[]};const s=d.getDataValidations(),u=s.map(V=>V.uid),l={unitId:t,subUnitId:n,ruleId:u},p={unitId:t,subUnitId:n,rule:s};return{redos:[{id:E.id,params:l}],undos:[{id:m.id,params:p}]}}return{redos:[],undos:[]}}}))}};exports.DataValidationSheetController=ea([i.OnLifecycle(i.LifecycleStages.Ready,exports.DataValidationSheetController),M(0,h.Inject(f.SheetInterceptorService)),M(1,h.Inject(i.IUniverInstanceService)),M(2,h.Inject(exports.DataValidationModel))],exports.DataValidationSheetController);var ra=Object.defineProperty,oa=Object.getOwnPropertyDescriptor,ia=(o,e,a,t)=>{for(var r=t>1?void 0:t?oa(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&&ra(e,a,r),r},y=(o,e)=>(a,t)=>e(a,t,o);const na="data-validation";var D;exports.UniverDataValidationPlugin=(D=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)}),[b,x,B,$,P,m,g,E].forEach(a=>{this._commandService.registerCommand(a)})}},c(D,"pluginName",na),c(D,"type",i.UniverInstanceType.UNIVER_SHEET),D);exports.UniverDataValidationPlugin=ia([y(1,h.Inject(h.Injector)),y(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 da={[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"},sa={[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"},la={[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 ua=Object.defineProperty,ca=Object.getOwnPropertyDescriptor,pa=(o,e,a,t)=>{for(var r=t>1?void 0:t?ca(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&&ua(e,a,r),r},N=(o,e)=>(a,t)=>e(a,t,o);const C="{FORMULA1}",U="{FORMULA2}",ha={[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(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(!i.Tools.isDefine(u))return!0;const p=this.transform(e,l,a);switch(u){case i.DataValidationOperator.BETWEEN:return this.validatorIsBetween(p,l,a);case i.DataValidationOperator.EQUAL:return this.validatorIsEqual(p,l,a);case i.DataValidationOperator.GREATER_THAN:return this.validatorIsGreaterThan(p,l,a);case i.DataValidationOperator.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(p,l,a);case i.DataValidationOperator.LESS_THAN:return this.validatorIsLessThan(p,l,a);case i.DataValidationOperator.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(p,l,a);case i.DataValidationOperator.NOT_BETWEEN:return this.validatorIsNotBetween(p,l,a);case i.DataValidationOperator.NOT_EQUAL:return this.validatorIsNotEqual(p,l,a);default:throw new Error("Unknown operator.")}}};exports.BaseDataValidator=pa([N(0,h.Inject(i.LocaleService)),N(1,h.Inject(h.Injector))],exports.BaseDataValidator);const _a=[i.DataValidationOperator.BETWEEN,i.DataValidationOperator.NOT_BETWEEN];exports.AddDataValidationCommand=b;exports.AddDataValidationMutation=m;exports.DataValidationManager=w;exports.DataValidatorRegistryScope=L;exports.DataValidatorRegistryService=R;exports.RemoveAllDataValidationCommand=x;exports.RemoveDataValidationCommand=P;exports.RemoveDataValidationMutation=E;exports.TWO_FORMULA_OPERATOR_COUNT=_a;exports.TextLengthErrorTitleMap=la;exports.UpdateDataValidationMutation=g;exports.UpdateDataValidationOptionsCommand=B;exports.UpdateDataValidationSettingCommand=$;exports.UpdateRuleType=_;exports.createDefaultNewRule=Q;exports.getRuleOptions=A;exports.getRuleSetting=I;exports.removeDataValidationUndoFactory=K;
package/lib/es/index.js CHANGED
@@ -1,16 +1,16 @@
1
- var z = Object.defineProperty;
2
- var K = (a, e, t) => e in a ? z(a, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : a[e] = t;
3
- var c = (a, e, t) => (K(a, typeof e != "symbol" ? e + "" : e, t), t);
4
- import { toDisposable as D, Disposable as A, DataValidationStatus as X, ILogService as Y, CommandType as _, Tools as q, DataValidationType as Z, DataValidationOperator as s, ICommandService as M, IUndoRedoService as S, OnLifecycle as G, LifecycleStages as H, IResourceManagerService as k, IUniverInstanceService as Q, Plugin as ee, LocaleService as te } from "@univerjs/core";
1
+ var X = Object.defineProperty;
2
+ var Y = (a, e, t) => e in a ? X(a, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : a[e] = t;
3
+ var c = (a, e, t) => (Y(a, typeof e != "symbol" ? e + "" : e, t), t);
4
+ import { toDisposable as Z, Tools as H, DataValidationType as k, DataValidationOperator as s, Disposable as N, DataValidationStatus as ee, ILogService as te, CommandType as m, ICommandService as M, IUndoRedoService as S, UniverInstanceType as w, OnLifecycle as q, LifecycleStages as G, IResourceManagerService as ae, IUniverInstanceService as Q, Plugin as re, LocaleService as ne } from "@univerjs/core";
5
5
  import { Inject as E, Injector as W } from "@wendellhu/redi";
6
- import { BehaviorSubject as ae, Subject as L, debounceTime as w } from "rxjs";
7
- import { SelectionManagerService as re, RemoveSheetCommand as ne, SheetInterceptorService as oe } from "@univerjs/sheets";
8
- var ie = /* @__PURE__ */ ((a) => (a.SHEET = "sheet", a))(ie || {});
6
+ import { BehaviorSubject as oe, Subject as U, debounceTime as D } from "rxjs";
7
+ import { SelectionManagerService as ie, RemoveSheetCommand as se, SheetInterceptorService as de } from "@univerjs/sheets";
8
+ var le = /* @__PURE__ */ ((a) => (a.SHEET = "sheet", a))(le || {});
9
9
  class j {
10
10
  constructor() {
11
11
  c(this, "_validatorByScopes", /* @__PURE__ */ new Map());
12
12
  c(this, "_validatorMap", /* @__PURE__ */ new Map());
13
- c(this, "_validatorsChange$", new ae(void 0));
13
+ c(this, "_validatorsChange$", new oe(void 0));
14
14
  c(this, "validatorsChange$", this._validatorsChange$.asObservable());
15
15
  }
16
16
  _addValidatorToScope(e, t) {
@@ -30,7 +30,7 @@ class j {
30
30
  register(e) {
31
31
  return this._validatorMap.set(e.id, e), Array.isArray(e.scopes) ? e.scopes.forEach((t) => {
32
32
  this._addValidatorToScope(e, t);
33
- }) : this._addValidatorToScope(e, e.scopes), this._validatorsChange$.next(), D(() => {
33
+ }) : this._addValidatorToScope(e, e.scopes), this._validatorsChange$.next(), Z(() => {
34
34
  this._validatorMap.delete(e.id), Array.isArray(e.scopes) ? e.scopes.forEach((t) => {
35
35
  this._removeValidatorFromScope(e, t);
36
36
  }) : this._removeValidatorFromScope(e, e.scopes), this._validatorsChange$.next();
@@ -43,13 +43,46 @@ class j {
43
43
  return this._validatorByScopes.get(e);
44
44
  }
45
45
  }
46
- var g = /* @__PURE__ */ ((a) => (a[a.SETTING = 0] = "SETTING", a[a.RANGE = 1] = "RANGE", a[a.OPTIONS = 2] = "OPTIONS", a))(g || {});
47
- class se extends A {
46
+ var _ = /* @__PURE__ */ ((a) => (a[a.SETTING = 0] = "SETTING", a[a.RANGE = 1] = "RANGE", a[a.OPTIONS = 2] = "OPTIONS", a))(_ || {});
47
+ function F(a) {
48
+ return {
49
+ type: a.type,
50
+ operator: a.operator,
51
+ formula1: a.formula1,
52
+ formula2: a.formula2,
53
+ allowBlank: a.allowBlank
54
+ };
55
+ }
56
+ function J(a) {
57
+ return {
58
+ error: a.error,
59
+ errorStyle: a.errorStyle,
60
+ errorTitle: a.errorTitle,
61
+ imeMode: a.imeMode,
62
+ prompt: a.prompt,
63
+ promptTitle: a.promptTitle,
64
+ showDropDown: a.showDropDown,
65
+ showErrorMessage: a.showErrorMessage,
66
+ showInputMessage: a.showInputMessage,
67
+ renderMode: a.renderMode
68
+ };
69
+ }
70
+ function Ge(a) {
71
+ const t = a.get(ie).getSelectionRanges();
72
+ return {
73
+ uid: H.generateRandomId(6),
74
+ type: k.DECIMAL,
75
+ operator: s.EQUAL,
76
+ formula1: "100",
77
+ ranges: t != null ? t : [{ startColumn: 0, endColumn: 0, startRow: 0, endRow: 0 }]
78
+ };
79
+ }
80
+ class ue extends N {
48
81
  constructor(t, r, n) {
49
82
  super();
50
83
  c(this, "_dataValidations");
51
84
  c(this, "_dataValidationMap", /* @__PURE__ */ new Map());
52
- c(this, "_dataValidations$", new L());
85
+ c(this, "_dataValidations$", new U());
53
86
  c(this, "unitId");
54
87
  c(this, "subUnitId");
55
88
  c(this, "dataValidations$", this._dataValidations$.asObservable());
@@ -74,11 +107,14 @@ class se extends A {
74
107
  return this._dataValidations.findIndex((r) => r.uid === t);
75
108
  }
76
109
  addRule(t, r) {
77
- typeof r == "number" && r < this._dataValidations.length ? this._dataValidations.splice(r, 0, t) : this._dataValidations.push(t), this._dataValidationMap.set(t.uid, t), this._notice();
110
+ const o = (Array.isArray(t) ? t : [t]).filter((i) => !this._dataValidationMap.has(i.uid));
111
+ typeof r == "number" && r < this._dataValidations.length ? this._dataValidations.splice(r, 0, ...o) : this._dataValidations.push(...o), o.forEach((i) => {
112
+ this._dataValidationMap.set(i.uid, i);
113
+ }), this._notice();
78
114
  }
79
115
  removeRule(t) {
80
116
  const r = this._dataValidations.findIndex((n) => n.uid === t);
81
- this._dataValidations.splice(r, 1), this._dataValidationMap.delete(t), this._notice();
117
+ r > -1 && (this._dataValidations.splice(r, 1), this._dataValidationMap.delete(t), this._notice());
82
118
  }
83
119
  updateRule(t, r) {
84
120
  const n = this._dataValidationMap.get(t), o = this._dataValidations.findIndex((d) => t === d.uid);
@@ -86,16 +122,16 @@ class se extends A {
86
122
  throw new Error(`Data validation rule is not found, ruleId: ${t}.`);
87
123
  const i = { ...n };
88
124
  switch (r.type) {
89
- case g.RANGE: {
125
+ case _.RANGE: {
90
126
  i.ranges = r.payload;
91
127
  break;
92
128
  }
93
- case g.SETTING: {
94
- Object.assign(i, r.payload);
129
+ case _.SETTING: {
130
+ Object.assign(i, F(r.payload));
95
131
  break;
96
132
  }
97
- case g.OPTIONS: {
98
- Object.assign(i, r.payload);
133
+ case _.OPTIONS: {
134
+ Object.assign(i, J(r.payload));
99
135
  break;
100
136
  }
101
137
  }
@@ -108,24 +144,24 @@ class se extends A {
108
144
  return this._dataValidations;
109
145
  }
110
146
  validator(t, r, n, o) {
111
- return X.VALID;
147
+ return ee.VALID;
112
148
  }
113
149
  }
114
- var de = Object.defineProperty, le = Object.getOwnPropertyDescriptor, ue = (a, e, t, r) => {
115
- for (var n = r > 1 ? void 0 : r ? le(e, t) : e, o = a.length - 1, i; o >= 0; o--)
150
+ var ce = Object.defineProperty, he = Object.getOwnPropertyDescriptor, pe = (a, e, t, r) => {
151
+ for (var n = r > 1 ? void 0 : r ? he(e, t) : e, o = a.length - 1, i; o >= 0; o--)
116
152
  (i = a[o]) && (n = (r ? i(e, t, n) : i(n)) || n);
117
- return r && n && de(e, t, n), n;
118
- }, ce = (a, e) => (t, r) => e(t, r, a);
119
- let h = class extends A {
153
+ return r && n && ce(e, t, n), n;
154
+ }, _e = (a, e) => (t, r) => e(t, r, a);
155
+ let h = class extends N {
120
156
  constructor(e) {
121
157
  super();
122
158
  c(this, "_model", /* @__PURE__ */ new Map());
123
- c(this, "_managerCreator", (e, t) => new se(e, t, []));
124
- c(this, "_ruleChange$", new L());
125
- c(this, "_validStatusChange$", new L());
159
+ c(this, "_managerCreator", (e, t) => new ue(e, t, []));
160
+ c(this, "_ruleChange$", new U());
161
+ c(this, "_validStatusChange$", new U());
126
162
  c(this, "ruleChange$", this._ruleChange$.asObservable());
127
- c(this, "ruleChangeDebounce$", this.ruleChange$.pipe(w(20)));
128
- c(this, "validStatusChange$", this._validStatusChange$.asObservable().pipe(w(20)));
163
+ c(this, "ruleChangeDebounce$", this.ruleChange$.pipe(D(20)));
164
+ c(this, "validStatusChange$", this._validStatusChange$.asObservable().pipe(D(20)));
129
165
  this._logService = e, this.disposeWithMe({
130
166
  dispose: () => {
131
167
  this._ruleChange$.complete(), this._validStatusChange$.complete();
@@ -143,14 +179,20 @@ let h = class extends A {
143
179
  const n = this._managerCreator(e, t);
144
180
  return r.set(t, n), n;
145
181
  }
182
+ _addRuleSideEffect(e, t, r) {
183
+ this.ensureManager(e, t).getRuleById(r.uid) || this._ruleChange$.next({
184
+ rule: r,
185
+ type: "add",
186
+ unitId: e,
187
+ subUnitId: t
188
+ });
189
+ }
146
190
  addRule(e, t, r, n) {
147
191
  try {
148
- this.ensureManager(e, t).addRule(r, n), this._ruleChange$.next({
149
- rule: r,
150
- type: "add",
151
- unitId: e,
152
- subUnitId: t
153
- });
192
+ const o = this.ensureManager(e, t);
193
+ (Array.isArray(r) ? r : [r]).forEach((d) => {
194
+ this._addRuleSideEffect(e, t, d);
195
+ }), o.addRule(r, n);
154
196
  } catch (o) {
155
197
  this._logService.error(o);
156
198
  }
@@ -171,12 +213,12 @@ let h = class extends A {
171
213
  removeRule(e, t, r) {
172
214
  try {
173
215
  const n = this.ensureManager(e, t), o = n.getRuleById(r);
174
- n.removeRule(r), this._ruleChange$.next({
216
+ o && (n.removeRule(r), this._ruleChange$.next({
175
217
  rule: o,
176
218
  type: "remove",
177
219
  unitId: e,
178
220
  subUnitId: t
179
- });
221
+ }));
180
222
  } catch (n) {
181
223
  this._logService.error(n);
182
224
  }
@@ -210,23 +252,24 @@ let h = class extends A {
210
252
  r.push([n.subUnitId, n.getDataValidations()]);
211
253
  }), r;
212
254
  }
255
+ deleteUnitRules(e) {
256
+ this._model.delete(e);
257
+ }
213
258
  };
214
- h = ue([
215
- ce(0, Y)
259
+ h = pe([
260
+ _e(0, te)
216
261
  ], h);
217
- const m = {
218
- type: _.MUTATION,
262
+ const g = {
263
+ type: m.MUTATION,
219
264
  id: "data-validation.mutation.addRule",
220
265
  handler(a, e) {
221
266
  if (!e)
222
267
  return !1;
223
- const { unitId: t, subUnitId: r, rule: n, index: o } = e, i = a.get(h);
224
- return Array.isArray(n) ? n.forEach((d) => {
225
- i.addRule(t, r, d, o);
226
- }) : i.addRule(t, r, n, o), !0;
268
+ const { unitId: t, subUnitId: r, rule: n, index: o } = e;
269
+ return a.get(h).addRule(t, r, n, o), !0;
227
270
  }
228
271
  }, f = {
229
- type: _.MUTATION,
272
+ type: m.MUTATION,
230
273
  id: "data-validation.mutation.removeRule",
231
274
  handler(a, e) {
232
275
  if (!e)
@@ -237,7 +280,7 @@ const m = {
237
280
  }) : o.removeRule(t, r, n), !0;
238
281
  }
239
282
  }, v = {
240
- type: _.MUTATION,
283
+ type: m.MUTATION,
241
284
  id: "data-validation.mutation.updateRule",
242
285
  handler(a, e) {
243
286
  if (!e)
@@ -245,42 +288,8 @@ const m = {
245
288
  const { unitId: t, subUnitId: r, ruleId: n, payload: o } = e;
246
289
  return a.get(h).updateRule(t, r, n, o), !0;
247
290
  }
248
- };
249
- function he(a) {
250
- return {
251
- type: a.type,
252
- operator: a.operator,
253
- formula1: a.formula1,
254
- formula2: a.formula2,
255
- allowBlank: a.allowBlank
256
- };
257
- }
258
- function pe(a) {
259
- return {
260
- error: a.error,
261
- errorStyle: a.errorStyle,
262
- errorTitle: a.errorTitle,
263
- imeMode: a.imeMode,
264
- prompt: a.prompt,
265
- promptTitle: a.promptTitle,
266
- showDropDown: a.showDropDown,
267
- showErrorMessage: a.showErrorMessage,
268
- showInputMessage: a.showInputMessage,
269
- renderMode: a.renderMode
270
- };
271
- }
272
- function Ge(a) {
273
- const t = a.get(re).getSelectionRanges();
274
- return {
275
- uid: q.generateRandomId(6),
276
- type: Z.DECIMAL,
277
- operator: s.EQUAL,
278
- formula1: "100",
279
- ranges: t != null ? t : [{ startColumn: 0, endColumn: 0, startRow: 0, endRow: 0 }]
280
- };
281
- }
282
- const _e = {
283
- type: _.COMMAND,
291
+ }, ge = {
292
+ type: m.COMMAND,
284
293
  id: "data-validation.command.addRule",
285
294
  async handler(a, e) {
286
295
  if (!e)
@@ -292,7 +301,7 @@ const _e = {
292
301
  ranges: [e.rule.range]
293
302
  }
294
303
  }, l = [{
295
- id: m.id,
304
+ id: g.id,
296
305
  params: d
297
306
  }], u = [{
298
307
  id: f.id,
@@ -306,14 +315,14 @@ const _e = {
306
315
  unitID: r,
307
316
  redoMutations: l,
308
317
  undoMutations: u
309
- }), await o.executeCommand(m.id, d), !0;
318
+ }), await o.executeCommand(g.id, d), !0;
310
319
  }
311
- }, He = (a, e) => {
320
+ }, Qe = (a, e) => {
312
321
  const t = a.get(h), { unitId: r, subUnitId: n, ruleId: o } = e;
313
322
  if (Array.isArray(o)) {
314
323
  const d = o.map((l) => t.getRuleById(r, n, l)).filter(Boolean);
315
324
  return [{
316
- id: m.id,
325
+ id: g.id,
317
326
  params: {
318
327
  unitId: r,
319
328
  subUnitId: n,
@@ -322,7 +331,7 @@ const _e = {
322
331
  }];
323
332
  }
324
333
  return [{
325
- id: m.id,
334
+ id: g.id,
326
335
  params: {
327
336
  unitId: r,
328
337
  subUnitId: n,
@@ -332,8 +341,8 @@ const _e = {
332
341
  index: t.getRuleIndex(r, n, o)
333
342
  }
334
343
  }];
335
- }, ge = {
336
- type: _.COMMAND,
344
+ }, me = {
345
+ type: m.COMMAND,
337
346
  id: "data-validation.command.removeRule",
338
347
  handler(a, e) {
339
348
  if (!e)
@@ -342,7 +351,7 @@ const _e = {
342
351
  id: f.id,
343
352
  params: e
344
353
  }], u = [{
345
- id: m.id,
354
+ id: g.id,
346
355
  params: {
347
356
  unitId: t,
348
357
  subUnitId: r,
@@ -358,8 +367,8 @@ const _e = {
358
367
  unitID: e.unitId
359
368
  }), o.executeCommand(f.id, e), !0;
360
369
  }
361
- }, me = {
362
- type: _.COMMAND,
370
+ }, Ee = {
371
+ type: m.COMMAND,
363
372
  id: "data-validation.command.updateDataValidationSetting",
364
373
  handler(a, e) {
365
374
  if (!e)
@@ -372,23 +381,23 @@ const _e = {
372
381
  subUnitId: i,
373
382
  ruleId: d,
374
383
  payload: {
375
- type: g.OPTIONS,
384
+ type: _.OPTIONS,
376
385
  payload: l
377
386
  }
378
387
  }, T = [{
379
388
  id: v.id,
380
389
  params: p
381
- }], I = {
390
+ }], V = {
382
391
  unitId: o,
383
392
  subUnitId: i,
384
393
  ruleId: d,
385
394
  payload: {
386
- type: g.OPTIONS,
387
- payload: pe(u)
395
+ type: _.OPTIONS,
396
+ payload: J(u)
388
397
  }
389
398
  }, O = [{
390
399
  id: v.id,
391
- params: I
400
+ params: V
392
401
  }];
393
402
  return r.pushUndoRedo({
394
403
  unitID: o,
@@ -396,8 +405,8 @@ const _e = {
396
405
  undoMutations: O
397
406
  }), t.executeCommand(v.id, p), !0;
398
407
  }
399
- }, Ee = {
400
- type: _.COMMAND,
408
+ }, ve = {
409
+ type: m.COMMAND,
401
410
  id: "data-validation.command.updateDataValidationOptions",
402
411
  handler(a, e) {
403
412
  if (!e)
@@ -408,37 +417,37 @@ const _e = {
408
417
  const T = n.getRuleById(i, d, l);
409
418
  if (!T)
410
419
  return !1;
411
- const I = {
420
+ const V = {
412
421
  unitId: i,
413
422
  subUnitId: d,
414
423
  ruleId: l,
415
424
  payload: {
416
- type: g.SETTING,
425
+ type: _.SETTING,
417
426
  payload: u
418
427
  }
419
428
  }, O = [{
420
429
  id: v.id,
421
- params: I
422
- }], F = {
430
+ params: V
431
+ }], z = {
423
432
  unitId: i,
424
433
  subUnitId: d,
425
434
  ruleId: l,
426
435
  payload: {
427
- type: g.SETTING,
428
- payload: he(T)
436
+ type: _.SETTING,
437
+ payload: F(T)
429
438
  }
430
- }, J = [{
439
+ }, K = [{
431
440
  id: v.id,
432
- params: F
441
+ params: z
433
442
  }];
434
443
  return r.pushUndoRedo({
435
444
  unitID: i,
436
445
  redoMutations: O,
437
- undoMutations: J
438
- }), t.executeCommand(v.id, I), !0;
446
+ undoMutations: K
447
+ }), t.executeCommand(v.id, V), !0;
439
448
  }
440
- }, ve = {
441
- type: _.COMMAND,
449
+ }, fe = {
450
+ type: m.COMMAND,
442
451
  id: "data-validation.command.removeAll",
443
452
  handler(a, e) {
444
453
  if (!e)
@@ -451,7 +460,7 @@ const _e = {
451
460
  id: f.id,
452
461
  params: l
453
462
  }], p = [{
454
- id: m.id,
463
+ id: g.id,
455
464
  params: {
456
465
  unitId: t,
457
466
  subUnitId: r,
@@ -465,70 +474,63 @@ const _e = {
465
474
  }), n.executeCommand(f.id, l), !0;
466
475
  }
467
476
  };
468
- var fe = Object.defineProperty, Te = Object.getOwnPropertyDescriptor, Me = (a, e, t, r) => {
469
- for (var n = r > 1 ? void 0 : r ? Te(e, t) : e, o = a.length - 1, i; o >= 0; o--)
477
+ var Te = Object.defineProperty, Me = Object.getOwnPropertyDescriptor, Se = (a, e, t, r) => {
478
+ for (var n = r > 1 ? void 0 : r ? Me(e, t) : e, o = a.length - 1, i; o >= 0; o--)
470
479
  (i = a[o]) && (n = (r ? i(e, t, n) : i(n)) || n);
471
- return r && n && fe(e, t, n), n;
472
- }, N = (a, e) => (t, r) => e(t, r, a);
473
- const U = "SHEET_DATA_VALIDATION";
474
- let V = class extends A {
480
+ return r && n && Te(e, t, n), n;
481
+ }, y = (a, e) => (t, r) => e(t, r, a);
482
+ const Ve = "SHEET_DATA_VALIDATION_PLUGIN";
483
+ let I = class extends N {
475
484
  constructor(a, e, t) {
476
485
  super(), this._resourceManagerService = a, this._univerInstanceService = e, this._dataValidationModel = t, this._initSnapshot();
477
486
  }
478
487
  _initSnapshot() {
479
- const a = (n) => {
480
- const o = this._dataValidationModel.getUnitRules(n), i = {};
481
- return o ? (o.forEach(([d, l]) => {
482
- i[d] = l;
483
- }), JSON.stringify(i)) : "";
484
- }, e = (n) => {
485
- if (!n)
488
+ const a = (t) => {
489
+ const r = this._dataValidationModel.getUnitRules(t), n = {};
490
+ return r ? (r.forEach(([o, i]) => {
491
+ n[o] = i;
492
+ }), JSON.stringify(n)) : "";
493
+ }, e = (t) => {
494
+ if (!t)
486
495
  return {};
487
496
  try {
488
- return JSON.parse(n);
497
+ return JSON.parse(t);
489
498
  } catch {
490
499
  return {};
491
500
  }
492
- }, t = (n) => {
493
- const o = n.getUnitId();
494
- this.disposeWithMe(
495
- this._resourceManagerService.registerPluginResource(o, U, {
496
- toJson: (i) => a(i),
497
- parseJson: (i) => e(i),
498
- onChange: (i, d) => {
499
- Object.keys(d).forEach((l) => {
500
- d[l].forEach((p) => {
501
- this._dataValidationModel.addRule(i, l, p);
502
- });
503
- });
504
- }
505
- })
506
- );
507
501
  };
508
- this.disposeWithMe(D(this._univerInstanceService.sheetAdded$.subscribe(t))), this.disposeWithMe(
509
- D(
510
- this._univerInstanceService.sheetDisposed$.subscribe((n) => {
511
- const o = n.getUnitId();
512
- this._resourceManagerService.disposePluginResource(o, U);
513
- })
514
- )
502
+ this.disposeWithMe(
503
+ this._resourceManagerService.registerPluginResource({
504
+ pluginName: Ve,
505
+ businesses: [w.UNIVER_SHEET],
506
+ toJson: (t) => a(t),
507
+ parseJson: (t) => e(t),
508
+ onUnLoad: (t) => {
509
+ this._dataValidationModel.deleteUnitRules(t);
510
+ },
511
+ onLoad: (t, r) => {
512
+ Object.keys(r).forEach((n) => {
513
+ r[n].forEach((i) => {
514
+ this._dataValidationModel.addRule(t, n, i);
515
+ });
516
+ });
517
+ }
518
+ })
515
519
  );
516
- const r = this._univerInstanceService.getCurrentUniverSheetInstance();
517
- t(r);
518
520
  }
519
521
  };
520
- V = Me([
521
- G(H.Ready, V),
522
- N(0, k),
523
- N(1, Q),
524
- N(2, E(h))
525
- ], V);
526
- var Se = Object.defineProperty, Ie = Object.getOwnPropertyDescriptor, Ve = (a, e, t, r) => {
522
+ I = Se([
523
+ q(G.Ready, I),
524
+ y(0, ae),
525
+ y(1, Q),
526
+ y(2, E(h))
527
+ ], I);
528
+ var Re = Object.defineProperty, Ie = Object.getOwnPropertyDescriptor, Ae = (a, e, t, r) => {
527
529
  for (var n = r > 1 ? void 0 : r ? Ie(e, t) : e, o = a.length - 1, i; o >= 0; o--)
528
530
  (i = a[o]) && (n = (r ? i(e, t, n) : i(n)) || n);
529
- return r && n && Se(e, t, n), n;
530
- }, y = (a, e) => (t, r) => e(t, r, a);
531
- let R = class extends A {
531
+ return r && n && Re(e, t, n), n;
532
+ }, L = (a, e) => (t, r) => e(t, r, a);
533
+ let A = class extends N {
532
534
  constructor(a, e, t) {
533
535
  super(), this._sheetInterceptorService = a, this._univerInstanceService = e, this._dataValidationModel = t, this._initSheetChange();
534
536
  }
@@ -536,8 +538,8 @@ let R = class extends A {
536
538
  this.disposeWithMe(
537
539
  this._sheetInterceptorService.interceptCommand({
538
540
  getMutations: (a) => {
539
- if (a.id === ne.id) {
540
- const e = a.params, t = e.unitId || this._univerInstanceService.getCurrentUniverSheetInstance().getUnitId(), r = this._univerInstanceService.getUniverSheetInstance(t);
541
+ if (a.id === se.id) {
542
+ const e = a.params, t = e.unitId || this._univerInstanceService.getCurrentUnitForType(w.UNIVER_SHEET).getUnitId(), r = this._univerInstanceService.getUniverSheetInstance(t);
541
543
  if (!r)
542
544
  return { redos: [], undos: [] };
543
545
  const n = e.subUnitId || r.getActiveSheet().getSheetId(), o = this._dataValidationModel.ensureManager(t, n);
@@ -558,7 +560,7 @@ let R = class extends A {
558
560
  params: l
559
561
  }],
560
562
  undos: [{
561
- id: m.id,
563
+ id: g.id,
562
564
  params: u
563
565
  }]
564
566
  };
@@ -569,28 +571,22 @@ let R = class extends A {
569
571
  );
570
572
  }
571
573
  };
572
- R = Ve([
573
- G(H.Ready, R),
574
- y(0, E(oe)),
575
- y(1, E(Q)),
576
- y(2, E(h))
577
- ], R);
578
- const Re = {
579
- type: _.MUTATION,
580
- id: "sheet.mutation.data-validation-formula-mark-dirty",
581
- handler() {
582
- return !0;
583
- }
584
- };
585
- var Ae = Object.defineProperty, Oe = Object.getOwnPropertyDescriptor, Ne = (a, e, t, r) => {
574
+ A = Ae([
575
+ q(G.Ready, A),
576
+ L(0, E(de)),
577
+ L(1, E(Q)),
578
+ L(2, E(h))
579
+ ], A);
580
+ var Ne = Object.defineProperty, Oe = Object.getOwnPropertyDescriptor, ye = (a, e, t, r) => {
586
581
  for (var n = r > 1 ? void 0 : r ? Oe(e, t) : e, o = a.length - 1, i; o >= 0; o--)
587
582
  (i = a[o]) && (n = (r ? i(e, t, n) : i(n)) || n);
588
- return r && n && Ae(e, t, n), n;
583
+ return r && n && Ne(e, t, n), n;
589
584
  }, C = (a, e) => (t, r) => e(t, r, a);
590
- const ye = "data-validation";
591
- let b = class extends ee {
585
+ const Le = "data-validation";
586
+ var R;
587
+ let b = (R = class extends re {
592
588
  constructor(a, e, t) {
593
- super(ye), this._injector = e, this._commandService = t;
589
+ super(), this._injector = e, this._commandService = t;
594
590
  }
595
591
  onStarting(a) {
596
592
  [
@@ -598,35 +594,34 @@ let b = class extends ee {
598
594
  [h],
599
595
  // service
600
596
  [j],
601
- [V],
602
- [R]
597
+ [I],
598
+ [A]
603
599
  ].forEach(
604
600
  (e) => {
605
601
  a.add(e);
606
602
  }
607
603
  ), [
608
604
  // command
609
- _e,
605
+ ge,
606
+ fe,
607
+ Ee,
610
608
  ve,
611
609
  me,
612
- Ee,
613
- ge,
614
610
  // mutation
615
- Re,
616
- m,
611
+ g,
617
612
  v,
618
613
  f
619
614
  ].forEach((e) => {
620
615
  this._commandService.registerCommand(e);
621
616
  });
622
617
  }
623
- };
624
- b = Ne([
618
+ }, c(R, "pluginName", Le), c(R, "type", w.UNIVER_SHEET), R);
619
+ b = ye([
625
620
  C(1, E(W)),
626
621
  C(2, M)
627
622
  ], b);
628
623
  s.BETWEEN + "", s.EQUAL + "", s.GREATER_THAN + "", s.GREATER_THAN_OR_EQUAL + "", s.LESS_THAN + "", s.LESS_THAN_OR_EQUAL + "", s.NOT_BETWEEN + "", s.NOT_EQUAL + "";
629
- const De = {
624
+ const Ue = {
630
625
  [s.BETWEEN]: "dataValidation.ruleName.between",
631
626
  [s.EQUAL]: "dataValidation.ruleName.equal",
632
627
  [s.GREATER_THAN]: "dataValidation.ruleName.greaterThan",
@@ -635,7 +630,7 @@ const De = {
635
630
  [s.LESS_THAN_OR_EQUAL]: "dataValidation.ruleName.lessThanOrEqual",
636
631
  [s.NOT_BETWEEN]: "dataValidation.ruleName.notBetween",
637
632
  [s.NOT_EQUAL]: "dataValidation.ruleName.notEqual"
638
- }, Le = {
633
+ }, we = {
639
634
  [s.BETWEEN]: "dataValidation.errorMsg.between",
640
635
  [s.EQUAL]: "dataValidation.errorMsg.equal",
641
636
  [s.GREATER_THAN]: "dataValidation.errorMsg.greaterThan",
@@ -644,7 +639,7 @@ const De = {
644
639
  [s.LESS_THAN_OR_EQUAL]: "dataValidation.errorMsg.lessThanOrEqual",
645
640
  [s.NOT_BETWEEN]: "dataValidation.errorMsg.notBetween",
646
641
  [s.NOT_EQUAL]: "dataValidation.errorMsg.notEqual"
647
- }, Qe = {
642
+ }, We = {
648
643
  [s.BETWEEN]: "dataValidation.textLength.errorMsg.between",
649
644
  [s.EQUAL]: "dataValidation.textLength.errorMsg.equal",
650
645
  [s.GREATER_THAN]: "dataValidation.textLength.errorMsg.greaterThan",
@@ -654,12 +649,12 @@ const De = {
654
649
  [s.NOT_BETWEEN]: "dataValidation.textLength.errorMsg.notBetween",
655
650
  [s.NOT_EQUAL]: "dataValidation.textLength.errorMsg.notEqual"
656
651
  };
657
- var we = Object.defineProperty, Ue = Object.getOwnPropertyDescriptor, Ce = (a, e, t, r) => {
658
- for (var n = r > 1 ? void 0 : r ? Ue(e, t) : e, o = a.length - 1, i; o >= 0; o--)
652
+ var De = Object.defineProperty, Ce = Object.getOwnPropertyDescriptor, be = (a, e, t, r) => {
653
+ for (var n = r > 1 ? void 0 : r ? Ce(e, t) : e, o = a.length - 1, i; o >= 0; o--)
659
654
  (i = a[o]) && (n = (r ? i(e, t, n) : i(n)) || n);
660
- return r && n && we(e, t, n), n;
661
- }, $ = (a, e) => (t, r) => e(t, r, a);
662
- const B = "{FORMULA1}", P = "{FORMULA2}", be = {
655
+ return r && n && De(e, t, n), n;
656
+ }, B = (a, e) => (t, r) => e(t, r, a);
657
+ const P = "{FORMULA1}", $ = "{FORMULA2}", Be = {
663
658
  [s.BETWEEN]: "dataValidation.operators.between",
664
659
  [s.EQUAL]: "dataValidation.operators.equal",
665
660
  [s.GREATER_THAN]: "dataValidation.operators.greaterThan",
@@ -677,7 +672,7 @@ let x = class {
677
672
  this.localeService = a, this.injector = e;
678
673
  }
679
674
  get operatorNames() {
680
- return this.operators.map((a) => this.localeService.t(be[a]));
675
+ return this.operators.map((a) => this.localeService.t(Be[a]));
681
676
  }
682
677
  get titleStr() {
683
678
  return this.localeService.t(this.title);
@@ -689,12 +684,12 @@ let x = class {
689
684
  var t, r;
690
685
  if (!a.operator)
691
686
  return this.titleStr;
692
- const e = this.localeService.t(De[a.operator]).replace(B, (t = a.formula1) != null ? t : "").replace(P, (r = a.formula2) != null ? r : "");
687
+ const e = this.localeService.t(Ue[a.operator]).replace(P, (t = a.formula1) != null ? t : "").replace($, (r = a.formula2) != null ? r : "");
693
688
  return `${this.titleStr} ${e}`;
694
689
  }
695
690
  generateRuleErrorMessage(a) {
696
691
  var t, r;
697
- return a.operator ? `${this.localeService.t(Le[a.operator]).replace(B, (t = a.formula1) != null ? t : "").replace(P, (r = a.formula2) != null ? r : "")}` : this.titleStr;
692
+ return a.operator ? `${this.localeService.t(we[a.operator]).replace(P, (t = a.formula1) != null ? t : "").replace($, (r = a.formula2) != null ? r : "")}` : this.titleStr;
698
693
  }
699
694
  getRuleFinalError(a) {
700
695
  return a.showInputMessage && a.error ? a.error : this.generateRuleErrorMessage(a);
@@ -739,7 +734,7 @@ let x = class {
739
734
  const l = await this.parseFormula(e, r, n);
740
735
  if (!await this.isValidType(a, l, e))
741
736
  return !1;
742
- if (!q.isDefine(d))
737
+ if (!H.isDefine(d))
743
738
  return !0;
744
739
  const u = this.transform(a, l, e);
745
740
  switch (d) {
@@ -764,37 +759,36 @@ let x = class {
764
759
  }
765
760
  }
766
761
  };
767
- x = Ce([
768
- $(0, E(te)),
769
- $(1, E(W))
762
+ x = be([
763
+ B(0, E(ne)),
764
+ B(1, E(W))
770
765
  ], x);
771
- const We = [
766
+ const je = [
772
767
  s.BETWEEN,
773
768
  s.NOT_BETWEEN
774
769
  ];
775
770
  export {
776
- _e as AddDataValidationCommand,
777
- m as AddDataValidationMutation,
771
+ ge as AddDataValidationCommand,
772
+ g as AddDataValidationMutation,
778
773
  x as BaseDataValidator,
779
- Re as DataValidationFormulaMarkDirty,
780
- se as DataValidationManager,
774
+ ue as DataValidationManager,
781
775
  h as DataValidationModel,
782
- V as DataValidationResourceController,
783
- R as DataValidationSheetController,
784
- ie as DataValidatorRegistryScope,
776
+ I as DataValidationResourceController,
777
+ A as DataValidationSheetController,
778
+ le as DataValidatorRegistryScope,
785
779
  j as DataValidatorRegistryService,
786
- ve as RemoveAllDataValidationCommand,
787
- ge as RemoveDataValidationCommand,
780
+ fe as RemoveAllDataValidationCommand,
781
+ me as RemoveDataValidationCommand,
788
782
  f as RemoveDataValidationMutation,
789
- We as TWO_FORMULA_OPERATOR_COUNT,
790
- Qe as TextLengthErrorTitleMap,
783
+ je as TWO_FORMULA_OPERATOR_COUNT,
784
+ We as TextLengthErrorTitleMap,
791
785
  b as UniverDataValidationPlugin,
792
786
  v as UpdateDataValidationMutation,
793
- me as UpdateDataValidationOptionsCommand,
794
- Ee as UpdateDataValidationSettingCommand,
795
- g as UpdateRuleType,
787
+ Ee as UpdateDataValidationOptionsCommand,
788
+ ve as UpdateDataValidationSettingCommand,
789
+ _ as UpdateRuleType,
796
790
  Ge as createDefaultNewRule,
797
- pe as getRuleOptions,
798
- he as getRuleSetting,
799
- He as removeDataValidationUndoFactory
791
+ J as getRuleOptions,
792
+ F as getRuleSetting,
793
+ Qe as removeDataValidationUndoFactory
800
794
  };
@@ -1,8 +1,8 @@
1
1
  import { IAccessor } from '@wendellhu/redi';
2
- import { DataValidationOperator, DataValidationType, IDataValidationRule, IDataValidationRuleBase, IDataValidationRuleOptions } from '@univerjs/core';
2
+ import { DataValidationOperator, DataValidationType, IDataValidationRuleBase, IDataValidationRuleOptions } from '@univerjs/core';
3
3
 
4
- export declare function getRuleSetting(rule: IDataValidationRule): IDataValidationRuleBase;
5
- export declare function getRuleOptions(rule: IDataValidationRule): IDataValidationRuleOptions;
4
+ export declare function getRuleSetting(rule: IDataValidationRuleBase): IDataValidationRuleBase;
5
+ export declare function getRuleOptions(rule: IDataValidationRuleOptions): IDataValidationRuleOptions;
6
6
  export declare function createDefaultNewRule(accessor: IAccessor): {
7
7
  uid: string;
8
8
  type: DataValidationType;
@@ -35,5 +35,4 @@ export { removeDataValidationUndoFactory } from './commands/commands/data-valida
35
35
  export { TWO_FORMULA_OPERATOR_COUNT } from './types/const/two-formula-operators';
36
36
  export { DataValidationResourceController } from './controllers/dv-resource.controller';
37
37
  export { DataValidationSheetController } from './controllers/dv-sheet.controller';
38
- export { DataValidationFormulaMarkDirty, type IDataValidationFormulaMarkDirtyParams } from './commands/mutations/formula.mutation';
39
38
  export { TextLengthErrorTitleMap } from './types/const/operator-text-map';
@@ -13,7 +13,7 @@ export declare class DataValidationManager<T extends IDataValidationRule> extend
13
13
  private _insertRules;
14
14
  getRuleById(id: string): T | undefined;
15
15
  getRuleIndex(id: string): number;
16
- addRule(rule: T, index?: number): void;
16
+ addRule(rule: T | T[], index?: number): void;
17
17
  removeRule(ruleId: string): void;
18
18
  updateRule(ruleId: string, payload: IUpdateRulePayload): T;
19
19
  getDataValidations(): T[];
@@ -27,7 +27,8 @@ export declare class DataValidationModel<T extends IDataValidationRule = IDataVa
27
27
  constructor(_logService: ILogService);
28
28
  setManagerCreator(creator: (unitId: string, subUnitId: string) => DataValidationManager<T>): void;
29
29
  ensureManager(unitId: string, subUnitId: string): DataValidationManager<T>;
30
- addRule(unitId: string, subUnitId: string, rule: T, index?: number): void;
30
+ private _addRuleSideEffect;
31
+ addRule(unitId: string, subUnitId: string, rule: T | T[], index?: number): void;
31
32
  updateRule(unitId: string, subUnitId: string, ruleId: string, payload: IUpdateRulePayload): void;
32
33
  removeRule(unitId: string, subUnitId: string, ruleId: string): void;
33
34
  getRuleById(unitId: string, subUnitId: string, ruleId: string): T | undefined;
@@ -35,5 +36,6 @@ export declare class DataValidationModel<T extends IDataValidationRule = IDataVa
35
36
  getRules(unitId: string, subUnitId: string): T[];
36
37
  validator(content: Nullable<CellValue>, rule: T, pos: any): DataValidationStatus;
37
38
  getUnitRules(unitId: string): [string, IDataValidationRule[]][];
39
+ deleteUnitRules(unitId: string): void;
38
40
  }
39
41
  export {};
@@ -1,9 +1,11 @@
1
1
  import { Injector } from '@wendellhu/redi';
2
- import { ICommandService, Plugin } from '@univerjs/core';
2
+ import { ICommandService, Plugin, UniverInstanceType } from '@univerjs/core';
3
3
 
4
4
  export declare class UniverDataValidationPlugin extends Plugin {
5
5
  protected _injector: Injector;
6
6
  private _commandService;
7
+ static pluginName: string;
8
+ static type: UniverInstanceType;
7
9
  constructor(_config: unknown, _injector: Injector, _commandService: ICommandService);
8
10
  onStarting(injector: Injector): void;
9
11
  }
@@ -12,5 +12,6 @@ export interface IFormulaInputProps {
12
12
  subUnitId: string;
13
13
  showError?: boolean;
14
14
  validResult?: IFormulaValidResult;
15
+ ruleId: string;
15
16
  }
16
17
  export type FormulaInputType = React.ComponentType<IFormulaInputProps>;
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,E,f){"use strict";var ma=Object.defineProperty;var Va=(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)=>(Va(s,typeof n!="symbol"?n+"":n,m),m);var R=(r=>(r.SHEET="sheet",r))(R||{});class S{constructor(){h(this,"_validatorByScopes",new Map);h(this,"_validatorMap",new Map);h(this,"_validatorsChange$",new E.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 _=(r=>(r[r.SETTING=0]="SETTING",r[r.RANGE=1]="RANGE",r[r.OPTIONS=2]="OPTIONS",r))(_||{});class A extends n.Disposable{constructor(a,t,i){super();h(this,"_dataValidations");h(this,"_dataValidationMap",new Map);h(this,"_dataValidations$",new E.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){typeof t=="number"&&t<this._dataValidations.length?this._dataValidations.splice(t,0,a):this._dataValidations.push(a),this._dataValidationMap.set(a.uid,a),this._notice()}removeRule(a){const t=this._dataValidations.findIndex(i=>i.uid===a);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 _.RANGE:{d.ranges=t.payload;break}case _.SETTING:{Object.assign(d,t.payload);break}case _.OPTIONS:{Object.assign(d,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 H=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&&H(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 A(a,t,[]));h(this,"_ruleChange$",new E.Subject);h(this,"_validStatusChange$",new E.Subject);h(this,"ruleChange$",this._ruleChange$.asObservable());h(this,"ruleChangeDebounce$",this.ruleChange$.pipe(E.debounceTime(20)));h(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 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}addRule(a,t,i,o){try{this.ensureManager(a,t).addRule(i,o),this._ruleChange$.next({rule:i,type:"add",unitId:a,subUnitId:t})}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);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,c=>{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}},s.DataValidationModel=W([F(0,n.ILogService)],s.DataValidationModel);const g={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,d=r.get(s.DataValidationModel);return Array.isArray(i)?i.forEach(l=>{d.addRule(a,t,l,o)}):d.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}},D={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}};function y(r){return{type:r.type,operator:r.operator,formula1:r.formula1,formula2:r.formula2,allowBlank:r.allowBlank}}function N(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}}function J(r){const a=r.get(f.SelectionManagerService).getSelectionRanges();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}]}}const C={type:n.CommandType.COMMAND,id:"data-validation.command.addRule",async handler(r,e){if(!e)return!1;const{rule:a,unitId:t,subUnitId:i}=e,o=r.get(n.ICommandService),d=r.get(n.IUndoRedoService),l={...e,rule:{...e.rule,ranges:[e.rule.range]}},c=[{id:g.id,params:l}],u=[{id:v.id,params:{unitId:t,subUnitId:i,ruleId:a.uid}}];return d.pushUndoRedo({unitID:t,redoMutations:c,undoMutations:u}),await o.executeCommand(g.id,l),!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(c=>a.getRuleById(t,i,c)).filter(Boolean);return[{id:g.id,params:{unitId:t,subUnitId:i,rule:l}}]}return[{id:g.id,params:{unitId:t,subUnitId:i,rule:{...a.getRuleById(t,i,o)},index:a.getRuleIndex(t,i,o)}}]},U={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:g.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}},L={type:n.CommandType.COMMAND,id:"data-validation.command.updateDataValidationSetting",handler(r,e){if(!e)return!1;const a=r.get(n.ICommandService),t=r.get(n.IUndoRedoService),i=r.get(s.DataValidationModel),{unitId:o,subUnitId:d,ruleId:l,options:c}=e,u=i.getRuleById(o,d,l);if(!u)return!1;const p={unitId:o,subUnitId:d,ruleId:l,payload:{type:_.OPTIONS,payload:c}},V=[{id:D.id,params:p}],O={unitId:o,subUnitId:d,ruleId:l,payload:{type:_.OPTIONS,payload:N(u)}},I=[{id:D.id,params:O}];return t.pushUndoRedo({unitID:o,redoMutations:V,undoMutations:I}),a.executeCommand(D.id,p),!0}},w={type:n.CommandType.COMMAND,id:"data-validation.command.updateDataValidationOptions",handler(r,e){if(!e)return!1;const a=r.get(n.ICommandService),t=r.get(n.IUndoRedoService),i=r.get(s.DataValidationModel),o=r.get(S),{unitId:d,subUnitId:l,ruleId:c,setting:u}=e,p=o.getValidatorItem(u.type);if(!p||!p.validatorFormula(u).success)return!1;const V=i.getRuleById(d,l,c);if(!V)return!1;const O={unitId:d,subUnitId:l,ruleId:c,payload:{type:_.SETTING,payload:u}},I=[{id:D.id,params:O}],ha={unitId:d,subUnitId:l,ruleId:c,payload:{type:_.SETTING,payload:y(V)}},pa=[{id:D.id,params:ha}];return t.pushUndoRedo({unitID:d,redoMutations:I,undoMutations:pa}),a.executeCommand(D.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)],c={unitId:a,subUnitId:t,ruleId:l.map(V=>V.uid)},u=[{id:v.id,params:c}],p=[{id:g.id,params:{unitId:a,subUnitId:t,rule:l}}];return d.pushUndoRedo({redoMutations:u,undoMutations:p,unitID:a}),i.executeCommand(v.id,c),!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},M=(r,e)=>(a,t)=>e(a,t,r);const P="SHEET_DATA_VALIDATION";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=o=>{const d=this._dataValidationModel.getUnitRules(o),l={};return d?(d.forEach(([c,u])=>{l[c]=u}),JSON.stringify(l)):""},a=o=>{if(!o)return{};try{return JSON.parse(o)}catch{return{}}},t=o=>{const d=o.getUnitId();this.disposeWithMe(this._resourceManagerService.registerPluginResource(d,P,{toJson:l=>e(l),parseJson:l=>a(l),onChange:(l,c)=>{Object.keys(c).forEach(u=>{c[u].forEach(V=>{this._dataValidationModel.addRule(l,u,V)})})}}))};this.disposeWithMe(n.toDisposable(this._univerInstanceService.sheetAdded$.subscribe(t))),this.disposeWithMe(n.toDisposable(this._univerInstanceService.sheetDisposed$.subscribe(o=>{const d=o.getUnitId();this._resourceManagerService.disposePluginResource(d,P)})));const i=this._univerInstanceService.getCurrentUniverSheetInstance();t(i)}},s.DataValidationResourceController=Y([n.OnLifecycle(n.LifecycleStages.Ready,s.DataValidationResourceController),M(0,n.IResourceManagerService),M(1,n.IUniverInstanceService),M(2,m.Inject(s.DataValidationModel))],s.DataValidationResourceController);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},T=(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=>{if(e.id===f.RemoveSheetCommand.id){const a=e.params,t=a.unitId||this._univerInstanceService.getCurrentUniverSheetInstance().getUnitId(),i=this._univerInstanceService.getUniverSheetInstance(t);if(!i)return{redos:[],undos:[]};const o=a.subUnitId||i.getActiveSheet().getSheetId(),d=this._dataValidationModel.ensureManager(t,o);if(!d)return{redos:[],undos:[]};const l=d.getDataValidations(),c=l.map(V=>V.uid),u={unitId:t,subUnitId:o,ruleId:c},p={unitId:t,subUnitId:o,rule:l};return{redos:[{id:v.id,params:u}],undos:[{id:g.id,params:p}]}}return{redos:[],undos:[]}}}))}},s.DataValidationSheetController=x([n.OnLifecycle(n.LifecycleStages.Ready,s.DataValidationSheetController),T(0,m.Inject(f.SheetInterceptorService)),T(1,m.Inject(n.IUniverInstanceService)),T(2,m.Inject(s.DataValidationModel))],s.DataValidationSheetController);const B={type:n.CommandType.MUTATION,id:"sheet.mutation.data-validation-formula-mark-dirty",handler(){return!0}};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},$=(r,e)=>(a,t)=>e(a,t,r);const ia="data-validation";s.UniverDataValidationPlugin=class extends n.Plugin{constructor(e,a,t){super(ia),this._injector=a,this._commandService=t}onStarting(e){[[s.DataValidationModel],[S],[s.DataValidationResourceController],[s.DataValidationSheetController]].forEach(a=>{e.add(a)}),[C,b,L,w,U,B,g,D,v].forEach(a=>{this._commandService.registerCommand(a)})}},s.UniverDataValidationPlugin=ea([$(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 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},q=(r,e)=>(a,t)=>e(a,t,r);const j="{FORMULA1}",G="{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(G,(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(G,(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([q(0,m.Inject(n.LocaleService)),q(1,m.Inject(m.Injector))],s.BaseDataValidator);const ca=[n.DataValidationOperator.BETWEEN,n.DataValidationOperator.NOT_BETWEEN];s.AddDataValidationCommand=C,s.AddDataValidationMutation=g,s.DataValidationFormulaMarkDirty=B,s.DataValidationManager=A,s.DataValidatorRegistryScope=R,s.DataValidatorRegistryService=S,s.RemoveAllDataValidationCommand=b,s.RemoveDataValidationCommand=U,s.RemoveDataValidationMutation=v,s.TWO_FORMULA_OPERATOR_COUNT=ca,s.TextLengthErrorTitleMap=oa,s.UpdateDataValidationMutation=D,s.UpdateDataValidationOptionsCommand=L,s.UpdateDataValidationSettingCommand=w,s.UpdateRuleType=_,s.createDefaultNewRule=J,s.getRuleOptions=N,s.getRuleSetting=y,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("@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,O,T){"use strict";var ma=Object.defineProperty;var _a=(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)=>(_a(s,typeof n!="symbol"?n+"":n,m),m);var f;var N=(r=>(r.SHEET="sheet",r))(N||{});class S{constructor(){h(this,"_validatorByScopes",new Map);h(this,"_validatorMap",new Map);h(this,"_validatorsChange$",new O.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 _=(r=>(r[r.SETTING=0]="SETTING",r[r.RANGE=1]="RANGE",r[r.OPTIONS=2]="OPTIONS",r))(_||{});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}}function H(r){const a=r.get(T.SelectionManagerService).getSelectionRanges();return{uid:n.Tools.generateRandomId(6),type:n.DataValidationType.DECIMAL,operator:n.DataValidationOperator.EQUAL,formula1:"100",ranges:a!=null?a:[{startColumn:0,endColumn:0,startRow:0,endRow:0}]}}class C extends n.Disposable{constructor(a,t,i){super();h(this,"_dataValidations");h(this,"_dataValidationMap",new Map);h(this,"_dataValidations$",new O.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 _.RANGE:{d.ranges=t.payload;break}case _.SETTING:{Object.assign(d,M(t.payload));break}case _.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 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 O.Subject);h(this,"_validStatusChange$",new O.Subject);h(this,"ruleChange$",this._ruleChange$.asObservable());h(this,"ruleChangeDebounce$",this.ruleChange$.pipe(O.debounceTime(20)));h(this,"validStatusChange$",this._validStatusChange$.asObservable().pipe(O.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(c=>{this._addRuleSideEffect(a,t,c)}),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,c=>{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)}},s.DataValidationModel=W([F(0,n.ILogService)],s.DataValidationModel);const V={type:n.CommandType.MUTATION,id:"data-validation.mutation.addRule",handler(r,e){if(!e)return!1;const{unitId:a,subUnitId:t,rule:i,index:o}=e;return r.get(s.DataValidationModel).addRule(a,t,i,o),!0}},g={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}},v={type:n.CommandType.MUTATION,id:"data-validation.mutation.updateRule",handler(r,e){if(!e)return!1;const{unitId:a,subUnitId:t,ruleId:i,payload:o}=e;return r.get(s.DataValidationModel).updateRule(a,t,i,o),!0}},U={type:n.CommandType.COMMAND,id:"data-validation.command.addRule",async handler(r,e){if(!e)return!1;const{rule:a,unitId:t,subUnitId:i}=e,o=r.get(n.ICommandService),d=r.get(n.IUndoRedoService),l={...e,rule:{...e.rule,ranges:[e.rule.range]}},c=[{id:V.id,params:l}],u=[{id:g.id,params:{unitId:t,subUnitId:i,ruleId:a.uid}}];return d.pushUndoRedo({unitID:t,redoMutations:c,undoMutations:u}),await o.executeCommand(V.id,l),!0}},J=(r,e)=>{const a=r.get(s.DataValidationModel),{unitId:t,subUnitId:i,ruleId:o}=e;if(Array.isArray(o)){const l=o.map(c=>a.getRuleById(t,i,c)).filter(Boolean);return[{id:V.id,params:{unitId:t,subUnitId:i,rule:l}}]}return[{id:V.id,params:{unitId:t,subUnitId:i,rule:{...a.getRuleById(t,i,o)},index:a.getRuleIndex(t,i,o)}}]},L={type:n.CommandType.COMMAND,id:"data-validation.command.removeRule",handler(r,e){if(!e)return!1;const{unitId:a,subUnitId:t,ruleId:i}=e,o=r.get(n.ICommandService),d=r.get(n.IUndoRedoService),l=r.get(s.DataValidationModel),c=[{id:g.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(g.id,e),!0}},w={type:n.CommandType.COMMAND,id:"data-validation.command.updateDataValidationSetting",handler(r,e){if(!e)return!1;const a=r.get(n.ICommandService),t=r.get(n.IUndoRedoService),i=r.get(s.DataValidationModel),{unitId:o,subUnitId:d,ruleId:l,options:c}=e,u=i.getRuleById(o,d,l);if(!u)return!1;const p={unitId:o,subUnitId:d,ruleId:l,payload:{type:_.OPTIONS,payload:c}},E=[{id:v.id,params:p}],D={unitId:o,subUnitId:d,ruleId:l,payload:{type:_.OPTIONS,payload:R(u)}},y=[{id:v.id,params:D}];return t.pushUndoRedo({unitID:o,redoMutations:E,undoMutations:y}),a.executeCommand(v.id,p),!0}},b={type:n.CommandType.COMMAND,id:"data-validation.command.updateDataValidationOptions",handler(r,e){if(!e)return!1;const a=r.get(n.ICommandService),t=r.get(n.IUndoRedoService),i=r.get(s.DataValidationModel),o=r.get(S),{unitId:d,subUnitId:l,ruleId:c,setting:u}=e,p=o.getValidatorItem(u.type);if(!p||!p.validatorFormula(u).success)return!1;const E=i.getRuleById(d,l,c);if(!E)return!1;const D={unitId:d,subUnitId:l,ruleId:c,payload:{type:_.SETTING,payload:u}},y=[{id:v.id,params:D}],ha={unitId:d,subUnitId:l,ruleId:c,payload:{type:_.SETTING,payload:M(E)}},pa=[{id:v.id,params:ha}];return t.pushUndoRedo({unitID:d,redoMutations:y,undoMutations:pa}),a.executeCommand(v.id,D),!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(E=>E.uid)},u=[{id:g.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(g.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},I=(r,e)=>(a,t)=>e(a,t,r);const Y="SHEET_DATA_VALIDATION_PLUGIN";s.DataValidationResourceController=class extends n.Disposable{constructor(e,a,t){super(),this._resourceManagerService=e,this._univerInstanceService=a,this._dataValidationModel=t,this._initSnapshot()}_initSnapshot(){const e=t=>{const i=this._dataValidationModel.getUnitRules(t),o={};return i?(i.forEach(([d,l])=>{o[d]=l}),JSON.stringify(o)):""},a=t=>{if(!t)return{};try{return JSON.parse(t)}catch{return{}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:Y,businesses:[n.UniverInstanceType.UNIVER_SHEET],toJson:t=>e(t),parseJson:t=>a(t),onUnLoad:t=>{this._dataValidationModel.deleteUnitRules(t)},onLoad:(t,i)=>{Object.keys(i).forEach(o=>{i[o].forEach(l=>{this._dataValidationModel.addRule(t,o,l)})})}}))}},s.DataValidationResourceController=X([n.OnLifecycle(n.LifecycleStages.Ready,s.DataValidationResourceController),I(0,n.IResourceManagerService),I(1,n.IUniverInstanceService),I(2,m.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=>{if(e.id===T.RemoveSheetCommand.id){const a=e.params,t=a.unitId||this._univerInstanceService.getCurrentUnitForType(n.UniverInstanceType.UNIVER_SHEET).getUnitId(),i=this._univerInstanceService.getUniverSheetInstance(t);if(!i)return{redos:[],undos:[]};const o=a.subUnitId||i.getActiveSheet().getSheetId(),d=this._dataValidationModel.ensureManager(t,o);if(!d)return{redos:[],undos:[]};const l=d.getDataValidations(),c=l.map(E=>E.uid),u={unitId:t,subUnitId:o,ruleId:c},p={unitId:t,subUnitId:o,rule:l};return{redos:[{id:g.id,params:u}],undos:[{id:V.id,params:p}]}}return{redos:[],undos:[]}}}))}},s.DataValidationSheetController=k([n.OnLifecycle(n.LifecycleStages.Ready,s.DataValidationSheetController),A(0,m.Inject(T.SheetInterceptorService)),A(1,m.Inject(n.IUniverInstanceService)),A(2,m.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="data-validation";s.UniverDataValidationPlugin=(f=class extends n.Plugin{constructor(e,a,t){super(),this._injector=a,this._commandService=t}onStarting(e){[[s.DataValidationModel],[S],[s.DataValidationResourceController],[s.DataValidationSheetController]].forEach(a=>{e.add(a)}),[U,P,w,b,L,V,v,g].forEach(a=>{this._commandService.registerCommand(a)})}},h(f,"pluginName",ia),h(f,"type",n.UniverInstanceType.UNIVER_SHEET),f),s.UniverDataValidationPlugin=ea([B(1,m.Inject(m.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 q="{FORMULA1}",j="{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(q,(t=e.formula1)!=null?t:"").replace(j,(i=e.formula2)!=null?i:"");return`${this.titleStr} ${a}`}generateRuleErrorMessage(e){var t,i;return e.operator?`${this.localeService.t(ra[e.operator]).replace(q,(t=e.formula1)!=null?t:"").replace(j,(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,m.Inject(n.LocaleService)),$(1,m.Inject(m.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=S,s.RemoveAllDataValidationCommand=P,s.RemoveDataValidationCommand=L,s.RemoveDataValidationMutation=g,s.TWO_FORMULA_OPERATOR_COUNT=ca,s.TextLengthErrorTitleMap=oa,s.UpdateDataValidationMutation=v,s.UpdateDataValidationOptionsCommand=w,s.UpdateDataValidationSettingCommand=b,s.UpdateRuleType=_,s.createDefaultNewRule=H,s.getRuleOptions=R,s.getRuleSetting=M,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.1.7",
3
+ "version": "0.1.9",
4
4
  "private": false,
5
5
  "description": "Data validation library for Univer",
6
6
  "author": "DreamNum <developer@univer.ai>",
@@ -49,23 +49,20 @@
49
49
  "lib"
50
50
  ],
51
51
  "peerDependencies": {
52
- "@wendellhu/redi": "0.13.0",
52
+ "@wendellhu/redi": "^0.13.3",
53
53
  "rxjs": ">=7.0.0",
54
- "@univerjs/core": "0.1.7",
55
- "@univerjs/sheets": "0.1.7"
56
- },
57
- "dependencies": {
58
- "dayjs": "^1.11.10"
54
+ "@univerjs/core": "0.1.9",
55
+ "@univerjs/sheets": "0.1.9"
59
56
  },
60
57
  "devDependencies": {
61
- "@wendellhu/redi": "^0.13.0",
58
+ "@wendellhu/redi": "^0.13.3",
62
59
  "rxjs": "^7.8.1",
63
60
  "typescript": "^5.4.5",
64
- "vite": "^5.2.8",
65
- "vitest": "^1.4.0",
66
- "@univerjs/core": "0.1.7",
67
- "@univerjs/sheets": "0.1.7",
68
- "@univerjs/shared": "0.1.7"
61
+ "vite": "^5.2.10",
62
+ "vitest": "^1.5.0",
63
+ "@univerjs/core": "0.1.9",
64
+ "@univerjs/shared": "0.1.9",
65
+ "@univerjs/sheets": "0.1.9"
69
66
  },
70
67
  "scripts": {
71
68
  "dev": "vite",
@@ -1,10 +0,0 @@
1
- import { IMutation } from '@univerjs/core';
2
-
3
- export interface IDataValidationFormulaMarkDirtyParams {
4
- [unitId: string]: {
5
- [sunUnitId: string]: {
6
- [formulaId: string]: boolean;
7
- };
8
- };
9
- }
10
- export declare const DataValidationFormulaMarkDirty: IMutation<IDataValidationFormulaMarkDirtyParams>;