Skip to content

Commit 5b38fcb

Browse files
authored
FUI - Operation details widget (#2517)
1 parent 22894a6 commit 5b38fcb

33 files changed

+1952
-58
lines changed

package-lock.json

Lines changed: 374 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@
117117
"react-cropper": "^2.3.2",
118118
"react-dom": "^18.2.0",
119119
"react-markdown": "^8.0.7",
120+
"react-syntax-highlighter": "^15.5.0",
120121
"react-toastify": "^9.1.3",
121122
"rehype-raw": "^6.1.1",
122123
"rehype-sanitize": "^5.0.1",

src/apim.runtime.module.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,10 @@ import { TraceClick } from "./bindingHandlers/traceClick";
9292
import { GraphqlService } from "./services/graphqlService";
9393
import { ListOfApisRuntimeModule } from "./components/apis/list-of-apis/listOfApis.runtime.module";
9494
import { ProductListRuntimeModule } from "./components/products/product-list/productList.runtime.module";
95-
import { ProductApisRuntimeModule } from "./components/products/product-apis/productApis.runtime.module";
9695
import { OperationListRuntimeModule } from "./components/operations/operation-list/operationList.runtime.module";
9796
import { DetailsOfApiRuntimeModule } from "./components/apis/details-of-api/detailsOfApi.runtime.module";
97+
import { OperationDetailsRuntimeModule } from "./components/operations/operation-details/operationDetails.runtime.module";
98+
import { ProductApisRuntimeModule } from "./components/products/product-apis/productApis.runtime.module";
9899
import { ProductDetailsRuntimeModule } from "./components/products/product-details/productDetails.runtime.module";
99100
import { ProductSubscribeRuntimeModule } from "./components/products/product-subscribe/productSubscribe.runtime.module";
100101
import { ProductSubscriptionsRuntimeModule } from "./components/products/product-subscriptions/productSubscriptions.runtime.module";
@@ -181,6 +182,7 @@ export class ApimRuntimeModule implements IInjectorModule {
181182
injector.bindModule(new ProductApisRuntimeModule());
182183
injector.bindModule(new OperationListRuntimeModule());
183184
injector.bindModule(new DetailsOfApiRuntimeModule());
185+
injector.bindModule(new OperationDetailsRuntimeModule());
184186
injector.bindModule(new ProductDetailsRuntimeModule());
185187
injector.bindModule(new ProductSubscribeRuntimeModule());
186188
injector.bindModule(new ProductSubscriptionsRuntimeModule());

src/components/apis/details-of-api/react/runtime/ApiDetails.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { KnownMimeTypes } from "../../../../../models/knownMimeTypes"
99
import { ApiService } from "../../../../../services/apiService";
1010
import { RouteHelper } from "../../../../../routing/routeHelper";
1111
import { TypeOfApi, fuiTheme } from "../../../../../constants";
12-
import { MarkdownProcessor } from "../../../../react-markdown/MarkdownProcessor";
12+
import { MarkdownProcessor } from "../../../../utils/react/MarkdownProcessor";
1313

1414
interface ApiDetailsProps {
1515
changeLogPageUrl?: string

src/components/apis/list-of-apis/react/runtime/ApiListDropdown.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ const TagLabel = ({
5353
const ApiTypeBadge = ({ api }: { api: Api }) =>
5454
!!api.typeName &&
5555
api.typeName !== "REST" && (
56-
<Badge appearance="outline">{api.typeName}</Badge>
56+
<Badge appearance="outline" size="small">{api.typeName}</Badge>
5757
);
5858

5959
const ApiVersionBadge = ({ api }: { api: Api }) =>

src/components/apis/list-of-apis/react/runtime/ApisCards.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Body1Strong, Button, Caption1Stronger, Link, Subtitle1 } from "@fluentu
33
import { Api } from "../../../../../models/api";
44
import { isApisGrouped, toggleValueInSet, TagGroupToggleBtn, TApisData } from "./utils";
55
import { TagGroup } from "../../../../../models/tagGroup";
6-
import { MarkdownProcessor } from "../../../../react-markdown/MarkdownProcessor";
6+
import { MarkdownProcessor } from "../../../../utils/react/MarkdownProcessor";
77
import { markdownMaxCharsMap } from "../../../../../constants";
88

99
type Props = {

src/components/apis/list-of-apis/react/runtime/ApisTable.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import {
1818
TApisData,
1919
toggleValueInSet,
2020
} from "./utils";
21-
import { MarkdownProcessor } from "../../../../react-markdown/MarkdownProcessor";
21+
import { MarkdownProcessor } from "../../../../utils/react/MarkdownProcessor";
2222
import { markdownMaxCharsMap } from "../../../../../constants";
2323

2424
type Props = {
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,6 @@
1-
<operation-details data-bind="attr: { params: config }"></operation-details>
1+
<!-- ko if: isRedesignEnabled -->
2+
<fui-operation-details data-bind="attr: { props: config }"></fui-operation-details>
3+
<!-- /ko -->
4+
<!-- ko ifnot: isRedesignEnabled -->
5+
<operation-details data-bind="attr: { params: config }"></operation-details>
6+
<!-- /ko -->

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@ import { StyleModel } from "@paperbits/common/styles";
1010
export class OperationDetailsViewModel {
1111
public readonly config?: ko.Observable<string>;
1212
public readonly styles: ko.Observable<StyleModel>;
13+
public readonly isRedesignEnabled: ko.Observable<boolean>;
1314

1415
constructor() {
1516
this.config = ko.observable();
1617
this.styles = ko.observable<StyleModel>();
18+
this.isRedesignEnabled = ko.observable<boolean>();
1719
}
1820
}

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
import { ViewModelBinder, WidgetState } from "@paperbits/common/widgets";
2+
import { StyleCompiler } from "@paperbits/common/styles";
3+
import { ISiteService } from "@paperbits/common/sites";
24
import { OperationDetailsViewModel } from "./operationDetailsViewModel";
35
import { OperationDetailsModel } from "../operationDetailsModel";
4-
import { StyleCompiler } from "@paperbits/common/styles";
6+
import { isRedesignEnabledSetting } from "../../../../constants";
57

68
export class OperationDetailsViewModelBinder implements ViewModelBinder<OperationDetailsModel, OperationDetailsViewModel> {
7-
constructor(private readonly styleCompiler: StyleCompiler) { }
9+
constructor(
10+
private readonly styleCompiler: StyleCompiler,
11+
private readonly siteService: ISiteService
12+
) { }
813

914
public stateToInstance(state: WidgetState, componentInstance: OperationDetailsViewModel): void {
1015
componentInstance.styles(state.styles);
16+
componentInstance.isRedesignEnabled(state.isRedesignEnabled);
1117

1218
componentInstance.config(JSON.stringify({
1319
enableConsole: state.enableConsole,
@@ -30,5 +36,7 @@ export class OperationDetailsViewModelBinder implements ViewModelBinder<Operatio
3036
if (model.styles) {
3137
state.styles = await this.styleCompiler.getStyleModelAsync(model.styles);
3238
}
39+
40+
state.isRedesignEnabled = !!(await this.siteService.getSetting(isRedesignEnabledSetting));
3341
}
3442
}

src/components/operations/operation-details/ko/runtime/type-definition-object.html

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,7 @@
6666

6767
<!-- /ko -->
6868
</div>
69-
<!-- ko if: $component.examples -->
70-
<div role="cell" class="text-truncate" data-bind="text: $component.examples[property.name], attr: {title: $component.examples[property.name]}"></div>
71-
<!-- /ko -->
69+
<div role="cell" class="text-truncate" data-bind="text: property.example, attr: {title: property.example}"></div>
7270
<div role="cell" data-bind="markdown: property.description"></div>
7371
</div>
7472
<!-- /ko -->
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { IInjector, IInjectorModule } from "@paperbits/common/injection";
2+
import { registerCustomElement } from "@paperbits/react/customElements";
3+
import { OperationDetailsRuntime } from "./react/runtime/OperationDetailsRuntime";
4+
5+
export class OperationDetailsRuntimeModule implements IInjectorModule {
6+
public register(injector: IInjector): void {
7+
injector.bind("operationDetailsRuntime", OperationDetailsRuntime);
8+
registerCustomElement(OperationDetailsRuntime, "fui-operation-details", injector);
9+
}
10+
}

0 commit comments

Comments
 (0)