From d2bc04803dae22b93697b00b549da34b8946a94a Mon Sep 17 00:00:00 2001 From: garrettmills Date: Mon, 25 Jan 2021 21:44:06 -0600 Subject: [PATCH] Add hyperlink database column type --- src/app/components/components.module.ts | 4 ++ .../database/columns/columns.component.html | 1 + .../editor/database/database.component.ts | 7 ++- .../renderers/link-renderer.component.ts | 55 +++++++++++++++++++ 4 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 src/app/components/editor/database/renderers/link-renderer.component.ts diff --git a/src/app/components/components.module.ts b/src/app/components/components.module.ts index 1b137c3..511e408 100644 --- a/src/app/components/components.module.ts +++ b/src/app/components/components.module.ts @@ -42,6 +42,7 @@ import {DateTimeFilterComponent} from './editor/database/filters/date-time.filte import {DatabasePageComponent} from './editor/database/database-page.component'; import {PageLinkRendererComponent} from './editor/database/renderers/page-link-renderer.component'; import {PageLinkEditorComponent} from './editor/database/editors/page-link/page-link-editor.component'; +import {LinkRendererComponent} from './editor/database/renderers/link-renderer.component'; import {FormInputComponent} from './nodes/form-input/form-input.component'; import {FormInputOptionsComponent} from './nodes/form-input/options/form-input-options.component'; import {DatabaseLinkComponent} from './editor/forms/database-link.component'; @@ -79,6 +80,7 @@ import {DatabaseLinkComponent} from './editor/forms/database-link.component'; DateTimeFilterComponent, DatabasePageComponent, PageLinkRendererComponent, + LinkRendererComponent, PageLinkEditorComponent, FormInputComponent, FormInputOptionsComponent, @@ -130,6 +132,7 @@ import {DatabaseLinkComponent} from './editor/forms/database-link.component'; DateTimeFilterComponent, DatabasePageComponent, PageLinkRendererComponent, + LinkRendererComponent, PageLinkEditorComponent, FormInputComponent, FormInputOptionsComponent, @@ -167,6 +170,7 @@ import {DatabaseLinkComponent} from './editor/forms/database-link.component'; DateTimeFilterComponent, DatabasePageComponent, PageLinkRendererComponent, + LinkRendererComponent, PageLinkEditorComponent, FormInputComponent, FormInputOptionsComponent, diff --git a/src/app/components/editor/database/columns/columns.component.html b/src/app/components/editor/database/columns/columns.component.html index 22ee8ed..53cc852 100644 --- a/src/app/components/editor/database/columns/columns.component.html +++ b/src/app/components/editor/database/columns/columns.component.html @@ -36,6 +36,7 @@ Currency Incrementing Index Link to Page + Hyperlink diff --git a/src/app/components/editor/database/database.component.ts b/src/app/components/editor/database/database.component.ts index d0871ce..ea9298f 100644 --- a/src/app/components/editor/database/database.component.ts +++ b/src/app/components/editor/database/database.component.ts @@ -19,6 +19,7 @@ import {debounce, debug} from '../../../utility'; import {DateTimeFilterComponent} from './filters/date-time.filter'; import {DatabasePageComponent} from './database-page.component'; import {PageLinkRendererComponent} from './renderers/page-link-renderer.component'; +import {LinkRendererComponent} from './renderers/link-renderer.component'; import {PageLinkEditorComponent} from './editors/page-link/page-link-editor.component'; @Component({ @@ -145,7 +146,7 @@ export class DatabaseComponent extends EditorNodeContract implements OnInit { const modal = await this.modals.create({ component: ColumnsComponent, - componentProps: {columnSets: this.columnDefs}, + componentProps: {columnSets: this.columnDefs.slice(1)}, cssClass: 'modal-med', }); @@ -309,6 +310,10 @@ export class DatabaseComponent extends EditorNodeContract implements OnInit { x.cellEditorParams._pagesData = this.pages; x.cellRendererParams._pagesData = this.pages; + } else if ( x.Type === 'link' ) { + x.cellRendererFramework = LinkRendererComponent; + x.editor = 'agTextCellEditor'; + x.filter = 'agTextColumnFilter'; } return x; diff --git a/src/app/components/editor/database/renderers/link-renderer.component.ts b/src/app/components/editor/database/renderers/link-renderer.component.ts new file mode 100644 index 0000000..7cf54fb --- /dev/null +++ b/src/app/components/editor/database/renderers/link-renderer.component.ts @@ -0,0 +1,55 @@ +import {ICellRendererAngularComp} from 'ag-grid-angular'; +import {Component, HostListener} from '@angular/core'; +import {ICellRendererParams} from 'ag-grid-community'; +import {NavigationService} from '../../../../service/navigation.service'; +import {NodeTypeIcons} from '../../../../structures/node-types'; + +@Component({ + selector: 'editor-link-renderer', + template: ` +
+
{{ href }}
+
+ Open +
+
`, + styles: [` + .text { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + padding-right: 5px; + flex: 1; + } + + .btn:hover { + cursor: pointer; + font-weight: bold; + } + `] +}) +export class LinkRendererComponent implements ICellRendererAngularComp { + public params: ICellRendererParams; + public href?: string; + + constructor( + protected readonly nav: NavigationService, + ) { } + + agInit(params: ICellRendererParams): void { + this.params = params; + this.href = params.value; + } + + onClick(event, force = false) { + if ( event.ctrlKey || force ) { + event.stopPropagation(); + event.preventDefault(); + window.open(this.href, '_blank'); + } + } + + refresh(params: any): boolean { + return false; + } +}