Frontend folder structure (#19631)

* moved folders

* moved [2]

* step #

* Fix

* Moved Auto translate

* Ops

* fix LGTM
pull/19746/head
Guilherme Gazzo 5 years ago committed by GitHub
parent 4b6ec7d984
commit 13bf9508cc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      app/authorization/client/startup.js
  2. 4
      app/channel-settings/client/views/channelSettings.js
  3. 2
      app/chatpal-search/client/route.js
  4. 2
      app/emoji-custom/client/admin/startup.js
  5. 2
      app/integrations/client/startup.js
  6. 2
      app/livechat/client/route.js
  7. 2
      app/mail-messages/client/startup.js
  8. 2
      app/oauth2-server-config/client/admin/startup.js
  9. 2
      app/threads/client/components/ThreadSkeleton.tsx
  10. 2
      app/threads/client/components/ThreadView.tsx
  11. 4
      app/ui-utils/client/lib/ReactionListContent.js
  12. 2
      app/ui/client/lib/UserCard.js
  13. 2
      app/user-status/client/admin/startup.js
  14. 34
      client/README.md
  15. 145
      client/channel/ChannelInfo/RoomInfo.js
  16. 9
      client/channel/KeyboardShortcuts/KeyboardShortcuts.js
  17. 92
      client/channel/UserInfo/index.js
  18. 2
      client/components/AutoComplete.js
  19. 2
      client/components/AutoComplete.stories.js
  20. 4
      client/components/AutoCompleteAgent.js
  21. 4
      client/components/AutoCompleteDepartment.js
  22. 0
      client/components/Backdrop.js
  23. 2
      client/components/ConfirmOwnerChangeWarningModal.js
  24. 2
      client/components/Emoji.js
  25. 0
      client/components/ExternalLink.tsx
  26. 2
      client/components/GenericTable/index.js
  27. 0
      client/components/Logo.js
  28. 2
      client/components/Logo.stories.js
  29. 0
      client/components/MarkdownText.js
  30. 2
      client/components/MarkdownText.stories.js
  31. 2
      client/components/NotAuthorizedPage.js
  32. 4
      client/components/Page.stories.js
  33. 4
      client/components/Page.tsx
  34. 2
      client/components/PageSkeleton.js
  35. 2
      client/components/PlanTag.js
  36. 0
      client/components/RawText.js
  37. 2
      client/components/RoomAutoComplete.js
  38. 2
      client/components/ScrollableContentWrapper.tsx
  39. 5
      client/components/Sidebar.js
  40. 0
      client/components/Subtitle.js
  41. 4
      client/components/TextCopy.js
  42. 4
      client/components/UTCClock.js
  43. 0
      client/components/UserCard.js
  44. 0
      client/components/UserCard.stories.js
  45. 4
      client/components/UserStatus.js
  46. 0
      client/components/UserStatus.stories.js
  47. 2
      client/components/UserStatusMenu.js
  48. 2
      client/components/VerticalBar.js
  49. 0
      client/components/avatar/AppAvatar.js
  50. 0
      client/components/avatar/BaseAvatar.js
  51. 2
      client/components/avatar/RoomAvatar.js
  52. 6
      client/components/avatar/RoomAvatarEditor.js
  53. 2
      client/components/avatar/UserAvatar.js
  54. 4
      client/components/avatar/UserAvatarEditor.js
  55. 40
      client/components/basic/AutoTranslate.js
  56. 122
      client/components/basic/RoomInfo.js
  57. 0
      client/components/burger/BurgerBadge.js
  58. 4
      client/components/burger/BurgerBadge.stories.js
  59. 2
      client/components/burger/BurgerIcon.js
  60. 6
      client/components/burger/BurgerIcon.stories.js
  61. 4
      client/components/burger/BurgerMenuButton.js
  62. 4
      client/components/burger/BurgerMenuButton.stories.js
  63. 6
      client/main.js
  64. 10
      client/omnichannel/routes.js
  65. 4
      client/sidebar/Item/Condensed.stories.js
  66. 4
      client/sidebar/Item/Extended.stories.js
  67. 4
      client/sidebar/Item/Medium.stories.js
  68. 4
      client/sidebar/RoomList.js
  69. 2
      client/sidebar/RoomMenu.js
  70. 2
      client/sidebar/Sidebar.stories.js
  71. 4
      client/sidebar/header/UserAvatarButton.js
  72. 2
      client/sidebar/hooks/useAvatarTemplate.js
  73. 2
      client/sidebar/search/SearchList.js
  74. 14
      client/views/account/AccountIntegrationsPage.js
  75. 16
      client/views/account/AccountProfileForm.js
  76. 22
      client/views/account/AccountProfilePage.js
  77. 10
      client/views/account/AccountRoute.js
  78. 10
      client/views/account/AccountSidebar.js
  79. 2
      client/views/account/ActionConfirmModal.tsx
  80. 10
      client/views/account/preferences/AccountPreferencesPage.js
  81. 2
      client/views/account/preferences/MyDataModal.tsx
  82. 6
      client/views/account/preferences/PreferencesGlobalSection.js
  83. 6
      client/views/account/preferences/PreferencesHighlightsSection.js
  84. 6
      client/views/account/preferences/PreferencesLocalizationSection.js
  85. 8
      client/views/account/preferences/PreferencesMessagesSection.js
  86. 8
      client/views/account/preferences/PreferencesMyDataSection.js
  87. 10
      client/views/account/preferences/PreferencesNotificationsSection.js
  88. 8
      client/views/account/preferences/PreferencesSoundSection.js
  89. 6
      client/views/account/preferences/PreferencesUserPresenceSection.js
  90. 8
      client/views/account/security/AccountSecurityPage.js
  91. 4
      client/views/account/security/BackupCodesModal.tsx
  92. 10
      client/views/account/security/EndToEnd.js
  93. 6
      client/views/account/security/TwoFactorEmail.js
  94. 14
      client/views/account/security/TwoFactorTOTP.js
  95. 4
      client/views/account/security/VerifyCodeModal.tsx
  96. 8
      client/views/account/sidebarItems.js
  97. 6
      client/views/account/tokens/AccountTokensPage.js
  98. 4
      client/views/account/tokens/AccountTokensRow.tsx
  99. 14
      client/views/account/tokens/AccountTokensTable.js
  100. 12
      client/views/account/tokens/AddToken.js
  101. Some files were not shown because too many files have changed in this diff Show More

@ -1,12 +1,13 @@
import { Meteor } from 'meteor/meteor';
import { Tracker } from 'meteor/tracker';
import { hasAtLeastOnePermission } from './hasPermission';
import { registerAdminSidebarItem } from '../../../client/admin';
import { CachedCollectionManager } from '../../ui-cached-collection';
import { APIClient } from '../../utils/client';
import { Roles } from '../../models/client';
import { rolesStreamer } from './lib/streamer';
import { registerAdminSidebarItem } from '../../../client/views/admin';
Meteor.startup(() => {
CachedCollectionManager.onLogin(async () => {

@ -5,11 +5,11 @@ import { Template } from 'meteor/templating';
import { ChatRoom } from '../../../models';
import { createTemplateForComponent } from '../../../../client/reactAdapters';
createTemplateForComponent('channelSettingsEditing', () => import('../../../../client/channel/ChannelInfo/EditChannel'), {
createTemplateForComponent('channelSettingsEditing', () => import('../../../../client/views/room/contextualBar/Info/EditChannel'), {
renderContainerView: () => HTML.DIV({ class: 'contextual-bar' }), // eslint-disable-line new-cap
});
createTemplateForComponent('channelSettingsInfo', () => import('../../../../client/channel/ChannelInfo/RoomInfo'), {
createTemplateForComponent('channelSettingsInfo', () => import('../../../../client/views/room/contextualBar/Info/RoomInfo'), {
renderContainerView: () => HTML.DIV({ class: 'contextual-bar' }), // eslint-disable-line new-cap
});

@ -1,6 +1,6 @@
import { BlazeLayout } from 'meteor/kadira:blaze-layout';
import { registerAdminRoute } from '../../../client/admin';
import { registerAdminRoute } from '../../../client/views/admin';
import { t } from '../../utils';
registerAdminRoute('/chatpal', {

@ -1,5 +1,5 @@
import { registerAdminSidebarItem } from '../../../../client/views/admin';
import { hasPermission } from '../../../authorization';
import { registerAdminSidebarItem } from '../../../../client/admin';
registerAdminSidebarItem({
href: 'emoji-custom',

@ -1,5 +1,5 @@
import { hasAtLeastOnePermission } from '../../authorization';
import { registerAdminSidebarItem } from '../../../client/admin';
import { registerAdminSidebarItem } from '../../../client/views/admin';
registerAdminSidebarItem({
href: 'admin-integrations',

@ -1,7 +1,7 @@
import { FlowRouter } from 'meteor/kadira:flow-router';
import { AccountBox } from '../../ui-utils';
import '../../../client/omnichannel/routes';
import '../../../client/views/omnichannel/routes';
export const livechatManagerRoutes = FlowRouter.group({
prefix: '/omnichannel',

@ -1,5 +1,5 @@
import { hasAllPermission } from '../../authorization';
import { registerAdminSidebarItem } from '../../../client/admin';
import { registerAdminSidebarItem } from '../../../client/views/admin';
registerAdminSidebarItem({
href: 'admin-mailer',

@ -1,5 +1,5 @@
import { hasAllPermission } from '../../../authorization';
import { registerAdminSidebarItem } from '../../../../client/admin';
import { registerAdminSidebarItem } from '../../../../client/views/admin';
registerAdminSidebarItem({
href: 'admin-oauth-apps',

@ -1,7 +1,7 @@
import React, { FC, useMemo } from 'react';
import { Modal, Box } from '@rocket.chat/fuselage';
import VerticalBar from '../../../../client/components/basic/VerticalBar';
import VerticalBar from '../../../../client/components/VerticalBar';
type ThreadSkeletonProps = {
expanded: boolean;

@ -2,7 +2,7 @@ import React, { useCallback, useMemo, forwardRef } from 'react';
import { Modal, Box } from '@rocket.chat/fuselage';
import { useTranslation } from '../../../../client/contexts/TranslationContext';
import VerticalBar from '../../../../client/components/basic/VerticalBar';
import VerticalBar from '../../../../client/components/VerticalBar';
type ThreadViewProps = {
title: string;

@ -5,8 +5,8 @@ import { useMutableCallback } from '@rocket.chat/fuselage-hooks';
import { useTranslation } from '../../../../client/contexts/TranslationContext';
import { useSetting } from '../../../../client/contexts/SettingsContext';
import { useSession } from '../../../../client/contexts/SessionContext';
import Emoji from '../../../../client/components/basic/Emoji';
import ScrollableContentWrapper from '../../../../client/components/basic/ScrollableContentWrapper';
import Emoji from '../../../../client/components/Emoji';
import ScrollableContentWrapper from '../../../../client/components/ScrollableContentWrapper';
import { openUserCard } from '../../../ui/client/lib/UserCard';
import { openProfileTabOrOpenDM } from '../../../ui/client/views/app/room';

@ -46,7 +46,7 @@ export const openUserCard = async (args) => {
container = container || createContainer();
unregister = unregister || await createEphemeralPortal(
() => import('../../../../client/channel/UserCard'), () => {
() => import('../../../../client/views/room/UserCard'), () => {
Dep.depend();
return props;
},

@ -1,5 +1,5 @@
import { hasAtLeastOnePermission } from '../../../authorization';
import { registerAdminSidebarItem } from '../../../../client/admin';
import { registerAdminSidebarItem } from '../../../../client/views/admin';
registerAdminSidebarItem({
href: 'custom-user-status',

@ -0,0 +1,34 @@
# How does the folder structure work in the frontend?
## The folder structure should follow rocketchat's html 'semantics' like:
```
main -> room
-> header
...
-> contextualbar
roominfo
...
-> sidebar
-> Header
-> search
-> actions
...
-> list
...
-> footer
...
```
each folder is composed by:
index.jsx
ContainerComponent.jsx
contexts (optional)
providers (optional)
components (optional)
hooks (optional)
libs (optional)
We strongly suggest that you start developing your components/hooks/libs inside the folder where they will be directly used. If you ever find that you will use them in more than one place, then you should "promote" the code to an upper level, where it can be commonly accessed by all others
we have being moving code from blaze to react, but sometimes we will need render under blaze enviroment, to do that use `createTemplateForComponent`

@ -1,145 +0,0 @@
import React from 'react';
import { useMutableCallback } from '@rocket.chat/fuselage-hooks';
import RoomInfo from '../../components/basic/RoomInfo';
import { useTranslation } from '../../contexts/TranslationContext';
import { useUserRoom } from '../../contexts/UserContext';
import { useMethod } from '../../contexts/ServerContext';
import DeleteChannelWarning from '../../components/DeleteChannelWarning';
import { useSetModal } from '../../contexts/ModalContext';
import { useSetting } from '../../contexts/SettingsContext';
import { useRoute } from '../../contexts/RouterContext';
import { useToastMessageDispatch } from '../../contexts/ToastMessagesContext';
import { roomTypes, UiTextContext } from '../../../app/utils';
import { RoomManager } from '../../../app/ui-utils/client/lib/RoomManager';
import { usePermission } from '../../contexts/AuthorizationContext';
import WarningModal from '../../admin/apps/WarningModal';
import MarkdownText from '../../components/basic/MarkdownText';
const retentionPolicyMaxAge = {
c: 'RetentionPolicy_MaxAge_Channels',
p: 'RetentionPolicy_MaxAge_Groups',
d: 'RetentionPolicy_MaxAge_DMs',
};
const retentionPolicyAppliesTo = {
c: 'RetentionPolicy_AppliesToChannels',
p: 'RetentionPolicy_AppliesToGroups',
d: 'RetentionPolicy_AppliesToDMs',
};
export default ({
openEditing,
rid,
tabBar,
}) => {
const onClickClose = useMutableCallback(() => tabBar && tabBar.close());
const t = useTranslation();
const room = useUserRoom(rid);
room.type = room.t;
room.rid = rid;
const { type, name, broadcast, archived, joined = true } = room; // TODO implement joined
const retentionPolicyEnabled = useSetting('RetentionPolicy_Enabled');
const retentionPolicy = {
retentionPolicyEnabled,
maxAgeDefault: useSetting(retentionPolicyMaxAge[room.t]) || 30,
retentionEnabledDefault: useSetting(retentionPolicyAppliesTo[room.t]),
excludePinnedDefault: useSetting('RetentionPolicy_DoNotPrunePinned'),
filesOnlyDefault: useSetting('RetentionPolicy_FilesOnly'),
};
const dispatchToastMessage = useToastMessageDispatch();
const setModal = useSetModal();
const closeModal = useMutableCallback(() => setModal());
const deleteRoom = useMethod('eraseRoom');
const hideRoom = useMethod('hideRoom');
const leaveRoom = useMethod('leaveRoom');
const router = useRoute('home');
const canDelete = usePermission(type === 'c' ? 'delete-c' : 'delete-p', rid);
const canEdit = usePermission('edit-room', rid);
const canLeave = usePermission(type === 'c' ? 'leave-c' : 'leave-p') && room.cl !== false && joined;
const handleDelete = useMutableCallback(() => {
const onConfirm = async () => {
try {
await deleteRoom(rid);
router.push({});
} catch (error) {
dispatchToastMessage({ type: 'error', message: error });
}
closeModal();
};
setModal(<DeleteChannelWarning onConfirm={onConfirm} onCancel={closeModal} />);
});
const handleLeave = useMutableCallback(() => {
const leave = async () => {
try {
await leaveRoom(rid);
router.push({});
RoomManager.close(rid);
} catch (error) {
dispatchToastMessage({ type: 'error', message: error });
}
closeModal();
};
const warnText = roomTypes.getConfig(type).getUiText(UiTextContext.LEAVE_WARNING);
setModal(<WarningModal
text={t(warnText, name)}
confirmText={t('Leave_room')}
close={closeModal}
cancel={closeModal}
cancelText={t('Cancel')}
confirm={leave}
/>);
});
const handleHide = useMutableCallback(async () => {
const hide = async () => {
try {
await hideRoom(rid);
router.push({});
} catch (error) {
dispatchToastMessage({ type: 'error', message: error });
}
closeModal();
};
const warnText = roomTypes.getConfig(type).getUiText(UiTextContext.HIDE_WARNING);
setModal(<WarningModal
text={t(warnText, name)}
confirmText={t('Yes_hide_it')}
close={closeModal}
cancel={closeModal}
cancelText={t('Cancel')}
confirm={hide}
/>);
});
return (
<RoomInfo
archived={archived}
broadcast={broadcast}
icon={room.t === 'p' ? 'lock' : 'hashtag'}
retentionPolicy={retentionPolicyEnabled && retentionPolicy}
onClickEdit={canEdit && openEditing}
onClickClose={onClickClose}
onClickDelete={canDelete && handleDelete}
onClickLeave={canLeave && handleLeave}
onClickHide={joined && handleHide}
{...room}
announcement={room.announcement && <MarkdownText content={room.announcement}/>}
description={room.description && <MarkdownText content={room.description}/>}
topic={room.topic && <MarkdownText content={room.topic}/>}
/>
);
};

@ -1,9 +0,0 @@
import React from 'react';
import { useMutableCallback } from '@rocket.chat/fuselage-hooks';
import KeyboardShortcuts from '../../components/basic/KeyboardShortcuts';
export default React.memo(({ tabBar }) => {
const handleClose = useMutableCallback(() => tabBar && tabBar.close());
return <KeyboardShortcuts handleClose={handleClose}/>;
});

@ -1,92 +0,0 @@
import React, { useMemo } from 'react';
import { Box } from '@rocket.chat/fuselage';
import { UserInfo } from '../../components/basic/UserInfo';
import { useTranslation } from '../../contexts/TranslationContext';
import { useSetting } from '../../contexts/SettingsContext';
import { ReactiveUserStatus } from '../../components/basic/UserStatus';
import UserCard from '../../components/basic/UserCard';
import { FormSkeleton } from '../../admin/users/Skeleton';
import VerticalBar from '../../components/basic/VerticalBar';
import UserActions from './actions/UserActions';
import { useRolesDescription } from '../../contexts/AuthorizationContext';
import { useEndpointData } from '../../hooks/useEndpointData';
import { AsyncStatePhase } from '../../hooks/useAsyncState';
export const UserInfoWithData = React.memo(function UserInfoWithData({ uid, username, tabBar, rid, onClose, video, showBackButton, ...props }) {
const t = useTranslation();
const getRoles = useRolesDescription();
const showRealNames = useSetting('UI_Use_Real_Name');
const { value: data, phase: state, error } = useEndpointData(
'users.info',
useMemo(
() => ({ ...uid && { userId: uid }, ...username && { username } }),
[uid, username],
),
);
const user = useMemo(() => {
const { user } = data || { user: {} };
const {
_id,
name,
username,
roles = [],
status = null,
statusText,
bio,
utcOffset,
lastLogin,
nickname,
} = user;
return {
name: showRealNames ? name : username,
username,
lastLogin,
roles: roles && getRoles(roles).map((role, index) => (
<UserCard.Role key={index}>{role}</UserCard.Role>
)),
bio,
phone: user.phone,
customFields: user.customFields,
email: user.emails?.find(({ address }) => !!address),
utcOffset,
createdAt: user.createdAt,
// localTime: <LocalTime offset={utcOffset} />,
status: status && <ReactiveUserStatus uid={_id} presence={status} />,
customStatus: statusText,
nickname,
};
}, [data, showRealNames, getRoles]);
return (
<VerticalBar>
<VerticalBar.Header>
{t('User_Info')}
{onClose && <VerticalBar.Close onClick={onClose} />}
</VerticalBar.Header>
{
(error && <VerticalBar.Content>
<Box mbs='x16'>{t('User_not_found')}</Box>
</VerticalBar.Content>)
|| (state === AsyncStatePhase.LOADING && <VerticalBar.Content>
<FormSkeleton />
</VerticalBar.Content>)
|| <UserInfo
{...user}
data={data.user}
// onChange={onChange}
actions={<UserActions user={data.user} rid={rid}/>}
{...props}
p='x24'
/>
}
</VerticalBar>
);
});
export default UserInfoWithData;

@ -2,7 +2,7 @@ import React, { useMemo, useState } from 'react';
import { AutoComplete, Option, Options } from '@rocket.chat/fuselage';
import UserAvatar from './avatar/UserAvatar';
import { useEndpointData } from '../../hooks/useEndpointData';
import { useEndpointData } from '../hooks/useEndpointData';
const query = (term = '') => ({ selector: JSON.stringify({ term }) });

@ -3,7 +3,7 @@ import React from 'react';
import AutoComplete from './AutoComplete';
export default {
title: 'components/basic/AutoComplete',
title: 'components/AutoComplete',
component: AutoComplete,
};

@ -1,8 +1,8 @@
import React, { useMemo, useState } from 'react';
import { AutoComplete, Option } from '@rocket.chat/fuselage';
import { useTranslation } from '../../contexts/TranslationContext';
import { useEndpointData } from '../../hooks/useEndpointData';
import { useTranslation } from '../contexts/TranslationContext';
import { useEndpointData } from '../hooks/useEndpointData';
export const AutoCompleteAgent = React.memo((props) => {
const t = useTranslation();

@ -1,8 +1,8 @@
import React, { useMemo, useState } from 'react';
import { AutoComplete, Option } from '@rocket.chat/fuselage';
import { useTranslation } from '../../contexts/TranslationContext';
import { useEndpointData } from '../../hooks/useEndpointData';
import { useTranslation } from '../contexts/TranslationContext';
import { useEndpointData } from '../hooks/useEndpointData';
export const AutoCompleteDepartment = React.memo((props) => {
const t = useTranslation();

@ -1,7 +1,7 @@
import React from 'react';
import { Box, Button, ButtonGroup, Icon, Modal } from '@rocket.chat/fuselage';
import RawText from './basic/RawText';
import RawText from './RawText';
import { useTranslation } from '../contexts/TranslationContext';
const ConfirmOwnerChangeWarningModal = ({ onConfirm, onCancel, contentTitle = '', confirmLabel = '', shouldChangeOwner, shouldBeRemoved, ...props }) => {

@ -1,6 +1,6 @@
import React from 'react';
import { renderEmoji } from '../../../app/emoji/client/index';
import { renderEmoji } from '../../app/emoji/client/index';
function Emoji({ emojiHandle }) {
const markup = { __html: `${ renderEmoji(emojiHandle) }` };

@ -6,7 +6,7 @@ import flattenChildren from 'react-keyed-flatten-children';
import { useTranslation } from '../../contexts/TranslationContext';
import HeaderCell from './HeaderCell';
import LoadingRow from './LoadingRow';
import ScrollableContentWrapper from '../basic/ScrollableContentWrapper';
import ScrollableContentWrapper from '../ScrollableContentWrapper';
const GenericTable = ({
children,

@ -3,7 +3,7 @@ import React from 'react';
import Logo from './Logo';
export default {
title: 'components/basic/Logo',
title: 'components/Logo',
component: Logo,
};

@ -3,7 +3,7 @@ import React from 'react';
import MarkdownText from './MarkdownText';
export default {
title: 'components/basic/MarkdownText',
title: 'components/MarkdownText',
component: MarkdownText,
};

@ -2,7 +2,7 @@ import { Box } from '@rocket.chat/fuselage';
import React from 'react';
import { useTranslation } from '../contexts/TranslationContext';
import Page from './basic/Page';
import Page from './Page';
function NotAuthorizedPage() {
const t = useTranslation();

@ -1,11 +1,11 @@
import { Button, ButtonGroup, Tile } from '@rocket.chat/fuselage';
import React from 'react';
import { fullHeightDecorator } from '../../../.storybook/decorators';
import { fullHeightDecorator } from '../../.storybook/decorators';
import Page from './Page';
export default {
title: 'components/basic/Page',
title: 'components/Page',
component: Page,
};

@ -2,10 +2,10 @@ import { Box, ScrollableProps } from '@rocket.chat/fuselage';
import { useMediaQuery } from '@rocket.chat/fuselage-hooks';
import React, { createContext, useContext, useState, FC, Dispatch, SetStateAction } from 'react';
import { useSidebar } from '../contexts/SidebarContext';
import ScrollableContentWrapper from './ScrollableContentWrapper';
import { useSidebar } from '../../contexts/SidebarContext';
import BurgerMenuButton from './burger/BurgerMenuButton';
import { useSession } from '../../contexts/SessionContext';
import { useSession } from '../contexts/SessionContext';
type PageContextValue = [
boolean,

@ -1,7 +1,7 @@
import { Box, Button, ButtonGroup, Skeleton } from '@rocket.chat/fuselage';
import React from 'react';
import Page from './basic/Page';
import Page from './Page';
function PageSkeleton() {
return <Page>

@ -2,7 +2,7 @@ import React, { useEffect, useState } from 'react';
import { Box, Tag } from '@rocket.chat/fuselage';
import { useSafely } from '@rocket.chat/fuselage-hooks';
import { useMethod } from '../../contexts/ServerContext';
import { useMethod } from '../contexts/ServerContext';
function PlanTag() {
const [plans, setPlans] = useSafely(useState([]));

@ -2,7 +2,7 @@ import React, { useMemo, useState } from 'react';
import { AutoComplete, Option, Options } from '@rocket.chat/fuselage';
import RoomAvatar from './avatar/RoomAvatar';
import { useEndpointData } from '../../hooks/useEndpointData';
import { useEndpointData } from '../hooks/useEndpointData';
const query = (term = '') => ({ selector: JSON.stringify({ name: term }) });

@ -2,7 +2,7 @@ import React, { FC } from 'react';
import SimpleBar from 'simplebar-react';
import 'simplebar/src/simplebar.css';
import { useDir } from '../../hooks/useDir';
import { useDir } from '../hooks/useDir';
const style = {
maxHeight: '100%', flexGrow: 1,

@ -2,11 +2,10 @@ import React, { useMemo } from 'react';
import { css } from '@rocket.chat/css-in-js';
import { Box, Icon, ActionButton } from '@rocket.chat/fuselage';
import { useTranslation } from '../../contexts/TranslationContext';
import { useRoutePath } from '../../contexts/RouterContext';
import { useTranslation } from '../contexts/TranslationContext';
import { useRoutePath } from '../contexts/RouterContext';
import ScrollableContentWrapper from './ScrollableContentWrapper';
const Sidebar = ({ children, ...props }) => <Box display='flex' flexDirection='column' h='full' {...props}>
{children}
</Box>;

@ -1,8 +1,8 @@
import { Box, Icon, Button, Scrollable } from '@rocket.chat/fuselage';
import React, { useCallback } from 'react';
import { useTranslation } from '../../contexts/TranslationContext';
import { useToastMessageDispatch } from '../../contexts/ToastMessagesContext';
import { useTranslation } from '../contexts/TranslationContext';
import { useToastMessageDispatch } from '../contexts/ToastMessagesContext';
const Wrapper = (text) => <Box
fontFamily='mono'

@ -1,7 +1,7 @@
import React from 'react';
import { useTimezoneTime } from '../../hooks/useTimezoneTime';
import { useTranslation } from '../../contexts/TranslationContext';
import { useTimezoneTime } from '../hooks/useTimezoneTime';
import { useTranslation } from '../contexts/TranslationContext';
const useUTCClock = (utcOffset) => {
const time = useTimezoneTime(utcOffset, 10000);

@ -2,8 +2,8 @@ import React, { useEffect, useState } from 'react';
import { StatusBullet } from '@rocket.chat/fuselage';
import { useSafely } from '@rocket.chat/fuselage-hooks';
import { useTranslation } from '../../contexts/TranslationContext';
import { Presence } from '../../lib/presence';
import { useTranslation } from '../contexts/TranslationContext';
import { Presence } from '../lib/presence';
export const UserStatus = React.memo(({ small, status, ...props }) => {
const size = small ? 'small' : 'large';

@ -8,7 +8,7 @@ import {
Box,
} from '@rocket.chat/fuselage';
import { useTranslation } from '../../contexts/TranslationContext';
import { useTranslation } from '../contexts/TranslationContext';
import { UserStatus } from './UserStatus';
const UserStatusMenu = ({

@ -2,7 +2,7 @@ import { Box, Button, Icon, Margins, Skeleton } from '@rocket.chat/fuselage';
import { useDebouncedValue, useMediaQuery } from '@rocket.chat/fuselage-hooks';
import React from 'react';
import { useTranslation } from '../../contexts/TranslationContext';
import { useTranslation } from '../contexts/TranslationContext';
import Page from './Page';
function VerticalBar({ children, ...props }) {

@ -1,7 +1,7 @@
import React, { memo } from 'react';
import BaseAvatar from './BaseAvatar';
import { useRoomAvatarPath } from '../../../contexts/AvatarUrlContext';
import { useRoomAvatarPath } from '../../contexts/AvatarUrlContext';
function RoomAvatar({ room, ...rest }) {
const getRoomPathAvatar = useRoomAvatarPath();

@ -4,9 +4,9 @@ import { css } from '@rocket.chat/css-in-js';
import { useMutableCallback } from '@rocket.chat/fuselage-hooks';
import RoomAvatar from './RoomAvatar';
import { useFileInput } from '../../../hooks/useFileInput';
import { useTranslation } from '../../../contexts/TranslationContext';
import { getAvatarURL } from '../../../../app/utils/lib/getAvatarURL';
import { useFileInput } from '../../hooks/useFileInput';
import { useTranslation } from '../../contexts/TranslationContext';
import { getAvatarURL } from '../../../app/utils/lib/getAvatarURL';
const RoomAvatarEditor = ({ room, roomAvatar, onChangeAvatar = () => {}, ...props }) => {
const t = useTranslation();

@ -1,7 +1,7 @@
import React, { memo } from 'react';
import BaseAvatar from './BaseAvatar';
import { useUserAvatarPath } from '../../../contexts/AvatarUrlContext';
import { useUserAvatarPath } from '../../contexts/AvatarUrlContext';
function UserAvatar({ username, etag, ...rest }) {
const getUserAvatarPath = useUserAvatarPath();

@ -1,8 +1,8 @@
import React, { useState, useCallback } from 'react';
import { Box, Button, Icon, TextInput, Margins, Avatar } from '@rocket.chat/fuselage';
import { useTranslation } from '../../../contexts/TranslationContext';
import { useFileInput } from '../../../hooks/useFileInput';
import { useTranslation } from '../../contexts/TranslationContext';
import { useFileInput } from '../../hooks/useFileInput';
import UserAvatar from './UserAvatar';
function UserAvatarSuggestions({ suggestions, setAvatarObj, setNewAvatarSource, disabled, ...props }) {

@ -1,40 +0,0 @@
import React from 'react';
import { FieldGroup, Field, ToggleSwitch, Select } from '@rocket.chat/fuselage';
import VerticalBar from './VerticalBar';
import { useTranslation } from '../../contexts/TranslationContext';
const AutoTranslate = ({
language,
languages,
handleSwitch,
translateEnable,
handleChangeLanguage,
handleClose,
}) => {
const t = useTranslation();
return <>
<VerticalBar.Header>
<VerticalBar.Icon name='language'/>
<VerticalBar.Text>{ t('Auto_Translate') }</VerticalBar.Text>
{handleClose && <VerticalBar.Close onClick={handleClose}/>}
</VerticalBar.Header>
<VerticalBar.ScrollableContent>
<FieldGroup>
<Field.Label htmlFor='automatic-translation'>{ t('Automatic_Translation') }</Field.Label>
<Field.Row>
<ToggleSwitch id='automatic-translation' onChange={handleSwitch} defaultChecked={translateEnable}/>
</Field.Row>
<Field.Label htmlFor='language'>{ t('Language') }</Field.Label>
<Field.Row verticalAlign='middle'>
<Select id='language' value={language} disabled={!translateEnable} onChange={handleChangeLanguage} options={languages} />
</Field.Row>
</FieldGroup>
</VerticalBar.ScrollableContent>
</>;
};
export default AutoTranslate;

@ -1,122 +0,0 @@
import React from 'react';
import { Box, Margins, Icon, Button, ButtonGroup, Divider, Callout } from '@rocket.chat/fuselage';
import { css } from '@rocket.chat/css-in-js';
import RoomAvatar from './avatar/RoomAvatar';
import { useTranslation } from '../../contexts/TranslationContext';
import UserCard from './UserCard';
import VerticalBar from './VerticalBar';
const wordBreak = css`
word-break: break-word !important;
`;
const Label = (props) => <Box fontScale='p2' color='default' {...props} />;
const Info = ({ className, ...props }) => <UserCard.Info className={[className, wordBreak]} flexShrink={0} {...props}/>;
export const RoomInfoIcon = ({ name }) => <Icon name={name} size='x22' />;
export const Title = (props) => <UserCard.Username {...props}/>;
export const RoomInfo = function RoomInfo({
name,
description,
archived,
broadcast,
announcement,
topic,
type,
rid,
icon,
retentionPolicy = {},
onClickHide,
onClickClose,
onClickLeave,
onClickEdit,
onClickDelete,
}) {
const t = useTranslation();
const {
retentionPolicyEnabled,
filesOnlyDefault,
excludePinnedDefault,
maxAgeDefault,
} = retentionPolicy;
return (
<>
<VerticalBar.Header>
<VerticalBar.Icon name='info-circled'/>
<VerticalBar.Text>{t('Room_Info')}</VerticalBar.Text>
{ onClickClose && <VerticalBar.Close onClick={onClickClose} /> }
</VerticalBar.Header>
<VerticalBar.ScrollableContent p='x24'>
<Box flexGrow={1}>
<Margins block='x4'>
<Box pbe='x24'>
<RoomAvatar size={'x332'} room={{ _id: rid, type, t: type } } />
</Box>
{ archived && <Box pbe='x24'>
<Callout type='warning'>
{t('Room_archived')}
</Callout>
</Box>}
<Box pbe='x24'>
<RoomInfo.Title name={name} status={<RoomInfo.Icon name={icon} />}>{name}</RoomInfo.Title>
</Box>
{broadcast && broadcast !== '' && <Box pbe='x16'>
<Label><b>{t('Broadcast_channel')}</b> {t('Broadcast_channel_Description')}</Label>
</Box>}
{description && description !== '' && <Box pbe='x16'>
<Label>{t('Description')}</Label>
<Info withTruncatedText={false}>{description}</Info>
</Box>}
{announcement && announcement !== '' && <Box pbe='x16'>
<Label>{t('Announcement')}</Label>
<Info withTruncatedText={false}>{announcement}</Info>
</Box>}
{topic && topic !== '' && <Box pbe='x16'>
<Label>{t('Topic')}</Label>
<Info withTruncatedText={false}>{topic}</Info>
</Box>}
{retentionPolicyEnabled && (
<Callout type='warning'>
{filesOnlyDefault && excludePinnedDefault && <p>{t('RetentionPolicy_RoomWarning_FilesOnly', { time: maxAgeDefault })}</p>}
{filesOnlyDefault && !excludePinnedDefault && <p>{t('RetentionPolicy_RoomWarning_UnpinnedFilesOnly', { time: maxAgeDefault })}</p>}
{!filesOnlyDefault && excludePinnedDefault && <p>{t('RetentionPolicy_RoomWarning', { time: maxAgeDefault })}</p>}
{!filesOnlyDefault && !excludePinnedDefault && <p>{t('RetentionPolicy_RoomWarning_Unpinned', { time: maxAgeDefault })}</p>}
</Callout>
)}
</Margins>
</Box>
</VerticalBar.ScrollableContent>
<VerticalBar.Footer>
<ButtonGroup stretch>
{ onClickHide && <Button width='50%' onClick={onClickHide}><Box is='span' mie='x4'><Icon name='eye-off' size='x20' /></Box>{t('Hide')}</Button> }
{ onClickLeave && <Button width='50%' onClick={onClickLeave} danger><Box is='span' mie='x4'><Icon name='sign-out' size='x20' /></Box>{t('Leave')}</Button> }
</ButtonGroup>
{ (onClickEdit || onClickDelete) && <>
<Divider />
<ButtonGroup stretch>
{ onClickEdit && <Button width='50%' onClick={onClickEdit}><Box is='span' mie='x4'><Icon name='edit' size='x20' /></Box>{t('Edit')}</Button> }
{ onClickDelete && <Button width='50%' onClick={onClickDelete} danger><Box is='span' mie='x4'><Icon name='trash' size='x20' /></Box>{t('Delete')}</Button>}
</ButtonGroup>
</>}
</VerticalBar.Footer>
</>
);
};
RoomInfo.Title = Title;
RoomInfo.Icon = RoomInfoIcon;
export default React.memo(RoomInfo);

@ -2,10 +2,10 @@ import { Box } from '@rocket.chat/fuselage';
import React from 'react';
import BurgerBadge from './BurgerBadge';
import { centeredDecorator } from '../../../../.storybook/decorators';
import { centeredDecorator } from '../../../.storybook/decorators';
export default {
title: 'components/basic/burger/BurgerBadge',
title: 'components/burger/BurgerBadge',
component: BurgerBadge,
decorators: [
(storyFn) => <Box size='x24' borderWidth='x1' borderStyle='dashed' position='relative'>

@ -2,7 +2,7 @@ import { css } from '@rocket.chat/css-in-js';
import { Box } from '@rocket.chat/fuselage';
import React from 'react';
import { useIsReducedMotionPreferred } from '../../../hooks/useIsReducedMotionPreferred';
import { useIsReducedMotionPreferred } from '../../hooks/useIsReducedMotionPreferred';
const Wrapper = ({ children }) =>
<Box

@ -1,11 +1,11 @@
import React from 'react';
import { centeredDecorator } from '../../../../.storybook/decorators';
import { useAutoToggle } from '../../../../.storybook/hooks';
import { centeredDecorator } from '../../../.storybook/decorators';
import { useAutoToggle } from '../../../.storybook/hooks';
import BurgerIcon from './BurgerIcon';
export default {
title: 'components/basic/burger/BurgerIcon',
title: 'components/burger/BurgerIcon',
component: BurgerIcon,
decorators: [
centeredDecorator,

@ -2,8 +2,8 @@ import { css } from '@rocket.chat/css-in-js';
import { Box } from '@rocket.chat/fuselage';
import React from 'react';
import { useTranslation } from '../../../contexts/TranslationContext';
import { useEmbeddedLayout } from '../../../hooks/useEmbeddedLayout';
import { useTranslation } from '../../contexts/TranslationContext';
import { useEmbeddedLayout } from '../../hooks/useEmbeddedLayout';
import BurgerIcon from './BurgerIcon';
import BurgerBadge from './BurgerBadge';

@ -1,11 +1,11 @@
import { action } from '@storybook/addon-actions';
import React from 'react';
import { centeredDecorator } from '../../../../.storybook/decorators';
import { centeredDecorator } from '../../../.storybook/decorators';
import BurgerMenuButton from './BurgerMenuButton';
export default {
title: 'components/basic/burger/BurgerMenuButton',
title: 'components/burger/BurgerMenuButton',
component: BurgerMenuButton,
decorators: [
centeredDecorator,

@ -29,6 +29,6 @@ import './startup/theme';
import './startup/unread';
import './startup/userSetUtcOffset';
import './startup/usersObserve';
import './admin';
import './login';
import './channel/adapters';
import './views/admin';
import './views/login';
import './views/room/adapters';

@ -1,7 +1,7 @@
import { HTML } from 'meteor/htmljs';
import { createTemplateForComponent } from '../reactAdapters';
import { createRouteGroup } from '../lib/createRouteGroup';
import { createTemplateForComponent } from '../reactAdapters';
createTemplateForComponent('omnichannelFlex', () => import('./sidebar/OmnichannelSidebar'), {
renderContainerView: () => HTML.DIV({ style: 'height: 100%; position: relative;' }), // eslint-disable-line new-cap
@ -30,7 +30,7 @@ registerOmnichannelRoute('/webhooks', {
registerOmnichannelRoute('/customfields/:context?/:id?', {
name: 'omnichannel-customfields',
lazyRouteComponent: () => import('./customFields/CustomFieldsRoute'),
lazyRouteComponent: () => import('../views/omnichannel/customFields/CustomFieldsRoute'),
});
registerOmnichannelRoute('/appearance', {
@ -50,17 +50,17 @@ registerOmnichannelRoute('/managers', {
registerOmnichannelRoute('/units/:context?/:id?', {
name: 'omnichannel-units',
lazyRouteComponent: () => import('../../ee/client/omnichannel/units/UnitsRoute'),
lazyRouteComponent: () => import('../../../ee/client/omnichannel/units/UnitsRoute'),
});
registerOmnichannelRoute('/tags/:context?/:id?', {
name: 'omnichannel-tags',
lazyRouteComponent: () => import('../../ee/client/omnichannel/tags/TagsRoute'),
lazyRouteComponent: () => import('../../../ee/client/omnichannel/tags/TagsRoute'),
});
registerOmnichannelRoute('/priorities/:context?/:id?', {
name: 'omnichannel-priorities',
lazyRouteComponent: () => import('../../ee/client/omnichannel/priorities/PrioritiesRoute'),
lazyRouteComponent: () => import('../../../ee/client/omnichannel/priorities/PrioritiesRoute'),
});
registerOmnichannelRoute('/triggers/:context?/:id?', {

@ -2,8 +2,8 @@ import React from 'react';
import { Box, ActionButton } from '@rocket.chat/fuselage';
import Condensed from './Condensed';
import * as Status from '../../components/basic/UserStatus';
import UserAvatar from '../../components/basic/avatar/UserAvatar';
import * as Status from '../../components/UserStatus';
import UserAvatar from '../../components/avatar/UserAvatar';
export default {

@ -2,8 +2,8 @@ import React from 'react';
import { Box, ActionButton, Badge } from '@rocket.chat/fuselage';
import Extended from './Extended';
import * as Status from '../../components/basic/UserStatus';
import UserAvatar from '../../components/basic/avatar/UserAvatar';
import * as Status from '../../components/UserStatus';
import UserAvatar from '../../components/avatar/UserAvatar';
export default {

@ -2,8 +2,8 @@ import React from 'react';
import { Box, ActionButton } from '@rocket.chat/fuselage';
import Medium from './Medium';
import * as Status from '../../components/basic/UserStatus';
import UserAvatar from '../../components/basic/avatar/UserAvatar';
import * as Status from '../../components/UserStatus';
import UserAvatar from '../../components/avatar/UserAvatar';
export default {

@ -7,7 +7,7 @@ import memoize from 'memoize-one';
import { usePreventDefault } from './hooks/usePreventDefault';
import { filterMarkdown } from '../../app/markdown/lib/markdown';
import { ReactiveUserStatus, colors } from '../components/basic/UserStatus';
import { ReactiveUserStatus, colors } from '../components/UserStatus';
import { useTranslation } from '../contexts/TranslationContext';
import { roomTypes } from '../../app/utils';
import { useUserPreference, useUserId } from '../contexts/UserContext';
@ -19,7 +19,7 @@ import { useShortcutOpenMenu } from './hooks/useShortcutOpenMenu';
import { useAvatarTemplate } from './hooks/useAvatarTemplate';
import { useRoomList } from './hooks/useRoomList';
import { useSidebarPaletteColor } from './hooks/useSidebarPaletteColor';
import ScrollableContentWrapper from '../components/basic/ScrollableContentWrapper';
import ScrollableContentWrapper from '../components/ScrollableContentWrapper';
const sections = {
Omnichannel,

@ -12,7 +12,7 @@ import { useToastMessageDispatch } from '../contexts/ToastMessagesContext';
import { useUserSubscription } from '../contexts/UserContext';
import { usePermission } from '../contexts/AuthorizationContext';
import { useSetModal } from '../contexts/ModalContext';
import WarningModal from '../admin/apps/WarningModal';
import WarningModal from '../views/admin/apps/WarningModal';
const fields = {
f: 1,

@ -3,7 +3,7 @@ import React from 'react';
import Header from './header';
import RoomList from './RoomList';
// import Extended from './Item/Extended';
// import RoomAvatar from '../basic/avatar/RoomAvatar';
// import RoomAvatar from '../avatar/RoomAvatar';
import { UserContext } from '../contexts/UserContext';
import { SettingsContext } from '../contexts/SettingsContext';

@ -8,10 +8,10 @@ import { css } from '@rocket.chat/css-in-js';
import { popover, modal, AccountBox } from '../../../app/ui-utils';
import { useSetting } from '../../contexts/SettingsContext';
import { useTranslation } from '../../contexts/TranslationContext';
import { UserStatus } from '../../components/basic/UserStatus';
import { UserStatus } from '../../components/UserStatus';
import { userStatus } from '../../../app/user-status';
import { callbacks } from '../../../app/callbacks';
import UserAvatar from '../../components/basic/avatar/UserAvatar';
import UserAvatar from '../../components/avatar/UserAvatar';
const setStatus = (status, statusText) => {
AccountBox.setStatus(status, statusText);

@ -1,6 +1,6 @@
import React, { useMemo } from 'react';
import RoomAvatar from '../../components/basic/avatar/RoomAvatar';
import RoomAvatar from '../../components/avatar/RoomAvatar';
import { useUserPreference } from '../../contexts/UserContext';
export const useAvatarTemplate = () => {

@ -17,7 +17,7 @@ import { useTemplateByViewMode } from '../hooks/useTemplateByViewMode';
import { useAvatarTemplate } from '../hooks/useAvatarTemplate';
import { useMethodData } from '../../hooks/useMethodData';
import { AsyncStatePhase } from '../../hooks/useAsyncState';
import ScrollableContentWrapper from '../../components/basic/ScrollableContentWrapper';
import ScrollableContentWrapper from '../../components/ScrollableContentWrapper';
const createItemData = memoize((items, t, SideBarItemTemplate, AvatarTemplate, useRealName, extended) => ({
items,

@ -1,13 +1,13 @@
import React, { useMemo, useCallback } from 'react';
import { Box, Select, Field, Button } from '@rocket.chat/fuselage';
import { useReactiveValue } from '../hooks/useReactiveValue';
import { useTranslation } from '../contexts/TranslationContext';
import { useMethod } from '../contexts/ServerContext';
import { useToastMessageDispatch } from '../contexts/ToastMessagesContext';
import { WebdavAccounts } from '../../app/models';
import { useForm } from '../hooks/useForm';
import Page from '../components/basic/Page';
import { useReactiveValue } from '../../hooks/useReactiveValue';
import { useTranslation } from '../../contexts/TranslationContext';
import { useMethod } from '../../contexts/ServerContext';
import { useToastMessageDispatch } from '../../contexts/ToastMessagesContext';
import { WebdavAccounts } from '../../../app/models';
import { useForm } from '../../hooks/useForm';
import Page from '../../components/Page';
const getWebdavAccounts = () => WebdavAccounts.find().fetch();

@ -2,14 +2,14 @@ import React, { useCallback, useMemo, useEffect, useState } from 'react';
import { Field, FieldGroup, TextInput, TextAreaInput, Box, Icon, AnimatedVisibility, PasswordInput, Button, Grid, Margins } from '@rocket.chat/fuselage';
import { useDebouncedCallback, useSafely } from '@rocket.chat/fuselage-hooks';
import { useTranslation } from '../contexts/TranslationContext';
import { isEmail } from '../../app/utils/lib/isEmail.js';
import { useToastMessageDispatch } from '../contexts/ToastMessagesContext';
import { useMethod } from '../contexts/ServerContext';
import { getUserEmailAddress } from '../lib/getUserEmailAddress';
import { UserAvatarEditor } from '../components/basic/avatar/UserAvatarEditor';
import CustomFieldsForm from '../components/CustomFieldsForm';
import UserStatusMenu from '../components/basic/UserStatusMenu';
import { useTranslation } from '../../contexts/TranslationContext';
import { isEmail } from '../../../app/utils/lib/isEmail.js';
import { useToastMessageDispatch } from '../../contexts/ToastMessagesContext';
import { useMethod } from '../../contexts/ServerContext';
import { getUserEmailAddress } from '../../lib/getUserEmailAddress';
import { UserAvatarEditor } from '../../components/avatar/UserAvatarEditor';
import CustomFieldsForm from '../../components/CustomFieldsForm';
import UserStatusMenu from '../../components/UserStatusMenu';
const STATUS_TEXT_MAX_LENGTH = 120;

@ -2,18 +2,18 @@ import { ButtonGroup, Button, Box, Icon } from '@rocket.chat/fuselage';
import { SHA256 } from 'meteor/sha';
import React, { useMemo, useState, useCallback } from 'react';
import Page from '../components/basic/Page';
import Page from '../../components/Page';
import AccountProfileForm from './AccountProfileForm';
import ConfirmOwnerChangeWarningModal from '../components/ConfirmOwnerChangeWarningModal';
import { useTranslation } from '../contexts/TranslationContext';
import { useForm } from '../hooks/useForm';
import { useSetting } from '../contexts/SettingsContext';
import { useUser } from '../contexts/UserContext';
import { useToastMessageDispatch } from '../contexts/ToastMessagesContext';
import { useMethod } from '../contexts/ServerContext';
import { useSetModal } from '../contexts/ModalContext';
import { useUpdateAvatar } from '../hooks/useUpdateAvatar';
import { getUserEmailAddress } from '../lib/getUserEmailAddress';
import ConfirmOwnerChangeWarningModal from '../../components/ConfirmOwnerChangeWarningModal';
import { useTranslation } from '../../contexts/TranslationContext';
import { useForm } from '../../hooks/useForm';
import { useSetting } from '../../contexts/SettingsContext';
import { useUser } from '../../contexts/UserContext';
import { useToastMessageDispatch } from '../../contexts/ToastMessagesContext';
import { useMethod } from '../../contexts/ServerContext';
import { useSetModal } from '../../contexts/ModalContext';
import { useUpdateAvatar } from '../../hooks/useUpdateAvatar';
import { getUserEmailAddress } from '../../lib/getUserEmailAddress';
import ActionConfirmModal from './ActionConfirmModal';
const getInitialValues = (user) => ({

@ -1,10 +1,10 @@
import React, { useEffect } from 'react';
import { SideNav } from '../../app/ui-utils';
import { useSetting } from '../contexts/SettingsContext';
import { usePermission } from '../contexts/AuthorizationContext';
import { useRouteParameter, useRoute } from '../contexts/RouterContext';
import NotAuthorizedPage from '../components/NotAuthorizedPage';
import { SideNav } from '../../../app/ui-utils';
import { useSetting } from '../../contexts/SettingsContext';
import { usePermission } from '../../contexts/AuthorizationContext';
import { useRouteParameter, useRoute } from '../../contexts/RouterContext';
import NotAuthorizedPage from '../../components/NotAuthorizedPage';
import AccountProfilePage from './AccountProfilePage';
import AccountIntegrationsPage from './AccountIntegrationsPage';
import AccountPreferencesPage from './preferences/AccountPreferencesPage';

@ -1,11 +1,11 @@
import React, { memo, useCallback, useEffect } from 'react';
import { useSubscription } from 'use-subscription';
import { menu, SideNav, Layout } from '../../app/ui-utils/client';
import { useTranslation } from '../contexts/TranslationContext';
import { useRoutePath, useCurrentRoute } from '../contexts/RouterContext';
import Sidebar from '../components/basic/Sidebar';
import SettingsProvider from '../providers/SettingsProvider';
import { menu, SideNav, Layout } from '../../../app/ui-utils/client';
import { useTranslation } from '../../contexts/TranslationContext';
import { useRoutePath, useCurrentRoute } from '../../contexts/RouterContext';
import Sidebar from '../../components/Sidebar';
import SettingsProvider from '../../providers/SettingsProvider';
import { itemsSubscription } from './sidebarItems';
const AccountSidebar = () => {

@ -1,7 +1,7 @@
import { ButtonGroup, Button, Box, Icon, PasswordInput, TextInput, Modal } from '@rocket.chat/fuselage';
import React, { useState, useCallback, FC } from 'react';
import { useTranslation } from '../contexts/TranslationContext';
import { useTranslation } from '../../contexts/TranslationContext';
type ActionConfirmModalProps = {
title: string;

@ -1,11 +1,11 @@
import React, { useState, useCallback, useRef } from 'react';
import { ButtonGroup, Button, Box, Accordion } from '@rocket.chat/fuselage';
import { useTranslation } from '../../contexts/TranslationContext';
import { useToastMessageDispatch } from '../../contexts/ToastMessagesContext';
import { useSetting } from '../../contexts/SettingsContext';
import { useMethod } from '../../contexts/ServerContext';
import Page from '../../components/basic/Page';
import { useTranslation } from '../../../contexts/TranslationContext';
import { useToastMessageDispatch } from '../../../contexts/ToastMessagesContext';
import { useSetting } from '../../../contexts/SettingsContext';
import { useMethod } from '../../../contexts/ServerContext';
import Page from '../../../components/Page';
import PreferencesLocalizationSection from './PreferencesLocalizationSection';
import PreferencesUserPresenceSection from './PreferencesUserPresenceSection';
import PreferencesNotificationsSection from './PreferencesNotificationsSection';

@ -1,7 +1,7 @@
import React, { FC } from 'react';
import { ButtonGroup, Button, Icon, Box, Modal } from '@rocket.chat/fuselage';
import { useTranslation } from '../../contexts/TranslationContext';
import { useTranslation } from '../../../contexts/TranslationContext';
type MyDataModalProps = {
onCancel: () => void;

@ -1,9 +1,9 @@
import React, { useMemo } from 'react';
import { Accordion, Field, FieldGroup, MultiSelect } from '@rocket.chat/fuselage';
import { useTranslation } from '../../contexts/TranslationContext';
import { useUserPreference } from '../../contexts/UserContext';
import { useForm } from '../../hooks/useForm';
import { useTranslation } from '../../../contexts/TranslationContext';
import { useUserPreference } from '../../../contexts/UserContext';
import { useForm } from '../../../hooks/useForm';
const PreferencesGlobalSection = ({ onChange, ...props }) => {
const t = useTranslation();

@ -1,9 +1,9 @@
import React from 'react';
import { Accordion, Field, FieldGroup, TextAreaInput } from '@rocket.chat/fuselage';
import { useTranslation } from '../../contexts/TranslationContext';
import { useUserPreference } from '../../contexts/UserContext';
import { useForm } from '../../hooks/useForm';
import { useTranslation } from '../../../contexts/TranslationContext';
import { useUserPreference } from '../../../contexts/UserContext';
import { useForm } from '../../../hooks/useForm';
const PreferencesHighlightsSection = ({ onChange, ...props }) => {
const t = useTranslation();

@ -1,9 +1,9 @@
import React, { useMemo } from 'react';
import { Accordion, Field, Select, FieldGroup } from '@rocket.chat/fuselage';
import { useLanguages, useTranslation } from '../../contexts/TranslationContext';
import { useUserPreference } from '../../contexts/UserContext';
import { useForm } from '../../hooks/useForm';
import { useLanguages, useTranslation } from '../../../contexts/TranslationContext';
import { useUserPreference } from '../../../contexts/UserContext';
import { useForm } from '../../../hooks/useForm';
const PreferencesLocalizationSection = ({ onChange, ...props }) => {
const t = useTranslation();

@ -1,10 +1,10 @@
import React, { useMemo } from 'react';
import { Accordion, Field, Select, FieldGroup, ToggleSwitch } from '@rocket.chat/fuselage';
import { useTranslation } from '../../contexts/TranslationContext';
import { useUserPreference } from '../../contexts/UserContext';
import { useSetting } from '../../contexts/SettingsContext';
import { useForm } from '../../hooks/useForm';
import { useTranslation } from '../../../contexts/TranslationContext';
import { useUserPreference } from '../../../contexts/UserContext';
import { useSetting } from '../../../contexts/SettingsContext';
import { useForm } from '../../../hooks/useForm';
const PreferencesMessagesSection = ({ onChange, ...props }) => {
const t = useTranslation();

@ -1,10 +1,10 @@
import React, { useCallback } from 'react';
import { Accordion, Field, FieldGroup, ButtonGroup, Button, Icon, Box } from '@rocket.chat/fuselage';
import { useTranslation } from '../../contexts/TranslationContext';
import { useToastMessageDispatch } from '../../contexts/ToastMessagesContext';
import { useMethod } from '../../contexts/ServerContext';
import { useSetModal } from '../../contexts/ModalContext';
import { useTranslation } from '../../../contexts/TranslationContext';
import { useToastMessageDispatch } from '../../../contexts/ToastMessagesContext';
import { useMethod } from '../../../contexts/ServerContext';
import { useSetModal } from '../../../contexts/ModalContext';
import MyDataModal from './MyDataModal';
const PreferencesMyDataSection = ({ onChange, ...props }) => {

@ -1,11 +1,11 @@
import React, { useCallback, useEffect, useState, useMemo } from 'react';
import { Accordion, Field, Select, FieldGroup, ToggleSwitch, Button, Box } from '@rocket.chat/fuselage';
import { KonchatNotification } from '../../../app/ui';
import { useTranslation } from '../../contexts/TranslationContext';
import { useUserPreference } from '../../contexts/UserContext';
import { useForm } from '../../hooks/useForm';
import { useSetting } from '../../contexts/SettingsContext';
import { KonchatNotification } from '../../../../app/ui';
import { useTranslation } from '../../../contexts/TranslationContext';
import { useUserPreference } from '../../../contexts/UserContext';
import { useForm } from '../../../hooks/useForm';
import { useSetting } from '../../../contexts/SettingsContext';
const notificationOptionsLabelMap = {
all: 'All_messages',

@ -1,10 +1,10 @@
import React, { useMemo, useCallback } from 'react';
import { Accordion, Field, Select, FieldGroup, ToggleSwitch, Tooltip, Box } from '@rocket.chat/fuselage';
import { useTranslation } from '../../contexts/TranslationContext';
import { useUserPreference } from '../../contexts/UserContext';
import { useForm } from '../../hooks/useForm';
import { CustomSounds } from '../../../app/custom-sounds/client';
import { useTranslation } from '../../../contexts/TranslationContext';
import { useUserPreference } from '../../../contexts/UserContext';
import { useForm } from '../../../hooks/useForm';
import { CustomSounds } from '../../../../app/custom-sounds/client';
const useCustomSoundsOptions = () => useMemo(() => CustomSounds && CustomSounds.getList && CustomSounds.getList().map(({ _id, name }) => [_id, name]), []);

@ -1,9 +1,9 @@
import React, { useCallback } from 'react';
import { Accordion, Field, NumberInput, FieldGroup, ToggleSwitch } from '@rocket.chat/fuselage';
import { useTranslation } from '../../contexts/TranslationContext';
import { useUserPreference } from '../../contexts/UserContext';
import { useForm } from '../../hooks/useForm';
import { useTranslation } from '../../../contexts/TranslationContext';
import { useUserPreference } from '../../../contexts/UserContext';
import { useForm } from '../../../hooks/useForm';
const PreferencesUserPresenceSection = ({ onChange, ...props }) => {
const t = useTranslation();

@ -1,10 +1,10 @@
import React from 'react';
import { Box, Accordion } from '@rocket.chat/fuselage';
import { useTranslation } from '../../contexts/TranslationContext';
import { useSetting } from '../../contexts/SettingsContext';
import Page from '../../components/basic/Page';
import NotAuthorizedPage from '../../components/NotAuthorizedPage';
import { useTranslation } from '../../../contexts/TranslationContext';
import { useSetting } from '../../../contexts/SettingsContext';
import Page from '../../../components/Page';
import NotAuthorizedPage from '../../../components/NotAuthorizedPage';
import TwoFactorTOTP from './TwoFactorTOTP';
import TwoFactorEmail from './TwoFactorEmail';
import EndToEnd from './EndToEnd';

@ -1,8 +1,8 @@
import React, { FC, useMemo } from 'react';
import { Box, Button, Icon, ButtonGroup, Modal } from '@rocket.chat/fuselage';
import { useTranslation } from '../../contexts/TranslationContext';
import TextCopy from '../../components/basic/TextCopy';
import { useTranslation } from '../../../contexts/TranslationContext';
import TextCopy from '../../../components/TextCopy';
type BackupCodesModalProps = {
codes: string[];

@ -2,11 +2,11 @@ import React, { useCallback, useEffect } from 'react';
import { Box, Margins, PasswordInput, Field, FieldGroup, Button } from '@rocket.chat/fuselage';
import { useLocalStorage } from '@rocket.chat/fuselage-hooks';
import { e2e } from '../../../app/e2e/client/rocketchat.e2e';
import { useToastMessageDispatch } from '../../contexts/ToastMessagesContext';
import { useMethod } from '../../contexts/ServerContext';
import { useForm } from '../../hooks/useForm';
import { useTranslation } from '../../contexts/TranslationContext';
import { e2e } from '../../../../app/e2e/client/rocketchat.e2e';
import { useToastMessageDispatch } from '../../../contexts/ToastMessagesContext';
import { useMethod } from '../../../contexts/ServerContext';
import { useForm } from '../../../hooks/useForm';
import { useTranslation } from '../../../contexts/TranslationContext';
const EndToEnd = (props) => {
const t = useTranslation();

@ -1,9 +1,9 @@
import React, { useCallback } from 'react';
import { Box, Button, Margins } from '@rocket.chat/fuselage';
import { useTranslation } from '../../contexts/TranslationContext';
import { useUser } from '../../contexts/UserContext';
import { useEndpointAction } from '../../hooks/useEndpointAction';
import { useTranslation } from '../../../contexts/TranslationContext';
import { useUser } from '../../../contexts/UserContext';
import { useEndpointAction } from '../../../hooks/useEndpointAction';
const TwoFactorEmail = (props) => {
const t = useTranslation();

@ -3,13 +3,13 @@ import { Box, Button, TextInput, Margins } from '@rocket.chat/fuselage';
import { useSafely } from '@rocket.chat/fuselage-hooks';
import qrcode from 'yaqrcode';
import { useUser } from '../../contexts/UserContext';
import { useToastMessageDispatch } from '../../contexts/ToastMessagesContext';
import { useSetModal } from '../../contexts/ModalContext';
import { useTranslation } from '../../contexts/TranslationContext';
import { useForm } from '../../hooks/useForm';
import { useMethod } from '../../contexts/ServerContext';
import TextCopy from '../../components/basic/TextCopy';
import { useUser } from '../../../contexts/UserContext';
import { useToastMessageDispatch } from '../../../contexts/ToastMessagesContext';
import { useSetModal } from '../../../contexts/ModalContext';
import { useTranslation } from '../../../contexts/TranslationContext';
import { useForm } from '../../../hooks/useForm';
import { useMethod } from '../../../contexts/ServerContext';
import TextCopy from '../../../components/TextCopy';
import BackupCodesModal from './BackupCodesModal';
import VerifyCodeModal from './VerifyCodeModal';

@ -1,8 +1,8 @@
import React, { FC, useCallback, useEffect, useRef } from 'react';
import { Box, Button, TextInput, Icon, ButtonGroup, Modal } from '@rocket.chat/fuselage';
import { useTranslation } from '../../contexts/TranslationContext';
import { useForm } from '../../hooks/useForm';
import { useTranslation } from '../../../contexts/TranslationContext';
import { useForm } from '../../../hooks/useForm';
type VerifyCodeModalProps = {
onVerify: (code: string) => void;

@ -1,9 +1,9 @@
import { HTML } from 'meteor/htmljs';
import { hasPermission } from '../../app/authorization/client';
import { createTemplateForComponent } from '../reactAdapters';
import { settings } from '../../app/settings';
import { createSidebarItems } from '../lib/createSidebarItems';
import { hasPermission } from '../../../app/authorization/client';
import { createTemplateForComponent } from '../../reactAdapters';
import { settings } from '../../../app/settings';
import { createSidebarItems } from '../../lib/createSidebarItems';
createTemplateForComponent('accountFlex', () => import('./AccountSidebar'), {
renderContainerView: () => HTML.DIV({ style: 'height: 100%; position: relative;' }), // eslint-disable-line new-cap

@ -1,10 +1,10 @@
import React from 'react';
import { useTranslation } from '../../contexts/TranslationContext';
import Page from '../../components/basic/Page';
import { useTranslation } from '../../../contexts/TranslationContext';
import Page from '../../../components/Page';
import AccountTokensTable from './AccountTokensTable';
import AddToken from './AddToken';
import { useEndpointData } from '../../hooks/useEndpointData';
import { useEndpointData } from '../../../hooks/useEndpointData';
const AccountTokensPage = () => {
const t = useTranslation();

@ -1,8 +1,8 @@
import { Button, ButtonGroup, Icon, Table } from '@rocket.chat/fuselage';
import React, { useCallback, FC } from 'react';
import { useTranslation } from '../../contexts/TranslationContext';
import { useFormatDateAndTime } from '../../hooks/useFormatDateAndTime';
import { useTranslation } from '../../../contexts/TranslationContext';
import { useFormatDateAndTime } from '../../../hooks/useFormatDateAndTime';
type AccountTokensRowProps = {
bypassTwoFactor: unknown;

@ -1,13 +1,13 @@
import { Box } from '@rocket.chat/fuselage';
import React, { useMemo, useCallback, useState } from 'react';
import GenericTable from '../../components/GenericTable';
import { useMethod } from '../../contexts/ServerContext';
import { useResizeInlineBreakpoint } from '../../hooks/useResizeInlineBreakpoint';
import { useSetModal } from '../../contexts/ModalContext';
import { useToastMessageDispatch } from '../../contexts/ToastMessagesContext';
import { useTranslation } from '../../contexts/TranslationContext';
import { useUserId } from '../../contexts/UserContext';
import GenericTable from '../../../components/GenericTable';
import { useMethod } from '../../../contexts/ServerContext';
import { useResizeInlineBreakpoint } from '../../../hooks/useResizeInlineBreakpoint';
import { useSetModal } from '../../../contexts/ModalContext';
import { useToastMessageDispatch } from '../../../contexts/ToastMessagesContext';
import { useTranslation } from '../../../contexts/TranslationContext';
import { useUserId } from '../../../contexts/UserContext';
import InfoModal from './InfoModal';
import AccountTokensRow from './AccountTokensRow';

@ -2,12 +2,12 @@ import { Box, TextInput, Button, Field, FieldGroup, Margins, CheckBox } from '@r
import { useUniqueId } from '@rocket.chat/fuselage-hooks';
import React, { useCallback } from 'react';
import { useSetModal } from '../../contexts/ModalContext';
import { useTranslation } from '../../contexts/TranslationContext';
import { useMethod } from '../../contexts/ServerContext';
import { useToastMessageDispatch } from '../../contexts/ToastMessagesContext';
import { useUserId } from '../../contexts/UserContext';
import { useForm } from '../../hooks/useForm';
import { useSetModal } from '../../../contexts/ModalContext';
import { useTranslation } from '../../../contexts/TranslationContext';
import { useMethod } from '../../../contexts/ServerContext';
import { useToastMessageDispatch } from '../../../contexts/ToastMessagesContext';
import { useUserId } from '../../../contexts/UserContext';
import { useForm } from '../../../hooks/useForm';
import InfoModal from './InfoModal';
const initialValues = {

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save