UNPKG

@offensichtbar-codestock/ngx-flex-masonry-grid

Version:

Angular Module for displaying items in a flex-based masonry layout without any third party dependencies

49 lines 7.66 kB
import { Injectable } from '@angular/core'; import { Subject } from 'rxjs'; import * as i0 from "@angular/core"; export class NgxFlexMasonryGridService { constructor() { this._imageobserved = new Subject(); this.imageobserved = this._imageobserved.asObservable(); this._layoutshouldbeupdated = new Subject(); this.layoutshouldbeupdated = this._layoutshouldbeupdated.asObservable(); this._itemremoved = new Subject(); this.itemremoved = this._itemremoved.asObservable(); this._allitemsloaded = new Subject(); this.allitemsloaded = this._allitemsloaded.asObservable(); this._loaded_items = []; } get loadeditems() { return this._loaded_items; } observeimage(values) { const itemwithmaxheight = values.reduce((max, obj) => (max.height > obj.height) ? max : obj); this._imageobserved.next(itemwithmaxheight); } addItem(item, countallitems) { this._loaded_items = [...this._loaded_items, item]; this._layoutshouldbeupdated.next(item); if (this._loaded_items.length === countallitems) { this._allitemsloaded.next(); } } removeItem(item) { const index = this._loaded_items.findIndex(griditem => Object.is(griditem, item)); this._itemremoved.next(this._loaded_items[index]); this._loaded_items = [ ...this._loaded_items.slice(0, index), ...this._loaded_items.slice(index + 1, this._loaded_items.length) ]; } clearStack() { this._loaded_items = []; } } NgxFlexMasonryGridService.ɵprov = i0.ɵɵdefineInjectable({ factory: function NgxFlexMasonryGridService_Factory() { return new NgxFlexMasonryGridService(); }, token: NgxFlexMasonryGridService, providedIn: "root" }); NgxFlexMasonryGridService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; NgxFlexMasonryGridService.ctorParameters = () => []; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZsZXgtbWFzb25yeS1ncmlkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZmxleC1tYXNvbnJ5LWdyaWQvc3JjL2xpYi9uZ3gtZmxleC1tYXNvbnJ5LWdyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBTzNDLE1BQU0sT0FBTyx5QkFBeUI7SUFxQmxDO1FBbkJpQixtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFtQyxDQUFDO1FBQ2pGLGtCQUFhLEdBQWdELElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFL0UsMkJBQXNCLEdBQUcsSUFBSSxPQUFPLEVBQW1DLENBQUM7UUFDekYsMEJBQXFCLEdBQWdELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUUvRixpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFtQyxDQUFDO1FBQy9FLGdCQUFXLEdBQWdELElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFM0Usb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO1FBQ3RELG1CQUFjLEdBQW9CLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFOUQsa0JBQWEsR0FBMkMsRUFBRSxDQUFDO0lBT25ELENBQUM7SUFMakIsSUFBVyxXQUFXO1FBQ2xCLE9BQVEsSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUMvQixDQUFDO0lBS0QsWUFBWSxDQUFDLE1BQThDO1FBQ3ZELE1BQU0saUJBQWlCLEdBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBR0QsT0FBTyxDQUFDLElBQW9DLEVBQUUsYUFBb0I7UUFDOUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXZDLElBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEtBQUssYUFBYSxFQUFFO1lBQzVDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDL0I7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQW9DO1FBRTNDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsRixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLGFBQWEsR0FBRztZQUNqQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7WUFDckMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztTQUM3QixDQUFDO0lBQ04sQ0FBQztJQUVELFVBQVU7UUFDTixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUM1QixDQUFDOzs7O1lBdkRKLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE5neEZsZXhNYXNvbnJ5R3JpZExvYWRpbmdQYXJhbXMgfSBmcm9tICcuL25neC1mbGV4LW1hc29ucnktZ3JpZC1vcHRpb25zJztcbmltcG9ydCB7IE5neEZsZXhNYXNvbnJ5R3JpZEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL25neC1mbGV4LW1hc29ucnktZ3JpZC1pdGVtLmNvbXBvbmVudCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE5neEZsZXhNYXNvbnJ5R3JpZFNlcnZpY2Uge1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaW1hZ2VvYnNlcnZlZCA9IG5ldyBTdWJqZWN0PE5neEZsZXhNYXNvbnJ5R3JpZExvYWRpbmdQYXJhbXM+KCk7XG4gICAgaW1hZ2VvYnNlcnZlZDogT2JzZXJ2YWJsZTxOZ3hGbGV4TWFzb25yeUdyaWRMb2FkaW5nUGFyYW1zPiA9IHRoaXMuX2ltYWdlb2JzZXJ2ZWQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9sYXlvdXRzaG91bGRiZXVwZGF0ZWQgPSBuZXcgU3ViamVjdDxOZ3hGbGV4TWFzb25yeUdyaWRJdGVtQ29tcG9uZW50PigpO1xuICAgIGxheW91dHNob3VsZGJldXBkYXRlZDogT2JzZXJ2YWJsZTxOZ3hGbGV4TWFzb25yeUdyaWRJdGVtQ29tcG9uZW50PiA9IHRoaXMuX2xheW91dHNob3VsZGJldXBkYXRlZC5hc09ic2VydmFibGUoKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2l0ZW1yZW1vdmVkID0gbmV3IFN1YmplY3Q8Tmd4RmxleE1hc29ucnlHcmlkSXRlbUNvbXBvbmVudD4oKTtcbiAgICBpdGVtcmVtb3ZlZDogT2JzZXJ2YWJsZTxOZ3hGbGV4TWFzb25yeUdyaWRJdGVtQ29tcG9uZW50PiA9IHRoaXMuX2l0ZW1yZW1vdmVkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfYWxsaXRlbXNsb2FkZWQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gICAgYWxsaXRlbXNsb2FkZWQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuX2FsbGl0ZW1zbG9hZGVkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgcHJpdmF0ZSBfbG9hZGVkX2l0ZW1zOiBBcnJheTxOZ3hGbGV4TWFzb25yeUdyaWRJdGVtQ29tcG9uZW50PiA9IFtdO1xuXG4gICAgcHVibGljIGdldCBsb2FkZWRpdGVtcygpOiBBcnJheTxOZ3hGbGV4TWFzb25yeUdyaWRJdGVtQ29tcG9uZW50PiB7XG4gICAgICAgIHJldHVybiAgdGhpcy5fbG9hZGVkX2l0ZW1zO1xuICAgIH1cblxuXG4gICAgY29uc3RydWN0b3IoKSB7IH1cbiAgXG4gICAgb2JzZXJ2ZWltYWdlKHZhbHVlczogQXJyYXk8Tmd4RmxleE1hc29ucnlHcmlkTG9hZGluZ1BhcmFtcz4pIHtcbiAgICAgICAgY29uc3QgaXRlbXdpdGhtYXhoZWlnaHQgPSAgdmFsdWVzLnJlZHVjZSgobWF4LCBvYmopID0+IChtYXguaGVpZ2h0ID4gb2JqLmhlaWdodCkgPyBtYXggOiBvYmopO1xuICAgICAgICB0aGlzLl9pbWFnZW9ic2VydmVkLm5leHQoaXRlbXdpdGhtYXhoZWlnaHQpO1xuICAgIH1cblxuXG4gICAgYWRkSXRlbShpdGVtOk5neEZsZXhNYXNvbnJ5R3JpZEl0ZW1Db21wb25lbnQsIGNvdW50YWxsaXRlbXM6bnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2xvYWRlZF9pdGVtcyA9IFsuLi50aGlzLl9sb2FkZWRfaXRlbXMsIGl0ZW1dO1xuXG4gICAgICAgIHRoaXMuX2xheW91dHNob3VsZGJldXBkYXRlZC5uZXh0KGl0ZW0pO1xuICAgICAgICBcbiAgICAgICAgaWYodGhpcy5fbG9hZGVkX2l0ZW1zLmxlbmd0aCA9PT0gY291bnRhbGxpdGVtcykge1xuICAgICAgICAgICAgdGhpcy5fYWxsaXRlbXNsb2FkZWQubmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlSXRlbShpdGVtOk5neEZsZXhNYXNvbnJ5R3JpZEl0ZW1Db21wb25lbnQpIHtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbG9hZGVkX2l0ZW1zLmZpbmRJbmRleChncmlkaXRlbSA9PiBPYmplY3QuaXMoZ3JpZGl0ZW0sIGl0ZW0pKTtcbiAgICAgICAgdGhpcy5faXRlbXJlbW92ZWQubmV4dCh0aGlzLl9sb2FkZWRfaXRlbXNbaW5kZXhdKTtcbiAgICAgICAgdGhpcy5fbG9hZGVkX2l0ZW1zID0gWyBcbiAgICAgICAgICAgIC4uLnRoaXMuX2xvYWRlZF9pdGVtcy5zbGljZSgwLCBpbmRleCksIFxuICAgICAgICAgICAgLi4udGhpcy5fbG9hZGVkX2l0ZW1zLnNsaWNlKGluZGV4ICsgMSwgXG4gICAgICAgICAgICB0aGlzLl9sb2FkZWRfaXRlbXMubGVuZ3RoKVxuICAgICAgICBdOyAgXG4gICAgfVxuXG4gICAgY2xlYXJTdGFjaygpIHtcbiAgICAgICAgdGhpcy5fbG9hZGVkX2l0ZW1zID0gW107XG4gICAgfVxufVxuIl19