import React, { useState, useEffect } from "react"; import { Row } from "antd"; import { Application, ListIntegrationsRequest, ListIntegrationsResponse, IntegrationListItem, IntegrationKind, } from "@chirpstack/chirpstack-api-grpc-web/api/application_pb"; import ApplicationStore from "../../stores/ApplicationStore"; import HttpCard from "./integrations/HttpCard"; import MyDevicesCard from "./integrations/MyDevicesCard"; import MqttCard from "./integrations/MqttCard"; import AwsSnsCard from "./integrations/AwsSnsCard"; import AzureServiceBusCard from "./integrations/AzureServiceBusCard"; import GcpPubSubCard from "./integrations/GcpPubSubCard"; import InfluxdbCard from "./integrations/InfluxdbCard"; import PilotThingsCard from "./integrations/PilotThingsCard"; import LoRaCloudCard from "./integrations/LoRaCloudCard"; import ThingsBoardCard from "./integrations/ThingsBoardCard"; import IftttCard from "./integrations/IftttCard"; interface IProps { application: Application; } function ListIntegrations(props: IProps) { const [configured, setConfigured] = useState([]); const [available, setAvailable] = useState([]); useEffect(() => { const loadIntegrations = () => { let req = new ListIntegrationsRequest(); req.setApplicationId(props.application.getId()); ApplicationStore.listIntegrations(req, (resp: ListIntegrationsResponse) => { let configured: any[] = []; let available: any[] = []; const includes = (integrations: IntegrationListItem[], kind: IntegrationKind) => { for (let x of integrations) { if (x.getKind() === kind) { return true; } } return false; }; // AWS SNS if (includes(resp.getResultList(), IntegrationKind.AWS_SNS)) { configured.push(); } else { available.push(); } // Azure Service-Bus if (includes(resp.getResultList(), IntegrationKind.AZURE_SERVICE_BUS)) { configured.push(); } else { available.push(); } // GCP Pub/Sub if (includes(resp.getResultList(), IntegrationKind.GCP_PUB_SUB)) { configured.push(); } else { available.push(); } // HTTP if (includes(resp.getResultList(), IntegrationKind.HTTP)) { configured.push(); } else { available.push(); } // IFTTT if (includes(resp.getResultList(), IntegrationKind.IFTTT)) { configured.push(); } else { available.push(); } // InfluxDB if (includes(resp.getResultList(), IntegrationKind.INFLUX_DB)) { configured.push(); } else { available.push(); } // MQTT if (includes(resp.getResultList(), IntegrationKind.MQTT_GLOBAL)) { configured.push(); } // myDevices if (includes(resp.getResultList(), IntegrationKind.MY_DEVICES)) { configured.push(); } else { available.push(); } // Pilot Things if (includes(resp.getResultList(), IntegrationKind.PILOT_THINGS)) { configured.push(); } else { available.push(); } // Semtech LoRa Cloud if (includes(resp.getResultList(), IntegrationKind.LORA_CLOUD)) { configured.push(); } else { available.push(); } // ThingsBoard if (includes(resp.getResultList(), IntegrationKind.THINGS_BOARD)) { configured.push(); } else { available.push(); } setConfigured(configured); setAvailable(available); }); }; ApplicationStore.on("integration.delete", loadIntegrations); loadIntegrations(); return () => { ApplicationStore.removeAllListeners("integration.delete"); }; }, [props.application]); return ( {configured} {available} ); } export default ListIntegrations;