validateSpanningCellConfig.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.validateSpanningCellConfig = void 0;
  4. const utils_1 = require("./utils");
  5. const inRange = (start, end, value) => {
  6. return start <= value && value <= end;
  7. };
  8. const validateSpanningCellConfig = (rows, configs) => {
  9. const [nRow, nCol] = [rows.length, rows[0].length];
  10. configs.forEach((config, configIndex) => {
  11. const { colSpan, rowSpan } = config;
  12. if (colSpan === undefined && rowSpan === undefined) {
  13. throw new Error(`Expect at least colSpan or rowSpan is provided in config.spanningCells[${configIndex}]`);
  14. }
  15. if (colSpan !== undefined && colSpan < 1) {
  16. throw new Error(`Expect colSpan is not equal zero, instead got: ${colSpan} in config.spanningCells[${configIndex}]`);
  17. }
  18. if (rowSpan !== undefined && rowSpan < 1) {
  19. throw new Error(`Expect rowSpan is not equal zero, instead got: ${rowSpan} in config.spanningCells[${configIndex}]`);
  20. }
  21. });
  22. const rangeCoordinates = configs.map(utils_1.calculateRangeCoordinate);
  23. rangeCoordinates.forEach(({ topLeft, bottomRight }, rangeIndex) => {
  24. if (!inRange(0, nCol - 1, topLeft.col) ||
  25. !inRange(0, nRow - 1, topLeft.row) ||
  26. !inRange(0, nCol - 1, bottomRight.col) ||
  27. !inRange(0, nRow - 1, bottomRight.row)) {
  28. throw new Error(`Some cells in config.spanningCells[${rangeIndex}] are out of the table`);
  29. }
  30. });
  31. const configOccupy = Array.from({ length: nRow }, () => {
  32. return Array.from({ length: nCol });
  33. });
  34. rangeCoordinates.forEach(({ topLeft, bottomRight }, rangeIndex) => {
  35. (0, utils_1.sequence)(topLeft.row, bottomRight.row).forEach((row) => {
  36. (0, utils_1.sequence)(topLeft.col, bottomRight.col).forEach((col) => {
  37. if (configOccupy[row][col] !== undefined) {
  38. throw new Error(`Spanning cells in config.spanningCells[${configOccupy[row][col]}] and config.spanningCells[${rangeIndex}] are overlap each other`);
  39. }
  40. configOccupy[row][col] = rangeIndex;
  41. });
  42. });
  43. });
  44. };
  45. exports.validateSpanningCellConfig = validateSpanningCellConfig;
  46. //# sourceMappingURL=validateSpanningCellConfig.js.map