UNPKG

@disane/ngx-taskboard

Version:
349 lines (348 loc) 12.4 kB
import { AfterViewInit, ChangeDetectorRef, DoCheck, ElementRef, EventEmitter, NgZone, OnInit, Renderer2, TemplateRef } from '@angular/core'; import { TaskboardService } from '../taskboard.service'; import { CardItem, ClickEvent, CollapseEvent, CollapseState, DropEvent, GroupHeading, ScrollEvent, ScrollState } from '../types'; export declare class BoardComponent implements OnInit, DoCheck, AfterViewInit { private readonly renderer; private readonly elRef; private readonly cd; private readonly taskboardService; private ngZone; set items(items: (object | CardItem)[]); get items(): (object | CardItem)[]; /** Shows the blacklog on onit */ showBacklog: boolean; /** Name of the backlog row */ backlogName: string; /** * Grouping keys for columns (if not passed, the keys will be determined out of the items) * Caution: If you don't pass any headings manually, only the columns are shown, which have data. * If you want to show emtpy rows, please set them */ hGroupKeys: (string | GroupHeading)[]; /** * Grouping keys for rows (if not passed, the keys will be determined out of the items) * Caution: If you don't pass any headings manually, only the rows are shown, which have data. * If you want to show emtpy rows, please set them */ vGroupKeys: (string | GroupHeading)[]; /** Show add buttons on the column headings */ hAddNewItems: boolean; /** Show add buttons on the row headings */ vAddNewItems: boolean; /** Show add buttons in the cells for columns and rows */ cellAddNewItems: boolean; /** Key to group data for rows */ vGroupKey: string; /** Key to group data for columns */ hGroupKey: string; /** Sort items by property */ sortBy: string; /** Board name to show between row and column header */ boardName: string; /** Invert rows and columns */ invertGroupDirection: boolean; /** All items which can't be grouped into rows and columns are stored into the backlog */ showUngroupedInBacklog: boolean; /** Decrease overall font size */ smallText: boolean; /** Template for items to render. "item" object ist passed (see examples) */ itemTemplate: TemplateRef<any>; /** Template for collapsed rows to render. "count" object ist passed (see examples) */ noElementsTemplate: TemplateRef<any>; /** Template for column headers. Current groupName will be passed (see examples) */ hHeaderTemplate: TemplateRef<any>; /** Template for row headers. Current groupName will be passed (see examples) */ vHeaderTemplate: TemplateRef<any>; /** Template for actions, add and collapse buttons (see examples) */ actionsTemplate: TemplateRef<any>; /** Template for the placeholder element which will be generated when an item is draged over a cell */ dragoverPlaceholderTemplate: TemplateRef<any>; /** Icon template for add icons */ addIconTemplate: TemplateRef<any>; /** Icon template for collapse icons */ collapseIconTemplate: TemplateRef<any>; /** Icon template for expand icons */ expandIconTemplate: TemplateRef<any>; /** Default css class for row header */ vHeaderClass: string; /** Default css class for column header */ hHeaderClass: string; /** If set to true, the horizontal group keys are fixed positioned to the top and remain at the top while scrolling. Only applied when scrollable is true */ stickyHorizontalHeaderKeys: boolean; /** If set to true, the vertical group keys are fixed positioned to the top and remain at the top while scrolling. Only applied when scrollable is true */ stickyVerticalHeaderKeys: boolean; /** Default css class for cell header */ cellClass: string; /** Column width (in px) which is applied to the columns when the content is scollable */ columnWidth: number; /** Width of the backlog row, when activated. You can use all valid css units. Default is columnWidth */ backlogWidth: string; /** Allow to collapse the rows */ vCollapsable: boolean; /** Rows are collapsed or not on init */ vCollapsed: boolean; /** Columns are collapsed or not on init */ hCollapsed: boolean; /** Shows the filter row to search items by filter in filterOnProperties array */ showFilterRow: boolean; /** Placeholder for the input with the filter row */ filterRowPlaceholder: string; /** Predefined filter for the searchbar. If set, the items are filtered by the term on init. */ filter: string; /** * Specify the properties which will be searched for the given term * in filter. If not properties are given, all will be searched */ filterOnProperties: string[]; /** * The collapse state which is applied when set initially */ initialCollapseState: CollapseState[]; scrollStates: ScrollState; /** Fired when the user drags an item. Current item is passed */ readonly dragStarted: EventEmitter<object>; /** Fired when an item is dropped. Current item is passed */ readonly dropped: EventEmitter<DropEvent>; /** Fired when an add action is click. Current ClickEvent is passed */ readonly elementCreateClick: EventEmitter<ClickEvent>; /** Fired when a heading is collapsed. CollapseEvent is emitted */ readonly headingCollapsed: EventEmitter<CollapseEvent>; readonly isScrolling: EventEmitter<ScrollEvent>; readonly scrolledToEnd: EventEmitter<ScrollEvent>; readonly scrollEnded: EventEmitter<ScrollEvent>; /** * Column headings */ hHeadings: (string | GroupHeading)[]; /** * Row headings */ vHeadings: (string | GroupHeading)[]; /** * If set to true, the rows and columns are scrollable and will be out of the viewport. * If not set, all rows and column will only use 100% of the parent element (aligned by flex/flex-fill) */ scrollable: boolean; /** If set to true, rows are scrollable */ verticalScrolling: boolean; /** If set to true, columns are scrollable */ horizontalScrolling: boolean; /** Items to display */ private _items; private readonly collapseStates; private dragItem; private nativeDragItem; private placeholderSet; private currentDragZone; private isScrollingTimeout; private scrollableContainer; constructor(renderer: Renderer2, elRef: ElementRef, cd: ChangeDetectorRef, taskboardService: TaskboardService, ngZone: NgZone); onResize(): void; ngOnInit(): void; executeChangeDetection(): void; ngDoCheck(): void; ngAfterViewInit(): void; /** * Checks if content needs to scroll and restore the scrollstate if needed */ private checkIfContentNeedsToScroll; /** * Prepares board */ private prepareBoard; private restoreScrollState; /** * Matches and set initial collapse state */ private matchAndSetInitialCollapseState; /** * Checks prerequisites * @returns prerequisites */ private checkPrerequisites; /** * Checks if prop is object * @returns true if if prop is object */ private checkIfPropIsObject; /** * Generates the appropiate headings * @memberOf BoardComponent */ private generateHeadings; /** * Generates collapse states * @param array Array of collapse states * @param diretion Generate collapse states for vertical or horizontal groups * @returns collapse states */ private generateCollapseStates; /** * Gets all items of a cell (row / col) * * @param vValue Value of the row * @param hValue Value of the column * @returns Array of all items of a cell * * @memberOf BoardComponent */ getItemsOfGroup(vValue: string, hValue: string): (CardItem | object)[]; /** * Toggles in entire group (all rows or all columns) * * @param direction Direction to toggle * @param collapsed Current collapse state * * @memberOf BoardComponent */ toggleCollapseGroup(direction: string, collapsed: boolean): void; /** * Gets the value of an item * * @param item Item to get the value from * @returns Value of item * * @memberOf BoardComponent */ getValue(item: string | GroupHeading): string; /** * Determines correct group keys * @param item Item object to check * @returns correct group keys */ private determineCorrectGroupKeys; /** * Gets case insensitive prop key * @param item Item object * @param propKey property key * @returns case insensitive prop key */ private getCaseInsensitivePropKey; /** * Gets headings from items * @param [groupKey] key to get the group keys * @returns headings from items */ private getHeadingsFromItems; /** * Gets ungrouped items (which could not be put into rows or cols) * * @returns Array of ungrouped items * * @memberOf BoardComponent */ getUngroupedItems(): (CardItem | object)[]; /** * Toggles an elements collapse state * * @param group Column and row value * * @memberOf BoardComponent */ toggleCollapse(group: { hGroup: string | GroupHeading; vGroup: string | GroupHeading; }): void; /** * Gets the current collapse state of a specific item * * @param collapseItem Item to get the collapse state * @returns true if collapsed, false when expanded * * @memberOf BoardComponent */ collapseState(collapseItem: string | GroupHeading): boolean; /** * Handler which is called when an item starts to drag * * @param event Native drag event * @param item CardItem which is dragged * * @memberOf BoardComponent */ dragStart(event: DragEvent, item: CardItem): void; /** * Handler which is called, when the drag of an item ends * * @param event Native drag event * @param item CardItem which is dragged * * @memberOf BoardComponent */ dragEnd(): void; /** * Handler which is called, when a new item should be created (click on a add icon) * * @param group Row and column value * * @memberOf BoardComponent */ createElement(group: ClickEvent): void; /** * Handler which is called when an item is dropped * * @param event Native drag event * @param vRow Row item * @param hRow Column item * * @memberOf BoardComponent */ drop(event: DragEvent, vRow: string | GroupHeading, hRow: string | GroupHeading): void; /** * Handler which is called when an item is dragged over a cell * * @param event Native html drag event * @param vRow Row item * @param hRow Column item * * @memberOf BoardComponent */ dragOver(event: DragEvent, vRow: string | GroupHeading, hRow: string | GroupHeading): void; /** * Checks if container is scrollable * @param containerName Container to check if scrollable * @returns is scrollable */ private containerIsScrollable; /** * Determines the style of a container which includes the scrollbar * * @returns Style of the container the scrollbar is applied to * * @memberOf BoardComponent */ scrollBarStyle(): object; /** * Gets the current width of a scrollbar * * @returns Object with native css style * * @memberOf BoardComponent */ getColumnWidth(): object; private calculateScrollBarWidth; /** * Creates placeholder element * @returns placeholder element */ private createPlaceholderElement; /** * Gets headings * @param keys key array * @param key key to check * @returns headings */ private getHeadings; /** * Scrolling board component * @param event Event */ scrolling(event: Event): void; private getScrollState; /** * Detects if user has ended scrolling * Got from: https://gomakethings.com/detecting-when-a-visitor-has-stopped-scrolling-with-vanilla-javascript/ * @returns if user has ended scrolling */ private detectIfUserHasEndedScrolling; }