From 639309ed92a1ad87041c7a34c9a6d9042bc464e6 Mon Sep 17 00:00:00 2001
From: Thomas Citharel <tcit@tcit.fr>
Date: Tue, 17 Aug 2021 10:28:03 +0200
Subject: [PATCH] Add some visio services to preconfigured metadata

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
---
 js/src/components/Event/EventMetadataList.vue |  3 +
 .../Event/Integrations/JitsiMeet.vue          | 38 ++++++++++++
 js/src/i18n/en_US.json                        | 13 ++++-
 js/src/i18n/fr_FR.json                        | 13 ++++-
 js/src/services/EventMetadata.ts              | 58 +++++++++++++++++++
 js/src/types/enums.ts                         |  1 +
 js/src/views/Event/Event.vue                  |  5 ++
 7 files changed, 129 insertions(+), 2 deletions(-)
 create mode 100644 js/src/components/Event/Integrations/JitsiMeet.vue

diff --git a/js/src/components/Event/EventMetadataList.vue b/js/src/components/Event/EventMetadataList.vue
index b5779def6..b6b863e77 100644
--- a/js/src/components/Event/EventMetadataList.vue
+++ b/js/src/components/Event/EventMetadataList.vue
@@ -140,6 +140,9 @@ export default class EventMetadataList extends Vue {
     [EventMetadataCategories.SOCIAL]: this.$t("Social") as string,
     [EventMetadataCategories.DETAILS]: this.$t("Details") as string,
     [EventMetadataCategories.BOOKING]: this.$t("Booking") as string,
+    [EventMetadataCategories.VIDEO_CONFERENCE]: this.$t(
+      "Video Conference"
+    ) as string,
   };
 
   get filteredDataArray(): GroupedIEventMetadata {
diff --git a/js/src/components/Event/Integrations/JitsiMeet.vue b/js/src/components/Event/Integrations/JitsiMeet.vue
new file mode 100644
index 000000000..2bee04aab
--- /dev/null
+++ b/js/src/components/Event/Integrations/JitsiMeet.vue
@@ -0,0 +1,38 @@
+<template>
+  <div class="jitsi-meet">
+    <div class="jitsi-meet-video" v-if="metadata">
+      <iframe
+        allow="camera; microphone; fullscreen; display-capture; autoplay"
+        :src="metadata.value"
+        style="height: 100%; width: 100%; border: 0px"
+      ></iframe>
+    </div>
+  </div>
+</template>
+<script lang="ts">
+import { IEventMetadataDescription } from "@/types/event-metadata";
+import { PropType } from "vue";
+import { Component, Prop, Vue } from "vue-property-decorator";
+
+@Component
+export default class JitsiMeetIntegration extends Vue {
+  @Prop({ type: Object as PropType<IEventMetadataDescription>, required: true })
+  metadata!: IEventMetadataDescription;
+}
+</script>
+<style lang="scss" scoped>
+.jitsi-meet {
+  .jitsi-meet-video {
+    padding-top: 56.25%;
+    position: relative;
+    height: 0;
+
+    iframe {
+      position: absolute;
+      width: 100%;
+      height: 100%;
+      top: 0;
+    }
+  }
+}
+</style>
diff --git a/js/src/i18n/en_US.json b/js/src/i18n/en_US.json
index faef2ada9..b0196daf8 100644
--- a/js/src/i18n/en_US.json
+++ b/js/src/i18n/en_US.json
@@ -1128,5 +1128,16 @@
   "Redirecting in progress…": "Redirecting in progress…",
   "Zoom in": "Zoom in",
   "Zoom out": "Zoom out",
-  "Show me where I am": "Show me where I am"
+  "Show me where I am": "Show me where I am",
+  "Video Conference": "Video Conference",
+  "Jisti Meet": "Jisti Meet",
+  "The Jitsi Meet video teleconference URL": "The Jitsi Meet video teleconference URL",
+  "Zoom": "Zoom",
+  "The Zoom video teleconference URL": "The Zoom video teleconference URL",
+  "Microsoft Teams": "Microsoft Teams",
+  "The Microsoft Teams video teleconference URL": "The Microsoft Teams video teleconference URL",
+  "Google Meet": "Google Meet",
+  "The Google Meet video teleconference URL": "The Google Meet video teleconference URL",
+  "Big Blue Button": "Big Blue Button",
+  "The Big Blue Button video teleconference URL": "The Big Blue Button video teleconference URL"
 }
diff --git a/js/src/i18n/fr_FR.json b/js/src/i18n/fr_FR.json
index e7f3473da..76ee8772e 100644
--- a/js/src/i18n/fr_FR.json
+++ b/js/src/i18n/fr_FR.json
@@ -1219,5 +1219,16 @@
   "Redirecting in progress…": "Redirection en cours…",
   "Zoom in": "Zoomer",
   "Zoom out": "Dézoomer",
