diff --git a/frontend/components.d.ts b/frontend/components.d.ts index 42b89f05..3877a523 100644 --- a/frontend/components.d.ts +++ b/frontend/components.d.ts @@ -60,6 +60,8 @@ declare module 'vue' { ExplanationVideos: typeof import('./src/components/Modals/ExplanationVideos.vue')['default'] FeedbackModal: typeof import('./src/components/Modals/FeedbackModal.vue')['default'] FrappeCloudIcon: typeof import('./src/components/Icons/FrappeCloudIcon.vue')['default'] + GoogleMeetAccountModal: typeof import('./src/components/Modals/GoogleMeetAccountModal.vue')['default'] + GoogleMeetSettings: typeof import('./src/components/Settings/GoogleMeetSettings.vue')['default'] IconPicker: typeof import('./src/components/Controls/IconPicker.vue')['default'] IndicatorIcon: typeof import('./src/components/Icons/IndicatorIcon.vue')['default'] InlineLessonMenu: typeof import('./src/components/Notes/InlineLessonMenu.vue')['default'] diff --git a/frontend/src/components/Modals/LiveClassModal.vue b/frontend/src/components/Modals/LiveClassModal.vue index 43796d4e..ac2ee3fe 100644 --- a/frontend/src/components/Modals/LiveClassModal.vue +++ b/frontend/src/components/Modals/LiveClassModal.vue @@ -67,6 +67,7 @@ /> { - return createLiveClass.submit(liveClass, { + const resource = + props.conferencingProvider === 'Google Meet' + ? createGoogleMeetLiveClass + : createLiveClass + return resource.submit(liveClass, { validate() { validateFormFields() }, diff --git a/frontend/src/components/Settings/GoogleMeetAccountModal.vue b/frontend/src/components/Settings/GoogleMeetAccountModal.vue new file mode 100644 index 00000000..fecf75ad --- /dev/null +++ b/frontend/src/components/Settings/GoogleMeetAccountModal.vue @@ -0,0 +1,197 @@ + + diff --git a/frontend/src/components/Settings/GoogleMeetSettings.vue b/frontend/src/components/Settings/GoogleMeetSettings.vue new file mode 100644 index 00000000..9fb1ac4e --- /dev/null +++ b/frontend/src/components/Settings/GoogleMeetSettings.vue @@ -0,0 +1,202 @@ + + diff --git a/frontend/src/components/Settings/Settings.vue b/frontend/src/components/Settings/Settings.vue index 0365ed02..b3e718a5 100644 --- a/frontend/src/components/Settings/Settings.vue +++ b/frontend/src/components/Settings/Settings.vue @@ -76,6 +76,7 @@ import PaymentGateways from '@/components/Settings/PaymentGateways.vue' import Coupons from '@/components/Settings/Coupons/Coupons.vue' import Transactions from '@/components/Settings/Transactions/Transactions.vue' import ZoomSettings from '@/components/Settings/ZoomSettings.vue' +import GoogleMeetSettings from '@/components/Settings/GoogleMeetSettings.vue' import Badges from '@/components/Settings/Badges.vue' const show = defineModel() @@ -296,6 +297,13 @@ const tabsStructure = computed(() => { icon: 'Video', template: markRaw(ZoomSettings), }, + { + label: 'Google Meet Accounts', + description: + 'Manage Google Meet accounts to conduct live classes from batches', + icon: 'Video', + template: markRaw(GoogleMeetSettings), + }, { label: 'Badges', description: diff --git a/frontend/src/pages/Batches/BatchForm.vue b/frontend/src/pages/Batches/BatchForm.vue index 4b1b5b9b..08d202a0 100644 --- a/frontend/src/pages/Batches/BatchForm.vue +++ b/frontend/src/pages/Batches/BatchForm.vue @@ -165,24 +165,48 @@ " /> -
- - -
+ + + + +
+
+ {{ __('Conferencing') }} +
+
+ + +
@@ -463,6 +487,23 @@ const trashBatch = (close) => { }) } +const conferencingOptions = computed(() => { + return [ + { + label: '', + value: '', + }, + { + label: __('Zoom'), + value: 'Zoom', + }, + { + label: __('Google Meet'), + value: 'Google Meet', + }, + ] +}) + const mediumOptions = computed(() => { return [ { diff --git a/frontend/src/pages/Batches/components/LiveClass.vue b/frontend/src/pages/Batches/components/LiveClass.vue index 0d3fdb42..466bb08d 100644 --- a/frontend/src/pages/Batches/components/LiveClass.vue +++ b/frontend/src/pages/Batches/components/LiveClass.vue @@ -1,14 +1,14 @@