forked from Gitlink/forgeplus-react
139 lines
4.0 KiB
JavaScript
139 lines
4.0 KiB
JavaScript
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
import _createClass from "@babel/runtime/helpers/createClass";
|
|
|
|
/**
|
|
* Window Sections are used to group nearby cells.
|
|
* This enables us to more quickly determine which cells to display in a given region of the Window.
|
|
*
|
|
*/
|
|
import Section from './Section';
|
|
var SECTION_SIZE = 100;
|
|
|
|
/**
|
|
* Contains 0 to many Sections.
|
|
* Grows (and adds Sections) dynamically as cells are registered.
|
|
* Automatically adds cells to the appropriate Section(s).
|
|
*/
|
|
var SectionManager =
|
|
/*#__PURE__*/
|
|
function () {
|
|
function SectionManager() {
|
|
var sectionSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : SECTION_SIZE;
|
|
|
|
_classCallCheck(this, SectionManager);
|
|
|
|
this._sectionSize = sectionSize;
|
|
this._cellMetadata = [];
|
|
this._sections = {};
|
|
}
|
|
/**
|
|
* Gets all cell indices contained in the specified region.
|
|
* A region may encompass 1 or more Sections.
|
|
*/
|
|
|
|
|
|
_createClass(SectionManager, [{
|
|
key: "getCellIndices",
|
|
value: function getCellIndices(_ref) {
|
|
var height = _ref.height,
|
|
width = _ref.width,
|
|
x = _ref.x,
|
|
y = _ref.y;
|
|
var indices = {};
|
|
this.getSections({
|
|
height: height,
|
|
width: width,
|
|
x: x,
|
|
y: y
|
|
}).forEach(function (section) {
|
|
return section.getCellIndices().forEach(function (index) {
|
|
indices[index] = index;
|
|
});
|
|
}); // Object keys are strings; this function returns numbers
|
|
|
|
return Object.keys(indices).map(function (index) {
|
|
return indices[index];
|
|
});
|
|
}
|
|
/** Get size and position information for the cell specified. */
|
|
|
|
}, {
|
|
key: "getCellMetadata",
|
|
value: function getCellMetadata(_ref2) {
|
|
var index = _ref2.index;
|
|
return this._cellMetadata[index];
|
|
}
|
|
/** Get all Sections overlapping the specified region. */
|
|
|
|
}, {
|
|
key: "getSections",
|
|
value: function getSections(_ref3) {
|
|
var height = _ref3.height,
|
|
width = _ref3.width,
|
|
x = _ref3.x,
|
|
y = _ref3.y;
|
|
var sectionXStart = Math.floor(x / this._sectionSize);
|
|
var sectionXStop = Math.floor((x + width - 1) / this._sectionSize);
|
|
var sectionYStart = Math.floor(y / this._sectionSize);
|
|
var sectionYStop = Math.floor((y + height - 1) / this._sectionSize);
|
|
var sections = [];
|
|
|
|
for (var sectionX = sectionXStart; sectionX <= sectionXStop; sectionX++) {
|
|
for (var sectionY = sectionYStart; sectionY <= sectionYStop; sectionY++) {
|
|
var key = "".concat(sectionX, ".").concat(sectionY);
|
|
|
|
if (!this._sections[key]) {
|
|
this._sections[key] = new Section({
|
|
height: this._sectionSize,
|
|
width: this._sectionSize,
|
|
x: sectionX * this._sectionSize,
|
|
y: sectionY * this._sectionSize
|
|
});
|
|
}
|
|
|
|
sections.push(this._sections[key]);
|
|
}
|
|
}
|
|
|
|
return sections;
|
|
}
|
|
/** Total number of Sections based on the currently registered cells. */
|
|
|
|
}, {
|
|
key: "getTotalSectionCount",
|
|
value: function getTotalSectionCount() {
|
|
return Object.keys(this._sections).length;
|
|
}
|
|
/** Intended for debugger/test purposes only */
|
|
|
|
}, {
|
|
key: "toString",
|
|
value: function toString() {
|
|
var _this = this;
|
|
|
|
return Object.keys(this._sections).map(function (index) {
|
|
return _this._sections[index].toString();
|
|
});
|
|
}
|
|
/** Adds a cell to the appropriate Sections and registers it metadata for later retrievable. */
|
|
|
|
}, {
|
|
key: "registerCell",
|
|
value: function registerCell(_ref4) {
|
|
var cellMetadatum = _ref4.cellMetadatum,
|
|
index = _ref4.index;
|
|
this._cellMetadata[index] = cellMetadatum;
|
|
this.getSections(cellMetadatum).forEach(function (section) {
|
|
return section.addCellIndex({
|
|
index: index
|
|
});
|
|
});
|
|
}
|
|
}]);
|
|
|
|
return SectionManager;
|
|
}();
|
|
|
|
export { SectionManager as default };
|
|
import { bpfrpt_proptype_Index } from "./types";
|
|
import { bpfrpt_proptype_SizeAndPositionInfo } from "./types"; |