import { subDays, subSeconds } from 'date-fns';
import React, { useCallback, useEffect, useMemo, useState } from 'react';
import { Helmet } from 'react-helmet-async';
-import { FormattedMessage } from 'react-intl';
import { getIdentityProviders, searchUsers } from '../../api/users';
import HelpTooltip from '../../components/controls/HelpTooltip';
import ListFooter from '../../components/controls/ListFooter';
className="sw-ml-1"
overlay={
<>
- <p>{translate('users.activity_filter.helptext')}</p>
- <ul className="spacer-top">
- <li>
- <FormattedMessage
- defaultMessage={translate('users.activity_filter.helptext.all_users')}
- id="users.activity_filter.helptext.all_users"
- values={{
- allUsersLabel: (
- <strong>{translate('users.activity_filter.all_users')}</strong>
- ),
- }}
- />
- </li>
- <li>
- <FormattedMessage
- defaultMessage={translate(
- 'users.activity_filter.helptext.active_sonarlint_users'
- )}
- id="users.activity_filter.helptext.active_sonarlint_users"
- values={{
- activeSonarLintUsersLabel: (
- <strong>
- {translate('users.activity_filter.active_sonarlint_users')}
- </strong>
- ),
- }}
- />
- </li>
- <li>
- <FormattedMessage
- defaultMessage={translate(
- 'users.activity_filter.helptext.active_sonarqube_users'
- )}
- id="users.activity_filter.helptext.active_sonarqube_users"
- values={{
- activeSonarQubeUsersLabel: (
- <strong>
- {translate('users.activity_filter.active_sonarqube_users')}
- </strong>
- ),
- }}
- />
- </li>
- <li>
- <FormattedMessage
- defaultMessage={translate('users.activity_filter.helptext.inactive_users')}
- id="users.activity_filter.helptext.inactive_users"
- values={{
- inactiveUsersLabel: (
- <strong>{translate('users.activity_filter.inactive_users')}</strong>
- ),
- }}
- />
- </li>
- </ul>
+ <p>{translate('users.activity_filter.helptext.sonarqube')}</p>
+ <p>{translate('users.activity_filter.helptext.sonarlint')}</p>
</>
}
/>
await userEvent.click(await ui.localFilter.find());
await act(async () => {
- await selectEvent.select(ui.activityFilter.get(), (content, element) => {
- return (
- // eslint-disable-next-line jest/no-conditional-in-test
- content === 'users.activity_filter.active_sonarlint_users' &&
- element?.tagName === 'DIV' &&
- element?.className.split(' ').includes('react-select__option')
- );
- });
+ await selectEvent.select(
+ ui.activityFilter.get(),
+ 'users.activity_filter.active_sonarlint_users'
+ );
});
expect(await ui.userRows.findAll()).toHaveLength(1);
await userEvent.click(await ui.managedFilter.find());
await act(async () => {
- await selectEvent.select(ui.activityFilter.get(), (content, element) => {
- return (
- // eslint-disable-next-line jest/no-conditional-in-test
- content === 'users.activity_filter.active_sonarqube_users' &&
- element?.tagName === 'DIV' &&
- element?.className.split(' ').includes('react-select__option')
- );
- });
+ await selectEvent.select(
+ ui.activityFilter.get(),
+ 'users.activity_filter.active_sonarqube_users'
+ );
});
expect(await ui.userRows.findAll()).toHaveLength(1);
await userEvent.click(await ui.allFilter.find());
await act(async () => {
- await selectEvent.select(ui.activityFilter.get(), (content, element) => {
- return (
- // eslint-disable-next-line jest/no-conditional-in-test
- content === 'users.activity_filter.inactive_users' &&
- element?.tagName === 'DIV' &&
- element?.className.split(' ').includes('react-select__option')
- );
- });
+ await selectEvent.select(ui.activityFilter.get(), 'users.activity_filter.inactive_users');
});
expect(await ui.userRows.findAll()).toHaveLength(2);
users.email=Email
users.last_connection=Last connection
users.last_sonarlint_connection=Last SonarLint connection
-users.last_sonarlint_connection.help_text=The last time the user connected to this instance through SonarLint in connected mode.
+users.last_sonarlint_connection.help_text=The time of the last connection from SonarLint indicates that the user used SonarLint in connected mode.
users.update_users_groups=Update {0}'s group membership
users.update_groups=Update Groups
users.manage_user=Update {0}
users.search_description=Search users by login or name
users.activity_filter.label=Filter users by activity
users.activity_filter.placeholder=All users
-users.activity_filter.helptext=A user is considered active if they connected to SonarLint or SonarQube at least once in the past 30 days.
-users.activity_filter.helptext.all_users={allUsersLabel}: All users whether they connected to SonarLint/SonarQube in the 30 days.
-users.activity_filter.helptext.active_sonarlint_users={activeSonarLintUsersLabel}: Users that connected to SonarLint in the past 30 days.
-users.activity_filter.helptext.active_sonarqube_users={activeSonarQubeUsersLabel}: Users that connected to SonarQube but not to SonarLint in the past 30 days.
-users.activity_filter.helptext.inactive_users={inactiveUsersLabel}: Users that didn't connect to SonarQube in the past 30 days.
+users.activity_filter.helptext.sonarqube=Users are considered active if they connected to SonarQube at least once in the past 30 days.
+users.activity_filter.helptext.sonarlint=Users are considered active with SonarLint if they used SonarLint in connected mode at least once in the past 30 days.
users.activity_filter.all_users=All users
-users.activity_filter.active_sonarlint_users=Active SonarLint users
+users.activity_filter.active_sonarlint_users=Active users with SonartLint
users.activity_filter.active_sonarqube_users=Active users without SonarLint
users.activity_filter.inactive_users=Inactive users
users.tokens=Tokens