Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(top-bar): add support for loading AsyncAPI Streetlights 3.0.0 example #4887

Merged
merged 1 commit into from
Mar 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/plugins/editor-content-fixtures/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import selectOpenAPI303PetstoreYAML from './selectors/selectOpenAPI303PetstoreYA
import selectOpenAPI20PetstoreYAML from './selectors/selectOpenAPI20PetstoreYAML.js';
import selectAsyncAPI260PetstoreYAML from './selectors/selectAsyncAPI260PetstoreYAML.js';
import selectAsyncAPI260StreetlightsYAML from './selectors/selectAsyncAPI260StreetlightsYAML.js';
import selectAsyncAPI300StreetlightsYAML from './selectors/selectAsyncAPI300StreetlightsYAML.js';
import selectAPIDesignSystemsYAML from './selectors/selectAPIDesignSystemsYAML.js';
// test

Expand All @@ -15,6 +16,8 @@ const EditorContentFixturesPlugin = () => ({
selectOpenAPI20PetstoreYAML,
selectAsyncAPI260PetstoreYAML,
selectAsyncAPI260StreetlightsYAML,
selectAsyncAPI300StreetlightsYAML,

selectAPIDesignSystemsYAML,
},
},
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,202 @@
const selectAsyncAPI300StreetlightsYAML = () => `asyncapi: 3.0.0
info:
title: Streetlights Kafka API
version: 1.0.0
description: "The Smartylighting Streetlights API allows you to remotely manage the city lights.\\n\\n### Check out its awesome features:\\n\\n* Turn a specific streetlight on/off \\U0001F303\\n* Dim a specific streetlight \\U0001F60E\\n* Receive real-time information about environmental lighting conditions \\U0001F4C8\\n"
license:
name: Apache 2.0
url: 'https://www.apache.org/licenses/LICENSE-2.0'
defaultContentType: application/json
servers:
scram-connections:
host: 'test.mykafkacluster.org:18092'
protocol: kafka-secure
description: Test broker secured with scramSha256
security:
- $ref: '#/components/securitySchemes/saslScram'
tags:
- name: 'env:test-scram'
description: >-
This environment is meant for running internal tests through
scramSha256
- name: 'kind:remote'
description: This server is a remote server. Not exposed by the application
- name: 'visibility:private'
description: This resource is private and only available to certain users
mtls-connections:
host: 'test.mykafkacluster.org:28092'
protocol: kafka-secure
description: Test broker secured with X509
security:
- $ref: '#/components/securitySchemes/certs'
tags:
- name: 'env:test-mtls'
description: This environment is meant for running internal tests through mtls
- name: 'kind:remote'
description: This server is a remote server. Not exposed by the application
- name: 'visibility:private'
description: This resource is private and only available to certain users
channels:
lightingMeasured:
address: 'smartylighting.streetlights.1.0.event.{streetlightId}.lighting.measured'
messages:
lightMeasured:
$ref: '#/components/messages/lightMeasured'
description: The topic on which measured values may be produced and consumed.
parameters:
streetlightId:
$ref: '#/components/parameters/streetlightId'
lightTurnOn:
address: 'smartylighting.streetlights.1.0.action.{streetlightId}.turn.on'
messages:
turnOn:
$ref: '#/components/messages/turnOnOff'
parameters:
streetlightId:
$ref: '#/components/parameters/streetlightId'
lightTurnOff:
address: 'smartylighting.streetlights.1.0.action.{streetlightId}.turn.off'
messages:
turnOff:
$ref: '#/components/messages/turnOnOff'
parameters:
streetlightId:
$ref: '#/components/parameters/streetlightId'
lightsDim:
address: 'smartylighting.streetlights.1.0.action.{streetlightId}.dim'
messages:
dimLight:
$ref: '#/components/messages/dimLight'
parameters:
streetlightId:
$ref: '#/components/parameters/streetlightId'
operations:
receiveLightMeasurement:
action: receive
channel:
$ref: '#/channels/lightingMeasured'
summary: >-
Inform about environmental lighting conditions of a particular
streetlight.
traits:
- $ref: '#/components/operationTraits/kafka'
messages:
- $ref: '#/channels/lightingMeasured/messages/lightMeasured'
turnOn:
action: send
channel:
$ref: '#/channels/lightTurnOn'
traits:
- $ref: '#/components/operationTraits/kafka'
messages:
- $ref: '#/channels/lightTurnOn/messages/turnOn'
turnOff:
action: send
channel:
$ref: '#/channels/lightTurnOff'
traits:
- $ref: '#/components/operationTraits/kafka'
messages:
- $ref: '#/channels/lightTurnOff/messages/turnOff'
dimLight:
action: send
channel:
$ref: '#/channels/lightsDim'
traits:
- $ref: '#/components/operationTraits/kafka'
messages:
- $ref: '#/channels/lightsDim/messages/dimLight'
components:
messages:
lightMeasured:
name: lightMeasured
title: Light measured
summary: >-
Inform about environmental lighting conditions of a particular
streetlight.
contentType: application/json
traits:
- $ref: '#/components/messageTraits/commonHeaders'
payload:
$ref: '#/components/schemas/lightMeasuredPayload'
turnOnOff:
name: turnOnOff
title: Turn on/off
summary: Command a particular streetlight to turn the lights on or off.
traits:
- $ref: '#/components/messageTraits/commonHeaders'
payload:
$ref: '#/components/schemas/turnOnOffPayload'
dimLight:
name: dimLight
title: Dim light
summary: Command a particular streetlight to dim the lights.
traits:
- $ref: '#/components/messageTraits/commonHeaders'
payload:
$ref: '#/components/schemas/dimLightPayload'
schemas:
lightMeasuredPayload:
type: object
properties:
lumens:
type: integer
minimum: 0
description: Light intensity measured in lumens.
sentAt:
$ref: '#/components/schemas/sentAt'
turnOnOffPayload:
type: object
properties:
command:
type: string
enum:
- 'on'
- 'off'
description: Whether to turn on or off the light.
sentAt:
$ref: '#/components/schemas/sentAt'
dimLightPayload:
type: object
properties:
percentage:
type: integer
description: Percentage to which the light should be dimmed to.
minimum: 0
maximum: 100
sentAt:
$ref: '#/components/schemas/sentAt'
sentAt:
type: string
format: date-time
description: Date and time when the message was sent.
securitySchemes:
saslScram:
type: scramSha256
description: Provide your username and password for SASL/SCRAM authentication
certs:
type: X509
description: Download the certificate files from service provider
parameters:
streetlightId:
description: The ID of the streetlight.
messageTraits:
commonHeaders:
headers:
type: object
properties:
my-app-header:
type: integer
minimum: 0
maximum: 100
operationTraits:
kafka:
bindings:
kafka:
clientId:
type: string
enum:
- my-app-id
`;

