@univerjs/data-validation 0.19.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/index.js +1 -1
- package/lib/es/index.js +1 -1
- package/lib/index.js +1 -1
- package/lib/umd/index.js +1 -1
- package/package.json +4 -4
package/lib/cjs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require(`@univerjs/core`),t=require(`rxjs`);function n(e){return{type:e.type,operator:e.operator,formula1:e.formula1,formula2:e.formula2,allowBlank:e.allowBlank}}function r(e){return{error:e.error,errorStyle:e.errorStyle,errorTitle:e.errorTitle,imeMode:e.imeMode,prompt:e.prompt,promptTitle:e.promptTitle,showDropDown:e.showDropDown,showErrorMessage:e.showErrorMessage,showInputMessage:e.showInputMessage,renderMode:e.renderMode,bizInfo:e.bizInfo}}let i=function(e){return e[e.SETTING=0]=`SETTING`,e[e.RANGE=1]=`RANGE`,e[e.OPTIONS=2]=`OPTIONS`,e[e.ALL=3]=`ALL`,e}({});function a(e){"@babel/helpers - typeof";return a=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},a(e)}function o(e,t){if(a(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(a(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function s(e){var t=o(e,`string`);return a(t)==`symbol`?t:t+``}function c(e,t,n){return(t=s(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){return function(n,r){t(n,r,e)}}function u(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}let d=class extends e.Disposable{constructor(e){super(),this._logService=e,c(this,`_model`,new Map),c(this,`_ruleChange$`,new t.Subject),c(this,`ruleChange$`,this._ruleChange$.asObservable()),c(this,`ruleChangeDebounce$`,this.ruleChange$.pipe((0,t.debounceTime)(20))),this.disposeWithMe({dispose:()=>{this._ruleChange$.complete()}})}_ensureMap(e,t){this._model.has(e)||this._model.set(e,new Map);let n=this._model.get(e);if(n.has(t))return n.get(t);let r={map:new Map,list:[]};return n.set(t,r),r}_addSubUnitRule(e,t,n){let{map:r,list:i}=e,a=(Array.isArray(t)?t:[t]).filter(e=>!r.has(e.uid));typeof n==`number`&&n<i.length?i.splice(n,0,...a):i.push(...a),a.forEach(e=>{r.set(e.uid,e)})}_removeSubUnitRule(e,t){let{map:n,list:r}=e,i=r.findIndex(e=>e.uid===t);i>-1&&(r.splice(i,1),n.delete(t))}_updateSubUnitRule(e,t,a){let{map:o,list:s}=e,c=o.get(t),l=s.findIndex(e=>t===e.uid);if(!c)throw Error(`Data validation rule is not found, ruleId: ${t}.`);let u={...c};switch(a.type){case i.RANGE:u.ranges=a.payload;break;case i.SETTING:Object.assign(u,n(a.payload));break;case i.OPTIONS:Object.assign(u,r(a.payload));break;case i.ALL:Object.assign(u,a.payload);break;default:break}return s[l]=u,o.set(t,u),u}_addRuleSideEffect(e,t,n,r){if(!this._ensureMap(e,t).map.get(n.uid))return{rule:n,type:`add`,unitId:e,subUnitId:t,source:r}}addRule(e,t,n,r,i){try{let a=this._ensureMap(e,t),o=(Array.isArray(n)?n:[n]).map(n=>this._addRuleSideEffect(e,t,n,r));this._addSubUnitRule(a,n,i),o.forEach(e=>{e&&this._ruleChange$.next(e)})}catch(e){this._logService.error(e)}}updateRule(t,n,r,i,a){try{let o=this._ensureMap(t,n),s=e.Tools.deepClone(o.map.get(r));if(!s)throw Error(`Data validation rule is not found, ruleId: ${r}.`);let c=this._updateSubUnitRule(o,r,i);this._ruleChange$.next({rule:c,type:`update`,unitId:t,subUnitId:n,source:a,updatePayload:i,oldRule:s})}catch(e){this._logService.error(e)}}removeRule(e,t,n,r){try{let i=this._ensureMap(e,t),a=i.map.get(n);a&&(this._removeSubUnitRule(i,n),this._ruleChange$.next({rule:a,type:`remove`,unitId:e,subUnitId:t,source:r}))}catch(e){this._logService.error(e)}}getRuleById(e,t,n){return this._ensureMap(e,t).map.get(n)}getRuleIndex(e,t,n){return this._ensureMap(e,t).list.findIndex(e=>e.uid===n)}getRules(e,t){return[...this._ensureMap(e,t).list]}getUnitRules(e){let t=this._model.get(e);if(!t)return[];let n=[];return t.forEach((e,t)=>{n.push([t,e.list])}),n}deleteUnitRules(e){this._model.delete(e)}getSubUnitIds(e){var t,n;return Array.from((t=(n=this._model.get(e))==null?void 0:n.keys())==null?[]:t)}getAll(){return Array.from(this._model.keys()).map(e=>[e,this.getUnitRules(e)])}};d=u([l(0,e.ILogService)],d);const f={type:e.CommandType.MUTATION,id:`data-validation.mutation.addRule`,handler(e,t){if(!t)return!1;let{unitId:n,subUnitId:r,rule:i,index:a,source:o=`command`}=t;return e.get(d).addRule(n,r,i,o,a),!0}},p={type:e.CommandType.MUTATION,id:`data-validation.mutation.removeRule`,handler(e,t){if(!t)return!1;let{unitId:n,subUnitId:r,ruleId:i,source:a=`command`}=t,o=e.get(d);return Array.isArray(i)?i.forEach(e=>{o.removeRule(n,r,e,a)}):o.removeRule(n,r,i,a),!0}},m={type:e.CommandType.MUTATION,id:`data-validation.mutation.updateRule`,handler(e,t){if(!t)return!1;let{unitId:n,subUnitId:r,ruleId:i,payload:a,source:o=`command`}=t;return e.get(d).updateRule(n,r,i,a,o),!0}};let h=class extends e.Disposable{constructor(e,t,n){super(),this._resourceManagerService=e,this._univerInstanceService=t,this._dataValidationModel=n,this._initSnapshot()}_initSnapshot(){let t=e=>{let t=this._dataValidationModel.getUnitRules(e),n={};return t?(t.forEach(([e,t])=>{n[e]=t}),JSON.stringify(n)):``},n=e=>{if(!e)return{};try{return JSON.parse(e)}catch{return{}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:`SHEET_DATA_VALIDATION_PLUGIN`,businesses:[e.UniverInstanceType.UNIVER_SHEET],toJson:e=>t(e),parseJson:e=>n(e),onUnLoad:e=>{this._dataValidationModel.deleteUnitRules(e)},onLoad:(e,t)=>{Object.keys(t).forEach(n=>{t[n].forEach(t=>{this._dataValidationModel.addRule(e,n,t,`patched`)})})}}))}};h=u([l(0,e.IResourceManagerService),l(1,e.IUniverInstanceService),l(2,(0,e.Inject)(d))],h);var g=`@univerjs/data-validation`,_=`0.19.0`;let v=function(e){return e.SHEET=`sheet`,e}({});var y=class{constructor(){c(this,`_validatorByScopes`,new Map),c(this,`_validatorMap`,new Map),c(this,`_validatorsChange$`,new t.BehaviorSubject(void 0)),c(this,`validatorsChange$`,this._validatorsChange$.asObservable())}_addValidatorToScope(e,t){this._validatorByScopes.has(t)||this._validatorByScopes.set(t,[]);let n=this._validatorByScopes.get(t);if(n.findIndex(t=>t.id===e.id)>-1)throw Error(`Validator item with the same id ${e.id} has already been added!`);n.push(e)}_removeValidatorFromScope(e,t){let n=this._validatorByScopes.get(t);if(!n)return;let r=n.findIndex(t=>t.id===e.id);r>-1&&n.splice(r,1)}register(t){return this._validatorMap.set(t.id,t),Array.isArray(t.scopes)?t.scopes.forEach(e=>{this._addValidatorToScope(t,e)}):this._addValidatorToScope(t,t.scopes),this._validatorsChange$.next(),(0,e.toDisposable)(()=>{this._validatorMap.delete(t.id),Array.isArray(t.scopes)?t.scopes.forEach(e=>{this._removeValidatorFromScope(t,e)}):this._removeValidatorFromScope(t,t.scopes),this._validatorsChange$.next()})}getValidatorItem(e){return this._validatorMap.get(e)}getValidatorsByScope(e){return this._validatorByScopes.get(e)}};const b={type:e.CommandType.COMMAND,id:`data-validation.command.addRule`,async handler(t,n){if(t.get(e.ILogService).error("[Deprecated]: `AddDataValidationCommand` is deprecated, please use `AddSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!n)return!1;let{rule:r,unitId:i,subUnitId:a}=n,o=t.get(e.ICommandService),s=t.get(e.IUndoRedoService),c={...n,rule:{...n.rule,ranges:[n.rule.range]}},l=[{id:f.id,params:c}],u=[{id:p.id,params:{unitId:i,subUnitId:a,ruleId:r.uid}}];return s.pushUndoRedo({unitID:i,redoMutations:l,undoMutations:u}),await o.executeCommand(f.id,c),!0}},x={type:e.CommandType.COMMAND,id:`data-validation.command.removeRule`,handler(t,n){if(t.get(e.ILogService).error("[Deprecated]: `RemoveDataValidationCommand` is deprecated, please use `RemoveSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!n)return!1;let{unitId:r,subUnitId:i,ruleId:a}=n,o=t.get(e.ICommandService),s=t.get(e.IUndoRedoService),c=t.get(d),l=[{id:p.id,params:n}],u=[{id:f.id,params:{unitId:r,subUnitId:i,rule:{...c.getRuleById(r,i,a)},index:c.getRuleIndex(r,i,a)}}];return s.pushUndoRedo({undoMutations:u,redoMutations:l,unitID:n.unitId}),o.executeCommand(p.id,n),!0}},S={type:e.CommandType.COMMAND,id:`data-validation.command.updateDataValidationSetting`,handler(t,n){if(t.get(e.ILogService).warn("[Deprecated]: `UpdateDataValidationOptionsCommand` is deprecated, please use `UpdateSheetDataValidationOptionsCommand` in `@univerjs/sheets-data-validation` instead!"),!n)return!1;let a=t.get(e.ICommandService),o=t.get(e.IUndoRedoService),s=t.get(d),{unitId:c,subUnitId:l,ruleId:u,options:f}=n,p=s.getRuleById(c,l,u);if(!p)return!1;let h={unitId:c,subUnitId:l,ruleId:u,payload:{type:i.OPTIONS,payload:f}},g=[{id:m.id,params:h}],_={unitId:c,subUnitId:l,ruleId:u,payload:{type:i.OPTIONS,payload:r(p)}},v=[{id:m.id,params:_}];return o.pushUndoRedo({unitID:c,redoMutations:g,undoMutations:v}),a.executeCommand(m.id,h),!0}},C={type:e.CommandType.COMMAND,id:`data-validation.command.updateDataValidationOptions`,handler(t,r){if(t.get(e.ILogService).error("[Deprecated]: `UpdateDataValidationSettingCommand` is deprecated, please use `UpdateSheetDataValidationSettingCommand` in `@univerjs/sheets-data-validation` instead!"),!r)return!1;let a=t.get(e.ICommandService),o=t.get(e.IUndoRedoService),s=t.get(d),c=t.get(y),{unitId:l,subUnitId:u,ruleId:f,setting:p}=r,h=c.getValidatorItem(p.type);if(!h)return!1;let g=s.getRuleById(l,u,f);if(!g)return!1;let _={...g,...p};if(!h.validatorFormula(_,l,u).success)return!1;let v={unitId:l,subUnitId:u,ruleId:f,payload:{type:i.SETTING,payload:{...p,...h.normalizeFormula(_,l,u)}}},b=[{id:m.id,params:v}],x={unitId:l,subUnitId:u,ruleId:f,payload:{type:i.SETTING,payload:n(g)}},S=[{id:m.id,params:x}];return o.pushUndoRedo({unitID:l,redoMutations:b,undoMutations:S}),a.executeCommand(m.id,v),!0}},w={type:e.CommandType.COMMAND,id:`data-validation.command.removeAll`,handler(t,n){if(t.get(e.ILogService).error("[Deprecated]: `RemoveAllDataValidationCommand` is deprecated, please use `RemoveSheetAllDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!n)return!1;let{unitId:r,subUnitId:i}=n,a=t.get(e.ICommandService),o=t.get(d),s=t.get(e.IUndoRedoService),c=[...o.getRules(r,i)],l={unitId:r,subUnitId:i,ruleId:c.map(e=>e.uid)},u=[{id:p.id,params:l}],m=[{id:f.id,params:{unitId:r,subUnitId:i,rule:c}}];return s.pushUndoRedo({redoMutations:u,undoMutations:m,unitID:r}),a.executeCommand(p.id,l),!0}},T=`data-validation.config`;Symbol(T);const E={};let D=class extends e.Plugin{constructor(t=E,n,r,i){super(),this._config=t,this._injector=n,this._commandService=r,this._configService=i;let{...a}=(0,e.merge)({},E,this._config);this._configService.setConfig(T,a)}onStarting(){[[d],[y],[h]].forEach(e=>this._injector.add(e)),[b,w,S,C,x,f,m,p].forEach(e=>{this._commandService.registerCommand(e)})}onReady(){this._injector.get(h)}};c(D,`pluginName`,`UNIVER_DATA_VALIDATION_PLUGIN`),c(D,`packageName`,g),c(D,`version`,_),c(D,`type`,e.UniverInstanceType.UNIVER_SHEET),D=u([l(1,(0,e.Inject)(e.Injector)),l(2,e.ICommandService),l(3,e.IConfigService)],D),e.DataValidationOperator.BETWEEN,e.DataValidationOperator.EQUAL,e.DataValidationOperator.GREATER_THAN,e.DataValidationOperator.GREATER_THAN_OR_EQUAL,e.DataValidationOperator.LESS_THAN,e.DataValidationOperator.LESS_THAN_OR_EQUAL,e.DataValidationOperator.NOT_BETWEEN,e.DataValidationOperator.NOT_EQUAL;const O={[e.DataValidationOperator.BETWEEN]:`dataValidation.ruleName.between`,[e.DataValidationOperator.EQUAL]:`dataValidation.ruleName.equal`,[e.DataValidationOperator.GREATER_THAN]:`dataValidation.ruleName.greaterThan`,[e.DataValidationOperator.GREATER_THAN_OR_EQUAL]:`dataValidation.ruleName.greaterThanOrEqual`,[e.DataValidationOperator.LESS_THAN]:`dataValidation.ruleName.lessThan`,[e.DataValidationOperator.LESS_THAN_OR_EQUAL]:`dataValidation.ruleName.lessThanOrEqual`,[e.DataValidationOperator.NOT_BETWEEN]:`dataValidation.ruleName.notBetween`,[e.DataValidationOperator.NOT_EQUAL]:`dataValidation.ruleName.notEqual`,NONE:`dataValidation.ruleName.legal`},k={[e.DataValidationOperator.BETWEEN]:`dataValidation.errorMsg.between`,[e.DataValidationOperator.EQUAL]:`dataValidation.errorMsg.equal`,[e.DataValidationOperator.GREATER_THAN]:`dataValidation.errorMsg.greaterThan`,[e.DataValidationOperator.GREATER_THAN_OR_EQUAL]:`dataValidation.errorMsg.greaterThanOrEqual`,[e.DataValidationOperator.LESS_THAN]:`dataValidation.errorMsg.lessThan`,[e.DataValidationOperator.LESS_THAN_OR_EQUAL]:`dataValidation.errorMsg.lessThanOrEqual`,[e.DataValidationOperator.NOT_BETWEEN]:`dataValidation.errorMsg.notBetween`,[e.DataValidationOperator.NOT_EQUAL]:`dataValidation.errorMsg.notEqual`,NONE:`dataValidation.errorMsg.legal`},A={[e.DataValidationOperator.BETWEEN]:`dataValidation.textLength.errorMsg.between`,[e.DataValidationOperator.EQUAL]:`dataValidation.textLength.errorMsg.equal`,[e.DataValidationOperator.GREATER_THAN]:`dataValidation.textLength.errorMsg.greaterThan`,[e.DataValidationOperator.GREATER_THAN_OR_EQUAL]:`dataValidation.textLength.errorMsg.greaterThanOrEqual`,[e.DataValidationOperator.LESS_THAN]:`dataValidation.textLength.errorMsg.lessThan`,[e.DataValidationOperator.LESS_THAN_OR_EQUAL]:`dataValidation.textLength.errorMsg.lessThanOrEqual`,[e.DataValidationOperator.NOT_BETWEEN]:`dataValidation.textLength.errorMsg.notBetween`,[e.DataValidationOperator.NOT_EQUAL]:`dataValidation.textLength.errorMsg.notEqual`},j=[e.DataValidationOperator.BETWEEN,e.DataValidationOperator.NOT_BETWEEN],M=`{FORMULA1}`,N=`{FORMULA2}`,P=`{TYPE}`,F={[e.DataValidationOperator.BETWEEN]:`dataValidation.operators.between`,[e.DataValidationOperator.EQUAL]:`dataValidation.operators.equal`,[e.DataValidationOperator.GREATER_THAN]:`dataValidation.operators.greaterThan`,[e.DataValidationOperator.GREATER_THAN_OR_EQUAL]:`dataValidation.operators.greaterThanOrEqual`,[e.DataValidationOperator.LESS_THAN]:`dataValidation.operators.lessThan`,[e.DataValidationOperator.LESS_THAN_OR_EQUAL]:`dataValidation.operators.lessThanOrEqual`,[e.DataValidationOperator.NOT_BETWEEN]:`dataValidation.operators.notBetween`,[e.DataValidationOperator.NOT_EQUAL]:`dataValidation.operators.notEqual`};let I=function(e){return e.DATE=`date`,e.TIME=`time`,e.DATETIME=`datetime`,e.LIST=`list`,e.MULTIPLE_LIST=`multipleList`,e.COLOR=`color`,e.CASCADE=`cascade`,e}({}),L=class{constructor(e,t){this.localeService=e,this.injector=t,c(this,`offsetFormulaByRange`,!0),c(this,`formulaInput`,void 0),c(this,`canvasRender`,null),c(this,`dropdownType`,void 0),c(this,`optionsInput`,void 0),c(this,`skipDefaultFontRender`,void 0)}get operatorNames(){return this.operators.map(e=>this.localeService.t(F[e]))}get titleStr(){return this.localeService.t(this.title)}generateRuleName(e){var t,n;if(!e.operator)return this.localeService.t(O.NONE).replace(P,this.titleStr);let r=this.localeService.t(O[e.operator]).replace(M,(t=e.formula1)==null?``:t).replace(N,(n=e.formula2)==null?``:n);return`${this.titleStr} ${r}`}generateRuleErrorMessage(e,t){var n,r;return e.operator?`${this.localeService.t(k[e.operator]).replace(M,(n=e.formula1)==null?``:n).replace(N,(r=e.formula2)==null?``:r)}`:this.localeService.t(k.NONE).replace(P,this.titleStr)}getExtraStyle(e,t,n,r,i){}getRuleFinalError(e,t){return e.showErrorMessage&&e.error?e.error:this.generateRuleErrorMessage(e,t)}isEmptyCellValue(e){return e===``||e==null}normalizeFormula(e,t,n){return{formula1:e.formula1,formula2:e.formula2}}async isValidType(e,t,n){return!0}transform(e,t,n){return e}async validatorIsEqual(e,t,n){let{formula1:r}=t,{value:i}=e;return Number.isNaN(r)?!0:i===r}async validatorIsNotEqual(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value!==r}async validatorIsBetween(e,t,n){let{formula1:r,formula2:i}=t;if(Number.isNaN(r)||Number.isNaN(i))return!0;let a=Math.min(r,i),o=Math.max(r,i);return e.value>=a&&e.value<=o}async validatorIsNotBetween(e,t,n){let{formula1:r,formula2:i}=t;if(Number.isNaN(r)||Number.isNaN(i))return!0;let a=Math.min(r,i),o=Math.max(r,i);return e.value<a||e.value>o}async validatorIsGreaterThan(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value>r}async validatorIsGreaterThanOrEqual(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value>=r}async validatorIsLessThan(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value<r}async validatorIsLessThanOrEqual(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value<=r}async validator(t,n){let{value:r,unitId:i,subUnitId:a}=t,o=this.isEmptyCellValue(r),{allowBlank:s=!0,operator:c}=n;if(o)return s;let l=await this.parseFormula(n,i,a,t.row,t.column);if(!l.isFormulaValid||!await this.isValidType(t,l,n))return!1;if(!c)return!0;let u=this.transform(t,l,n);switch(c){case e.DataValidationOperator.BETWEEN:return this.validatorIsBetween(u,l,n);case e.DataValidationOperator.EQUAL:return this.validatorIsEqual(u,l,n);case e.DataValidationOperator.GREATER_THAN:return this.validatorIsGreaterThan(u,l,n);case e.DataValidationOperator.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(u,l,n);case e.DataValidationOperator.LESS_THAN:return this.validatorIsLessThan(u,l,n);case e.DataValidationOperator.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(u,l,n);case e.DataValidationOperator.NOT_BETWEEN:return this.validatorIsNotBetween(u,l,n);case e.DataValidationOperator.NOT_EQUAL:return this.validatorIsNotEqual(u,l,n);default:throw Error(`Unknown operator.`)}}};L=u([l(0,(0,e.Inject)(e.LocaleService)),l(1,(0,e.Inject)(e.Injector))],L),exports.AddDataValidationMutation=f,Object.defineProperty(exports,`BaseDataValidator`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`DataValidationModel`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`DataValidationResourceController`,{enumerable:!0,get:function(){return h}}),exports.DataValidatorDropdownType=I,exports.DataValidatorRegistryScope=v,exports.DataValidatorRegistryService=y,exports.FORMULA1=M,exports.FORMULA2=N,exports.RemoveDataValidationMutation=p,exports.TWO_FORMULA_OPERATOR_COUNT=j,exports.TYPE=P,exports.TextLengthErrorTitleMap=A,Object.defineProperty(exports,`UniverDataValidationPlugin`,{enumerable:!0,get:function(){return D}}),exports.UpdateDataValidationMutation=m,exports.UpdateRuleType=i,exports.getRuleOptions=r,exports.getRuleSetting=n;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require(`@univerjs/core`),t=require(`rxjs`);function n(e){return{type:e.type,operator:e.operator,formula1:e.formula1,formula2:e.formula2,allowBlank:e.allowBlank}}function r(e){return{error:e.error,errorStyle:e.errorStyle,errorTitle:e.errorTitle,imeMode:e.imeMode,prompt:e.prompt,promptTitle:e.promptTitle,showDropDown:e.showDropDown,showErrorMessage:e.showErrorMessage,showInputMessage:e.showInputMessage,renderMode:e.renderMode,bizInfo:e.bizInfo}}let i=function(e){return e[e.SETTING=0]=`SETTING`,e[e.RANGE=1]=`RANGE`,e[e.OPTIONS=2]=`OPTIONS`,e[e.ALL=3]=`ALL`,e}({});function a(e){"@babel/helpers - typeof";return a=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},a(e)}function o(e,t){if(a(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(a(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function s(e){var t=o(e,`string`);return a(t)==`symbol`?t:t+``}function c(e,t,n){return(t=s(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){return function(n,r){t(n,r,e)}}function u(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}let d=class extends e.Disposable{constructor(e){super(),this._logService=e,c(this,`_model`,new Map),c(this,`_ruleChange$`,new t.Subject),c(this,`ruleChange$`,this._ruleChange$.asObservable()),c(this,`ruleChangeDebounce$`,this.ruleChange$.pipe((0,t.debounceTime)(20))),this.disposeWithMe({dispose:()=>{this._ruleChange$.complete()}})}_ensureMap(e,t){this._model.has(e)||this._model.set(e,new Map);let n=this._model.get(e);if(n.has(t))return n.get(t);let r={map:new Map,list:[]};return n.set(t,r),r}_addSubUnitRule(e,t,n){let{map:r,list:i}=e,a=(Array.isArray(t)?t:[t]).filter(e=>!r.has(e.uid));typeof n==`number`&&n<i.length?i.splice(n,0,...a):i.push(...a),a.forEach(e=>{r.set(e.uid,e)})}_removeSubUnitRule(e,t){let{map:n,list:r}=e,i=r.findIndex(e=>e.uid===t);i>-1&&(r.splice(i,1),n.delete(t))}_updateSubUnitRule(e,t,a){let{map:o,list:s}=e,c=o.get(t),l=s.findIndex(e=>t===e.uid);if(!c)throw Error(`Data validation rule is not found, ruleId: ${t}.`);let u={...c};switch(a.type){case i.RANGE:u.ranges=a.payload;break;case i.SETTING:Object.assign(u,n(a.payload));break;case i.OPTIONS:Object.assign(u,r(a.payload));break;case i.ALL:Object.assign(u,a.payload);break;default:break}return s[l]=u,o.set(t,u),u}_addRuleSideEffect(e,t,n,r){if(!this._ensureMap(e,t).map.get(n.uid))return{rule:n,type:`add`,unitId:e,subUnitId:t,source:r}}addRule(e,t,n,r,i){try{let a=this._ensureMap(e,t),o=(Array.isArray(n)?n:[n]).map(n=>this._addRuleSideEffect(e,t,n,r));this._addSubUnitRule(a,n,i),o.forEach(e=>{e&&this._ruleChange$.next(e)})}catch(e){this._logService.error(e)}}updateRule(t,n,r,i,a){try{let o=this._ensureMap(t,n),s=e.Tools.deepClone(o.map.get(r));if(!s)throw Error(`Data validation rule is not found, ruleId: ${r}.`);let c=this._updateSubUnitRule(o,r,i);this._ruleChange$.next({rule:c,type:`update`,unitId:t,subUnitId:n,source:a,updatePayload:i,oldRule:s})}catch(e){this._logService.error(e)}}removeRule(e,t,n,r){try{let i=this._ensureMap(e,t),a=i.map.get(n);a&&(this._removeSubUnitRule(i,n),this._ruleChange$.next({rule:a,type:`remove`,unitId:e,subUnitId:t,source:r}))}catch(e){this._logService.error(e)}}getRuleById(e,t,n){return this._ensureMap(e,t).map.get(n)}getRuleIndex(e,t,n){return this._ensureMap(e,t).list.findIndex(e=>e.uid===n)}getRules(e,t){return[...this._ensureMap(e,t).list]}getUnitRules(e){let t=this._model.get(e);if(!t)return[];let n=[];return t.forEach((e,t)=>{n.push([t,e.list])}),n}deleteUnitRules(e){this._model.delete(e)}getSubUnitIds(e){var t,n;return Array.from((t=(n=this._model.get(e))==null?void 0:n.keys())==null?[]:t)}getAll(){return Array.from(this._model.keys()).map(e=>[e,this.getUnitRules(e)])}};d=u([l(0,e.ILogService)],d);const f={type:e.CommandType.MUTATION,id:`data-validation.mutation.addRule`,handler(e,t){if(!t)return!1;let{unitId:n,subUnitId:r,rule:i,index:a,source:o=`command`}=t;return e.get(d).addRule(n,r,i,o,a),!0}},p={type:e.CommandType.MUTATION,id:`data-validation.mutation.removeRule`,handler(e,t){if(!t)return!1;let{unitId:n,subUnitId:r,ruleId:i,source:a=`command`}=t,o=e.get(d);return Array.isArray(i)?i.forEach(e=>{o.removeRule(n,r,e,a)}):o.removeRule(n,r,i,a),!0}},m={type:e.CommandType.MUTATION,id:`data-validation.mutation.updateRule`,handler(e,t){if(!t)return!1;let{unitId:n,subUnitId:r,ruleId:i,payload:a,source:o=`command`}=t;return e.get(d).updateRule(n,r,i,a,o),!0}};let h=class extends e.Disposable{constructor(e,t,n){super(),this._resourceManagerService=e,this._univerInstanceService=t,this._dataValidationModel=n,this._initSnapshot()}_initSnapshot(){let t=e=>{let t=this._dataValidationModel.getUnitRules(e),n={};return t?(t.forEach(([e,t])=>{n[e]=t}),JSON.stringify(n)):``},n=e=>{if(!e)return{};try{return JSON.parse(e)}catch{return{}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:`SHEET_DATA_VALIDATION_PLUGIN`,businesses:[e.UniverInstanceType.UNIVER_SHEET],toJson:e=>t(e),parseJson:e=>n(e),onUnLoad:e=>{this._dataValidationModel.deleteUnitRules(e)},onLoad:(e,t)=>{Object.keys(t).forEach(n=>{t[n].forEach(t=>{this._dataValidationModel.addRule(e,n,t,`patched`)})})}}))}};h=u([l(0,e.IResourceManagerService),l(1,e.IUniverInstanceService),l(2,(0,e.Inject)(d))],h);var g=`@univerjs/data-validation`,_=`0.20.0`;let v=function(e){return e.SHEET=`sheet`,e}({});var y=class{constructor(){c(this,`_validatorByScopes`,new Map),c(this,`_validatorMap`,new Map),c(this,`_validatorsChange$`,new t.BehaviorSubject(void 0)),c(this,`validatorsChange$`,this._validatorsChange$.asObservable())}_addValidatorToScope(e,t){this._validatorByScopes.has(t)||this._validatorByScopes.set(t,[]);let n=this._validatorByScopes.get(t);if(n.findIndex(t=>t.id===e.id)>-1)throw Error(`Validator item with the same id ${e.id} has already been added!`);n.push(e)}_removeValidatorFromScope(e,t){let n=this._validatorByScopes.get(t);if(!n)return;let r=n.findIndex(t=>t.id===e.id);r>-1&&n.splice(r,1)}register(t){return this._validatorMap.set(t.id,t),Array.isArray(t.scopes)?t.scopes.forEach(e=>{this._addValidatorToScope(t,e)}):this._addValidatorToScope(t,t.scopes),this._validatorsChange$.next(),(0,e.toDisposable)(()=>{this._validatorMap.delete(t.id),Array.isArray(t.scopes)?t.scopes.forEach(e=>{this._removeValidatorFromScope(t,e)}):this._removeValidatorFromScope(t,t.scopes),this._validatorsChange$.next()})}getValidatorItem(e){return this._validatorMap.get(e)}getValidatorsByScope(e){return this._validatorByScopes.get(e)}};const b={type:e.CommandType.COMMAND,id:`data-validation.command.addRule`,async handler(t,n){if(t.get(e.ILogService).error("[Deprecated]: `AddDataValidationCommand` is deprecated, please use `AddSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!n)return!1;let{rule:r,unitId:i,subUnitId:a}=n,o=t.get(e.ICommandService),s=t.get(e.IUndoRedoService),c={...n,rule:{...n.rule,ranges:[n.rule.range]}},l=[{id:f.id,params:c}],u=[{id:p.id,params:{unitId:i,subUnitId:a,ruleId:r.uid}}];return s.pushUndoRedo({unitID:i,redoMutations:l,undoMutations:u}),await o.executeCommand(f.id,c),!0}},x={type:e.CommandType.COMMAND,id:`data-validation.command.removeRule`,handler(t,n){if(t.get(e.ILogService).error("[Deprecated]: `RemoveDataValidationCommand` is deprecated, please use `RemoveSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!n)return!1;let{unitId:r,subUnitId:i,ruleId:a}=n,o=t.get(e.ICommandService),s=t.get(e.IUndoRedoService),c=t.get(d),l=[{id:p.id,params:n}],u=[{id:f.id,params:{unitId:r,subUnitId:i,rule:{...c.getRuleById(r,i,a)},index:c.getRuleIndex(r,i,a)}}];return s.pushUndoRedo({undoMutations:u,redoMutations:l,unitID:n.unitId}),o.executeCommand(p.id,n),!0}},S={type:e.CommandType.COMMAND,id:`data-validation.command.updateDataValidationSetting`,handler(t,n){if(t.get(e.ILogService).warn("[Deprecated]: `UpdateDataValidationOptionsCommand` is deprecated, please use `UpdateSheetDataValidationOptionsCommand` in `@univerjs/sheets-data-validation` instead!"),!n)return!1;let a=t.get(e.ICommandService),o=t.get(e.IUndoRedoService),s=t.get(d),{unitId:c,subUnitId:l,ruleId:u,options:f}=n,p=s.getRuleById(c,l,u);if(!p)return!1;let h={unitId:c,subUnitId:l,ruleId:u,payload:{type:i.OPTIONS,payload:f}},g=[{id:m.id,params:h}],_={unitId:c,subUnitId:l,ruleId:u,payload:{type:i.OPTIONS,payload:r(p)}},v=[{id:m.id,params:_}];return o.pushUndoRedo({unitID:c,redoMutations:g,undoMutations:v}),a.executeCommand(m.id,h),!0}},C={type:e.CommandType.COMMAND,id:`data-validation.command.updateDataValidationOptions`,handler(t,r){if(t.get(e.ILogService).error("[Deprecated]: `UpdateDataValidationSettingCommand` is deprecated, please use `UpdateSheetDataValidationSettingCommand` in `@univerjs/sheets-data-validation` instead!"),!r)return!1;let a=t.get(e.ICommandService),o=t.get(e.IUndoRedoService),s=t.get(d),c=t.get(y),{unitId:l,subUnitId:u,ruleId:f,setting:p}=r,h=c.getValidatorItem(p.type);if(!h)return!1;let g=s.getRuleById(l,u,f);if(!g)return!1;let _={...g,...p};if(!h.validatorFormula(_,l,u).success)return!1;let v={unitId:l,subUnitId:u,ruleId:f,payload:{type:i.SETTING,payload:{...p,...h.normalizeFormula(_,l,u)}}},b=[{id:m.id,params:v}],x={unitId:l,subUnitId:u,ruleId:f,payload:{type:i.SETTING,payload:n(g)}},S=[{id:m.id,params:x}];return o.pushUndoRedo({unitID:l,redoMutations:b,undoMutations:S}),a.executeCommand(m.id,v),!0}},w={type:e.CommandType.COMMAND,id:`data-validation.command.removeAll`,handler(t,n){if(t.get(e.ILogService).error("[Deprecated]: `RemoveAllDataValidationCommand` is deprecated, please use `RemoveSheetAllDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!n)return!1;let{unitId:r,subUnitId:i}=n,a=t.get(e.ICommandService),o=t.get(d),s=t.get(e.IUndoRedoService),c=[...o.getRules(r,i)],l={unitId:r,subUnitId:i,ruleId:c.map(e=>e.uid)},u=[{id:p.id,params:l}],m=[{id:f.id,params:{unitId:r,subUnitId:i,rule:c}}];return s.pushUndoRedo({redoMutations:u,undoMutations:m,unitID:r}),a.executeCommand(p.id,l),!0}},T=`data-validation.config`;Symbol(T);const E={};let D=class extends e.Plugin{constructor(t=E,n,r,i){super(),this._config=t,this._injector=n,this._commandService=r,this._configService=i;let{...a}=(0,e.merge)({},E,this._config);this._configService.setConfig(T,a)}onStarting(){[[d],[y],[h]].forEach(e=>this._injector.add(e)),[b,w,S,C,x,f,m,p].forEach(e=>{this._commandService.registerCommand(e)})}onReady(){this._injector.get(h)}};c(D,`pluginName`,`UNIVER_DATA_VALIDATION_PLUGIN`),c(D,`packageName`,g),c(D,`version`,_),c(D,`type`,e.UniverInstanceType.UNIVER_SHEET),D=u([l(1,(0,e.Inject)(e.Injector)),l(2,e.ICommandService),l(3,e.IConfigService)],D),e.DataValidationOperator.BETWEEN,e.DataValidationOperator.EQUAL,e.DataValidationOperator.GREATER_THAN,e.DataValidationOperator.GREATER_THAN_OR_EQUAL,e.DataValidationOperator.LESS_THAN,e.DataValidationOperator.LESS_THAN_OR_EQUAL,e.DataValidationOperator.NOT_BETWEEN,e.DataValidationOperator.NOT_EQUAL;const O={[e.DataValidationOperator.BETWEEN]:`dataValidation.ruleName.between`,[e.DataValidationOperator.EQUAL]:`dataValidation.ruleName.equal`,[e.DataValidationOperator.GREATER_THAN]:`dataValidation.ruleName.greaterThan`,[e.DataValidationOperator.GREATER_THAN_OR_EQUAL]:`dataValidation.ruleName.greaterThanOrEqual`,[e.DataValidationOperator.LESS_THAN]:`dataValidation.ruleName.lessThan`,[e.DataValidationOperator.LESS_THAN_OR_EQUAL]:`dataValidation.ruleName.lessThanOrEqual`,[e.DataValidationOperator.NOT_BETWEEN]:`dataValidation.ruleName.notBetween`,[e.DataValidationOperator.NOT_EQUAL]:`dataValidation.ruleName.notEqual`,NONE:`dataValidation.ruleName.legal`},k={[e.DataValidationOperator.BETWEEN]:`dataValidation.errorMsg.between`,[e.DataValidationOperator.EQUAL]:`dataValidation.errorMsg.equal`,[e.DataValidationOperator.GREATER_THAN]:`dataValidation.errorMsg.greaterThan`,[e.DataValidationOperator.GREATER_THAN_OR_EQUAL]:`dataValidation.errorMsg.greaterThanOrEqual`,[e.DataValidationOperator.LESS_THAN]:`dataValidation.errorMsg.lessThan`,[e.DataValidationOperator.LESS_THAN_OR_EQUAL]:`dataValidation.errorMsg.lessThanOrEqual`,[e.DataValidationOperator.NOT_BETWEEN]:`dataValidation.errorMsg.notBetween`,[e.DataValidationOperator.NOT_EQUAL]:`dataValidation.errorMsg.notEqual`,NONE:`dataValidation.errorMsg.legal`},A={[e.DataValidationOperator.BETWEEN]:`dataValidation.textLength.errorMsg.between`,[e.DataValidationOperator.EQUAL]:`dataValidation.textLength.errorMsg.equal`,[e.DataValidationOperator.GREATER_THAN]:`dataValidation.textLength.errorMsg.greaterThan`,[e.DataValidationOperator.GREATER_THAN_OR_EQUAL]:`dataValidation.textLength.errorMsg.greaterThanOrEqual`,[e.DataValidationOperator.LESS_THAN]:`dataValidation.textLength.errorMsg.lessThan`,[e.DataValidationOperator.LESS_THAN_OR_EQUAL]:`dataValidation.textLength.errorMsg.lessThanOrEqual`,[e.DataValidationOperator.NOT_BETWEEN]:`dataValidation.textLength.errorMsg.notBetween`,[e.DataValidationOperator.NOT_EQUAL]:`dataValidation.textLength.errorMsg.notEqual`},j=[e.DataValidationOperator.BETWEEN,e.DataValidationOperator.NOT_BETWEEN],M=`{FORMULA1}`,N=`{FORMULA2}`,P=`{TYPE}`,F={[e.DataValidationOperator.BETWEEN]:`dataValidation.operators.between`,[e.DataValidationOperator.EQUAL]:`dataValidation.operators.equal`,[e.DataValidationOperator.GREATER_THAN]:`dataValidation.operators.greaterThan`,[e.DataValidationOperator.GREATER_THAN_OR_EQUAL]:`dataValidation.operators.greaterThanOrEqual`,[e.DataValidationOperator.LESS_THAN]:`dataValidation.operators.lessThan`,[e.DataValidationOperator.LESS_THAN_OR_EQUAL]:`dataValidation.operators.lessThanOrEqual`,[e.DataValidationOperator.NOT_BETWEEN]:`dataValidation.operators.notBetween`,[e.DataValidationOperator.NOT_EQUAL]:`dataValidation.operators.notEqual`};let I=function(e){return e.DATE=`date`,e.TIME=`time`,e.DATETIME=`datetime`,e.LIST=`list`,e.MULTIPLE_LIST=`multipleList`,e.COLOR=`color`,e.CASCADE=`cascade`,e}({}),L=class{constructor(e,t){this.localeService=e,this.injector=t,c(this,`offsetFormulaByRange`,!0),c(this,`formulaInput`,void 0),c(this,`canvasRender`,null),c(this,`dropdownType`,void 0),c(this,`optionsInput`,void 0),c(this,`skipDefaultFontRender`,void 0)}get operatorNames(){return this.operators.map(e=>this.localeService.t(F[e]))}get titleStr(){return this.localeService.t(this.title)}generateRuleName(e){var t,n;if(!e.operator)return this.localeService.t(O.NONE).replace(P,this.titleStr);let r=this.localeService.t(O[e.operator]).replace(M,(t=e.formula1)==null?``:t).replace(N,(n=e.formula2)==null?``:n);return`${this.titleStr} ${r}`}generateRuleErrorMessage(e,t){var n,r;return e.operator?`${this.localeService.t(k[e.operator]).replace(M,(n=e.formula1)==null?``:n).replace(N,(r=e.formula2)==null?``:r)}`:this.localeService.t(k.NONE).replace(P,this.titleStr)}getExtraStyle(e,t,n,r,i){}getRuleFinalError(e,t){return e.showErrorMessage&&e.error?e.error:this.generateRuleErrorMessage(e,t)}isEmptyCellValue(e){return e===``||e==null}normalizeFormula(e,t,n){return{formula1:e.formula1,formula2:e.formula2}}async isValidType(e,t,n){return!0}transform(e,t,n){return e}async validatorIsEqual(e,t,n){let{formula1:r}=t,{value:i}=e;return Number.isNaN(r)?!0:i===r}async validatorIsNotEqual(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value!==r}async validatorIsBetween(e,t,n){let{formula1:r,formula2:i}=t;if(Number.isNaN(r)||Number.isNaN(i))return!0;let a=Math.min(r,i),o=Math.max(r,i);return e.value>=a&&e.value<=o}async validatorIsNotBetween(e,t,n){let{formula1:r,formula2:i}=t;if(Number.isNaN(r)||Number.isNaN(i))return!0;let a=Math.min(r,i),o=Math.max(r,i);return e.value<a||e.value>o}async validatorIsGreaterThan(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value>r}async validatorIsGreaterThanOrEqual(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value>=r}async validatorIsLessThan(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value<r}async validatorIsLessThanOrEqual(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value<=r}async validator(t,n){let{value:r,unitId:i,subUnitId:a}=t,o=this.isEmptyCellValue(r),{allowBlank:s=!0,operator:c}=n;if(o)return s;let l=await this.parseFormula(n,i,a,t.row,t.column);if(!l.isFormulaValid||!await this.isValidType(t,l,n))return!1;if(!c)return!0;let u=this.transform(t,l,n);switch(c){case e.DataValidationOperator.BETWEEN:return this.validatorIsBetween(u,l,n);case e.DataValidationOperator.EQUAL:return this.validatorIsEqual(u,l,n);case e.DataValidationOperator.GREATER_THAN:return this.validatorIsGreaterThan(u,l,n);case e.DataValidationOperator.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(u,l,n);case e.DataValidationOperator.LESS_THAN:return this.validatorIsLessThan(u,l,n);case e.DataValidationOperator.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(u,l,n);case e.DataValidationOperator.NOT_BETWEEN:return this.validatorIsNotBetween(u,l,n);case e.DataValidationOperator.NOT_EQUAL:return this.validatorIsNotEqual(u,l,n);default:throw Error(`Unknown operator.`)}}};L=u([l(0,(0,e.Inject)(e.LocaleService)),l(1,(0,e.Inject)(e.Injector))],L),exports.AddDataValidationMutation=f,Object.defineProperty(exports,`BaseDataValidator`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`DataValidationModel`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`DataValidationResourceController`,{enumerable:!0,get:function(){return h}}),exports.DataValidatorDropdownType=I,exports.DataValidatorRegistryScope=v,exports.DataValidatorRegistryService=y,exports.FORMULA1=M,exports.FORMULA2=N,exports.RemoveDataValidationMutation=p,exports.TWO_FORMULA_OPERATOR_COUNT=j,exports.TYPE=P,exports.TextLengthErrorTitleMap=A,Object.defineProperty(exports,`UniverDataValidationPlugin`,{enumerable:!0,get:function(){return D}}),exports.UpdateDataValidationMutation=m,exports.UpdateRuleType=i,exports.getRuleOptions=r,exports.getRuleSetting=n;
|
package/lib/es/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{CommandType as e,DataValidationOperator as t,Disposable as n,ICommandService as r,IConfigService as i,ILogService as a,IResourceManagerService as o,IUndoRedoService as s,IUniverInstanceService as c,Inject as l,Injector as u,LocaleService as d,Plugin as f,Tools as p,UniverInstanceType as m,merge as h,toDisposable as g}from"@univerjs/core";import{BehaviorSubject as _,Subject as v,debounceTime as y}from"rxjs";function b(e){return{type:e.type,operator:e.operator,formula1:e.formula1,formula2:e.formula2,allowBlank:e.allowBlank}}function x(e){return{error:e.error,errorStyle:e.errorStyle,errorTitle:e.errorTitle,imeMode:e.imeMode,prompt:e.prompt,promptTitle:e.promptTitle,showDropDown:e.showDropDown,showErrorMessage:e.showErrorMessage,showInputMessage:e.showInputMessage,renderMode:e.renderMode,bizInfo:e.bizInfo}}let S=function(e){return e[e.SETTING=0]=`SETTING`,e[e.RANGE=1]=`RANGE`,e[e.OPTIONS=2]=`OPTIONS`,e[e.ALL=3]=`ALL`,e}({});function C(e){"@babel/helpers - typeof";return C=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},C(e)}function w(e,t){if(C(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(C(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function T(e){var t=w(e,`string`);return C(t)==`symbol`?t:t+``}function E(e,t,n){return(t=T(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function D(e,t){return function(n,r){t(n,r,e)}}function O(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}let k=class extends n{constructor(e){super(),this._logService=e,E(this,`_model`,new Map),E(this,`_ruleChange$`,new v),E(this,`ruleChange$`,this._ruleChange$.asObservable()),E(this,`ruleChangeDebounce$`,this.ruleChange$.pipe(y(20))),this.disposeWithMe({dispose:()=>{this._ruleChange$.complete()}})}_ensureMap(e,t){this._model.has(e)||this._model.set(e,new Map);let n=this._model.get(e);if(n.has(t))return n.get(t);let r={map:new Map,list:[]};return n.set(t,r),r}_addSubUnitRule(e,t,n){let{map:r,list:i}=e,a=(Array.isArray(t)?t:[t]).filter(e=>!r.has(e.uid));typeof n==`number`&&n<i.length?i.splice(n,0,...a):i.push(...a),a.forEach(e=>{r.set(e.uid,e)})}_removeSubUnitRule(e,t){let{map:n,list:r}=e,i=r.findIndex(e=>e.uid===t);i>-1&&(r.splice(i,1),n.delete(t))}_updateSubUnitRule(e,t,n){let{map:r,list:i}=e,a=r.get(t),o=i.findIndex(e=>t===e.uid);if(!a)throw Error(`Data validation rule is not found, ruleId: ${t}.`);let s={...a};switch(n.type){case S.RANGE:s.ranges=n.payload;break;case S.SETTING:Object.assign(s,b(n.payload));break;case S.OPTIONS:Object.assign(s,x(n.payload));break;case S.ALL:Object.assign(s,n.payload);break;default:break}return i[o]=s,r.set(t,s),s}_addRuleSideEffect(e,t,n,r){if(!this._ensureMap(e,t).map.get(n.uid))return{rule:n,type:`add`,unitId:e,subUnitId:t,source:r}}addRule(e,t,n,r,i){try{let a=this._ensureMap(e,t),o=(Array.isArray(n)?n:[n]).map(n=>this._addRuleSideEffect(e,t,n,r));this._addSubUnitRule(a,n,i),o.forEach(e=>{e&&this._ruleChange$.next(e)})}catch(e){this._logService.error(e)}}updateRule(e,t,n,r,i){try{let a=this._ensureMap(e,t),o=p.deepClone(a.map.get(n));if(!o)throw Error(`Data validation rule is not found, ruleId: ${n}.`);let s=this._updateSubUnitRule(a,n,r);this._ruleChange$.next({rule:s,type:`update`,unitId:e,subUnitId:t,source:i,updatePayload:r,oldRule:o})}catch(e){this._logService.error(e)}}removeRule(e,t,n,r){try{let i=this._ensureMap(e,t),a=i.map.get(n);a&&(this._removeSubUnitRule(i,n),this._ruleChange$.next({rule:a,type:`remove`,unitId:e,subUnitId:t,source:r}))}catch(e){this._logService.error(e)}}getRuleById(e,t,n){return this._ensureMap(e,t).map.get(n)}getRuleIndex(e,t,n){return this._ensureMap(e,t).list.findIndex(e=>e.uid===n)}getRules(e,t){return[...this._ensureMap(e,t).list]}getUnitRules(e){let t=this._model.get(e);if(!t)return[];let n=[];return t.forEach((e,t)=>{n.push([t,e.list])}),n}deleteUnitRules(e){this._model.delete(e)}getSubUnitIds(e){var t,n;return Array.from((t=(n=this._model.get(e))==null?void 0:n.keys())==null?[]:t)}getAll(){return Array.from(this._model.keys()).map(e=>[e,this.getUnitRules(e)])}};k=O([D(0,a)],k);const A={type:e.MUTATION,id:`data-validation.mutation.addRule`,handler(e,t){if(!t)return!1;let{unitId:n,subUnitId:r,rule:i,index:a,source:o=`command`}=t;return e.get(k).addRule(n,r,i,o,a),!0}},j={type:e.MUTATION,id:`data-validation.mutation.removeRule`,handler(e,t){if(!t)return!1;let{unitId:n,subUnitId:r,ruleId:i,source:a=`command`}=t,o=e.get(k);return Array.isArray(i)?i.forEach(e=>{o.removeRule(n,r,e,a)}):o.removeRule(n,r,i,a),!0}},M={type:e.MUTATION,id:`data-validation.mutation.updateRule`,handler(e,t){if(!t)return!1;let{unitId:n,subUnitId:r,ruleId:i,payload:a,source:o=`command`}=t;return e.get(k).updateRule(n,r,i,a,o),!0}};let N=class extends n{constructor(e,t,n){super(),this._resourceManagerService=e,this._univerInstanceService=t,this._dataValidationModel=n,this._initSnapshot()}_initSnapshot(){let e=e=>{let t=this._dataValidationModel.getUnitRules(e),n={};return t?(t.forEach(([e,t])=>{n[e]=t}),JSON.stringify(n)):``},t=e=>{if(!e)return{};try{return JSON.parse(e)}catch{return{}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:`SHEET_DATA_VALIDATION_PLUGIN`,businesses:[m.UNIVER_SHEET],toJson:t=>e(t),parseJson:e=>t(e),onUnLoad:e=>{this._dataValidationModel.deleteUnitRules(e)},onLoad:(e,t)=>{Object.keys(t).forEach(n=>{t[n].forEach(t=>{this._dataValidationModel.addRule(e,n,t,`patched`)})})}}))}};N=O([D(0,o),D(1,c),D(2,l(k))],N);var P=`@univerjs/data-validation`,F=`0.19.0`;let I=function(e){return e.SHEET=`sheet`,e}({});var L=class{constructor(){E(this,`_validatorByScopes`,new Map),E(this,`_validatorMap`,new Map),E(this,`_validatorsChange$`,new _(void 0)),E(this,`validatorsChange$`,this._validatorsChange$.asObservable())}_addValidatorToScope(e,t){this._validatorByScopes.has(t)||this._validatorByScopes.set(t,[]);let n=this._validatorByScopes.get(t);if(n.findIndex(t=>t.id===e.id)>-1)throw Error(`Validator item with the same id ${e.id} has already been added!`);n.push(e)}_removeValidatorFromScope(e,t){let n=this._validatorByScopes.get(t);if(!n)return;let r=n.findIndex(t=>t.id===e.id);r>-1&&n.splice(r,1)}register(e){return this._validatorMap.set(e.id,e),Array.isArray(e.scopes)?e.scopes.forEach(t=>{this._addValidatorToScope(e,t)}):this._addValidatorToScope(e,e.scopes),this._validatorsChange$.next(),g(()=>{this._validatorMap.delete(e.id),Array.isArray(e.scopes)?e.scopes.forEach(t=>{this._removeValidatorFromScope(e,t)}):this._removeValidatorFromScope(e,e.scopes),this._validatorsChange$.next()})}getValidatorItem(e){return this._validatorMap.get(e)}getValidatorsByScope(e){return this._validatorByScopes.get(e)}};const R={type:e.COMMAND,id:`data-validation.command.addRule`,async handler(e,t){if(e.get(a).error("[Deprecated]: `AddDataValidationCommand` is deprecated, please use `AddSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!t)return!1;let{rule:n,unitId:i,subUnitId:o}=t,c=e.get(r),l=e.get(s),u={...t,rule:{...t.rule,ranges:[t.rule.range]}},d=[{id:A.id,params:u}],f=[{id:j.id,params:{unitId:i,subUnitId:o,ruleId:n.uid}}];return l.pushUndoRedo({unitID:i,redoMutations:d,undoMutations:f}),await c.executeCommand(A.id,u),!0}},z={type:e.COMMAND,id:`data-validation.command.removeRule`,handler(e,t){if(e.get(a).error("[Deprecated]: `RemoveDataValidationCommand` is deprecated, please use `RemoveSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!t)return!1;let{unitId:n,subUnitId:i,ruleId:o}=t,c=e.get(r),l=e.get(s),u=e.get(k),d=[{id:j.id,params:t}],f=[{id:A.id,params:{unitId:n,subUnitId:i,rule:{...u.getRuleById(n,i,o)},index:u.getRuleIndex(n,i,o)}}];return l.pushUndoRedo({undoMutations:f,redoMutations:d,unitID:t.unitId}),c.executeCommand(j.id,t),!0}},B={type:e.COMMAND,id:`data-validation.command.updateDataValidationSetting`,handler(e,t){if(e.get(a).warn("[Deprecated]: `UpdateDataValidationOptionsCommand` is deprecated, please use `UpdateSheetDataValidationOptionsCommand` in `@univerjs/sheets-data-validation` instead!"),!t)return!1;let n=e.get(r),i=e.get(s),o=e.get(k),{unitId:c,subUnitId:l,ruleId:u,options:d}=t,f=o.getRuleById(c,l,u);if(!f)return!1;let p={unitId:c,subUnitId:l,ruleId:u,payload:{type:S.OPTIONS,payload:d}},m=[{id:M.id,params:p}],h={unitId:c,subUnitId:l,ruleId:u,payload:{type:S.OPTIONS,payload:x(f)}},g=[{id:M.id,params:h}];return i.pushUndoRedo({unitID:c,redoMutations:m,undoMutations:g}),n.executeCommand(M.id,p),!0}},V={type:e.COMMAND,id:`data-validation.command.updateDataValidationOptions`,handler(e,t){if(e.get(a).error("[Deprecated]: `UpdateDataValidationSettingCommand` is deprecated, please use `UpdateSheetDataValidationSettingCommand` in `@univerjs/sheets-data-validation` instead!"),!t)return!1;let n=e.get(r),i=e.get(s),o=e.get(k),c=e.get(L),{unitId:l,subUnitId:u,ruleId:d,setting:f}=t,p=c.getValidatorItem(f.type);if(!p)return!1;let m=o.getRuleById(l,u,d);if(!m)return!1;let h={...m,...f};if(!p.validatorFormula(h,l,u).success)return!1;let g={unitId:l,subUnitId:u,ruleId:d,payload:{type:S.SETTING,payload:{...f,...p.normalizeFormula(h,l,u)}}},_=[{id:M.id,params:g}],v={unitId:l,subUnitId:u,ruleId:d,payload:{type:S.SETTING,payload:b(m)}},y=[{id:M.id,params:v}];return i.pushUndoRedo({unitID:l,redoMutations:_,undoMutations:y}),n.executeCommand(M.id,g),!0}},H={type:e.COMMAND,id:`data-validation.command.removeAll`,handler(e,t){if(e.get(a).error("[Deprecated]: `RemoveAllDataValidationCommand` is deprecated, please use `RemoveSheetAllDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!t)return!1;let{unitId:n,subUnitId:i}=t,o=e.get(r),c=e.get(k),l=e.get(s),u=[...c.getRules(n,i)],d={unitId:n,subUnitId:i,ruleId:u.map(e=>e.uid)},f=[{id:j.id,params:d}],p=[{id:A.id,params:{unitId:n,subUnitId:i,rule:u}}];return l.pushUndoRedo({redoMutations:f,undoMutations:p,unitID:n}),o.executeCommand(j.id,d),!0}},U=`data-validation.config`;Symbol(U);const W={};let G=class extends f{constructor(e=W,t,n,r){super(),this._config=e,this._injector=t,this._commandService=n,this._configService=r;let{...i}=h({},W,this._config);this._configService.setConfig(U,i)}onStarting(){[[k],[L],[N]].forEach(e=>this._injector.add(e)),[R,H,B,V,z,A,M,j].forEach(e=>{this._commandService.registerCommand(e)})}onReady(){this._injector.get(N)}};E(G,`pluginName`,`UNIVER_DATA_VALIDATION_PLUGIN`),E(G,`packageName`,P),E(G,`version`,F),E(G,`type`,m.UNIVER_SHEET),G=O([D(1,l(u)),D(2,r),D(3,i)],G),t.BETWEEN,t.EQUAL,t.GREATER_THAN,t.GREATER_THAN_OR_EQUAL,t.LESS_THAN,t.LESS_THAN_OR_EQUAL,t.NOT_BETWEEN,t.NOT_EQUAL;const K={[t.BETWEEN]:`dataValidation.ruleName.between`,[t.EQUAL]:`dataValidation.ruleName.equal`,[t.GREATER_THAN]:`dataValidation.ruleName.greaterThan`,[t.GREATER_THAN_OR_EQUAL]:`dataValidation.ruleName.greaterThanOrEqual`,[t.LESS_THAN]:`dataValidation.ruleName.lessThan`,[t.LESS_THAN_OR_EQUAL]:`dataValidation.ruleName.lessThanOrEqual`,[t.NOT_BETWEEN]:`dataValidation.ruleName.notBetween`,[t.NOT_EQUAL]:`dataValidation.ruleName.notEqual`,NONE:`dataValidation.ruleName.legal`},q={[t.BETWEEN]:`dataValidation.errorMsg.between`,[t.EQUAL]:`dataValidation.errorMsg.equal`,[t.GREATER_THAN]:`dataValidation.errorMsg.greaterThan`,[t.GREATER_THAN_OR_EQUAL]:`dataValidation.errorMsg.greaterThanOrEqual`,[t.LESS_THAN]:`dataValidation.errorMsg.lessThan`,[t.LESS_THAN_OR_EQUAL]:`dataValidation.errorMsg.lessThanOrEqual`,[t.NOT_BETWEEN]:`dataValidation.errorMsg.notBetween`,[t.NOT_EQUAL]:`dataValidation.errorMsg.notEqual`,NONE:`dataValidation.errorMsg.legal`},J={[t.BETWEEN]:`dataValidation.textLength.errorMsg.between`,[t.EQUAL]:`dataValidation.textLength.errorMsg.equal`,[t.GREATER_THAN]:`dataValidation.textLength.errorMsg.greaterThan`,[t.GREATER_THAN_OR_EQUAL]:`dataValidation.textLength.errorMsg.greaterThanOrEqual`,[t.LESS_THAN]:`dataValidation.textLength.errorMsg.lessThan`,[t.LESS_THAN_OR_EQUAL]:`dataValidation.textLength.errorMsg.lessThanOrEqual`,[t.NOT_BETWEEN]:`dataValidation.textLength.errorMsg.notBetween`,[t.NOT_EQUAL]:`dataValidation.textLength.errorMsg.notEqual`},Y=[t.BETWEEN,t.NOT_BETWEEN],X=`{FORMULA1}`,Z=`{FORMULA2}`,Q=`{TYPE}`,ee={[t.BETWEEN]:`dataValidation.operators.between`,[t.EQUAL]:`dataValidation.operators.equal`,[t.GREATER_THAN]:`dataValidation.operators.greaterThan`,[t.GREATER_THAN_OR_EQUAL]:`dataValidation.operators.greaterThanOrEqual`,[t.LESS_THAN]:`dataValidation.operators.lessThan`,[t.LESS_THAN_OR_EQUAL]:`dataValidation.operators.lessThanOrEqual`,[t.NOT_BETWEEN]:`dataValidation.operators.notBetween`,[t.NOT_EQUAL]:`dataValidation.operators.notEqual`};let te=function(e){return e.DATE=`date`,e.TIME=`time`,e.DATETIME=`datetime`,e.LIST=`list`,e.MULTIPLE_LIST=`multipleList`,e.COLOR=`color`,e.CASCADE=`cascade`,e}({}),$=class{constructor(e,t){this.localeService=e,this.injector=t,E(this,`offsetFormulaByRange`,!0),E(this,`formulaInput`,void 0),E(this,`canvasRender`,null),E(this,`dropdownType`,void 0),E(this,`optionsInput`,void 0),E(this,`skipDefaultFontRender`,void 0)}get operatorNames(){return this.operators.map(e=>this.localeService.t(ee[e]))}get titleStr(){return this.localeService.t(this.title)}generateRuleName(e){var t,n;if(!e.operator)return this.localeService.t(K.NONE).replace(Q,this.titleStr);let r=this.localeService.t(K[e.operator]).replace(X,(t=e.formula1)==null?``:t).replace(Z,(n=e.formula2)==null?``:n);return`${this.titleStr} ${r}`}generateRuleErrorMessage(e,t){var n,r;return e.operator?`${this.localeService.t(q[e.operator]).replace(X,(n=e.formula1)==null?``:n).replace(Z,(r=e.formula2)==null?``:r)}`:this.localeService.t(q.NONE).replace(Q,this.titleStr)}getExtraStyle(e,t,n,r,i){}getRuleFinalError(e,t){return e.showErrorMessage&&e.error?e.error:this.generateRuleErrorMessage(e,t)}isEmptyCellValue(e){return e===``||e==null}normalizeFormula(e,t,n){return{formula1:e.formula1,formula2:e.formula2}}async isValidType(e,t,n){return!0}transform(e,t,n){return e}async validatorIsEqual(e,t,n){let{formula1:r}=t,{value:i}=e;return Number.isNaN(r)?!0:i===r}async validatorIsNotEqual(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value!==r}async validatorIsBetween(e,t,n){let{formula1:r,formula2:i}=t;if(Number.isNaN(r)||Number.isNaN(i))return!0;let a=Math.min(r,i),o=Math.max(r,i);return e.value>=a&&e.value<=o}async validatorIsNotBetween(e,t,n){let{formula1:r,formula2:i}=t;if(Number.isNaN(r)||Number.isNaN(i))return!0;let a=Math.min(r,i),o=Math.max(r,i);return e.value<a||e.value>o}async validatorIsGreaterThan(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value>r}async validatorIsGreaterThanOrEqual(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value>=r}async validatorIsLessThan(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value<r}async validatorIsLessThanOrEqual(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value<=r}async validator(e,n){let{value:r,unitId:i,subUnitId:a}=e,o=this.isEmptyCellValue(r),{allowBlank:s=!0,operator:c}=n;if(o)return s;let l=await this.parseFormula(n,i,a,e.row,e.column);if(!l.isFormulaValid||!await this.isValidType(e,l,n))return!1;if(!c)return!0;let u=this.transform(e,l,n);switch(c){case t.BETWEEN:return this.validatorIsBetween(u,l,n);case t.EQUAL:return this.validatorIsEqual(u,l,n);case t.GREATER_THAN:return this.validatorIsGreaterThan(u,l,n);case t.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(u,l,n);case t.LESS_THAN:return this.validatorIsLessThan(u,l,n);case t.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(u,l,n);case t.NOT_BETWEEN:return this.validatorIsNotBetween(u,l,n);case t.NOT_EQUAL:return this.validatorIsNotEqual(u,l,n);default:throw Error(`Unknown operator.`)}}};$=O([D(0,l(d)),D(1,l(u))],$);export{A as AddDataValidationMutation,$ as BaseDataValidator,k as DataValidationModel,N as DataValidationResourceController,te as DataValidatorDropdownType,I as DataValidatorRegistryScope,L as DataValidatorRegistryService,X as FORMULA1,Z as FORMULA2,j as RemoveDataValidationMutation,Y as TWO_FORMULA_OPERATOR_COUNT,Q as TYPE,J as TextLengthErrorTitleMap,G as UniverDataValidationPlugin,M as UpdateDataValidationMutation,S as UpdateRuleType,x as getRuleOptions,b as getRuleSetting};
|
|
1
|
+
import{CommandType as e,DataValidationOperator as t,Disposable as n,ICommandService as r,IConfigService as i,ILogService as a,IResourceManagerService as o,IUndoRedoService as s,IUniverInstanceService as c,Inject as l,Injector as u,LocaleService as d,Plugin as f,Tools as p,UniverInstanceType as m,merge as h,toDisposable as g}from"@univerjs/core";import{BehaviorSubject as _,Subject as v,debounceTime as y}from"rxjs";function b(e){return{type:e.type,operator:e.operator,formula1:e.formula1,formula2:e.formula2,allowBlank:e.allowBlank}}function x(e){return{error:e.error,errorStyle:e.errorStyle,errorTitle:e.errorTitle,imeMode:e.imeMode,prompt:e.prompt,promptTitle:e.promptTitle,showDropDown:e.showDropDown,showErrorMessage:e.showErrorMessage,showInputMessage:e.showInputMessage,renderMode:e.renderMode,bizInfo:e.bizInfo}}let S=function(e){return e[e.SETTING=0]=`SETTING`,e[e.RANGE=1]=`RANGE`,e[e.OPTIONS=2]=`OPTIONS`,e[e.ALL=3]=`ALL`,e}({});function C(e){"@babel/helpers - typeof";return C=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},C(e)}function w(e,t){if(C(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(C(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function T(e){var t=w(e,`string`);return C(t)==`symbol`?t:t+``}function E(e,t,n){return(t=T(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function D(e,t){return function(n,r){t(n,r,e)}}function O(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}let k=class extends n{constructor(e){super(),this._logService=e,E(this,`_model`,new Map),E(this,`_ruleChange$`,new v),E(this,`ruleChange$`,this._ruleChange$.asObservable()),E(this,`ruleChangeDebounce$`,this.ruleChange$.pipe(y(20))),this.disposeWithMe({dispose:()=>{this._ruleChange$.complete()}})}_ensureMap(e,t){this._model.has(e)||this._model.set(e,new Map);let n=this._model.get(e);if(n.has(t))return n.get(t);let r={map:new Map,list:[]};return n.set(t,r),r}_addSubUnitRule(e,t,n){let{map:r,list:i}=e,a=(Array.isArray(t)?t:[t]).filter(e=>!r.has(e.uid));typeof n==`number`&&n<i.length?i.splice(n,0,...a):i.push(...a),a.forEach(e=>{r.set(e.uid,e)})}_removeSubUnitRule(e,t){let{map:n,list:r}=e,i=r.findIndex(e=>e.uid===t);i>-1&&(r.splice(i,1),n.delete(t))}_updateSubUnitRule(e,t,n){let{map:r,list:i}=e,a=r.get(t),o=i.findIndex(e=>t===e.uid);if(!a)throw Error(`Data validation rule is not found, ruleId: ${t}.`);let s={...a};switch(n.type){case S.RANGE:s.ranges=n.payload;break;case S.SETTING:Object.assign(s,b(n.payload));break;case S.OPTIONS:Object.assign(s,x(n.payload));break;case S.ALL:Object.assign(s,n.payload);break;default:break}return i[o]=s,r.set(t,s),s}_addRuleSideEffect(e,t,n,r){if(!this._ensureMap(e,t).map.get(n.uid))return{rule:n,type:`add`,unitId:e,subUnitId:t,source:r}}addRule(e,t,n,r,i){try{let a=this._ensureMap(e,t),o=(Array.isArray(n)?n:[n]).map(n=>this._addRuleSideEffect(e,t,n,r));this._addSubUnitRule(a,n,i),o.forEach(e=>{e&&this._ruleChange$.next(e)})}catch(e){this._logService.error(e)}}updateRule(e,t,n,r,i){try{let a=this._ensureMap(e,t),o=p.deepClone(a.map.get(n));if(!o)throw Error(`Data validation rule is not found, ruleId: ${n}.`);let s=this._updateSubUnitRule(a,n,r);this._ruleChange$.next({rule:s,type:`update`,unitId:e,subUnitId:t,source:i,updatePayload:r,oldRule:o})}catch(e){this._logService.error(e)}}removeRule(e,t,n,r){try{let i=this._ensureMap(e,t),a=i.map.get(n);a&&(this._removeSubUnitRule(i,n),this._ruleChange$.next({rule:a,type:`remove`,unitId:e,subUnitId:t,source:r}))}catch(e){this._logService.error(e)}}getRuleById(e,t,n){return this._ensureMap(e,t).map.get(n)}getRuleIndex(e,t,n){return this._ensureMap(e,t).list.findIndex(e=>e.uid===n)}getRules(e,t){return[...this._ensureMap(e,t).list]}getUnitRules(e){let t=this._model.get(e);if(!t)return[];let n=[];return t.forEach((e,t)=>{n.push([t,e.list])}),n}deleteUnitRules(e){this._model.delete(e)}getSubUnitIds(e){var t,n;return Array.from((t=(n=this._model.get(e))==null?void 0:n.keys())==null?[]:t)}getAll(){return Array.from(this._model.keys()).map(e=>[e,this.getUnitRules(e)])}};k=O([D(0,a)],k);const A={type:e.MUTATION,id:`data-validation.mutation.addRule`,handler(e,t){if(!t)return!1;let{unitId:n,subUnitId:r,rule:i,index:a,source:o=`command`}=t;return e.get(k).addRule(n,r,i,o,a),!0}},j={type:e.MUTATION,id:`data-validation.mutation.removeRule`,handler(e,t){if(!t)return!1;let{unitId:n,subUnitId:r,ruleId:i,source:a=`command`}=t,o=e.get(k);return Array.isArray(i)?i.forEach(e=>{o.removeRule(n,r,e,a)}):o.removeRule(n,r,i,a),!0}},M={type:e.MUTATION,id:`data-validation.mutation.updateRule`,handler(e,t){if(!t)return!1;let{unitId:n,subUnitId:r,ruleId:i,payload:a,source:o=`command`}=t;return e.get(k).updateRule(n,r,i,a,o),!0}};let N=class extends n{constructor(e,t,n){super(),this._resourceManagerService=e,this._univerInstanceService=t,this._dataValidationModel=n,this._initSnapshot()}_initSnapshot(){let e=e=>{let t=this._dataValidationModel.getUnitRules(e),n={};return t?(t.forEach(([e,t])=>{n[e]=t}),JSON.stringify(n)):``},t=e=>{if(!e)return{};try{return JSON.parse(e)}catch{return{}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:`SHEET_DATA_VALIDATION_PLUGIN`,businesses:[m.UNIVER_SHEET],toJson:t=>e(t),parseJson:e=>t(e),onUnLoad:e=>{this._dataValidationModel.deleteUnitRules(e)},onLoad:(e,t)=>{Object.keys(t).forEach(n=>{t[n].forEach(t=>{this._dataValidationModel.addRule(e,n,t,`patched`)})})}}))}};N=O([D(0,o),D(1,c),D(2,l(k))],N);var P=`@univerjs/data-validation`,F=`0.20.0`;let I=function(e){return e.SHEET=`sheet`,e}({});var L=class{constructor(){E(this,`_validatorByScopes`,new Map),E(this,`_validatorMap`,new Map),E(this,`_validatorsChange$`,new _(void 0)),E(this,`validatorsChange$`,this._validatorsChange$.asObservable())}_addValidatorToScope(e,t){this._validatorByScopes.has(t)||this._validatorByScopes.set(t,[]);let n=this._validatorByScopes.get(t);if(n.findIndex(t=>t.id===e.id)>-1)throw Error(`Validator item with the same id ${e.id} has already been added!`);n.push(e)}_removeValidatorFromScope(e,t){let n=this._validatorByScopes.get(t);if(!n)return;let r=n.findIndex(t=>t.id===e.id);r>-1&&n.splice(r,1)}register(e){return this._validatorMap.set(e.id,e),Array.isArray(e.scopes)?e.scopes.forEach(t=>{this._addValidatorToScope(e,t)}):this._addValidatorToScope(e,e.scopes),this._validatorsChange$.next(),g(()=>{this._validatorMap.delete(e.id),Array.isArray(e.scopes)?e.scopes.forEach(t=>{this._removeValidatorFromScope(e,t)}):this._removeValidatorFromScope(e,e.scopes),this._validatorsChange$.next()})}getValidatorItem(e){return this._validatorMap.get(e)}getValidatorsByScope(e){return this._validatorByScopes.get(e)}};const R={type:e.COMMAND,id:`data-validation.command.addRule`,async handler(e,t){if(e.get(a).error("[Deprecated]: `AddDataValidationCommand` is deprecated, please use `AddSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!t)return!1;let{rule:n,unitId:i,subUnitId:o}=t,c=e.get(r),l=e.get(s),u={...t,rule:{...t.rule,ranges:[t.rule.range]}},d=[{id:A.id,params:u}],f=[{id:j.id,params:{unitId:i,subUnitId:o,ruleId:n.uid}}];return l.pushUndoRedo({unitID:i,redoMutations:d,undoMutations:f}),await c.executeCommand(A.id,u),!0}},z={type:e.COMMAND,id:`data-validation.command.removeRule`,handler(e,t){if(e.get(a).error("[Deprecated]: `RemoveDataValidationCommand` is deprecated, please use `RemoveSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!t)return!1;let{unitId:n,subUnitId:i,ruleId:o}=t,c=e.get(r),l=e.get(s),u=e.get(k),d=[{id:j.id,params:t}],f=[{id:A.id,params:{unitId:n,subUnitId:i,rule:{...u.getRuleById(n,i,o)},index:u.getRuleIndex(n,i,o)}}];return l.pushUndoRedo({undoMutations:f,redoMutations:d,unitID:t.unitId}),c.executeCommand(j.id,t),!0}},B={type:e.COMMAND,id:`data-validation.command.updateDataValidationSetting`,handler(e,t){if(e.get(a).warn("[Deprecated]: `UpdateDataValidationOptionsCommand` is deprecated, please use `UpdateSheetDataValidationOptionsCommand` in `@univerjs/sheets-data-validation` instead!"),!t)return!1;let n=e.get(r),i=e.get(s),o=e.get(k),{unitId:c,subUnitId:l,ruleId:u,options:d}=t,f=o.getRuleById(c,l,u);if(!f)return!1;let p={unitId:c,subUnitId:l,ruleId:u,payload:{type:S.OPTIONS,payload:d}},m=[{id:M.id,params:p}],h={unitId:c,subUnitId:l,ruleId:u,payload:{type:S.OPTIONS,payload:x(f)}},g=[{id:M.id,params:h}];return i.pushUndoRedo({unitID:c,redoMutations:m,undoMutations:g}),n.executeCommand(M.id,p),!0}},V={type:e.COMMAND,id:`data-validation.command.updateDataValidationOptions`,handler(e,t){if(e.get(a).error("[Deprecated]: `UpdateDataValidationSettingCommand` is deprecated, please use `UpdateSheetDataValidationSettingCommand` in `@univerjs/sheets-data-validation` instead!"),!t)return!1;let n=e.get(r),i=e.get(s),o=e.get(k),c=e.get(L),{unitId:l,subUnitId:u,ruleId:d,setting:f}=t,p=c.getValidatorItem(f.type);if(!p)return!1;let m=o.getRuleById(l,u,d);if(!m)return!1;let h={...m,...f};if(!p.validatorFormula(h,l,u).success)return!1;let g={unitId:l,subUnitId:u,ruleId:d,payload:{type:S.SETTING,payload:{...f,...p.normalizeFormula(h,l,u)}}},_=[{id:M.id,params:g}],v={unitId:l,subUnitId:u,ruleId:d,payload:{type:S.SETTING,payload:b(m)}},y=[{id:M.id,params:v}];return i.pushUndoRedo({unitID:l,redoMutations:_,undoMutations:y}),n.executeCommand(M.id,g),!0}},H={type:e.COMMAND,id:`data-validation.command.removeAll`,handler(e,t){if(e.get(a).error("[Deprecated]: `RemoveAllDataValidationCommand` is deprecated, please use `RemoveSheetAllDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!t)return!1;let{unitId:n,subUnitId:i}=t,o=e.get(r),c=e.get(k),l=e.get(s),u=[...c.getRules(n,i)],d={unitId:n,subUnitId:i,ruleId:u.map(e=>e.uid)},f=[{id:j.id,params:d}],p=[{id:A.id,params:{unitId:n,subUnitId:i,rule:u}}];return l.pushUndoRedo({redoMutations:f,undoMutations:p,unitID:n}),o.executeCommand(j.id,d),!0}},U=`data-validation.config`;Symbol(U);const W={};let G=class extends f{constructor(e=W,t,n,r){super(),this._config=e,this._injector=t,this._commandService=n,this._configService=r;let{...i}=h({},W,this._config);this._configService.setConfig(U,i)}onStarting(){[[k],[L],[N]].forEach(e=>this._injector.add(e)),[R,H,B,V,z,A,M,j].forEach(e=>{this._commandService.registerCommand(e)})}onReady(){this._injector.get(N)}};E(G,`pluginName`,`UNIVER_DATA_VALIDATION_PLUGIN`),E(G,`packageName`,P),E(G,`version`,F),E(G,`type`,m.UNIVER_SHEET),G=O([D(1,l(u)),D(2,r),D(3,i)],G),t.BETWEEN,t.EQUAL,t.GREATER_THAN,t.GREATER_THAN_OR_EQUAL,t.LESS_THAN,t.LESS_THAN_OR_EQUAL,t.NOT_BETWEEN,t.NOT_EQUAL;const K={[t.BETWEEN]:`dataValidation.ruleName.between`,[t.EQUAL]:`dataValidation.ruleName.equal`,[t.GREATER_THAN]:`dataValidation.ruleName.greaterThan`,[t.GREATER_THAN_OR_EQUAL]:`dataValidation.ruleName.greaterThanOrEqual`,[t.LESS_THAN]:`dataValidation.ruleName.lessThan`,[t.LESS_THAN_OR_EQUAL]:`dataValidation.ruleName.lessThanOrEqual`,[t.NOT_BETWEEN]:`dataValidation.ruleName.notBetween`,[t.NOT_EQUAL]:`dataValidation.ruleName.notEqual`,NONE:`dataValidation.ruleName.legal`},q={[t.BETWEEN]:`dataValidation.errorMsg.between`,[t.EQUAL]:`dataValidation.errorMsg.equal`,[t.GREATER_THAN]:`dataValidation.errorMsg.greaterThan`,[t.GREATER_THAN_OR_EQUAL]:`dataValidation.errorMsg.greaterThanOrEqual`,[t.LESS_THAN]:`dataValidation.errorMsg.lessThan`,[t.LESS_THAN_OR_EQUAL]:`dataValidation.errorMsg.lessThanOrEqual`,[t.NOT_BETWEEN]:`dataValidation.errorMsg.notBetween`,[t.NOT_EQUAL]:`dataValidation.errorMsg.notEqual`,NONE:`dataValidation.errorMsg.legal`},J={[t.BETWEEN]:`dataValidation.textLength.errorMsg.between`,[t.EQUAL]:`dataValidation.textLength.errorMsg.equal`,[t.GREATER_THAN]:`dataValidation.textLength.errorMsg.greaterThan`,[t.GREATER_THAN_OR_EQUAL]:`dataValidation.textLength.errorMsg.greaterThanOrEqual`,[t.LESS_THAN]:`dataValidation.textLength.errorMsg.lessThan`,[t.LESS_THAN_OR_EQUAL]:`dataValidation.textLength.errorMsg.lessThanOrEqual`,[t.NOT_BETWEEN]:`dataValidation.textLength.errorMsg.notBetween`,[t.NOT_EQUAL]:`dataValidation.textLength.errorMsg.notEqual`},Y=[t.BETWEEN,t.NOT_BETWEEN],X=`{FORMULA1}`,Z=`{FORMULA2}`,Q=`{TYPE}`,ee={[t.BETWEEN]:`dataValidation.operators.between`,[t.EQUAL]:`dataValidation.operators.equal`,[t.GREATER_THAN]:`dataValidation.operators.greaterThan`,[t.GREATER_THAN_OR_EQUAL]:`dataValidation.operators.greaterThanOrEqual`,[t.LESS_THAN]:`dataValidation.operators.lessThan`,[t.LESS_THAN_OR_EQUAL]:`dataValidation.operators.lessThanOrEqual`,[t.NOT_BETWEEN]:`dataValidation.operators.notBetween`,[t.NOT_EQUAL]:`dataValidation.operators.notEqual`};let te=function(e){return e.DATE=`date`,e.TIME=`time`,e.DATETIME=`datetime`,e.LIST=`list`,e.MULTIPLE_LIST=`multipleList`,e.COLOR=`color`,e.CASCADE=`cascade`,e}({}),$=class{constructor(e,t){this.localeService=e,this.injector=t,E(this,`offsetFormulaByRange`,!0),E(this,`formulaInput`,void 0),E(this,`canvasRender`,null),E(this,`dropdownType`,void 0),E(this,`optionsInput`,void 0),E(this,`skipDefaultFontRender`,void 0)}get operatorNames(){return this.operators.map(e=>this.localeService.t(ee[e]))}get titleStr(){return this.localeService.t(this.title)}generateRuleName(e){var t,n;if(!e.operator)return this.localeService.t(K.NONE).replace(Q,this.titleStr);let r=this.localeService.t(K[e.operator]).replace(X,(t=e.formula1)==null?``:t).replace(Z,(n=e.formula2)==null?``:n);return`${this.titleStr} ${r}`}generateRuleErrorMessage(e,t){var n,r;return e.operator?`${this.localeService.t(q[e.operator]).replace(X,(n=e.formula1)==null?``:n).replace(Z,(r=e.formula2)==null?``:r)}`:this.localeService.t(q.NONE).replace(Q,this.titleStr)}getExtraStyle(e,t,n,r,i){}getRuleFinalError(e,t){return e.showErrorMessage&&e.error?e.error:this.generateRuleErrorMessage(e,t)}isEmptyCellValue(e){return e===``||e==null}normalizeFormula(e,t,n){return{formula1:e.formula1,formula2:e.formula2}}async isValidType(e,t,n){return!0}transform(e,t,n){return e}async validatorIsEqual(e,t,n){let{formula1:r}=t,{value:i}=e;return Number.isNaN(r)?!0:i===r}async validatorIsNotEqual(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value!==r}async validatorIsBetween(e,t,n){let{formula1:r,formula2:i}=t;if(Number.isNaN(r)||Number.isNaN(i))return!0;let a=Math.min(r,i),o=Math.max(r,i);return e.value>=a&&e.value<=o}async validatorIsNotBetween(e,t,n){let{formula1:r,formula2:i}=t;if(Number.isNaN(r)||Number.isNaN(i))return!0;let a=Math.min(r,i),o=Math.max(r,i);return e.value<a||e.value>o}async validatorIsGreaterThan(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value>r}async validatorIsGreaterThanOrEqual(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value>=r}async validatorIsLessThan(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value<r}async validatorIsLessThanOrEqual(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value<=r}async validator(e,n){let{value:r,unitId:i,subUnitId:a}=e,o=this.isEmptyCellValue(r),{allowBlank:s=!0,operator:c}=n;if(o)return s;let l=await this.parseFormula(n,i,a,e.row,e.column);if(!l.isFormulaValid||!await this.isValidType(e,l,n))return!1;if(!c)return!0;let u=this.transform(e,l,n);switch(c){case t.BETWEEN:return this.validatorIsBetween(u,l,n);case t.EQUAL:return this.validatorIsEqual(u,l,n);case t.GREATER_THAN:return this.validatorIsGreaterThan(u,l,n);case t.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(u,l,n);case t.LESS_THAN:return this.validatorIsLessThan(u,l,n);case t.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(u,l,n);case t.NOT_BETWEEN:return this.validatorIsNotBetween(u,l,n);case t.NOT_EQUAL:return this.validatorIsNotEqual(u,l,n);default:throw Error(`Unknown operator.`)}}};$=O([D(0,l(d)),D(1,l(u))],$);export{A as AddDataValidationMutation,$ as BaseDataValidator,k as DataValidationModel,N as DataValidationResourceController,te as DataValidatorDropdownType,I as DataValidatorRegistryScope,L as DataValidatorRegistryService,X as FORMULA1,Z as FORMULA2,j as RemoveDataValidationMutation,Y as TWO_FORMULA_OPERATOR_COUNT,Q as TYPE,J as TextLengthErrorTitleMap,G as UniverDataValidationPlugin,M as UpdateDataValidationMutation,S as UpdateRuleType,x as getRuleOptions,b as getRuleSetting};
|
package/lib/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{CommandType as e,DataValidationOperator as t,Disposable as n,ICommandService as r,IConfigService as i,ILogService as a,IResourceManagerService as o,IUndoRedoService as s,IUniverInstanceService as c,Inject as l,Injector as u,LocaleService as d,Plugin as f,Tools as p,UniverInstanceType as m,merge as h,toDisposable as g}from"@univerjs/core";import{BehaviorSubject as _,Subject as v,debounceTime as y}from"rxjs";function b(e){return{type:e.type,operator:e.operator,formula1:e.formula1,formula2:e.formula2,allowBlank:e.allowBlank}}function x(e){return{error:e.error,errorStyle:e.errorStyle,errorTitle:e.errorTitle,imeMode:e.imeMode,prompt:e.prompt,promptTitle:e.promptTitle,showDropDown:e.showDropDown,showErrorMessage:e.showErrorMessage,showInputMessage:e.showInputMessage,renderMode:e.renderMode,bizInfo:e.bizInfo}}let S=function(e){return e[e.SETTING=0]=`SETTING`,e[e.RANGE=1]=`RANGE`,e[e.OPTIONS=2]=`OPTIONS`,e[e.ALL=3]=`ALL`,e}({});function C(e){"@babel/helpers - typeof";return C=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},C(e)}function w(e,t){if(C(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(C(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function T(e){var t=w(e,`string`);return C(t)==`symbol`?t:t+``}function E(e,t,n){return(t=T(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function D(e,t){return function(n,r){t(n,r,e)}}function O(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}let k=class extends n{constructor(e){super(),this._logService=e,E(this,`_model`,new Map),E(this,`_ruleChange$`,new v),E(this,`ruleChange$`,this._ruleChange$.asObservable()),E(this,`ruleChangeDebounce$`,this.ruleChange$.pipe(y(20))),this.disposeWithMe({dispose:()=>{this._ruleChange$.complete()}})}_ensureMap(e,t){this._model.has(e)||this._model.set(e,new Map);let n=this._model.get(e);if(n.has(t))return n.get(t);let r={map:new Map,list:[]};return n.set(t,r),r}_addSubUnitRule(e,t,n){let{map:r,list:i}=e,a=(Array.isArray(t)?t:[t]).filter(e=>!r.has(e.uid));typeof n==`number`&&n<i.length?i.splice(n,0,...a):i.push(...a),a.forEach(e=>{r.set(e.uid,e)})}_removeSubUnitRule(e,t){let{map:n,list:r}=e,i=r.findIndex(e=>e.uid===t);i>-1&&(r.splice(i,1),n.delete(t))}_updateSubUnitRule(e,t,n){let{map:r,list:i}=e,a=r.get(t),o=i.findIndex(e=>t===e.uid);if(!a)throw Error(`Data validation rule is not found, ruleId: ${t}.`);let s={...a};switch(n.type){case S.RANGE:s.ranges=n.payload;break;case S.SETTING:Object.assign(s,b(n.payload));break;case S.OPTIONS:Object.assign(s,x(n.payload));break;case S.ALL:Object.assign(s,n.payload);break;default:break}return i[o]=s,r.set(t,s),s}_addRuleSideEffect(e,t,n,r){if(!this._ensureMap(e,t).map.get(n.uid))return{rule:n,type:`add`,unitId:e,subUnitId:t,source:r}}addRule(e,t,n,r,i){try{let a=this._ensureMap(e,t),o=(Array.isArray(n)?n:[n]).map(n=>this._addRuleSideEffect(e,t,n,r));this._addSubUnitRule(a,n,i),o.forEach(e=>{e&&this._ruleChange$.next(e)})}catch(e){this._logService.error(e)}}updateRule(e,t,n,r,i){try{let a=this._ensureMap(e,t),o=p.deepClone(a.map.get(n));if(!o)throw Error(`Data validation rule is not found, ruleId: ${n}.`);let s=this._updateSubUnitRule(a,n,r);this._ruleChange$.next({rule:s,type:`update`,unitId:e,subUnitId:t,source:i,updatePayload:r,oldRule:o})}catch(e){this._logService.error(e)}}removeRule(e,t,n,r){try{let i=this._ensureMap(e,t),a=i.map.get(n);a&&(this._removeSubUnitRule(i,n),this._ruleChange$.next({rule:a,type:`remove`,unitId:e,subUnitId:t,source:r}))}catch(e){this._logService.error(e)}}getRuleById(e,t,n){return this._ensureMap(e,t).map.get(n)}getRuleIndex(e,t,n){return this._ensureMap(e,t).list.findIndex(e=>e.uid===n)}getRules(e,t){return[...this._ensureMap(e,t).list]}getUnitRules(e){let t=this._model.get(e);if(!t)return[];let n=[];return t.forEach((e,t)=>{n.push([t,e.list])}),n}deleteUnitRules(e){this._model.delete(e)}getSubUnitIds(e){var t,n;return Array.from((t=(n=this._model.get(e))==null?void 0:n.keys())==null?[]:t)}getAll(){return Array.from(this._model.keys()).map(e=>[e,this.getUnitRules(e)])}};k=O([D(0,a)],k);const A={type:e.MUTATION,id:`data-validation.mutation.addRule`,handler(e,t){if(!t)return!1;let{unitId:n,subUnitId:r,rule:i,index:a,source:o=`command`}=t;return e.get(k).addRule(n,r,i,o,a),!0}},j={type:e.MUTATION,id:`data-validation.mutation.removeRule`,handler(e,t){if(!t)return!1;let{unitId:n,subUnitId:r,ruleId:i,source:a=`command`}=t,o=e.get(k);return Array.isArray(i)?i.forEach(e=>{o.removeRule(n,r,e,a)}):o.removeRule(n,r,i,a),!0}},M={type:e.MUTATION,id:`data-validation.mutation.updateRule`,handler(e,t){if(!t)return!1;let{unitId:n,subUnitId:r,ruleId:i,payload:a,source:o=`command`}=t;return e.get(k).updateRule(n,r,i,a,o),!0}};let N=class extends n{constructor(e,t,n){super(),this._resourceManagerService=e,this._univerInstanceService=t,this._dataValidationModel=n,this._initSnapshot()}_initSnapshot(){let e=e=>{let t=this._dataValidationModel.getUnitRules(e),n={};return t?(t.forEach(([e,t])=>{n[e]=t}),JSON.stringify(n)):``},t=e=>{if(!e)return{};try{return JSON.parse(e)}catch{return{}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:`SHEET_DATA_VALIDATION_PLUGIN`,businesses:[m.UNIVER_SHEET],toJson:t=>e(t),parseJson:e=>t(e),onUnLoad:e=>{this._dataValidationModel.deleteUnitRules(e)},onLoad:(e,t)=>{Object.keys(t).forEach(n=>{t[n].forEach(t=>{this._dataValidationModel.addRule(e,n,t,`patched`)})})}}))}};N=O([D(0,o),D(1,c),D(2,l(k))],N);var P=`@univerjs/data-validation`,F=`0.19.0`;let I=function(e){return e.SHEET=`sheet`,e}({});var L=class{constructor(){E(this,`_validatorByScopes`,new Map),E(this,`_validatorMap`,new Map),E(this,`_validatorsChange$`,new _(void 0)),E(this,`validatorsChange$`,this._validatorsChange$.asObservable())}_addValidatorToScope(e,t){this._validatorByScopes.has(t)||this._validatorByScopes.set(t,[]);let n=this._validatorByScopes.get(t);if(n.findIndex(t=>t.id===e.id)>-1)throw Error(`Validator item with the same id ${e.id} has already been added!`);n.push(e)}_removeValidatorFromScope(e,t){let n=this._validatorByScopes.get(t);if(!n)return;let r=n.findIndex(t=>t.id===e.id);r>-1&&n.splice(r,1)}register(e){return this._validatorMap.set(e.id,e),Array.isArray(e.scopes)?e.scopes.forEach(t=>{this._addValidatorToScope(e,t)}):this._addValidatorToScope(e,e.scopes),this._validatorsChange$.next(),g(()=>{this._validatorMap.delete(e.id),Array.isArray(e.scopes)?e.scopes.forEach(t=>{this._removeValidatorFromScope(e,t)}):this._removeValidatorFromScope(e,e.scopes),this._validatorsChange$.next()})}getValidatorItem(e){return this._validatorMap.get(e)}getValidatorsByScope(e){return this._validatorByScopes.get(e)}};const R={type:e.COMMAND,id:`data-validation.command.addRule`,async handler(e,t){if(e.get(a).error("[Deprecated]: `AddDataValidationCommand` is deprecated, please use `AddSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!t)return!1;let{rule:n,unitId:i,subUnitId:o}=t,c=e.get(r),l=e.get(s),u={...t,rule:{...t.rule,ranges:[t.rule.range]}},d=[{id:A.id,params:u}],f=[{id:j.id,params:{unitId:i,subUnitId:o,ruleId:n.uid}}];return l.pushUndoRedo({unitID:i,redoMutations:d,undoMutations:f}),await c.executeCommand(A.id,u),!0}},z={type:e.COMMAND,id:`data-validation.command.removeRule`,handler(e,t){if(e.get(a).error("[Deprecated]: `RemoveDataValidationCommand` is deprecated, please use `RemoveSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!t)return!1;let{unitId:n,subUnitId:i,ruleId:o}=t,c=e.get(r),l=e.get(s),u=e.get(k),d=[{id:j.id,params:t}],f=[{id:A.id,params:{unitId:n,subUnitId:i,rule:{...u.getRuleById(n,i,o)},index:u.getRuleIndex(n,i,o)}}];return l.pushUndoRedo({undoMutations:f,redoMutations:d,unitID:t.unitId}),c.executeCommand(j.id,t),!0}},B={type:e.COMMAND,id:`data-validation.command.updateDataValidationSetting`,handler(e,t){if(e.get(a).warn("[Deprecated]: `UpdateDataValidationOptionsCommand` is deprecated, please use `UpdateSheetDataValidationOptionsCommand` in `@univerjs/sheets-data-validation` instead!"),!t)return!1;let n=e.get(r),i=e.get(s),o=e.get(k),{unitId:c,subUnitId:l,ruleId:u,options:d}=t,f=o.getRuleById(c,l,u);if(!f)return!1;let p={unitId:c,subUnitId:l,ruleId:u,payload:{type:S.OPTIONS,payload:d}},m=[{id:M.id,params:p}],h={unitId:c,subUnitId:l,ruleId:u,payload:{type:S.OPTIONS,payload:x(f)}},g=[{id:M.id,params:h}];return i.pushUndoRedo({unitID:c,redoMutations:m,undoMutations:g}),n.executeCommand(M.id,p),!0}},V={type:e.COMMAND,id:`data-validation.command.updateDataValidationOptions`,handler(e,t){if(e.get(a).error("[Deprecated]: `UpdateDataValidationSettingCommand` is deprecated, please use `UpdateSheetDataValidationSettingCommand` in `@univerjs/sheets-data-validation` instead!"),!t)return!1;let n=e.get(r),i=e.get(s),o=e.get(k),c=e.get(L),{unitId:l,subUnitId:u,ruleId:d,setting:f}=t,p=c.getValidatorItem(f.type);if(!p)return!1;let m=o.getRuleById(l,u,d);if(!m)return!1;let h={...m,...f};if(!p.validatorFormula(h,l,u).success)return!1;let g={unitId:l,subUnitId:u,ruleId:d,payload:{type:S.SETTING,payload:{...f,...p.normalizeFormula(h,l,u)}}},_=[{id:M.id,params:g}],v={unitId:l,subUnitId:u,ruleId:d,payload:{type:S.SETTING,payload:b(m)}},y=[{id:M.id,params:v}];return i.pushUndoRedo({unitID:l,redoMutations:_,undoMutations:y}),n.executeCommand(M.id,g),!0}},H={type:e.COMMAND,id:`data-validation.command.removeAll`,handler(e,t){if(e.get(a).error("[Deprecated]: `RemoveAllDataValidationCommand` is deprecated, please use `RemoveSheetAllDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!t)return!1;let{unitId:n,subUnitId:i}=t,o=e.get(r),c=e.get(k),l=e.get(s),u=[...c.getRules(n,i)],d={unitId:n,subUnitId:i,ruleId:u.map(e=>e.uid)},f=[{id:j.id,params:d}],p=[{id:A.id,params:{unitId:n,subUnitId:i,rule:u}}];return l.pushUndoRedo({redoMutations:f,undoMutations:p,unitID:n}),o.executeCommand(j.id,d),!0}},U=`data-validation.config`;Symbol(U);const W={};let G=class extends f{constructor(e=W,t,n,r){super(),this._config=e,this._injector=t,this._commandService=n,this._configService=r;let{...i}=h({},W,this._config);this._configService.setConfig(U,i)}onStarting(){[[k],[L],[N]].forEach(e=>this._injector.add(e)),[R,H,B,V,z,A,M,j].forEach(e=>{this._commandService.registerCommand(e)})}onReady(){this._injector.get(N)}};E(G,`pluginName`,`UNIVER_DATA_VALIDATION_PLUGIN`),E(G,`packageName`,P),E(G,`version`,F),E(G,`type`,m.UNIVER_SHEET),G=O([D(1,l(u)),D(2,r),D(3,i)],G),t.BETWEEN,t.EQUAL,t.GREATER_THAN,t.GREATER_THAN_OR_EQUAL,t.LESS_THAN,t.LESS_THAN_OR_EQUAL,t.NOT_BETWEEN,t.NOT_EQUAL;const K={[t.BETWEEN]:`dataValidation.ruleName.between`,[t.EQUAL]:`dataValidation.ruleName.equal`,[t.GREATER_THAN]:`dataValidation.ruleName.greaterThan`,[t.GREATER_THAN_OR_EQUAL]:`dataValidation.ruleName.greaterThanOrEqual`,[t.LESS_THAN]:`dataValidation.ruleName.lessThan`,[t.LESS_THAN_OR_EQUAL]:`dataValidation.ruleName.lessThanOrEqual`,[t.NOT_BETWEEN]:`dataValidation.ruleName.notBetween`,[t.NOT_EQUAL]:`dataValidation.ruleName.notEqual`,NONE:`dataValidation.ruleName.legal`},q={[t.BETWEEN]:`dataValidation.errorMsg.between`,[t.EQUAL]:`dataValidation.errorMsg.equal`,[t.GREATER_THAN]:`dataValidation.errorMsg.greaterThan`,[t.GREATER_THAN_OR_EQUAL]:`dataValidation.errorMsg.greaterThanOrEqual`,[t.LESS_THAN]:`dataValidation.errorMsg.lessThan`,[t.LESS_THAN_OR_EQUAL]:`dataValidation.errorMsg.lessThanOrEqual`,[t.NOT_BETWEEN]:`dataValidation.errorMsg.notBetween`,[t.NOT_EQUAL]:`dataValidation.errorMsg.notEqual`,NONE:`dataValidation.errorMsg.legal`},J={[t.BETWEEN]:`dataValidation.textLength.errorMsg.between`,[t.EQUAL]:`dataValidation.textLength.errorMsg.equal`,[t.GREATER_THAN]:`dataValidation.textLength.errorMsg.greaterThan`,[t.GREATER_THAN_OR_EQUAL]:`dataValidation.textLength.errorMsg.greaterThanOrEqual`,[t.LESS_THAN]:`dataValidation.textLength.errorMsg.lessThan`,[t.LESS_THAN_OR_EQUAL]:`dataValidation.textLength.errorMsg.lessThanOrEqual`,[t.NOT_BETWEEN]:`dataValidation.textLength.errorMsg.notBetween`,[t.NOT_EQUAL]:`dataValidation.textLength.errorMsg.notEqual`},Y=[t.BETWEEN,t.NOT_BETWEEN],X=`{FORMULA1}`,Z=`{FORMULA2}`,Q=`{TYPE}`,ee={[t.BETWEEN]:`dataValidation.operators.between`,[t.EQUAL]:`dataValidation.operators.equal`,[t.GREATER_THAN]:`dataValidation.operators.greaterThan`,[t.GREATER_THAN_OR_EQUAL]:`dataValidation.operators.greaterThanOrEqual`,[t.LESS_THAN]:`dataValidation.operators.lessThan`,[t.LESS_THAN_OR_EQUAL]:`dataValidation.operators.lessThanOrEqual`,[t.NOT_BETWEEN]:`dataValidation.operators.notBetween`,[t.NOT_EQUAL]:`dataValidation.operators.notEqual`};let te=function(e){return e.DATE=`date`,e.TIME=`time`,e.DATETIME=`datetime`,e.LIST=`list`,e.MULTIPLE_LIST=`multipleList`,e.COLOR=`color`,e.CASCADE=`cascade`,e}({}),$=class{constructor(e,t){this.localeService=e,this.injector=t,E(this,`offsetFormulaByRange`,!0),E(this,`formulaInput`,void 0),E(this,`canvasRender`,null),E(this,`dropdownType`,void 0),E(this,`optionsInput`,void 0),E(this,`skipDefaultFontRender`,void 0)}get operatorNames(){return this.operators.map(e=>this.localeService.t(ee[e]))}get titleStr(){return this.localeService.t(this.title)}generateRuleName(e){var t,n;if(!e.operator)return this.localeService.t(K.NONE).replace(Q,this.titleStr);let r=this.localeService.t(K[e.operator]).replace(X,(t=e.formula1)==null?``:t).replace(Z,(n=e.formula2)==null?``:n);return`${this.titleStr} ${r}`}generateRuleErrorMessage(e,t){var n,r;return e.operator?`${this.localeService.t(q[e.operator]).replace(X,(n=e.formula1)==null?``:n).replace(Z,(r=e.formula2)==null?``:r)}`:this.localeService.t(q.NONE).replace(Q,this.titleStr)}getExtraStyle(e,t,n,r,i){}getRuleFinalError(e,t){return e.showErrorMessage&&e.error?e.error:this.generateRuleErrorMessage(e,t)}isEmptyCellValue(e){return e===``||e==null}normalizeFormula(e,t,n){return{formula1:e.formula1,formula2:e.formula2}}async isValidType(e,t,n){return!0}transform(e,t,n){return e}async validatorIsEqual(e,t,n){let{formula1:r}=t,{value:i}=e;return Number.isNaN(r)?!0:i===r}async validatorIsNotEqual(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value!==r}async validatorIsBetween(e,t,n){let{formula1:r,formula2:i}=t;if(Number.isNaN(r)||Number.isNaN(i))return!0;let a=Math.min(r,i),o=Math.max(r,i);return e.value>=a&&e.value<=o}async validatorIsNotBetween(e,t,n){let{formula1:r,formula2:i}=t;if(Number.isNaN(r)||Number.isNaN(i))return!0;let a=Math.min(r,i),o=Math.max(r,i);return e.value<a||e.value>o}async validatorIsGreaterThan(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value>r}async validatorIsGreaterThanOrEqual(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value>=r}async validatorIsLessThan(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value<r}async validatorIsLessThanOrEqual(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value<=r}async validator(e,n){let{value:r,unitId:i,subUnitId:a}=e,o=this.isEmptyCellValue(r),{allowBlank:s=!0,operator:c}=n;if(o)return s;let l=await this.parseFormula(n,i,a,e.row,e.column);if(!l.isFormulaValid||!await this.isValidType(e,l,n))return!1;if(!c)return!0;let u=this.transform(e,l,n);switch(c){case t.BETWEEN:return this.validatorIsBetween(u,l,n);case t.EQUAL:return this.validatorIsEqual(u,l,n);case t.GREATER_THAN:return this.validatorIsGreaterThan(u,l,n);case t.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(u,l,n);case t.LESS_THAN:return this.validatorIsLessThan(u,l,n);case t.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(u,l,n);case t.NOT_BETWEEN:return this.validatorIsNotBetween(u,l,n);case t.NOT_EQUAL:return this.validatorIsNotEqual(u,l,n);default:throw Error(`Unknown operator.`)}}};$=O([D(0,l(d)),D(1,l(u))],$);export{A as AddDataValidationMutation,$ as BaseDataValidator,k as DataValidationModel,N as DataValidationResourceController,te as DataValidatorDropdownType,I as DataValidatorRegistryScope,L as DataValidatorRegistryService,X as FORMULA1,Z as FORMULA2,j as RemoveDataValidationMutation,Y as TWO_FORMULA_OPERATOR_COUNT,Q as TYPE,J as TextLengthErrorTitleMap,G as UniverDataValidationPlugin,M as UpdateDataValidationMutation,S as UpdateRuleType,x as getRuleOptions,b as getRuleSetting};
|
|
1
|
+
import{CommandType as e,DataValidationOperator as t,Disposable as n,ICommandService as r,IConfigService as i,ILogService as a,IResourceManagerService as o,IUndoRedoService as s,IUniverInstanceService as c,Inject as l,Injector as u,LocaleService as d,Plugin as f,Tools as p,UniverInstanceType as m,merge as h,toDisposable as g}from"@univerjs/core";import{BehaviorSubject as _,Subject as v,debounceTime as y}from"rxjs";function b(e){return{type:e.type,operator:e.operator,formula1:e.formula1,formula2:e.formula2,allowBlank:e.allowBlank}}function x(e){return{error:e.error,errorStyle:e.errorStyle,errorTitle:e.errorTitle,imeMode:e.imeMode,prompt:e.prompt,promptTitle:e.promptTitle,showDropDown:e.showDropDown,showErrorMessage:e.showErrorMessage,showInputMessage:e.showInputMessage,renderMode:e.renderMode,bizInfo:e.bizInfo}}let S=function(e){return e[e.SETTING=0]=`SETTING`,e[e.RANGE=1]=`RANGE`,e[e.OPTIONS=2]=`OPTIONS`,e[e.ALL=3]=`ALL`,e}({});function C(e){"@babel/helpers - typeof";return C=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},C(e)}function w(e,t){if(C(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(C(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function T(e){var t=w(e,`string`);return C(t)==`symbol`?t:t+``}function E(e,t,n){return(t=T(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function D(e,t){return function(n,r){t(n,r,e)}}function O(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}let k=class extends n{constructor(e){super(),this._logService=e,E(this,`_model`,new Map),E(this,`_ruleChange$`,new v),E(this,`ruleChange$`,this._ruleChange$.asObservable()),E(this,`ruleChangeDebounce$`,this.ruleChange$.pipe(y(20))),this.disposeWithMe({dispose:()=>{this._ruleChange$.complete()}})}_ensureMap(e,t){this._model.has(e)||this._model.set(e,new Map);let n=this._model.get(e);if(n.has(t))return n.get(t);let r={map:new Map,list:[]};return n.set(t,r),r}_addSubUnitRule(e,t,n){let{map:r,list:i}=e,a=(Array.isArray(t)?t:[t]).filter(e=>!r.has(e.uid));typeof n==`number`&&n<i.length?i.splice(n,0,...a):i.push(...a),a.forEach(e=>{r.set(e.uid,e)})}_removeSubUnitRule(e,t){let{map:n,list:r}=e,i=r.findIndex(e=>e.uid===t);i>-1&&(r.splice(i,1),n.delete(t))}_updateSubUnitRule(e,t,n){let{map:r,list:i}=e,a=r.get(t),o=i.findIndex(e=>t===e.uid);if(!a)throw Error(`Data validation rule is not found, ruleId: ${t}.`);let s={...a};switch(n.type){case S.RANGE:s.ranges=n.payload;break;case S.SETTING:Object.assign(s,b(n.payload));break;case S.OPTIONS:Object.assign(s,x(n.payload));break;case S.ALL:Object.assign(s,n.payload);break;default:break}return i[o]=s,r.set(t,s),s}_addRuleSideEffect(e,t,n,r){if(!this._ensureMap(e,t).map.get(n.uid))return{rule:n,type:`add`,unitId:e,subUnitId:t,source:r}}addRule(e,t,n,r,i){try{let a=this._ensureMap(e,t),o=(Array.isArray(n)?n:[n]).map(n=>this._addRuleSideEffect(e,t,n,r));this._addSubUnitRule(a,n,i),o.forEach(e=>{e&&this._ruleChange$.next(e)})}catch(e){this._logService.error(e)}}updateRule(e,t,n,r,i){try{let a=this._ensureMap(e,t),o=p.deepClone(a.map.get(n));if(!o)throw Error(`Data validation rule is not found, ruleId: ${n}.`);let s=this._updateSubUnitRule(a,n,r);this._ruleChange$.next({rule:s,type:`update`,unitId:e,subUnitId:t,source:i,updatePayload:r,oldRule:o})}catch(e){this._logService.error(e)}}removeRule(e,t,n,r){try{let i=this._ensureMap(e,t),a=i.map.get(n);a&&(this._removeSubUnitRule(i,n),this._ruleChange$.next({rule:a,type:`remove`,unitId:e,subUnitId:t,source:r}))}catch(e){this._logService.error(e)}}getRuleById(e,t,n){return this._ensureMap(e,t).map.get(n)}getRuleIndex(e,t,n){return this._ensureMap(e,t).list.findIndex(e=>e.uid===n)}getRules(e,t){return[...this._ensureMap(e,t).list]}getUnitRules(e){let t=this._model.get(e);if(!t)return[];let n=[];return t.forEach((e,t)=>{n.push([t,e.list])}),n}deleteUnitRules(e){this._model.delete(e)}getSubUnitIds(e){var t,n;return Array.from((t=(n=this._model.get(e))==null?void 0:n.keys())==null?[]:t)}getAll(){return Array.from(this._model.keys()).map(e=>[e,this.getUnitRules(e)])}};k=O([D(0,a)],k);const A={type:e.MUTATION,id:`data-validation.mutation.addRule`,handler(e,t){if(!t)return!1;let{unitId:n,subUnitId:r,rule:i,index:a,source:o=`command`}=t;return e.get(k).addRule(n,r,i,o,a),!0}},j={type:e.MUTATION,id:`data-validation.mutation.removeRule`,handler(e,t){if(!t)return!1;let{unitId:n,subUnitId:r,ruleId:i,source:a=`command`}=t,o=e.get(k);return Array.isArray(i)?i.forEach(e=>{o.removeRule(n,r,e,a)}):o.removeRule(n,r,i,a),!0}},M={type:e.MUTATION,id:`data-validation.mutation.updateRule`,handler(e,t){if(!t)return!1;let{unitId:n,subUnitId:r,ruleId:i,payload:a,source:o=`command`}=t;return e.get(k).updateRule(n,r,i,a,o),!0}};let N=class extends n{constructor(e,t,n){super(),this._resourceManagerService=e,this._univerInstanceService=t,this._dataValidationModel=n,this._initSnapshot()}_initSnapshot(){let e=e=>{let t=this._dataValidationModel.getUnitRules(e),n={};return t?(t.forEach(([e,t])=>{n[e]=t}),JSON.stringify(n)):``},t=e=>{if(!e)return{};try{return JSON.parse(e)}catch{return{}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:`SHEET_DATA_VALIDATION_PLUGIN`,businesses:[m.UNIVER_SHEET],toJson:t=>e(t),parseJson:e=>t(e),onUnLoad:e=>{this._dataValidationModel.deleteUnitRules(e)},onLoad:(e,t)=>{Object.keys(t).forEach(n=>{t[n].forEach(t=>{this._dataValidationModel.addRule(e,n,t,`patched`)})})}}))}};N=O([D(0,o),D(1,c),D(2,l(k))],N);var P=`@univerjs/data-validation`,F=`0.20.0`;let I=function(e){return e.SHEET=`sheet`,e}({});var L=class{constructor(){E(this,`_validatorByScopes`,new Map),E(this,`_validatorMap`,new Map),E(this,`_validatorsChange$`,new _(void 0)),E(this,`validatorsChange$`,this._validatorsChange$.asObservable())}_addValidatorToScope(e,t){this._validatorByScopes.has(t)||this._validatorByScopes.set(t,[]);let n=this._validatorByScopes.get(t);if(n.findIndex(t=>t.id===e.id)>-1)throw Error(`Validator item with the same id ${e.id} has already been added!`);n.push(e)}_removeValidatorFromScope(e,t){let n=this._validatorByScopes.get(t);if(!n)return;let r=n.findIndex(t=>t.id===e.id);r>-1&&n.splice(r,1)}register(e){return this._validatorMap.set(e.id,e),Array.isArray(e.scopes)?e.scopes.forEach(t=>{this._addValidatorToScope(e,t)}):this._addValidatorToScope(e,e.scopes),this._validatorsChange$.next(),g(()=>{this._validatorMap.delete(e.id),Array.isArray(e.scopes)?e.scopes.forEach(t=>{this._removeValidatorFromScope(e,t)}):this._removeValidatorFromScope(e,e.scopes),this._validatorsChange$.next()})}getValidatorItem(e){return this._validatorMap.get(e)}getValidatorsByScope(e){return this._validatorByScopes.get(e)}};const R={type:e.COMMAND,id:`data-validation.command.addRule`,async handler(e,t){if(e.get(a).error("[Deprecated]: `AddDataValidationCommand` is deprecated, please use `AddSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!t)return!1;let{rule:n,unitId:i,subUnitId:o}=t,c=e.get(r),l=e.get(s),u={...t,rule:{...t.rule,ranges:[t.rule.range]}},d=[{id:A.id,params:u}],f=[{id:j.id,params:{unitId:i,subUnitId:o,ruleId:n.uid}}];return l.pushUndoRedo({unitID:i,redoMutations:d,undoMutations:f}),await c.executeCommand(A.id,u),!0}},z={type:e.COMMAND,id:`data-validation.command.removeRule`,handler(e,t){if(e.get(a).error("[Deprecated]: `RemoveDataValidationCommand` is deprecated, please use `RemoveSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!t)return!1;let{unitId:n,subUnitId:i,ruleId:o}=t,c=e.get(r),l=e.get(s),u=e.get(k),d=[{id:j.id,params:t}],f=[{id:A.id,params:{unitId:n,subUnitId:i,rule:{...u.getRuleById(n,i,o)},index:u.getRuleIndex(n,i,o)}}];return l.pushUndoRedo({undoMutations:f,redoMutations:d,unitID:t.unitId}),c.executeCommand(j.id,t),!0}},B={type:e.COMMAND,id:`data-validation.command.updateDataValidationSetting`,handler(e,t){if(e.get(a).warn("[Deprecated]: `UpdateDataValidationOptionsCommand` is deprecated, please use `UpdateSheetDataValidationOptionsCommand` in `@univerjs/sheets-data-validation` instead!"),!t)return!1;let n=e.get(r),i=e.get(s),o=e.get(k),{unitId:c,subUnitId:l,ruleId:u,options:d}=t,f=o.getRuleById(c,l,u);if(!f)return!1;let p={unitId:c,subUnitId:l,ruleId:u,payload:{type:S.OPTIONS,payload:d}},m=[{id:M.id,params:p}],h={unitId:c,subUnitId:l,ruleId:u,payload:{type:S.OPTIONS,payload:x(f)}},g=[{id:M.id,params:h}];return i.pushUndoRedo({unitID:c,redoMutations:m,undoMutations:g}),n.executeCommand(M.id,p),!0}},V={type:e.COMMAND,id:`data-validation.command.updateDataValidationOptions`,handler(e,t){if(e.get(a).error("[Deprecated]: `UpdateDataValidationSettingCommand` is deprecated, please use `UpdateSheetDataValidationSettingCommand` in `@univerjs/sheets-data-validation` instead!"),!t)return!1;let n=e.get(r),i=e.get(s),o=e.get(k),c=e.get(L),{unitId:l,subUnitId:u,ruleId:d,setting:f}=t,p=c.getValidatorItem(f.type);if(!p)return!1;let m=o.getRuleById(l,u,d);if(!m)return!1;let h={...m,...f};if(!p.validatorFormula(h,l,u).success)return!1;let g={unitId:l,subUnitId:u,ruleId:d,payload:{type:S.SETTING,payload:{...f,...p.normalizeFormula(h,l,u)}}},_=[{id:M.id,params:g}],v={unitId:l,subUnitId:u,ruleId:d,payload:{type:S.SETTING,payload:b(m)}},y=[{id:M.id,params:v}];return i.pushUndoRedo({unitID:l,redoMutations:_,undoMutations:y}),n.executeCommand(M.id,g),!0}},H={type:e.COMMAND,id:`data-validation.command.removeAll`,handler(e,t){if(e.get(a).error("[Deprecated]: `RemoveAllDataValidationCommand` is deprecated, please use `RemoveSheetAllDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!t)return!1;let{unitId:n,subUnitId:i}=t,o=e.get(r),c=e.get(k),l=e.get(s),u=[...c.getRules(n,i)],d={unitId:n,subUnitId:i,ruleId:u.map(e=>e.uid)},f=[{id:j.id,params:d}],p=[{id:A.id,params:{unitId:n,subUnitId:i,rule:u}}];return l.pushUndoRedo({redoMutations:f,undoMutations:p,unitID:n}),o.executeCommand(j.id,d),!0}},U=`data-validation.config`;Symbol(U);const W={};let G=class extends f{constructor(e=W,t,n,r){super(),this._config=e,this._injector=t,this._commandService=n,this._configService=r;let{...i}=h({},W,this._config);this._configService.setConfig(U,i)}onStarting(){[[k],[L],[N]].forEach(e=>this._injector.add(e)),[R,H,B,V,z,A,M,j].forEach(e=>{this._commandService.registerCommand(e)})}onReady(){this._injector.get(N)}};E(G,`pluginName`,`UNIVER_DATA_VALIDATION_PLUGIN`),E(G,`packageName`,P),E(G,`version`,F),E(G,`type`,m.UNIVER_SHEET),G=O([D(1,l(u)),D(2,r),D(3,i)],G),t.BETWEEN,t.EQUAL,t.GREATER_THAN,t.GREATER_THAN_OR_EQUAL,t.LESS_THAN,t.LESS_THAN_OR_EQUAL,t.NOT_BETWEEN,t.NOT_EQUAL;const K={[t.BETWEEN]:`dataValidation.ruleName.between`,[t.EQUAL]:`dataValidation.ruleName.equal`,[t.GREATER_THAN]:`dataValidation.ruleName.greaterThan`,[t.GREATER_THAN_OR_EQUAL]:`dataValidation.ruleName.greaterThanOrEqual`,[t.LESS_THAN]:`dataValidation.ruleName.lessThan`,[t.LESS_THAN_OR_EQUAL]:`dataValidation.ruleName.lessThanOrEqual`,[t.NOT_BETWEEN]:`dataValidation.ruleName.notBetween`,[t.NOT_EQUAL]:`dataValidation.ruleName.notEqual`,NONE:`dataValidation.ruleName.legal`},q={[t.BETWEEN]:`dataValidation.errorMsg.between`,[t.EQUAL]:`dataValidation.errorMsg.equal`,[t.GREATER_THAN]:`dataValidation.errorMsg.greaterThan`,[t.GREATER_THAN_OR_EQUAL]:`dataValidation.errorMsg.greaterThanOrEqual`,[t.LESS_THAN]:`dataValidation.errorMsg.lessThan`,[t.LESS_THAN_OR_EQUAL]:`dataValidation.errorMsg.lessThanOrEqual`,[t.NOT_BETWEEN]:`dataValidation.errorMsg.notBetween`,[t.NOT_EQUAL]:`dataValidation.errorMsg.notEqual`,NONE:`dataValidation.errorMsg.legal`},J={[t.BETWEEN]:`dataValidation.textLength.errorMsg.between`,[t.EQUAL]:`dataValidation.textLength.errorMsg.equal`,[t.GREATER_THAN]:`dataValidation.textLength.errorMsg.greaterThan`,[t.GREATER_THAN_OR_EQUAL]:`dataValidation.textLength.errorMsg.greaterThanOrEqual`,[t.LESS_THAN]:`dataValidation.textLength.errorMsg.lessThan`,[t.LESS_THAN_OR_EQUAL]:`dataValidation.textLength.errorMsg.lessThanOrEqual`,[t.NOT_BETWEEN]:`dataValidation.textLength.errorMsg.notBetween`,[t.NOT_EQUAL]:`dataValidation.textLength.errorMsg.notEqual`},Y=[t.BETWEEN,t.NOT_BETWEEN],X=`{FORMULA1}`,Z=`{FORMULA2}`,Q=`{TYPE}`,ee={[t.BETWEEN]:`dataValidation.operators.between`,[t.EQUAL]:`dataValidation.operators.equal`,[t.GREATER_THAN]:`dataValidation.operators.greaterThan`,[t.GREATER_THAN_OR_EQUAL]:`dataValidation.operators.greaterThanOrEqual`,[t.LESS_THAN]:`dataValidation.operators.lessThan`,[t.LESS_THAN_OR_EQUAL]:`dataValidation.operators.lessThanOrEqual`,[t.NOT_BETWEEN]:`dataValidation.operators.notBetween`,[t.NOT_EQUAL]:`dataValidation.operators.notEqual`};let te=function(e){return e.DATE=`date`,e.TIME=`time`,e.DATETIME=`datetime`,e.LIST=`list`,e.MULTIPLE_LIST=`multipleList`,e.COLOR=`color`,e.CASCADE=`cascade`,e}({}),$=class{constructor(e,t){this.localeService=e,this.injector=t,E(this,`offsetFormulaByRange`,!0),E(this,`formulaInput`,void 0),E(this,`canvasRender`,null),E(this,`dropdownType`,void 0),E(this,`optionsInput`,void 0),E(this,`skipDefaultFontRender`,void 0)}get operatorNames(){return this.operators.map(e=>this.localeService.t(ee[e]))}get titleStr(){return this.localeService.t(this.title)}generateRuleName(e){var t,n;if(!e.operator)return this.localeService.t(K.NONE).replace(Q,this.titleStr);let r=this.localeService.t(K[e.operator]).replace(X,(t=e.formula1)==null?``:t).replace(Z,(n=e.formula2)==null?``:n);return`${this.titleStr} ${r}`}generateRuleErrorMessage(e,t){var n,r;return e.operator?`${this.localeService.t(q[e.operator]).replace(X,(n=e.formula1)==null?``:n).replace(Z,(r=e.formula2)==null?``:r)}`:this.localeService.t(q.NONE).replace(Q,this.titleStr)}getExtraStyle(e,t,n,r,i){}getRuleFinalError(e,t){return e.showErrorMessage&&e.error?e.error:this.generateRuleErrorMessage(e,t)}isEmptyCellValue(e){return e===``||e==null}normalizeFormula(e,t,n){return{formula1:e.formula1,formula2:e.formula2}}async isValidType(e,t,n){return!0}transform(e,t,n){return e}async validatorIsEqual(e,t,n){let{formula1:r}=t,{value:i}=e;return Number.isNaN(r)?!0:i===r}async validatorIsNotEqual(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value!==r}async validatorIsBetween(e,t,n){let{formula1:r,formula2:i}=t;if(Number.isNaN(r)||Number.isNaN(i))return!0;let a=Math.min(r,i),o=Math.max(r,i);return e.value>=a&&e.value<=o}async validatorIsNotBetween(e,t,n){let{formula1:r,formula2:i}=t;if(Number.isNaN(r)||Number.isNaN(i))return!0;let a=Math.min(r,i),o=Math.max(r,i);return e.value<a||e.value>o}async validatorIsGreaterThan(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value>r}async validatorIsGreaterThanOrEqual(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value>=r}async validatorIsLessThan(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value<r}async validatorIsLessThanOrEqual(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value<=r}async validator(e,n){let{value:r,unitId:i,subUnitId:a}=e,o=this.isEmptyCellValue(r),{allowBlank:s=!0,operator:c}=n;if(o)return s;let l=await this.parseFormula(n,i,a,e.row,e.column);if(!l.isFormulaValid||!await this.isValidType(e,l,n))return!1;if(!c)return!0;let u=this.transform(e,l,n);switch(c){case t.BETWEEN:return this.validatorIsBetween(u,l,n);case t.EQUAL:return this.validatorIsEqual(u,l,n);case t.GREATER_THAN:return this.validatorIsGreaterThan(u,l,n);case t.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(u,l,n);case t.LESS_THAN:return this.validatorIsLessThan(u,l,n);case t.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(u,l,n);case t.NOT_BETWEEN:return this.validatorIsNotBetween(u,l,n);case t.NOT_EQUAL:return this.validatorIsNotEqual(u,l,n);default:throw Error(`Unknown operator.`)}}};$=O([D(0,l(d)),D(1,l(u))],$);export{A as AddDataValidationMutation,$ as BaseDataValidator,k as DataValidationModel,N as DataValidationResourceController,te as DataValidatorDropdownType,I as DataValidatorRegistryScope,L as DataValidatorRegistryService,X as FORMULA1,Z as FORMULA2,j as RemoveDataValidationMutation,Y as TWO_FORMULA_OPERATOR_COUNT,Q as TYPE,J as TextLengthErrorTitleMap,G as UniverDataValidationPlugin,M as UpdateDataValidationMutation,S as UpdateRuleType,x as getRuleOptions,b as getRuleSetting};
|
package/lib/umd/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`@univerjs/core`),require(`rxjs`)):typeof define==`function`&&define.amd?define([`exports`,`@univerjs/core`,`rxjs`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.UniverDataValidation={},e.UniverCore,e.rxjs))})(this,function(e,t,n){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function r(e){return{type:e.type,operator:e.operator,formula1:e.formula1,formula2:e.formula2,allowBlank:e.allowBlank}}function i(e){return{error:e.error,errorStyle:e.errorStyle,errorTitle:e.errorTitle,imeMode:e.imeMode,prompt:e.prompt,promptTitle:e.promptTitle,showDropDown:e.showDropDown,showErrorMessage:e.showErrorMessage,showInputMessage:e.showInputMessage,renderMode:e.renderMode,bizInfo:e.bizInfo}}let a=function(e){return e[e.SETTING=0]=`SETTING`,e[e.RANGE=1]=`RANGE`,e[e.OPTIONS=2]=`OPTIONS`,e[e.ALL=3]=`ALL`,e}({});function o(e){"@babel/helpers - typeof";return o=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},o(e)}function s(e,t){if(o(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(o(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function c(e){var t=s(e,`string`);return o(t)==`symbol`?t:t+``}function l(e,t,n){return(t=c(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function u(e,t){return function(n,r){t(n,r,e)}}function d(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}let f=class extends t.Disposable{constructor(e){super(),this._logService=e,l(this,`_model`,new Map),l(this,`_ruleChange$`,new n.Subject),l(this,`ruleChange$`,this._ruleChange$.asObservable()),l(this,`ruleChangeDebounce$`,this.ruleChange$.pipe((0,n.debounceTime)(20))),this.disposeWithMe({dispose:()=>{this._ruleChange$.complete()}})}_ensureMap(e,t){this._model.has(e)||this._model.set(e,new Map);let n=this._model.get(e);if(n.has(t))return n.get(t);let r={map:new Map,list:[]};return n.set(t,r),r}_addSubUnitRule(e,t,n){let{map:r,list:i}=e,a=(Array.isArray(t)?t:[t]).filter(e=>!r.has(e.uid));typeof n==`number`&&n<i.length?i.splice(n,0,...a):i.push(...a),a.forEach(e=>{r.set(e.uid,e)})}_removeSubUnitRule(e,t){let{map:n,list:r}=e,i=r.findIndex(e=>e.uid===t);i>-1&&(r.splice(i,1),n.delete(t))}_updateSubUnitRule(e,t,n){let{map:o,list:s}=e,c=o.get(t),l=s.findIndex(e=>t===e.uid);if(!c)throw Error(`Data validation rule is not found, ruleId: ${t}.`);let u={...c};switch(n.type){case a.RANGE:u.ranges=n.payload;break;case a.SETTING:Object.assign(u,r(n.payload));break;case a.OPTIONS:Object.assign(u,i(n.payload));break;case a.ALL:Object.assign(u,n.payload);break;default:break}return s[l]=u,o.set(t,u),u}_addRuleSideEffect(e,t,n,r){if(!this._ensureMap(e,t).map.get(n.uid))return{rule:n,type:`add`,unitId:e,subUnitId:t,source:r}}addRule(e,t,n,r,i){try{let a=this._ensureMap(e,t),o=(Array.isArray(n)?n:[n]).map(n=>this._addRuleSideEffect(e,t,n,r));this._addSubUnitRule(a,n,i),o.forEach(e=>{e&&this._ruleChange$.next(e)})}catch(e){this._logService.error(e)}}updateRule(e,n,r,i,a){try{let o=this._ensureMap(e,n),s=t.Tools.deepClone(o.map.get(r));if(!s)throw Error(`Data validation rule is not found, ruleId: ${r}.`);let c=this._updateSubUnitRule(o,r,i);this._ruleChange$.next({rule:c,type:`update`,unitId:e,subUnitId:n,source:a,updatePayload:i,oldRule:s})}catch(e){this._logService.error(e)}}removeRule(e,t,n,r){try{let i=this._ensureMap(e,t),a=i.map.get(n);a&&(this._removeSubUnitRule(i,n),this._ruleChange$.next({rule:a,type:`remove`,unitId:e,subUnitId:t,source:r}))}catch(e){this._logService.error(e)}}getRuleById(e,t,n){return this._ensureMap(e,t).map.get(n)}getRuleIndex(e,t,n){return this._ensureMap(e,t).list.findIndex(e=>e.uid===n)}getRules(e,t){return[...this._ensureMap(e,t).list]}getUnitRules(e){let t=this._model.get(e);if(!t)return[];let n=[];return t.forEach((e,t)=>{n.push([t,e.list])}),n}deleteUnitRules(e){this._model.delete(e)}getSubUnitIds(e){var t,n;return Array.from((t=(n=this._model.get(e))==null?void 0:n.keys())==null?[]:t)}getAll(){return Array.from(this._model.keys()).map(e=>[e,this.getUnitRules(e)])}};f=d([u(0,t.ILogService)],f);let p={type:t.CommandType.MUTATION,id:`data-validation.mutation.addRule`,handler(e,t){if(!t)return!1;let{unitId:n,subUnitId:r,rule:i,index:a,source:o=`command`}=t;return e.get(f).addRule(n,r,i,o,a),!0}},m={type:t.CommandType.MUTATION,id:`data-validation.mutation.removeRule`,handler(e,t){if(!t)return!1;let{unitId:n,subUnitId:r,ruleId:i,source:a=`command`}=t,o=e.get(f);return Array.isArray(i)?i.forEach(e=>{o.removeRule(n,r,e,a)}):o.removeRule(n,r,i,a),!0}},h={type:t.CommandType.MUTATION,id:`data-validation.mutation.updateRule`,handler(e,t){if(!t)return!1;let{unitId:n,subUnitId:r,ruleId:i,payload:a,source:o=`command`}=t;return e.get(f).updateRule(n,r,i,a,o),!0}},g=class extends t.Disposable{constructor(e,t,n){super(),this._resourceManagerService=e,this._univerInstanceService=t,this._dataValidationModel=n,this._initSnapshot()}_initSnapshot(){let e=e=>{let t=this._dataValidationModel.getUnitRules(e),n={};return t?(t.forEach(([e,t])=>{n[e]=t}),JSON.stringify(n)):``},n=e=>{if(!e)return{};try{return JSON.parse(e)}catch{return{}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:`SHEET_DATA_VALIDATION_PLUGIN`,businesses:[t.UniverInstanceType.UNIVER_SHEET],toJson:t=>e(t),parseJson:e=>n(e),onUnLoad:e=>{this._dataValidationModel.deleteUnitRules(e)},onLoad:(e,t)=>{Object.keys(t).forEach(n=>{t[n].forEach(t=>{this._dataValidationModel.addRule(e,n,t,`patched`)})})}}))}};g=d([u(0,t.IResourceManagerService),u(1,t.IUniverInstanceService),u(2,(0,t.Inject)(f))],g);var _=`@univerjs/data-validation`,v=`0.19.0`;let y=function(e){return e.SHEET=`sheet`,e}({});var b=class{constructor(){l(this,`_validatorByScopes`,new Map),l(this,`_validatorMap`,new Map),l(this,`_validatorsChange$`,new n.BehaviorSubject(void 0)),l(this,`validatorsChange$`,this._validatorsChange$.asObservable())}_addValidatorToScope(e,t){this._validatorByScopes.has(t)||this._validatorByScopes.set(t,[]);let n=this._validatorByScopes.get(t);if(n.findIndex(t=>t.id===e.id)>-1)throw Error(`Validator item with the same id ${e.id} has already been added!`);n.push(e)}_removeValidatorFromScope(e,t){let n=this._validatorByScopes.get(t);if(!n)return;let r=n.findIndex(t=>t.id===e.id);r>-1&&n.splice(r,1)}register(e){return this._validatorMap.set(e.id,e),Array.isArray(e.scopes)?e.scopes.forEach(t=>{this._addValidatorToScope(e,t)}):this._addValidatorToScope(e,e.scopes),this._validatorsChange$.next(),(0,t.toDisposable)(()=>{this._validatorMap.delete(e.id),Array.isArray(e.scopes)?e.scopes.forEach(t=>{this._removeValidatorFromScope(e,t)}):this._removeValidatorFromScope(e,e.scopes),this._validatorsChange$.next()})}getValidatorItem(e){return this._validatorMap.get(e)}getValidatorsByScope(e){return this._validatorByScopes.get(e)}};let x={type:t.CommandType.COMMAND,id:`data-validation.command.addRule`,async handler(e,n){if(e.get(t.ILogService).error("[Deprecated]: `AddDataValidationCommand` is deprecated, please use `AddSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!n)return!1;let{rule:r,unitId:i,subUnitId:a}=n,o=e.get(t.ICommandService),s=e.get(t.IUndoRedoService),c={...n,rule:{...n.rule,ranges:[n.rule.range]}},l=[{id:p.id,params:c}],u=[{id:m.id,params:{unitId:i,subUnitId:a,ruleId:r.uid}}];return s.pushUndoRedo({unitID:i,redoMutations:l,undoMutations:u}),await o.executeCommand(p.id,c),!0}},S={type:t.CommandType.COMMAND,id:`data-validation.command.removeRule`,handler(e,n){if(e.get(t.ILogService).error("[Deprecated]: `RemoveDataValidationCommand` is deprecated, please use `RemoveSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!n)return!1;let{unitId:r,subUnitId:i,ruleId:a}=n,o=e.get(t.ICommandService),s=e.get(t.IUndoRedoService),c=e.get(f),l=[{id:m.id,params:n}],u=[{id:p.id,params:{unitId:r,subUnitId:i,rule:{...c.getRuleById(r,i,a)},index:c.getRuleIndex(r,i,a)}}];return s.pushUndoRedo({undoMutations:u,redoMutations:l,unitID:n.unitId}),o.executeCommand(m.id,n),!0}},C={type:t.CommandType.COMMAND,id:`data-validation.command.updateDataValidationSetting`,handler(e,n){if(e.get(t.ILogService).warn("[Deprecated]: `UpdateDataValidationOptionsCommand` is deprecated, please use `UpdateSheetDataValidationOptionsCommand` in `@univerjs/sheets-data-validation` instead!"),!n)return!1;let r=e.get(t.ICommandService),o=e.get(t.IUndoRedoService),s=e.get(f),{unitId:c,subUnitId:l,ruleId:u,options:d}=n,p=s.getRuleById(c,l,u);if(!p)return!1;let m={unitId:c,subUnitId:l,ruleId:u,payload:{type:a.OPTIONS,payload:d}},g=[{id:h.id,params:m}],_={unitId:c,subUnitId:l,ruleId:u,payload:{type:a.OPTIONS,payload:i(p)}},v=[{id:h.id,params:_}];return o.pushUndoRedo({unitID:c,redoMutations:g,undoMutations:v}),r.executeCommand(h.id,m),!0}},w={type:t.CommandType.COMMAND,id:`data-validation.command.updateDataValidationOptions`,handler(e,n){if(e.get(t.ILogService).error("[Deprecated]: `UpdateDataValidationSettingCommand` is deprecated, please use `UpdateSheetDataValidationSettingCommand` in `@univerjs/sheets-data-validation` instead!"),!n)return!1;let i=e.get(t.ICommandService),o=e.get(t.IUndoRedoService),s=e.get(f),c=e.get(b),{unitId:l,subUnitId:u,ruleId:d,setting:p}=n,m=c.getValidatorItem(p.type);if(!m)return!1;let g=s.getRuleById(l,u,d);if(!g)return!1;let _={...g,...p};if(!m.validatorFormula(_,l,u).success)return!1;let v={unitId:l,subUnitId:u,ruleId:d,payload:{type:a.SETTING,payload:{...p,...m.normalizeFormula(_,l,u)}}},y=[{id:h.id,params:v}],x={unitId:l,subUnitId:u,ruleId:d,payload:{type:a.SETTING,payload:r(g)}},S=[{id:h.id,params:x}];return o.pushUndoRedo({unitID:l,redoMutations:y,undoMutations:S}),i.executeCommand(h.id,v),!0}},T={type:t.CommandType.COMMAND,id:`data-validation.command.removeAll`,handler(e,n){if(e.get(t.ILogService).error("[Deprecated]: `RemoveAllDataValidationCommand` is deprecated, please use `RemoveSheetAllDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!n)return!1;let{unitId:r,subUnitId:i}=n,a=e.get(t.ICommandService),o=e.get(f),s=e.get(t.IUndoRedoService),c=[...o.getRules(r,i)],l={unitId:r,subUnitId:i,ruleId:c.map(e=>e.uid)},u=[{id:m.id,params:l}],d=[{id:p.id,params:{unitId:r,subUnitId:i,rule:c}}];return s.pushUndoRedo({redoMutations:u,undoMutations:d,unitID:r}),a.executeCommand(m.id,l),!0}},E=`data-validation.config`;Symbol(E);let D={},O=class extends t.Plugin{constructor(e=D,n,r,i){super(),this._config=e,this._injector=n,this._commandService=r,this._configService=i;let{...a}=(0,t.merge)({},D,this._config);this._configService.setConfig(E,a)}onStarting(){[[f],[b],[g]].forEach(e=>this._injector.add(e)),[x,T,C,w,S,p,h,m].forEach(e=>{this._commandService.registerCommand(e)})}onReady(){this._injector.get(g)}};l(O,`pluginName`,`UNIVER_DATA_VALIDATION_PLUGIN`),l(O,`packageName`,_),l(O,`version`,v),l(O,`type`,t.UniverInstanceType.UNIVER_SHEET),O=d([u(1,(0,t.Inject)(t.Injector)),u(2,t.ICommandService),u(3,t.IConfigService)],O),t.DataValidationOperator.BETWEEN,t.DataValidationOperator.EQUAL,t.DataValidationOperator.GREATER_THAN,t.DataValidationOperator.GREATER_THAN_OR_EQUAL,t.DataValidationOperator.LESS_THAN,t.DataValidationOperator.LESS_THAN_OR_EQUAL,t.DataValidationOperator.NOT_BETWEEN,t.DataValidationOperator.NOT_EQUAL;let k={[t.DataValidationOperator.BETWEEN]:`dataValidation.ruleName.between`,[t.DataValidationOperator.EQUAL]:`dataValidation.ruleName.equal`,[t.DataValidationOperator.GREATER_THAN]:`dataValidation.ruleName.greaterThan`,[t.DataValidationOperator.GREATER_THAN_OR_EQUAL]:`dataValidation.ruleName.greaterThanOrEqual`,[t.DataValidationOperator.LESS_THAN]:`dataValidation.ruleName.lessThan`,[t.DataValidationOperator.LESS_THAN_OR_EQUAL]:`dataValidation.ruleName.lessThanOrEqual`,[t.DataValidationOperator.NOT_BETWEEN]:`dataValidation.ruleName.notBetween`,[t.DataValidationOperator.NOT_EQUAL]:`dataValidation.ruleName.notEqual`,NONE:`dataValidation.ruleName.legal`},A={[t.DataValidationOperator.BETWEEN]:`dataValidation.errorMsg.between`,[t.DataValidationOperator.EQUAL]:`dataValidation.errorMsg.equal`,[t.DataValidationOperator.GREATER_THAN]:`dataValidation.errorMsg.greaterThan`,[t.DataValidationOperator.GREATER_THAN_OR_EQUAL]:`dataValidation.errorMsg.greaterThanOrEqual`,[t.DataValidationOperator.LESS_THAN]:`dataValidation.errorMsg.lessThan`,[t.DataValidationOperator.LESS_THAN_OR_EQUAL]:`dataValidation.errorMsg.lessThanOrEqual`,[t.DataValidationOperator.NOT_BETWEEN]:`dataValidation.errorMsg.notBetween`,[t.DataValidationOperator.NOT_EQUAL]:`dataValidation.errorMsg.notEqual`,NONE:`dataValidation.errorMsg.legal`},j={[t.DataValidationOperator.BETWEEN]:`dataValidation.textLength.errorMsg.between`,[t.DataValidationOperator.EQUAL]:`dataValidation.textLength.errorMsg.equal`,[t.DataValidationOperator.GREATER_THAN]:`dataValidation.textLength.errorMsg.greaterThan`,[t.DataValidationOperator.GREATER_THAN_OR_EQUAL]:`dataValidation.textLength.errorMsg.greaterThanOrEqual`,[t.DataValidationOperator.LESS_THAN]:`dataValidation.textLength.errorMsg.lessThan`,[t.DataValidationOperator.LESS_THAN_OR_EQUAL]:`dataValidation.textLength.errorMsg.lessThanOrEqual`,[t.DataValidationOperator.NOT_BETWEEN]:`dataValidation.textLength.errorMsg.notBetween`,[t.DataValidationOperator.NOT_EQUAL]:`dataValidation.textLength.errorMsg.notEqual`},M=[t.DataValidationOperator.BETWEEN,t.DataValidationOperator.NOT_BETWEEN],N=`{FORMULA1}`,P=`{FORMULA2}`,F=`{TYPE}`,I={[t.DataValidationOperator.BETWEEN]:`dataValidation.operators.between`,[t.DataValidationOperator.EQUAL]:`dataValidation.operators.equal`,[t.DataValidationOperator.GREATER_THAN]:`dataValidation.operators.greaterThan`,[t.DataValidationOperator.GREATER_THAN_OR_EQUAL]:`dataValidation.operators.greaterThanOrEqual`,[t.DataValidationOperator.LESS_THAN]:`dataValidation.operators.lessThan`,[t.DataValidationOperator.LESS_THAN_OR_EQUAL]:`dataValidation.operators.lessThanOrEqual`,[t.DataValidationOperator.NOT_BETWEEN]:`dataValidation.operators.notBetween`,[t.DataValidationOperator.NOT_EQUAL]:`dataValidation.operators.notEqual`},L=function(e){return e.DATE=`date`,e.TIME=`time`,e.DATETIME=`datetime`,e.LIST=`list`,e.MULTIPLE_LIST=`multipleList`,e.COLOR=`color`,e.CASCADE=`cascade`,e}({}),R=class{constructor(e,t){this.localeService=e,this.injector=t,l(this,`offsetFormulaByRange`,!0),l(this,`formulaInput`,void 0),l(this,`canvasRender`,null),l(this,`dropdownType`,void 0),l(this,`optionsInput`,void 0),l(this,`skipDefaultFontRender`,void 0)}get operatorNames(){return this.operators.map(e=>this.localeService.t(I[e]))}get titleStr(){return this.localeService.t(this.title)}generateRuleName(e){var t,n;if(!e.operator)return this.localeService.t(k.NONE).replace(F,this.titleStr);let r=this.localeService.t(k[e.operator]).replace(N,(t=e.formula1)==null?``:t).replace(P,(n=e.formula2)==null?``:n);return`${this.titleStr} ${r}`}generateRuleErrorMessage(e,t){var n,r;return e.operator?`${this.localeService.t(A[e.operator]).replace(N,(n=e.formula1)==null?``:n).replace(P,(r=e.formula2)==null?``:r)}`:this.localeService.t(A.NONE).replace(F,this.titleStr)}getExtraStyle(e,t,n,r,i){}getRuleFinalError(e,t){return e.showErrorMessage&&e.error?e.error:this.generateRuleErrorMessage(e,t)}isEmptyCellValue(e){return e===``||e==null}normalizeFormula(e,t,n){return{formula1:e.formula1,formula2:e.formula2}}async isValidType(e,t,n){return!0}transform(e,t,n){return e}async validatorIsEqual(e,t,n){let{formula1:r}=t,{value:i}=e;return Number.isNaN(r)?!0:i===r}async validatorIsNotEqual(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value!==r}async validatorIsBetween(e,t,n){let{formula1:r,formula2:i}=t;if(Number.isNaN(r)||Number.isNaN(i))return!0;let a=Math.min(r,i),o=Math.max(r,i);return e.value>=a&&e.value<=o}async validatorIsNotBetween(e,t,n){let{formula1:r,formula2:i}=t;if(Number.isNaN(r)||Number.isNaN(i))return!0;let a=Math.min(r,i),o=Math.max(r,i);return e.value<a||e.value>o}async validatorIsGreaterThan(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value>r}async validatorIsGreaterThanOrEqual(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value>=r}async validatorIsLessThan(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value<r}async validatorIsLessThanOrEqual(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value<=r}async validator(e,n){let{value:r,unitId:i,subUnitId:a}=e,o=this.isEmptyCellValue(r),{allowBlank:s=!0,operator:c}=n;if(o)return s;let l=await this.parseFormula(n,i,a,e.row,e.column);if(!l.isFormulaValid||!await this.isValidType(e,l,n))return!1;if(!c)return!0;let u=this.transform(e,l,n);switch(c){case t.DataValidationOperator.BETWEEN:return this.validatorIsBetween(u,l,n);case t.DataValidationOperator.EQUAL:return this.validatorIsEqual(u,l,n);case t.DataValidationOperator.GREATER_THAN:return this.validatorIsGreaterThan(u,l,n);case t.DataValidationOperator.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(u,l,n);case t.DataValidationOperator.LESS_THAN:return this.validatorIsLessThan(u,l,n);case t.DataValidationOperator.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(u,l,n);case t.DataValidationOperator.NOT_BETWEEN:return this.validatorIsNotBetween(u,l,n);case t.DataValidationOperator.NOT_EQUAL:return this.validatorIsNotEqual(u,l,n);default:throw Error(`Unknown operator.`)}}};R=d([u(0,(0,t.Inject)(t.LocaleService)),u(1,(0,t.Inject)(t.Injector))],R),e.AddDataValidationMutation=p,Object.defineProperty(e,`BaseDataValidator`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(e,`DataValidationModel`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(e,`DataValidationResourceController`,{enumerable:!0,get:function(){return g}}),e.DataValidatorDropdownType=L,e.DataValidatorRegistryScope=y,e.DataValidatorRegistryService=b,e.FORMULA1=N,e.FORMULA2=P,e.RemoveDataValidationMutation=m,e.TWO_FORMULA_OPERATOR_COUNT=M,e.TYPE=F,e.TextLengthErrorTitleMap=j,Object.defineProperty(e,`UniverDataValidationPlugin`,{enumerable:!0,get:function(){return O}}),e.UpdateDataValidationMutation=h,e.UpdateRuleType=a,e.getRuleOptions=i,e.getRuleSetting=r});
|
|
1
|
+
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`@univerjs/core`),require(`rxjs`)):typeof define==`function`&&define.amd?define([`exports`,`@univerjs/core`,`rxjs`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.UniverDataValidation={},e.UniverCore,e.rxjs))})(this,function(e,t,n){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function r(e){return{type:e.type,operator:e.operator,formula1:e.formula1,formula2:e.formula2,allowBlank:e.allowBlank}}function i(e){return{error:e.error,errorStyle:e.errorStyle,errorTitle:e.errorTitle,imeMode:e.imeMode,prompt:e.prompt,promptTitle:e.promptTitle,showDropDown:e.showDropDown,showErrorMessage:e.showErrorMessage,showInputMessage:e.showInputMessage,renderMode:e.renderMode,bizInfo:e.bizInfo}}let a=function(e){return e[e.SETTING=0]=`SETTING`,e[e.RANGE=1]=`RANGE`,e[e.OPTIONS=2]=`OPTIONS`,e[e.ALL=3]=`ALL`,e}({});function o(e){"@babel/helpers - typeof";return o=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},o(e)}function s(e,t){if(o(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(o(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function c(e){var t=s(e,`string`);return o(t)==`symbol`?t:t+``}function l(e,t,n){return(t=c(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function u(e,t){return function(n,r){t(n,r,e)}}function d(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}let f=class extends t.Disposable{constructor(e){super(),this._logService=e,l(this,`_model`,new Map),l(this,`_ruleChange$`,new n.Subject),l(this,`ruleChange$`,this._ruleChange$.asObservable()),l(this,`ruleChangeDebounce$`,this.ruleChange$.pipe((0,n.debounceTime)(20))),this.disposeWithMe({dispose:()=>{this._ruleChange$.complete()}})}_ensureMap(e,t){this._model.has(e)||this._model.set(e,new Map);let n=this._model.get(e);if(n.has(t))return n.get(t);let r={map:new Map,list:[]};return n.set(t,r),r}_addSubUnitRule(e,t,n){let{map:r,list:i}=e,a=(Array.isArray(t)?t:[t]).filter(e=>!r.has(e.uid));typeof n==`number`&&n<i.length?i.splice(n,0,...a):i.push(...a),a.forEach(e=>{r.set(e.uid,e)})}_removeSubUnitRule(e,t){let{map:n,list:r}=e,i=r.findIndex(e=>e.uid===t);i>-1&&(r.splice(i,1),n.delete(t))}_updateSubUnitRule(e,t,n){let{map:o,list:s}=e,c=o.get(t),l=s.findIndex(e=>t===e.uid);if(!c)throw Error(`Data validation rule is not found, ruleId: ${t}.`);let u={...c};switch(n.type){case a.RANGE:u.ranges=n.payload;break;case a.SETTING:Object.assign(u,r(n.payload));break;case a.OPTIONS:Object.assign(u,i(n.payload));break;case a.ALL:Object.assign(u,n.payload);break;default:break}return s[l]=u,o.set(t,u),u}_addRuleSideEffect(e,t,n,r){if(!this._ensureMap(e,t).map.get(n.uid))return{rule:n,type:`add`,unitId:e,subUnitId:t,source:r}}addRule(e,t,n,r,i){try{let a=this._ensureMap(e,t),o=(Array.isArray(n)?n:[n]).map(n=>this._addRuleSideEffect(e,t,n,r));this._addSubUnitRule(a,n,i),o.forEach(e=>{e&&this._ruleChange$.next(e)})}catch(e){this._logService.error(e)}}updateRule(e,n,r,i,a){try{let o=this._ensureMap(e,n),s=t.Tools.deepClone(o.map.get(r));if(!s)throw Error(`Data validation rule is not found, ruleId: ${r}.`);let c=this._updateSubUnitRule(o,r,i);this._ruleChange$.next({rule:c,type:`update`,unitId:e,subUnitId:n,source:a,updatePayload:i,oldRule:s})}catch(e){this._logService.error(e)}}removeRule(e,t,n,r){try{let i=this._ensureMap(e,t),a=i.map.get(n);a&&(this._removeSubUnitRule(i,n),this._ruleChange$.next({rule:a,type:`remove`,unitId:e,subUnitId:t,source:r}))}catch(e){this._logService.error(e)}}getRuleById(e,t,n){return this._ensureMap(e,t).map.get(n)}getRuleIndex(e,t,n){return this._ensureMap(e,t).list.findIndex(e=>e.uid===n)}getRules(e,t){return[...this._ensureMap(e,t).list]}getUnitRules(e){let t=this._model.get(e);if(!t)return[];let n=[];return t.forEach((e,t)=>{n.push([t,e.list])}),n}deleteUnitRules(e){this._model.delete(e)}getSubUnitIds(e){var t,n;return Array.from((t=(n=this._model.get(e))==null?void 0:n.keys())==null?[]:t)}getAll(){return Array.from(this._model.keys()).map(e=>[e,this.getUnitRules(e)])}};f=d([u(0,t.ILogService)],f);let p={type:t.CommandType.MUTATION,id:`data-validation.mutation.addRule`,handler(e,t){if(!t)return!1;let{unitId:n,subUnitId:r,rule:i,index:a,source:o=`command`}=t;return e.get(f).addRule(n,r,i,o,a),!0}},m={type:t.CommandType.MUTATION,id:`data-validation.mutation.removeRule`,handler(e,t){if(!t)return!1;let{unitId:n,subUnitId:r,ruleId:i,source:a=`command`}=t,o=e.get(f);return Array.isArray(i)?i.forEach(e=>{o.removeRule(n,r,e,a)}):o.removeRule(n,r,i,a),!0}},h={type:t.CommandType.MUTATION,id:`data-validation.mutation.updateRule`,handler(e,t){if(!t)return!1;let{unitId:n,subUnitId:r,ruleId:i,payload:a,source:o=`command`}=t;return e.get(f).updateRule(n,r,i,a,o),!0}},g=class extends t.Disposable{constructor(e,t,n){super(),this._resourceManagerService=e,this._univerInstanceService=t,this._dataValidationModel=n,this._initSnapshot()}_initSnapshot(){let e=e=>{let t=this._dataValidationModel.getUnitRules(e),n={};return t?(t.forEach(([e,t])=>{n[e]=t}),JSON.stringify(n)):``},n=e=>{if(!e)return{};try{return JSON.parse(e)}catch{return{}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:`SHEET_DATA_VALIDATION_PLUGIN`,businesses:[t.UniverInstanceType.UNIVER_SHEET],toJson:t=>e(t),parseJson:e=>n(e),onUnLoad:e=>{this._dataValidationModel.deleteUnitRules(e)},onLoad:(e,t)=>{Object.keys(t).forEach(n=>{t[n].forEach(t=>{this._dataValidationModel.addRule(e,n,t,`patched`)})})}}))}};g=d([u(0,t.IResourceManagerService),u(1,t.IUniverInstanceService),u(2,(0,t.Inject)(f))],g);var _=`@univerjs/data-validation`,v=`0.20.0`;let y=function(e){return e.SHEET=`sheet`,e}({});var b=class{constructor(){l(this,`_validatorByScopes`,new Map),l(this,`_validatorMap`,new Map),l(this,`_validatorsChange$`,new n.BehaviorSubject(void 0)),l(this,`validatorsChange$`,this._validatorsChange$.asObservable())}_addValidatorToScope(e,t){this._validatorByScopes.has(t)||this._validatorByScopes.set(t,[]);let n=this._validatorByScopes.get(t);if(n.findIndex(t=>t.id===e.id)>-1)throw Error(`Validator item with the same id ${e.id} has already been added!`);n.push(e)}_removeValidatorFromScope(e,t){let n=this._validatorByScopes.get(t);if(!n)return;let r=n.findIndex(t=>t.id===e.id);r>-1&&n.splice(r,1)}register(e){return this._validatorMap.set(e.id,e),Array.isArray(e.scopes)?e.scopes.forEach(t=>{this._addValidatorToScope(e,t)}):this._addValidatorToScope(e,e.scopes),this._validatorsChange$.next(),(0,t.toDisposable)(()=>{this._validatorMap.delete(e.id),Array.isArray(e.scopes)?e.scopes.forEach(t=>{this._removeValidatorFromScope(e,t)}):this._removeValidatorFromScope(e,e.scopes),this._validatorsChange$.next()})}getValidatorItem(e){return this._validatorMap.get(e)}getValidatorsByScope(e){return this._validatorByScopes.get(e)}};let x={type:t.CommandType.COMMAND,id:`data-validation.command.addRule`,async handler(e,n){if(e.get(t.ILogService).error("[Deprecated]: `AddDataValidationCommand` is deprecated, please use `AddSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!n)return!1;let{rule:r,unitId:i,subUnitId:a}=n,o=e.get(t.ICommandService),s=e.get(t.IUndoRedoService),c={...n,rule:{...n.rule,ranges:[n.rule.range]}},l=[{id:p.id,params:c}],u=[{id:m.id,params:{unitId:i,subUnitId:a,ruleId:r.uid}}];return s.pushUndoRedo({unitID:i,redoMutations:l,undoMutations:u}),await o.executeCommand(p.id,c),!0}},S={type:t.CommandType.COMMAND,id:`data-validation.command.removeRule`,handler(e,n){if(e.get(t.ILogService).error("[Deprecated]: `RemoveDataValidationCommand` is deprecated, please use `RemoveSheetDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!n)return!1;let{unitId:r,subUnitId:i,ruleId:a}=n,o=e.get(t.ICommandService),s=e.get(t.IUndoRedoService),c=e.get(f),l=[{id:m.id,params:n}],u=[{id:p.id,params:{unitId:r,subUnitId:i,rule:{...c.getRuleById(r,i,a)},index:c.getRuleIndex(r,i,a)}}];return s.pushUndoRedo({undoMutations:u,redoMutations:l,unitID:n.unitId}),o.executeCommand(m.id,n),!0}},C={type:t.CommandType.COMMAND,id:`data-validation.command.updateDataValidationSetting`,handler(e,n){if(e.get(t.ILogService).warn("[Deprecated]: `UpdateDataValidationOptionsCommand` is deprecated, please use `UpdateSheetDataValidationOptionsCommand` in `@univerjs/sheets-data-validation` instead!"),!n)return!1;let r=e.get(t.ICommandService),o=e.get(t.IUndoRedoService),s=e.get(f),{unitId:c,subUnitId:l,ruleId:u,options:d}=n,p=s.getRuleById(c,l,u);if(!p)return!1;let m={unitId:c,subUnitId:l,ruleId:u,payload:{type:a.OPTIONS,payload:d}},g=[{id:h.id,params:m}],_={unitId:c,subUnitId:l,ruleId:u,payload:{type:a.OPTIONS,payload:i(p)}},v=[{id:h.id,params:_}];return o.pushUndoRedo({unitID:c,redoMutations:g,undoMutations:v}),r.executeCommand(h.id,m),!0}},w={type:t.CommandType.COMMAND,id:`data-validation.command.updateDataValidationOptions`,handler(e,n){if(e.get(t.ILogService).error("[Deprecated]: `UpdateDataValidationSettingCommand` is deprecated, please use `UpdateSheetDataValidationSettingCommand` in `@univerjs/sheets-data-validation` instead!"),!n)return!1;let i=e.get(t.ICommandService),o=e.get(t.IUndoRedoService),s=e.get(f),c=e.get(b),{unitId:l,subUnitId:u,ruleId:d,setting:p}=n,m=c.getValidatorItem(p.type);if(!m)return!1;let g=s.getRuleById(l,u,d);if(!g)return!1;let _={...g,...p};if(!m.validatorFormula(_,l,u).success)return!1;let v={unitId:l,subUnitId:u,ruleId:d,payload:{type:a.SETTING,payload:{...p,...m.normalizeFormula(_,l,u)}}},y=[{id:h.id,params:v}],x={unitId:l,subUnitId:u,ruleId:d,payload:{type:a.SETTING,payload:r(g)}},S=[{id:h.id,params:x}];return o.pushUndoRedo({unitID:l,redoMutations:y,undoMutations:S}),i.executeCommand(h.id,v),!0}},T={type:t.CommandType.COMMAND,id:`data-validation.command.removeAll`,handler(e,n){if(e.get(t.ILogService).error("[Deprecated]: `RemoveAllDataValidationCommand` is deprecated, please use `RemoveSheetAllDataValidationCommand` in `@univerjs/sheets-data-validation` instead!"),!n)return!1;let{unitId:r,subUnitId:i}=n,a=e.get(t.ICommandService),o=e.get(f),s=e.get(t.IUndoRedoService),c=[...o.getRules(r,i)],l={unitId:r,subUnitId:i,ruleId:c.map(e=>e.uid)},u=[{id:m.id,params:l}],d=[{id:p.id,params:{unitId:r,subUnitId:i,rule:c}}];return s.pushUndoRedo({redoMutations:u,undoMutations:d,unitID:r}),a.executeCommand(m.id,l),!0}},E=`data-validation.config`;Symbol(E);let D={},O=class extends t.Plugin{constructor(e=D,n,r,i){super(),this._config=e,this._injector=n,this._commandService=r,this._configService=i;let{...a}=(0,t.merge)({},D,this._config);this._configService.setConfig(E,a)}onStarting(){[[f],[b],[g]].forEach(e=>this._injector.add(e)),[x,T,C,w,S,p,h,m].forEach(e=>{this._commandService.registerCommand(e)})}onReady(){this._injector.get(g)}};l(O,`pluginName`,`UNIVER_DATA_VALIDATION_PLUGIN`),l(O,`packageName`,_),l(O,`version`,v),l(O,`type`,t.UniverInstanceType.UNIVER_SHEET),O=d([u(1,(0,t.Inject)(t.Injector)),u(2,t.ICommandService),u(3,t.IConfigService)],O),t.DataValidationOperator.BETWEEN,t.DataValidationOperator.EQUAL,t.DataValidationOperator.GREATER_THAN,t.DataValidationOperator.GREATER_THAN_OR_EQUAL,t.DataValidationOperator.LESS_THAN,t.DataValidationOperator.LESS_THAN_OR_EQUAL,t.DataValidationOperator.NOT_BETWEEN,t.DataValidationOperator.NOT_EQUAL;let k={[t.DataValidationOperator.BETWEEN]:`dataValidation.ruleName.between`,[t.DataValidationOperator.EQUAL]:`dataValidation.ruleName.equal`,[t.DataValidationOperator.GREATER_THAN]:`dataValidation.ruleName.greaterThan`,[t.DataValidationOperator.GREATER_THAN_OR_EQUAL]:`dataValidation.ruleName.greaterThanOrEqual`,[t.DataValidationOperator.LESS_THAN]:`dataValidation.ruleName.lessThan`,[t.DataValidationOperator.LESS_THAN_OR_EQUAL]:`dataValidation.ruleName.lessThanOrEqual`,[t.DataValidationOperator.NOT_BETWEEN]:`dataValidation.ruleName.notBetween`,[t.DataValidationOperator.NOT_EQUAL]:`dataValidation.ruleName.notEqual`,NONE:`dataValidation.ruleName.legal`},A={[t.DataValidationOperator.BETWEEN]:`dataValidation.errorMsg.between`,[t.DataValidationOperator.EQUAL]:`dataValidation.errorMsg.equal`,[t.DataValidationOperator.GREATER_THAN]:`dataValidation.errorMsg.greaterThan`,[t.DataValidationOperator.GREATER_THAN_OR_EQUAL]:`dataValidation.errorMsg.greaterThanOrEqual`,[t.DataValidationOperator.LESS_THAN]:`dataValidation.errorMsg.lessThan`,[t.DataValidationOperator.LESS_THAN_OR_EQUAL]:`dataValidation.errorMsg.lessThanOrEqual`,[t.DataValidationOperator.NOT_BETWEEN]:`dataValidation.errorMsg.notBetween`,[t.DataValidationOperator.NOT_EQUAL]:`dataValidation.errorMsg.notEqual`,NONE:`dataValidation.errorMsg.legal`},j={[t.DataValidationOperator.BETWEEN]:`dataValidation.textLength.errorMsg.between`,[t.DataValidationOperator.EQUAL]:`dataValidation.textLength.errorMsg.equal`,[t.DataValidationOperator.GREATER_THAN]:`dataValidation.textLength.errorMsg.greaterThan`,[t.DataValidationOperator.GREATER_THAN_OR_EQUAL]:`dataValidation.textLength.errorMsg.greaterThanOrEqual`,[t.DataValidationOperator.LESS_THAN]:`dataValidation.textLength.errorMsg.lessThan`,[t.DataValidationOperator.LESS_THAN_OR_EQUAL]:`dataValidation.textLength.errorMsg.lessThanOrEqual`,[t.DataValidationOperator.NOT_BETWEEN]:`dataValidation.textLength.errorMsg.notBetween`,[t.DataValidationOperator.NOT_EQUAL]:`dataValidation.textLength.errorMsg.notEqual`},M=[t.DataValidationOperator.BETWEEN,t.DataValidationOperator.NOT_BETWEEN],N=`{FORMULA1}`,P=`{FORMULA2}`,F=`{TYPE}`,I={[t.DataValidationOperator.BETWEEN]:`dataValidation.operators.between`,[t.DataValidationOperator.EQUAL]:`dataValidation.operators.equal`,[t.DataValidationOperator.GREATER_THAN]:`dataValidation.operators.greaterThan`,[t.DataValidationOperator.GREATER_THAN_OR_EQUAL]:`dataValidation.operators.greaterThanOrEqual`,[t.DataValidationOperator.LESS_THAN]:`dataValidation.operators.lessThan`,[t.DataValidationOperator.LESS_THAN_OR_EQUAL]:`dataValidation.operators.lessThanOrEqual`,[t.DataValidationOperator.NOT_BETWEEN]:`dataValidation.operators.notBetween`,[t.DataValidationOperator.NOT_EQUAL]:`dataValidation.operators.notEqual`},L=function(e){return e.DATE=`date`,e.TIME=`time`,e.DATETIME=`datetime`,e.LIST=`list`,e.MULTIPLE_LIST=`multipleList`,e.COLOR=`color`,e.CASCADE=`cascade`,e}({}),R=class{constructor(e,t){this.localeService=e,this.injector=t,l(this,`offsetFormulaByRange`,!0),l(this,`formulaInput`,void 0),l(this,`canvasRender`,null),l(this,`dropdownType`,void 0),l(this,`optionsInput`,void 0),l(this,`skipDefaultFontRender`,void 0)}get operatorNames(){return this.operators.map(e=>this.localeService.t(I[e]))}get titleStr(){return this.localeService.t(this.title)}generateRuleName(e){var t,n;if(!e.operator)return this.localeService.t(k.NONE).replace(F,this.titleStr);let r=this.localeService.t(k[e.operator]).replace(N,(t=e.formula1)==null?``:t).replace(P,(n=e.formula2)==null?``:n);return`${this.titleStr} ${r}`}generateRuleErrorMessage(e,t){var n,r;return e.operator?`${this.localeService.t(A[e.operator]).replace(N,(n=e.formula1)==null?``:n).replace(P,(r=e.formula2)==null?``:r)}`:this.localeService.t(A.NONE).replace(F,this.titleStr)}getExtraStyle(e,t,n,r,i){}getRuleFinalError(e,t){return e.showErrorMessage&&e.error?e.error:this.generateRuleErrorMessage(e,t)}isEmptyCellValue(e){return e===``||e==null}normalizeFormula(e,t,n){return{formula1:e.formula1,formula2:e.formula2}}async isValidType(e,t,n){return!0}transform(e,t,n){return e}async validatorIsEqual(e,t,n){let{formula1:r}=t,{value:i}=e;return Number.isNaN(r)?!0:i===r}async validatorIsNotEqual(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value!==r}async validatorIsBetween(e,t,n){let{formula1:r,formula2:i}=t;if(Number.isNaN(r)||Number.isNaN(i))return!0;let a=Math.min(r,i),o=Math.max(r,i);return e.value>=a&&e.value<=o}async validatorIsNotBetween(e,t,n){let{formula1:r,formula2:i}=t;if(Number.isNaN(r)||Number.isNaN(i))return!0;let a=Math.min(r,i),o=Math.max(r,i);return e.value<a||e.value>o}async validatorIsGreaterThan(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value>r}async validatorIsGreaterThanOrEqual(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value>=r}async validatorIsLessThan(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value<r}async validatorIsLessThanOrEqual(e,t,n){let{formula1:r}=t;return Number.isNaN(r)?!0:e.value<=r}async validator(e,n){let{value:r,unitId:i,subUnitId:a}=e,o=this.isEmptyCellValue(r),{allowBlank:s=!0,operator:c}=n;if(o)return s;let l=await this.parseFormula(n,i,a,e.row,e.column);if(!l.isFormulaValid||!await this.isValidType(e,l,n))return!1;if(!c)return!0;let u=this.transform(e,l,n);switch(c){case t.DataValidationOperator.BETWEEN:return this.validatorIsBetween(u,l,n);case t.DataValidationOperator.EQUAL:return this.validatorIsEqual(u,l,n);case t.DataValidationOperator.GREATER_THAN:return this.validatorIsGreaterThan(u,l,n);case t.DataValidationOperator.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(u,l,n);case t.DataValidationOperator.LESS_THAN:return this.validatorIsLessThan(u,l,n);case t.DataValidationOperator.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(u,l,n);case t.DataValidationOperator.NOT_BETWEEN:return this.validatorIsNotBetween(u,l,n);case t.DataValidationOperator.NOT_EQUAL:return this.validatorIsNotEqual(u,l,n);default:throw Error(`Unknown operator.`)}}};R=d([u(0,(0,t.Inject)(t.LocaleService)),u(1,(0,t.Inject)(t.Injector))],R),e.AddDataValidationMutation=p,Object.defineProperty(e,`BaseDataValidator`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(e,`DataValidationModel`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(e,`DataValidationResourceController`,{enumerable:!0,get:function(){return g}}),e.DataValidatorDropdownType=L,e.DataValidatorRegistryScope=y,e.DataValidatorRegistryService=b,e.FORMULA1=N,e.FORMULA2=P,e.RemoveDataValidationMutation=m,e.TWO_FORMULA_OPERATOR_COUNT=M,e.TYPE=F,e.TextLengthErrorTitleMap=j,Object.defineProperty(e,`UniverDataValidationPlugin`,{enumerable:!0,get:function(){return O}}),e.UpdateDataValidationMutation=h,e.UpdateRuleType=a,e.getRuleOptions=i,e.getRuleSetting=r});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@univerjs/data-validation",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.20.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Data validation library for Univer",
|
|
6
6
|
"author": "DreamNum <developer@univer.ai>",
|
|
@@ -48,15 +48,15 @@
|
|
|
48
48
|
"rxjs": ">=7.0.0"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@univerjs/core": "0.
|
|
51
|
+
"@univerjs/core": "0.20.0"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@univerjs/protocol": "0.1.48",
|
|
55
55
|
"rxjs": "^7.8.2",
|
|
56
56
|
"typescript": "^6.0.2",
|
|
57
57
|
"vitest": "^4.1.1",
|
|
58
|
-
"@univerjs/
|
|
59
|
-
"@univerjs
|
|
58
|
+
"@univerjs-infra/shared": "0.20.0",
|
|
59
|
+
"@univerjs/sheets": "0.20.0"
|
|
60
60
|
},
|
|
61
61
|
"scripts": {
|
|
62
62
|
"dev": "vite",
|