diff --git a/frontend/src/assets/images/identities/sched.png b/frontend/src/assets/images/identities/sched.png new file mode 100644 index 0000000000..4f457292b5 Binary files /dev/null and b/frontend/src/assets/images/identities/sched.png differ diff --git a/frontend/src/assets/images/integrations/sched.png b/frontend/src/assets/images/integrations/sched.png new file mode 100644 index 0000000000..4f457292b5 Binary files /dev/null and b/frontend/src/assets/images/integrations/sched.png differ diff --git a/frontend/src/config/identities/index.ts b/frontend/src/config/identities/index.ts index 58ece5d501..78894fa27c 100644 --- a/frontend/src/config/identities/index.ts +++ b/frontend/src/config/identities/index.ts @@ -22,6 +22,7 @@ import slack from './slack/config'; import stackoverflow from './stackoverflow/config'; import tnc from './tnc/config'; import twitter from './twitter/config'; +import sched from './sched/config'; import zapier from './zapier/config'; export interface IdentityConfig { @@ -75,4 +76,5 @@ export const lfIdentities: Record = { n8n, training_cert: tnc, zapier, + sched, }; diff --git a/frontend/src/config/identities/sched/config.ts b/frontend/src/config/identities/sched/config.ts new file mode 100644 index 0000000000..2d363e7a7c --- /dev/null +++ b/frontend/src/config/identities/sched/config.ts @@ -0,0 +1,14 @@ +import { IdentityConfig } from '@/config/identities'; + +const image = new URL('@/assets/images/identities/sched.png', import.meta.url).href; + +const sched: IdentityConfig = { + key: 'sched', + name: 'Sched', + image, + member: { + placeholder: 'Sched username or email address', + }, +}; + +export default sched; diff --git a/frontend/src/config/integrations/index.ts b/frontend/src/config/integrations/index.ts index 5bf0a28edd..4366cb82c7 100644 --- a/frontend/src/config/integrations/index.ts +++ b/frontend/src/config/integrations/index.ts @@ -16,6 +16,7 @@ import gitlab from './gitlab/config'; import gerrit from './gerrit/config'; import discourse from './discourse/config'; import devto from './devto/config'; +import sched from './sched/config'; export interface ActionRequiredMessage { key: string @@ -67,4 +68,5 @@ export const lfIntegrations: (useGitHubNango?: boolean) => Record + + + Connect + + + + + + + + diff --git a/frontend/src/config/integrations/sched/components/sched-dropdown.vue b/frontend/src/config/integrations/sched/components/sched-dropdown.vue new file mode 100644 index 0000000000..b85ed7ed58 --- /dev/null +++ b/frontend/src/config/integrations/sched/components/sched-dropdown.vue @@ -0,0 +1,26 @@ + + + + + diff --git a/frontend/src/config/integrations/sched/components/sched-params.vue b/frontend/src/config/integrations/sched/components/sched-params.vue new file mode 100644 index 0000000000..7b1ea1de9c --- /dev/null +++ b/frontend/src/config/integrations/sched/components/sched-params.vue @@ -0,0 +1,56 @@ + + + + + diff --git a/frontend/src/config/integrations/sched/components/sched-settings-drawer.vue b/frontend/src/config/integrations/sched/components/sched-settings-drawer.vue new file mode 100644 index 0000000000..288c8214d2 --- /dev/null +++ b/frontend/src/config/integrations/sched/components/sched-settings-drawer.vue @@ -0,0 +1,305 @@ + + + + + diff --git a/frontend/src/config/integrations/sched/config.ts b/frontend/src/config/integrations/sched/config.ts new file mode 100644 index 0000000000..e549764745 --- /dev/null +++ b/frontend/src/config/integrations/sched/config.ts @@ -0,0 +1,22 @@ +import { IntegrationConfig } from '@/config/integrations'; +import SchedConnect from './components/sched-connect.vue'; +import SchedParams from './components/sched-params.vue'; +import SchedDropdown from './components/sched-dropdown.vue'; +import LfSchedSettingsDrawer from './components/sched-settings-drawer.vue'; + +const image = new URL('@/assets/images/integrations/sched.png', import.meta.url).href; + +const sched: IntegrationConfig = { + key: 'sched', + name: 'Sched', + image, + description: 'Sync Sched events speakers and attendees data.', + link: 'https://docs.linuxfoundation.org/lfx/community-management/integrations/sched', + connectComponent: SchedConnect, + connectedParamsComponent: SchedParams, + dropdownComponent: SchedDropdown, + settingComponent: LfSchedSettingsDrawer, + showProgress: false, +}; + +export default sched; diff --git a/frontend/src/modules/admin/modules/integration/pages/integration-list.page.vue b/frontend/src/modules/admin/modules/integration/pages/integration-list.page.vue index efb44fb303..48113dfa39 100644 --- a/frontend/src/modules/admin/modules/integration/pages/integration-list.page.vue +++ b/frontend/src/modules/admin/modules/integration/pages/integration-list.page.vue @@ -151,7 +151,9 @@ const tab = ref('all'); const platformsByStatus = computed(() => { const statusConfig = lfIntegrationStatusesTabs[tab.value]; - const all = Object.keys(lfIntegrations(useGitHubNango.value)); + const all = Object.keys(lfIntegrations(useGitHubNango.value)).filter( + (platform) => platform !== 'sched' || isTeamUser.value, + ); if (!statusConfig) { return all; } diff --git a/frontend/src/modules/integration/integration-service.js b/frontend/src/modules/integration/integration-service.js index 54cce3ff5f..feaaeb99fd 100644 --- a/frontend/src/modules/integration/integration-service.js +++ b/frontend/src/modules/integration/integration-service.js @@ -316,6 +316,16 @@ export class IntegrationService { return response.data; } + static async schedConnect(id, settings, segmentId) { + const response = await authAxios.post('/sched-connect', { + id, + settings, + segments: [segmentId], + }); + + return response.data; + } + static async gerritConnect(remote, segments = []) { const response = await authAxios.put('/gerrit-connect', { remote, diff --git a/frontend/src/modules/integration/integration-store.js b/frontend/src/modules/integration/integration-store.js index 7baf8f0b29..74510e631d 100644 --- a/frontend/src/modules/integration/integration-store.js +++ b/frontend/src/modules/integration/integration-store.js @@ -620,6 +620,46 @@ export default { } }, + async doSchedConnect( + { commit }, + { + id, settings, isUpdate, segmentId, grandparentId, + }, + ) { + try { + commit('CREATE_STARTED'); + + const integration = await IntegrationService.schedConnect( + id, + settings, + segmentId, + ); + + commit('CREATE_SUCCESS', integration); + + ToastStore.success( + 'The first activities will show up in a couple of seconds.

' + + 'This process might take a few minutes to finish, depending on the amount of data.', + { + title: `Sched integration ${ + isUpdate ? 'updated' : 'created' + } successfully`, + }, + ); + + router.push({ + name: 'integration', + params: { + id: segmentId, + grandparentId, + }, + }); + } catch (error) { + Errors.handle(error); + commit('CREATE_ERROR'); + } + }, + async doGerritConnect( { commit, dispatch }, { diff --git a/frontend/src/shared/modules/identities/config/identitiesOrder/member/list.ts b/frontend/src/shared/modules/identities/config/identitiesOrder/member/list.ts index 83795b6d91..9f821c4a69 100644 --- a/frontend/src/shared/modules/identities/config/identitiesOrder/member/list.ts +++ b/frontend/src/shared/modules/identities/config/identitiesOrder/member/list.ts @@ -14,5 +14,6 @@ export default [ Platform.HUBSPOT, Platform.GIT, Platform.GROUPS_IO, + Platform.SCHED, Platform.CUSTOM, ]; diff --git a/frontend/src/shared/modules/identities/config/identitiesOrder/member/profile.ts b/frontend/src/shared/modules/identities/config/identitiesOrder/member/profile.ts index 83795b6d91..9f821c4a69 100644 --- a/frontend/src/shared/modules/identities/config/identitiesOrder/member/profile.ts +++ b/frontend/src/shared/modules/identities/config/identitiesOrder/member/profile.ts @@ -14,5 +14,6 @@ export default [ Platform.HUBSPOT, Platform.GIT, Platform.GROUPS_IO, + Platform.SCHED, Platform.CUSTOM, ]; diff --git a/frontend/src/shared/modules/identities/config/identitiesOrder/member/suggestions.ts b/frontend/src/shared/modules/identities/config/identitiesOrder/member/suggestions.ts index 83795b6d91..9f821c4a69 100644 --- a/frontend/src/shared/modules/identities/config/identitiesOrder/member/suggestions.ts +++ b/frontend/src/shared/modules/identities/config/identitiesOrder/member/suggestions.ts @@ -14,5 +14,6 @@ export default [ Platform.HUBSPOT, Platform.GIT, Platform.GROUPS_IO, + Platform.SCHED, Platform.CUSTOM, ]; diff --git a/frontend/src/shared/modules/platform/types/Platform.ts b/frontend/src/shared/modules/platform/types/Platform.ts index ceff6b9841..6dc51f7803 100644 --- a/frontend/src/shared/modules/platform/types/Platform.ts +++ b/frontend/src/shared/modules/platform/types/Platform.ts @@ -25,4 +25,5 @@ export enum Platform { JIRA = 'jira', GITHUB_NANGO = 'github-nango', GERRIT = 'gerrit', + SCHED = 'sched', }