pixel-react 1.4.2 → 1.4.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (134) hide show
  1. package/.yarn/install-state.gz +0 -0
  2. package/lib/components/AddResourceButton/type.d.ts +1 -1
  3. package/lib/components/Drawer/Types.d.ts +4 -0
  4. package/lib/components/Excel/ExcelContextMenu/ExcelContextMenu.d.ts +13 -0
  5. package/lib/components/Excel/ExcelFile/ExcelFileComponents/Spreadsheet.d.ts +0 -13
  6. package/lib/components/Excel/ExcelFile/ExcelFileComponents/actions.d.ts +29 -1
  7. package/lib/components/Excel/ExcelFile/ExcelFileComponents/engine/engine.d.ts +3 -9
  8. package/lib/components/Excel/ExcelFile/ExcelFileComponents/engine/formula.d.ts +2 -10
  9. package/lib/components/Excel/ExcelFile/ExcelFileComponents/engine/point-graph.d.ts +0 -1
  10. package/lib/components/Excel/ExcelFile/ExcelFileComponents/types.d.ts +27 -2
  11. package/lib/components/Form/Forms.d.ts +4 -2
  12. package/lib/components/InputWithDropdown/InputWithDropdown.d.ts +1 -1
  13. package/lib/components/MenuOption/MenuOption.d.ts +1 -1
  14. package/lib/components/MenuOption/types.d.ts +49 -15
  15. package/lib/components/MiniModal/types.d.ts +1 -1
  16. package/lib/components/MultiSelect/MultiSelect.d.ts +1 -1
  17. package/lib/components/MultiSelect/MultiSelectTypes.d.ts +4 -5
  18. package/lib/components/MultiSelect/dropdownTypes.d.ts +2 -0
  19. package/lib/components/RadioButton/RadioButton.d.ts +1 -0
  20. package/lib/components/RadioButton/radioButtonTypes.d.ts +3 -1
  21. package/lib/components/Select/components/types.d.ts +4 -2
  22. package/lib/components/Table/Table.d.ts +1 -1
  23. package/lib/components/ToggleSwitch/ToggleSwitch.d.ts +10 -0
  24. package/lib/components/ToggleSwitch/index.d.ts +1 -0
  25. package/lib/index.d.ts +110 -24
  26. package/lib/index.esm.js +5732 -648
  27. package/lib/index.esm.js.map +1 -1
  28. package/lib/index.js +5728 -642
  29. package/lib/index.js.map +1 -1
  30. package/lib/tsconfig.tsbuildinfo +1 -1
  31. package/package.json +11 -11
  32. package/src/StyleGuide/ColorPalette/colorPaletteList.ts +10 -0
  33. package/src/assets/Themes/BaseTheme.scss +17 -23
  34. package/src/assets/Themes/DarkTheme.scss +25 -38
  35. package/src/assets/icons/apk_file_type.svg +4 -0
  36. package/src/assets/icons/compressed_file_type.svg +4 -0
  37. package/src/assets/icons/csv_file_type.svg +4 -0
  38. package/src/assets/icons/excel_corner_menu.svg +3 -0
  39. package/src/assets/icons/formula_icon.svg +3 -0
  40. package/src/assets/icons/gif_file_type.svg +4 -0
  41. package/src/assets/icons/html_file_type.svg +4 -0
  42. package/src/assets/icons/ipk_file_type.svg +4 -0
  43. package/src/assets/icons/jpg_file_type.svg +4 -0
  44. package/src/assets/icons/json_file_type.svg +4 -0
  45. package/src/assets/icons/pdf_file_type.svg +4 -0
  46. package/src/assets/icons/png_file_type.svg +4 -0
  47. package/src/assets/icons/quick_run_setting_icon.svg +5 -0
  48. package/src/assets/icons/run_automation_scripts_icon.svg +33 -0
  49. package/src/assets/icons/run_manual_testcase_icon.svg +4 -0
  50. package/src/assets/icons/search.svg +2 -2
  51. package/src/assets/icons/txt_file_type.svg +4 -0
  52. package/src/assets/icons/xls_file_type.svg +4 -0
  53. package/src/assets/icons/xlsx_file_type.svg +4 -0
  54. package/src/assets/icons/xml_file_type.svg +4 -0
  55. package/src/assets/styles/_fonts.scss +32 -2
  56. package/src/components/AddResourceButton/AddButton.tsx +7 -7
  57. package/src/components/AddResourceButton/type.ts +1 -1
  58. package/src/components/AttachmentButton/AttachmentButton.scss +1 -1
  59. package/src/components/AttachmentButton/AttachmentButton.stories.tsx +1 -0
  60. package/src/components/Button/Button.scss +22 -20
  61. package/src/components/Button/Button.tsx +8 -1
  62. package/src/components/Charts/DashboardDonutChart/DashboardDonutChart.tsx +2 -2
  63. package/src/components/Drawer/Drawer.scss +4 -3
  64. package/src/components/Drawer/Drawer.tsx +14 -18
  65. package/src/components/Drawer/Types.ts +4 -0
  66. package/src/components/Editor/Editor.tsx +9 -11
  67. package/src/components/Excel/ExcelContextMenu/ExcelContextMenu.scss +39 -0
  68. package/src/components/Excel/ExcelContextMenu/ExcelContextMenu.tsx +51 -0
  69. package/src/components/Excel/ExcelFile/ExcelFile.tsx +7 -8
  70. package/src/components/Excel/ExcelFile/ExcelFileComponents/Cell.tsx +35 -0
  71. package/src/components/Excel/ExcelFile/ExcelFileComponents/ColumnIndicator.tsx +44 -7
  72. package/src/components/Excel/ExcelFile/ExcelFileComponents/CornerIndicator.tsx +8 -1
  73. package/src/components/Excel/ExcelFile/ExcelFileComponents/RowIndicator.tsx +45 -6
  74. package/src/components/Excel/ExcelFile/ExcelFileComponents/Spreadsheet.scss +37 -2
  75. package/src/components/Excel/ExcelFile/ExcelFileComponents/Spreadsheet.tsx +69 -24
  76. package/src/components/Excel/ExcelFile/ExcelFileComponents/actions.ts +59 -0
  77. package/src/components/Excel/ExcelFile/ExcelFileComponents/engine/engine.ts +18 -65
  78. package/src/components/Excel/ExcelFile/ExcelFileComponents/engine/formula.ts +5 -110
  79. package/src/components/Excel/ExcelFile/ExcelFileComponents/engine/point-graph.ts +0 -2
  80. package/src/components/Excel/ExcelFile/ExcelFileComponents/reducer.ts +105 -1
  81. package/src/components/Excel/ExcelFile/ExcelFileComponents/reducerFunctions.ts +670 -673
  82. package/src/components/Excel/ExcelFile/ExcelFileComponents/types.ts +38 -2
  83. package/src/components/Excel/ExcelToolBar/ExcelToolBar.tsx +0 -4
  84. package/src/components/FileDropzone/FileDropzone.scss +4 -2
  85. package/src/components/FileDropzone/FileDropzone.tsx +1 -1
  86. package/src/components/FileDropzone/FilePreview.tsx +3 -1
  87. package/src/components/Form/Form.scss +2 -0
  88. package/src/components/Form/Form.stories.tsx +195 -6
  89. package/src/components/Form/Forms.tsx +15 -8
  90. package/src/components/Icon/iconList.ts +46 -0
  91. package/src/components/IconRadioGroup/IconRadioGroup.scss +3 -0
  92. package/src/components/IconRadioGroup/IconRadioGroup.tsx +20 -17
  93. package/src/components/Input/Input.scss +14 -15
  94. package/src/components/Input/Input.stories.tsx +2 -1
  95. package/src/components/InputWithDropdown/InputWithDropdown.scss +12 -13
  96. package/src/components/InputWithDropdown/InputWithDropdown.stories.tsx +3 -2
  97. package/src/components/InputWithDropdown/InputWithDropdown.tsx +22 -19
  98. package/src/components/MenuOption/MenuOption.scss +11 -10
  99. package/src/components/MenuOption/MenuOption.stories.tsx +51 -232
  100. package/src/components/MenuOption/MenuOption.tsx +131 -52
  101. package/src/components/MenuOption/types.ts +55 -14
  102. package/src/components/MiniModal/MiniModal.stories.tsx +7 -6
  103. package/src/components/MiniModal/MiniModal.tsx +29 -23
  104. package/src/components/MiniModal/types.ts +1 -1
  105. package/src/components/MultiSelect/Dropdown.tsx +11 -12
  106. package/src/components/MultiSelect/MultiSelect.scss +1 -0
  107. package/src/components/MultiSelect/MultiSelect.stories.tsx +45 -10
  108. package/src/components/MultiSelect/MultiSelect.tsx +29 -13
  109. package/src/components/MultiSelect/MultiSelectTypes.ts +7 -5
  110. package/src/components/MultiSelect/dropdownTypes.ts +2 -0
  111. package/src/components/RadioButton/RadioButton.scss +3 -1
  112. package/src/components/RadioButton/RadioButton.tsx +3 -1
  113. package/src/components/RadioButton/radioButtonTypes.tsx +5 -1
  114. package/src/components/Search/Search.scss +25 -6
  115. package/src/components/Search/Search.tsx +45 -24
  116. package/src/components/Select/Select.scss +12 -12
  117. package/src/components/Select/Select.stories.tsx +2 -0
  118. package/src/components/Select/Select.tsx +11 -5
  119. package/src/components/Select/components/Dropdown.scss +2 -0
  120. package/src/components/Select/components/Dropdown.tsx +19 -4
  121. package/src/components/Select/components/types.ts +4 -2
  122. package/src/components/StatusButton/StatusButton.tsx +26 -20
  123. package/src/components/Table/Table.scss +1 -3
  124. package/src/components/Table/Table.stories.tsx +1 -0
  125. package/src/components/Table/Table.tsx +7 -3
  126. package/src/components/ToggleSwitch/ToggleSwitch.scss +59 -0
  127. package/src/components/ToggleSwitch/ToggleSwitch.stories.tsx +52 -0
  128. package/src/components/ToggleSwitch/ToggleSwitch.tsx +30 -0
  129. package/src/components/ToggleSwitch/index.ts +1 -0
  130. package/src/components/Typography/Typography.scss +32 -2
  131. package/src/hooks/useFileDropzone.tsx +1 -0
  132. package/src/index.ts +4 -2
  133. package/src/components/Excel/ContextMenu/ContextMenu.scss +0 -99
  134. package/src/components/Excel/ContextMenu/ContextMenu.tsx +0 -103
