@omegagrid/grid-core 0.11.32 → 0.11.34
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/dist/calculations/context.d.ts.map +1 -1
- package/dist/calculations/context.js +6 -5
- package/dist/calculations/context.js.map +1 -1
- package/dist/calculations/functions/dates.d.ts.map +1 -1
- package/dist/calculations/functions/dates.js +4 -4
- package/dist/calculations/functions/dates.js.map +1 -1
- package/dist/calculations/functions/lookup.d.ts.map +1 -1
- package/dist/calculations/functions/lookup.js +2 -1
- package/dist/calculations/functions/lookup.js.map +1 -1
- package/dist/calculations/index.d.ts +1 -0
- package/dist/calculations/index.d.ts.map +1 -1
- package/dist/calculations/index.js +1 -0
- package/dist/calculations/index.js.map +1 -1
- package/dist/calculations/values.d.ts +6 -0
- package/dist/calculations/values.d.ts.map +1 -0
- package/dist/calculations/values.js +14 -0
- package/dist/calculations/values.js.map +1 -0
- package/dist/model/cellModel.d.ts +9 -0
- package/dist/model/cellModel.d.ts.map +1 -1
- package/dist/model/cellModel.js +81 -17
- package/dist/model/cellModel.js.map +1 -1
- package/dist/model/dateFilter.d.ts +28 -0
- package/dist/model/dateFilter.d.ts.map +1 -0
- package/dist/model/dateFilter.js +221 -0
- package/dist/model/dateFilter.js.map +1 -0
- package/dist/model/filterModel.d.ts +1 -4
- package/dist/model/filterModel.d.ts.map +1 -1
- package/dist/model/filterModel.js +8 -39
- package/dist/model/filterModel.js.map +1 -1
- package/dist/model/index.d.ts +1 -0
- package/dist/model/index.d.ts.map +1 -1
- package/dist/model/index.js +1 -0
- package/dist/model/index.js.map +1 -1
- package/dist/model/options.d.ts +15 -0
- package/dist/model/options.d.ts.map +1 -1
- package/dist/model/options.js +18 -0
- package/dist/model/options.js.map +1 -1
- package/dist/model/rowModel.d.ts.map +1 -1
- package/dist/model/rowModel.js +4 -3
- package/dist/model/rowModel.js.map +1 -1
- package/dist/model/validations.d.ts +3 -0
- package/dist/model/validations.d.ts.map +1 -1
- package/dist/model/validations.js +10 -5
- package/dist/model/validations.js.map +1 -1
- package/dist/types.d.ts +17 -11
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/calculations/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAa,YAAY,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAmB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/calculations/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAa,YAAY,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAmB,MAAM,aAAa,CAAC;AAGxD,qBAAa,kBAAkB;aAIF,KAAK,EAAE,SAAS;IAF5C,WAAW,EAAE,SAAS,CAAC;gBAEK,KAAK,EAAE,SAAS;IAE5C,QAAQ,GAAI,OAAO,MAAM,eAIxB;IAED;;;;;OAKG;IACH,EAAE,GAAI,KAAK,YAAY,EAAE,QAAQ,MAAM,KAAG,OAAO,CAY/C;IAEF;;;;;OAKG;IACH,EAAE,GAAI,IAAI,YAAY,EAAE,QAAQ,MAAM,qBAGrC;IAED;;;;;OAKG;IACH,EAAE,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,OAAO,CAE1C;IAEF;;;;;OAKG;IACH,EAAE,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,OAAO,CAK1C;IAEF;;;;OAIG;IACH,EAAE,GAAI,MAAM,MAAM,kCAIhB;IAEF;;;;;;OAMG;IACH,EAAE,GAAI,UAAU,MAAM,EAAE,UAAU,MAAM,EAAE,UAAU,QAAQ,KAAG,MAAM,CAEpE;CACD"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { CellRange } from "../common";
|
|
2
2
|
import { _map } from "./functions";
|
|
3
3
|
import { matrixOperation } from "./operators";
|
|
4
|
+
import { calculationMatrix, calculationValue } from "./values";
|
|
4
5
|
export class CalculationContext {
|
|
5
6
|
constructor(model) {
|
|
6
7
|
this.model = model;
|
|
@@ -19,13 +20,13 @@ export class CalculationContext {
|
|
|
19
20
|
this.cl = (a1, sheet) => {
|
|
20
21
|
const m = this.getModel(sheet);
|
|
21
22
|
if (a1 == null)
|
|
22
|
-
return this.currentCell.value;
|
|
23
|
+
return calculationValue(this.currentCell.value);
|
|
23
24
|
const cell = m.getCellByA1(a1);
|
|
24
25
|
if (!cell) {
|
|
25
26
|
this.currentCell.error = { message: `undefined cell ${a1}` };
|
|
26
27
|
return null;
|
|
27
28
|
}
|
|
28
|
-
return cell.value;
|
|
29
|
+
return calculationValue(cell.value);
|
|
29
30
|
};
|
|
30
31
|
/**
|
|
31
32
|
* Returns range value matrix
|
|
@@ -35,7 +36,7 @@ export class CalculationContext {
|
|
|
35
36
|
*/
|
|
36
37
|
this.rn = (a1, sheet) => {
|
|
37
38
|
const m = this.getModel(sheet);
|
|
38
|
-
return m.getValuesInRange(CellRange.fromA1(a1));
|
|
39
|
+
return calculationMatrix(m.getValuesInRange(CellRange.fromA1(a1)));
|
|
39
40
|
};
|
|
40
41
|
/**
|
|
41
42
|
* Returns cell value by range name
|
|
@@ -44,7 +45,7 @@ export class CalculationContext {
|
|
|
44
45
|
* @returns cell value
|
|
45
46
|
*/
|
|
46
47
|
this.nv = (name, sheet) => {
|
|
47
|
-
return this.getModel(sheet).getCellByName(name, this.currentCell.range).value;
|
|
48
|
+
return calculationValue(this.getModel(sheet).getCellByName(name, this.currentCell.range).value);
|
|
48
49
|
};
|
|
49
50
|
/**
|
|
50
51
|
* Returns cell value matrix for named range
|
|
@@ -54,7 +55,7 @@ export class CalculationContext {
|
|
|
54
55
|
*/
|
|
55
56
|
this.nr = (name, sheet) => {
|
|
56
57
|
const m = this.getModel(sheet);
|
|
57
|
-
const matrix = m.getValueMatrixByName(name);
|
|
58
|
+
const matrix = calculationMatrix(m.getValueMatrixByName(name));
|
|
58
59
|
if (matrix.length === 1 && matrix[0].length === 1)
|
|
59
60
|
return matrix[0][0];
|
|
60
61
|
return matrix;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/calculations/context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAgB,MAAM,WAAW,CAAC;AAEpD,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAY,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/calculations/context.ts"],"names":[],"mappings":"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","sourcesContent":["import { Matrix } from \"@omegagrid/core\";\nimport { CellRange, RangeAddress } from \"../common\";\nimport { CellModel, GridModel } from \"../model\";\nimport { _map } from \"./functions\";\nimport { Operator, matrixOperation } from \"./operators\";\nimport { calculationMatrix, calculationValue } from \"./values\";\n\nexport class CalculationContext {\n\n\tcurrentCell: CellModel;\n\n\tconstructor(public readonly model: GridModel) { }\n\n\tgetModel = (sheet: string) => {\n\t\tconst m = sheet ? this.model.getConnectedModel(sheet) : this.model;\n\t\tif (m) return m;\n\t\tthrow new Error(`Sheet \"${sheet}\" not found`)\n\t}\n\n\t/**\n\t * Returns cell value\n\t * @param a1 cell addres\n\t * @param sheet sheet name\n\t * @returns cell value\n\t */\n\tcl = (a1?: RangeAddress, sheet?: string): unknown => {\n\t\tconst m = this.getModel(sheet);\n\t\tif (a1 == null) return calculationValue(this.currentCell.value);\n\n\t\tconst cell = m.getCellByA1(a1);\n\n\t\tif (!cell) {\n\t\t\tthis.currentCell.error = {message: `undefined cell ${a1}`};\n\t\t\treturn null;\n\t\t}\n\n\t\treturn calculationValue(cell.value);\n\t};\n\n\t/**\n\t * Returns range value matrix\n\t * @param a1 cell addres\n\t * @param sheet sheet name\n\t * @returns cell value matrix\n\t */\n\trn = (a1: RangeAddress, sheet?: string) => {\n\t\tconst m = this.getModel(sheet);\n\t\treturn calculationMatrix(m.getValuesInRange(CellRange.fromA1(a1)));\n\t}\n\t\n\t/**\n\t * Returns cell value by range name\n\t * @param name range (cell) name\n\t * @param sheet sheet name\n\t * @returns cell value\n\t */\n\tnv = (name: string, sheet?: string): unknown => {\n\t\treturn calculationValue(this.getModel(sheet).getCellByName(name, this.currentCell.range).value);\n\t};\n\n\t/**\n\t * Returns cell value matrix for named range\n\t * @param a1 range address\n\t * @param sheet sheet name\n\t * @returns cell value matrix\n\t */\n\tnr = (name: string, sheet?: string): unknown => {\n\t\tconst m = this.getModel(sheet);\n\t\tconst matrix = calculationMatrix(m.getValueMatrixByName(name));\n\t\tif (matrix.length === 1 && matrix[0].length === 1) return matrix[0][0];\n\t\treturn matrix;\n\t};\n\n\t/**\n\t * returns formula function\n\t * @param name function name\n\t * @returns \n\t */\n\tfn = (name: string) => {\n\t\tconst fn = _map.get(name);\n\t\tif (fn) return fn;\n\t\tthrow new Error(`Function \"${name}\" not found`);\n\t};\n\n\t/**\n\t * Performs matrix operation\n\t * @param operand1\n\t * @param operand2\n\t * @param operator\n\t * @return value\n\t */\n\top = (operand1: Matrix, operand2: Matrix, operator: Operator): Matrix => {\n\t\treturn matrixOperation(operand1, operand2, operator);\n\t}\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../../../src/calculations/functions/dates.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,OAAO,EAAU,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../../../src/calculations/functions/dates.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,OAAO,EAAU,MAAM,YAAY,CAAC;AAgBlD,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GACe,MAAM,CAC3D;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,UAOvD;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,UAE5E;AAED,wBAAgB,KAAK,WAEpB;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,GAAG,WAGjC;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,UAE5D;AAED,wBAAgB,IAAI,CAAC,EAAE,EAAE,OAAO,UAE/B;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,OAAO,UAEhC;AAED,wBAAgB,GAAG,CAAC,EAAE,EAAE,OAAO,UAE9B;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,UAIlD;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,OAAO,UAErC"}
|
|
@@ -3,9 +3,10 @@ import { scalar } from "../helpers";
|
|
|
3
3
|
import { getISOWeek, startOfDay } from "date-fns";
|
|
4
4
|
import { getLocale } from "@omegagrid/localize";
|
|
5
5
|
import { utils } from "@omegagrid/core";
|
|
6
|
+
// a Date is copied: the Date of a cell must not change with the computation
|
|
6
7
|
function toDate(d) {
|
|
7
8
|
if (d instanceof Date)
|
|
8
|
-
return d;
|
|
9
|
+
return new Date(d.getTime());
|
|
9
10
|
return utils.isString(d) ? dates.parse(d, getLocale()) : dates.serialDateToDate(d);
|
|
10
11
|
}
|
|
11
12
|
function toSN(d) {
|
|
@@ -48,9 +49,8 @@ export function day(sn) {
|
|
|
48
49
|
}
|
|
49
50
|
export function eomonth(sn, months) {
|
|
50
51
|
const d = toDate(sn);
|
|
51
|
-
|
|
52
|
-
d.
|
|
53
|
-
return dates.dateToSerialDate(d);
|
|
52
|
+
// the day 0 of the month after the target one is the last day of the target month
|
|
53
|
+
return dates.dateToSerialDate(new Date(d.getFullYear(), d.getMonth() + months + 1, 0));
|
|
54
54
|
}
|
|
55
55
|
export function isoweeknum(sn) {
|
|
56
56
|
return getISOWeek(toDate(sn));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dates.js","sourceRoot":"","sources":["../../../src/calculations/functions/dates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAgB,MAAM,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,SAAS,MAAM,CAAC,CAAU;IACzB,IAAI,CAAC,YAAY,IAAI;QAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"dates.js","sourceRoot":"","sources":["../../../src/calculations/functions/dates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAgB,MAAM,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,4EAA4E;AAC5E,SAAS,MAAM,CAAC,CAAU;IACzB,IAAI,CAAC,YAAY,IAAI;QAAE,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACpD,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAW,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAW,CAAC,CAAC;AACxG,CAAC;AAED,SAAS,IAAI,CAAC,CAAU;IACvB,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,CAAW,CAAC;IAC1C,OAAO,KAAK,CAAC,gBAAgB,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAW,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;AAC7F,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAa;IACtC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAW,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,EAAW,EAAE,UAAmB;IACvD,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IAC9B,QAAQ,UAAU,EAAE,CAAC;QACpB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACjB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;IAClC,CAAC;AACF,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,EAAgB,EAAE,KAAa,EAAE,SAAoB;IAC5E,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,KAAK;IACpB,OAAO,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAU;IACjC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACtB,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,IAAY,EAAE,KAAa,EAAE,GAAW;IAC5D,OAAO,KAAK,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,EAAW;IAC/B,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EAAW;IAChC,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,EAAW;IAC9B,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,EAAW,EAAE,MAAc;IAClD,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IACrB,kFAAkF;IAClF,OAAO,KAAK,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAW;IACrC,OAAO,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,CAAC","sourcesContent":["import { dates } from \"@omegagrid/core\";\nimport { Arg, DateArg, scalar } from \"../helpers\";\nimport { getISOWeek, startOfDay } from \"date-fns\";\nimport { getLocale } from \"@omegagrid/localize\";\nimport { utils } from \"@omegagrid/core\";\n\n// a Date is copied: the Date of a cell must not change with the computation\nfunction toDate(d: DateArg) : Date{\n\tif (d instanceof Date) return new Date(d.getTime());\n\treturn utils.isString(d) ? dates.parse(d as string, getLocale()) : dates.serialDateToDate(d as number);\n}\n\nfunction toSN(d: DateArg) : number {\n\tif (utils.isNumber(d)) return d as number;\n\treturn dates.dateToSerialDate(d instanceof Date ? d : dates.parse(d as string, getLocale()))\n}\n\nexport function datevalue(date: DateArg) {\n\treturn (utils.isString(date) ? toSN(date) : date) as number;\n}\n\nexport function weekday(sn: DateArg, returnType?: number) {\n\tconst d = toDate(sn).getDay();\n\tswitch (returnType) {\n\t\tcase 2: return d;\n\t\tcase 3: return d - 1;\n\t\tdefault: return (d % 7) + 1; // 1\n\t}\n}\n\nexport function workday(sn: Arg<DateArg>, count: number, _holidays?: number[]) {\n\treturn dates.workday(toSN(scalar(sn)), count);\n}\n\nexport function today() {\n\treturn dates.dateToSerialDate(startOfDay(new Date()));\n}\n\nexport function isBlank(value: Arg) {\n\tvalue = scalar(value);\n\treturn value == null || value === '';\n}\n\nexport function date(year: number, month: number, day: number) {\n\treturn dates.dateToSerialDate(new Date(year, month - 1, day));\n}\n\nexport function year(sn: DateArg) {\n\treturn toDate(sn).getFullYear();\n}\n\nexport function month(sn: DateArg) {\n\treturn toDate(sn).getMonth() + 1;\n}\n\nexport function day(sn: DateArg) {\n\treturn toDate(sn).getDate();\n}\n\nexport function eomonth(sn: DateArg, months: number) {\n\tconst d = toDate(sn);\n\t// the day 0 of the month after the target one is the last day of the target month\n\treturn dates.dateToSerialDate(new Date(d.getFullYear(), d.getMonth() + months + 1, 0));\n}\n\nexport function isoweeknum(sn: DateArg) {\n\treturn getISOWeek(toDate(sn));\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lookup.d.ts","sourceRoot":"","sources":["../../../src/calculations/functions/lookup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzC,OAAO,EAAE,QAAQ,EAA8B,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"lookup.d.ts","sourceRoot":"","sources":["../../../src/calculations/functions/lookup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzC,OAAO,EAAE,QAAQ,EAA8B,MAAM,YAAY,CAAC;AAalE,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,SAAI,UAK5D;AAED,wBAAgB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,UAAQ,UAW7G;AAED,wBAAgB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,UAAQ,UAW7G;AAkDD,wBAAgB,OAAO,CACtB,WAAW,EAAE,OAAO,EACpB,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,EAC5B,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,EAC5B,UAAU,GAAE,OAAc,EAC1B,SAAS,SAAI,EACb,UAAU,SAAI,WASd;AAED,wBAAgB,MAAM,CACrB,WAAW,EAAE,OAAO,EACpB,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,EAC5B,SAAS,SAAI,EACb,UAAU,SAAI,UAKd;AAED,wBAAgB,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,WAYvG;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,QAAQ,WAUtD;AAED,wBAAgB,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,UAEtC;AAED,wBAAgB,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,UAEnC;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,QAAQ,UAEtC;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,QAAQ,UAEnC;AAED,wBAAgB,WAAW,WAG1B;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,6DAMjE;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,WAwBnC;AAED,wBAAgB,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS,SAAI,UAU/E;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,aAcnG;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAiBtD"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { prefixFormula } from "..";
|
|
2
2
|
import { CellRange } from "../../common";
|
|
3
3
|
import { eachValue, getFormulaCells } from "../helpers";
|
|
4
|
+
import { calculationValue } from "../values";
|
|
4
5
|
function getStringMatcher(searchValue, exactMatch) {
|
|
5
6
|
searchValue = searchValue == null ? '' : searchValue.toString();
|
|
6
7
|
if (exactMatch) {
|
|
@@ -183,7 +184,7 @@ export function indirect(ref) {
|
|
|
183
184
|
model.calculations.dependencies.cellDependants.set(targetCell.address, map);
|
|
184
185
|
}
|
|
185
186
|
map.set(currentCell.address, [currentCell.range]);
|
|
186
|
-
return targetCell.value;
|
|
187
|
+
return calculationValue(targetCell.value);
|
|
187
188
|
}
|
|
188
189
|
export function match(matchValue, range, matchType = 0) {
|
|
189
190
|
let r, c;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../../src/calculations/functions/lookup.ts"],"names":[],"mappings":"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","sourcesContent":["import { Matrix } from \"@omegagrid/core\";\nimport { FormulaContext, prefixFormula } from \"..\";\nimport { CellRange } from \"../../common\";\nimport { ArrayArg, eachValue, getFormulaCells } from \"../helpers\";\n\nfunction getStringMatcher(searchValue: string, exactMatch: boolean): ((value: string) => boolean) {\n\tsearchValue = searchValue == null ? '' : searchValue.toString();\n\tif (exactMatch) {\n\t\treturn (value: string) => value == searchValue;\t\n\t} else {\n\t\tsearchValue = searchValue.toLowerCase();\n\t\treturn (value: string) => (value ?? '').toString().toLowerCase() == searchValue;\n\t}\n}\n\nexport function address(row: number, column: number, mode = 1) {\n\tconst range = new CellRange(Math.max((column || 0) - 1, 0), Math.max((row || 0) - 1, 0));\n\tif (mode == 1 || mode == 2) range.r1Anchor = true;\n\tif (mode == 1 || mode == 3) range.c1Anchor = true;\n\treturn range.A1;\n}\n\nexport function vlookup(lookupValue: string, lookupTable: Matrix<string>, colIndex: number, exactMatch = false) {\n\tlet r: number, c: number;\n\tconst match = getStringMatcher(lookupValue, exactMatch);\n\tfor (r = 0; r < lookupTable.length; r++) {\n\t\tfor (c = 0; c < lookupTable[r].length; c++) {\n\t\t\tif (match(lookupTable[r][c])) {\n\t\t\t\treturn lookupTable[r][colIndex - 1];\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function hlookup(lookupValue: string, lookupTable: Matrix<string>, rowIndex: number, exactMatch = false) {\n\tlet r: number, c: number;\n\tconst match = getStringMatcher(lookupValue, exactMatch);\n\tfor (r = 0; r < lookupTable.length; r++) {\n\t\tfor (c = 0; c < lookupTable[r].length; c++) {\n\t\t\tif (match(lookupTable[r][c])) {\n\t\t\t\treturn lookupTable[rowIndex - 1][c];\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction getWildcardMatcher(searchValue: string): ((value: unknown) => boolean) {\n\t// translate Excel wildcards: ? = any single char, * = any sequence, ~? / ~* / ~~ = literals\n\tlet pattern = '';\n\tconst s = searchValue == null ? '' : searchValue.toString();\n\tfor (let i = 0; i < s.length; i++) {\n\t\tconst ch = s[i];\n\t\tif (ch == '~' && i + 1 < s.length) pattern += s[++i].replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\t\telse if (ch == '?') pattern += '.';\n\t\telse if (ch == '*') pattern += '.*';\n\t\telse pattern += ch.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\t}\n\tconst regex = new RegExp('^' + pattern + '$', 'i');\n\treturn (value: unknown) => regex.test((value ?? '').toString());\n}\n\nfunction compareValues(a: unknown, b: unknown): number {\n\tif (typeof a == 'number' && typeof b == 'number') return a - b;\n\tconst sa = (a ?? '').toString().toLowerCase();\n\tconst sb = (b ?? '').toString().toLowerCase();\n\treturn sa < sb ? -1 : (sa > sb ? 1 : 0);\n}\n\n// searches a single row or column and returns the matched 0-based index, or -1\nfunction xsearch(lookupValue: unknown, values: unknown[], matchMode: number, searchMode: number): number {\n\tconst reverse = searchMode < 0;\n\tconst isMatch = matchMode == 2\n\t\t? getWildcardMatcher(lookupValue as string)\n\t\t: (value: unknown) => compareValues(value, lookupValue) == 0;\n\n\tlet bestIndex = -1;\n\tfor (let n = 0; n < values.length; n++) {\n\t\tconst i = reverse ? values.length - 1 - n : n;\n\t\tconst value = values[i];\n\t\tif (isMatch(value)) return i;\n\t\tif (matchMode == -1 && compareValues(value, lookupValue) < 0) {\n\t\t\tif (bestIndex < 0 || compareValues(value, values[bestIndex]) > 0) bestIndex = i;\n\t\t} else if (matchMode == 1 && compareValues(value, lookupValue) > 0) {\n\t\t\tif (bestIndex < 0 || compareValues(value, values[bestIndex]) < 0) bestIndex = i;\n\t\t}\n\t}\n\treturn bestIndex;\n}\n\n// lookup_array is expected to be a single row or a single column\nfunction isRowVector(lookupArray: Matrix<unknown>) {\n\treturn lookupArray.length == 1 && (lookupArray[0]?.length ?? 0) > 1;\n}\n\nexport function xlookup(\n\tlookupValue: unknown,\n\tlookupArray: Matrix<unknown>,\n\treturnArray: Matrix<unknown>,\n\tifNotFound: unknown = null,\n\tmatchMode = 0,\n\tsearchMode = 1\n) {\n\tconst isRow = isRowVector(lookupArray);\n\tconst values = isRow ? lookupArray[0] : lookupArray.map(row => row?.[0]);\n\tconst i = xsearch(lookupValue, values, matchMode, searchMode);\n\tif (i < 0) return ifNotFound;\n\tconst slice = isRow ? returnArray.map(row => row?.[i]) : returnArray[i];\n\tif (slice == null) return null;\n\treturn slice.length == 1 ? slice[0] : slice;\n}\n\nexport function xmatch(\n\tlookupValue: unknown,\n\tlookupArray: Matrix<unknown>,\n\tmatchMode = 0,\n\tsearchMode = 1\n) {\n\tconst values = isRowVector(lookupArray) ? lookupArray[0] : lookupArray.map(row => row?.[0]);\n\tconst i = xsearch(lookupValue, values, matchMode, searchMode);\n\treturn i < 0 ? null : i + 1;\n}\n\nexport function lookup(lookupValue: unknown, lookupTable: Matrix<unknown>, resultTable?: Matrix<unknown>) {\n\tlet r: number, c: number;\n\n\texit_loops:\n\tfor (r = 0; r < lookupTable.length; r++) {\n\t\tfor (c = 0; c < lookupTable[r].length; c++) {\n\t\t\tif (lookupTable[r][c] == lookupValue) break exit_loops;\n\t\t}\n\t}\n\n\tif (resultTable) return resultTable[r] ? resultTable[r][c] : null;\n\telse return lookupTable[r][lookupTable[r].length - 1];\n}\n\nexport function choose(index: number, ...args: ArrayArg) {\n\tlet result: unknown = null;\n\tlet current = 0;\n\teachValue(args, v => { \n\t\tif (index == ++current) {\n\t\t\tresult = v;\n\t\t\treturn false;\n\t\t}\n\t});\n\treturn result;\n}\n\nexport function column(address?: string) {\n\treturn (address ? CellRange.fromA1(address).c1 : (this as FormulaContext).cell.c) + 1;\n}\n\nexport function row(address?: string) {\n\treturn (address ? CellRange.fromA1(address).r1 : (this as FormulaContext).cell.r) + 1;\n}\n\nexport function columns(range: ArrayArg) {\n\treturn Array.isArray(range) ? range[0]?.length : 1;\n}\n\nexport function rows(range: ArrayArg) {\n\treturn Array.isArray(range) ? range.length : 1;\n}\n\nexport function formulatext() {\n\tconst cell = getFormulaCells(this)[0];\n\treturn cell && cell.hasFormula ? (' ' + prefixFormula(cell.formula)) : '';\n}\n\nexport function index(range: ArrayArg, row: number, column: number) {\n\trow = row || 1;\n\tcolumn = column || 1;\n\tif (Array.isArray(range)) return range[row - 1] ? range[row - 1][column - 1] : null;\n\telse if (row == 1 && column == 1) return range;\n\telse return null;\n}\n\nexport function indirect(ref: string) {\n\tconst currentCell = (this as FormulaContext).cell;\n\tconst model = currentCell.model;\n\tconst targetCell = model.getCellByA1(ref);\n\n\t// register string reference dependencies\n\tlet map: Map<string, [CellRange, string?]>;\n\tif (model.calculations.dependencies.cellDependencies.has(currentCell.address)) {\n\t\tmap = model.calculations.dependencies.cellDependencies.get(currentCell.address);\n\t} else {\n\t\tmap = new Map();\n\t\tmodel.calculations.dependencies.cellDependencies.set(currentCell.address, map);\n\t}\n\tmap.set(targetCell.address, [targetCell.range]);\n\n\tif (model.calculations.dependencies.cellDependants.has(targetCell.address)) {\n\t\tmap = model.calculations.dependencies.cellDependants.get(targetCell.address);\n\t} else {\n\t\tmap = new Map();\n\t\tmodel.calculations.dependencies.cellDependants.set(targetCell.address, map);\n\t}\n\tmap.set(currentCell.address, [currentCell.range]);\n\n\treturn targetCell.value;\n}\n\nexport function match(matchValue: unknown, range: Matrix<unknown>, matchType = 0) {\n\tlet r: number, c: number;\n\tfor (r = 0; r < range.length; r++) {\n\t\tfor (c = 0; c < range[r].length; c++) {\n\t\t\tif (matchType == 0 && range[r][c] == matchValue) return Math.max(r + 1, c + 1);\n\t\t\tif (matchType == 1 && range[r][c] > matchValue) return Math.max(r + 1, c + 1);\n\t\t\tif (matchType == -1 && range[r][c] < matchValue) return Math.max(r + 1, c + 1);\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function offset(_ref: unknown, rows: number, columns: number, height?: number, width?: number) {\n\tconst cell = getFormulaCells(this)[0];\n\tconst result: unknown[] = [];\n\theight = height || 1;\n\twidth = width || 1;\n\tfor (let r = 0; r < height; r++) {\n\t\tconst row: unknown[] = [];\n\t\tfor (let c = 0; c < width; c++) {\n\t\t\tconst cell2 = cell.model.rows[cell.r + r + rows].cell(cell.c + c + columns);\n\t\t\trow.push(cell2 ? cell.value : null)\n\t\t}\n\t\tresult.push(row);\n\t}\n\treturn result;\n}\n\nexport function filter(range: Matrix, boolRange: Matrix) {\n\tconst result: unknown[] = [];\n\tif (range.length == boolRange.length) {\n\t\tfor (let r = 0; r < range.length; r++) {\n\t\t\tlet match = true;\n\t\t\tfor (let c = 0; c < boolRange[r].length; c++) {\n\t\t\t\tif (!boolRange[r][c]) {\n\t\t\t\t\tmatch = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (match) result.push(range[r]);\n\t\t}\n\t} else {\n\t\t// by columns\n\t}\n\treturn result;\n}"]}
|
|
1
|
+
{"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../../src/calculations/functions/lookup.ts"],"names":[],"mappings":"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","sourcesContent":["import { Matrix } from \"@omegagrid/core\";\nimport { FormulaContext, prefixFormula } from \"..\";\nimport { CellRange } from \"../../common\";\nimport { ArrayArg, eachValue, getFormulaCells } from \"../helpers\";\nimport { calculationValue } from \"../values\";\n\nfunction getStringMatcher(searchValue: string, exactMatch: boolean): ((value: string) => boolean) {\n\tsearchValue = searchValue == null ? '' : searchValue.toString();\n\tif (exactMatch) {\n\t\treturn (value: string) => value == searchValue;\t\n\t} else {\n\t\tsearchValue = searchValue.toLowerCase();\n\t\treturn (value: string) => (value ?? '').toString().toLowerCase() == searchValue;\n\t}\n}\n\nexport function address(row: number, column: number, mode = 1) {\n\tconst range = new CellRange(Math.max((column || 0) - 1, 0), Math.max((row || 0) - 1, 0));\n\tif (mode == 1 || mode == 2) range.r1Anchor = true;\n\tif (mode == 1 || mode == 3) range.c1Anchor = true;\n\treturn range.A1;\n}\n\nexport function vlookup(lookupValue: string, lookupTable: Matrix<string>, colIndex: number, exactMatch = false) {\n\tlet r: number, c: number;\n\tconst match = getStringMatcher(lookupValue, exactMatch);\n\tfor (r = 0; r < lookupTable.length; r++) {\n\t\tfor (c = 0; c < lookupTable[r].length; c++) {\n\t\t\tif (match(lookupTable[r][c])) {\n\t\t\t\treturn lookupTable[r][colIndex - 1];\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function hlookup(lookupValue: string, lookupTable: Matrix<string>, rowIndex: number, exactMatch = false) {\n\tlet r: number, c: number;\n\tconst match = getStringMatcher(lookupValue, exactMatch);\n\tfor (r = 0; r < lookupTable.length; r++) {\n\t\tfor (c = 0; c < lookupTable[r].length; c++) {\n\t\t\tif (match(lookupTable[r][c])) {\n\t\t\t\treturn lookupTable[rowIndex - 1][c];\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction getWildcardMatcher(searchValue: string): ((value: unknown) => boolean) {\n\t// translate Excel wildcards: ? = any single char, * = any sequence, ~? / ~* / ~~ = literals\n\tlet pattern = '';\n\tconst s = searchValue == null ? '' : searchValue.toString();\n\tfor (let i = 0; i < s.length; i++) {\n\t\tconst ch = s[i];\n\t\tif (ch == '~' && i + 1 < s.length) pattern += s[++i].replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\t\telse if (ch == '?') pattern += '.';\n\t\telse if (ch == '*') pattern += '.*';\n\t\telse pattern += ch.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\t}\n\tconst regex = new RegExp('^' + pattern + '$', 'i');\n\treturn (value: unknown) => regex.test((value ?? '').toString());\n}\n\nfunction compareValues(a: unknown, b: unknown): number {\n\tif (typeof a == 'number' && typeof b == 'number') return a - b;\n\tconst sa = (a ?? '').toString().toLowerCase();\n\tconst sb = (b ?? '').toString().toLowerCase();\n\treturn sa < sb ? -1 : (sa > sb ? 1 : 0);\n}\n\n// searches a single row or column and returns the matched 0-based index, or -1\nfunction xsearch(lookupValue: unknown, values: unknown[], matchMode: number, searchMode: number): number {\n\tconst reverse = searchMode < 0;\n\tconst isMatch = matchMode == 2\n\t\t? getWildcardMatcher(lookupValue as string)\n\t\t: (value: unknown) => compareValues(value, lookupValue) == 0;\n\n\tlet bestIndex = -1;\n\tfor (let n = 0; n < values.length; n++) {\n\t\tconst i = reverse ? values.length - 1 - n : n;\n\t\tconst value = values[i];\n\t\tif (isMatch(value)) return i;\n\t\tif (matchMode == -1 && compareValues(value, lookupValue) < 0) {\n\t\t\tif (bestIndex < 0 || compareValues(value, values[bestIndex]) > 0) bestIndex = i;\n\t\t} else if (matchMode == 1 && compareValues(value, lookupValue) > 0) {\n\t\t\tif (bestIndex < 0 || compareValues(value, values[bestIndex]) < 0) bestIndex = i;\n\t\t}\n\t}\n\treturn bestIndex;\n}\n\n// lookup_array is expected to be a single row or a single column\nfunction isRowVector(lookupArray: Matrix<unknown>) {\n\treturn lookupArray.length == 1 && (lookupArray[0]?.length ?? 0) > 1;\n}\n\nexport function xlookup(\n\tlookupValue: unknown,\n\tlookupArray: Matrix<unknown>,\n\treturnArray: Matrix<unknown>,\n\tifNotFound: unknown = null,\n\tmatchMode = 0,\n\tsearchMode = 1\n) {\n\tconst isRow = isRowVector(lookupArray);\n\tconst values = isRow ? lookupArray[0] : lookupArray.map(row => row?.[0]);\n\tconst i = xsearch(lookupValue, values, matchMode, searchMode);\n\tif (i < 0) return ifNotFound;\n\tconst slice = isRow ? returnArray.map(row => row?.[i]) : returnArray[i];\n\tif (slice == null) return null;\n\treturn slice.length == 1 ? slice[0] : slice;\n}\n\nexport function xmatch(\n\tlookupValue: unknown,\n\tlookupArray: Matrix<unknown>,\n\tmatchMode = 0,\n\tsearchMode = 1\n) {\n\tconst values = isRowVector(lookupArray) ? lookupArray[0] : lookupArray.map(row => row?.[0]);\n\tconst i = xsearch(lookupValue, values, matchMode, searchMode);\n\treturn i < 0 ? null : i + 1;\n}\n\nexport function lookup(lookupValue: unknown, lookupTable: Matrix<unknown>, resultTable?: Matrix<unknown>) {\n\tlet r: number, c: number;\n\n\texit_loops:\n\tfor (r = 0; r < lookupTable.length; r++) {\n\t\tfor (c = 0; c < lookupTable[r].length; c++) {\n\t\t\tif (lookupTable[r][c] == lookupValue) break exit_loops;\n\t\t}\n\t}\n\n\tif (resultTable) return resultTable[r] ? resultTable[r][c] : null;\n\telse return lookupTable[r][lookupTable[r].length - 1];\n}\n\nexport function choose(index: number, ...args: ArrayArg) {\n\tlet result: unknown = null;\n\tlet current = 0;\n\teachValue(args, v => { \n\t\tif (index == ++current) {\n\t\t\tresult = v;\n\t\t\treturn false;\n\t\t}\n\t});\n\treturn result;\n}\n\nexport function column(address?: string) {\n\treturn (address ? CellRange.fromA1(address).c1 : (this as FormulaContext).cell.c) + 1;\n}\n\nexport function row(address?: string) {\n\treturn (address ? CellRange.fromA1(address).r1 : (this as FormulaContext).cell.r) + 1;\n}\n\nexport function columns(range: ArrayArg) {\n\treturn Array.isArray(range) ? range[0]?.length : 1;\n}\n\nexport function rows(range: ArrayArg) {\n\treturn Array.isArray(range) ? range.length : 1;\n}\n\nexport function formulatext() {\n\tconst cell = getFormulaCells(this)[0];\n\treturn cell && cell.hasFormula ? (' ' + prefixFormula(cell.formula)) : '';\n}\n\nexport function index(range: ArrayArg, row: number, column: number) {\n\trow = row || 1;\n\tcolumn = column || 1;\n\tif (Array.isArray(range)) return range[row - 1] ? range[row - 1][column - 1] : null;\n\telse if (row == 1 && column == 1) return range;\n\telse return null;\n}\n\nexport function indirect(ref: string) {\n\tconst currentCell = (this as FormulaContext).cell;\n\tconst model = currentCell.model;\n\tconst targetCell = model.getCellByA1(ref);\n\n\t// register string reference dependencies\n\tlet map: Map<string, [CellRange, string?]>;\n\tif (model.calculations.dependencies.cellDependencies.has(currentCell.address)) {\n\t\tmap = model.calculations.dependencies.cellDependencies.get(currentCell.address);\n\t} else {\n\t\tmap = new Map();\n\t\tmodel.calculations.dependencies.cellDependencies.set(currentCell.address, map);\n\t}\n\tmap.set(targetCell.address, [targetCell.range]);\n\n\tif (model.calculations.dependencies.cellDependants.has(targetCell.address)) {\n\t\tmap = model.calculations.dependencies.cellDependants.get(targetCell.address);\n\t} else {\n\t\tmap = new Map();\n\t\tmodel.calculations.dependencies.cellDependants.set(targetCell.address, map);\n\t}\n\tmap.set(currentCell.address, [currentCell.range]);\n\n\treturn calculationValue(targetCell.value);\n}\n\nexport function match(matchValue: unknown, range: Matrix<unknown>, matchType = 0) {\n\tlet r: number, c: number;\n\tfor (r = 0; r < range.length; r++) {\n\t\tfor (c = 0; c < range[r].length; c++) {\n\t\t\tif (matchType == 0 && range[r][c] == matchValue) return Math.max(r + 1, c + 1);\n\t\t\tif (matchType == 1 && range[r][c] > matchValue) return Math.max(r + 1, c + 1);\n\t\t\tif (matchType == -1 && range[r][c] < matchValue) return Math.max(r + 1, c + 1);\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function offset(_ref: unknown, rows: number, columns: number, height?: number, width?: number) {\n\tconst cell = getFormulaCells(this)[0];\n\tconst result: unknown[] = [];\n\theight = height || 1;\n\twidth = width || 1;\n\tfor (let r = 0; r < height; r++) {\n\t\tconst row: unknown[] = [];\n\t\tfor (let c = 0; c < width; c++) {\n\t\t\tconst cell2 = cell.model.rows[cell.r + r + rows].cell(cell.c + c + columns);\n\t\t\trow.push(cell2 ? cell.value : null)\n\t\t}\n\t\tresult.push(row);\n\t}\n\treturn result;\n}\n\nexport function filter(range: Matrix, boolRange: Matrix) {\n\tconst result: unknown[] = [];\n\tif (range.length == boolRange.length) {\n\t\tfor (let r = 0; r < range.length; r++) {\n\t\t\tlet match = true;\n\t\t\tfor (let c = 0; c < boolRange[r].length; c++) {\n\t\t\t\tif (!boolRange[r][c]) {\n\t\t\t\t\tmatch = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (match) result.push(range[r]);\n\t\t}\n\t} else {\n\t\t// by columns\n\t}\n\treturn result;\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/calculations/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/calculations/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/calculations/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC","sourcesContent":["export * from './formula';\nexport * from './context';\nexport * from './autofill';\nexport * from './tokenization';\nexport * from './operators';\nexport * as functions from './functions';"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/calculations/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC","sourcesContent":["export * from './formula';\nexport * from './context';\nexport * from './autofill';\nexport * from './tokenization';\nexport * from './operators';\nexport * from './values';\nexport * as functions from './functions';"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Matrix } from "@omegagrid/core";
|
|
2
|
+
/** The value of a cell the way a formula computes with it: the Date of a date and time or a time cell as its serial date */
|
|
3
|
+
export declare const calculationValue: (value: unknown) => unknown;
|
|
4
|
+
/** The values of a matrix the way formulas compute with them (see calculationValue), replaced in place */
|
|
5
|
+
export declare function calculationMatrix<T extends Matrix<unknown>>(matrix: T): T;
|
|
6
|
+
//# sourceMappingURL=values.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../../src/calculations/values.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAS,MAAM,iBAAiB,CAAC;AAEhD,4HAA4H;AAC5H,eAAO,MAAM,gBAAgB,GAAI,OAAO,OAAO,YAAkE,CAAC;AAElH,0GAA0G;AAC1G,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAOzE"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { dates } from "@omegagrid/core";
|
|
2
|
+
/** The value of a cell the way a formula computes with it: the Date of a date and time or a time cell as its serial date */
|
|
3
|
+
export const calculationValue = (value) => value instanceof Date ? dates.dateToSerialDate(value) : value;
|
|
4
|
+
/** The values of a matrix the way formulas compute with them (see calculationValue), replaced in place */
|
|
5
|
+
export function calculationMatrix(matrix) {
|
|
6
|
+
for (const row of matrix ?? []) {
|
|
7
|
+
for (let i = 0; i < row.length; i++) {
|
|
8
|
+
if (row[i] instanceof Date)
|
|
9
|
+
row[i] = calculationValue(row[i]);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return matrix;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=values.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"values.js","sourceRoot":"","sources":["../../src/calculations/values.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEhD,4HAA4H;AAC5H,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAElH,0GAA0G;AAC1G,MAAM,UAAU,iBAAiB,CAA4B,MAAS;IACrE,KAAK,MAAM,GAAG,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,GAAG,CAAC,CAAC,CAAC,YAAY,IAAI;gBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC","sourcesContent":["import { Matrix, dates } from \"@omegagrid/core\";\n\n/** The value of a cell the way a formula computes with it: the Date of a date and time or a time cell as its serial date */\nexport const calculationValue = (value: unknown) => value instanceof Date ? dates.dateToSerialDate(value) : value;\n\n/** The values of a matrix the way formulas compute with them (see calculationValue), replaced in place */\nexport function calculationMatrix<T extends Matrix<unknown>>(matrix: T): T {\n\tfor (const row of matrix ?? []) {\n\t\tfor (let i = 0; i < row.length; i++) {\n\t\t\tif (row[i] instanceof Date) row[i] = calculationValue(row[i]);\n\t\t}\n\t}\n\treturn matrix;\n}\n"]}
|
|
@@ -29,6 +29,8 @@ export type CellSource = {
|
|
|
29
29
|
/** comment */
|
|
30
30
|
comment?: CommentSource;
|
|
31
31
|
} & ElementSource;
|
|
32
|
+
/** Whether a value given for a cell is a cell source (an object with its properties); a Date is a value (of a date and time cell) */
|
|
33
|
+
export declare const isCellSource: (value: unknown) => value is CellSource;
|
|
32
34
|
export type CellError = {
|
|
33
35
|
message: string;
|
|
34
36
|
handled?: boolean;
|
|
@@ -65,7 +67,14 @@ export declare class CellModel extends ElementModel {
|
|
|
65
67
|
get value(): unknown;
|
|
66
68
|
set value(v: unknown);
|
|
67
69
|
evaluate(): unknown;
|
|
70
|
+
/** the formula of the cell, or its value the way the source data carries it (see serializedValue) */
|
|
68
71
|
get value2(): unknown;
|
|
72
|
+
/**
|
|
73
|
+
* The value the way the source data carries it: the Date of a date and time or a time cell as a text of its local
|
|
74
|
+
* date and time ('2026-11-02 13:45:10', '13:45:10'), which is the same in every time zone, unlike the UTC instant
|
|
75
|
+
* JSON writes a Date as. A Date of a cell of any other type is given as it is.
|
|
76
|
+
*/
|
|
77
|
+
get serializedValue(): unknown;
|
|
69
78
|
private _displayValue;
|
|
70
79
|
get hasDisplayValue(): boolean;
|
|
71
80
|
get displayValue(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cellModel.d.ts","sourceRoot":"","sources":["../../src/model/cellModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAS,OAAO,EAAS,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE1F,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAkB,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,uCAAuC;AACvC,MAAM,MAAM,UAAU,GAAG;IACxB,gBAAgB;IAChB,CAAC,EAAE,MAAM,CAAC;IACV,gBAAgB;IAChB,CAAC,EAAE,MAAM,CAAC;IACV,iBAAiB;IACjB,CAAC,CAAC,EAAE,OAAO,CAAC;IACZ,yBAAyB;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uBAAuB;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,oBAAoB;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,gBAAgB;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAC,OAAO,CAAC;IACzB,cAAc;IACd,OAAO,CAAC,EAAE,aAAa,CAAC;CACxB,GAAG,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"cellModel.d.ts","sourceRoot":"","sources":["../../src/model/cellModel.ts"],"names":[],"mappings":"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"}
|
package/dist/model/cellModel.js
CHANGED
|
@@ -6,39 +6,81 @@ import { styleToCSStyle } from "./cssStyle";
|
|
|
6
6
|
import { validateValue } from "./validations";
|
|
7
7
|
// an unknown cell type must not break value handling - fall back to the general type
|
|
8
8
|
const getCellValueHandler = (type) => cellValueHandler[type] ?? cellValueHandler['g'];
|
|
9
|
+
/** Whether a value given for a cell is a cell source (an object with its properties); a Date is a value (of a date and time cell) */
|
|
10
|
+
export const isCellSource = (value) => utils.isObject(value) && !(value instanceof Date);
|
|
11
|
+
/**
|
|
12
|
+
* The Date of a value of a date and time or a time cell: a Date, a serial date (also in a text) or a text parsed by the
|
|
13
|
+
* given function. Null when it is none of them or not a valid date (a separator alone, '.' or ',', is a numeric text
|
|
14
|
+
* of NaN): an invalid Date would make the formatters throw.
|
|
15
|
+
*/
|
|
16
|
+
function toDate(v, parseText) {
|
|
17
|
+
let date = null;
|
|
18
|
+
if (v instanceof Date)
|
|
19
|
+
date = v;
|
|
20
|
+
else if (utils.isNumber(v))
|
|
21
|
+
date = dates.serialDateToDateTime(v);
|
|
22
|
+
else if (utils.isString(v)) {
|
|
23
|
+
date = utils.isNumericString(v)
|
|
24
|
+
? dates.serialDateToDateTime(utils.strToNum(v))
|
|
25
|
+
: parseText(v);
|
|
26
|
+
}
|
|
27
|
+
return date && !isNaN(date.getTime()) ? date : null;
|
|
28
|
+
}
|
|
9
29
|
const cellValueHandler = {
|
|
30
|
+
// a Date (the row data of a date column) is its serial date
|
|
10
31
|
['n']: (v) => {
|
|
32
|
+
if (v instanceof Date)
|
|
33
|
+
return dates.dateToSerialDate(v);
|
|
11
34
|
const value = utils.isString(v) ? parseFloat(v.replace(',', '.')) : v;
|
|
12
35
|
return Number.isNaN(value) ? v : value;
|
|
13
36
|
},
|
|
37
|
+
// a Date stays a Date (the formulas read it as a serial date, see calculationValue)
|
|
14
38
|
['t']: (v) => v,
|
|
39
|
+
// a date cell holds a serial date; a separator alone ('.', ','), which isNumericString lets through, is not one
|
|
15
40
|
['d']: (v, cell) => {
|
|
16
41
|
if (v == null || v === '')
|
|
17
42
|
return null;
|
|
43
|
+
let serial = v;
|
|
18
44
|
if (utils.isString(v)) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
? utils.strToNum(v)
|
|
22
|
-
: dates.dateToSerialDate(dates.parse(v, cell.model.options.formatLocale));
|
|
23
|
-
}
|
|
24
|
-
catch (error) {
|
|
25
|
-
cell.model.logger.error(`Invalid date value in cell ${cell.address}: ${v}`);
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
45
|
+
const date = utils.isNumericString(v) ? null : dates.parse(v, cell.model.options.formatLocale);
|
|
46
|
+
serial = utils.isNumericString(v) ? utils.strToNum(v) : (date ? dates.dateToSerialDate(date) : NaN);
|
|
28
47
|
}
|
|
29
|
-
if (v instanceof Date)
|
|
30
|
-
|
|
31
|
-
|
|
48
|
+
else if (v instanceof Date) {
|
|
49
|
+
serial = dates.dateToSerialDate(v); // NaN for an invalid Date
|
|
50
|
+
}
|
|
51
|
+
if (!utils.isNumber(serial) || Number.isFinite(serial))
|
|
52
|
+
return serial;
|
|
53
|
+
cell.model.logger?.error(`Invalid date value in cell ${cell.address}: ${v}`);
|
|
54
|
+
return null;
|
|
55
|
+
},
|
|
56
|
+
// a time cell holds a Date on the day of the serial date 0 (dates.timeOfDay): a text, a serial date or a date give their time of day
|
|
57
|
+
['tm']: (v, cell) => {
|
|
58
|
+
if (v == null || v === '')
|
|
59
|
+
return null;
|
|
60
|
+
const date = toDate(v, text => dates.parseTime(text, cell.model.options.formatLocale));
|
|
61
|
+
if (date)
|
|
62
|
+
return dates.timeOfDay(date);
|
|
63
|
+
cell.model.logger?.error(`Invalid time value in cell ${cell.address}: ${v}`);
|
|
64
|
+
return null;
|
|
65
|
+
},
|
|
66
|
+
// a date and time cell holds a Date: a serial date (with its day fraction) or a text is converted
|
|
67
|
+
['dt']: (v, cell) => {
|
|
68
|
+
if (v == null || v === '')
|
|
69
|
+
return null;
|
|
70
|
+
const date = toDate(v, text => dates.parseDateTime(text, cell.model.options.formatLocale));
|
|
71
|
+
if (date)
|
|
72
|
+
return date;
|
|
73
|
+
cell.model.logger?.error(`Invalid date time value in cell ${cell.address}: ${v}`);
|
|
74
|
+
return null;
|
|
32
75
|
},
|
|
33
|
-
// TODO: unfinnished implementation of time and datetime
|
|
34
|
-
['tm']: (v) => utils.isString(v) ? new Date(v) : v,
|
|
35
|
-
['dt']: (v) => utils.isString(v) ? new Date(v) : v,
|
|
36
76
|
['b']: (v) => !!v && v !== '0' && v.toString().toLowerCase() !== 'false',
|
|
37
77
|
['s']: (v) => v,
|
|
38
78
|
['m']: (v) => v,
|
|
39
79
|
['g']: (v) => {
|
|
40
80
|
if (v == null || v === '')
|
|
41
81
|
return null;
|
|
82
|
+
if (v instanceof Date)
|
|
83
|
+
return v; // a Date stays a Date, a text of it would turn into its first number when evaluated again
|
|
42
84
|
const f = parseFloat(v.toString().replace(',', '.'));
|
|
43
85
|
return isNaN(f) ? v : f;
|
|
44
86
|
},
|
|
@@ -110,7 +152,23 @@ export class CellModel extends ElementModel {
|
|
|
110
152
|
this._evaluated = true;
|
|
111
153
|
return this._value;
|
|
112
154
|
}
|
|
113
|
-
|
|
155
|
+
/** the formula of the cell, or its value the way the source data carries it (see serializedValue) */
|
|
156
|
+
get value2() { return this.hasFormula ? prefixFormula(this.formula) : this.serializedValue; }
|
|
157
|
+
/**
|
|
158
|
+
* The value the way the source data carries it: the Date of a date and time or a time cell as a text of its local
|
|
159
|
+
* date and time ('2026-11-02 13:45:10', '13:45:10'), which is the same in every time zone, unlike the UTC instant
|
|
160
|
+
* JSON writes a Date as. A Date of a cell of any other type is given as it is.
|
|
161
|
+
*/
|
|
162
|
+
get serializedValue() {
|
|
163
|
+
const value = this.value;
|
|
164
|
+
if (!(value instanceof Date) || isNaN(value.getTime()))
|
|
165
|
+
return value;
|
|
166
|
+
if (this.type == 'tm')
|
|
167
|
+
return dates.formatLocalTime(value);
|
|
168
|
+
if (this.type == 'dt')
|
|
169
|
+
return dates.formatLocalDateTime(value);
|
|
170
|
+
return value;
|
|
171
|
+
}
|
|
114
172
|
get hasDisplayValue() { return this._displayValue != null; }
|
|
115
173
|
get displayValue() { return this._displayValue; }
|
|
116
174
|
set displayValue(v) { this._displayValue = v; }
|
|
@@ -175,6 +233,12 @@ export class CellModel extends ElementModel {
|
|
|
175
233
|
else if (type == 'd') {
|
|
176
234
|
return format ? dates.getDateFormatter(formatLocale, format) : this.model.options.dateFormatter;
|
|
177
235
|
}
|
|
236
|
+
else if (type == 'dt') {
|
|
237
|
+
return format ? dates.getDateFormatter(formatLocale, format) : this.model.options.dateTimeFormatter;
|
|
238
|
+
}
|
|
239
|
+
else if (type == 'tm') {
|
|
240
|
+
return format ? dates.getDateFormatter(formatLocale, format) : this.model.options.timeFormatter;
|
|
241
|
+
}
|
|
178
242
|
else if (type == 's' && this.editorContent) {
|
|
179
243
|
return getDropdownFormatter(this.editorContent);
|
|
180
244
|
}
|
|
@@ -292,7 +356,7 @@ export class CellModel extends ElementModel {
|
|
|
292
356
|
data.rs = this.merge.rs;
|
|
293
357
|
}
|
|
294
358
|
if (this.value != null)
|
|
295
|
-
data.v = this.
|
|
359
|
+
data.v = this.serializedValue;
|
|
296
360
|
if (this.hasTooltip)
|
|
297
361
|
data.tooltip = this._tooltip;
|
|
298
362
|
if (this._hyperlink)
|