@formio/angular
Version: 
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.1.4.
687 lines (674 loc) • 58.6 kB
JavaScript
import * as i0 from '@angular/core';
import { Injectable, Component, ViewChild, EventEmitter, NgModule } from '@angular/core';
import { Formio } from '@formio/js';
import _intersection from 'lodash/intersection';
import * as i3 from '@formio/angular';
import { FormBuilderComponent, extendRouter, FormioModule } from '@formio/angular';
import * as i3$1 from '@formio/angular/auth';
import * as i4 from '@formio/angular/grid';
import { FormioGridComponent, FormioGrid } from '@formio/angular/grid';
import _, { debounce } from 'lodash';
import * as i2 from '@angular/router';
import { RouterModule } from '@angular/router';
import * as i6 from '@angular/common';
import { CommonModule } from '@angular/common';
import * as i7 from '@angular/forms';
import { FormsModule } from '@angular/forms';
import * as i5 from 'ngx-bootstrap/modal';
import { ModalModule } from 'ngx-bootstrap/modal';
import * as i2$1 from 'ngx-bootstrap/pagination';
import { PaginationModule } from 'ngx-bootstrap/pagination';
class FormManagerConfig {
    tag = '';
    includeSearch = false;
    saveDraft = false;
    type = 'form';
    builder;
    viewer;
    renderer;
    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
    static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerConfig });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerConfig, decorators: [{
            type: Injectable
        }] });
const DefaultConfiguration = new FormManagerConfig();
class FormManagerService {
    appConfig;
    config;
    auth;
    formio;
    access;
    allAccessMap;
    ownAccessMap;
    ready;
    formReady;
    actionAllowed;
    form = null;
    formSrc = '';
    perms = { delete: false, edit: false };
    constructor(appConfig, config, auth) {
        this.appConfig = appConfig;
        this.config = config;
        this.auth = auth;
        if (this.appConfig && this.appConfig.appUrl) {
            Formio.setBaseUrl(this.appConfig.apiUrl);
            Formio.setProjectUrl(this.appConfig.appUrl);
        }
        else {
            console.error('You must provide an AppConfig within your application!');
        }
        this.allAccessMap = {
            'update_all': 'formEdit',
            'delete_all': 'formDelete'
        };
        this.ownAccessMap = {
            'update_own': 'formEdit',
            'delete_own': 'formDelete'
        };
        this.actionAllowed = (action) => this.isActionAllowed(action);
        this.reset();
    }
    isActionAllowed(action) {
        return this.access[action];
    }
    setAccess() {
        this.access = {
            formCreate: true,
            formView: true,
            formSubmission: true,
            formEdit: true,
            formPermission: true,
            formDelete: true,
            projectSettings: true,
            userManagement: true
        };
        if (this.auth) {
            this.access = {
                formCreate: false,
                formView: false,
                formSubmission: false,
                formEdit: false,
                formPermission: false,
                formDelete: false,
                projectSettings: false,
                userManagement: false
            };
            this.ready = this.auth.ready.then(() => {
                let administrator = this.auth.roles["administrator"];
                let formbuilder = this.auth.roles["formbuilder"];
                let formadmin = this.auth.roles["formadmin"];
                if (this.auth.user && this.auth.user.roles) {
                    this.auth.user.roles.forEach((roleId) => {
                        if (administrator._id === roleId) {
                            this.access.formCreate = true;
                            this.access.formView = true;
                            this.access.formSubmission = true;
                            this.access.formEdit = true;
                            this.access.formPermission = true;
                            this.access.formDelete = true;
                            this.access.projectSettings = true;
                            this.access.userManagement = true;
                        }
                        else {
                            if (formadmin && formadmin._id === roleId) {
                                this.access.formCreate = this.auth.formAccess.create_all.includes(roleId);
                                this.access.formEdit = this.auth.formAccess.update_all.includes(roleId);
                                this.access.formPermission = this.auth.formAccess.update_all.includes(roleId);
                                this.access.formDelete = this.auth.formAccess.delete_all.includes(roleId);
                                this.access.formView = this.auth.formAccess.read_all.includes(roleId);
                                this.access.formSubmission = this.auth.formAccess.read_all.includes(roleId);
                            }
                            if (formbuilder && formbuilder._id === roleId) {
                                this.access.formCreate = this.auth.formAccess.create_all.includes(roleId);
                                this.access.formEdit = this.auth.formAccess.update_all.includes(roleId);
                                this.access.formPermission = this.auth.formAccess.update_all.includes(roleId);
                                this.access.formDelete = this.auth.formAccess.delete_all.includes(roleId);
                                this.access.formView = this.auth.formAccess.read_all.includes(roleId);
                            }
                        }
                    });
                }
            });
        }
        else {
            this.ready = Promise.resolve(false);
        }
    }
    reset(route) {
        if (route) {
            route.params.subscribe(params => {
                if (params.id) {
                    this.formio = new Formio(`${this.formio.formsUrl}/${params.id}`);
                }
                else {
                    this.reset();
                }
            });
        }
        else {
            this.formio = new Formio(this.appConfig.appUrl);
            this.setAccess();
        }
    }
    hasAccess(roles) {
        if (!this.auth.user) {
            return false;
        }
        return !!_intersection(roles, this.auth.user.roles).length;
    }
    setForm(form) {
        this.form = form;
        this.formSrc = this.appConfig.appUrl + '/' + form.path;
        if (form.access) {
            // Check if they have access here.
            form.access.forEach(access => {
                // Check for all access.
                if (this.allAccessMap[access.type] && !this.access[this.allAccessMap[access.type]]) {
                    this.access[this.allAccessMap[access.type]] = this.hasAccess(access.roles);
                }
                // Check for own access.
                if (this.auth && this.auth.user &&
                    (form._id === this.auth.user._id) &&
                    this.ownAccessMap[access.type] &&
                    !this.access[this.ownAccessMap[access.type]]) {
                    this.access[this.ownAccessMap[access.type]] = this.hasAccess(access.roles);
                }
            });
        }
        return form;
    }
    loadForm() {
        this.form = null;
        this.formReady = this.formio.loadForm().then(form => this.setForm(form));
        return this.formReady;
    }
    setSubmission(route) {
        return new Promise((resolve) => {
            route.params.subscribe(params => {
                this.formio = new Formio(`${this.formio.submissionsUrl}/${params.id}`);
                resolve(this.formio);
            });
        });
    }
    submissionLoaded(submission) {
        this.auth.ready.then(() => {
            this.formio.userPermissions(this.auth.user, this.form, submission).then((perms) => {
                this.perms.delete = perms.delete;
                this.perms.edit = perms.edit;
            });
        });
    }
    loadForms() {
        return this.formio.loadForms({ params: {
                tags: this.config.tag
            } });
    }
    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerService, deps: [{ token: i3.FormioAppConfig }, { token: FormManagerConfig }, { token: i3$1.FormioAuthService }], target: i0.ɵɵFactoryTarget.Injectable });
    static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerService });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerService, decorators: [{
            type: Injectable
        }], ctorParameters: () => [{ type: i3.FormioAppConfig }, { type: FormManagerConfig }, { type: i3$1.FormioAuthService }] });
