diff --git a/frontend/public/images/identities/bigquery.svg b/frontend/public/images/identities/bigquery.svg new file mode 100644 index 0000000000..4ee5458647 --- /dev/null +++ b/frontend/public/images/identities/bigquery.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/public/images/identities/census.png b/frontend/public/images/identities/census.png new file mode 100644 index 0000000000..bd3874bc8b Binary files /dev/null and b/frontend/public/images/identities/census.png differ diff --git a/frontend/public/images/identities/confluence.svg b/frontend/public/images/identities/confluence.svg new file mode 100644 index 0000000000..d0751a39c1 --- /dev/null +++ b/frontend/public/images/identities/confluence.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/frontend/public/images/identities/crunchbase.png b/frontend/public/images/identities/crunchbase.png new file mode 100644 index 0000000000..24df79060b Binary files /dev/null and b/frontend/public/images/identities/crunchbase.png differ diff --git a/frontend/public/images/identities/cvent.png b/frontend/public/images/identities/cvent.png new file mode 100644 index 0000000000..c94c160e0a Binary files /dev/null and b/frontend/public/images/identities/cvent.png differ diff --git a/frontend/public/images/identities/devto.png b/frontend/public/images/identities/devto.png new file mode 100644 index 0000000000..a1ddea4d58 Binary files /dev/null and b/frontend/public/images/identities/devto.png differ diff --git a/frontend/public/images/identities/discord.png b/frontend/public/images/identities/discord.png new file mode 100644 index 0000000000..45547f7c04 Binary files /dev/null and b/frontend/public/images/identities/discord.png differ diff --git a/frontend/public/images/identities/discourse.png b/frontend/public/images/identities/discourse.png new file mode 100644 index 0000000000..dd010b37fc Binary files /dev/null and b/frontend/public/images/identities/discourse.png differ diff --git a/frontend/public/images/identities/facebook.png b/frontend/public/images/identities/facebook.png new file mode 100644 index 0000000000..411f14b472 Binary files /dev/null and b/frontend/public/images/identities/facebook.png differ diff --git a/frontend/public/images/identities/gerrit.png b/frontend/public/images/identities/gerrit.png new file mode 100644 index 0000000000..8242dd3e0d Binary files /dev/null and b/frontend/public/images/identities/gerrit.png differ diff --git a/frontend/public/images/identities/git.png b/frontend/public/images/identities/git.png new file mode 100644 index 0000000000..51f4ae5404 Binary files /dev/null and b/frontend/public/images/identities/git.png differ diff --git a/frontend/public/images/identities/github.png b/frontend/public/images/identities/github.png new file mode 100644 index 0000000000..9490ffc6d2 Binary files /dev/null and b/frontend/public/images/identities/github.png differ diff --git a/frontend/public/images/identities/gitlab.png b/frontend/public/images/identities/gitlab.png new file mode 100644 index 0000000000..fd95e25263 Binary files /dev/null and b/frontend/public/images/identities/gitlab.png differ diff --git a/frontend/public/images/identities/groupsio.svg b/frontend/public/images/identities/groupsio.svg new file mode 100644 index 0000000000..af62003dec --- /dev/null +++ b/frontend/public/images/identities/groupsio.svg @@ -0,0 +1,197 @@ + + + + + + + + + + + + + diff --git a/frontend/public/images/identities/hackernews.svg b/frontend/public/images/identities/hackernews.svg new file mode 100644 index 0000000000..49d2897b20 --- /dev/null +++ b/frontend/public/images/identities/hackernews.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/frontend/public/images/identities/hubspot.svg b/frontend/public/images/identities/hubspot.svg new file mode 100644 index 0000000000..b79fe597c8 --- /dev/null +++ b/frontend/public/images/identities/hubspot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/public/images/identities/jira.png b/frontend/public/images/identities/jira.png new file mode 100644 index 0000000000..2486cc2a95 Binary files /dev/null and b/frontend/public/images/identities/jira.png differ diff --git a/frontend/public/images/identities/lfx.png b/frontend/public/images/identities/lfx.png new file mode 100644 index 0000000000..61bdc9739e Binary files /dev/null and b/frontend/public/images/identities/lfx.png differ diff --git a/frontend/public/images/identities/linkedin.png b/frontend/public/images/identities/linkedin.png new file mode 100644 index 0000000000..a4bcf50174 Binary files /dev/null and b/frontend/public/images/identities/linkedin.png differ diff --git a/frontend/public/images/identities/make.svg b/frontend/public/images/identities/make.svg new file mode 100644 index 0000000000..30a0f6cf59 --- /dev/null +++ b/frontend/public/images/identities/make.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/public/images/identities/n8n.svg b/frontend/public/images/identities/n8n.svg new file mode 100644 index 0000000000..c0d3e6f5de --- /dev/null +++ b/frontend/public/images/identities/n8n.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/public/images/identities/reddit.svg b/frontend/public/images/identities/reddit.svg new file mode 100644 index 0000000000..1f3997ee60 --- /dev/null +++ b/frontend/public/images/identities/reddit.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/public/images/identities/salesforce.png b/frontend/public/images/identities/salesforce.png new file mode 100644 index 0000000000..9b34c9b527 Binary files /dev/null and b/frontend/public/images/identities/salesforce.png differ diff --git a/frontend/public/images/identities/segment.svg b/frontend/public/images/identities/segment.svg new file mode 100644 index 0000000000..811e38b2c2 --- /dev/null +++ b/frontend/public/images/identities/segment.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/public/images/identities/slack.png b/frontend/public/images/identities/slack.png new file mode 100644 index 0000000000..9ded7efaae Binary files /dev/null and b/frontend/public/images/identities/slack.png differ diff --git a/frontend/public/images/identities/snowflake.svg b/frontend/public/images/identities/snowflake.svg new file mode 100644 index 0000000000..f491c27313 --- /dev/null +++ b/frontend/public/images/identities/snowflake.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/public/images/identities/stackoverflow.png b/frontend/public/images/identities/stackoverflow.png new file mode 100644 index 0000000000..cba7a36086 Binary files /dev/null and b/frontend/public/images/identities/stackoverflow.png differ diff --git a/frontend/public/images/identities/tnc.png b/frontend/public/images/identities/tnc.png new file mode 100644 index 0000000000..cf7ea3513c Binary files /dev/null and b/frontend/public/images/identities/tnc.png differ diff --git a/frontend/public/images/identities/twitter.png b/frontend/public/images/identities/twitter.png new file mode 100644 index 0000000000..2c2d7e863f Binary files /dev/null and b/frontend/public/images/identities/twitter.png differ diff --git a/frontend/public/images/identities/zapier.png b/frontend/public/images/identities/zapier.png new file mode 100644 index 0000000000..9b7640991d Binary files /dev/null and b/frontend/public/images/identities/zapier.png differ diff --git a/frontend/public/images/integrations/cvent.png b/frontend/public/images/integrations/cvent.png new file mode 100644 index 0000000000..c94c160e0a Binary files /dev/null and b/frontend/public/images/integrations/cvent.png differ diff --git a/frontend/public/images/integrations/lfx.png b/frontend/public/images/integrations/lfx.png new file mode 100644 index 0000000000..61bdc9739e Binary files /dev/null and b/frontend/public/images/integrations/lfx.png differ diff --git a/frontend/public/images/integrations/n8n.svg b/frontend/public/images/integrations/n8n.svg new file mode 100644 index 0000000000..c0d3e6f5de --- /dev/null +++ b/frontend/public/images/integrations/n8n.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/public/images/integrations/tnc.png b/frontend/public/images/integrations/tnc.png new file mode 100644 index 0000000000..cf7ea3513c Binary files /dev/null and b/frontend/public/images/integrations/tnc.png differ diff --git a/frontend/public/images/integrations/zapier.png b/frontend/public/images/integrations/zapier.png new file mode 100644 index 0000000000..9b7640991d Binary files /dev/null and b/frontend/public/images/integrations/zapier.png differ diff --git a/frontend/src/config/identities/confluence/config.ts b/frontend/src/config/identities/confluence/config.ts new file mode 100644 index 0000000000..c5165b26ad --- /dev/null +++ b/frontend/src/config/identities/confluence/config.ts @@ -0,0 +1,24 @@ +import { IdentityConfig } from '@/config/identities'; + +const confluence: IdentityConfig = { + key: 'confluence', + name: 'Confluence', + image: '/images/identities/confluence.svg', + member: { + placeholder: 'Confluence username or email address', + }, + activity: { + showLink: true, + showSourceId: true, + }, + conversation: { + attributes: (attributes) => ({ + changes: attributes.lines, + changesCopy: 'line', + insertions: attributes.insertions, + deletions: attributes.deletions, + }), + }, +}; + +export default confluence; diff --git a/frontend/src/config/identities/crunchbase/config.ts b/frontend/src/config/identities/crunchbase/config.ts new file mode 100644 index 0000000000..100a269c86 --- /dev/null +++ b/frontend/src/config/identities/crunchbase/config.ts @@ -0,0 +1,14 @@ +import { IdentityConfig } from '@/config/identities'; + +const crunchbase: IdentityConfig = { + key: 'crunchbase', + name: 'Crunchbase', + image: '/images/identities/crunchbase.png', + organization: { + urlPrefix: 'https://www.crunchbase.com/organization/', + handle: (identity) => identity.value, + url: (identity) => `https://www.crunchbase.com/organization/${identity.value}`, + }, +}; + +export default crunchbase; diff --git a/frontend/src/config/identities/cvent/config.ts b/frontend/src/config/identities/cvent/config.ts new file mode 100644 index 0000000000..e45a2b187e --- /dev/null +++ b/frontend/src/config/identities/cvent/config.ts @@ -0,0 +1,12 @@ +import { IdentityConfig } from '@/config/identities'; + +const cvent: IdentityConfig = { + key: 'cvent', + name: 'Cvent', + image: '/images/identities/cvent.png', + member: { + placeholder: 'Cvent username or email address', + }, +}; + +export default cvent; diff --git a/frontend/src/config/identities/devto/config.ts b/frontend/src/config/identities/devto/config.ts new file mode 100644 index 0000000000..e72956dcbd --- /dev/null +++ b/frontend/src/config/identities/devto/config.ts @@ -0,0 +1,23 @@ +import { IdentityConfig } from '@/config/identities'; + +const devto: IdentityConfig = { + key: 'devto', + name: 'DEV', + image: '/images/identities/devto.png', + member: { + urlPrefix: 'dev.to/', + url: ({ identity }) => (identity.value ? `https://dev.to/${identity.value}` : null), + }, + activity: { + showLink: true, + }, + conversation: { + replyContent: (conversation) => ({ + icon: 'ri-reply-line', + copy: 'reply', + number: conversation.activityCount - 1, + }), + }, +}; + +export default devto; diff --git a/frontend/src/config/identities/discord/config.ts b/frontend/src/config/identities/discord/config.ts new file mode 100644 index 0000000000..e4437f4949 --- /dev/null +++ b/frontend/src/config/identities/discord/config.ts @@ -0,0 +1,23 @@ +import { IdentityConfig } from '@/config/identities'; + +const discord: IdentityConfig = { + key: 'discord', + name: 'Discord', + image: '/images/identities/discord.png', + member: { + placeholder: 'Discord username', + url: ({ identity }) => (identity.value ? `https://discord.com/${identity.value}` : null), + }, + activity: { + showLink: true, + }, + conversation: { + replyContent: (conversation) => ({ + icon: 'ri-reply-line', + copy: 'reply', + number: conversation.activityCount - 1, + }), + }, +}; + +export default discord; diff --git a/frontend/src/config/identities/discourse/config.ts b/frontend/src/config/identities/discourse/config.ts new file mode 100644 index 0000000000..a923dad652 --- /dev/null +++ b/frontend/src/config/identities/discourse/config.ts @@ -0,0 +1,16 @@ +import { IdentityConfig } from '@/config/identities'; + +const discourse: IdentityConfig = { + key: 'discourse', + name: 'Discourse', + image: '/images/identities/discourse.png', + member: { + urlPrefix: 'https://meta.discourse.org/u/', + url: ({ attributes }) => attributes?.url?.discourse, + }, + activity: { + showLink: true, + }, +}; + +export default discourse; diff --git a/frontend/src/config/identities/facebook/config.ts b/frontend/src/config/identities/facebook/config.ts new file mode 100644 index 0000000000..59207f8033 --- /dev/null +++ b/frontend/src/config/identities/facebook/config.ts @@ -0,0 +1,9 @@ +import { IdentityConfig } from '@/config/identities'; + +const facebook: IdentityConfig = { + key: 'facebook', + name: 'Facebook', + image: '/images/identities/facebook.png', +}; + +export default facebook; diff --git a/frontend/src/config/identities/gerrit/config.ts b/frontend/src/config/identities/gerrit/config.ts new file mode 100644 index 0000000000..7b45cf9944 --- /dev/null +++ b/frontend/src/config/identities/gerrit/config.ts @@ -0,0 +1,23 @@ +import { IdentityConfig } from '@/config/identities'; + +const gerrit: IdentityConfig = { + key: 'gerrit', + name: 'Gerrit', + image: '/images/identities/gerrit.png', + member: { + placeholder: 'Gerrit username or email address', + }, + activity: { + showLink: true, + showSourceId: true, + }, + conversation: { + replyContent: (conversation) => ({ + icon: 'ri-reply-line', + copy: 'reply', + number: conversation.activityCount - 1, + }), + }, +}; + +export default gerrit; diff --git a/frontend/src/config/identities/git/config.ts b/frontend/src/config/identities/git/config.ts new file mode 100644 index 0000000000..c2115d1797 --- /dev/null +++ b/frontend/src/config/identities/git/config.ts @@ -0,0 +1,25 @@ +import { IdentityConfig } from '@/config/identities'; + +const git: IdentityConfig = { + key: 'git', + name: 'Git', + image: '/images/identities/git.png', + member: { + placeholder: 'Git email address', + }, + activity: { + showContentDetails: true, + showSourceId: true, + typeIcon: 'commit', + }, + conversation: { + attributes: (attributes) => ({ + changes: attributes.lines, + changesCopy: 'line', + insertions: attributes.insertions, + deletions: attributes.deletions, + }), + }, +}; + +export default git; diff --git a/frontend/src/config/identities/github/config.ts b/frontend/src/config/identities/github/config.ts new file mode 100644 index 0000000000..7fa66222e9 --- /dev/null +++ b/frontend/src/config/identities/github/config.ts @@ -0,0 +1,46 @@ +import { IdentityConfig } from '@/config/identities'; + +const github: IdentityConfig = { + key: 'github', + name: 'GitHub', + image: '/images/identities/github.png', + icon: 'github-fill', + color: '#24292F', + member: { + urlPrefix: 'github.com/', + url: ({ identity }) => (identity.value ? `https://github.com/${identity.value}` : null), + }, + organization: { + urlPrefix: 'github.com/', + }, + activity: { + showLink: true, + }, + conversation: { + showLabels: true, + separatorContent: 'activity', + replyContent: (conversation) => { + const activities = conversation.lastReplies || conversation.activities; + + return { + icon: 'ri-chat-4-line', + copy: 'comment', + number: activities.reduce((acc, activity) => { + if (activity.type.includes('comment')) { + return acc + 1; + } + + return acc; + }, 0), + }; + }, + attributes: (attributes) => ({ + changes: attributes.changedFiles, + changesCopy: 'file change', + insertions: attributes.additions, + deletions: attributes.deletions, + }), + }, +}; + +export default github; diff --git a/frontend/src/config/identities/gitlab/config.ts b/frontend/src/config/identities/gitlab/config.ts new file mode 100644 index 0000000000..52bd3f071c --- /dev/null +++ b/frontend/src/config/identities/gitlab/config.ts @@ -0,0 +1,24 @@ +import { IdentityConfig } from '@/config/identities'; + +const gitlab: IdentityConfig = { + key: 'gitlab', + name: 'GitLab', + image: '/images/identities/gitlab.png', + member: { + urlPrefix: 'gitlab.com/', + url: ({ identity }) => (identity.value ? `https://gitlab.com/${identity.value}` : null), + }, + activity: { + showLink: true, + }, + conversation: { + showLabels: true, + replyContent: (conversation) => ({ + icon: 'ri-chat-4-line', + copy: 'comment', + number: conversation.activityCount - 1, + }), + }, +}; + +export default gitlab; diff --git a/frontend/src/config/identities/groupsio/config.ts b/frontend/src/config/identities/groupsio/config.ts new file mode 100644 index 0000000000..a79ba486fa --- /dev/null +++ b/frontend/src/config/identities/groupsio/config.ts @@ -0,0 +1,15 @@ +import { IdentityConfig } from '@/config/identities'; + +const groupsio: IdentityConfig = { + key: 'groupsio', + name: 'Groups.io', + image: '/images/identities/groupsio.svg', + member: { + placeholder: 'Groups.io email address', + }, + activity: { + showLink: true, + }, +}; + +export default groupsio; diff --git a/frontend/src/config/identities/hackernews/config.ts b/frontend/src/config/identities/hackernews/config.ts new file mode 100644 index 0000000000..ba1d78fbde --- /dev/null +++ b/frontend/src/config/identities/hackernews/config.ts @@ -0,0 +1,23 @@ +import { IdentityConfig } from '@/config/identities'; + +const hackernews: IdentityConfig = { + key: 'hackernews', + name: 'Hacker News', + image: '/images/identities/hackernews.svg', + member: { + urlPrefix: 'news.ycombinator.com/user?id=', + url: ({ identity }) => (identity.value ? `https://news.ycombinator.com/user?id=${identity.value}` : null), + }, + activity: { + showLink: true, + }, + conversation: { + replyContent: (conversation) => ({ + icon: 'ri-reply-line', + copy: 'reply', + number: conversation.activityCount - 1, + }), + }, +}; + +export default hackernews; diff --git a/frontend/src/config/identities/identities.helpers.ts b/frontend/src/config/identities/identities.helpers.ts new file mode 100644 index 0000000000..562b05c267 --- /dev/null +++ b/frontend/src/config/identities/identities.helpers.ts @@ -0,0 +1,29 @@ +import { IdentityConfig, lfIdentities } from '@/config/identities/index'; + +const useIdentitiesHelpers = () => { + const getPlatformsLabel = (platforms: string[]) => platforms + .filter((platform) => !['integration_or_enrichment', 'email', 'integration', 'unknown', 'delete'].includes(platform)) + .map((platform) => { + if (['enrichment', 'peopledatalabs'].includes(platform)) { + return ' Enrichment'; + } + if (platform === 'custom') { + return 'Manually added'; + } + return lfIdentities[platform]?.name || platform; + }).join(', '); + + const uniqueKeys = () => [...new Set(Object.values(lfIdentities).map((identity) => identity.key))]; + + const memberIdentities: IdentityConfig[] = uniqueKeys().map((key) => lfIdentities[key]).filter((identity) => !!identity.member); + + const organizationIdentities: IdentityConfig[] = uniqueKeys().map((key) => lfIdentities[key]).filter((identity) => !!identity.organization); + + return { + getPlatformsLabel, + memberIdentities, + organizationIdentities, + }; +}; + +export default useIdentitiesHelpers; diff --git a/frontend/src/config/identities/index.ts b/frontend/src/config/identities/index.ts new file mode 100644 index 0000000000..a9f2b87e50 --- /dev/null +++ b/frontend/src/config/identities/index.ts @@ -0,0 +1,89 @@ +import { ContributorAttribute, ContributorIdentity } from '@/modules/contributor/types/Contributor'; +import { OrganizationIdentity } from '@/modules/organization/types/Organization'; +import { Conversation } from '@/shared/modules/conversation/types/Conversation'; +import confluence from './confluence/config'; +import crunchbase from './crunchbase/config'; +import cvent from './cvent/config'; +import devto from './devto/config'; +import discord from './discord/config'; +import discourse from './discourse/config'; +import facebook from './facebook/config'; +import gerrit from './gerrit/config'; +import git from './git/config'; +import github from './github/config'; +import gitlab from './gitlab/config'; +import groupsio from './groupsio/config'; +import hackernews from './hackernews/config'; +import jira from './jira/config'; +import lfx from './lfx/config'; +import linkedin from './linkedin/config'; +import n8n from './n8n/config'; +import reddit from './reddit/config'; +import slack from './slack/config'; +import stackoverflow from './stackoverflow/config'; +import tnc from './tnc/config'; +import twitter from './twitter/config'; +import zapier from './zapier/config'; + +export interface IdentityConfig { + key: string; // Unique key for the identity + name: string; // Display name of the identity + image: string; // Image URL for the identity + icon?: string; // Image URL for the identity + color?: string; // Image URL for the identity + member?: { + placeholder?: string; + urlPrefix?: string; + url?: ({ identity, attributes }: { identity: ContributorIdentity; attributes: Record }) => string | null; + }, + organization?: { + urlPrefix?: string; + placeholder?: string; + handle?: (identity: OrganizationIdentity) => string; + url?: (identity: OrganizationIdentity) => string; + }, + activity?: { + showLink?: boolean; + showContentDetails?: boolean; + showSourceId?: boolean; + typeIcon?: string; + }, + conversation?: { + separatorContent?: string; + showLabels?: boolean; + attributes: (attributes: any) => any; + replyContent: (conversation: Conversation) => { + icon: string; + copy: string; + number: number; + } + } +} + +export const lfIdentities: Record = { + github, + discord, + hackernews, + linkedin, + twitter, + slack, + devto, + reddit, + stackoverflow, + discourse, + git, + groupsio, + confluence, + gerrit, + jira, + cvent, + lfx, + tnc, + gitlab, + crunchbase, + facebook, + lfid: lfx, + n8n, + training_cert: tnc, + zapier, +}; diff --git a/frontend/src/config/identities/jira/config.ts b/frontend/src/config/identities/jira/config.ts new file mode 100644 index 0000000000..c4e86d7cf5 --- /dev/null +++ b/frontend/src/config/identities/jira/config.ts @@ -0,0 +1,23 @@ +import { IdentityConfig } from '@/config/identities'; + +const jira: IdentityConfig = { + key: 'jira', + name: 'Jira', + image: '/images/identities/jira.png', + member: { + placeholder: 'Jira username or email address', + }, + activity: { + showLink: true, + showSourceId: true, + }, + conversation: { + replyContent: (conversation) => ({ + icon: 'ri-reply-line', + copy: 'reply', + number: conversation.activityCount - 1, + }), + }, +}; + +export default jira; diff --git a/frontend/src/config/identities/lfx/config.ts b/frontend/src/config/identities/lfx/config.ts new file mode 100644 index 0000000000..84309dc29f --- /dev/null +++ b/frontend/src/config/identities/lfx/config.ts @@ -0,0 +1,12 @@ +import { IdentityConfig } from '@/config/identities'; + +const lfx: IdentityConfig = { + key: 'lfx', + name: 'Linux Foundation ID', + image: '/images/identities/lfx.png', + member: { + placeholder: 'Linux Foundation ID', + }, +}; + +export default lfx; diff --git a/frontend/src/config/identities/linkedin/config.ts b/frontend/src/config/identities/linkedin/config.ts new file mode 100644 index 0000000000..fdff2cd2b9 --- /dev/null +++ b/frontend/src/config/identities/linkedin/config.ts @@ -0,0 +1,28 @@ +import { IdentityConfig } from '@/config/identities'; + +const linkedin: IdentityConfig = { + key: 'linkedin', + name: 'LinkedIn', + image: '/images/identities/linkedin.png', + icon: 'linkedin-box-fill', + color: '#2867B2', + member: { + urlPrefix: 'linkedin.com/in/', + url: ({ identity }) => (!identity.value?.includes('private-') ? `https://linkedin.com/in/${identity.value}` : null), + }, + organization: { + urlPrefix: 'linkedin.com/company/', + }, + activity: { + showLink: true, + }, + conversation: { + replyContent: (conversation) => ({ + icon: 'ri-reply-line', + copy: 'reply', + number: conversation.activityCount - 1, + }), + }, +}; + +export default linkedin; diff --git a/frontend/src/config/identities/n8n/config.ts b/frontend/src/config/identities/n8n/config.ts new file mode 100644 index 0000000000..946dfbc5fb --- /dev/null +++ b/frontend/src/config/identities/n8n/config.ts @@ -0,0 +1,9 @@ +import { IdentityConfig } from '@/config/identities'; + +const n8n: IdentityConfig = { + key: 'n8n', + name: 'n8n', + image: '/images/identities/n8n.svg', +}; + +export default n8n; diff --git a/frontend/src/config/identities/reddit/config.ts b/frontend/src/config/identities/reddit/config.ts new file mode 100644 index 0000000000..7f9336db28 --- /dev/null +++ b/frontend/src/config/identities/reddit/config.ts @@ -0,0 +1,23 @@ +import { IdentityConfig } from '@/config/identities'; + +const reddit: IdentityConfig = { + key: 'reddit', + name: 'Reddit', + image: '/images/identities/reddit.svg', + member: { + urlPrefix: 'reddit.com/user/', + url: ({ identity }) => (identity.value ? `https://reddit.com/user/${identity.value}` : null), + }, + activity: { + showLink: true, + }, + conversation: { + replyContent: (conversation) => ({ + icon: 'ri-reply-line', + copy: 'reply', + number: conversation.activityCount - 1, + }), + }, +}; + +export default reddit; diff --git a/frontend/src/config/identities/slack/config.ts b/frontend/src/config/identities/slack/config.ts new file mode 100644 index 0000000000..50b7736c48 --- /dev/null +++ b/frontend/src/config/identities/slack/config.ts @@ -0,0 +1,23 @@ +import { IdentityConfig } from '@/config/identities'; + +const slack: IdentityConfig = { + key: 'slack', + name: 'Slack', + image: '/images/identities/slack.png', + member: { + placeholder: 'Slack username or email address', + url: ({ identity }) => (identity.value ? `https://slack.com/${identity.value}` : null), + }, + activity: { + showLink: true, + }, + conversation: { + replyContent: (conversation) => ({ + icon: 'ri-reply-line', + copy: 'reply', + number: conversation.activityCount - 1, + }), + }, +}; + +export default slack; diff --git a/frontend/src/config/identities/stackoverflow/config.ts b/frontend/src/config/identities/stackoverflow/config.ts new file mode 100644 index 0000000000..d15f062946 --- /dev/null +++ b/frontend/src/config/identities/stackoverflow/config.ts @@ -0,0 +1,23 @@ +import { IdentityConfig } from '@/config/identities'; + +const stackoverflow: IdentityConfig = { + key: 'stackoverflow', + name: 'Stack Overflow', + image: '/images/identities/stackoverflow.png', + member: { + urlPrefix: 'stackoverflow.com/users/', + url: ({ attributes }) => attributes?.url?.stackoverflow || null, + }, + activity: { + showLink: true, + }, + conversation: { + replyContent: (conversation) => ({ + icon: 'ri-reply-line', + copy: 'reply', + number: conversation.activityCount - 1, + }), + }, +}; + +export default stackoverflow; diff --git a/frontend/src/config/identities/tnc/config.ts b/frontend/src/config/identities/tnc/config.ts new file mode 100644 index 0000000000..2eec1051e0 --- /dev/null +++ b/frontend/src/config/identities/tnc/config.ts @@ -0,0 +1,12 @@ +import { IdentityConfig } from '@/config/identities'; + +const tnc: IdentityConfig = { + key: 'tnc', + name: 'Training & Certification', + image: '/images/identities/tnc.png', + member: { + placeholder: 'Linux Foundation ID', + }, +}; + +export default tnc; diff --git a/frontend/src/config/identities/twitter/config.ts b/frontend/src/config/identities/twitter/config.ts new file mode 100644 index 0000000000..f6a0ae6cea --- /dev/null +++ b/frontend/src/config/identities/twitter/config.ts @@ -0,0 +1,26 @@ +import { IdentityConfig } from '@/config/identities'; + +const twitter: IdentityConfig = { + key: 'twitter', + name: 'X/Twitter', + image: '/images/identities/twitter.png', + member: { + urlPrefix: 'twitter.com/', + url: ({ identity }) => (identity.value ? `https://twitter.com/${identity.value}` : null), + }, + organization: { + urlPrefix: 'twitter.com/', + }, + activity: { + showLink: true, + }, + conversation: { + replyContent: (conversation) => ({ + icon: 'ri-reply-line', + copy: 'reply', + number: conversation.activityCount - 1, + }), + }, +}; + +export default twitter; diff --git a/frontend/src/config/identities/zapier/config.ts b/frontend/src/config/identities/zapier/config.ts new file mode 100644 index 0000000000..985a601d46 --- /dev/null +++ b/frontend/src/config/identities/zapier/config.ts @@ -0,0 +1,9 @@ +import { IdentityConfig } from '@/config/identities'; + +const zapier: IdentityConfig = { + key: 'zapier', + name: 'Zapier', + image: '/images/identities/zapier.png', +}; + +export default zapier; diff --git a/frontend/src/config/integrations/confluence/components/confluence-settings-drawer.vue b/frontend/src/config/integrations/confluence/components/confluence-settings-drawer.vue index e355856d41..50bb3efe9a 100644 --- a/frontend/src/config/integrations/confluence/components/confluence-settings-drawer.vue +++ b/frontend/src/config/integrations/confluence/components/confluence-settings-drawer.vue @@ -81,7 +81,7 @@ import useVuelidate from '@vuelidate/core'; import { computed, onMounted, reactive, ref, } from 'vue'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import confluence from '@/config/integrations/confluence/config'; import formChangeDetector from '@/shared/form/form-change'; import { mapActions } from '@/shared/vuex/vuex.helpers'; import useProductTracking from '@/shared/modules/monitoring/useProductTracking'; @@ -132,7 +132,7 @@ const isVisible = computed({ emit('update:modelValue', value); }, }); -const logoUrl = computed(() => CrowdIntegrations.getConfig('confluence').image); +const logoUrl = confluence.image; onMounted(() => { if (props.integration?.settings) { diff --git a/frontend/src/config/integrations/confluence/config.ts b/frontend/src/config/integrations/confluence/config.ts index ce20257df6..e5001b0822 100644 --- a/frontend/src/config/integrations/confluence/config.ts +++ b/frontend/src/config/integrations/confluence/config.ts @@ -11,6 +11,7 @@ const confluence: IntegrationConfig = { connectComponent: ConfluenceConnect, connectedParamsComponent: ConfluenceParams, dropdownComponent: ConfluenceDropdown, + showProgress: false, }; export default confluence; diff --git a/frontend/src/config/integrations/devto/components/devto-connect-drawer.vue b/frontend/src/config/integrations/devto/components/devto-connect-drawer.vue index e3cd6f2388..feeb0e12fc 100644 --- a/frontend/src/config/integrations/devto/components/devto-connect-drawer.vue +++ b/frontend/src/config/integrations/devto/components/devto-connect-drawer.vue @@ -195,13 +195,12 @@ import { defineProps, watch, } from 'vue'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; import { required } from '@vuelidate/validators'; import useVuelidate from '@vuelidate/core'; import AppDrawer from '@/shared/drawer/drawer.vue'; import { mapActions } from '@/shared/vuex/vuex.helpers'; import AppFormItem from '@/shared/form/form-item.vue'; -// import elementChangeDetector from '@/shared/form/element-change'; +import devto from '@/config/integrations/devto/config'; import { IntegrationService } from '@/modules/integration/integration-service'; import useProductTracking from '@/shared/modules/monitoring/useProductTracking'; import { EventType, FeatureEventKey } from '@/shared/modules/monitoring/types/event'; @@ -218,7 +217,7 @@ const props = defineProps<{ grandparentId: string; }>(); -const logoUrl = ref(CrowdIntegrations.getConfig('devto').image); +const logoUrl = devto.image; const users = ref([]); const organizations = ref([]); const loading = ref(false); diff --git a/frontend/src/config/integrations/devto/config.ts b/frontend/src/config/integrations/devto/config.ts index cfed3cc66c..197e7db41a 100644 --- a/frontend/src/config/integrations/devto/config.ts +++ b/frontend/src/config/integrations/devto/config.ts @@ -9,6 +9,7 @@ const devto: IntegrationConfig = { description: 'Connect DEV to sync profile information and comments on articles.', connectComponent: DevtoConnect, connectedParamsComponent: DevtoParams, + showProgress: false, }; export default devto; diff --git a/frontend/src/config/integrations/discord/config.ts b/frontend/src/config/integrations/discord/config.ts index 8a096ab644..d4d5e925ba 100644 --- a/frontend/src/config/integrations/discord/config.ts +++ b/frontend/src/config/integrations/discord/config.ts @@ -9,6 +9,7 @@ const discord: IntegrationConfig = { description: 'Connect Discord to sync messages, threads, forum channels, and new joiners.', connectComponent: DiscordConnect, connectedParamsComponent: DiscordParams, + showProgress: false, }; export default discord; diff --git a/frontend/src/config/integrations/discourse/components/discourse-settings-drawer.vue b/frontend/src/config/integrations/discourse/components/discourse-settings-drawer.vue index d9301a8560..a80e13c8ef 100644 --- a/frontend/src/config/integrations/discourse/components/discourse-settings-drawer.vue +++ b/frontend/src/config/integrations/discourse/components/discourse-settings-drawer.vue @@ -198,7 +198,7 @@ import { computed, defineEmits, defineProps, onMounted, reactive, ref, } from 'vue'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import discourse from '@/config/integrations/discourse/config'; import { helpers, required, url } from '@vuelidate/validators'; import useVuelidate from '@vuelidate/core'; import AppDrawer from '@/shared/drawer/drawer.vue'; @@ -326,7 +326,7 @@ const emit = defineEmits(['update:modelValue']); const { hasFormChanged, formSnapshot } = formChangeDetector(form); -const logoUrl = CrowdIntegrations.getConfig('discourse').image; +const logoUrl = discourse.image; const isVisible = computed({ get() { diff --git a/frontend/src/config/integrations/discourse/config.ts b/frontend/src/config/integrations/discourse/config.ts index a6bf02b2f8..9ec0fa7cc9 100644 --- a/frontend/src/config/integrations/discourse/config.ts +++ b/frontend/src/config/integrations/discourse/config.ts @@ -11,6 +11,7 @@ const discourse: IntegrationConfig = { connectComponent: DiscourseConnect, connectedParamsComponent: DiscourseParams, dropdownComponent: DiscourseDropdown, + showProgress: false, }; export default discourse; diff --git a/frontend/src/config/integrations/gerrit/components/gerrit-settings-drawer.vue b/frontend/src/config/integrations/gerrit/components/gerrit-settings-drawer.vue index c0492c2e4e..002f896d60 100644 --- a/frontend/src/config/integrations/gerrit/components/gerrit-settings-drawer.vue +++ b/frontend/src/config/integrations/gerrit/components/gerrit-settings-drawer.vue @@ -97,7 +97,7 @@ import useVuelidate from '@vuelidate/core'; import { computed, defineProps, onMounted, reactive, ref, } from 'vue'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import gerrit from '@/config/integrations/gerrit/config'; import formChangeDetector from '@/shared/form/form-change'; import { mapActions } from '@/shared/vuex/vuex.helpers'; import AppArrayInput from '@/shared/form/array-input.vue'; @@ -137,7 +137,7 @@ const isVisible = computed({ emit('update:modelValue', value); }, }); -const logoUrl = computed(() => CrowdIntegrations.getConfig('gerrit').image); +const logoUrl = gerrit.image; onMounted(() => { if (props.integration?.settings?.remote) { diff --git a/frontend/src/config/integrations/gerrit/config.ts b/frontend/src/config/integrations/gerrit/config.ts index 9f9232020a..6e05b2fcda 100644 --- a/frontend/src/config/integrations/gerrit/config.ts +++ b/frontend/src/config/integrations/gerrit/config.ts @@ -11,6 +11,7 @@ const gerrit: IntegrationConfig = { connectComponent: GerritConnect, connectedParamsComponent: GerritParams, dropdownComponent: GerritDropdown, + showProgress: false, }; export default gerrit; diff --git a/frontend/src/config/integrations/git/components/git-settings-drawer.vue b/frontend/src/config/integrations/git/components/git-settings-drawer.vue index 92af8cd181..f8d0513bb3 100644 --- a/frontend/src/config/integrations/git/components/git-settings-drawer.vue +++ b/frontend/src/config/integrations/git/components/git-settings-drawer.vue @@ -69,7 +69,7 @@ import useVuelidate from '@vuelidate/core'; import { computed, onMounted, reactive, ref, } from 'vue'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import git from '@/config/integrations/git/config'; import AppArrayInput from '@/shared/form/array-input.vue'; import formChangeDetector from '@/shared/form/form-change'; import { mapActions } from '@/shared/vuex/vuex.helpers'; @@ -113,7 +113,8 @@ const isVisible = computed({ emit('update:modelValue', value); }, }); -const logoUrl = computed(() => CrowdIntegrations.getConfig('git').image); + +const logoUrl = git.image; onMounted(() => { if (props.integration?.settings?.remotes?.length) { diff --git a/frontend/src/config/integrations/git/config.ts b/frontend/src/config/integrations/git/config.ts index 2c3f3da56a..b56faa540c 100644 --- a/frontend/src/config/integrations/git/config.ts +++ b/frontend/src/config/integrations/git/config.ts @@ -11,6 +11,7 @@ const git: IntegrationConfig = { connectComponent: GitConnect, dropdownComponent: GitDropdown, connectedParamsComponent: GitParams, + showProgress: false, }; export default git; diff --git a/frontend/src/config/integrations/github/config.ts b/frontend/src/config/integrations/github/config.ts index ef0a6854f0..7c1f02d2ec 100644 --- a/frontend/src/config/integrations/github/config.ts +++ b/frontend/src/config/integrations/github/config.ts @@ -11,6 +11,7 @@ const github: IntegrationConfig = { connectComponent: GithubConnect, dropdownComponent: GithubDropdown, connectedParamsComponent: GithubParams, + showProgress: true, }; export default github; diff --git a/frontend/src/config/integrations/gitlab/components/gitlab-settings-drawer.vue b/frontend/src/config/integrations/gitlab/components/gitlab-settings-drawer.vue index f76e354282..477525984b 100644 --- a/frontend/src/config/integrations/gitlab/components/gitlab-settings-drawer.vue +++ b/frontend/src/config/integrations/gitlab/components/gitlab-settings-drawer.vue @@ -194,7 +194,7 @@ import { computed, onMounted, ref, watch, } from 'vue'; import Message from '@/shared/message/message'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import gitlab from '@/config/integrations/gitlab/config'; import { LfService } from '@/modules/lf/segments/lf-segments-service'; import { useRouter } from 'vue-router'; import { required } from '@vuelidate/validators'; @@ -279,7 +279,7 @@ const groupedProjects = computed(() => allProjects.value.reduce((acc, project) = }, {})); // Static gitlab details -const gitlabDetails = computed(() => CrowdIntegrations.getConfig('gitlab')); +const gitlabDetails = gitlab; // Form const form = ref>( diff --git a/frontend/src/config/integrations/gitlab/config.ts b/frontend/src/config/integrations/gitlab/config.ts index 63102e66af..398fdbad97 100644 --- a/frontend/src/config/integrations/gitlab/config.ts +++ b/frontend/src/config/integrations/gitlab/config.ts @@ -13,6 +13,7 @@ const gitlab: IntegrationConfig = { connectedParamsComponent: GitlabParams, actionComponent: GitlabAction, statusComponent: GitlabStatus, + showProgress: false, }; export default gitlab; diff --git a/frontend/src/config/integrations/groupsio/components/groupsio-settings-drawer.vue b/frontend/src/config/integrations/groupsio/components/groupsio-settings-drawer.vue index 3fbe367df5..d3882446a1 100644 --- a/frontend/src/config/integrations/groupsio/components/groupsio-settings-drawer.vue +++ b/frontend/src/config/integrations/groupsio/components/groupsio-settings-drawer.vue @@ -210,7 +210,7 @@ import { ref, reactive, onMounted, computed, } from 'vue'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import groupsio from '@/config/integrations/groupsio/config'; import { required, email } from '@vuelidate/validators'; import useVuelidate from '@vuelidate/core'; import AppDrawer from '@/shared/drawer/drawer.vue'; @@ -411,7 +411,7 @@ const emit = defineEmits(['update:modelValue']); const { hasFormChanged, formSnapshot } = formChangeDetector(form); -const logoUrl = CrowdIntegrations.getConfig('groupsio').image; +const logoUrl = groupsio.image; const isVisible = computed({ get() { diff --git a/frontend/src/config/integrations/groupsio/config.ts b/frontend/src/config/integrations/groupsio/config.ts index bbafc980b8..a8f414bbcc 100644 --- a/frontend/src/config/integrations/groupsio/config.ts +++ b/frontend/src/config/integrations/groupsio/config.ts @@ -11,6 +11,7 @@ const groupsio: IntegrationConfig = { connectComponent: GroupsioConnect, connectedParamsComponent: GroupsioParams, dropdownComponent: GroupsioDropdown, + showProgress: false, }; export default groupsio; diff --git a/frontend/src/config/integrations/hackernews/components/hackernews-settings-drawer.vue b/frontend/src/config/integrations/hackernews/components/hackernews-settings-drawer.vue index fb88c807da..92eb041071 100644 --- a/frontend/src/config/integrations/hackernews/components/hackernews-settings-drawer.vue +++ b/frontend/src/config/integrations/hackernews/components/hackernews-settings-drawer.vue @@ -121,7 +121,7 @@ - - diff --git a/frontend/src/integrations/hubspot/components/hubspot-property-map.vue b/frontend/src/integrations/hubspot/components/hubspot-property-map.vue deleted file mode 100644 index e59926a177..0000000000 --- a/frontend/src/integrations/hubspot/components/hubspot-property-map.vue +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - diff --git a/frontend/src/integrations/hubspot/components/hubspot-readonly-attr-popover.vue b/frontend/src/integrations/hubspot/components/hubspot-readonly-attr-popover.vue deleted file mode 100644 index 7605c2c659..0000000000 --- a/frontend/src/integrations/hubspot/components/hubspot-readonly-attr-popover.vue +++ /dev/null @@ -1,89 +0,0 @@ - - - - - diff --git a/frontend/src/integrations/hubspot/components/hubspot-settings-drawer.vue b/frontend/src/integrations/hubspot/components/hubspot-settings-drawer.vue deleted file mode 100644 index 20c816481b..0000000000 --- a/frontend/src/integrations/hubspot/components/hubspot-settings-drawer.vue +++ /dev/null @@ -1,481 +0,0 @@ - - - - - - - diff --git a/frontend/src/integrations/hubspot/config.js b/frontend/src/integrations/hubspot/config.js deleted file mode 100644 index 2f04c1aab7..0000000000 --- a/frontend/src/integrations/hubspot/config.js +++ /dev/null @@ -1,26 +0,0 @@ -import HubspotConnect from './components/hubspot-connect.vue'; - -export default { - name: 'HubSpot', - backgroundColor: '#FFFFFF', - borderColor: '#FFFFFF', - description: 'Create a 2-way sync with HubSpot.', - image: - '/images/integrations/hubspot.svg', - connectComponent: HubspotConnect, - enabled: true, - url: (username) => null, - scale: true, - chartColor: '#FF712E', - showProfileLink: true, - activityDisplay: { - showLinkToUrl: true, - }, - conversationDisplay: { - replyContent: (conversation) => ({ - icon: 'ri-reply-line', - copy: 'reply', - number: conversation.activityCount - 1, - }), - }, -}; diff --git a/frontend/src/integrations/hubspot/hubspot.api.service.ts b/frontend/src/integrations/hubspot/hubspot.api.service.ts deleted file mode 100644 index 27c9f051f3..0000000000 --- a/frontend/src/integrations/hubspot/hubspot.api.service.ts +++ /dev/null @@ -1,75 +0,0 @@ -import authAxios from '@/shared/axios/auth-axios'; -import { MappableFields } from '@/integrations/hubspot/types/MappableFields'; -import { HubspotOnboard } from '@/integrations/hubspot/types/HubspotOnboard'; -import { HubspotLists } from '@/integrations/hubspot/types/HubspotLists'; - -export class HubspotApiService { - static getMappableFields(): Promise { - return authAxios.get( - '/hubspot-mappable-fields', - ) - .then((response) => response.data); - } - - static updateAttributes(): Promise { - return authAxios.post( - '/hubspot-update-properties', - ) - .then((response) => response.data); - } - - static finishOnboard(data: HubspotOnboard): Promise { - return authAxios.post( - '/hubspot-onboard', - data, - ) - .then((response) => response.data); - } - - static syncMember(memberId: string): Promise { - return authAxios.post( - '/hubspot-sync-member', - { - memberId, - }, - ) - .then((response) => response.data); - } - - static stopSyncMember(memberId: string): Promise { - return authAxios.post( - '/hubspot-stop-sync-member', - { - memberId, - }, - ) - .then((response) => response.data); - } - - static syncOrganization(organizationId: string): Promise { - return authAxios.post( - '/hubspot-sync-organization', - { - organizationId, - }, - ) - .then((response) => response.data); - } - - static stopSyncOrganization(organizationId: string): Promise { - return authAxios.post( - '/hubspot-stop-sync-organization', - { - organizationId, - }, - ) - .then((response) => response.data); - } - - static getLists(): Promise { - return authAxios.get( - '/hubspot-get-lists', - ) - .then((response) => response.data); - } -} diff --git a/frontend/src/integrations/hubspot/index.js b/frontend/src/integrations/hubspot/index.js deleted file mode 100644 index e81a18f3ed..0000000000 --- a/frontend/src/integrations/hubspot/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import config from './config'; - -export default config; diff --git a/frontend/src/integrations/hubspot/types/HubspotEntity.ts b/frontend/src/integrations/hubspot/types/HubspotEntity.ts deleted file mode 100644 index b6539c7f38..0000000000 --- a/frontend/src/integrations/hubspot/types/HubspotEntity.ts +++ /dev/null @@ -1,4 +0,0 @@ -export enum HubspotEntity { - MEMBERS= 'members', - ORGANIZATIONS = 'organizations' -} diff --git a/frontend/src/integrations/hubspot/types/HubspotLists.ts b/frontend/src/integrations/hubspot/types/HubspotLists.ts deleted file mode 100644 index 18f4221327..0000000000 --- a/frontend/src/integrations/hubspot/types/HubspotLists.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface HubspotList { - id: string; - name: string; -} - -export interface HubspotLists { - members: HubspotList[]; - organizations: HubspotList[]; -} diff --git a/frontend/src/integrations/hubspot/types/HubspotOnboard.ts b/frontend/src/integrations/hubspot/types/HubspotOnboard.ts deleted file mode 100644 index 4d6da16dd2..0000000000 --- a/frontend/src/integrations/hubspot/types/HubspotOnboard.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { HubspotEntity } from '@/integrations/hubspot/types/HubspotEntity'; - -export interface HubspotOnboard{ - enabledFor: HubspotEntity[]; - attributesMapping: { - [HubspotEntity.MEMBERS]?: Record; - [HubspotEntity.ORGANIZATIONS]?: Record; - }; -} diff --git a/frontend/src/integrations/hubspot/types/HubspotProperty.ts b/frontend/src/integrations/hubspot/types/HubspotProperty.ts deleted file mode 100644 index 9c7a55347b..0000000000 --- a/frontend/src/integrations/hubspot/types/HubspotProperty.ts +++ /dev/null @@ -1,10 +0,0 @@ -export interface HubspotProperty { - label: string; - name: string; - type: string; -} - -export interface HubspotProperties { - members: HubspotProperty[]; - organizations: HubspotProperty[]; -} diff --git a/frontend/src/integrations/hubspot/types/MappableFields.ts b/frontend/src/integrations/hubspot/types/MappableFields.ts deleted file mode 100644 index 9b25aaa022..0000000000 --- a/frontend/src/integrations/hubspot/types/MappableFields.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface MappableFields { - members: Record, - organizations: Record, -} diff --git a/frontend/src/integrations/integrations-config.js b/frontend/src/integrations/integrations-config.js deleted file mode 100644 index 9a07d50f15..0000000000 --- a/frontend/src/integrations/integrations-config.js +++ /dev/null @@ -1,166 +0,0 @@ -import github from './github'; -import discord from './discord'; -import slack from './slack'; -import twitter from './twitter'; -import devto from './devto'; -import hackernews from './hackernews'; -import discourse from './discourse'; -// import hubspot from './hubspot'; -import stackoverflow from './stackoverflow'; -import reddit from './reddit'; -import linkedin from './linkedin'; -import zapier from './zapier'; -import crunchbase from './crunchbase'; -// import make from './make'; -import git from './git'; -import facebook from './facebook'; -import n8n from './n8n'; -import lfx from './custom/lfx'; -import groupsio from './groupsio'; -import confluence from './confluence'; -import gerrit from './gerrit'; -import jira from './jira'; -import cvent from './custom/cvent'; -import tnc from './custom/tnc'; -import gitlab from './gitlab'; - -class IntegrationsConfig { - get integrations() { - return { - github, - discord, - hackernews, - linkedin, - twitter, - // hubspot, - slack, - devto, - reddit, - stackoverflow, - discourse, - zapier, - n8n, - git, - crunchbase, - groupsio, - // make, - facebook, - confluence, - gerrit, - jira, - gitlab, - }; - } - - getConfig(platform) { - if (this.integrations[platform]) { - return this.integrations[platform]; - } - return this.customIntegrations[platform]; - } - - get configs() { - return Object.entries(this.integrations).map( - ([key, config]) => ({ - ...config, - platform: key, - }), - ); - } - - get enabledConfigs() { - return this.configs.filter((config) => config.enabled); - } - - mapper(integration, store) { - return { - ...integration, - ...store.getters['integration/findByPlatform']( - integration.platform, - ), - }; - } - - getMappedConfig(platform, store) { - return this.mapper( - { - ...this.getConfig(platform), - platform, - }, - store, - ); - } - - mappedConfigs(store) { - return this.configs - .map((i) => this.mapper(i, store)) - .filter((i) => !i.hideAsIntegration); - } - - mappedEnabledConfigs(store) { - return this.enabledConfigs - .map((i) => this.mapper(i, store)) - .filter((i) => !i.hideAsIntegration); - } - - getPlatformsLabel(platforms) { - return platforms - .filter((platform) => !['integration_or_enrichment', 'email', 'integration', 'unknown', 'delete'].includes(platform)) - .map((platform) => { - if (['enrichment', 'peopledatalabs'].includes(platform)) { - return ' Enrichment'; - } - if (platform === 'custom') { - return 'Manually added'; - } - return this.getConfig(platform)?.name || platform; - }).join(', '); - } - - get customIntegrations() { - return { - cvent, - lfx, - lfid: lfx, - tnc, - training_cert: tnc, - }; - } - - get memberIdentities() { - return { - github, - discord, - hackernews, - linkedin, - twitter, - // hubspot, - slack, - devto, - reddit, - stackoverflow, - discourse, - git, - groupsio, - // make, - confluence, - gerrit, - jira, - cvent, - lfx, - tnc, - gitlab, - }; - } - - get organizationIdentities() { - return { - github, - linkedin, - twitter, - crunchbase, - }; - } -} - -export const CrowdIntegrations = new IntegrationsConfig(); diff --git a/frontend/src/integrations/jira/config.js b/frontend/src/integrations/jira/config.js deleted file mode 100644 index 14fa3cb37e..0000000000 --- a/frontend/src/integrations/jira/config.js +++ /dev/null @@ -1,35 +0,0 @@ -import config from '@/config'; - -export default { - enabled: true, - name: 'Jira', - backgroundColor: '#FFFFFF', - borderColor: '#FFFFFF', - description: - 'Connect Jira to sync issues activities from your projects.', - onboard: { - description: 'Sync issue activities from your projects.', - }, - image: - '/images/integrations/jira.png', - url: () => null, - showProfileLink: false, - placeholder: 'Jira username or email address', - chartColor: '#E5512C', - activityDisplay: { - showContentDetails: false, - showLinkToUrl: true, - showSourceId: true, - typeIcon: 'jira', - }, - conversationDisplay: { - replyContent: (conversation) => ({ - icon: 'ri-reply-line', - copy: 'reply', - number: conversation.activityCount - 1, - }), - }, - organization: { - handle: (identity) => (identity.url ? identity.url.split('/').at(-1) : identity.name), - }, -}; diff --git a/frontend/src/integrations/jira/index.js b/frontend/src/integrations/jira/index.js deleted file mode 100644 index e81a18f3ed..0000000000 --- a/frontend/src/integrations/jira/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import config from './config'; - -export default config; diff --git a/frontend/src/integrations/linkedin/config.js b/frontend/src/integrations/linkedin/config.js deleted file mode 100644 index bfd1929e84..0000000000 --- a/frontend/src/integrations/linkedin/config.js +++ /dev/null @@ -1,58 +0,0 @@ -export default { - enabled: true, - name: 'LinkedIn', - backgroundColor: '#D4E1F0', - borderColor: '#D4E1F0', - brandColor: '#2867B2', - description: - "Connect LinkedIn to sync comments and reactions from your organization's posts.", - image: '/images/integrations/linkedin.png', - icon: 'linkedin-box-fill', - reactions: { - like: 'Like', - praise: 'Celebrate', - maybe: 'Curious', - empathy: 'Love', - interest: 'Insightful', - appreciation: 'Support', - entertainment: 'Funny', - }, - premium: true, - url: ({ username }) => (!username?.includes('private-') ? `https://linkedin.com/in/${username}` : null), - chartColor: '#2867B2', - showProfileLink: true, - urlPrefix: 'linkedin.com/in/', - orgUrlPrefix: 'linkedin.com/company/', - activityDisplay: { - showLinkToUrl: true, - }, - conversationDisplay: { - replyContent: (conversation) => ({ - icon: 'ri-reply-line', - copy: 'reply', - number: conversation.activityCount - 1, - }), - }, - organization: { - identityHandle: ({ identityHandle }) => { - const splittedIdentity = identityHandle?.split(':'); - - if (splittedIdentity.length < 2) { - return identityHandle; - } - - return splittedIdentity[1]; - }, - identityLink: ({ identityHandle }) => { - const splittedIdentity = identityHandle?.split(':'); - - if (splittedIdentity.length < 2) { - return `https://linkedin.com/company/${identityHandle}`; - } - - const link = splittedIdentity[0] === 'school' ? 'https://linkedin.com/school/' : 'https://linkedin.com/company/'; - - return `${link}/${splittedIdentity[1]}`; - }, - }, -}; diff --git a/frontend/src/integrations/linkedin/index.js b/frontend/src/integrations/linkedin/index.js deleted file mode 100644 index e81a18f3ed..0000000000 --- a/frontend/src/integrations/linkedin/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import config from './config'; - -export default config; diff --git a/frontend/src/integrations/make/config.js b/frontend/src/integrations/make/config.js deleted file mode 100644 index f6bf9e6f1c..0000000000 --- a/frontend/src/integrations/make/config.js +++ /dev/null @@ -1,9 +0,0 @@ -export default { - enabled: false, - name: 'Make', - backgroundColor: '#FFFFFF', - borderColor: '#FFFFFF', - description: - "We're currently working on this integration.", - image: '/images/integrations/make.svg', -}; diff --git a/frontend/src/integrations/make/index.js b/frontend/src/integrations/make/index.js deleted file mode 100644 index e81a18f3ed..0000000000 --- a/frontend/src/integrations/make/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import config from './config'; - -export default config; diff --git a/frontend/src/integrations/n8n/config.js b/frontend/src/integrations/n8n/config.js deleted file mode 100644 index 2713165a95..0000000000 --- a/frontend/src/integrations/n8n/config.js +++ /dev/null @@ -1,9 +0,0 @@ -export default { - enabled: true, - name: 'n8n', - backgroundColor: '#FFFFFF', - borderColor: '#FFFFFF', - description: 'Use n8n to connect LFX with 250+ apps and services.', - image: - 'https://asset.brandfetch.io/idO6_6uqJ9/id9y5Acqtx.svg', -}; diff --git a/frontend/src/integrations/n8n/index.js b/frontend/src/integrations/n8n/index.js deleted file mode 100644 index e81a18f3ed..0000000000 --- a/frontend/src/integrations/n8n/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import config from './config'; - -export default config; diff --git a/frontend/src/integrations/reddit/config.js b/frontend/src/integrations/reddit/config.js deleted file mode 100644 index 094d05c61f..0000000000 --- a/frontend/src/integrations/reddit/config.js +++ /dev/null @@ -1,26 +0,0 @@ -export default { - enabled: true, - name: 'Reddit', - backgroundColor: '#ffd8ca', - borderColor: '#ffd8ca', - description: - 'Connect Reddit to sync posts and comments from selected subreddits.', - onboard: { - description: 'Sync posts and comments from selected subreddits.', - }, - image: '/images/integrations/reddit.svg', - url: ({ username }) => (username ? `https://reddit.com/user/${username}` : null), - chartColor: '#FF4500', - showProfileLink: true, - urlPrefix: 'reddit.com/user/', - activityDisplay: { - showLinkToUrl: true, - }, - conversationDisplay: { - replyContent: (conversation) => ({ - icon: 'ri-reply-line', - copy: 'reply', - number: conversation.activityCount - 1, - }), - }, -}; diff --git a/frontend/src/integrations/reddit/index.js b/frontend/src/integrations/reddit/index.js deleted file mode 100644 index e81a18f3ed..0000000000 --- a/frontend/src/integrations/reddit/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import config from './config'; - -export default config; diff --git a/frontend/src/integrations/salesforce/config.js b/frontend/src/integrations/salesforce/config.js deleted file mode 100644 index 133b741d4f..0000000000 --- a/frontend/src/integrations/salesforce/config.js +++ /dev/null @@ -1,7 +0,0 @@ -export default { - name: 'Salesforce', - description: 'Create a 2-way sync with your Salesforce CRM.', - image: - '/images/integrations/salesforce.png', - enterprise: true, -}; diff --git a/frontend/src/integrations/salesforce/index.js b/frontend/src/integrations/salesforce/index.js deleted file mode 100644 index e81a18f3ed..0000000000 --- a/frontend/src/integrations/salesforce/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import config from './config'; - -export default config; diff --git a/frontend/src/integrations/segment/config.js b/frontend/src/integrations/segment/config.js deleted file mode 100644 index 28cd14af1b..0000000000 --- a/frontend/src/integrations/segment/config.js +++ /dev/null @@ -1,7 +0,0 @@ -export default { - name: 'Segment', - description: 'Connect Segment to get a full view of your customer journey.', - image: - '/images/integrations/segment.svg', - enterprise: true, -}; diff --git a/frontend/src/integrations/segment/index.js b/frontend/src/integrations/segment/index.js deleted file mode 100644 index e81a18f3ed..0000000000 --- a/frontend/src/integrations/segment/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import config from './config'; - -export default config; diff --git a/frontend/src/integrations/slack/config.js b/frontend/src/integrations/slack/config.js deleted file mode 100644 index 6df9c336c6..0000000000 --- a/frontend/src/integrations/slack/config.js +++ /dev/null @@ -1,27 +0,0 @@ -export default { - enabled: true, - name: 'Slack', - backgroundColor: '#FFFFFF', - borderColor: '#E5E7EB', - description: - 'Connect Slack to sync messages, threads, and new joiners.', - onboard: { - description: 'Sync messages, threads, and new joiners.', - }, - image: - 'https://cdn-icons-png.flaticon.com/512/3800/3800024.png', - url: ({ username }) => (username ? `https://slack.com/${username}` : null), - chartColor: '#E41756', - showProfileLink: false, - placeholder: 'Slack username or email address', - activityDisplay: { - showLinkToUrl: true, - }, - conversationDisplay: { - replyContent: (conversation) => ({ - icon: 'ri-reply-line', - copy: 'reply', - number: conversation.activityCount - 1, - }), - }, -}; diff --git a/frontend/src/integrations/slack/index.js b/frontend/src/integrations/slack/index.js deleted file mode 100644 index e81a18f3ed..0000000000 --- a/frontend/src/integrations/slack/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import config from './config'; - -export default config; diff --git a/frontend/src/integrations/snowflake/config.js b/frontend/src/integrations/snowflake/config.js deleted file mode 100644 index 42d19ccfbf..0000000000 --- a/frontend/src/integrations/snowflake/config.js +++ /dev/null @@ -1,7 +0,0 @@ -export default { - name: 'Snowflake', - description: 'Create a 2-way sync with your Snowflake data warehouse.', - image: - '/images/integrations/snowflake.svg', - enterprise: true, -}; diff --git a/frontend/src/integrations/snowflake/index.js b/frontend/src/integrations/snowflake/index.js deleted file mode 100644 index e81a18f3ed..0000000000 --- a/frontend/src/integrations/snowflake/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import config from './config'; - -export default config; diff --git a/frontend/src/integrations/stackoverflow/config.js b/frontend/src/integrations/stackoverflow/config.js deleted file mode 100644 index 9db9870bae..0000000000 --- a/frontend/src/integrations/stackoverflow/config.js +++ /dev/null @@ -1,27 +0,0 @@ -export default { - enabled: true, - name: 'Stack Overflow', - backgroundColor: '#FFFFFF', - borderColor: '#FFFFFF', - description: - 'Connect Stack Overflow to sync questions and answers based on selected tags.', - onboard: { - description: 'Sync questions and answers based on selected tags.', - }, - image: - 'https://cdn-icons-png.flaticon.com/512/2111/2111628.png', - url: ({ attributes }) => attributes?.url?.stackoverflow, - chartColor: '#FF9845', - showProfileLink: true, - urlPrefix: 'stackoverflow.com/users/', - activityDisplay: { - showLinkToUrl: true, - }, - conversationDisplay: { - replyContent: (conversation) => ({ - icon: 'ri-reply-line', - copy: 'reply', - number: conversation.activityCount - 1, - }), - }, -}; diff --git a/frontend/src/integrations/stackoverflow/index.js b/frontend/src/integrations/stackoverflow/index.js deleted file mode 100644 index e81a18f3ed..0000000000 --- a/frontend/src/integrations/stackoverflow/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import config from './config'; - -export default config; diff --git a/frontend/src/integrations/twitter/config.js b/frontend/src/integrations/twitter/config.js deleted file mode 100644 index e5aa07b7dc..0000000000 --- a/frontend/src/integrations/twitter/config.js +++ /dev/null @@ -1,29 +0,0 @@ -export default { - enabled: true, - name: 'X/Twitter', - backgroundColor: '#d2ebfc', - borderColor: '#d2ebfc', - description: - 'Connect X/Twitter to sync profile information, followers, and relevant tweets.', - image: - '/images/integrations/twitter-x-black.png', - url: ({ username }) => (username ? `https://twitter.com/${username}` : null), - scale: true, - chartColor: '#1D9BF0', - showProfileLink: true, - urlPrefix: 'twitter.com/', - activityDisplay: { - showLinkToUrl: true, - }, - conversationDisplay: { - replyContent: (conversation) => ({ - icon: 'ri-reply-line', - copy: 'reply', - number: conversation.activityCount - 1, - }), - }, - organization: { - identityHandle: ({ identityHandle }) => identityHandle, - identityLink: ({ identityHandle }) => `https://x.com/${identityHandle}`, - }, -}; diff --git a/frontend/src/integrations/twitter/index.js b/frontend/src/integrations/twitter/index.js deleted file mode 100644 index e81a18f3ed..0000000000 --- a/frontend/src/integrations/twitter/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import config from './config'; - -export default config; diff --git a/frontend/src/integrations/zapier/config.js b/frontend/src/integrations/zapier/config.js deleted file mode 100644 index d11794c574..0000000000 --- a/frontend/src/integrations/zapier/config.js +++ /dev/null @@ -1,22 +0,0 @@ -export default { - enabled: true, - name: 'Zapier', - backgroundColor: '#FFFFFF', - borderColor: '#FFFFFF', - description: 'Use Zapier to connect LFX with 5,000+ apps.', - image: - 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRjwkLT9PbSES0VK7HH2KbXxWdH8oc7k7oIJA&s', - url: () => null, - chartColor: '#FF9676', - showProfileLink: true, - activityDisplay: { - showLinkToUrl: true, - }, - conversationDisplay: { - replyContent: (conversation) => ({ - icon: 'ri-reply-line', - copy: 'reply', - number: conversation.activityCount - 1, - }), - }, -}; diff --git a/frontend/src/integrations/zapier/index.js b/frontend/src/integrations/zapier/index.js deleted file mode 100644 index e81a18f3ed..0000000000 --- a/frontend/src/integrations/zapier/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import config from './config'; - -export default config; diff --git a/frontend/src/modules/activity/activity-type-field.js b/frontend/src/modules/activity/activity-type-field.js index 45f0bdd4e1..d0a543f64d 100644 --- a/frontend/src/modules/activity/activity-type-field.js +++ b/frontend/src/modules/activity/activity-type-field.js @@ -1,9 +1,9 @@ import JSONField from '@/shared/fields/json-field'; import { toSentenceCase } from '@/utils/string'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; import { storeToRefs } from 'pinia'; import { useActivityTypeStore } from '@/modules/activity/store/type'; import appConfig from '@/config'; +import { lfIdentities } from '@/config/identities'; export default class ActivityTypeField extends JSONField { constructor(name, label, config = {}) { @@ -24,7 +24,7 @@ export default class ActivityTypeField extends JSONField { // (temporary fix for default activity types stored in custom ones) .filter(([k, v]) => (!!Object.keys(v || {}).length) && (!appConfig.isGitIntegrationEnabled ? k !== 'git' : true)) .map(([key, value]) => { - let platformName = CrowdIntegrations.getConfig(key)?.name; + let platformName = lfIdentities[key]?.name; if (!platformName) { platformName = key === 'other' ? 'Custom' : key; diff --git a/frontend/src/modules/activity/components/activity-content.vue b/frontend/src/modules/activity/components/activity-content.vue index 54c6e9549e..e3ce164987 100644 --- a/frontend/src/modules/activity/components/activity-content.vue +++ b/frontend/src/modules/activity/components/activity-content.vue @@ -41,22 +41,7 @@ class="mt-3" />
- -
+
import emoji from 'node-emoji'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; export default { name: 'AppActivityContent', @@ -175,13 +159,6 @@ export default { displayShowMore: false, }; }, - computed: { - platformConfig() { - return CrowdIntegrations.getConfig( - this.activity.platform, - ); - }, - }, mounted() { if (this.showMore) { if (this.$refs.body) { diff --git a/frontend/src/modules/activity/components/activity-item.vue b/frontend/src/modules/activity/components/activity-item.vue index f2506d83e8..e3a3140a80 100644 --- a/frontend/src/modules/activity/components/activity-item.vue +++ b/frontend/src/modules/activity/components/activity-item.vue @@ -137,7 +137,6 @@ - diff --git a/frontend/src/modules/conversation/components/conversation-details.vue b/frontend/src/modules/conversation/components/conversation-details.vue index 6c758aa0a7..f63f201ba7 100644 --- a/frontend/src/modules/conversation/components/conversation-details.vue +++ b/frontend/src/modules/conversation/components/conversation-details.vue @@ -157,7 +157,6 @@ - diff --git a/frontend/src/modules/conversation/components/conversation-item.vue b/frontend/src/modules/conversation/components/conversation-item.vue index 65dfaf64c6..bc87a8b0a6 100644 --- a/frontend/src/modules/conversation/components/conversation-item.vue +++ b/frontend/src/modules/conversation/components/conversation-item.vue @@ -101,7 +101,6 @@ diff --git a/frontend/src/modules/integration/components/integration-progress.vue b/frontend/src/modules/integration/components/integration-progress.vue index 32ea5fe807..0c9c88c822 100644 --- a/frontend/src/modules/integration/components/integration-progress.vue +++ b/frontend/src/modules/integration/components/integration-progress.vue @@ -36,7 +36,7 @@ import LfSpinner from '@/ui-kit/spinner/Spinner.vue'; import { IntegrationProgress, IntegrationProgressPart } from '@/modules/integration/types/IntegrationProgress'; import { computed } from 'vue'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import { lfIntegrations } from '@/config/integrations'; const props = defineProps<{ progress: IntegrationProgress | null, @@ -55,7 +55,7 @@ const showProgress = computed(() => { if (!props.progress) { return false; } - return CrowdIntegrations.getConfig(props.progress.platform)?.showProgress || false; + return lfIntegrations[props.progress.platform]?.showProgress || false; }); const parts = computed(() => { diff --git a/frontend/src/modules/integration/helpers/integration-progress-notification.ts b/frontend/src/modules/integration/helpers/integration-progress-notification.ts index 9e23a3d0c0..b73fec5b67 100644 --- a/frontend/src/modules/integration/helpers/integration-progress-notification.ts +++ b/frontend/src/modules/integration/helpers/integration-progress-notification.ts @@ -2,10 +2,10 @@ import { createVNode, h } from 'vue'; import AppIntegrationProgress from '@/modules/integration/components/integration-progress.vue'; import AppIntegrationProgressWrapper from '@/modules/integration/components/integration-progress-wrapper.vue'; import { ElNotification } from 'element-plus'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import { lfIntegrations } from '@/config/integrations'; export const showIntegrationProgressNotification = (platform, segmentId) => { - const label = CrowdIntegrations.getConfig(platform)?.name; + const label = lfIntegrations[platform]?.name; const defaultSlot = ({ progress }) => { const integrationProgress = (progress || []).find((p) => p.platform === platform); const text = h('p', { diff --git a/frontend/src/modules/integration/integration-store.js b/frontend/src/modules/integration/integration-store.js index d2e5693887..725978dba8 100644 --- a/frontend/src/modules/integration/integration-store.js +++ b/frontend/src/modules/integration/integration-store.js @@ -1,9 +1,9 @@ import { IntegrationService } from '@/modules/integration/integration-service'; import Errors from '@/shared/error/errors'; import { router } from '@/router'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; import { isCurrentDateAfterGivenWorkingDays } from '@/utils/date'; import { showIntegrationProgressNotification } from '@/modules/integration/helpers/integration-progress-notification'; +import { lfIntegrations } from '@/config/integrations'; import Message from '../../shared/message/message'; export const ERROR_BANNER_WORKING_DAYS_DISPLAY = 3; @@ -32,23 +32,17 @@ export default { findByPlatform: (state, getters) => (platform) => getters.array.find((w) => w.platform === platform), list: (state) => Object.keys(state.byId).reduce((acc, key) => { - const integrationJsonData = CrowdIntegrations.getConfig( - state.byId[key].platform, - ); acc[key] = { ...state.byId[key], - ...integrationJsonData, + ...lfIntegrations[state.byId[key].platform], }; return acc; }, {}), listByPlatform: (state) => Object.keys(state.byId).reduce((acc, key) => { - const integrationJsonData = CrowdIntegrations.getConfig( - state.byId[key].platform, - ); acc[state.byId[key].platform] = { ...state.byId[key], - ...integrationJsonData, + ...lfIntegrations[state.byId[key].platform], }; return acc; }, {}), diff --git a/frontend/src/modules/lf/config/audit-logs/log-rendering/integrations-connect.ts b/frontend/src/modules/lf/config/audit-logs/log-rendering/integrations-connect.ts index c024dd4715..c318db1cf4 100644 --- a/frontend/src/modules/lf/config/audit-logs/log-rendering/integrations-connect.ts +++ b/frontend/src/modules/lf/config/audit-logs/log-rendering/integrations-connect.ts @@ -1,18 +1,18 @@ import { LogRenderingConfig } from '@/modules/lf/config/audit-logs/log-rendering/index'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import { lfIdentities } from '@/config/identities'; const integrationsConnect: LogRenderingConfig = { label: 'Integration connected', changes: () => null, description: (log) => { - const integration = CrowdIntegrations.getConfig(log.newState?.platform || log.oldState?.platform); + const integration = lfIdentities[log.newState?.platform || log.oldState?.platform]; if (integration) { return `Integration: ${integration.name}`; } return ''; }, properties: (log) => { - const integration = CrowdIntegrations.getConfig(log.newState?.platform || log.oldState?.platform); + const integration = lfIdentities[log.newState?.platform || log.oldState?.platform]; if (integration) { return [{ label: 'Integration', diff --git a/frontend/src/modules/lf/config/audit-logs/log-rendering/integrations-reconnect.ts b/frontend/src/modules/lf/config/audit-logs/log-rendering/integrations-reconnect.ts index fe4a2a5201..15c15ec57b 100644 --- a/frontend/src/modules/lf/config/audit-logs/log-rendering/integrations-reconnect.ts +++ b/frontend/src/modules/lf/config/audit-logs/log-rendering/integrations-reconnect.ts @@ -1,18 +1,18 @@ import { LogRenderingConfig } from '@/modules/lf/config/audit-logs/log-rendering/index'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import { lfIdentities } from '@/config/identities'; const integrationsReconnect: LogRenderingConfig = { label: 'Integration re-connected', changes: () => null, description: (log) => { - const integration = CrowdIntegrations.getConfig(log.newState?.platform || log.oldState?.platform); + const integration = lfIdentities[log.newState?.platform || log.oldState?.platform]; if (integration) { return `Integration: ${integration.name}`; } return ''; }, properties: (log) => { - const integration = CrowdIntegrations.getConfig(log.newState?.platform || log.oldState?.platform); + const integration = lfIdentities[log.newState?.platform || log.oldState?.platform]; if (integration) { return [{ label: 'Integration', diff --git a/frontend/src/modules/lf/config/audit-logs/log-rendering/members-edit-identities.ts b/frontend/src/modules/lf/config/audit-logs/log-rendering/members-edit-identities.ts index faeab19920..887410c466 100644 --- a/frontend/src/modules/lf/config/audit-logs/log-rendering/members-edit-identities.ts +++ b/frontend/src/modules/lf/config/audit-logs/log-rendering/members-edit-identities.ts @@ -1,5 +1,5 @@ import { LogRenderingConfig } from '@/modules/lf/config/audit-logs/log-rendering/index'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import { lfIdentities } from '@/config/identities'; const membersEditIdentities: LogRenderingConfig = { label: 'Profile identities updated', @@ -11,7 +11,7 @@ const membersEditIdentities: LogRenderingConfig = { Object.keys(log.oldState).forEach((platform) => { log.oldState[platform].forEach((identity) => { if (!log.newState[platform] || log.newState[platform].length === 0 || !log.newState[platform].includes(identity)) { - removals.push(`${CrowdIntegrations.getConfig(platform)?.name || platform} username: ${identity}`); + removals.push(`${lfIdentities[platform]?.name || platform} username: ${identity}`); } }); }); @@ -20,7 +20,7 @@ const membersEditIdentities: LogRenderingConfig = { Object.keys(log.newState).forEach((platform) => { log.newState[platform].forEach((identity) => { if (!log.oldState[platform] || !log.oldState[platform].includes(identity)) { - additions.push(`${CrowdIntegrations.getConfig(platform)?.name || platform} username: ${identity}`); + additions.push(`${lfIdentities[platform]?.name || platform} username: ${identity}`); } }); }); diff --git a/frontend/src/modules/lf/config/audit-logs/log-rendering/organizations-edit-identities.ts b/frontend/src/modules/lf/config/audit-logs/log-rendering/organizations-edit-identities.ts index de68323805..79446358e7 100644 --- a/frontend/src/modules/lf/config/audit-logs/log-rendering/organizations-edit-identities.ts +++ b/frontend/src/modules/lf/config/audit-logs/log-rendering/organizations-edit-identities.ts @@ -1,5 +1,5 @@ import { LogRenderingConfig } from '@/modules/lf/config/audit-logs/log-rendering/index'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import { lfIdentities } from '@/config/identities'; const organizationsEditIdentities: LogRenderingConfig = { label: 'Organization identities updated', @@ -27,8 +27,8 @@ const organizationsEditIdentities: LogRenderingConfig = { }); return { - additions: (additions || []).map((p) => `${CrowdIntegrations.getConfig(p.platform)?.name || p.platform}: ${p.name}`), - removals: (removals || []).map((p) => `${CrowdIntegrations.getConfig(p.platform)?.name || p.platform}: ${p.name}`), + additions: (additions || []).map((p) => `${lfIdentities[p.platform]?.name || p.platform}: ${p.name}`), + removals: (removals || []).map((p) => `${lfIdentities[p.platform]?.name || p.platform}: ${p.name}`), changes: [], }; }, diff --git a/frontend/src/modules/member/components/list/columns/member-list-emails.vue b/frontend/src/modules/member/components/list/columns/member-list-emails.vue index fabd492d5f..38df7fdf99 100644 --- a/frontend/src/modules/member/components/list/columns/member-list-emails.vue +++ b/frontend/src/modules/member/components/list/columns/member-list-emails.vue @@ -115,7 +115,7 @@ import { Member } from '@/modules/member/types/Member'; import { computed } from 'vue'; import useMemberIdentities from '@/shared/modules/identities/config/useMemberIdentities'; import memberOrder from '@/shared/modules/identities/config/identitiesOrder/member'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import { lfIdentities } from '@/config/identities'; const props = defineProps<{ member: Member @@ -160,7 +160,7 @@ const getPlatformLabel = (platforms: string[]) => platforms if (platform === 'enrichment') { return 'Enrichment'; } - return CrowdIntegrations.getConfig(platform)?.name || platform; + return lfIdentities[platform]?.name || platform; }).join(', '); const trackEmailClick = () => { diff --git a/frontend/src/modules/member/components/member-dropdown-content.vue b/frontend/src/modules/member/components/member-dropdown-content.vue index 0c1c01ffec..3b99c6b514 100644 --- a/frontend/src/modules/member/components/member-dropdown-content.vue +++ b/frontend/src/modules/member/components/member-dropdown-content.vue @@ -61,40 +61,6 @@ Merge profile - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -102,7 +102,6 @@ import { computed, reactive, ref } from 'vue'; import LfButton from '@/ui-kit/button/Button.vue'; import LfIconOld from '@/ui-kit/icon/IconOld.vue'; import LfInput from '@/ui-kit/input/Input.vue'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; import Message from '@/shared/message/message'; import pluralize from 'pluralize'; import useVuelidate from '@vuelidate/core'; @@ -118,6 +117,7 @@ import { Platform } from '@/shared/modules/platform/types/Platform'; import LfOrganizationDetailsIdentityAddDropdown from '@/modules/organization/components/details/identity/organization-details-identity-add-dropdown.vue'; import { required } from '@vuelidate/validators'; +import { lfIdentities } from '@/config/identities'; const props = defineProps<{ modelValue: boolean, @@ -160,8 +160,6 @@ const isModalOpen = computed({ }, }); -const platform = (platform: string) => CrowdIntegrations.getConfig(platform); - const addIdentities = () => { sending.value = true; updateOrganization(props.organization.id, { diff --git a/frontend/src/modules/organization/components/edit/identity/organization-identity-edit.vue b/frontend/src/modules/organization/components/edit/identity/organization-identity-edit.vue index 31b8070659..23b84afc0e 100644 --- a/frontend/src/modules/organization/components/edit/identity/organization-identity-edit.vue +++ b/frontend/src/modules/organization/components/edit/identity/organization-identity-edit.vue @@ -28,11 +28,11 @@ />

- {{ platform?.orgUrlPrefix || platform?.urlPrefix }} + {{ platform?.organization?.urlPrefix }}

@@ -62,7 +62,6 @@ import { computed, reactive, ref } from 'vue'; import LfButton from '@/ui-kit/button/Button.vue'; import LfIconOld from '@/ui-kit/icon/IconOld.vue'; import LfInput from '@/ui-kit/input/Input.vue'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; import Message from '@/shared/message/message'; import { required } from '@vuelidate/validators'; import useVuelidate from '@vuelidate/core'; @@ -73,6 +72,7 @@ import { } from '@/modules/organization/types/Organization'; import { useOrganizationStore } from '@/modules/organization/store/pinia'; import { Platform } from '@/shared/modules/platform/types/Platform'; +import { lfIdentities } from '@/config/identities'; const props = defineProps<{ modelValue: OrganizationIdentity | null, @@ -125,7 +125,7 @@ const isModalOpen = computed({ }, }); -const platform = computed(() => CrowdIntegrations.getConfig(form.platform)); +const platform = computed(() => lfIdentities[form.platform]); const updateIdentity = () => { const identities = props.organization.identities.map((i: OrganizationIdentity) => { diff --git a/frontend/src/modules/organization/components/edit/organization-add.vue b/frontend/src/modules/organization/components/edit/organization-add.vue index 2e51fcde92..405f9e3a28 100644 --- a/frontend/src/modules/organization/components/edit/organization-add.vue +++ b/frontend/src/modules/organization/components/edit/organization-add.vue @@ -52,20 +52,24 @@
- + @@ -100,7 +104,6 @@ import LfButton from '@/ui-kit/button/Button.vue'; import LfIconOld from '@/ui-kit/icon/IconOld.vue'; import LfInput from '@/ui-kit/input/Input.vue'; import LfField from '@/ui-kit/field/Field.vue'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; import LfTooltip from '@/ui-kit/tooltip/Tooltip.vue'; import useVuelidate from '@vuelidate/core'; import { required } from '@vuelidate/validators'; @@ -118,6 +121,8 @@ import { OrganizationApiService } from '@/modules/organization/services/organiza import Message from '@/shared/message/message'; import Errors from '@/shared/error/errors'; import AppLfSubProjectsListDropdown from '@/modules/admin/modules/projects/components/lf-sub-projects-list-dropdown.vue'; +import useIdentitiesHelpers from '@/config/identities/identities.helpers'; +import { lfIdentities } from '@/config/identities'; const props = defineProps<{ modelValue: boolean, @@ -133,19 +138,11 @@ const isModalOpen = computed({ const router = useRouter(); const { selectedProjectGroup } = storeToRefs(useLfSegmentsStore()); +const { organizationIdentities } = useIdentitiesHelpers(); -type OrganizationAddIdentity = OrganizationIdentity & { - image: string, - prefix: string, - placeholder: string, -} - -const platformList: OrganizationAddIdentity[] = Object.entries(CrowdIntegrations.organizationIdentities) - .map(([key, config]: [string, any]) => ({ - prefix: config.orgUrlPrefix ?? config.urlPrefix, - placeholder: config.placeholder, - image: config.image, - platform: key as Platform, +const platformList: OrganizationIdentity[] = organizationIdentities + .map((config) => ({ + platform: config.key as Platform, type: OrganizationIdentityType.USERNAME, value: '', verified: true, @@ -156,7 +153,7 @@ interface OrganizationAddForm { subproject: string; name: string; website: string; - identities: OrganizationAddIdentity[]; + identities: OrganizationIdentity[]; } const form = reactive({ @@ -177,7 +174,7 @@ const rules = { required, }, identities: { - required: (value: OrganizationAddIdentity[]) => value.some((i) => i.value.length), + required: (value: OrganizationIdentity[]) => value.some((i) => i.value.length), }, }; diff --git a/frontend/src/modules/organization/components/form/organization-form-identities.vue b/frontend/src/modules/organization/components/form/organization-form-identities.vue index 51acb28047..a545ddd234 100644 --- a/frontend/src/modules/organization/components/form/organization-form-identities.vue +++ b/frontend/src/modules/organization/components/form/organization-form-identities.vue @@ -5,11 +5,11 @@ :key="key" class="border-b border-gray-200 last:border-none pt-5 pb-6" > -
+
@@ -66,7 +66,7 @@ import { computed, ref, watch, reactive, } from 'vue'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import { lfIdentities } from '@/config/identities'; import { OrganizationIdentityType } from '../../types/Organization'; const emit = defineEmits(['update:modelValue', 'unmerge']); @@ -145,10 +145,6 @@ watch( { deep: true }, ); -function findPlatform(platform) { - return CrowdIntegrations.getConfig(platform); -} - function editingDisabled(platform) { return model.value.filter((i) => i.platform === platform).length < 2; } diff --git a/frontend/src/modules/organization/components/organization-dropdown-content.vue b/frontend/src/modules/organization/components/organization-dropdown-content.vue index 83573fc94e..6b37109844 100644 --- a/frontend/src/modules/organization/components/organization-dropdown-content.vue +++ b/frontend/src/modules/organization/components/organization-dropdown-content.vue @@ -51,42 +51,6 @@ Merge organization - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -