@univerjs/data-validation 0.1.6 → 0.1.8
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 +1 -1
- package/lib/es/index.js +521 -394
- package/lib/types/common/util.d.ts +3 -3
- package/lib/types/controllers/dv-resource.controller.d.ts +10 -0
- package/lib/types/controllers/dv-sheet.controller.d.ts +11 -0
- package/lib/types/index.d.ts +3 -0
- package/lib/types/models/data-validation-manager.d.ts +1 -1
- package/lib/types/models/data-validation-model.d.ts +3 -1
- package/lib/types/plugin.d.ts +4 -2
- package/lib/types/types/const/operator-text-map.d.ts +1 -0
- package/lib/types/types/interfaces/i-formula-input.d.ts +1 -0
- package/lib/umd/index.js +1 -1
- package/package.json +32 -18
package/lib/cjs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var $=Object.defineProperty;var P=(o,t,a)=>t in o?$(o,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):o[t]=a;var u=(o,t,a)=>(P(o,typeof t!="symbol"?t+"":t,a),a);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("@univerjs/core"),v=require("@wendellhu/redi"),E=require("rxjs"),x=require("@univerjs/sheets");var I=(o=>(o.SHEET="sheet",o))(I||{});class D{constructor(){u(this,"_validatorByScopes",new Map);u(this,"_validatorMap",new Map);u(this,"_validatorsChange$",new E.BehaviorSubject(void 0));u(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 q=Object.defineProperty,G=Object.getOwnPropertyDescriptor,j=(o,t,a,e)=>{for(var r=e>1?void 0:e?G(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&&q(t,a,r),r},H=(o,t)=>(a,e)=>t(a,e,o);exports.DataValidationModel=class extends i.Disposable{constructor(a){super();u(this,"_model",new Map);u(this,"_managerCreator");u(this,"_ruleChange$",new E.Subject);u(this,"_validStatusChange$",new E.Subject);u(this,"ruleChange$",this._ruleChange$.asObservable());u(this,"ruleChangeDebounce$",this.ruleChange$.pipe(E.debounceTime(20)));u(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,c=>{this._validStatusChange$.next({unitId:n,subUnitId:d,ruleId:e.uid,status:c})})}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([H(0,i.ILogService)],exports.DataValidationModel);const V={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}},g={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}},h={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 y(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(x.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}]}}var m=(o=>(o[o.SETTING=0]="SETTING",o[o.RANGE=1]="RANGE",o[o.OPTIONS=2]="OPTIONS",o))(m||{});const N={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]}},c=[{id:V.id,params:s}],l=[{id:g.id,params:{unitId:e,subUnitId:r,ruleId:a.uid}}];return d.pushUndoRedo({unitID:e,redoMutations:c,undoMutations:l}),await n.executeCommand(V.id,s),!0}},W=(o,t)=>{const a=o.get(exports.DataValidationModel),{unitId:e,subUnitId:r,ruleId:n}=t;if(Array.isArray(n)){const s=n.map(c=>a.getRuleById(e,r,c)).filter(Boolean);return[{id:V.id,params:{unitId:e,subUnitId:r,rule:s}}]}return[{id:V.id,params:{unitId:e,subUnitId:r,rule:{...a.getRuleById(e,r,n)},index:a.getRuleIndex(e,r,n)}}]},C={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),c=[{id:g.id,params:t}],l=[{id:V.id,params:{unitId:a,subUnitId:e,rule:{...s.getRuleById(a,e,r)},index:s.getRuleIndex(a,e,r)}}];return d.pushUndoRedo({undoMutations:l,redoMutations:c,unitID:t.unitId}),n.executeCommand(g.id,t),!0}},U={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:c}=t,l=r.getRuleById(n,d,s);if(!l)return!1;const p={unitId:n,subUnitId:d,ruleId:s,payload:{type:m.OPTIONS,payload:c}},_=[{id:h.id,params:p}],O={unitId:n,subUnitId:d,ruleId:s,payload:{type:m.OPTIONS,payload:A(l)}},T=[{id:h.id,params:O}];return e.pushUndoRedo({unitID:n,redoMutations:_,undoMutations:T}),a.executeCommand(h.id,p),!0}},w={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(D),{unitId:d,subUnitId:s,ruleId:c,setting:l}=t,p=n.getValidatorItem(l.type);if(!p||!p.validatorFormula(l).success)return!1;const _=r.getRuleById(d,s,c);if(!_)return!1;const O={unitId:d,subUnitId:s,ruleId:c,payload:{type:m.SETTING,payload:l}},T=[{id:h.id,params:O}],b={unitId:d,subUnitId:s,ruleId:c,payload:{type:m.SETTING,payload:y(_)}},B=[{id:h.id,params:b}];return e.pushUndoRedo({unitID:d,redoMutations:T,undoMutations:B}),a.executeCommand(h.id,O),!0}},L={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)],c={unitId:a,subUnitId:e,ruleId:s.map(_=>_.uid)},l=[{id:g.id,params:c}],p=[{id:V.id,params:{unitId:a,subUnitId:e,rule:s}}];return d.pushUndoRedo({redoMutations:l,undoMutations:p,unitID:a}),r.executeCommand(g.id,c),!0}};var F=Object.defineProperty,J=Object.getOwnPropertyDescriptor,z=(o,t,a,e)=>{for(var r=e>1?void 0:e?J(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&&F(t,a,r),r},M=(o,t)=>(a,e)=>t(a,e,o);const K="data-validation";exports.UniverDataValidationPlugin=class extends i.Plugin{constructor(t,a){super(K),this._injector=t,this._commandService=a}onStarting(t){[[exports.DataValidationModel],[D]].forEach(a=>{t.add(a)}),[N,L,U,w,C,V,h,g].forEach(a=>{this._commandService.registerCommand(a)})}};exports.UniverDataValidationPlugin=z([M(0,v.Inject(v.Injector)),M(1,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 X={[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"},Y={[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"};var Z=Object.defineProperty,k=Object.getOwnPropertyDescriptor,aa=(o,t,a,e)=>{for(var r=e>1?void 0:e?k(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&&Z(t,a,r),r},f=(o,t)=>(a,e)=>t(a,e,o);const R="{FORMULA1}",S="{FORMULA2}",ta={[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){u(this,"canvasRender",null);u(this,"dropdown");u(this,"optionsInput");this.localeService=t,this.injector=a}get operatorNames(){return this.operators.map(t=>this.localeService.t(ta[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(X[t.operator]).replace(R,(e=t.formula1)!=null?e:"").replace(S,(r=t.formula2)!=null?r:"");return`${this.titleStr} ${a}`}generateRuleErrorMessage(t){var e,r;return t.operator?`${this.localeService.t(Y[t.operator]).replace(R,(e=t.formula1)!=null?e:"").replace(S,(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:c}=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(c))return!0;const p=this.transform(t,l,a);switch(c){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=aa([f(0,v.Inject(i.LocaleService)),f(1,v.Inject(v.Injector))],exports.BaseDataValidator);class ea extends i.Disposable{constructor(a,e,r){super();u(this,"_dataValidations");u(this,"_dataValidationMap",new Map);u(this,"_dataValidations$",new E.Subject);u(this,"unitId");u(this,"subUnitId");u(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 m.RANGE:{d.ranges=e.payload;break}case m.SETTING:{Object.assign(d,e.payload);break}case m.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}}const ra=[i.DataValidationOperator.BETWEEN,i.DataValidationOperator.NOT_BETWEEN];exports.AddDataValidationCommand=N;exports.AddDataValidationMutation=V;exports.DataValidationManager=ea;exports.DataValidatorRegistryScope=I;exports.DataValidatorRegistryService=D;exports.RemoveAllDataValidationCommand=L;exports.RemoveDataValidationCommand=C;exports.RemoveDataValidationMutation=g;exports.TWO_FORMULA_OPERATOR_COUNT=ra;exports.UpdateDataValidationMutation=h;exports.UpdateDataValidationOptionsCommand=U;exports.UpdateDataValidationSettingCommand=w;exports.UpdateRuleType=m;exports.createDefaultNewRule=Q;exports.getRuleOptions=A;exports.getRuleSetting=y;exports.removeDataValidationUndoFactory=W;
|
|
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;
|