ngx-resource-timeline
Version:
A simple Angular Resource Timeline library
1 lines • 37.5 kB
Source Map (JSON)
{"version":3,"file":"ngx-resource-timeline.mjs","sources":["../../../projects/ngx-resource-timeline/src/lib/ngx-resource-timeline.service.ts","../../../projects/ngx-resource-timeline/src/lib/ngx-resource-timeline.model.ts","../../../projects/ngx-resource-timeline/src/lib/ngx-resource-timeline.component.ts","../../../projects/ngx-resource-timeline/src/lib/ngx-resource-timeline.component.html","../../../projects/ngx-resource-timeline/src/lib/ngx-resource-timeline.module.ts","../../../projects/ngx-resource-timeline/src/public_api.ts","../../../projects/ngx-resource-timeline/src/ngx-resource-timeline.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\nimport {Subject} from 'rxjs';\nimport {Item, Section} from './ngx-resource-timeline.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NgxResourceTimelineService {\n\n public item = new Subject<Item>();\n public itemAdd = new Subject<Item>();\n public itemId = new Subject<number>();\n public sectionAdd = new Subject<Section>();\n public section = new Subject<Section>();\n public sectionId = new Subject<number>();\n public refreshView = new Subject();\n\n constructor() {\n }\n\n public itemPush(item: Item): void {\n this.itemAdd.next(item);\n }\n\n public itemPop(): void {\n this.item.next(null);\n }\n\n public itemRemove(id: number): void {\n this.itemId.next(id);\n }\n\n public sectionPush(section: Section): void {\n this.sectionAdd.next(section);\n }\n\n public sectionPop(): void {\n this.section.next(null);\n }\n\n public sectionRemove(id: number): void {\n this.sectionId.next(id);\n }\n\n public refresh(): void {\n this.refreshView.next(null);\n }\n\n}\n","import moment from 'moment';\n\nexport class Period {\n name: string;\n classes: string;\n timeFramePeriod: number;\n timeFrameOverall: number;\n timeFrameHeaders: string[];\n timeFrameHeadersTooltip?: string[];\n tooltip?: string;\n}\n\nexport class Item {\n id: number;\n name: string;\n start: moment.Moment;\n end: moment.Moment;\n classes: string;\n sectionID: number;\n tooltip?: string;\n metadata?: any;\n}\n\nexport class Section {\n id: number;\n name: string;\n tooltip?: string;\n}\n\nexport class Text {\n NextButton: string;\n PrevButton: string;\n TodayButton: string;\n GotoButton: string;\n SectionTitle: string;\n HeaderTitle: string;\n\n constructor() {\n this.NextButton = 'Next';\n this.PrevButton = 'Prev';\n this.TodayButton = 'Today';\n this.GotoButton = 'Go to';\n this.SectionTitle = 'Section';\n this.HeaderTitle = null;\n }\n}\n\nexport class Events {\n // ItemResized: (item: Item, start: any, end: any) => void;\n // ItemMovement: (item: Item, start: any, end: any) => void;\n // ItemMovementStart: (item: Item, start: any, end: any) => void;\n // ItemMovementEnd: (item: Item, start: any, end: any) => void;\n ItemDropped: (item: Item) => void;\n ItemClicked: (item: Item) => void;\n ItemContextMenu: (item: Item, event: MouseEvent) => void;\n SectionClickEvent: (section: Section) => void;\n SectionContextMenuEvent: (section: Section, event: MouseEvent) => void;\n PeriodChange: (start: moment.Moment, end: moment.Moment) => void;\n}\n\nexport class SectionItem {\n section: Section;\n minRowHeight: number;\n itemMetas: ItemMeta[];\n\n constructor() {\n this.itemMetas = new Array<ItemMeta>();\n }\n}\n\nexport class ItemMeta {\n item: Item;\n isStart: boolean;\n isEnd: boolean;\n cssTop: number;\n cssLeft: number;\n cssWidth: number;\n\n constructor() {\n this.cssTop = 0;\n this.cssLeft = 0;\n this.cssWidth = 0;\n }\n}\n\nexport class Header {\n headerDetails: HeaderDetails[];\n\n constructor() {\n this.headerDetails = new Array<HeaderDetails>();\n }\n}\n\nexport class HeaderDetails {\n name: string;\n colspan: number;\n tooltip?: string;\n}\n","import {ChangeDetectorRef, Component, ElementRef, Input, OnDestroy, OnInit, ViewChild} from '@angular/core';\nimport {CdkDragDrop} from '@angular/cdk/drag-drop';\nimport {NgxResourceTimelineService} from './ngx-resource-timeline.service';\nimport {\n HeaderDetails,\n Header,\n ItemMeta,\n Item,\n Period,\n SectionItem,\n Section,\n Text,\n Events\n} from './ngx-resource-timeline.model';\nimport moment from 'moment';\nimport {Subscription} from 'rxjs';\n\n@Component({\n selector: 'ngx-rt[items][periods][sections]',\n templateUrl: './ngx-resource-timeline.component.html',\n styleUrls: ['./ngx-resource-timeline.component.css'],\n standalone: false\n})\nexport class NgxResourceTimelineComponent implements OnInit, OnDestroy {\n @ViewChild('sectionTd') set SectionTd(elementRef: ElementRef) {\n this.SectionLeftMeasure = elementRef.nativeElement.clientWidth + 'px';\n this.changeDetector.detectChanges();\n }\n\n @Input() currentTimeFormat = 'DD-MMM-YYYY HH:mm';\n @Input() showCurrentTime = true;\n @Input() showHeaderTitle = true;\n @Input() showActionButtons = true;\n @Input() showGoto = true;\n @Input() showToday = true;\n @Input() allowDragging = false;\n // @Input() allowResizing = false;\n @Input() locale = '';\n @Input() showBusinessDayOnly = false;\n @Input() headerFormat = 'Do MMM YYYY';\n @Input() minRowHeight = 40;\n @Input() maxHeight: string = null;\n @Input() text = new Text();\n @Input() items: Item[];\n @Input() sections: Section[];\n @Input() periods: Period[];\n @Input() events: Events = new Events();\n @Input() start = moment().startOf('day');\n\n end = moment().endOf('day');\n showGotoModal = false;\n currentTimeIndicatorPosition: string;\n currentTimeVisibility = 'visible';\n currentTimeTitle: string;\n ShowCurrentTimeHandle = null;\n SectionLeftMeasure = '0';\n currentPeriod: Period;\n currentPeriodMinuteDiff = 0;\n header: Header[];\n sectionItems: SectionItem[];\n subscription = new Subscription();\n\n constructor(\n private changeDetector: ChangeDetectorRef,\n private service: NgxResourceTimelineService\n ) {\n moment.locale(this.locale);\n }\n\n ngOnInit(): void {\n this.setSectionsInSectionItems();\n this.changePeriod(this.periods[0], false);\n this.itemPush();\n this.itemPop();\n this.itemRemove();\n this.sectionPush();\n this.sectionPop();\n this.sectionRemove();\n this.refresh();\n }\n\n refreshView() {\n this.setSectionsInSectionItems();\n this.changePeriod(this.currentPeriod, false);\n }\n\n trackByFn(index, item) {\n return index;\n }\n\n setSectionsInSectionItems() {\n this.sectionItems = new Array<SectionItem>();\n this.sections.forEach(section => {\n const perSectionItem = new SectionItem();\n perSectionItem.section = section;\n perSectionItem.minRowHeight = this.minRowHeight;\n this.sectionItems.push(perSectionItem);\n });\n }\n\n setItemsInSectionItems() {\n const itemMetas = new Array<ItemMeta>();\n\n this.sectionItems.forEach(ele => {\n ele.itemMetas = new Array<ItemMeta>();\n ele.minRowHeight = this.minRowHeight;\n\n this.items.filter(i => {\n let itemMeta = new ItemMeta();\n\n if (i.sectionID === ele.section.id) {\n itemMeta.item = i;\n if (itemMeta.item.start <= this.end && itemMeta.item.end >= this.start) {\n itemMeta = this.itemMetaCal(itemMeta);\n ele.itemMetas.push(itemMeta);\n itemMetas.push(itemMeta);\n }\n }\n });\n });\n\n const sortedItems = itemMetas.reduce((sortItems: {}, itemMeta: ItemMeta) => {\n const index = this.sectionItems.findIndex(sectionItem => sectionItem.section.id === itemMeta.item.sectionID);\n if (!sortItems[index]) {\n sortItems[index] = [];\n }\n sortItems[index].push(itemMeta);\n return sortItems;\n }, {});\n\n this.calCssTop(sortedItems);\n }\n\n itemMetaCal(itemMeta: ItemMeta) {\n const foundStart = moment.max(itemMeta.item.start, this.start);\n const foundEnd = moment.min(itemMeta.item.end, this.end);\n\n let widthMinuteDiff = Math.abs(foundStart.diff(foundEnd, 'minutes'));\n let leftMinuteDiff = foundStart.diff(this.start, 'minutes');\n if (this.showBusinessDayOnly) {\n widthMinuteDiff -= (this.getNumberOfWeekendDays(moment(foundStart), moment(foundEnd)) * this.currentPeriod.timeFramePeriod);\n leftMinuteDiff -= (this.getNumberOfWeekendDays(moment(this.start), moment(foundStart)) * this.currentPeriod.timeFramePeriod);\n }\n\n itemMeta.cssLeft = (leftMinuteDiff / this.currentPeriodMinuteDiff) * 100;\n itemMeta.cssWidth = (widthMinuteDiff / this.currentPeriodMinuteDiff) * 100;\n\n if (itemMeta.item.start >= this.start) {\n itemMeta.isStart = true;\n }\n if (itemMeta.item.end <= this.end) {\n itemMeta.isEnd = true;\n }\n\n return itemMeta;\n }\n\n calCssTop(sortedItems) {\n for (const prop of Object.keys(sortedItems)) {\n for (let i = 0; i < sortedItems[prop].length; i++) {\n let elemBottom;\n const elem = sortedItems[prop][i];\n\n for (let prev = 0; prev < i; prev++) {\n const prevElem = sortedItems[prop][prev];\n const prevElemBottom = prevElem.cssTop + this.minRowHeight;\n elemBottom = elem.cssTop + this.minRowHeight;\n\n if ((\n (prevElem.item.start <= elem.item.start && elem.item.start <= prevElem.item.end) ||\n (prevElem.item.start <= elem.item.end && elem.item.end <= prevElem.item.end) ||\n (prevElem.item.start >= elem.item.start && elem.item.end >= prevElem.item.end)\n ) && (\n (prevElem.cssTop <= elem.cssTop && elem.cssTop <= prevElemBottom) ||\n (prevElem.cssTop <= elemBottom && elemBottom <= prevElemBottom)\n )) {\n elem.cssTop = prevElemBottom + 1;\n prev = 0;\n }\n }\n\n elemBottom = elem.cssTop + this.minRowHeight + 1;\n if (this.sectionItems[Number(prop)] && elemBottom > this.sectionItems[Number(prop)].minRowHeight) {\n this.sectionItems[Number(prop)].minRowHeight = elemBottom;\n }\n }\n }\n }\n\n changePeriod(period: Period, userTrigger: boolean = true) {\n this.currentPeriod = period;\n const _start = this.start;\n this.end = moment(_start).add(this.currentPeriod.timeFrameOverall, 'minutes').endOf('day');\n this.currentPeriodMinuteDiff = Math.abs(this.start.diff(this.end, 'minutes'));\n\n if (userTrigger && this.events.PeriodChange) {\n this.events.PeriodChange(this.start, this.end);\n }\n\n if (this.showBusinessDayOnly) {\n this.currentPeriodMinuteDiff -=\n (this.getNumberOfWeekendDays(moment(this.start), moment(this.end)) * this.currentPeriod.timeFramePeriod);\n }\n\n this.header = new Array<Header>();\n this.currentPeriod.timeFrameHeaders.forEach((ele: string, index: number) => {\n this.header.push(this.getDatesBetweenTwoDates(ele, index));\n });\n\n this.setItemsInSectionItems();\n this.showCurrentTimeIndicator();\n }\n\n showCurrentTimeIndicator = () => {\n if (this.ShowCurrentTimeHandle) {\n clearTimeout(this.ShowCurrentTimeHandle);\n }\n\n const currentTime = moment();\n if (currentTime >= this.start && currentTime <= this.end) {\n this.currentTimeVisibility = 'visible';\n this.currentTimeIndicatorPosition = (\n (Math.abs(this.start.diff(currentTime, 'minutes')) / this.currentPeriodMinuteDiff) * 100\n ) + '%';\n this.currentTimeTitle = currentTime.format(this.currentTimeFormat);\n } else {\n this.currentTimeVisibility = 'hidden';\n }\n this.ShowCurrentTimeHandle = setTimeout(this.showCurrentTimeIndicator, 30000);\n }\n\n gotoToday() {\n this.start = moment().startOf('day');\n this.changePeriod(this.currentPeriod);\n }\n\n nextPeriod() {\n this.start.add(this.currentPeriod.timeFrameOverall, 'minutes');\n this.changePeriod(this.currentPeriod);\n }\n\n previousPeriod() {\n this.start.subtract(this.currentPeriod.timeFrameOverall, 'minutes');\n this.changePeriod(this.currentPeriod);\n }\n\n gotoDate(event: any) {\n this.showGotoModal = false;\n this.start = moment(event).startOf('day');\n this.changePeriod(this.currentPeriod);\n }\n\n getDatesBetweenTwoDates(format: string, index: number): Header {\n const now = moment(this.start);\n const dates = new Header();\n let prev: string;\n let colspan = 0;\n\n while (now.isBefore(this.end) || now.isSame(this.end)) {\n if (!this.showBusinessDayOnly || (now.day() !== 0 && now.day() !== 6)) {\n const headerDetails = new HeaderDetails();\n headerDetails.name = now.locale(this.locale).format(format);\n if (prev && prev !== headerDetails.name) {\n colspan = 1;\n } else {\n colspan++;\n dates.headerDetails.pop();\n }\n prev = headerDetails.name;\n headerDetails.colspan = colspan;\n headerDetails.tooltip = this.currentPeriod.timeFrameHeadersTooltip && this.currentPeriod.timeFrameHeadersTooltip[index] ?\n now.locale(this.locale).format(this.currentPeriod.timeFrameHeadersTooltip[index]) : '';\n dates.headerDetails.push(headerDetails);\n }\n now.add(this.currentPeriod.timeFramePeriod, 'minutes');\n }\n return dates;\n }\n\n getNumberOfWeekendDays(startDate, endDate) {\n let count = 0;\n while (startDate.isBefore(endDate) || startDate.isSame(endDate)) {\n if ((startDate.day() === 0 || startDate.day() === 6)) {\n count++;\n }\n startDate.add(this.currentPeriod.timeFramePeriod, 'minutes');\n }\n return count;\n }\n\n drop(event: CdkDragDrop<Section>) {\n event.item.data.sectionID = event.container.data.id;\n this.refreshView();\n this.events.ItemDropped(event.item.data);\n }\n\n itemPush() {\n this.subscription.add(this.service.itemAdd.asObservable().subscribe((item: Item) => {\n this.items.push(item);\n this.refreshView();\n }));\n }\n\n itemPop() {\n this.subscription.add(this.service.item.asObservable().subscribe(() => {\n this.items.pop();\n this.refreshView();\n }));\n }\n\n itemRemove() {\n this.subscription.add(this.service.itemId.asObservable().subscribe((itemId: number) => {\n this.items.splice(this.items.findIndex((item) => {\n return item.id === itemId;\n }), 1);\n this.refreshView();\n }));\n }\n\n sectionPush() {\n this.subscription.add(this.service.sectionAdd.asObservable().subscribe((section: Section) => {\n this.sections.push(section);\n this.refreshView();\n }));\n }\n\n sectionPop() {\n this.subscription.add(this.service.section.asObservable().subscribe(() => {\n this.sections.pop();\n this.refreshView();\n }));\n }\n\n sectionRemove() {\n this.subscription.add(this.service.sectionId.asObservable().subscribe((sectionId: number) => {\n this.sections.splice(this.sections.findIndex((section) => {\n return section.id === sectionId;\n }), 1);\n this.refreshView();\n }));\n }\n\n refresh() {\n this.subscription.add(this.service.refreshView.asObservable().subscribe(() => {\n this.refreshView();\n }));\n }\n\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n","<div class=\"time-sch-wrapper\" [style.height]=\"maxHeight\">\n <div class=\"time-sch-header-wrapper mb-1\">\n <div class=\"time-sch-period-container\" *ngIf=\"showActionButtons\">\n <button class=\"btn\"\n *ngFor=\"let period of periods\"\n [ngClass]=\"period.classes\"\n (click)=\"changePeriod(period)\"\n [title]=\"period.tooltip? period.tooltip : ''\"\n >\n {{period.name}}\n </button>\n </div>\n\n <div class=\"time-sch-time-container\" *ngIf=\"showActionButtons\">\n <button class=\"btn\" *ngIf=\"showGoto\" (click)=\"showGotoModal = !showGotoModal\">{{text.GotoButton}}</button>\n <div class=\"goto-modal\" *ngIf=\"showGotoModal\">\n <label>\n <input type=\"date\" (change)=\"gotoDate($event.target?.value)\">\n </label>\n </div>\n\n <button class=\"btn\" *ngIf=\"showToday\" (click)=\"gotoToday()\">{{text.TodayButton}}</button>\n <button class=\"btn\" (click)=\"previousPeriod()\">{{text.PrevButton}}</button>\n <button class=\"btn\" (click)=\"nextPeriod()\">{{text.NextButton}}</button>\n </div>\n\n <h3 class=\"text-center m-0\" *ngIf=\"showHeaderTitle\">\n {{ text.HeaderTitle ?? start.locale(locale).format(headerFormat) + ' - ' + end.locale(locale).format(headerFormat)}}\n </h3>\n </div>\n\n <div class=\"time-sch-table-wrapper\">\n <table class=\"time-sch-table\">\n <tr *ngFor=\"let timeFrameHeader of header; let i = index; trackBy: trackByFn\">\n\n <td class=\"time-sch-section text-center\" *ngIf=\"i === 0\" [rowSpan]=\"periods.length\">\n {{text.SectionTitle}}\n </td>\n\n <td class=\"text-center\"\n *ngFor=\"let dateTime of timeFrameHeader.headerDetails; trackBy: trackByFn\"\n [colSpan]=\"dateTime.colspan\"\n [title]=\"dateTime.tooltip? dateTime.tooltip : ''\"\n >\n {{dateTime.name}}\n </td>\n\n </tr>\n </table>\n\n <div class=\"time-sch-content-wrap\">\n <table class=\"time-sch-table\">\n <tr *ngFor=\"let sectionItem of sectionItems; trackBy: trackByFn\"\n [style.height]=\"sectionItem.minRowHeight + 'px'\">\n <td class=\"time-sch-section text-center\" #sectionTd\n (click)=\"events.SectionClickEvent ? events.SectionClickEvent(sectionItem.section) : false\"\n (contextmenu)=\"events.SectionContextMenuEvent ? events.SectionContextMenuEvent(sectionItem.section, $event) : false\"\n [style.cursor]=\"events.SectionClickEvent ? 'pointer' : ''\"\n [title]=\"sectionItem.section.tooltip? sectionItem.section.tooltip : ''\"\n >\n {{sectionItem.section.name}}\n </td>\n\n <td *ngFor=\"let td of header[header.length - 1].headerDetails; trackBy: trackByFn\"></td>\n </tr>\n </table>\n\n <div class=\"time-sch-section-wrapper\" [style.left]=\"SectionLeftMeasure\" cdkDropListGroup>\n <div class=\"time-sch-section-container\"\n cdkDropList\n cdkDropListSortingDisabled\n [cdkDropListData]=\"sectionItem.section\"\n (cdkDropListDropped)=\"drop($event)\"\n *ngFor=\"let sectionItem of sectionItems; trackBy: trackByFn\"\n [style.height]=\"sectionItem.minRowHeight + 'px'\"\n >\n <div class=\"time-sch-item\"\n cdkDrag\n cdkDragLockAxis=\"y\"\n cdkDragBoundary=\".time-sch-section-wrapper\"\n [cdkDragData]=\"itemMeta.item\"\n [cdkDragDisabled]=\"!allowDragging\"\n *ngFor=\"let itemMeta of sectionItem.itemMetas\"\n [ngClass]=\"itemMeta.item.classes\"\n (click)=\"events.ItemClicked ? events.ItemClicked(itemMeta.item) : false\"\n (contextmenu)=\"events.ItemContextMenu ? events.ItemContextMenu(itemMeta.item, $event) : false\"\n [style.height]=\"minRowHeight + 'px'\"\n [style.top]=\"itemMeta.cssTop + 'px'\"\n [style.left]=\"itemMeta.cssLeft + '%'\"\n [style.width]=\"itemMeta.cssWidth + '%'\"\n >\n <div class=\"item-drag-placeholder\"\n *cdkDragPlaceholder\n [style.height]=\"(minRowHeight - 6) + 'px'\"\n [style.left]=\"itemMeta.cssLeft + '%'\"\n [style.width]=\"'calc('+ itemMeta.cssWidth + '% - 6px)'\"\n ></div>\n <div class=\"time-sch-item-start\" *ngIf=\"itemMeta.isStart\"></div>\n <div class=\"time-sch-item-content\"\n [title]=\"itemMeta.item.tooltip? itemMeta.item.tooltip : ''\">\n {{itemMeta.item.name}}\n </div>\n <div class=\"time-sch-item-end\" *ngIf=\"itemMeta.isEnd\"></div>\n </div>\n </div>\n\n <div class=\"time-sch-current-time\"\n *ngIf=\"showCurrentTime\"\n [title]=\"currentTimeTitle\"\n [style.visibility]=\"currentTimeVisibility\"\n [style.left]=\"currentTimeIndicatorPosition\"\n ></div>\n </div>\n\n </div>\n </div>\n</div>\n","import {NgModule} from '@angular/core';\nimport {NgxResourceTimelineComponent} from './ngx-resource-timeline.component';\nimport {CommonModule} from '@angular/common';\nimport {DragDropModule} from '@angular/cdk/drag-drop';\n\n@NgModule({\n declarations: [NgxResourceTimelineComponent],\n imports: [\n CommonModule,\n DragDropModule\n ],\n exports: [NgxResourceTimelineComponent]\n})\nexport class NgxResourceTimelineModule {\n}\n","/*\n * Public API Surface of ngx-resource-timeline\n */\n\nexport * from './lib/ngx-resource-timeline.service';\nexport * from './lib/ngx-resource-timeline.component';\nexport * from './lib/ngx-resource-timeline.module';\nexport * from './lib/ngx-resource-timeline.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.NgxResourceTimelineService"],"mappings":"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"}