@univerjs/data-validation 0.5.0 → 0.5.1

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 b=Object.defineProperty;var P=(i,a,e)=>a in i?b(i,a,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[a]=e;var p=(i,a,e)=>P(i,typeof a!="symbol"?a+"":a,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("@univerjs/core"),D=require("rxjs");function M(i){return{type:i.type,operator:i.operator,formula1:i.formula1,formula2:i.formula2,allowBlank:i.allowBlank}}function R(i){return{error:i.error,errorStyle:i.errorStyle,errorTitle:i.errorTitle,imeMode:i.imeMode,prompt:i.prompt,promptTitle:i.promptTitle,showDropDown:i.showDropDown,showErrorMessage:i.showErrorMessage,showInputMessage:i.showInputMessage,renderMode:i.renderMode,bizInfo:i.bizInfo}}var m=(i=>(i[i.SETTING=0]="SETTING",i[i.RANGE=1]="RANGE",i[i.OPTIONS=2]="OPTIONS",i[i.ALL=3]="ALL",i))(m||{}),B=Object.defineProperty,x=Object.getOwnPropertyDescriptor,$=(i,a,e,t)=>{for(var r=t>1?void 0:t?x(a,e):a,n=i.length-1,d;n>=0;n--)(d=i[n])&&(r=(t?d(a,e,r):d(r))||r);return t&&r&&B(a,e,r),r},j=(i,a)=>(e,t)=>a(e,t,i);exports.DataValidationModel=class extends o.Disposable{constructor(e){super();p(this,"_model",new Map);p(this,"_ruleChange$",new D.Subject);p(this,"ruleChange$",this._ruleChange$.asObservable());p(this,"ruleChangeDebounce$",this.ruleChange$.pipe(D.debounceTime(20)));this._logService=e,this.disposeWithMe({dispose:()=>{this._ruleChange$.complete()}})}_ensureMap(e,t){this._model.has(e)||this._model.set(e,new Map);const r=this._model.get(e);if(r.has(t))return r.get(t);const n={map:new Map,list:[]};return r.set(t,n),n}_addSubUnitRule(e,t,r){const{map:n,list:d}=e,u=(Array.isArray(t)?t:[t]).filter(l=>!n.has(l.uid));typeof r=="number"&&r<d.length?d.splice(r,0,...u):d.push(...u),u.forEach(l=>{n.set(l.uid,l)})}_removeSubUnitRule(e,t){const{map:r,list:n}=e,d=n.findIndex(s=>s.uid===t);d>-1&&(n.splice(d,1),r.delete(t))}_updateSubUnitRule(e,t,r){const{map:n,list:d}=e,s=n.get(t),u=d.findIndex(c=>t===c.uid);if(!s)throw new Error(`Data validation rule is not found, ruleId: ${t}.`);const l={...s};switch(r.type){case m.RANGE:{l.ranges=r.payload;break}case m.SETTING:{Object.assign(l,M(r.payload));break}case m.OPTIONS:{Object.assign(l,R(r.payload));break}case m.ALL:{Object.assign(l,r.payload);break}}return d[u]=l,n.set(t,l),l}_addRuleSideEffect(e,t,r,n){if(!this._ensureMap(e,t).map.get(r.uid))return{rule:r,type:"add",unitId:e,subUnitId:t,source:n}}addRule(e,t,r,n,d){try{const s=this._ensureMap(e,t),l=(Array.isArray(r)?r:[r]).map(c=>this._addRuleSideEffect(e,t,c,n));this._addSubUnitRule(s,r,d),l.forEach(c=>{c&&this._ruleChange$.next(c)})}catch(s){this._logService.error(s)}}updateRule(e,t,r,n,d){try{const s=this._ensureMap(e,t),u=o.Tools.deepClone(s.map.get(r));if(!u)throw new Error(`Data validation rule is not found, ruleId: ${r}.`);const l=this._updateSubUnitRule(s,r,n);this._ruleChange$.next({rule:l,type:"update",unitId:e,subUnitId:t,source:d,updatePayload:n,oldRule:u})}catch(s){this._logService.error(s)}}removeRule(e,t,r,n){try{const d=this._ensureMap(e,t),s=d.map.get(r);s&&(this._removeSubUnitRule(d,r),this._ruleChange$.next({rule:s,type:"remove",unitId:e,subUnitId:t,source:n}))}catch(d){this._logService.error(d)}}getRuleById(e,t,r){return this._ensureMap(e,t).map.get(r)}getRuleIndex(e,t,r){return this._ensureMap(e,t).list.findIndex(d=>d.uid===r)}getRules(e,t){return[...this._ensureMap(e,t).list]}getUnitRules(e){const t=this._model.get(e);if(!t)return[];const r=[];return t.forEach((n,d)=>{r.push([d,n.list])}),r}deleteUnitRules(e){this._model.delete(e)}getSubUnitIds(e){var t,r;return Array.from((r=(t=this._model.get(e))==null?void 0:t.keys())!=null?r:[])}getAll(){return Array.from(this._model.keys()).map(e=>[e,this.getUnitRules(e)])}};exports.DataValidationModel=$([j(0,o.ILogService)],exports.DataValidationModel);var q=Object.defineProperty,G=Object.getOwnPropertyDescriptor,H=(i,a,e,t)=>{for(var r=t>1?void 0:t?G(a,e):a,n=i.length-1,d;n>=0;n--)(d=i[n])&&(r=(t?d(a,e,r):d(r))||r);return t&&r&&q(a,e,r),r},T=(i,a)=>(e,t)=>a(e,t,i);const Q="SHEET_DATA_VALIDATION_PLUGIN";exports.DataValidationResourceController=class extends o.Disposable{constructor(a,e,t){super(),this._resourceManagerService=a,this._univerInstanceService=e,this._dataValidationModel=t,this._initSnapshot()}_initSnapshot(){const a=t=>{const r=this._dataValidationModel.getUnitRules(t),n={};return r?(r.forEach(([d,s])=>{n[d]=s}),JSON.stringify(n)):""},e=t=>{if(!t)return{};try{return JSON.parse(t)}catch{return{}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:Q,businesses:[o.UniverInstanceType.UNIVER_SHEET],toJson:t=>a(t),parseJson:t=>e(t),onUnLoad:t=>{this._dataValidationModel.deleteUnitRules(t)},onLoad:(t,r)=>{Object.keys(r).forEach(n=>{r[n].forEach(s=>{this._dataValidationModel.addRule(t,n,s,"patched")})})}}))}};exports.DataValidationResourceController=H([T(0,o.IResourceManagerService),T(1,o.IUniverInstanceService),T(2,o.Inject(exports.DataValidationModel))],exports.DataValidationResourceController);var U=(i=>(i.SHEET="sheet",i))(U||{});class A{constructor(){p(this,"_validatorByScopes",new Map);p(this,"_validatorMap",new Map);p(this,"_validatorsChange$",new D.BehaviorSubject(void 0));p(this,"validatorsChange$",this._validatorsChange$.asObservable())}_addValidatorToScope(a,e){this._validatorByScopes.has(e)||this._validatorByScopes.set(e,[]);const t=this._validatorByScopes.get(e);if(t.findIndex(r=>r.id===a.id)>-1)throw new Error(`Validator item with the same id ${a.id} has already been added!`);t.push(a)}_removeValidatorFromScope(a,e){const t=this._validatorByScopes.get(e);if(!t)return;const r=t.findIndex(n=>n.id===a.id);r>-1&&t.splice(r,1)}register(a){return this._validatorMap.set(a.id,a),Array.isArray(a.scopes)?a.scopes.forEach(e=>{this._addValidatorToScope(a,e)}):this._addValidatorToScope(a,a.scopes),this._validatorsChange$.next(),o.toDisposable(()=>{this._validatorMap.delete(a.id),Array.isArray(a.scopes)?a.scopes.forEach(e=>{this._removeValidatorFromScope(a,e)}):this._removeValidatorFromScope(a,a.scopes),this._validatorsChange$.next()})}getValidatorItem(a){return this._validatorMap.get(a)}getValidatorsByScope(a){return this._validatorByScopes.get(a)}}const E={type:o.CommandType.MUTATION,id:"data-validation.mutation.addRule",handler(i,a){if(!a)return!1;const{unitId:e,subUnitId:t,rule:r,index:n,source:d="command"}=a;return i.get(exports.DataValidationModel).addRule(e,t,r,d,n),!0}},V={type:o.CommandType.MUTATION,id:"data-validation.mutation.removeRule",handler(i,a){if(!a)return!1;const{unitId:e,subUnitId:t,ruleId:r,source:n="command"}=a,d=i.get(exports.DataValidationModel);return Array.isArray(r)?r.forEach(s=>{d.removeRule(e,t,s,n)}):d.removeRule(e,t,r,n),!0}},g={type:o.CommandType.MUTATION,id:"data-validation.mutation.updateRule",handler(i,a){if(!a)return!1;const{unitId:e,subUnitId:t,ruleId:r,payload:n,source:d="command"}=a;return i.get(exports.DataValidationModel).updateRule(e,t,r,n,d),!0}},W={type:o.CommandType.COMMAND,id:"data-validation.command.addRule",async handler(i,a){if(i.get(o.ILogService).error("[Deprecated]: `AddDataValidationCommand` is deprecated, please use `AddSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const{rule:t,unitId:r,subUnitId:n}=a,d=i.get(o.ICommandService),s=i.get(o.IUndoRedoService),u={...a,rule:{...a.rule,ranges:[a.rule.range]}},l=[{id:E.id,params:u}],c=[{id:V.id,params:{unitId:r,subUnitId:n,ruleId:t.uid}}];return s.pushUndoRedo({unitID:r,redoMutations:l,undoMutations:c}),await d.executeCommand(E.id,u),!0}},F={type:o.CommandType.COMMAND,id:"data-validation.command.removeRule",handler(i,a){if(i.get(o.ILogService).error("[Deprecated]: `RemoveDataValidationCommand` is deprecated, please use `RemoveSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const{unitId:t,subUnitId:r,ruleId:n}=a,d=i.get(o.ICommandService),s=i.get(o.IUndoRedoService),u=i.get(exports.DataValidationModel),l=[{id:V.id,params:a}],c=[{id:E.id,params:{unitId:t,subUnitId:r,rule:{...u.getRuleById(t,r,n)},index:u.getRuleIndex(t,r,n)}}];return s.pushUndoRedo({undoMutations:c,redoMutations:l,unitID:a.unitId}),d.executeCommand(V.id,a),!0}},J={type:o.CommandType.COMMAND,id:"data-validation.command.updateDataValidationSetting",handler(i,a){if(i.get(o.ILogService).warn("[Deprecated]: `UpdateDataValidationOptionsCommand` is deprecated, please use `UpdateSheetDataValidationOptionsCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const t=i.get(o.ICommandService),r=i.get(o.IUndoRedoService),n=i.get(exports.DataValidationModel),{unitId:d,subUnitId:s,ruleId:u,options:l}=a,c=n.getRuleById(d,s,u);if(!c)return!1;const h={unitId:d,subUnitId:s,ruleId:u,payload:{type:m.OPTIONS,payload:l}},_=[{id:g.id,params:h}],v={unitId:d,subUnitId:s,ruleId:u,payload:{type:m.OPTIONS,payload:R(c)}},O=[{id:g.id,params:v}];return r.pushUndoRedo({unitID:d,redoMutations:_,undoMutations:O}),t.executeCommand(g.id,h),!0}},z={type:o.CommandType.COMMAND,id:"data-validation.command.updateDataValidationOptions",handler(i,a){if(i.get(o.ILogService).error("[Deprecated]: `UpdateDataValidationSettingCommand` is deprecated, please use `UpdateSheetDataValidationSettingCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const t=i.get(o.ICommandService),r=i.get(o.IUndoRedoService),n=i.get(exports.DataValidationModel),d=i.get(A),{unitId:s,subUnitId:u,ruleId:l,setting:c}=a,h=d.getValidatorItem(c.type);if(!h)return!1;const _=n.getRuleById(s,u,l);if(!_)return!1;const v={..._,...c};if(!h.validatorFormula(v,s,u).success)return!1;const O={unitId:s,subUnitId:u,ruleId:l,payload:{type:m.SETTING,payload:{...c,...h.normalizeFormula(v,s,u)}}},L=[{id:g.id,params:O}],C={unitId:s,subUnitId:u,ruleId:l,payload:{type:m.SETTING,payload:M(_)}},w=[{id:g.id,params:C}];return r.pushUndoRedo({unitID:s,redoMutations:L,undoMutations:w}),t.executeCommand(g.id,O),!0}},K={type:o.CommandType.COMMAND,id:"data-validation.command.removeAll",handler(i,a){if(i.get(o.ILogService).error("[Deprecated]: `RemoveAllDataValidationCommand` is deprecated, please use `RemoveSheetAllDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const{unitId:t,subUnitId:r}=a,n=i.get(o.ICommandService),d=i.get(exports.DataValidationModel),s=i.get(o.IUndoRedoService),u=[...d.getRules(t,r)],l={unitId:t,subUnitId:r,ruleId:u.map(_=>_.uid)},c=[{id:V.id,params:l}],h=[{id:E.id,params:{unitId:t,subUnitId:r,rule:u}}];return s.pushUndoRedo({redoMutations:c,undoMutations:h,unitID:t}),n.executeCommand(V.id,l),!0}},Y="data-validation.config",X={};var Z=Object.defineProperty,k=Object.getOwnPropertyDescriptor,aa=(i,a,e,t)=>{for(var r=t>1?void 0:t?k(a,e):a,n=i.length-1,d;n>=0;n--)(d=i[n])&&(r=(t?d(a,e,r):d(r))||r);return t&&r&&Z(a,e,r),r},S=(i,a)=>(e,t)=>a(e,t,i);const ta="UNIVER_DATA_VALIDATION_PLUGIN";var f;exports.UniverDataValidationPlugin=(f=class extends o.Plugin{constructor(a=X,e,t,r){super(),this._config=a,this._injector=e,this._commandService=t,this._configService=r;const{...n}=this._config;this._configService.setConfig(Y,n)}onStarting(){[[exports.DataValidationModel],[A],[exports.DataValidationResourceController]].forEach(a=>this._injector.add(a)),[W,K,J,z,F,E,g,V].forEach(a=>{this._commandService.registerCommand(a)})}onReady(){this._injector.get(exports.DataValidationResourceController)}},p(f,"pluginName",ta),p(f,"type",o.UniverInstanceType.UNIVER_SHEET),f);exports.UniverDataValidationPlugin=aa([S(1,o.Inject(o.Injector)),S(2,o.ICommandService),S(3,o.IConfigService)],exports.UniverDataValidationPlugin);o.DataValidationOperator.BETWEEN+"",o.DataValidationOperator.EQUAL+"",o.DataValidationOperator.GREATER_THAN+"",o.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",o.DataValidationOperator.LESS_THAN+"",o.DataValidationOperator.LESS_THAN_OR_EQUAL+"",o.DataValidationOperator.NOT_BETWEEN+"",o.DataValidationOperator.NOT_EQUAL+"";const ea={[o.DataValidationOperator.BETWEEN]:"dataValidation.ruleName.between",[o.DataValidationOperator.EQUAL]:"dataValidation.ruleName.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.ruleName.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.ruleName.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.ruleName.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.ruleName.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.ruleName.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.ruleName.notEqual"},ra={[o.DataValidationOperator.BETWEEN]:"dataValidation.errorMsg.between",[o.DataValidationOperator.EQUAL]:"dataValidation.errorMsg.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.errorMsg.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.errorMsg.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.errorMsg.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.errorMsg.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.errorMsg.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.errorMsg.notEqual"},oa={[o.DataValidationOperator.BETWEEN]:"dataValidation.textLength.errorMsg.between",[o.DataValidationOperator.EQUAL]:"dataValidation.textLength.errorMsg.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.textLength.errorMsg.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.textLength.errorMsg.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.textLength.errorMsg.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.textLength.errorMsg.notEqual"},ia=[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.NOT_BETWEEN];var na=Object.defineProperty,da=Object.getOwnPropertyDescriptor,sa=(i,a,e,t)=>{for(var r=t>1?void 0:t?da(a,e):a,n=i.length-1,d;n>=0;n--)(d=i[n])&&(r=(t?d(a,e,r):d(r))||r);return t&&r&&na(a,e,r),r},I=(i,a)=>(e,t)=>a(e,t,i);const N="{FORMULA1}",y="{FORMULA2}",la={[o.DataValidationOperator.BETWEEN]:"dataValidation.operators.between",[o.DataValidationOperator.EQUAL]:"dataValidation.operators.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.operators.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.operators.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.operators.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.operators.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.operators.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.operators.notEqual"};exports.BaseDataValidator=class{constructor(a,e){p(this,"formulaInput");p(this,"canvasRender",null);p(this,"dropdown");p(this,"optionsInput");p(this,"skipDefaultFontRender");this.localeService=a,this.injector=e}get operatorNames(){return this.operators.map(a=>this.localeService.t(la[a]))}get titleStr(){return this.localeService.t(this.title)}generateRuleName(a){var t,r;if(!a.operator)return this.titleStr;const e=this.localeService.t(ea[a.operator]).replace(N,(t=a.formula1)!=null?t:"").replace(y,(r=a.formula2)!=null?r:"");return`${this.titleStr} ${e}`}generateRuleErrorMessage(a,e){var r,n;return a.operator?`${this.localeService.t(ra[a.operator]).replace(N,(r=a.formula1)!=null?r:"").replace(y,(n=a.formula2)!=null?n:"")}`:this.titleStr}getExtraStyle(a,e,t,r,n){}getRuleFinalError(a,e){return a.showErrorMessage&&a.error?a.error:this.generateRuleErrorMessage(a,e)}isEmptyCellValue(a){return a===""||a===void 0||a===null}normalizeFormula(a,e,t){return{formula1:a.formula1,formula2:a.formula2}}async isValidType(a,e,t){return!0}transform(a,e,t){return a}async validatorIsEqual(a,e,t){return!0}async validatorIsNotEqual(a,e,t){return!0}async validatorIsBetween(a,e,t){return!0}async validatorIsNotBetween(a,e,t){return!0}async validatorIsGreaterThan(a,e,t){return!0}async validatorIsGreaterThanOrEqual(a,e,t){return!0}async validatorIsLessThan(a,e,t){return!0}async validatorIsLessThanOrEqual(a,e,t){return!0}async validator(a,e){const{value:t,unitId:r,subUnitId:n}=a,d=this.isEmptyCellValue(t),{allowBlank:s=!0,operator:u}=e;if(d)return s;const l=await this.parseFormula(e,r,n,a.row,a.column);if(!l.isFormulaValid||!await this.isValidType(a,l,e))return!1;if(!o.Tools.isDefine(u))return!0;const c=this.transform(a,l,e);switch(u){case o.DataValidationOperator.BETWEEN:return this.validatorIsBetween(c,l,e);case o.DataValidationOperator.EQUAL:return this.validatorIsEqual(c,l,e);case o.DataValidationOperator.GREATER_THAN:return this.validatorIsGreaterThan(c,l,e);case o.DataValidationOperator.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(c,l,e);case o.DataValidationOperator.LESS_THAN:return this.validatorIsLessThan(c,l,e);case o.DataValidationOperator.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(c,l,e);case o.DataValidationOperator.NOT_BETWEEN:return this.validatorIsNotBetween(c,l,e);case o.DataValidationOperator.NOT_EQUAL:return this.validatorIsNotEqual(c,l,e);default:throw new Error("Unknown operator.")}}};exports.BaseDataValidator=sa([I(0,o.Inject(o.LocaleService)),I(1,o.Inject(o.Injector))],exports.BaseDataValidator);exports.AddDataValidationMutation=E;exports.DataValidatorRegistryScope=U;exports.DataValidatorRegistryService=A;exports.RemoveDataValidationMutation=V;exports.TWO_FORMULA_OPERATOR_COUNT=ia;exports.TextLengthErrorTitleMap=oa;exports.UpdateDataValidationMutation=g;exports.UpdateRuleType=m;exports.getRuleOptions=R;exports.getRuleSetting=M;
1
+ "use strict";var w=Object.defineProperty;var P=(i,a,e)=>a in i?w(i,a,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[a]=e;var p=(i,a,e)=>P(i,typeof a!="symbol"?a+"":a,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("@univerjs/core"),D=require("rxjs");function N(i){return{type:i.type,operator:i.operator,formula1:i.formula1,formula2:i.formula2,allowBlank:i.allowBlank}}function M(i){return{error:i.error,errorStyle:i.errorStyle,errorTitle:i.errorTitle,imeMode:i.imeMode,prompt:i.prompt,promptTitle:i.promptTitle,showDropDown:i.showDropDown,showErrorMessage:i.showErrorMessage,showInputMessage:i.showInputMessage,renderMode:i.renderMode,bizInfo:i.bizInfo}}var m=(i=>(i[i.SETTING=0]="SETTING",i[i.RANGE=1]="RANGE",i[i.OPTIONS=2]="OPTIONS",i[i.ALL=3]="ALL",i))(m||{}),B=Object.defineProperty,x=Object.getOwnPropertyDescriptor,$=(i,a,e,r)=>{for(var t=r>1?void 0:r?x(a,e):a,n=i.length-1,d;n>=0;n--)(d=i[n])&&(t=(r?d(a,e,t):d(t))||t);return r&&t&&B(a,e,t),t},j=(i,a)=>(e,r)=>a(e,r,i);exports.DataValidationModel=class extends o.Disposable{constructor(e){super();p(this,"_model",new Map);p(this,"_ruleChange$",new D.Subject);p(this,"ruleChange$",this._ruleChange$.asObservable());p(this,"ruleChangeDebounce$",this.ruleChange$.pipe(D.debounceTime(20)));this._logService=e,this.disposeWithMe({dispose:()=>{this._ruleChange$.complete()}})}_ensureMap(e,r){this._model.has(e)||this._model.set(e,new Map);const t=this._model.get(e);if(t.has(r))return t.get(r);const n={map:new Map,list:[]};return t.set(r,n),n}_addSubUnitRule(e,r,t){const{map:n,list:d}=e,u=(Array.isArray(r)?r:[r]).filter(l=>!n.has(l.uid));typeof t=="number"&&t<d.length?d.splice(t,0,...u):d.push(...u),u.forEach(l=>{n.set(l.uid,l)})}_removeSubUnitRule(e,r){const{map:t,list:n}=e,d=n.findIndex(s=>s.uid===r);d>-1&&(n.splice(d,1),t.delete(r))}_updateSubUnitRule(e,r,t){const{map:n,list:d}=e,s=n.get(r),u=d.findIndex(c=>r===c.uid);if(!s)throw new Error(`Data validation rule is not found, ruleId: ${r}.`);const l={...s};switch(t.type){case m.RANGE:{l.ranges=t.payload;break}case m.SETTING:{Object.assign(l,N(t.payload));break}case m.OPTIONS:{Object.assign(l,M(t.payload));break}case m.ALL:{Object.assign(l,t.payload);break}}return d[u]=l,n.set(r,l),l}_addRuleSideEffect(e,r,t,n){if(!this._ensureMap(e,r).map.get(t.uid))return{rule:t,type:"add",unitId:e,subUnitId:r,source:n}}addRule(e,r,t,n,d){try{const s=this._ensureMap(e,r),l=(Array.isArray(t)?t:[t]).map(c=>this._addRuleSideEffect(e,r,c,n));this._addSubUnitRule(s,t,d),l.forEach(c=>{c&&this._ruleChange$.next(c)})}catch(s){this._logService.error(s)}}updateRule(e,r,t,n,d){try{const s=this._ensureMap(e,r),u=o.Tools.deepClone(s.map.get(t));if(!u)throw new Error(`Data validation rule is not found, ruleId: ${t}.`);const l=this._updateSubUnitRule(s,t,n);this._ruleChange$.next({rule:l,type:"update",unitId:e,subUnitId:r,source:d,updatePayload:n,oldRule:u})}catch(s){this._logService.error(s)}}removeRule(e,r,t,n){try{const d=this._ensureMap(e,r),s=d.map.get(t);s&&(this._removeSubUnitRule(d,t),this._ruleChange$.next({rule:s,type:"remove",unitId:e,subUnitId:r,source:n}))}catch(d){this._logService.error(d)}}getRuleById(e,r,t){return this._ensureMap(e,r).map.get(t)}getRuleIndex(e,r,t){return this._ensureMap(e,r).list.findIndex(d=>d.uid===t)}getRules(e,r){return[...this._ensureMap(e,r).list]}getUnitRules(e){const r=this._model.get(e);if(!r)return[];const t=[];return r.forEach((n,d)=>{t.push([d,n.list])}),t}deleteUnitRules(e){this._model.delete(e)}getSubUnitIds(e){var r,t;return Array.from((t=(r=this._model.get(e))==null?void 0:r.keys())!=null?t:[])}getAll(){return Array.from(this._model.keys()).map(e=>[e,this.getUnitRules(e)])}};exports.DataValidationModel=$([j(0,o.ILogService)],exports.DataValidationModel);var q=Object.defineProperty,G=Object.getOwnPropertyDescriptor,H=(i,a,e,r)=>{for(var t=r>1?void 0:r?G(a,e):a,n=i.length-1,d;n>=0;n--)(d=i[n])&&(t=(r?d(a,e,t):d(t))||t);return r&&t&&q(a,e,t),t},T=(i,a)=>(e,r)=>a(e,r,i);const Q="SHEET_DATA_VALIDATION_PLUGIN";exports.DataValidationResourceController=class extends o.Disposable{constructor(a,e,r){super(),this._resourceManagerService=a,this._univerInstanceService=e,this._dataValidationModel=r,this._initSnapshot()}_initSnapshot(){const a=r=>{const t=this._dataValidationModel.getUnitRules(r),n={};return t?(t.forEach(([d,s])=>{n[d]=s}),JSON.stringify(n)):""},e=r=>{if(!r)return{};try{return JSON.parse(r)}catch{return{}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:Q,businesses:[o.UniverInstanceType.UNIVER_SHEET],toJson:r=>a(r),parseJson:r=>e(r),onUnLoad:r=>{this._dataValidationModel.deleteUnitRules(r)},onLoad:(r,t)=>{Object.keys(t).forEach(n=>{t[n].forEach(s=>{this._dataValidationModel.addRule(r,n,s,"patched")})})}}))}};exports.DataValidationResourceController=H([T(0,o.IResourceManagerService),T(1,o.IUniverInstanceService),T(2,o.Inject(exports.DataValidationModel))],exports.DataValidationResourceController);var U=(i=>(i.SHEET="sheet",i))(U||{});class R{constructor(){p(this,"_validatorByScopes",new Map);p(this,"_validatorMap",new Map);p(this,"_validatorsChange$",new D.BehaviorSubject(void 0));p(this,"validatorsChange$",this._validatorsChange$.asObservable())}_addValidatorToScope(a,e){this._validatorByScopes.has(e)||this._validatorByScopes.set(e,[]);const r=this._validatorByScopes.get(e);if(r.findIndex(t=>t.id===a.id)>-1)throw new Error(`Validator item with the same id ${a.id} has already been added!`);r.push(a)}_removeValidatorFromScope(a,e){const r=this._validatorByScopes.get(e);if(!r)return;const t=r.findIndex(n=>n.id===a.id);t>-1&&r.splice(t,1)}register(a){return this._validatorMap.set(a.id,a),Array.isArray(a.scopes)?a.scopes.forEach(e=>{this._addValidatorToScope(a,e)}):this._addValidatorToScope(a,a.scopes),this._validatorsChange$.next(),o.toDisposable(()=>{this._validatorMap.delete(a.id),Array.isArray(a.scopes)?a.scopes.forEach(e=>{this._removeValidatorFromScope(a,e)}):this._removeValidatorFromScope(a,a.scopes),this._validatorsChange$.next()})}getValidatorItem(a){return this._validatorMap.get(a)}getValidatorsByScope(a){return this._validatorByScopes.get(a)}}const v={type:o.CommandType.MUTATION,id:"data-validation.mutation.addRule",handler(i,a){if(!a)return!1;const{unitId:e,subUnitId:r,rule:t,index:n,source:d="command"}=a;return i.get(exports.DataValidationModel).addRule(e,r,t,d,n),!0}},V={type:o.CommandType.MUTATION,id:"data-validation.mutation.removeRule",handler(i,a){if(!a)return!1;const{unitId:e,subUnitId:r,ruleId:t,source:n="command"}=a,d=i.get(exports.DataValidationModel);return Array.isArray(t)?t.forEach(s=>{d.removeRule(e,r,s,n)}):d.removeRule(e,r,t,n),!0}},_={type:o.CommandType.MUTATION,id:"data-validation.mutation.updateRule",handler(i,a){if(!a)return!1;const{unitId:e,subUnitId:r,ruleId:t,payload:n,source:d="command"}=a;return i.get(exports.DataValidationModel).updateRule(e,r,t,n,d),!0}},F={type:o.CommandType.COMMAND,id:"data-validation.command.addRule",async handler(i,a){if(i.get(o.ILogService).error("[Deprecated]: `AddDataValidationCommand` is deprecated, please use `AddSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const{rule:r,unitId:t,subUnitId:n}=a,d=i.get(o.ICommandService),s=i.get(o.IUndoRedoService),u={...a,rule:{...a.rule,ranges:[a.rule.range]}},l=[{id:v.id,params:u}],c=[{id:V.id,params:{unitId:t,subUnitId:n,ruleId:r.uid}}];return s.pushUndoRedo({unitID:t,redoMutations:l,undoMutations:c}),await d.executeCommand(v.id,u),!0}},W={type:o.CommandType.COMMAND,id:"data-validation.command.removeRule",handler(i,a){if(i.get(o.ILogService).error("[Deprecated]: `RemoveDataValidationCommand` is deprecated, please use `RemoveSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const{unitId:r,subUnitId:t,ruleId:n}=a,d=i.get(o.ICommandService),s=i.get(o.IUndoRedoService),u=i.get(exports.DataValidationModel),l=[{id:V.id,params:a}],c=[{id:v.id,params:{unitId:r,subUnitId:t,rule:{...u.getRuleById(r,t,n)},index:u.getRuleIndex(r,t,n)}}];return s.pushUndoRedo({undoMutations:c,redoMutations:l,unitID:a.unitId}),d.executeCommand(V.id,a),!0}},J={type:o.CommandType.COMMAND,id:"data-validation.command.updateDataValidationSetting",handler(i,a){if(i.get(o.ILogService).warn("[Deprecated]: `UpdateDataValidationOptionsCommand` is deprecated, please use `UpdateSheetDataValidationOptionsCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const r=i.get(o.ICommandService),t=i.get(o.IUndoRedoService),n=i.get(exports.DataValidationModel),{unitId:d,subUnitId:s,ruleId:u,options:l}=a,c=n.getRuleById(d,s,u);if(!c)return!1;const h={unitId:d,subUnitId:s,ruleId:u,payload:{type:m.OPTIONS,payload:l}},g=[{id:_.id,params:h}],E={unitId:d,subUnitId:s,ruleId:u,payload:{type:m.OPTIONS,payload:M(c)}},O=[{id:_.id,params:E}];return t.pushUndoRedo({unitID:d,redoMutations:g,undoMutations:O}),r.executeCommand(_.id,h),!0}},z={type:o.CommandType.COMMAND,id:"data-validation.command.updateDataValidationOptions",handler(i,a){if(i.get(o.ILogService).error("[Deprecated]: `UpdateDataValidationSettingCommand` is deprecated, please use `UpdateSheetDataValidationSettingCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const r=i.get(o.ICommandService),t=i.get(o.IUndoRedoService),n=i.get(exports.DataValidationModel),d=i.get(R),{unitId:s,subUnitId:u,ruleId:l,setting:c}=a,h=d.getValidatorItem(c.type);if(!h)return!1;const g=n.getRuleById(s,u,l);if(!g)return!1;const E={...g,...c};if(!h.validatorFormula(E,s,u).success)return!1;const O={unitId:s,subUnitId:u,ruleId:l,payload:{type:m.SETTING,payload:{...c,...h.normalizeFormula(E,s,u)}}},L=[{id:_.id,params:O}],C={unitId:s,subUnitId:u,ruleId:l,payload:{type:m.SETTING,payload:N(g)}},b=[{id:_.id,params:C}];return t.pushUndoRedo({unitID:s,redoMutations:L,undoMutations:b}),r.executeCommand(_.id,O),!0}},K={type:o.CommandType.COMMAND,id:"data-validation.command.removeAll",handler(i,a){if(i.get(o.ILogService).error("[Deprecated]: `RemoveAllDataValidationCommand` is deprecated, please use `RemoveSheetAllDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const{unitId:r,subUnitId:t}=a,n=i.get(o.ICommandService),d=i.get(exports.DataValidationModel),s=i.get(o.IUndoRedoService),u=[...d.getRules(r,t)],l={unitId:r,subUnitId:t,ruleId:u.map(g=>g.uid)},c=[{id:V.id,params:l}],h=[{id:v.id,params:{unitId:r,subUnitId:t,rule:u}}];return s.pushUndoRedo({redoMutations:c,undoMutations:h,unitID:r}),n.executeCommand(V.id,l),!0}},Y="data-validation.config",X={};var Z=Object.defineProperty,k=Object.getOwnPropertyDescriptor,aa=(i,a,e,r)=>{for(var t=r>1?void 0:r?k(a,e):a,n=i.length-1,d;n>=0;n--)(d=i[n])&&(t=(r?d(a,e,t):d(t))||t);return r&&t&&Z(a,e,t),t},S=(i,a)=>(e,r)=>a(e,r,i);const ta="UNIVER_DATA_VALIDATION_PLUGIN";var f;exports.UniverDataValidationPlugin=(f=class extends o.Plugin{constructor(a=X,e,r,t){super(),this._config=a,this._injector=e,this._commandService=r,this._configService=t;const{...n}=this._config;this._configService.setConfig(Y,n)}onStarting(){[[exports.DataValidationModel],[R],[exports.DataValidationResourceController]].forEach(a=>this._injector.add(a)),[F,K,J,z,W,v,_,V].forEach(a=>{this._commandService.registerCommand(a)})}onReady(){this._injector.get(exports.DataValidationResourceController)}},p(f,"pluginName",ta),p(f,"type",o.UniverInstanceType.UNIVER_SHEET),f);exports.UniverDataValidationPlugin=aa([S(1,o.Inject(o.Injector)),S(2,o.ICommandService),S(3,o.IConfigService)],exports.UniverDataValidationPlugin);o.DataValidationOperator.BETWEEN+"",o.DataValidationOperator.EQUAL+"",o.DataValidationOperator.GREATER_THAN+"",o.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",o.DataValidationOperator.LESS_THAN+"",o.DataValidationOperator.LESS_THAN_OR_EQUAL+"",o.DataValidationOperator.NOT_BETWEEN+"",o.DataValidationOperator.NOT_EQUAL+"";const ea={[o.DataValidationOperator.BETWEEN]:"dataValidation.ruleName.between",[o.DataValidationOperator.EQUAL]:"dataValidation.ruleName.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.ruleName.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.ruleName.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.ruleName.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.ruleName.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.ruleName.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.ruleName.notEqual"},ra={[o.DataValidationOperator.BETWEEN]:"dataValidation.errorMsg.between",[o.DataValidationOperator.EQUAL]:"dataValidation.errorMsg.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.errorMsg.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.errorMsg.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.errorMsg.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.errorMsg.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.errorMsg.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.errorMsg.notEqual"},oa={[o.DataValidationOperator.BETWEEN]:"dataValidation.textLength.errorMsg.between",[o.DataValidationOperator.EQUAL]:"dataValidation.textLength.errorMsg.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.textLength.errorMsg.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.textLength.errorMsg.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.textLength.errorMsg.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.textLength.errorMsg.notEqual"},ia=[o.DataValidationOperator.BETWEEN,o.DataValidationOperator.NOT_BETWEEN];var na=Object.defineProperty,da=Object.getOwnPropertyDescriptor,sa=(i,a,e,r)=>{for(var t=r>1?void 0:r?da(a,e):a,n=i.length-1,d;n>=0;n--)(d=i[n])&&(t=(r?d(a,e,t):d(t))||t);return r&&t&&na(a,e,t),t},A=(i,a)=>(e,r)=>a(e,r,i);const I="{FORMULA1}",y="{FORMULA2}",la={[o.DataValidationOperator.BETWEEN]:"dataValidation.operators.between",[o.DataValidationOperator.EQUAL]:"dataValidation.operators.equal",[o.DataValidationOperator.GREATER_THAN]:"dataValidation.operators.greaterThan",[o.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.operators.greaterThanOrEqual",[o.DataValidationOperator.LESS_THAN]:"dataValidation.operators.lessThan",[o.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.operators.lessThanOrEqual",[o.DataValidationOperator.NOT_BETWEEN]:"dataValidation.operators.notBetween",[o.DataValidationOperator.NOT_EQUAL]:"dataValidation.operators.notEqual"};exports.BaseDataValidator=class{constructor(a,e){p(this,"offsetFormulaByRange",!0);p(this,"formulaInput");p(this,"canvasRender",null);p(this,"dropdown");p(this,"optionsInput");p(this,"skipDefaultFontRender");this.localeService=a,this.injector=e}get operatorNames(){return this.operators.map(a=>this.localeService.t(la[a]))}get titleStr(){return this.localeService.t(this.title)}generateRuleName(a){var r,t;if(!a.operator)return this.titleStr;const e=this.localeService.t(ea[a.operator]).replace(I,(r=a.formula1)!=null?r:"").replace(y,(t=a.formula2)!=null?t:"");return`${this.titleStr} ${e}`}generateRuleErrorMessage(a,e){var t,n;return a.operator?`${this.localeService.t(ra[a.operator]).replace(I,(t=a.formula1)!=null?t:"").replace(y,(n=a.formula2)!=null?n:"")}`:this.titleStr}getExtraStyle(a,e,r,t,n){}getRuleFinalError(a,e){return a.showErrorMessage&&a.error?a.error:this.generateRuleErrorMessage(a,e)}isEmptyCellValue(a){return a===""||a===void 0||a===null}normalizeFormula(a,e,r){return{formula1:a.formula1,formula2:a.formula2}}async isValidType(a,e,r){return!0}transform(a,e,r){return a}async validatorIsEqual(a,e,r){const{formula1:t}=e,{value:n}=a;return Number.isNaN(t)?!0:n===t}async validatorIsNotEqual(a,e,r){const{formula1:t}=e;return Number.isNaN(t)?!0:a.value!==t}async validatorIsBetween(a,e,r){const{formula1:t,formula2:n}=e;if(Number.isNaN(t)||Number.isNaN(n))return!0;const d=Math.min(t,n),s=Math.max(t,n);return a.value>=d&&a.value<=s}async validatorIsNotBetween(a,e,r){const{formula1:t,formula2:n}=e;if(Number.isNaN(t)||Number.isNaN(n))return!0;const d=Math.min(t,n),s=Math.max(t,n);return a.value<d||a.value>s}async validatorIsGreaterThan(a,e,r){const{formula1:t}=e;return Number.isNaN(t)?!0:a.value>t}async validatorIsGreaterThanOrEqual(a,e,r){const{formula1:t}=e;return Number.isNaN(t)?!0:a.value>=t}async validatorIsLessThan(a,e,r){const{formula1:t}=e;return Number.isNaN(t)?!0:a.value<t}async validatorIsLessThanOrEqual(a,e,r){const{formula1:t}=e;return Number.isNaN(t)?!0:a.value<=t}async validator(a,e){const{value:r,unitId:t,subUnitId:n}=a,d=this.isEmptyCellValue(r),{allowBlank:s=!0,operator:u}=e;if(d)return s;const l=await this.parseFormula(e,t,n,a.row,a.column);if(!l.isFormulaValid||!await this.isValidType(a,l,e))return!1;if(!o.Tools.isDefine(u))return!0;const c=this.transform(a,l,e);switch(u){case o.DataValidationOperator.BETWEEN:return this.validatorIsBetween(c,l,e);case o.DataValidationOperator.EQUAL:return this.validatorIsEqual(c,l,e);case o.DataValidationOperator.GREATER_THAN:return this.validatorIsGreaterThan(c,l,e);case o.DataValidationOperator.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(c,l,e);case o.DataValidationOperator.LESS_THAN:return this.validatorIsLessThan(c,l,e);case o.DataValidationOperator.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(c,l,e);case o.DataValidationOperator.NOT_BETWEEN:return this.validatorIsNotBetween(c,l,e);case o.DataValidationOperator.NOT_EQUAL:return this.validatorIsNotEqual(c,l,e);default:throw new Error("Unknown operator.")}}};exports.BaseDataValidator=sa([A(0,o.Inject(o.LocaleService)),A(1,o.Inject(o.Injector))],exports.BaseDataValidator);exports.AddDataValidationMutation=v;exports.DataValidatorRegistryScope=U;exports.DataValidatorRegistryService=R;exports.RemoveDataValidationMutation=V;exports.TWO_FORMULA_OPERATOR_COUNT=ia;exports.TextLengthErrorTitleMap=oa;exports.UpdateDataValidationMutation=_;exports.UpdateRuleType=m;exports.getRuleOptions=M;exports.getRuleSetting=N;
package/lib/es/index.js CHANGED
@@ -1,7 +1,7 @@
1
- var F = Object.defineProperty;
2
- var J = (t, e, a) => e in t ? F(t, e, { enumerable: !0, configurable: !0, writable: !0, value: a }) : t[e] = a;
3
- var c = (t, e, a) => J(t, typeof e != "symbol" ? e + "" : e, a);
4
- import { Disposable as P, Tools as B, ILogService as T, Inject as O, UniverInstanceType as x, IResourceManagerService as z, IUniverInstanceService as K, toDisposable as Y, CommandType as E, ICommandService as S, IUndoRedoService as M, Plugin as X, Injector as $, IConfigService as Z, DataValidationOperator as s, LocaleService as k } from "@univerjs/core";
1
+ var W = Object.defineProperty;
2
+ var J = (t, e, r) => e in t ? W(t, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[e] = r;
3
+ var c = (t, e, r) => J(t, typeof e != "symbol" ? e + "" : e, r);
4
+ import { Disposable as P, Tools as B, ILogService as N, Inject as O, UniverInstanceType as x, IResourceManagerService as z, IUniverInstanceService as K, toDisposable as Y, CommandType as E, ICommandService as T, IUndoRedoService as A, Plugin as X, Injector as $, IConfigService as Z, DataValidationOperator as s, LocaleService as k } from "@univerjs/core";
5
5
  import { Subject as ee, debounceTime as te, BehaviorSubject as ae } from "rxjs";
6
6
  function G(t) {
7
7
  return {
@@ -27,12 +27,12 @@ function q(t) {
27
27
  bizInfo: t.bizInfo
28
28
  };
29
29
  }
30
- var m = /* @__PURE__ */ ((t) => (t[t.SETTING = 0] = "SETTING", t[t.RANGE = 1] = "RANGE", t[t.OPTIONS = 2] = "OPTIONS", t[t.ALL = 3] = "ALL", t))(m || {}), re = Object.defineProperty, oe = Object.getOwnPropertyDescriptor, ne = (t, e, a, r) => {
31
- for (var o = r > 1 ? void 0 : r ? oe(e, a) : e, n = t.length - 1, i; n >= 0; n--)
32
- (i = t[n]) && (o = (r ? i(e, a, o) : i(o)) || o);
33
- return r && o && re(e, a, o), o;
34
- }, ie = (t, e) => (a, r) => e(a, r, t);
35
- let h = class extends P {
30
+ var h = /* @__PURE__ */ ((t) => (t[t.SETTING = 0] = "SETTING", t[t.RANGE = 1] = "RANGE", t[t.OPTIONS = 2] = "OPTIONS", t[t.ALL = 3] = "ALL", t))(h || {}), re = Object.defineProperty, oe = Object.getOwnPropertyDescriptor, ne = (t, e, r, a) => {
31
+ for (var o = a > 1 ? void 0 : a ? oe(e, r) : e, n = t.length - 1, i; n >= 0; n--)
32
+ (i = t[n]) && (o = (a ? i(e, r, o) : i(o)) || o);
33
+ return a && o && re(e, r, o), o;
34
+ }, ie = (t, e) => (r, a) => e(r, a, t);
35
+ let m = class extends P {
36
36
  constructor(e) {
37
37
  super();
38
38
  c(this, "_model", /* @__PURE__ */ new Map());
@@ -45,80 +45,80 @@ let h = class extends P {
45
45
  }
46
46
  });
47
47
  }
48
- _ensureMap(e, a) {
48
+ _ensureMap(e, r) {
49
49
  this._model.has(e) || this._model.set(e, /* @__PURE__ */ new Map());
50
- const r = this._model.get(e);
51
- if (r.has(a))
52
- return r.get(a);
50
+ const a = this._model.get(e);
51
+ if (a.has(r))
52
+ return a.get(r);
53
53
  const o = { map: /* @__PURE__ */ new Map(), list: [] };
54
- return r.set(a, o), o;
54
+ return a.set(r, o), o;
55
55
  }
56
- _addSubUnitRule(e, a, r) {
57
- const { map: o, list: n } = e, l = (Array.isArray(a) ? a : [a]).filter((d) => !o.has(d.uid));
58
- typeof r == "number" && r < n.length ? n.splice(r, 0, ...l) : n.push(...l), l.forEach((d) => {
56
+ _addSubUnitRule(e, r, a) {
57
+ const { map: o, list: n } = e, l = (Array.isArray(r) ? r : [r]).filter((d) => !o.has(d.uid));
58
+ typeof a == "number" && a < n.length ? n.splice(a, 0, ...l) : n.push(...l), l.forEach((d) => {
59
59
  o.set(d.uid, d);
60
60
  });
61
61
  }
62
- _removeSubUnitRule(e, a) {
63
- const { map: r, list: o } = e, n = o.findIndex((i) => i.uid === a);
64
- n > -1 && (o.splice(n, 1), r.delete(a));
62
+ _removeSubUnitRule(e, r) {
63
+ const { map: a, list: o } = e, n = o.findIndex((i) => i.uid === r);
64
+ n > -1 && (o.splice(n, 1), a.delete(r));
65
65
  }
66
- _updateSubUnitRule(e, a, r) {
67
- const { map: o, list: n } = e, i = o.get(a), l = n.findIndex((u) => a === u.uid);
66
+ _updateSubUnitRule(e, r, a) {
67
+ const { map: o, list: n } = e, i = o.get(r), l = n.findIndex((u) => r === u.uid);
68
68
  if (!i)
69
- throw new Error(`Data validation rule is not found, ruleId: ${a}.`);
69
+ throw new Error(`Data validation rule is not found, ruleId: ${r}.`);
70
70
  const d = { ...i };
71
- switch (r.type) {
72
- case m.RANGE: {
73
- d.ranges = r.payload;
71
+ switch (a.type) {
72
+ case h.RANGE: {
73
+ d.ranges = a.payload;
74
74
  break;
75
75
  }
76
- case m.SETTING: {
77
- Object.assign(d, G(r.payload));
76
+ case h.SETTING: {
77
+ Object.assign(d, G(a.payload));
78
78
  break;
79
79
  }
80
- case m.OPTIONS: {
81
- Object.assign(d, q(r.payload));
80
+ case h.OPTIONS: {
81
+ Object.assign(d, q(a.payload));
82
82
  break;
83
83
  }
84
- case m.ALL: {
85
- Object.assign(d, r.payload);
84
+ case h.ALL: {
85
+ Object.assign(d, a.payload);
86
86
  break;
87
87
  }
88
88
  }
89
- return n[l] = d, o.set(a, d), d;
89
+ return n[l] = d, o.set(r, d), d;
90
90
  }
91
- _addRuleSideEffect(e, a, r, o) {
92
- if (!this._ensureMap(e, a).map.get(r.uid))
91
+ _addRuleSideEffect(e, r, a, o) {
92
+ if (!this._ensureMap(e, r).map.get(a.uid))
93
93
  return {
94
- rule: r,
94
+ rule: a,
95
95
  type: "add",
96
96
  unitId: e,
97
- subUnitId: a,
97
+ subUnitId: r,
98
98
  source: o
99
99
  };
100
100
  }
101
- addRule(e, a, r, o, n) {
101
+ addRule(e, r, a, o, n) {
102
102
  try {
103
- const i = this._ensureMap(e, a), d = (Array.isArray(r) ? r : [r]).map((u) => this._addRuleSideEffect(e, a, u, o));
104
- this._addSubUnitRule(i, r, n), d.forEach((u) => {
103
+ const i = this._ensureMap(e, r), d = (Array.isArray(a) ? a : [a]).map((u) => this._addRuleSideEffect(e, r, u, o));
104
+ this._addSubUnitRule(i, a, n), d.forEach((u) => {
105
105
  u && this._ruleChange$.next(u);
106
106
  });
107
107
  } catch (i) {
108
108
  this._logService.error(i);
109
109
  }
110
110
  }
111
- updateRule(e, a, r, o, n) {
111
+ updateRule(e, r, a, o, n) {
112
112
  try {
113
- const i = this._ensureMap(e, a), l = B.deepClone(i.map.get(r));
113
+ const i = this._ensureMap(e, r), l = B.deepClone(i.map.get(a));
114
114
  if (!l)
115
- throw new Error(`Data validation rule is not found, ruleId: ${r}.`);
116
- const d = this._updateSubUnitRule(i, r, o);
115
+ throw new Error(`Data validation rule is not found, ruleId: ${a}.`);
116
+ const d = this._updateSubUnitRule(i, a, o);
117
117
  this._ruleChange$.next({
118
118
  rule: d,
119
119
  type: "update",
120
120
  unitId: e,
121
- subUnitId: a,
121
+ subUnitId: r,
122
122
  source: n,
123
123
  updatePayload: o,
124
124
  oldRule: l
@@ -127,73 +127,73 @@ let h = class extends P {
127
127
  this._logService.error(i);
128
128
  }
129
129
  }
130
- removeRule(e, a, r, o) {
130
+ removeRule(e, r, a, o) {
131
131
  try {
132
- const n = this._ensureMap(e, a), i = n.map.get(r);
133
- i && (this._removeSubUnitRule(n, r), this._ruleChange$.next({
132
+ const n = this._ensureMap(e, r), i = n.map.get(a);
133
+ i && (this._removeSubUnitRule(n, a), this._ruleChange$.next({
134
134
  rule: i,
135
135
  type: "remove",
136
136
  unitId: e,
137
- subUnitId: a,
137
+ subUnitId: r,
138
138
  source: o
139
139
  }));
140
140
  } catch (n) {
141
141
  this._logService.error(n);
142
142
  }
143
143
  }
144
- getRuleById(e, a, r) {
145
- return this._ensureMap(e, a).map.get(r);
144
+ getRuleById(e, r, a) {
145
+ return this._ensureMap(e, r).map.get(a);
146
146
  }
147
- getRuleIndex(e, a, r) {
148
- return this._ensureMap(e, a).list.findIndex((n) => n.uid === r);
147
+ getRuleIndex(e, r, a) {
148
+ return this._ensureMap(e, r).list.findIndex((n) => n.uid === a);
149
149
  }
150
- getRules(e, a) {
151
- return [...this._ensureMap(e, a).list];
150
+ getRules(e, r) {
151
+ return [...this._ensureMap(e, r).list];
152
152
  }
153
153
  getUnitRules(e) {
154
- const a = this._model.get(e);
155
- if (!a)
154
+ const r = this._model.get(e);
155
+ if (!r)
156
156
  return [];
157
- const r = [];
158
- return a.forEach((o, n) => {
159
- r.push([n, o.list]);
160
- }), r;
157
+ const a = [];
158
+ return r.forEach((o, n) => {
159
+ a.push([n, o.list]);
160
+ }), a;
161
161
  }
162
162
  deleteUnitRules(e) {
163
163
  this._model.delete(e);
164
164
  }
165
165
  getSubUnitIds(e) {
166
- var a, r;
167
- return Array.from((r = (a = this._model.get(e)) == null ? void 0 : a.keys()) != null ? r : []);
166
+ var r, a;
167
+ return Array.from((a = (r = this._model.get(e)) == null ? void 0 : r.keys()) != null ? a : []);
168
168
  }
169
169
  getAll() {
170
170
  return Array.from(this._model.keys()).map((e) => [e, this.getUnitRules(e)]);
171
171
  }
172
172
  };
173
- h = ne([
174
- ie(0, T)
175
- ], h);
176
- var se = Object.defineProperty, de = Object.getOwnPropertyDescriptor, le = (t, e, a, r) => {
177
- for (var o = r > 1 ? void 0 : r ? de(e, a) : e, n = t.length - 1, i; n >= 0; n--)
178
- (i = t[n]) && (o = (r ? i(e, a, o) : i(o)) || o);
179
- return r && o && se(e, a, o), o;
180
- }, y = (t, e) => (a, r) => e(a, r, t);
173
+ m = ne([
174
+ ie(0, N)
175
+ ], m);
176
+ var se = Object.defineProperty, de = Object.getOwnPropertyDescriptor, le = (t, e, r, a) => {
177
+ for (var o = a > 1 ? void 0 : a ? de(e, r) : e, n = t.length - 1, i; n >= 0; n--)
178
+ (i = t[n]) && (o = (a ? i(e, r, o) : i(o)) || o);
179
+ return a && o && se(e, r, o), o;
180
+ }, y = (t, e) => (r, a) => e(r, a, t);
181
181
  const ue = "SHEET_DATA_VALIDATION_PLUGIN";
182
182
  let I = class extends P {
183
- constructor(t, e, a) {
184
- super(), this._resourceManagerService = t, this._univerInstanceService = e, this._dataValidationModel = a, this._initSnapshot();
183
+ constructor(t, e, r) {
184
+ super(), this._resourceManagerService = t, this._univerInstanceService = e, this._dataValidationModel = r, this._initSnapshot();
185
185
  }
186
186
  _initSnapshot() {
187
- const t = (a) => {
188
- const r = this._dataValidationModel.getUnitRules(a), o = {};
189
- return r ? (r.forEach(([n, i]) => {
187
+ const t = (r) => {
188
+ const a = this._dataValidationModel.getUnitRules(r), o = {};
189
+ return a ? (a.forEach(([n, i]) => {
190
190
  o[n] = i;
191
191
  }), JSON.stringify(o)) : "";
192
- }, e = (a) => {
193
- if (!a)
192
+ }, e = (r) => {
193
+ if (!r)
194
194
  return {};
195
195
  try {
196
- return JSON.parse(a);
196
+ return JSON.parse(r);
197
197
  } catch {
198
198
  return {};
199
199
  }
@@ -202,15 +202,15 @@ let I = class extends P {
202
202
  this._resourceManagerService.registerPluginResource({
203
203
  pluginName: ue,
204
204
  businesses: [x.UNIVER_SHEET],
205
- toJson: (a) => t(a),
206
- parseJson: (a) => e(a),
207
- onUnLoad: (a) => {
208
- this._dataValidationModel.deleteUnitRules(a);
205
+ toJson: (r) => t(r),
206
+ parseJson: (r) => e(r),
207
+ onUnLoad: (r) => {
208
+ this._dataValidationModel.deleteUnitRules(r);
209
209
  },
210
- onLoad: (a, r) => {
211
- Object.keys(r).forEach((o) => {
212
- r[o].forEach((i) => {
213
- this._dataValidationModel.addRule(a, o, i, "patched");
210
+ onLoad: (r, a) => {
211
+ Object.keys(a).forEach((o) => {
212
+ a[o].forEach((i) => {
213
+ this._dataValidationModel.addRule(r, o, i, "patched");
214
214
  });
215
215
  });
216
216
  }
@@ -221,7 +221,7 @@ let I = class extends P {
221
221
  I = le([
222
222
  y(0, z),
223
223
  y(1, K),
224
- y(2, O(h))
224
+ y(2, O(m))
225
225
  ], I);
226
226
  var ce = /* @__PURE__ */ ((t) => (t.SHEET = "sheet", t))(ce || {});
227
227
  class H {
@@ -231,26 +231,26 @@ class H {
231
231
  c(this, "_validatorsChange$", new ae(void 0));
232
232
  c(this, "validatorsChange$", this._validatorsChange$.asObservable());
233
233
  }
234
- _addValidatorToScope(e, a) {
235
- this._validatorByScopes.has(a) || this._validatorByScopes.set(a, []);
236
- const r = this._validatorByScopes.get(a);
237
- if (r.findIndex((o) => o.id === e.id) > -1)
234
+ _addValidatorToScope(e, r) {
235
+ this._validatorByScopes.has(r) || this._validatorByScopes.set(r, []);
236
+ const a = this._validatorByScopes.get(r);
237
+ if (a.findIndex((o) => o.id === e.id) > -1)
238
238
  throw new Error(`Validator item with the same id ${e.id} has already been added!`);
239
- r.push(e);
239
+ a.push(e);
240
240
  }
241
- _removeValidatorFromScope(e, a) {
242
- const r = this._validatorByScopes.get(a);
243
- if (!r)
241
+ _removeValidatorFromScope(e, r) {
242
+ const a = this._validatorByScopes.get(r);
243
+ if (!a)
244
244
  return;
245
- const o = r.findIndex((n) => n.id === e.id);
246
- o > -1 && r.splice(o, 1);
245
+ const o = a.findIndex((n) => n.id === e.id);
246
+ o > -1 && a.splice(o, 1);
247
247
  }
248
248
  register(e) {
249
- return this._validatorMap.set(e.id, e), Array.isArray(e.scopes) ? e.scopes.forEach((a) => {
250
- this._addValidatorToScope(e, a);
249
+ return this._validatorMap.set(e.id, e), Array.isArray(e.scopes) ? e.scopes.forEach((r) => {
250
+ this._addValidatorToScope(e, r);
251
251
  }) : this._addValidatorToScope(e, e.scopes), this._validatorsChange$.next(), Y(() => {
252
- this._validatorMap.delete(e.id), Array.isArray(e.scopes) ? e.scopes.forEach((a) => {
253
- this._removeValidatorFromScope(e, a);
252
+ this._validatorMap.delete(e.id), Array.isArray(e.scopes) ? e.scopes.forEach((r) => {
253
+ this._removeValidatorFromScope(e, r);
254
254
  }) : this._removeValidatorFromScope(e, e.scopes), this._validatorsChange$.next();
255
255
  });
256
256
  }
@@ -261,97 +261,97 @@ class H {
261
261
  return this._validatorByScopes.get(e);
262
262
  }
263
263
  }
264
- const A = {
264
+ const S = {
265
265
  type: E.MUTATION,
266
266
  id: "data-validation.mutation.addRule",
267
267
  handler(t, e) {
268
268
  if (!e)
269
269
  return !1;
270
- const { unitId: a, subUnitId: r, rule: o, index: n, source: i = "command" } = e;
271
- return t.get(h).addRule(a, r, o, i, n), !0;
270
+ const { unitId: r, subUnitId: a, rule: o, index: n, source: i = "command" } = e;
271
+ return t.get(m).addRule(r, a, o, i, n), !0;
272
272
  }
273
- }, v = {
273
+ }, f = {
274
274
  type: E.MUTATION,
275
275
  id: "data-validation.mutation.removeRule",
276
276
  handler(t, e) {
277
277
  if (!e)
278
278
  return !1;
279
- const { unitId: a, subUnitId: r, ruleId: o, source: n = "command" } = e, i = t.get(h);
279
+ const { unitId: r, subUnitId: a, ruleId: o, source: n = "command" } = e, i = t.get(m);
280
280
  return Array.isArray(o) ? o.forEach((l) => {
281
- i.removeRule(a, r, l, n);
282
- }) : i.removeRule(a, r, o, n), !0;
281
+ i.removeRule(r, a, l, n);
282
+ }) : i.removeRule(r, a, o, n), !0;
283
283
  }
284
- }, f = {
284
+ }, v = {
285
285
  type: E.MUTATION,
286
286
  id: "data-validation.mutation.updateRule",
287
287
  handler(t, e) {
288
288
  if (!e)
289
289
  return !1;
290
- const { unitId: a, subUnitId: r, ruleId: o, payload: n, source: i = "command" } = e;
291
- return t.get(h).updateRule(a, r, o, n, i), !0;
290
+ const { unitId: r, subUnitId: a, ruleId: o, payload: n, source: i = "command" } = e;
291
+ return t.get(m).updateRule(r, a, o, n, i), !0;
292
292
  }
293
293
  }, pe = {
294
294
  type: E.COMMAND,
295
295
  id: "data-validation.command.addRule",
296
296
  async handler(t, e) {
297
- if (t.get(T).error("[Deprecated]: `AddDataValidationCommand` is deprecated, please use `AddSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"), !e)
297
+ if (t.get(N).error("[Deprecated]: `AddDataValidationCommand` is deprecated, please use `AddSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"), !e)
298
298
  return !1;
299
- const { rule: r, unitId: o, subUnitId: n } = e, i = t.get(S), l = t.get(M), d = {
299
+ const { rule: a, unitId: o, subUnitId: n } = e, i = t.get(T), l = t.get(A), d = {
300
300
  ...e,
301
301
  rule: {
302
302
  ...e.rule,
303
303
  ranges: [e.rule.range]
304
304
  }
305
305
  }, u = [{
306
- id: A.id,
306
+ id: S.id,
307
307
  params: d
308
308
  }], p = [{
309
- id: v.id,
309
+ id: f.id,
310
310
  params: {
311
311
  unitId: o,
312
312
  subUnitId: n,
313
- ruleId: r.uid
313
+ ruleId: a.uid
314
314
  }
315
315
  }];
316
316
  return l.pushUndoRedo({
317
317
  unitID: o,
318
318
  redoMutations: u,
319
319
  undoMutations: p
320
- }), await i.executeCommand(A.id, d), !0;
320
+ }), await i.executeCommand(S.id, d), !0;
321
321
  }
322
- }, he = {
322
+ }, me = {
323
323
  type: E.COMMAND,
324
324
  id: "data-validation.command.removeRule",
325
325
  handler(t, e) {
326
- if (t.get(T).error("[Deprecated]: `RemoveDataValidationCommand` is deprecated, please use `RemoveSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"), !e)
326
+ if (t.get(N).error("[Deprecated]: `RemoveDataValidationCommand` is deprecated, please use `RemoveSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"), !e)
327
327
  return !1;
328
- const { unitId: r, subUnitId: o, ruleId: n } = e, i = t.get(S), l = t.get(M), d = t.get(h), u = [{
329
- id: v.id,
328
+ const { unitId: a, subUnitId: o, ruleId: n } = e, i = t.get(T), l = t.get(A), d = t.get(m), u = [{
329
+ id: f.id,
330
330
  params: e
331
331
  }], p = [{
332
- id: A.id,
332
+ id: S.id,
333
333
  params: {
334
- unitId: r,
334
+ unitId: a,
335
335
  subUnitId: o,
336
336
  rule: {
337
- ...d.getRuleById(r, o, n)
337
+ ...d.getRuleById(a, o, n)
338
338
  },
339
- index: d.getRuleIndex(r, o, n)
339
+ index: d.getRuleIndex(a, o, n)
340
340
  }
341
341
  }];
342
342
  return l.pushUndoRedo({
343
343
  undoMutations: p,
344
344
  redoMutations: u,
345
345
  unitID: e.unitId
346
- }), i.executeCommand(v.id, e), !0;
346
+ }), i.executeCommand(f.id, e), !0;
347
347
  }
348
- }, me = {
348
+ }, he = {
349
349
  type: E.COMMAND,
350
350
  id: "data-validation.command.updateDataValidationSetting",
351
351
  handler(t, e) {
352
- if (t.get(T).warn("[Deprecated]: `UpdateDataValidationOptionsCommand` is deprecated, please use `UpdateSheetDataValidationOptionsCommand` in `@univerjs/sheets-data-validation` instead!"), !e)
352
+ if (t.get(N).warn("[Deprecated]: `UpdateDataValidationOptionsCommand` is deprecated, please use `UpdateSheetDataValidationOptionsCommand` in `@univerjs/sheets-data-validation` instead!"), !e)
353
353
  return !1;
354
- const r = t.get(S), o = t.get(M), n = t.get(h), { unitId: i, subUnitId: l, ruleId: d, options: u } = e, p = n.getRuleById(i, l, d);
354
+ const a = t.get(T), o = t.get(A), n = t.get(m), { unitId: i, subUnitId: l, ruleId: d, options: u } = e, p = n.getRuleById(i, l, d);
355
355
  if (!p)
356
356
  return !1;
357
357
  const _ = {
@@ -359,94 +359,94 @@ const A = {
359
359
  subUnitId: l,
360
360
  ruleId: d,
361
361
  payload: {
362
- type: m.OPTIONS,
362
+ type: h.OPTIONS,
363
363
  payload: u
364
364
  }
365
365
  }, g = [{
366
- id: f.id,
366
+ id: v.id,
367
367
  params: _
368
- }], R = {
368
+ }], M = {
369
369
  unitId: i,
370
370
  subUnitId: l,
371
371
  ruleId: d,
372
372
  payload: {
373
- type: m.OPTIONS,
373
+ type: h.OPTIONS,
374
374
  payload: q(p)
375
375
  }
376
- }, N = [{
377
- id: f.id,
378
- params: R
376
+ }, R = [{
377
+ id: v.id,
378
+ params: M
379
379
  }];
380
380
  return o.pushUndoRedo({
381
381
  unitID: i,
382
382
  redoMutations: g,
383
- undoMutations: N
384
- }), r.executeCommand(f.id, _), !0;
383
+ undoMutations: R
384
+ }), a.executeCommand(v.id, _), !0;
385
385
  }
386
386
  }, _e = {
387
387
  type: E.COMMAND,
388
388
  id: "data-validation.command.updateDataValidationOptions",
389
389
  handler(t, e) {
390
- if (t.get(T).error("[Deprecated]: `UpdateDataValidationSettingCommand` is deprecated, please use `UpdateSheetDataValidationSettingCommand` in `@univerjs/sheets-data-validation` instead!"), !e)
390
+ if (t.get(N).error("[Deprecated]: `UpdateDataValidationSettingCommand` is deprecated, please use `UpdateSheetDataValidationSettingCommand` in `@univerjs/sheets-data-validation` instead!"), !e)
391
391
  return !1;
392
- const r = t.get(S), o = t.get(M), n = t.get(h), i = t.get(H), { unitId: l, subUnitId: d, ruleId: u, setting: p } = e, _ = i.getValidatorItem(p.type);
392
+ const a = t.get(T), o = t.get(A), n = t.get(m), i = t.get(H), { unitId: l, subUnitId: d, ruleId: u, setting: p } = e, _ = i.getValidatorItem(p.type);
393
393
  if (!_)
394
394
  return !1;
395
395
  const g = n.getRuleById(l, d, u);
396
396
  if (!g)
397
397
  return !1;
398
- const R = { ...g, ...p };
399
- if (!_.validatorFormula(R, l, d).success)
398
+ const M = { ...g, ...p };
399
+ if (!_.validatorFormula(M, l, d).success)
400
400
  return !1;
401
- const N = {
401
+ const R = {
402
402
  unitId: l,
403
403
  subUnitId: d,
404
404
  ruleId: u,
405
405
  payload: {
406
- type: m.SETTING,
406
+ type: h.SETTING,
407
407
  payload: {
408
408
  ...p,
409
- ..._.normalizeFormula(R, l, d)
409
+ ..._.normalizeFormula(M, l, d)
410
410
  }
411
411
  }
412
412
  }, j = [{
413
- id: f.id,
414
- params: N
413
+ id: v.id,
414
+ params: R
415
415
  }], Q = {
416
416
  unitId: l,
417
417
  subUnitId: d,
418
418
  ruleId: u,
419
419
  payload: {
420
- type: m.SETTING,
420
+ type: h.SETTING,
421
421
  payload: G(g)
422
422
  }
423
- }, W = [{
424
- id: f.id,
423
+ }, F = [{
424
+ id: v.id,
425
425
  params: Q
426
426
  }];
427
427
  return o.pushUndoRedo({
428
428
  unitID: l,
429
429
  redoMutations: j,
430
- undoMutations: W
431
- }), r.executeCommand(f.id, N), !0;
430
+ undoMutations: F
431
+ }), a.executeCommand(v.id, R), !0;
432
432
  }
433
433
  }, Ee = {
434
434
  type: E.COMMAND,
435
435
  id: "data-validation.command.removeAll",
436
436
  handler(t, e) {
437
- if (t.get(T).error("[Deprecated]: `RemoveAllDataValidationCommand` is deprecated, please use `RemoveSheetAllDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"), !e)
437
+ if (t.get(N).error("[Deprecated]: `RemoveAllDataValidationCommand` is deprecated, please use `RemoveSheetAllDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"), !e)
438
438
  return !1;
439
- const { unitId: r, subUnitId: o } = e, n = t.get(S), i = t.get(h), l = t.get(M), d = [...i.getRules(r, o)], u = {
440
- unitId: r,
439
+ const { unitId: a, subUnitId: o } = e, n = t.get(T), i = t.get(m), l = t.get(A), d = [...i.getRules(a, o)], u = {
440
+ unitId: a,
441
441
  subUnitId: o,
442
442
  ruleId: d.map((g) => g.uid)
443
443
  }, p = [{
444
- id: v.id,
444
+ id: f.id,
445
445
  params: u
446
446
  }], _ = [{
447
- id: A.id,
447
+ id: S.id,
448
448
  params: {
449
- unitId: r,
449
+ unitId: a,
450
450
  subUnitId: o,
451
451
  rule: d
452
452
  }
@@ -454,39 +454,39 @@ const A = {
454
454
  return l.pushUndoRedo({
455
455
  redoMutations: p,
456
456
  undoMutations: _,
457
- unitID: r
458
- }), n.executeCommand(v.id, u), !0;
459
- }
460
- }, ge = "data-validation.config", fe = {};
461
- var ve = Object.defineProperty, Te = Object.getOwnPropertyDescriptor, Se = (t, e, a, r) => {
462
- for (var o = r > 1 ? void 0 : r ? Te(e, a) : e, n = t.length - 1, i; n >= 0; n--)
463
- (i = t[n]) && (o = (r ? i(e, a, o) : i(o)) || o);
464
- return r && o && ve(e, a, o), o;
465
- }, L = (t, e) => (a, r) => e(a, r, t);
466
- const Ae = "UNIVER_DATA_VALIDATION_PLUGIN";
457
+ unitID: a
458
+ }), n.executeCommand(f.id, u), !0;
459
+ }
460
+ }, ge = "data-validation.config", ve = {};
461
+ var fe = Object.defineProperty, Ne = Object.getOwnPropertyDescriptor, Te = (t, e, r, a) => {
462
+ for (var o = a > 1 ? void 0 : a ? Ne(e, r) : e, n = t.length - 1, i; n >= 0; n--)
463
+ (i = t[n]) && (o = (a ? i(e, r, o) : i(o)) || o);
464
+ return a && o && fe(e, r, o), o;
465
+ }, L = (t, e) => (r, a) => e(r, a, t);
466
+ const Se = "UNIVER_DATA_VALIDATION_PLUGIN";
467
467
  var V;
468
468
  let U = (V = class extends X {
469
- constructor(t = fe, e, a, r) {
470
- super(), this._config = t, this._injector = e, this._commandService = a, this._configService = r;
469
+ constructor(t = ve, e, r, a) {
470
+ super(), this._config = t, this._injector = e, this._commandService = r, this._configService = a;
471
471
  const { ...o } = this._config;
472
472
  this._configService.setConfig(ge, o);
473
473
  }
474
474
  onStarting() {
475
475
  [
476
- [h],
476
+ [m],
477
477
  [H],
478
478
  [I]
479
479
  ].forEach((t) => this._injector.add(t)), [
480
480
  // command
481
481
  pe,
482
482
  Ee,
483
- me,
484
- _e,
485
483
  he,
484
+ _e,
485
+ me,
486
486
  // mutation
487
- A,
488
- f,
489
- v
487
+ S,
488
+ v,
489
+ f
490
490
  ].forEach((t) => {
491
491
  this._commandService.registerCommand(t);
492
492
  });
@@ -494,14 +494,14 @@ let U = (V = class extends X {
494
494
  onReady() {
495
495
  this._injector.get(I);
496
496
  }
497
- }, c(V, "pluginName", Ae), c(V, "type", x.UNIVER_SHEET), V);
498
- U = Se([
497
+ }, c(V, "pluginName", Se), c(V, "type", x.UNIVER_SHEET), V);
498
+ U = Te([
499
499
  L(1, O($)),
500
- L(2, S),
500
+ L(2, T),
501
501
  L(3, Z)
502
502
  ], U);
503
503
  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 + "";
504
- const Me = {
504
+ const Ae = {
505
505
  [s.BETWEEN]: "dataValidation.ruleName.between",
506
506
  [s.EQUAL]: "dataValidation.ruleName.equal",
507
507
  [s.GREATER_THAN]: "dataValidation.ruleName.greaterThan",
@@ -510,7 +510,7 @@ const Me = {
510
510
  [s.LESS_THAN_OR_EQUAL]: "dataValidation.ruleName.lessThanOrEqual",
511
511
  [s.NOT_BETWEEN]: "dataValidation.ruleName.notBetween",
512
512
  [s.NOT_EQUAL]: "dataValidation.ruleName.notEqual"
513
- }, Re = {
513
+ }, Me = {
514
514
  [s.BETWEEN]: "dataValidation.errorMsg.between",
515
515
  [s.EQUAL]: "dataValidation.errorMsg.equal",
516
516
  [s.GREATER_THAN]: "dataValidation.errorMsg.greaterThan",
@@ -532,12 +532,12 @@ const Me = {
532
532
  s.BETWEEN,
533
533
  s.NOT_BETWEEN
534
534
  ];
535
- var Ne = Object.defineProperty, Ve = Object.getOwnPropertyDescriptor, Oe = (t, e, a, r) => {
536
- for (var o = r > 1 ? void 0 : r ? Ve(e, a) : e, n = t.length - 1, i; n >= 0; n--)
537
- (i = t[n]) && (o = (r ? i(e, a, o) : i(o)) || o);
538
- return r && o && Ne(e, a, o), o;
539
- }, D = (t, e) => (a, r) => e(a, r, t);
540
- const w = "{FORMULA1}", C = "{FORMULA2}", Ie = {
535
+ var Re = Object.defineProperty, Ve = Object.getOwnPropertyDescriptor, Oe = (t, e, r, a) => {
536
+ for (var o = a > 1 ? void 0 : a ? Ve(e, r) : e, n = t.length - 1, i; n >= 0; n--)
537
+ (i = t[n]) && (o = (a ? i(e, r, o) : i(o)) || o);
538
+ return a && o && Re(e, r, o), o;
539
+ }, D = (t, e) => (r, a) => e(r, a, t);
540
+ const w = "{FORMULA1}", b = "{FORMULA2}", Ie = {
541
541
  [s.BETWEEN]: "dataValidation.operators.between",
542
542
  [s.EQUAL]: "dataValidation.operators.equal",
543
543
  [s.GREATER_THAN]: "dataValidation.operators.greaterThan",
@@ -547,9 +547,10 @@ const w = "{FORMULA1}", C = "{FORMULA2}", Ie = {
547
547
  [s.NOT_BETWEEN]: "dataValidation.operators.notBetween",
548
548
  [s.NOT_EQUAL]: "dataValidation.operators.notEqual"
549
549
  };
550
- let b = class {
550
+ let C = class {
551
551
  // #endregion
552
552
  constructor(t, e) {
553
+ c(this, "offsetFormulaByRange", !0);
553
554
  // #region UI related
554
555
  c(this, "formulaInput");
555
556
  c(this, "canvasRender", null);
@@ -565,17 +566,17 @@ let b = class {
565
566
  return this.localeService.t(this.title);
566
567
  }
567
568
  generateRuleName(t) {
568
- var a, r;
569
+ var r, a;
569
570
  if (!t.operator)
570
571
  return this.titleStr;
571
- const e = this.localeService.t(Me[t.operator]).replace(w, (a = t.formula1) != null ? a : "").replace(C, (r = t.formula2) != null ? r : "");
572
+ const e = this.localeService.t(Ae[t.operator]).replace(w, (r = t.formula1) != null ? r : "").replace(b, (a = t.formula2) != null ? a : "");
572
573
  return `${this.titleStr} ${e}`;
573
574
  }
574
575
  generateRuleErrorMessage(t, e) {
575
- var r, o;
576
- return t.operator ? `${this.localeService.t(Re[t.operator]).replace(w, (r = t.formula1) != null ? r : "").replace(C, (o = t.formula2) != null ? o : "")}` : this.titleStr;
576
+ var a, o;
577
+ return t.operator ? `${this.localeService.t(Me[t.operator]).replace(w, (a = t.formula1) != null ? a : "").replace(b, (o = t.formula2) != null ? o : "")}` : this.titleStr;
577
578
  }
578
- getExtraStyle(t, e, a, r, o) {
579
+ getExtraStyle(t, e, r, a, o) {
579
580
  }
580
581
  getRuleFinalError(t, e) {
581
582
  return t.showErrorMessage && t.error ? t.error : this.generateRuleErrorMessage(t, e);
@@ -583,47 +584,61 @@ let b = class {
583
584
  isEmptyCellValue(t) {
584
585
  return t === "" || t === void 0 || t === null;
585
586
  }
586
- normalizeFormula(t, e, a) {
587
+ normalizeFormula(t, e, r) {
587
588
  return {
588
589
  formula1: t.formula1,
589
590
  formula2: t.formula2
590
591
  };
591
592
  }
592
- async isValidType(t, e, a) {
593
+ async isValidType(t, e, r) {
593
594
  return !0;
594
595
  }
595
- transform(t, e, a) {
596
+ transform(t, e, r) {
596
597
  return t;
597
598
  }
598
- async validatorIsEqual(t, e, a) {
599
- return !0;
599
+ async validatorIsEqual(t, e, r) {
600
+ const { formula1: a } = e, { value: o } = t;
601
+ return Number.isNaN(a) ? !0 : o === a;
600
602
  }
601
- async validatorIsNotEqual(t, e, a) {
602
- return !0;
603
+ async validatorIsNotEqual(t, e, r) {
604
+ const { formula1: a } = e;
605
+ return Number.isNaN(a) ? !0 : t.value !== a;
603
606
  }
604
- async validatorIsBetween(t, e, a) {
605
- return !0;
607
+ async validatorIsBetween(t, e, r) {
608
+ const { formula1: a, formula2: o } = e;
609
+ if (Number.isNaN(a) || Number.isNaN(o))
610
+ return !0;
611
+ const n = Math.min(a, o), i = Math.max(a, o);
612
+ return t.value >= n && t.value <= i;
606
613
  }
607
- async validatorIsNotBetween(t, e, a) {
608
- return !0;
614
+ async validatorIsNotBetween(t, e, r) {
615
+ const { formula1: a, formula2: o } = e;
616
+ if (Number.isNaN(a) || Number.isNaN(o))
617
+ return !0;
618
+ const n = Math.min(a, o), i = Math.max(a, o);
619
+ return t.value < n || t.value > i;
609
620
  }
610
- async validatorIsGreaterThan(t, e, a) {
611
- return !0;
621
+ async validatorIsGreaterThan(t, e, r) {
622
+ const { formula1: a } = e;
623
+ return Number.isNaN(a) ? !0 : t.value > a;
612
624
  }
613
- async validatorIsGreaterThanOrEqual(t, e, a) {
614
- return !0;
625
+ async validatorIsGreaterThanOrEqual(t, e, r) {
626
+ const { formula1: a } = e;
627
+ return Number.isNaN(a) ? !0 : t.value >= a;
615
628
  }
616
- async validatorIsLessThan(t, e, a) {
617
- return !0;
629
+ async validatorIsLessThan(t, e, r) {
630
+ const { formula1: a } = e;
631
+ return Number.isNaN(a) ? !0 : t.value < a;
618
632
  }
619
- async validatorIsLessThanOrEqual(t, e, a) {
620
- return !0;
633
+ async validatorIsLessThanOrEqual(t, e, r) {
634
+ const { formula1: a } = e;
635
+ return Number.isNaN(a) ? !0 : t.value <= a;
621
636
  }
622
637
  async validator(t, e) {
623
- const { value: a, unitId: r, subUnitId: o } = t, n = this.isEmptyCellValue(a), { allowBlank: i = !0, operator: l } = e;
638
+ const { value: r, unitId: a, subUnitId: o } = t, n = this.isEmptyCellValue(r), { allowBlank: i = !0, operator: l } = e;
624
639
  if (n)
625
640
  return i;
626
- const d = await this.parseFormula(e, r, o, t.row, t.column);
641
+ const d = await this.parseFormula(e, a, o, t.row, t.column);
627
642
  if (!d.isFormulaValid || !await this.isValidType(t, d, e))
628
643
  return !1;
629
644
  if (!B.isDefine(l))
@@ -651,23 +666,23 @@ let b = class {
651
666
  }
652
667
  }
653
668
  };
654
- b = Oe([
669
+ C = Oe([
655
670
  D(0, O(k)),
656
671
  D(1, O($))
657
- ], b);
672
+ ], C);
658
673
  export {
659
- A as AddDataValidationMutation,
660
- b as BaseDataValidator,
661
- h as DataValidationModel,
674
+ S as AddDataValidationMutation,
675
+ C as BaseDataValidator,
676
+ m as DataValidationModel,
662
677
  I as DataValidationResourceController,
663
678
  ce as DataValidatorRegistryScope,
664
679
  H as DataValidatorRegistryService,
665
- v as RemoveDataValidationMutation,
680
+ f as RemoveDataValidationMutation,
666
681
  we as TWO_FORMULA_OPERATOR_COUNT,
667
682
  De as TextLengthErrorTitleMap,
668
683
  U as UniverDataValidationPlugin,
669
- f as UpdateDataValidationMutation,
670
- m as UpdateRuleType,
684
+ v as UpdateDataValidationMutation,
685
+ h as UpdateRuleType,
671
686
  q as getRuleOptions,
672
687
  G as getRuleSetting
673
688
  };
@@ -13,7 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- export declare const PLUGIN_CONFIG_KEY = "data-validation.config";
16
+ export declare const DATA_VALIDATION_PLUGIN_CONFIG_KEY = "data-validation.config";
17
17
  export declare const configSymbol: unique symbol;
18
18
  export interface IUniverDataValidationConfig {
19
19
  }
@@ -12,7 +12,7 @@ export declare class DataValidatorRegistryService {
12
12
  validatorsChange$: import('rxjs').Observable<void>;
13
13
  private _addValidatorToScope;
14
14
  private _removeValidatorFromScope;
15
- register(validator: BaseDataValidator<any>): import('@wendellhu/redi').IDisposable;
16
- getValidatorItem(id: string): BaseDataValidator<import('@univerjs/core').CellValue> | undefined;
17
- getValidatorsByScope(scope: string): BaseDataValidator<import('@univerjs/core').CellValue>[] | undefined;
15
+ register(validator: BaseDataValidator): import('@wendellhu/redi').IDisposable;
16
+ getValidatorItem(id: string): BaseDataValidator | undefined;
17
+ getValidatorsByScope(scope: string): BaseDataValidator[] | undefined;
18
18
  }
@@ -23,13 +23,14 @@ export interface IFormulaValidResult {
23
23
  formula1?: string;
24
24
  formula2?: string;
25
25
  }
26
- export declare abstract class BaseDataValidator<DataType = CellValue> {
26
+ export declare abstract class BaseDataValidator {
27
27
  readonly localeService: LocaleService;
28
28
  readonly injector: Injector;
29
29
  abstract id: string;
30
30
  abstract title: string;
31
31
  abstract operators: DataValidationOperator[];
32
32
  abstract scopes: string[] | string;
33
+ offsetFormulaByRange: boolean;
33
34
  formulaInput: string | undefined;
34
35
  canvasRender: Nullable<IBaseDataValidationWidget>;
35
36
  dropdown: string | undefined;
@@ -45,21 +46,21 @@ export declare abstract class BaseDataValidator<DataType = CellValue> {
45
46
  }, row: number, column: number): Nullable<IStyleData>;
46
47
  getRuleFinalError(rule: IDataValidationRule, position: ISheetLocationBase): string;
47
48
  isEmptyCellValue(cellValue: Nullable<CellValue>): cellValue is null | undefined | void;
48
- abstract parseFormula(rule: IDataValidationRule, unitId: string, subUnitId: string, row: number, column: number): Promise<IFormulaResult>;
49
+ abstract parseFormula(rule: IDataValidationRule, unitId: string, subUnitId: string, row: number, column: number): Promise<IFormulaResult<number | undefined>>;
49
50
  abstract validatorFormula(rule: IDataValidationRule, unitId: string, subUnitId: string): IFormulaValidResult;
50
51
  normalizeFormula(rule: IDataValidationRule, unitId: string, subUnitId: string): {
51
52
  formula1: string | undefined;
52
53
  formula2: string | undefined;
53
54
  };
54
55
  isValidType(cellInfo: IValidatorCellInfo, formula: IFormulaResult, rule: IDataValidationRule): Promise<boolean>;
55
- transform(cellInfo: IValidatorCellInfo, formula: IFormulaResult, rule: IDataValidationRule): IValidatorCellInfo<DataType>;
56
- validatorIsEqual(cellInfo: IValidatorCellInfo<DataType>, formula: IFormulaResult, rule: IDataValidationRule): Promise<boolean>;
57
- validatorIsNotEqual(cellInfo: IValidatorCellInfo<DataType>, formula: IFormulaResult, rule: IDataValidationRule): Promise<boolean>;
58
- validatorIsBetween(cellInfo: IValidatorCellInfo<DataType>, formula: IFormulaResult, rule: IDataValidationRule): Promise<boolean>;
59
- validatorIsNotBetween(cellInfo: IValidatorCellInfo<DataType>, formula: IFormulaResult, rule: IDataValidationRule): Promise<boolean>;
60
- validatorIsGreaterThan(cellInfo: IValidatorCellInfo<DataType>, formula: IFormulaResult, rule: IDataValidationRule): Promise<boolean>;
61
- validatorIsGreaterThanOrEqual(cellInfo: IValidatorCellInfo<DataType>, formula: IFormulaResult, rule: IDataValidationRule): Promise<boolean>;
62
- validatorIsLessThan(cellInfo: IValidatorCellInfo<DataType>, formula: IFormulaResult, rule: IDataValidationRule): Promise<boolean>;
63
- validatorIsLessThanOrEqual(cellInfo: IValidatorCellInfo<DataType>, formula: IFormulaResult, rule: IDataValidationRule): Promise<boolean>;
56
+ transform(cellInfo: IValidatorCellInfo, formula: IFormulaResult, rule: IDataValidationRule): IValidatorCellInfo<number>;
57
+ validatorIsEqual(cellInfo: IValidatorCellInfo<CellValue>, formula: IFormulaResult, rule: IDataValidationRule): Promise<boolean>;
58
+ validatorIsNotEqual(cellInfo: IValidatorCellInfo<number>, formula: IFormulaResult, _rule: IDataValidationRule): Promise<boolean>;
59
+ validatorIsBetween(cellInfo: IValidatorCellInfo<number>, formula: IFormulaResult, _rule: IDataValidationRule): Promise<boolean>;
60
+ validatorIsNotBetween(cellInfo: IValidatorCellInfo<number>, formula: IFormulaResult, _rule: IDataValidationRule): Promise<boolean>;
61
+ validatorIsGreaterThan(cellInfo: IValidatorCellInfo<number>, formula: IFormulaResult, _rule: IDataValidationRule): Promise<boolean>;
62
+ validatorIsGreaterThanOrEqual(cellInfo: IValidatorCellInfo<number>, formula: IFormulaResult, _rule: IDataValidationRule): Promise<boolean>;
63
+ validatorIsLessThan(cellInfo: IValidatorCellInfo<number>, formula: IFormulaResult, _rule: IDataValidationRule): Promise<boolean>;
64
+ validatorIsLessThanOrEqual(cellInfo: IValidatorCellInfo<number>, formula: IFormulaResult, _rule: IDataValidationRule): Promise<boolean>;
64
65
  validator(cellInfo: IValidatorCellInfo, rule: IDataValidationRule): Promise<boolean>;
65
66
  }
package/lib/umd/index.js CHANGED
@@ -1 +1 @@
1
- (function(l,n){typeof exports=="object"&&typeof module<"u"?n(exports,require("@univerjs/core"),require("rxjs")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","rxjs"],n):(l=typeof globalThis<"u"?globalThis:l||self,n(l.UniverDataValidation={},l.UniverCore,l.rxjs))})(this,function(l,n,g){"use strict";var sa=Object.defineProperty;var ua=(l,n,g)=>n in l?sa(l,n,{enumerable:!0,configurable:!0,writable:!0,value:g}):l[n]=g;var m=(l,n,g)=>ua(l,typeof n!="symbol"?n+"":n,g);var O;function D(r){return{type:r.type,operator:r.operator,formula1:r.formula1,formula2:r.formula2,allowBlank:r.allowBlank}}function M(r){return{error:r.error,errorStyle:r.errorStyle,errorTitle:r.errorTitle,imeMode:r.imeMode,prompt:r.prompt,promptTitle:r.promptTitle,showDropDown:r.showDropDown,showErrorMessage:r.showErrorMessage,showInputMessage:r.showInputMessage,renderMode:r.renderMode,bizInfo:r.bizInfo}}var h=(r=>(r[r.SETTING=0]="SETTING",r[r.RANGE=1]="RANGE",r[r.OPTIONS=2]="OPTIONS",r[r.ALL=3]="ALL",r))(h||{}),C=Object.defineProperty,w=Object.getOwnPropertyDescriptor,b=(r,a,e,t)=>{for(var i=t>1?void 0:t?w(a,e):a,o=r.length-1,d;o>=0;o--)(d=r[o])&&(i=(t?d(a,e,i):d(i))||i);return t&&i&&C(a,e,i),i},P=(r,a)=>(e,t)=>a(e,t,r);l.DataValidationModel=class extends n.Disposable{constructor(e){super();m(this,"_model",new Map);m(this,"_ruleChange$",new g.Subject);m(this,"ruleChange$",this._ruleChange$.asObservable());m(this,"ruleChangeDebounce$",this.ruleChange$.pipe(g.debounceTime(20)));this._logService=e,this.disposeWithMe({dispose:()=>{this._ruleChange$.complete()}})}_ensureMap(e,t){this._model.has(e)||this._model.set(e,new Map);const i=this._model.get(e);if(i.has(t))return i.get(t);const o={map:new Map,list:[]};return i.set(t,o),o}_addSubUnitRule(e,t,i){const{map:o,list:d}=e,p=(Array.isArray(t)?t:[t]).filter(u=>!o.has(u.uid));typeof i=="number"&&i<d.length?d.splice(i,0,...p):d.push(...p),p.forEach(u=>{o.set(u.uid,u)})}_removeSubUnitRule(e,t){const{map:i,list:o}=e,d=o.findIndex(s=>s.uid===t);d>-1&&(o.splice(d,1),i.delete(t))}_updateSubUnitRule(e,t,i){const{map:o,list:d}=e,s=o.get(t),p=d.findIndex(c=>t===c.uid);if(!s)throw new Error(`Data validation rule is not found, ruleId: ${t}.`);const u={...s};switch(i.type){case h.RANGE:{u.ranges=i.payload;break}case h.SETTING:{Object.assign(u,D(i.payload));break}case h.OPTIONS:{Object.assign(u,M(i.payload));break}case h.ALL:{Object.assign(u,i.payload);break}}return d[p]=u,o.set(t,u),u}_addRuleSideEffect(e,t,i,o){if(!this._ensureMap(e,t).map.get(i.uid))return{rule:i,type:"add",unitId:e,subUnitId:t,source:o}}addRule(e,t,i,o,d){try{const s=this._ensureMap(e,t),u=(Array.isArray(i)?i:[i]).map(c=>this._addRuleSideEffect(e,t,c,o));this._addSubUnitRule(s,i,d),u.forEach(c=>{c&&this._ruleChange$.next(c)})}catch(s){this._logService.error(s)}}updateRule(e,t,i,o,d){try{const s=this._ensureMap(e,t),p=n.Tools.deepClone(s.map.get(i));if(!p)throw new Error(`Data validation rule is not found, ruleId: ${i}.`);const u=this._updateSubUnitRule(s,i,o);this._ruleChange$.next({rule:u,type:"update",unitId:e,subUnitId:t,source:d,updatePayload:o,oldRule:p})}catch(s){this._logService.error(s)}}removeRule(e,t,i,o){try{const d=this._ensureMap(e,t),s=d.map.get(i);s&&(this._removeSubUnitRule(d,i),this._ruleChange$.next({rule:s,type:"remove",unitId:e,subUnitId:t,source:o}))}catch(d){this._logService.error(d)}}getRuleById(e,t,i){return this._ensureMap(e,t).map.get(i)}getRuleIndex(e,t,i){return this._ensureMap(e,t).list.findIndex(d=>d.uid===i)}getRules(e,t){return[...this._ensureMap(e,t).list]}getUnitRules(e){const t=this._model.get(e);if(!t)return[];const i=[];return t.forEach((o,d)=>{i.push([d,o.list])}),i}deleteUnitRules(e){this._model.delete(e)}getSubUnitIds(e){var t,i;return Array.from((i=(t=this._model.get(e))==null?void 0:t.keys())!=null?i:[])}getAll(){return Array.from(this._model.keys()).map(e=>[e,this.getUnitRules(e)])}},l.DataValidationModel=b([P(0,n.ILogService)],l.DataValidationModel);var B=Object.defineProperty,j=Object.getOwnPropertyDescriptor,$=(r,a,e,t)=>{for(var i=t>1?void 0:t?j(a,e):a,o=r.length-1,d;o>=0;o--)(d=r[o])&&(i=(t?d(a,e,i):d(i))||i);return t&&i&&B(a,e,i),i},R=(r,a)=>(e,t)=>a(e,t,r);const q="SHEET_DATA_VALIDATION_PLUGIN";l.DataValidationResourceController=class extends n.Disposable{constructor(a,e,t){super(),this._resourceManagerService=a,this._univerInstanceService=e,this._dataValidationModel=t,this._initSnapshot()}_initSnapshot(){const a=t=>{const i=this._dataValidationModel.getUnitRules(t),o={};return i?(i.forEach(([d,s])=>{o[d]=s}),JSON.stringify(o)):""},e=t=>{if(!t)return{};try{return JSON.parse(t)}catch{return{}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:q,businesses:[n.UniverInstanceType.UNIVER_SHEET],toJson:t=>a(t),parseJson:t=>e(t),onUnLoad:t=>{this._dataValidationModel.deleteUnitRules(t)},onLoad:(t,i)=>{Object.keys(i).forEach(o=>{i[o].forEach(s=>{this._dataValidationModel.addRule(t,o,s,"patched")})})}}))}},l.DataValidationResourceController=$([R(0,n.IResourceManagerService),R(1,n.IUniverInstanceService),R(2,n.Inject(l.DataValidationModel))],l.DataValidationResourceController);var N=(r=>(r.SHEET="sheet",r))(N||{});class A{constructor(){m(this,"_validatorByScopes",new Map);m(this,"_validatorMap",new Map);m(this,"_validatorsChange$",new g.BehaviorSubject(void 0));m(this,"validatorsChange$",this._validatorsChange$.asObservable())}_addValidatorToScope(a,e){this._validatorByScopes.has(e)||this._validatorByScopes.set(e,[]);const t=this._validatorByScopes.get(e);if(t.findIndex(i=>i.id===a.id)>-1)throw new Error(`Validator item with the same id ${a.id} has already been added!`);t.push(a)}_removeValidatorFromScope(a,e){const t=this._validatorByScopes.get(e);if(!t)return;const i=t.findIndex(o=>o.id===a.id);i>-1&&t.splice(i,1)}register(a){return this._validatorMap.set(a.id,a),Array.isArray(a.scopes)?a.scopes.forEach(e=>{this._addValidatorToScope(a,e)}):this._addValidatorToScope(a,a.scopes),this._validatorsChange$.next(),n.toDisposable(()=>{this._validatorMap.delete(a.id),Array.isArray(a.scopes)?a.scopes.forEach(e=>{this._removeValidatorFromScope(a,e)}):this._removeValidatorFromScope(a,a.scopes),this._validatorsChange$.next()})}getValidatorItem(a){return this._validatorMap.get(a)}getValidatorsByScope(a){return this._validatorByScopes.get(a)}}const f={type:n.CommandType.MUTATION,id:"data-validation.mutation.addRule",handler(r,a){if(!a)return!1;const{unitId:e,subUnitId:t,rule:i,index:o,source:d="command"}=a;return r.get(l.DataValidationModel).addRule(e,t,i,d,o),!0}},E={type:n.CommandType.MUTATION,id:"data-validation.mutation.removeRule",handler(r,a){if(!a)return!1;const{unitId:e,subUnitId:t,ruleId:i,source:o="command"}=a,d=r.get(l.DataValidationModel);return Array.isArray(i)?i.forEach(s=>{d.removeRule(e,t,s,o)}):d.removeRule(e,t,i,o),!0}},_={type:n.CommandType.MUTATION,id:"data-validation.mutation.updateRule",handler(r,a){if(!a)return!1;const{unitId:e,subUnitId:t,ruleId:i,payload:o,source:d="command"}=a;return r.get(l.DataValidationModel).updateRule(e,t,i,o,d),!0}},G={type:n.CommandType.COMMAND,id:"data-validation.command.addRule",async handler(r,a){if(r.get(n.ILogService).error("[Deprecated]: `AddDataValidationCommand` is deprecated, please use `AddSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const{rule:t,unitId:i,subUnitId:o}=a,d=r.get(n.ICommandService),s=r.get(n.IUndoRedoService),p={...a,rule:{...a.rule,ranges:[a.rule.range]}},u=[{id:f.id,params:p}],c=[{id:E.id,params:{unitId:i,subUnitId:o,ruleId:t.uid}}];return s.pushUndoRedo({unitID:i,redoMutations:u,undoMutations:c}),await d.executeCommand(f.id,p),!0}},H={type:n.CommandType.COMMAND,id:"data-validation.command.removeRule",handler(r,a){if(r.get(n.ILogService).error("[Deprecated]: `RemoveDataValidationCommand` is deprecated, please use `RemoveSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const{unitId:t,subUnitId:i,ruleId:o}=a,d=r.get(n.ICommandService),s=r.get(n.IUndoRedoService),p=r.get(l.DataValidationModel),u=[{id:E.id,params:a}],c=[{id:f.id,params:{unitId:t,subUnitId:i,rule:{...p.getRuleById(t,i,o)},index:p.getRuleIndex(t,i,o)}}];return s.pushUndoRedo({undoMutations:c,redoMutations:u,unitID:a.unitId}),d.executeCommand(E.id,a),!0}},Q={type:n.CommandType.COMMAND,id:"data-validation.command.updateDataValidationSetting",handler(r,a){if(r.get(n.ILogService).warn("[Deprecated]: `UpdateDataValidationOptionsCommand` is deprecated, please use `UpdateSheetDataValidationOptionsCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const t=r.get(n.ICommandService),i=r.get(n.IUndoRedoService),o=r.get(l.DataValidationModel),{unitId:d,subUnitId:s,ruleId:p,options:u}=a,c=o.getRuleById(d,s,p);if(!c)return!1;const V={unitId:d,subUnitId:s,ruleId:p,payload:{type:h.OPTIONS,payload:u}},v=[{id:_.id,params:V}],T={unitId:d,subUnitId:s,ruleId:p,payload:{type:h.OPTIONS,payload:M(c)}},S=[{id:_.id,params:T}];return i.pushUndoRedo({unitID:d,redoMutations:v,undoMutations:S}),t.executeCommand(_.id,V),!0}},W={type:n.CommandType.COMMAND,id:"data-validation.command.updateDataValidationOptions",handler(r,a){if(r.get(n.ILogService).error("[Deprecated]: `UpdateDataValidationSettingCommand` is deprecated, please use `UpdateSheetDataValidationSettingCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const t=r.get(n.ICommandService),i=r.get(n.IUndoRedoService),o=r.get(l.DataValidationModel),d=r.get(A),{unitId:s,subUnitId:p,ruleId:u,setting:c}=a,V=d.getValidatorItem(c.type);if(!V)return!1;const v=o.getRuleById(s,p,u);if(!v)return!1;const T={...v,...c};if(!V.validatorFormula(T,s,p).success)return!1;const S={unitId:s,subUnitId:p,ruleId:u,payload:{type:h.SETTING,payload:{...c,...V.normalizeFormula(T,s,p)}}},oa=[{id:_.id,params:S}],da={unitId:s,subUnitId:p,ruleId:u,payload:{type:h.SETTING,payload:D(v)}},la=[{id:_.id,params:da}];return i.pushUndoRedo({unitID:s,redoMutations:oa,undoMutations:la}),t.executeCommand(_.id,S),!0}},F={type:n.CommandType.COMMAND,id:"data-validation.command.removeAll",handler(r,a){if(r.get(n.ILogService).error("[Deprecated]: `RemoveAllDataValidationCommand` is deprecated, please use `RemoveSheetAllDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const{unitId:t,subUnitId:i}=a,o=r.get(n.ICommandService),d=r.get(l.DataValidationModel),s=r.get(n.IUndoRedoService),p=[...d.getRules(t,i)],u={unitId:t,subUnitId:i,ruleId:p.map(v=>v.uid)},c=[{id:E.id,params:u}],V=[{id:f.id,params:{unitId:t,subUnitId:i,rule:p}}];return s.pushUndoRedo({redoMutations:c,undoMutations:V,unitID:t}),o.executeCommand(E.id,u),!0}},x="data-validation.config",J={};var z=Object.defineProperty,K=Object.getOwnPropertyDescriptor,Y=(r,a,e,t)=>{for(var i=t>1?void 0:t?K(a,e):a,o=r.length-1,d;o>=0;o--)(d=r[o])&&(i=(t?d(a,e,i):d(i))||i);return t&&i&&z(a,e,i),i},I=(r,a)=>(e,t)=>a(e,t,r);const X="UNIVER_DATA_VALIDATION_PLUGIN";l.UniverDataValidationPlugin=(O=class extends n.Plugin{constructor(a=J,e,t,i){super(),this._config=a,this._injector=e,this._commandService=t,this._configService=i;const{...o}=this._config;this._configService.setConfig(x,o)}onStarting(){[[l.DataValidationModel],[A],[l.DataValidationResourceController]].forEach(a=>this._injector.add(a)),[G,F,Q,W,H,f,_,E].forEach(a=>{this._commandService.registerCommand(a)})}onReady(){this._injector.get(l.DataValidationResourceController)}},m(O,"pluginName",X),m(O,"type",n.UniverInstanceType.UNIVER_SHEET),O),l.UniverDataValidationPlugin=Y([I(1,n.Inject(n.Injector)),I(2,n.ICommandService),I(3,n.IConfigService)],l.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 Z={[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"},k={[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"},aa={[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"},ta=[n.DataValidationOperator.BETWEEN,n.DataValidationOperator.NOT_BETWEEN];var ea=Object.defineProperty,ia=Object.getOwnPropertyDescriptor,na=(r,a,e,t)=>{for(var i=t>1?void 0:t?ia(a,e):a,o=r.length-1,d;o>=0;o--)(d=r[o])&&(i=(t?d(a,e,i):d(i))||i);return t&&i&&ea(a,e,i),i},y=(r,a)=>(e,t)=>a(e,t,r);const U="{FORMULA1}",L="{FORMULA2}",ra={[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"};l.BaseDataValidator=class{constructor(a,e){m(this,"formulaInput");m(this,"canvasRender",null);m(this,"dropdown");m(this,"optionsInput");m(this,"skipDefaultFontRender");this.localeService=a,this.injector=e}get operatorNames(){return this.operators.map(a=>this.localeService.t(ra[a]))}get titleStr(){return this.localeService.t(this.title)}generateRuleName(a){var t,i;if(!a.operator)return this.titleStr;const e=this.localeService.t(Z[a.operator]).replace(U,(t=a.formula1)!=null?t:"").replace(L,(i=a.formula2)!=null?i:"");return`${this.titleStr} ${e}`}generateRuleErrorMessage(a,e){var i,o;return a.operator?`${this.localeService.t(k[a.operator]).replace(U,(i=a.formula1)!=null?i:"").replace(L,(o=a.formula2)!=null?o:"")}`:this.titleStr}getExtraStyle(a,e,t,i,o){}getRuleFinalError(a,e){return a.showErrorMessage&&a.error?a.error:this.generateRuleErrorMessage(a,e)}isEmptyCellValue(a){return a===""||a===void 0||a===null}normalizeFormula(a,e,t){return{formula1:a.formula1,formula2:a.formula2}}async isValidType(a,e,t){return!0}transform(a,e,t){return a}async validatorIsEqual(a,e,t){return!0}async validatorIsNotEqual(a,e,t){return!0}async validatorIsBetween(a,e,t){return!0}async validatorIsNotBetween(a,e,t){return!0}async validatorIsGreaterThan(a,e,t){return!0}async validatorIsGreaterThanOrEqual(a,e,t){return!0}async validatorIsLessThan(a,e,t){return!0}async validatorIsLessThanOrEqual(a,e,t){return!0}async validator(a,e){const{value:t,unitId:i,subUnitId:o}=a,d=this.isEmptyCellValue(t),{allowBlank:s=!0,operator:p}=e;if(d)return s;const u=await this.parseFormula(e,i,o,a.row,a.column);if(!u.isFormulaValid||!await this.isValidType(a,u,e))return!1;if(!n.Tools.isDefine(p))return!0;const c=this.transform(a,u,e);switch(p){case n.DataValidationOperator.BETWEEN:return this.validatorIsBetween(c,u,e);case n.DataValidationOperator.EQUAL:return this.validatorIsEqual(c,u,e);case n.DataValidationOperator.GREATER_THAN:return this.validatorIsGreaterThan(c,u,e);case n.DataValidationOperator.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(c,u,e);case n.DataValidationOperator.LESS_THAN:return this.validatorIsLessThan(c,u,e);case n.DataValidationOperator.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(c,u,e);case n.DataValidationOperator.NOT_BETWEEN:return this.validatorIsNotBetween(c,u,e);case n.DataValidationOperator.NOT_EQUAL:return this.validatorIsNotEqual(c,u,e);default:throw new Error("Unknown operator.")}}},l.BaseDataValidator=na([y(0,n.Inject(n.LocaleService)),y(1,n.Inject(n.Injector))],l.BaseDataValidator),l.AddDataValidationMutation=f,l.DataValidatorRegistryScope=N,l.DataValidatorRegistryService=A,l.RemoveDataValidationMutation=E,l.TWO_FORMULA_OPERATOR_COUNT=ta,l.TextLengthErrorTitleMap=aa,l.UpdateDataValidationMutation=_,l.UpdateRuleType=h,l.getRuleOptions=M,l.getRuleSetting=D,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"})});
1
+ (function(l,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("@univerjs/core"),require("rxjs")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","rxjs"],r):(l=typeof globalThis<"u"?globalThis:l||self,r(l.UniverDataValidation={},l.UniverCore,l.rxjs))})(this,function(l,r,_){"use strict";var la=Object.defineProperty;var ua=(l,r,_)=>r in l?la(l,r,{enumerable:!0,configurable:!0,writable:!0,value:_}):l[r]=_;var m=(l,r,_)=>ua(l,typeof r!="symbol"?r+"":r,_);var O;function D(n){return{type:n.type,operator:n.operator,formula1:n.formula1,formula2:n.formula2,allowBlank:n.allowBlank}}function N(n){return{error:n.error,errorStyle:n.errorStyle,errorTitle:n.errorTitle,imeMode:n.imeMode,prompt:n.prompt,promptTitle:n.promptTitle,showDropDown:n.showDropDown,showErrorMessage:n.showErrorMessage,showInputMessage:n.showInputMessage,renderMode:n.renderMode,bizInfo:n.bizInfo}}var h=(n=>(n[n.SETTING=0]="SETTING",n[n.RANGE=1]="RANGE",n[n.OPTIONS=2]="OPTIONS",n[n.ALL=3]="ALL",n))(h||{}),C=Object.defineProperty,b=Object.getOwnPropertyDescriptor,w=(n,a,i,e)=>{for(var t=e>1?void 0:e?b(a,i):a,o=n.length-1,d;o>=0;o--)(d=n[o])&&(t=(e?d(a,i,t):d(t))||t);return e&&t&&C(a,i,t),t},P=(n,a)=>(i,e)=>a(i,e,n);l.DataValidationModel=class extends r.Disposable{constructor(i){super();m(this,"_model",new Map);m(this,"_ruleChange$",new _.Subject);m(this,"ruleChange$",this._ruleChange$.asObservable());m(this,"ruleChangeDebounce$",this.ruleChange$.pipe(_.debounceTime(20)));this._logService=i,this.disposeWithMe({dispose:()=>{this._ruleChange$.complete()}})}_ensureMap(i,e){this._model.has(i)||this._model.set(i,new Map);const t=this._model.get(i);if(t.has(e))return t.get(e);const o={map:new Map,list:[]};return t.set(e,o),o}_addSubUnitRule(i,e,t){const{map:o,list:d}=i,p=(Array.isArray(e)?e:[e]).filter(u=>!o.has(u.uid));typeof t=="number"&&t<d.length?d.splice(t,0,...p):d.push(...p),p.forEach(u=>{o.set(u.uid,u)})}_removeSubUnitRule(i,e){const{map:t,list:o}=i,d=o.findIndex(s=>s.uid===e);d>-1&&(o.splice(d,1),t.delete(e))}_updateSubUnitRule(i,e,t){const{map:o,list:d}=i,s=o.get(e),p=d.findIndex(c=>e===c.uid);if(!s)throw new Error(`Data validation rule is not found, ruleId: ${e}.`);const u={...s};switch(t.type){case h.RANGE:{u.ranges=t.payload;break}case h.SETTING:{Object.assign(u,D(t.payload));break}case h.OPTIONS:{Object.assign(u,N(t.payload));break}case h.ALL:{Object.assign(u,t.payload);break}}return d[p]=u,o.set(e,u),u}_addRuleSideEffect(i,e,t,o){if(!this._ensureMap(i,e).map.get(t.uid))return{rule:t,type:"add",unitId:i,subUnitId:e,source:o}}addRule(i,e,t,o,d){try{const s=this._ensureMap(i,e),u=(Array.isArray(t)?t:[t]).map(c=>this._addRuleSideEffect(i,e,c,o));this._addSubUnitRule(s,t,d),u.forEach(c=>{c&&this._ruleChange$.next(c)})}catch(s){this._logService.error(s)}}updateRule(i,e,t,o,d){try{const s=this._ensureMap(i,e),p=r.Tools.deepClone(s.map.get(t));if(!p)throw new Error(`Data validation rule is not found, ruleId: ${t}.`);const u=this._updateSubUnitRule(s,t,o);this._ruleChange$.next({rule:u,type:"update",unitId:i,subUnitId:e,source:d,updatePayload:o,oldRule:p})}catch(s){this._logService.error(s)}}removeRule(i,e,t,o){try{const d=this._ensureMap(i,e),s=d.map.get(t);s&&(this._removeSubUnitRule(d,t),this._ruleChange$.next({rule:s,type:"remove",unitId:i,subUnitId:e,source:o}))}catch(d){this._logService.error(d)}}getRuleById(i,e,t){return this._ensureMap(i,e).map.get(t)}getRuleIndex(i,e,t){return this._ensureMap(i,e).list.findIndex(d=>d.uid===t)}getRules(i,e){return[...this._ensureMap(i,e).list]}getUnitRules(i){const e=this._model.get(i);if(!e)return[];const t=[];return e.forEach((o,d)=>{t.push([d,o.list])}),t}deleteUnitRules(i){this._model.delete(i)}getSubUnitIds(i){var e,t;return Array.from((t=(e=this._model.get(i))==null?void 0:e.keys())!=null?t:[])}getAll(){return Array.from(this._model.keys()).map(i=>[i,this.getUnitRules(i)])}},l.DataValidationModel=w([P(0,r.ILogService)],l.DataValidationModel);var B=Object.defineProperty,j=Object.getOwnPropertyDescriptor,$=(n,a,i,e)=>{for(var t=e>1?void 0:e?j(a,i):a,o=n.length-1,d;o>=0;o--)(d=n[o])&&(t=(e?d(a,i,t):d(t))||t);return e&&t&&B(a,i,t),t},M=(n,a)=>(i,e)=>a(i,e,n);const q="SHEET_DATA_VALIDATION_PLUGIN";l.DataValidationResourceController=class extends r.Disposable{constructor(a,i,e){super(),this._resourceManagerService=a,this._univerInstanceService=i,this._dataValidationModel=e,this._initSnapshot()}_initSnapshot(){const a=e=>{const t=this._dataValidationModel.getUnitRules(e),o={};return t?(t.forEach(([d,s])=>{o[d]=s}),JSON.stringify(o)):""},i=e=>{if(!e)return{};try{return JSON.parse(e)}catch{return{}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:q,businesses:[r.UniverInstanceType.UNIVER_SHEET],toJson:e=>a(e),parseJson:e=>i(e),onUnLoad:e=>{this._dataValidationModel.deleteUnitRules(e)},onLoad:(e,t)=>{Object.keys(t).forEach(o=>{t[o].forEach(s=>{this._dataValidationModel.addRule(e,o,s,"patched")})})}}))}},l.DataValidationResourceController=$([M(0,r.IResourceManagerService),M(1,r.IUniverInstanceService),M(2,r.Inject(l.DataValidationModel))],l.DataValidationResourceController);var I=(n=>(n.SHEET="sheet",n))(I||{});class R{constructor(){m(this,"_validatorByScopes",new Map);m(this,"_validatorMap",new Map);m(this,"_validatorsChange$",new _.BehaviorSubject(void 0));m(this,"validatorsChange$",this._validatorsChange$.asObservable())}_addValidatorToScope(a,i){this._validatorByScopes.has(i)||this._validatorByScopes.set(i,[]);const e=this._validatorByScopes.get(i);if(e.findIndex(t=>t.id===a.id)>-1)throw new Error(`Validator item with the same id ${a.id} has already been added!`);e.push(a)}_removeValidatorFromScope(a,i){const e=this._validatorByScopes.get(i);if(!e)return;const t=e.findIndex(o=>o.id===a.id);t>-1&&e.splice(t,1)}register(a){return this._validatorMap.set(a.id,a),Array.isArray(a.scopes)?a.scopes.forEach(i=>{this._addValidatorToScope(a,i)}):this._addValidatorToScope(a,a.scopes),this._validatorsChange$.next(),r.toDisposable(()=>{this._validatorMap.delete(a.id),Array.isArray(a.scopes)?a.scopes.forEach(i=>{this._removeValidatorFromScope(a,i)}):this._removeValidatorFromScope(a,a.scopes),this._validatorsChange$.next()})}getValidatorItem(a){return this._validatorMap.get(a)}getValidatorsByScope(a){return this._validatorByScopes.get(a)}}const f={type:r.CommandType.MUTATION,id:"data-validation.mutation.addRule",handler(n,a){if(!a)return!1;const{unitId:i,subUnitId:e,rule:t,index:o,source:d="command"}=a;return n.get(l.DataValidationModel).addRule(i,e,t,d,o),!0}},V={type:r.CommandType.MUTATION,id:"data-validation.mutation.removeRule",handler(n,a){if(!a)return!1;const{unitId:i,subUnitId:e,ruleId:t,source:o="command"}=a,d=n.get(l.DataValidationModel);return Array.isArray(t)?t.forEach(s=>{d.removeRule(i,e,s,o)}):d.removeRule(i,e,t,o),!0}},g={type:r.CommandType.MUTATION,id:"data-validation.mutation.updateRule",handler(n,a){if(!a)return!1;const{unitId:i,subUnitId:e,ruleId:t,payload:o,source:d="command"}=a;return n.get(l.DataValidationModel).updateRule(i,e,t,o,d),!0}},G={type:r.CommandType.COMMAND,id:"data-validation.command.addRule",async handler(n,a){if(n.get(r.ILogService).error("[Deprecated]: `AddDataValidationCommand` is deprecated, please use `AddSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const{rule:e,unitId:t,subUnitId:o}=a,d=n.get(r.ICommandService),s=n.get(r.IUndoRedoService),p={...a,rule:{...a.rule,ranges:[a.rule.range]}},u=[{id:f.id,params:p}],c=[{id:V.id,params:{unitId:t,subUnitId:o,ruleId:e.uid}}];return s.pushUndoRedo({unitID:t,redoMutations:u,undoMutations:c}),await d.executeCommand(f.id,p),!0}},H={type:r.CommandType.COMMAND,id:"data-validation.command.removeRule",handler(n,a){if(n.get(r.ILogService).error("[Deprecated]: `RemoveDataValidationCommand` is deprecated, please use `RemoveSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const{unitId:e,subUnitId:t,ruleId:o}=a,d=n.get(r.ICommandService),s=n.get(r.IUndoRedoService),p=n.get(l.DataValidationModel),u=[{id:V.id,params:a}],c=[{id:f.id,params:{unitId:e,subUnitId:t,rule:{...p.getRuleById(e,t,o)},index:p.getRuleIndex(e,t,o)}}];return s.pushUndoRedo({undoMutations:c,redoMutations:u,unitID:a.unitId}),d.executeCommand(V.id,a),!0}},Q={type:r.CommandType.COMMAND,id:"data-validation.command.updateDataValidationSetting",handler(n,a){if(n.get(r.ILogService).warn("[Deprecated]: `UpdateDataValidationOptionsCommand` is deprecated, please use `UpdateSheetDataValidationOptionsCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const e=n.get(r.ICommandService),t=n.get(r.IUndoRedoService),o=n.get(l.DataValidationModel),{unitId:d,subUnitId:s,ruleId:p,options:u}=a,c=o.getRuleById(d,s,p);if(!c)return!1;const v={unitId:d,subUnitId:s,ruleId:p,payload:{type:h.OPTIONS,payload:u}},E=[{id:g.id,params:v}],T={unitId:d,subUnitId:s,ruleId:p,payload:{type:h.OPTIONS,payload:N(c)}},S=[{id:g.id,params:T}];return t.pushUndoRedo({unitID:d,redoMutations:E,undoMutations:S}),e.executeCommand(g.id,v),!0}},F={type:r.CommandType.COMMAND,id:"data-validation.command.updateDataValidationOptions",handler(n,a){if(n.get(r.ILogService).error("[Deprecated]: `UpdateDataValidationSettingCommand` is deprecated, please use `UpdateSheetDataValidationSettingCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const e=n.get(r.ICommandService),t=n.get(r.IUndoRedoService),o=n.get(l.DataValidationModel),d=n.get(R),{unitId:s,subUnitId:p,ruleId:u,setting:c}=a,v=d.getValidatorItem(c.type);if(!v)return!1;const E=o.getRuleById(s,p,u);if(!E)return!1;const T={...E,...c};if(!v.validatorFormula(T,s,p).success)return!1;const S={unitId:s,subUnitId:p,ruleId:u,payload:{type:h.SETTING,payload:{...c,...v.normalizeFormula(T,s,p)}}},oa=[{id:g.id,params:S}],da={unitId:s,subUnitId:p,ruleId:u,payload:{type:h.SETTING,payload:D(E)}},sa=[{id:g.id,params:da}];return t.pushUndoRedo({unitID:s,redoMutations:oa,undoMutations:sa}),e.executeCommand(g.id,S),!0}},W={type:r.CommandType.COMMAND,id:"data-validation.command.removeAll",handler(n,a){if(n.get(r.ILogService).error("[Deprecated]: `RemoveAllDataValidationCommand` is deprecated, please use `RemoveSheetAllDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!a)return!1;const{unitId:e,subUnitId:t}=a,o=n.get(r.ICommandService),d=n.get(l.DataValidationModel),s=n.get(r.IUndoRedoService),p=[...d.getRules(e,t)],u={unitId:e,subUnitId:t,ruleId:p.map(E=>E.uid)},c=[{id:V.id,params:u}],v=[{id:f.id,params:{unitId:e,subUnitId:t,rule:p}}];return s.pushUndoRedo({redoMutations:c,undoMutations:v,unitID:e}),o.executeCommand(V.id,u),!0}},x="data-validation.config",J={};var z=Object.defineProperty,K=Object.getOwnPropertyDescriptor,Y=(n,a,i,e)=>{for(var t=e>1?void 0:e?K(a,i):a,o=n.length-1,d;o>=0;o--)(d=n[o])&&(t=(e?d(a,i,t):d(t))||t);return e&&t&&z(a,i,t),t},A=(n,a)=>(i,e)=>a(i,e,n);const X="UNIVER_DATA_VALIDATION_PLUGIN";l.UniverDataValidationPlugin=(O=class extends r.Plugin{constructor(a=J,i,e,t){super(),this._config=a,this._injector=i,this._commandService=e,this._configService=t;const{...o}=this._config;this._configService.setConfig(x,o)}onStarting(){[[l.DataValidationModel],[R],[l.DataValidationResourceController]].forEach(a=>this._injector.add(a)),[G,W,Q,F,H,f,g,V].forEach(a=>{this._commandService.registerCommand(a)})}onReady(){this._injector.get(l.DataValidationResourceController)}},m(O,"pluginName",X),m(O,"type",r.UniverInstanceType.UNIVER_SHEET),O),l.UniverDataValidationPlugin=Y([A(1,r.Inject(r.Injector)),A(2,r.ICommandService),A(3,r.IConfigService)],l.UniverDataValidationPlugin),r.DataValidationOperator.BETWEEN+"",r.DataValidationOperator.EQUAL+"",r.DataValidationOperator.GREATER_THAN+"",r.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",r.DataValidationOperator.LESS_THAN+"",r.DataValidationOperator.LESS_THAN_OR_EQUAL+"",r.DataValidationOperator.NOT_BETWEEN+"",r.DataValidationOperator.NOT_EQUAL+"";const Z={[r.DataValidationOperator.BETWEEN]:"dataValidation.ruleName.between",[r.DataValidationOperator.EQUAL]:"dataValidation.ruleName.equal",[r.DataValidationOperator.GREATER_THAN]:"dataValidation.ruleName.greaterThan",[r.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.ruleName.greaterThanOrEqual",[r.DataValidationOperator.LESS_THAN]:"dataValidation.ruleName.lessThan",[r.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.ruleName.lessThanOrEqual",[r.DataValidationOperator.NOT_BETWEEN]:"dataValidation.ruleName.notBetween",[r.DataValidationOperator.NOT_EQUAL]:"dataValidation.ruleName.notEqual"},k={[r.DataValidationOperator.BETWEEN]:"dataValidation.errorMsg.between",[r.DataValidationOperator.EQUAL]:"dataValidation.errorMsg.equal",[r.DataValidationOperator.GREATER_THAN]:"dataValidation.errorMsg.greaterThan",[r.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.errorMsg.greaterThanOrEqual",[r.DataValidationOperator.LESS_THAN]:"dataValidation.errorMsg.lessThan",[r.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.errorMsg.lessThanOrEqual",[r.DataValidationOperator.NOT_BETWEEN]:"dataValidation.errorMsg.notBetween",[r.DataValidationOperator.NOT_EQUAL]:"dataValidation.errorMsg.notEqual"},aa={[r.DataValidationOperator.BETWEEN]:"dataValidation.textLength.errorMsg.between",[r.DataValidationOperator.EQUAL]:"dataValidation.textLength.errorMsg.equal",[r.DataValidationOperator.GREATER_THAN]:"dataValidation.textLength.errorMsg.greaterThan",[r.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.greaterThanOrEqual",[r.DataValidationOperator.LESS_THAN]:"dataValidation.textLength.errorMsg.lessThan",[r.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.lessThanOrEqual",[r.DataValidationOperator.NOT_BETWEEN]:"dataValidation.textLength.errorMsg.notBetween",[r.DataValidationOperator.NOT_EQUAL]:"dataValidation.textLength.errorMsg.notEqual"},ta=[r.DataValidationOperator.BETWEEN,r.DataValidationOperator.NOT_BETWEEN];var ea=Object.defineProperty,ia=Object.getOwnPropertyDescriptor,ra=(n,a,i,e)=>{for(var t=e>1?void 0:e?ia(a,i):a,o=n.length-1,d;o>=0;o--)(d=n[o])&&(t=(e?d(a,i,t):d(t))||t);return e&&t&&ea(a,i,t),t},y=(n,a)=>(i,e)=>a(i,e,n);const U="{FORMULA1}",L="{FORMULA2}",na={[r.DataValidationOperator.BETWEEN]:"dataValidation.operators.between",[r.DataValidationOperator.EQUAL]:"dataValidation.operators.equal",[r.DataValidationOperator.GREATER_THAN]:"dataValidation.operators.greaterThan",[r.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.operators.greaterThanOrEqual",[r.DataValidationOperator.LESS_THAN]:"dataValidation.operators.lessThan",[r.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.operators.lessThanOrEqual",[r.DataValidationOperator.NOT_BETWEEN]:"dataValidation.operators.notBetween",[r.DataValidationOperator.NOT_EQUAL]:"dataValidation.operators.notEqual"};l.BaseDataValidator=class{constructor(a,i){m(this,"offsetFormulaByRange",!0);m(this,"formulaInput");m(this,"canvasRender",null);m(this,"dropdown");m(this,"optionsInput");m(this,"skipDefaultFontRender");this.localeService=a,this.injector=i}get operatorNames(){return this.operators.map(a=>this.localeService.t(na[a]))}get titleStr(){return this.localeService.t(this.title)}generateRuleName(a){var e,t;if(!a.operator)return this.titleStr;const i=this.localeService.t(Z[a.operator]).replace(U,(e=a.formula1)!=null?e:"").replace(L,(t=a.formula2)!=null?t:"");return`${this.titleStr} ${i}`}generateRuleErrorMessage(a,i){var t,o;return a.operator?`${this.localeService.t(k[a.operator]).replace(U,(t=a.formula1)!=null?t:"").replace(L,(o=a.formula2)!=null?o:"")}`:this.titleStr}getExtraStyle(a,i,e,t,o){}getRuleFinalError(a,i){return a.showErrorMessage&&a.error?a.error:this.generateRuleErrorMessage(a,i)}isEmptyCellValue(a){return a===""||a===void 0||a===null}normalizeFormula(a,i,e){return{formula1:a.formula1,formula2:a.formula2}}async isValidType(a,i,e){return!0}transform(a,i,e){return a}async validatorIsEqual(a,i,e){const{formula1:t}=i,{value:o}=a;return Number.isNaN(t)?!0:o===t}async validatorIsNotEqual(a,i,e){const{formula1:t}=i;return Number.isNaN(t)?!0:a.value!==t}async validatorIsBetween(a,i,e){const{formula1:t,formula2:o}=i;if(Number.isNaN(t)||Number.isNaN(o))return!0;const d=Math.min(t,o),s=Math.max(t,o);return a.value>=d&&a.value<=s}async validatorIsNotBetween(a,i,e){const{formula1:t,formula2:o}=i;if(Number.isNaN(t)||Number.isNaN(o))return!0;const d=Math.min(t,o),s=Math.max(t,o);return a.value<d||a.value>s}async validatorIsGreaterThan(a,i,e){const{formula1:t}=i;return Number.isNaN(t)?!0:a.value>t}async validatorIsGreaterThanOrEqual(a,i,e){const{formula1:t}=i;return Number.isNaN(t)?!0:a.value>=t}async validatorIsLessThan(a,i,e){const{formula1:t}=i;return Number.isNaN(t)?!0:a.value<t}async validatorIsLessThanOrEqual(a,i,e){const{formula1:t}=i;return Number.isNaN(t)?!0:a.value<=t}async validator(a,i){const{value:e,unitId:t,subUnitId:o}=a,d=this.isEmptyCellValue(e),{allowBlank:s=!0,operator:p}=i;if(d)return s;const u=await this.parseFormula(i,t,o,a.row,a.column);if(!u.isFormulaValid||!await this.isValidType(a,u,i))return!1;if(!r.Tools.isDefine(p))return!0;const c=this.transform(a,u,i);switch(p){case r.DataValidationOperator.BETWEEN:return this.validatorIsBetween(c,u,i);case r.DataValidationOperator.EQUAL:return this.validatorIsEqual(c,u,i);case r.DataValidationOperator.GREATER_THAN:return this.validatorIsGreaterThan(c,u,i);case r.DataValidationOperator.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(c,u,i);case r.DataValidationOperator.LESS_THAN:return this.validatorIsLessThan(c,u,i);case r.DataValidationOperator.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(c,u,i);case r.DataValidationOperator.NOT_BETWEEN:return this.validatorIsNotBetween(c,u,i);case r.DataValidationOperator.NOT_EQUAL:return this.validatorIsNotEqual(c,u,i);default:throw new Error("Unknown operator.")}}},l.BaseDataValidator=ra([y(0,r.Inject(r.LocaleService)),y(1,r.Inject(r.Injector))],l.BaseDataValidator),l.AddDataValidationMutation=f,l.DataValidatorRegistryScope=I,l.DataValidatorRegistryService=R,l.RemoveDataValidationMutation=V,l.TWO_FORMULA_OPERATOR_COUNT=ta,l.TextLengthErrorTitleMap=aa,l.UpdateDataValidationMutation=g,l.UpdateRuleType=h,l.getRuleOptions=N,l.getRuleSetting=D,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@univerjs/data-validation",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "private": false,
5
5
  "description": "Data validation library for Univer",
6
6
  "author": "DreamNum <developer@univer.ai>",
@@ -48,17 +48,17 @@
48
48
  "rxjs": ">=7.0.0"
49
49
  },
50
50
  "dependencies": {
51
- "@univerjs/core": "0.5.0"
51
+ "@univerjs/core": "0.5.1"
52
52
  },
53
53
  "devDependencies": {
54
- "@univerjs/protocol": "0.1.39-alpha.45",
54
+ "@univerjs/protocol": "0.1.39",
55
55
  "rxjs": "^7.8.1",
56
- "typescript": "^5.6.3",
57
- "vite": "^5.4.11",
58
- "vitest": "^2.1.5",
59
- "@univerjs-infra/shared": "0.5.0",
60
- "@univerjs/core": "0.5.0",
61
- "@univerjs/sheets": "0.5.0"
56
+ "typescript": "^5.7.2",
57
+ "vite": "^6.0.1",
58
+ "vitest": "^2.1.6",
59
+ "@univerjs/core": "0.5.1",
60
+ "@univerjs-infra/shared": "0.5.1",
61
+ "@univerjs/sheets": "0.5.1"
62
62
  },
63
63
  "space": {
64
64
  ".": {