@myrmidon/cadmus-graph-ui
Version:
Cadmus - semantic graph components.
1 lines • 115 kB
Source Map (JSON)
{"version":3,"file":"myrmidon-cadmus-graph-ui.mjs","sources":["../../../../projects/myrmidon/cadmus-graph-ui/src/lib/services/graph-node-lookup.service.ts","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/state/graph-node-list.repository.ts","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/components/graph-node-filter/graph-node-filter.component.ts","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/components/graph-node-filter/graph-node-filter.component.html","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/components/graph-node-editor/graph-node-editor.component.ts","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/components/graph-node-editor/graph-node-editor.component.html","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/components/graph-node-list/graph-node-list.component.ts","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/components/graph-node-list/graph-node-list.component.html","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/state/graph-triple-list.repository.ts","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/components/graph-triple-filter/graph-triple-filter.component.ts","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/components/graph-triple-filter/graph-triple-filter.component.html","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/components/graph-triple-editor/graph-triple-editor.component.ts","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/components/graph-triple-editor/graph-triple-editor.component.html","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/components/graph-triple-list/graph-triple-list.component.ts","../../../../projects/myrmidon/cadmus-graph-ui/src/lib/components/graph-triple-list/graph-triple-list.component.html","../../../../projects/myrmidon/cadmus-graph-ui/src/public-api.ts","../../../../projects/myrmidon/cadmus-graph-ui/src/myrmidon-cadmus-graph-ui.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { map, Observable, of } from 'rxjs';\r\n\r\nimport {\r\n RefLookupFilter,\r\n RefLookupService,\r\n} from '@myrmidon/cadmus-refs-lookup';\r\nimport { GraphService, UriNode } from '@myrmidon/cadmus-api';\r\n\r\nexport interface GraphNodeLookupFilter extends RefLookupFilter {\r\n isClass?: boolean | null;\r\n tag?: string;\r\n}\r\n\r\n/**\r\n * Graph node lookup service.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class GraphNodeLookupService implements RefLookupService {\r\n constructor(private _graphService: GraphService) {}\r\n\r\n lookup(filter: GraphNodeLookupFilter, options?: any): Observable<any[]> {\r\n if (!filter.text) {\r\n return of([]);\r\n }\r\n return this._graphService\r\n .getNodes(1, filter.limit || 10, {\r\n label: filter.text,\r\n isClass:\r\n filter.isClass === undefined || filter.isClass === null\r\n ? undefined\r\n : filter.isClass\r\n ? true\r\n : false,\r\n tag: filter.tag,\r\n })\r\n .pipe(map((p) => p.items));\r\n }\r\n\r\n getName(item: any): string {\r\n return (item as UriNode)?.label;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, forkJoin, Observable, tap } from 'rxjs';\r\n\r\nimport { NodeFilter, UriNode } from '@myrmidon/cadmus-api';\r\nimport {\r\n PagedListStore,\r\n PagedListStoreService,\r\n} from '@myrmidon/paged-data-browsers';\r\nimport { DataPage } from '@myrmidon/ngx-tools';\r\nimport { GraphService } from '@myrmidon/cadmus-api';\r\n\r\n/**\r\n * Graph nodes list repository.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class NodeListRepository\r\n implements PagedListStoreService<NodeFilter, UriNode>\r\n{\r\n private readonly _store: PagedListStore<NodeFilter, UriNode>;\r\n private readonly _loading$: BehaviorSubject<boolean | undefined>;\r\n private readonly _filter$: BehaviorSubject<NodeFilter>;\r\n private readonly _linkedNode$: BehaviorSubject<UriNode | undefined>;\r\n private readonly _classNodes$: BehaviorSubject<UriNode[]>;\r\n\r\n public get loading$(): Observable<boolean | undefined> {\r\n return this._loading$.asObservable();\r\n }\r\n public get filter$(): Observable<NodeFilter> {\r\n return this._filter$.asObservable();\r\n }\r\n public get page$(): Observable<DataPage<UriNode>> {\r\n return this._store.page$;\r\n }\r\n public get linkedNode$(): Observable<UriNode | undefined> {\r\n return this._linkedNode$.asObservable();\r\n }\r\n public get classNodes$(): Observable<UriNode[] | undefined> {\r\n return this._classNodes$.asObservable();\r\n }\r\n\r\n constructor(private _graphService: GraphService) {\r\n this._store = new PagedListStore<NodeFilter, UriNode>(this);\r\n this._loading$ = new BehaviorSubject<boolean | undefined>(undefined);\r\n this._filter$ = new BehaviorSubject<NodeFilter>({});\r\n this._linkedNode$ = new BehaviorSubject<UriNode | undefined>(undefined);\r\n this._classNodes$ = new BehaviorSubject<UriNode[]>([]);\r\n this._store.reset();\r\n }\r\n\r\n public getLinkedNode(): UriNode | undefined {\r\n return this._linkedNode$.value;\r\n }\r\n\r\n public getClassNodes(): UriNode[] {\r\n return this._classNodes$.value;\r\n }\r\n\r\n public loadPage(\r\n pageNumber: number,\r\n pageSize: number,\r\n filter: NodeFilter\r\n ): Observable<DataPage<UriNode>> {\r\n this._loading$.next(true);\r\n return this._graphService.getNodes(pageNumber, pageSize, filter).pipe(\r\n tap({\r\n next: () => this._loading$.next(false),\r\n error: () => this._loading$.next(false),\r\n })\r\n );\r\n }\r\n\r\n public async reset(): Promise<void> {\r\n this._loading$.next(true);\r\n try {\r\n await this._store.reset();\r\n } catch (error) {\r\n throw error;\r\n } finally {\r\n this._loading$.next(false);\r\n }\r\n }\r\n\r\n public async setFilter(filter: NodeFilter): Promise<void> {\r\n this._loading$.next(true);\r\n try {\r\n await this._store.setFilter(filter);\r\n } catch (error) {\r\n throw error;\r\n } finally {\r\n this._loading$.next(false);\r\n }\r\n }\r\n\r\n public getFilter(): NodeFilter {\r\n return this._store.getFilter();\r\n }\r\n\r\n public async setPage(pageNumber: number, pageSize: number): Promise<void> {\r\n this._loading$.next(true);\r\n try {\r\n await this._store.setPage(pageNumber, pageSize);\r\n } catch (error) {\r\n throw error;\r\n } finally {\r\n this._loading$.next(false);\r\n }\r\n }\r\n\r\n /**\r\n * Set the linked node used in filter.\r\n *\r\n * @param node The node or undefined.\r\n */\r\n public setLinkedNode(node?: UriNode): void {\r\n this._linkedNode$.next(node);\r\n }\r\n\r\n /**\r\n * Set the linked node used in filter by its ID.\r\n *\r\n * @param id The node ID.\r\n */\r\n public setLinkedNodeId(id?: number): void {\r\n if (!id) {\r\n this._linkedNode$.next(undefined);\r\n } else {\r\n this._graphService.getNode(id).subscribe({\r\n next: (node) => {\r\n this._linkedNode$.next(node);\r\n },\r\n error: (error) => {\r\n console.error(`Node ID ${id} not found`, error);\r\n console.warn('Node ID not found: ' + id);\r\n },\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Add the specified node to the filter class nodes.\r\n * If the node already exists, nothing is done.\r\n *\r\n * @param node The node to add.\r\n */\r\n public addClassNode(node: UriNode): void {\r\n const nodes = [...this._classNodes$.value];\r\n if (nodes.some((n) => n.id === node.id)) {\r\n return;\r\n }\r\n nodes.push(node);\r\n this._classNodes$.next(nodes);\r\n }\r\n\r\n /**\r\n * Set the class node IDs in the filter.\r\n *\r\n * @param ids The class nodes IDs or undefined.\r\n */\r\n public setClassNodeIds(ids?: number[]): void {\r\n if (!ids || !ids.length) {\r\n this._classNodes$.next([]);\r\n return;\r\n }\r\n\r\n const requests: Observable<UriNode>[] = [];\r\n ids.forEach((id) => {\r\n requests.push(this._graphService.getNode(id));\r\n });\r\n forkJoin(requests).subscribe({\r\n next: (nodes: UriNode[]) => {\r\n this._classNodes$.next(nodes);\r\n },\r\n error: (error) => {\r\n console.error('Error getting nodes', error);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Delete the specified node from the filter class nodes.\r\n * If the node does not exist, nothing is done.\r\n *\r\n * @param id The node's ID.\r\n */\r\n public deleteClassNode(id: number): void {\r\n const nodes = [...this._classNodes$.value];\r\n const i = nodes.findIndex((n) => n.id === id);\r\n if (i > -1) {\r\n nodes.splice(i, 1);\r\n this._classNodes$.next(nodes);\r\n }\r\n }\r\n}\r\n","import { Component, input, OnDestroy, OnInit } from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { AsyncPipe } from '@angular/common';\r\nimport { Observable, Subscription } from 'rxjs';\r\n\r\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { MatOption } from '@angular/material/core';\r\nimport { MatCheckbox } from '@angular/material/checkbox';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport {\r\n MatChipListbox,\r\n MatChipOption,\r\n MatChipRemove,\r\n} from '@angular/material/chips';\r\n\r\nimport { RefLookupComponent } from '@myrmidon/cadmus-refs-lookup';\r\n\r\nimport { NodeFilter, UriNode } from '@myrmidon/cadmus-api';\r\n\r\nimport { NodeListRepository } from '../../state/graph-node-list.repository';\r\nimport { GraphNodeLookupService } from '../../services/graph-node-lookup.service';\r\n\r\n/**\r\n * Graph nodes filter used in graph nodes list.\r\n * Its data are in the graph nodes store, which gets updated when\r\n * users apply new filters.\r\n */\r\n@Component({\r\n selector: 'cadmus-graph-node-filter',\r\n templateUrl: './graph-node-filter.component.html',\r\n styleUrls: ['./graph-node-filter.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatFormField,\r\n MatLabel,\r\n MatInput,\r\n MatSelect,\r\n MatOption,\r\n MatCheckbox,\r\n RefLookupComponent,\r\n MatIconButton,\r\n MatTooltip,\r\n MatIcon,\r\n MatChipListbox,\r\n MatChipOption,\r\n MatChipRemove,\r\n AsyncPipe,\r\n ],\r\n})\r\nexport class GraphNodeFilterComponent implements OnInit, OnDestroy {\r\n private _sub?: Subscription;\r\n public filter$: Observable<NodeFilter>;\r\n public linkedNode$: Observable<UriNode | undefined>;\r\n public classNodes$: Observable<UriNode[] | undefined>;\r\n\r\n public readonly disabled = input<boolean>();\r\n\r\n public label: FormControl<string | null>;\r\n public isClass: FormControl<number>;\r\n public uid: FormControl<string | null>;\r\n public tag: FormControl<string | null>;\r\n public sourceType: FormControl<number | null>;\r\n public sid: FormControl<string | null>;\r\n public sidPrefix: FormControl<boolean>;\r\n public linkedNodeRole: FormControl<'S' | 'O' | null>;\r\n public form: FormGroup;\r\n\r\n constructor(\r\n formBuilder: FormBuilder,\r\n public lookupService: GraphNodeLookupService,\r\n private _repository: NodeListRepository\r\n ) {\r\n this.filter$ = _repository.filter$;\r\n this.linkedNode$ = _repository.linkedNode$;\r\n this.classNodes$ = _repository.classNodes$;\r\n // form\r\n this.label = formBuilder.control(null);\r\n this.isClass = formBuilder.control(0, { nonNullable: true });\r\n this.uid = formBuilder.control(null);\r\n this.tag = formBuilder.control(null);\r\n this.sourceType = formBuilder.control(null);\r\n this.sid = formBuilder.control(null);\r\n this.sidPrefix = formBuilder.control(false, { nonNullable: true });\r\n this.linkedNodeRole = formBuilder.control(null);\r\n this.form = formBuilder.group({\r\n label: this.label,\r\n isClass: this.isClass,\r\n uid: this.uid,\r\n tag: this.tag,\r\n sourceType: this.sourceType,\r\n sid: this.sid,\r\n sidPrefix: this.sidPrefix,\r\n linkedNodeRole: this.linkedNodeRole,\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n this._sub = this.filter$.subscribe((f) => {\r\n this.updateForm(f);\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._sub?.unsubscribe();\r\n }\r\n\r\n private updateForm(filter: NodeFilter): void {\r\n this.label.setValue(filter.label || null);\r\n // is-class: 0=unset, 1=class, 2=not-class\r\n if (filter.isClass !== undefined && filter.isClass !== null) {\r\n this.isClass.setValue(filter.isClass ? 1 : 2);\r\n } else {\r\n this.isClass.setValue(0);\r\n }\r\n this.uid.setValue(filter.uid || null);\r\n this.tag.setValue(filter.tag || null);\r\n if (filter.sourceType === undefined || filter.sourceType === null) {\r\n this.sourceType.setValue(null);\r\n } else {\r\n this.sourceType.setValue(filter.sourceType);\r\n }\r\n this.sid.setValue(filter.sid || null);\r\n this.sidPrefix.setValue(filter.isSidPrefix ? true : false);\r\n this._repository.setLinkedNodeId(filter.linkedNodeId);\r\n this.linkedNodeRole.setValue(filter.linkedNodeRole || 'S');\r\n this._repository.setClassNodeIds(filter.classIds);\r\n this.form.markAsPristine();\r\n }\r\n\r\n private getFilter(): NodeFilter {\r\n return {\r\n label: this.label.value?.trim(),\r\n isClass: this.isClass.value === 0 ? undefined : this.isClass.value === 1,\r\n uid: this.uid.value?.trim(),\r\n tag: this.tag.value?.trim(),\r\n sourceType:\r\n this.sourceType.value === null ? undefined : this.sourceType.value,\r\n sid: this.sid.value?.trim(),\r\n isSidPrefix: this.sidPrefix.value,\r\n linkedNodeId: this._repository.getLinkedNode()?.id,\r\n linkedNodeRole: this.linkedNodeRole.value || undefined,\r\n classIds: this._repository.getClassNodes()?.map((n) => n.id),\r\n };\r\n }\r\n\r\n public onResetLinkedNode(): void {\r\n this._repository.setLinkedNode();\r\n }\r\n\r\n public onLinkedNodeSet(node: unknown): void {\r\n this._repository.setLinkedNode((node as UriNode) || undefined);\r\n }\r\n\r\n public clearLinkedNode(): void {\r\n this._repository.setLinkedNode();\r\n }\r\n\r\n public onClassAdd(node: unknown): void {\r\n if (node) {\r\n this._repository.addClassNode(node as UriNode);\r\n }\r\n }\r\n\r\n public onClassRemove(id: number): void {\r\n this._repository.deleteClassNode(id);\r\n }\r\n\r\n public reset(): void {\r\n this.form.reset();\r\n this.apply();\r\n }\r\n\r\n public apply(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n const filter = this.getFilter();\r\n\r\n // update filter in state\r\n this._repository.setFilter(filter);\r\n }\r\n}\r\n","<form\r\n [formGroup]=\"form\"\r\n (submit)=\"apply()\"\r\n [attr.disabled]=\"disabled() ? true : null\"\r\n>\r\n <div class=\"form-row\">\r\n <!-- label -->\r\n <div>\r\n <mat-form-field>\r\n <mat-label>label</mat-label>\r\n <input matInput [formControl]=\"label\" />\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- uid -->\r\n <div>\r\n <mat-form-field>\r\n <mat-label>uid</mat-label>\r\n <input matInput [formControl]=\"uid\" />\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- isClass -->\r\n <div>\r\n <mat-form-field>\r\n <mat-label>class</mat-label>\r\n <mat-select [formControl]=\"isClass\">\r\n <mat-option [value]=\"0\">(any)</mat-option>\r\n <mat-option [value]=\"1\">not-class</mat-option>\r\n <mat-option [value]=\"2\">class</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- tag -->\r\n <div>\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- sourceType -->\r\n <div>\r\n <mat-form-field>\r\n <mat-label>source type</mat-label>\r\n <mat-select [formControl]=\"sourceType\">\r\n <mat-option [value]=\"null\">(any)</mat-option>\r\n <mat-option [value]=\"0\">user</mat-option>\r\n <mat-option [value]=\"1\">item</mat-option>\r\n <mat-option [value]=\"2\">part</mat-option>\r\n <mat-option [value]=\"3\">thesaurus</mat-option>\r\n <mat-option [value]=\"4\">implicit</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- sid, sidPrefix -->\r\n <div>\r\n <mat-form-field>\r\n <mat-label>source ID</mat-label>\r\n <input matInput [formControl]=\"sid\" />\r\n </mat-form-field>\r\n \r\n <mat-checkbox [formControl]=\"sidPrefix\">prefix</mat-checkbox>\r\n </div>\r\n\r\n <!-- linkedNode, linkedNodeRole -->\r\n <div>\r\n <fieldset>\r\n <legend>linked node</legend>\r\n <cadmus-ref-lookup\r\n label=\"node\"\r\n [item]=\"linkedNode$ | async\"\r\n [service]=\"lookupService\"\r\n (itemChange)=\"onLinkedNodeSet($event)\"\r\n />\r\n @if (linkedNode$ | async) {\r\n <div>\r\n <mat-form-field>\r\n <mat-label>role</mat-label>\r\n <mat-select [formControl]=\"linkedNodeRole\">\r\n <mat-option value=\"S\">subject</mat-option>\r\n <mat-option value=\"O\">object</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Reset linked node\"\r\n (click)=\"clearLinkedNode()\"\r\n >\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </fieldset>\r\n </div>\r\n\r\n <!-- classes -->\r\n <div>\r\n <fieldset>\r\n <legend>classes</legend>\r\n <cadmus-ref-lookup\r\n label=\"class\"\r\n [service]=\"lookupService\"\r\n [baseFilter]=\"{ isClass: true }\"\r\n (itemChange)=\"onClassAdd($event)\"\r\n />\r\n @if (classNodes$ | async; as classNodes) {\r\n <mat-chip-listbox>\r\n @for (node of classNodes; track node.id) {\r\n <mat-chip-option\r\n [removable]=\"true\"\r\n (removed)=\"onClassRemove(node.id)\"\r\n matTooltip=\"{{ node.uri }}\"\r\n >{{ node.label }}\r\n <button type=\"button\" matChipRemove>\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n </mat-chip-option>\r\n }\r\n </mat-chip-listbox>\r\n }\r\n </fieldset>\r\n </div>\r\n </div>\r\n\r\n <div id=\"toolbar\" class=\"btn-group\" role=\"group\" aria-label=\"toolbar\">\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n (click)=\"reset()\"\r\n matTooltip=\"Reset filters\"\r\n [disabled]=\"disabled()\"\r\n >\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n mat-icon-button\r\n [disabled]=\"disabled()\"\r\n matTooltip=\"Apply filters\"\r\n >\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </div>\r\n</form>\r\n","import { Component, effect, input, model, output } from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n Validators,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport { MatFormField, MatLabel, MatError } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatCheckbox } from '@angular/material/checkbox';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { MatOption } from '@angular/material/core';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { UriNode, NodeSourceType } from '@myrmidon/cadmus-api';\r\n\r\n/**\r\n * Graph node editor.\r\n */\r\n@Component({\r\n selector: 'cadmus-graph-node-editor',\r\n templateUrl: './graph-node-editor.component.html',\r\n styleUrls: ['./graph-node-editor.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatFormField,\r\n MatLabel,\r\n MatInput,\r\n MatError,\r\n MatCheckbox,\r\n MatSelect,\r\n MatOption,\r\n MatIconButton,\r\n MatIcon,\r\n ],\r\n})\r\nexport class GraphNodeEditorComponent {\r\n /**\r\n * The node being edited. A new node has ID=0 and no uri.\r\n */\r\n public readonly node = model<UriNode>();\r\n\r\n /**\r\n * The optional set of thesaurus entries for node's tags.\r\n */\r\n public readonly tagEntries = input<ThesaurusEntry[]>();\r\n\r\n /**\r\n * Emitted when the user requested to close the editor.\r\n */\r\n public readonly editorClose = output();\r\n\r\n public isNew: boolean;\r\n\r\n public uri: FormControl<string | null>;\r\n public label: FormControl<string | null>;\r\n public isClass: FormControl<boolean>;\r\n public tag: FormControl<string | null>;\r\n public form: FormGroup;\r\n\r\n constructor(formBuilder: FormBuilder) {\r\n this.isNew = true;\r\n // form\r\n this.uri = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(500),\r\n ]);\r\n this.label = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(500),\r\n ]);\r\n this.isClass = formBuilder.control(false, { nonNullable: true });\r\n this.tag = formBuilder.control(null, Validators.maxLength(50));\r\n this.form = formBuilder.group({\r\n uri: this.uri,\r\n label: this.label,\r\n isClass: this.isClass,\r\n tag: this.tag,\r\n });\r\n\r\n effect(() => {\r\n this.updateForm(this.node());\r\n });\r\n }\r\n\r\n private updateForm(node?: UriNode): void {\r\n if (!node) {\r\n this.form.reset();\r\n this.isNew = true;\r\n return;\r\n }\r\n this.uri.setValue(node.uri);\r\n this.label.setValue(node.label);\r\n this.isClass.setValue(node.isClass ? true : false);\r\n this.tag.setValue(node.tag || null);\r\n this.isNew = node.id ? false : true;\r\n this.form.markAsPristine();\r\n }\r\n\r\n private getNode(): UriNode {\r\n return {\r\n id: this.node()?.id || 0,\r\n sourceType: this.node()?.sourceType || NodeSourceType.User,\r\n uri: this.uri.value?.trim() || '',\r\n label: this.label.value?.trim() || '',\r\n isClass: this.isClass.value,\r\n tag: this.tag.value?.trim(),\r\n };\r\n }\r\n\r\n public cancel(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n this.node.set(this.getNode());\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <!-- uri (readonly if not new) -->\r\n <div class=\"form-row\">\r\n @if (isNew) {\r\n <mat-form-field>\r\n <mat-label>uri</mat-label>\r\n <input matInput [formControl]=\"uri\" />\r\n @if ($any(uri).errors?.required && (uri.dirty || uri.touched)) {\r\n <mat-error>uri required</mat-error>\r\n } @if ($any(uri).errors?.maxLength && (uri.dirty || uri.touched)) {\r\n <mat-error>uri too long</mat-error>\r\n }\r\n </mat-form-field>\r\n } @if (!isNew) {\r\n <span style=\"color: silver\">{{ uri.value }} </span>\r\n }\r\n\r\n <!-- label -->\r\n <mat-form-field>\r\n <mat-label>label</mat-label>\r\n <input matInput [formControl]=\"label\" />\r\n @if ($any(label).errors?.required && (label.dirty || label.touched)) {\r\n <mat-error>label required</mat-error>\r\n } @if ($any(label).errors?.maxLength && (label.dirty || label.touched)) {\r\n <mat-error>label too long</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <!-- class -->\r\n <mat-checkbox [formControl]=\"isClass\">is class</mat-checkbox>\r\n\r\n <!-- tag -->\r\n @if (tagEntries()?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n <mat-option [value]=\"null\">(no tag)</mat-option>\r\n @for (e of tagEntries(); track e.id) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n } @else {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if ($any(tag).errors?.maxLength && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div>\r\n <button mat-icon-button type=\"button\" (click)=\"cancel()\">\r\n <mat-icon class=\"mat-warn\">cancel</mat-icon>\r\n </button>\r\n \r\n <button mat-icon-button type=\"submit\" [disabled]=\"form.invalid\">\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </div>\r\n</form>\r\n","import { Component, input, model, output } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { AsyncPipe } from '@angular/common';\r\nimport { take } from 'rxjs/operators';\r\n\r\nimport { PageEvent, MatPaginator } from '@angular/material/paginator';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { MatCard, MatCardContent } from '@angular/material/card';\r\nimport { MatProgressBar } from '@angular/material/progress-bar';\r\nimport { MatIconButton, MatButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport {\r\n MatExpansionPanel,\r\n MatExpansionPanelHeader,\r\n} from '@angular/material/expansion';\r\n\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { DataPage } from '@myrmidon/ngx-tools';\r\n\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { GraphService, UriNode, NodeSourceType } from '@myrmidon/cadmus-api';\r\n\r\nimport { NodeListRepository } from '../../state/graph-node-list.repository';\r\nimport { GraphNodeFilterComponent } from '../graph-node-filter/graph-node-filter.component';\r\nimport { GraphNodeEditorComponent } from '../graph-node-editor/graph-node-editor.component';\r\n\r\n/**\r\n * List of graph nodes. This includes a graph node filter, a list, and a graph\r\n * editor.\r\n */\r\n@Component({\r\n selector: 'cadmus-graph-node-list',\r\n templateUrl: './graph-node-list.component.html',\r\n styleUrls: ['./graph-node-list.component.css'],\r\n imports: [\r\n MatCard,\r\n MatCardContent,\r\n GraphNodeFilterComponent,\r\n MatProgressBar,\r\n MatIconButton,\r\n MatTooltip,\r\n MatIcon,\r\n MatButton,\r\n MatPaginator,\r\n MatExpansionPanel,\r\n MatExpansionPanelHeader,\r\n GraphNodeEditorComponent,\r\n AsyncPipe,\r\n ],\r\n})\r\nexport class GraphNodeListComponent {\r\n public loading$: Observable<boolean | undefined>;\r\n public page$: Observable<DataPage<UriNode>>;\r\n\r\n /**\r\n * The currently edited node if any.\r\n */\r\n public readonly editedNode = model<UriNode>();\r\n\r\n /**\r\n * The optional set of thesaurus entries for node's tags.\r\n */\r\n public readonly tagEntries = input<ThesaurusEntry[]>();\r\n\r\n /**\r\n * True if this node list should have a walker button for each node.\r\n */\r\n public readonly hasWalker = input<boolean>();\r\n\r\n /**\r\n * Emitted when walking a specific node is requested.\r\n */\r\n public readonly nodeWalk = output<UriNode>();\r\n\r\n constructor(\r\n private _repository: NodeListRepository,\r\n private _graphService: GraphService,\r\n private _dialogService: DialogService,\r\n private _snackbar: MatSnackBar\r\n ) {\r\n this.loading$ = _repository.loading$;\r\n this.page$ = _repository.page$;\r\n }\r\n\r\n public onPageChange(event: PageEvent): void {\r\n this._repository.setPage(event.pageIndex + 1, event.pageSize);\r\n }\r\n\r\n public addNode(): void {\r\n this.editedNode.set({\r\n uri: '',\r\n id: 0,\r\n sourceType: NodeSourceType.User,\r\n label: '',\r\n });\r\n }\r\n\r\n public editNode(node: UriNode): void {\r\n this.editedNode.set(node);\r\n }\r\n\r\n public onNodeChange(node: UriNode): void {\r\n this._graphService.addNode(node).subscribe({\r\n next: (n) => {\r\n this.editedNode.set(undefined);\r\n this._repository.reset();\r\n this._snackbar.open('Node saved', 'OK', {\r\n duration: 1500,\r\n });\r\n },\r\n error: (error) => {\r\n console.error('Error saving node', error);\r\n this._snackbar.open('Error saving node', 'OK');\r\n },\r\n });\r\n }\r\n\r\n public onEditorClose(): void {\r\n this.editedNode.set(undefined);\r\n }\r\n\r\n public deleteNode(node: UriNode): void {\r\n this._dialogService\r\n .confirm('Delete Node', 'Delete node ' + node.label + '?')\r\n .pipe(take(1))\r\n .subscribe((yes) => {\r\n if (yes) {\r\n this._graphService\r\n .deleteNode(node.id)\r\n .pipe(take(1))\r\n .subscribe({\r\n next: (_) => {\r\n this._repository.reset();\r\n },\r\n error: (error) => {\r\n console.error('Error deleting node', error);\r\n this._snackbar.open('Error deleting node', 'OK');\r\n },\r\n });\r\n }\r\n });\r\n }\r\n\r\n public walkNode(node: UriNode): void {\r\n this.nodeWalk.emit(node);\r\n }\r\n\r\n public reset(): void {\r\n this._repository.reset();\r\n }\r\n}\r\n","<div id=\"container\">\r\n <!-- filters -->\r\n <div id=\"filters\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-content>\r\n <cadmus-graph-node-filter\r\n [disabled]=\"(loading$ | async) ? true : false\"\r\n />\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n\r\n <!-- list -->\r\n @if (page$ | async; as page) {\r\n <div id=\"list\">\r\n @if (loading$ | async) {\r\n <div>\r\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\r\n </div>\r\n }\r\n <!-- list -->\r\n @if (page) {\r\n <div>\r\n <table>\r\n <thead>\r\n <th></th>\r\n <th>id</th>\r\n <th>cls</th>\r\n <th>label</th>\r\n <th>uri</th>\r\n <th class=\"noif-lt-md\">srct</th>\r\n <th class=\"noif-lt-md\">sid</th>\r\n <th class=\"noif-lt-md\">tag</th>\r\n </thead>\r\n <tbody>\r\n @for (d of page.items; track d.id) {\r\n <tr [class.selected]=\"d === editedNode()\">\r\n <td class=\"fit-width\">\r\n @if (hasWalker()) {\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Walk node\"\r\n (click)=\"walkNode(d)\"\r\n >\r\n <mat-icon class=\"mat-primary\">flare</mat-icon>\r\n </button>\r\n }\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Edit node\"\r\n (click)=\"editNode(d)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Delete node\"\r\n (click)=\"deleteNode(d)\"\r\n >\r\n <mat-icon class=\"mat-warn\">delete</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ d.id }}</td>\r\n <td>{{ d.isClass ? \"C\" : \"\" }}</td>\r\n <td>{{ d.label }}</td>\r\n <td>{{ d.uri }}</td>\r\n <td class=\"noif-lt-md\">{{ \"UIPTX\"[d.sourceType] }}</td>\r\n <td class=\"noif-lt-md\">{{ d.sid }}</td>\r\n <td class=\"noif-lt-md\">{{ d.tag }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n <div>\r\n <button\r\n class=\"mat-primary\"\r\n type=\"button\"\r\n mat-flat-button\r\n (click)=\"addNode()\"\r\n >\r\n <mat-icon>add_circle</mat-icon>\r\n add node\r\n </button>\r\n </div>\r\n <!-- pagination -->\r\n <div class=\"form-row\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Reset list\"\r\n (click)=\"reset()\"\r\n >\r\n <mat-icon class=\"mat-warn\">autorenew</mat-icon>\r\n </button>\r\n <mat-paginator\r\n [length]=\"page.total\"\r\n [pageIndex]=\"page.pageNumber - 1\"\r\n [pageSize]=\"page.pageSize\"\r\n [pageSizeOptions]=\"[5, 10, 20, 50, 100]\"\r\n (page)=\"onPageChange($event)\"\r\n [showFirstLastButtons]=\"true\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n <!-- editor -->\r\n <mat-expansion-panel\r\n [expanded]=\"editedNode() ? true : false\"\r\n [disabled]=\"editedNode() ? false : true\"\r\n id=\"editor\"\r\n >\r\n <mat-expansion-panel-header>Node</mat-expansion-panel-header>\r\n <cadmus-graph-node-editor\r\n [node]=\"editedNode()\"\r\n [tagEntries]=\"tagEntries()\"\r\n (nodeChange)=\"onNodeChange($event!)\"\r\n (editorClose)=\"onEditorClose()\"\r\n />\r\n </mat-expansion-panel>\r\n </div>\r\n }\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable, tap } from 'rxjs';\r\n\r\nimport { DataPage } from '@myrmidon/ngx-tools';\r\nimport {\r\n PagedListStore,\r\n PagedListStoreService,\r\n} from '@myrmidon/paged-data-browsers';\r\n\r\nimport { UriNode, TripleFilter, UriTriple } from '@myrmidon/cadmus-api';\r\nimport { GraphService } from '@myrmidon/cadmus-api';\r\n\r\n/**\r\n * Graph nodes list repository.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class GraphTripleListRepository\r\n implements PagedListStoreService<TripleFilter, UriTriple>\r\n{\r\n private readonly _store: PagedListStore<TripleFilter, UriTriple>;\r\n private readonly _loading$: BehaviorSubject<boolean | undefined>;\r\n private readonly _filter$: BehaviorSubject<TripleFilter>;\r\n private readonly _subjectNode$: BehaviorSubject<UriNode | undefined>;\r\n private readonly _predicateNode$: BehaviorSubject<UriNode | undefined>;\r\n private readonly _objectNode$: BehaviorSubject<UriNode | undefined>;\r\n\r\n public get loading$(): Observable<boolean | undefined> {\r\n return this._loading$.asObservable();\r\n }\r\n public get filter$(): Observable<TripleFilter> {\r\n return this._filter$.asObservable();\r\n }\r\n public get page$(): Observable<DataPage<UriTriple>> {\r\n return this._store.page$;\r\n }\r\n public get subjectNode$(): Observable<UriNode | undefined> {\r\n return this._subjectNode$.asObservable();\r\n }\r\n public get predicateNode$(): Observable<UriNode | undefined> {\r\n return this._predicateNode$.asObservable();\r\n }\r\n public get objectNode$(): Observable<UriNode | undefined> {\r\n return this._objectNode$.asObservable();\r\n }\r\n\r\n constructor(private _graphService: GraphService) {\r\n this._store = new PagedListStore<TripleFilter, UriTriple>(this);\r\n this._filter$ = new BehaviorSubject<TripleFilter>({});\r\n this._subjectNode$ = new BehaviorSubject<UriNode | undefined>(undefined);\r\n this._predicateNode$ = new BehaviorSubject<UriNode | undefined>(undefined);\r\n this._objectNode$ = new BehaviorSubject<UriNode | undefined>(undefined);\r\n this._loading$ = new BehaviorSubject<boolean | undefined>(undefined);\r\n this._store.reset();\r\n }\r\n\r\n public async reset(): Promise<void> {\r\n this._loading$.next(true);\r\n try {\r\n await this._store.reset();\r\n } catch (error) {\r\n throw error;\r\n } finally {\r\n this._loading$.next(false);\r\n }\r\n }\r\n\r\n public loadPage(\r\n pageNumber: number,\r\n pageSize: number,\r\n filter: TripleFilter\r\n ): Observable<DataPage<UriTriple>> {\r\n this._loading$.next(true);\r\n return this._graphService.getTriples(pageNumber, pageSize, filter).pipe(\r\n tap({\r\n next: () => this._loading$.next(false),\r\n error: () => this._loading$.next(false),\r\n })\r\n );\r\n }\r\n\r\n public async setFilter(filter: TripleFilter): Promise<void> {\r\n this._loading$.next(true);\r\n try {\r\n await this._store.setFilter(filter);\r\n } catch (error) {\r\n throw error;\r\n } finally {\r\n this._loading$.next(false);\r\n }\r\n }\r\n\r\n public getFilter(): TripleFilter {\r\n return this._store.getFilter();\r\n }\r\n\r\n public async setPage(pageNumber: number, pageSize: number): Promise<void> {\r\n this._loading$.next(true);\r\n try {\r\n await this._store.setPage(pageNumber, pageSize);\r\n } catch (error) {\r\n throw error;\r\n } finally {\r\n this._loading$.next(false);\r\n }\r\n }\r\n\r\n /**\r\n * Set the node term used in filter.\r\n *\r\n * @param node The node or null/undefined.\r\n * @param type The type: subject, predicate, object.\r\n */\r\n public setTerm(\r\n node: UriNode | null | undefined,\r\n type: 'S' | 'P' | 'O'\r\n ): void {\r\n switch (type) {\r\n case 'S':\r\n this._subjectNode$.next(node || undefined);\r\n break;\r\n case 'P':\r\n this._predicateNode$.next(node || undefined);\r\n break;\r\n case 'O':\r\n this._objectNode$.next(node || undefined);\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Set the node term used in filter by its ID.\r\n *\r\n * @param id The node ID or null/undefined.\r\n * @param type The type: subject, predicate, object.\r\n */\r\n public setTermId(id: number | null | undefined, type: 'S' | 'P' | 'O'): void {\r\n if (!id) {\r\n this.setTerm(null, type);\r\n return;\r\n }\r\n this._graphService.getNode(id).subscribe({\r\n next: (node) => {\r\n this.setTerm(node, type);\r\n },\r\n error: (error) => {\r\n console.error(`Node ID ${id} not found`, error);\r\n },\r\n });\r\n }\r\n\r\n public selectTerm(type: 'S' | 'P' | 'O'): Observable<UriNode | undefined> {\r\n switch (type) {\r\n case 'S':\r\n return this.subjectNode$;\r\n case 'P':\r\n return this.predicateNode$;\r\n case 'O':\r\n return this.objectNode$;\r\n }\r\n }\r\n\r\n public getTerm(type: 'S' | 'P' | 'O'): UriNode | undefined {\r\n switch (type) {\r\n case 'S':\r\n return this._subjectNode$.value;\r\n case 'P':\r\n return this._predicateNode$.value;\r\n case 'O':\r\n return this._objectNode$.value;\r\n }\r\n }\r\n}\r\n","import { Component, input, OnDestroy, OnInit } from '@angular/core';\r\nimport { AsyncPipe } from '@angular/common';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n Validators,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { Observable, Subscription } from 'rxjs';\r\n\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatCheckbox } from '@angular/material/checkbox';\r\nimport { MatLabel, MatFormField } from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { RefLookupComponent } from '@myrmidon/cadmus-refs-lookup';\r\n\r\nimport { UriNode, TripleFilter } from '@myrmidon/cadmus-api';\r\n\r\nimport { GraphTripleListRepository } from '../../state/graph-triple-list.repository';\r\nimport { GraphNodeLookupService } from '../../services/graph-node-lookup.service';\r\n\r\n/**\r\n * Graph triples filter used in graph triples list.\r\n * Its data are in the graph triples store, which gets updated when\r\n * users apply new filters.\r\n */\r\n@Component({\r\n selector: 'cadmus-graph-triple-filter',\r\n templateUrl: './graph-triple-filter.component.html',\r\n styleUrls: ['./graph-triple-filter.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n RefLookupComponent,\r\n MatIconButton,\r\n MatIcon,\r\n MatCheckbox,\r\n MatLabel,\r\n MatFormField,\r\n MatInput,\r\n MatTooltip,\r\n AsyncPipe,\r\n ],\r\n})\r\nexport class GraphTripleFilterComponent implements OnInit, OnDestroy {\r\n private _sub?: Subscription;\r\n public filter$: Observable<TripleFilter>;\r\n public literal: FormControl<boolean>;\r\n public objectLit: FormControl<string | null>;\r\n public sid: FormControl<string | null>;\r\n public sidPrefix: FormControl<boolean>;\r\n public tag: FormControl<string | null>;\r\n public form: FormGroup;\r\n\r\n public subjectNode$: Observable<UriNode | undefined>;\r\n public predicateNode$: Observable<UriNode | undefined>;\r\n public objectNode$: Observable<UriNode | undefined>;\r\n\r\n public readonly disabled = input<boolean>();\r\n\r\n constructor(\r\n formBuilder: FormBuilder,\r\n public lookupService: GraphNodeLookupService,\r\n private _repository: GraphTripleListRepository\r\n ) {\r\n this.filter$ = _repository.filter$;\r\n this.subjectNode$ = _repository.subjectNode$;\r\n this.predicateNode$ = _repository.predicateNode$;\r\n this.objectNode$ = _repository.objectNode$;\r\n // form\r\n this.literal = formBuilder.control(false, { nonNullable: true });\r\n this.objectLit = formBuilder.control(null, Validators.maxLength(100));\r\n this.sid = formBuilder.control(null);\r\n this.sidPrefix = formBuilder.control(false, { nonNullable: true });\r\n this.tag = formBuilder.control(null);\r\n this.form = formBuilder.group({\r\n literal: this.literal,\r\n objectLit: this.objectLit,\r\n sid: this.sid,\r\n sidPrefix: this.sidPrefix,\r\n tag: this.tag,\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n this._sub = this.filter$.subscribe((f) => {\r\n this.updateForm(f);\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._sub?.unsubscribe();\r\n }\r\n\r\n private updateForm(filter: TripleFilter): void {\r\n this._repository.setTermId(filter.subjectId, 'S');\r\n this._repository.setTermId(\r\n filter.predicateIds?.length ? filter.predicateIds[0] : null,\r\n 'P'\r\n );\r\n this._repository.setTermId(filter.objectId, 'O');\r\n this.literal.setValue(filter.literalPattern ? true : false);\r\n this.objectLit.setValue(filter.literalPattern || null);\r\n this.sid.setValue(filter.sid || null);\r\n this.tag.setValue(filter.tag || null);\r\n this.form.markAsPristine();\r\n }\r\n\r\n private getFilter(): TripleFilter {\r\n const pid = this._repository.getTerm('P')?.id;\r\n return {\r\n subjectId: this._repository.getTerm('S')?.id,\r\n predicateIds: pid ? [pid] : undefined,\r\n objectId: this.literal.value\r\n ? undefined\r\n : this._repository.getTerm('O')?.id,\r\n literalPattern: this.literal.value\r\n ? this.objectLit.value?.trim()\r\n : undefined,\r\n sid: this.sid.value?.trim(),\r\n tag: this.tag.value?.trim(),\r\n };\r\n }\r\n\r\n public onSubjectNodeChange(node?: unknown): void {\r\n this._repository.setTerm(node as UriNode, 'S');\r\n }\r\n\r\n public clearSubjectNode(): void {\r\n this._repository.setTerm(null, 'S');\r\n }\r\n\r\n public onPredicateNodeChange(node?: unknown): void {\r\n this._repository.setTerm(node as UriNode, 'P');\r\n }\r\n\r\n public clearPredicateNode(): void {\r\n this._repository.setTerm(null, 'P');\r\n }\r\n\r\n public onObjectNodeChange(node?: unknown): void {\r\n this._repository.setTerm(node as UriNode, 'O');\r\n }\r\n\r\n public clearObjectNode(): void {\r\n this._repository.setTerm(null, 'O');\r\n }\r\n\r\n public reset(): void {\r\n this.form.reset();\r\n this.apply();\r\n }\r\n\r\n public apply(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n const filter = this.getFilter();\r\n\r\n // update filter in state\r\n this._repository.setFilter(filter);\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"apply()\" [attr.disabled]=\"disabled()\">\r\n <!-- subject -->\r\n <div class=\"form-row\">\r\n <cadmus-ref-lookup\r\n [service]=\"lookupService\"\r\n [item]=\"subjectNode$ | async\"\r\n label=\"subject\"\r\n (itemChange)=\"onSubjectNodeChange($event)\"\r\n />\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n style=\"margin-top: 20px\"\r\n (click)=\"clearSubjectNode()\"\r\n >\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n </div>\r\n <!-- predicate -->\r\n <div class=\"form-row\">\r\n <cadmus-ref-lookup\r\n [service]=\"lookupService\"\r\n label=\"predicate\"\r\n [item]=\"predicateNode$ | async\"\r\n [baseFilter]=\"{ tag: 'property' }\"\r\n (itemChange)=\"onPredicateNodeChange($event)\"\r\n />\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n style=\"margin-top: 20px\"\r\n (click)=\"clearPredicateNode()\"\r\n >\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n </div>\r\n <!-- object, objectLit -->\r\n <div>\r\n <mat-checkbox [formControl]=\"literal\">literal</mat-checkbox>\r\n </div>\r\n @if (literal.value) {\r\n <div>\r\n <mat-label>literal</mat-label>\r\n <mat-form-field>\r\n <input matInput [formControl]=\"objectLit\" maxlength=\"500\" />\r\n </mat-form-field>\r\n </div>\r\n } @else {\r\n <div class=\"form-row\">\r\n <cadmus-ref-lookup\r\n [service]=\"lookupService\"\r\n [item]=\"objectNode$ | async\"\r\n label=\"object\"\r\n (itemChange)=\"onObjectNodeChange($event)\"\r\n />\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n style=\"margin-top: 20px\"\r\n (click)=\"clearObjectNode()\"\r\n >\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n <!-- sid, sidPrefix -->\r\n <div>\r\n <mat-form-field>\r\n <mat-label>sid</mat-label>\r\n <input matInput [formControl]=\"sid\" maxlength=\"500\" />\r\n </mat-form-field>\r\n \r\n <mat-checkbox [formControl]=\"sidPrefix\">prefix</mat-checkbox>\r\n </div>\r\n <!-- tag -->\r\n <br />\r\n <div\r\n class=\"btn-group\"\r\n role=\"group\"\r\n aria-label=\"toolbar\"\r\n style=\"margin-bottom: 10px\"\r\n >\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n (click)=\"reset()\"\r\n matTooltip=\"Reset filters\"\r\n [disabled]=\"disabled()\"\r\n >\r\n <mat-icon class=\"mat-warn\">clear</mat-icon>\r\n </button>\r\n <button\r\n type=\"submit\"\r\n mat-icon-button\r\n [disabled]=\"disabled()\"\r\n matTooltip=\"Apply filters\"\r\n >\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </div>\r\n</form>\r\n","import {\r\n Component,\r\n effect,\r\n input,\r\n model,\r\n OnDestroy,\r\n OnInit,\r\n output,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n Validators,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\n\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { MatCheckbox } from '@angular/material/checkbox';\r\nimport {\r\n MatFormField,\r\n MatLabel,\r\n MatError,\r\n MatHint,\r\n} from '@angular/material/form-field';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\nimport { NgxToolsValidators } from '@myrmidon/ngx-tools';\r\nimport { RefLookupComponent } from '@myrmidon/cadmus-refs-lookup';\r\n\r\nimport { GraphService, UriNode, UriTriple } from '@myrmidon/cadmus-api';\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\n\r\nimport { GraphNodeLookupService } from '../../services/graph-node-lookup.service';\r\n\r\n@Component({\r\n selector: 'cadmus-graph-triple-editor',\r\n templateUrl: './graph-triple-editor.component.html',\r\n styleUrls: ['./graph-triple-editor.component.css'],\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n RefLookupComponent,\r\n MatCheckbox,\r\n MatFormField,\r\n MatLabel,\r\n MatInput,\r\n MatError,\r\n MatHint,\r\n MatIconButton,\r\n MatIcon,\r\n ],\r\n})\r\nexport class GraphTripleEditorComponent implements OnInit, OnDestroy {\r\n private _sub?: Subscription;\r\n\r\n public readonly triple = model<UriTriple>();\r\n\r\n /**\r\n * The optional set of thesaurus entries for triple's tags.\r\n */\r\n // public readonly tagEntries = input<ThesaurusEntry[]>();\r\n\r\n /**\r\n * Emitted when the user requested to close the editor.\r\n */\r\n public readonly editorClose = output();\r\n\r\n public isNew: boolean;\r\n\r\n public subjectNode: FormControl<UriNode | null>;\r\n public predicateNode: FormControl<UriNode | null>;\r\n public objectNode: FormControl<UriNode | null>;\r\n public isLiteral: FormControl<boolean>;\r\n public literal: FormControl<string | null>;\r\n public literalLang: FormControl<string | null>;\r\n public literalType: FormControl<string | null>;\r\n public tag: FormControl<string | null>;\r\n public form: FormGroup;\r\n\r\n constructor(\r\n formBuilder: FormBuilder,\r\n public lookupService: GraphNodeLookupService,\r\n private _snackbar: MatSnackBar,\r\n private _graphService: GraphService\r\n ) {\r\n this.isNew = true;\r\n // form\r\n this.subjectNode = formBuilder.control(null, Validators.required);\r\n this.predicateNode = formBuilder.control(null, Validators.required);\r\n this.objectNode = formBuilder.control(null, {\r\n validators: NgxToolsValidators.conditionalValidator(\r\n () => !this.isLiteral.value,\r\n Validators.required\r\n ),\r\n });\r\n this.isLiteral = formBuilder.control(true, { nonNullable: true });\r\n this.literal = formBuilder.control(null, {\r\n validators: [Validators.required, Validators.maxLength(15000)],\r\n updateOn: 'change',\r\n });\r\n this.literalLang = formBuilder.control(null, Validators.maxLength(10));\r\n this.literalType = formBuilder.control(null, Validators.maxLength(100));\r\n this.tag = formBuilder.control(null, Validators.maxLength(50));\r\n this.form = formBuilder.group({\r\n subjectNode: this.subjectNode,\r\n predicateNode: this.predicateNode,\r\n objectNode: this.objectNode,\r\n isLiteral: this.isLiteral,\r\n literal: this.literal,\r\n literalLang: this.literalLang,\r\n literalType: this.literalType,\r\n tag: this.tag,\r\n });\r\n\r\n effect(() => {\r\n this.updateForm(this.triple());\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n this._sub = this.isLiteral.valueChanges.subscribe((value) => {\r\n if (value) {\r\n this.objectNode.setValidators(null);\r\n this.literal.setValidators([\r\n Validators.required,\r\n Validators.maxLength(15000),\r\n ]);\r\n } else {\r\n this.objectNode.setValidators(Validators.required);\r\n this.literal.setValidators(null);\r\n }\r\n this.literal.updateValueAndValidity();\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._sub?.unsubscribe();\r\n }\r\n\r\n public onSubjectChange(node?: unknown): void {\r\n this.subjectNode.setValue((node as UriNode) || null);\r\n this.subjectNode.updateValueAndValidity();\r\n this.subjectNode.markAsDirty();\r\n }\r\n\r\n public onPredicateChange(node?: unknown): void {\r\n this.predicateNode.setValue((node as UriNode) || null);\r\n this.predicateNode.updateValueAndValidity();\r\n this.predicateNode.markAsDirty();\r\n }\r\n\r\n public onObjectChange(node?: unknown): void {\r\n this.objectNode.setValue((node as UriNode) || null);\r\n this.objectNode.updateValueAndValidity();\r\n this.objectNode.markAsDirty();\r\n\r\n if (node) {\r\n this.isLiteral.setValue(false);\r\n this.isLiteral.updateValueAndValidity();\r\n this.isLiteral.markAsDirty();\r\n }\r\n }\r\n\r\n private getNode(id: number): Promise<UriNode | undefined> {\r\n return new Promise((resolve, reject) => {\r\n this._graphService\r\n .getNode(id)\r\n .pipe(take(1))\r\n .subscribe({\r\n next: (node) => {\r\n resolve(node);\r\n },\r\n error: (error) => {\r\n console.error('Error loading node', error);\r\n this._snackbar.open('Error loading node ' + id, 'OK');\r\n reject();\r\n },\r\n });\r\n });\r\n }\r\n\r\n private updateForm(triple?: UriTriple): void {\r\n if (!triple) {\r\n this.form.reset();\r\n this.isLiteral.setValue(true);\r\n this.isNew = true;\r\n return;\r\n }\r\n\r\n if (triple.subjectId) {\r\n this.getNode(triple.subjectId).then((node) => {\r\n this.subjectNode.setValue(node || null);\r\n this.subjectNode.updateValueAndValidity();\r\n this.subjectNode.markAsDirty();\r\n });\r\n } else {\r\n this.subjectNode.reset();\r\n }\r\n if (triple.predicateId) {\r\n this.getNode(triple.predicateId).then((node) => {\r\n this.predicateNode.setValue(node || null);\r\n this.predicateNode.updateValueAndValidity();\r\n this.predicateNode.markAsDirty();\r\n });\r\n } else {\r\n this.predicateNode.reset();\r\n }\r\n if (triple.objectId) {\r\n this.isLiteral.setValue(false);\r\n this.getNode(triple.objectId).then((node) => {\r\n this.objectNode.setValue(node || null);\r\n this.objectNode.updateValueAndValidity();\r\n this.objectNode.markAsDirty();\r\n });\r\n } else {\r\n this.isLiteral.setValue(true);\r\n this.literal.setValue(triple.objectLiteral || null);\r\n this.literalLang.setValue(triple.literalLanguage || null);\r\n this.literalType.setValue(triple.literalType || null);\r\n }\r\n this.isNew = triple.id ? false : true;\r\n this.form.markAsPristine();\r\n }\r\n\r\n private getTriple(): UriTriple {\r\n return {\r\n id: this.triple()?.id || 0,\r\n subjectId: this.subjectNode.value?.id || 0,\r\n predicateId: this.predicateNode.value?.id || 0,\r\n objectId: this.isLiteral.value\r\n ? undefined\r\n : this.objectNode.value?.id || 0,\r\n objectLiteral: this.isLiteral.value ? this.literal.value! : undefined,\r\n literalLanguage: this.isLiteral.value\r\n ? this.literalLang.value || undefined\r\n : undefined,\r\n literalType: this.isLiteral.value\r\n ? this.literalType.value || undefined\r\n : undefined,\r\n subjectUri: this.subjectNode.value?.uri || '',\r\n predicateUri: this.predicateNode.value?.uri || '',\r\n objectUri: this.isLiteral.value\r\n ? undefined\r\n : this.objectNode.value?.uri || '',\r\n };\r\n }\r\n\r\n public cancel(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n this.triple.set(this.getTriple());\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div id=\"row\">\r\n <!-- S -->\r\n <fieldset id=\"s\">\r\n <legend>subject</legend>\r\n <!-- picker -->\r\n <cadmus-ref-lookup\r\n [service]=\"lookupService\"\r\n [required]=\"true\"\r\n [item]=\"subjectNode.value\"\r\n label=\"subject\"\r\n (itemChange)=\"onSubjectChange($event)\"\r\n />\r\n </fieldset>\r\n <!-- P -->\r\n <fieldset id=\"p\">\r\n <legend>predicate</legend>\r\n <!-- picker -->\r\n <cadmus-ref-lookup\r\n [service]=\"lookupService\"\r\n [required]=\"true\"\r\n [item]=\"predicateNode.value\"\r\n label=\"predicate\"\r\n [baseFilter]=\"{ tag: 'property' }\"\r\n (itemChange)=\"onPredicateChange($event)\"\r\n />\r\n </fieldset>\r\n <!-- O -->\r\n <fieldset id=\"o\">\r\n <legend>object</legend>\r\n <mat-checkbox [formControl]=\"isLiteral\">literal</mat-checkbox>\r\n <!-- object -->\r\n @if (!isLiteral.value) {\r\n <cadmus-ref-lookup\r\n [required]=\"true\"\r\n [service]=\"lookupService\"\r\n [item]=\"objectNode.value\"\r\n label=\"object\"\r\n (itemChange)=\"onObjectChange($event)\"\r\n />\r\n }\r\n <!-- literal value -->\r\n @if (isLiteral.value) {\r\n <mat-form-field style=\"width: 100%\">\r\n <mat-label>object</mat-label>\r\n <textarea matInput [formControl]=\"literal\"></textarea>\r\n @if ( $any(literal).errors?.required && (literal.dirty ||\r\n literal.touched) ) {\r\n <mat-error>literal required</mat-error>\r\n } @if ( $any(literal).errors?.maxLength && (literal.dirty ||\r\n literal.touched) ) {\r\n <mat-error>literal too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <div class=\"form-row\">\r\n <!-- literal language -->\r\n @if (isLiteral.value) {\r\n <mat-form-field>\r\n <mat-label>language</mat-label>\r\n <input matInput [formControl]=\"literalLang\" />\r\n <mat-hint>ISO-639 etc.</mat-hint>\r\n @if ( $any(literalLang).errors?.maxLength && (literalLang.dirty ||\r\n literalLang.touched) ) {\r\n <mat-error>language too long</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <!-- literal type -->\r\n <mat-form-field>\r\n <mat-label>type</mat-label>\r\n <input matInput [formControl]=\"literalType\" />\r\n <mat-hint>XML data type (xs:...)</mat-hint>\r\n @if ( $any(literalType).errors?.maxLength && (literalType.dirty ||\r\n literalType.touched) ) {\r\n <mat-error>type too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n </fieldset>\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div>\r\n <button mat-icon-button type=\"button\" (click)=\"cancel()\">\r\n <mat-icon class=\"mat-warn\">cancel</mat-icon>\r\n </button>\r\n <button mat-icon-button type=\"submit\" [disabled]=\"form.invalid\">\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </div>\r\n</form>\r\n","import { Component } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { AsyncPipe } from '@angular/common';\r\nimport { take } from 'rxjs/operators';\r\n\r\nimport { PageEvent, MatPaginator } from '@angular/material/paginator';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { MatCard, MatCardContent } from '@angular/material/card';\r\nimport { MatProgressBar } from '@angular/material/progress-bar';\r\nimport { MatIconButton, MatButton } from '@angular/material/button';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport {\r\n MatExpansionPanel,\r\n MatExpansionPanelHeader,\r\n} from '@angular/material/expansion';\r\n\r\nimport { DialogService } from '@myrmidon/ngx-mat-tools';\r\nimport { DataPage, EllipsisPipe } from '@myrmidon/ngx-tools';\r\n\r\nimport {\r\n GraphService,\r\n ThesaurusService,\r\n UriTriple,\r\n} from '@myrmidon/cadmus-api';\r\n\r\nimport { GraphTripleFilterComponent } from '../graph-triple-filter/graph-triple-filter.component';\r\nimport { GraphTripleEditorComponent } from '../graph-triple-editor/graph-triple-editor.component';\r\nimport { GraphTripleListRepository } from '../../state/graph-triple-list.repository';\r\n\r\n@Component({\r\n selector: 'cadmus-graph-triple-list',\r\n templateUrl: './graph-triple-list.component.html',\r\n styleUrls: ['./graph-triple-list.component.css'],\r\n imports: [\r\n MatCard,\r\n MatCardContent,\r\n GraphTripleFilterComponent,\r\n MatProgressBar,\r\n MatIconButton,\r\n MatTooltip,\r\n MatIcon,\r\n MatButton,\r\n MatPaginator,\r\n MatExpansionPanel,\r\n MatExpansionPanelHeader,\r\n GraphTripleEditorComponent,\r\n AsyncPipe,\r\n EllipsisPipe,\r\n ],\r\n})\r\nexport class GraphTripleListComponent {\r\n public page$: Observable<DataPage<UriTriple>>;\r\n public loading$: Observable<boolean | undefined>;\r\n public editedTriple?: UriTriple;\r\n\r\n /**\r\n * The optional set of thesaurus entries for triple's tags.\r\n */\r\n // public readonly tagEntries = input<ThesaurusEntry[]>();\r\n\r\n constructor(\r\n private _graphService: GraphService,\r\n private _dialogService: DialogService,\r\n private _snackbar: MatSnackBar,\r\n private _repository: GraphTripleListRepository\r\n ) {\r\n this.page$ = _repository.page$;\r\n this.loading$ = _repository.loading$;\r\n }\r\n\r\n // ngOnInit(): void {\r\n // this._thesService\r\n // .getThesaurus('graph-triple-tags@en', true)\r\n // .subscribe((thesaurus) => {\r\n // this.tagEntries = thesaurus?.entries || [];\r\n // });\r\n // }\r\n\r\n public onPageChange(event: PageEvent): void {\r\n this._repository.setPage(event.pageIndex + 1, event.pageSize);\r\n }\r\n\r\n public addTriple(): void {\r\n this.editedTriple = {\r\n id: 0,\r\n subjectId: 0,\r\n predicateId: 0,\r\n objectId: 0,\r\n subjectUri: '',\r\n predicateUri: '',\r\n };\r\n }\r\n\r\n public editTriple(triple: UriTriple): void {\r\n this.editedTriple = triple;\r\n }\r\n\r\n public onTripleChange(triple: UriTriple): void {\r\n this._graphService\r\n .addTriple(triple)\r\n .pipe(take(1))\r\n .subscribe({\r\n next: (n) => {\r\n this.editedTriple = undefined;\r\n this._repository.reset();\r\n this._snackbar.open('Triple saved', 'OK', {\r\n duration: 1500,\r\n });\r\n },\r\n error: (error) => {\r\n console.error('Error saving triple', error);\r\n this._snackbar.open('Error saving triple', 'OK');\r\n },\r\n });\r\n }\r\n\r\n public onEditorClose(): void {\r\n this.editedTriple = undefined;\r\n }\r\n\r\n public deleteTriple(triple: UriTriple): void {\r\n this._dialogService\r\n .confirm('Delete Triple', 'Delete triple?')\r\n .pipe(take(1))\r\n .subscribe((yes) => {\r\n if (yes) {\r\n this._graphService\r\n .deleteTriple(triple.id)\r\n .pipe(take(1))\r\n .subscribe({\r\n next: (_) => {\r\n this._repository.reset();\r\n },\r\n error: (error) => {\r\n console.error('Error deleting triple', error);\r\n this._snackbar.open('Error deleting triple', 'OK');\r\n },\r\n });\r\n }\r\n });\r\n }\r\n\r\n public reset(): void {\r\n this._repository.reset();\r\n }\r\n}\r\n","<div id=\"container\">\r\n <!-- filters -->\r\n <div id=\"filters\">\r\n <mat-card appearance=\"outlined\">\r\n <mat-card-content>\r\n <cadmus-graph-triple-filter [disabled]=\"(loading$ | async) === true\" />\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n\r\n <!-- list -->\r\n @if (page$ | async; as page) {\r\n <div id=\"list\">\r\n @if (loading$ | async) {\r\n <div>\r\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\r\n </div>\r\n }\r\n <!-- list -->\r\n <div>\r\n <table>\r\n <thead>\r\n <th></th>\r\n <th>ID</th>\r\n <th>S</th>\r\n <th>P</th>\r\n <th>O</th>\r\n <th class=\"noif-lt-md\">sid</th>\r\n <th class=\"noif-lt-md\">tag</th>\r\n </thead>\r\n <tbody>\r\n @for (d of page.items; track d.id) {\r\n <tr [class.selected]=\"d === editedTriple\">\r\n <td class=\"fit-width\">\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Edit triple\"\r\n (click)=\"editTriple(d)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n mat-icon-button\r\n type=\"button\"\r\n matTooltip=\"Delete triple\"\r\n (click)=\"deleteTriple(d)\"\r\n >\r\n <mat-icon class=\"mat-warn\">delete</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ d.id }}</td>\r\n <td>{{ d.subjectUri }}</td>\r\n <td>{{ d.predicateUri }}</td>\r\n <td>{{ d.objectUri ?? d.objectLiteral | ellipsis }}</td>\r\n <td class=\"noif-lt-md\">{{ d.sid }}</td>\r\n <td class=\"noif-lt-md\">{{ d.tag }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n <div>\r\n <button\r\n class=\"mat-primary\"\r\n type=\"button\"\r\n mat-flat-button\r\n (click)=\"addTriple()\"\r\n >\r\n <mat-icon>add_circle</mat-icon>\r\n triple\r\n </button>\r\n </div>\r\n <!-- pagination -->\r\n <div id=\"paginator\" class=\"form-row\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Reset list\"\r\n (click)=\"reset()\"\r\n >\r\n <mat-icon class=\"mat-warn\">autorenew</mat-icon>\r\n </button>\r\n <mat-paginator\r\n [length]=\"page.total\"\r\n [pageIndex]=\"page.pageNumber - 1\"\r\n [pageSize]=\"page.pageSize\"\r\n [pageSizeOptions]=\"[5, 10, 20, 50, 100]\"\r\n (page)=\"onPageChange($event)\"\r\n [showFirstLastButtons]=\"true\"\r\n />\r\n </div>\r\n </div>\r\n <!-- editor -->\r\n <mat-expansion-panel\r\n id=\"editor\"\r\n [expanded]=\"editedTriple\"\r\n [disabled]=\"!editedTriple\"\r\n >\r\n <mat-expansion-panel-header>Triple</mat-expansion-panel-header>\r\n <cadmus-graph-triple-editor\r\n [triple]=\"editedTriple\"\r\n (tripleChange)=\"onTripleChange($event!)\"\r\n (editorClose)=\"onEditorClose()\"\r\n />\r\n </mat-expansion-panel>\r\n </div>\r\n }\r\n</div>\r\n","/*\r\n * Public API Surface of cadmus-graph-ui\r\n */\r\n\r\n// export * from './lib/components/graph-node-filter/graph-node-filter.component';\r\nexport * from './lib/components/graph-node-list/graph-node-list.component';\r\nexport * from './lib/components/graph-node-editor/graph-node-editor.component';\r\n// export * from './lib/components/graph-triple-filter/graph-triple-filter.component';\r\nexport * from './lib/components/graph-triple-list/graph-triple-list.component';\r\nexport * from './lib/components/graph-triple-editor/graph-triple-editor.component';\r\n\r\nexport * from './lib/services/graph-node-lookup.service';\r\n\r\nexport * from './lib/state/graph-node-list.repository';\r\nexport * from './lib/state/graph-triple-list.repository';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.GraphNodeLookupService","i3.NodeListRepository","i1.NodeListRepository","i2","i4","i3.GraphTripleListRepository","i3","i4.GraphTripleListRepository"],"mappings":"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"}