ng-devui
Version:
DevUI components based on Angular
81 lines • 11.2 kB
JavaScript
import { ContentChildren, Directive, Input, QueryList } from '@angular/core';
import { Subject, Subscription } from 'rxjs';
import { filter } from 'rxjs/operators';
import { AnchorDirective } from './anchor.directive';
import { AnchorService } from './anchor.service';
import * as i0 from "@angular/core";
import * as i1 from "./anchor.service";
export class AnchorBoxDirective {
set anchorList(list) {
if (this.sub) {
this.sub.unsubscribe();
}
this.sub = new Subscription();
this.anchorMap = {};
this._anchorList = list;
this.anchorService.anchorList = this._anchorList.map((item) => item.anchor);
this._anchorList.toArray().forEach((targetAnchor) => {
this.anchorMap[targetAnchor.anchor] = targetAnchor;
targetAnchor.boxElement = this;
this.sub.add(targetAnchor.activeChangeSubject.pipe(filter((bool) => !!bool)).subscribe(() => {
this.activeChangeSubject.next(targetAnchor);
}));
});
this.refreshAnchorMap.next();
}
get anchorList() {
return this._anchorList;
}
constructor(anchorService) {
this.anchorService = anchorService;
this.isScrollingToTarget = false;
this.activeChangeSubject = new Subject();
this.activeChange = this.activeChangeSubject.asObservable();
this.isInit = true;
this.refreshAnchorMap = new Subject();
}
ngOnChanges(changes) {
if (changes.defaultAnchor?.currentValue) {
this.forceActiveAnchor(this.defaultAnchor, 'initial');
}
}
ngOnDestroy() {
this.activeChangeSubject.complete();
if (this.sub) {
this.sub.unsubscribe();
}
}
forceActiveAnchor(anchorName, forceActiveSource = 'scroll', deactivateOtherAnchor = true) {
if (this.anchorMap && this.anchorService.anchorList.indexOf(anchorName) >= 0) {
this.anchorMap[anchorName].activeChangeBy = forceActiveSource;
this.anchorMap[anchorName].isActive = true;
if (deactivateOtherAnchor) {
Object.keys(this.anchorMap)
.filter((name) => name !== anchorName)
.map((name) => this.anchorMap[name])
.forEach((anchor) => {
anchor.activeChangeBy = forceActiveSource;
anchor.isActive = false;
});
}
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AnchorBoxDirective, deps: [{ token: i1.AnchorService }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: AnchorBoxDirective, selector: "[dAnchorBox]", inputs: { view: "view", defaultAnchor: "defaultAnchor", scrollTarget: "scrollTarget" }, queries: [{ propertyName: "anchorList", predicate: AnchorDirective, descendants: true }], usesOnChanges: true, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AnchorBoxDirective, decorators: [{
type: Directive,
args: [{
selector: '[dAnchorBox]',
}]
}], ctorParameters: () => [{ type: i1.AnchorService }], propDecorators: { view: [{
type: Input
}], defaultAnchor: [{
type: Input
}], scrollTarget: [{
type: Input
}], anchorList: [{
type: ContentChildren,
args: [AnchorDirective, { descendants: true }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jaG9yLWJveC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9kZXZ1aS9hbmNob3IvYW5jaG9yLWJveC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUF3QixTQUFTLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ2xILE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7QUFNakQsTUFBTSxPQUFPLGtCQUFrQjtJQWU3QixJQUNJLFVBQVUsQ0FBQyxJQUFnQztRQUM3QyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekIsQ0FBQztRQUNELElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDbEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsWUFBWSxDQUFD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QyxlQUFlLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGVudENoaWxkcmVuLCBEaXJlY3RpdmUsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgUXVlcnlMaXN0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFuY2hvckRpcmVjdGl2ZSB9IGZyb20gJy4vYW5jaG9yLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBbmNob3JTZXJ2aWNlIH0gZnJvbSAnLi9hbmNob3Iuc2VydmljZSc7XG5pbXBvcnQgeyBBbmNob3JBY3RpdmVDaGFuZ2VTb3VyY2UsIElBbmNob3JCb3ggfSBmcm9tICcuL2FuY2hvci50eXBlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2RBbmNob3JCb3hdJyxcbn0pXG5leHBvcnQgY2xhc3MgQW5jaG9yQm94RGlyZWN0aXZlIGltcGxlbWVudHMgSUFuY2hvckJveCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBwdWJsaWMgaXNTY3JvbGxpbmdUb1RhcmdldCA9IGZhbHNlO1xuICBwcml2YXRlIGFjdGl2ZUNoYW5nZVN1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xuICBwdWJsaWMgYWN0aXZlQ2hhbmdlID0gdGhpcy5hY3RpdmVDaGFuZ2VTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICBpc0luaXQgPSB0cnVlO1xuICByZWZyZXNoQW5jaG9yTWFwOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgYW5jaG9yTWFwOiB7IFthbmNob3I6IHN0cmluZ106IEFuY2hvckRpcmVjdGl2ZSB9O1xuICBfYW5jaG9yTGlzdDogUXVlcnlMaXN0PEFuY2hvckRpcmVjdGl2ZT47XG4gIHN1YjogU3Vic2NyaXB0aW9uO1xuICBASW5wdXQoKSB2aWV3OiB7XG4gICAgdG9wPzogbnVtYmVyO1xuICAgIGJvdHRvbT86IG51bWJlcjtcbiAgfTtcbiAgQElucHV0KCkgZGVmYXVsdEFuY2hvcjogc3RyaW5nO1xuICBASW5wdXQoKSBzY3JvbGxUYXJnZXQ6IEhUTUxFbGVtZW50O1xuICBAQ29udGVudENoaWxkcmVuKEFuY2hvckRpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBzZXQgYW5jaG9yTGlzdChsaXN0OiBRdWVyeUxpc3Q8QW5jaG9yRGlyZWN0aXZlPikge1xuICAgIGlmICh0aGlzLnN1Yikge1xuICAgICAgdGhpcy5zdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5zdWIgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgdGhpcy5hbmNob3JNYXAgPSB7fTtcbiAgICB0aGlzLl9hbmNob3JMaXN0ID0gbGlzdDtcbiAgICB0aGlzLmFuY2hvclNlcnZpY2UuYW5jaG9yTGlzdCA9IHRoaXMuX2FuY2hvckxpc3QubWFwKChpdGVtKSA9PiBpdGVtLmFuY2hvcik7XG4gICAgdGhpcy5fYW5jaG9yTGlzdC50b0FycmF5KCkuZm9yRWFjaCgodGFyZ2V0QW5jaG9yKSA9PiB7XG4gICAgICB0aGlzLmFuY2hvck1hcFt0YXJnZXRBbmNob3IuYW5jaG9yXSA9IHRhcmdldEFuY2hvcjtcbiAgICAgIHRhcmdldEFuY2hvci5ib3hFbGVtZW50ID0gdGhpcztcbiAgICAgIHRoaXMuc3ViLmFkZChcbiAgICAgICAgdGFyZ2V0QW5jaG9yLmFjdGl2ZUNoYW5nZVN1YmplY3QucGlwZShmaWx0ZXIoKGJvb2wpID0+ICEhYm9vbCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVDaGFuZ2VTdWJqZWN0Lm5leHQodGFyZ2V0QW5jaG9yKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSk7XG4gICAgdGhpcy5yZWZyZXNoQW5jaG9yTWFwLm5leHQoKTtcbiAgfVxuXG4gIGdldCBhbmNob3JMaXN0KCkge1xuICAgIHJldHVybiB0aGlzLl9hbmNob3JMaXN0O1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhbmNob3JTZXJ2aWNlOiBBbmNob3JTZXJ2aWNlKSB7fVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5kZWZhdWx0QW5jaG9yPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMuZm9yY2VBY3RpdmVBbmNob3IodGhpcy5kZWZhdWx0QW5jaG9yLCAnaW5pdGlhbCcpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlQ2hhbmdlU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIGlmICh0aGlzLnN1Yikge1xuICAgICAgdGhpcy5zdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBmb3JjZUFjdGl2ZUFuY2hvcihhbmNob3JOYW1lOiBzdHJpbmcsIGZvcmNlQWN0aXZlU291cmNlOiBBbmNob3JBY3RpdmVDaGFuZ2VTb3VyY2UgPSAnc2Nyb2xsJywgZGVhY3RpdmF0ZU90aGVyQW5jaG9yID0gdHJ1ZSkge1xuICAgIGlmICh0aGlzLmFuY2hvck1hcCAmJiB0aGlzLmFuY2hvclNlcnZpY2UuYW5jaG9yTGlzdC5pbmRleE9mKGFuY2hvck5hbWUpID49IDApIHtcbiAgICAgIHRoaXMuYW5jaG9yTWFwW2FuY2hvck5hbWVdLmFjdGl2ZUNoYW5nZUJ5ID0gZm9yY2VBY3RpdmVTb3VyY2U7XG4gICAgICB0aGlzLmFuY2hvck1hcFthbmNob3JOYW1lXS5pc0FjdGl2ZSA9IHRydWU7XG4gICAgICBpZiAoZGVhY3RpdmF0ZU90aGVyQW5jaG9yKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuYW5jaG9yTWFwKVxuICAgICAgICAgIC5maWx0ZXIoKG5hbWUpID0+IG5hbWUgIT09IGFuY2hvck5hbWUpXG4gICAgICAgICAgLm1hcCgobmFtZSkgPT4gdGhpcy5hbmNob3JNYXBbbmFtZV0pXG4gICAgICAgICAgLmZvckVhY2goKGFuY2hvcikgPT4ge1xuICAgICAgICAgICAgYW5jaG9yLmFjdGl2ZUNoYW5nZUJ5ID0gZm9yY2VBY3RpdmVTb3VyY2U7XG4gICAgICAgICAgICBhbmNob3IuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==