diff --git a/ngapp/src/app/dataservices/dataservices-cards/dataservice-card/dataservice-card.component.css b/ngapp/src/app/dataservices/dataservices-cards/dataservice-card/dataservice-card.component.css
index 77b7e706..45ff33af 100644
--- a/ngapp/src/app/dataservices/dataservices-cards/dataservice-card/dataservice-card.component.css
+++ b/ngapp/src/app/dataservices/dataservices-cards/dataservice-card/dataservice-card.component.css
@@ -46,10 +46,6 @@ a.list-pf-title.view-name {
margin-left: 10px !important;
}
-.views-details {
- background-color: var(--card-body-background-color);
-}
-
.list-pf-container {
-ms-flex-align: start;
align-items: flex-start;
@@ -75,3 +71,21 @@ a.list-pf-title.view-name {
#publishing-card-icons .CodeMirror {
height: 80vh;
}
+
+.views-details {
+ background-color: transparent;
+}
+.views-details:hover {
+ background-color: transparent;
+}
+
+.views-details .blank-slate-pf {
+ background-color: transparent;
+ min-width: 200px;
+ border: none;
+ padding: 0;
+}
+
+.views-details h1, .h1 {
+ font-size: 14px;
+}
diff --git a/ngapp/src/app/dataservices/dataservices-cards/dataservice-card/dataservice-card.component.html b/ngapp/src/app/dataservices/dataservices-cards/dataservice-card/dataservice-card.component.html
index 9cf1a916..d614293d 100644
--- a/ngapp/src/app/dataservices/dataservices-cards/dataservice-card/dataservice-card.component.html
+++ b/ngapp/src/app/dataservices/dataservices-cards/dataservice-card/dataservice-card.component.html
@@ -187,7 +187,7 @@
Publishing Logs for '{{dataservice.getId()}}'
diff --git a/ngapp/src/app/dataservices/dataservices-cards/dataservice-card/dataservice-card.component.ts b/ngapp/src/app/dataservices/dataservices-cards/dataservice-card/dataservice-card.component.ts
index 72a0af5e..5d02ce11 100644
--- a/ngapp/src/app/dataservices/dataservices-cards/dataservice-card/dataservice-card.component.ts
+++ b/ngapp/src/app/dataservices/dataservices-cards/dataservice-card/dataservice-card.component.ts
@@ -20,12 +20,13 @@ import {
} from "@angular/core";
import * as _ from "lodash";
import { LoggerService } from "@core/logger.service";
-import { Action, ActionConfig, CardAction, CardConfig, ListConfig } from "patternfly-ng";
+import { Action, ActionConfig, CardAction, CardConfig, EmptyStateConfig, ListConfig } from "patternfly-ng";
import { Observable } from "rxjs/Observable";
import { Subscription } from "rxjs/Subscription";
import { Dataservice } from "@dataservices/shared/dataservice.model";
import { DataserviceService } from "@dataservices/shared/dataservice.service";
import { Connection } from "@connections/shared/connection.model";
+import { ViewEditorI18n } from "@dataservices/virtualization/view-editor/view-editor-i18n";
@Component({
encapsulation: ViewEncapsulation.None,
@@ -74,6 +75,7 @@ export class DataserviceCardComponent implements DoCheck, OnInit {
private isLoading = true;
private logger: LoggerService;
private dataserviceService: DataserviceService;
+ private emptyStateConfig: EmptyStateConfig;
public publishLogsEditorConfig = {
lineNumbers: true,
@@ -216,13 +218,19 @@ export class DataserviceCardComponent implements DoCheck, OnInit {
topBorder: false
} as CardConfig;
+ this.emptyStateConfig = {
+ title: ViewEditorI18n.noViewsDefined
+ } as EmptyStateConfig;
+
this.listConfig = {
dblClick: false,
multiSelect: false,
selectItems: false,
showCheckbox: false,
- useExpandItems: false
+ useExpandItems: false,
+ emptyStateConfig: this.emptyStateConfig
} as ListConfig;
+
}
/**
@@ -233,6 +241,18 @@ export class DataserviceCardComponent implements DoCheck, OnInit {
this.cardEvent.emit( { eventType: type, dataserviceName: this.dataservice.getId() } );
}
+ /**
+ * An event handler for when edit view is invoked.
+ * @param {string} vName the name of the view in the selected dataservice
+ */
+ public onEditView( vName: string ): void {
+ this.cardEvent.emit( {
+ eventType: DataserviceCardComponent.editDataserviceEvent,
+ dataserviceName: this.dataservice.getId(),
+ viewName: vName
+ } );
+ }
+
/**
* An event handler for when the card is clicked.
*/
diff --git a/ngapp/src/app/dataservices/dataservices-cards/dataservices-cards.component.ts b/ngapp/src/app/dataservices/dataservices-cards/dataservices-cards.component.ts
index 3950a052..e2aa4d46 100644
--- a/ngapp/src/app/dataservices/dataservices-cards/dataservices-cards.component.ts
+++ b/ngapp/src/app/dataservices/dataservices-cards/dataservices-cards.component.ts
@@ -19,6 +19,7 @@ import { Component, EventEmitter, Input, Output, ViewEncapsulation } from "@angu
import { LoggerService } from "@core/logger.service";
import { DataserviceCardComponent } from "@dataservices/dataservices-cards/dataservice-card/dataservice-card.component";
import { Dataservice } from "@dataservices/shared/dataservice.model";
+import { NameValue } from "@dataservices/shared/name-value.model";
@Component({
moduleId: module.id,
@@ -37,7 +38,7 @@ export class DataservicesCardsComponent {
@Output() public testDataservice: EventEmitter = new EventEmitter();
@Output() public publishDataservice: EventEmitter = new EventEmitter();
@Output() public deleteDataservice: EventEmitter = new EventEmitter();
- @Output() public editDataservice: EventEmitter = new EventEmitter();
+ @Output() public editDataservice: EventEmitter = new EventEmitter();
@Output() public quickLookDataservice: EventEmitter = new EventEmitter();
@Output() public downloadDataservice: EventEmitter = new EventEmitter();
@Output() public odataLookDataservice: EventEmitter = new EventEmitter();
@@ -55,13 +56,16 @@ export class DataservicesCardsComponent {
return this.selectedDataservices.indexOf( dataservice ) !== -1;
}
- public onCardEvent( event: { eventType: string, dataserviceName: string } ): void {
+ public onCardEvent( event: { eventType: string, dataserviceName: string, viewName: string } ): void {
switch ( event.eventType ) {
case DataserviceCardComponent.deleteDataserviceEvent:
this.deleteDataservice.emit( event.dataserviceName );
break;
case DataserviceCardComponent.editDataserviceEvent:
- this.editDataservice.emit( event.dataserviceName );
+ const dsName = event.dataserviceName;
+ const viewName = event.viewName;
+ const nameVal = new NameValue(dsName, viewName);
+ this.editDataservice.emit( nameVal );
break;
case DataserviceCardComponent.publishDataserviceEvent:
this.publishDataservice.emit( event.dataserviceName );
diff --git a/ngapp/src/app/dataservices/dataservices-list/dataservices-details.component.ts b/ngapp/src/app/dataservices/dataservices-list/dataservices-details.component.ts
index e8227d8d..86a2d541 100644
--- a/ngapp/src/app/dataservices/dataservices-list/dataservices-details.component.ts
+++ b/ngapp/src/app/dataservices/dataservices-list/dataservices-details.component.ts
@@ -26,7 +26,7 @@ import { DataservicesConstants } from "../shared/dataservices-constants";
templateUrl: "dataservices-details.component.html"
})
export class DataservicesDetailsComponent implements OnInit {
- @Input() public item: Dataservice;
+ @Input() public virtualization: Dataservice;
public listConfig: ListConfig;
@@ -49,8 +49,8 @@ export class DataservicesDetailsComponent implements OnInit {
*/
public get properties(): string[][] {
const props = [
- [ DataservicesConstants.dataserviceNameLabel, this.item.getId() ],
- [ DataservicesConstants.descriptionLabel, this.item.getDescription() ]
+ [ DataservicesConstants.dataserviceNameLabel, this.virtualization.getId() ],
+ [ DataservicesConstants.descriptionLabel, this.virtualization.getDescription() ]
];
return props;
diff --git a/ngapp/src/app/dataservices/dataservices-list/dataservices-list.component.html b/ngapp/src/app/dataservices/dataservices-list/dataservices-list.component.html
index 058f55fc..2280affd 100644
--- a/ngapp/src/app/dataservices/dataservices-list/dataservices-list.component.html
+++ b/ngapp/src/app/dataservices/dataservices-list/dataservices-list.component.html
@@ -166,8 +166,10 @@ Publishing Logs for '{{item.getId()}}'
-
-
+
+
diff --git a/ngapp/src/app/dataservices/dataservices-list/dataservices-list.component.ts b/ngapp/src/app/dataservices/dataservices-list/dataservices-list.component.ts
index 4b138dff..2a643d45 100644
--- a/ngapp/src/app/dataservices/dataservices-list/dataservices-list.component.ts
+++ b/ngapp/src/app/dataservices/dataservices-list/dataservices-list.component.ts
@@ -31,6 +31,7 @@ import { Subscription } from "rxjs/Subscription";
import * as _ from "lodash";
import { DataserviceService } from "@dataservices/shared/dataservice.service";
import { Dataservice } from "@dataservices/shared/dataservice.model";
+import { NameValue } from "@dataservices/shared/name-value.model";
@Component({
encapsulation: ViewEncapsulation.None,
@@ -64,7 +65,7 @@ export class DataservicesListComponent implements OnInit {
@Output() public publishDataservice: EventEmitter = new EventEmitter();
@Output() public downloadDataservice: EventEmitter = new EventEmitter();
@Output() public deleteDataservice: EventEmitter = new EventEmitter();
- @Output() public editDataservice: EventEmitter = new EventEmitter();
+ @Output() public editDataservice: EventEmitter = new EventEmitter();
@Output() public quickLookDataservice: EventEmitter = new EventEmitter();
@Output() public odataLookDataservice: EventEmitter = new EventEmitter();
@@ -247,7 +248,12 @@ export class DataservicesListComponent implements OnInit {
}
public onEditDataservice(dataserviceName: string): void {
- this.editDataservice.emit(dataserviceName);
+ const nameVal = new NameValue(dataserviceName, null);
+ this.editDataservice.emit(nameVal);
+ }
+
+ public onEditView(dsNameView: NameValue): void {
+ this.editDataservice.emit(dsNameView);
}
public onPreviewDataservice( dataserviceName: string): void {
diff --git a/ngapp/src/app/dataservices/dataservices-list/views-content.component.html b/ngapp/src/app/dataservices/dataservices-list/views-content.component.html
index 6f745369..54f242d2 100644
--- a/ngapp/src/app/dataservices/dataservices-list/views-content.component.html
+++ b/ngapp/src/app/dataservices/dataservices-list/views-content.component.html
@@ -5,11 +5,11 @@
[config]="listConfig"
[itemTemplate]="itemTemplate"
[expandTemplate]="expandTemplate"
- [items]="getViews( item )">
+ [items]="getViews( virtualization )">
diff --git a/ngapp/src/app/dataservices/dataservices-list/views-content.component.ts b/ngapp/src/app/dataservices/dataservices-list/views-content.component.ts
index 93705778..f90e9bb9 100644
--- a/ngapp/src/app/dataservices/dataservices-list/views-content.component.ts
+++ b/ngapp/src/app/dataservices/dataservices-list/views-content.component.ts
@@ -15,10 +15,11 @@
* limitations under the License.
*/
-import { Component, Input, OnInit, ViewEncapsulation } from "@angular/core";
+import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from "@angular/core";
import { Connection } from "@connections/shared/connection.model";
import { Dataservice } from "@dataservices/shared/dataservice.model";
import { ListConfig } from "patternfly-ng";
+import { NameValue } from "@dataservices/shared/name-value.model";
@Component({
encapsulation: ViewEncapsulation.None,
@@ -27,8 +28,8 @@ import { ListConfig } from "patternfly-ng";
})
export class ViewsContentComponent implements OnInit {
- @Input() public item: Dataservice;
- @Input() public selectedDataservices: Dataservice[];
+ @Input() public virtualization: Dataservice;
+ @Output() public editDataservice: EventEmitter = new EventEmitter();
public listConfig: ListConfig;
@@ -83,4 +84,13 @@ export class ViewsContentComponent implements OnInit {
} as ListConfig;
}
+ /**
+ * An event handler for when edit view is invoked.
+ * @param {string} vName the name of the view in the selected dataservice
+ */
+ public onEditView( vName: string ): void {
+ const nameVal = new NameValue(this.virtualization.getId(), vName);
+ this.editDataservice.emit(nameVal);
+ }
+
}
diff --git a/ngapp/src/app/dataservices/dataservices.component.ts b/ngapp/src/app/dataservices/dataservices.component.ts
index cf50f70c..100a8288 100644
--- a/ngapp/src/app/dataservices/dataservices.component.ts
+++ b/ngapp/src/app/dataservices/dataservices.component.ts
@@ -55,6 +55,7 @@ import { ViewEditorI18n } from "@dataservices/virtualization/view-editor/view-ed
import { CreateVirtualizationDialogComponent } from "@dataservices/create-virtualization-dialog/create-virtualization-dialog.component";
import { ViewDefinition } from "@dataservices/shared/view-definition.model";
import { ViewEditorState } from "@dataservices/shared/view-editor-state.model";
+import { NameValue } from "@dataservices/shared/name-value.model";
@Component({
moduleId: module.id,
@@ -725,13 +726,22 @@ export class DataservicesComponent extends AbstractPageComponent implements OnIn
}
/**
- * Handle Edit of the specified Dataservice
+ * Handle Edit of the specified Dataservice and View
* @param {string} svcName
*/
- public onEdit(svcName: string): void {
- const selectedService = this.filteredDataservices.find((x) => x.getId() === svcName);
+ public onEdit(svcNameView: NameValue): void {
+ const virtName = svcNameView.getName();
+ const selectedService = this.filteredDataservices.find((x) => x.getId() === virtName);
this.selectionService.setSelectedVirtualization(selectedService);
+ const viewName = svcNameView.getValue();
+ let viewDefn: ViewDefinition = null;
+ if (viewName && viewName !== null) {
+ viewDefn = new ViewDefinition();
+ viewDefn.setName(viewName);
+ }
+ this.selectionService.setSelectedViewDefinition(selectedService, viewDefn);
+
this.closeLookPanels();
const link: string[] = [ DataservicesConstants.viewPath ];
diff --git a/ngapp/src/app/dataservices/shared/name-value.model.ts b/ngapp/src/app/dataservices/shared/name-value.model.ts
index 9c6dc97c..4d901695 100644
--- a/ngapp/src/app/dataservices/shared/name-value.model.ts
+++ b/ngapp/src/app/dataservices/shared/name-value.model.ts
@@ -28,4 +28,12 @@ export class NameValue {
this.value = value;
}
+ public getName(): string {
+ return this.name;
+ }
+
+ public getValue(): string {
+ return this.value;
+ }
+
}
diff --git a/ngapp/src/app/dataservices/virtualization/view-editor/view-editor-header/view-editor-header.component.ts b/ngapp/src/app/dataservices/virtualization/view-editor/view-editor-header/view-editor-header.component.ts
index 73688d07..f6f56ea6 100644
--- a/ngapp/src/app/dataservices/virtualization/view-editor/view-editor-header/view-editor-header.component.ts
+++ b/ngapp/src/app/dataservices/virtualization/view-editor/view-editor-header/view-editor-header.component.ts
@@ -130,7 +130,7 @@ export class ViewEditorHeaderComponent implements OnInit, OnDestroy {
} as NgxDataTableConfig;
this.emptyStateConfig = {
- title: ViewEditorI18n.noViewsFound
+ title: ViewEditorI18n.noViewsDefined
} as EmptyStateConfig;
this.tableConfig = {
@@ -151,6 +151,8 @@ export class ViewEditorHeaderComponent implements OnInit, OnDestroy {
this.tableRows = [];
}
+ const selectedView = this.selectionService.getSelectedViewDefinition();
+
const vdbName = this.selectedVirtualization.getServiceVdbName();
const editorStatesPattern = vdbName.toLowerCase() + "*";
@@ -171,7 +173,13 @@ export class ViewEditorHeaderComponent implements OnInit, OnDestroy {
if (left.getName() > right.getName()) return 1;
return 0;
});
- const initialView = (self.tableRows && self.tableRows.length > 0) ? self.tableRows[0] : null;
+
+ let initialView: ViewDefinition = null;
+ if (!selectedView || selectedView === null) {
+ initialView = (self.tableRows && self.tableRows.length > 0) ? self.tableRows[0] : null;
+ } else {
+ initialView = self.tableRows.find((x) => x.getName() === selectedView.getName());
+ }
self.selectView(initialView);
self.viewsLoadingState = LoadingState.LOADED_VALID;
},
diff --git a/ngapp/src/app/dataservices/virtualization/view-editor/view-editor-i18n.ts b/ngapp/src/app/dataservices/virtualization/view-editor/view-editor-i18n.ts
index 15772a03..2211742a 100644
--- a/ngapp/src/app/dataservices/virtualization/view-editor/view-editor-i18n.ts
+++ b/ngapp/src/app/dataservices/virtualization/view-editor/view-editor-i18n.ts
@@ -113,7 +113,7 @@ export class ViewEditorI18n {
// view editor header
public static readonly viewDescriptionLabel = "Selected View Description";
public static readonly viewDescriptionPlaceholder = "Enter a view description";
- public static readonly noViewsFound = "No views found";
+ public static readonly noViewsDefined = "No views defined";
// view preview
public static readonly previewDataUnavailable = "Preview data unavailable";
diff --git a/ngapp/src/app/dataservices/virtualization/view-editor/view-editor.service.ts b/ngapp/src/app/dataservices/virtualization/view-editor/view-editor.service.ts
index f0cef83e..e5ed7ae7 100644
--- a/ngapp/src/app/dataservices/virtualization/view-editor/view-editor.service.ts
+++ b/ngapp/src/app/dataservices/virtualization/view-editor/view-editor.service.ts
@@ -430,14 +430,17 @@ export class ViewEditorService {
const dataserviceName = this._selectionService.getSelectedVirtualization().getId();
+ const self = this;
this._dataserviceService.saveViewEditorStateRefreshViews( editorState, dataserviceName ).subscribe( () => {
+ // reset original view to saved state
+ self._originalView = ViewDefinition.create(this._editorView.toJSON());
// fire save editor state succeeded event
- this.fire( ViewEditorEvent.create( ViewEditorPart.EDITOR,
+ self.fire( ViewEditorEvent.create( ViewEditorPart.EDITOR,
ViewEditorEventType.EDITOR_VIEW_SAVE_PROGRESS_CHANGED,
[ ViewEditorProgressChangeId.COMPLETED_SUCCESS ] ) );
}, () => {
// fire save editor state failed event
- this.fire( ViewEditorEvent.create( ViewEditorPart.EDITOR,
+ self.fire( ViewEditorEvent.create( ViewEditorPart.EDITOR,
ViewEditorEventType.EDITOR_VIEW_SAVE_PROGRESS_CHANGED,
[ ViewEditorProgressChangeId.COMPLETED_FAILED ] ) );
}
@@ -499,7 +502,7 @@ export class ViewEditorService {
// Clear preview results
this.setPreviewResults(null, null, ViewEditorPart.EDITOR);
- var querySql = "";
+ let querySql = "";
if ( sourcePath != null && !sourcePath.startsWith(AddCompositionCommand.id) ) {
// Fetch new results for source table
querySql = this._editorView.getPreviewSql(sourcePath);
diff --git a/ngapp/src/styles.css b/ngapp/src/styles.css
index e14b7091..d9ddf1f8 100644
--- a/ngapp/src/styles.css
+++ b/ngapp/src/styles.css
@@ -152,7 +152,7 @@
.object-card-selected .card-pf .card-pf-body,
.object-card .card-pf .card-pf-body {
- margin: 20px;
+ margin: 0;
padding: 0;
}
@@ -170,7 +170,7 @@
}
.object-card-body {
- margin: 0 -20px;
+ margin: 0;
max-height: 200px;
overflow-y: auto;
}