@@ -1,4 +1,3 @@
1
- import FormulaParser, { FormulaError, Value } from 'fast-formula-parser';
2
1
  import * as Matrix from '../matrix';
3
2
  import { Point } from '../point';
4
3
  import { CellBase, CreateFormulaParser } from '../types';
@@ -20,10 +19,9 @@ export class Model<Cell extends CellBase> {
20
19
  ) {
21
20
  this.createFormulaParser = createFormulaParser;
22
21
  this.data = data;
23
- this.referenceGraph = referenceGraph || createReferenceGraph(data);
22
+ this.referenceGraph = referenceGraph || createReferenceGraph();
24
23
  this.evaluatedData =
25
- evaluatedData ||
26
- createEvaluatedData(data, this.referenceGraph, this.createFormulaParser);
24
+ evaluatedData || createEvaluatedData(data, this.referenceGraph);
27
25
  }
28
26
  }
29
27
 
@@ -34,17 +32,15 @@ export function updateCellValue<Cell extends CellBase>(
34
32
  ): Model<Cell> {
35
33
  const nextData = Matrix.set(point, cell, model.data);
36
34
  const nextReferenceGraph = Formula.isFormulaValue(cell.value)
37
- ? updateReferenceGraph(model.referenceGraph, point, cell, nextData)
35
+ ? updateReferenceGraph(model.referenceGraph)
38
36
  : model.referenceGraph;
39
37
 
40
- const formulaParser = model.createFormulaParser(nextData);
41
38
  const nextEvaluatedData = evaluateCell(
42
39
  model.evaluatedData,
43
40
  nextData,
44
41
  nextReferenceGraph,
45
42
  point,
46
- cell,
47
- formulaParser
43
+ cell
48
44
  );
49
45
  return new Model(
50
46
  model.createFormulaParser,
@@ -54,19 +50,8 @@ export function updateCellValue<Cell extends CellBase>(
54
50
  );
55
51
  }
56
52
 
57
- function updateReferenceGraph(
58
- referenceGraph: PointGraph,
59
- point: Point,
60
- cell: CellBase<string>,
61
- data: Matrix.Matrix<CellBase>
62
- ): PointGraph {
63
- const references = Formula.getReferences(
64
- Formula.extractFormula(cell.value),
65
- point,
66
- data
67
- );
68
- const nextReferenceGraph = referenceGraph.set(point, references);
69
- return nextReferenceGraph;
53
+ function updateReferenceGraph(referenceGraph: PointGraph): PointGraph {
54
+ return referenceGraph;
70
55
  }
71
56
 
72
57
  function evaluateCell<Cell extends CellBase>(
@@ -74,14 +59,13 @@ function evaluateCell<Cell extends CellBase>(
74
59
  data: Matrix.Matrix<Cell>,
75
60
  referenceGraph: PointGraph,
76
61
  point: Point,
77
- cell: Cell,
78
- formulaParser: FormulaParser
62
+ cell: Cell
79
63
  ): Matrix.Matrix<Cell> {
80
64
  if (referenceGraph.hasCircularDependency(point)) {
81
65
  let visited = PointSet.from([point]);
82
66
  let nextEvaluatedData = Matrix.set(
83
67
  point,
84
- { ...cell, value: FormulaError.REF },
68
+ { ...cell, value: 'TODO' }, // TODO For Formula Evaluation
85
69
  prevEvaluatedData
86
70
  );
87
71
  for (const referrer of referenceGraph.getBackwardsRecursive(point)) {
@@ -95,7 +79,7 @@ function evaluateCell<Cell extends CellBase>(
95
79
  }
96
80
  nextEvaluatedData = Matrix.set(
97
81
  referrer,
98
- { ...referrerCell, value: FormulaError.REF },
82
+ { ...referrerCell, value: 'TODO' }, // TODO For Formula Evaluation
99
83
  nextEvaluatedData
100
84
  );
101
85
  }
@@ -105,7 +89,7 @@ function evaluateCell<Cell extends CellBase>(
105
89
  let nextEvaluatedData = prevEvaluatedData;
106
90
 
107
91
  const evaluatedValue = Formula.isFormulaValue(cell.value)
108
- ? getFormulaComputedValue(cell.value, point, formulaParser)
92
+ ? getFormulaComputedValue()
109
93
  : cell.value;
110
94
 
111
95
  const evaluatedCell = { ...cell, value: evaluatedValue };
@@ -119,7 +103,7 @@ function evaluateCell<Cell extends CellBase>(
119
103
  continue;
120
104
  }
121
105
  const evaluatedValue = Formula.isFormulaValue(referrerCell.value)
122
- ? getFormulaComputedValue(referrerCell.value, point, formulaParser)
106
+ ? getFormulaComputedValue()
123
107
  : referrerCell.value;
124
108
  const evaluatedCell = { ...referrerCell, value: evaluatedValue };
125
109
  nextEvaluatedData = Matrix.set(referrer, evaluatedCell, nextEvaluatedData);
@@ -128,35 +112,17 @@ function evaluateCell<Cell extends CellBase>(
128
112
  return nextEvaluatedData;
129
113
  }
130
114
 
131
- /**
132
- *
133
- * @param data - the spreadsheet data
134
- * @returns the spreadsheet reference graph
135
- */
136
- export function createReferenceGraph(
137
- data: Matrix.Matrix<CellBase>
138
- ): PointGraph {
115
+ export function createReferenceGraph(): PointGraph {
139
116
  const entries: Array<[Point, PointSet]> = [];
140
- for (const [point, cell] of Matrix.entries(data)) {
141
- if (cell && Formula.isFormulaValue(cell.value)) {
142
- const references = Formula.getReferences(
143
- Formula.extractFormula(cell.value),
144
- point,
145
- data
146
- );
147
- entries.push([point, references]);
148
- }
149
- }
117
+
150
118
  return PointGraph.from(entries);
151
119
  }
152
120
 
153
121
  export function createEvaluatedData<Cell extends CellBase>(
154
122
  data: Matrix.Matrix<Cell>,
155
- referenceGraph: PointGraph,
156
- createFormulaParser: CreateFormulaParser
123
+ referenceGraph: PointGraph
157
124
  ): Matrix.Matrix<Cell> {
158
125
  let evaluatedData = data;
159
- let formulaParser = createFormulaParser(evaluatedData);
160
126
 
161
127
  // Iterate over the points in the reference graph, starting from the leaves
162
128
  for (const point of referenceGraph.traverseBFSBackwards()) {
@@ -168,17 +134,12 @@ export function createEvaluatedData<Cell extends CellBase>(
168
134
 
169
135
  // If the cell is a formula cell, evaluate it
170
136
  if (Formula.isFormulaValue(cell.value)) {
171
- const evaluatedValue = getFormulaComputedValue(
172
- cell.value,
173
- point,
174
- formulaParser
175
- );
137
+ const evaluatedValue = getFormulaComputedValue();
176
138
  evaluatedData = Matrix.set(
177
139
  point,
178
140
  { ...cell, value: evaluatedValue },
179
141
  evaluatedData
180
142
  );
181
- formulaParser = createFormulaParser(evaluatedData);
182
143
  }
183
144
  }
184
145
 
@@ -186,15 +147,7 @@ export function createEvaluatedData<Cell extends CellBase>(
186
147
  }
187
148
 
188
149
  /** Get the computed value of a formula cell */
189
- export function getFormulaComputedValue(
190
- value: string,
191
- point: Point,
192
- formulaParser: FormulaParser
193
- ): Value {
194
- const formula = Formula.extractFormula(value);
195
- try {
196
- return Formula.evaluate(formula, point, formulaParser);
197
- } catch (e) {
198
- return FormulaError.REF;
199
- }
150
+ //TODO Function need to be Evaluate
151
+ export function getFormulaComputedValue() {
152
+ return 'TODO'; // TODO For Formula Evaluation
200
153
  }
@@ -1,15 +1,5 @@
1
- import FormulaParser, {
2
- CellRef,
3
- DepParser,
4
- FormulaError,
5
- FormulaParserConfig,
6
- Value,
7
- } from 'fast-formula-parser';
8
- import { PointRange } from '../point-range';
9
- import { Point } from '../point';
10
1
  import * as Matrix from '../matrix';
11
2
  import { CellBase } from '../types';
12
- import { PointSet } from './point-set';
13
3
 
14
4
  export const FORMULA_VALUE_PREFIX = '=';
15
5
 
@@ -29,109 +19,14 @@ export function extractFormula(value: string): string {
29
19
 
30
20
  export function createFormulaParser(
31
21
  data: Matrix.Matrix<CellBase>,
32
- config?: Omit<FormulaParserConfig, 'onCell' | 'onRange'>
33
- ): FormulaParser {
34
- return new FormulaParser({
35
- ...config,
36
- onCell: (ref) => {
37
- const point: Point = {
38
- row: ref.row - 1,
39
- column: ref.col - 1,
40
- };
41
- const cell = Matrix.get(point, data);
42
- if (!isNaN(cell?.value as number)) return Number(cell?.value);
43
- return cell?.value;
44
- },
45
- onRange: (ref) => {
46
- const size = Matrix.getSize(data);
47
- const start: Point = {
48
- row: ref.from.row - 1,
49
- column: ref.from.col - 1,
50
- };
51
- const end: Point = {
52
- row: Math.min(ref.to.row - 1, size.rows - 1),
53
- column: Math.min(ref.to.col - 1, size.columns - 1),
54
- };
55
- const dataSlice = Matrix.slice(start, end, data);
56
- return Matrix.toArray(dataSlice, (cell) => {
57
- if (!isNaN(cell?.value as number)) return Number(cell?.value);
58
- return cell?.value;
59
- });
60
- },
61
- });
22
+ ) {
23
+ return data
62
24
  }
63
25
 
64
- const depParser = new DepParser();
65
-
66
- /**
67
- * For given formula returns the cell references
68
- * @param formula - formula to get references for
69
- */
70
- export function getReferences(
71
- formula: string,
72
- point: Point,
73
- data: Matrix.Matrix<CellBase>
74
- ): PointSet {
75
- const { rows, columns } = Matrix.getSize(data);
26
+ export function evaluate() {
76
27
  try {
77
- const dependencies = depParser.parse(formula, convertPointToCellRef(point));
78
-
79
- const references = PointSet.from(
80
- dependencies.flatMap((reference) => {
81
- const isRange = 'from' in reference;
82
- if (isRange) {
83
- const { from, to } = reference;
84
-
85
- const normalizedFrom: Point = {
86
- row: from.row - 1,
87
- column: from.col - 1,
88
- };
89
-
90
- const normalizedTo: Point = {
91
- row: Math.min(to.row - 1, rows - 1),
92
- column: Math.min(to.col - 1, columns - 1),
93
- };
94
-
95
- const range = new PointRange(normalizedFrom, normalizedTo);
96
-
97
- return Array.from(range);
98
- }
99
- return { row: reference.row - 1, column: reference.col - 1 };
100
- })
101
- );
102
-
103
- return references;
28
+ return "";
104
29
  } catch (error) {
105
- if (error instanceof FormulaError) {
106
- return PointSet.from([]);
107
- } else {
108
- throw error;
109
- }
110
- }
111
- }
112
-
113
- export function evaluate(
114
- formula: string,
115
- point: Point,
116
- formulaParser: FormulaParser
117
- ): Value {
118
- try {
119
- const position = convertPointToCellRef(point);
120
- const returned = formulaParser.parse(formula, position);
121
- return returned instanceof FormulaError ? returned.toString() : returned;
122
- } catch (error) {
123
- if (error instanceof FormulaError) {
124
- return error.toString();
125
- }
126
30
  throw error;
127
31
  }
128
- }
129
-
130
- function convertPointToCellRef(point: Point): CellRef {
131
- return {
132
- row: point.row + 1,
133
- col: point.column + 1,
134
- // TODO: fill once we support multiple sheets
135
- sheet: 'Sheet1',
136
- };
137
- }
32
+ }
@@ -58,7 +58,6 @@ export class PointGraph {
58
58
  return result;
59
59
  }
60
60
 
61
- /** Determine whether the graph has a circular dependency, starting from given start point */
62
61
  hasCircularDependency(startPoint: Point): boolean {
63
62
  let visited = PointSet.from([]);
64
63
  const stack: Point[] = [startPoint];
@@ -96,7 +95,6 @@ export class PointGraph {
96
95
  visitedHashes.add(key);
97
96
  yield [point, values];
98
97
 
99
- // Make sure to include values that are not included in the forwards map keys
100
98
  for (const value of values) {
101
99
  const hash = pointHash.toString(value);
102
100
  if (!visitedHashes.has(hash) && !this.forwards.has(hash)) {
@@ -30,6 +30,7 @@ import {
30
30
  isActiveReadOnly,
31
31
  view,
32
32
  } from './reducerFunctions';
33
+ import { checkEmpty } from '../../../../utils/checkEmpty/checkEmpty';
33
34
 
34
35
  export const INITIAL_STATE: Types.StoreState = {
35
36
  active: null,
@@ -44,6 +45,8 @@ export const INITIAL_STATE: Types.StoreState = {
44
45
  selected: new EmptySelection(),
45
46
  copied: null,
46
47
  lastCommit: null,
48
+ selectedColumn: null,
49
+ selectedRow: null,
47
50
  };
48
51
 
49
52
  export default function reducer(
@@ -51,6 +54,104 @@ export default function reducer(
51
54
  action: Actions.Action
52
55
  ): Types.StoreState {
53
56
  switch (action.type) {
57
+ case Actions.ADD_ROW_TOP: {
58
+ let { selectedRow, selectedColumn, model } = state;
59
+ if (checkEmpty(selectedRow)) {
60
+ return state;
61
+ }
62
+ selectedRow = selectedRow as number;
63
+ let updatedData = [...model.data];
64
+ const newRow = Array(updatedData[0]?.length || 0).fill({
65
+ value: undefined,
66
+ });
67
+ updatedData.splice(selectedRow, 0, newRow);
68
+ const updatedModel = new Model(model.createFormulaParser, updatedData);
69
+
70
+ return {
71
+ ...state,
72
+ model: updatedModel,
73
+ selectedRow: selectedRow,
74
+ selectedColumn: selectedColumn,
75
+ };
76
+ }
77
+
78
+ case Actions.ADD_COLUMN_LEFT: {
79
+ let { selectedRow, selectedColumn, model } = state;
80
+ if (checkEmpty(selectedColumn)) {
81
+ return state;
82
+ }
83
+ selectedColumn = selectedColumn as number;
84
+ let updatedData = [...model.data];
85
+ updatedData = updatedData.map((row) => {
86
+ const newCell = { value: undefined };
87
+ return [
88
+ ...row.slice(0, selectedColumn),
89
+ newCell,
90
+ ...row.slice(selectedColumn),
91
+ ];
92
+ });
93
+
94
+ const updatedModel = new Model(model.createFormulaParser, updatedData);
95
+
96
+ return {
97
+ ...state,
98
+ model: updatedModel,
99
+ selectedRow: selectedRow,
100
+ selectedColumn: selectedColumn - 1,
101
+ };
102
+ }
103
+
104
+ case Actions.DELETE_ROW: {
105
+ let { selectedRow, selectedColumn, model } = state;
106
+ if (checkEmpty(selectedRow)) {
107
+ return state;
108
+ }
109
+ selectedRow = selectedRow as number;
110
+ let updatedData = [...model.data];
111
+
112
+ updatedData.splice(selectedRow, 1);
113
+
114
+ const updatedModel = new Model(model.createFormulaParser, updatedData);
115
+
116
+ let newSelectedRow = selectedRow > 0 ? selectedRow - 1 : 0;
117
+ let newSelectedColumn = !checkEmpty(selectedColumn) ? selectedColumn : 0;
118
+
119
+ return {
120
+ ...state,
121
+ model: updatedModel,
122
+ selectedRow: newSelectedRow,
123
+ selectedColumn: newSelectedColumn,
124
+ };
125
+ }
126
+
127
+ case Actions.DELETE_COLUMN: {
128
+ let { selectedRow, selectedColumn, model } = state;
129
+
130
+ if (checkEmpty(selectedColumn)) {
131
+ return state;
132
+ }
133
+ selectedColumn = selectedColumn as number;
134
+
135
+ let updatedData = [...model.data];
136
+
137
+ updatedData = updatedData.map((row) => {
138
+ row.splice(selectedColumn, 1);
139
+ return row;
140
+ });
141
+
142
+ const updatedModel = new Model(model.createFormulaParser, updatedData);
143
+
144
+ let newSelectedRow = !checkEmpty(selectedRow) ? selectedRow : 0;
145
+ let newSelectedColumn = selectedColumn > 0 ? selectedColumn - 1 : 0;
146
+
147
+ return {
148
+ ...state,
149
+ model: updatedModel,
150
+ selectedRow: newSelectedRow,
151
+ selectedColumn: newSelectedColumn,
152
+ };
153
+ }
154
+
54
155
  case Actions.BOLD: {
55
156
  const selectedRange = state.selected.toRange(state.model.data);
56
157
  const updatedData = applyBoldToCells(
@@ -215,13 +316,14 @@ export default function reducer(
215
316
  : new EntireRowsSelection(row, row),
216
317
  active: extend && active ? active : { ...Point.ORIGIN, row },
217
318
  mode: 'view',
319
+ selectedColumn: null,
320
+ selectedRow: row,
218
321
  };
219
322
  }
220
323
 
221
324
  case Actions.SELECT_ENTIRE_COLUMN: {
222
325
  const { column, extend } = action.payload;
223
326
  const { active } = state;
224
-
225
327
  return {
226
328
  ...state,
227
329
  selected:
@@ -230,6 +332,8 @@ export default function reducer(
230
332
  : new EntireColumnsSelection(column, column),
231
333
  active: extend && active ? active : { ...Point.ORIGIN, column },
232
334
  mode: 'view',
335
+ selectedColumn: column,
336
+ selectedRow: null,
233
337
  };
234
338
  }
235
339