@formio-tmt/angular
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.1.4.
1 lines • 62.8 kB
Source Map (JSON)
{"version":3,"file":"formio-tmt-angular-grid.mjs","sources":["../../../projects/angular-formio/grid/src/types/grid-footer-positions.ts","../../../projects/angular-formio/grid/src/GridHeaderComponent.ts","../../../projects/angular-formio/grid/src/types/grid-header.ts","../../../projects/angular-formio/grid/src/form/FormGridHeader.component.ts","../../../projects/angular-formio/grid/src/form/FormGridHeader.component.html","../../../projects/angular-formio/grid/src/grid.service.ts","../../../projects/angular-formio/grid/src/GridBodyComponent.ts","../../../projects/angular-formio/grid/src/form/time-since.pipe.ts","../../../projects/angular-formio/grid/src/form/FormGridBody.component.ts","../../../projects/angular-formio/grid/src/form/FormGridBody.component.html","../../../projects/angular-formio/grid/src/GridFooterComponent.ts","../../../projects/angular-formio/grid/src/form/FormGridFooter.component.ts","../../../projects/angular-formio/grid/src/form/FormGridFooter.component.html","../../../projects/angular-formio/grid/src/form/index.ts","../../../projects/angular-formio/grid/src/submission/SubmissionGridHeader.component.ts","../../../projects/angular-formio/grid/src/submission/SubmissionGridHeader.component.html","../../../projects/angular-formio/grid/src/submission/SubmissionGridBody.component.ts","../../../projects/angular-formio/grid/src/submission/SubmissionGridBody.component.html","../../../projects/angular-formio/grid/src/submission/SubmissionGridFooter.component.ts","../../../projects/angular-formio/grid/src/submission/SubmissionGridFooter.component.html","../../../projects/angular-formio/grid/src/submission/index.ts","../../../projects/angular-formio/grid/src/grid.component.ts","../../../projects/angular-formio/grid/src/grid.component.html","../../../projects/angular-formio/grid/src/grid.module.ts","../../../projects/angular-formio/grid/src/formio-tmt-angular-grid.ts"],"sourcesContent":["export enum GridFooterPositions {\r\n bottom,\r\n top,\r\n both\r\n}\r\n","import { Output, EventEmitter, ViewChild, TemplateRef, Input, Component } from '@angular/core';\r\nimport {FormioPromiseService} from '@formio-tmt/angular';\r\nimport {GridHeader} from './types/grid-header';\r\n\r\n@Component({\r\n template: ''\r\n})\r\nexport class GridHeaderComponent {\r\n @Input() actionAllowed: any;\r\n @Output() sort: EventEmitter<GridHeader>;\r\n @ViewChild(TemplateRef, {static: true}) template: TemplateRef<any>;\r\n public headers: Array<GridHeader>;\r\n constructor() {\r\n this.headers = [];\r\n this.sort = new EventEmitter();\r\n }\r\n\r\n get numHeaders() {\r\n return this.headers.length;\r\n }\r\n\r\n load(formio: FormioPromiseService, query?: any, columns?: Array<any>): Promise<any> {\r\n return Promise.resolve([]);\r\n }\r\n}\r\n","import {ComponentInstance} from '@formio-tmt/angular';\r\n\r\nexport interface GridHeader {\r\n component?: ComponentInstance;\r\n key: string;\r\n sort?: SortType;\r\n label: string;\r\n renderCell?(cellValue: any, component?: ComponentInstance): string;\r\n}\r\n\r\nexport enum SortType {\r\n ASC = 'asc',\r\n DESC = 'desc'\r\n}\r\n","import {Component} from '@angular/core';\r\nimport {GridHeaderComponent} from '../GridHeaderComponent';\r\nimport {GridHeader, SortType} from '../types/grid-header';\r\n\r\n@Component({\r\n selector: 'form-grid-header',\r\n templateUrl: './FormGridHeader.component.html'\r\n})\r\nexport class FormGridHeaderComponent extends GridHeaderComponent {\r\n public header: GridHeader;\r\n load(formio?: any) {\r\n this.header = {\r\n label: 'Title',\r\n key: 'title',\r\n sort: SortType.ASC\r\n };\r\n this.headers = [this.header];\r\n return Promise.resolve(this.headers);\r\n }\r\n\r\n get numHeaders() {\r\n return 2;\r\n }\r\n}\r\n","<ng-template>\r\n <thead>\r\n <tr>\r\n <th>\r\n <div class=\"row\">\r\n <div class=\"col-sm-9\">\r\n <a (click)=\"sort.emit(header)\" style=\"cursor: pointer\">\r\n {{ header.label }} <span [ngClass]=\"{'fa-caret-up bi-caret-up': (header.sort === 'asc'), 'fa-caret-down bi-caret-down': (header.sort === 'desc')}\" class=\"fa bi\" *ngIf=\"header.sort\"></span>\r\n </a>\r\n </div>\r\n <div class=\"col-sm-3 d-flex justify-content-end\">\r\n Operations\r\n </div>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n</ng-template>\r\n","import { Injectable } from '@angular/core';\r\nimport _intersection from 'lodash/intersection';\r\n\r\n@Injectable()\r\nexport class GridService {\r\n public rows: Array<any>;\r\n constructor() {}\r\n\r\n setRows(rows) {\r\n this.rows = rows;\r\n }\r\n\r\n getFormsPerPage() {\r\n return this.rows?.length;\r\n }\r\n}\r\n","import { Input, Output, EventEmitter, ViewChild, TemplateRef, Component } from '@angular/core';\r\nimport { each, clone } from 'lodash';\r\nimport { GridHeaderComponent } from './GridHeaderComponent';\r\nimport { GridService } from './grid.service';\r\nimport {FormioPromiseService} from '@formio-tmt/angular';\r\n\r\n@Component({\r\n template: ''\r\n})\r\nexport class GridBodyComponent {\r\n @Input() header: GridHeaderComponent;\r\n @Input() actionAllowed: any;\r\n @Output() rowSelect: EventEmitter<any>;\r\n @Output() rowAction: EventEmitter<any>;\r\n @ViewChild(TemplateRef, {static: true}) template: TemplateRef<any>;\r\n public rows: Array<any>;\r\n public loading: Boolean;\r\n public firstItem = 0;\r\n public lastItem = 0;\r\n public skip = 0;\r\n public limit = 0;\r\n public total = 0;\r\n constructor(public service: GridService) {\r\n this.rowSelect = new EventEmitter();\r\n this.rowAction = new EventEmitter();\r\n this.loading = true;\r\n }\r\n\r\n load(formio: FormioPromiseService, query?: any): Promise<any> {\r\n return formio.loadForm(query);\r\n }\r\n\r\n onRowSelect(event, row) {\r\n event.preventDefault();\r\n this.rowSelect.emit(row);\r\n }\r\n\r\n onRowAction(event, row, action) {\r\n event.preventDefault();\r\n this.rowAction.emit({ row, action });\r\n }\r\n\r\n /**\r\n * Set the rows for this Grid body.\r\n *\r\n * @param query\r\n * @param items\r\n * @return any\r\n */\r\n setRows(query: any, items: any) {\r\n this.rows = [];\r\n\r\n if (typeof items !== 'object') {\r\n this.firstItem = 0;\r\n this.lastItem = 0;\r\n this.total = 0;\r\n this.skip = 0;\r\n this.loading = false;\r\n this.service.setRows(this.rows);\r\n\r\n return this.rows;\r\n }\r\n\r\n this.firstItem = query.skip + 1;\r\n this.lastItem = this.firstItem + items.length - 1;\r\n if (this.lastItem === 0) {\r\n this.firstItem = 0;\r\n }\r\n this.total = items.serverCount;\r\n this.limit = query.limit;\r\n this.skip = Math.floor(items.skip / query.limit) + 1;\r\n this.loading = false;\r\n each(items, (item: any) => {\r\n this.rows.push(clone(item));\r\n });\r\n this.service.setRows(this.rows);\r\n\r\n return this.rows;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'timeSince'\r\n})\r\nexport class TimeSince implements PipeTransform {\r\n transform(date: Date): string {\r\n const elapsed = (new Date().getTime() - new Date(date).getTime()) / 1000;\r\n let interval;\r\n if (interval >= 1) {\r\n return interval + ' year' + (interval > 1 ? 's' : '');\r\n }\r\n interval = Math.floor(elapsed / 2592000);\r\n if (interval >= 1){\r\n return interval + ' month' + (interval > 1 ? 's' : '');\r\n }\r\n interval = Math.floor(elapsed / 86400);\r\n if (interval >= 1) {\r\n return interval + ' day' + (interval > 1 ? 's' : '');\r\n }\r\n interval = Math.floor(elapsed / 3600);\r\n if (interval >= 1) {\r\n return interval + ' hour' + (interval > 1 ? 's' : '');\r\n }\r\n interval = Math.floor(elapsed / 60);\r\n if (interval >= 1) {\r\n return interval + ' minute' + (interval > 1 ? 's' : '');\r\n }\r\n return Math.floor(elapsed) + ' second' + (elapsed > 1 ? 's' : '');\r\n }\r\n}","import { Component, ElementRef, OnDestroy, ViewChild, ViewChildren } from '@angular/core';\r\nimport { GridBodyComponent } from '../GridBodyComponent';\r\nimport { FormioPromiseService } from '@formio-tmt/angular';\r\nimport { Tooltip } from 'bootstrap';\r\n@Component({\r\n selector: 'form-grid-body',\r\n styleUrls: ['./FormGridBody.component.scss'],\r\n templateUrl: './FormGridBody.component.html'\r\n})\r\nexport class FormGridBodyComponent extends GridBodyComponent implements OnDestroy {\r\n @ViewChildren('create') createBtns: ElementRef[];\r\n @ViewChildren('view') viewBtns: ElementRef[];\r\n @ViewChildren('edit') editBtns: ElementRef[];\r\n @ViewChildren('permissions') permissionsBtns: ElementRef[];\r\n @ViewChildren('delete') deleteBtns: ElementRef[];\r\n public tooltips: Array<Tooltip> = [];\r\n\r\n load(formio: FormioPromiseService, query?: any) {\r\n query = query || {};\r\n return formio.loadForms({ params: query })\r\n .then((forms: any) => this.setRows(query, forms))\r\n .then(() => this.attachTooltips());\r\n }\r\n\r\n attachTooltips() {\r\n this.createBtns.forEach((el: ElementRef) => {\r\n this.tooltips.push(new Tooltip(el.nativeElement, {title: 'Create'}));\r\n });\r\n this.editBtns.forEach((el: ElementRef) => {\r\n this.tooltips.push(new Tooltip(el.nativeElement, {title: 'Edit'}));\r\n });\r\n this.viewBtns.forEach((el: ElementRef) => {\r\n this.tooltips.push(new Tooltip(el.nativeElement, {title: 'View'}));\r\n })\r\n this.permissionsBtns.forEach((el: ElementRef) => {\r\n this.tooltips.push(new Tooltip(el.nativeElement, {title: 'Permissions'}));\r\n });\r\n this.deleteBtns.forEach((el: ElementRef) => {\r\n this.tooltips.push(new Tooltip(el.nativeElement, {title: 'Delete'}));\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.tooltips.forEach((tootip: Tooltip) => tootip.dispose());\r\n }\r\n}\r\n","<ng-template>\r\n <tbody *ngIf=\"rows\">\r\n <tr *ngFor=\"let form of rows\">\r\n <td>\r\n <div class=\"row\">\r\n <div class=\"col-sm-9\">\r\n <a routerLink=\"{{form._id}}/view\" (click)=\"onRowSelect($event, form)\" class=\"text-decoration-none\"><h5>{{ form.title }}</h5></a>\r\n <div class=\"form-updated small text-muted\">\r\n Updated {{ form.modified | timeSince }} ago\r\n </div>\r\n </div>\r\n <div class=\"col-sm-3 d-flex justify-content-end align-items-center\">\r\n <button #create *ngIf=\"actionAllowed('formView')\" class=\"btn btn-outline-secondary btn-sm form-btn form-btn-use\" (click)=\"onRowAction($event, form, 'view')\"><span class=\"fa fa-pencil bi bi-pencil\"></span></button> \r\n <button #view *ngIf=\"actionAllowed('formSubmission')\" class=\"btn btn-outline-secondary btn-sm form-btn\" (click)=\"onRowAction($event, form, 'submission')\"><span class=\"fa fa-list-alt bi bi-table\"></span></button> \r\n <button #edit *ngIf=\"actionAllowed('formEdit')\" class=\"btn btn-outline-secondary btn-sm form-btn\" (click)=\"onRowAction($event, form, 'edit')\"><span class=\"fa fa-edit bi bi-pencil-square\"></span></button> \r\n <button #permissions *ngIf=\"actionAllowed('formPermission')\" class=\"btn btn-outline-secondary btn-sm form-btn\" (click)=\"onRowAction($event, form, 'permissions')\"><span class=\"fa fa-lock bi bi-database-lock\"></span></button> \r\n <button #delete *ngIf=\"actionAllowed('formDelete')\" class=\"btn btn-secondary btn-sm form-btn form-btn-delete\" (click)=\"onRowAction($event, form, 'delete')\" title=\"Delete form\"><span class=\"fa fa-trash bi bi-trash\"></span></button>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</ng-template>\r\n","import { GridFooterPositions } from './types/grid-footer-positions';\r\nimport { Input, Output, ViewChild, TemplateRef, EventEmitter, Component } from '@angular/core';\r\nimport { GridHeaderComponent } from './GridHeaderComponent';\r\nimport { GridBodyComponent } from './GridBodyComponent';\r\n\r\n@Component({\r\n template: ''\r\n})\r\nexport class GridFooterComponent {\r\n @Input() header: GridHeaderComponent;\r\n @Input() body: GridBodyComponent;\r\n @Input() createText: String;\r\n @Input() size: number;\r\n @Input() actionAllowed: any;\r\n @Output() pageChanged: EventEmitter<any>;\r\n @Output() createItem: EventEmitter<any>;\r\n @ViewChild(TemplateRef, {static: true}) template: TemplateRef<any>;\r\n\r\n public footerPositions = GridFooterPositions;\r\n\r\n constructor() {\r\n this.pageChanged = new EventEmitter();\r\n this.createItem = new EventEmitter();\r\n }\r\n}\r\n","import {Component, ViewEncapsulation, OnInit } from '@angular/core';\r\nimport { GridFooterComponent } from '../GridFooterComponent';\r\n\r\n@Component({\r\n templateUrl: './FormGridFooter.component.html',\r\n styleUrls: ['../grid.footer.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class FormGridFooterComponent extends GridFooterComponent implements OnInit {\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n if (!this.createText) {\r\n this.createText = 'Create Form';\r\n }\r\n if (!this.size) {\r\n this.size = 7;\r\n }\r\n }\r\n}\r\n","<ng-template #footer let-position=\"position\" let-label=\"label\">\r\n <thead class=\"formio-grid-footer\" *ngIf=\"position === footerPositions.top\">\r\n <ng-container [ngTemplateOutlet]=\"defaultFooterTemplate\" [ngTemplateOutletContext]=\"{ label: label }\"></ng-container>\r\n </thead>\r\n <tfoot class=\"formio-grid-footer\" *ngIf=\"position === footerPositions.bottom\">\r\n <ng-container [ngTemplateOutlet]=\"defaultFooterTemplate\" [ngTemplateOutletContext]=\"{ label: label }\"></ng-container>\r\n </tfoot>\r\n</ng-template>\r\n\r\n<ng-template let-label=\"label\" #defaultFooterTemplate>\r\n <tr>\r\n <td *ngIf=\"header\" [colSpan]=\"header.numHeaders\">\r\n <button *ngIf=\"actionAllowed('formCreate')\" class=\"btn btn-primary form-btn-use float-start\" (click)=\"createItem.emit('form')\"><em class=\"fa fa-plus bi bi-plus-lg\"></em> {{ createText }}</button>\r\n <span class=\"float-end item-counter\"><span class=\"page-num\">{{ body.firstItem }} - {{ body.lastItem }}</span> / {{ body.total }} total</span>\r\n <span [attr.aria-label]=\"label\" role=\"navigation\">\r\n <pagination [totalItems]=\"body.total\" [itemsPerPage]=\"body.limit\" [(ngModel)]=\"body.skip\" (pageChanged)=\"pageChanged.emit($event)\" [maxSize]=\"size\" class=\"justify-content-center pagination-sm\">\r\n </pagination>\r\n </span>\r\n </td>\r\n </tr>\r\n</ng-template>\r\n","import { FormGridHeaderComponent } from './FormGridHeader.component';\r\nimport { FormGridBodyComponent } from './FormGridBody.component';\r\nimport { FormGridFooterComponent } from './FormGridFooter.component';\r\nexport default {\r\n header: FormGridHeaderComponent,\r\n body: FormGridBodyComponent,\r\n footer: FormGridFooterComponent\r\n};\r\n","import {Component, EventEmitter} from '@angular/core';\r\nimport {Utils, Components, ExtendedComponentSchema} from '@formio-tmt/js';\r\nimport {GridHeaderComponent} from '../GridHeaderComponent';\r\nimport {FormioPromiseService} from '@formio-tmt/angular';\r\nimport {ComponentInstance, FormioForm} from '@formio-tmt/angular';\r\nimport {GridColumn} from '../types/grid-column';\r\nimport {GridHeader, SortType} from '../types/grid-header';\r\n\r\n@Component({\r\n templateUrl: './SubmissionGridHeader.component.html'\r\n})\r\nexport class SubmissionGridHeaderComponent extends GridHeaderComponent {\r\n\r\n // Map structure where the key is the path and the value is the component\r\n formComponents: Map<string, ExtendedComponentSchema>;\r\n\r\n load(formio: FormioPromiseService, query?: any, columns?: Array<GridColumn>) {\r\n query = query || {};\r\n return formio.loadForm({params: query}).then((form: FormioForm) => {\r\n this.headers = [];\r\n this.formComponents = new Map<string, ExtendedComponentSchema>();\r\n this.setComponents(form.components);\r\n columns ? columns.forEach(column => {\r\n this.setHeader(this.getHeaderForColumn(column, this.formComponents.get(column.path)));\r\n }) : this.setComponentsHeaders(this.formComponents);\r\n\r\n return this.headers;\r\n });\r\n }\r\n\r\n setHeader(header: GridHeader) {\r\n this.headers.push(header);\r\n }\r\n\r\n getHeaderForColumn(column: GridColumn, component?: ExtendedComponentSchema, sort?: SortType) {\r\n return {\r\n label: column.label,\r\n key: column.path,\r\n sort: sort,\r\n component: component ? Components.create(component, null, null, true) as ComponentInstance : undefined,\r\n renderCell: column ? column.renderCell : undefined\r\n };\r\n }\r\n\r\n getHeaderForComponent(component: ExtendedComponentSchema, path: string, sort?: SortType) {\r\n return {\r\n label: component.label,\r\n key: path,\r\n sort: sort,\r\n component: component ? Components.create(component, null, null, true) as ComponentInstance : undefined,\r\n };\r\n }\r\n // Set headers from components in case if columns are not provided\r\n setComponentsHeaders(components: Map<string, ExtendedComponentSchema>, sort?: SortType) {\r\n components.forEach((component, path) => {\r\n if (\r\n component.input &&\r\n (!component.hasOwnProperty('tableView') || component.tableView)\r\n ) {\r\n this.setHeader(this.getHeaderForComponent(component, path, sort));\r\n }\r\n });\r\n }\r\n\r\n // Map components\r\n setComponents(components) {\r\n Utils.eachComponent(components, (component: ExtendedComponentSchema, newPath: string) => {\r\n this.formComponents.set(`data.${newPath}`, component);\r\n });\r\n }\r\n}\r\n\r\n","<ng-template>\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let header of headers\">\r\n <a (click)=\"sort.emit(header)\">\r\n {{ header.label }} <span [ngClass]=\"{'fa-caret-up bi-caret-up': (header.sort === 'asc'), 'fa-caret-down bi-caret-down': (header.sort === 'desc')}\" class=\"fa bi\" *ngIf=\"header.sort\"></span>\r\n </a>\r\n </th>\r\n </tr>\r\n </thead>\r\n</ng-template>\r\n","import { Component } from '@angular/core';\r\nimport { each, get } from 'lodash';\r\nimport { GridBodyComponent } from '../GridBodyComponent';\r\nimport {FormioPromiseService} from '@formio-tmt/angular';\r\nimport { GridHeader } from '../types/grid-header';\r\nimport {FormioSubmission} from '@formio-tmt/angular';\r\n@Component({\r\n templateUrl: './SubmissionGridBody.component.html'\r\n})\r\nexport class SubmissionGridBodyComponent extends GridBodyComponent {\r\n load(formio: FormioPromiseService, query?: any) {\r\n query = query || {};\r\n return formio.loadSubmissions({ params: query })\r\n .then((submissions: any) => this.setRows(query, submissions));\r\n }\r\n\r\n /**\r\n * Render the cell data.\r\n *\r\n * @param submission\r\n * @param header\r\n * @return any\r\n */\r\n view(submission: FormioSubmission, header: GridHeader): string {\r\n const cellValue: any = get(submission, header.key);\r\n if (header.renderCell) {\r\n return header.renderCell(cellValue, header.component);\r\n } else {\r\n if (header.component) {\r\n if (header.component.getView) {\r\n return header.component.getView(cellValue);\r\n }\r\n return header.component.asString(cellValue);\r\n } else {\r\n return cellValue.toString();\r\n }\r\n }\r\n }\r\n}\r\n","<ng-template>\r\n <tbody>\r\n <tr *ngFor=\"let row of rows\" (click)=\"onRowSelect($event, row)\">\r\n <td *ngFor=\"let rowHeader of header.headers\" [innerHTML]=\"view(row, rowHeader)\"></td>\r\n </tr>\r\n </tbody>\r\n</ng-template>\r\n","import {Component, OnInit, ViewEncapsulation} from '@angular/core';\r\nimport { GridFooterComponent } from '../GridFooterComponent';\r\n\r\n@Component({\r\n templateUrl: './SubmissionGridFooter.component.html',\r\n styleUrls: ['../grid.footer.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class SubmissionGridFooterComponent extends GridFooterComponent implements OnInit {\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n if (!this.size) {\r\n this.size = 7;\r\n }\r\n }\r\n}\r\n","<ng-template #footer let-position=\"position\">\r\n <thead class=\"formio-grid-footer\" *ngIf=\"position === footerPositions.top\">\r\n <ng-container [ngTemplateOutlet]=\"defaultFooterTemplate\"></ng-container>\r\n </thead>\r\n <tfoot class=\"formio-grid-footer\" *ngIf=\"position === footerPositions.bottom\">\r\n <ng-container [ngTemplateOutlet]=\"defaultFooterTemplate\"></ng-container>\r\n </tfoot>\r\n</ng-template>\r\n\r\n<ng-template #defaultFooterTemplate>\r\n <tr>\r\n <td *ngIf=\"header\" [colSpan]=\"header.numHeaders\">\r\n <button *ngIf=\"actionAllowed('submissionCreate') && createText\" class=\"btn btn-primary float-start\" (click)=\"createItem.emit('form')\"><em class=\"fa fa-plus bi bi-plus\"></em> {{ createText }}</button>\r\n <span class=\"float-end item-counter\"><span class=\"page-num\">{{ body.firstItem }} - {{ body.lastItem }}</span> / {{ body.total }} total</span>\r\n <pagination [totalItems]=\"body.total\" [itemsPerPage]=\"body.limit\" [(ngModel)]=\"body.skip\" (pageChanged)=\"pageChanged.emit($event)\" [maxSize]=\"size\" class=\"justify-content-center pagination-sm\"></pagination>\r\n </td>\r\n </tr>\r\n</ng-template>\r\n","import { SubmissionGridHeaderComponent } from './SubmissionGridHeader.component';\r\nimport { SubmissionGridBodyComponent } from './SubmissionGridBody.component';\r\nimport { SubmissionGridFooterComponent } from './SubmissionGridFooter.component';\r\nexport default {\r\n header: SubmissionGridHeaderComponent,\r\n body: SubmissionGridBodyComponent,\r\n footer: SubmissionGridFooterComponent\r\n};\r\n","import { GridFooterPositions } from './types/grid-footer-positions';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n ComponentFactoryResolver,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n ViewContainerRef\r\n} from '@angular/core';\r\nimport {FormioAlerts} from '@formio-tmt/angular';\r\nimport {each} from 'lodash';\r\nimport {Formio} from '@formio-tmt/js';\r\nimport {GridHeaderComponent} from './GridHeaderComponent';\r\nimport {GridBodyComponent} from './GridBodyComponent';\r\nimport {GridFooterComponent} from './GridFooterComponent';\r\nimport FormComponents from './form/index';\r\nimport SubmissionComponents from './submission/index';\r\nimport {FormioPromiseService} from '@formio-tmt/angular';\r\nimport {GridColumn} from './types/grid-column';\r\nimport {GridHeader, SortType} from './types/grid-header';\r\n\r\n@Component({\r\n selector: 'formio-grid',\r\n styleUrls: ['./grid.component.scss'],\r\n templateUrl: './grid.component.html'\r\n})\r\nexport class FormioGridComponent implements OnChanges, OnInit, AfterViewInit {\r\n @Input() footerPosition = GridFooterPositions.bottom;\r\n @Input() src?: string;\r\n @Input() items?: Array<any>;\r\n @Input() onForm?: Promise<any>;\r\n @Input() query?: any;\r\n @Input() refresh?: EventEmitter<object>;\r\n @Input() columns?: Array<GridColumn>;\r\n @Input() gridType?: string;\r\n @Input() size?: number;\r\n @Input() components?: any;\r\n @Input() formio?: FormioPromiseService;\r\n @Input() label?: string;\r\n @Input() createText: String;\r\n @Input() isActionAllowed: any;\r\n @Output() select: EventEmitter<object>;\r\n @Output() rowSelect: EventEmitter<object>;\r\n @Output() rowAction: EventEmitter<object>;\r\n @Output() createItem: EventEmitter<any>;\r\n @Output() error: EventEmitter<any>;\r\n @ViewChild('headerTemplate', {read: ViewContainerRef, static: true}) headerElement: ViewContainerRef;\r\n @ViewChild('bodyTemplate', {read: ViewContainerRef, static: true}) bodyElement: ViewContainerRef;\r\n @ViewChild('footerTemplate', {read: ViewContainerRef, static: true}) footerElement: ViewContainerRef;\r\n\r\n public page = 0;\r\n public isLoading = false;\r\n public initialized = false;\r\n public header: GridHeaderComponent;\r\n public body: GridBodyComponent;\r\n public footer: GridFooterComponent;\r\n public footerPositions = GridFooterPositions;\r\n\r\n constructor(\r\n public alerts: FormioAlerts,\r\n private resolver: ComponentFactoryResolver,\r\n private ref: ChangeDetectorRef\r\n ) {\r\n this.select = this.rowSelect = new EventEmitter();\r\n this.rowAction = new EventEmitter();\r\n this.createItem = new EventEmitter();\r\n this.error = new EventEmitter();\r\n this.isLoading = true;\r\n }\r\n\r\n createComponent(property, component) {\r\n const factory = this.resolver.resolveComponentFactory(component);\r\n const componentRef = property.createComponent(factory);\r\n return componentRef.instance;\r\n }\r\n\r\n loadGrid(src?: string) {\r\n // If no source is provided, then skip.\r\n if (!src && !this.formio) {\r\n return;\r\n }\r\n // Do not double load.\r\n if (this.formio && this.src && (src === this.src)) {\r\n return;\r\n }\r\n\r\n if (src) {\r\n this.src = src;\r\n this.formio = new FormioPromiseService(this.src, { formOnly: true });\r\n }\r\n\r\n // Load the header.\r\n this.header.load(this.formio, {}, this.columns)\r\n .then(() => this.setPage(0))\r\n .catch(error => this.onError(error));\r\n }\r\n\r\n ngOnInit() {\r\n // Create our components.\r\n const comps = this.components || ((this.gridType === 'form') ? FormComponents : SubmissionComponents);\r\n\r\n this.header = this.createComponent(this.headerElement, comps.header);\r\n this.header.actionAllowed = this.actionAllowed.bind(this);\r\n this.header.sort.subscribe(header => this.sortColumn(header));\r\n\r\n this.body = this.createComponent(this.bodyElement, comps.body);\r\n this.body.header = this.header;\r\n this.body.actionAllowed = this.actionAllowed.bind(this);\r\n this.body.rowSelect.subscribe(row => this.rowSelect.emit(row));\r\n this.body.rowAction.subscribe(action => this.rowAction.emit(action));\r\n\r\n this.footer = this.createComponent(this.footerElement, comps.footer);\r\n this.footer.header = this.header;\r\n this.footer.body = this.body;\r\n this.footer.actionAllowed = this.actionAllowed.bind(this);\r\n this.footer.createText = this.createText;\r\n this.footer.size = this.size;\r\n this.footer.pageChanged.subscribe(page => this.pageChanged(page));\r\n this.footer.createItem.subscribe(item => this.createItem.emit(item));\r\n }\r\n\r\n ngOnChanges(changes: any) {\r\n if (this.initialized) {\r\n if (\r\n (changes.src && changes.src.currentValue) ||\r\n (changes.formio && changes.formio.currentValue)\r\n ) {\r\n this.loadGrid(changes.src.currentValue);\r\n }\r\n\r\n if (changes.items && changes.items.currentValue) {\r\n this.refreshGrid();\r\n }\r\n }\r\n\r\n if (this.footer &&\r\n (changes.createText && changes.createText.currentValue)) {\r\n this.footer.createText = changes.createText.currentValue;\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.alerts.setAlerts([]);\r\n this.query = this.query || {};\r\n if (this.refresh) {\r\n this.refresh.subscribe((query: object) => this.refreshGrid(query));\r\n }\r\n this.loadGrid(this.src);\r\n this.initialized = true;\r\n this.ref.detectChanges();\r\n }\r\n\r\n actionAllowed(action) {\r\n if (this.isActionAllowed) {\r\n return this.isActionAllowed(action);\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n onError(error: any) {\r\n this.isLoading = false;\r\n this.error.emit(error);\r\n if (typeof error === 'string' || error.message) {\r\n this.alerts.setAlert({\r\n type: 'danger',\r\n message: error.message || error\r\n });\r\n }\r\n }\r\n\r\n refreshGrid(query?: any) {\r\n this.alerts.setAlerts([]);\r\n this.query = query || this.query;\r\n if (!this.query.hasOwnProperty('limit')) {\r\n this.query.limit = 10;\r\n }\r\n if (!this.query.hasOwnProperty('skip')) {\r\n this.query.skip = 0;\r\n }\r\n this.isLoading = true;\r\n this.ref.detectChanges();\r\n Formio.cache = {};\r\n let loader = null;\r\n if (this.items) {\r\n loader = Promise.resolve(this.body.setRows(this.query, this.items));\r\n } else {\r\n loader = this.body.load(this.formio, this.query);\r\n }\r\n\r\n return loader.then(info => {\r\n this.isLoading = false;\r\n this.initialized = true;\r\n this.ref.detectChanges();\r\n }).catch(error => this.onError(error));\r\n }\r\n\r\n setPage(num = -1) {\r\n this.page = num !== -1 ? num : this.page;\r\n if (!this.query.hasOwnProperty('limit')) {\r\n this.query.limit = 10;\r\n }\r\n if (!this.query.hasOwnProperty('skip')) {\r\n this.query.skip = 0;\r\n }\r\n this.query.skip = this.page * this.query.limit;\r\n this.refreshGrid();\r\n }\r\n\r\n sortColumn(header: GridHeader) {\r\n // Reset all other column sorts.\r\n each(this.header.headers, (col: any) => {\r\n if (col.key !== header.key) {\r\n col.sort = '';\r\n }\r\n });\r\n switch (header.sort) {\r\n case 'asc':\r\n header.sort = SortType.DESC;\r\n this.query.sort = '-' + header.key;\r\n break;\r\n case 'desc':\r\n header.sort = undefined;\r\n delete this.query.sort;\r\n break;\r\n case undefined:\r\n header.sort = SortType.ASC;\r\n this.query.sort = header.key;\r\n break;\r\n }\r\n this.refreshGrid();\r\n }\r\n\r\n pageChanged(page: any) {\r\n this.setPage(page.page - 1);\r\n }\r\n}\r\n","<ng-template #headerTemplate></ng-template>\r\n<ng-template #bodyTemplate></ng-template>\r\n<ng-template #footerTemplate></ng-template>\r\n<div class=\"formio-grid\">\r\n <formio-alerts [alerts]=\"alerts\"></formio-alerts>\r\n <table class=\"table table-bordered table-striped table-hover\">\r\n <ng-container *ngIf=\"initialized && [footerPositions.top, footerPositions.both].indexOf(footerPosition) !== -1\"\r\n [ngTemplateOutlet]=\"footer.template\" [ngTemplateOutletContext]=\"{ position: footerPositions.top, label: label }\">\r\n </ng-container>\r\n <ng-container *ngIf=\"initialized\"\r\n [ngTemplateOutlet]=\"header.template\"></ng-container>\r\n <formio-loader [isLoading]=\"isLoading\"></formio-loader>\r\n <ng-container *ngIf=\"initialized\" [ngTemplateOutlet]=\"body.template\"></ng-container>\r\n <ng-container *ngIf=\"initialized && [footerPositions.bottom, footerPositions.both].indexOf(footerPosition) !== -1\"\r\n [ngTemplateOutlet]=\"footer.template\" [ngTemplateOutletContext]=\"{ position: footerPositions.bottom, label: label }\">\r\n </ng-container>\r\n </table>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { RouterModule } from '@angular/router';\r\nimport { FormioModule } from '@formio-tmt/angular';\r\nimport { FormioAlerts } from '@formio-tmt/angular';\r\nimport { FormioGridComponent } from './grid.component';\r\nimport { PaginationModule } from 'ngx-bootstrap/pagination';\r\nimport { FormGridHeaderComponent } from './form/FormGridHeader.component';\r\nimport { FormGridBodyComponent } from './form/FormGridBody.component';\r\nimport { FormGridFooterComponent } from './form/FormGridFooter.component';\r\nimport { SubmissionGridHeaderComponent } from './submission/SubmissionGridHeader.component';\r\nimport { SubmissionGridBodyComponent } from './submission/SubmissionGridBody.component';\r\nimport { SubmissionGridFooterComponent } from './submission/SubmissionGridFooter.component';\r\nimport { GridHeaderComponent } from './GridHeaderComponent';\r\nimport { GridBodyComponent } from './GridBodyComponent';\r\nimport { GridFooterComponent } from './GridFooterComponent';\r\nimport { GridService } from './grid.service';\r\nimport { TimeSince } from './form/time-since.pipe'\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n FormioModule,\r\n RouterModule,\r\n PaginationModule.forRoot()\r\n ],\r\n declarations: [\r\n FormioGridComponent,\r\n FormGridHeaderComponent,\r\n FormGridBodyComponent,\r\n FormGridFooterComponent,\r\n SubmissionGridHeaderComponent,\r\n SubmissionGridBodyComponent,\r\n SubmissionGridFooterComponent,\r\n GridHeaderComponent,\r\n GridBodyComponent,\r\n GridFooterComponent,\r\n TimeSince\r\n ],\r\n exports: [\r\n FormioGridComponent\r\n ],\r\n providers: [\r\n FormioAlerts,\r\n GridService\r\n ]\r\n})\r\nexport class FormioGrid {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.GridService","i3.TimeSince","i2","i1"],"mappings":"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