diff --git a/src/plugins/editor-content-fixtures/index.js b/src/plugins/editor-content-fixtures/index.js index 7c9086f3d09..2f93c8b4849 100644 --- a/src/plugins/editor-content-fixtures/index.js +++ b/src/plugins/editor-content-fixtures/index.js @@ -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 @@ -15,6 +16,8 @@ const EditorContentFixturesPlugin = () => ({ selectOpenAPI20PetstoreYAML, selectAsyncAPI260PetstoreYAML, selectAsyncAPI260StreetlightsYAML, + selectAsyncAPI300StreetlightsYAML, + selectAPIDesignSystemsYAML, }, }, diff --git a/src/plugins/editor-content-fixtures/selectors/selectAsyncAPI300StreetlightsYAML.js b/src/plugins/editor-content-fixtures/selectors/selectAsyncAPI300StreetlightsYAML.js new file mode 100644 index 00000000000..c8a485225e2 --- /dev/null +++ b/src/plugins/editor-content-fixtures/selectors/selectAsyncAPI300StreetlightsYAML.js @@ -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; diff --git a/src/plugins/top-bar/components/FileMenu/items/LoadExampleNestedMenu/LoadExampleNestedMenu.jsx b/src/plugins/top-bar/components/FileMenu/items/LoadExampleNestedMenu/LoadExampleNestedMenu.jsx index 750902329ad..1ac4b3f6c70 100644 --- a/src/plugins/top-bar/components/FileMenu/items/LoadExampleNestedMenu/LoadExampleNestedMenu.jsx +++ b/src/plugins/top-bar/components/FileMenu/items/LoadExampleNestedMenu/LoadExampleNestedMenu.jsx @@ -28,6 +28,10 @@ const LoadExampleNestedMenu = (props) => { 'TopBarFileMenuLoadExampleNestedMenuAsyncAPI26StreetlightsMenuItem', true ); + const AsyncAPI30StreetlightsMenuItem = getComponent( + 'TopBarFileMenuLoadExampleNestedMenuAsyncAPI30StreetlightsMenuItem', + true + ); const APIDesignSystemsMenuItem = getComponent( 'TopBarFileMenuLoadExampleNestedMenuAPIDesignSystemsMenuItem', true @@ -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); }, []); @@ -62,6 +69,7 @@ const LoadExampleNestedMenu = (props) => { + diff --git a/src/plugins/top-bar/components/FileMenu/items/LoadExampleNestedMenu/LoadExampleNestedMenuHandler.jsx b/src/plugins/top-bar/components/FileMenu/items/LoadExampleNestedMenu/LoadExampleNestedMenuHandler.jsx index 014463a7967..8e7ef25a563 100644 --- a/src/plugins/top-bar/components/FileMenu/items/LoadExampleNestedMenu/LoadExampleNestedMenuHandler.jsx +++ b/src/plugins/top-bar/components/FileMenu/items/LoadExampleNestedMenu/LoadExampleNestedMenuHandler.jsx @@ -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'); @@ -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, }; diff --git a/src/plugins/top-bar/components/FileMenu/items/LoadExampleNestedMenu/items/AsyncAPI30StreetlightsMenuItem.jsx b/src/plugins/top-bar/components/FileMenu/items/LoadExampleNestedMenu/items/AsyncAPI30StreetlightsMenuItem.jsx new file mode 100644 index 00000000000..9a5bb200d31 --- /dev/null +++ b/src/plugins/top-bar/components/FileMenu/items/LoadExampleNestedMenu/items/AsyncAPI30StreetlightsMenuItem.jsx @@ -0,0 +1,21 @@ +import PropTypes from 'prop-types'; + +const AsyncAPI30StreetlightsMenuItem = ({ getComponent, onClick, children }) => { + const DropdownMenuItem = getComponent('DropdownMenuItem'); + + return ( + {children || 'AsyncAPI 3.0 Streetlights'} + ); +}; + +AsyncAPI30StreetlightsMenuItem.propTypes = { + getComponent: PropTypes.func.isRequired, + children: PropTypes.node, + onClick: PropTypes.func.isRequired, +}; + +AsyncAPI30StreetlightsMenuItem.defaultProps = { + children: null, +}; + +export default AsyncAPI30StreetlightsMenuItem; diff --git a/src/plugins/top-bar/index.js b/src/plugins/top-bar/index.js index a3f1867dc85..bc798da6da5 100644 --- a/src/plugins/top-bar/index.js +++ b/src/plugins/top-bar/index.js @@ -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'; @@ -146,6 +147,8 @@ const TopBarPlugin = () => ({ TopBarFileMenuLoadExampleNestedMenuAsyncAPI26PetstoreMenuItem: AsyncAPI26PetstoreMenuItem, TopBarFileMenuLoadExampleNestedMenuAsyncAPI26StreetlightsMenuItem: AsyncAPI26StreetlightsMenuItem, + TopBarFileMenuLoadExampleNestedMenuAsyncAPI30StreetlightsMenuItem: + AsyncAPI30StreetlightsMenuItem, TopBarFileMenuLoadExampleNestedMenuAPIDesignSystemsMenuItem: APIDesignSystemsMenuItem, TopBarFileMenuSaveAsMenuItem: SaveAsMenuItem, TopBarFileMenuConvertAndSaveAsJSONMenuItem: ConvertAndSaveAsJSONMenuItem,