[CLD-7742] Make location prop on ExternalLink component required (#27052)

* Make location prop on ExternalLink required, update existing references that are missing it

* Fix linter

* Fix tests
Этот коммит содержится в:
Nick Misasi
2024-05-22 08:52:21 -04:00
коммит произвёл GitHub
родитель 1007f5abbb
Коммит f0110e361e
17 изменённых файлов: 54 добавлений и 20 удалений

Просмотреть файл

@@ -54,6 +54,7 @@ const GroupSettings = ({isDisabled}: Props) => {
subtitleValues={{
link: (msg: React.ReactNode) => (
<ExternalLink
location='group_settings.ldap_groups'
href={`${siteURL}/admin_console/authentication/ldap`}
>
{msg}

Просмотреть файл

@@ -52,6 +52,7 @@ export default function SaveConfirmationModal({onExited, onConfirm, title, subti
values={{
customerportal: (msg) => (
<ExternalLink
location='save_confirmation_modal'
href='https://customers.mattermost.com/console/ip_filtering'
>
{msg}

Просмотреть файл

@@ -17,6 +17,7 @@ const JobDownloadLink = React.memo(({job}: {job: Job}): JSX.Element => {
return (
<ExternalLink
key={job.id}
location='job_download_link'
href={`${Client4.getJobsRoute()}/${job.id}/download`}
className='JobDownloadLink'
>

Просмотреть файл

@@ -23,7 +23,10 @@ const Title = () => {
placement='top'
>
<span>
<ExternalLink href='https://mattermost.com/pl/site-statistics-definitions'>
<ExternalLink
location='activated_users_card.title'
href='https://mattermost.com/pl/site-statistics-definitions'
>
{intl.formatMessage(messages.totalUsers)}
<InformationOutlineIcon size='16'/>
</ExternalLink>

Просмотреть файл

@@ -15,9 +15,11 @@ exports[`components/external_link should match snapshot 1`] = `
>
<ExternalLink
href="https://mattermost.com"
location="test"
>
<a
href="https://mattermost.com?utm_source=mattermost&utm_medium=in-product-cloud&utm_content=&uid=currentUserId&sid="
href="https://mattermost.com?utm_source=mattermost&utm_medium=in-product-cloud&utm_content=test&uid=currentUserId&sid="
location="test"
onClick={[Function]}
rel="noopener noreferrer"
target="_blank"

Просмотреть файл

@@ -34,6 +34,7 @@ describe('components/external_link', () => {
const wrapper = mount(
<Provider store={store}>
<ExternalLink
location='test'
href='https://mattermost.com'
>{'Click Me'}</ExternalLink>
@@ -57,7 +58,10 @@ describe('components/external_link', () => {
},
};
renderWithContext(
<ExternalLink href='https://mattermost.com'>
<ExternalLink
location='test'
href='https://mattermost.com'
>
{'Click Me'}
</ExternalLink>,
state,
@@ -65,7 +69,7 @@ describe('components/external_link', () => {
expect(screen.queryByText('Click Me')).toHaveAttribute(
'href',
expect.stringMatching('utm_source=mattermost&utm_medium=in-product-cloud&utm_content=&uid=currentUserId&sid='),
expect.stringMatching('utm_source=mattermost&utm_medium=in-product-cloud&utm_content=test&uid=currentUserId&sid='),
);
});
@@ -83,7 +87,10 @@ describe('components/external_link', () => {
},
};
renderWithContext(
<ExternalLink href='https://mattermost.com?test=true'>
<ExternalLink
location='test'
href='https://mattermost.com?test=true'
>
{'Click Me'}
</ExternalLink>,
state,
@@ -91,7 +98,7 @@ describe('components/external_link', () => {
expect(screen.queryByText('Click Me')).toHaveAttribute(
'href',
'https://mattermost.com?utm_source=mattermost&utm_medium=in-product-cloud&utm_content=&uid=currentUserId&sid=&test=true',
'https://mattermost.com?utm_source=mattermost&utm_medium=in-product-cloud&utm_content=test&uid=currentUserId&sid=&test=true',
);
});
@@ -109,7 +116,10 @@ describe('components/external_link', () => {
},
};
renderWithContext(
<ExternalLink href='https://google.com'>
<ExternalLink
location='test'
href='https://google.com'
>
{'Click Me'}
</ExternalLink>,
state,
@@ -139,6 +149,7 @@ describe('components/external_link', () => {
target='test'
rel='test'
href='https://google.com'
location='test'
>{'Click Me'}</ExternalLink>,
state,
);
@@ -170,6 +181,7 @@ describe('components/external_link', () => {
};
renderWithContext(
<ExternalLink
location='test'
href='https://mattermost.com#desktop'
>
{'Click Me'}
@@ -179,7 +191,7 @@ describe('components/external_link', () => {
expect(screen.queryByText('Click Me')).toHaveAttribute(
'href',
'https://mattermost.com?utm_source=mattermost&utm_medium=in-product-cloud&utm_content=&uid=currentUserId&sid=#desktop',
'https://mattermost.com?utm_source=mattermost&utm_medium=in-product-cloud&utm_content=test&uid=currentUserId&sid=#desktop',
);
});
});

Просмотреть файл

@@ -25,7 +25,7 @@ type Props = React.AnchorHTMLAttributes<HTMLAnchorElement> & {
rel?: string;
onClick?: (event: React.MouseEvent<HTMLElement>) => void;
queryParams?: ExternalLinkQueryParams;
location?: string;
location: string;
children: React.ReactNode;
};

Просмотреть файл

@@ -97,6 +97,7 @@ const OverageUsersBannerNotice = () => {
return (
<ExternalLink
location='overage_users_banner'
className='overage_users_banner__button'
href={LicenseLinks.CONTACT_SALES}
onClick={handleClick}

Просмотреть файл

@@ -231,7 +231,7 @@ describe('components/invitation_modal/overage_users_banner_notice', () => {
expect(screen.getByRole('link')).toHaveAttribute(
'href',
LicenseLinks.CONTACT_SALES +
'?utm_source=mattermost&utm_medium=in-product&utm_content=&uid=current_user&sid=',
'?utm_source=mattermost&utm_medium=in-product&utm_content=overage_users_banner&uid=current_user&sid=',
);
expect(trackEvent).toBeCalledTimes(2);
expect(trackEvent).toBeCalledWith('insights', 'click_true_up_warning', {
@@ -337,7 +337,7 @@ describe('components/invitation_modal/overage_users_banner_notice', () => {
expect(screen.getByRole('link')).toHaveAttribute(
'href',
LicenseLinks.CONTACT_SALES +
'?utm_source=mattermost&utm_medium=in-product&utm_content=&uid=current_user&sid=',
'?utm_source=mattermost&utm_medium=in-product&utm_content=overage_users_banner&uid=current_user&sid=',
);
expect(trackEvent).toBeCalledTimes(2);
expect(trackEvent).toBeCalledWith('insights', 'click_true_up_error', {

Просмотреть файл

@@ -745,7 +745,10 @@ const Login = ({onCustomizeHeader}: LoginProps) => {
if (ForgotPasswordLink) {
return (
<div className='login-body-card-form-link'>
<ExternalLink href={ForgotPasswordLink}>
<ExternalLink
location='login_page'
href={ForgotPasswordLink}
>
{formatMessage({id: 'login.forgot', defaultMessage: 'Forgot your password?'})}
</ExternalLink>
</div>

Просмотреть файл

@@ -16,6 +16,7 @@ const LearnAboutTeamsLink = () => {
values={{
a: (chunks) => (
<ExternalLink
location='learn_about_teams'
href='https://mattermost.com/pl/mattermost-academy-team-training'
>
<i className='icon icon-lightbulb-outline'/>

Просмотреть файл

@@ -55,9 +55,8 @@ const OrganizationStatus = (props: {error: (UrlValidationCheck['error'] | typeof
values={{
a: (chunks: React.ReactNode | React.ReactNodeArray) => (
<ExternalLink
location='organization_status'
href={DocLinks.ABOUT_TEAMS}
target='_blank'
rel='noreferrer'
>
{chunks}
</ExternalLink>

Просмотреть файл

@@ -17,6 +17,7 @@ export default function ReactionLimitReachedModal(props: {isAdmin: boolean; onEx
values={{
link: (msg: React.ReactNode) => (
<ExternalLink
location='reaction_limit_reached_modal'
href='https://mattermost.com/pl/configure-unique-emoji-reaction-limit'
>
{msg}

Просмотреть файл

@@ -59,6 +59,7 @@ const SearchHint = (props: Props): JSX.Element => {
values={{
a: (chunks) => (
<ExternalLink
location='search_hint'
className='search-hint_learn-search'
href='https://mattermost.com/pl/mattermost-academy-search-training'
>

Просмотреть файл

@@ -86,6 +86,7 @@ export default function Consequences(props: Props) {
values={{
a: (chunks: React.ReactNode) => (
<ExternalLink
location='seats_calculator_consequences'
onClick={telemetryHandler}
href={props.isCloud ? CloudLinks.BILLING_DOCS : HostedCustomerLinks.BILLING_DOCS}
>

Просмотреть файл

@@ -54,7 +54,8 @@ Object {
>
<a
class="btn btn-link"
href="https://mattermost.com/pl/about-notifications?utm_source=mattermost&utm_medium=in-product&utm_content=&uid=&sid="
href="https://mattermost.com/pl/about-notifications?utm_source=mattermost&utm_medium=in-product&utm_content=user_settings_notifications&uid=&sid="
location="user_settings_notifications"
rel="noopener noreferrer"
target="_blank"
>
@@ -312,7 +313,8 @@ Object {
>
<a
class="btn btn-link"
href="https://mattermost.com/pl/about-notifications?utm_source=mattermost&utm_medium=in-product&utm_content=&uid=&sid="
href="https://mattermost.com/pl/about-notifications?utm_source=mattermost&utm_medium=in-product&utm_content=user_settings_notifications&uid=&sid="
location="user_settings_notifications"
rel="noopener noreferrer"
target="_blank"
>
@@ -629,7 +631,8 @@ Object {
>
<a
class="btn btn-link"
href="https://mattermost.com/pl/about-notifications?utm_source=mattermost&utm_medium=in-product&utm_content=&uid=&sid="
href="https://mattermost.com/pl/about-notifications?utm_source=mattermost&utm_medium=in-product&utm_content=user_settings_notifications&uid=&sid="
location="user_settings_notifications"
rel="noopener noreferrer"
target="_blank"
>
@@ -890,7 +893,8 @@ Object {
>
<a
class="btn btn-link"
href="https://mattermost.com/pl/about-notifications?utm_source=mattermost&utm_medium=in-product&utm_content=&uid=&sid="
href="https://mattermost.com/pl/about-notifications?utm_source=mattermost&utm_medium=in-product&utm_content=user_settings_notifications&uid=&sid="
location="user_settings_notifications"
rel="noopener noreferrer"
target="_blank"
>
@@ -1210,7 +1214,8 @@ Object {
>
<a
class="btn btn-link"
href="https://mattermost.com/pl/about-notifications?utm_source=mattermost&utm_medium=in-product&utm_content=&uid=&sid="
href="https://mattermost.com/pl/about-notifications?utm_source=mattermost&utm_medium=in-product&utm_content=user_settings_notifications&uid=&sid="
location="user_settings_notifications"
rel="noopener noreferrer"
target="_blank"
>
@@ -1433,7 +1438,8 @@ Object {
>
<a
class="btn btn-link"
href="https://mattermost.com/pl/about-notifications?utm_source=mattermost&utm_medium=in-product&utm_content=&uid=&sid="
href="https://mattermost.com/pl/about-notifications?utm_source=mattermost&utm_medium=in-product&utm_content=user_settings_notifications&uid=&sid="
location="user_settings_notifications"
rel="noopener noreferrer"
target="_blank"
>

Просмотреть файл

@@ -985,6 +985,7 @@ class NotificationsTab extends React.PureComponent<Props, State> {
values={{
a: (chunks: string) => ((
<ExternalLink
location='user_settings_notifications'
href='https://mattermost.com/pl/about-notifications'
className='btn btn-link'
>