class FormManagerIndexComponent {
    service;
    route;
    router;
    config;
    searchElement;
    formGrid;
    gridQuery;
    onSearch;
    constructor(service, route, router, config) {
        this.service = service;
        this.route = route;
        this.router = router;
        this.config = config;
        this.config = { ...DefaultConfiguration, ...this.config };
        this.gridQuery = { type: this.config.type, sort: 'title' };
        if (this.config.tag) {
            this.gridQuery.tags = this.config.tag;
        }
        this.onSearch = debounce(this._onSearch, 300);
    }
    loadGrid() {
        this.gridQuery = JSON.parse(localStorage.getItem('query')) || this.gridQuery;
        const currentPage = +localStorage.getItem('currentPage') || 0;
        this.formGrid
            .refreshGrid(this.gridQuery)
            .then(() => this.formGrid.setPage(currentPage - 1));
    }
    ngOnInit() {
        this.gridQuery = { type: this.config.type, sort: 'title' };
        if (this.config.tag) {
            this.gridQuery.tags = this.config.tag;
        }
        this.service.reset();
        this.service.ready.then(() => {
            this.loadGrid();
            this.formGrid.footer.pageChanged.subscribe(page => {
                localStorage.setItem('currentPage', page.page);
            });
        });
    }
    ngAfterViewInit() {
        this.searchElement.nativeElement.value = localStorage.getItem('searchInput') || '';
    }
    _onSearch() {
        const search = this.searchElement.nativeElement.value;
        if (search.length > 0) {
            this.gridQuery.skip = 0;
            this.gridQuery.title__regex = '/' + search + '/i';
            this.gridQuery.title__regex = '/' + search.trim() + '/i';
        }
        else {
            delete this.gridQuery.title__regex;
        }
        localStorage.setItem('query', JSON.stringify(this.gridQuery));
        localStorage.setItem('searchInput', search);
        this.formGrid.pageChanged({ page: 1, itemPerPage: this.gridQuery.limit });
    }
    clearSearch() {
        this.gridQuery = { type: this.config.type, sort: 'title' };
        if (this.config.tag) {
            this.gridQuery.tags = this.config.tag;
        }
        localStorage.removeItem('query');
        localStorage.removeItem('searchInput');
        localStorage.removeItem('currentPage');
        if (this.searchElement?.nativeElement) {
            this.searchElement.nativeElement.value = '';
        }
        this.formGrid.query = this.gridQuery;
        this.formGrid.pageChanged({ page: 1 });
    }
    onAction(action) {
        this.service.form = null; // Reset previous form data
        this.router.navigate([action.row._id, action.action], { relativeTo: this.route });
    }
    onSelect(row) {
        this.router.navigate([row._id], { relativeTo: this.route });
    }
    onCreateItem() {
        this.router.navigate(['create'], { relativeTo: this.route });
    }
    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerIndexComponent, deps: [{ token: FormManagerService }, { token: i2.ActivatedRoute }, { token: i2.Router }, { token: FormManagerConfig }], target: i0.ɵɵFactoryTarget.Component });
    static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FormManagerIndexComponent, selector: "ng-component", viewQueries: [{ propertyName: "searchElement", first: true, predicate: ["search"], descendants: true }, { propertyName: "formGrid", first: true, predicate: FormioGridComponent, descendants: true }], ngImport: i0, template: "<div role=\"search\" class=\"input-group mb-3\" *ngIf=\"config.includeSearch\">\n  <input #search type=\"text\" (keyup)=\"onSearch()\" class=\"form-control\" placeholder=\"Search Forms\" aria-label=\"Search Forms\" aria-describedby=\"button-search\">\n  <span *ngIf=\"search && search !== ''\" class=\"form-clear input-group-addon\" (click)=\"clearSearch()\"><span class=\"fa fa-times bi bi-x\"></span></span>\n</div>\n<formio-grid\n  *ngIf=\"service.ready\"\n  [formio]=\"service.formio\"\n  [gridType]=\"'form'\"\n  [query]=\"gridQuery\"\n  [isActionAllowed]=\"service.actionAllowed\"\n  (rowAction)=\"onAction($event)\"\n  (rowSelect)=\"onSelect($event)\"\n  (createItem)=\"onCreateItem()\"\n></formio-grid>\n", styles: [".form-clear{background:#cecece;border-radius:50%;bottom:8px;color:#0000004d;cursor:pointer;display:flex;justify-content:center;align-items:center;padding-bottom:2px;height:24px;position:absolute;right:10px;top:6px;width:24px;z-index:10}.form-clear .fa{font-size:16px;font-weight:500}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.FormioGridComponent, selector: "formio-grid", inputs: ["footerPosition", "src", "items", "onForm", "query", "refresh", "columns", "gridType", "size", "components", "formio", "label", "createText", "isActionAllowed"], outputs: ["select", "rowSelect", "rowAction", "createItem", "error"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerIndexComponent, decorators: [{
            type: Component,
            args: [{ template: "<div role=\"search\" class=\"input-group mb-3\" *ngIf=\"config.includeSearch\">\n  <input #search type=\"text\" (keyup)=\"onSearch()\" class=\"form-control\" placeholder=\"Search Forms\" aria-label=\"Search Forms\" aria-describedby=\"button-search\">\n  <span *ngIf=\"search && search !== ''\" class=\"form-clear input-group-addon\" (click)=\"clearSearch()\"><span class=\"fa fa-times bi bi-x\"></span></span>\n</div>\n<formio-grid\n  *ngIf=\"service.ready\"\n  [formio]=\"service.formio\"\n  [gridType]=\"'form'\"\n  [query]=\"gridQuery\"\n  [isActionAllowed]=\"service.actionAllowed\"\n  (rowAction)=\"onAction($event)\"\n  (rowSelect)=\"onSelect($event)\"\n  (createItem)=\"onCreateItem()\"\n></formio-grid>\n", styles: [".form-clear{background:#cecece;border-radius:50%;bottom:8px;color:#0000004d;cursor:pointer;display:flex;justify-content:center;align-items:center;padding-bottom:2px;height:24px;position:absolute;right:10px;top:6px;width:24px;z-index:10}.form-clear .fa{font-size:16px;font-weight:500}\n"] }]
        }], ctorParameters: () => [{ type: FormManagerService }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: FormManagerConfig }], propDecorators: { searchElement: [{
                type: ViewChild,
                args: ['search']
            }], formGrid: [{
                type: ViewChild,
                args: [FormioGridComponent, { static: false }]
            }] } });
