@univerjs/data-validation 0.2.4 → 0.2.6

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.
@@ -1,5 +1,4 @@
1
- import { ICommand, IDataValidationRule, IDataValidationRuleBase, IDataValidationRuleOptions, IMutationInfo, IRange } from '@univerjs/core';
2
- import { Injector } from '@wendellhu/redi';
1
+ import { ICommand, IDataValidationRule, IDataValidationRuleBase, IDataValidationRuleOptions, IMutationInfo, Injector, IRange } from '@univerjs/core';
3
2
  import { ISheetCommandSharedParams } from '@univerjs/sheets';
4
3
  import { IRemoveDataValidationMutationParams } from '../mutations/data-validation.mutation';
5
4
 
@@ -1,18 +1,22 @@
1
1
  import { ICommand, IDataValidationRule } from '@univerjs/core';
2
2
  import { ISheetCommandSharedParams } from '@univerjs/sheets';
3
3
  import { IUpdateRulePayload } from '../../types/interfaces/i-update-rule-payload';
4
+ import { DataValidationChangeSource } from '../../models/data-validation-model';
4
5
 
5
6
  export interface IAddDataValidationMutationParams extends ISheetCommandSharedParams {
6
7
  rule: IDataValidationRule | IDataValidationRule[];
7
8
  index?: number;
9
+ source?: DataValidationChangeSource;
8
10
  }
9
11
  export declare const AddDataValidationMutation: ICommand<IAddDataValidationMutationParams>;
10
12
  export interface IRemoveDataValidationMutationParams extends ISheetCommandSharedParams {
11
13
  ruleId: string | string[];
14
+ source?: DataValidationChangeSource;
12
15
  }
13
16
  export declare const RemoveDataValidationMutation: ICommand<IRemoveDataValidationMutationParams>;
14
17
  export interface IUpdateDataValidationMutationParams extends ISheetCommandSharedParams {
15
18
  payload: IUpdateRulePayload;
16
19
  ruleId: string;
20
+ source?: DataValidationChangeSource;
17
21
  }
18
22
  export declare const UpdateDataValidationMutation: ICommand<IUpdateDataValidationMutationParams>;
@@ -1,5 +1,4 @@
1
- import { DataValidationOperator, DataValidationType, IDataValidationRuleBase, IDataValidationRuleOptions } from '@univerjs/core';
2
- import { IAccessor } from '@wendellhu/redi';
1
+ import { IAccessor, IDataValidationRuleBase, IDataValidationRuleOptions, DataValidationOperator, DataValidationType } from '@univerjs/core';
3
2
 
4
3
  export declare function getRuleSetting(rule: IDataValidationRuleBase): IDataValidationRuleBase;
5
4
  export declare function getRuleOptions(rule: IDataValidationRuleOptions): IDataValidationRuleOptions;
@@ -15,7 +15,7 @@
15
15
  */
16
16
  export { UniverDataValidationPlugin } from './plugin';
17
17
  export { DataValidatorRegistryService, DataValidatorRegistryScope } from './services/data-validator-registry.service';
18
- export { DataValidationModel } from './models/data-validation-model';
18
+ export { DataValidationModel, type DataValidationChangeSource } from './models/data-validation-model';
19
19
  export { createDefaultNewRule, getRuleOptions, getRuleSetting, } from './common/util';
20
20
  export { UpdateRuleType } from './types/enum/update-rule-type';
21
21
  export type { IDataValidatorOperatorConfig } from './types/interfaces/i-data-validator-operator-config';
@@ -8,9 +8,8 @@ export declare class DataValidationManager<T extends IDataValidationRule> extend
8
8
  readonly unitId: string;
9
9
  readonly subUnitId: string;
10
10
  readonly dataValidations$: import('rxjs').Observable<T[]>;
11
- constructor(unitId: string, subUnitId: string, dataValidations: T[] | undefined);
11
+ constructor(unitId: string, subUnitId: string);
12
12
  private _notice;
13
- private _insertRules;
14
13
  getRuleById(id: string): T | undefined;
15
14
  getRuleIndex(id: string): number;
16
15
  addRule(rule: T | T[], index?: number): void;
