Skip to content

Commit dc50038

Browse files
authored
Added "enable console" option to the operation details editor. (#352)
1 parent 86c8dce commit dc50038

10 files changed

+61
-13
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<operation-details></operation-details>
1+
<operation-details data-bind="attr: { params: config }"></operation-details>
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<fieldset class="form flex-item flex-item-grow" data-bind="scrollable: {}">
2-
<b>Coming soon</b>
3-
<p>
4-
An editor for this widget is not yet ready.<br />
5-
</p>
2+
<div class="form-group">
3+
<label for="enableConsole" class="form-label">
4+
<input type="checkbox" id="allowSelection" name="enableConsole" data-bind="checked: enableConsole" />
5+
Enable API console
6+
</label>
7+
</div>
68
</fieldset>

src/components/operations/operation-details/ko/operationDetailsEditor.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@ import { OperationDetailsModel } from "../operationDetailsModel";
99
injectable: "operationDetailsEditor"
1010
})
1111
export class OperationDetailsEditor {
12-
constructor() { }
12+
public readonly enableConsole: ko.Observable<boolean>;
13+
14+
constructor() {
15+
this.enableConsole = ko.observable();
16+
}
1317

1418
@Param()
1519
public model: OperationDetailsModel;
@@ -19,6 +23,12 @@ export class OperationDetailsEditor {
1923

2024
@OnMounted()
2125
public async initialize(): Promise<void> {
22-
// TODO: Implement
26+
this.enableConsole(this.model.enableConsole);
27+
this.enableConsole.subscribe(this.applyChanges);
28+
}
29+
30+
private applyChanges(): void {
31+
this.model.enableConsole = this.enableConsole();
32+
this.onChange(this.model);
2333
}
2434
}

src/components/operations/operation-details/ko/operationDetailsViewModel.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import * as ko from "knockout";
12
import template from "./operationDetails.html";
23
import { Component } from "@paperbits/common/ko/decorators";
34

@@ -6,4 +7,9 @@ import { Component } from "@paperbits/common/ko/decorators";
67
template: template
78
})
89
export class OperationDetailsViewModel {
10+
public readonly config?: ko.Observable<string>;
11+
12+
constructor() {
13+
this.config = ko.observable();
14+
}
915
}

src/components/operations/operation-details/ko/operationDetailsViewModelBinder.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,27 @@
11
import { ViewModelBinder } from "@paperbits/common/widgets";
2+
import { EventManager } from "@paperbits/common/events";
23
import { OperationDetailsViewModel } from "./operationDetailsViewModel";
34
import { OperationDetailsModel } from "../operationDetailsModel";
45
import { Bag } from "@paperbits/common";
56

7+
68
export class OperationDetailsViewModelBinder implements ViewModelBinder<OperationDetailsModel, OperationDetailsViewModel> {
9+
constructor(private readonly eventManager: EventManager) { }
10+
711
public async modelToViewModel(model: OperationDetailsModel, viewModel?: OperationDetailsViewModel, bindingContext?: Bag<any>): Promise<OperationDetailsViewModel> {
812
if (!viewModel) {
913
viewModel = new OperationDetailsViewModel();
1014
}
1115

16+
viewModel.config(JSON.stringify({ enableConsole: model.enableConsole }));
17+
1218
viewModel["widgetBinding"] = {
1319
displayName: "Operation: Details",
1420
model: model,
1521
editor: "operation-details-editor",
1622
applyChanges: async (updatedModel: OperationDetailsModel) => {
17-
this.modelToViewModel(updatedModel, viewModel, bindingContext);
23+
await this.modelToViewModel(updatedModel, viewModel, bindingContext);
24+
this.eventManager.dispatchEvent("onContentUpdate");
1825
}
1926
};
2027

src/components/operations/operation-details/ko/runtime/operation-details.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@
1111
<h2 class="operation-name" data-bind="click: $component.openConsole">
1212
<span data-bind="text: operation().displayName"></span>
1313
</h2>
14+
<!-- ko if: $component.enableConsole -->
1415
<button class="open-console-button" data-bind="click: $component.openConsole">Try it <i class="icon icon-play"></i>
1516
</button>
17+
<!-- /ko -->
1618
</div>
1719

1820
<!-- ko if: operation().description -->

src/components/operations/operation-details/ko/runtime/operation-details.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Representation } from "./../../../../../models/representation";
22
import * as ko from "knockout";
33
import template from "./operation-details.html";
44
import { Router } from "@paperbits/common/routing";
5-
import { Component, RuntimeComponent, OnMounted, OnDestroyed } from "@paperbits/common/ko/decorators";
5+
import { Component, RuntimeComponent, OnMounted, OnDestroyed, Param } from "@paperbits/common/ko/decorators";
66
import { Api } from "../../../../../models/api";
77
import { Operation } from "../../../../../models/operation";
88
import { ApiService } from "../../../../../services/apiService";
@@ -66,6 +66,9 @@ export class OperationDetails {
6666
});
6767
}
6868

69+
@Param()
70+
public enableConsole: boolean;
71+
6972
@OnMounted()
7073
public async initialize(): Promise<void> {
7174
await this.loadGatewayInfo();
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
import { Contract } from "@paperbits/common";
22

3-
export interface OperationDetailsContract extends Contract { }
3+
export interface OperationDetailsContract extends Contract {
4+
/**
5+
* Indicates whether "Try" button should appear on the operation details widget.
6+
*/
7+
enableConsole?: boolean;
8+
}
Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,10 @@
1-
export class OperationDetailsModel { }
1+
export class OperationDetailsModel {
2+
/**
3+
* Indicates whether "Try" button should appear on the operation details widget.
4+
*/
5+
public enableConsole?: boolean;
6+
7+
constructor() {
8+
this.enableConsole = true;
9+
}
10+
}

src/components/operations/operation-details/operationDetailsModelBinder.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,16 @@ export class OperationDetailsModelBinder implements IModelBinder<OperationDetail
1313
}
1414

1515
public async contractToModel(contract: OperationDetailsContract): Promise<OperationDetailsModel> {
16-
return new OperationDetailsModel();
16+
const model = new OperationDetailsModel();
17+
model.enableConsole = contract.enableConsole === true;
18+
19+
return model;
1720
}
1821

1922
public modelToContract(model: OperationDetailsModel): Contract {
2023
const contract: OperationDetailsContract = {
21-
type: "operationDetails"
24+
type: "operationDetails",
25+
enableConsole: model.enableConsole
2226
};
2327

2428
return contract;

0 commit comments

Comments
 (0)