@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
JavaScript
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