UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

85 lines 14.7 kB
import { Injectable } from '@angular/core'; import { cloneDeep } from 'lodash-es'; import { map, of, ReplaySubject, startWith, Subject, switchMap, } from 'rxjs'; import { getClientRectSnapshot } from './utils/client-rect.utils'; import { getGridHeight, gridItemDragging, gridItemResizing, layoutToRenderItems, } from './utils/grid.utils'; import { getScrollTotalRelativeDifference$ } from './utils/scroll.utils'; import * as i0 from "@angular/core"; export class GridLayoutService { constructor() { this.gridRenderHeight$$ = new ReplaySubject(1); this.gridRenderItemsData$$ = new Subject(); } get gridConfig() { return this.gridComponent?.config; } registerGridComponent(gridComponent) { this.gridComponent = gridComponent; this.scrollDifference$ = gridComponent.scrollableParent$.pipe(map(scrollableParent => typeof scrollableParent === 'string' ? document.querySelector(scrollableParent) : scrollableParent), switchMap(scrollableParent => scrollableParent ? getScrollTotalRelativeDifference$(scrollableParent).pipe(startWith({ top: 0, left: 0 })) : of({ top: 0, left: 0 }))); } calculateRenderData(_updateLayout) { const { rowHeight, gutter, layout } = this.gridConfig; const clientRect = getClientRectSnapshot(this.gridComponent.hostElement); this.lastLayout = layout; this.gridItemsRenderData = layoutToRenderItems(this.gridConfig, clientRect.width, this.lastLayout); this.gridHeight = getGridHeight(layout, rowHeight, gutter); } flushRenderItemsData(animation = true) { this.gridRenderItemsData$$.next({ data: this.gridItemsRenderData, animation, }); } flushRenderData(animation = true) { this.flushRenderItemsData(animation); requestAnimationFrame(() => { this.gridRenderHeight$$.next(this.gridHeight); }); } // use this to handle remove grid item setLastLayout(layout) { this.lastLayout = layout; } layoutWhenAction(gridItem, type, { pointerDownEvent, pointerDragEvent, }, scrollDifference, dragElemClientRect, gridElemClientRect) { const { rowHeight, gutter, cols, preventCollision, layout: rawLayout, } = this.gridConfig; const calcNewStateFunc = type === 'drag' ? gridItemDragging : gridItemResizing; const currentLayout = cloneDeep(this.lastLayout || rawLayout); const { layout: newLayout, draggedItemPos } = calcNewStateFunc(gridItem, { ...this.gridConfig, layout: currentLayout, }, this.gridComponent.compactType, { pointerDownEvent, pointerDragEvent, gridElemClientRect, dragElemClientRect, scrollDifference, }); this.lastLayout = newLayout; const itemsLayoutData = layoutToRenderItems({ cols, rowHeight, layout: newLayout, preventCollision, gutter, }, gridElemClientRect.width); this.gridHeight = getGridHeight(newLayout, rowHeight, gutter); // itemsLayoutData and this.gridItemsRenderData will be different, because this.gridItemsRenderData will be used to render on-flight item position. bud itemsLayoutData is normalized position by grid this.gridItemsRenderData = cloneDeep(itemsLayoutData); // modify the position of the dragged item to be the once we want this.gridItemsRenderData[gridItem.id] = { ...draggedItemPos, id: gridItem.id, }; return { gridData: itemsLayoutData, layout: newLayout }; } static { this.ɵfac = function GridLayoutService_Factory(t) { return new (t || GridLayoutService)(); }; } static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: GridLayoutService, factory: GridLayoutService.ɵfac }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(GridLayoutService, [{ type: Injectable }], null, null); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1sYXlvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9ncmlkLWxheW91dC9ncmlkLWxheW91dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQ0wsR0FBRyxFQUVILEVBQUUsRUFDRixhQUFhLEVBQ2IsU0FBUyxFQUNULE9BQU8sRUFDUCxTQUFTLEdBQ1YsTUFBTSxNQUFNLENBQUM7QUFhZCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsbUJBQW1CLEdBQ3BCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBR3pFLE1BQU0sT0FBTyxpQkFBaUI7SUFEOUI7UUE0Q0UsdUJBQWtCLEdBQUcsSUFBSSxhQUFhLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFDbEQsMEJBQXFCLEdBQUcsSUFBSSxPQUFPLEVBRy9CLENBQUM7S0F3Rk47SUFwSUMsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQztJQUNwQyxDQUFDO0lBT0QscUJBQXFCLENBQUMsYUFBa0M7UUFDdEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFFbkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQzNELEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQ3JCLE9BQU8sZ0JBQWdCLEtBQUssUUFBUTtZQUNsQyxDQUFDLENBQUMsUUFBUSxDQUFDLGFB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Q0UsSUFBSTtZQUNKLFNBQVM7WUFDVCxNQUFNLEVBQUUsU0FBUztZQUNqQixnQkFBZ0I7WUFDaEIsTUFBTTtTQUNQLEVBQ0Qsa0JBQWtCLENBQUMsS0FBSyxDQUN6QixDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU5RCxzTUFBc007UUFDdE0sSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV0RCxpRUFBaUU7UUFDakUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRztZQUN0QyxHQUFHLGNBQWM7WUFDakIsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFO1NBQ00sQ0FBQztRQUN4QixPQUFPLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDMUQsQ0FBQztrRkF0SVUsaUJBQWlCO3VFQUFqQixpQkFBaUIsV0FBakIsaUJBQWlCOztpRkFBakIsaUJBQWlCO2NBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgUmVwbGF5U3ViamVjdCxcbiAgc3RhcnRXaXRoLFxuICBTdWJqZWN0LFxuICBzd2l0Y2hNYXAsXG59IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vY29yZS9wdWJsaWMtYXBpJztcblxuaW1wb3J0IHsgR3JpZExheW91dENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9ncmlkL2NvbXBvbmVudCc7XG5pbXBvcnQgeyBHcmlkSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9ncmlkLWl0ZW1zL2NvbXBvbmVudCc7XG5pbXBvcnQge1xuICBEcmFnQWN0aW9uVHlwZSxcbiAgR3JpZEl0ZW1DbGllbnRSZWN0LFxuICBHcmlkSXRlbVJlbmRlckRhdGEsXG4gIEdyaWRMYXlvdXQsXG4gIEdyaWRMYXlvdXRJdGVtLFxufSBmcm9tICcuL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgZ2V0Q2xpZW50UmVjdFNuYXBzaG90IH0gZnJvbSAnLi91dGlscy9jbGllbnQtcmVjdC51dGlscyc7XG5pbXBvcnQge1xuICBnZXRHcmlkSGVpZ2h0LFxuICBncmlkSXRlbURyYWdnaW5nLFxuICBncmlkSXRlbVJlc2l6aW5nLFxuICBsYXlvdXRUb1JlbmRlckl0ZW1zLFxufSBmcm9tICcuL3V0aWxzL2dyaWQudXRpbHMnO1xuaW1wb3J0IHsgZ2V0U2Nyb2xsVG90YWxSZWxhdGl2ZURpZmZlcmVuY2UkIH0gZnJvbSAnLi91dGlscy9zY3JvbGwudXRpbHMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgR3JpZExheW91dFNlcnZpY2Uge1xuICBncmlkQ29tcG9uZW50OiBHcmlkTGF5b3V0Q29tcG9uZW50O1xuXG4gIGdldCBncmlkQ29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLmdyaWRDb21wb25lbnQ/LmNvbmZpZztcbiAgfVxuXG4gIGdyaWRJdGVtc1JlbmRlckRhdGE6IERpY3Rpb25hcnk8R3JpZEl0ZW1SZW5kZXJEYXRhPjtcbiAgZ3JpZEhlaWdodDogbnVtYmVyO1xuXG4gIHNjcm9sbERpZmZlcmVuY2UkOiBPYnNlcnZhYmxlPHsgdG9wOiBudW1iZXI7IGxlZnQ6IG51bWJlciB9PjtcblxuICByZWdpc3RlckdyaWRDb21wb25lbnQoZ3JpZENvbXBvbmVudDogR3JpZExheW91dENvbXBvbmVudCkge1xuICAgIHRoaXMuZ3JpZENvbXBvbmVudCA9IGdyaWRDb21wb25lbnQ7XG5cbiAgICB0aGlzLnNjcm9sbERpZmZlcmVuY2UkID0gZ3JpZENvbXBvbmVudC5zY3JvbGxhYmxlUGFyZW50JC5waXBlKFxuICAgICAgbWFwKHNjcm9sbGFibGVQYXJlbnQgPT5cbiAgICAgICAgdHlwZW9mIHNjcm9sbGFibGVQYXJlbnQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNjcm9sbGFibGVQYXJlbnQpXG4gICAgICAgICAgOiBzY3JvbGxhYmxlUGFyZW50LFxuICAgICAgKSxcbiAgICAgIHN3aXRjaE1hcChzY3JvbGxhYmxlUGFyZW50ID0+XG4gICAgICAgIHNjcm9sbGFibGVQYXJlbnRcbiAgICAgICAgICA/IGdldFNjcm9sbFRvdGFsUmVsYXRpdmVEaWZmZXJlbmNlJChzY3JvbGxhYmxlUGFyZW50KS5waXBlKFxuICAgICAgICAgICAgICBzdGFydFdpdGgoeyB0b3A6IDAsIGxlZnQ6IDAgfSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBvZih7IHRvcDogMCwgbGVmdDogMCB9KSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIGNhbGN1bGF0ZVJlbmRlckRhdGEoX3VwZGF0ZUxheW91dD86IEdyaWRMYXlvdXRJdGVtW10pIHtcbiAgICBjb25zdCB7IHJvd0hlaWdodCwgZ3V0dGVyLCBsYXlvdXQgfSA9IHRoaXMuZ3JpZENvbmZpZztcbiAgICBjb25zdCBjbGllbnRSZWN0ID0gZ2V0Q2xpZW50UmVjdFNuYXBzaG90KHRoaXMuZ3JpZENvbXBvbmVudC5ob3N0RWxlbWVudCk7XG4gICAgdGhpcy5sYXN0TGF5b3V0ID0gbGF5b3V0O1xuICAgIHRoaXMuZ3JpZEl0ZW1zUmVuZGVyRGF0YSA9IGxheW91dFRvUmVuZGVySXRlbXMoXG4gICAgICB0aGlzLmdyaWRDb25maWcsXG4gICAgICBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgdGhpcy5sYXN0TGF5b3V0LFxuICAgICk7XG4gICAgdGhpcy5ncmlkSGVpZ2h0ID0gZ2V0R3JpZEhlaWdodChsYXlvdXQsIHJvd0hlaWdodCwgZ3V0dGVyKTtcbiAgfVxuXG4gIGdyaWRSZW5kZXJIZWlnaHQkJCA9IG5ldyBSZXBsYXlTdWJqZWN0PG51bWJlcj4oMSk7XG4gIGdyaWRSZW5kZXJJdGVtc0RhdGEkJCA9IG5ldyBTdWJqZWN0PHtcbiAgICBkYXRhOiBEaWN0aW9uYXJ5PEdyaWRJdGVtUmVuZGVyRGF0YT47XG4gICAgYW5pbWF0aW9uOiBib29sZWFuO1xuICB9PigpO1xuXG4gIGZsdXNoUmVuZGVySXRlbXNEYXRhKGFuaW1hdGlvbiA9IHRydWUpIHtcbiAgICB0aGlzLmdyaWRSZW5kZXJJdGVtc0RhdGEkJC5uZXh0KHtcbiAgICAgIGRhdGE6IHRoaXMuZ3JpZEl0ZW1zUmVuZGVyRGF0YSxcbiAgICAgIGFuaW1hdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIGZsdXNoUmVuZGVyRGF0YShhbmltYXRpb24gPSB0cnVlKSB7XG4gICAgdGhpcy5mbHVzaFJlbmRlckl0ZW1zRGF0YShhbmltYXRpb24pO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICB0aGlzLmdyaWRSZW5kZXJIZWlnaHQkJC5uZXh0KHRoaXMuZ3JpZEhlaWdodCk7XG4gICAgfSk7XG4gIH1cblxuICBsYXN0TGF5b3V0OiBHcmlkTGF5b3V0O1xuXG4gIC8vIHVzZSB0aGlzIHRvIGhhbmRsZSByZW1vdmUgZ3JpZCBpdGVtXG4gIHNldExhc3RMYXlvdXQobGF5b3V0OiBHcmlkTGF5b3V0KSB7XG4gICAgdGhpcy5sYXN0TGF5b3V0ID0gbGF5b3V0O1xuICB9XG5cbiAgbGF5b3V0V2hlbkFjdGlvbihcbiAgICBncmlkSXRlbTogR3JpZEl0ZW1Db21wb25lbnQsXG4gICAgdHlwZTogRHJhZ0FjdGlvblR5cGUsXG4gICAge1xuICAgICAgcG9pbnRlckRvd25FdmVudCxcbiAgICAgIHBvaW50ZXJEcmFnRXZlbnQsXG4gICAgfToge1xuICAgICAgcG9pbnRlckRvd25FdmVudDogTW91c2VFdmVudDtcbiAgICAgIHBvaW50ZXJEcmFnRXZlbnQ6IE1vdXNlRXZlbnQ7XG4gICAgfSxcbiAgICBzY3JvbGxEaWZmZXJlbmNlOiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfSxcbiAgICBkcmFnRWxlbUNsaWVudFJlY3Q6IEdyaWRJdGVtQ2xpZW50UmVjdCxcbiAgICBncmlkRWxlbUNsaWVudFJlY3Q6IEdyaWRJdGVtQ2xpZW50UmVjdCxcbiAgKSB7XG4gICAgY29uc3Qge1xuICAgICAgcm93SGVpZ2h0LFxuICAgICAgZ3V0dGVyLFxuICAgICAgY29scyxcbiAgICAgIHByZXZlbnRDb2xsaXNpb24sXG4gICAgICBsYXlvdXQ6IHJhd0xheW91dCxcbiAgICB9ID0gdGhpcy5ncmlkQ29uZmlnO1xuXG4gICAgY29uc3QgY2FsY05ld1N0YXRlRnVuYyA9XG4gICAgICB0eXBlID09PSAnZHJhZycgPyBncmlkSXRlbURyYWdnaW5nIDogZ3JpZEl0ZW1SZXNpemluZztcbiAgICBjb25zdCBjdXJyZW50TGF5b3V0OiBHcmlkTGF5b3V0ID0gY2xvbmVEZWVwKHRoaXMubGFzdExheW91dCB8fCByYXdMYXlvdXQpO1xuICAgIGNvbnN0IHsgbGF5b3V0OiBuZXdMYXlvdXQsIGRyYWdnZWRJdGVtUG9zIH0gPSBjYWxjTmV3U3RhdGVGdW5jKFxuICAgICAgZ3JpZEl0ZW0sXG4gICAgICB7XG4gICAgICAgIC4uLnRoaXMuZ3JpZENvbmZpZyxcbiAgICAgICAgbGF5b3V0OiBjdXJyZW50TGF5b3V0LFxuICAgICAgfSxcbiAgICAgIHRoaXMuZ3JpZENvbXBvbmVudC5jb21wYWN0VHlwZSxcbiAgICAgIHtcbiAgICAgICAgcG9pbnRlckRvd25FdmVudCxcbiAgICAgICAgcG9pbnRlckRyYWdFdmVudCxcbiAgICAgICAgZ3JpZEVsZW1DbGllbnRSZWN0LFxuICAgICAgICBkcmFnRWxlbUNsaWVudFJlY3QsXG4gICAgICAgIHNjcm9sbERpZmZlcmVuY2UsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLmxhc3RMYXlvdXQgPSBuZXdMYXlvdXQ7XG5cbiAgICBjb25zdCBpdGVtc0xheW91dERhdGEgPSBsYXlvdXRUb1JlbmRlckl0ZW1zKFxuICAgICAge1xuICAgICAgICBjb2xzLFxuICAgICAgICByb3dIZWlnaHQsXG4gICAgICAgIGxheW91dDogbmV3TGF5b3V0LFxuICAgICAgICBwcmV2ZW50Q29sbGlzaW9uLFxuICAgICAgICBndXR0ZXIsXG4gICAgICB9LFxuICAgICAgZ3JpZEVsZW1DbGllbnRSZWN0LndpZHRoLFxuICAgICk7XG4gICAgdGhpcy5ncmlkSGVpZ2h0ID0gZ2V0R3JpZEhlaWdodChuZXdMYXlvdXQsIHJvd0hlaWdodCwgZ3V0dGVyKTtcblxuICAgIC8vIGl0ZW1zTGF5b3V0RGF0YSBhbmQgdGhpcy5ncmlkSXRlbXNSZW5kZXJEYXRhIHdpbGwgYmUgZGlmZmVyZW50LCBiZWNhdXNlIHRoaXMuZ3JpZEl0ZW1zUmVuZGVyRGF0YSB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIG9uLWZsaWdodCBpdGVtIHBvc2l0aW9uLiBidWQgaXRlbXNMYXlvdXREYXRhIGlzIG5vcm1hbGl6ZWQgcG9zaXRpb24gYnkgZ3JpZFxuICAgIHRoaXMuZ3JpZEl0ZW1zUmVuZGVyRGF0YSA9IGNsb25lRGVlcChpdGVtc0xheW91dERhdGEpO1xuXG4gICAgLy8gbW9kaWZ5IHRoZSBwb3NpdGlvbiBvZiB0aGUgZHJhZ2dlZCBpdGVtIHRvIGJlIHRoZSBvbmNlIHdlIHdhbnRcbiAgICB0aGlzLmdyaWRJdGVtc1JlbmRlckRhdGFbZ3JpZEl0ZW0uaWRdID0ge1xuICAgICAgLi4uZHJhZ2dlZEl0ZW1Qb3MsXG4gICAgICBpZDogZ3JpZEl0ZW0uaWQsXG4gICAgfSBhcyBHcmlkSXRlbVJlbmRlckRhdGE7XG4gICAgcmV0dXJuIHsgZ3JpZERhdGE6IGl0ZW1zTGF5b3V0RGF0YSwgbGF5b3V0OiBuZXdMYXlvdXQgfTtcbiAgfVxufVxuIl19