@@ -2,12 +2,14 @@ import { CellValue, DataValidationStatus, Disposable, IDataValidationRule, ILogS
2
2
  import { IUpdateRulePayload } from '../types/interfaces/i-update-rule-payload';
3
3
  import { DataValidationManager } from './data-validation-manager';
4
4
 
5
- type RuleChangeType = 'update' | 'add' | 'remove';
5
+ type DataValidationChangeType = 'update' | 'add' | 'remove';
6
+ export type DataValidationChangeSource = 'command' | 'patched';
6
7
  export interface IRuleChange<T extends IDataValidationRule> {
7
8
  rule?: T;
8
- type: RuleChangeType;
9
+ type: DataValidationChangeType;
9
10
  unitId: string;
10
11
  subUnitId: string;
12
+ source: DataValidationChangeSource;
11
13
  }
12
14
  export interface IValidStatusChange {
13
15
  unitId: string;
@@ -28,9 +30,9 @@ export declare class DataValidationModel<T extends IDataValidationRule = IDataVa
28
30
  setManagerCreator(creator: (unitId: string, subUnitId: string) => DataValidationManager<T>): void;
29
31
  ensureManager(unitId: string, subUnitId: string): DataValidationManager<T>;
30
32
  private _addRuleSideEffect;
31
- addRule(unitId: string, subUnitId: string, rule: T | T[], index?: number): void;
32
- updateRule(unitId: string, subUnitId: string, ruleId: string, payload: IUpdateRulePayload): void;
33
- removeRule(unitId: string, subUnitId: string, ruleId: string): void;
33
+ addRule(unitId: string, subUnitId: string, rule: T | T[], source: DataValidationChangeSource, index?: number): void;
34
+ updateRule(unitId: string, subUnitId: string, ruleId: string, payload: IUpdateRulePayload, source: DataValidationChangeSource): void;
35
+ removeRule(unitId: string, subUnitId: string, ruleId: string, source: DataValidationChangeSource): void;
34
36
  getRuleById(unitId: string, subUnitId: string, ruleId: string): T | undefined;
35
37
  getRuleIndex(unitId: string, subUnitId: string, ruleId: string): number;
36
38
  getRules(unitId: string, subUnitId: string): T[];
@@ -1,5 +1,4 @@
1
- import { ICommandService, Plugin, UniverInstanceType } from '@univerjs/core';
2
- import { Injector } from '@wendellhu/redi';
1
+ import { ICommandService, Injector, Plugin, UniverInstanceType } from '@univerjs/core';
3
2
 
4
3
  export declare class UniverDataValidationPlugin extends Plugin {
5
4
  protected _injector: Injector;
@@ -7,5 +6,5 @@ export declare class UniverDataValidationPlugin extends Plugin {
7
6
  static pluginName: string;
8
7
  static type: UniverInstanceType;
9
8
  constructor(_config: unknown, _injector: Injector, _commandService: ICommandService);
10
- onStarting(injector: Injector): void;
9
+ onStarting(): void;
11
10
  }
@@ -13,7 +13,7 @@ export declare class DataValidatorRegistryService {
13
13
  validatorsChange$: import('rxjs').Observable<void>;
14
14
  private _addValidatorToScope;
15
15
  private _removeValidatorFromScope;
16
- register(validator: BaseDataValidator<any>): import('@wendellhu/redi').IDisposable;
16
+ register(validator: BaseDataValidator<any>): import('@univerjs/core').IDisposable;
17
17
  getValidatorItem(id: string): BaseDataValidator<import('@univerjs/core').CellValue> | undefined;
18
18
  getValidatorsByScope(scope: string): BaseDataValidator<import('@univerjs/core').CellValue>[] | undefined;
19
19
  }
@@ -1,5 +1,4 @@
1
- import { CellValue, IDataValidationRule, IDataValidationRuleBase, Nullable, DataValidationOperator, LocaleService } from '@univerjs/core';
2
- import { Injector } from '@wendellhu/redi';
1
+ import { CellValue, IDataValidationRule, IDataValidationRuleBase, Nullable, DataValidationOperator, Injector, LocaleService } from '@univerjs/core';
3
2
  import { IBaseDataValidationWidget } from './base-widget';
4
3
 
5
4
  export interface IValidatorCellInfo<DataType = Nullable<CellValue>> {
package/lib/umd/index.js CHANGED
@@ -1 +1 @@
1
- (function(s,n){typeof exports=="object"&&typeof module<"u"?n(exports,require("@univerjs/core"),require("@wendellhu/redi"),require("rxjs"),require("@univerjs/sheets")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","@wendellhu/redi","rxjs","@univerjs/sheets"],n):(s=typeof globalThis<"u"?globalThis:s||self,n(s.UniverDataValidation={},s.UniverCore,s["@wendellhu/redi"],s.rxjs,s.UniverSheets))})(this,function(s,n,m,S,T){"use strict";var ga=Object.defineProperty;var Va=(s,n,m)=>n in s?ga(s,n,{enumerable:!0,configurable:!0,writable:!0,value:m}):s[n]=m;var h=(s,n,m)=>Va(s,typeof n!="symbol"?n+"":n,m);var f;var C=(r=>(r.SHEET="sheet",r))(C||{});class I{constructor(){h(this,"_validatorByScopes",new Map);h(this,"_validatorMap",new Map);h(this,"_validatorsChange$",new S.BehaviorSubject(void 0));h(this,"validatorsChange$",this._validatorsChange$.asObservable())}_addValidatorToScope(e,a){this._validatorByScopes.has(a)||this._validatorByScopes.set(a,[]);const t=this._validatorByScopes.get(a);if(t.findIndex(i=>i.id===e.id)>-1)throw new Error(`Validator item with the same id ${e.id} has already been added!`);t.push(e)}_removeValidatorFromScope(e,a){const t=this._validatorByScopes.get(a);if(!t)return;const i=t.findIndex(o=>o.id===e.id);i>-1&&t.splice(i,1)}register(e){return this._validatorMap.set(e.id,e),Array.isArray(e.scopes)?e.scopes.forEach(a=>{this._addValidatorToScope(e,a)}):this._addValidatorToScope(e,e.scopes),this._validatorsChange$.next(),n.toDisposable(()=>{this._validatorMap.delete(e.id),Array.isArray(e.scopes)?e.scopes.forEach(a=>{this._removeValidatorFromScope(e,a)}):this._removeValidatorFromScope(e,e.scopes),this._validatorsChange$.next()})}getValidatorItem(e){return this._validatorMap.get(e)}getValidatorsByScope(e){return this._validatorByScopes.get(e)}}var g=(r=>(r[r.SETTING=0]="SETTING",r[r.RANGE=1]="RANGE",r[r.OPTIONS=2]="OPTIONS",r))(g||{});function M(r){return{type:r.type,operator:r.operator,formula1:r.formula1,formula2:r.formula2,allowBlank:r.allowBlank}}function R(r){return{error:r.error,errorStyle:r.errorStyle,errorTitle:r.errorTitle,imeMode:r.imeMode,prompt:r.prompt,promptTitle:r.promptTitle,showDropDown:r.showDropDown,showErrorMessage:r.showErrorMessage,showInputMessage:r.showInputMessage,renderMode:r.renderMode,bizInfo:r.bizInfo}}function G(r){const a=r.get(T.SheetsSelectionsService).getCurrentSelections().map(o=>o.range);return{uid:n.Tools.generateRandomId(6),type:n.DataValidationType.DECIMAL,operator:n.DataValidationOperator.EQUAL,formula1:"100",ranges:a!=null?a:[{startColumn:0,endColumn:0,startRow:0,endRow:0}]}}class U extends n.Disposable{constructor(a,t,i){super();h(this,"_dataValidations");h(this,"_dataValidationMap",new Map);h(this,"_dataValidations$",new S.Subject);h(this,"unitId");h(this,"subUnitId");h(this,"dataValidations$",this._dataValidations$.asObservable());this.unitId=a,this.subUnitId=t,i&&(this._insertRules(i),this._notice(),this.disposeWithMe({dispose:()=>{this._dataValidations$.complete()}}))}_notice(){this._dataValidations$.next(this._dataValidations)}_insertRules(a){this._dataValidations=a,a.forEach(t=>{this._dataValidationMap.set(t.uid,t)})}getRuleById(a){return this._dataValidationMap.get(a)}getRuleIndex(a){return this._dataValidations.findIndex(t=>t.uid===a)}addRule(a,t){const o=(Array.isArray(a)?a:[a]).filter(d=>!this._dataValidationMap.has(d.uid));typeof t=="number"&&t<this._dataValidations.length?this._dataValidations.splice(t,0,...o):this._dataValidations.push(...o),o.forEach(d=>{this._dataValidationMap.set(d.uid,d)}),this._notice()}removeRule(a){const t=this._dataValidations.findIndex(i=>i.uid===a);t>-1&&(this._dataValidations.splice(t,1),this._dataValidationMap.delete(a),this._notice())}updateRule(a,t){const i=this._dataValidationMap.get(a),o=this._dataValidations.findIndex(l=>a===l.uid);if(!i)throw new Error(`Data validation rule is not found, ruleId: ${a}.`);const d={...i};switch(t.type){case g.RANGE:{d.ranges=t.payload;break}case g.SETTING:{Object.assign(d,M(t.payload));break}case g.OPTIONS:{Object.assign(d,R(t.payload));break}}return this._dataValidations[o]=d,this._dataValidationMap.set(a,d),this._notice(),d}getDataValidations(){return this._dataValidations}toJSON(){return this._dataValidations}validator(a,t,i,o){return n.DataValidationStatus.VALID}}var Q=Object.defineProperty,W=Object.getOwnPropertyDescriptor,F=(r,e,a,t)=>{for(var i=t>1?void 0:t?W(e,a):e,o=r.length-1,d;o>=0;o--)(d=r[o])&&(i=(t?d(e,a,i):d(i))||i);return t&&i&&Q(e,a,i),i},J=(r,e)=>(a,t)=>e(a,t,r);s.DataValidationModel=class extends n.Disposable{constructor(a){super();h(this,"_model",new Map);h(this,"_managerCreator",(a,t)=>new U(a,t,[]));h(this,"_ruleChange$",new S.Subject);h(this,"_validStatusChange$",new S.Subject);h(this,"ruleChange$",this._ruleChange$.asObservable());h(this,"ruleChangeDebounce$",this.ruleChange$.pipe(S.debounceTime(20)));h(this,"validStatusChange$",this._validStatusChange$.asObservable().pipe(S.debounceTime(20)));this._logService=a,this.disposeWithMe({dispose:()=>{this._ruleChange$.complete(),this._validStatusChange$.complete()}})}setManagerCreator(a){this._managerCreator=a}ensureManager(a,t){this._model.has(a)||this._model.set(a,new Map);const i=this._model.get(a);if(i.has(t))return i.get(t);const o=this._managerCreator(a,t);return i.set(t,o),o}_addRuleSideEffect(a,t,i){this.ensureManager(a,t).getRuleById(i.uid)||this._ruleChange$.next({rule:i,type:"add",unitId:a,subUnitId:t})}addRule(a,t,i,o){try{const d=this.ensureManager(a,t);(Array.isArray(i)?i:[i]).forEach(u=>{this._addRuleSideEffect(a,t,u)}),d.addRule(i,o)}catch(d){this._logService.error(d)}}updateRule(a,t,i,o){try{const l=this.ensureManager(a,t).updateRule(i,o);this._ruleChange$.next({rule:l,type:"update",unitId:a,subUnitId:t})}catch(d){this._logService.error(d)}}removeRule(a,t,i){try{const o=this.ensureManager(a,t),d=o.getRuleById(i);d&&(o.removeRule(i),this._ruleChange$.next({rule:d,type:"remove",unitId:a,subUnitId:t}))}catch(o){this._logService.error(o)}}getRuleById(a,t,i){return this.ensureManager(a,t).getRuleById(i)}getRuleIndex(a,t,i){return this.ensureManager(a,t).getRuleIndex(i)}getRules(a,t){return this.ensureManager(a,t).getDataValidations()}validator(a,t,i){const{unitId:o,subUnitId:d}=i;return this.ensureManager(o,d).validator(a,t,i,(u,c)=>{c&&this._validStatusChange$.next({unitId:o,subUnitId:d,ruleId:t.uid,status:u})})}getUnitRules(a){const t=this._model.get(a);if(!t)return[];const i=[];return t.forEach(o=>{i.push([o.subUnitId,o.getDataValidations()])}),i}deleteUnitRules(a){this._model.delete(a)}getSubUnitIds(a){var t,i;return Array.from((i=(t=this._model.get(a))==null?void 0:t.keys())!=null?i:[])}},s.DataValidationModel=F([J(0,n.ILogService)],s.DataValidationModel);const V={type:n.CommandType.MUTATION,id:"data-validation.mutation.addRule",handler(r,e){if(!e)return!1;const{unitId:a,subUnitId:t,rule:i,index:o}=e;return r.get(s.DataValidationModel).addRule(a,t,i,o),!0}},v={type:n.CommandType.MUTATION,id:"data-validation.mutation.removeRule",handler(r,e){if(!e)return!1;const{unitId:a,subUnitId:t,ruleId:i}=e,o=r.get(s.DataValidationModel);return Array.isArray(i)?i.forEach(d=>{o.removeRule(a,t,d)}):o.removeRule(a,t,i),!0}},E={type:n.CommandType.MUTATION,id:"data-validation.mutation.updateRule",handler(r,e){if(!e)return!1;const{unitId:a,subUnitId:t,ruleId:i,payload:o}=e;return r.get(s.DataValidationModel).updateRule(a,t,i,o),!0}},L={type:n.CommandType.COMMAND,id:"data-validation.command.addRule",async handler(r,e){if(r.get(n.ILogService).warn("[Deprecated] AddDataValidationCommand is deprecated, please use AddSheetDataValidationCommand in @univerjs/sheets-data-validation instead!"),!e)return!1;const{rule:t,unitId:i,subUnitId:o}=e,d=r.get(n.ICommandService),l=r.get(n.IUndoRedoService),u={...e,rule:{...e.rule,ranges:[e.rule.range]}},c=[{id:V.id,params:u}],p=[{id:v.id,params:{unitId:i,subUnitId:o,ruleId:t.uid}}];return l.pushUndoRedo({unitID:i,redoMutations:c,undoMutations:p}),await d.executeCommand(V.id,u),!0}},z=(r,e)=>{const a=r.get(s.DataValidationModel),{unitId:t,subUnitId:i,ruleId:o}=e;if(Array.isArray(o)){const l=o.map(u=>a.getRuleById(t,i,u)).filter(Boolean);return[{id:V.id,params:{unitId:t,subUnitId:i,rule:l}}]}return[{id:V.id,params:{unitId:t,subUnitId:i,rule:{...a.getRuleById(t,i,o)},index:a.getRuleIndex(t,i,o)}}]},w={type:n.CommandType.COMMAND,id:"data-validation.command.removeRule",handler(r,e){if(!e)return!1;const{unitId:a,subUnitId:t,ruleId:i}=e,o=r.get(n.ICommandService),d=r.get(n.IUndoRedoService),l=r.get(s.DataValidationModel),u=[{id:v.id,params:e}],c=[{id:V.id,params:{unitId:a,subUnitId:t,rule:{...l.getRuleById(a,t,i)},index:l.getRuleIndex(a,t,i)}}];return d.pushUndoRedo({undoMutations:c,redoMutations:u,unitID:e.unitId}),o.executeCommand(v.id,e),!0}},b={type:n.CommandType.COMMAND,id:"data-validation.command.updateDataValidationSetting",handler(r,e){if(r.get(n.ILogService).warn("[Deprecated] UpdateDataValidationOptionsCommand is deprecated, please use UpdateSheetDataValidationOptionsCommand in @univerjs/sheets-data-validation instead!"),!e)return!1;const t=r.get(n.ICommandService),i=r.get(n.IUndoRedoService),o=r.get(s.DataValidationModel),{unitId:d,subUnitId:l,ruleId:u,options:c}=e,p=o.getRuleById(d,l,u);if(!p)return!1;const _={unitId:d,subUnitId:l,ruleId:u,payload:{type:g.OPTIONS,payload:c}},D=[{id:E.id,params:_}],O={unitId:d,subUnitId:l,ruleId:u,payload:{type:g.OPTIONS,payload:R(p)}},N=[{id:E.id,params:O}];return i.pushUndoRedo({unitID:d,redoMutations:D,undoMutations:N}),t.executeCommand(E.id,_),!0}},P={type:n.CommandType.COMMAND,id:"data-validation.command.updateDataValidationOptions",handler(r,e){if(r.get(n.ILogService).warn("[Deprecated] UpdateDataValidationSettingCommand is deprecated, please use UpdateSheetDataValidationSettingCommand in @univerjs/sheets-data-validation instead!"),!e)return!1;const t=r.get(n.ICommandService),i=r.get(n.IUndoRedoService),o=r.get(s.DataValidationModel),d=r.get(I),{unitId:l,subUnitId:u,ruleId:c,setting:p}=e,_=d.getValidatorItem(p.type);if(!_)return!1;const D=o.getRuleById(l,u,c);if(!D||!_.validatorFormula({...D,...p},l,u).success)return!1;const O={unitId:l,subUnitId:u,ruleId:c,payload:{type:g.SETTING,payload:p}},N=[{id:E.id,params:O}],pa={unitId:l,subUnitId:u,ruleId:c,payload:{type:g.SETTING,payload:M(D)}},ma=[{id:E.id,params:pa}];return i.pushUndoRedo({unitID:l,redoMutations:N,undoMutations:ma}),t.executeCommand(E.id,O),!0}},B={type:n.CommandType.COMMAND,id:"data-validation.command.removeAll",handler(r,e){if(!e)return!1;const{unitId:a,subUnitId:t}=e,i=r.get(n.ICommandService),o=r.get(s.DataValidationModel),d=r.get(n.IUndoRedoService),l=[...o.getRules(a,t)],u={unitId:a,subUnitId:t,ruleId:l.map(_=>_.uid)},c=[{id:v.id,params:u}],p=[{id:V.id,params:{unitId:a,subUnitId:t,rule:l}}];return d.pushUndoRedo({redoMutations:c,undoMutations:p,unitID:a}),i.executeCommand(v.id,u),!0}};var K=Object.defineProperty,X=Object.getOwnPropertyDescriptor,Y=(r,e,a,t)=>{for(var i=t>1?void 0:t?X(e,a):e,o=r.length-1,d;o>=0;o--)(d=r[o])&&(i=(t?d(e,a,i):d(i))||i);return t&&i&&K(e,a,i),i},A=(r,e)=>(a,t)=>e(a,t,r);const Z="SHEET_DATA_VALIDATION_PLUGIN";s.DataValidationResourceController=class extends n.Disposable{constructor(e,a,t){super(),this._resourceManagerService=e,this._univerInstanceService=a,this._dataValidationModel=t,this._initSnapshot()}_initSnapshot(){const e=t=>{const i=this._dataValidationModel.getUnitRules(t),o={};return i?(i.forEach(([d,l])=>{o[d]=l}),JSON.stringify(o)):""},a=t=>{if(!t)return{};try{return JSON.parse(t)}catch{return{}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:Z,businesses:[n.UniverInstanceType.UNIVER_SHEET],toJson:t=>e(t),parseJson:t=>a(t),onUnLoad:t=>{this._dataValidationModel.deleteUnitRules(t)},onLoad:(t,i)=>{Object.keys(i).forEach(o=>{i[o].forEach(l=>{this._dataValidationModel.addRule(t,o,l)})})}}))}},s.DataValidationResourceController=Y([n.OnLifecycle(n.LifecycleStages.Ready,s.DataValidationResourceController),A(0,n.IResourceManagerService),A(1,n.IUniverInstanceService),A(2,m.Inject(s.DataValidationModel))],s.DataValidationResourceController);var x=Object.defineProperty,k=Object.getOwnPropertyDescriptor,aa=(r,e,a,t)=>{for(var i=t>1?void 0:t?k(e,a):e,o=r.length-1,d;o>=0;o--)(d=r[o])&&(i=(t?d(e,a,i):d(i))||i);return t&&i&&x(e,a,i),i},y=(r,e)=>(a,t)=>e(a,t,r);s.DataValidationSheetController=class extends n.Disposable{constructor(e,a,t){super(),this._sheetInterceptorService=e,this._univerInstanceService=a,this._dataValidationModel=t,this._initSheetChange()}_initSheetChange(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:e=>{var a;if(e.id===T.RemoveSheetCommand.id){const t=e.params,i=t.unitId||this._univerInstanceService.getCurrentUnitForType(n.UniverInstanceType.UNIVER_SHEET).getUnitId(),o=this._univerInstanceService.getUniverSheetInstance(i);if(!o)return{redos:[],undos:[]};const d=t.subUnitId||((a=o.getActiveSheet())==null?void 0:a.getSheetId());if(!d)return{redos:[],undos:[]};const l=this._dataValidationModel.ensureManager(i,d);if(!l)return{redos:[],undos:[]};const u=l.getDataValidations(),c=u.map(D=>D.uid),p={unitId:i,subUnitId:d,ruleId:c},_={unitId:i,subUnitId:d,rule:u};return{redos:[{id:v.id,params:p}],undos:[{id:V.id,params:_}]}}return{redos:[],undos:[]}}}))}},s.DataValidationSheetController=aa([n.OnLifecycle(n.LifecycleStages.Ready,s.DataValidationSheetController),y(0,m.Inject(T.SheetInterceptorService)),y(1,m.Inject(n.IUniverInstanceService)),y(2,m.Inject(s.DataValidationModel))],s.DataValidationSheetController);var ta=Object.defineProperty,ea=Object.getOwnPropertyDescriptor,ia=(r,e,a,t)=>{for(var i=t>1?void 0:t?ea(e,a):e,o=r.length-1,d;o>=0;o--)(d=r[o])&&(i=(t?d(e,a,i):d(i))||i);return t&&i&&ta(e,a,i),i},$=(r,e)=>(a,t)=>e(a,t,r);const na="UNIVER_DATA_VALIDATION_PLUGIN";s.UniverDataValidationPlugin=(f=class extends n.Plugin{constructor(e,a,t){super(),this._injector=a,this._commandService=t}onStarting(e){[[s.DataValidationModel],[I],[s.DataValidationResourceController],[s.DataValidationSheetController]].forEach(a=>{e.add(a)}),[L,B,b,P,w,V,E,v].forEach(a=>{this._commandService.registerCommand(a)})}},h(f,"pluginName",na),h(f,"type",n.UniverInstanceType.UNIVER_SHEET),f),s.UniverDataValidationPlugin=ia([$(1,m.Inject(m.Injector)),$(2,n.ICommandService)],s.UniverDataValidationPlugin),n.DataValidationOperator.BETWEEN+"",n.DataValidationOperator.EQUAL+"",n.DataValidationOperator.GREATER_THAN+"",n.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",n.DataValidationOperator.LESS_THAN+"",n.DataValidationOperator.LESS_THAN_OR_EQUAL+"",n.DataValidationOperator.NOT_BETWEEN+"",n.DataValidationOperator.NOT_EQUAL+"";const ra={[n.DataValidationOperator.BETWEEN]:"dataValidation.ruleName.between",[n.DataValidationOperator.EQUAL]:"dataValidation.ruleName.equal",[n.DataValidationOperator.GREATER_THAN]:"dataValidation.ruleName.greaterThan",[n.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.ruleName.greaterThanOrEqual",[n.DataValidationOperator.LESS_THAN]:"dataValidation.ruleName.lessThan",[n.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.ruleName.lessThanOrEqual",[n.DataValidationOperator.NOT_BETWEEN]:"dataValidation.ruleName.notBetween",[n.DataValidationOperator.NOT_EQUAL]:"dataValidation.ruleName.notEqual"},oa={[n.DataValidationOperator.BETWEEN]:"dataValidation.errorMsg.between",[n.DataValidationOperator.EQUAL]:"dataValidation.errorMsg.equal",[n.DataValidationOperator.GREATER_THAN]:"dataValidation.errorMsg.greaterThan",[n.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.errorMsg.greaterThanOrEqual",[n.DataValidationOperator.LESS_THAN]:"dataValidation.errorMsg.lessThan",[n.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.errorMsg.lessThanOrEqual",[n.DataValidationOperator.NOT_BETWEEN]:"dataValidation.errorMsg.notBetween",[n.DataValidationOperator.NOT_EQUAL]:"dataValidation.errorMsg.notEqual"},da={[n.DataValidationOperator.BETWEEN]:"dataValidation.textLength.errorMsg.between",[n.DataValidationOperator.EQUAL]:"dataValidation.textLength.errorMsg.equal",[n.DataValidationOperator.GREATER_THAN]:"dataValidation.textLength.errorMsg.greaterThan",[n.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.greaterThanOrEqual",[n.DataValidationOperator.LESS_THAN]:"dataValidation.textLength.errorMsg.lessThan",[n.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.lessThanOrEqual",[n.DataValidationOperator.NOT_BETWEEN]:"dataValidation.textLength.errorMsg.notBetween",[n.DataValidationOperator.NOT_EQUAL]:"dataValidation.textLength.errorMsg.notEqual"};var sa=Object.defineProperty,la=Object.getOwnPropertyDescriptor,ua=(r,e,a,t)=>{for(var i=t>1?void 0:t?la(e,a):e,o=r.length-1,d;o>=0;o--)(d=r[o])&&(i=(t?d(e,a,i):d(i))||i);return t&&i&&sa(e,a,i),i},j=(r,e)=>(a,t)=>e(a,t,r);const q="{FORMULA1}",H="{FORMULA2}",ca={[n.DataValidationOperator.BETWEEN]:"dataValidation.operators.between",[n.DataValidationOperator.EQUAL]:"dataValidation.operators.equal",[n.DataValidationOperator.GREATER_THAN]:"dataValidation.operators.greaterThan",[n.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.operators.greaterThanOrEqual",[n.DataValidationOperator.LESS_THAN]:"dataValidation.operators.lessThan",[n.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.operators.lessThanOrEqual",[n.DataValidationOperator.NOT_BETWEEN]:"dataValidation.operators.notBetween",[n.DataValidationOperator.NOT_EQUAL]:"dataValidation.operators.notEqual"};s.BaseDataValidator=class{constructor(e,a){h(this,"canvasRender",null);h(this,"dropdown");h(this,"optionsInput");this.localeService=e,this.injector=a}get operatorNames(){return this.operators.map(e=>this.localeService.t(ca[e]))}get titleStr(){return this.localeService.t(this.title)}skipDefaultFontRender(e,a,t){return!1}generateRuleName(e){var t,i;if(!e.operator)return this.titleStr;const a=this.localeService.t(ra[e.operator]).replace(q,(t=e.formula1)!=null?t:"").replace(H,(i=e.formula2)!=null?i:"");return`${this.titleStr} ${a}`}generateRuleErrorMessage(e){var t,i;return e.operator?`${this.localeService.t(oa[e.operator]).replace(q,(t=e.formula1)!=null?t:"").replace(H,(i=e.formula2)!=null?i:"")}`:this.titleStr}getRuleFinalError(e){return e.showInputMessage&&e.error?e.error:this.generateRuleErrorMessage(e)}isEmptyCellValue(e){return e===""||e===void 0||e===null}async isValidType(e,a,t){return!0}transform(e,a,t){return e}async validatorIsEqual(e,a,t){return!0}async validatorIsNotEqual(e,a,t){return!0}async validatorIsBetween(e,a,t){return!0}async validatorIsNotBetween(e,a,t){return!0}async validatorIsGreaterThan(e,a,t){return!0}async validatorIsGreaterThanOrEqual(e,a,t){return!0}async validatorIsLessThan(e,a,t){return!0}async validatorIsLessThanOrEqual(e,a,t){return!0}async validator(e,a){const{value:t,unitId:i,subUnitId:o}=e,d=this.isEmptyCellValue(t),{allowBlank:l=!0,operator:u}=a;if(d)return l;const c=await this.parseFormula(a,i,o);if(!await this.isValidType(e,c,a))return!1;if(!n.Tools.isDefine(u))return!0;const p=this.transform(e,c,a);switch(u){case n.DataValidationOperator.BETWEEN:return this.validatorIsBetween(p,c,a);case n.DataValidationOperator.EQUAL:return this.validatorIsEqual(p,c,a);case n.DataValidationOperator.GREATER_THAN:return this.validatorIsGreaterThan(p,c,a);case n.DataValidationOperator.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(p,c,a);case n.DataValidationOperator.LESS_THAN:return this.validatorIsLessThan(p,c,a);case n.DataValidationOperator.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(p,c,a);case n.DataValidationOperator.NOT_BETWEEN:return this.validatorIsNotBetween(p,c,a);case n.DataValidationOperator.NOT_EQUAL:return this.validatorIsNotEqual(p,c,a);default:throw new Error("Unknown operator.")}}},s.BaseDataValidator=ua([j(0,m.Inject(n.LocaleService)),j(1,m.Inject(m.Injector))],s.BaseDataValidator);const ha=[n.DataValidationOperator.BETWEEN,n.DataValidationOperator.NOT_BETWEEN];s.AddDataValidationCommand=L,s.AddDataValidationMutation=V,s.DataValidationManager=U,s.DataValidatorRegistryScope=C,s.DataValidatorRegistryService=I,s.RemoveAllDataValidationCommand=B,s.RemoveDataValidationCommand=w,s.RemoveDataValidationMutation=v,s.TWO_FORMULA_OPERATOR_COUNT=ha,s.TextLengthErrorTitleMap=da,s.UpdateDataValidationMutation=E,s.UpdateDataValidationOptionsCommand=b,s.UpdateDataValidationSettingCommand=P,s.UpdateRuleType=g,s.createDefaultNewRule=G,s.getRuleOptions=R,s.getRuleSetting=M,s.removeDataValidationUndoFactory=z,Object.defineProperty(s,Symbol.toStringTag,{value:"Module"})});
1
+ (function(global,factory){typeof exports=="object"&&typeof module<"u"?factory(exports,require("@univerjs/core"),require("rxjs"),require("@univerjs/sheets")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","rxjs","@univerjs/sheets"],factory):(global=typeof globalThis<"u"?globalThis:global||self,factory(global.UniverDataValidation={},global.UniverCore,global.rxjs,global.UniverSheets))})(this,function(exports2,core,rxjs,sheets){"use strict";var __defProp=Object.defineProperty;var __defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value;var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __publicField=(obj,key,value)=>__defNormalProp(obj,typeof key!="symbol"?key+"":key,value);var _a,_b,_c,_d,_e;var DataValidatorRegistryScope=(DataValidatorRegistryScope2=>(DataValidatorRegistryScope2.SHEET="sheet",DataValidatorRegistryScope2))(DataValidatorRegistryScope||{});const _DataValidatorRegistryService=class _DataValidatorRegistryService{constructor(){__publicField(this,"_validatorByScopes",new Map);__publicField(this,"_validatorMap",new Map);__publicField(this,"_validatorsChange$",new rxjs.BehaviorSubject(void 0));__publicField(this,"validatorsChange$",this._validatorsChange$.asObservable())}_addValidatorToScope(validator,scope){this._validatorByScopes.has(scope)||this._validatorByScopes.set(scope,[]);const validators=this._validatorByScopes.get(scope);if(validators.findIndex(m=>m.id===validator.id)>-1)throw new Error(`Validator item with the same id ${validator.id} has already been added!`);validators.push(validator)}_removeValidatorFromScope(validator,scope){const validators=this._validatorByScopes.get(scope);if(!validators)return;const index=validators.findIndex(v=>v.id===validator.id);index>-1&&validators.splice(index,1)}register(validator){return this._validatorMap.set(validator.id,validator),Array.isArray(validator.scopes)?validator.scopes.forEach(scope=>{this._addValidatorToScope(validator,scope)}):this._addValidatorToScope(validator,validator.scopes),this._validatorsChange$.next(),core.toDisposable(()=>{this._validatorMap.delete(validator.id),Array.isArray(validator.scopes)?validator.scopes.forEach(scope=>{this._removeValidatorFromScope(validator,scope)}):this._removeValidatorFromScope(validator,validator.scopes),this._validatorsChange$.next()})}getValidatorItem(id){return this._validatorMap.get(id)}getValidatorsByScope(scope){return this._validatorByScopes.get(scope)}};__name(_DataValidatorRegistryService,"DataValidatorRegistryService");let DataValidatorRegistryService=_DataValidatorRegistryService;var UpdateRuleType=(UpdateRuleType2=>(UpdateRuleType2[UpdateRuleType2.SETTING=0]="SETTING",UpdateRuleType2[UpdateRuleType2.RANGE=1]="RANGE",UpdateRuleType2[UpdateRuleType2.OPTIONS=2]="OPTIONS",UpdateRuleType2))(UpdateRuleType||{});function getRuleSetting(rule){return{type:rule.type,operator:rule.operator,formula1:rule.formula1,formula2:rule.formula2,allowBlank:rule.allowBlank}}__name(getRuleSetting,"getRuleSetting");function getRuleOptions(rule){return{error:rule.error,errorStyle:rule.errorStyle,errorTitle:rule.errorTitle,imeMode:rule.imeMode,prompt:rule.prompt,promptTitle:rule.promptTitle,showDropDown:rule.showDropDown,showErrorMessage:rule.showErrorMessage,showInputMessage:rule.showInputMessage,renderMode:rule.renderMode,bizInfo:rule.bizInfo}}__name(getRuleOptions,"getRuleOptions");function createDefaultNewRule(accessor){const currentRanges=accessor.get(sheets.SheetsSelectionsService).getCurrentSelections().map(s=>s.range);return{uid:core.Tools.generateRandomId(6),type:core.DataValidationType.DECIMAL,operator:core.DataValidationOperator.EQUAL,formula1:"100",ranges:currentRanges!=null?currentRanges:[{startColumn:0,endColumn:0,startRow:0,endRow:0}]}}__name(createDefaultNewRule,"createDefaultNewRule");const _DataValidationManager=class _DataValidationManager extends core.Disposable{constructor(unitId,subUnitId){super();__publicField(this,"_dataValidations",[]);__publicField(this,"_dataValidationMap",new Map);__publicField(this,"_dataValidations$",new rxjs.BehaviorSubject(this._dataValidations));__publicField(this,"unitId");__publicField(this,"subUnitId");__publicField(this,"dataValidations$",this._dataValidations$.asObservable());this.unitId=unitId,this.subUnitId=subUnitId,this._notice(),this.disposeWithMe({dispose:__name(()=>{this._dataValidations$.complete()},"dispose")})}_notice(){this._dataValidations$.next(this._dataValidations)}getRuleById(id){return this._dataValidationMap.get(id)}getRuleIndex(id){return this._dataValidations.findIndex(rule=>rule.uid===id)}addRule(rule,index){const rules=(Array.isArray(rule)?rule:[rule]).filter(item=>!this._dataValidationMap.has(item.uid));typeof index=="number"&&index<this._dataValidations.length?this._dataValidations.splice(index,0,...rules):this._dataValidations.push(...rules),rules.forEach(item=>{this._dataValidationMap.set(item.uid,item)}),this._notice()}removeRule(ruleId){const index=this._dataValidations.findIndex(item=>item.uid===ruleId);index>-1&&(this._dataValidations.splice(index,1),this._dataValidationMap.delete(ruleId),this._notice())}updateRule(ruleId,payload){const oldRule=this._dataValidationMap.get(ruleId),index=this._dataValidations.findIndex(rule2=>ruleId===rule2.uid);if(!oldRule)throw new Error(`Data validation rule is not found, ruleId: ${ruleId}.`);const rule={...oldRule};switch(payload.type){case UpdateRuleType.RANGE:{rule.ranges=payload.payload;break}case UpdateRuleType.SETTING:{Object.assign(rule,getRuleSetting(payload.payload));break}case UpdateRuleType.OPTIONS:{Object.assign(rule,getRuleOptions(payload.payload));break}}return this._dataValidations[index]=rule,this._dataValidationMap.set(ruleId,rule),this._notice(),rule}getDataValidations(){return this._dataValidations}toJSON(){return this._dataValidations}validator(_content,_rule,_pos,_onComplete){return core.DataValidationStatus.VALID}};__name(_DataValidationManager,"DataValidationManager");let DataValidationManager=_DataValidationManager;var __defProp$4=Object.defineProperty,__getOwnPropDesc$4=Object.getOwnPropertyDescriptor,__decorateClass$4=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$4(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$4(target,key,result),result},"__decorateClass$4"),__decorateParam$4=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$4");exports2.DataValidationModel=(_a=class extends core.Disposable{constructor(_logService){super();__publicField(this,"_model",new Map);__publicField(this,"_managerCreator",__name((unitId,subUnitId)=>new DataValidationManager(unitId,subUnitId),"_managerCreator"));__publicField(this,"_ruleChange$",new rxjs.Subject);__publicField(this,"_validStatusChange$",new rxjs.Subject);__publicField(this,"ruleChange$",this._ruleChange$.asObservable());__publicField(this,"ruleChangeDebounce$",this.ruleChange$.pipe(rxjs.debounceTime(20)));__publicField(this,"validStatusChange$",this._validStatusChange$.asObservable().pipe(rxjs.debounceTime(20)));this._logService=_logService,this.disposeWithMe({dispose:__name(()=>{this._ruleChange$.complete(),this._validStatusChange$.complete()},"dispose")})}setManagerCreator(creator){this._managerCreator=creator}ensureManager(unitId,subUnitId){this._model.has(unitId)||this._model.set(unitId,new Map);const unitMap=this._model.get(unitId);if(unitMap.has(subUnitId))return unitMap.get(subUnitId);const manager=this._managerCreator(unitId,subUnitId);return unitMap.set(subUnitId,manager),this.disposeWithMe(manager),manager}_addRuleSideEffect(unitId,subUnitId,rule,source){this.ensureManager(unitId,subUnitId).getRuleById(rule.uid)||this._ruleChange$.next({rule,type:"add",unitId,subUnitId,source})}addRule(unitId,subUnitId,rule,source,index){try{const manager=this.ensureManager(unitId,subUnitId);(Array.isArray(rule)?rule:[rule]).forEach(item=>{this._addRuleSideEffect(unitId,subUnitId,item,source)}),manager.addRule(rule,index)}catch(error){this._logService.error(error)}}updateRule(unitId,subUnitId,ruleId,payload,source){try{const rule=this.ensureManager(unitId,subUnitId).updateRule(ruleId,payload);this._ruleChange$.next({rule,type:"update",unitId,subUnitId,source})}catch(error){this._logService.error(error)}}removeRule(unitId,subUnitId,ruleId,source){try{const manager=this.ensureManager(unitId,subUnitId),oldRule=manager.getRuleById(ruleId);oldRule&&(manager.removeRule(ruleId),this._ruleChange$.next({rule:oldRule,type:"remove",unitId,subUnitId,source}))}catch(error){this._logService.error(error)}}getRuleById(unitId,subUnitId,ruleId){return this.ensureManager(unitId,subUnitId).getRuleById(ruleId)}getRuleIndex(unitId,subUnitId,ruleId){return this.ensureManager(unitId,subUnitId).getRuleIndex(ruleId)}getRules(unitId,subUnitId){return this.ensureManager(unitId,subUnitId).getDataValidations()}validator(content,rule,pos){const{unitId,subUnitId}=pos;return this.ensureManager(unitId,subUnitId).validator(content,rule,pos,(status,changed)=>{changed&&this._validStatusChange$.next({unitId,subUnitId,ruleId:rule.uid,status})})}getUnitRules(unitId){const unitMap=this._model.get(unitId);if(!unitMap)return[];const res=[];return unitMap.forEach(manager=>{res.push([manager.subUnitId,manager.getDataValidations()])}),res}deleteUnitRules(unitId){this._model.delete(unitId)}getSubUnitIds(unitId){var _a2,_b2;return Array.from((_b2=(_a2=this._model.get(unitId))==null?void 0:_a2.keys())!=null?_b2:[])}},__name(_a,"DataValidationModel"),_a),exports2.DataValidationModel=__decorateClass$4([__decorateParam$4(0,core.ILogService)],exports2.DataValidationModel);const AddDataValidationMutation={type:core.CommandType.MUTATION,id:"data-validation.mutation.addRule",handler(accessor,params){if(!params)return!1;const{unitId,subUnitId,rule,index,source="command"}=params;return accessor.get(exports2.DataValidationModel).addRule(unitId,subUnitId,rule,source,index),!0}},RemoveDataValidationMutation={type:core.CommandType.MUTATION,id:"data-validation.mutation.removeRule",handler(accessor,params){if(!params)return!1;const{unitId,subUnitId,ruleId,source="command"}=params,dataValidationModel=accessor.get(exports2.DataValidationModel);return Array.isArray(ruleId)?ruleId.forEach(item=>{dataValidationModel.removeRule(unitId,subUnitId,item,source)}):dataValidationModel.removeRule(unitId,subUnitId,ruleId,source),!0}},UpdateDataValidationMutation={type:core.CommandType.MUTATION,id:"data-validation.mutation.updateRule",handler(accessor,params){if(!params)return!1;const{unitId,subUnitId,ruleId,payload,source="command"}=params;return accessor.get(exports2.DataValidationModel).updateRule(unitId,subUnitId,ruleId,payload,source),!0}},AddDataValidationCommand={type:core.CommandType.COMMAND,id:"data-validation.command.addRule",async handler(accessor,params){if(accessor.get(core.ILogService).warn("[Deprecated] AddDataValidationCommand is deprecated, please use AddSheetDataValidationCommand in @univerjs/sheets-data-validation instead!"),!params)return!1;const{rule,unitId,subUnitId}=params,commandService=accessor.get(core.ICommandService),undoRedoService=accessor.get(core.IUndoRedoService),mutationParams={...params,rule:{...params.rule,ranges:[params.rule.range]}},redoMutations=[{id:AddDataValidationMutation.id,params:mutationParams}],undoMutations=[{id:RemoveDataValidationMutation.id,params:{unitId,subUnitId,ruleId:rule.uid}}];return undoRedoService.pushUndoRedo({unitID:unitId,redoMutations,undoMutations}),await commandService.executeCommand(AddDataValidationMutation.id,mutationParams),!0}},removeDataValidationUndoFactory=__name((accessor,redoParams)=>{const dataValidationModel=accessor.get(exports2.DataValidationModel),{unitId,subUnitId,ruleId,source}=redoParams;if(Array.isArray(ruleId)){const rules=ruleId.map(id=>dataValidationModel.getRuleById(unitId,subUnitId,id)).filter(Boolean);return[{id:AddDataValidationMutation.id,params:{unitId,subUnitId,rule:rules,source}}]}return[{id:AddDataValidationMutation.id,params:{unitId,subUnitId,rule:{...dataValidationModel.getRuleById(unitId,subUnitId,ruleId)},index:dataValidationModel.getRuleIndex(unitId,subUnitId,ruleId)}}]},"removeDataValidationUndoFactory"),RemoveDataValidationCommand={type:core.CommandType.COMMAND,id:"data-validation.command.removeRule",handler(accessor,params){if(!params)return!1;const{unitId,subUnitId,ruleId}=params,commandService=accessor.get(core.ICommandService),undoRedoService=accessor.get(core.IUndoRedoService),dataValidationModel=accessor.get(exports2.DataValidationModel),redoMutations=[{id:RemoveDataValidationMutation.id,params}],undoMutations=[{id:AddDataValidationMutation.id,params:{unitId,subUnitId,rule:{...dataValidationModel.getRuleById(unitId,subUnitId,ruleId)},index:dataValidationModel.getRuleIndex(unitId,subUnitId,ruleId)}}];return undoRedoService.pushUndoRedo({undoMutations,redoMutations,unitID:params.unitId}),commandService.executeCommand(RemoveDataValidationMutation.id,params),!0}},UpdateDataValidationOptionsCommand={type:core.CommandType.COMMAND,id:"data-validation.command.updateDataValidationSetting",handler(accessor,params){if(accessor.get(core.ILogService).warn("[Deprecated] UpdateDataValidationOptionsCommand is deprecated, please use UpdateSheetDataValidationOptionsCommand in @univerjs/sheets-data-validation instead!"),!params)return!1;const commandService=accessor.get(core.ICommandService),redoUndoService=accessor.get(core.IUndoRedoService),dataValidationModel=accessor.get(exports2.DataValidationModel),{unitId,subUnitId,ruleId,options}=params,rule=dataValidationModel.getRuleById(unitId,subUnitId,ruleId);if(!rule)return!1;const mutationParams={unitId,subUnitId,ruleId,payload:{type:UpdateRuleType.OPTIONS,payload:options}},redoMutations=[{id:UpdateDataValidationMutation.id,params:mutationParams}],undoMutationParams={unitId,subUnitId,ruleId,payload:{type:UpdateRuleType.OPTIONS,payload:getRuleOptions(rule)}},undoMutations=[{id:UpdateDataValidationMutation.id,params:undoMutationParams}];return redoUndoService.pushUndoRedo({unitID:unitId,redoMutations,undoMutations}),commandService.executeCommand(UpdateDataValidationMutation.id,mutationParams),!0}},UpdateDataValidationSettingCommand={type:core.CommandType.COMMAND,id:"data-validation.command.updateDataValidationOptions",handler(accessor,params){if(accessor.get(core.ILogService).warn("[Deprecated] UpdateDataValidationSettingCommand is deprecated, please use UpdateSheetDataValidationSettingCommand in @univerjs/sheets-data-validation instead!"),!params)return!1;const commandService=accessor.get(core.ICommandService),redoUndoService=accessor.get(core.IUndoRedoService),dataValidationModel=accessor.get(exports2.DataValidationModel),dataValidatorRegistryService=accessor.get(DataValidatorRegistryService),{unitId,subUnitId,ruleId,setting}=params,validator=dataValidatorRegistryService.getValidatorItem(setting.type);if(!validator)return!1;const rule=dataValidationModel.getRuleById(unitId,subUnitId,ruleId);if(!rule||!validator.validatorFormula({...rule,...setting},unitId,subUnitId).success)return!1;const mutationParams={unitId,subUnitId,ruleId,payload:{type:UpdateRuleType.SETTING,payload:setting}},redoMutations=[{id:UpdateDataValidationMutation.id,params:mutationParams}],undoMutationParams={unitId,subUnitId,ruleId,payload:{type:UpdateRuleType.SETTING,payload:getRuleSetting(rule)}},undoMutations=[{id:UpdateDataValidationMutation.id,params:undoMutationParams}];return redoUndoService.pushUndoRedo({unitID:unitId,redoMutations,undoMutations}),commandService.executeCommand(UpdateDataValidationMutation.id,mutationParams),!0}},RemoveAllDataValidationCommand={type:core.CommandType.COMMAND,id:"data-validation.command.removeAll",handler(accessor,params){if(!params)return!1;const{unitId,subUnitId}=params,commandService=accessor.get(core.ICommandService),dataValidationModel=accessor.get(exports2.DataValidationModel),undoRedoService=accessor.get(core.IUndoRedoService),currentRules=[...dataValidationModel.getRules(unitId,subUnitId)],redoParams={unitId,subUnitId,ruleId:currentRules.map(rule=>rule.uid)},redoMutations=[{id:RemoveDataValidationMutation.id,params:redoParams}],undoMutations=[{id:AddDataValidationMutation.id,params:{unitId,subUnitId,rule:currentRules}}];return undoRedoService.pushUndoRedo({redoMutations,undoMutations,unitID:unitId}),commandService.executeCommand(RemoveDataValidationMutation.id,redoParams),!0}};var __defProp$3=Object.defineProperty,__getOwnPropDesc$3=Object.getOwnPropertyDescriptor,__decorateClass$3=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$3(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$3(target,key,result),result},"__decorateClass$3"),__decorateParam$3=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$3");const DATA_VALIDATION_PLUGIN_NAME="SHEET_DATA_VALIDATION_PLUGIN";exports2.DataValidationResourceController=(_b=class extends core.Disposable{constructor(_resourceManagerService,_univerInstanceService,_dataValidationModel){super(),this._resourceManagerService=_resourceManagerService,this._univerInstanceService=_univerInstanceService,this._dataValidationModel=_dataValidationModel,this._initSnapshot()}_initSnapshot(){const toJson=__name(unitID=>{const map=this._dataValidationModel.getUnitRules(unitID),resultMap={};return map?(map.forEach(([key,v])=>{resultMap[key]=v}),JSON.stringify(resultMap)):""},"toJson"),parseJson=__name(json=>{if(!json)return{};try{return JSON.parse(json)}catch{return{}}},"parseJson");this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:DATA_VALIDATION_PLUGIN_NAME,businesses:[core.UniverInstanceType.UNIVER_SHEET],toJson:__name(unitID=>toJson(unitID),"toJson"),parseJson:__name(json=>parseJson(json),"parseJson"),onUnLoad:__name(unitID=>{this._dataValidationModel.deleteUnitRules(unitID)},"onUnLoad"),onLoad:__name((unitID,value)=>{Object.keys(value).forEach(subunitId=>{value[subunitId].forEach(rule=>{this._dataValidationModel.addRule(unitID,subunitId,rule,"patched")})})},"onLoad")}))}},__name(_b,"DataValidationResourceController"),_b),exports2.DataValidationResourceController=__decorateClass$3([core.OnLifecycle(core.LifecycleStages.Ready,exports2.DataValidationResourceController),__decorateParam$3(0,core.IResourceManagerService),__decorateParam$3(1,core.IUniverInstanceService),__decorateParam$3(2,core.Inject(exports2.DataValidationModel))],exports2.DataValidationResourceController);var __defProp$2=Object.defineProperty,__getOwnPropDesc$2=Object.getOwnPropertyDescriptor,__decorateClass$2=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$2(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$2(target,key,result),result},"__decorateClass$2"),__decorateParam$2=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$2");exports2.DataValidationSheetController=(_c=class extends core.Disposable{constructor(_sheetInterceptorService,_univerInstanceService,_dataValidationModel){super(),this._sheetInterceptorService=_sheetInterceptorService,this._univerInstanceService=_univerInstanceService,this._dataValidationModel=_dataValidationModel,this._initSheetChange()}_initSheetChange(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:__name(commandInfo=>{var _a2;if(commandInfo.id===sheets.RemoveSheetCommand.id){const params=commandInfo.params,unitId=params.unitId||this._univerInstanceService.getCurrentUnitForType(core.UniverInstanceType.UNIVER_SHEET).getUnitId(),workbook=this._univerInstanceService.getUniverSheetInstance(unitId);if(!workbook)return{redos:[],undos:[]};const subUnitId=params.subUnitId||((_a2=workbook.getActiveSheet())==null?void 0:_a2.getSheetId());if(!subUnitId)return{redos:[],undos:[]};const manager=this._dataValidationModel.ensureManager(unitId,subUnitId);if(!manager)return{redos:[],undos:[]};const rules=manager.getDataValidations(),ids=rules.map(i=>i.uid),redoParams={unitId,subUnitId,ruleId:ids,source:"patched"},undoParams={unitId,subUnitId,rule:rules,source:"patched"};return{redos:[{id:RemoveDataValidationMutation.id,params:redoParams}],undos:[{id:AddDataValidationMutation.id,params:undoParams}]}}return{redos:[],undos:[]}},"getMutations")}))}},__name(_c,"DataValidationSheetController"),_c),exports2.DataValidationSheetController=__decorateClass$2([core.OnLifecycle(core.LifecycleStages.Ready,exports2.DataValidationSheetController),__decorateParam$2(0,core.Inject(sheets.SheetInterceptorService)),__decorateParam$2(1,core.Inject(core.IUniverInstanceService)),__decorateParam$2(2,core.Inject(exports2.DataValidationModel))],exports2.DataValidationSheetController);var __defProp$1=Object.defineProperty,__getOwnPropDesc$1=Object.getOwnPropertyDescriptor,__decorateClass$1=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$1(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$1(target,key,result),result},"__decorateClass$1"),__decorateParam$1=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$1");const PLUGIN_NAME="UNIVER_DATA_VALIDATION_PLUGIN";exports2.UniverDataValidationPlugin=(_d=class extends core.Plugin{constructor(_config,_injector,_commandService){super(),this._injector=_injector,this._commandService=_commandService}onStarting(){[[exports2.DataValidationModel],[DataValidatorRegistryService],[exports2.DataValidationResourceController],[exports2.DataValidationSheetController]].forEach(d=>this._injector.add(d)),[AddDataValidationCommand,RemoveAllDataValidationCommand,UpdateDataValidationOptionsCommand,UpdateDataValidationSettingCommand,RemoveDataValidationCommand,AddDataValidationMutation,UpdateDataValidationMutation,RemoveDataValidationMutation].forEach(command=>{this._commandService.registerCommand(command)})}},__name(_d,"UniverDataValidationPlugin"),__publicField(_d,"pluginName",PLUGIN_NAME),__publicField(_d,"type",core.UniverInstanceType.UNIVER_SHEET),_d),exports2.UniverDataValidationPlugin=__decorateClass$1([__decorateParam$1(1,core.Inject(core.Injector)),__decorateParam$1(2,core.ICommandService)],exports2.UniverDataValidationPlugin),core.DataValidationOperator.BETWEEN+"",core.DataValidationOperator.EQUAL+"",core.DataValidationOperator.GREATER_THAN+"",core.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",core.DataValidationOperator.LESS_THAN+"",core.DataValidationOperator.LESS_THAN_OR_EQUAL+"",core.DataValidationOperator.NOT_BETWEEN+"",core.DataValidationOperator.NOT_EQUAL+"";const OperatorTitleMap={[core.DataValidationOperator.BETWEEN]:"dataValidation.ruleName.between",[core.DataValidationOperator.EQUAL]:"dataValidation.ruleName.equal",[core.DataValidationOperator.GREATER_THAN]:"dataValidation.ruleName.greaterThan",[core.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.ruleName.greaterThanOrEqual",[core.DataValidationOperator.LESS_THAN]:"dataValidation.ruleName.lessThan",[core.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.ruleName.lessThanOrEqual",[core.DataValidationOperator.NOT_BETWEEN]:"dataValidation.ruleName.notBetween",[core.DataValidationOperator.NOT_EQUAL]:"dataValidation.ruleName.notEqual"},OperatorErrorTitleMap={[core.DataValidationOperator.BETWEEN]:"dataValidation.errorMsg.between",[core.DataValidationOperator.EQUAL]:"dataValidation.errorMsg.equal",[core.DataValidationOperator.GREATER_THAN]:"dataValidation.errorMsg.greaterThan",[core.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.errorMsg.greaterThanOrEqual",[core.DataValidationOperator.LESS_THAN]:"dataValidation.errorMsg.lessThan",[core.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.errorMsg.lessThanOrEqual",[core.DataValidationOperator.NOT_BETWEEN]:"dataValidation.errorMsg.notBetween",[core.DataValidationOperator.NOT_EQUAL]:"dataValidation.errorMsg.notEqual"},TextLengthErrorTitleMap={[core.DataValidationOperator.BETWEEN]:"dataValidation.textLength.errorMsg.between",[core.DataValidationOperator.EQUAL]:"dataValidation.textLength.errorMsg.equal",[core.DataValidationOperator.GREATER_THAN]:"dataValidation.textLength.errorMsg.greaterThan",[core.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.greaterThanOrEqual",[core.DataValidationOperator.LESS_THAN]:"dataValidation.textLength.errorMsg.lessThan",[core.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.lessThanOrEqual",[core.DataValidationOperator.NOT_BETWEEN]:"dataValidation.textLength.errorMsg.notBetween",[core.DataValidationOperator.NOT_EQUAL]:"dataValidation.textLength.errorMsg.notEqual"};var __defProp2=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__decorateClass=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp2(target,key,result),result},"__decorateClass"),__decorateParam=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam");const FORMULA1="{FORMULA1}",FORMULA2="{FORMULA2}",operatorNameMap={[core.DataValidationOperator.BETWEEN]:"dataValidation.operators.between",[core.DataValidationOperator.EQUAL]:"dataValidation.operators.equal",[core.DataValidationOperator.GREATER_THAN]:"dataValidation.operators.greaterThan",[core.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.operators.greaterThanOrEqual",[core.DataValidationOperator.LESS_THAN]:"dataValidation.operators.lessThan",[core.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.operators.lessThanOrEqual",[core.DataValidationOperator.NOT_BETWEEN]:"dataValidation.operators.notBetween",[core.DataValidationOperator.NOT_EQUAL]:"dataValidation.operators.notEqual"};exports2.BaseDataValidator=(_e=class{constructor(localeService,injector){__publicField(this,"canvasRender",null);__publicField(this,"dropdown");__publicField(this,"optionsInput");this.localeService=localeService,this.injector=injector}get operatorNames(){return this.operators.map(operator=>this.localeService.t(operatorNameMap[operator]))}get titleStr(){return this.localeService.t(this.title)}skipDefaultFontRender(rule,cellValue,pos){return!1}generateRuleName(rule){var _a2,_b2;if(!rule.operator)return this.titleStr;const ruleName=this.localeService.t(OperatorTitleMap[rule.operator]).replace(FORMULA1,(_a2=rule.formula1)!=null?_a2:"").replace(FORMULA2,(_b2=rule.formula2)!=null?_b2:"");return`${this.titleStr} ${ruleName}`}generateRuleErrorMessage(rule){var _a2,_b2;return rule.operator?`${this.localeService.t(OperatorErrorTitleMap[rule.operator]).replace(FORMULA1,(_a2=rule.formula1)!=null?_a2:"").replace(FORMULA2,(_b2=rule.formula2)!=null?_b2:"")}`:this.titleStr}getRuleFinalError(rule){return rule.showInputMessage&&rule.error?rule.error:this.generateRuleErrorMessage(rule)}isEmptyCellValue(cellValue){return cellValue===""||cellValue===void 0||cellValue===null}async isValidType(cellInfo,formula,rule){return!0}transform(cellInfo,formula,rule){return cellInfo}async validatorIsEqual(cellInfo,formula,rule){return!0}async validatorIsNotEqual(cellInfo,formula,rule){return!0}async validatorIsBetween(cellInfo,formula,rule){return!0}async validatorIsNotBetween(cellInfo,formula,rule){return!0}async validatorIsGreaterThan(cellInfo,formula,rule){return!0}async validatorIsGreaterThanOrEqual(cellInfo,formula,rule){return!0}async validatorIsLessThan(cellInfo,formula,rule){return!0}async validatorIsLessThanOrEqual(cellInfo,formula,rule){return!0}async validator(cellInfo,rule){const{value:cellValue,unitId,subUnitId}=cellInfo,isEmpty=this.isEmptyCellValue(cellValue),{allowBlank=!0,operator}=rule;if(isEmpty)return allowBlank;const formulaInfo=await this.parseFormula(rule,unitId,subUnitId);if(!await this.isValidType(cellInfo,formulaInfo,rule))return!1;if(!core.Tools.isDefine(operator))return!0;const transformedCell=this.transform(cellInfo,formulaInfo,rule);switch(operator){case core.DataValidationOperator.BETWEEN:return this.validatorIsBetween(transformedCell,formulaInfo,rule);case core.DataValidationOperator.EQUAL:return this.validatorIsEqual(transformedCell,formulaInfo,rule);case core.DataValidationOperator.GREATER_THAN:return this.validatorIsGreaterThan(transformedCell,formulaInfo,rule);case core.DataValidationOperator.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(transformedCell,formulaInfo,rule);case core.DataValidationOperator.LESS_THAN:return this.validatorIsLessThan(transformedCell,formulaInfo,rule);case core.DataValidationOperator.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(transformedCell,formulaInfo,rule);case core.DataValidationOperator.NOT_BETWEEN:return this.validatorIsNotBetween(transformedCell,formulaInfo,rule);case core.DataValidationOperator.NOT_EQUAL:return this.validatorIsNotEqual(transformedCell,formulaInfo,rule);default:throw new Error("Unknown operator.")}}},__name(_e,"BaseDataValidator"),_e),exports2.BaseDataValidator=__decorateClass([__decorateParam(0,core.Inject(core.LocaleService)),__decorateParam(1,core.Inject(core.Injector))],exports2.BaseDataValidator);const TWO_FORMULA_OPERATOR_COUNT=[core.DataValidationOperator.BETWEEN,core.DataValidationOperator.NOT_BETWEEN];exports2.AddDataValidationCommand=AddDataValidationCommand,exports2.AddDataValidationMutation=AddDataValidationMutation,exports2.DataValidationManager=DataValidationManager,exports2.DataValidatorRegistryScope=DataValidatorRegistryScope,exports2.DataValidatorRegistryService=DataValidatorRegistryService,exports2.RemoveAllDataValidationCommand=RemoveAllDataValidationCommand,exports2.RemoveDataValidationCommand=RemoveDataValidationCommand,exports2.RemoveDataValidationMutation=RemoveDataValidationMutation,exports2.TWO_FORMULA_OPERATOR_COUNT=TWO_FORMULA_OPERATOR_COUNT,exports2.TextLengthErrorTitleMap=TextLengthErrorTitleMap,exports2.UpdateDataValidationMutation=UpdateDataValidationMutation,exports2.UpdateDataValidationOptionsCommand=UpdateDataValidationOptionsCommand,exports2.UpdateDataValidationSettingCommand=UpdateDataValidationSettingCommand,exports2.UpdateRuleType=UpdateRuleType,exports2.createDefaultNewRule=createDefaultNewRule,exports2.getRuleOptions=getRuleOptions,exports2.getRuleSetting=getRuleSetting,exports2.removeDataValidationUndoFactory=removeDataValidationUndoFactory,Object.defineProperty(exports2,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@univerjs/data-validation",
3
- "version": "0.2.4",
3
+ "version": "0.2.6",
4
4
  "private": false,
5
5
  "description": "Data validation library for Univer",
6
6
  "author": "DreamNum <developer@univer.ai>",
@@ -49,23 +49,21 @@
49
49
  "lib"
50
50
  ],
51
51
  "peerDependencies": {
52
- "@wendellhu/redi": "0.16.0",
53
52
  "rxjs": ">=7.0.0",
54
- "@univerjs/sheets": "0.2.4",
55
- "@univerjs/core": "0.2.4"
53
+ "@univerjs/sheets": "0.2.6",
54
+ "@univerjs/core": "0.2.6"
56
55
  },
57
56
  "dependencies": {
58
57
  "@univerjs/protocol": "0.1.38-alpha.23"
59
58
  },
60
59
  "devDependencies": {
61
- "@wendellhu/redi": "0.16.0",
62
60
  "rxjs": "^7.8.1",
63
- "typescript": "^5.5.3",
64
- "vite": "^5.3.4",
65
- "vitest": "^2.0.3",
66
- "@univerjs/core": "0.2.4",
67
- "@univerjs/sheets": "0.2.4",
68
- "@univerjs/shared": "0.2.4"
61
+ "typescript": "^5.5.4",
62
+ "vite": "^5.3.5",
63
+ "vitest": "^2.0.4",
64
+ "@univerjs/core": "0.2.6",
65
+ "@univerjs/sheets": "0.2.6",
66
+ "@univerjs/shared": "0.2.6"
69
67
  },
70
68
  "univerSpace": {
71
69
  ".": {