Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: New navigation system #16785

Open
wants to merge 91 commits into
base: dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
91 commits
Select commit Hold shift + click to select a range
0c34535
feat: Add searchbar to top of conversation list (WPB-5949) (#16676)
thisisamir98 Feb 8, 2024
2a799d3
feat: Add sidebar with existing options (WPB-5944) (#16784)
thisisamir98 Feb 15, 2024
f1445a1
feat: add badges to new navigation sidebar (WPB-6651) (#16849)
thisisamir98 Feb 15, 2024
534edde
feat: add favorites, groups & directs tabs (WPB-5946) (#16861)
thisisamir98 Feb 21, 2024
eafb71a
feat: move connect and archives to new navigation system (WPB-6778) (…
thisisamir98 Mar 4, 2024
40299eb
Merge branch 'dev' of github.com:wireapp/wire-webapp into new-navigation
thisisamir98 Mar 8, 2024
15090a1
runfix: address new navigation styling in dark mode (WPB-6811) (#17058)
V-Gira Mar 13, 2024
0fa132e
feat: migrate preferences to new sidebar navigation (#17016)
thisisamir98 Mar 15, 2024
ab68922
feat: implement support tab (#17082)
thisisamir98 Mar 18, 2024
7a2525a
feat: user details in new nav structure (#17075)
przemvs Mar 19, 2024
c40b110
feat: New navigation code and design improvements (#17113)
przemvs Mar 20, 2024
8a8032d
feat: Conversation Sidebar code improvements (#17114)
przemvs Mar 20, 2024
ac96617
feat: Empty state for conversations (#17125)
przemvs Mar 22, 2024
7d43067
Merge branch 'dev' into new-navigation
przemvs Mar 26, 2024
a34fcc3
feat: Conversation sidebar header (#17170)
przemvs Mar 28, 2024
a8a5593
feat: sidebar toggle (#17115)
thisisamir98 Mar 28, 2024
88d5299
feat: add support for folders (#17174)
thisisamir98 Mar 28, 2024
7189d27
runfix: address darkmode color values (#17179)
V-Gira Mar 28, 2024
e8867aa
runfix: adjust responsive design to new sidebar (WPB-7212) (#17201)
V-Gira Apr 2, 2024
5e15c2b
runfix: show preferences titlebar back button (WPB-7212) (#17206)
V-Gira Apr 3, 2024
cc1e94d
feat: Navigation folders empty state support (#17203)
thisisamir98 Apr 3, 2024
8c705ea
runfix: use fading scrollbar for new sidebar (WPB-7412) (#17215)
V-Gira Apr 5, 2024
ae53d0a
Merge branch 'dev' into new-navigation
przemvs Apr 5, 2024
499585f
runfix: prevent loading of unreachable users (WPB-7377) (#17216)
V-Gira Apr 8, 2024
df1a259
fix: new navigation improvements (#17238)
przemvs Apr 10, 2024
b1e500c
fix: update header height (#17240)
przemvs Apr 10, 2024
7fe895e
feat: update collapsible sidebar implementation (#17218)
thisisamir98 Apr 11, 2024
1de900e
feat: add link to folders support page (#17214)
thisisamir98 Apr 11, 2024
acc2f2a
Merge branch 'dev' of github.com:wireapp/wire-webapp into new-navigation
thisisamir98 Apr 11, 2024
857d63a
runfix: use fading scrollbar for new sidebar (WPB-7412) (#17252)
V-Gira Apr 12, 2024
e8b41d1
feat: Add profile picture to new sidebar (#17255)
przemvs Apr 12, 2024
42f9520
fix: Hide none status availability (#17271)
przemvs Apr 15, 2024
d89d84c
feat: support for folders in collapsed sidebar (#17251)
thisisamir98 Apr 16, 2024
d5c7c9f
feat: always show archive tab in sidebar
thisisamir98 Apr 19, 2024
7b68634
feat: left sidebar improvements (#17291)
przemvs Apr 22, 2024
6ef3daa
Merge branch 'dev' into new-navigation
przemvs Apr 22, 2024
3d7989d
Merge branch 'dev' into new-navigation
przemvs Apr 23, 2024
5919bf3
feat: User Availability state (#17304)
przemvs Apr 23, 2024
80f9cd6
feat: Preferences header background (WPB-8832) (#17313)
przemvs Apr 23, 2024
8e34cc4
feat: new badge without number (#17342)
thisisamir98 Apr 29, 2024
ebedb6a
runfix: address responsivness of new navigation v2 (WPB-7212) (#17374)
V-Gira May 7, 2024
295cbb2
runfix: adress responsivness of the preferences sections (WPB-7214) (…
V-Gira May 15, 2024
44ea28e
fix: align setting header to the left (WPB-8832) (#17410)
V-Gira May 15, 2024
fb29f8b
feat: implement archives empty state (#17381)
thisisamir98 May 17, 2024
70816c9
feat: remove create group & create gust room from connect tab (#17421)
thisisamir98 May 17, 2024
e787673
runfix: use correct conversation icon (WPB-7373) (#17439)
V-Gira May 22, 2024
09ca18a
fix: search for people only in the connect tab (WPB-6561) (#17450)
V-Gira May 23, 2024
ae2bf8b
Revert "fix: Incoming connection request is not highlighted (#17449)"
V-Gira May 26, 2024
059c769
Merge branch 'new-navigation' into v/new-nav-unit-tests
V-Gira May 26, 2024
7d6a1cb
runfix: don't escape folder name char (#17479)
PatrykBuniX May 28, 2024
8325db2
fix: enable search in folders (#17493)
thisisamir98 May 30, 2024
89bd4c0
Merge pull request #17491 from wireapp/v/merge-dev-nnav
V-Gira May 30, 2024
86db84f
test: address unit tests failure in new navigation (WPB-9453) (#17490)
V-Gira May 31, 2024
9d6b91d
runfix: remove groups from open conversation on search (#17494)
V-Gira May 31, 2024
9d42070
fix: Incoming connection request is not highlighted (#17449) (#17503)
V-Gira Jun 3, 2024
25cb93f
chore: Implement locators for automation on the new navigation (WPB-9…
V-Gira Jun 4, 2024
1e91cf2
runfix: address design review (WPB-8687 7374 7357) (#17510)
V-Gira Jun 4, 2024
74a28e0
Merge branch 'dev' into v/merge-dev
V-Gira Jun 4, 2024
a794b35
Merge branch 'dev' into v/merge-dev
V-Gira Jun 5, 2024
e593816
Merge pull request #17514 from wireapp/v/merge-dev
V-Gira Jun 5, 2024
3567934
Merge branch 'dev' into v/publish-new-nav
V-Gira Jun 5, 2024
a62455e
Merge pull request #17516 from wireapp/v/publish-new-nav
V-Gira Jun 5, 2024
47f97bc
Merge branch 'dev' into v/merge-dev-new-nav
V-Gira Jun 5, 2024
36748aa
Merge pull request #17517 from wireapp/v/merge-dev-new-nav
V-Gira Jun 5, 2024
eede19d
fix: Filter conversation doesnt work properly (#17519)
przemvs Jun 6, 2024
8c0a146
runfix: address new navigation bug reports (#17523)
V-Gira Jun 7, 2024
b6af672
Merge branch 'dev' into v/merge-dev
V-Gira Jun 7, 2024
ac8f000
Merge pull request #17528 from wireapp/v/merge-dev
V-Gira Jun 7, 2024
0d5c78c
feat: Add support for new nav shortcuts (#17549)
thisisamir98 Jun 11, 2024
31615a9
Merge branch dev of github.com:wireapp/wire-webapp into new-navigation
thisisamir98 Jun 11, 2024
35c8d46
Merge branch 'new-navigation' of github.com:wireapp/wire-webapp into …
thisisamir98 Jun 11, 2024
aaa41aa
update test
thisisamir98 Jun 11, 2024
5b935bf
Merge branch 'dev' into new-navigation
atomrc Jun 11, 2024
fb5aa26
Merge branch 'dev' into new-navigation
atomrc Jun 13, 2024
bfdb65a
Merge branch 'dev' into new-navigation
atomrc Jun 13, 2024
bcb0360
feat: indicate slow network connection [WPB-9679] (#17557)
PatrykBuniX Jun 14, 2024
8091858
Merge branch 'dev' into chore/merge-dev
PatrykBuniX Jun 17, 2024
fcd3cd4
Merge pull request #17594 from wireapp/chore/merge-dev
PatrykBuniX Jun 17, 2024
a05c734
chore: update edge target in publish workflow
tlebon Jun 17, 2024
33175b7
runfix: misaligned import/export view (#17595)
PatrykBuniX Jun 17, 2024
021f2d1
runfix: slow internet dark mode (#17596)
PatrykBuniX Jun 17, 2024
05fa288
runfix: change dark mode slow indicator styles (#17600)
PatrykBuniX Jun 17, 2024
826af6a
feat: auto clear navigation search input on Escape press (#17602)
thisisamir98 Jun 18, 2024
40045de
feat: Clicking enter key on search input selecting first conversation…
przemvs Jun 18, 2024
728e82e
feat: persist sidebar open/close state (#17559)
thisisamir98 Jun 18, 2024
3f4f755
Merge branch 'dev' into new-navigation
atomrc Jun 18, 2024
9c419c1
Merge branch 'dev' into new-navigation
przemvs Jun 19, 2024
b78b47d
runfix: Missing OutlineCheck Icon (#17609)
przemvs Jun 19, 2024
f98daf4
merge dev into new-navigation
przemvs Jun 19, 2024
11a513f
Merge branch 'dev' into new-navigation
atomrc Jun 19, 2024
db438c5
Merge branch 'dev' into new-navigation
atomrc Jun 19, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ jobs:
"targets": "[\"wire-webapp-master-al2\"]"
},
"new-navigation": {
"targets": "[\"wire-webapp-edge-al2\"]"
"targets": "[\"wire-webapp-edge\"]"
},
"production": {
"targets": "[\"wire-webapp-prod-al2\"]"
Expand Down
8 changes: 4 additions & 4 deletions charts/webapp/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
replicaCount: 1
resources:
requests:
memory: "128Mi"
cpu: "100m"
memory: '128Mi'
cpu: '100m'
limits:
memory: "512Mi"
cpu: "1"
memory: '512Mi'
cpu: '1'
image:
repository: quay.io/wire/webapp
# tag: override version defined in Chart.appVersion
Expand Down
3 changes: 3 additions & 0 deletions server/config/client.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@
SHOW_LOADING_INFORMATION: env.FEATURE_SHOW_LOADING_INFORMATION == 'true',
USE_CORE_CRYPTO: env.FEATURE_USE_CORE_CRYPTO == 'true',
MAX_USERS_TO_PING_WITHOUT_ALERT:
(env.FEATURE_MAX_USERS_TO_PING_WITHOUT_ALERT && Number(env.FEATURE_MAX_USERS_TO_PING_WITHOUT_ALERT)) || 4,

Check warning on line 70 in server/config/client.config.ts

View workflow job for this annotation

GitHub Actions / test

No magic number: 4
},
MAX_GROUP_PARTICIPANTS: (env.MAX_GROUP_PARTICIPANTS && Number(env.MAX_GROUP_PARTICIPANTS)) || 500,
MAX_VIDEO_PARTICIPANTS: (env.MAX_VIDEO_PARTICIPANTS && Number(env.MAX_VIDEO_PARTICIPANTS)) || 4,
Expand Down Expand Up @@ -96,6 +96,7 @@
FEDERATION_STOP: env.URL_SUPPORT_FEDERATION_STOP,
HISTORY: env.URL_SUPPORT_HISTORY,
INDEX: env.URL_SUPPORT_INDEX,
FOLDERS: env.URL_SUPPORT_FOLDERS,
LEARN_MORE_ABOUT_GUEST_LINKS: env.URL_LEARN_MORE_ABOUT_GUEST_LINKS,
LEGAL_HOLD_BLOCK: env.URL_SUPPORT_LEGAL_HOLD_BLOCK,
MICROPHONE_ACCESS_DENIED: env.URL_SUPPORT_MICROPHONE_ACCESS_DENIED,
Expand All @@ -108,6 +109,8 @@
PRIVACY_WHY: env.URL_SUPPORT_PRIVACY_WHY,
SCREEN_ACCESS_DENIED: env.URL_SUPPORT_SCREEN_ACCESS_DENIED,
SYSTEM_KEYCHAIN_ACCESS: env.URL_SUPPORT_SYSTEM_KEYCHAIN_ACCESS,
URL_SUPPORT_FAVORITES: env.URL_SUPPORT_FAVORITES,
URL_SUPPORT_FOLDERS: env.URL_SUPPORT_FOLDERS,
},
TEAMS_BASE: env.URL_TEAMS_BASE,
TEAMS_CREATE: env.URL_TEAMS_CREATE,
Expand Down
4 changes: 4 additions & 0 deletions server/config/env.ts
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,8 @@ export type Env = {
/** Sets Support URLs to specific pages */
URL_SUPPORT_INDEX: string;

URL_SUPPORT_FOLDERS: string;

URL_SUPPORT_BUG_REPORT: string;

URL_SUPPORT_CALLING: string;
Expand Down Expand Up @@ -255,6 +257,8 @@ export type Env = {

URL_SUPPORT_SYSTEM_KEYCHAIN_ACCESS: string;

URL_SUPPORT_FAVORITES: string;

URL_LEARN_MORE_ABOUT_GUEST_LINKS: string;

URL_SUPPORT_NON_FEDERATING_INFO: string;
Expand Down
1 change: 0 additions & 1 deletion src/i18n/en-US.json
Original file line number Diff line number Diff line change
Expand Up @@ -1405,7 +1405,6 @@
"searchServiceConfirmButton": "Open Conversation",
"searchServicePlaceholder": "Search by name",
"searchServices": "Services",
"searchTeamGroups": "Team conversations",
"searchTeamMembers": "Team members",
"searchTopPeople": "Top people",
"searchTrySearch": "Find people by\nname or username",
Expand Down
60 changes: 60 additions & 0 deletions src/script/components/AvailabilityIcon/Availability.styles.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/*
* Wire
* Copyright (C) 2024 Wire Swiss GmbH
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see http://www.gnu.org/licenses/.
*
*/

import {CSSObject} from '@emotion/react';

import {Availability as AvailabilityProp} from '@wireapp/protocol-messaging';

import {AVATAR_SIZE} from 'Components/Avatar';
import {CSS_SQUARE} from 'Util/CSSMixin';

const availabilityStateColors: Partial<Record<AvailabilityProp.Type, string>> = {
[AvailabilityProp.Type.AVAILABLE]: 'var(--green-500)',
[AvailabilityProp.Type.AWAY]: 'var(--red-500)',
[AvailabilityProp.Type.BUSY]: 'var(--amber-500)',
};

const getSquareIconSize = (): Partial<Record<AVATAR_SIZE, number>> => ({
[AVATAR_SIZE.X_SMALL]: 6,
[AVATAR_SIZE.SMALL]: 7,
[AVATAR_SIZE.MEDIUM]: 10,
[AVATAR_SIZE.LARGE]: 12,
});

export const iconStyles = (availabilityState: AvailabilityProp.Type, avatarSize: AVATAR_SIZE): CSSObject => {
const squareIconSize = getSquareIconSize();

return {
...CSS_SQUARE(squareIconSize?.[avatarSize] || 8),
fill: availabilityStateColors[availabilityState],
stroke: availabilityStateColors[availabilityState],
borderRadius: '50%',
};
};

export const AvailabilityIcon: CSSObject = {
background: 'var(--app-bg)',
border: '2px solid var(--app-bg)',
borderRadius: '50%',
display: 'grid',
placeContent: 'center',
position: 'absolute',
bottom: '-2px',
right: '-2px',
};
67 changes: 67 additions & 0 deletions src/script/components/AvailabilityIcon/Availability.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
/*
* Wire
* Copyright (C) 2024 Wire Swiss GmbH
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see http://www.gnu.org/licenses/.
*
*/

import {ReactNode} from 'react';

import {Availability as AvailabilityProp} from '@wireapp/protocol-messaging';

import {AVATAR_SIZE} from 'Components/Avatar';
import {Icon} from 'Components/Icon';

import * as styles from './Availability.styles';

const availabilityIconBaseProps = {
'data-uie-name': 'status-availability-icon',
};

const availabilityIconRenderer: Record<AvailabilityProp.Type, (avatarSize: AVATAR_SIZE) => ReactNode> = {
[AvailabilityProp.Type.AVAILABLE]: avatarSize => (
<Icon.AvailabilityAvailable
{...availabilityIconBaseProps}
css={styles.iconStyles(AvailabilityProp.Type.AVAILABLE, avatarSize)}
data-uie-value="available"
/>
),
[AvailabilityProp.Type.AWAY]: avatarSize => (
<Icon.AvailabilityAway
{...availabilityIconBaseProps}
css={styles.iconStyles(AvailabilityProp.Type.AWAY, avatarSize)}
data-uie-value="away"
/>
),
[AvailabilityProp.Type.BUSY]: avatarSize => (
<Icon.AvailabilityBusy
{...availabilityIconBaseProps}
css={styles.iconStyles(AvailabilityProp.Type.BUSY, avatarSize)}
data-uie-value="busy"
/>
),
[AvailabilityProp.Type.NONE]: () => null,
};

interface AvailabilityIconProps {
availability: AvailabilityProp.Type;
avatarSize: AVATAR_SIZE;
}

export const AvailabilityIcon = ({availability, avatarSize}: AvailabilityIconProps) => (
<div css={styles.AvailabilityIcon} data-uie-name="status-availability" data-uie-value={availability}>
{availabilityIconRenderer[availability](avatarSize)}
</div>
);
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* Wire
* Copyright (C) 2018 Wire Swiss GmbH
* Copyright (C) 2024 Wire Swiss GmbH
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Expand All @@ -17,11 +17,4 @@
*
*/

.availability-state {
display: flex;
align-items: center;

.conversation-badges {
margin-left: 4px;
}
}
export * from './Availability';
7 changes: 4 additions & 3 deletions src/script/components/Avatar/Avatar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
*
*/

import {FC, HTMLProps, MouseEvent as ReactMouseEvent, KeyboardEvent as ReactKeyBoardEvent} from 'react';
import {HTMLProps, MouseEvent as ReactMouseEvent, KeyboardEvent as ReactKeyBoardEvent} from 'react';

import {useKoSubscribableChildren} from 'Util/ComponentUtil';
import {handleKeyDown, isKeyboardEvent} from 'Util/KeyboardUtil';
Expand Down Expand Up @@ -79,17 +79,18 @@ export interface AvatarProps extends HTMLProps<HTMLDivElement> {
noFilter?: boolean;
isResponsive?: boolean;
onAvatarClick?: (participant: User | ServiceEntity) => void;
hideAvailabilityStatus?: boolean;
}

const Avatar: FC<AvatarProps> = ({
const Avatar = ({
avatarSize = AVATAR_SIZE.LARGE,
noBadge = false,
noFilter = false,
onAvatarClick,
participant,
isResponsive = false,
...props
}) => {
}: AvatarProps) => {
const handleAvatarInteraction = (
event: ReactMouseEvent<HTMLDivElement, MouseEvent> | ReactKeyBoardEvent<HTMLDivElement>,
) => {
Expand Down
1 change: 0 additions & 1 deletion src/script/components/Avatar/AvatarWrapper.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ const AvatarWrapper: React.FunctionComponent<AvatarWrapperProps> = ({
...CSS_SQUARE(avatarDiameter),
color,
display: 'inline-block',
overflow: 'hidden',
position: 'relative',
transform: 'translateZ(0)',
userSelect: 'none',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,14 @@

import {render} from '@testing-library/react';

import {UserAvatar} from './UserAvatar';
import {Availability} from '@wireapp/protocol-messaging';

import {TeamState} from 'src/script/team/TeamState';

import {User} from '../../entity/User';
import {UserAvatar} from './UserAvatar';

import {AVATAR_SIZE, STATE} from '.';
jest.mock('../../auth/util/SVGProvider');
import {User} from '../../../entity/User';
import {AVATAR_SIZE, STATE} from '../Avatar';

describe('UserAvatar', () => {
it('shows participant initials if no avatar is defined', async () => {
Expand Down Expand Up @@ -102,4 +104,73 @@ describe('UserAvatar', () => {

expect(badgeIcon.getAttribute('data-uie-value')).toEqual(STATE.PENDING);
});
it('renders available icon', async () => {
const participant = new User('id');

const props = {
avatarSize: AVATAR_SIZE.LARGE,
participant: participant,
state: STATE.NONE,
teamState: {isInTeam: () => true} as unknown as TeamState,
};

participant.availability(Availability.Type.AVAILABLE);
const {getByTestId} = render(<UserAvatar {...props} />);

const statusAvailabilityIcon = getByTestId('status-availability-icon');
expect(statusAvailabilityIcon.getAttribute('data-uie-value')).toEqual('available');
});

it('renders away icon', async () => {
const participant = new User('id');

const props = {
avatarSize: AVATAR_SIZE.LARGE,
participant: participant,
state: STATE.NONE,
teamState: {isInTeam: () => true} as unknown as TeamState,
};

participant.availability(Availability.Type.AWAY);

const {getByTestId} = render(<UserAvatar {...props} />);

const statusAvailabilityIcon = getByTestId('status-availability-icon');
expect(statusAvailabilityIcon.getAttribute('data-uie-value')).toEqual('away');
});

it('renders busy icon', async () => {
const participant = new User('id');

const props = {
avatarSize: AVATAR_SIZE.LARGE,
participant: participant,
state: STATE.NONE,
teamState: {isInTeam: () => true} as unknown as TeamState,
};

participant.availability(Availability.Type.BUSY);

const {getByTestId} = render(<UserAvatar {...props} />);

const statusAvailabilityIcon = getByTestId('status-availability-icon');
expect(statusAvailabilityIcon.getAttribute('data-uie-value')).toEqual('busy');
});

it('does not show availability icon if param is false', async () => {
const participant = new User('id');

const props = {
avatarSize: AVATAR_SIZE.LARGE,
participant: participant,
state: STATE.NONE,
teamState: {isInTeam: () => true} as unknown as TeamState,
};

participant.availability(Availability.Type.AVAILABLE);
const {queryByTestId} = render(<UserAvatar {...props} hideAvailabilityStatus={true} />);

const statusAvailabilityIcon = queryByTestId('status-availability-icon');
expect(statusAvailabilityIcon).toBeNull();
});
});