UNPKG

devexpress-reporting

Version:

DevExpress Reporting provides the capability to develop a reporting application to create and customize reports.

198 lines (197 loc) 8.48 kB
/** * DevExpress HTML/JS Reporting (viewer\internal\_previewBreadcrumbs.js) * Version: 24.2.6 * Build date: Mar 18, 2025 * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED * License: https://www.devexpress.com/Support/EULAs/universal.xml */ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; import { BaseRenderingModel, createViewModelGenerator, mutable, mutableArray } from '@devexpress/analytics-core/analytics-serializer-native'; import { PreviewElements } from '../constants'; import { BreadcrumbsKeyboardHelper } from '../accessibility/_breadcrumbsKeyboardHelper'; export class BreadcrumbItem extends BaseRenderingModel { constructor(position, previewInitData, onItemClick) { super(); this.previewInitData = previewInitData; this.onItemClick = onItemClick; this.position = position; } getModel() { return this; } onPropertyChanged(args) { this.updateViewModel(args); } updateViewModel(args) { const viewModel = this.getViewModel(); if (args.propertyName === 'displayText') { viewModel.displayText = this.displayText; } else if (args.propertyName === 'previewInitData') { viewModel.previewInitData = this.previewInitData; } else if (args.propertyName === 'parameterValues') { viewModel.parameterValues = this.parameterValues; } else if (args.propertyName === 'position') { viewModel.position = this.position; } else if (args.propertyName === 'pageIndex') { viewModel.pageIndex = this.pageIndex; } else if (args.propertyName === 'indexes') { viewModel.indexes = this.indexes; } } createViewModel() { const viewModel = createViewModelGenerator(super.createViewModel()) .generateProperty('displayText', this.displayText) .generateProperty('position', this.position) .generateProperty('onItemClick', this.onItemClick) .generateProperty('previewInitData', this.previewInitData) .generateProperty('parameterValues', this.parameterValues) .generateProperty('pageIndex', this.pageIndex) .generateProperty('indexes', this.indexes) .getViewModel(); return viewModel; } } __decorate([ mutable(0) ], BreadcrumbItem.prototype, "pageIndex", void 0); __decorate([ mutable('') ], BreadcrumbItem.prototype, "indexes", void 0); __decorate([ mutable('') ], BreadcrumbItem.prototype, "displayText", void 0); __decorate([ mutable(0) ], BreadcrumbItem.prototype, "position", void 0); __decorate([ mutable() ], BreadcrumbItem.prototype, "parameterValues", void 0); export class BreadcrumbModel extends BaseRenderingModel { addItem(previewInitData, itemClick, displayText) { const position = this.listItems.length; this.listItems.push(new BreadcrumbItem(position, previewInitData, itemClick)); } reset() { const model = this.getModel(); model.listItems = []; this.listItems = model.listItems; } updateCurrentParameters(parametersViewModel) { const currentItem = this._currentIndex() !== -1 && this.listItems[this._currentIndex()]; const parameterValues = {}; if (currentItem) { parametersViewModel['_parameters'].forEach(parameter => { if (!parameter.visible) return; const getValue = (parameter) => parameter.value ? [...parameter.value] : parameter; const searchForValue = (groupLayoutItem, parameterPath) => { let parameterValue; if (groupLayoutItem[parameterPath]) return getValue(groupLayoutItem[parameterPath]); groupLayoutItem.groupLayoutItems?.forEach(groupLayoutItem => { const valueFound = searchForValue(groupLayoutItem, parameterPath); if (valueFound) parameterValue = valueFound; }); return parameterValue; }; parameterValues[parameter.path] = searchForValue(parametersViewModel, parameter.path); }); this.listItems[this._currentIndex()].parameterValues = parameterValues; } } updateCurrentItem(previewInitData, itemClick, displayText) { const newItemData = new BreadcrumbItem(0, previewInitData, itemClick); newItemData.setProperty('displayText', displayText); if (this._currentIndex() === -1) { this.listItems.push(newItemData); } else { this.listItems.splice(this._currentIndex(), 1, newItemData); this.listItems[this._currentIndex()].position = this._currentIndex(); } } updateCurrentDocumentId(documentId) { if (!documentId) return; if (this.listItems[this._currentIndex()] && this.listItems[this._currentIndex()].previewInitData) this.listItems[this._currentIndex()].previewInitData.documentId = documentId; } updateCurrentPosition(pageIndex, indexes) { const currentItemIndex = this._currentIndex(); this.listItems[currentItemIndex].pageIndex = pageIndex; this.listItems[currentItemIndex].indexes = indexes; } updateCurrentReportName(displayText) { if (displayText && displayText.length) this.listItems[this._currentIndex()].displayText = displayText; this.updatePreviewSize && this.updatePreviewSize(); } getCurrentPageInfo() { const index = this._currentIndex(); return index < 0 ? {} : { pageIndex: this.listItems[index].pageIndex, indexes: this.listItems[index].indexes }; } _currentIndex() { return this.listItems.length - 1; } onClick(itemIndex) { if (this.listItems.length > itemIndex + 1) { this.listItems = this.listItems.slice(0, itemIndex + 1); const model = this.getModel(); model.listItems = this.listItems.map(item => item.getModel()); } const activeItem = this.listItems[itemIndex]; activeItem.onItemClick(activeItem.previewInitData, activeItem.parameterValues, activeItem.pageIndex); } constructor() { super(); this.keyboardHelper = new BreadcrumbsKeyboardHelper(this); this._disposables.push(this.keyboardHelper); this.templateName = PreviewElements.Breadcrumb; this.listItems = []; } dispose() { super.dispose(); this.listItems.splice(0); } getModel() { return this; } onPropertyChanged(args) { if (args.propertyName === 'listItems') { this.visible = args.newValue.length > 0; const viewModel = this.getViewModel(); viewModel.listItems = this.listItems.map(item => (item.getViewModel && item.getViewModel())).filter(item => item); } } updateViewModel(args) { const viewModel = this.getViewModel(); viewModel.listItems = this.listItems.map(item => (item.getViewModel && item.getViewModel())).filter(item => item); } createViewModel() { const viewModel = createViewModelGenerator(super.createViewModel()) .generateProperty('visible', this.visible) .generateProperty('listItems', this.listItems.map(item => item.getViewModel())) .generateProperty('templateName', this.templateName) .generateProperty('onClick', this.onClick) .generateProperty('keyboardHelper', this.keyboardHelper) .getViewModel(); return viewModel; } } __decorate([ mutable(false) ], BreadcrumbModel.prototype, "visible", void 0); __decorate([ mutableArray(() => []) ], BreadcrumbModel.prototype, "listItems", void 0);