{"version":3,"file":"maqta-formio-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/public_api.ts","../../../projects/angular-formio/grid/src/maqta-formio-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';\nimport {FormioPromiseService} from '@maqta/formio-angular';\nimport {GridHeader} from './types/grid-header';\n\n@Component({\n  template: ''\n})\nexport class GridHeaderComponent {\n  @Input() actionAllowed: any;\n  @Output() sort: EventEmitter<GridHeader>;\n  @ViewChild(TemplateRef, {static: true}) template: TemplateRef<any>;\n  public headers: Array<GridHeader>;\n  constructor() {\n    this.headers = [];\n    this.sort = new EventEmitter();\n  }\n\n  get numHeaders() {\n    return this.headers.length;\n  }\n\n  load(formio: FormioPromiseService, query?: any, columns?: Array<any>): Promise<any> {\n    return Promise.resolve([]);\n  }\n}\n","import {ComponentInstance} from '@maqta/formio-angular';\n\nexport interface GridHeader {\n  component?: ComponentInstance;\n  key: string;\n  sort?: SortType;\n  label: string;\n  renderCell?(cellValue: any, component?: ComponentInstance): string;\n}\n\nexport enum SortType {\n  ASC = 'asc',\n  DESC = 'desc'\n}\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-8\">\r\n            <a (click)=\"sort.emit(header)\">\r\n              {{ header.label }}&nbsp;<span [ngClass]=\"{'glyphicon-triangle-top fa-caret-up': (header.sort === 'asc'), 'glyphicon-triangle-bottom fa-caret-down': (header.sort === 'desc')}\" class=\"glyphicon fa\" *ngIf=\"header.sort\"></span>\r\n            </a>\r\n          </div>\r\n          <div class=\"col-sm-4\">\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';\nimport { each, clone } from 'lodash';\nimport { GridHeaderComponent } from './GridHeaderComponent';\nimport { GridService } from './grid.service';\nimport {FormioPromiseService} from '@maqta/formio-angular';\n\n@Component({\n  template: ''\n})\nexport class GridBodyComponent {\n  @Input() header: GridHeaderComponent;\n  @Input() actionAllowed: any;\n  @Output() rowSelect: EventEmitter<any>;\n  @Output() rowAction: EventEmitter<any>;\n  @ViewChild(TemplateRef, {static: true}) template: TemplateRef<any>;\n  public rows: Array<any>;\n  public loading: Boolean;\n  public firstItem = 0;\n  public lastItem = 0;\n  public skip = 0;\n  public limit = 0;\n  public total = 0;\n  constructor(public service: GridService) {\n    this.rowSelect = new EventEmitter();\n    this.rowAction = new EventEmitter();\n    this.loading = true;\n  }\n\n  load(formio: FormioPromiseService, query?: any): Promise<any> {\n    return formio.loadForm(query);\n  }\n\n  onRowSelect(event, row) {\n    event.preventDefault();\n    this.rowSelect.emit(row);\n  }\n\n  onRowAction(event, row, action) {\n    event.preventDefault();\n    this.rowAction.emit({ row, action });\n  }\n\n  /**\n   * Set the rows for this Grid body.\n   *\n   * @param query\n   * @param items\n   * @return any\n   */\n  setRows(query: any, items: any) {\n    this.rows = [];\n\n    if (typeof items !== 'object') {\n      this.firstItem = 0;\n      this.lastItem = 0;\n      this.total = 0;\n      this.skip = 0;\n      this.loading = false;\n      this.service.setRows(this.rows);\n\n      return this.rows;\n    }\n\n    this.firstItem = query.skip + 1;\n    this.lastItem = this.firstItem + items.length - 1;\n    if (this.lastItem === 0) {\n      this.firstItem = 0;\n    }\n    this.total = items.serverCount;\n    this.limit = query.limit;\n    this.skip = Math.floor(items.skip / query.limit) + 1;\n    this.loading = false;\n    each(items, (item: any) => {\n      this.rows.push(clone(item));\n    });\n    this.service.setRows(this.rows);\n\n    return this.rows;\n  }\n}\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 } from '@angular/core';\nimport { GridBodyComponent } from '../GridBodyComponent';\nimport { FormioPromiseService } from '@maqta/formio-angular';\n\n@Component({\n  selector: 'form-grid-body',\n  styleUrls: ['./FormGridBody.component.scss'],\n  templateUrl: './FormGridBody.component.html'\n})\nexport class FormGridBodyComponent extends GridBodyComponent {\n  load(formio: FormioPromiseService, query?: any) {\n    query = query || {};\n    return formio.loadForms({ params: query }).then((forms: any) => this.setRows(query, forms));\n  }\n}\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-8\">\r\n            <a routerLink=\"{{form._id}}/view\" (click)=\"onRowSelect($event, form)\"><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-4\">\r\n            <button *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\"></span> Enter Data</button>&nbsp;\r\n            <button *ngIf=\"actionAllowed('formSubmission')\" class=\"btn btn-outline-secondary btn-sm form-btn\" (click)=\"onRowAction($event, form, 'submission')\"><span class=\"fa fa-list-alt\"></span> View Data</button>&nbsp;\r\n            <button *ngIf=\"actionAllowed('formEdit')\" class=\"btn btn-outline-secondary btn-sm form-btn\" (click)=\"onRowAction($event, form, 'edit')\"><span class=\"fa fa-edit\"></span> Edit Form</button>&nbsp;\r\n            <button *ngIf=\"actionAllowed('formPermission')\" class=\"btn btn-outline-secondary btn-sm form-btn\" (click)=\"onRowAction($event, form, 'permissions')\"><span class=\"fa fa-lock\"></span> Permissions</button>&nbsp;\r\n            <button *ngIf=\"actionAllowed('formDelete')\" class=\"btn btn-danger btn-sm form-btn form-btn-delete\" (click)=\"onRowAction($event, form, 'delete')\" title=\"Delete form\"><span class=\"fa fa-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 pull-left float-left\" (click)=\"createItem.emit('form')\"><em class=\"glyphicon glyphicon-plus fa fa-plus\"></em> {{ createText }}</button>\r\n      <span class=\"pull-right float-right 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';\nimport {Utils, Components, ExtendedComponentSchema} from 'formiojs';\nimport {GridHeaderComponent} from '../GridHeaderComponent';\nimport {FormioPromiseService} from '@maqta/formio-angular';\nimport {ComponentInstance, FormioForm} from '@maqta/formio-angular';\nimport {GridColumn} from '../types/grid-column';\nimport {GridHeader, SortType} from '../types/grid-header';\n\n@Component({\n  templateUrl: './SubmissionGridHeader.component.html'\n})\nexport class SubmissionGridHeaderComponent extends GridHeaderComponent {\n\n  // Map structure where the key is the path and the value is the component\n  formComponents: Map<string, ExtendedComponentSchema>;\n\n  load(formio: FormioPromiseService, query?: any, columns?: Array<GridColumn>) {\n    query = query || {};\n    return formio.loadForm({params: query}).then((form: FormioForm) => {\n      this.headers = [];\n      this.formComponents = new Map<string, ExtendedComponentSchema>();\n      this.setComponents(form.components);\n      columns ? columns.forEach(column => {\n          this.setHeader(this.getHeaderForColumn(column, this.formComponents.get(column.path)));\n        }) : this.setComponentsHeaders(this.formComponents);\n\n      return this.headers;\n    });\n  }\n\n  setHeader(header: GridHeader) {\n    this.headers.push(header);\n  }\n\n  getHeaderForColumn(column: GridColumn, component?: ExtendedComponentSchema, sort?: SortType) {\n    return {\n      label: column.label,\n      key: column.path,\n      sort: sort,\n      component: component ? Components.create(component, null, null, true) as ComponentInstance : undefined,\n      renderCell: column ? column.renderCell : undefined\n    };\n  }\n\n  getHeaderForComponent(component: ExtendedComponentSchema, path: string, sort?: SortType) {\n    return {\n      label: component.label,\n      key: path,\n      sort: sort,\n      component: component ? Components.create(component, null, null, true) as ComponentInstance : undefined,\n    };\n  }\n  // Set headers from components in case if columns are not provided\n  setComponentsHeaders(components: Map<string, ExtendedComponentSchema>, sort?: SortType) {\n    components.forEach((component, path) => {\n      if (\n        component.input &&\n        (!component.hasOwnProperty('tableView') || component.tableView)\n      ) {\n        this.setHeader(this.getHeaderForComponent(component, path, sort));\n      }\n    });\n  }\n\n  // Map components\n  setComponents(components) {\n    Utils.eachComponent(components, (component: ExtendedComponentSchema, newPath: string) => {\n      this.formComponents.set(`data.${newPath}`, component);\n    });\n  }\n}\n\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 }}&nbsp;<span [ngClass]=\"{'glyphicon-triangle-top': (header.sort === 'asc'), 'glyphicon-triangle-bottom': (header.sort === 'desc')}\" class=\"glyphicon\" *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';\nimport { each, get } from 'lodash';\nimport { GridBodyComponent } from '../GridBodyComponent';\nimport {FormioPromiseService} from '@maqta/formio-angular';\nimport { GridHeader } from '../types/grid-header';\nimport {FormioSubmission} from '@maqta/formio-angular';\n@Component({\n  templateUrl: './SubmissionGridBody.component.html'\n})\nexport class SubmissionGridBodyComponent extends GridBodyComponent {\n  load(formio: FormioPromiseService, query?: any) {\n    query = query || {};\n    return formio.loadSubmissions({ params: query })\n      .then((submissions: any) => this.setRows(query, submissions));\n  }\n\n  /**\n   * Render the cell data.\n   *\n   * @param submission\n   * @param header\n   * @return any\n   */\n  view(submission: FormioSubmission, header: GridHeader): string {\n    const cellValue: any = get(submission, header.key);\n    if (header.renderCell) {\n      return header.renderCell(cellValue, header.component);\n    } else {\n      if (header.component) {\n        if (header.component.getView) {\n          return header.component.getView(cellValue);\n        }\n        return header.component.asString(cellValue);\n      } else {\n        return cellValue.toString();\n      }\n    }\n  }\n}\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 pull-left float-left\" (click)=\"createItem.emit('form')\"><em class=\"glyphicon glyphicon-plus fa fa-plus\"></em> {{ createText }}</button>\r\n      <span class=\"pull-right float-right 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';\nimport {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  ComponentFactoryResolver,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  ViewChild,\n  ViewContainerRef\n} from '@angular/core';\nimport {FormioAlerts} from '@maqta/formio-angular';\nimport {each} from 'lodash';\nimport {Formio} from 'formiojs';\nimport {GridHeaderComponent} from './GridHeaderComponent';\nimport {GridBodyComponent} from './GridBodyComponent';\nimport {GridFooterComponent} from './GridFooterComponent';\nimport FormComponents from './form/index';\nimport SubmissionComponents from './submission/index';\nimport {FormioPromiseService} from '@maqta/formio-angular';\nimport {GridColumn} from './types/grid-column';\nimport {GridHeader, SortType} from './types/grid-header';\n\n@Component({\n  selector: 'formio-grid',\n  styleUrls: ['./grid.component.scss'],\n  templateUrl: './grid.component.html'\n})\nexport class FormioGridComponent implements OnChanges, OnInit, AfterViewInit {\n  @Input() footerPosition = GridFooterPositions.bottom;\n  @Input() src?: string;\n  @Input() items?: Array<any>;\n  @Input() onForm?: Promise<any>;\n  @Input() query?: any;\n  @Input() refresh?: EventEmitter<object>;\n  @Input() columns?: Array<GridColumn>;\n  @Input() gridType?: string;\n  @Input() size?: number;\n  @Input() components?: any;\n  @Input() formio?: FormioPromiseService;\n  @Input() label?: string;\n  @Input() createText: String;\n  @Input() isActionAllowed: any;\n  @Output() select: EventEmitter<object>;\n  @Output() rowSelect: EventEmitter<object>;\n  @Output() rowAction: EventEmitter<object>;\n  @Output() createItem: EventEmitter<any>;\n  @Output() error: EventEmitter<any>;\n  @ViewChild('headerTemplate', {read: ViewContainerRef, static: true}) headerElement: ViewContainerRef;\n  @ViewChild('bodyTemplate', {read: ViewContainerRef, static: true}) bodyElement: ViewContainerRef;\n  @ViewChild('footerTemplate', {read: ViewContainerRef, static: true}) footerElement: ViewContainerRef;\n\n  public page = 0;\n  public isLoading = false;\n  public initialized = false;\n  public header: GridHeaderComponent;\n  public body: GridBodyComponent;\n  public footer: GridFooterComponent;\n  public footerPositions = GridFooterPositions;\n\n  constructor(\n    public alerts: FormioAlerts,\n    private resolver: ComponentFactoryResolver,\n    private ref: ChangeDetectorRef\n  ) {\n    this.select = this.rowSelect = new EventEmitter();\n    this.rowAction = new EventEmitter();\n    this.createItem = new EventEmitter();\n    this.error = new EventEmitter();\n    this.isLoading = true;\n  }\n\n  createComponent(property, component) {\n    const factory = this.resolver.resolveComponentFactory(component);\n    const componentRef = property.createComponent(factory);\n    return componentRef.instance;\n  }\n\n  loadGrid(src?: string) {\n    // If no source is provided, then skip.\n    if (!src && !this.formio) {\n      return;\n    }\n    // Do not double load.\n    if (this.formio && this.src && (src === this.src)) {\n      return;\n    }\n\n    if (src) {\n      this.src = src;\n      this.formio = new FormioPromiseService(this.src, { formOnly: true });\n    }\n\n    // Load the header.\n    this.header.load(this.formio, {}, this.columns)\n      .then(() => this.setPage(0))\n      .catch(error => this.onError(error));\n  }\n\n  ngOnInit() {\n    // Create our components.\n    const comps = this.components || ((this.gridType === 'form') ? FormComponents : SubmissionComponents);\n\n    this.header = this.createComponent(this.headerElement, comps.header);\n    this.header.actionAllowed = this.actionAllowed.bind(this);\n    this.header.sort.subscribe(header => this.sortColumn(header));\n\n    this.body = this.createComponent(this.bodyElement, comps.body);\n    this.body.header = this.header;\n    this.body.actionAllowed = this.actionAllowed.bind(this);\n    this.body.rowSelect.subscribe(row => this.rowSelect.emit(row));\n    this.body.rowAction.subscribe(action => this.rowAction.emit(action));\n\n    this.footer = this.createComponent(this.footerElement, comps.footer);\n    this.footer.header = this.header;\n    this.footer.body = this.body;\n    this.footer.actionAllowed = this.actionAllowed.bind(this);\n    this.footer.createText = this.createText;\n    this.footer.size = this.size;\n    this.footer.pageChanged.subscribe(page => this.pageChanged(page));\n    this.footer.createItem.subscribe(item => this.createItem.emit(item));\n  }\n\n  ngOnChanges(changes: any) {\n    if (this.initialized) {\n      if (\n        (changes.src && changes.src.currentValue) ||\n        (changes.formio && changes.formio.currentValue)\n      ) {\n        this.loadGrid(changes.src.currentValue);\n      }\n\n      if (changes.items && changes.items.currentValue) {\n        this.refreshGrid();\n      }\n    }\n\n    if (this.footer &&\n        (changes.createText && changes.createText.currentValue)) {\n      this.footer.createText = changes.createText.currentValue;\n    }\n  }\n\n  ngAfterViewInit() {\n    this.alerts.setAlerts([]);\n    this.query = this.query || {};\n    if (this.refresh) {\n      this.refresh.subscribe((query: object) => this.refreshGrid(query));\n    }\n    this.loadGrid(this.src);\n    this.initialized = true;\n    this.ref.detectChanges();\n  }\n\n  actionAllowed(action) {\n    if (this.isActionAllowed) {\n      return this.isActionAllowed(action);\n    } else {\n      return true;\n    }\n  }\n\n  onError(error: any) {\n    this.isLoading = false;\n    this.error.emit(error);\n    if (typeof error === 'string' || error.message) {\n      this.alerts.setAlert({\n        type: 'danger',\n        message: error.message || error\n      });\n    }\n  }\n\n  refreshGrid(query?: any) {\n    this.alerts.setAlerts([]);\n    this.query = query || this.query;\n    if (!this.query.hasOwnProperty('limit')) {\n      this.query.limit = 10;\n    }\n    if (!this.query.hasOwnProperty('skip')) {\n      this.query.skip = 0;\n    }\n    this.isLoading = true;\n    this.ref.detectChanges();\n    Formio.cache = {};\n    let loader = null;\n    if (this.items) {\n      loader = Promise.resolve(this.body.setRows(this.query, this.items));\n    } else {\n      loader = this.body.load(this.formio, this.query);\n    }\n\n    return loader.then(info => {\n      this.isLoading = false;\n      this.initialized = true;\n      this.ref.detectChanges();\n    }).catch(error => this.onError(error));\n  }\n\n  setPage(num = -1) {\n    this.page = num !== -1 ? num : this.page;\n    if (!this.query.hasOwnProperty('limit')) {\n      this.query.limit = 10;\n    }\n    if (!this.query.hasOwnProperty('skip')) {\n      this.query.skip = 0;\n    }\n    this.query.skip = this.page * this.query.limit;\n    this.refreshGrid();\n  }\n\n  sortColumn(header: GridHeader) {\n    // Reset all other column sorts.\n    each(this.header.headers, (col: any) => {\n      if (col.key !== header.key) {\n        col.sort = '';\n      }\n    });\n    switch (header.sort) {\n      case 'asc':\n        header.sort = SortType.DESC;\n        this.query.sort = '-' + header.key;\n        break;\n      case 'desc':\n        header.sort = undefined;\n        delete this.query.sort;\n        break;\n      case undefined:\n        header.sort = SortType.ASC;\n        this.query.sort = header.key;\n        break;\n    }\n    this.refreshGrid();\n  }\n\n  pageChanged(page: any) {\n    this.setPage(page.page - 1);\n  }\n}\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';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { FormioModule } from '@maqta/formio-angular';\nimport { FormioAlerts } from '@maqta/formio-angular';\nimport { FormioGridComponent } from './grid.component';\nimport { PaginationModule } from 'ngx-bootstrap/pagination';\nimport { FormGridHeaderComponent } from './form/FormGridHeader.component';\nimport { FormGridBodyComponent } from './form/FormGridBody.component';\nimport { FormGridFooterComponent } from './form/FormGridFooter.component';\nimport { SubmissionGridHeaderComponent } from './submission/SubmissionGridHeader.component';\nimport { SubmissionGridBodyComponent } from './submission/SubmissionGridBody.component';\nimport { SubmissionGridFooterComponent } from './submission/SubmissionGridFooter.component';\nimport { GridHeaderComponent } from './GridHeaderComponent';\nimport { GridBodyComponent } from './GridBodyComponent';\nimport { GridFooterComponent } from './GridFooterComponent';\nimport { GridService } from './grid.service';\nimport { TimeSince } from './form/time-since.pipe'\n@NgModule({\n  imports: [\n    CommonModule,\n    FormsModule,\n    FormioModule,\n    RouterModule,\n    PaginationModule.forRoot()\n  ],\n  declarations: [\n    FormioGridComponent,\n    FormGridHeaderComponent,\n    FormGridBodyComponent,\n    FormGridFooterComponent,\n    SubmissionGridHeaderComponent,\n    SubmissionGridBodyComponent,\n    SubmissionGridFooterComponent,\n    GridHeaderComponent,\n    GridBodyComponent,\n    GridFooterComponent,\n    TimeSince\n  ],\n  exports: [\n    FormioGridComponent\n  ],\n  entryComponents: [\n    FormGridHeaderComponent,\n    FormGridBodyComponent,\n    FormGridFooterComponent,\n    SubmissionGridHeaderComponent,\n    SubmissionGridBodyComponent,\n    SubmissionGridFooterComponent\n  ],\n  providers: [\n    FormioAlerts,\n    GridService\n  ]\n})\nexport class FormioGrid {}\n","/*\r\n * Public API Surface of angular-formio\r\n */\r\n\r\nexport * from './index';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}