class FormManagerEditComponent {
    service;
    router;
    route;
    config;
    ref;
    alerts;
    builder;
    formTitle;
    formType;
    form;
    loading;
    formReady;
    editMode;
    constructor(service, router, route, config, ref, alerts) {
        this.service = service;
        this.router = router;
        this.route = route;
        this.config = config;
        this.ref = ref;
        this.alerts = alerts;
        this.form = { components: [] };
        this.formReady = false;
        this.loading = false;
        this.editMode = false;
    }
    initBuilder(editing) {
        if (editing) {
            this.loading = true;
            this.editMode = true;
            return this.service.formReady.then(() => {
                this.form = this.service.form;
                this.formTitle.nativeElement.value = this.service.form.title;
                this.formType.nativeElement.value = this.service.form.display || 'form';
                this.formReady = true;
                this.loading = false;
                this.ref.detectChanges();
                return true;
            }).catch(err => {
                this.alerts.setAlert({ type: 'danger', message: (err.message || err) });
                this.loading = false;
                this.ref.detectChanges();
                this.formReady = true;
            });
        }
        else {
            this.formReady = true;
            return Promise.resolve(true);
        }
    }
    ngAfterViewInit() {
        this.route.url.subscribe(url => {
            setTimeout(() => this.initBuilder((url[0].path === 'edit')), 0);
        });
    }
    onDisplaySelect(event) {
        this.builder.setDisplay(event.target.value);
    }
    saveForm() {
        this.loading = true;
        this.form = _.cloneDeep(this.builder.formio.schema);
        this.form.title = this.formTitle.nativeElement.value.trim();
        this.form.display = this.formType.nativeElement.value;
        this.form.components = _.cloneDeep(this.builder.form.components);
        if (this.config.tag) {
            this.form.tags = this.form.tags || [];
            this.form.tags.push(this.config.tag);
            this.form.tags = _.uniq(this.form.tags);
        }
        if (this.config.type) {
            this.form.type = this.config.type;
        }
        if (!this.form._id) {
            this.form.name = _.camelCase(this.form.title).toLowerCase();
            this.form.path = this.form.name;
        }
        return this.service.formio.saveForm(this.form).then(form => {
            this.form = this.service.setForm(form);
            this.loading = false;
            return this.form;
        }).catch(err => {
            this.loading = false;
            // Catch if a form is returned as an error. This is a conflict.
            if (err._id && err.type) {
                throw err;
            }
            this.alerts.setAlert({ type: 'danger', message: (err.message || err) });
        });
    }
    onSave() {
        return this.saveForm().then((form) => {
            if (this.editMode) {
                this.router.navigate(['../', 'view'], { relativeTo: this.route });
            }
            else {
                this.router.navigate(['../', form._id, 'view'], { relativeTo: this.route });
            }
        });
    }
    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerEditComponent, deps: [{ token: FormManagerService }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: FormManagerConfig }, { token: i0.ChangeDetectorRef }, { token: i3.FormioAlerts }], target: i0.ɵɵFactoryTarget.Component });
    static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FormManagerEditComponent, selector: "ng-component", viewQueries: [{ propertyName: "builder", first: true, predicate: FormBuilderComponent, descendants: true }, { propertyName: "formTitle", first: true, predicate: ["title"], descendants: true }, { propertyName: "formType", first: true, predicate: ["type"], descendants: true }], ngImport: i0, template: "<div class=\"loader\" *ngIf=\"loading\"></div>\n<div class=\"form-group row mb-2\">\n  <div class=\"col-sm-8\">\n    <input type=\"text\" class=\"form-control\" id=\"formTitle\" placeholder=\"Enter a Title\" #title>\n  </div>\n  <div class=\"col-sm-2\">\n    <select class=\"form-control\" id=\"formSelect\" (change)=\"onDisplaySelect($event)\" #type>\n      <option value=\"form\">Form</option>\n      <option value=\"wizard\">Wizard</option>\n      <option value=\"pdf\">PDF</option>\n    </select>\n  </div>\n  <div class=\"col-sm-2\">\n    <button class=\"btn btn-primary btn-block\" (click)=\"onSave()\"><i class=\"bi bi-save me-2\"></i>Save Form</button>\n  </div>\n</div>\n<formio-alerts [alerts]=\"alerts\"></formio-alerts>\n<form-builder *ngIf=\"formReady\" [formbuilder]=\"config.builder\" [form]=\"form\" #builder></form-builder>\n<button class=\"btn btn-primary\" style=\"margin-top: 10px;\" (click)=\"onSave()\">Save Form</button>\n", dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.FormBuilderComponent, selector: "form-builder", inputs: ["form", "options", "formbuilder", "noeval", "refresh", "rebuild"], outputs: ["change"] }, { kind: "component", type: i3.FormioAlertsComponent, selector: "formio-alerts", inputs: ["alerts"], outputs: ["focusComponent"] }, { kind: "directive", type: i7.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerEditComponent, decorators: [{
            type: Component,
            args: [{ template: "<div class=\"loader\" *ngIf=\"loading\"></div>\n<div class=\"form-group row mb-2\">\n  <div class=\"col-sm-8\">\n    <input type=\"text\" class=\"form-control\" id=\"formTitle\" placeholder=\"Enter a Title\" #title>\n  </div>\n  <div class=\"col-sm-2\">\n    <select class=\"form-control\" id=\"formSelect\" (change)=\"onDisplaySelect($event)\" #type>\n      <option value=\"form\">Form</option>\n      <option value=\"wizard\">Wizard</option>\n      <option value=\"pdf\">PDF</option>\n    </select>\n  </div>\n  <div class=\"col-sm-2\">\n    <button class=\"btn btn-primary btn-block\" (click)=\"onSave()\"><i class=\"bi bi-save me-2\"></i>Save Form</button>\n  </div>\n</div>\n<formio-alerts [alerts]=\"alerts\"></formio-alerts>\n<form-builder *ngIf=\"formReady\" [formbuilder]=\"config.builder\" [form]=\"form\" #builder></form-builder>\n<button class=\"btn btn-primary\" style=\"margin-top: 10px;\" (click)=\"onSave()\">Save Form</button>\n" }]
        }], ctorParameters: () => [{ type: FormManagerService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: FormManagerConfig }, { type: i0.ChangeDetectorRef }, { type: i3.FormioAlerts }], propDecorators: { builder: [{
                type: ViewChild,
                args: [FormBuilderComponent, { static: false }]
            }], formTitle: [{
                type: ViewChild,
                args: ['title', { static: false }]
            }], formType: [{
                type: ViewChild,
                args: ['type', { static: false }]
            }] } });
