UNPKG

formioangular-colfuturo

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.1.4.

110 lines 18.3 kB
import { Component, ViewChild, } from "@angular/core"; import { DefaultConfiguration, } from "../form-manager.config"; import { FormioGridComponent } from "formioangular-colfuturo/grid"; import { debounce } from "lodash"; import * as i0 from "@angular/core"; import * as i1 from "../form-manager.service"; import * as i2 from "@angular/router"; import * as i3 from "../form-manager.config"; import * as i4 from "@angular/common"; import * as i5 from "formioangular-colfuturo/grid"; export 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: i1.FormManagerService }, { token: i2.ActivatedRoute }, { token: i2.Router }, { token: i3.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: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.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: i1.FormManagerService }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i3.FormManagerConfig }], propDecorators: { searchElement: [{ type: ViewChild, args: ["search"] }], formGrid: [{ type: ViewChild, args: [FormioGridComponent, { static: false }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1mb3JtaW8vbWFuYWdlci9zcmMvaW5kZXgvaW5kZXguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1mb3JtaW8vbWFuYWdlci9zcmMvaW5kZXgvaW5kZXguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFHVCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUNMLG9CQUFvQixHQUVyQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7Ozs7Ozs7QUFNbEMsTUFBTSxPQUFPLHlCQUF5QjtJQU8zQjtJQUNBO0lBQ0E7SUFDQTtJQVRZLGFBQWEsQ0FBYTtJQUUvQyxRQUFRLENBQXNCO0lBQ3ZCLFNBQVMsQ0FBTTtJQUNmLFFBQVEsQ0FBQztJQUNoQixZQUNTLE9BQTJCLEVBQzNCLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCxNQUF5QjtRQUh6QixZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQUMzQixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFFaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsb0JBQW9CLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDMUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDM0QsSUFBSSxJQUFJLENBQUMsTUFB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Q0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQzt3R0ExRlUseUJBQXlCOzRGQUF6Qix5QkFBeUIsd0xBRXpCLG1CQUFtQixnREN0QmhDLDBzQkFjQTs7NEZETWEseUJBQXlCO2tCQUpyQyxTQUFTOzt5S0FLYSxhQUFhO3NCQUFqQyxTQUFTO3VCQUFDLFFBQVE7Z0JBRW5CLFFBQVE7c0JBRFAsU0FBUzt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IEZvcm1NYW5hZ2VyU2VydmljZSB9IGZyb20gXCIuLi9mb3JtLW1hbmFnZXIuc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgRGVmYXVsdENvbmZpZ3VyYXRpb24sXG4gIEZvcm1NYW5hZ2VyQ29uZmlnLFxufSBmcm9tIFwiLi4vZm9ybS1tYW5hZ2VyLmNvbmZpZ1wiO1xuaW1wb3J0IHsgRm9ybWlvR3JpZENvbXBvbmVudCB9IGZyb20gXCJmb3JtaW9hbmd1bGFyLWNvbGZ1dHVyby9ncmlkXCI7XG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gXCJsb2Rhc2hcIjtcblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiBcIi4vaW5kZXguY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2luZGV4LmNvbXBvbmVudC5zY3NzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtTWFuYWdlckluZGV4Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZChcInNlYXJjaFwiKSBzZWFyY2hFbGVtZW50OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKEZvcm1pb0dyaWRDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBmb3JtR3JpZDogRm9ybWlvR3JpZENvbXBvbmVudDtcbiAgcHVibGljIGdyaWRRdWVyeTogYW55O1xuICBwdWJsaWMgb25TZWFyY2g7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzZXJ2aWNlOiBGb3JtTWFuYWdlclNlcnZpY2UsXG4gICAgcHVibGljIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHVibGljIGNvbmZpZzogRm9ybU1hbmFnZXJDb25maWdcbiAgKSB7XG4gICAgdGhpcy5jb25maWcgPSB7IC4uLkRlZmF1bHRDb25maWd1cmF0aW9uLCAuLi50aGlzLmNvbmZpZyB9O1xuICAgIHRoaXMuZ3JpZFF1ZXJ5ID0geyB0eXBlOiB0aGlzLmNvbmZpZy50eXBlLCBzb3J0OiBcInRpdGxlXCIgfTtcbiAgICBpZiAodGhpcy5jb25maWcudGFnKSB7XG4gICAgICB0aGlzLmdyaWRRdWVyeS50YWdzID0gdGhpcy5jb25maWcudGFnO1xuICAgIH1cbiAgICB0aGlzLm9uU2VhcmNoID0gZGVib3VuY2UodGhpcy5fb25TZWFyY2gsIDMwMCk7XG4gIH1cblxuICBsb2FkR3JpZCgpIHtcbiAgICB0aGlzLmdyaWRRdWVyeSA9XG4gICAgICBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwicXVlcnlcIikpIHx8IHRoaXMuZ3JpZFF1ZXJ5O1xuICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gK2xvY2FsU3RvcmFnZS5nZXRJdGVtKFwiY3VycmVudFBhZ2VcIikgfHwgMDtcbiAgICB0aGlzLmZvcm1HcmlkXG4gICAgICAucmVmcmVzaEdyaWQodGhpcy5ncmlkUXVlcnkpXG4gICAgICAudGhlbigoKSA9PiB0aGlzLmZvcm1HcmlkLnNldFBhZ2UoY3VycmVudFBhZ2UgLSAxKSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmdyaWRRdWVyeSA9IHsgdHlwZTogdGhpcy5jb25maWcudHlwZSwgc29ydDogXCJ0aXRsZVwiIH07XG4gICAgaWYgKHRoaXMuY29uZmlnLnRhZykge1xuICAgICAgdGhpcy5ncmlkUXVlcnkudGFncyA9IHRoaXMuY29uZmlnLnRhZztcbiAgICB9XG4gICAgdGhpcy5zZXJ2aWNlLnJlc2V0KCk7XG4gICAgdGhpcy5zZXJ2aWNlLnJlYWR5LnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5sb2FkR3JpZCgpO1xuICAgICAgdGhpcy5mb3JtR3JpZC5mb290ZXIucGFnZUNoYW5nZWQuc3Vic2NyaWJlKChwYWdlKSA9PiB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiY3VycmVudFBhZ2VcIiwgcGFnZS5wYWdlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoRWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID1cbiAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwic2VhcmNoSW5wdXRcIikgfHwgXCJcIjtcbiAgfVxuXG4gIF9vblNlYXJjaCgpIHtcbiAgICBjb25zdCBzZWFyY2ggPSB0aGlzLnNlYXJjaEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgICBpZiAoc2VhcmNoLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZ3JpZFF1ZXJ5LnNraXAgPSAwO1xuICAgICAgdGhpcy5ncmlkUXVlcnkudGl0bGVfX3JlZ2V4ID0gXCIvXCIgKyBzZWFyY2ggKyBcIi9pXCI7XG4gICAgICB0aGlzLmdyaWRRdWVyeS50aXRsZV9fcmVnZXggPSBcIi9cIiArIHNlYXJjaC50cmltKCkgKyBcIi9pXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmdyaWRRdWVyeS50aXRsZV9fcmVnZXg7XG4gICAgfVxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwicXVlcnlcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy5ncmlkUXVlcnkpKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInNlYXJjaElucHV0XCIsIHNlYXJjaCk7XG4gICAgdGhpcy5mb3JtR3JpZC5wYWdlQ2hhbmdlZCh7IHBhZ2U6IDEsIGl0ZW1QZXJQYWdlOiB0aGlzLmdyaWRRdWVyeS5saW1pdCB9KTtcbiAgfVxuXG4gIGNsZWFyU2VhcmNoKCkge1xuICAgIHRoaXMuZ3JpZFF1ZXJ5ID0geyB0eXBlOiB0aGlzLmNvbmZpZy50eXBlLCBzb3J0OiBcInRpdGxlXCIgfTtcbiAgICBpZiAodGhpcy5jb25maWcudGFnKSB7XG4gICAgICB0aGlzLmdyaWRRdWVyeS50YWdzID0gdGhpcy5jb25maWcudGFnO1xuICAgIH1cbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcInF1ZXJ5XCIpO1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwic2VhcmNoSW5wdXRcIik7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJjdXJyZW50UGFnZVwiKTtcbiAgICBpZiAodGhpcy5zZWFyY2hFbGVtZW50Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLnNlYXJjaEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IFwiXCI7XG4gICAgfVxuICAgIHRoaXMuZm9ybUdyaWQucXVlcnkgPSB0aGlzLmdyaWRRdWVyeTtcbiAgICB0aGlzLmZvcm1HcmlkLnBhZ2VDaGFuZ2VkKHsgcGFnZTogMSB9KTtcbiAgfVxuXG4gIG9uQWN0aW9uKGFjdGlvbjogYW55KSB7XG4gICAgdGhpcy5zZXJ2aWNlLmZvcm0gPSBudWxsOyAvLyBSZXNldCBwcmV2aW91cyBmb3JtIGRhdGFcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYWN0aW9uLnJvdy5faWQsIGFjdGlvbi5hY3Rpb25dLCB7XG4gICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgIH0pO1xuICB9XG5cbiAgb25TZWxlY3Qocm93OiBhbnkpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcm93Ll9pZF0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgfVxuXG4gIG9uQ3JlYXRlSXRlbSgpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJjcmVhdGVcIl0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgfVxufVxuIiwiPGRpdiByb2xlPVwic2VhcmNoXCIgY2xhc3M9XCJpbnB1dC1ncm91cCBtYi0zXCIgKm5nSWY9XCJjb25maWcuaW5jbHVkZVNlYXJjaFwiPlxuICA8aW5wdXQgI3NlYXJjaCB0eXBlPVwidGV4dFwiIChrZXl1cCk9XCJvblNlYXJjaCgpXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBGb3Jtc1wiIGFyaWEtbGFiZWw9XCJTZWFyY2ggRm9ybXNcIiBhcmlhLWRlc2NyaWJlZGJ5PVwiYnV0dG9uLXNlYXJjaFwiPlxuICA8c3BhbiAqbmdJZj1cInNlYXJjaCAmJiBzZWFyY2ggIT09ICcnXCIgY2xhc3M9XCJmb3JtLWNsZWFyIGlucHV0LWdyb3VwLWFkZG9uXCIgKGNsaWNrKT1cImNsZWFyU2VhcmNoKClcIj48c3BhbiBjbGFzcz1cImZhIGZhLXRpbWVzIGJpIGJpLXhcIj48L3NwYW4+PC9zcGFuPlxuPC9kaXY+XG48Zm9ybWlvLWdyaWRcbiAgKm5nSWY9XCJzZXJ2aWNlLnJlYWR5XCJcbiAgW2Zvcm1pb109XCJzZXJ2aWNlLmZvcm1pb1wiXG4gIFtncmlkVHlwZV09XCInZm9ybSdcIlxuICBbcXVlcnldPVwiZ3JpZFF1ZXJ5XCJcbiAgW2lzQWN0aW9uQWxsb3dlZF09XCJzZXJ2aWNlLmFjdGlvbkFsbG93ZWRcIlxuICAocm93QWN0aW9uKT1cIm9uQWN0aW9uKCRldmVudClcIlxuICAocm93U2VsZWN0KT1cIm9uU2VsZWN0KCRldmVudClcIlxuICAoY3JlYXRlSXRlbSk9XCJvbkNyZWF0ZUl0ZW0oKVwiXG4+PC9mb3JtaW8tZ3JpZD5cbiJdfQ==