UNPKG

@sparser/au2-data-grid

Version:
249 lines 12.1 kB
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); var _, done = false; for (var i = decorators.length - 1; i >= 0; i--) { var context = {}; for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; for (var p in contextIn.access) context.access[p] = contextIn.access[p]; context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); if (kind === "accessor") { if (result === void 0) continue; if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if (_ = accept(result.get)) descriptor.get = _; if (_ = accept(result.set)) descriptor.set = _; if (_ = accept(result.init)) initializers.unshift(_); } else if (_ = accept(result)) { if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } } if (target) Object.defineProperty(target, contextIn.name, descriptor); done = true; }; var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) { var useValue = arguments.length > 2; for (var i = 0; i < initializers.length; i++) { value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); } return useValue ? value : void 0; }; import { onResolve, onResolveAll, resolve, } from '@aurelia/kernel'; import { BindingContext, Scope, } from '@aurelia/runtime'; import { bindable, IRenderLocation, templateController, } from '@aurelia/runtime-html'; /** * Template controller to render the headers. * @internal */ let GridHeaders = (() => { let _classDecorators = [templateController('grid-headers')]; let _classDescriptor; let _classExtraInitializers = []; let _classThis; let _state_decorators; let _state_initializers = []; let _state_extraInitializers = []; var GridHeaders = class { static { _classThis = this; } static { const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0; _state_decorators = [bindable]; __esDecorate(null, null, _state_decorators, { kind: "field", name: "state", static: false, private: false, access: { has: obj => "state" in obj, get: obj => obj.state, set: (obj, value) => { obj.state = value; } }, metadata: _metadata }, _state_initializers, _state_extraInitializers); __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); GridHeaders = _classThis = _classDescriptor.value; if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); __runInitializers(_classThis, _classExtraInitializers); } location = resolve(IRenderLocation); $controller; // This is set by the controller after this instance is constructed state = __runInitializers(this, _state_initializers, void 0); headers = __runInitializers(this, _state_extraInitializers); promise = void 0; /** * Key: original column-index; Value: view-index */ _indexMap = new Map(); get indexMap() { return this._indexMap; } attaching(initiator, parent) { const indexMap = this._indexMap; indexMap.clear(); const location = this.location; const state = this.state; const columns = state.columns; let len = 0; const headers = this.headers = columns.reduce((acc, column, i) => { if (column.hidden) return acc; acc.push(column.headerViewFactory.create(initiator).setLocation(location)); indexMap.set(i, len++); return acc; }, []); const activationPromises = new Array(len); for (let i = 0; i < len; i++) { const header = headers[i]; header.nodes.link(headers[i + 1]?.nodes ?? location); activationPromises[i] = header.activate(initiator, parent, Scope.create(new BindingContext('state', columns[i]))); } this.queue(() => onResolveAll(...activationPromises)); state.addSubscriber(this); return this.promise; } detaching(initiator, parent) { this.state.removeSubscriber(this); this.queue(() => onResolveAll(...this.headers.map((header) => header.deactivate(initiator, parent)))); return this.promise; } dispose() { const headers = this.headers; const len = headers.length; for (let i = 0; i < len; i++) { headers[i].dispose(); } this.headers.length = 0; } handleGridStateChange(type, value, _oldValue) { if (type !== 2 /* ChangeType.Order */) return; handleReordering(this.headers, value, this.location, this._indexMap); } queue(action) { const previousPromise = this.promise; let promise = void 0; promise = this.promise = onResolve(onResolve(previousPromise, action), () => { if (this.promise === promise) { this.promise = void 0; } }); } }; return GridHeaders = _classThis; })(); export { GridHeaders }; /** * Template controller to render the content cells. * @internal */ let GridContent = (() => { let _classDecorators = [templateController('grid-content')]; let _classDescriptor; let _classExtraInitializers = []; let _classThis; let _item_decorators; let _item_initializers = []; let _item_extraInitializers = []; let _state_decorators; let _state_initializers = []; let _state_extraInitializers = []; var GridContent = class { static { _classThis = this; } static { const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0; _item_decorators = [bindable]; _state_decorators = [bindable]; __esDecorate(null, null, _item_decorators, { kind: "field", name: "item", static: false, private: false, access: { has: obj => "item" in obj, get: obj => obj.item, set: (obj, value) => { obj.item = value; } }, metadata: _metadata }, _item_initializers, _item_extraInitializers); __esDecorate(null, null, _state_decorators, { kind: "field", name: "state", static: false, private: false, access: { has: obj => "state" in obj, get: obj => obj.state, set: (obj, value) => { obj.state = value; } }, metadata: _metadata }, _state_initializers, _state_extraInitializers); __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); GridContent = _classThis = _classDescriptor.value; if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); __runInitializers(_classThis, _classExtraInitializers); } location = resolve(IRenderLocation); item = __runInitializers(this, _item_initializers, void 0); state = (__runInitializers(this, _item_extraInitializers), __runInitializers(this, _state_initializers, void 0)); $controller = __runInitializers(this, _state_extraInitializers); // This is set by the controller after this instance is constructed cells; promise = void 0; /** * Key: original column-index; Value: view-index */ _indexMap = new Map(); attaching(initiator, parent) { const headersTc = this.$controller .parent // synthetic ?.parent // repeater ?.parent // grid ?.children ?.find(c => c.viewModel instanceof GridHeaders) ?.viewModel; if (headersTc == null) throw new Error('The grid-headers is not found.'); const indexMap = this._indexMap = headersTc.indexMap; const item = this.item; const location = this.location; const state = this.state; const columns = state.columns; const len = indexMap.size; const cells = this.cells = new Array(len); const activationPromises = new Array(len); let i = 0; for (const [key,] of indexMap) { const cell = cells[i++] = columns[key].contentViewFactory.create(initiator).setLocation(location); activationPromises[i] = cell.activate(initiator, parent, Scope.create(new BindingContext('item', item))); } this.queue(() => onResolveAll(...activationPromises)); state.addSubscriber(this); return this.promise; } detaching(initiator, parent) { this.state.removeSubscriber(this); this.queue(() => onResolveAll(...this.cells.map((cell) => cell.deactivate(initiator, parent)))); return this.promise; } dispose() { const cells = this.cells; const len = cells.length; for (let i = 0; i < len; i++) { cells[i].dispose(); } this.cells.length = 0; } queue(action) { const previousPromise = this.promise; let promise = void 0; promise = this.promise = onResolve(onResolve(previousPromise, action), () => { if (this.promise === promise) { this.promise = void 0; } }); } handleGridStateChange(type, value, _oldValue) { if (type !== 2 /* ChangeType.Order */) return; handleReordering(this.cells, value, this.location, this._indexMap); } }; return GridContent = _classThis; })(); export { GridContent }; function handleReordering(views, changeData, location, indexMap) { const fromIdx = changeData.fromIndex; let toIdx = changeData.toIndex; const dropLocation = changeData.location; const fromNodes = views[indexMap.get(fromIdx)].nodes; const toNodes = views[indexMap.get(toIdx)].nodes; // link the next node with the previous node views[fromIdx - 1]?.nodes.link(views[fromIdx + 1]?.nodes ?? location); switch (dropLocation) { case 1 /* OrderChangeDropLocation.Before */: views[toIdx - 1]?.nodes.link(fromNodes); fromNodes.link(toNodes); if (fromIdx < toIdx) { toIdx--; } break; case 2 /* OrderChangeDropLocation.After */: fromNodes.link(views[toIdx + 1]?.nodes ?? location); toNodes.link(fromNodes); if (fromIdx > toIdx) { toIdx++; } break; } fromNodes.addToLinked(); views.splice(toIdx, 0, views.splice(fromIdx, 1)[0]); } //# sourceMappingURL=template-controllers.js.map