@omegagrid/grid-core 0.6.95 → 0.6.97

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,12 +1,10 @@
1
- import { CellModel, GridModel, Viewport, Dependencies } from "../model";
1
+ import { CellModel, GridModel, Viewport } from "../model";
2
2
  import { Formula, FormulaString, Tokenizer } from "../calculations";
3
3
  import { ShiftOptions } from "../types";
4
- export declare class CalculationModel {
5
- readonly model: GridModel;
4
+ import { DependencyModel } from "./dependencyModel";
5
+ export declare class CalculationModel extends DependencyModel {
6
6
  private _tokenizer;
7
7
  get tokenizer(): Tokenizer;
8
- private _dependencies;
9
- get dependencies(): Dependencies;
10
8
  private _formulas;
11
9
  get formulas(): Map<string, Formula>;
12
10
  private context;
@@ -1 +1 @@
1
- {"version":3,"file":"calculationModel.d.ts","sourceRoot":"","sources":["../../src/model/calculationModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAY,MAAM,UAAU,CAAC;AAClF,OAAO,EAAsB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAcxC,qBAAa,gBAAgB;aAaA,KAAK,EAAE,SAAS;IAX5C,OAAO,CAAC,UAAU,CAAmB;IACrC,IAAI,SAAS,cAA6B;IAE1C,OAAO,CAAC,aAAa,CAAe;IACpC,IAAI,YAAY,iBAAgC;IAEhD,OAAO,CAAC,SAAS,CAA8B;IAC/C,IAAI,QAAQ,yBAA4B;IAExC,OAAO,CAAC,OAAO,CAAqB;gBAER,KAAK,EAAE,SAAS;IAK5C,aAAa,CAAC,IAAI,EAAE,SAAS;IAQ7B,iBAAiB,CAAC,IAAI,EAAE,SAAS;IAcjC,cAAc,CAAC,IAAI,EAAE,SAAS;IAO9B,kBAAkB,CAAC,IAAI,EAAE,SAAS;IAKlC,UAAU,CAAC,IAAI,EAAE,SAAS;IAI1B,OAAO;IAKP,gBAAgB,CAAC,IAAI,EAAE,SAAS;IAOhC,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO;IAK3D,kBAAkB,CAAC,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO;IAMxE,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO;IA0BrD,WAAW;IAIX,iBAAiB,CAAC,QAAQ,EAAE,QAAQ;IAkBpC,KAAK,CAAC,OAAO,EAAE,YAAY;IAqB3B,eAAe;IAef,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAc5C,wBAAwB,CAAC,IAAI,EAAE,SAAS;IASxC,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC;CA2B/C"}
1
+ {"version":3,"file":"calculationModel.d.ts","sourceRoot":"","sources":["../../src/model/calculationModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAY,MAAM,UAAU,CAAC;AACpE,OAAO,EAAsB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAcpD,qBAAa,gBAAiB,SAAQ,eAAe;IAEpD,OAAO,CAAC,UAAU,CAAmB;IACrC,IAAI,SAAS,cAA6B;IAE1C,OAAO,CAAC,SAAS,CAA8B;IAC/C,IAAI,QAAQ,yBAA4B;IAExC,OAAO,CAAC,OAAO,CAAqB;gBAExB,KAAK,EAAE,SAAS;IAK5B,aAAa,CAAC,IAAI,EAAE,SAAS;IAQ7B,iBAAiB,CAAC,IAAI,EAAE,SAAS;IAcjC,cAAc,CAAC,IAAI,EAAE,SAAS;IAO9B,kBAAkB,CAAC,IAAI,EAAE,SAAS;IAKlC,UAAU,CAAC,IAAI,EAAE,SAAS;IAI1B,OAAO;IAKP,gBAAgB,CAAC,IAAI,EAAE,SAAS;IAOhC,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO;IAK3D,kBAAkB,CAAC,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO;IAMxE,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO;IA0BrD,WAAW;IAIX,iBAAiB,CAAC,QAAQ,EAAE,QAAQ;IAkBpC,KAAK,CAAC,OAAO,EAAE,YAAY;IAqB3B,eAAe;IAef,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAc5C,wBAAwB,CAAC,IAAI,EAAE,SAAS;IASxC,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC;CA2B/C"}
@@ -1,5 +1,5 @@
1
- import { Dependencies } from "../model";
2
1
  import { CalculationContext, Formula, Tokenizer } from "../calculations";
2
+ import { DependencyModel } from "./dependencyModel";
3
3
  function evaluationErrorHandler(error) {
4
4
  if (error instanceof RangeError) {
5
5
  if (error.message == 'Maximum call stack size exceeded') {
@@ -13,15 +13,13 @@ function evaluationErrorHandler(error) {
13
13
  return error.toString();
14
14
  }
15
15
  }
16
- export class CalculationModel {
16
+ export class CalculationModel extends DependencyModel {
17
17
  get tokenizer() { return this._tokenizer; }
18
- get dependencies() { return this._dependencies; }
19
18
  get formulas() { return this._formulas; }
20
19
  constructor(model) {
21
- this.model = model;
20
+ super(model, 'calculations');
22
21
  this._tokenizer = new Tokenizer();
23
22
  this._formulas = new Map();
24
- this._dependencies = new Dependencies(model);
25
23
  this.context = new CalculationContext(model);
26
24
  }
27
25
  createFormula(cell) {
@@ -1 +1 @@
1
- {"version":3,"file":"calculationModel.js","sourceRoot":"","sources":["../../src/model/calculationModel.ts"],"names":[],"mappings":"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","sourcesContent":["import { CellModel, GridModel, Viewport, Dependencies, RowModel } from \"../model\";\nimport { CalculationContext, Formula, FormulaString, Tokenizer } from \"../calculations\";\nimport { ShiftOptions } from \"../types\";\n\nfunction evaluationErrorHandler(error: unknown) {\n\tif (error instanceof RangeError) {\n\t\tif (error.message == 'Maximum call stack size exceeded') {\n\t\t\treturn 'infinite loop';\n\t\t} else {\n\t\t\treturn error.message;\n\t\t}\n\t} else {\n\t\treturn error.toString();\n\t}\n}\n\nexport class CalculationModel {\n\n\tprivate _tokenizer = new Tokenizer();\n\tget tokenizer() { return this._tokenizer }\n\n\tprivate _dependencies: Dependencies;\n\tget dependencies() { return this._dependencies }\n\n\tprivate _formulas = new Map<string, Formula>();\n\tget formulas() { return this._formulas }\n\n\tprivate context: CalculationContext;\n\n\tconstructor(public readonly model: GridModel) {\n\t\tthis._dependencies = new Dependencies(model);\n\t\tthis.context = new CalculationContext(model);\n\t}\n\n\tcreateFormula(cell: CellModel) {\n\t\tconst f = new Formula(cell.formula, this.tokenizer);\n\t\tthis._formulas.set(cell.address, f);\n\t\tif (cell.hasOwnFormula) cell.formula = f.createFormulaString(); // normalize formula string\n\t\tthis.createDependecies(cell);\n\t\treturn f;\n\t}\n\n\tcreateDependecies(cell: CellModel) {\n\t\tconst addr = cell.address;\n\t\tif (this.formulas.has(addr)) {\n\t\t\tconst f = this.formulas.get(addr);\n\t\t\tf.ranges.forEach(([_i, r, sheet]) => this._dependencies.add(addr, r.A1, sheet));\n\t\t\tf.cells.forEach(([_i, r, sheet]) => this._dependencies.add(addr, r.A1, sheet));\n\t\t\tf.variables.forEach(([_i, v]) => {\n\t\t\t\tconst c = this.model.getCellByName(v, cell.range);\n\t\t\t\tif (c) this._dependencies.add(addr, c.address, null)\n\t\t\t});\n\t\t}\n\t\treturn this;\n\t}\n\n\trefreshFormula(cell: CellModel) {\n\t\tcell.refreshFormula();\n\t\tthis.formulas.delete(cell.address);\n\t\tthis.clearDependecies(cell);\n\t\treturn this;\n\t}\n\n\tupdateDependencies(cell: CellModel) {\n\t\tthis.clearDependecies(cell).getFormula(cell);\n\t\treturn this;\n\t}\n\n\tgetFormula(cell: CellModel) {\n\t\treturn this._formulas.has(cell.address) ? this._formulas.get(cell.address) : this.createFormula(cell);\n\t}\n\n\trefresh() {\n\t\tthis.dependencies.clear();\n\t\tthis._formulas.clear();\n\t}\n\n\tclearDependecies(cell: CellModel) {\n\t\tconst addr = cell.address;\n\t\tthis.dependencies.clearCellDependecies(addr);\n\t\tthis.formulas.delete(addr);\n\t\treturn this;\n\t}\n\n\tevaluateFormula(formula: Formula, cell: CellModel): unknown {\n\t\tthis.context.currentCell = cell;\n\t\treturn formula.fn(this.context, { cell, formula });\n\t}\n\n\tevaluateExpression(expression: FormulaString, cell?: CellModel): unknown {\n\t\tthis.context.currentCell = cell;\n\t\tconst formula = new Formula(expression, this.tokenizer);\n\t\treturn formula.fn(this.context, { cell, formula });\n\t}\n\t\n\tevaluate(cell: CellModel, noSpill?: boolean): unknown {\n\t\tif (!cell) return null;\n\t\tlet value = null;\n\t\tif (cell.hasFormula) {\n\t\t\tconst formula = this.getFormula(cell);\n\t\t\ttry {\n\t\t\t\tcell.clearError();\n\t\t\t\tthis.context.currentCell = cell;\n\t\t\t\tvalue = formula.fn(this.context, { cell, formula });\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\tif (!noSpill) this.model.spillValues({cell: cell, values: value}).range;\n\t\t\t\t\tvalue = value.length > 0 && value[0].length > 0 ? value[0][0] : null;\n\t\t\t\t\tif (noSpill) cell.value = value;\n\t\t\t\t} else {\n\t\t\t\t\tcell.value = value;\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tcell.error = {message: evaluationErrorHandler(error)};\n\t\t\t}\n\t\t} else {\n\t\t\tvalue = cell.value;\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tevaluateAll() {\n\t\tthis.model.rows.forEach(row => this.model.columns.forEach((_, c) => row.cell(c).evaluate()));\n\t}\n\n\tcalculateViewport(viewport: Viewport) {\n\t\tconst calculatedCells: CellModel[] = [];\n\t\tviewport.rows.forEach(row => row.cells.forEach(cell => {\n\t\t\tif (cell.hasFormula) {\n\t\t\t\tif (!cell.hasValue) {\n\t\t\t\t\tthis.evaluate(cell);\n\t\t\t\t\tif (cell.spillRange) {\n\t\t\t\t\t\tfor (const cell2 of this.model.getRangeIterator(cell.spillRange)) {\n\t\t\t\t\t\t\tcalculatedCells.push(cell2);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcalculatedCells.push(cell);\n\t\t\t}\n\t\t}));\n\t\treturn calculatedCells;\n\t}\n\n\tshift(options: ShiftOptions) {\n\t\tthis.getFormulaCells().forEach(cell => {\n\t\t\tcell.formula = this.getFormula(cell).shift(options).createFormulaString(false);\n\t\t\tthis.updateDependencies(cell);\n\t\t});\n\n\t\tconst thisSheet = this.model.name;\n\t\tthis.dependencies.sheetDependants.forEach(sheet => {\n\t\t\tconst connectedModel = this.model.getConnectedModel(sheet);\n\t\t\tconnectedModel?.calculations.getFormulaCells().forEach(cell => {\n\t\t\t\tconst formula = connectedModel.calculations.getFormula(cell);\n\t\t\t\tif (formula.hasSheetReference(thisSheet)) {\n\t\t\t\t\tcell.formula = formula.shift(options).createFormulaString(false);\n\t\t\t\t\tconnectedModel.calculations.updateDependencies(cell);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn this;\n\t}\n\n\tgetFormulaCells() {\n\t\tconst m = this.model;\n\t\tconst cells: CellModel[] = [];\n\t\tlet row: RowModel;\n\t\tconst rows = m.rows.length;\n\t\tconst columns = m.columns.length;\n\t\tfor (let r = 0; r < rows; r++) {\n\t\t\trow = m.rows[r];\n\t\t\tfor (let c = 0; c < columns; c++) {\n\t\t\t\tif (row.hasCellFormula(c)) cells.push(row.cell(c));\n\t\t\t}\n\t\t}\n\t\treturn cells;\n\t}\n\n\trenameSheet(oldName: string, newName: string) {\n\t\tlet renamed = false;\n\t\tthis.dependencies.renameSheet(oldName, newName);\n\t\tthis.getFormulaCells().forEach(cell => {\n\t\t\tconst f = this.getFormula(cell);\n\t\t\tif (f.renameSheet(oldName, newName)) {\n\t\t\t\tcell.formula = f.createFormulaString();\n\t\t\t\tthis.refreshFormula(cell);\n\t\t\t\trenamed = true;\n\t\t\t}\n\t\t});\n\t\treturn renamed;\n\t}\n\n\tinvalidateCellDependants(cell: CellModel) {\n\t\tconst cells: [CellModel, string?][] = [];\n\t\tthis.dependencies.getDependants(cell.range).forEach(([cell, sheet]) => {\n\t\t\tcells.push([cell, sheet]);\n\t\t\tcell.invalidateValue();\n\t\t});\n\t\treturn cells;\n\t}\n\n\tinvalidateDependants(cells: Iterable<CellModel>) {\n\t\tconst updatedCells = new Map<CellModel, string|null>();\n\t\tconst recalculatedCells = new Map<CellModel, string|null>();\n\t\tfor (const cell of cells) {\n\t\t\tthis.invalidateCellDependants(cell).forEach(([cell2, sheet]) => updatedCells.set(cell2, sheet));\n\t\t}\n\t\tupdatedCells.forEach((sheet, cell) => recalculatedCells.set(cell, sheet));\n\n\t\tfor (const cell of cells) {\n\t\t\tupdatedCells.set(cell, null);\n\t\t}\n\t\t\n\t\tupdatedCells.forEach((_sheet, updatedCell) => {\n\t\t\tthis.model.sparklines.dependencies.getDependants(updatedCell.range).forEach(([cell, sheet]) => {\n\t\t\t\trecalculatedCells.set(cell, sheet);\n\t\t\t});\n\n\t\t\tthis.model.conditionalFormats.dependencies.getDependants(updatedCell.range).forEach(([cell, sheet]) => {\n\t\t\t\tthis.model.conditionalFormats.invalidateExtremes(cell);\n\t\t\t\tcell.invalidateStyle();\n\t\t\t\trecalculatedCells.set(cell, sheet);\n\t\t\t});\n\t\t});\n\n\t\treturn recalculatedCells;\n\t}\n\n}"]}
1
+ {"version":3,"file":"calculationModel.js","sourceRoot":"","sources":["../../src/model/calculationModel.ts"],"names":[],"mappings":"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","sourcesContent":["import { CellModel, GridModel, Viewport, RowModel } from \"../model\";\nimport { CalculationContext, Formula, FormulaString, Tokenizer } from \"../calculations\";\nimport { ShiftOptions } from \"../types\";\nimport { DependencyModel } from \"./dependencyModel\";\n\nfunction evaluationErrorHandler(error: unknown) {\n\tif (error instanceof RangeError) {\n\t\tif (error.message == 'Maximum call stack size exceeded') {\n\t\t\treturn 'infinite loop';\n\t\t} else {\n\t\t\treturn error.message;\n\t\t}\n\t} else {\n\t\treturn error.toString();\n\t}\n}\n\nexport class CalculationModel extends DependencyModel {\n\n\tprivate _tokenizer = new Tokenizer();\n\tget tokenizer() { return this._tokenizer }\n\n\tprivate _formulas = new Map<string, Formula>();\n\tget formulas() { return this._formulas }\n\n\tprivate context: CalculationContext;\n\n\tconstructor(model: GridModel) {\n\t\tsuper(model, 'calculations');\n\t\tthis.context = new CalculationContext(model);\n\t}\n\n\tcreateFormula(cell: CellModel) {\n\t\tconst f = new Formula(cell.formula, this.tokenizer);\n\t\tthis._formulas.set(cell.address, f);\n\t\tif (cell.hasOwnFormula) cell.formula = f.createFormulaString(); // normalize formula string\n\t\tthis.createDependecies(cell);\n\t\treturn f;\n\t}\n\n\tcreateDependecies(cell: CellModel) {\n\t\tconst addr = cell.address;\n\t\tif (this.formulas.has(addr)) {\n\t\t\tconst f = this.formulas.get(addr);\n\t\t\tf.ranges.forEach(([_i, r, sheet]) => this._dependencies.add(addr, r.A1, sheet));\n\t\t\tf.cells.forEach(([_i, r, sheet]) => this._dependencies.add(addr, r.A1, sheet));\n\t\t\tf.variables.forEach(([_i, v]) => {\n\t\t\t\tconst c = this.model.getCellByName(v, cell.range);\n\t\t\t\tif (c) this._dependencies.add(addr, c.address, null)\n\t\t\t});\n\t\t}\n\t\treturn this;\n\t}\n\n\trefreshFormula(cell: CellModel) {\n\t\tcell.refreshFormula();\n\t\tthis.formulas.delete(cell.address);\n\t\tthis.clearDependecies(cell);\n\t\treturn this;\n\t}\n\n\tupdateDependencies(cell: CellModel) {\n\t\tthis.clearDependecies(cell).getFormula(cell);\n\t\treturn this;\n\t}\n\n\tgetFormula(cell: CellModel) {\n\t\treturn this._formulas.has(cell.address) ? this._formulas.get(cell.address) : this.createFormula(cell);\n\t}\n\n\trefresh() {\n\t\tthis.dependencies.clear();\n\t\tthis._formulas.clear();\n\t}\n\n\tclearDependecies(cell: CellModel) {\n\t\tconst addr = cell.address;\n\t\tthis.dependencies.clearCellDependecies(addr);\n\t\tthis.formulas.delete(addr);\n\t\treturn this;\n\t}\n\n\tevaluateFormula(formula: Formula, cell: CellModel): unknown {\n\t\tthis.context.currentCell = cell;\n\t\treturn formula.fn(this.context, { cell, formula });\n\t}\n\n\tevaluateExpression(expression: FormulaString, cell?: CellModel): unknown {\n\t\tthis.context.currentCell = cell;\n\t\tconst formula = new Formula(expression, this.tokenizer);\n\t\treturn formula.fn(this.context, { cell, formula });\n\t}\n\t\n\tevaluate(cell: CellModel, noSpill?: boolean): unknown {\n\t\tif (!cell) return null;\n\t\tlet value = null;\n\t\tif (cell.hasFormula) {\n\t\t\tconst formula = this.getFormula(cell);\n\t\t\ttry {\n\t\t\t\tcell.clearError();\n\t\t\t\tthis.context.currentCell = cell;\n\t\t\t\tvalue = formula.fn(this.context, { cell, formula });\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\tif (!noSpill) this.model.spillValues({cell: cell, values: value}).range;\n\t\t\t\t\tvalue = value.length > 0 && value[0].length > 0 ? value[0][0] : null;\n\t\t\t\t\tif (noSpill) cell.value = value;\n\t\t\t\t} else {\n\t\t\t\t\tcell.value = value;\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tcell.error = {message: evaluationErrorHandler(error)};\n\t\t\t}\n\t\t} else {\n\t\t\tvalue = cell.value;\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tevaluateAll() {\n\t\tthis.model.rows.forEach(row => this.model.columns.forEach((_, c) => row.cell(c).evaluate()));\n\t}\n\n\tcalculateViewport(viewport: Viewport) {\n\t\tconst calculatedCells: CellModel[] = [];\n\t\tviewport.rows.forEach(row => row.cells.forEach(cell => {\n\t\t\tif (cell.hasFormula) {\n\t\t\t\tif (!cell.hasValue) {\n\t\t\t\t\tthis.evaluate(cell);\n\t\t\t\t\tif (cell.spillRange) {\n\t\t\t\t\t\tfor (const cell2 of this.model.getRangeIterator(cell.spillRange)) {\n\t\t\t\t\t\t\tcalculatedCells.push(cell2);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcalculatedCells.push(cell);\n\t\t\t}\n\t\t}));\n\t\treturn calculatedCells;\n\t}\n\n\tshift(options: ShiftOptions) {\n\t\tthis.getFormulaCells().forEach(cell => {\n\t\t\tcell.formula = this.getFormula(cell).shift(options).createFormulaString(false);\n\t\t\tthis.updateDependencies(cell);\n\t\t});\n\n\t\tconst thisSheet = this.model.name;\n\t\tthis.dependencies.sheetDependants.forEach(sheet => {\n\t\t\tconst connectedModel = this.model.getConnectedModel(sheet);\n\t\t\tconnectedModel?.calculations.getFormulaCells().forEach(cell => {\n\t\t\t\tconst formula = connectedModel.calculations.getFormula(cell);\n\t\t\t\tif (formula.hasSheetReference(thisSheet)) {\n\t\t\t\t\tcell.formula = formula.shift(options).createFormulaString(false);\n\t\t\t\t\tconnectedModel.calculations.updateDependencies(cell);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn this;\n\t}\n\n\tgetFormulaCells() {\n\t\tconst m = this.model;\n\t\tconst cells: CellModel[] = [];\n\t\tlet row: RowModel;\n\t\tconst rows = m.rows.length;\n\t\tconst columns = m.columns.length;\n\t\tfor (let r = 0; r < rows; r++) {\n\t\t\trow = m.rows[r];\n\t\t\tfor (let c = 0; c < columns; c++) {\n\t\t\t\tif (row.hasCellFormula(c)) cells.push(row.cell(c));\n\t\t\t}\n\t\t}\n\t\treturn cells;\n\t}\n\n\trenameSheet(oldName: string, newName: string) {\n\t\tlet renamed = false;\n\t\tthis.dependencies.renameSheet(oldName, newName);\n\t\tthis.getFormulaCells().forEach(cell => {\n\t\t\tconst f = this.getFormula(cell);\n\t\t\tif (f.renameSheet(oldName, newName)) {\n\t\t\t\tcell.formula = f.createFormulaString();\n\t\t\t\tthis.refreshFormula(cell);\n\t\t\t\trenamed = true;\n\t\t\t}\n\t\t});\n\t\treturn renamed;\n\t}\n\n\tinvalidateCellDependants(cell: CellModel) {\n\t\tconst cells: [CellModel, string?][] = [];\n\t\tthis.dependencies.getDependants(cell.range).forEach(([cell, sheet]) => {\n\t\t\tcells.push([cell, sheet]);\n\t\t\tcell.invalidateValue();\n\t\t});\n\t\treturn cells;\n\t}\n\n\tinvalidateDependants(cells: Iterable<CellModel>) {\n\t\tconst updatedCells = new Map<CellModel, string|null>();\n\t\tconst recalculatedCells = new Map<CellModel, string|null>();\n\t\tfor (const cell of cells) {\n\t\t\tthis.invalidateCellDependants(cell).forEach(([cell2, sheet]) => updatedCells.set(cell2, sheet));\n\t\t}\n\t\tupdatedCells.forEach((sheet, cell) => recalculatedCells.set(cell, sheet));\n\n\t\tfor (const cell of cells) {\n\t\t\tupdatedCells.set(cell, null);\n\t\t}\n\t\t\n\t\tupdatedCells.forEach((_sheet, updatedCell) => {\n\t\t\tthis.model.sparklines.dependencies.getDependants(updatedCell.range).forEach(([cell, sheet]) => {\n\t\t\t\trecalculatedCells.set(cell, sheet);\n\t\t\t});\n\n\t\t\tthis.model.conditionalFormats.dependencies.getDependants(updatedCell.range).forEach(([cell, sheet]) => {\n\t\t\t\tthis.model.conditionalFormats.invalidateExtremes(cell);\n\t\t\t\tcell.invalidateStyle();\n\t\t\t\trecalculatedCells.set(cell, sheet);\n\t\t\t});\n\t\t});\n\n\t\treturn recalculatedCells;\n\t}\n\n}"]}
@@ -1,8 +1,9 @@
1
1
  import { StyleSource } from "../types";
2
2
  import { Formula, FormulaString } from "../calculations";
3
3
  import { CellRange, RangeAddress } from "../common";
4
- import { CellModel, GridModel, Style, Dependencies, Color } from "../model";
4
+ import { CellModel, GridModel, Style, Color } from "../model";
5
5
  import { IconSpec } from "@omegagrid/core";
6
+ import { DependencyModel } from "./dependencyModel";
6
7
  export type ConditionalFormatTypeDiffStyle = 'avg' | /* Format only values that are above or below average */ 'blank' | /* Format only cells that contain: Blanks or no Blanks */ 'date' | /* Format only cells that contain: Dates Occurring */ 'dup' | /* Format all duplicate values */ 'error' | /* Format only cells that contain: Errors or No Errors */ 'formula' | /* Format values where formula is true */ 'rank' | /* Format only top or bottom ranked values */ 'text' | /* Format only cells that contain: Specific Text */ 'unique' | /* Format all unique values */ 'val';
7
8
  export type ConditionalFormatTypeNoDiff = 'bar' | /* Format all cells based on values: Data Bars */ 'icon' | /* Format all cells based on values: Icon Sets */ 'scale';
8
9
  export type ConditionalFormatIconType = '3Arrows' | /* 3 Arrows (Colored) */ '3ArrowsGray' | /* 3 Arrows (Gray) */ '3Flags' | /* 3 Flags */ '3TrafficLights1' | /* 3 Traffic Lights (unrimmed) */ '3TrafficLights2' | /* 3 Traffic Lights (rimmed) */ '3Signs' | /* 3 Signs */ '3Symbols' | /* 3 Symbols (Circled) */ '3Symbols2' | /* 3 Symbols (Uncircled) */ '3Stars' | /* 3 Stars */ '3Triangles' | /* 3 Triangles */ '4Arrows' | /* 4 Arrows (Colored) */ '4ArrowsGray' | /* 4 Arrows (Gray) */ '4RedToBlack' | /* Red To Black */ '4Rating' | /* 4 Ratings */ '4TrafficLights' | /* 4 Traffic Lights */ '5Arrows' | /* 5 Arrows (Colored) */ '5ArrowsGray' | /* 5 Arrows (Gray) */ '5Rating' | /* 5 Ratings */ '5Quarters' | /* 5 Quarters */ '5Boxes';
@@ -55,13 +56,10 @@ export type CellConditionalFormat = {
55
56
  initialized?: boolean;
56
57
  };
57
58
  export declare const iconSets: Map<ConditionalFormatIconType, IconSpec[]>;
58
- export declare class ConditionalFormats {
59
- readonly model: GridModel;
59
+ export declare class ConditionalFormats extends DependencyModel {
60
60
  readonly formats: ConditionalFormat[];
61
61
  readonly cellFormatMap: Map<string, CellConditionalFormat[]>;
62
62
  readonly extremes: Map<string, [number, number]>;
63
- private _dependencies;
64
- get dependencies(): Dependencies;
65
63
  constructor(model: GridModel, sourceData?: ConditionalFormatSource);
66
64
  populate(sourceData: ConditionalFormatSource): void;
67
65
  refresh(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"conditionalFormats.d.ts","sourceRoot":"","sources":["../../src/model/conditionalFormats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conditionalFormats.d.ts","sourceRoot":"","sources":["../../src/model/conditionalFormats.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import { Formula } from "../calculations";
2
2
  import { CellRange } from "../common";
3
- import { IterableAddressRange, Dependencies } from "../model";
3
+ import { IterableAddressRange } from "../model";
4
4
  import { colors, log } from "@omegagrid/core";
5
+ import { DependencyModel } from "./dependencyModel";
5
6
  const ICON_CLR_RED = '#ff0000';
6
7
  const ICON_CLR_YELLOW = '#fcd53f';
7
8
  const ICON_CLR_GREEN = '#00bb5e';
@@ -120,14 +121,12 @@ const getIcon = (iconset, index) => {
120
121
  const i = iconSets.get(iconset);
121
122
  return i ? i[index] : null;
122
123
  };
123
- export class ConditionalFormats {
124
- get dependencies() { return this._dependencies; }
124
+ export class ConditionalFormats extends DependencyModel {
125
125
  constructor(model, sourceData) {
126
- this.model = model;
126
+ super(model, 'conditionalFormats');
127
127
  this.formats = [];
128
128
  this.cellFormatMap = new Map();
129
129
  this.extremes = new Map();
130
- this._dependencies = new Dependencies(model);
131
130
  if (sourceData)
132
131
  this.populate(sourceData);
133
132
  }
@@ -1 +1 @@
1
- {"version":3,"file":"conditionalFormats.js","sourceRoot":"","sources":["../../src/model/conditionalFormats.ts"],"names":[],"mappings":"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","sourcesContent":["import { StyleSource } from \"../types\";\nimport { Formula, FormulaString } from \"../calculations\"\nimport { CellAddress, CellRange, RangeAddress } from \"../common\"\nimport { CellModel, GridModel, IterableAddressRange, Style, Dependencies, Color } from \"../model\"\nimport { IconSpec, colors, log } from \"@omegagrid/core\";\n\nexport type ConditionalFormatTypeDiffStyle =\n 'avg' | /* Format only values that are above or below average */\n 'blank' | /* Format only cells that contain: Blanks or no Blanks */\n 'date' | /* Format only cells that contain: Dates Occurring */\n 'dup' | /* Format all duplicate values */\n 'error' | /* Format only cells that contain: Errors or No Errors */\n 'formula' | /* Format values where formula is true */\n 'rank' | /* Format only top or bottom ranked values */\n 'text' | /* Format only cells that contain: Specific Text */\n 'unique' | /* Format all unique values */\n 'val' ; /* Format only cells that contain: Cell Value */\n\nexport type ConditionalFormatTypeNoDiff =\n 'bar' | /* Format all cells based on values: Data Bars */\n 'icon' | /* Format all cells based on values: Icon Sets */\n 'scale' ; /* Format all cells based on values: 2- or 3- color scale */\n\nexport type ConditionalFormatIconType =\n\t'3Arrows'\t\t\t| /* 3 Arrows (Colored) */\n\t'3ArrowsGray'\t\t| /* 3 Arrows (Gray) */\n\t'3Flags'\t\t\t| /* 3 Flags */\n\t'3TrafficLights1'\t| /* 3 Traffic Lights (unrimmed) */\n\t'3TrafficLights2'\t| /* 3 Traffic Lights (rimmed) */\n\t'3Signs'\t\t\t| /* 3 Signs */\n\t'3Symbols'\t\t\t| /* 3 Symbols (Circled) */\n\t'3Symbols2'\t\t\t| /* 3 Symbols (Uncircled) */\n\t'3Stars'\t\t\t| /* 3 Stars */\n\t'3Triangles'\t\t| /* 3 Triangles */\n\t'4Arrows'\t\t\t| /* 4 Arrows (Colored) */\n\t'4ArrowsGray'\t\t| /* 4 Arrows (Gray) */\n\t'4RedToBlack'\t\t| /* Red To Black */\n\t'4Rating'\t\t\t| /* 4 Ratings */\n\t'4TrafficLights'\t| /* 4 Traffic Lights */\n\t'5Arrows'\t\t\t| /* 5 Arrows (Colored) */\n\t'5ArrowsGray'\t\t| /* 5 Arrows (Gray) */\n\t'5Rating'\t\t\t| /* 5 Ratings */\n\t'5Quarters'\t\t\t| /* 5 Quarters */\n\t'5Boxes' \t\t\t; /* 5 Boxes */\n\nexport type ConditionalFormatIconSetDefinition = {\n\ttype: string,\n\tcount: number,\n\ticons: IconSpec[]\n}\n\nexport type ConditionalFormatType = ConditionalFormatTypeDiffStyle | ConditionalFormatTypeNoDiff;\nexport type ConditionalFormatThresholdType = 'num'|'percent'|'percentile'|'formula'|'min'|'max';\nexport type ConditionalFormatThreshold = {t?: ConditionalFormatThresholdType, v?: number, f?: FormulaString, color?: Color};\n\nexport type ConditionalFormatItemSource = {\n\ttype?: ConditionalFormatType,\n\tranges: RangeAddress,\n\tstyle?: StyleSource,\n\tcondition?: FormulaString,\n\tstop?: boolean,\n\tcmin?: ConditionalFormatThreshold,\n\tcmid?: ConditionalFormatThreshold,\n\tcmax?: ConditionalFormatThreshold,\n\tcolor?: Color,\n\tv?: ConditionalFormatIconType|unknown,\n\tthresh?: ConditionalFormatThreshold[]\n};\n\nexport type ConditionalFormatSource = ConditionalFormatItemSource[];\n\nexport type ConditionalFormat = {\n\ttype: ConditionalFormatType,\n\tkey?: string,\n\tranges?: CellRange[],\n\tfirstCell?: CellRange,\n\tstyle?: Style,\n\tcondition?: FormulaString,\n\tformula?: Formula,\n\tstop?: boolean,\n\tcmin?: ConditionalFormatThreshold,\n\tcmid?: ConditionalFormatThreshold,\n\tcmax?: ConditionalFormatThreshold,\n\tcolor?: Color,\n\tv?: ConditionalFormatIconType|unknown,\n\tthresh?: ConditionalFormatThreshold[]\n}\n\nexport type CellConditionalFormat = {\n\tcf: ConditionalFormat, \n\tf?: Formula,\n\tinitialized?: boolean\n}\n\nconst ICON_CLR_RED = '#ff0000';\nconst ICON_CLR_YELLOW = '#fcd53f';\nconst ICON_CLR_GREEN = '#00bb5e';\nconst ICON_CLR_GRAY = '#555555';\n\nexport const iconSets = new Map<ConditionalFormatIconType, IconSpec[]>([\n\t['3Arrows', [\n\t\t{icon: ['fas', 'down'], color: ICON_CLR_RED}, \n\t\t{icon: ['fas', 'right'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'up'], color: ICON_CLR_GREEN}\n\t]],\n\t['3ArrowsGray', [\n\t\t{icon: ['fas', 'down'], color: ICON_CLR_GRAY}, \n\t\t{icon: ['fas', 'right'], color: ICON_CLR_GRAY}, \n\t\t{icon: ['fas', 'up'], color: ICON_CLR_GRAY}\n\t]],\n\t['3Flags', [\n\t\t{icon: ['fas', 'flag-pennant'], color: ICON_CLR_RED}, \n\t\t{icon: ['fas', 'flag-pennant'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'flag-pennant'], color: ICON_CLR_GREEN}\n\t]],\n\t['3TrafficLights1', [\n\t\t{icon: ['fas', 'circle'], color: ICON_CLR_RED}, \n\t\t{icon: ['fas', 'circle'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'circle'], color: ICON_CLR_GREEN}\n\t]],\n\t['3TrafficLights2', [\n\t\t{icon: ['fas', 'square-o'], color: ICON_CLR_RED}, \n\t\t{icon: ['fas', 'square-o'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'square-o'], color: ICON_CLR_GREEN}\n\t]],\n\t['3Signs', [\n\t\t{icon: ['fas', 'square'], rotation: 45, color: ICON_CLR_RED},\n\t\t{icon: ['fas', 'triangle'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'circle'], color: ICON_CLR_GREEN}\n\t]],\n\t['3Symbols', [\n\t\t{icon: ['fas', 'circle-xmark'], color: ICON_CLR_RED}, \n\t\t{icon: ['fas', 'circle-exclamation'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'circle-check'], color: ICON_CLR_GREEN}\n\t]],\n\t['3Symbols2', [\n\t\t{icon: ['fas', 'xmark'], color: ICON_CLR_RED}, \n\t\t{icon: ['fas', 'exclamation'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'check'], color: ICON_CLR_GREEN}\n\t]],\n\t['3Stars', [\n\t\t{icon: ['fal', 'star'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'star-half-stroke'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'star'], color: ICON_CLR_YELLOW}\n\t]],\n\t['3Triangles', [\n\t\t{icon: 'caret-down', color: ICON_CLR_RED}, \n\t\t{icon: 'dash', color: ICON_CLR_YELLOW}, \n\t\t{icon: 'caret-up', color: ICON_CLR_GREEN}\n\t]],\n\t['4Arrows', [\n\t\t{icon: ['fas', 'down'], color: ICON_CLR_RED}, \n\t\t{icon: ['fas', 'down-right'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'up-right'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'up'], color: ICON_CLR_GREEN}\n\t]],\n\t['4ArrowsGray', [\n\t\t{icon: ['fas', 'down'], color: ICON_CLR_GRAY}, \n\t\t{icon: ['fas', 'down-right'], color: ICON_CLR_GRAY}, \n\t\t{icon: ['fas', 'up-right'], color: ICON_CLR_GRAY}, \n\t\t{icon: ['fas', 'up'], color: ICON_CLR_GRAY}\n\t]],\n\t['4RedToBlack', [\n\t\t{icon: ['fas', 'circle'], color: '#000000'}, \n\t\t{icon: ['fas', 'circle'], color: '#b1b1b1'}, \n\t\t{icon: ['fas', 'circle'], color: '#edb2a3'}, \n\t\t{icon: ['fas', 'circle'], color: ICON_CLR_RED}\n\t]],\t\n\t['4Rating', [\n\t\t{icon: 'signal-bars-weak', color: '#4a7db1'}, \n\t\t{icon: 'signal-bars-fair', color: '#4a7db1'}, \n\t\t{icon: 'signal-bars-good', color: '#4a7db1'}, \n\t\t{icon: ['fas', 'signal-bars'], color: '#4a7db1'}\n\t]],\n\t['4TrafficLights', [\n\t\t{icon: ['fas', 'circle'], color: '#000000'}, \n\t\t{icon: ['fas', 'circle'], color: ICON_CLR_RED}, \n\t\t{icon: ['fas', 'circle'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'circle'], color: ICON_CLR_GREEN}\n\t]],\n\t['5Arrows', [\n\t\t{icon: ['fas', 'down'], color: ICON_CLR_RED}, \n\t\t{icon: ['fas', 'down-right'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'right'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'up-right'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'up'], color: ICON_CLR_GREEN},\n\t]],\n\t['5ArrowsGray', [\n\t\t{icon: ['fas', 'down'], color: ICON_CLR_GRAY}, \n\t\t{icon: ['fas', 'down-right'], color: ICON_CLR_GRAY}, \n\t\t{icon: ['fas', 'right'], color: ICON_CLR_GRAY}, \n\t\t{icon: ['fas', 'up-right'], color: ICON_CLR_GRAY}, \n\t\t{icon: ['fas', 'up'], color: ICON_CLR_GRAY},\n\t]], \n\t['5Rating', [\n\t\t{icon: ['fal', 'signal-bars']}, \n\t\t{icon: ['fal', 'signal-bars-weak'], color: '#4a7db1'}, \n\t\t{icon: ['fal', 'signal-bars-fair'], color: '#4a7db1'}, \n\t\t{icon: ['fal', 'signal-bars-good'], color: '#4a7db1'}, \n\t\t{icon: ['fas', 'signal-bars'], color: '#4a7db1'},\n\t]],\n\t['5Quarters', [\n\t\t{icon: ['fal', 'circle'], color: '#505050'}, \n\t\t{icon: ['fas', 'circle-quarter-stroke'], color: '#505050'}, \n\t\t{icon: ['fas', 'circle-half-stroke'], color: '#505050'}, \n\t\t{icon: ['fas', 'circle-three-quarters-stroke'], color: '#505050'}, \n\t\t{icon: ['fas', 'circle'], color: '#505050'}\n\t]]\n]);\n\nconst getIcon = (iconset: ConditionalFormatIconType, index: number) => {\n\tconst i = iconSets.get(iconset);\n\treturn i ? i[index] : null;\n}\n\nexport class ConditionalFormats {\n\n\tpublic readonly formats: ConditionalFormat[] = [];\n\tpublic readonly cellFormatMap = new Map<CellAddress, CellConditionalFormat[]>();\n\tpublic readonly extremes = new Map<string, [number, number]>();\n\n\tprivate _dependencies: Dependencies;\n\tget dependencies() { return this._dependencies }\n\n\tconstructor(public readonly model: GridModel, sourceData?: ConditionalFormatSource) {\n\t\tthis._dependencies = new Dependencies(model);\n\t\tif (sourceData) this.populate(sourceData);\n\t}\n\n\tpopulate(sourceData: ConditionalFormatSource) {\n\t\tsourceData.forEach(item => {\n\t\t\ttry {\n\t\t\t\tthis.add(item);\n\t\t\t} catch (error) {\n\t\t\t\tlog.getLogger().error(`conditional format error: ${JSON.stringify(item)}`, error);\n\t\t\t}\n\t\t});\n\t}\n\n\trefresh() {\n\t\tthis.dependencies.clear();\n\t\tthis.cellFormatMap.clear();\n\t\tthis.extremes.clear();\n\t\tthis.formats.forEach(item => this.initConditionalFormat(item));\n\t}\n\n\tclearCellDependecies(cell: CellModel) {\n\t\tconst addr = cell.address;\n\t\tthis.dependencies.clearCellDependecies(addr);\n\t\t\n\t\t// clear cached formulas\n\t\tconst item = this.cellFormatMap.get(addr);\n\t\titem.forEach(i => ({cf: i.cf}));\n\t\t\n\t\t// TODO - update extremes\n\t\t// maybe it should return all affected cells\n\n\t\treturn this;\n\t}\n\n\tgetExtremes(cf: ConditionalFormat) {\n\t\tif (this.extremes.has(cf.key)) return this.extremes.get(cf.key);\n\n\t\tconst extremes: [number, number] = [Infinity, -Infinity];\n\n\t\tcf.ranges.forEach(r => {\n\t\t\tfor (const row of this.model.getValuesInRange(r)) {\n\t\t\t\tfor (const v of row) {\n\t\t\t\t\tif (v == null) continue;\n\t\t\t\t\tif (isNaN(v as number)) continue;\n\t\t\t\t\textremes[0] = Math.min(extremes[0], v as number);\n\t\t\t\t\textremes[1] = Math.max(extremes[1], v as number);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tif (cf.cmin) {\n\t\t\tif (cf.cmin.t == 'num') extremes[0] = cf.cmin.v;\n\t\t\telse if (cf.cmin.t == 'percent') {\n\t\t\t\textremes[0] = extremes[0] + (extremes[1] - extremes[0]) * cf.cmin.v / 100;\n\t\t\t}\n\t\t}\n\n\t\tif (cf.cmax) {\n\t\t\tif (cf.cmax.t == 'num') extremes[1] = cf.cmax.v;\n\t\t\telse if (cf.cmax.t == 'percent') {\n\t\t\t\textremes[1] = extremes[0] + (extremes[1] - extremes[0]) * cf.cmax.v / 100;\n\t\t\t}\n\t\t}\n\n\t\tthis.extremes.set(cf.key, extremes);\n\t\treturn extremes;\n\t}\n\n\tinvalidateExtremes(cell: CellModel) {\n\t\tthis.cellFormatMap.get(cell.address).forEach(item => this.extremes.delete(item.cf.key));\n\t}\n\n\tevaluateScaleFormat(cell: CellModel, ccf: CellConditionalFormat) : Style {\n\t\tconst v = cell.value;\n\t\tif (v == null) return null;\n\n\t\tconst [min, max] = this.getExtremes(ccf.cf);\n\t\tlet fgColor: string;\n\t\tconst amount = ((v as number) - min) / (max - min);\n\n\t\tif (ccf.cf.cmid?.color) {\n\t\t\t// 3 color scale\n\t\t\tif (amount == 0.5) {\n\t\t\t\tfgColor = '#' + ccf.cf.cmid.color;\n\t\t\t} else if (amount > 0.5) {\n\t\t\t\tfgColor = colors.mix('#' + ccf.cf.cmid.color, '#' + ccf.cf.cmax.color, (amount - 0.5) * 2);\n\t\t\t} else {\n\t\t\t\tfgColor = colors.mix('#' + ccf.cf.cmin.color, '#' + ccf.cf.cmid.color, amount * 2);\n\t\t\t}\n\t\t} else if (ccf.cf.cmin?.color && ccf.cf.cmax?.color) {\n\t\t\t// 2 color scale\n\t\t\tfgColor = colors.mix('#' + ccf.cf.cmin.color, '#' + ccf.cf.cmax.color, amount);\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tcolor: colors.contrastColor(fgColor).substring(1),\n\t\t\tfgColor: fgColor.substring(1)\n\t\t};\n\t}\n\n\tevaluateBarFormat(cell: CellModel, ccf: CellConditionalFormat) : Style {\n\t\tconst v = cell.value as number;\n\t\tif (v == null) return null;\n\n\t\tconst ext = this.getExtremes(ccf.cf);\n\t\tlet min = ext[0];\n\t\tconst max = ext[1];\n\t\tconst hasNegative = min < 0;\n\t\tif (!hasNegative) min = min - 0.1 * (max - min);\n\t\tconst amount = Math.round((100 * (v - min) / (max - min)));\n\n\t\tif (!ccf.initialized) {\n\t\t\tccf.initialized = true;\n\t\t\tccf.cf.ranges.forEach(r => this._dependencies.add(cell.address, r.A1, null));\n\t\t}\n\n\t\tconst gradient: string[] = [];\n\n\t\tif (hasNegative) {\n\t\t\tconst offset = Math.round(-100 * min / (max - min));\n\t\t\tif (v >= 0) {\n\t\t\t\tgradient.push(`#00000000 ${offset}%`);\n\t\t\t\tgradient.push(`#${ccf.cf.color} ${offset}%`);\n\t\t\t\tgradient.push(`#${ccf.cf.color} ${amount}%`);\n\t\t\t\tgradient.push(`#00000000 ${amount}%`);\n\t\t\t} else {\n\t\t\t\tgradient.push(`#00000000 ${amount}%`);\n\t\t\t\tgradient.push(`#ff0000 ${amount}%`);\n\t\t\t\tgradient.push(`#ff0000 ${offset}%`);\n\t\t\t\tgradient.push(`#00000000 ${offset}%`);\n\t\t\t}\n\t\t} else {\n\t\t\tgradient.push(`#${ccf.cf.color} ${amount}%`);\n\t\t\tgradient.push(`#00000000 ${amount}%`);\n\t\t}\n\n\t\treturn {\n\t\t\tcssStyle: {\n\t\t\t\tbackgroundClip: 'padding-box',\n\t\t\t\tbackgroundImage: `linear-gradient(90deg, ${gradient.join(',')})`\n\t\t\t}\n\t\t};\n\t}\n\n\tevaluateFormulaFormat(cell: CellModel, ccf: CellConditionalFormat) {\n\t\tif (!ccf.initialized && ccf.cf.condition) {\n\t\t\tccf.initialized = true;\n\t\t\tconst addr = cell.address;\n\t\t\tconst f = new Formula(ccf.cf.condition, this.model.calculations.tokenizer);\n\t\t\tccf.f = f.shift({\n\t\t\t\tindex: 0,\n\t\t\t\toffset: cell.c - ccf.cf.firstCell.c1, \n\t\t\t\tdirection: 'right'\n\t\t\t}).shift({\n\t\t\t\tindex: 0, \n\t\t\t\toffset: cell.r - ccf.cf.firstCell.r1,\n\t\t\t\tdirection: 'down'\n\t\t\t});\n\n\t\t\tf.cells.forEach(dep => this._dependencies.add(addr, dep[1].A1, dep[2]));\n\t\t\tf.ranges.forEach(dep => this._dependencies.add(addr, dep[1].A1, dep[2]));\n\t\t\tf.variables.forEach(([_i, v]) => {\n\t\t\t\tconst c = this.model.getCellByName(v, cell.range);\n\t\t\t\tif (c) this._dependencies.add(addr, c.address, null);\n\t\t\t});\n\t\t}\n\n\t\t// if condition is not provided, it evaluates to true\n\t\tconst res = ccf.f ? this.model.calculations.evaluateFormula(ccf.f, cell) : true;\n\t\tif (!res) return null;\n\t\tconst style = {...ccf.cf.style};\n\t\tif (!style.color) colors.plainHex(colors.contrastColor(colors.css(ccf.cf.style.fgColor)));\n\t\treturn style;\n\t}\n\n\tevaluateIconFormat(cell: CellModel, ccf: CellConditionalFormat) : Style {\n\t\tconst v = cell.value;\n\t\tif (v == null) return null;\n\n\t\tconst [min, max] = this.getExtremes(ccf.cf);\n\t\tlet percentValue: number;\n\t\t\n\t\tfor (let i = ccf.cf.thresh.length - 1; i >= 0; i--) {\n\t\t\tconst thresh = ccf.cf.thresh[i];\n\t\t\tif (thresh.t === 'percent') {\n\t\t\t\tif (percentValue == null) percentValue = 100 * (v as number - min) / (max - min);\n\t\t\t\tif (percentValue >= thresh.v) {\n\t\t\t\t\treturn {icon: getIcon(ccf.cf.v as ConditionalFormatIconType, i)};\n\t\t\t\t}\n\t\t\t} else if (thresh.t === 'num') {\n\t\t\t\tif (v as number >= thresh.v) {\n\t\t\t\t\treturn {icon: getIcon(ccf.cf.v as ConditionalFormatIconType, i)};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tevaluate(cell: CellModel) {\n\t\tconst addr = cell.address;\n\t\tconst formats = this.cellFormatMap.get(addr);\n\t\tif (!formats) return null;\n\t\tlet style: Style = null;\n\t\tlet diffStyle: Style = null;\n\t\tfor (const item of formats) {\n\t\t\ttry {\n\t\t\t\tswitch (item.cf.type) {\n\t\t\t\t\tcase 'formula':\n\t\t\t\t\t\tdiffStyle = this.evaluateFormulaFormat(cell, item);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\tdiffStyle = this.evaluateScaleFormat(cell, item);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bar':\n\t\t\t\t\t\tdiffStyle = this.evaluateBarFormat(cell, item);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'icon':\n\t\t\t\t\t\tdiffStyle = this.evaluateIconFormat(cell, item);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tdiffStyle = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tlog.getLogger().error(`Conditional format error: ${JSON.stringify(item)}`, error);\n\t\t\t}\n\t\t\t\n\t\t\tif (diffStyle) {\n\t\t\t\tstyle = style ? {...style, ...diffStyle} : diffStyle;\n\t\t\t\tif (item.cf.stop) break;\n\t\t\t}\n\t\t}\n\t\treturn style;\n\t}\n\n\tinitConditionalFormat(item: ConditionalFormat) {\n\t\titem.firstCell = null;\n\t\t(item.ranges as CellRange[]).forEach(range => {\n\t\t\tfor (const r of new IterableAddressRange(range.intersect(this.model.gridRange))) {\n\t\t\t\tconst a1 = r.A1;\n\t\t\t\tswitch (item.type) {\n\t\t\t\t\tcase 'formula':\n\t\t\t\t\t\tif (!item.firstCell) {\n\t\t\t\t\t\t\titem.firstCell = r;\n\t\t\t\t\t\t\titem.formula = item.condition ? new Formula(item.condition, this.model.calculations.tokenizer) : null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tconst ccfs = this.cellFormatMap.get(a1) || this.cellFormatMap.set(a1, []).get(a1);\n\t\t\t\tccfs.push({cf: item});\n\t\t\t}\n\t\t});\n\t\treturn item;\n\t}\n\n\tadd(itemSource: ConditionalFormatItemSource) {\n\t\tconst item: ConditionalFormat = {\n\t\t\tkey: itemSource.ranges,\n\t\t\tranges: CellRange.fromA1s(itemSource.ranges),\n\t\t\ttype: itemSource.type || 'formula',\n\t\t\tfirstCell: null,\n\t\t\tformula: null,\n\t\t\tstyle: itemSource.style ? this.model.styles.add(itemSource.style) : null,\n\t\t\tcondition: itemSource.condition,\n\t\t\tstop: !!itemSource.stop,\n\t\t\tcmin: itemSource.cmin,\n\t\t\tcmid: itemSource.cmid,\n\t\t\tcmax: itemSource.cmax,\n\t\t\tcolor: itemSource.color,\n\t\t\tv: itemSource.v,\n\t\t\tthresh: itemSource.thresh\n\t\t};\n\n\t\tthis.formats.push(this.initConditionalFormat(item));\n\t}\n\n\tgetSourceData() {\n\t\treturn this.formats.map<ConditionalFormatItemSource>(format => ({\n\t\t\ttype: format.type,\n\t\t\tranges: CellRange.toA1s(format.ranges),\n\t\t\tstyle: format.style,\n\t\t\tcondition: format.condition,\n\t\t\tstop: format.stop,\n\t\t\tcmin: format.cmin,\n\t\t\tcmid: format.cmid,\n\t\t\tcmax: format.cmax,\n\t\t\tcolor: format.color,\n\t\t\tv: format.v,\n\t\t\tthresh: format.thresh\n\t\t}));\n\t}\n\n\n}"]}
1
+ {"version":3,"file":"conditionalFormats.js","sourceRoot":"","sources":["../../src/model/conditionalFormats.ts"],"names":[],"mappings":"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","sourcesContent":["import { StyleSource } from \"../types\";\nimport { Formula, FormulaString } from \"../calculations\"\nimport { CellAddress, CellRange, RangeAddress } from \"../common\"\nimport { CellModel, GridModel, IterableAddressRange, Style, Color } from \"../model\"\nimport { IconSpec, colors, log } from \"@omegagrid/core\";\nimport { DependencyModel } from \"./dependencyModel\";\n\nexport type ConditionalFormatTypeDiffStyle =\n 'avg' | /* Format only values that are above or below average */\n 'blank' | /* Format only cells that contain: Blanks or no Blanks */\n 'date' | /* Format only cells that contain: Dates Occurring */\n 'dup' | /* Format all duplicate values */\n 'error' | /* Format only cells that contain: Errors or No Errors */\n 'formula' | /* Format values where formula is true */\n 'rank' | /* Format only top or bottom ranked values */\n 'text' | /* Format only cells that contain: Specific Text */\n 'unique' | /* Format all unique values */\n 'val' ; /* Format only cells that contain: Cell Value */\n\nexport type ConditionalFormatTypeNoDiff =\n 'bar' | /* Format all cells based on values: Data Bars */\n 'icon' | /* Format all cells based on values: Icon Sets */\n 'scale' ; /* Format all cells based on values: 2- or 3- color scale */\n\nexport type ConditionalFormatIconType =\n\t'3Arrows'\t\t\t| /* 3 Arrows (Colored) */\n\t'3ArrowsGray'\t\t| /* 3 Arrows (Gray) */\n\t'3Flags'\t\t\t| /* 3 Flags */\n\t'3TrafficLights1'\t| /* 3 Traffic Lights (unrimmed) */\n\t'3TrafficLights2'\t| /* 3 Traffic Lights (rimmed) */\n\t'3Signs'\t\t\t| /* 3 Signs */\n\t'3Symbols'\t\t\t| /* 3 Symbols (Circled) */\n\t'3Symbols2'\t\t\t| /* 3 Symbols (Uncircled) */\n\t'3Stars'\t\t\t| /* 3 Stars */\n\t'3Triangles'\t\t| /* 3 Triangles */\n\t'4Arrows'\t\t\t| /* 4 Arrows (Colored) */\n\t'4ArrowsGray'\t\t| /* 4 Arrows (Gray) */\n\t'4RedToBlack'\t\t| /* Red To Black */\n\t'4Rating'\t\t\t| /* 4 Ratings */\n\t'4TrafficLights'\t| /* 4 Traffic Lights */\n\t'5Arrows'\t\t\t| /* 5 Arrows (Colored) */\n\t'5ArrowsGray'\t\t| /* 5 Arrows (Gray) */\n\t'5Rating'\t\t\t| /* 5 Ratings */\n\t'5Quarters'\t\t\t| /* 5 Quarters */\n\t'5Boxes' \t\t\t; /* 5 Boxes */\n\nexport type ConditionalFormatIconSetDefinition = {\n\ttype: string,\n\tcount: number,\n\ticons: IconSpec[]\n}\n\nexport type ConditionalFormatType = ConditionalFormatTypeDiffStyle | ConditionalFormatTypeNoDiff;\nexport type ConditionalFormatThresholdType = 'num'|'percent'|'percentile'|'formula'|'min'|'max';\nexport type ConditionalFormatThreshold = {t?: ConditionalFormatThresholdType, v?: number, f?: FormulaString, color?: Color};\n\nexport type ConditionalFormatItemSource = {\n\ttype?: ConditionalFormatType,\n\tranges: RangeAddress,\n\tstyle?: StyleSource,\n\tcondition?: FormulaString,\n\tstop?: boolean,\n\tcmin?: ConditionalFormatThreshold,\n\tcmid?: ConditionalFormatThreshold,\n\tcmax?: ConditionalFormatThreshold,\n\tcolor?: Color,\n\tv?: ConditionalFormatIconType|unknown,\n\tthresh?: ConditionalFormatThreshold[]\n};\n\nexport type ConditionalFormatSource = ConditionalFormatItemSource[];\n\nexport type ConditionalFormat = {\n\ttype: ConditionalFormatType,\n\tkey?: string,\n\tranges?: CellRange[],\n\tfirstCell?: CellRange,\n\tstyle?: Style,\n\tcondition?: FormulaString,\n\tformula?: Formula,\n\tstop?: boolean,\n\tcmin?: ConditionalFormatThreshold,\n\tcmid?: ConditionalFormatThreshold,\n\tcmax?: ConditionalFormatThreshold,\n\tcolor?: Color,\n\tv?: ConditionalFormatIconType|unknown,\n\tthresh?: ConditionalFormatThreshold[]\n}\n\nexport type CellConditionalFormat = {\n\tcf: ConditionalFormat, \n\tf?: Formula,\n\tinitialized?: boolean\n}\n\nconst ICON_CLR_RED = '#ff0000';\nconst ICON_CLR_YELLOW = '#fcd53f';\nconst ICON_CLR_GREEN = '#00bb5e';\nconst ICON_CLR_GRAY = '#555555';\n\nexport const iconSets = new Map<ConditionalFormatIconType, IconSpec[]>([\n\t['3Arrows', [\n\t\t{icon: ['fas', 'down'], color: ICON_CLR_RED}, \n\t\t{icon: ['fas', 'right'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'up'], color: ICON_CLR_GREEN}\n\t]],\n\t['3ArrowsGray', [\n\t\t{icon: ['fas', 'down'], color: ICON_CLR_GRAY}, \n\t\t{icon: ['fas', 'right'], color: ICON_CLR_GRAY}, \n\t\t{icon: ['fas', 'up'], color: ICON_CLR_GRAY}\n\t]],\n\t['3Flags', [\n\t\t{icon: ['fas', 'flag-pennant'], color: ICON_CLR_RED}, \n\t\t{icon: ['fas', 'flag-pennant'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'flag-pennant'], color: ICON_CLR_GREEN}\n\t]],\n\t['3TrafficLights1', [\n\t\t{icon: ['fas', 'circle'], color: ICON_CLR_RED}, \n\t\t{icon: ['fas', 'circle'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'circle'], color: ICON_CLR_GREEN}\n\t]],\n\t['3TrafficLights2', [\n\t\t{icon: ['fas', 'square-o'], color: ICON_CLR_RED}, \n\t\t{icon: ['fas', 'square-o'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'square-o'], color: ICON_CLR_GREEN}\n\t]],\n\t['3Signs', [\n\t\t{icon: ['fas', 'square'], rotation: 45, color: ICON_CLR_RED},\n\t\t{icon: ['fas', 'triangle'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'circle'], color: ICON_CLR_GREEN}\n\t]],\n\t['3Symbols', [\n\t\t{icon: ['fas', 'circle-xmark'], color: ICON_CLR_RED}, \n\t\t{icon: ['fas', 'circle-exclamation'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'circle-check'], color: ICON_CLR_GREEN}\n\t]],\n\t['3Symbols2', [\n\t\t{icon: ['fas', 'xmark'], color: ICON_CLR_RED}, \n\t\t{icon: ['fas', 'exclamation'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'check'], color: ICON_CLR_GREEN}\n\t]],\n\t['3Stars', [\n\t\t{icon: ['fal', 'star'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'star-half-stroke'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'star'], color: ICON_CLR_YELLOW}\n\t]],\n\t['3Triangles', [\n\t\t{icon: 'caret-down', color: ICON_CLR_RED}, \n\t\t{icon: 'dash', color: ICON_CLR_YELLOW}, \n\t\t{icon: 'caret-up', color: ICON_CLR_GREEN}\n\t]],\n\t['4Arrows', [\n\t\t{icon: ['fas', 'down'], color: ICON_CLR_RED}, \n\t\t{icon: ['fas', 'down-right'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'up-right'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'up'], color: ICON_CLR_GREEN}\n\t]],\n\t['4ArrowsGray', [\n\t\t{icon: ['fas', 'down'], color: ICON_CLR_GRAY}, \n\t\t{icon: ['fas', 'down-right'], color: ICON_CLR_GRAY}, \n\t\t{icon: ['fas', 'up-right'], color: ICON_CLR_GRAY}, \n\t\t{icon: ['fas', 'up'], color: ICON_CLR_GRAY}\n\t]],\n\t['4RedToBlack', [\n\t\t{icon: ['fas', 'circle'], color: '#000000'}, \n\t\t{icon: ['fas', 'circle'], color: '#b1b1b1'}, \n\t\t{icon: ['fas', 'circle'], color: '#edb2a3'}, \n\t\t{icon: ['fas', 'circle'], color: ICON_CLR_RED}\n\t]],\t\n\t['4Rating', [\n\t\t{icon: 'signal-bars-weak', color: '#4a7db1'}, \n\t\t{icon: 'signal-bars-fair', color: '#4a7db1'}, \n\t\t{icon: 'signal-bars-good', color: '#4a7db1'}, \n\t\t{icon: ['fas', 'signal-bars'], color: '#4a7db1'}\n\t]],\n\t['4TrafficLights', [\n\t\t{icon: ['fas', 'circle'], color: '#000000'}, \n\t\t{icon: ['fas', 'circle'], color: ICON_CLR_RED}, \n\t\t{icon: ['fas', 'circle'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'circle'], color: ICON_CLR_GREEN}\n\t]],\n\t['5Arrows', [\n\t\t{icon: ['fas', 'down'], color: ICON_CLR_RED}, \n\t\t{icon: ['fas', 'down-right'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'right'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'up-right'], color: ICON_CLR_YELLOW}, \n\t\t{icon: ['fas', 'up'], color: ICON_CLR_GREEN},\n\t]],\n\t['5ArrowsGray', [\n\t\t{icon: ['fas', 'down'], color: ICON_CLR_GRAY}, \n\t\t{icon: ['fas', 'down-right'], color: ICON_CLR_GRAY}, \n\t\t{icon: ['fas', 'right'], color: ICON_CLR_GRAY}, \n\t\t{icon: ['fas', 'up-right'], color: ICON_CLR_GRAY}, \n\t\t{icon: ['fas', 'up'], color: ICON_CLR_GRAY},\n\t]], \n\t['5Rating', [\n\t\t{icon: ['fal', 'signal-bars']}, \n\t\t{icon: ['fal', 'signal-bars-weak'], color: '#4a7db1'}, \n\t\t{icon: ['fal', 'signal-bars-fair'], color: '#4a7db1'}, \n\t\t{icon: ['fal', 'signal-bars-good'], color: '#4a7db1'}, \n\t\t{icon: ['fas', 'signal-bars'], color: '#4a7db1'},\n\t]],\n\t['5Quarters', [\n\t\t{icon: ['fal', 'circle'], color: '#505050'}, \n\t\t{icon: ['fas', 'circle-quarter-stroke'], color: '#505050'}, \n\t\t{icon: ['fas', 'circle-half-stroke'], color: '#505050'}, \n\t\t{icon: ['fas', 'circle-three-quarters-stroke'], color: '#505050'}, \n\t\t{icon: ['fas', 'circle'], color: '#505050'}\n\t]]\n]);\n\nconst getIcon = (iconset: ConditionalFormatIconType, index: number) => {\n\tconst i = iconSets.get(iconset);\n\treturn i ? i[index] : null;\n}\n\nexport class ConditionalFormats extends DependencyModel {\n\n\tpublic readonly formats: ConditionalFormat[] = [];\n\tpublic readonly cellFormatMap = new Map<CellAddress, CellConditionalFormat[]>();\n\tpublic readonly extremes = new Map<string, [number, number]>();\n\n\tconstructor(model: GridModel, sourceData?: ConditionalFormatSource) {\n\t\tsuper(model, 'conditionalFormats');\n\t\tif (sourceData) this.populate(sourceData);\n\t}\n\n\tpopulate(sourceData: ConditionalFormatSource) {\n\t\tsourceData.forEach(item => {\n\t\t\ttry {\n\t\t\t\tthis.add(item);\n\t\t\t} catch (error) {\n\t\t\t\tlog.getLogger().error(`conditional format error: ${JSON.stringify(item)}`, error);\n\t\t\t}\n\t\t});\n\t}\n\n\trefresh() {\n\t\tthis.dependencies.clear();\n\t\tthis.cellFormatMap.clear();\n\t\tthis.extremes.clear();\n\t\tthis.formats.forEach(item => this.initConditionalFormat(item));\n\t}\n\n\tclearCellDependecies(cell: CellModel) {\n\t\tconst addr = cell.address;\n\t\tthis.dependencies.clearCellDependecies(addr);\n\t\t\n\t\t// clear cached formulas\n\t\tconst item = this.cellFormatMap.get(addr);\n\t\titem.forEach(i => ({cf: i.cf}));\n\t\t\n\t\t// TODO - update extremes\n\t\t// maybe it should return all affected cells\n\n\t\treturn this;\n\t}\n\n\tgetExtremes(cf: ConditionalFormat) {\n\t\tif (this.extremes.has(cf.key)) return this.extremes.get(cf.key);\n\n\t\tconst extremes: [number, number] = [Infinity, -Infinity];\n\n\t\tcf.ranges.forEach(r => {\n\t\t\tfor (const row of this.model.getValuesInRange(r)) {\n\t\t\t\tfor (const v of row) {\n\t\t\t\t\tif (v == null) continue;\n\t\t\t\t\tif (isNaN(v as number)) continue;\n\t\t\t\t\textremes[0] = Math.min(extremes[0], v as number);\n\t\t\t\t\textremes[1] = Math.max(extremes[1], v as number);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tif (cf.cmin) {\n\t\t\tif (cf.cmin.t == 'num') extremes[0] = cf.cmin.v;\n\t\t\telse if (cf.cmin.t == 'percent') {\n\t\t\t\textremes[0] = extremes[0] + (extremes[1] - extremes[0]) * cf.cmin.v / 100;\n\t\t\t}\n\t\t}\n\n\t\tif (cf.cmax) {\n\t\t\tif (cf.cmax.t == 'num') extremes[1] = cf.cmax.v;\n\t\t\telse if (cf.cmax.t == 'percent') {\n\t\t\t\textremes[1] = extremes[0] + (extremes[1] - extremes[0]) * cf.cmax.v / 100;\n\t\t\t}\n\t\t}\n\n\t\tthis.extremes.set(cf.key, extremes);\n\t\treturn extremes;\n\t}\n\n\tinvalidateExtremes(cell: CellModel) {\n\t\tthis.cellFormatMap.get(cell.address).forEach(item => this.extremes.delete(item.cf.key));\n\t}\n\n\tevaluateScaleFormat(cell: CellModel, ccf: CellConditionalFormat) : Style {\n\t\tconst v = cell.value;\n\t\tif (v == null) return null;\n\n\t\tconst [min, max] = this.getExtremes(ccf.cf);\n\t\tlet fgColor: string;\n\t\tconst amount = ((v as number) - min) / (max - min);\n\n\t\tif (ccf.cf.cmid?.color) {\n\t\t\t// 3 color scale\n\t\t\tif (amount == 0.5) {\n\t\t\t\tfgColor = '#' + ccf.cf.cmid.color;\n\t\t\t} else if (amount > 0.5) {\n\t\t\t\tfgColor = colors.mix('#' + ccf.cf.cmid.color, '#' + ccf.cf.cmax.color, (amount - 0.5) * 2);\n\t\t\t} else {\n\t\t\t\tfgColor = colors.mix('#' + ccf.cf.cmin.color, '#' + ccf.cf.cmid.color, amount * 2);\n\t\t\t}\n\t\t} else if (ccf.cf.cmin?.color && ccf.cf.cmax?.color) {\n\t\t\t// 2 color scale\n\t\t\tfgColor = colors.mix('#' + ccf.cf.cmin.color, '#' + ccf.cf.cmax.color, amount);\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tcolor: colors.contrastColor(fgColor).substring(1),\n\t\t\tfgColor: fgColor.substring(1)\n\t\t};\n\t}\n\n\tevaluateBarFormat(cell: CellModel, ccf: CellConditionalFormat) : Style {\n\t\tconst v = cell.value as number;\n\t\tif (v == null) return null;\n\n\t\tconst ext = this.getExtremes(ccf.cf);\n\t\tlet min = ext[0];\n\t\tconst max = ext[1];\n\t\tconst hasNegative = min < 0;\n\t\tif (!hasNegative) min = min - 0.1 * (max - min);\n\t\tconst amount = Math.round((100 * (v - min) / (max - min)));\n\n\t\tif (!ccf.initialized) {\n\t\t\tccf.initialized = true;\n\t\t\tccf.cf.ranges.forEach(r => this._dependencies.add(cell.address, r.A1, null));\n\t\t}\n\n\t\tconst gradient: string[] = [];\n\n\t\tif (hasNegative) {\n\t\t\tconst offset = Math.round(-100 * min / (max - min));\n\t\t\tif (v >= 0) {\n\t\t\t\tgradient.push(`#00000000 ${offset}%`);\n\t\t\t\tgradient.push(`#${ccf.cf.color} ${offset}%`);\n\t\t\t\tgradient.push(`#${ccf.cf.color} ${amount}%`);\n\t\t\t\tgradient.push(`#00000000 ${amount}%`);\n\t\t\t} else {\n\t\t\t\tgradient.push(`#00000000 ${amount}%`);\n\t\t\t\tgradient.push(`#ff0000 ${amount}%`);\n\t\t\t\tgradient.push(`#ff0000 ${offset}%`);\n\t\t\t\tgradient.push(`#00000000 ${offset}%`);\n\t\t\t}\n\t\t} else {\n\t\t\tgradient.push(`#${ccf.cf.color} ${amount}%`);\n\t\t\tgradient.push(`#00000000 ${amount}%`);\n\t\t}\n\n\t\treturn {\n\t\t\tcssStyle: {\n\t\t\t\tbackgroundClip: 'padding-box',\n\t\t\t\tbackgroundImage: `linear-gradient(90deg, ${gradient.join(',')})`\n\t\t\t}\n\t\t};\n\t}\n\n\tevaluateFormulaFormat(cell: CellModel, ccf: CellConditionalFormat) {\n\t\tif (!ccf.initialized && ccf.cf.condition) {\n\t\t\tccf.initialized = true;\n\t\t\tconst addr = cell.address;\n\t\t\tconst f = new Formula(ccf.cf.condition, this.model.calculations.tokenizer);\n\t\t\tccf.f = f.shift({\n\t\t\t\tindex: 0,\n\t\t\t\toffset: cell.c - ccf.cf.firstCell.c1, \n\t\t\t\tdirection: 'right'\n\t\t\t}).shift({\n\t\t\t\tindex: 0, \n\t\t\t\toffset: cell.r - ccf.cf.firstCell.r1,\n\t\t\t\tdirection: 'down'\n\t\t\t});\n\n\t\t\tf.cells.forEach(dep => this._dependencies.add(addr, dep[1].A1, dep[2]));\n\t\t\tf.ranges.forEach(dep => this._dependencies.add(addr, dep[1].A1, dep[2]));\n\t\t\tf.variables.forEach(([_i, v]) => {\n\t\t\t\tconst c = this.model.getCellByName(v, cell.range);\n\t\t\t\tif (c) this._dependencies.add(addr, c.address, null);\n\t\t\t});\n\t\t}\n\n\t\t// if condition is not provided, it evaluates to true\n\t\tconst res = ccf.f ? this.model.calculations.evaluateFormula(ccf.f, cell) : true;\n\t\tif (!res) return null;\n\t\tconst style = {...ccf.cf.style};\n\t\tif (!style.color) colors.plainHex(colors.contrastColor(colors.css(ccf.cf.style.fgColor)));\n\t\treturn style;\n\t}\n\n\tevaluateIconFormat(cell: CellModel, ccf: CellConditionalFormat) : Style {\n\t\tconst v = cell.value;\n\t\tif (v == null) return null;\n\n\t\tconst [min, max] = this.getExtremes(ccf.cf);\n\t\tlet percentValue: number;\n\t\t\n\t\tfor (let i = ccf.cf.thresh.length - 1; i >= 0; i--) {\n\t\t\tconst thresh = ccf.cf.thresh[i];\n\t\t\tif (thresh.t === 'percent') {\n\t\t\t\tif (percentValue == null) percentValue = 100 * (v as number - min) / (max - min);\n\t\t\t\tif (percentValue >= thresh.v) {\n\t\t\t\t\treturn {icon: getIcon(ccf.cf.v as ConditionalFormatIconType, i)};\n\t\t\t\t}\n\t\t\t} else if (thresh.t === 'num') {\n\t\t\t\tif (v as number >= thresh.v) {\n\t\t\t\t\treturn {icon: getIcon(ccf.cf.v as ConditionalFormatIconType, i)};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tevaluate(cell: CellModel) {\n\t\tconst addr = cell.address;\n\t\tconst formats = this.cellFormatMap.get(addr);\n\t\tif (!formats) return null;\n\t\tlet style: Style = null;\n\t\tlet diffStyle: Style = null;\n\t\tfor (const item of formats) {\n\t\t\ttry {\n\t\t\t\tswitch (item.cf.type) {\n\t\t\t\t\tcase 'formula':\n\t\t\t\t\t\tdiffStyle = this.evaluateFormulaFormat(cell, item);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\tdiffStyle = this.evaluateScaleFormat(cell, item);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bar':\n\t\t\t\t\t\tdiffStyle = this.evaluateBarFormat(cell, item);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'icon':\n\t\t\t\t\t\tdiffStyle = this.evaluateIconFormat(cell, item);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tdiffStyle = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tlog.getLogger().error(`Conditional format error: ${JSON.stringify(item)}`, error);\n\t\t\t}\n\t\t\t\n\t\t\tif (diffStyle) {\n\t\t\t\tstyle = style ? {...style, ...diffStyle} : diffStyle;\n\t\t\t\tif (item.cf.stop) break;\n\t\t\t}\n\t\t}\n\t\treturn style;\n\t}\n\n\tinitConditionalFormat(item: ConditionalFormat) {\n\t\titem.firstCell = null;\n\t\t(item.ranges as CellRange[]).forEach(range => {\n\t\t\tfor (const r of new IterableAddressRange(range.intersect(this.model.gridRange))) {\n\t\t\t\tconst a1 = r.A1;\n\t\t\t\tswitch (item.type) {\n\t\t\t\t\tcase 'formula':\n\t\t\t\t\t\tif (!item.firstCell) {\n\t\t\t\t\t\t\titem.firstCell = r;\n\t\t\t\t\t\t\titem.formula = item.condition ? new Formula(item.condition, this.model.calculations.tokenizer) : null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tconst ccfs = this.cellFormatMap.get(a1) || this.cellFormatMap.set(a1, []).get(a1);\n\t\t\t\tccfs.push({cf: item});\n\t\t\t}\n\t\t});\n\t\treturn item;\n\t}\n\n\tadd(itemSource: ConditionalFormatItemSource) {\n\t\tconst item: ConditionalFormat = {\n\t\t\tkey: itemSource.ranges,\n\t\t\tranges: CellRange.fromA1s(itemSource.ranges),\n\t\t\ttype: itemSource.type || 'formula',\n\t\t\tfirstCell: null,\n\t\t\tformula: null,\n\t\t\tstyle: itemSource.style ? this.model.styles.add(itemSource.style) : null,\n\t\t\tcondition: itemSource.condition,\n\t\t\tstop: !!itemSource.stop,\n\t\t\tcmin: itemSource.cmin,\n\t\t\tcmid: itemSource.cmid,\n\t\t\tcmax: itemSource.cmax,\n\t\t\tcolor: itemSource.color,\n\t\t\tv: itemSource.v,\n\t\t\tthresh: itemSource.thresh\n\t\t};\n\n\t\tthis.formats.push(this.initConditionalFormat(item));\n\t}\n\n\tgetSourceData() {\n\t\treturn this.formats.map<ConditionalFormatItemSource>(format => ({\n\t\t\ttype: format.type,\n\t\t\tranges: CellRange.toA1s(format.ranges),\n\t\t\tstyle: format.style,\n\t\t\tcondition: format.condition,\n\t\t\tstop: format.stop,\n\t\t\tcmin: format.cmin,\n\t\t\tcmid: format.cmid,\n\t\t\tcmax: format.cmax,\n\t\t\tcolor: format.color,\n\t\t\tv: format.v,\n\t\t\tthresh: format.thresh\n\t\t}));\n\t}\n\n\n}"]}
@@ -1,10 +1,12 @@
1
- import { CellModel } from ".";
2
- import { CellAddress, CellRange, RangeAddress } from "../common";
3
- import { GridModel } from "./gridModel";
1
+ import type { CellModel } from ".";
2
+ import type { CellAddress, RangeAddress } from "../common";
3
+ import { CellRange } from "../common";
4
+ import type { GridModel } from "./gridModel";
4
5
  export type DependencyMap = Map<string, Map<string, [CellRange, string?]>>;
5
6
  export type SheetDependencyMap = Map<string, string>;
6
7
  export declare class Dependencies {
7
8
  readonly model: GridModel;
9
+ readonly modelPart: keyof GridModel;
8
10
  private _cellDependencies;
9
11
  get cellDependencies(): DependencyMap;
10
12
  private _cellDependants;
@@ -17,7 +19,7 @@ export declare class Dependencies {
17
19
  get sheetDependencies(): SheetDependencyMap;
18
20
  private _sheetDependants;
19
21
  get sheetDependants(): SheetDependencyMap;
20
- constructor(model: GridModel);
22
+ constructor(model: GridModel, modelPart?: keyof GridModel);
21
23
  clear(): void;
22
24
  clearCellDependecies(addr: RangeAddress): this;
23
25
  has(cellAddr: CellAddress): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../src/model/dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3E,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AASrD,qBAAa,YAAY;aAqBI,KAAK,EAAE,SAAS;IAlB5C,OAAO,CAAC,iBAAiB,CAA4B;IACrD,IAAI,gBAAgB,kBAAoC;IAExD,OAAO,CAAC,eAAe,CAA4B;IACnD,IAAI,cAAc,kBAAkC;IAEpD,OAAO,CAAC,kBAAkB,CAA4B;IACtD,IAAI,iBAAiB,kBAAqC;IAE1D,OAAO,CAAC,gBAAgB,CAA4B;IACpD,IAAI,eAAe,kBAAmC;IAEtD,OAAO,CAAC,kBAAkB,CAAiC;IAC3D,IAAI,iBAAiB,uBAAqC;IAE1D,OAAO,CAAC,gBAAgB,CAAiC;IACzD,IAAI,eAAe,uBAAmC;gBAE1B,KAAK,EAAE,SAAS;IAE5C,KAAK;IAOL,oBAAoB,CAAC,IAAI,EAAE,YAAY;IAsBvC,GAAG,CAAC,QAAQ,EAAE,WAAW;IAIzB,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,MAAM;IAgC3E,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,GAAE,GAAG,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAQ;IA0BhF,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAiB5C"}
1
+ {"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../src/model/dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3E,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAQrD,qBAAa,YAAY;aAsBP,KAAK,EAAE,SAAS;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,SAAS;IApBpC,OAAO,CAAC,iBAAiB,CAA4B;IACrD,IAAI,gBAAgB,kBAAoC;IAExD,OAAO,CAAC,eAAe,CAA4B;IACnD,IAAI,cAAc,kBAAkC;IAEpD,OAAO,CAAC,kBAAkB,CAA4B;IACtD,IAAI,iBAAiB,kBAAqC;IAE1D,OAAO,CAAC,gBAAgB,CAA4B;IACpD,IAAI,eAAe,kBAAmC;IAEtD,OAAO,CAAC,kBAAkB,CAAiC;IAC3D,IAAI,iBAAiB,uBAAqC;IAE1D,OAAO,CAAC,gBAAgB,CAAiC;IACzD,IAAI,eAAe,uBAAmC;gBAGrC,KAAK,EAAE,SAAS,EACvB,SAAS,GAAE,MAAM,SAA0B;IAGrD,KAAK;IAOL,oBAAoB,CAAC,IAAI,EAAE,YAAY;IAsBvC,GAAG,CAAC,QAAQ,EAAE,WAAW;IAIzB,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,MAAM;IAgC3E,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,GAAE,GAAG,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAQ;IAoChF,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAiB5C"}
@@ -12,8 +12,9 @@ export class Dependencies {
12
12
  get rangeDependants() { return this._rangeDependants; }
13
13
  get sheetDependencies() { return this._sheetDependencies; }
14
14
  get sheetDependants() { return this._sheetDependants; }
15
- constructor(model) {
15
+ constructor(model, modelPart = 'calculations') {
16
16
  this.model = model;
17
+ this.modelPart = modelPart;
17
18
  // cells dependent on the key cell
18
19
  this._cellDependencies = new Map();
19
20
  this._cellDependants = new Map();
@@ -83,15 +84,26 @@ export class Dependencies {
83
84
  }
84
85
  }
85
86
  getDependants(range, map = null) {
87
+ let model;
88
+ let connectedModel;
86
89
  const ra1 = range.A1;
87
90
  map = map ?? new Map();
88
91
  if (this._cellDependants.has(ra1)) {
89
92
  this._cellDependants.get(ra1).forEach(([r, sheet]) => {
90
93
  if (map.has(r))
91
94
  return; //map.delete(r);
92
- const dep = map.set(r, [(sheet ? this.model.getConnectedModel(sheet) : this.model).getCellByRange(r), sheet]);
93
- if (r.A1 != ra1)
94
- this.getDependants(r, dep);
95
+ if (sheet)
96
+ connectedModel = this.model.getConnectedModel(sheet);
97
+ model = connectedModel || this.model;
98
+ map.set(r, [model.getCellByRange(r), sheet]);
99
+ if (connectedModel) {
100
+ connectedModel[this.modelPart].dependencies.getDependants(r).forEach((item, r2) => {
101
+ map.set(r2, [item[0], item[1] ?? sheet]);
102
+ });
103
+ }
104
+ else if (r.A1 != ra1 || connectedModel) {
105
+ model.calculations.dependencies.getDependants(r, map);
106
+ }
95
107
  });
96
108
  }
97
109
  this._rangeDependants.forEach((map2, a1) => {
@@ -1 +1 @@
1
- {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/model/dependencies.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,SAAS,EAAgB,MAAM,WAAW,CAAC;AAMjE,SAAS,wBAAwB,CAAC,GAAkB,EAAE,OAAe,EAAE,OAAe;IACrF,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC3C,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO;YAAE,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IAC3C,CAAC,CAAC,CAAC,CAAC;AACL,CAAC;AAGD,MAAM,OAAO,YAAY;IAIxB,IAAI,gBAAgB,KAAK,OAAO,IAAI,CAAC,iBAAiB,CAAA,CAAC,CAAC;IAGxD,IAAI,cAAc,KAAK,OAAO,IAAI,CAAC,eAAe,CAAA,CAAC,CAAC;IAGpD,IAAI,iBAAiB,KAAK,OAAO,IAAI,CAAC,kBAAkB,CAAA,CAAC,CAAC;IAG1D,IAAI,eAAe,KAAK,OAAO,IAAI,CAAC,gBAAgB,CAAA,CAAC,CAAC;IAGtD,IAAI,iBAAiB,KAAK,OAAO,IAAI,CAAC,kBAAkB,CAAA,CAAC,CAAC;IAG1D,IAAI,eAAe,KAAK,OAAO,IAAI,CAAC,gBAAgB,CAAA,CAAC,CAAC;IAEtD,YAA4B,KAAgB;QAAhB,UAAK,GAAL,KAAK,CAAW;QAnB5C,kCAAkC;QAC1B,sBAAiB,GAAkB,IAAI,GAAG,EAAE,CAAC;QAG7C,oBAAe,GAAkB,IAAI,GAAG,EAAE,CAAC;QAG3C,uBAAkB,GAAkB,IAAI,GAAG,EAAE,CAAC;QAG9C,qBAAgB,GAAkB,IAAI,GAAG,EAAE,CAAC;QAG5C,uBAAkB,GAAuB,IAAI,GAAG,EAAE,CAAC;QAGnD,qBAAgB,GAAuB,IAAI,GAAG,EAAE,CAAC;IAGT,CAAC;IAEjD,KAAK;QACJ,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED,oBAAoB,CAAC,IAAkB;QACtC,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,6DAA6D;YAC7D,6BAA6B;YAC7B,oFAAoF;YACpF,2BAA2B;YAC3B,gEAAgE;YAChE,MAAM;YACN,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,8DAA8D;YAC9D,6BAA6B;YAC7B,qFAAqF;YACrF,4BAA4B;YAC5B,gEAAgE;YAChE,MAAM;YACN,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,GAAG,CAAC,QAAqB;QACxB,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtF,CAAC;IAED,GAAG,CAAC,QAAqB,EAAE,kBAAgC,EAAE,KAAc;QAC1E,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,aAAa,EAAE,CAAC;QACzD,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,aAAa,EAAE,CAAC;QACtE,kBAAkB,GAAG,QAAQ,CAAC,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QACjC,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC;QAChF,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC9C,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEpF,IAAI,UAAU,GAAkB,IAAI,CAAC;QACrC,YAAY,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;QAExD,IAAI,KAAK,EAAE,CAAC;YACX,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC3D,IAAI,cAAc,EAAE,CAAC;gBACpB,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC/F,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACzC,UAAU,GAAG,OAAO;oBACnB,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,eAAe;oBAC1D,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,cAAc,CAAC;YAC5D,CAAC;YACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACzB,CAAC;aAAM,CAAC;YACP,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;QACrE,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC;gBAAE,UAAU,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YACvF,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAClE,CAAC;IACF,CAAC;IAED,aAAa,CAAC,KAAgB,EAAE,MAA4C,IAAI;QAC/E,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;QACrB,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE;gBACpD,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAE,OAAO,CAAC,gBAAgB;gBACxC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC9G,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG;oBAAE,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;YAC1C,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE;oBAC5B,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBAAE,OAAO;oBAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBACxC,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE;wBAClC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,KAAK;qBACpF,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACJ,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACZ,CAAC;IAED,WAAW,CAAC,OAAe,EAAE,OAAe;QAC3C,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACtC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;QAED,wBAAwB,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACjE,wBAAwB,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACnE,wBAAwB,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAClE,wBAAwB,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;CAED","sourcesContent":["import { CellModel } from \".\";\nimport { CellAddress, CellRange, RangeAddress } from \"../common\";\nimport { GridModel } from \"./gridModel\";\n\nexport type DependencyMap = Map<string, Map<string, [CellRange, string?]>>;\nexport type SheetDependencyMap = Map<string, string>;\n\nfunction renameDependencyMapSheet(map: DependencyMap, oldName: string, newName: string) {\n\tmap.forEach(submap => submap.forEach(item => {\n\t\tif (item[1] == oldName) item[1] = newName;\n\t}));\n}\n\n\nexport class Dependencies {\n\n\t// cells dependent on the key cell\n\tprivate _cellDependencies: DependencyMap = new Map();\n\tget cellDependencies() { return this._cellDependencies }\n\n\tprivate _cellDependants: DependencyMap = new Map();\n\tget cellDependants() { return this._cellDependants }\n\n\tprivate _rangeDependencies: DependencyMap = new Map();\n\tget rangeDependencies() { return this._rangeDependencies }\n\n\tprivate _rangeDependants: DependencyMap = new Map();\n\tget rangeDependants() { return this._rangeDependants }\n\n\tprivate _sheetDependencies: SheetDependencyMap = new Map();\n\tget sheetDependencies() { return this._sheetDependencies }\n\n\tprivate _sheetDependants: SheetDependencyMap = new Map();\n\tget sheetDependants() { return this._sheetDependants }\n\n\tconstructor(public readonly model: GridModel) { }\n\n\tclear() {\n\t\tthis._cellDependants.clear();\n\t\tthis._cellDependencies.clear();\n\t\tthis._rangeDependencies.clear();\n\t\tthis._rangeDependants.clear();\n\t}\n\n\tclearCellDependecies(addr: RangeAddress) {\n\t\tif (this._cellDependencies.has(addr)) {\n\t\t\t// this._cellDependencies.get(addr).forEach(([r, sheet]) => {\n\t\t\t// \tconst dependants = sheet \n\t\t\t// \t\t? this.model.getConnectedModel(sheet)?.calculations.dependencies.cellDependants\n\t\t\t// \t\t: this.cellDependants;\n\t\t\t// \tif (dependants.has(r.A1)) dependants.get(r.A1).delete(addr);\n\t\t\t// });\n\t\t\tthis._cellDependencies.delete(addr);\n\t\t}\n\t\tif (this._rangeDependencies.has(addr)) {\n\t\t\t// this._rangeDependencies.get(addr).forEach(([r, sheet]) => {\n\t\t\t// \tconst dependants = sheet \n\t\t\t// \t\t? this.model.getConnectedModel(sheet)?.calculations.dependencies.rangeDependants\n\t\t\t// \t\t: this.rangeDependants;\n\t\t\t// \tif (dependants.has(r.A1)) dependants.get(r.A1).delete(addr);\n\t\t\t// });\n\t\t\tthis._rangeDependants.delete(addr);\n\t\t}\n\t\treturn this;\n\t}\n\n\thas(cellAddr: CellAddress) {\n\t\treturn this._cellDependencies.has(cellAddr) || this._rangeDependencies.has(cellAddr);\n\t}\n\n\tadd(cellAddr: CellAddress, dependentRangeAddr: RangeAddress, sheet?: string) {\n\t\tconst range = CellRange.fromA1(cellAddr).removeAnchors();\n\t\tconst depRange = CellRange.fromA1(dependentRangeAddr).removeAnchors();\n\t\tdependentRangeAddr = depRange.A1;\n\t\tconst isRange = depRange.isRange;\t\t\n\t\tconst dependencies = isRange ? this._rangeDependencies : this._cellDependencies;\n\t\tconst dependecyMap = dependencies.has(cellAddr) \n\t\t\t? dependencies.get(cellAddr) : dependencies.set(cellAddr, new Map()).get(cellAddr);\n\n\t\tlet dependants: DependencyMap = null;\n\t\tdependecyMap.set(dependentRangeAddr, [depRange, sheet]);\n\t\t\n\t\tif (sheet) {\n\t\t\tconst connectedModel = this.model.getConnectedModel(sheet);\n\t\t\tif (connectedModel) {\n\t\t\t\tconnectedModel.calculations.dependencies.sheetDependants.set(this.model.name, this.model.name);\n\t\t\t\tthis.sheetDependencies.set(sheet, sheet);\n\t\t\t\tdependants = isRange \n\t\t\t\t\t? connectedModel.calculations.dependencies.rangeDependants\n\t\t\t\t\t: connectedModel.calculations.dependencies.cellDependants;\n\t\t\t}\n\t\t\tsheet = this.model.name;\n\t\t} else {\n\t\t\tdependants = isRange ? this._rangeDependants : this._cellDependants;\n\t\t}\n\t\t\n\t\tif (dependants) {\n\t\t\tif (!dependants.has(dependentRangeAddr)) dependants.set(dependentRangeAddr, new Map());\n\t\t\tdependants.get(dependentRangeAddr).set(cellAddr, [range, sheet]);\n\t\t}\n\t}\n\n\tgetDependants(range: CellRange, map: Map<CellRange, [CellModel, string?]> = null) {\n\t\tconst ra1 = range.A1;\n\t\tmap = map ?? new Map();\n\t\tif (this._cellDependants.has(ra1)) {\n\t\t\tthis._cellDependants.get(ra1).forEach(([r, sheet]) => {\n\t\t\t\tif (map.has(r)) return; //map.delete(r);\n\t\t\t\tconst dep = map.set(r, [(sheet ? this.model.getConnectedModel(sheet) : this.model).getCellByRange(r), sheet]);\n\t\t\t\tif (r.A1 != ra1) this.getDependants(r, dep);\n\t\t\t});\n\t\t}\n\n\t\tthis._rangeDependants.forEach((map2, a1) => {\n\t\t\tconst r = CellRange.fromA1(a1);\n\t\t\tif (r.contains(range)) {\n\t\t\t\tmap2.forEach(([r2, sheet]) => {\n\t\t\t\t\tif (map.has(r2)) return; map.delete(r2);\n\t\t\t\t\tthis.getDependants(r2, map.set(r2, [\n\t\t\t\t\t\t(sheet ? this.model.getConnectedModel(sheet) : this.model).getCellByRange(r2), sheet\n\t\t\t\t\t]));\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\treturn map;\n\t}\n\n\trenameSheet(oldName: string, newName: string) {\n\t\tif (this._sheetDependants.has(oldName)) {\n\t\t\tthis._sheetDependants.delete(oldName);\n\t\t\tthis._sheetDependants.set(newName, newName);\n\t\t}\n\n\t\tif (this._sheetDependencies.has(oldName)) {\n\t\t\tthis._sheetDependencies.delete(oldName);\n\t\t\tthis._sheetDependencies.set(newName, newName);\n\t\t}\n\n\t\trenameDependencyMapSheet(this._cellDependants, oldName, newName);\n\t\trenameDependencyMapSheet(this._cellDependencies, oldName, newName);\n\t\trenameDependencyMapSheet(this._rangeDependants, oldName, newName);\n\t\trenameDependencyMapSheet(this._rangeDependencies, oldName, newName);\n\t}\n\n}"]}
1
+ {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/model/dependencies.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CellModel } from \".\";\nimport type { CellAddress, RangeAddress } from \"../common\";\nimport { CellRange } from \"../common\";\nimport { DependencyModel } from \"./dependencyModel\";\nimport type { GridModel } from \"./gridModel\";\n\nexport type DependencyMap = Map<string, Map<string, [CellRange, string?]>>;\nexport type SheetDependencyMap = Map<string, string>;\n\nfunction renameDependencyMapSheet(map: DependencyMap, oldName: string, newName: string) {\n\tmap.forEach(submap => submap.forEach(item => {\n\t\tif (item[1] == oldName) item[1] = newName;\n\t}));\n}\n\nexport class Dependencies {\n\n\t// cells dependent on the key cell\n\tprivate _cellDependencies: DependencyMap = new Map();\n\tget cellDependencies() { return this._cellDependencies }\n\n\tprivate _cellDependants: DependencyMap = new Map();\n\tget cellDependants() { return this._cellDependants }\n\n\tprivate _rangeDependencies: DependencyMap = new Map();\n\tget rangeDependencies() { return this._rangeDependencies }\n\n\tprivate _rangeDependants: DependencyMap = new Map();\n\tget rangeDependants() { return this._rangeDependants }\n\n\tprivate _sheetDependencies: SheetDependencyMap = new Map();\n\tget sheetDependencies() { return this._sheetDependencies }\n\n\tprivate _sheetDependants: SheetDependencyMap = new Map();\n\tget sheetDependants() { return this._sheetDependants }\n\n\tconstructor(\n\t\tpublic readonly model: GridModel,\n\t\treadonly modelPart: keyof GridModel = 'calculations'\n\t) { }\n\n\tclear() {\n\t\tthis._cellDependants.clear();\n\t\tthis._cellDependencies.clear();\n\t\tthis._rangeDependencies.clear();\n\t\tthis._rangeDependants.clear();\n\t}\n\n\tclearCellDependecies(addr: RangeAddress) {\n\t\tif (this._cellDependencies.has(addr)) {\n\t\t\t// this._cellDependencies.get(addr).forEach(([r, sheet]) => {\n\t\t\t// \tconst dependants = sheet \n\t\t\t// \t\t? this.model.getConnectedModel(sheet)?.calculations.dependencies.cellDependants\n\t\t\t// \t\t: this.cellDependants;\n\t\t\t// \tif (dependants.has(r.A1)) dependants.get(r.A1).delete(addr);\n\t\t\t// });\n\t\t\tthis._cellDependencies.delete(addr);\n\t\t}\n\t\tif (this._rangeDependencies.has(addr)) {\n\t\t\t// this._rangeDependencies.get(addr).forEach(([r, sheet]) => {\n\t\t\t// \tconst dependants = sheet \n\t\t\t// \t\t? this.model.getConnectedModel(sheet)?.calculations.dependencies.rangeDependants\n\t\t\t// \t\t: this.rangeDependants;\n\t\t\t// \tif (dependants.has(r.A1)) dependants.get(r.A1).delete(addr);\n\t\t\t// });\n\t\t\tthis._rangeDependants.delete(addr);\n\t\t}\n\t\treturn this;\n\t}\n\n\thas(cellAddr: CellAddress) {\n\t\treturn this._cellDependencies.has(cellAddr) || this._rangeDependencies.has(cellAddr);\n\t}\n\n\tadd(cellAddr: CellAddress, dependentRangeAddr: RangeAddress, sheet?: string) {\n\t\tconst range = CellRange.fromA1(cellAddr).removeAnchors();\n\t\tconst depRange = CellRange.fromA1(dependentRangeAddr).removeAnchors();\n\t\tdependentRangeAddr = depRange.A1;\n\t\tconst isRange = depRange.isRange;\t\t\n\t\tconst dependencies = isRange ? this._rangeDependencies : this._cellDependencies;\n\t\tconst dependecyMap = dependencies.has(cellAddr) \n\t\t\t? dependencies.get(cellAddr) : dependencies.set(cellAddr, new Map()).get(cellAddr);\n\n\t\tlet dependants: DependencyMap = null;\n\t\tdependecyMap.set(dependentRangeAddr, [depRange, sheet]);\n\t\t\n\t\tif (sheet) {\n\t\t\tconst connectedModel = this.model.getConnectedModel(sheet);\n\t\t\tif (connectedModel) {\n\t\t\t\tconnectedModel.calculations.dependencies.sheetDependants.set(this.model.name, this.model.name);\n\t\t\t\tthis.sheetDependencies.set(sheet, sheet);\n\t\t\t\tdependants = isRange \n\t\t\t\t\t? connectedModel.calculations.dependencies.rangeDependants\n\t\t\t\t\t: connectedModel.calculations.dependencies.cellDependants;\n\t\t\t}\n\t\t\tsheet = this.model.name;\n\t\t} else {\n\t\t\tdependants = isRange ? this._rangeDependants : this._cellDependants;\n\t\t}\n\t\t\n\t\tif (dependants) {\n\t\t\tif (!dependants.has(dependentRangeAddr)) dependants.set(dependentRangeAddr, new Map());\n\t\t\tdependants.get(dependentRangeAddr).set(cellAddr, [range, sheet]);\n\t\t}\n\t}\n\n\tgetDependants(range: CellRange, map: Map<CellRange, [CellModel, string?]> = null) {\n\t\tlet model: GridModel;\n\t\tlet connectedModel: GridModel;\n\t\tconst ra1 = range.A1;\n\t\tmap = map ?? new Map();\n\t\tif (this._cellDependants.has(ra1)) {\n\t\t\tthis._cellDependants.get(ra1).forEach(([r, sheet]) => {\n\t\t\t\tif (map.has(r)) return; //map.delete(r);\n\t\t\t\tif (sheet) connectedModel = this.model.getConnectedModel(sheet);\n\t\t\t\tmodel = connectedModel || this.model;\n\t\t\t\tmap.set(r, [model.getCellByRange(r), sheet]);\n\t\t\t\tif (connectedModel) {\n\t\t\t\t\t(connectedModel[this.modelPart] as DependencyModel).dependencies.getDependants(r).forEach((item, r2) => {\n\t\t\t\t\t\tmap.set(r2, [item[0], item[1] ?? sheet]);\n\t\t\t\t\t});\n\t\t\t\t} else if (r.A1 != ra1 || connectedModel) {\n\t\t\t\t\tmodel.calculations.dependencies.getDependants(r, map);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tthis._rangeDependants.forEach((map2, a1) => {\n\t\t\tconst r = CellRange.fromA1(a1);\n\t\t\tif (r.contains(range)) {\n\t\t\t\tmap2.forEach(([r2, sheet]) => {\n\t\t\t\t\tif (map.has(r2)) return; map.delete(r2);\n\t\t\t\t\tthis.getDependants(r2, map.set(r2, [\n\t\t\t\t\t\t(sheet ? this.model.getConnectedModel(sheet) : this.model).getCellByRange(r2), sheet\n\t\t\t\t\t]));\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\treturn map;\n\t}\n\n\trenameSheet(oldName: string, newName: string) {\n\t\tif (this._sheetDependants.has(oldName)) {\n\t\t\tthis._sheetDependants.delete(oldName);\n\t\t\tthis._sheetDependants.set(newName, newName);\n\t\t}\n\n\t\tif (this._sheetDependencies.has(oldName)) {\n\t\t\tthis._sheetDependencies.delete(oldName);\n\t\t\tthis._sheetDependencies.set(newName, newName);\n\t\t}\n\n\t\trenameDependencyMapSheet(this._cellDependants, oldName, newName);\n\t\trenameDependencyMapSheet(this._cellDependencies, oldName, newName);\n\t\trenameDependencyMapSheet(this._rangeDependants, oldName, newName);\n\t\trenameDependencyMapSheet(this._rangeDependencies, oldName, newName);\n\t}\n\n}"]}
@@ -0,0 +1,9 @@
1
+ import { Dependencies } from "./dependencies";
2
+ import { GridModel } from "./gridModel";
3
+ export declare abstract class DependencyModel {
4
+ readonly model: GridModel;
5
+ protected _dependencies: Dependencies;
6
+ get dependencies(): Dependencies;
7
+ constructor(model: GridModel, modelPart?: keyof GridModel);
8
+ }
9
+ //# sourceMappingURL=dependencyModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencyModel.d.ts","sourceRoot":"","sources":["../../src/model/dependencyModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,8BAAsB,eAAe;aAKR,KAAK,EAAE,SAAS;IAH5C,SAAS,CAAC,aAAa,EAAE,YAAY,CAAC;IACtC,IAAI,YAAY,iBAAgC;gBAEpB,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,SAAS;CAIzE"}
@@ -0,0 +1,9 @@
1
+ import { Dependencies } from "./dependencies";
2
+ export class DependencyModel {
3
+ get dependencies() { return this._dependencies; }
4
+ constructor(model, modelPart) {
5
+ this.model = model;
6
+ this._dependencies = new Dependencies(model, modelPart);
7
+ }
8
+ }
9
+ //# sourceMappingURL=dependencyModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencyModel.js","sourceRoot":"","sources":["../../src/model/dependencyModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,OAAgB,eAAe;IAGpC,IAAI,YAAY,KAAK,OAAO,IAAI,CAAC,aAAa,CAAA,CAAC,CAAC;IAEhD,YAA4B,KAAgB,EAAE,SAA2B;QAA7C,UAAK,GAAL,KAAK,CAAW;QAC3C,IAAI,CAAC,aAAa,GAAG,IAAI,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACzD,CAAC;CAED","sourcesContent":["import { Dependencies } from \"./dependencies\";\nimport { GridModel } from \"./gridModel\";\n\nexport abstract class DependencyModel {\n\n\tprotected _dependencies: Dependencies;\n\tget dependencies() { return this._dependencies }\n\n\tconstructor(public readonly model: GridModel, modelPart?: keyof GridModel) {\n\t\tthis._dependencies = new Dependencies(model, modelPart);\n\t}\n\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { CellAddress, CellRange, RangeAddress } from "../common";
2
2
  import { GridModel } from "../model";
3
- import { Dependencies } from "../model/dependencies";
3
+ import { DependencyModel } from "../model/dependencyModel";
4
4
  import { ShiftOptions } from "../types";
5
5
  export type SparklineType = 'line' | 'column';
6
6
  export type SparklineExtremeValue = 'auto' | 'common' | number;
@@ -34,10 +34,8 @@ export type SparklineGroupDef = SparklineOptions & {
34
34
  dataRanges: SparklineDataRanges;
35
35
  locRange: CellRange;
36
36
  };
37
- export declare class Sparklines {
37
+ export declare class Sparklines extends DependencyModel {
38
38
  readonly model: GridModel;
39
- private _dependencies;
40
- get dependencies(): Dependencies;
41
39
  map: Map<string, SparklineItem>;
42
40
  groups: Map<number, SparklineGroupDef>;
43
41
  extremes: Map<number, [number, number]>;
@@ -1 +1 @@
1
- {"version":3,"file":"sparklines.d.ts","sourceRoot":"","sources":["../../src/sparklines/sparklines.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,MAAM,aAAa,GAAG,MAAM,GAAC,QAAQ,CAAC;AAC5C,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAC,QAAQ,GAAC,MAAM,CAAC;AAC3D,MAAM,MAAM,gBAAgB,GAAG;IAC9B,oEAAoE;IACpE,QAAQ,EAAE,qBAAqB,CAAC;IAChC,mEAAmE;IACnE,QAAQ,EAAE,qBAAqB,CAAC;IAChC,oCAAoC;IACpC,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAA;KACd,CAAC;IACF,MAAM,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAA;KACb,CAAA;CACD,CAAC;AAEF,kDAAkD;AAClD,MAAM,MAAM,eAAe,GAAG;IAC7B,uCAAuC;IACvC,QAAQ,EAAE,YAAY,CAAC;IACvB,8EAA8E;IAC9E,IAAI,EAAE,YAAY,GAAC,YAAY,EAAE,CAAC;IAClC,wBAAwB;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;AAGzD,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAC1D,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG;IAAC,UAAU,EAAE,mBAAmB,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAC,CAAC;AAE1G,qBAAa,UAAU;aAYM,KAAK,EAAE,SAAS;IAV5C,OAAO,CAAC,aAAa,CAAe;IACpC,IAAI,YAAY,iBAAgC;IAEhD,GAAG,6BAAyC;IAC5C,MAAM,iCAAwC;IAC9C,QAAQ,gCAAuC;IAE/C,QAAQ,SAAK;IACb,cAAc,UAAS;gBAEK,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,eAAe,EAAE;IAK5E,QAAQ,CAAC,UAAU,EAAE,eAAe,EAAE;IAgBtC,aAAa;IAkBb,GAAG,CAAC,OAAO,EAAE,WAAW;IAIxB,GAAG,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa;IAIxC,kBAAkB,CAAC,OAAO,EAAE,WAAW;IAKvC,eAAe;IAMf,SAAS,CAAC,OAAO,EAAE,WAAW;IAQ9B,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IA+CnD,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,mBAAmB;IAwCvF,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,gBAAgB;IAWpF,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,gBAAgB;IAM3G,MAAM,CAAC,UAAU,EAAE,MAAM;IAKzB,KAAK,CAAC,OAAO,EAAE,YAAY;CAoB3B"}
1
+ {"version":3,"file":"sparklines.d.ts","sourceRoot":"","sources":["../../src/sparklines/sparklines.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,MAAM,aAAa,GAAG,MAAM,GAAC,QAAQ,CAAC;AAC5C,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAC,QAAQ,GAAC,MAAM,CAAC;AAC3D,MAAM,MAAM,gBAAgB,GAAG;IAC9B,oEAAoE;IACpE,QAAQ,EAAE,qBAAqB,CAAC;IAChC,mEAAmE;IACnE,QAAQ,EAAE,qBAAqB,CAAC;IAChC,oCAAoC;IACpC,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAA;KACd,CAAC;IACF,MAAM,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAA;KACb,CAAA;CACD,CAAC;AAEF,kDAAkD;AAClD,MAAM,MAAM,eAAe,GAAG;IAC7B,uCAAuC;IACvC,QAAQ,EAAE,YAAY,CAAC;IACvB,8EAA8E;IAC9E,IAAI,EAAE,YAAY,GAAC,YAAY,EAAE,CAAC;IAClC,wBAAwB;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;AAGzD,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAC1D,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG;IAAC,UAAU,EAAE,mBAAmB,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAC,CAAC;AAE1G,qBAAa,UAAW,SAAQ,eAAe;aASlB,KAAK,EAAE,SAAS;IAP5C,GAAG,6BAAyC;IAC5C,MAAM,iCAAwC;IAC9C,QAAQ,gCAAuC;IAE/C,QAAQ,SAAK;IACb,cAAc,UAAS;gBAEK,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,eAAe,EAAE;IAK5E,QAAQ,CAAC,UAAU,EAAE,eAAe,EAAE;IAgBtC,aAAa;IAkBb,GAAG,CAAC,OAAO,EAAE,WAAW;IAIxB,GAAG,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa;IAIxC,kBAAkB,CAAC,OAAO,EAAE,WAAW;IAKvC,eAAe;IAMf,SAAS,CAAC,OAAO,EAAE,WAAW;IAQ9B,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IA+CnD,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,mBAAmB;IAwCvF,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,gBAAgB;IAWpF,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,gBAAgB;IAM3G,MAAM,CAAC,UAAU,EAAE,MAAM;IAKzB,KAAK,CAAC,OAAO,EAAE,YAAY;CAoB3B"}
@@ -1,17 +1,16 @@
1
1
  import { utils } from "@omegagrid/core";
2
2
  import { CellRange } from "../common";
3
3
  import constants from "../constants";
4
- import { Dependencies } from "../model/dependencies";
5
- export class Sparklines {
6
- get dependencies() { return this._dependencies; }
4
+ import { DependencyModel } from "../model/dependencyModel";
5
+ export class Sparklines extends DependencyModel {
7
6
  constructor(model, sourceData) {
7
+ super(model, 'sparklines');
8
8
  this.model = model;
9
9
  this.map = new Map();
10
10
  this.groups = new Map();
11
11
  this.extremes = new Map();
12
12
  this.maxIndex = 0;
13
13
  this.updateRangeMap = false;
14
- this._dependencies = new Dependencies(model);
15
14
  this.populate(sourceData);
16
15
  }
17
16
  populate(sourceData) {
@@ -1 +1 @@
1
- {"version":3,"file":"sparklines.js","sourceRoot":"","sources":["../../src/sparklines/sparklines.ts"],"names":[],"mappings":"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","sourcesContent":["import { Matrix, utils } from \"@omegagrid/core\";\nimport { CellAddress, CellRange, RangeAddress } from \"../common\";\nimport constants from \"../constants\";\nimport { GridModel } from \"../model\";\nimport { Dependencies } from \"../model/dependencies\";\nimport { ShiftOptions } from \"../types\";\n\nexport type SparklineType = 'line'|'column';\nexport type SparklineExtremeValue = 'auto'|'common'|number;\nexport type SparklineOptions = {\n\t/** Minimum value of sparkline (absolute value, \"auto\", \"common\") */\n\tminValue: SparklineExtremeValue,\n\t/** Maximum value of sparkline (bsolute value, \"auto\", \"common\") */\n\tmaxValue: SparklineExtremeValue,\n\t/** Chart type (\"line\", \"column\") */\n\ttype: SparklineType,\n\tstyle: {\n\t\tcolor: string,\n\t\tweight: number\n\t},\n\tmarker?: {\n\t\tcolor: string\n\t}\n};\n\n/** Source object type for sparkline definition */\nexport type SparklineSource = {\n\t/** Cell range containing sparklines */\n\tlocation: RangeAddress,\n\t/** Cell ranges of sparkline data sources. Array or comma separated string. */\n\tdata: RangeAddress|RangeAddress[],\n\t/** Sparkline options */\n\toptions?: Partial<SparklineOptions>\n}\n\nexport type SparklineDataRanges = [CellRange, string?][];\n\n// [group_index, range, sheet]\nexport type SparklineItem = [number, SparklineDataRanges];\nexport type SparklineGroupDef = SparklineOptions & {dataRanges: SparklineDataRanges, locRange: CellRange};\n\nexport class Sparklines {\n\n\tprivate _dependencies: Dependencies;\n\tget dependencies() { return this._dependencies }\n\n\tmap = new Map<CellAddress, SparklineItem>();\n\tgroups = new Map<number, SparklineGroupDef>();\n\textremes = new Map<number, [number, number]>();\n\n\tmaxIndex = 0;\n\tupdateRangeMap = false;\n\n\tconstructor(public readonly model: GridModel, sourceData?: SparklineSource[]) {\n\t\tthis._dependencies = new Dependencies(model);\n\t\tthis.populate(sourceData);\n\t}\n\n\tpopulate(sourceData: SparklineSource[]) {\n\t\tsourceData?.forEach(item => {\n\t\t\ttry {\n\t\t\t\tthis.add(\n\t\t\t\t\tCellRange.fromA1(item.location), \n\t\t\t\t\tArray.isArray(item.data) \n\t\t\t\t\t\t? item.data.map(addr => [CellRange.fromA1(addr)])\n\t\t\t\t\t\t: (item.data as string).split(',').map(addr => [CellRange.fromA1(addr)]),\n\t\t\t\t\tutils.mergeDeep<Partial<SparklineOptions>>({}, constants.DEFAULT_SPARKLINE_OPTIONS, item.options) as SparklineOptions\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tthis.model.logger.error(`sparkline error: ${JSON.stringify(item)}`, error);\n\t\t\t}\n\t\t});\n\t}\n\n\tgetSourceData() {\n\t\tconst data: SparklineSource[] = [];\n\t\tthis.groups.forEach(group => {\n\t\t\tdata.push({\n\t\t\t\tlocation: group.locRange.A1,\n\t\t\t\tdata: group.dataRanges.map(r => r[0].A1).join(','),\n\t\t\t\toptions: {\n\t\t\t\t\tminValue: group.minValue,\n\t\t\t\t\tmaxValue: group.maxValue,\n\t\t\t\t\ttype: group.type,\n\t\t\t\t\tstyle: group.style,\n\t\t\t\t\tmarker: group.marker\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\treturn data;\n\t}\n\n\thas(address: CellAddress) {\n\t\treturn this.map.has(address);\n\t}\n\n\tget(address: CellAddress): SparklineItem {\n\t\treturn this.map.get(address);\n\t}\n\n\tcreateDependencies(address: CellAddress) {\n\t\tconst item = this.map.get(address);\n\t\titem[1].forEach(dataRange => this._dependencies.add(address, dataRange[0].A1, dataRange[1]));\n\t}\n\n\tupdateRangeMaps() {\n\t\tthis.dependencies.clear();\n\t\tthis.map.clear();\n\t\tthis.groups.forEach((group, groupIndex) => this.createRangeMap(groupIndex, group.locRange, group.dataRanges));\n\t}\n\n\tgetValues(address: CellAddress) {\n\t\tif (this.updateRangeMap) this.updateRangeMaps();\n\t\tconst item = this.map.get(address);\n\t\tconst model = item[1][0][1] ? this.model.getConnectedModel(item[1][0][1]) : this.model;\n\t\tif (!this._dependencies.has(address)) this.createDependencies(address);\n\t\treturn item[1].flatMap(dataRange => model.getValuesInRange(dataRange[0])[0] as number[]);\n\t}\n\n\tgetExtremes(address: CellAddress): [number, number] {\n\t\tconst item = this.map.get(address);\n\t\tconst model = item[1][0][1] ? this.model.getConnectedModel(item[1][0][1]) : this.model;\n\t\tconst group = this.groups.get(item[0]);\n\t\tlet localExtremes: [number, number];\n\t\tlet commonExtremes: [number, number];\n\t\tlet min: number, max: number;\n\t\t\n\t\tif (group.minValue == null || utils.isString(group.minValue)) {\n\t\t\tif ((group.minValue || 'auto') == 'auto') {\n\t\t\t\tlocalExtremes = localExtremes ?? utils.minmax2d(...item[1].map(itm => model.getValuesInRange(itm[0]) as Matrix<number>));\n\t\t\t\tmin = localExtremes[0];\n\t\t\t} else {\n\t\t\t\tif (!this.extremes.has(item[0])) {\n\t\t\t\t\tthis.extremes.set(\n\t\t\t\t\t\titem[0],\n\t\t\t\t\t\tutils.minmax2d(...group.dataRanges.map(dr => model.getValuesInRange(dr[0]) as Matrix<number>))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcommonExtremes = this.extremes.get(item[0]);\n\t\t\t\tmin = commonExtremes[0];\n\t\t\t}\n\t\t} else {\n\t\t\tmin = group.minValue as number;\n\t\t}\n\t\t\n\t\tif (group.maxValue == null || utils.isString(group.maxValue)) {\n\t\t\tif ((group.maxValue || 'auto') == 'auto') {\n\t\t\t\tlocalExtremes = localExtremes ?? utils.minmax2d(...item[1].map(itm => model.getValuesInRange(itm[0]) as Matrix<number>));\n\t\t\t\tmax = localExtremes[1];\n\t\t\t} else {\n\t\t\t\tif (!this.extremes.has(item[0])) {\n\t\t\t\t\tthis.extremes.set(\n\t\t\t\t\t\titem[0], \n\t\t\t\t\t\tutils.minmax2d(...group.dataRanges.map(dr => model.getValuesInRange(dr[0]) as Matrix<number>))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcommonExtremes = this.extremes.get(item[0]);\n\t\t\t\tmax = commonExtremes[1];\n\t\t\t}\n\t\t} else {\n\t\t\tmax = group.maxValue as number;\n\t\t}\n\n\t\treturn [min, max];\n\t}\n\n\tcreateRangeMap(groupIndex: number, locRange: CellRange, dataRanges: SparklineDataRanges) {\n\t\tlocRange = locRange.intersect(this.model.gridRange);\n\t\t\n\t\tconst dataSize = dataRanges[0][0].size;\n\t\tconst locSize = locRange.size;\n\n\t\tif (locSize.columns > 1 && locSize.rows > 1) {\n\t\t\tthis.model.logger?.error(`invalid sparkline location range: ${locRange.A1}`);\n\t\t\treturn;\n\t\t}\n\n\t\tlet vertical = false;\n\t\tif (locSize.columns == 1 && locSize.rows == 1) vertical = dataSize.rows > 1;\n\t\telse vertical = locSize.columns > 1;\n\n\t\tif (vertical) {\n\t\t\tfor (let c = locRange.c1; c <= locRange.c2; c++) {\n\t\t\t\tthis.map.set((new CellRange(c, locRange.r1).A1), [groupIndex, \n\t\t\t\t\tdataRanges.map(([dr, sheet]) => [new CellRange(\n\t\t\t\t\t\tdr.c1 + c - locRange.c1,\n\t\t\t\t\t\tdr.r1,\n\t\t\t\t\t\tdr.c1 + c - locRange.c1,\n\t\t\t\t\t\tdr.r2\n\t\t\t\t\t), sheet])\n\t\t\t\t]);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (let r = locRange.r1; r <= locRange.r2; r++) {\n\t\t\t\tthis.map.set((new CellRange(locRange.c1, r).A1), [groupIndex, \n\t\t\t\t\tdataRanges.map(([dr, sheet]) => [new CellRange(\n\t\t\t\t\t\tdr.c1,\n\t\t\t\t\t\tdr.r1 + r - locRange.r1,\n\t\t\t\t\t\tdr.c2,\n\t\t\t\t\t\tdr.r1 + r - locRange.r1,\n\t\t\t\t\t), sheet])\n\t\t\t\t]);\n\t\t\t}\n\t\t}\n\t}\n\n\tadd(locRange: CellRange, dataRanges: SparklineDataRanges, options?: SparklineOptions) {\n\t\t// if ((vertical && locSize.columns != dataSize.columns) || (!vertical && locSize.rows != dataSize.rows)) {\n\t\t// \tthis.model.logger?.error(`invalid sparkline data range: ${dataRanges[0][0].A1}`);\n\t\t// \treturn;\n\t\t// }\n\n\t\tconst groupIndex = ++this.maxIndex;\n\t\tif (locRange && dataRanges) this.createRangeMap(groupIndex, locRange, dataRanges);\n\t\tthis.groups.set(groupIndex, Object.assign({ dataRanges, locRange }, JSON.parse(JSON.stringify(constants.DEFAULT_SPARKLINE_OPTIONS)), options));\n\t}\n\n\tupdate(groupIndex: number, locRange: CellRange, dataRanges: SparklineDataRanges, options?: SparklineOptions) {\n\t\tconst group = this.groups.get(groupIndex);\n\t\tObject.assign(group, { dataRanges, locRange }, options);\n\t\tthis.updateRangeMap = true;\n\t}\n\n\tdelete(groupIndex: number) {\n\t\tthis.groups.delete(groupIndex);\n\t\tthis.updateRangeMap = true;\n\t}\n\n\tshift(options: ShiftOptions) {\n\t\t// TODO - tady je nekde chyba, workaround updateRangeMaps updatuje uplne vsechno\n\t\t// Array.from(this.map.keys()).forEach((addr) => {\n\t\t// \tconst keyRange = CellRange.fromA1(addr);\n\t\t// \tthis.map.get(addr)[1].forEach(([r]) => r.shift(index, offset, direction));\n\t\t// \tkeyRange.shift(index, offset, direction);\n\t\t// \tif (keyRange.A1 != addr) {\n\t\t// \t\tthis.map.set(keyRange.A1, this.map.get(addr));\n\t\t// \t\tthis.map.delete(addr);\n\t\t// \t}\n\t\t// });\n\t\t// this.dependencies.clear();\n\n\t\tthis.groups.forEach(g => {\n\t\t\tg.dataRanges.forEach(([r]) => r.shift(options));\n\t\t\tg.locRange.shift(options);\n\t\t});\n\t\tthis.updateRangeMaps()\n\t}\n\n}"]}
1
+ {"version":3,"file":"sparklines.js","sourceRoot":"","sources":["../../src/sparklines/sparklines.ts"],"names":[],"mappings":"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","sourcesContent":["import { Matrix, utils } from \"@omegagrid/core\";\nimport { CellAddress, CellRange, RangeAddress } from \"../common\";\nimport constants from \"../constants\";\nimport { GridModel } from \"../model\";\nimport { DependencyModel } from \"../model/dependencyModel\";\nimport { ShiftOptions } from \"../types\";\n\nexport type SparklineType = 'line'|'column';\nexport type SparklineExtremeValue = 'auto'|'common'|number;\nexport type SparklineOptions = {\n\t/** Minimum value of sparkline (absolute value, \"auto\", \"common\") */\n\tminValue: SparklineExtremeValue,\n\t/** Maximum value of sparkline (bsolute value, \"auto\", \"common\") */\n\tmaxValue: SparklineExtremeValue,\n\t/** Chart type (\"line\", \"column\") */\n\ttype: SparklineType,\n\tstyle: {\n\t\tcolor: string,\n\t\tweight: number\n\t},\n\tmarker?: {\n\t\tcolor: string\n\t}\n};\n\n/** Source object type for sparkline definition */\nexport type SparklineSource = {\n\t/** Cell range containing sparklines */\n\tlocation: RangeAddress,\n\t/** Cell ranges of sparkline data sources. Array or comma separated string. */\n\tdata: RangeAddress|RangeAddress[],\n\t/** Sparkline options */\n\toptions?: Partial<SparklineOptions>\n}\n\nexport type SparklineDataRanges = [CellRange, string?][];\n\n// [group_index, range, sheet]\nexport type SparklineItem = [number, SparklineDataRanges];\nexport type SparklineGroupDef = SparklineOptions & {dataRanges: SparklineDataRanges, locRange: CellRange};\n\nexport class Sparklines extends DependencyModel {\n\n\tmap = new Map<CellAddress, SparklineItem>();\n\tgroups = new Map<number, SparklineGroupDef>();\n\textremes = new Map<number, [number, number]>();\n\n\tmaxIndex = 0;\n\tupdateRangeMap = false;\n\n\tconstructor(public readonly model: GridModel, sourceData?: SparklineSource[]) {\n\t\tsuper(model, 'sparklines');\n\t\tthis.populate(sourceData);\n\t}\n\n\tpopulate(sourceData: SparklineSource[]) {\n\t\tsourceData?.forEach(item => {\n\t\t\ttry {\n\t\t\t\tthis.add(\n\t\t\t\t\tCellRange.fromA1(item.location), \n\t\t\t\t\tArray.isArray(item.data) \n\t\t\t\t\t\t? item.data.map(addr => [CellRange.fromA1(addr)])\n\t\t\t\t\t\t: (item.data as string).split(',').map(addr => [CellRange.fromA1(addr)]),\n\t\t\t\t\tutils.mergeDeep<Partial<SparklineOptions>>({}, constants.DEFAULT_SPARKLINE_OPTIONS, item.options) as SparklineOptions\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tthis.model.logger.error(`sparkline error: ${JSON.stringify(item)}`, error);\n\t\t\t}\n\t\t});\n\t}\n\n\tgetSourceData() {\n\t\tconst data: SparklineSource[] = [];\n\t\tthis.groups.forEach(group => {\n\t\t\tdata.push({\n\t\t\t\tlocation: group.locRange.A1,\n\t\t\t\tdata: group.dataRanges.map(r => r[0].A1).join(','),\n\t\t\t\toptions: {\n\t\t\t\t\tminValue: group.minValue,\n\t\t\t\t\tmaxValue: group.maxValue,\n\t\t\t\t\ttype: group.type,\n\t\t\t\t\tstyle: group.style,\n\t\t\t\t\tmarker: group.marker\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\treturn data;\n\t}\n\n\thas(address: CellAddress) {\n\t\treturn this.map.has(address);\n\t}\n\n\tget(address: CellAddress): SparklineItem {\n\t\treturn this.map.get(address);\n\t}\n\n\tcreateDependencies(address: CellAddress) {\n\t\tconst item = this.map.get(address);\n\t\titem[1].forEach(dataRange => this._dependencies.add(address, dataRange[0].A1, dataRange[1]));\n\t}\n\n\tupdateRangeMaps() {\n\t\tthis.dependencies.clear();\n\t\tthis.map.clear();\n\t\tthis.groups.forEach((group, groupIndex) => this.createRangeMap(groupIndex, group.locRange, group.dataRanges));\n\t}\n\n\tgetValues(address: CellAddress) {\n\t\tif (this.updateRangeMap) this.updateRangeMaps();\n\t\tconst item = this.map.get(address);\n\t\tconst model = item[1][0][1] ? this.model.getConnectedModel(item[1][0][1]) : this.model;\n\t\tif (!this._dependencies.has(address)) this.createDependencies(address);\n\t\treturn item[1].flatMap(dataRange => model.getValuesInRange(dataRange[0])[0] as number[]);\n\t}\n\n\tgetExtremes(address: CellAddress): [number, number] {\n\t\tconst item = this.map.get(address);\n\t\tconst model = item[1][0][1] ? this.model.getConnectedModel(item[1][0][1]) : this.model;\n\t\tconst group = this.groups.get(item[0]);\n\t\tlet localExtremes: [number, number];\n\t\tlet commonExtremes: [number, number];\n\t\tlet min: number, max: number;\n\t\t\n\t\tif (group.minValue == null || utils.isString(group.minValue)) {\n\t\t\tif ((group.minValue || 'auto') == 'auto') {\n\t\t\t\tlocalExtremes = localExtremes ?? utils.minmax2d(...item[1].map(itm => model.getValuesInRange(itm[0]) as Matrix<number>));\n\t\t\t\tmin = localExtremes[0];\n\t\t\t} else {\n\t\t\t\tif (!this.extremes.has(item[0])) {\n\t\t\t\t\tthis.extremes.set(\n\t\t\t\t\t\titem[0],\n\t\t\t\t\t\tutils.minmax2d(...group.dataRanges.map(dr => model.getValuesInRange(dr[0]) as Matrix<number>))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcommonExtremes = this.extremes.get(item[0]);\n\t\t\t\tmin = commonExtremes[0];\n\t\t\t}\n\t\t} else {\n\t\t\tmin = group.minValue as number;\n\t\t}\n\t\t\n\t\tif (group.maxValue == null || utils.isString(group.maxValue)) {\n\t\t\tif ((group.maxValue || 'auto') == 'auto') {\n\t\t\t\tlocalExtremes = localExtremes ?? utils.minmax2d(...item[1].map(itm => model.getValuesInRange(itm[0]) as Matrix<number>));\n\t\t\t\tmax = localExtremes[1];\n\t\t\t} else {\n\t\t\t\tif (!this.extremes.has(item[0])) {\n\t\t\t\t\tthis.extremes.set(\n\t\t\t\t\t\titem[0], \n\t\t\t\t\t\tutils.minmax2d(...group.dataRanges.map(dr => model.getValuesInRange(dr[0]) as Matrix<number>))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcommonExtremes = this.extremes.get(item[0]);\n\t\t\t\tmax = commonExtremes[1];\n\t\t\t}\n\t\t} else {\n\t\t\tmax = group.maxValue as number;\n\t\t}\n\n\t\treturn [min, max];\n\t}\n\n\tcreateRangeMap(groupIndex: number, locRange: CellRange, dataRanges: SparklineDataRanges) {\n\t\tlocRange = locRange.intersect(this.model.gridRange);\n\t\t\n\t\tconst dataSize = dataRanges[0][0].size;\n\t\tconst locSize = locRange.size;\n\n\t\tif (locSize.columns > 1 && locSize.rows > 1) {\n\t\t\tthis.model.logger?.error(`invalid sparkline location range: ${locRange.A1}`);\n\t\t\treturn;\n\t\t}\n\n\t\tlet vertical = false;\n\t\tif (locSize.columns == 1 && locSize.rows == 1) vertical = dataSize.rows > 1;\n\t\telse vertical = locSize.columns > 1;\n\n\t\tif (vertical) {\n\t\t\tfor (let c = locRange.c1; c <= locRange.c2; c++) {\n\t\t\t\tthis.map.set((new CellRange(c, locRange.r1).A1), [groupIndex, \n\t\t\t\t\tdataRanges.map(([dr, sheet]) => [new CellRange(\n\t\t\t\t\t\tdr.c1 + c - locRange.c1,\n\t\t\t\t\t\tdr.r1,\n\t\t\t\t\t\tdr.c1 + c - locRange.c1,\n\t\t\t\t\t\tdr.r2\n\t\t\t\t\t), sheet])\n\t\t\t\t]);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (let r = locRange.r1; r <= locRange.r2; r++) {\n\t\t\t\tthis.map.set((new CellRange(locRange.c1, r).A1), [groupIndex, \n\t\t\t\t\tdataRanges.map(([dr, sheet]) => [new CellRange(\n\t\t\t\t\t\tdr.c1,\n\t\t\t\t\t\tdr.r1 + r - locRange.r1,\n\t\t\t\t\t\tdr.c2,\n\t\t\t\t\t\tdr.r1 + r - locRange.r1,\n\t\t\t\t\t), sheet])\n\t\t\t\t]);\n\t\t\t}\n\t\t}\n\t}\n\n\tadd(locRange: CellRange, dataRanges: SparklineDataRanges, options?: SparklineOptions) {\n\t\t// if ((vertical && locSize.columns != dataSize.columns) || (!vertical && locSize.rows != dataSize.rows)) {\n\t\t// \tthis.model.logger?.error(`invalid sparkline data range: ${dataRanges[0][0].A1}`);\n\t\t// \treturn;\n\t\t// }\n\n\t\tconst groupIndex = ++this.maxIndex;\n\t\tif (locRange && dataRanges) this.createRangeMap(groupIndex, locRange, dataRanges);\n\t\tthis.groups.set(groupIndex, Object.assign({ dataRanges, locRange }, JSON.parse(JSON.stringify(constants.DEFAULT_SPARKLINE_OPTIONS)), options));\n\t}\n\n\tupdate(groupIndex: number, locRange: CellRange, dataRanges: SparklineDataRanges, options?: SparklineOptions) {\n\t\tconst group = this.groups.get(groupIndex);\n\t\tObject.assign(group, { dataRanges, locRange }, options);\n\t\tthis.updateRangeMap = true;\n\t}\n\n\tdelete(groupIndex: number) {\n\t\tthis.groups.delete(groupIndex);\n\t\tthis.updateRangeMap = true;\n\t}\n\n\tshift(options: ShiftOptions) {\n\t\t// TODO - tady je nekde chyba, workaround updateRangeMaps updatuje uplne vsechno\n\t\t// Array.from(this.map.keys()).forEach((addr) => {\n\t\t// \tconst keyRange = CellRange.fromA1(addr);\n\t\t// \tthis.map.get(addr)[1].forEach(([r]) => r.shift(index, offset, direction));\n\t\t// \tkeyRange.shift(index, offset, direction);\n\t\t// \tif (keyRange.A1 != addr) {\n\t\t// \t\tthis.map.set(keyRange.A1, this.map.get(addr));\n\t\t// \t\tthis.map.delete(addr);\n\t\t// \t}\n\t\t// });\n\t\t// this.dependencies.clear();\n\n\t\tthis.groups.forEach(g => {\n\t\t\tg.dataRanges.forEach(([r]) => r.shift(options));\n\t\t\tg.locRange.shift(options);\n\t\t});\n\t\tthis.updateRangeMaps()\n\t}\n\n}"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omegagrid/grid-core",
3
- "version": "0.6.95",
3
+ "version": "0.6.97",
4
4
  "license": "UNLICENSED",
5
5
  "description": "Grid model, no ui components",
6
6
  "main": "./dist/index.js",
@@ -28,8 +28,8 @@
28
28
  "generate-functions-docs": "node ./scripts/generate-functions-docs.cjs"
29
29
  },
30
30
  "dependencies": {
31
- "@omegagrid/core": "^0.6.95",
32
- "@omegagrid/localize": "^0.6.95",
31
+ "@omegagrid/core": "^0.6.97",
32
+ "@omegagrid/localize": "^0.6.97",
33
33
  "@stdlib/stats": "^0.0.13",
34
34
  "color": "^4.2.3",
35
35
  "date-fns": "^3.2.0",