@@ -71,7 +63,7 @@ function ADLDAPUpsellBanner() {
@@ -122,7 +114,7 @@ function ADLDAPUpsellBanner() {
btn = (
diff --git a/webapp/channels/src/selectors/cloud.ts b/webapp/channels/src/selectors/cloud.ts
index 9786b1f5e0..684a4e6c25 100644
--- a/webapp/channels/src/selectors/cloud.ts
+++ b/webapp/channels/src/selectors/cloud.ts
@@ -4,51 +4,10 @@
import {Invoice, Subscription} from '@mattermost/types/cloud';
import {getConfig} from 'mattermost-redux/selectors/entities/general';
-import {getCurrentUser} from 'mattermost-redux/selectors/entities/users';
import {createSelector} from 'reselect';
import {GlobalState} from 'types/store';
-export enum InquiryType {
- Technical = 'technical',
- Sales = 'sales',
- Billing = 'billing',
-}
-
-export enum TechnicalInquiryIssue {
- AdminConsole = 'admin_console',
- MattermostMessaging = 'mm_messaging',
- DataExport = 'data_export',
- Other = 'other',
-}
-
-export enum SalesInquiryIssue {
- AboutPurchasing = 'about_purchasing',
- CancelAccount = 'cancel_account',
- PurchaseNonprofit = 'purchase_nonprofit',
- TrialQuestions = 'trial_questions',
- UpgradeEnterprise = 'upgrade_enterprise',
- SomethingElse = 'something_else',
-}
-
-type Issue = SalesInquiryIssue | TechnicalInquiryIssue
-
-export const getCloudContactUsLink: (state: GlobalState) => (inquiry: InquiryType, inquiryIssue?: Issue) => string = createSelector(
- 'getCloudContactUsLink',
- getConfig,
- getCurrentUser,
- (config, user) => {
- // cloud/contact-us with query params for name, email and inquiry
- const cwsUrl = config.CWSURL;
- const fullName = `${user.first_name} ${user.last_name}`;
- return (inquiry: InquiryType, inquiryIssue?: Issue) => {
- const inquiryIssueQuery = inquiryIssue ? `&inquiry-issue=${inquiryIssue}` : '';
-
- return `${cwsUrl}/cloud/contact-us?email=${encodeURIComponent(user.email)}&name=${encodeURIComponent(fullName)}&inquiry=${inquiry}${inquiryIssueQuery}`;
- };
- },
-);
-
export const getExpandSeatsLink: (state: GlobalState) => (licenseId: string) => string = createSelector(
'getExpandSeatsLink',
getConfig,
diff --git a/webapp/channels/src/utils/contact_support_sales.ts b/webapp/channels/src/utils/contact_support_sales.ts
new file mode 100644
index 0000000000..1899d599a6
--- /dev/null
+++ b/webapp/channels/src/utils/contact_support_sales.ts
@@ -0,0 +1,100 @@
+// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
+// See LICENSE.txt for license information.
+
+import {Buffer} from 'buffer';
+
+import {LicenseLinks} from './constants';
+
+const baseZendeskFormURL = 'https://support.mattermost.com/hc/en-us/requests/new';
+
+export enum ZendeskSupportForm {
+ SELF_HOSTED_SUPPORT_FORM = '11184911962004',
+ CLOUD_SUPPORT_FORM = '11184929555092',
+}
+
+export enum ZendeskFormFieldIDs {
+ CLOUD_WORKSPACE_URL = '5245314479252',
+ SELF_HOSTED_ENVIRONMENT = '360026980452',
+ BILLING_SALES_CATEGORY = '360031056451',
+ EMAIL = 'anonymous_requester_email',
+ SUBJECT = 'subject',
+ DESCRIPTION = 'description'
+}
+
+export type PrefillFieldFormFieldIDs = {
+ id: ZendeskFormFieldIDs;
+ val: string;
+}
+
+export const buildZendeskSupportForm = (form: ZendeskSupportForm, formFieldIDs: PrefillFieldFormFieldIDs[]): string => {
+ let formUrl = `${baseZendeskFormURL}?ticket_form_id=${form}`;
+
+ formFieldIDs.forEach((formPrefill) => {
+ formUrl = formUrl.concat(`&tf_${formPrefill.id}=${formPrefill.val}`);
+ });
+
+ if (form === ZendeskSupportForm.SELF_HOSTED_SUPPORT_FORM) {
+ formUrl = formUrl.concat(`&tf_${ZendeskFormFieldIDs.SELF_HOSTED_ENVIRONMENT}=production`);
+ }
+
+ return formUrl;
+};
+
+export const goToSelfHostedSupportForm = (email: string, subject: string) => {
+ const form = ZendeskSupportForm.SELF_HOSTED_SUPPORT_FORM;
+ const url = buildZendeskSupportForm(form, [
+ {id: ZendeskFormFieldIDs.EMAIL, val: email},
+ {id: ZendeskFormFieldIDs.SUBJECT, val: subject},
+ ]);
+ window.open(url, '_blank');
+};
+
+export const getSelfHostedSupportLink = (email: string, subject: string) => {
+ const form = ZendeskSupportForm.SELF_HOSTED_SUPPORT_FORM;
+ const url = buildZendeskSupportForm(form, [
+ {id: ZendeskFormFieldIDs.EMAIL, val: email},
+ {id: ZendeskFormFieldIDs.SUBJECT, val: subject},
+ ]);
+ return url;
+};
+
+export const goToCloudSupportForm = (email: string, subject: string, description: string, workspaceURL: string) => {
+ const form = ZendeskSupportForm.CLOUD_SUPPORT_FORM;
+ let url = buildZendeskSupportForm(form, [
+ {id: ZendeskFormFieldIDs.EMAIL, val: email},
+ {id: ZendeskFormFieldIDs.SUBJECT, val: subject},
+ {id: ZendeskFormFieldIDs.DESCRIPTION, val: description},
+ ]);
+ url = url.concat(`&tf_${ZendeskFormFieldIDs.CLOUD_WORKSPACE_URL}=${workspaceURL}`);
+ window.open(url, '_blank');
+};
+
+export const getCloudSupportLink = (email: string, subject: string, description: string, workspaceURL: string) => {
+ const form = ZendeskSupportForm.CLOUD_SUPPORT_FORM;
+ let url = buildZendeskSupportForm(form, [
+ {id: ZendeskFormFieldIDs.EMAIL, val: email},
+ {id: ZendeskFormFieldIDs.SUBJECT, val: subject},
+ {id: ZendeskFormFieldIDs.DESCRIPTION, val: description},
+ ]);
+ url = url.concat(`&tf_${ZendeskFormFieldIDs.CLOUD_WORKSPACE_URL}=${workspaceURL}`);
+ return url;
+};
+
+const encodeString = (s: string) => {
+ return Buffer.from(s).toString('base64');
+};
+
+export const buildMMURL = (baseURL: string, firstName: string, lastName: string, companyName: string, businessEmail: string, source: string, medium: string) => {
+ const mmURL = `${baseURL}?qk=${encodeString(firstName)}&qp=${encodeString(lastName)}&qw=${encodeString(companyName)}&qx=${encodeString(businessEmail)}&utm_source=${source}&utm_medium=${medium}`;
+ return mmURL;
+};
+
+export const goToMattermostContactSalesForm = (firstName: string, lastName: string, companyName: string, businessEmail: string, source: string, medium: string) => {
+ const url = buildMMURL(LicenseLinks.CONTACT_SALES, firstName, lastName, companyName, businessEmail, source, medium);
+ window.open(url, '_blank');
+};
+
+export const getCloudContactSalesLink = (firstName: string, lastName: string, companyName: string, businessEmail: string, source: string, medium: string) => {
+ const url = buildMMURL(LicenseLinks.CONTACT_SALES, firstName, lastName, companyName, businessEmail, source, medium);
+ return url;
+};