revert changes to overage users banner in favor of getting self hoste expansion modal pushed through faster.
Этот коммит содержится в:
@@ -22,6 +22,15 @@ import * as useCanSelfHostedExpand from 'components/common/hooks/useCanSelfHoste
|
|||||||
|
|
||||||
import EnterpriseEditionLeftPanel, {EnterpriseEditionProps} from './enterprise_edition_left_panel';
|
import EnterpriseEditionLeftPanel, {EnterpriseEditionProps} from './enterprise_edition_left_panel';
|
||||||
|
|
||||||
|
jest.mock('react-router-dom', () => ({
|
||||||
|
...jest.requireActual('react-router-dom') as typeof import('react-router-dom'),
|
||||||
|
useLocation: () => {
|
||||||
|
return {
|
||||||
|
pathname: '',
|
||||||
|
};
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
|
||||||
describe('components/admin_console/license_settings/enterprise_edition/enterprise_edition_left_panel', () => {
|
describe('components/admin_console/license_settings/enterprise_edition/enterprise_edition_left_panel', () => {
|
||||||
const license = {
|
const license = {
|
||||||
IsLicensed: 'true',
|
IsLicensed: 'true',
|
||||||
@@ -113,7 +122,7 @@ describe('components/admin_console/license_settings/enterprise_edition/enterpris
|
|||||||
return n.children().length === 2 &&
|
return n.children().length === 2 &&
|
||||||
n.childAt(0).type() === 'span' &&
|
n.childAt(0).type() === 'span' &&
|
||||||
!n.childAt(0).text().includes('ACTIVE') &&
|
!n.childAt(0).text().includes('ACTIVE') &&
|
||||||
n.childAt(0).text().includes('USERS');
|
n.childAt(0).text().includes('LICENSED SEATS');
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(item.text()).toContain('1,000');
|
expect(item.text()).toContain('1,000');
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
import React, {useMemo} from 'react';
|
import React, {useMemo} from 'react';
|
||||||
import {FormattedMessage} from 'react-intl';
|
import {FormattedMessage} from 'react-intl';
|
||||||
import {useDispatch, useSelector} from 'react-redux';
|
import {useDispatch, useSelector} from 'react-redux';
|
||||||
import {useHistory} from 'react-router-dom';
|
|
||||||
|
|
||||||
import {getCurrentUser, isCurrentUserSystemAdmin} from 'mattermost-redux/selectors/entities/users';
|
import {getCurrentUser, isCurrentUserSystemAdmin} from 'mattermost-redux/selectors/entities/users';
|
||||||
import {GlobalState} from 'types/store';
|
import {GlobalState} from 'types/store';
|
||||||
@@ -17,10 +16,9 @@ import {makeGetCategory} from 'mattermost-redux/selectors/entities/preferences';
|
|||||||
import {PreferenceType} from '@mattermost/types/preferences';
|
import {PreferenceType} from '@mattermost/types/preferences';
|
||||||
import {useExpandOverageUsersCheck} from 'components/common/hooks/useExpandOverageUsersCheck';
|
import {useExpandOverageUsersCheck} from 'components/common/hooks/useExpandOverageUsersCheck';
|
||||||
import useOpenSalesLink from 'components/common/hooks/useOpenSalesLink';
|
import useOpenSalesLink from 'components/common/hooks/useOpenSalesLink';
|
||||||
import {StatTypes, Preferences, AnnouncementBarTypes, ConsolePages} from 'utils/constants';
|
import {StatTypes, Preferences, AnnouncementBarTypes} from 'utils/constants';
|
||||||
|
|
||||||
import './overage_users_banner.scss';
|
import './overage_users_banner.scss';
|
||||||
import useCWSAvailabilityCheck from 'components/common/hooks/useCWSAvailabilityCheck';
|
|
||||||
|
|
||||||
type AdminHasDismissedItArgs = {
|
type AdminHasDismissedItArgs = {
|
||||||
preferenceName: string;
|
preferenceName: string;
|
||||||
@@ -58,8 +56,6 @@ const OverageUsersBanner = () => {
|
|||||||
const prefixPreferences = isOver10PercerntPurchasedSeats ? 'error' : 'warn';
|
const prefixPreferences = isOver10PercerntPurchasedSeats ? 'error' : 'warn';
|
||||||
const prefixLicenseId = (license.Id || '').substring(0, 8);
|
const prefixLicenseId = (license.Id || '').substring(0, 8);
|
||||||
const preferenceName = `${prefixPreferences}_overage_seats_${prefixLicenseId}`;
|
const preferenceName = `${prefixPreferences}_overage_seats_${prefixLicenseId}`;
|
||||||
const history = useHistory();
|
|
||||||
const isAirGapped = !useCWSAvailabilityCheck();
|
|
||||||
|
|
||||||
const overageByUsers = activeUsers - seatsPurchased;
|
const overageByUsers = activeUsers - seatsPurchased;
|
||||||
|
|
||||||
@@ -90,14 +86,7 @@ const OverageUsersBanner = () => {
|
|||||||
const handleUpdateSeatsSelfServeClick = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
|
const handleUpdateSeatsSelfServeClick = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
trackEventFn('Self Serve');
|
trackEventFn('Self Serve');
|
||||||
|
window.open(expandableLink(license.Id), '_blank');
|
||||||
if (isAirGapped) {
|
|
||||||
window.open(expandableLink(license.Id), '_blank');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isExpandable) {
|
|
||||||
history.push(`${ConsolePages.LICENSE}?action=show_expansion_modal`);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleContactSalesClick = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
|
const handleContactSalesClick = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
|
||||||
|
|||||||
@@ -16,13 +16,10 @@ import {savePreferences} from 'mattermost-redux/actions/preferences';
|
|||||||
import {makeGetCategory} from 'mattermost-redux/selectors/entities/preferences';
|
import {makeGetCategory} from 'mattermost-redux/selectors/entities/preferences';
|
||||||
import {PreferenceType} from '@mattermost/types/preferences';
|
import {PreferenceType} from '@mattermost/types/preferences';
|
||||||
import {useExpandOverageUsersCheck} from 'components/common/hooks/useExpandOverageUsersCheck';
|
import {useExpandOverageUsersCheck} from 'components/common/hooks/useExpandOverageUsersCheck';
|
||||||
import {LicenseLinks, StatTypes, Preferences, ConsolePages} from 'utils/constants';
|
import {LicenseLinks, StatTypes, Preferences} from 'utils/constants';
|
||||||
|
|
||||||
import './overage_users_banner_notice.scss';
|
import './overage_users_banner_notice.scss';
|
||||||
import ExternalLink from 'components/external_link';
|
import ExternalLink from 'components/external_link';
|
||||||
import useControlSelfHostedExpansionModal from 'components/common/hooks/useControlSelfHostedExpansionModal';
|
|
||||||
import {NavLink} from 'react-router-dom';
|
|
||||||
import useCWSAvailabilityCheck from 'components/common/hooks/useCWSAvailabilityCheck';
|
|
||||||
|
|
||||||
type AdminHasDismissedArgs = {
|
type AdminHasDismissedArgs = {
|
||||||
preferenceName: string;
|
preferenceName: string;
|
||||||
@@ -56,16 +53,15 @@ const OverageUsersBannerNotice = () => {
|
|||||||
const prefixLicenseId = (license.Id || '').substring(0, 8);
|
const prefixLicenseId = (license.Id || '').substring(0, 8);
|
||||||
const preferenceName = `${prefixPreferences}_overage_seats_${prefixLicenseId}`;
|
const preferenceName = `${prefixPreferences}_overage_seats_${prefixLicenseId}`;
|
||||||
|
|
||||||
const isAirGapped = !useCWSAvailabilityCheck();
|
|
||||||
const overageByUsers = activeUsers - seatsPurchased;
|
const overageByUsers = activeUsers - seatsPurchased;
|
||||||
const isOverageState = isBetween5PercerntAnd10PercentPurchasedSeats || isOver10PercerntPurchasedSeats;
|
const isOverageState = isBetween5PercerntAnd10PercentPurchasedSeats || isOver10PercerntPurchasedSeats;
|
||||||
const hasPermission = isAdmin && isOverageState && !isCloud;
|
const hasPermission = isAdmin && isOverageState && !isCloud;
|
||||||
const {
|
const {
|
||||||
cta,
|
cta,
|
||||||
|
expandableLink,
|
||||||
trackEventFn,
|
trackEventFn,
|
||||||
getRequestState,
|
getRequestState,
|
||||||
isExpandable,
|
isExpandable,
|
||||||
expandableLink,
|
|
||||||
} = useExpandOverageUsersCheck({
|
} = useExpandOverageUsersCheck({
|
||||||
shouldRequest: hasPermission && !adminHasDismissed({overagePreferences, preferenceName}),
|
shouldRequest: hasPermission && !adminHasDismissed({overagePreferences, preferenceName}),
|
||||||
licenseId: license.Id,
|
licenseId: license.Id,
|
||||||
@@ -73,8 +69,6 @@ const OverageUsersBannerNotice = () => {
|
|||||||
banner: 'invite modal',
|
banner: 'invite modal',
|
||||||
});
|
});
|
||||||
|
|
||||||
const selfHostedExpansionModal = useControlSelfHostedExpansionModal({trackingLocation: 'overage_user_banner_notice'});
|
|
||||||
|
|
||||||
if (!hasPermission || adminHasDismissed({overagePreferences, preferenceName})) {
|
if (!hasPermission || adminHasDismissed({overagePreferences, preferenceName})) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -102,31 +96,12 @@ const OverageUsersBannerNotice = () => {
|
|||||||
|
|
||||||
const handleClick = () => {
|
const handleClick = () => {
|
||||||
trackEventFn(isExpandable ? 'Self Serve' : 'Contact Sales');
|
trackEventFn(isExpandable ? 'Self Serve' : 'Contact Sales');
|
||||||
if (isExpandable) {
|
|
||||||
selfHostedExpansionModal.open();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if (isAirGapped) {
|
|
||||||
window.open(expandableLink(license.Id), '_blank');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isExpandable) {
|
|
||||||
return (
|
|
||||||
<NavLink
|
|
||||||
to={`${ConsolePages.LICENSE}?action=show_expansion_modal`}
|
|
||||||
target='_blank'
|
|
||||||
rel='noreferrer'
|
|
||||||
>
|
|
||||||
{cta}
|
|
||||||
</NavLink>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ExternalLink
|
<ExternalLink
|
||||||
className='overage_users_banner__button'
|
className='overage_users_banner__button'
|
||||||
href={LicenseLinks.CONTACT_SALES}
|
href={isExpandable ? expandableLink(license.Id) : LicenseLinks.CONTACT_SALES}
|
||||||
onClick={handleClick}
|
onClick={handleClick}
|
||||||
>
|
>
|
||||||
{cta}
|
{cta}
|
||||||
|
|||||||
@@ -162,7 +162,6 @@ const initialState: DeepPartial<GlobalState> = {
|
|||||||
license: {
|
license: {
|
||||||
SkuName: productName,
|
SkuName: productName,
|
||||||
Sku: productName,
|
Sku: productName,
|
||||||
SkuName: productName,
|
|
||||||
Users: '50',
|
Users: '50',
|
||||||
ExpiresAt: licenseExpiry.valueOf().toString(),
|
ExpiresAt: licenseExpiry.valueOf().toString(),
|
||||||
},
|
},
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user