export default selectAsyncAPI300StreetlightsYAML;
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ const LoadExampleNestedMenu = (props) => {
'TopBarFileMenuLoadExampleNestedMenuAsyncAPI26StreetlightsMenuItem',
true
);
const AsyncAPI30StreetlightsMenuItem = getComponent(
'TopBarFileMenuLoadExampleNestedMenuAsyncAPI30StreetlightsMenuItem',
true
);
const APIDesignSystemsMenuItem = getComponent(
'TopBarFileMenuLoadExampleNestedMenuAPIDesignSystemsMenuItem',
true
Expand All @@ -48,6 +52,9 @@ const LoadExampleNestedMenu = (props) => {
const handleAsyncAPI26StreetlightsClick = useCallback(async (event) => {
await loadExampleNestedMenuHandler.current.loadAsyncAPI26StreetlightsFixture(event);
}, []);
const handleAsyncAPI30StreetlightsClick = useCallback(async (event) => {
await loadExampleNestedMenuHandler.current.loadAsyncAPI30StreetlightsFixture(event);
}, []);
const handleAPIDesignSystemsClick = useCallback(async (event) => {
await loadExampleNestedMenuHandler.current.loadAPIDesignSystemsFixture(event);
}, []);
Expand All @@ -62,6 +69,7 @@ const LoadExampleNestedMenu = (props) => {
<OpenAPI20PetstoreMenuItem onClick={handleOpenAPI20PetstoreClick} />
<DropdownMenuItemDivider />
<AsyncAPI26PetstoreMenuItem onClick={handleAsyncAPI26PetstoreClick} />
<AsyncAPI30StreetlightsMenuItem onClick={handleAsyncAPI30StreetlightsClick} />
<AsyncAPI26StreetlightsMenuItem onClick={handleAsyncAPI26StreetlightsClick} />
<DropdownMenuItemDivider />
<APIDesignSystemsMenuItem onClick={handleAPIDesignSystemsClick} />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ const LoadExampleNestedMenuHandler = forwardRef((props, ref) => {
const content = editorContentFixturesSelectors.selectAsyncAPI260StreetlightsYAML();
editorActions.setContent(content, 'fixture-load');
},
loadAsyncAPI30StreetlightsFixture() {
const content = editorContentFixturesSelectors.selectAsyncAPI300StreetlightsYAML();
editorActions.setContent(content, 'fixture-load');
},
loadAPIDesignSystemsFixture() {
const content = editorContentFixturesSelectors.selectAPIDesignSystemsYAML();
editorActions.setContent(content, 'fixture-load');
Expand All @@ -44,6 +48,7 @@ LoadExampleNestedMenuHandler.propTypes = {
selectOpenAPI20PetstoreYAML: PropTypes.func.isRequired,
selectAsyncAPI260PetstoreYAML: PropTypes.func.isRequired,
selectAsyncAPI260StreetlightsYAML: PropTypes.func.isRequired,
selectAsyncAPI300StreetlightsYAML: PropTypes.func.isRequired,
selectAPIDesignSystemsYAML: PropTypes.func.isRequired,
}).isRequired,
};
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import PropTypes from 'prop-types';

const AsyncAPI30StreetlightsMenuItem = ({ getComponent, onClick, children }) => {
const DropdownMenuItem = getComponent('DropdownMenuItem');

return (
<DropdownMenuItem onClick={onClick}>{children || 'AsyncAPI 3.0 Streetlights'}</DropdownMenuItem>
);
};

AsyncAPI30StreetlightsMenuItem.propTypes = {
getComponent: PropTypes.func.isRequired,
children: PropTypes.node,
onClick: PropTypes.func.isRequired,
};

AsyncAPI30StreetlightsMenuItem.defaultProps = {
children: null,
};

export default AsyncAPI30StreetlightsMenuItem;
3 changes: 3 additions & 0 deletions src/plugins/top-bar/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import OpenAPI30PetstoreMenuItem from './components/FileMenu/items/LoadExampleNe
import OpenAPI20PetstoreMenuItem from './components/FileMenu/items/LoadExampleNestedMenu/items/OpenAPI20PetstoreMenuItem.jsx';
import AsyncAPI26PetstoreMenuItem from './components/FileMenu/items/LoadExampleNestedMenu/items/AsyncAPI26PetstoreMenuItem.jsx';
import AsyncAPI26StreetlightsMenuItem from './components/FileMenu/items/LoadExampleNestedMenu/items/AsyncAPI26StreetlightsMenuItem.jsx';
import AsyncAPI30StreetlightsMenuItem from './components/FileMenu/items/LoadExampleNestedMenu/items/AsyncAPI30StreetlightsMenuItem.jsx';
import APIDesignSystemsMenuItem from './components/FileMenu/items/LoadExampleNestedMenu/items/APIDesignSystemsMenuItem.jsx';
import SaveAsMenuItem from './components/FileMenu/items/SaveAsMenuItem.jsx';
import ConvertAndSaveAsJSONMenuItem from './components/FileMenu/items/ConvertAndSaveAsJSONMenuItem.jsx';
Expand Down Expand Up @@ -146,6 +147,8 @@ const TopBarPlugin = () => ({
TopBarFileMenuLoadExampleNestedMenuAsyncAPI26PetstoreMenuItem: AsyncAPI26PetstoreMenuItem,
TopBarFileMenuLoadExampleNestedMenuAsyncAPI26StreetlightsMenuItem:
AsyncAPI26StreetlightsMenuItem,
TopBarFileMenuLoadExampleNestedMenuAsyncAPI30StreetlightsMenuItem:
AsyncAPI30StreetlightsMenuItem,
TopBarFileMenuLoadExampleNestedMenuAPIDesignSystemsMenuItem: APIDesignSystemsMenuItem,
TopBarFileMenuSaveAsMenuItem: SaveAsMenuItem,
TopBarFileMenuConvertAndSaveAsJSONMenuItem: ConvertAndSaveAsJSONMenuItem,
Expand Down