-  "Show me where I am": "Afficher ma position"
+  "Show me where I am": "Afficher ma position",
+  "Video Conference": "Visio-conférence",
+  "Jisti Meet": "Jitsi Meet",
+  "The Jitsi Meet video teleconference URL": "L'URL de visio-conférence Jitsi Meet",
+  "Zoom": "Zoom",
+  "The Zoom video teleconference URL": "L'URL de visio-conférence Zoom",
+  "Microsoft Teams": "Microsoft Teams",
+  "The Microsoft Teams video teleconference URL": "L'URL de visio-conférence Microsoft Teams",
+  "Google Meet": "Google Meet",
+  "The Google Meet video teleconference URL": "L'URL de visio-conférence Google Meet",
+  "Big Blue Button": "Big Blue Button",
+  "The Big Blue Button video teleconference URL": "L'URL de visio-conférence Big Blue Button"
 }
diff --git a/js/src/services/EventMetadata.ts b/js/src/services/EventMetadata.ts
index a6b899d85..c964f9d8d 100644
--- a/js/src/services/EventMetadata.ts
+++ b/js/src/services/EventMetadata.ts
@@ -209,4 +209,62 @@ export const eventMetaDataList: IEventMetadataDescription[] = [
     keyType: EventMetadataKeyType.URL,
     category: EventMetadataCategories.DETAILS,
   },
+  {
+    icon: "webcam",
+    key: "mz:visio:jitsi_meet",
+    label: i18n.t("Jisti Meet") as string,
+    description: i18n.t("The Jitsi Meet video teleconference URL") as string,
+    value: "",
+    type: EventMetadataType.STRING,
+    keyType: EventMetadataKeyType.URL,
+    category: EventMetadataCategories.VIDEO_CONFERENCE,
+    placeholder: "https://meet.jit.si/AFewWords",
+  },
+  {
+    icon: "webcam",
+    key: "mz:visio:zoom",
+    label: i18n.t("Zoom") as string,
+    description: i18n.t("The Zoom video teleconference URL") as string,
+    value: "",
+    type: EventMetadataType.STRING,
+    keyType: EventMetadataKeyType.URL,
+    category: EventMetadataCategories.VIDEO_CONFERENCE,
+    pattern: /https:\/\/.*\.?zoom.us\/.*/,
+  },
+  {
+    icon: "microsoft-teams",
+    key: "mz:visio:microsoft_teams",
+    label: i18n.t("Microsoft Teams") as string,
+    description: i18n.t(
+      "The Microsoft Teams video teleconference URL"
+    ) as string,
+    value: "",
+    type: EventMetadataType.STRING,
+    keyType: EventMetadataKeyType.URL,
+    category: EventMetadataCategories.VIDEO_CONFERENCE,
+    pattern: /https:\/\/teams\.live\.com\/meet\/.+/,
+  },
+  {
+    icon: "google-hangouts",
+    key: "mz:visio:google_meet",
+    label: i18n.t("Google Meet") as string,
+    description: i18n.t("The Google Meet video teleconference URL") as string,
+    value: "",
+    type: EventMetadataType.STRING,
+    keyType: EventMetadataKeyType.URL,
+    category: EventMetadataCategories.VIDEO_CONFERENCE,
+    pattern: /https:\/\/meet\.google\.com\/.+/,
+  },
+  {
+    icon: "webcam",
+    key: "mz:visio:big_blue_button",
+    label: i18n.t("Big Blue Button") as string,
+    description: i18n.t(
+      "The Big Blue Button video teleconference URL"
+    ) as string,
+    value: "",
+    type: EventMetadataType.STRING,
+    keyType: EventMetadataKeyType.URL,
+    category: EventMetadataCategories.VIDEO_CONFERENCE,
+  },
 ];
diff --git a/js/src/types/enums.ts b/js/src/types/enums.ts
index b5c738b7c..34049388b 100644
--- a/js/src/types/enums.ts
+++ b/js/src/types/enums.ts
@@ -274,4 +274,5 @@ export enum EventMetadataCategories {
   TOOLS = "TOOLS",
   DETAILS = "DETAILS",
   BOOKING = "BOOKING",
+  VIDEO_CONFERENCE = "VIDEO_CONFERENCE",
 }
diff --git a/js/src/views/Event/Event.vue b/js/src/views/Event/Event.vue
index 5ac44b715..74eab15a4 100755
--- a/js/src/views/Event/Event.vue
+++ b/js/src/views/Event/Event.vue
@@ -533,6 +533,10 @@ import { eventMetaDataList } from "../../services/EventMetadata";
       import(
         /* webpackChunkName: "YouTubeIntegration" */ "../../components/Event/Integrations/YouTube.vue"
       ),
+    "integration-jitsi-meet": () =>
+      import(
+        /* webpackChunkName: "JitsiMeetIntegration" */ "../../components/Event/Integrations/JitsiMeet.vue"
+      ),
   },
   apollo: {
     event: {
@@ -1087,6 +1091,7 @@ export default class Event extends EventMixin {
     "mz:live:twitch:url": "integration-twitch",
     "mz:live:peertube:url": "integration-peertube",
     "mz:live:youtube:url": "integration-youtube",
+    "mz:visio:jitsi_meet": "integration-jitsi-meet",
   };
 
   get integrations(): Record<string, IEventMetadataDescription> {