Fix #5956 Long team names go out of the box (#5959)

* Fix #5956 Long team names go out of the box

* Fix unit test

* Minor change

* Fix roles page issue

* Revert policy change

* Fix Long name issue

* Minor change

* Fix unit test
This commit is contained in:
Sachin Chaurasiya 2022-07-08 21:05:53 +05:30 committed by GitHub
parent 1bce9277cc
commit 1ffd29e266
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 81 additions and 48 deletions

View File

@ -60,7 +60,7 @@ const EntityDeleteModal: FC<Prop> = ({
<div className="tw-modal-backdrop" />
<div className="tw-modal-container tw-w-120">
<div className={classNames('tw-modal-header')}>
<p className="tw-modal-title" data-testid="modal-header">
<p className="tw-modal-title tw-break-all" data-testid="modal-header">
{softDelete ? (
<span>
Soft delete <strong>{entityName}</strong>
@ -73,7 +73,7 @@ const EntityDeleteModal: FC<Prop> = ({
</p>
</div>
<div className={classNames('tw-modal-body')} data-testid="body-text">
<p className="tw-mb-2">
<p className="tw-mb-2 tw-break-all">
{bodyText ||
`Once you delete this ${getTitleCase(
entityType

View File

@ -43,6 +43,7 @@ import { filterEntityAssets, getInfoElements } from '../../utils/EntityUtils';
import SVGIcons from '../../utils/SvgUtils';
import { Button } from '../buttons/Button/Button';
import Description from '../common/description/Description';
import Ellipses from '../common/Ellipses/Ellipses';
import ErrorPlaceHolder from '../common/error-with-placeholder/ErrorPlaceHolder';
import NextPrevious from '../common/next-previous/NextPrevious';
import NonAdminAction from '../common/non-admin-action/NonAdminAction';
@ -516,9 +517,7 @@ const TeamDetails = ({
const getTeamHeading = () => {
return (
<div
className="tw-heading tw-text-link tw-text-base tw-truncate tw-w-120"
title={heading}>
<div className="tw-heading tw-text-link tw-text-base">
{isHeadingEditing ? (
<div className="tw-flex tw-items-center tw-gap-1">
<input
@ -553,8 +552,10 @@ const TeamDetails = ({
</div>
</div>
) : (
<div className="tw-flex tw-group">
<span data-testid="team-heading">{heading}</span>
<div className="tw-flex tw-group" data-testid="team-heading">
<Ellipses tooltip className="tw-w-120" rows={1}>
{heading}
</Ellipses>
{isActionAllowed() && (
<div className={classNames('tw-w-5 tw-min-w-max')}>
<NonAdminAction

View File

@ -22,6 +22,7 @@ import AddUsersModal from '../../pages/teams/AddUsersModal';
import { getActiveCatClass, getCountBadge } from '../../utils/CommonUtils';
import { getActiveUsers } from '../../utils/TeamUtils';
import { Button } from '../buttons/Button/Button';
import Ellipses from '../common/Ellipses/Ellipses';
import NonAdminAction from '../common/non-admin-action/NonAdminAction';
import PageLayout, { leftPanelAntCardStyle } from '../containers/PageLayout';
import Loader from '../Loader/Loader';
@ -130,13 +131,14 @@ const TeamsAndUsers = ({
className={`tw-group tw-text-grey-body tw-cursor-pointer tw-text-body tw-flex tw-justify-between ${getActiveCatClass(
team.name,
currentTeam?.name
)}`}>
<p
className="tag-category label-category tw-self-center tw-truncate"
data-testid="team-name"
title={team.displayName ?? team.name}>
)}`}
data-testid="team-name">
<Ellipses
tooltip
className="tag-category label-category tw-self-center tw-w-32"
rows={1}>
{team.displayName ?? team.name}
</p>
</Ellipses>
</div>
{getCountBadge(
getActiveUsers(team.users).length,

View File

@ -57,6 +57,7 @@ import ActivityFeedList from '../ActivityFeed/ActivityFeedList/ActivityFeedList'
import { filterListTasks } from '../ActivityFeed/ActivityFeedList/ActivityFeedList.util';
import { Button } from '../buttons/Button/Button';
import Description from '../common/description/Description';
import Ellipses from '../common/Ellipses/Ellipses';
import ProfilePicture from '../common/ProfilePicture/ProfilePicture';
import { reactSingleSelectCustomStyle } from '../common/react-select-component/reactSelectCustomStyle';
import TabsPane from '../common/TabsPane/TabsPane';
@ -326,7 +327,9 @@ const Users = ({
data-testid={team.name}
key={i}>
<SVGIcons alt="icon" className="tw-w-4" icon={Icons.TEAMS_GREY} />
<span>{getEntityName(team)}</span>
<Ellipses tooltip className="tw-w-48">
{getEntityName(team)}
</Ellipses>
</div>
))}
{isEmpty(userData.teams) && (
@ -456,7 +459,9 @@ const Users = ({
{userData.roles?.map((role, i) => (
<div className="tw-mb-2 tw-flex tw-items-center tw-gap-2" key={i}>
<SVGIcons alt="icon" className="tw-w-4" icon={Icons.USERS} />
<span>{getEntityName(role)}</span>
<Ellipses tooltip className="tw-w-48">
{getEntityName(role)}
</Ellipses>
</div>
))}
{!userData.isAdmin && isEmpty(userData.roles) && (
@ -593,7 +598,9 @@ const Users = ({
className="tw-mb-2 tw-flex tw-items-center tw-gap-2"
key={i}>
<SVGIcons alt="icon" className="tw-w-4" icon={Icons.USERS} />
<span>{getEntityName(inheritedRole)}</span>
<Ellipses tooltip className="tw-w-48">
{getEntityName(inheritedRole)}
</Ellipses>
</div>
))}
</div>

View File

@ -45,6 +45,7 @@ import {
} from '../../utils/CommonUtils';
import SVGIcons, { Icons } from '../../utils/SvgUtils';
import { showErrorToast } from '../../utils/ToastUtils';
import Ellipses from '../common/Ellipses/Ellipses';
import { COOKIE_VERSION } from '../Modals/WhatsNewModal/whatsNewData';
import NavBar from '../nav-bar/NavBar';
import { useWebSocketConnector } from '../web-scoket/web-scoket.provider';
@ -151,9 +152,9 @@ const Appbar: React.FC = (): JSX.Element => {
<div>
<div className="tw-text-grey-muted tw-text-xs">{name}</div>
{userRoleArr.map((userRole, i) => (
<p className="tw-font-medium" key={i}>
<Ellipses tooltip className="tw-font-medium" key={i}>
{userRole}
</p>
</Ellipses>
))}
<hr className="tw-my-1.5" />
</div>
@ -199,10 +200,12 @@ const Appbar: React.FC = (): JSX.Element => {
const teams = getNonDeletedTeams(currentUser?.teams ?? []);
return (
<div data-testid="greeting-text">
<div className="tw-max-w-xs" data-testid="greeting-text">
<Link to={getUserPath(currentUser?.name as string)}>
{' '}
<span className="tw-font-medium tw-cursor-pointer">{name}</span>
<Ellipses tooltip className="tw-font-medium tw-cursor-pointer">
{name}
</Ellipses>
</Link>
<hr className="tw-my-1.5" />
{roles.length > 0 ? getUsersRoles(roles, 'Roles') : null}
@ -213,11 +216,11 @@ const Appbar: React.FC = (): JSX.Element => {
<div>
<span className="tw-text-grey-muted tw-text-xs">Teams</span>
{teams.map((t, i) => (
<p key={i}>
<Ellipses tooltip className="tw-text-xs" key={i}>
<Link to={getTeamAndUserDetailsPath(t.name as string)}>
{t.displayName || t.name}
</Link>
</p>
</Ellipses>
))}
<hr className="tw-mt-1.5" />
</div>

View File

@ -13,6 +13,7 @@
import React from 'react';
import { TITLE_FOR_NON_ADMIN_ACTION } from '../../../constants/constants';
import Ellipses from '../Ellipses/Ellipses';
import NonAdminAction from '../non-admin-action/NonAdminAction';
type DeleteWidgetBodyProps = {
@ -35,13 +36,15 @@ const DeleteWidgetBody = ({
return (
<div className="tw-flex tw-justify-between tw-px-5 tw-py-3">
<div data-testid="danger-zone-text">
<p
className="tw-text-sm tw-mb-1 tw-font-medium"
data-testid="danger-zone-text-title">
<Ellipses
tooltip
className="tw-text-sm tw-mb-1 tw-font-medium tw-w-120"
data-testid="danger-zone-text-title"
rows={1}>
{header}
</p>
</Ellipses>
<p
className="tw-text-grey-muted tw-text-xs"
className="tw-text-grey-muted tw-text-xs tw-break-all"
data-testid="danger-zone-text-para">
{description}
</p>

View File

@ -35,6 +35,7 @@ import { getTeams, patchTeamDetail } from '../../axiosAPIs/teamsAPI';
import { getUserCounts } from '../../axiosAPIs/userAPI';
import { Button } from '../../components/buttons/Button/Button';
import Description from '../../components/common/description/Description';
import Ellipses from '../../components/common/Ellipses/Ellipses';
import ErrorPlaceHolder from '../../components/common/error-with-placeholder/ErrorPlaceHolder';
import NonAdminAction from '../../components/common/non-admin-action/NonAdminAction';
import PageContainerV1 from '../../components/containers/PageContainerV1';
@ -605,11 +606,12 @@ const RolesPage = () => {
data-testid="role-name-container"
key={role.name}
onClick={() => setCurrentRole(role)}>
<span
className="tag-category label-category tw-self-center tw-truncate tw-w-52"
title={role.displayName}>
<Ellipses
tooltip
className="tag-category label-category tw-self-center tw-w-52"
rows={1}>
<span>{role.displayName}</span>{' '}
</span>
</Ellipses>
{role.defaultRole ? getDefaultBadge() : null}
</div>
))}
@ -994,16 +996,16 @@ const RolesPage = () => {
const getRolesComponent = () => {
return (
<Fragment>
<div
className="tw-flex tw-justify-between tw-items-center"
data-testid="header">
<div className="tw-flex tw-justify-between" data-testid="header">
<div
className="tw-heading tw-text-link tw-text-base"
className="tw-flex tw-items-start tw-max-w-75"
data-testid="header-title">
{currentRole?.displayName}
<Ellipses tooltip className="tw-heading tw-text-link tw-text-base">
{currentRole?.displayName}
</Ellipses>
{currentRole?.defaultRole ? getDefaultBadge('tw-ml-2') : null}
</div>
<div className="tw-flex">
<div className="tw-flex tw-items-start">
{!currentRole?.defaultRole ? (
<NonAdminAction
position="bottom"

View File

@ -31,6 +31,7 @@ import {
} from '../../axiosAPIs/tagAPI';
import { Button } from '../../components/buttons/Button/Button';
import Description from '../../components/common/description/Description';
import Ellipses from '../../components/common/Ellipses/Ellipses';
import ErrorPlaceHolder from '../../components/common/error-with-placeholder/ErrorPlaceHolder';
import NonAdminAction from '../../components/common/non-admin-action/NonAdminAction';
import RichTextEditorPreviewer from '../../components/common/rich-text-editor/RichTextEditorPreviewer';
@ -50,11 +51,13 @@ import {
} from '../../generated/api/tags/createTagCategory';
import { Operation } from '../../generated/entity/policies/accessControl/rule';
import { TagCategory, TagClass } from '../../generated/entity/tags/tagCategory';
import { EntityReference } from '../../generated/type/entityReference';
import { useAuth } from '../../hooks/authHooks';
import jsonData from '../../jsons/en';
import {
getActiveCatClass,
getCountBadge,
getEntityName,
isEven,
isUrlFriendlyName,
} from '../../utils/CommonUtils';
@ -448,9 +451,13 @@ const TagsPage = () => {
onClick={() => {
fetchCurrentCategory(category.name);
}}>
<p className="tw-text-center tw-self-center tag-category label-category">
{category.displayName ?? category.name}
</p>
<Ellipses
tooltip
className="tag-category label-category tw-self-center tw-w-32"
data-testid="tag-name"
rows={1}>
{getEntityName(category as unknown as EntityReference)}
</Ellipses>
{getCountBadge(
currentCategory?.name === category.name

View File

@ -14,6 +14,7 @@
import { toLower } from 'lodash';
import React, { useState } from 'react';
import { Button } from '../../components/buttons/Button/Button';
import Ellipses from '../../components/common/Ellipses/Ellipses';
import Searchbar from '../../components/common/searchbar/Searchbar';
import { EntityReference as UserTeams } from '../../generated/entity/teams/user';
import { getEntityName } from '../../utils/CommonUtils';
@ -96,10 +97,10 @@ const AddUsersModal = ({
<dialog className="tw-modal " data-testid="modal-container">
<div className="tw-modal-backdrop" />
<div className="tw-modal-container tw-max-h-90vh tw-max-w-3xl">
<div className="tw-modal-header">
<p className="tw-modal-title" data-testid="header">
<div className="tw-modal-header" data-testid="header">
<Ellipses tooltip className="tw-modal-title">
{header}
</p>
</Ellipses>
</div>
<div className="tw-modal-body">
<Searchbar

View File

@ -17,6 +17,7 @@ import { capitalize } from 'lodash';
import React, { Fragment } from 'react';
import { Link } from 'react-router-dom';
import { useAuthContext } from '../../authentication/auth-provider/AuthProvider';
import Ellipses from '../../components/common/Ellipses/Ellipses';
import NonAdminAction from '../../components/common/non-admin-action/NonAdminAction';
import ProfilePicture from '../../components/common/ProfilePicture/ProfilePicture';
import { AssetsType, FqnPart } from '../../enums/entity.enum';
@ -187,7 +188,7 @@ const UserCard = ({
<span
className={classNames(
'tw-font-normal',
isActionVisible ? 'tw-truncate tw-w-32' : null,
isActionVisible ? 'tw-w-32' : 'tw-w-52',
{
'tw-cursor-pointer hover:tw-underline':
Boolean(onTitleClick),
@ -197,15 +198,17 @@ const UserCard = ({
onClick={() => {
onTitleClick?.(item.fqn);
}}>
{item.displayName}
<Ellipses tooltip>{item.displayName}</Ellipses>
</span>
{item.name && item.name !== item.displayName && (
<span
className={classNames(
isActionVisible ? 'tw-truncate tw-w-32' : null
isActionVisible ? 'tw-w-32' : 'tw-w-52'
)}
title={isIconVisible ? item.name : capitalize(item.name)}>
{isIconVisible ? item.name : capitalize(item.name)}
<Ellipses tooltip>
{isIconVisible ? item.name : capitalize(item.name)}
</Ellipses>
</span>
)}
</Fragment>

View File

@ -496,7 +496,7 @@
/* New Feed Button style */
.tw-refreshButton {
@apply tw-w-full tw-rounded tw-text-info tw-w-full tw-py-1 tw-rounded tw-bg-feed-background tw-border tw-border-feed hover:tw-bg-feed-hover;
@apply tw-w-full tw-rounded tw-text-info tw-py-1 tw-bg-feed-background tw-border tw-border-feed hover:tw-bg-feed-hover;
box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.1);
transition: background-color 100ms linear;
}
@ -510,4 +510,8 @@
top: 0.4rem;
left: 1.3rem;
}
.tw-max-w-75 {
max-width: 75%;
}
}