Skip to content

Commit

Permalink
fix(sheet): save edit content when select other tab (#2160)
Browse files Browse the repository at this point in the history
* fix(sheet): save edit content when select other tab

* fix(formula): function params error check

* fix(formula): add minParams and maxParams for all functions

* fix(formula): test case and type error

* fix(formula): string calculation min, max get 0,switch tab to save value

* test(formula): min max function
  • Loading branch information
Dushusir committed May 10, 2024
1 parent ae3e014 commit 3e02de5
Show file tree
Hide file tree
Showing 88 changed files with 555 additions and 355 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -534,6 +534,11 @@ export class NumberValueObject extends BaseValueObject {
return ErrorValueObject.create(ErrorType.NUM);
}

// Parameters in MOD caused an out of range error. Namely, the error occurs when the following is true: (divisor * 1125900000000) is less than or equal to dividend.
if (Math.abs(value) * 1125900000000 <= Math.abs(currentValue)) {
return ErrorValueObject.create(ErrorType.NUM);
}

const result = mod(currentValue, value);

if (!Number.isFinite(result)) {
Expand Down
8 changes: 4 additions & 4 deletions packages/engine-formula/src/functions/date/date/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,11 @@ import { NullValueObject, NumberValueObject } from '../../../engine/value-object
import { BaseFunction } from '../../base-function';

export class DateFunction extends BaseFunction {
override calculate(year: BaseValueObject, month: BaseValueObject, day: BaseValueObject) {
if (year == null || month == null || day == null) {
return ErrorValueObject.create(ErrorType.NA);
}
override minParams = 3;

override maxParams = 3;

override calculate(year: BaseValueObject, month: BaseValueObject, day: BaseValueObject) {
if (year.isError()) {
return year;
}
Expand Down
8 changes: 4 additions & 4 deletions packages/engine-formula/src/functions/date/day/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ import { NumberValueObject } from '../../../engine/value-object/primitive-object
import { BaseFunction } from '../../base-function';

export class Day extends BaseFunction {
override calculate(serialNumber: BaseValueObject) {
if (serialNumber == null) {
return ErrorValueObject.create(ErrorType.NA);
}
override minParams = 1;

override maxParams = 1;

override calculate(serialNumber: BaseValueObject) {
if (serialNumber.isArray()) {
return serialNumber.map((serialNumberObject) => this._handleSingleObject(serialNumberObject));
}
Expand Down
8 changes: 4 additions & 4 deletions packages/engine-formula/src/functions/date/edate/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@ import { BaseFunction } from '../../base-function';
* TODO@Dushusir: support plaine text date: =EDATE("2020-1-1",1), =EDATE("2020/1/1",1) and other formats
*/
export class Edate extends BaseFunction {
override calculate(startDate: BaseValueObject, months: BaseValueObject) {
if (startDate == null || months == null) {
return ErrorValueObject.create(ErrorType.NA);
}
override minParams = 2;

override maxParams = 2;

override calculate(startDate: BaseValueObject, months: BaseValueObject) {
if (startDate.isError()) {
return startDate;
}
Expand Down
8 changes: 4 additions & 4 deletions packages/engine-formula/src/functions/date/month/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ import { NumberValueObject } from '../../../engine/value-object/primitive-object
import { BaseFunction } from '../../base-function';

export class Month extends BaseFunction {
override calculate(serialNumber: BaseValueObject) {
if (serialNumber == null) {
return ErrorValueObject.create(ErrorType.NA);
}
override minParams = 1;

override maxParams = 1;

override calculate(serialNumber: BaseValueObject) {
if (serialNumber.isArray()) {
return serialNumber.map((serialNumberObject) => this._handleSingleObject(serialNumberObject));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@ import { describe, expect, it, vi } from 'vitest';

import { FUNCTION_NAMES_DATE } from '../../function-names';
import { Today } from '../index';
import { NumberValueObject } from '../../../../engine/value-object/primitive-object';
import { ErrorType } from '../../../../basics/error-type';

// mock new Date() use V
const _Date = Date;
Expand All @@ -44,10 +42,5 @@ describe('Test today function', () => {
const result = textFunction.calculate();
expect(result.getValue()).toBe(43831);
});

it('Set a parameter', () => {
const result = textFunction.calculate(NumberValueObject.create(1));
expect(result.getValue()).toBe(ErrorType.NA);
});
});
});
10 changes: 4 additions & 6 deletions packages/engine-formula/src/functions/date/today/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,16 @@
*/

import { DEFAULT_DATE_FORMAT, excelDateSerial } from '../../../basics/date';
import { ErrorType } from '../../../basics/error-type';
import type { BaseValueObject } from '../../../engine/value-object/base-value-object';
import { ErrorValueObject } from '../../../engine/value-object/base-value-object';
import { NumberValueObject } from '../../../engine/value-object/primitive-object';
import { BaseFunction } from '../../base-function';

export class Today extends BaseFunction {
override calculate(value?: BaseValueObject) {
if (value) {
return ErrorValueObject.create(ErrorType.NA);
}
override minParams = 0;

override maxParams = 0;

override calculate(value?: BaseValueObject) {
const currentSerial = excelDateSerial(new Date());
const valueObject = NumberValueObject.create(currentSerial);
valueObject.setPattern(DEFAULT_DATE_FORMAT);
Expand Down
8 changes: 4 additions & 4 deletions packages/engine-formula/src/functions/date/year/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ import { NumberValueObject } from '../../../engine/value-object/primitive-object
import { BaseFunction } from '../../base-function';

export class Year extends BaseFunction {
override calculate(serialNumber: BaseValueObject) {
if (serialNumber == null) {
return ErrorValueObject.create(ErrorType.NA);
}
override minParams = 1;

override maxParams = 1;

override calculate(serialNumber: BaseValueObject) {
if (serialNumber.isArray()) {
return serialNumber.map((serialNumberObject) => this._handleSingleObject(serialNumberObject));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,17 @@
* limitations under the License.
*/

import { ErrorType } from '../../../basics/error-type';
import type { ArrayValueObject } from '../../../engine/value-object/array-value-object';
import { type BaseValueObject, ErrorValueObject } from '../../../engine/value-object/base-value-object';
import type { BaseValueObject } from '../../../engine/value-object/base-value-object';
import { BooleanValueObject } from '../../../engine/value-object/primitive-object';
import { BaseFunction } from '../../base-function';

export class Isblank extends BaseFunction {
override calculate(value: BaseValueObject) {
if (value == null) {
return ErrorValueObject.create(ErrorType.NA);
}
override minParams = 1;

override maxParams = 1;

override calculate(value: BaseValueObject) {
if (value.isNull()) {
return BooleanValueObject.create(true);
} else if (value.isArray()) {
Expand Down
10 changes: 5 additions & 5 deletions packages/engine-formula/src/functions/information/iserr/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,16 @@

import { ErrorType } from '../../../basics/error-type';
import type { ArrayValueObject } from '../../../engine/value-object/array-value-object';
import { type BaseValueObject, ErrorValueObject } from '../../../engine/value-object/base-value-object';
import type { BaseValueObject } from '../../../engine/value-object/base-value-object';
import { BooleanValueObject } from '../../../engine/value-object/primitive-object';
import { BaseFunction } from '../../base-function';

export class Iserr extends BaseFunction {
override calculate(value: BaseValueObject) {
if (value == null) {
return ErrorValueObject.create(ErrorType.NA);
}
override minParams = 1;

override maxParams = 1;

override calculate(value: BaseValueObject) {
if (value.getValue() === ErrorType.NA) {
return BooleanValueObject.create(false);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,17 @@
* limitations under the License.
*/

import { ErrorType } from '../../../basics/error-type';
import type { ArrayValueObject } from '../../../engine/value-object/array-value-object';
import { type BaseValueObject, ErrorValueObject } from '../../../engine/value-object/base-value-object';
import type { BaseValueObject } from '../../../engine/value-object/base-value-object';
import { BooleanValueObject } from '../../../engine/value-object/primitive-object';
import { BaseFunction } from '../../base-function';

export class Iserror extends BaseFunction {
override calculate(value: BaseValueObject) {
if (value == null) {
return ErrorValueObject.create(ErrorType.NA);
}
override minParams = 1;

override maxParams = 1;

override calculate(value: BaseValueObject) {
if (value.isError()) {
return BooleanValueObject.create(true);
} else if (value.isArray()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@

import { describe, expect, it } from 'vitest';

import { FUNCTION_NAMES_INFORMATION } from '../function-names';
import { BooleanValueObject, NumberValueObject, StringValueObject } from '../../../engine/value-object/primitive-object';
import { ErrorType } from '../../../basics/error-type';
import { ArrayValueObject } from '../../../engine/value-object/array-value-object';
import { Iseven } from './iseven';
import { FUNCTION_NAMES_INFORMATION } from '../../function-names';
import { BooleanValueObject, NumberValueObject, StringValueObject } from '../../../../engine/value-object/primitive-object';
import { ErrorType } from '../../../../basics/error-type';
import { ArrayValueObject } from '../../../../engine/value-object/array-value-object';
import { Iseven } from '../iseven';

describe('Test iseven function', () => {
const testFunction = new Iseven(FUNCTION_NAMES_INFORMATION.ISEVEN);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,11 @@ import { BooleanValueObject } from '../../../engine/value-object/primitive-objec
import { BaseFunction } from '../../base-function';

export class Iseven extends BaseFunction {
override calculate(value: BaseValueObject) {
if (value == null) {
return ErrorValueObject.create(ErrorType.NA);
}
override minParams = 1;

override maxParams = 1;

override calculate(value: BaseValueObject) {
if (value.isArray() || value.isBoolean()) {
return ErrorValueObject.create(ErrorType.VALUE);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,17 @@
* limitations under the License.
*/

import { ErrorType } from '../../../basics/error-type';
import type { ArrayValueObject } from '../../../engine/value-object/array-value-object';
import { type BaseValueObject, ErrorValueObject } from '../../../engine/value-object/base-value-object';
import type { BaseValueObject } from '../../../engine/value-object/base-value-object';
import { BooleanValueObject } from '../../../engine/value-object/primitive-object';
import { BaseFunction } from '../../base-function';

export class Islogical extends BaseFunction {
override calculate(value: BaseValueObject) {
if (value == null) {
return ErrorValueObject.create(ErrorType.NA);
}
override minParams = 1;

override maxParams = 1;

override calculate(value: BaseValueObject) {
if (value.isBoolean()) {
return BooleanValueObject.create(true);
} else if (value.isArray()) {
Expand Down
10 changes: 5 additions & 5 deletions packages/engine-formula/src/functions/information/isna/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,16 @@

import { ErrorType } from '../../../basics/error-type';
import type { ArrayValueObject } from '../../../engine/value-object/array-value-object';
import { type BaseValueObject, ErrorValueObject } from '../../../engine/value-object/base-value-object';
import type { BaseValueObject } from '../../../engine/value-object/base-value-object';
import { BooleanValueObject } from '../../../engine/value-object/primitive-object';
import { BaseFunction } from '../../base-function';

export class Isna extends BaseFunction {
override calculate(value: BaseValueObject) {
if (value == null) {
return ErrorValueObject.create(ErrorType.NA);
}
override minParams = 1;

override maxParams = 1;

override calculate(value: BaseValueObject) {
if (value.getValue() === ErrorType.NA) {
return BooleanValueObject.create(true);
} else if (value.isArray()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,17 @@
* limitations under the License.
*/

import { ErrorType } from '../../../basics/error-type';
import type { ArrayValueObject } from '../../../engine/value-object/array-value-object';
import { type BaseValueObject, ErrorValueObject } from '../../../engine/value-object/base-value-object';
import type { BaseValueObject } from '../../../engine/value-object/base-value-object';
import { BooleanValueObject } from '../../../engine/value-object/primitive-object';
import { BaseFunction } from '../../base-function';

export class Isnontext extends BaseFunction {
override calculate(value: BaseValueObject) {
if (value == null) {
return ErrorValueObject.create(ErrorType.NA);
}
override minParams = 1;

override maxParams = 1;

override calculate(value: BaseValueObject) {
if (!value.isArray() && !value.isString()) {
return BooleanValueObject.create(true);
} else if (value.isArray()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,17 @@
* limitations under the License.
*/

import { ErrorType } from '../../../basics/error-type';
import type { ArrayValueObject } from '../../../engine/value-object/array-value-object';
import { type BaseValueObject, ErrorValueObject } from '../../../engine/value-object/base-value-object';
import type { BaseValueObject } from '../../../engine/value-object/base-value-object';
import { BooleanValueObject } from '../../../engine/value-object/primitive-object';
import { BaseFunction } from '../../base-function';

export class Isnumber extends BaseFunction {
override calculate(value: BaseValueObject) {
if (value == null) {
return ErrorValueObject.create(ErrorType.NA);
}
override minParams = 1;

override maxParams = 1;

override calculate(value: BaseValueObject) {
if (value.isNumber()) {
return BooleanValueObject.create(true);
} else if (value.isArray()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@
*/

import { describe, expect, it } from 'vitest';
import { FUNCTION_NAMES_INFORMATION } from '../function-names';
import { FUNCTION_NAMES_INFORMATION } from '../../function-names';

import { BooleanValueObject, NumberValueObject, StringValueObject } from '../../../engine/value-object/primitive-object';
import { ErrorType } from '../../../basics/error-type';
import { ArrayValueObject } from '../../../engine/value-object/array-value-object';
import { Isodd } from './isodd';
import { BooleanValueObject, NumberValueObject, StringValueObject } from '../../../../engine/value-object/primitive-object';
import { ErrorType } from '../../../../basics/error-type';
import { ArrayValueObject } from '../../../../engine/value-object/array-value-object';
import { Isodd } from '../isodd';


describe('Test isodd function', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,11 @@ import { BooleanValueObject } from '../../../engine/value-object/primitive-objec
import { BaseFunction } from '../../base-function';

export class Isodd extends BaseFunction {
override calculate(value: BaseValueObject) {
if (value == null) {
return ErrorValueObject.create(ErrorType.NA);
}
override minParams = 1;

override maxParams = 1;

override calculate(value: BaseValueObject) {
if (value.isArray() || value.isBoolean()) {
return ErrorValueObject.create(ErrorType.VALUE);
}
Expand Down
11 changes: 5 additions & 6 deletions packages/engine-formula/src/functions/information/isref/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,18 @@
* limitations under the License.
*/

import { ErrorType } from '../../../basics/error-type';
import { type BaseValueObject, ErrorValueObject } from '../../../engine/value-object/base-value-object';
import type { BaseValueObject } from '../../../engine/value-object/base-value-object';
import { BooleanValueObject } from '../../../engine/value-object/primitive-object';
import { BaseFunction } from '../../base-function';

export class Isref extends BaseFunction {
override minParams = 1;

override maxParams = 1;

override needsReferenceObject = true;

override calculate(value: BaseValueObject) {
if (value == null) {
return ErrorValueObject.create(ErrorType.NA);
}

if (value.isReferenceObject()) {
return BooleanValueObject.create(true);
}
Expand Down

0 comments on commit 3e02de5

Please sign in to comment.