class FormManagerCreateComponent extends FormManagerEditComponent {
    ngOnInit() {
        this.service.reset();
    }
    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerCreateComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
    static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FormManagerCreateComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class=\"loader\" *ngIf=\"loading\"></div>\n<div class=\"form-group row mb-2\">\n  <div class=\"col-sm-8\">\n    <input type=\"text\" class=\"form-control\" id=\"formTitle\" placeholder=\"Enter a Title\" #title>\n  </div>\n  <div class=\"col-sm-2\">\n    <select class=\"form-control\" id=\"formSelect\" (change)=\"onDisplaySelect($event)\" #type>\n      <option value=\"form\">Form</option>\n      <option value=\"wizard\">Wizard</option>\n      <option value=\"pdf\">PDF</option>\n    </select>\n  </div>\n  <div class=\"col-sm-2\">\n    <button class=\"btn btn-primary btn-block\" (click)=\"onSave()\"><i class=\"bi bi-save me-2\"></i>Save Form</button>\n  </div>\n</div>\n<formio-alerts [alerts]=\"alerts\"></formio-alerts>\n<form-builder *ngIf=\"formReady\" [formbuilder]=\"config.builder\" [form]=\"form\" #builder></form-builder>\n<button class=\"btn btn-primary\" style=\"margin-top: 10px;\" (click)=\"onSave()\">Save Form</button>\n", dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.FormBuilderComponent, selector: "form-builder", inputs: ["form", "options", "formbuilder", "noeval", "refresh", "rebuild"], outputs: ["change"] }, { kind: "component", type: i3.FormioAlertsComponent, selector: "formio-alerts", inputs: ["alerts"], outputs: ["focusComponent"] }, { kind: "directive", type: i7.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerCreateComponent, decorators: [{
            type: Component,
            args: [{ template: "<div class=\"loader\" *ngIf=\"loading\"></div>\n<div class=\"form-group row mb-2\">\n  <div class=\"col-sm-8\">\n    <input type=\"text\" class=\"form-control\" id=\"formTitle\" placeholder=\"Enter a Title\" #title>\n  </div>\n  <div class=\"col-sm-2\">\n    <select class=\"form-control\" id=\"formSelect\" (change)=\"onDisplaySelect($event)\" #type>\n      <option value=\"form\">Form</option>\n      <option value=\"wizard\">Wizard</option>\n      <option value=\"pdf\">PDF</option>\n    </select>\n  </div>\n  <div class=\"col-sm-2\">\n    <button class=\"btn btn-primary btn-block\" (click)=\"onSave()\"><i class=\"bi bi-save me-2\"></i>Save Form</button>\n  </div>\n</div>\n<formio-alerts [alerts]=\"alerts\"></formio-alerts>\n<form-builder *ngIf=\"formReady\" [formbuilder]=\"config.builder\" [form]=\"form\" #builder></form-builder>\n<button class=\"btn btn-primary\" style=\"margin-top: 10px;\" (click)=\"onSave()\">Save Form</button>\n" }]
        }] });
