@spartacus/storefront
Version:
Spartacus Storefront is a package that you can include in your application, which allows you to add default storefront features.
125 lines • 14.5 kB
JavaScript
import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output, } from '@angular/core';
import { timer } from 'rxjs';
import { delayWhen } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "../split-view.service";
/**
* The view component is part of the `SplitViewComponent`. The view
* contains the navigable content that should be split up. It maintains
* a view position and allows to show or hide the view.
*
* The ViewComponent interacts with the `SplitViewService` for handing over the
* view state, so that the overarching `SplitViewComponent` can manage the
* overall experience.
*/
export class ViewComponent {
constructor(splitService, elementRef, cd) {
this.splitService = splitService;
this.elementRef = elementRef;
this.cd = cd;
/**
* The disappeared flag is added to the
*/
this.disappeared = true;
/**
* An update of the view visibility is emitted to the hiddenChange output.
*/
this.hiddenChange = new EventEmitter();
}
/**
* The hidden input is used to set the initial visible state of the view.
* The hidden state defaults to false.
*
* The hidden input supports 2-way binding, see `hiddenChange` property.
*/
set hidden(hidden) {
this._hidden = hidden;
this.splitService.toggle(this.viewPosition, hidden);
}
ngOnInit() {
const hidden = this._hidden ? { hidden: this._hidden } : {};
this.splitService.add(this.viewPosition, hidden);
this.subscription = this.splitService
.getViewState(this.viewPosition)
// delay the disappeared state, so that the (CSS driven) animation has time to finish
.pipe(delayWhen((view) => timer(view.hidden ? this.duration * 1.25 : 0)))
.subscribe((view) => {
this.hiddenChange.emit(view.hidden);
this._hidden = view.hidden;
this.disappeared = view.hidden;
this.cd.markForCheck();
});
}
/**
* Toggles the visibility of the view.
*
* An optional force flag can be used to explicitly show or hide view component.
*/
toggle(force) {
this.splitService.toggle(this.viewPosition, force);
}
/**
* Returns the position for the view.
*
* The position is either taken from the input `position` or generated by the `SplitService`.
*/
get viewPosition() {
if (!(Number(this.position) >= 0)) {
this.position = this.splitService.nextPosition.toString();
}
return Number(this.position);
}
/**
* Returns the duration in milliseconds. The duration is based on the CSS custom property
* `--cx-transition-duration`. Defaults to 300 milliseconds.
*/
get duration() {
const duration = getComputedStyle(this.elementRef.nativeElement)
.getPropertyValue('--cx-transition-duration')
.trim();
if (duration.indexOf('ms') > -1) {
return Number(duration.split('ms')[0]);
}
else if (duration.indexOf('s') > -1) {
return Number(duration.split('s')[0]) * 1000;
}
else {
return 300;
}
}
/**
* The view is removed from the `SplitService` so that the view no longer
* plays a role in the overall split view.
*/
ngOnDestroy() {
var _a;
this.splitService.remove(this.viewPosition);
(_a = this.subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
}
}
ViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ViewComponent, deps: [{ token: i1.SplitViewService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
ViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: ViewComponent, selector: "cx-view", inputs: { position: "position", hidden: "hidden" }, outputs: { hiddenChange: "hiddenChange" }, host: { properties: { "attr.position": "this.position", "style.--cx-view-position": "this.position", "attr.disappeared": "this.disappeared" } }, ngImport: i0, template: "<ng-content></ng-content>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ViewComponent, decorators: [{
type: Component,
args: [{
selector: 'cx-view',
templateUrl: './view.component.html',
changeDetection: ChangeDetectionStrategy.OnPush,
}]
}], ctorParameters: function () { return [{ type: i1.SplitViewService }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { position: [{
type: Input
}, {
type: HostBinding,
args: ['attr.position']
}, {
type: HostBinding,
args: ['style.--cx-view-position']
}], disappeared: [{
type: HostBinding,
args: ['attr.disappeared']
}], hidden: [{
type: Input
}], hiddenChange: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdG9yZWZyb250bGliL3NoYXJlZC9jb21wb25lbnRzL3NwbGl0LXZpZXcvdmlldy92aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0b3JlZnJvbnRsaWIvc2hhcmVkL2NvbXBvbmVudHMvc3BsaXQtdmlldy92aWV3L3ZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBR0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRzNDOzs7Ozs7OztHQVFHO0FBTUgsTUFBTSxPQUFPLGFBQWE7SUFpQ3hCLFlBQ1ksWUFBOEIsRUFDOUIsVUFBc0IsRUFDdEIsRUFBcUI7UUFGckIsaUJBQVksR0FBWixZQUFZLENBQWtCO1FBQzlCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUE1QmpDOztXQUVHO1FBQzhCLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBY3BEOztXQUVHO1FBRUgsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBUS9CLENBQUM7SUF4Qko7Ozs7O09BS0c7SUFDSCxJQUNJLE1BQU0sQ0FBQyxNQUFlO1FBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQWdCRCxRQUFRO1FB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QU9DLFFBQVE7c0JBSFAsS0FBSzs7c0JBQ0wsV0FBVzt1QkFBQyxlQUFlOztzQkFDM0IsV0FBVzt1QkFBQywwQkFBMEI7Z0JBTU4sV0FBVztzQkFBM0MsV0FBVzt1QkFBQyxrQkFBa0I7Z0JBUzNCLE1BQU07c0JBRFQsS0FBSztnQkFVTixZQUFZO3NCQURYLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVsYXlXaGVuIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3BsaXRWaWV3U2VydmljZSB9IGZyb20gJy4uL3NwbGl0LXZpZXcuc2VydmljZSc7XG5cbi8qKlxuICogVGhlIHZpZXcgY29tcG9uZW50IGlzIHBhcnQgb2YgdGhlIGBTcGxpdFZpZXdDb21wb25lbnRgLiBUaGUgdmlld1xuICogY29udGFpbnMgdGhlIG5hdmlnYWJsZSBjb250ZW50IHRoYXQgc2hvdWxkIGJlIHNwbGl0IHVwLiBJdCBtYWludGFpbnNcbiAqIGEgdmlldyBwb3NpdGlvbiBhbmQgYWxsb3dzIHRvIHNob3cgb3IgaGlkZSB0aGUgdmlldy5cbiAqXG4gKiBUaGUgVmlld0NvbXBvbmVudCBpbnRlcmFjdHMgd2l0aCB0aGUgYFNwbGl0Vmlld1NlcnZpY2VgIGZvciBoYW5kaW5nIG92ZXIgdGhlXG4gKiB2aWV3IHN0YXRlLCBzbyB0aGF0IHRoZSBvdmVyYXJjaGluZyBgU3BsaXRWaWV3Q29tcG9uZW50YCBjYW4gbWFuYWdlIHRoZVxuICogb3ZlcmFsbCBleHBlcmllbmNlLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjeC12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJvdGVjdGVkIF9oaWRkZW47XG5cbiAgQElucHV0KClcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnBvc2l0aW9uJylcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS4tLWN4LXZpZXctcG9zaXRpb24nKVxuICBwb3NpdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzYXBwZWFyZWQgZmxhZyBpcyBhZGRlZCB0byB0aGVcbiAgICovXG4gIEBIb3N0QmluZGluZygnYXR0ci5kaXNhcHBlYXJlZCcpIGRpc2FwcGVhcmVkID0gdHJ1ZTtcblxuICAvKipcbiAgICogVGhlIGhpZGRlbiBpbnB1dCBpcyB1c2VkIHRvIHNldCB0aGUgaW5pdGlhbCB2aXNpYmxlIHN0YXRlIG9mIHRoZSB2aWV3LlxuICAgKiBUaGUgaGlkZGVuIHN0YXRlIGRlZmF1bHRzIHRvIGZhbHNlLlxuICAgKlxuICAgKiBUaGUgaGlkZGVuIGlucHV0IHN1cHBvcnRzIDItd2F5IGJpbmRpbmcsIHNlZSBgaGlkZGVuQ2hhbmdlYCBwcm9wZXJ0eS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBoaWRkZW4oaGlkZGVuOiBib29sZWFuKSB7XG4gICAgdGhpcy5faGlkZGVuID0gaGlkZGVuO1xuICAgIHRoaXMuc3BsaXRTZXJ2aWNlLnRvZ2dsZSh0aGlzLnZpZXdQb3NpdGlvbiwgaGlkZGVuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiB1cGRhdGUgb2YgdGhlIHZpZXcgdmlzaWJpbGl0eSBpcyBlbWl0dGVkIHRvIHRoZSBoaWRkZW5DaGFuZ2Ugb3V0cHV0LlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGhpZGRlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwcm90ZWN0ZWQgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHNwbGl0U2VydmljZTogU3BsaXRWaWV3U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBoaWRkZW4gPSB0aGlzLl9oaWRkZW4gPyB7IGhpZGRlbjogdGhpcy5faGlkZGVuIH0gOiB7fTtcbiAgICB0aGlzLnNwbGl0U2VydmljZS5hZGQodGhpcy52aWV3UG9zaXRpb24sIGhpZGRlbik7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuc3BsaXRTZXJ2aWNlXG4gICAgICAuZ2V0Vmlld1N0YXRlKHRoaXMudmlld1Bvc2l0aW9uKVxuICAgICAgLy8gZGVsYXkgdGhlIGRpc2FwcGVhcmVkIHN0YXRlLCBzbyB0aGF0IHRoZSAoQ1NTIGRyaXZlbikgYW5pbWF0aW9uIGhhcyB0aW1lIHRvIGZpbmlzaFxuICAgICAgLnBpcGUoZGVsYXlXaGVuKCh2aWV3KSA9PiB0aW1lcih2aWV3LmhpZGRlbiA/IHRoaXMuZHVyYXRpb24gKiAxLjI1IDogMCkpKVxuICAgICAgLnN1YnNjcmliZSgodmlldykgPT4ge1xuICAgICAgICB0aGlzLmhpZGRlbkNoYW5nZS5lbWl0KHZpZXcuaGlkZGVuKTtcbiAgICAgICAgdGhpcy5faGlkZGVuID0gdmlldy5oaWRkZW47XG5cbiAgICAgICAgdGhpcy5kaXNhcHBlYXJlZCA9IHZpZXcuaGlkZGVuO1xuICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgdmlldy5cbiAgICpcbiAgICogQW4gb3B0aW9uYWwgZm9yY2UgZmxhZyBjYW4gYmUgdXNlZCB0byBleHBsaWNpdGx5IHNob3cgb3IgaGlkZSB2aWV3IGNvbXBvbmVudC5cbiAgICovXG4gIHRvZ2dsZShmb3JjZT86IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNwbGl0U2VydmljZS50b2dnbGUodGhpcy52aWV3UG9zaXRpb24sIGZvcmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwb3NpdGlvbiBmb3IgdGhlIHZpZXcuXG4gICAqXG4gICAqIFRoZSBwb3NpdGlvbiBpcyBlaXRoZXIgdGFrZW4gZnJvbSB0aGUgaW5wdXQgYHBvc2l0aW9uYCBvciBnZW5lcmF0ZWQgYnkgdGhlIGBTcGxpdFNlcnZpY2VgLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCB2aWV3UG9zaXRpb24oKTogbnVtYmVyIHtcbiAgICBpZiAoIShOdW1iZXIodGhpcy5wb3NpdGlvbikgPj0gMCkpIHtcbiAgICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLnNwbGl0U2VydmljZS5uZXh0UG9zaXRpb24udG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIE51bWJlcih0aGlzLnBvc2l0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMuIFRoZSBkdXJhdGlvbiBpcyBiYXNlZCBvbiB0aGUgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuICAgKiBgLS1jeC10cmFuc2l0aW9uLWR1cmF0aW9uYC4gRGVmYXVsdHMgdG8gMzAwIG1pbGxpc2Vjb25kcy5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZHVyYXRpb24oKTogbnVtYmVyIHtcbiAgICBjb25zdCBkdXJhdGlvbjogc3RyaW5nID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudClcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLWN4LXRyYW5zaXRpb24tZHVyYXRpb24nKVxuICAgICAgLnRyaW0oKTtcblxuICAgIGlmIChkdXJhdGlvbi5pbmRleE9mKCdtcycpID4gLTEpIHtcbiAgICAgIHJldHVybiBOdW1iZXIoZHVyYXRpb24uc3BsaXQoJ21zJylbMF0pO1xuICAgIH0gZWxzZSBpZiAoZHVyYXRpb24uaW5kZXhPZigncycpID4gLTEpIHtcbiAgICAgIHJldHVybiBOdW1iZXIoZHVyYXRpb24uc3BsaXQoJ3MnKVswXSkgKiAxMDAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMzAwO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdmlldyBpcyByZW1vdmVkIGZyb20gdGhlIGBTcGxpdFNlcnZpY2VgIHNvIHRoYXQgdGhlIHZpZXcgbm8gbG9uZ2VyXG4gICAqIHBsYXlzIGEgcm9sZSBpbiB0aGUgb3ZlcmFsbCBzcGxpdCB2aWV3LlxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zcGxpdFNlcnZpY2UucmVtb3ZlKHRoaXMudmlld1Bvc2l0aW9uKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuIl19