Skip to content

Commit

Permalink
Paths explorer
Browse files Browse the repository at this point in the history
  • Loading branch information
riccardo-forina committed Nov 26, 2024
1 parent 2d06cb3 commit f4f52ca
Show file tree
Hide file tree
Showing 9 changed files with 344 additions and 63 deletions.
13 changes: 12 additions & 1 deletion packages/ui/src/OpenApiEditorModels.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,22 @@ export type Response =
ref: string; // TODO
};

export const Operations = [
"get" as const,
"put" as const,
"post" as const,
"delete" as const,
"options" as const,
"head" as const,
"patch" as const,
"trace" as const,
];

export type Operation = {
summary: string;
description: string;
id: string;
tags: Tag[];
tags: string[];
servers: Server[];
queryParameters: "TODO";
headerParameters: "TODO";
Expand Down
3 changes: 2 additions & 1 deletion packages/ui/src/OpenApiEditorWorker.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import * as DM from "@apicurio/data-models";
import { Oas20Operation } from "@apicurio/data-models";
import { FindPathItemsVisitor } from "../../visitors/src/path-items.visitor.ts";
import { FindResponseDefinitionsVisitor } from "../../visitors/src/response-definitions.visitor.ts";
import { FindSchemaDefinitionsVisitor } from "../../visitors/src/schema-definitions.visitor.ts";
Expand Down Expand Up @@ -213,7 +214,7 @@ function oasOperationToOperation(
summary: operation.summary,
description: operation.description,
id: operation.operationId,
tags: [],
tags: (operation as Oas20Operation).tags,
servers: [],
queryParameters: "TODO",
headerParameters: "TODO",
Expand Down
8 changes: 1 addition & 7 deletions packages/ui/src/components/Path.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,7 @@ export function Path({ path }: { path: string }) {
p
)}
{idx < list.length - 1 && (
<span
className={
"pf-v6-u-text-color-disabled pf-v6-u-text-color-status-danger"
}
>
/
</span>
<span className={"pf-v6-u-text-color-disabled"}>/</span>
)}
</Fragment>
)) as unknown as string
Expand Down
92 changes: 50 additions & 42 deletions packages/ui/src/components/SearchableTable.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import {
Button,
Card,
CardBody,
DataList,
EmptyState,
EmptyStateActions,
Expand Down Expand Up @@ -78,48 +80,54 @@ export function SearchableTable<T>({
</PanelHeader>
)}
<PanelMain>
{filteredData.length > 0 && (
<DataList
aria-label="Servers"
isCompact={!editing}
gridBreakpoint={editing ? "always" : undefined}
>
{filteredData.map((t, idx) => {
return <Fragment key={idx}>{onRenderRow(t, idx)}</Fragment>;
})}
</DataList>
)}
{filteredData.length === 0 && filter.length > 0 && (
<PanelMainBody>
<EmptyState variant={"xs"} icon={SearchIcon}>
<EmptyStateBody>
No {label}s were found that meet the search criteria.
</EmptyStateBody>
<EmptyStateActions>
<Button variant={"link"} onClick={() => setFilter("")}>
Reset search
</Button>
</EmptyStateActions>
</EmptyState>
</PanelMainBody>
)}
{filteredData.length === 0 && filter.length === 0 && (
<PanelMainBody>
<EmptyState
variant={"xs"}
icon={editing ? AddCircleOIcon : undefined}
>
<EmptyStateBody>No {label}s have been defined.</EmptyStateBody>
{editing && (
<EmptyStateActions>
<Button variant={"link"} onClick={onAdd}>
Add a {label}
</Button>
</EmptyStateActions>
)}
</EmptyState>
</PanelMainBody>
)}
<Card>
<CardBody>
{filteredData.length > 0 && (
<DataList
aria-label="Servers"
isCompact={!editing}
gridBreakpoint={editing ? "always" : undefined}
>
{filteredData.map((t, idx) => {
return <Fragment key={idx}>{onRenderRow(t, idx)}</Fragment>;
})}
</DataList>
)}
{filteredData.length === 0 && filter.length > 0 && (
<PanelMainBody>
<EmptyState variant={"xs"} icon={SearchIcon}>
<EmptyStateBody>
No {label}s were found that meet the search criteria.
</EmptyStateBody>
<EmptyStateActions>
<Button variant={"link"} onClick={() => setFilter("")}>
Reset search
</Button>
</EmptyStateActions>
</EmptyState>
</PanelMainBody>
)}
{filteredData.length === 0 && filter.length === 0 && (
<PanelMainBody>
<EmptyState
variant={"xs"}
icon={editing ? AddCircleOIcon : undefined}
>
<EmptyStateBody>
No {label}s have been defined.
</EmptyStateBody>
{editing && (
<EmptyStateActions>
<Button variant={"link"} onClick={onAdd}>
Add a {label}
</Button>
</EmptyStateActions>
)}
</EmptyState>
</PanelMainBody>
)}
</CardBody>
</Card>
</PanelMain>
</Panel>
);
Expand Down
7 changes: 5 additions & 2 deletions packages/ui/src/documentDesigner/Designer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ import { SecurityScheme } from "./SecurityScheme.tsx";
import { SecurityRequirements } from "./SecurityRequirements.tsx";
import { useMachineSelector } from "./DocumentDesignerMachineContext.ts";
import { DesignerLayout } from "./DesignerLayout.tsx";
import { Paths } from "./Paths.tsx";
import { PathsExplorer } from "./PathsExplorer.tsx";
import { PathsTree } from "./PathsTree.tsx";

export function Designer() {
const {
Expand All @@ -16,19 +17,21 @@ export function Designer() {
securitySchemeCount,
securityRequirementsCount,
pathsCount,
editable,
} = useMachineSelector(({ context }) => {
return {
tagDefinitionsCount: context.tags?.length,
serversCount: context.servers?.length,
securitySchemeCount: context.securityScheme?.length,
securityRequirementsCount: context.securityRequirements?.length,
pathsCount: context.paths?.length,
editable: context.editable,
};
});
return (
<DesignerLayout
info={<Info />}
paths={<Paths />}
paths={editable ? <PathsTree /> : <PathsExplorer />}
pathsCount={pathsCount}
contact={<Contact />}
license={<License />}
Expand Down
Loading

0 comments on commit f4f52ca

Please sign in to comment.