class FormManagerFormComponent {
    service;
    route;
    appConfig;
    options;
    modalService;
    choice = 'isUrl';
    embedCode;
    shareUrl;
    projectId;
    pathName;
    goTo = '';
    modalRef;
    constructor(service, route, appConfig, options, modalService) {
        this.service = service;
        this.route = route;
        this.appConfig = appConfig;
        this.options = options;
        this.modalService = modalService;
    }
    ngOnInit() {
        this.service.reset(this.route);
        this.service.loadForm().then(form => {
            this.service.formSrc = this.appConfig.appUrl + '/' + form.path;
            this.projectId = form.project;
            this.pathName = form.path;
            this.getShareUrl();
        });
    }
    getShareUrl() {
        const src = this.appConfig.appUrl + '/' + this.pathName;
        this.shareUrl = `${this.options.viewer}/#/?src=${encodeURIComponent(src)}`;
        return this.shareUrl;
    }
    openEmbed(content) {
        let goto = '';
        if (this.goTo) {
            goto += `if (d && d.formSubmission && d.formSubmission._id) { window.location.href = "${this.goTo}";}`;
        }
        let embedCode = '<script type="text/javascript">';
        embedCode += '(function a(d, w, u) {';
        embedCode += 'var h = d.getElementsByTagName("head")[0];';
        embedCode += 'var s = d.createElement("script");';
        embedCode += 's.type = "text/javascript";';
        embedCode += 's.src = "' + this.options.viewer + '/assets/lib/seamless/seamless.parent.min.js";';
        embedCode += 's.onload = function b() {';
        embedCode += 'var f = d.getElementById("formio-form-' + this.service.formio.formId + '");';
        embedCode += 'if (!f || (typeof w.seamless === u)) {';
        embedCode += 'return setTimeout(b, 100);';
        embedCode += '}';
        embedCode += 'w.seamless(f, {fallback:false}).receive(function(d, e) {' + goto + '});';
        embedCode += '};';
        embedCode += 'h.appendChild(s);';
        embedCode += '})(document, window);';
        embedCode += '</script>';
        embedCode += '<iframe id="formio-form-' + this.service.formio.formId + '" ';
        embedCode += 'style="width:100%;border:none;" height="800px" src="' + this.shareUrl + '&iframe=1"></iframe>';
        this.embedCode = embedCode;
        this.modalRef = this.modalService.show(content, { class: 'modal-lg' });
    }
    choices(string) {
        this.choice = string;
    }
    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerFormComponent, deps: [{ token: FormManagerService }, { token: i2.ActivatedRoute }, { token: i3.FormioAppConfig }, { token: FormManagerConfig }, { token: i5.BsModalService }], target: i0.ɵɵFactoryTarget.Component });
    static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FormManagerFormComponent, selector: "ng-component", ngImport: i0, template: "<button *ngIf=\"options.viewer\" class=\"float-end btn btn-outline-primary\" (click)=\"openEmbed(content)\"><em class=\"fa fa-share-alt bi bi-share\"></em> Share</button>\n<ul class=\"nav nav-tabs mb-2\">\n  <li class=\"nav-item\"><a class=\"nav-link\" routerLink=\"../\"><em class=\"fa fa-chevron-left bi bi-chevron-left\"></em></a></li>\n  <li class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"view\" routerLinkActive=\"active\"><em class=\"fa fa-pencil bi bi-pencil\"></em> Enter Data</a></li>\n  <li class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"submission\" routerLinkActive=\"active\"><em class=\"fa fa-list-alt bi bi-table\"></em> View Data</a></li>\n  <li *ngIf=\"service.actionAllowed('formEdit')\" class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"edit\" routerLinkActive=\"active\"><em class=\"fa fa-edit bi bi-pencil-square\"></em> Edit Form</a></li>\n  <li *ngIf=\"service.actionAllowed('formDelete')\" class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"delete\" routerLinkActive=\"active\"><span class=\"fa fa-trash bi bi-trash\"></span></a></li>\n</ul>\n<router-outlet></router-outlet>\n<ng-template #content>\n  <div class=\"modal-header\">\n    <h4 class=\"modal-title\">Share or Embed this form</h4>\n    <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modalRef.hide()\">\n      <span aria-hidden=\"true\">×</span>\n    </button>\n  </div>\n  <div class=\"modal-body\">\n    <ul class=\"nav nav-tabs mr-auto mb-2\">\n      <li class=\"nav-item\">\n        <a class=\"nav-link\" [ngClass]=\"{'active': choice === 'isUrl'}\" (click)=\"choices('isUrl')\"><em class=\"fa fa-link bi bi-link\"></em> URL</a>\n      </li>\n      <li class=\"nav-item\">\n        <a class=\"nav-link\" [ngClass]=\"{'active': choice === 'isEmbed'}\" (click)=\"choices('isEmbed')\"><em class=\"fa fa-code bi bi-code-slash\"></em> Embed</a>\n      </li>\n    </ul>\n    <pre  *ngIf=\"choice === 'isEmbed'\"><textarea onclick=\"this.focus();this.select()\" readonly=\"readonly\" style=\"width:100%;\" rows=\"8\" [ngModel]=\"embedCode\"></textarea></pre>\n    <input *ngIf=\"choice === 'isUrl'\" type=\"text\" onclick=\"this.focus();this.select()\" readonly=\"readonly\" class=\"form-control\" [ngModel]=\"shareUrl\" placeholder=\"https://examples.form.io/example\">\n  </div>\n  <div class=\"modal-footer\">\n    <button type=\"button\" class=\"btn btn-light\" (click)=\"modalRef.hide()\">Close</button>\n  </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerFormComponent, decorators: [{
            type: Component,
            args: [{ template: "<button *ngIf=\"options.viewer\" class=\"float-end btn btn-outline-primary\" (click)=\"openEmbed(content)\"><em class=\"fa fa-share-alt bi bi-share\"></em> Share</button>\n<ul class=\"nav nav-tabs mb-2\">\n  <li class=\"nav-item\"><a class=\"nav-link\" routerLink=\"../\"><em class=\"fa fa-chevron-left bi bi-chevron-left\"></em></a></li>\n  <li class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"view\" routerLinkActive=\"active\"><em class=\"fa fa-pencil bi bi-pencil\"></em> Enter Data</a></li>\n  <li class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"submission\" routerLinkActive=\"active\"><em class=\"fa fa-list-alt bi bi-table\"></em> View Data</a></li>\n  <li *ngIf=\"service.actionAllowed('formEdit')\" class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"edit\" routerLinkActive=\"active\"><em class=\"fa fa-edit bi bi-pencil-square\"></em> Edit Form</a></li>\n  <li *ngIf=\"service.actionAllowed('formDelete')\" class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"delete\" routerLinkActive=\"active\"><span class=\"fa fa-trash bi bi-trash\"></span></a></li>\n</ul>\n<router-outlet></router-outlet>\n<ng-template #content>\n  <div class=\"modal-header\">\n    <h4 class=\"modal-title\">Share or Embed this form</h4>\n    <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modalRef.hide()\">\n      <span aria-hidden=\"true\">×</span>\n    </button>\n  </div>\n  <div class=\"modal-body\">\n    <ul class=\"nav nav-tabs mr-auto mb-2\">\n      <li class=\"nav-item\">\n        <a class=\"nav-link\" [ngClass]=\"{'active': choice === 'isUrl'}\" (click)=\"choices('isUrl')\"><em class=\"fa fa-link bi bi-link\"></em> URL</a>\n      </li>\n      <li class=\"nav-item\">\n        <a class=\"nav-link\" [ngClass]=\"{'active': choice === 'isEmbed'}\" (click)=\"choices('isEmbed')\"><em class=\"fa fa-code bi bi-code-slash\"></em> Embed</a>\n      </li>\n    </ul>\n    <pre  *ngIf=\"choice === 'isEmbed'\"><textarea onclick=\"this.focus();this.select()\" readonly=\"readonly\" style=\"width:100%;\" rows=\"8\" [ngModel]=\"embedCode\"></textarea></pre>\n    <input *ngIf=\"choice === 'isUrl'\" type=\"text\" onclick=\"this.focus();this.select()\" readonly=\"readonly\" class=\"form-control\" [ngModel]=\"shareUrl\" placeholder=\"https://examples.form.io/example\">\n  </div>\n  <div class=\"modal-footer\">\n    <button type=\"button\" class=\"btn btn-light\" (click)=\"modalRef.hide()\">Close</button>\n  </div>\n</ng-template>\n" }]
        }], ctorParameters: () => [{ type: FormManagerService }, { type: i2.ActivatedRoute }, { type: i3.FormioAppConfig }, { type: FormManagerConfig }, { type: i5.BsModalService }] });
class FormManagerViewComponent {
    service;
    router;
    route;
    config;
    auth;
    submission;
    renderOptions;
    onSuccess = new EventEmitter();
    onError = new EventEmitter();
    onSubmitDone = new EventEmitter();
    constructor(service, router, route, config, auth) {
        this.service = service;
        this.router = router;
        this.route = route;
        this.config = config;
        this.auth = auth;
        this.renderOptions = {
            saveDraft: this.config.saveDraft
        };
        this.submission = { data: {} };
    }
    ngOnInit() {
        this.service.formio = new Formio(this.service.formio.formUrl);
    }
    onSubmit(submission) {
        const isDraft = submission.state === 'draft';
        this.submission.data = submission.data;
        this.submission.state = isDraft ? submission.state : 'complete';
        this.service.formio.saveSubmission(this.submission).then(saved => {
            this.onSubmitDone.emit(saved);
            this.onSuccess.emit();
            this.router.navigate(['../', 'submission', saved._id], { relativeTo: this.route });
        }).catch((err) => this.onError.emit(err));
    }
    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerViewComponent, deps: [{ token: FormManagerService }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: FormManagerConfig }, { token: i3$1.FormioAuthService }], target: i0.ɵɵFactoryTarget.Component });
    static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FormManagerViewComponent, selector: "ng-component", ngImport: i0, template: "<formio *ngIf=\"service.form\"\n  [renderer]=\"config.renderer\"\n  [renderOptions]=\"renderOptions\"\n  [url]=\"service.formio.formUrl\"\n  [form]=\"service.form\"\n  [submission]=\"submission\"\n  [success]=\"onSuccess\"\n  [submitDone]=\"onSubmitDone\"\n  [error]=\"onError\"\n  (submit)=\"onSubmit($event)\"\n></formio>\n", dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.FormioComponent, selector: "formio" }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerViewComponent, decorators: [{
            type: Component,
            args: [{ template: "<formio *ngIf=\"service.form\"\n  [renderer]=\"config.renderer\"\n  [renderOptions]=\"renderOptions\"\n  [url]=\"service.formio.formUrl\"\n  [form]=\"service.form\"\n  [submission]=\"submission\"\n  [success]=\"onSuccess\"\n  [submitDone]=\"onSubmitDone\"\n  [error]=\"onError\"\n  (submit)=\"onSubmit($event)\"\n></formio>\n" }]
        }], ctorParameters: () => [{ type: FormManagerService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: FormManagerConfig }, { type: i3$1.FormioAuthService }] });
class FormManagerDeleteComponent {
    managerService;
    router;
    route;
    alerts;
    gridService;
    constructor(managerService, router, route, alerts, gridService) {
        this.managerService = managerService;
        this.router = router;
        this.route = route;
        this.alerts = alerts;
        this.gridService = gridService;
    }
    onDelete() {
        this.managerService.formio.deleteForm().then(() => {
            if (this.gridService) {
                const currentPage = +localStorage.getItem('currentPage') || 0;
                const formsNumberPerPage = this.gridService.getFormsPerPage();
                if (formsNumberPerPage === 1 && currentPage !== 0) {
                    localStorage.setItem('currentPage', `${currentPage - 1}`);
                }
            }
            this.router.navigate(['../../'], { relativeTo: this.route });
        }).catch(err => this.alerts.setAlert({ type: 'danger', message: (err.message || err) }));
    }
    onCancel() {
        this.router.navigate(['../', 'view'], { relativeTo: this.route });
    }
    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerDeleteComponent, deps: [{ token: FormManagerService }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.FormioAlerts }, { token: i4.GridService }], target: i0.ɵɵFactoryTarget.Component });
    static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FormManagerDeleteComponent, selector: "ng-component", ngImport: i0, template: "<formio-alerts [alerts]=\"alerts\"></formio-alerts>\n<h3>Are you sure you wish to delete this form?</h3>\n<div class=\"btn-toolbar\">\n  <button type=\"button\" (click)=\"onDelete()\" class=\"btn btn-danger\" style=\"margin-right: 10px;\">Yes</button>\n  <button type=\"button\" (click)=\"onCancel()\" class=\"btn btn-default\">No</button>\n</div>\n", dependencies: [{ kind: "component", type: i3.FormioAlertsComponent, selector: "formio-alerts", inputs: ["alerts"], outputs: ["focusComponent"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerDeleteComponent, decorators: [{
            type: Component,
            args: [{ template: "<formio-alerts [alerts]=\"alerts\"></formio-alerts>\n<h3>Are you sure you wish to delete this form?</h3>\n<div class=\"btn-toolbar\">\n  <button type=\"button\" (click)=\"onDelete()\" class=\"btn btn-danger\" style=\"margin-right: 10px;\">Yes</button>\n  <button type=\"button\" (click)=\"onCancel()\" class=\"btn btn-default\">No</button>\n</div>\n" }]
        }], ctorParameters: () => [{ type: FormManagerService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.FormioAlerts }, { type: i4.GridService }] });
class SubmissionEditComponent {
    service;
    router;
    route;
    constructor(service, router, route) {
        this.service = service;
        this.router = router;
        this.route = route;
    }
    onSubmit(submission) {
        this.router.navigate(['../../'], { relativeTo: this.route });
    }
    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SubmissionEditComponent, deps: [{ token: FormManagerService }, { token: i2.Router }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
    static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SubmissionEditComponent, selector: "ng-component", ngImport: i0, template: "<formio\n  [renderer]=\"service.config.renderer\"\n  [src]=\"service.formio.submissionUrl\"\n  (submit)=\"onSubmit($event)\"\n  (formLoad)=\"service.setForm($event)\"\n  (submissionLoad)=\"service.submissionLoaded($event)\"\n></formio>\n", dependencies: [{ kind: "component", type: i3.FormioComponent, selector: "formio" }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SubmissionEditComponent, decorators: [{
            type: Component,
            args: [{ template: "<formio\n  [renderer]=\"service.config.renderer\"\n  [src]=\"service.formio.submissionUrl\"\n  (submit)=\"onSubmit($event)\"\n  (formLoad)=\"service.setForm($event)\"\n  (submissionLoad)=\"service.submissionLoaded($event)\"\n></formio>\n" }]
        }], ctorParameters: () => [{ type: FormManagerService }, { type: i2.Router }, { type: i2.ActivatedRoute }] });
class SubmissionDeleteComponent {
    service;
    router;
    route;
    alerts;
    constructor(service, router, route, alerts) {
        this.service = service;
        this.router = router;
        this.route = route;
        this.alerts = alerts;
    }
    onDelete() {
        this.service.formio.deleteSubmission().then(() => {
            this.router.navigate(['../../'], { relativeTo: this.route });
        }).catch(err => this.alerts.setAlert({ type: 'danger', message: (err.message || err) }));
    }
    onCancel() {
        this.router.navigate(['../', 'view'], { relativeTo: this.route });
    }
    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SubmissionDeleteComponent, deps: [{ token: FormManagerService }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.FormioAlerts }], target: i0.ɵɵFactoryTarget.Component });
    static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SubmissionDeleteComponent, selector: "ng-component", ngImport: i0, template: "<formio-alerts [alerts]=\"alerts\"></formio-alerts>\n<h3>Are you sure you wish to delete this record?</h3>\n<div class=\"btn-toolbar\">\n  <button type=\"button\" (click)=\"onDelete()\" class=\"btn btn-danger\" style=\"margin-right: 10px;\">Yes</button>\n  <button type=\"button\" (click)=\"onCancel()\" class=\"btn btn-default\">No</button>\n</div>\n", dependencies: [{ kind: "component", type: i3.FormioAlertsComponent, selector: "formio-alerts", inputs: ["alerts"], outputs: ["focusComponent"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SubmissionDeleteComponent, decorators: [{
            type: Component,
            args: [{ template: "<formio-alerts [alerts]=\"alerts\"></formio-alerts>\n<h3>Are you sure you wish to delete this record?</h3>\n<div class=\"btn-toolbar\">\n  <button type=\"button\" (click)=\"onDelete()\" class=\"btn btn-danger\" style=\"margin-right: 10px;\">Yes</button>\n  <button type=\"button\" (click)=\"onCancel()\" class=\"btn btn-default\">No</button>\n</div>\n" }]
        }], ctorParameters: () => [{ type: FormManagerService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.FormioAlerts }] });
class SubmissionViewComponent {
    service;
    constructor(service) {
        this.service = service;
    }
    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SubmissionViewComponent, deps: [{ token: FormManagerService }], target: i0.ɵɵFactoryTarget.Component });
    static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SubmissionViewComponent, selector: "ng-component", ngImport: i0, template: "<formio\n  [renderer]=\"service.config.renderer\"\n  [src]=\"service.formio.submissionUrl\"\n  [readOnly]=\"true\"\n  (formLoad)=\"service.setForm($event)\"\n  (submissionLoad)=\"service.submissionLoaded($event)\"\n></formio>\n", dependencies: [{ kind: "component", type: i3.FormioComponent, selector: "formio" }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SubmissionViewComponent, decorators: [{
            type: Component,
            args: [{ template: "<formio\n  [renderer]=\"service.config.renderer\"\n  [src]=\"service.formio.submissionUrl\"\n  [readOnly]=\"true\"\n  (formLoad)=\"service.setForm($event)\"\n  (submissionLoad)=\"service.submissionLoaded($event)\"\n></formio>\n" }]
        }], ctorParameters: () => [{ type: FormManagerService }] });
class SubmissionIndexComponent {
    service;
    route;
    router;
    constructor(service, route, router) {
        this.service = service;
        this.route = route;
        this.router = router;
    }
    onSelect(row) {
        this.router.navigate([row._id, 'view'], { relativeTo: this.route });
    }
    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SubmissionIndexComponent, deps: [{ token: FormManagerService }, { token: i2.ActivatedRoute }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component });
    static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SubmissionIndexComponent, selector: "ng-component", ngImport: i0, template: "<formio-grid [formio]=\"service.formio\" (rowSelect)=\"onSelect($event)\"></formio-grid>\n", dependencies: [{ kind: "component", type: i4.FormioGridComponent, selector: "formio-grid", inputs: ["footerPosition", "src", "items", "onForm", "query", "refresh", "columns", "gridType", "size", "components", "formio", "label", "createText", "isActionAllowed"], outputs: ["select", "rowSelect", "rowAction", "createItem", "error"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SubmissionIndexComponent, decorators: [{
            type: Component,
            args: [{ template: "<formio-grid [formio]=\"service.formio\" (rowSelect)=\"onSelect($event)\"></formio-grid>\n" }]
        }], ctorParameters: () => [{ type: FormManagerService }, { type: i2.ActivatedRoute }, { type: i2.Router }] });
class SubmissionComponent {
    service;
    route;
    downloadUrl;
    constructor(service, route) {
        this.service = service;
        this.route = route;
    }
    setDownloadUrl(url) {
        this.downloadUrl = url;
    }
    ngOnInit() {
        this.service.setSubmission(this.route).then((formio) => {
            formio.getDownloadUrl().then((url) => this.setDownloadUrl(url));
        });
    }
    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SubmissionComponent, deps: [{ token: FormManagerService }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
    static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SubmissionComponent, selector: "ng-component", ngImport: i0, template: "<a *ngIf=\"downloadUrl\" [href]=\"downloadUrl\" target=\"_blank\" class=\"pull-right\"><img src=\"https://pro.formview.io/assets/pdf.png\" alt=\"pdfImage\" style=\"height: 2em;\" /></a>\n<ul aria-label=\"Submission\" role=\"navigation\" class=\"nav nav-tabs\" style=\"margin-bottom:10px\">\n  <li class=\"nav-item\"><a class=\"nav-link