Skip to content

Commit

Permalink
feat(top-bar): add support for loading AsyncAPI Streetlights 3.0.0 ex…
Browse files Browse the repository at this point in the history
…ample (#4887)

Refs #4874
  • Loading branch information
char0n committed Mar 29, 2024
1 parent 1626243 commit 902f580
Show file tree
Hide file tree
Showing 6 changed files with 242 additions and 0 deletions.
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

0 comments on commit 902f580

Please sign in to comment.