From d8a24b044ebe0a5d93ab2dc1e16d101be6552146 Mon Sep 17 00:00:00 2001 From: Tasso Evangelista Date: Thu, 8 Apr 2021 01:21:48 -0300 Subject: [PATCH] [NEW] New set of rules for client code (#21318) Co-authored-by: Guilherme Gazzo --- .eslintignore | 2 + .storybook/main.js | 69 + .storybook/webpack.config.js | 65 - app/authorization/client/index.js | 1 - app/authorization/client/usersNameChanged.js | 18 - app/channel-settings/client/index.js | 4 +- .../client/startup/messageTypes.js | 67 - .../client/{startup => }/tabBar.ts | 4 +- .../client/views/Multiselect.js | 12 - app/chatpal-search/client/route.js | 3 +- app/livechat/client/tabBar.ts | 2 +- app/livestream/client/tabBar.tsx | 6 +- app/mail-messages/client/router.js | 3 +- app/message-snippet/client/router.js | 3 +- .../client/oauth/oauth2-client.js | 2 +- app/otr/client/rocketchat.otr.room.js | 4 +- app/search/client/provider/result.js | 3 +- .../imports/components/read-receipts.css | 11 +- app/theme/client/imports/general/base_old.css | 12 - app/theme/client/main.css | 1 + app/threads/client/flextab/thread.js | 15 - app/token-login/client/login_token_client.js | 3 +- app/ui-login/client/routes.js | 3 +- app/ui-master/client/main.html | 7 - app/ui-master/client/main.js | 8 +- app/ui-message/client/index.js | 1 - app/ui-message/client/message.js | 14 +- app/ui-sidenav/client/sideNav.js | 5 - app/ui-sidenav/client/userPresence.js | 2 +- app/ui-utils/client/lib/AccountBox.js | 2 +- app/ui-utils/client/lib/MessageAction.js | 6 - app/ui-utils/client/lib/messageContext.js | 3 +- app/ui-utils/client/lib/openRoom.js | 2 +- app/ui/client/components/status.html | 15 - app/ui/client/components/status.js | 66 - app/ui/client/index.js | 5 - app/ui/client/lib/Tooltip.js | 6 +- app/ui/client/lib/UserCard.js | 6 +- .../views/app/lib/getCommonRoomEvents.js | 3 +- app/videobridge/client/tabBar.tsx | 10 +- app/webrtc/client/WebRTCClass.js | 6 +- client/.eslintrc.js | 129 + client/.prettierrc | 12 + client/UIKit/hooks/useUIKitHandleAction.tsx | 25 +- client/UIKit/hooks/useUIKitHandleClose.tsx | 39 +- client/UIKit/hooks/useUIKitStateManager.tsx | 5 +- client/adapters.js | 7 - client/components/AppRoot.js | 18 - client/components/AutoComplete.js | 25 - client/components/AutoComplete.stories.js | 10 - client/components/AutoCompleteAgent.js | 45 +- client/components/AutoCompleteDepartment.js | 43 +- client/components/Backdrop.js | 2 +- client/components/Card/Body.js | 10 + client/components/Card/Card.js | 56 +- client/components/Card/Card.stories.js | 160 +- client/components/Card/CardDivider.js | 6 + client/components/Card/CardIcon.js | 16 + client/components/Card/Col.js | 10 + client/components/Card/ColSection.js | 10 + client/components/Card/ColTitle.js | 10 + client/components/Card/Footer.js | 6 + client/components/Card/Title.js | 10 + client/components/Card/index.ts | 23 + .../ConfirmOwnerChangeWarningModal.js | 90 +- client/components/CustomFieldsForm.js | 163 +- client/components/DeleteChannelWarning.js | 36 +- client/components/DeleteFileWarning.js | 10 +- client/components/DeleteSuccessModal.tsx | 40 +- client/components/DeleteWarningModal.tsx | 40 +- client/components/DotLeader.stories.js | 14 +- client/components/DotLeader.tsx | 25 +- client/components/Emoji.js | 4 +- client/components/ExternalLink.tsx | 5 +- client/components/FilterByText.tsx | 25 +- client/components/GenericModal.stories.js | 5 +- client/components/GenericModal.tsx | 46 +- client/components/GenericTable.stories.js | 22 +- client/components/GenericTable/HeaderCell.tsx | 14 +- client/components/GenericTable/LoadingRow.tsx | 13 +- client/components/GenericTable/SortIcon.tsx | 30 +- client/components/GenericTable/index.js | 121 +- client/components/Header/Avatar.tsx | 7 + client/components/Header/Button.tsx | 6 + client/components/Header/Content.tsx | 17 + client/components/Header/Header.stories.js | 134 +- client/components/Header/Header.tsx | 147 +- client/components/Header/HeaderDivider.tsx | 6 + client/components/Header/HeaderIcon.tsx | 24 + client/components/Header/HeaderLink.tsx | 24 + client/components/Header/HeaderTag.tsx | 14 + client/components/Header/HeaderTagIcon.tsx | 13 + .../components/Header/HeaderTagSkeleton.tsx | 5 + client/components/Header/Row.tsx | 8 + client/components/Header/State.tsx | 11 + client/components/Header/Subtitle.tsx | 8 + client/components/Header/Title.tsx | 8 + client/components/Header/ToolBox.tsx | 6 + client/components/Header/ToolBoxAction.tsx | 32 + .../components/Header/ToolBoxActionBadge.tsx | 18 + client/components/Header/index.js | 3 - client/components/Header/index.ts | 40 + client/components/LocalTime.js | 12 + client/components/Logo.js | 70 +- client/components/MarkdownText.stories.js | 5 +- client/components/MarkdownText.tsx | 19 +- client/components/Message/Actions/Action.tsx | 38 + client/components/Message/Actions/Actions.tsx | 32 + client/components/Message/Actions/index.tsx | 37 +- .../Message/Attachments/ActionAttachtment.tsx | 52 +- .../Message/Attachments/Attachment.tsx | 99 - .../Message/Attachments/Attachment/Action.tsx | 8 + .../Attachments/Attachment/Attachment.tsx | 22 + .../Attachment/AttachmentPropsBase.ts | 10 + .../Message/Attachments/Attachment/Author.tsx | 8 + .../Attachments/Attachment/AuthorAvatar.tsx | 8 + .../Attachments/Attachment/AuthorName.tsx | 8 + .../Message/Attachments/Attachment/Block.tsx | 26 + .../Attachments/Attachment/Collapse.tsx | 20 + .../Attachments/Attachment/Content.tsx | 8 + .../Attachments/Attachment/Details.tsx | 16 + .../Attachments/Attachment/Download.tsx | 26 + .../Message/Attachments/Attachment/Inner.tsx | 6 + .../Message/Attachments/Attachment/Row.tsx | 8 + .../Message/Attachments/Attachment/Size.tsx | 16 + .../Message/Attachments/Attachment/Text.tsx | 8 + .../Message/Attachments/Attachment/Thumb.tsx | 10 + .../Message/Attachments/Attachment/Title.tsx | 8 + .../Attachments/Attachment/TitleLink.tsx | 18 + .../Message/Attachments/Attachment/index.tsx | 36 + .../Message/Attachments/AttachmentProps.ts | 10 + .../Attachments/Attachments.stories.js | 74 +- .../Message/Attachments/Attachments.tsx | 24 + .../Message/Attachments/DefaultAttachment.tsx | 147 +- .../Message/Attachments/FieldsAttachment.tsx | 19 - .../Attachments/FieldsAttachment/Field.tsx | 19 + .../FieldsAttachment/ShortField.tsx | 9 + .../Attachments/FieldsAttachment/index.tsx | 21 + .../Message/Attachments/FileProp.ts | 7 + .../Attachments/Files/AudioAttachment.tsx | 37 +- .../Files/GenericFileAttachment.tsx | 31 +- .../Attachments/Files/ImageAttachment.tsx | 44 +- .../Attachments/Files/PDFAttachment.tsx | 37 +- .../Attachments/Files/VideoAttachment.tsx | 42 +- .../Message/Attachments/Files/index.tsx | 29 +- .../components/Message/Attachments/Item.tsx | 24 + .../Message/Attachments/QuoteAttachment.tsx | 74 +- .../Attachments/components/Dimensions.ts | 4 + .../Attachments/components/Image.stories.js | 2 +- .../Message/Attachments/components/Image.tsx | 95 +- .../Attachments/components/ImageBox.tsx | 20 + .../Message/Attachments/components/Load.tsx | 32 + .../Message/Attachments/components/Retry.tsx | 32 + .../Attachments/context/AttachmentContext.tsx | 9 +- .../Message/Attachments/hooks/useCollapse.tsx | 9 +- .../components/Message/Attachments/index.tsx | 39 +- .../providers/AttachmentProvider.tsx | 28 +- client/components/Message/Message.stories.js | 40 - .../components/Message/Metrics/Broadcast.tsx | 16 +- client/components/Message/Metrics/Content.tsx | 8 + .../Message/Metrics/ContentItem.tsx | 10 + .../components/Message/Metrics/Discussion.tsx | 29 +- .../Message/Metrics/Metrics.stories.js | 45 + client/components/Message/Metrics/Metrics.tsx | 14 + .../Message/Metrics/MetricsFollowing.tsx | 10 + .../Message/Metrics/MetricsItem.tsx | 18 + .../Message/Metrics/MetricsItemIcon.tsx | 8 + .../Message/Metrics/MetricsItemLabel.tsx | 8 + client/components/Message/Metrics/Reply.tsx | 14 + client/components/Message/Metrics/Thread.tsx | 90 +- client/components/Message/Metrics/index.tsx | 13 + .../components/Message/NotificationStatus.js | 18 - .../Message/NotificationStatus/All.js | 9 + .../Message/NotificationStatus/Me.js | 9 + .../NotificationStatus/NotificationStatus.js | 8 + .../Message/NotificationStatus/Unread.js | 9 + .../Message/NotificationStatus/index.ts | 3 + .../components/Message/helpers/followSyle.js | 15 +- client/components/Message/index.tsx | 24 - .../ModalSeparator/ModalSeparator.tsx | 6 +- client/components/ModalSeparator/index.js | 3 - client/components/ModalSeparator/index.ts | 1 + client/components/NotAuthorizedPage.js | 14 +- .../components/NotAuthorizedPage.stories.js | 3 +- .../Omnichannel/modals/CloseChatModal.js | 82 +- .../Omnichannel/modals/ForwardChatModal.js | 119 +- .../modals/ReturnChatQueueModal.tsx | 38 +- .../Omnichannel/modals/TranscriptModal.tsx | 124 +- client/components/Page.tsx | 108 - client/components/{ => Page}/Page.stories.js | 46 +- client/components/Page/Page.tsx | 25 + client/components/Page/PageContent.tsx | 18 + client/components/Page/PageContext.ts | 7 + client/components/Page/PageHeader.tsx | 54 + .../components/Page/PageScrollableContent.tsx | 25 + .../Page/PageScrollableContentWithShadow.tsx | 24 + client/components/Page/index.ts | 12 + client/components/PageSkeleton.js | 36 +- client/components/PlanTag.js | 13 +- client/components/PortalWrapper.js | 13 - client/components/RoomAutoComplete.js | 32 - client/components/RoomAutoComplete/Avatar.js | 10 + .../RoomAutoComplete/RoomAutoComplete.js | 51 + client/components/RoomAutoComplete/index.ts | 1 + client/components/RoomForeword.js | 60 +- .../components/ScrollableContentWrapper.tsx | 85 +- client/components/Sidebar.js | 101 - client/components/Sidebar/Content.js | 16 + client/components/Sidebar/GenericItem.js | 35 + client/components/Sidebar/Header.js | 27 + client/components/Sidebar/ItemsAssembler.js | 24 + client/components/Sidebar/NavigationItem.js | 37 + client/components/Sidebar/Sidebar.js | 10 + client/components/Sidebar/index.ts | 14 + client/components/Skeleton.js | 20 +- client/components/SortList.js | 137 - client/components/SortList/GroupingList.js | 96 + client/components/SortList/SortList.js | 22 + client/components/SortList/SortListItem.js | 30 + client/components/SortList/SortModeList.js | 61 + client/components/SortList/ViewModeList.js | 95 + client/components/SortList/index.ts | 1 + client/components/Subtitle.js | 18 +- client/components/TextCopy.js | 64 +- client/components/UTCClock.js | 18 +- client/components/UserAutoComplete/Avatar.js | 10 + .../UserAutoComplete/UserAutoComplete.js | 40 + .../UserAutoComplete.stories.js | 10 + client/components/UserAutoComplete/index.js | 1 + client/components/UserCard.js | 97 - client/components/UserCard/Action.js | 6 + client/components/UserCard/Info.js | 8 + client/components/UserCard/Role.js | 10 + client/components/UserCard/Roles.js | 11 + client/components/UserCard/UserCard.js | 98 + .../{ => UserCard}/UserCard.stories.js | 14 +- .../components/UserCard/UserCardContainer.js | 20 + client/components/UserCard/Username.js | 24 + client/components/UserCard/index.ts | 14 + client/components/UserStatus.js | 40 - client/components/UserStatus.stories.js | 14 - client/components/UserStatus/Away.js | 7 + client/components/UserStatus/Busy.js | 7 + client/components/UserStatus/Loading.js | 7 + client/components/UserStatus/Offline.js | 7 + client/components/UserStatus/Online.js | 7 + .../UserStatus/ReactiveUserStatus.js | 11 + client/components/UserStatus/UserStatus.js | 23 + .../UserStatus/UserStatus.stories.js | 13 + client/components/UserStatus/index.ts | 14 + client/components/UserStatusMenu.js | 63 +- client/components/VerticalBar.js | 145 - client/components/VerticalBar/VerticalBar.js | 32 + .../VerticalBar/VerticalBarAction.js | 8 + .../VerticalBar/VerticalBarActionBack.js | 9 + .../VerticalBar/VerticalBarActions.js | 8 + .../VerticalBar/VerticalBarButton.js | 8 + .../VerticalBar/VerticalBarClose.js | 11 + .../VerticalBar/VerticalBarContent.js | 9 + .../VerticalBar/VerticalBarFooter.js | 15 + .../VerticalBar/VerticalBarHeader.js | 33 + .../components/VerticalBar/VerticalBarIcon.js | 8 + .../VerticalBar/VerticalBarInnerContent.js | 17 + .../VerticalBarScrollableContent.js | 17 + .../VerticalBar/VerticalBarSkeleton.js | 25 + .../components/VerticalBar/VerticalBarText.js | 8 + client/components/VerticalBar/index.js | 30 + client/components/avatar/AppAvatar.js | 8 +- client/components/avatar/BaseAvatar.tsx | 4 +- client/components/avatar/RoomAvatar.js | 4 +- client/components/avatar/RoomAvatarEditor.js | 66 +- client/components/avatar/UserAvatar.tsx | 9 +- client/components/avatar/UserAvatarEditor.js | 86 - .../UserAvatarEditor/UserAvatarEditor.js | 119 + .../UserAvatarEditor/UserAvatarSuggestions.js | 37 + .../avatar/UserAvatarEditor/index.ts | 1 + client/components/burger/BurgerBadge.js | 22 +- .../components/burger/BurgerBadge.stories.js | 15 +- client/components/burger/BurgerIcon.js | 68 +- .../components/burger/BurgerIcon.stories.js | 13 +- client/components/burger/BurgerMenuButton.js | 28 +- .../burger/BurgerMenuButton.stories.js | 13 +- client/components/burger/Line.js | 45 + client/components/burger/Wrapper.js | 19 + .../ConnectionStatusAlert.stories.js | 50 - ...tatusAlert.css => ConnectionStatusBar.css} | 2 +- ...nStatusAlert.js => ConnectionStatusBar.js} | 52 +- .../ConnectionStatusBar.stories.js | 38 + client/components/data/Counter.js | 32 +- client/components/data/Counter.stories.js | 12 +- client/components/data/CounterSet.js | 18 +- client/components/data/CounterSet.stories.js | 16 +- client/components/data/Growth.js | 10 +- client/components/data/Growth.stories.js | 16 +- .../components/data/NegativeGrowthSymbol.js | 12 +- .../data/NegativeGrowthSymbol.stories.js | 8 +- .../components/data/PositiveGrowthSymbol.js | 12 +- .../data/PositiveGrowthSymbol.stories.js | 14 +- client/components/helpers.js | 3 +- client/components/withDoNotAskAgain.tsx | 46 +- client/contexts/AuthorizationContext.ts | 49 +- client/contexts/AvatarUrlContext.ts | 11 +- client/contexts/CustomSoundContext.ts | 3 +- client/contexts/EditableSettingsContext.ts | 16 +- client/contexts/LayoutContext.ts | 7 +- client/contexts/OmnichannelContext.ts | 3 +- client/contexts/RouterContext.ts | 99 +- .../contexts/ServerContext/ServerContext.ts | 78 +- client/contexts/ServerContext/endpoints.ts | 36 +- .../endpoints/v1/chat/followMessage.ts | 6 +- .../endpoints/v1/chat/getDiscussions.ts | 2 +- .../endpoints/v1/chat/getMessage.ts | 4 +- .../endpoints/v1/chat/getThreadsList.ts | 2 +- .../endpoints/v1/chat/unfollowMessage.ts | 6 +- .../endpoints/v1/custom-user-status/list.ts | 4 +- .../endpoints/v1/emoji-custom/list.ts | 4 +- .../endpoints/v1/livechat/appearance.ts | 4 +- .../endpoints/v1/livechat/onHold.ts | 4 +- .../endpoints/v1/livechat/visitorInfo.ts | 4 +- .../endpoints/v1/teams/addRooms.ts | 5 +- .../endpoints/v1/teams/listRooms.ts | 11 +- client/contexts/ServerContext/methods.ts | 12 +- .../ServerContext/methods/saveRoomSettings.ts | 54 +- client/contexts/SettingsContext.ts | 21 +- client/contexts/SidebarContext.ts | 3 +- client/contexts/TranslationContext.ts | 21 +- client/contexts/UserContext.ts | 96 +- client/hooks/lists/useRecordList.ts | 4 +- .../hooks/lists/useScrollableMessageList.ts | 28 +- client/hooks/lists/useScrollableRecordList.ts | 2 +- .../lists/useStreamUpdatesForMessageList.ts | 29 +- client/hooks/useAsyncState.ts | 55 +- client/hooks/useClipboardWithToast.js | 6 +- client/hooks/useComponentDidUpdate.js | 7 +- client/hooks/useDir.js | 4 +- client/hooks/useDontAskAgain.ts | 6 +- client/hooks/useEndpointAction.js | 58 +- client/hooks/useEndpointData.ts | 23 +- client/hooks/useEndpointUpload.js | 33 +- client/hooks/useForm.ts | 137 +- client/hooks/useFormatDate.js | 2 +- client/hooks/useFormatDateAndTime.js | 27 +- client/hooks/useFormatDuration.js | 43 +- client/hooks/useFormatMemorySize.js | 2 +- client/hooks/useFormatTime.js | 25 +- client/hooks/usePolledMethodData.ts | 6 +- client/hooks/usePresence.ts | 4 +- client/hooks/usePreventProgation.ts | 3 +- client/hooks/useResizeInlineBreakpoint.js | 7 +- client/hooks/useRoomIcon.tsx | 19 +- client/hooks/useTimeAgo.js | 35 +- client/hooks/useTimezoneNameList.js | 2 +- client/hooks/useTimezoneTime.js | 2 +- client/hooks/useUTCClock.js | 6 + client/hooks/useUpdateAvatar.js | 49 +- client/hooks/useUserData.ts | 23 +- .../{importPackages.js => importPackages.ts} | 40 +- client/lib/asyncState/AsyncState.ts | 15 +- client/lib/asyncState/AsyncStatePhase.ts | 2 +- client/lib/banners.ts | 9 +- client/lib/capitalize.spec.ts | 12 +- client/lib/clickableItem.js | 29 +- client/lib/createRouteGroup.ts | 30 +- client/lib/createSidebarItems.ts | 6 +- client/lib/download.spec.ts | 10 +- client/lib/download.ts | 38 +- client/lib/getUserEmailAddress.ts | 2 +- client/lib/getUserEmailVerified.ts | 2 +- client/lib/goToRoomById.ts | 23 + client/lib/lists/DiscussionsList.ts | 14 +- client/lib/lists/FilesList.ts | 2 +- client/lib/lists/RecordList.ts | 11 +- client/lib/lists/ThreadsList.ts | 31 +- client/lib/meteorCallWrapper.ts | 14 +- client/lib/minimongo/bson.spec.ts | 2 +- client/lib/minimongo/comparisons.spec.ts | 8 +- client/lib/minimongo/comparisons.ts | 4 +- client/lib/minimongo/lookups.spec.ts | 4 +- client/lib/minimongo/lookups.ts | 3 +- client/lib/minimongo/query.ts | 148 +- client/lib/minimongo/sort.ts | 40 +- client/lib/minimongo/types.ts | 17 +- client/lib/portals/blazeLayout.ts | 32 + client/lib/portals/createEphemeralPortal.ts | 13 + client/lib/portals/createLazyElement.ts | 41 + client/lib/portals/createLazyPortal.ts | 10 + .../lib/portals/createTemplateForComponent.ts | 48 + client/lib/portals/portalsSubscription.ts | 47 + client/lib/portals/renderRouteComponent.ts | 89 + client/lib/presence.ts | 53 +- client/lib/renderMessageBody.ts | 12 +- .../PrivateSettingsCachedCollection.ts | 15 +- client/lib/userData.ts | 10 +- client/{main.js => main.ts} | 10 +- client/methods/deleteMessage.js | 14 +- client/methods/hideRoom.js | 21 +- client/methods/openRoom.js | 19 +- client/methods/toggleFavorite.js | 19 +- client/methods/updateMessage.js | 33 +- client/notifications/UsersNameChanged.js | 41 - client/notifications/notification.js | 87 - client/notifications/updateAvatar.js | 10 - client/notifications/updateUserState.js | 11 - client/omnichannel/chats/ChatTab.js | 105 - .../chats/contextualBar/ChatInfo.js | 280 - .../chats/contextualBar/ChatRoomForm.js | 235 - .../omnichannel/chats/contextualBar/index.js | 36 - client/omnichannel/contacts/ContactTab.js | 97 - .../contacts/contextualBar/ContactForm.js | 245 - .../contacts/contextualBar/ContactInfo.js | 152 - .../contacts/contextualBar/index.js | 40 - .../directory/OmnichannelDirectoryPage.js | 110 - client/omnichannel/directory/Skeleton.js | 11 - client/omnichannel/routes.js | 94 - client/polyfills/childNodeRemove.ts | 16 + client/polyfills/{cssVars.js => cssVars.ts} | 75 +- client/polyfills/customEventPolyfill.js | 16 - client/polyfills/customEventPolyfill.ts | 23 + client/polyfills/index.js | 24 - client/polyfills/index.ts | 6 + client/polyfills/objectFromEntries.ts | 5 + client/providers/AuthorizationProvider.tsx | 40 +- client/providers/AvatarUrlProvider.tsx | 35 +- client/providers/ConnectionStatusProvider.tsx | 5 +- client/providers/CustomSoundProvider.tsx | 5 +- client/providers/EditableSettingsProvider.tsx | 134 +- client/providers/LayoutProvider.tsx | 55 +- client/providers/MeteorProvider.js | 71 +- client/providers/ModalProvider.js | 28 +- client/providers/OmniChannelProvider.tsx | 125 - client/providers/OmnichannelProvider.tsx | 144 + client/providers/RouterProvider.tsx | 11 +- client/providers/ServerProvider.js | 27 +- client/providers/SessionProvider.tsx | 7 +- client/providers/SettingsProvider.tsx | 121 +- client/providers/SidebarProvider.tsx | 5 +- client/providers/ToastMessagesProvider.tsx | 9 +- client/providers/TranslationProvider.js | 24 +- client/providers/UserProvider.tsx | 57 +- .../createReactiveSubscriptionFactory.ts | 43 +- client/reactAdapters.js | 209 - client/sidebar/Item/Condensed.js | 57 +- client/sidebar/Item/Condensed.stories.js | 125 +- client/sidebar/Item/Extended.js | 85 +- client/sidebar/Item/Extended.stories.js | 172 +- client/sidebar/Item/ExtendedSkeleton.js | 18 +- client/sidebar/Item/Medium.js | 57 +- client/sidebar/Item/Medium.stories.js | 123 +- .../Item/skeletons/CondensedSkeleton.js | 16 +- .../sidebar/Item/skeletons/MediumSkeleton.js | 16 +- .../Item/skeletons/Skeleton.stories.js | 2 +- client/sidebar/RoomList.js | 230 - client/sidebar/RoomList/RoomList.js | 66 + client/sidebar/RoomList/Row.js | 35 + .../RoomList/ScrollerWithCustomProps.js | 18 + .../RoomList/SideBarItemTemplateWithData.js | 163 + client/sidebar/RoomList/SidebarIcon.js | 12 + client/sidebar/RoomList/index.ts | 1 + .../RoomList/normalizeSidebarMessage.js | 24 + client/sidebar/RoomMenu.js | 166 +- client/sidebar/Sidebar.stories.js | 32 +- client/sidebar/header/CreateChannel.js | 350 +- .../sidebar/header/CreateChannelWithData.js | 121 + client/sidebar/header/UserAvatarButton.js | 68 +- client/sidebar/header/UserDropdown.js | 171 +- client/sidebar/header/actions/CreateRoom.js | 25 +- .../sidebar/header/actions/CreateRoomList.js | 87 +- .../header/actions/CreateRoomListItem.js | 38 +- client/sidebar/header/actions/Directory.js | 4 +- client/sidebar/header/actions/Home.js | 4 +- client/sidebar/header/actions/Login.js | 13 +- client/sidebar/header/actions/Search.js | 13 +- client/sidebar/header/actions/Sort.js | 15 +- client/sidebar/header/index.js | 52 +- client/sidebar/hooks/useAvatarTemplate.js | 6 +- client/sidebar/hooks/useQueryOptions.js | 19 +- client/sidebar/hooks/useRoomList.ts | 32 +- .../sidebar/hooks/useSidebarPaletteColor.js | 234 +- client/sidebar/search/Row.js | 34 + .../sidebar/search/ScrollerWithCustomProps.js | 18 + client/sidebar/search/SearchList.js | 208 +- client/sidebar/search/UserItem.js | 41 + client/sidebar/sections/Omnichannel.js | 43 +- client/startup/appRoot.tsx | 20 + client/startup/banners.ts | 12 +- .../startup/contextualBar/exportMessages.ts | 30 +- .../contextualBar/{index.js => index.ts} | 0 client/startup/{e2e.js => e2e.ts} | 109 +- ...ilVerification.js => emailVerification.ts} | 19 +- client/startup/{i18n.js => i18n.ts} | 57 +- client/startup/{index.js => index.ts} | 9 +- client/startup/listenActiveUsers.ts | 69 + .../{loginViaQuery.js => loginViaQuery.ts} | 2 +- client/startup/messageTypes.ts | 76 + client/startup/notifications/index.ts | 3 + .../notifications/konchatNotifications.ts | 128 + client/startup/notifications/updateAvatar.ts | 16 + .../startup/notifications/usersNameChanged.ts | 69 + .../room.js => client/startup/readReceipt.ts | 8 +- .../{autolinker.js => autolinker.ts} | 4 +- .../{autotranslate.js => autotranslate.ts} | 4 +- .../renderMessage/{emoji.js => emoji.ts} | 4 +- .../{googlevision.js => googlevision.ts} | 4 +- .../{hexcolor.js => hexcolor.ts} | 4 +- .../startup/renderMessage/highlightWords.js | 27 - .../startup/renderMessage/highlightWords.ts | 35 + .../renderMessage/{index.js => index.ts} | 0 .../{issuelink.js => issuelink.ts} | 4 +- .../renderMessage/{katex.js => katex.ts} | 4 +- .../{markdown.js => markdown.ts} | 4 +- ...{mentionsMessage.js => mentionsMessage.ts} | 4 +- .../renderNotification/{index.js => index.ts} | 0 .../{markdown.js => markdown.ts} | 11 +- client/startup/roomObserve.js | 18 - client/startup/roomObserve.ts | 18 + client/{routes.js => startup/routes.ts} | 97 +- client/startup/{startup.js => startup.ts} | 63 +- client/startup/streamMessage/autotranslate.js | 23 - client/startup/streamMessage/autotranslate.ts | 30 + client/startup/streamMessage/googlevision.js | 22 - client/startup/streamMessage/googlevision.ts | 24 + .../streamMessage/{index.js => index.ts} | 0 client/startup/{theme.js => theme.ts} | 38 +- client/startup/unread.js | 89 - client/startup/unread.ts | 100 + ...serSetUtcOffset.js => userSetUtcOffset.ts} | 11 +- client/startup/userStatusManuallySet.ts | 12 + client/startup/usersObserve.js | 26 - client/startup/usersObserve.ts | 40 + client/templates.ts | 241 + client/types/fuselage-tokens-colors.d.ts | 6 + client/types/fuselage-ui-kit.d.ts | 23 +- client/types/fuselage.d.ts | 446 - client/types/global.d.ts | 15 + client/types/kadira-blaze-layout.d.ts | 7 + client/types/kadira-flow-router.d.ts | 45 +- client/types/konecty-user-presence.d.ts | 12 + client/types/less-browser.d.ts | 5 + client/types/meteor-htmljs.d.ts | 5 + client/types/meteor-mongo.d.ts | 15 + client/types/meteor-tracker.d.ts | 5 + client/types/meteor.d.ts | 26 +- client/types/mizzao-timesync.d.ts | 5 + client/views/InfoPanel/Action.tsx | 15 + client/views/InfoPanel/ActionGroup.tsx | 18 + client/views/InfoPanel/Avatar.tsx | 11 + client/views/InfoPanel/Field.tsx | 6 + client/views/InfoPanel/InfoPanel.stories.js | 66 +- client/views/InfoPanel/InfoPanel.tsx | 68 +- client/views/InfoPanel/Label.tsx | 8 + .../InfoPanel/RetentionPolicyCallout.tsx | 32 +- client/views/InfoPanel/Section.tsx | 6 + client/views/InfoPanel/Text.tsx | 13 + client/views/InfoPanel/Title.tsx | 26 + client/views/InfoPanel/index.ts | 22 +- .../views/account/AccountIntegrationsPage.js | 55 +- client/views/account/AccountProfileForm.js | 414 +- client/views/account/AccountProfilePage.js | 193 +- client/views/account/AccountRoute.js | 12 +- client/views/account/AccountSidebar.js | 22 +- client/views/account/ActionConfirmModal.tsx | 57 +- .../preferences/AccountPreferencesPage.js | 111 +- .../views/account/preferences/MyDataModal.tsx | 36 +- .../preferences/PreferencesGlobalSection.js | 41 +- .../PreferencesHighlightsSection.js | 30 +- .../PreferencesLocalizationSection.js | 29 +- .../preferences/PreferencesMessagesSection.js | 314 +- .../preferences/PreferencesMyDataSection.js | 146 +- .../PreferencesNotificationsSection.js | 219 +- .../preferences/PreferencesSoundSection.js | 130 +- .../PreferencesUserPresenceSection.js | 66 +- .../account/security/AccountSecurityPage.js | 50 +- .../account/security/BackupCodesModal.tsx | 46 +- client/views/account/security/EndToEnd.js | 77 +- .../views/account/security/TwoFactorEmail.js | 57 +- .../views/account/security/TwoFactorTOTP.js | 92 +- .../account/security/VerifyCodeModal.tsx | 65 +- client/views/account/sidebarItems.js | 24 +- .../views/account/tokens/AccountTokensPage.js | 20 +- .../views/account/tokens/AccountTokensRow.tsx | 32 +- .../account/tokens/AccountTokensTable.js | 201 +- client/views/account/tokens/AddToken.js | 90 +- client/views/account/tokens/InfoModal.tsx | 19 +- client/views/admin/AdministrationLayout.tsx | 4 +- client/views/admin/AdministrationRouter.js | 18 +- client/views/admin/apps/APIsDisplay.tsx | 49 +- client/views/admin/apps/AppDetailsPage.js | 75 +- .../admin/apps/AppDetailsPageContent.tsx | 186 +- client/views/admin/apps/AppInstallPage.js | 108 +- client/views/admin/apps/AppLogsPage.js | 107 +- client/views/admin/apps/AppMenu.js | 170 +- .../admin/apps/AppPermissionsReviewModal.js | 72 +- client/views/admin/apps/AppRow.tsx | 102 +- client/views/admin/apps/AppSetting.js | 63 + client/views/admin/apps/AppSettings.js | 66 - .../views/admin/apps/AppSettingsAssembler.js | 23 + client/views/admin/apps/AppStatus.js | 92 +- client/views/admin/apps/AppsContext.tsx | 2 +- client/views/admin/apps/AppsPage.js | 34 +- client/views/admin/apps/AppsProvider.tsx | 92 +- client/views/admin/apps/AppsRoute.js | 30 +- client/views/admin/apps/AppsTable.js | 67 +- client/views/admin/apps/AppsWhatIsIt.js | 46 +- client/views/admin/apps/CloudLoginModal.js | 38 +- client/views/admin/apps/IframeModal.js | 12 +- client/views/admin/apps/LoadingDetails.tsx | 15 +- client/views/admin/apps/LogEntry.tsx | 26 +- client/views/admin/apps/LogItem.tsx | 22 +- client/views/admin/apps/LogsLoading.tsx | 5 +- client/views/admin/apps/MarketplacePage.js | 38 +- client/views/admin/apps/MarketplaceRow.tsx | 110 +- client/views/admin/apps/MarketplaceTable.js | 88 +- client/views/admin/apps/PriceDisplay.js | 23 +- client/views/admin/apps/SettingsDisplay.tsx | 30 +- client/views/admin/apps/WarningModal.js | 36 +- client/views/admin/apps/helpers.js | 40 +- client/views/admin/apps/hooks/useAppInfo.ts | 14 +- .../views/admin/apps/hooks/useFilteredApps.ts | 4 +- client/views/admin/cloud/CloudPage.js | 96 +- client/views/admin/cloud/CloudRoute.js | 2 +- .../admin/cloud/ConnectToCloudSection.js | 50 +- client/views/admin/cloud/CopyStep.tsx | 82 +- .../cloud/ManualWorkspaceRegistrationModal.js | 20 +- client/views/admin/cloud/PasteStep.tsx | 95 +- .../admin/cloud/TroubleshootingSection.js | 45 +- client/views/admin/cloud/WhatIsItSection.js | 34 +- .../admin/cloud/WorkspaceLoginSection.js | 53 +- .../cloud/WorkspaceRegistrationSection.js | 51 +- .../views/admin/customEmoji/AddCustomEmoji.js | 133 +- client/views/admin/customEmoji/CustomEmoji.js | 75 +- .../admin/customEmoji/CustomEmojiRoute.js | 74 +- .../admin/customEmoji/EditCustomEmoji.tsx | 160 +- .../customEmoji/EditCustomEmojiWithData.tsx | 48 +- .../admin/customSounds/AddCustomSound.js | 137 +- .../views/admin/customSounds/AdminSounds.js | 93 +- .../admin/customSounds/AdminSoundsRoute.js | 91 +- .../admin/customSounds/EditCustomSound.js | 193 +- client/views/admin/customSounds/EditSound.js | 183 + client/views/admin/customSounds/lib.js | 6 +- .../customUserStatus/AddCustomUserStatus.js | 70 +- .../customUserStatus/CustomUserStatus.js | 81 +- .../customUserStatus/CustomUserStatusRoute.js | 82 +- .../customUserStatus/EditCustomUserStatus.js | 132 +- .../EditCustomUserStatusWithData.tsx | 59 +- .../emailInbox/EmailInboxEditWithData.js | 25 + .../views/admin/emailInbox/EmailInboxForm.js | 392 +- .../views/admin/emailInbox/EmailInboxPage.js | 47 +- .../views/admin/emailInbox/EmailInboxRoute.js | 2 +- .../views/admin/emailInbox/EmailInboxTable.js | 114 +- .../views/admin/emailInbox/SendTestButton.js | 33 + client/views/admin/emailInbox/Skeleton.js | 20 +- .../FederationDashboardPage.js | 20 +- .../FederationDashboardRoute.tsx | 2 +- .../federationDashboard/OverviewSection.js | 63 +- .../federationDashboard/ServersSection.js | 22 +- .../views/admin/import/ImportHistoryPage.js | 156 +- .../admin/import/ImportOperationSummary.js | 105 +- .../import/ImportOperationSummary.stories.js | 12 +- .../import/ImportOperationSummarySkeleton.js | 39 + .../views/admin/import/ImportProgressPage.js | 86 +- client/views/admin/import/ImportRoute.js | 4 +- client/views/admin/import/NewImportPage.js | 272 +- client/views/admin/import/PrepareChannels.tsx | 134 +- .../views/admin/import/PrepareImportPage.js | 171 +- client/views/admin/import/PrepareUsers.tsx | 138 +- client/views/admin/{index.js => index.ts} | 0 client/views/admin/info/DeploymentCard.js | 122 +- client/views/admin/info/DescriptionList.js | 38 +- .../admin/info/DescriptionList.stories.js | 20 +- .../views/admin/info/DescriptionListEntry.js | 26 + client/views/admin/info/Feature.js | 13 + client/views/admin/info/InformationRoute.js | 57 +- client/views/admin/info/InstancesCard.js | 50 +- client/views/admin/info/InstancesModal.js | 118 +- client/views/admin/info/LicenseCard.js | 124 +- client/views/admin/info/NewInformationPage.js | 132 +- .../views/admin/info/OfflineLicenseModal.js | 135 +- client/views/admin/info/PushCard.js | 40 +- client/views/admin/info/TextSeparator.js | 16 + client/views/admin/info/UsageCard.js | 325 +- client/views/admin/info/UsagePieGraph.js | 87 +- .../admin/integrations/FilterByTypeAndText.js | 36 + .../admin/integrations/IncomingWebhookForm.js | 414 +- .../admin/integrations/IntegrationRow.js | 35 + .../admin/integrations/IntegrationsPage.js | 54 +- .../admin/integrations/IntegrationsRoute.js | 19 +- .../admin/integrations/IntegrationsTable.js | 207 +- .../integrations/OutgoiongWebhookForm.js | 578 +- .../integrations/edit/EditIncomingWebhook.js | 121 +- .../edit/EditIncomingWebhookWithData.js | 43 + .../integrations/edit/EditIntegrationsPage.js | 50 +- .../integrations/edit/EditOutgoingWebhook.js | 145 +- .../edit/EditOutgoingWebhookWithData.js | 43 + .../admin/integrations/edit/HistoryContent.js | 43 + .../admin/integrations/edit/HistoryItem.js | 226 + .../edit/OutgoingWebhookHistoryPage.js | 276 +- .../admin/integrations/exampleIncomingData.js | 20 +- client/views/admin/integrations/new/NewBot.js | 11 +- .../integrations/new/NewIncomingWebhook.js | 51 +- .../integrations/new/NewIntegrationsPage.js | 64 +- .../integrations/new/NewOutgoingWebhook.js | 65 +- .../views/admin/integrations/new/NewZapier.js | 63 +- client/views/admin/invites/InviteRow.js | 100 + client/views/admin/invites/InvitesPage.js | 163 +- client/views/admin/invites/InvitesRoute.js | 2 +- client/views/admin/mailer/Mailer.js | 196 +- client/views/admin/mailer/Mailer.stories.js | 3 +- client/views/admin/mailer/MailerRoute.js | 7 +- client/views/admin/oauthApps/EditOauthApp.js | 161 + .../admin/oauthApps/EditOauthAppWithData.js | 54 + client/views/admin/oauthApps/OAuthAddApp.js | 94 +- client/views/admin/oauthApps/OAuthAppsPage.js | 48 +- .../views/admin/oauthApps/OAuthAppsRoute.js | 4 +- .../views/admin/oauthApps/OAuthAppsTable.js | 64 +- client/views/admin/oauthApps/OAuthEditApp.js | 185 - .../views/admin/permissions/EditRolePage.js | 78 +- .../permissions/EditRolePageContainer.js | 19 + .../admin/permissions/FilterComponent.js | 26 + client/views/admin/permissions/NewRolePage.js | 33 +- .../views/admin/permissions/PermissionRow.js | 78 + .../permissions/PermissionsContextBar.js | 33 +- .../admin/permissions/PermissionsRouter.js | 6 +- .../admin/permissions/PermissionsTable.js | 280 +- client/views/admin/permissions/RoleCell.js | 37 + client/views/admin/permissions/RoleForm.js | 100 +- client/views/admin/permissions/RoleHeader.js | 40 + client/views/admin/permissions/UserRow.js | 45 + client/views/admin/permissions/UsersInRole.js | 97 - .../admin/permissions/UsersInRolePage.js | 97 + .../permissions/UsersInRolePageContainer.js | 19 + .../admin/permissions/UsersInRoleTable.js | 124 +- .../permissions/UsersInRoleTableContainer.js | 41 + client/views/admin/rooms/EditRoom.js | 336 +- .../views/admin/rooms/EditRoomContextBar.js | 12 + client/views/admin/rooms/EditRoomWithData.js | 34 + .../views/admin/rooms/FilterByTypeAndText.js | 118 + client/views/admin/rooms/RoomsPage.js | 38 +- client/views/admin/rooms/RoomsRoute.js | 2 +- client/views/admin/rooms/RoomsTable.js | 333 +- client/views/admin/routes.js | 12 +- client/views/admin/settings/GroupPage.js | 145 +- .../views/admin/settings/GroupPage.stories.js | 12 +- .../views/admin/settings/GroupPageSkeleton.js | 36 + client/views/admin/settings/GroupSelector.tsx | 4 +- .../views/admin/settings/MemoizedSetting.js | 68 + .../admin/settings/ResetSettingButton.js | 28 +- .../settings/ResetSettingButton.stories.js | 2 +- client/views/admin/settings/Section.js | 99 +- .../views/admin/settings/Section.stories.js | 2 +- .../views/admin/settings/SectionSkeleton.js | 22 + client/views/admin/settings/Setting.js | 204 +- .../views/admin/settings/Setting.stories.js | 102 +- .../views/admin/settings/SettingSkeleton.js | 17 + client/views/admin/settings/SettingsRoute.js | 10 +- .../admin/settings/groups/AssetsGroupPage.js | 41 +- .../admin/settings/groups/GenericGroupPage.js | 19 +- .../admin/settings/groups/OAuthGroupPage.js | 153 +- .../settings/inputs/ActionSettingInput.js | 36 +- .../inputs/ActionSettingInput.stories.js | 35 +- .../settings/inputs/AssetSettingInput.js | 75 +- .../inputs/AssetSettingInput.stories.js | 36 +- .../settings/inputs/BooleanSettingInput.js | 38 +- .../inputs/BooleanSettingInput.stories.js | 34 +- .../views/admin/settings/inputs/CodeMirror.js | 108 + .../admin/settings/inputs/CodeSettingInput.js | 181 +- .../inputs/CodeSettingInput.stories.js | 35 +- .../settings/inputs/ColorSettingInput.js | 137 +- .../inputs/ColorSettingInput.stories.js | 31 +- .../admin/settings/inputs/FontSettingInput.js | 52 +- .../inputs/FontSettingInput.stories.js | 36 +- .../settings/inputs/GenericSettingInput.js | 52 +- .../inputs/GenericSettingInput.stories.js | 36 +- .../admin/settings/inputs/IntSettingInput.js | 54 +- .../inputs/IntSettingInput.stories.js | 36 +- .../settings/inputs/LanguageSettingInput.js | 54 +- .../inputs/LanguageSettingInput.stories.js | 36 +- .../inputs/MultiSelectSettingInput.js | 14 +- .../inputs/MultiSelectSettingInput.stories.js | 26 +- .../settings/inputs/PasswordSettingInput.js | 52 +- .../inputs/PasswordSettingInput.stories.js | 31 +- .../inputs/RelativeUrlSettingInput.js | 48 +- .../inputs/RelativeUrlSettingInput.stories.js | 36 +- .../settings/inputs/RoomPickSettingInput.js | 99 +- .../settings/inputs/SelectSettingInput.js | 64 +- .../inputs/SelectSettingInput.stories.js | 26 +- .../settings/inputs/StringSettingInput.js | 89 +- .../inputs/StringSettingInput.stories.js | 41 +- client/views/admin/sidebar/AdminSidebar.js | 38 +- .../views/admin/sidebar/AdminSidebarPages.tsx | 8 +- .../admin/sidebar/AdminSidebarSettings.tsx | 83 +- client/views/admin/sidebarItems.js | 39 +- client/views/admin/users/AddUser.js | 137 +- client/views/admin/users/EditUser.js | 189 +- client/views/admin/users/EditUserWithData.js | 37 + client/views/admin/users/InviteUsers.js | 38 +- client/views/admin/users/UserForm.js | 396 +- client/views/admin/users/UserInfo.js | 70 +- client/views/admin/users/UserInfoActions.js | 382 +- client/views/admin/users/UserRow.js | 78 + client/views/admin/users/UsersPage.js | 71 +- client/views/admin/users/UsersRoute.js | 2 +- client/views/admin/users/UsersTable.js | 261 +- client/views/admin/viewLogs/ViewLogs.js | 125 +- .../views/admin/viewLogs/ViewLogs.stories.js | 11 +- client/views/banners/LegacyBanner.tsx | 37 +- client/views/banners/UiKitBanner.tsx | 53 +- client/views/blocks/ConnectedModalBlock.js | 186 + client/views/blocks/MessageBlock.js | 15 +- client/views/blocks/ModalBlock.js | 280 +- client/views/blocks/index.js | 10 - client/views/blocks/textParsers.js | 23 + client/views/directory/ChannelsTab.js | 113 +- client/views/directory/ChannelsTable.js | 199 + client/views/directory/DirectoryPage.js | 54 +- client/views/directory/RoomTags.js | 18 + client/views/directory/TeamsTab.js | 106 +- client/views/directory/TeamsTable.js | 166 + client/views/directory/UserTab.js | 103 +- client/views/directory/UserTable.js | 175 + client/views/directory/hooks.js | 28 +- client/views/hooks/useActionSpread.ts | 24 +- client/views/hooks/useMembersList.ts | 24 +- client/views/location/MapView.tsx | 8 +- client/views/location/MapViewFallback.tsx | 14 +- client/views/location/MapViewImage.tsx | 10 +- .../login/ResetPassword/ResetPassword.js | 92 +- .../ResetPassword/ResetPassword.stories.js | 4 +- client/views/login/index.js | 12 - client/views/notFound/NotFoundPage.js | 37 +- .../omnichannel/DepartmentAutoComplete.js | 52 +- .../views/omnichannel/OmnichannelRouter.tsx | 10 +- client/views/omnichannel/agents/AddAgent.js | 41 + client/views/omnichannel/agents/AgentEdit.js | 214 +- .../omnichannel/agents/AgentEditWithData.js | 43 + client/views/omnichannel/agents/AgentInfo.js | 104 +- .../omnichannel/agents/AgentInfoAction.js | 11 + .../omnichannel/agents/AgentInfoActions.js | 68 + client/views/omnichannel/agents/AgentsPage.js | 87 +- .../views/omnichannel/agents/AgentsRoute.js | 316 +- .../omnichannel/agents/RemoveAgentButton.js | 48 + .../omnichannel/analytics/AgentOverview.js | 49 +- .../omnichannel/analytics/AnalyticsPage.js | 118 +- .../omnichannel/analytics/DateRangePicker.js | 134 +- .../analytics/InterchangeableChart.js | 30 +- .../views/omnichannel/analytics/Overview.js | 47 +- .../omnichannel/appearance/AppearanceForm.tsx | 352 +- .../omnichannel/appearance/AppearancePage.tsx | 90 +- .../appearance/AppearancePageContainer.tsx | 42 + .../businessHours/BusinessHoursForm.js | 59 +- .../BusinessHoursForm.stories.js | 12 +- .../BusinessHoursFormContainer.js | 64 +- .../businessHours/BusinessHoursPage.js | 33 +- .../businessHours/BusinessHoursRouter.js | 18 +- .../businessHours/EditBusinessHoursPage.js | 99 +- .../businessHours/NewBusinessHoursPage.js | 65 +- .../businessHours/TimeRangeFieldsAssembler.js | 38 +- .../businessHours/TimeRangeInput.js | 32 +- .../businessHours/mapBusinessHoursForm.js | 6 +- .../currentChats/CurrentChatsPage.js | 231 +- .../currentChats/CurrentChatsRoute.js | 289 +- .../omnichannel/currentChats/FilterByText.js | 190 + .../views/omnichannel/currentChats/Label.js | 6 + .../currentChats/RemoveAllClosed.js | 45 + .../currentChats/RemoveChatButton.js | 50 + .../customFields/CustomFieldsForm.js | 96 +- .../customFields/CustomFieldsForm.stories.js | 12 +- .../customFields/CustomFieldsPage.js | 60 +- .../customFields/CustomFieldsRoute.js | 194 +- .../customFields/EditCustomFieldsPage.js | 97 +- .../EditCustomFieldsPageContainer.js | 36 + .../customFields/NewCustomFieldsPage.js | 58 +- .../customFields/RemoveCustomFieldButton.js | 50 + .../views/omnichannel/departments/AddAgent.js | 41 + .../views/omnichannel/departments/AgentRow.js | 46 + client/views/omnichannel/departments/Count.js | 39 + .../omnichannel/departments/DepartmentEdit.js | 357 - .../departments/DepartmentsAgentsTable.js | 173 +- .../departments/DepartmentsPage.js | 66 +- .../departments/DepartmentsRoute.js | 213 +- .../omnichannel/departments/EditDepartment.js | 500 + .../departments/EditDepartmentWithData.js | 25 + client/views/omnichannel/departments/Order.js | 39 + .../departments/RemoveAgentButton.js | 34 + .../departments/RemoveDepartmentButton.js | 48 + .../directory/ChatsContextualBar.js | 61 + .../directory/ContactContextualBar.js | 57 + .../omnichannel/directory/ContextualBar.js | 25 + .../directory/OmnichannelDirectoryPage.js | 52 + .../views/omnichannel/directory/Skeleton.js | 13 + .../omnichannel/directory/chats/ChatTab.js | 17 + .../omnichannel/directory/chats/ChatTable.js | 174 + .../chats/contextualBar/AgentField.js | 45 + .../directory/chats/contextualBar/ChatInfo.js | 198 + .../chats/contextualBar/ChatsContextualBar.js | 44 + .../chats/contextualBar/ContactField.js | 54 + .../chats/contextualBar/CustomField.js | 31 + .../chats/contextualBar/DepartmentField.js | 27 + .../directory/chats/contextualBar/Info.js | 14 + .../directory/chats/contextualBar/Label.js | 6 + .../chats/contextualBar/PriorityField.js | 31 + .../directory/chats/contextualBar/RoomEdit.js | 219 + .../chats/contextualBar/RoomEditWithData.js | 26 + .../chats/contextualBar/VisitorClientInfo.js | 48 + .../chats/contextualBar/VisitorData.js | 37 + .../directory/contacts/ContactTab.js | 17 + .../directory/contacts/ContactTable.js | 159 + .../contextualBar/ContactEditWithData.js | 27 + .../contacts/contextualBar/ContactInfo.js | 178 + .../contacts/contextualBar/ContactNewEdit.js | 263 + .../contextualBar/ContactsContextualBar.js | 51 + .../contacts/contextualBar/CustomField.js | 31 + .../directory/contacts/contextualBar/Info.js | 14 + .../directory/contacts/contextualBar/Label.js | 6 + .../omnichannel/facebook/FacebookPage.tsx | 239 +- .../facebook/FacebookPageContainer.tsx | 143 + .../views/omnichannel/facebook/PageToggle.tsx | 35 + .../facebook/PageToggleAssembler.tsx | 29 + .../omnichannel/installation/Installation.js | 57 +- .../views/omnichannel/installation/Wrapper.js | 20 + .../views/omnichannel/managers/AddManager.js | 41 + .../omnichannel/managers/ManagersPage.js | 87 +- .../omnichannel/managers/ManagersRoute.js | 194 +- .../managers/RemoveManagerButton.js | 47 + .../RealTimeMonitoringPage.js | 217 +- .../charts/AgentStatusChart.js | 26 +- .../realTimeMonitoring/charts/Chart.js | 14 +- .../charts/ChatDurationChart.js | 34 +- .../realTimeMonitoring/charts/ChatsChart.js | 31 +- .../charts/ChatsPerAgentChart.js | 28 +- .../charts/ChatsPerDepartmentChart.js | 28 +- .../charts/ResponseTimesChart.js | 44 +- .../charts/getMomentChartLabelsAndData.js | 6 +- .../charts/getMomentCurrentLabel.js | 5 +- .../charts/useUpdateChartData.js | 13 +- .../counter/CounterContainer.js | 20 +- .../realTimeMonitoring/counter/CounterItem.js | 30 +- .../realTimeMonitoring/counter/CounterRow.js | 44 +- .../counter/CounterRow.stories.js | 16 +- .../overviews/AgentsOverview.js | 8 +- .../overviews/ChatsOverview.js | 2 +- .../overviews/ConversationOverview.js | 2 +- .../overviews/ProductivityOverview.js | 10 +- client/views/omnichannel/routes.js | 23 +- .../sidebar/OmnichannelSidebar.tsx | 36 +- client/views/omnichannel/sidebarItems.js | 36 +- .../omnichannel/triggers/EditTriggerPage.js | 100 +- .../triggers/EditTriggerPageContainer.js | 25 + .../omnichannel/triggers/NewTriggerPage.js | 66 +- .../triggers/TriggersForm.stories.js | 16 +- .../omnichannel/triggers/TriggersForm.tsx | 213 +- .../omnichannel/triggers/TriggersPage.js | 62 +- .../views/omnichannel/triggers/TriggersRow.js | 76 + .../omnichannel/triggers/TriggersTable.js | 166 +- .../triggers/TriggersTableContainer.js | 37 + .../omnichannel/webhooks/WebhooksPage.js | 219 +- .../webhooks/WebhooksPageContainer.js | 48 + .../room/Announcement/Announcement.stories.js | 3 +- .../views/room/Announcement/Announcement.tsx | 54 +- .../Announcement/AnnouncementComponent.tsx | 53 + .../room/Announcement/AnnouncementModal.tsx | 12 +- client/views/room/Announcement/index.tsx | 4 +- client/views/room/Header/Burger.js | 13 +- client/views/room/Header/DirectRoomHeader.js | 15 + client/views/room/Header/Header.js | 150 +- .../views/room/Header/HeaderIconWithRoom.js | 11 + .../Omnichannel/QuickActions/QuickActions.tsx | 240 +- .../Header/Omnichannel/QuickActions/index.js | 4 - .../Header/Omnichannel/QuickActions/index.ts | 2 + client/views/room/Header/ParentRoom.js | 18 + .../views/room/Header/ParentRoomWithData.js | 17 + .../room/Header/ParentRoomWithEndpointData.js | 34 + client/views/room/Header/ParentTeam.js | 48 + client/views/room/Header/RoomHeader.js | 58 + client/views/room/Header/RoomTitle.js | 13 + client/views/room/Header/ToolBox/ToolBox.tsx | 122 +- client/views/room/Header/ToolBox/index.js | 4 - client/views/room/Header/ToolBox/index.ts | 2 + client/views/room/Header/icons/Encrypted.js | 17 +- client/views/room/Header/icons/Favorite.js | 23 +- client/views/room/Header/icons/Translate.js | 9 +- client/views/room/Header/index.js | 3 - client/views/room/Header/index.ts | 1 + client/views/room/MemberListRouter.js | 22 +- client/views/room/Room.stories.js | 16 +- client/views/room/Room/Aside.js | 7 + client/views/room/Room/Body.js | 7 + client/views/room/Room/Footer.js | 7 + client/views/room/Room/LazyComponent.js | 11 + client/views/room/Room/Room.js | 85 + client/views/room/Room/RoomWithData.js | 12 + client/views/room/Room/index.ts | 1 + client/views/room/UserCard/index.js | 80 +- client/views/room/adapters.js | 99 - client/views/room/components/BlazeTemplate.js | 26 +- client/views/room/components/Message.js | 66 - .../components/MessageTemplate/BodyClamp.js | 28 + .../components/MessageTemplate/Container.js | 12 + .../room/components/MessageTemplate/Header.js | 22 + .../components/MessageTemplate/Message.js | 20 + .../components/MessageTemplate/Timestamp.js | 12 + .../components/MessageTemplate/Username.js | 18 + .../room/components/MessageTemplate/index.ts | 6 + .../components/MessageTemplate/isIterable.js | 7 + client/views/room/components/RoomTemplate.js | 28 +- .../room/components/VerticalBarOldActions.js | 29 +- client/views/room/contexts/RoomContext.ts | 3 +- .../AutoTranslate/AutoTranslate.js | 121 +- .../AutoTranslate/AutoTranslate.stories.js | 8 +- .../AutoTranslate/AutoTranslateWithData.js | 70 + .../room/contextualBar/AutoTranslate/index.js | 3 - .../room/contextualBar/AutoTranslate/index.ts | 1 + .../room/contextualBar/Call/BBB/CallBBB.tsx | 127 +- .../views/room/contextualBar/Call/BBB/D.tsx | 73 + .../room/contextualBar/Call/BBB/index.js | 3 - .../room/contextualBar/Call/BBB/index.ts | 1 + .../Call/Jitsi/CallJitsWithData.js | 169 + .../contextualBar/Call/Jitsi/CallJitsi.js | 201 +- .../Call/Jitsi/CallJitsi.stories.js | 26 +- .../Call/Jitsi/components/CallModal.js | 45 +- .../room/contextualBar/Call/Jitsi/index.js | 3 - .../room/contextualBar/Call/Jitsi/index.ts | 1 + .../contextualBar/Call/Jitsi/lib/Jitsi.js | 90 +- .../Call/Jitsi/lib/JitsiBridge.js | 32 +- .../Discussions/DiscussionList.js | 98 + .../room/contextualBar/Discussions/Row.js | 37 + .../Discussions/components/Message.js | 102 +- .../Discussions/components/Message.stories.js | 3 +- .../room/contextualBar/Discussions/index.js | 173 - .../room/contextualBar/Discussions/index.ts | 1 + .../contextualBar/Discussions/mapProps.js | 13 + .../Discussions/normalizeThreadMessage.js | 22 + .../Discussions/useDiscussionsList.ts | 17 +- .../contextualBar/Discussions/withData.js | 70 + .../ExportMessages/ExportMessages.js | 51 + .../ExportMessages/FileExport.js | 91 + .../ExportMessages/MailExportForm.js | 190 + .../contextualBar/ExportMessages/index.js | 294 - .../contextualBar/ExportMessages/index.ts | 1 + .../ChannelToTeamModal/ChannelToTeamModal.js | 27 +- .../Info/ChannelToTeamModal/StepOne.js | 43 +- .../Info/ChannelToTeamModal/StepTwo.js | 35 +- .../contextualBar/Info/ConvertToTeamModal.js | 25 +- .../Info/EditRoomInfo/EditChannel.js | 581 + .../Info/EditRoomInfo/EditChannelWithData.js | 20 + .../Info/EditRoomInfo/EditRoomInfo.js | 451 - .../contextualBar/Info/EditRoomInfo/index.js | 3 - .../contextualBar/Info/EditRoomInfo/index.ts | 1 + .../contextualBar/Info/RoomInfo/RoomInfo.js | 414 +- .../Info/RoomInfo/RoomInfo.stories.js | 87 +- .../Info/RoomInfo/RoomInfoWithData.js | 205 + .../room/contextualBar/Info/RoomInfo/index.js | 3 - .../room/contextualBar/Info/RoomInfo/index.ts | 1 + client/views/room/contextualBar/Info/index.js | 10 +- .../KeyboardShortcuts/KeyboardShortcuts.js | 24 +- .../KeyboardShortcuts.stories.js | 18 +- .../KeyboardShortcutsWithClose.js | 11 + .../KeyboardShortcuts/ShortcutSection.js | 14 + .../contextualBar/KeyboardShortcuts/index.js | 3 - .../contextualBar/KeyboardShortcuts/index.ts | 1 + .../NotificationPreferences.js | 211 +- ....js => NotificationPreferences.stories.js} | 41 +- .../NotificationPreferencesWithData.js | 97 + .../components/NotificationByDevice.js | 26 +- .../components/NotificationToogle.js | 26 +- .../components/Preferences.js | 6 +- .../NotificationPreferences/index.js | 3 - .../NotificationPreferences/index.ts | 1 + client/views/room/contextualBar/OTR/OTR.js | 111 +- .../room/contextualBar/OTR/OTR.stories.js | 86 +- .../views/room/contextualBar/OTR/OTRModal.js | 21 +- .../room/contextualBar/OTR/OTRWithData.js | 69 + client/views/room/contextualBar/OTR/index.js | 3 - client/views/room/contextualBar/OTR/index.ts | 1 + .../PruneMessages/DateTimeRow.js | 28 + .../PruneMessages/DialogPruneMessages.js | 14 + .../PruneMessages/PruneMessages.js | 266 +- .../PruneMessages/PruneMessages.stories.js | 24 +- .../PruneMessages/PruneMessagesWithData.js | 248 + .../room/contextualBar/PruneMessages/index.js | 3 - .../room/contextualBar/PruneMessages/index.ts | 1 + .../room/contextualBar/RoomFiles/RoomFiles.js | 175 +- .../RoomFiles/RoomFiles.stories.js | 48 +- .../RoomFiles/RoomFilesWithData.js | 72 + .../views/room/contextualBar/RoomFiles/Row.js | 29 + .../RoomFiles/components/FileItem.js | 97 +- .../RoomFiles/components/FileItem.stories.js | 12 +- .../RoomFiles/components/FileItemIcon.js | 149 +- .../RoomFiles/components/MenuItem.js | 41 + .../RoomFiles/hooks/useFileList.js | 7 +- .../RoomFiles/hooks/useFilesList.ts | 19 +- .../hooks/useMessageDeletionIsAllowed.js | 25 +- .../room/contextualBar/RoomFiles/index.js | 3 - .../room/contextualBar/RoomFiles/index.ts | 1 + .../RoomMembers/AddUsers/AddUsers.js | 74 +- .../RoomMembers/AddUsers/AddUsers.stories.js | 36 +- .../RoomMembers/AddUsers/AddUsersWithData.js | 54 + .../RoomMembers/AddUsers/index.js | 3 - .../RoomMembers/AddUsers/index.ts | 1 + .../RoomMembers/EditInvite/EditInvite.js | 95 +- .../EditInvite/EditInvite.stories.js | 26 +- .../EditInvite/EditInviteWithData.js | 42 + .../RoomMembers/EditInvite/index.js | 3 - .../RoomMembers/EditInvite/index.ts | 1 + .../RoomMembers/InviteUsers/InviteUsers.js | 122 +- .../InviteUsers/InviteUsers.stories.js | 22 +- .../InviteUsers/WrappedInviteUsers.js | 98 + .../RoomMembers/InviteUsers/index.js | 3 - .../RoomMembers/InviteUsers/index.ts | 1 + .../RoomMembers/List/DefaultRow.js | 26 + .../RoomMembers/List/RoomMembers.js | 236 +- .../RoomMembers/List/RoomMembersWithData.js | 115 + .../RoomMembers/List/components/MemberItem.js | 64 +- .../List/components/UserActions.js | 28 + .../RoomMembers/RoomMembers.stories.js | 24 +- .../room/contextualBar/RoomMembers/index.js | 3 - .../room/contextualBar/RoomMembers/index.ts | 1 + .../views/room/contextualBar/Threads/Row.js | 63 + .../room/contextualBar/Threads/ThreadList.js | 149 + .../Threads/components/Message.js | 131 +- .../Threads/components/Message.stories.js | 4 +- .../views/room/contextualBar/Threads/index.js | 303 - .../views/room/contextualBar/Threads/index.ts | 1 + .../room/contextualBar/Threads/mapProps.js | 20 + .../Threads/normalizeThreadMessage.js | 22 + .../contextualBar/Threads/useThreadsList.ts | 17 +- .../room/contextualBar/Threads/withData.js | 72 + .../room/contextualBar/UserInfo/Action.js | 11 + .../room/contextualBar/UserInfo/Avatar.js | 9 + .../room/contextualBar/UserInfo/UserInfo.js | 150 + .../UserInfo/UserInfo.stories.js | 17 +- .../UserInfo/UserInfoWithData.js | 108 + .../room/contextualBar/UserInfo/Username.js | 9 + .../UserInfo/actions/UserActions.js | 53 +- .../room/contextualBar/UserInfo/index.js | 232 +- .../hooks/useDataWithLoadMore.ts | 39 +- client/views/room/hooks/useUserInfoActions.js | 439 +- client/views/room/hooks/useUserRoom.js | 5 +- client/views/room/index.js | 58 - .../lib/QuickActions/QuickActionsContext.tsx | 5 +- .../room/lib/QuickActions/defaultActions.ts | 1 - client/views/room/lib/QuickActions/index.tsx | 22 +- .../views/room/lib/Toolbox/ToolboxContext.tsx | 5 +- .../views/room/lib/Toolbox/defaultActions.ts | 30 +- client/views/room/lib/Toolbox/generator.tsx | 11 +- client/views/room/lib/Toolbox/index.tsx | 17 +- client/views/room/providers/RoomProvider.tsx | 18 +- .../views/room/providers/ToolboxProvider.tsx | 151 +- client/views/room/providers/VirtualAction.tsx | 52 + client/views/root/AppRoot.tsx | 18 + client/views/root/BlazeLayoutWrapper.tsx | 61 + client/views/root/PortalWrapper.ts | 30 + client/views/root/PortalsWrapper.tsx | 19 + client/views/setupWizard/Pager.js | 20 +- client/views/setupWizard/Pager.stories.js | 17 +- client/views/setupWizard/SetupWizardPage.js | 103 +- client/views/setupWizard/SetupWizardState.js | 61 +- client/views/setupWizard/SideBar.js | 165 +- client/views/setupWizard/SideBar.stories.js | 10 +- client/views/setupWizard/Step.js | 9 +- client/views/setupWizard/StepHeader.js | 14 +- .../views/setupWizard/StepHeader.stories.js | 6 +- .../steps/AdminUserInformationStep.js | 155 +- .../steps/AdminUserInformationStep.stories.js | 9 +- client/views/setupWizard/steps/FinalStep.js | 32 +- .../setupWizard/steps/FinalStep.stories.js | 3 +- client/views/setupWizard/steps/Item.js | 14 + client/views/setupWizard/steps/Items.js | 6 + client/views/setupWizard/steps/Option.js | 44 + .../setupWizard/steps/RegisterServerStep.js | 256 +- .../steps/RegisterServerStep.stories.js | 9 +- .../setupWizard/steps/SettingsBasedStep.js | 171 +- .../steps/SettingsBasedStep.stories.js | 9 +- .../teams/CreateTeamModal/CreateTeamModal.tsx | 294 +- .../teams/CreateTeamModal/TeamNameInput.tsx | 15 +- .../teams/CreateTeamModal/UsersInput.tsx | 85 +- .../contextualBar/ChannelDesertionTable.js | 94 +- .../views/teams/contextualBar/ChannelRow.js | 32 + .../views/teams/contextualBar/RoomLinkList.js | 14 +- .../teams/contextualBar/TeamAutocomplete.js | 29 - .../contextualBar/TeamAutocomplete/Avatar.js | 10 + .../TeamAutocomplete/TeamAutocomplete.js | 44 + .../contextualBar/TeamAutocomplete/index.ts | 1 + .../AddExistingModal/AddExistingModal.tsx | 90 +- .../channels/AddExistingModal/RoomsInput.tsx | 106 +- .../channels/BaseTeamsChannels.js | 121 + .../ConfirmationModal/ConfirmationModal.tsx | 48 +- .../contextualBar/channels/RoomActions.js | 131 + .../views/teams/contextualBar/channels/Row.js | 13 + .../channels/TeamsChannelItem.js | 145 +- .../contextualBar/channels/TeamsChannels.js | 141 +- .../channels/hooks/useTeamsChannelList.ts | 25 +- .../teams/contextualBar/channels/index.js | 5 - .../teams/contextualBar/channels/index.ts | 1 + .../info/Delete/ChannelDeletionTable.js | 87 +- .../contextualBar/info/Delete/ChannelRow.js | 29 + .../info/Delete/DeleteTeamModal.js | 45 +- .../info/Delete/DeleteTeamModal.stories.js | 29 +- .../contextualBar/info/Delete/StepOne.js | 22 +- .../contextualBar/info/Delete/StepThree.js | 59 +- .../contextualBar/info/Delete/StepTwo.js | 40 +- .../teams/contextualBar/info/Delete/index.js | 11 +- .../info/Leave/LeaveTeamModal.js | 53 +- .../info/Leave/LeaveTeamModal.stories.js | 25 +- .../teams/contextualBar/info/Leave/StepOne.js | 44 +- .../teams/contextualBar/info/Leave/StepTwo.js | 62 +- .../teams/contextualBar/info/Leave/index.js | 19 +- .../teams/contextualBar/info/TeamsInfo.js | 324 +- .../contextualBar/info/TeamsInfo.stories.js | 87 +- .../contextualBar/info/TeamsInfoWithLogic.js | 157 + .../views/teams/contextualBar/info/index.js | 40 +- .../RemoveUsersModal/BaseRemoveUsersModal.js | 84 + .../RemoveUsersModal/RemoveUsersFirstStep.js | 55 + .../RemoveUsersModal/RemoveUsersModal.js | 188 +- .../RemoveUsersModal.stories.js | 14 +- .../RemoveUsersModal/RemoveUsersSecondStep.js | 47 + .../members/RemoveUsersModal/index.js | 40 - .../members/RemoveUsersModal/index.ts | 1 + .../contextualBar/members/TeamsMembers.js | 50 +- .../teams/contextualBar/members/index.js | 5 - .../teams/contextualBar/members/index.ts | 1 + definition/IMessage.ts | 1 + definition/ISubscription.ts | 3 + definition/IUser.ts | 7 +- definition/IUserSession.ts | 4 +- definition/UserStatus.ts | 2 +- ee/app/auditing/client/routes.js | 11 +- ee/app/engagement-dashboard/client/routes.js | 2 +- ee/client/.eslintrc.js | 129 + ee/client/.prettierrc | 12 + ee/client/audit/AuditLogPage.js | 50 +- ee/client/audit/AuditLogTable.js | 106 +- ee/client/audit/AuditPage.js | 236 +- ee/client/audit/AuditPage.stories.js | 1 - ee/client/audit/DateRangePicker.js | 145 +- ee/client/audit/FilterDisplay.js | 13 + ee/client/audit/Result.js | 44 +- ee/client/audit/RoomAutoComplete.js | 32 - ee/client/audit/RoomAutoComplete/Avatar.js | 10 + .../RoomAutoComplete/RoomAutoComplete.js | 50 + ee/client/audit/RoomAutoComplete/index.ts | 1 + ee/client/audit/UserAutoCompleteMultiple.js | 33 - .../audit/UserAutoCompleteMultiple/Avatar.js | 10 + .../UserAutoCompleteMultiple.js | 51 + .../audit/UserAutoCompleteMultiple/index.ts | 1 + ee/client/audit/UserRow.js | 63 + ee/client/audit/VisitorAutoComplete.js | 36 +- ee/client/index.js | 7 - ee/client/index.ts | 7 + ee/client/omnichannel/BusinessHoursRow.js | 68 + ee/client/omnichannel/BusinessHoursTable.js | 194 +- .../omnichannel/BusinessHoursTable.stories.js | 26 +- .../BusinessHoursTableContainer.js | 32 + ee/client/omnichannel/ContactManager.js | 27 - ee/client/omnichannel/ContactManagerInfo.js | 38 + .../omnichannel/RemoveBusinessHourButton.js | 50 + .../additionalForms/BusinessHoursMultiple.js | 106 +- .../BusinessHoursMultiple.stories.js | 14 +- .../BusinessHoursMultipleContainer.js | 57 + .../additionalForms/BusinessHoursTimeZone.js | 25 +- .../BusinessHoursTimeZone.stories.js | 10 +- .../additionalForms/ContactManager.js | 18 +- .../CustomFieldsAdditionalForm.js | 162 +- .../CustomFieldsAdditionalFormContainer.js | 52 + .../DepartmentBusinessHours.js | 21 +- .../additionalForms/DepartmentForwarding.js | 38 +- .../additionalForms/EeNumberInput.js | 17 +- .../additionalForms/EeTextAreaInput.js | 17 +- .../additionalForms/EeTextInput.js | 17 +- .../additionalForms/MaxChatsPerAgent.js | 32 +- .../MaxChatsPerAgentContainer.js | 19 + .../MaxChatsPerAgentDisplay.js | 18 +- .../additionalForms/PrioritiesSelect.js | 21 +- .../omnichannel/additionalForms/register.js | 56 +- .../cannedResponses/CannedResponseAdd.js | 44 +- .../CannedResponseAdd.stories.js | 10 +- .../cannedResponses/CannedResponseDetails.js | 94 +- .../CannedResponseDetails.stories.js | 10 +- .../cannedResponses/CannedResponseEdit.js | 46 +- .../CannedResponseEdit.stories.js | 10 +- .../cannedResponses/CannedResponseForm.js | 63 +- .../CannedResponseForm.stories.js | 12 +- .../cannedResponses/CannedResponsesList.js | 79 +- .../CannedResponsesList.stories.js | 40 +- .../cannedResponses/CannedResponsesRouter.js | 115 +- .../omnichannel/cannedResponses/index.js | 3 - .../omnichannel/cannedResponses/index.ts | 1 + .../cannedResponses/useCannedResponses.js | 53 +- .../omnichannel/cannedResponses/withData.js | 58 + .../cannedResponses/withResponseData.js | 17 +- .../omnichannel/monitors/MonitorsPage.js | 106 +- .../monitors/MonitorsPageContainer.js | 22 + ee/client/omnichannel/monitors/MonitorsRow.js | 51 + .../omnichannel/monitors/MonitorsTable.js | 134 +- .../omnichannel/priorities/EditPriority.js | 115 - .../omnichannel/priorities/PrioritiesPage.js | 74 +- .../omnichannel/priorities/PrioritiesRoute.js | 211 +- .../omnichannel/priorities/PriorityEdit.js | 131 + .../priorities/PriorityEditWithData.js | 31 + .../omnichannel/priorities/PriorityNew.js | 9 + .../priorities/RemovePriorityButton.js | 53 + ee/client/omnichannel/routes.js | 2 +- ee/client/omnichannel/tags/CurrentChatTags.js | 7 +- ee/client/omnichannel/tags/EditTag.js | 130 - ee/client/omnichannel/tags/RemoveTagButton.js | 53 + ee/client/omnichannel/tags/TagEdit.js | 132 + ee/client/omnichannel/tags/TagEditWithData.js | 43 + ee/client/omnichannel/tags/TagNew.js | 30 + ee/client/omnichannel/tags/TagsPage.js | 72 +- ee/client/omnichannel/tags/TagsRoute.js | 197 +- ee/client/omnichannel/units/EditUnit.js | 169 - .../omnichannel/units/RemoveUnitButton.js | 53 + ee/client/omnichannel/units/UnitEdit.js | 217 + .../omnichannel/units/UnitEditWithData.js | 70 + ee/client/omnichannel/units/UnitNew.js | 51 + ee/client/omnichannel/units/UnitsPage.js | 74 +- ee/client/omnichannel/units/UnitsRoute.js | 198 +- .../services/ddp-streamer/configureServer.ts | 6 +- ee/server/services/presence/Presence.ts | 6 +- .../services/presence/actions/setStatus.ts | 6 +- .../presence/actions/updateUserPresence.ts | 4 +- .../presence/lib/processConnectionStatus.ts | 18 +- imports/message-read-receipt/client/index.js | 4 - imports/message-read-receipt/client/main.js | 11 - .../message-read-receipt/client/message.js | 15 - .../client/readReceipts.html | 16 - .../client/readReceipts.js | 40 - imports/startup/client/index.js | 2 - imports/startup/client/listenActiveUsers.js | 57 - imports/users-presence/server/activeUsers.js | 10 +- package-lock.json | 78070 ++++++++-------- package.json | 22 +- server/modules/listeners/listeners.module.ts | 9 +- server/sdk/types/IPresence.ts | 6 +- 1333 files changed, 82529 insertions(+), 66638 deletions(-) delete mode 100644 .storybook/webpack.config.js delete mode 100644 app/authorization/client/usersNameChanged.js delete mode 100644 app/channel-settings/client/startup/messageTypes.js rename app/channel-settings/client/{startup => }/tabBar.ts (56%) delete mode 100644 app/channel-settings/client/views/Multiselect.js rename imports/message-read-receipt/client/readReceipts.css => app/theme/client/imports/components/read-receipts.css (89%) delete mode 100644 app/ui/client/components/status.html delete mode 100644 app/ui/client/components/status.js create mode 100644 client/.eslintrc.js create mode 100644 client/.prettierrc delete mode 100644 client/adapters.js delete mode 100644 client/components/AppRoot.js delete mode 100644 client/components/AutoComplete.js delete mode 100644 client/components/AutoComplete.stories.js create mode 100644 client/components/Card/Body.js create mode 100644 client/components/Card/CardDivider.js create mode 100644 client/components/Card/CardIcon.js create mode 100644 client/components/Card/Col.js create mode 100644 client/components/Card/ColSection.js create mode 100644 client/components/Card/ColTitle.js create mode 100644 client/components/Card/Footer.js create mode 100644 client/components/Card/Title.js create mode 100644 client/components/Card/index.ts create mode 100644 client/components/Header/Avatar.tsx create mode 100644 client/components/Header/Button.tsx create mode 100644 client/components/Header/Content.tsx create mode 100644 client/components/Header/HeaderDivider.tsx create mode 100644 client/components/Header/HeaderIcon.tsx create mode 100644 client/components/Header/HeaderLink.tsx create mode 100644 client/components/Header/HeaderTag.tsx create mode 100644 client/components/Header/HeaderTagIcon.tsx create mode 100644 client/components/Header/HeaderTagSkeleton.tsx create mode 100644 client/components/Header/Row.tsx create mode 100644 client/components/Header/State.tsx create mode 100644 client/components/Header/Subtitle.tsx create mode 100644 client/components/Header/Title.tsx create mode 100644 client/components/Header/ToolBox.tsx create mode 100644 client/components/Header/ToolBoxAction.tsx create mode 100644 client/components/Header/ToolBoxActionBadge.tsx delete mode 100644 client/components/Header/index.js create mode 100644 client/components/Header/index.ts create mode 100644 client/components/LocalTime.js create mode 100644 client/components/Message/Actions/Action.tsx create mode 100644 client/components/Message/Actions/Actions.tsx delete mode 100644 client/components/Message/Attachments/Attachment.tsx create mode 100644 client/components/Message/Attachments/Attachment/Action.tsx create mode 100644 client/components/Message/Attachments/Attachment/Attachment.tsx create mode 100644 client/components/Message/Attachments/Attachment/AttachmentPropsBase.ts create mode 100644 client/components/Message/Attachments/Attachment/Author.tsx create mode 100644 client/components/Message/Attachments/Attachment/AuthorAvatar.tsx create mode 100644 client/components/Message/Attachments/Attachment/AuthorName.tsx create mode 100644 client/components/Message/Attachments/Attachment/Block.tsx create mode 100644 client/components/Message/Attachments/Attachment/Collapse.tsx create mode 100644 client/components/Message/Attachments/Attachment/Content.tsx create mode 100644 client/components/Message/Attachments/Attachment/Details.tsx create mode 100644 client/components/Message/Attachments/Attachment/Download.tsx create mode 100644 client/components/Message/Attachments/Attachment/Inner.tsx create mode 100644 client/components/Message/Attachments/Attachment/Row.tsx create mode 100644 client/components/Message/Attachments/Attachment/Size.tsx create mode 100644 client/components/Message/Attachments/Attachment/Text.tsx create mode 100644 client/components/Message/Attachments/Attachment/Thumb.tsx create mode 100644 client/components/Message/Attachments/Attachment/Title.tsx create mode 100644 client/components/Message/Attachments/Attachment/TitleLink.tsx create mode 100644 client/components/Message/Attachments/Attachment/index.tsx create mode 100644 client/components/Message/Attachments/AttachmentProps.ts create mode 100644 client/components/Message/Attachments/Attachments.tsx delete mode 100644 client/components/Message/Attachments/FieldsAttachment.tsx create mode 100644 client/components/Message/Attachments/FieldsAttachment/Field.tsx create mode 100644 client/components/Message/Attachments/FieldsAttachment/ShortField.tsx create mode 100644 client/components/Message/Attachments/FieldsAttachment/index.tsx create mode 100644 client/components/Message/Attachments/FileProp.ts create mode 100644 client/components/Message/Attachments/Item.tsx create mode 100644 client/components/Message/Attachments/components/Dimensions.ts create mode 100644 client/components/Message/Attachments/components/ImageBox.tsx create mode 100644 client/components/Message/Attachments/components/Load.tsx create mode 100644 client/components/Message/Attachments/components/Retry.tsx delete mode 100644 client/components/Message/Message.stories.js create mode 100644 client/components/Message/Metrics/Content.tsx create mode 100644 client/components/Message/Metrics/ContentItem.tsx create mode 100644 client/components/Message/Metrics/Metrics.stories.js create mode 100644 client/components/Message/Metrics/Metrics.tsx create mode 100644 client/components/Message/Metrics/MetricsFollowing.tsx create mode 100644 client/components/Message/Metrics/MetricsItem.tsx create mode 100644 client/components/Message/Metrics/MetricsItemIcon.tsx create mode 100644 client/components/Message/Metrics/MetricsItemLabel.tsx create mode 100644 client/components/Message/Metrics/Reply.tsx create mode 100644 client/components/Message/Metrics/index.tsx delete mode 100644 client/components/Message/NotificationStatus.js create mode 100644 client/components/Message/NotificationStatus/All.js create mode 100644 client/components/Message/NotificationStatus/Me.js create mode 100644 client/components/Message/NotificationStatus/NotificationStatus.js create mode 100644 client/components/Message/NotificationStatus/Unread.js create mode 100644 client/components/Message/NotificationStatus/index.ts delete mode 100644 client/components/Message/index.tsx delete mode 100644 client/components/ModalSeparator/index.js create mode 100644 client/components/ModalSeparator/index.ts delete mode 100644 client/components/Page.tsx rename client/components/{ => Page}/Page.stories.js (50%) create mode 100644 client/components/Page/Page.tsx create mode 100644 client/components/Page/PageContent.tsx create mode 100644 client/components/Page/PageContext.ts create mode 100644 client/components/Page/PageHeader.tsx create mode 100644 client/components/Page/PageScrollableContent.tsx create mode 100644 client/components/Page/PageScrollableContentWithShadow.tsx create mode 100644 client/components/Page/index.ts delete mode 100644 client/components/PortalWrapper.js delete mode 100644 client/components/RoomAutoComplete.js create mode 100644 client/components/RoomAutoComplete/Avatar.js create mode 100644 client/components/RoomAutoComplete/RoomAutoComplete.js create mode 100644 client/components/RoomAutoComplete/index.ts delete mode 100644 client/components/Sidebar.js create mode 100644 client/components/Sidebar/Content.js create mode 100644 client/components/Sidebar/GenericItem.js create mode 100644 client/components/Sidebar/Header.js create mode 100644 client/components/Sidebar/ItemsAssembler.js create mode 100644 client/components/Sidebar/NavigationItem.js create mode 100644 client/components/Sidebar/Sidebar.js create mode 100644 client/components/Sidebar/index.ts delete mode 100644 client/components/SortList.js create mode 100644 client/components/SortList/GroupingList.js create mode 100644 client/components/SortList/SortList.js create mode 100644 client/components/SortList/SortListItem.js create mode 100644 client/components/SortList/SortModeList.js create mode 100644 client/components/SortList/ViewModeList.js create mode 100644 client/components/SortList/index.ts create mode 100644 client/components/UserAutoComplete/Avatar.js create mode 100644 client/components/UserAutoComplete/UserAutoComplete.js create mode 100644 client/components/UserAutoComplete/UserAutoComplete.stories.js create mode 100644 client/components/UserAutoComplete/index.js delete mode 100644 client/components/UserCard.js create mode 100644 client/components/UserCard/Action.js create mode 100644 client/components/UserCard/Info.js create mode 100644 client/components/UserCard/Role.js create mode 100644 client/components/UserCard/Roles.js create mode 100644 client/components/UserCard/UserCard.js rename client/components/{ => UserCard}/UserCard.stories.js (55%) create mode 100644 client/components/UserCard/UserCardContainer.js create mode 100644 client/components/UserCard/Username.js create mode 100644 client/components/UserCard/index.ts delete mode 100644 client/components/UserStatus.js delete mode 100644 client/components/UserStatus.stories.js create mode 100644 client/components/UserStatus/Away.js create mode 100644 client/components/UserStatus/Busy.js create mode 100644 client/components/UserStatus/Loading.js create mode 100644 client/components/UserStatus/Offline.js create mode 100644 client/components/UserStatus/Online.js create mode 100644 client/components/UserStatus/ReactiveUserStatus.js create mode 100644 client/components/UserStatus/UserStatus.js create mode 100644 client/components/UserStatus/UserStatus.stories.js create mode 100644 client/components/UserStatus/index.ts delete mode 100644 client/components/VerticalBar.js create mode 100644 client/components/VerticalBar/VerticalBar.js create mode 100644 client/components/VerticalBar/VerticalBarAction.js create mode 100644 client/components/VerticalBar/VerticalBarActionBack.js create mode 100644 client/components/VerticalBar/VerticalBarActions.js create mode 100644 client/components/VerticalBar/VerticalBarButton.js create mode 100644 client/components/VerticalBar/VerticalBarClose.js create mode 100644 client/components/VerticalBar/VerticalBarContent.js create mode 100644 client/components/VerticalBar/VerticalBarFooter.js create mode 100644 client/components/VerticalBar/VerticalBarHeader.js create mode 100644 client/components/VerticalBar/VerticalBarIcon.js create mode 100644 client/components/VerticalBar/VerticalBarInnerContent.js create mode 100644 client/components/VerticalBar/VerticalBarScrollableContent.js create mode 100644 client/components/VerticalBar/VerticalBarSkeleton.js create mode 100644 client/components/VerticalBar/VerticalBarText.js create mode 100644 client/components/VerticalBar/index.js delete mode 100644 client/components/avatar/UserAvatarEditor.js create mode 100644 client/components/avatar/UserAvatarEditor/UserAvatarEditor.js create mode 100644 client/components/avatar/UserAvatarEditor/UserAvatarSuggestions.js create mode 100644 client/components/avatar/UserAvatarEditor/index.ts create mode 100644 client/components/burger/Line.js create mode 100644 client/components/burger/Wrapper.js delete mode 100644 client/components/connectionStatus/ConnectionStatusAlert.stories.js rename client/components/connectionStatus/{ConnectionStatusAlert.css => ConnectionStatusBar.css} (89%) rename client/components/connectionStatus/{ConnectionStatusAlert.js => ConnectionStatusBar.js} (63%) create mode 100644 client/components/connectionStatus/ConnectionStatusBar.stories.js create mode 100644 client/hooks/useUTCClock.js rename client/{importPackages.js => importPackages.ts} (80%) create mode 100644 client/lib/goToRoomById.ts create mode 100644 client/lib/portals/blazeLayout.ts create mode 100644 client/lib/portals/createEphemeralPortal.ts create mode 100644 client/lib/portals/createLazyElement.ts create mode 100644 client/lib/portals/createLazyPortal.ts create mode 100644 client/lib/portals/createTemplateForComponent.ts create mode 100644 client/lib/portals/portalsSubscription.ts create mode 100644 client/lib/portals/renderRouteComponent.ts rename client/{main.js => main.ts} (57%) delete mode 100644 client/notifications/UsersNameChanged.js delete mode 100644 client/notifications/notification.js delete mode 100644 client/notifications/updateAvatar.js delete mode 100644 client/notifications/updateUserState.js delete mode 100644 client/omnichannel/chats/ChatTab.js delete mode 100644 client/omnichannel/chats/contextualBar/ChatInfo.js delete mode 100644 client/omnichannel/chats/contextualBar/ChatRoomForm.js delete mode 100644 client/omnichannel/chats/contextualBar/index.js delete mode 100644 client/omnichannel/contacts/ContactTab.js delete mode 100644 client/omnichannel/contacts/contextualBar/ContactForm.js delete mode 100644 client/omnichannel/contacts/contextualBar/ContactInfo.js delete mode 100644 client/omnichannel/contacts/contextualBar/index.js delete mode 100644 client/omnichannel/directory/OmnichannelDirectoryPage.js delete mode 100644 client/omnichannel/directory/Skeleton.js delete mode 100644 client/omnichannel/routes.js create mode 100644 client/polyfills/childNodeRemove.ts rename client/polyfills/{cssVars.js => cssVars.ts} (51%) delete mode 100644 client/polyfills/customEventPolyfill.js create mode 100644 client/polyfills/customEventPolyfill.ts delete mode 100644 client/polyfills/index.js create mode 100644 client/polyfills/index.ts create mode 100644 client/polyfills/objectFromEntries.ts delete mode 100644 client/providers/OmniChannelProvider.tsx create mode 100644 client/providers/OmnichannelProvider.tsx delete mode 100644 client/reactAdapters.js delete mode 100644 client/sidebar/RoomList.js create mode 100644 client/sidebar/RoomList/RoomList.js create mode 100644 client/sidebar/RoomList/Row.js create mode 100644 client/sidebar/RoomList/ScrollerWithCustomProps.js create mode 100644 client/sidebar/RoomList/SideBarItemTemplateWithData.js create mode 100644 client/sidebar/RoomList/SidebarIcon.js create mode 100644 client/sidebar/RoomList/index.ts create mode 100644 client/sidebar/RoomList/normalizeSidebarMessage.js create mode 100644 client/sidebar/header/CreateChannelWithData.js create mode 100644 client/sidebar/search/Row.js create mode 100644 client/sidebar/search/ScrollerWithCustomProps.js create mode 100644 client/sidebar/search/UserItem.js create mode 100644 client/startup/appRoot.tsx rename client/startup/contextualBar/{index.js => index.ts} (100%) rename client/startup/{e2e.js => e2e.ts} (51%) rename client/startup/{emailVerification.js => emailVerification.ts} (54%) rename client/startup/{i18n.js => i18n.ts} (56%) rename client/startup/{index.js => index.ts} (66%) create mode 100644 client/startup/listenActiveUsers.ts rename client/startup/{loginViaQuery.js => loginViaQuery.ts} (100%) create mode 100644 client/startup/messageTypes.ts create mode 100644 client/startup/notifications/index.ts create mode 100644 client/startup/notifications/konchatNotifications.ts create mode 100644 client/startup/notifications/updateAvatar.ts create mode 100644 client/startup/notifications/usersNameChanged.ts rename imports/message-read-receipt/client/room.js => client/startup/readReceipt.ts (77%) rename client/startup/renderMessage/{autolinker.js => autolinker.ts} (89%) rename client/startup/renderMessage/{autotranslate.js => autotranslate.ts} (85%) rename client/startup/renderMessage/{emoji.js => emoji.ts} (82%) rename client/startup/renderMessage/{googlevision.js => googlevision.ts} (83%) rename client/startup/renderMessage/{hexcolor.js => hexcolor.ts} (83%) delete mode 100644 client/startup/renderMessage/highlightWords.js create mode 100644 client/startup/renderMessage/highlightWords.ts rename client/startup/renderMessage/{index.js => index.ts} (100%) rename client/startup/renderMessage/{issuelink.js => issuelink.ts} (85%) rename client/startup/renderMessage/{katex.js => katex.ts} (85%) rename client/startup/renderMessage/{markdown.js => markdown.ts} (89%) rename client/startup/renderMessage/{mentionsMessage.js => mentionsMessage.ts} (86%) rename client/startup/renderNotification/{index.js => index.ts} (100%) rename client/startup/renderNotification/{markdown.js => markdown.ts} (62%) delete mode 100644 client/startup/roomObserve.js create mode 100644 client/startup/roomObserve.ts rename client/{routes.js => startup/routes.ts} (58%) rename client/startup/{startup.js => startup.ts} (65%) delete mode 100644 client/startup/streamMessage/autotranslate.js create mode 100644 client/startup/streamMessage/autotranslate.ts delete mode 100644 client/startup/streamMessage/googlevision.js create mode 100644 client/startup/streamMessage/googlevision.ts rename client/startup/streamMessage/{index.js => index.ts} (100%) rename client/startup/{theme.js => theme.ts} (75%) delete mode 100644 client/startup/unread.js create mode 100644 client/startup/unread.ts rename client/startup/{userSetUtcOffset.js => userSetUtcOffset.ts} (59%) create mode 100644 client/startup/userStatusManuallySet.ts delete mode 100644 client/startup/usersObserve.js create mode 100644 client/startup/usersObserve.ts create mode 100644 client/templates.ts create mode 100644 client/types/fuselage-tokens-colors.d.ts delete mode 100644 client/types/fuselage.d.ts create mode 100644 client/types/global.d.ts create mode 100644 client/types/kadira-blaze-layout.d.ts create mode 100644 client/types/konecty-user-presence.d.ts create mode 100644 client/types/less-browser.d.ts create mode 100644 client/types/meteor-htmljs.d.ts create mode 100644 client/types/meteor-mongo.d.ts create mode 100644 client/types/meteor-tracker.d.ts create mode 100644 client/types/mizzao-timesync.d.ts create mode 100644 client/views/InfoPanel/Action.tsx create mode 100644 client/views/InfoPanel/ActionGroup.tsx create mode 100644 client/views/InfoPanel/Avatar.tsx create mode 100644 client/views/InfoPanel/Field.tsx create mode 100644 client/views/InfoPanel/Label.tsx create mode 100644 client/views/InfoPanel/Section.tsx create mode 100644 client/views/InfoPanel/Text.tsx create mode 100644 client/views/InfoPanel/Title.tsx create mode 100644 client/views/admin/apps/AppSetting.js delete mode 100644 client/views/admin/apps/AppSettings.js create mode 100644 client/views/admin/apps/AppSettingsAssembler.js create mode 100644 client/views/admin/customSounds/EditSound.js create mode 100644 client/views/admin/emailInbox/EmailInboxEditWithData.js create mode 100644 client/views/admin/emailInbox/SendTestButton.js create mode 100644 client/views/admin/import/ImportOperationSummarySkeleton.js rename client/views/admin/{index.js => index.ts} (100%) create mode 100644 client/views/admin/info/DescriptionListEntry.js create mode 100644 client/views/admin/info/Feature.js create mode 100644 client/views/admin/info/TextSeparator.js create mode 100644 client/views/admin/integrations/FilterByTypeAndText.js create mode 100644 client/views/admin/integrations/IntegrationRow.js create mode 100644 client/views/admin/integrations/edit/EditIncomingWebhookWithData.js create mode 100644 client/views/admin/integrations/edit/EditOutgoingWebhookWithData.js create mode 100644 client/views/admin/integrations/edit/HistoryContent.js create mode 100644 client/views/admin/integrations/edit/HistoryItem.js create mode 100644 client/views/admin/invites/InviteRow.js create mode 100644 client/views/admin/oauthApps/EditOauthApp.js create mode 100644 client/views/admin/oauthApps/EditOauthAppWithData.js delete mode 100644 client/views/admin/oauthApps/OAuthEditApp.js create mode 100644 client/views/admin/permissions/EditRolePageContainer.js create mode 100644 client/views/admin/permissions/FilterComponent.js create mode 100644 client/views/admin/permissions/PermissionRow.js create mode 100644 client/views/admin/permissions/RoleCell.js create mode 100644 client/views/admin/permissions/RoleHeader.js create mode 100644 client/views/admin/permissions/UserRow.js delete mode 100644 client/views/admin/permissions/UsersInRole.js create mode 100644 client/views/admin/permissions/UsersInRolePage.js create mode 100644 client/views/admin/permissions/UsersInRolePageContainer.js create mode 100644 client/views/admin/permissions/UsersInRoleTableContainer.js create mode 100644 client/views/admin/rooms/EditRoomContextBar.js create mode 100644 client/views/admin/rooms/EditRoomWithData.js create mode 100644 client/views/admin/rooms/FilterByTypeAndText.js create mode 100644 client/views/admin/settings/GroupPageSkeleton.js create mode 100644 client/views/admin/settings/MemoizedSetting.js create mode 100644 client/views/admin/settings/SectionSkeleton.js create mode 100644 client/views/admin/settings/SettingSkeleton.js create mode 100644 client/views/admin/settings/inputs/CodeMirror.js create mode 100644 client/views/admin/users/EditUserWithData.js create mode 100644 client/views/admin/users/UserRow.js create mode 100644 client/views/blocks/ConnectedModalBlock.js delete mode 100644 client/views/blocks/index.js create mode 100644 client/views/blocks/textParsers.js create mode 100644 client/views/directory/ChannelsTable.js create mode 100644 client/views/directory/RoomTags.js create mode 100644 client/views/directory/TeamsTable.js create mode 100644 client/views/directory/UserTable.js delete mode 100644 client/views/login/index.js create mode 100644 client/views/omnichannel/agents/AddAgent.js create mode 100644 client/views/omnichannel/agents/AgentEditWithData.js create mode 100644 client/views/omnichannel/agents/AgentInfoAction.js create mode 100644 client/views/omnichannel/agents/AgentInfoActions.js create mode 100644 client/views/omnichannel/agents/RemoveAgentButton.js create mode 100644 client/views/omnichannel/appearance/AppearancePageContainer.tsx create mode 100644 client/views/omnichannel/currentChats/FilterByText.js create mode 100644 client/views/omnichannel/currentChats/Label.js create mode 100644 client/views/omnichannel/currentChats/RemoveAllClosed.js create mode 100644 client/views/omnichannel/currentChats/RemoveChatButton.js create mode 100644 client/views/omnichannel/customFields/EditCustomFieldsPageContainer.js create mode 100644 client/views/omnichannel/customFields/RemoveCustomFieldButton.js create mode 100644 client/views/omnichannel/departments/AddAgent.js create mode 100644 client/views/omnichannel/departments/AgentRow.js create mode 100644 client/views/omnichannel/departments/Count.js delete mode 100644 client/views/omnichannel/departments/DepartmentEdit.js create mode 100644 client/views/omnichannel/departments/EditDepartment.js create mode 100644 client/views/omnichannel/departments/EditDepartmentWithData.js create mode 100644 client/views/omnichannel/departments/Order.js create mode 100644 client/views/omnichannel/departments/RemoveAgentButton.js create mode 100644 client/views/omnichannel/departments/RemoveDepartmentButton.js create mode 100644 client/views/omnichannel/directory/ChatsContextualBar.js create mode 100644 client/views/omnichannel/directory/ContactContextualBar.js create mode 100644 client/views/omnichannel/directory/ContextualBar.js create mode 100644 client/views/omnichannel/directory/OmnichannelDirectoryPage.js create mode 100644 client/views/omnichannel/directory/Skeleton.js create mode 100644 client/views/omnichannel/directory/chats/ChatTab.js create mode 100644 client/views/omnichannel/directory/chats/ChatTable.js create mode 100644 client/views/omnichannel/directory/chats/contextualBar/AgentField.js create mode 100644 client/views/omnichannel/directory/chats/contextualBar/ChatInfo.js create mode 100644 client/views/omnichannel/directory/chats/contextualBar/ChatsContextualBar.js create mode 100644 client/views/omnichannel/directory/chats/contextualBar/ContactField.js create mode 100644 client/views/omnichannel/directory/chats/contextualBar/CustomField.js create mode 100644 client/views/omnichannel/directory/chats/contextualBar/DepartmentField.js create mode 100644 client/views/omnichannel/directory/chats/contextualBar/Info.js create mode 100644 client/views/omnichannel/directory/chats/contextualBar/Label.js create mode 100644 client/views/omnichannel/directory/chats/contextualBar/PriorityField.js create mode 100644 client/views/omnichannel/directory/chats/contextualBar/RoomEdit.js create mode 100644 client/views/omnichannel/directory/chats/contextualBar/RoomEditWithData.js create mode 100644 client/views/omnichannel/directory/chats/contextualBar/VisitorClientInfo.js create mode 100644 client/views/omnichannel/directory/chats/contextualBar/VisitorData.js create mode 100644 client/views/omnichannel/directory/contacts/ContactTab.js create mode 100644 client/views/omnichannel/directory/contacts/ContactTable.js create mode 100644 client/views/omnichannel/directory/contacts/contextualBar/ContactEditWithData.js create mode 100644 client/views/omnichannel/directory/contacts/contextualBar/ContactInfo.js create mode 100644 client/views/omnichannel/directory/contacts/contextualBar/ContactNewEdit.js create mode 100644 client/views/omnichannel/directory/contacts/contextualBar/ContactsContextualBar.js create mode 100644 client/views/omnichannel/directory/contacts/contextualBar/CustomField.js create mode 100644 client/views/omnichannel/directory/contacts/contextualBar/Info.js create mode 100644 client/views/omnichannel/directory/contacts/contextualBar/Label.js create mode 100644 client/views/omnichannel/facebook/FacebookPageContainer.tsx create mode 100644 client/views/omnichannel/facebook/PageToggle.tsx create mode 100644 client/views/omnichannel/facebook/PageToggleAssembler.tsx create mode 100644 client/views/omnichannel/installation/Wrapper.js create mode 100644 client/views/omnichannel/managers/AddManager.js create mode 100644 client/views/omnichannel/managers/RemoveManagerButton.js create mode 100644 client/views/omnichannel/triggers/EditTriggerPageContainer.js create mode 100644 client/views/omnichannel/triggers/TriggersRow.js create mode 100644 client/views/omnichannel/triggers/TriggersTableContainer.js create mode 100644 client/views/omnichannel/webhooks/WebhooksPageContainer.js create mode 100644 client/views/room/Announcement/AnnouncementComponent.tsx create mode 100644 client/views/room/Header/DirectRoomHeader.js create mode 100644 client/views/room/Header/HeaderIconWithRoom.js delete mode 100644 client/views/room/Header/Omnichannel/QuickActions/index.js create mode 100644 client/views/room/Header/Omnichannel/QuickActions/index.ts create mode 100644 client/views/room/Header/ParentRoom.js create mode 100644 client/views/room/Header/ParentRoomWithData.js create mode 100644 client/views/room/Header/ParentRoomWithEndpointData.js create mode 100644 client/views/room/Header/ParentTeam.js create mode 100644 client/views/room/Header/RoomHeader.js create mode 100644 client/views/room/Header/RoomTitle.js delete mode 100644 client/views/room/Header/ToolBox/index.js create mode 100644 client/views/room/Header/ToolBox/index.ts delete mode 100644 client/views/room/Header/index.js create mode 100644 client/views/room/Header/index.ts create mode 100644 client/views/room/Room/Aside.js create mode 100644 client/views/room/Room/Body.js create mode 100644 client/views/room/Room/Footer.js create mode 100644 client/views/room/Room/LazyComponent.js create mode 100644 client/views/room/Room/Room.js create mode 100644 client/views/room/Room/RoomWithData.js create mode 100644 client/views/room/Room/index.ts delete mode 100644 client/views/room/adapters.js delete mode 100644 client/views/room/components/Message.js create mode 100644 client/views/room/components/MessageTemplate/BodyClamp.js create mode 100644 client/views/room/components/MessageTemplate/Container.js create mode 100644 client/views/room/components/MessageTemplate/Header.js create mode 100644 client/views/room/components/MessageTemplate/Message.js create mode 100644 client/views/room/components/MessageTemplate/Timestamp.js create mode 100644 client/views/room/components/MessageTemplate/Username.js create mode 100644 client/views/room/components/MessageTemplate/index.ts create mode 100644 client/views/room/components/MessageTemplate/isIterable.js create mode 100644 client/views/room/contextualBar/AutoTranslate/AutoTranslateWithData.js delete mode 100644 client/views/room/contextualBar/AutoTranslate/index.js create mode 100644 client/views/room/contextualBar/AutoTranslate/index.ts create mode 100644 client/views/room/contextualBar/Call/BBB/D.tsx delete mode 100644 client/views/room/contextualBar/Call/BBB/index.js create mode 100644 client/views/room/contextualBar/Call/BBB/index.ts create mode 100644 client/views/room/contextualBar/Call/Jitsi/CallJitsWithData.js delete mode 100644 client/views/room/contextualBar/Call/Jitsi/index.js create mode 100644 client/views/room/contextualBar/Call/Jitsi/index.ts create mode 100644 client/views/room/contextualBar/Discussions/DiscussionList.js create mode 100644 client/views/room/contextualBar/Discussions/Row.js delete mode 100644 client/views/room/contextualBar/Discussions/index.js create mode 100644 client/views/room/contextualBar/Discussions/index.ts create mode 100644 client/views/room/contextualBar/Discussions/mapProps.js create mode 100644 client/views/room/contextualBar/Discussions/normalizeThreadMessage.js create mode 100644 client/views/room/contextualBar/Discussions/withData.js create mode 100644 client/views/room/contextualBar/ExportMessages/ExportMessages.js create mode 100644 client/views/room/contextualBar/ExportMessages/FileExport.js create mode 100644 client/views/room/contextualBar/ExportMessages/MailExportForm.js delete mode 100644 client/views/room/contextualBar/ExportMessages/index.js create mode 100644 client/views/room/contextualBar/ExportMessages/index.ts create mode 100644 client/views/room/contextualBar/Info/EditRoomInfo/EditChannel.js create mode 100644 client/views/room/contextualBar/Info/EditRoomInfo/EditChannelWithData.js delete mode 100644 client/views/room/contextualBar/Info/EditRoomInfo/EditRoomInfo.js delete mode 100644 client/views/room/contextualBar/Info/EditRoomInfo/index.js create mode 100644 client/views/room/contextualBar/Info/EditRoomInfo/index.ts create mode 100644 client/views/room/contextualBar/Info/RoomInfo/RoomInfoWithData.js delete mode 100644 client/views/room/contextualBar/Info/RoomInfo/index.js create mode 100644 client/views/room/contextualBar/Info/RoomInfo/index.ts create mode 100644 client/views/room/contextualBar/KeyboardShortcuts/KeyboardShortcutsWithClose.js create mode 100644 client/views/room/contextualBar/KeyboardShortcuts/ShortcutSection.js delete mode 100644 client/views/room/contextualBar/KeyboardShortcuts/index.js create mode 100644 client/views/room/contextualBar/KeyboardShortcuts/index.ts rename client/views/room/contextualBar/NotificationPreferences/{NotificationsPreferences.stories.js => NotificationPreferences.stories.js} (65%) create mode 100644 client/views/room/contextualBar/NotificationPreferences/NotificationPreferencesWithData.js delete mode 100644 client/views/room/contextualBar/NotificationPreferences/index.js create mode 100644 client/views/room/contextualBar/NotificationPreferences/index.ts create mode 100644 client/views/room/contextualBar/OTR/OTRWithData.js delete mode 100644 client/views/room/contextualBar/OTR/index.js create mode 100644 client/views/room/contextualBar/OTR/index.ts create mode 100644 client/views/room/contextualBar/PruneMessages/DateTimeRow.js create mode 100644 client/views/room/contextualBar/PruneMessages/DialogPruneMessages.js create mode 100644 client/views/room/contextualBar/PruneMessages/PruneMessagesWithData.js delete mode 100644 client/views/room/contextualBar/PruneMessages/index.js create mode 100644 client/views/room/contextualBar/PruneMessages/index.ts create mode 100644 client/views/room/contextualBar/RoomFiles/RoomFilesWithData.js create mode 100644 client/views/room/contextualBar/RoomFiles/Row.js create mode 100644 client/views/room/contextualBar/RoomFiles/components/MenuItem.js delete mode 100644 client/views/room/contextualBar/RoomFiles/index.js create mode 100644 client/views/room/contextualBar/RoomFiles/index.ts create mode 100644 client/views/room/contextualBar/RoomMembers/AddUsers/AddUsersWithData.js delete mode 100644 client/views/room/contextualBar/RoomMembers/AddUsers/index.js create mode 100644 client/views/room/contextualBar/RoomMembers/AddUsers/index.ts create mode 100644 client/views/room/contextualBar/RoomMembers/EditInvite/EditInviteWithData.js delete mode 100644 client/views/room/contextualBar/RoomMembers/EditInvite/index.js create mode 100644 client/views/room/contextualBar/RoomMembers/EditInvite/index.ts create mode 100644 client/views/room/contextualBar/RoomMembers/InviteUsers/WrappedInviteUsers.js delete mode 100644 client/views/room/contextualBar/RoomMembers/InviteUsers/index.js create mode 100644 client/views/room/contextualBar/RoomMembers/InviteUsers/index.ts create mode 100644 client/views/room/contextualBar/RoomMembers/List/DefaultRow.js create mode 100644 client/views/room/contextualBar/RoomMembers/List/RoomMembersWithData.js create mode 100644 client/views/room/contextualBar/RoomMembers/List/components/UserActions.js delete mode 100644 client/views/room/contextualBar/RoomMembers/index.js create mode 100644 client/views/room/contextualBar/RoomMembers/index.ts create mode 100644 client/views/room/contextualBar/Threads/Row.js create mode 100644 client/views/room/contextualBar/Threads/ThreadList.js delete mode 100644 client/views/room/contextualBar/Threads/index.js create mode 100644 client/views/room/contextualBar/Threads/index.ts create mode 100644 client/views/room/contextualBar/Threads/mapProps.js create mode 100644 client/views/room/contextualBar/Threads/normalizeThreadMessage.js create mode 100644 client/views/room/contextualBar/Threads/withData.js create mode 100644 client/views/room/contextualBar/UserInfo/Action.js create mode 100644 client/views/room/contextualBar/UserInfo/Avatar.js create mode 100644 client/views/room/contextualBar/UserInfo/UserInfo.js create mode 100644 client/views/room/contextualBar/UserInfo/UserInfoWithData.js create mode 100644 client/views/room/contextualBar/UserInfo/Username.js delete mode 100644 client/views/room/index.js create mode 100644 client/views/room/providers/VirtualAction.tsx create mode 100644 client/views/root/AppRoot.tsx create mode 100644 client/views/root/BlazeLayoutWrapper.tsx create mode 100644 client/views/root/PortalWrapper.ts create mode 100644 client/views/root/PortalsWrapper.tsx create mode 100644 client/views/setupWizard/steps/Item.js create mode 100644 client/views/setupWizard/steps/Items.js create mode 100644 client/views/setupWizard/steps/Option.js create mode 100644 client/views/teams/contextualBar/ChannelRow.js delete mode 100644 client/views/teams/contextualBar/TeamAutocomplete.js create mode 100644 client/views/teams/contextualBar/TeamAutocomplete/Avatar.js create mode 100644 client/views/teams/contextualBar/TeamAutocomplete/TeamAutocomplete.js create mode 100644 client/views/teams/contextualBar/TeamAutocomplete/index.ts create mode 100644 client/views/teams/contextualBar/channels/BaseTeamsChannels.js create mode 100644 client/views/teams/contextualBar/channels/RoomActions.js create mode 100644 client/views/teams/contextualBar/channels/Row.js delete mode 100644 client/views/teams/contextualBar/channels/index.js create mode 100644 client/views/teams/contextualBar/channels/index.ts create mode 100644 client/views/teams/contextualBar/info/Delete/ChannelRow.js create mode 100644 client/views/teams/contextualBar/info/TeamsInfoWithLogic.js create mode 100644 client/views/teams/contextualBar/members/RemoveUsersModal/BaseRemoveUsersModal.js create mode 100644 client/views/teams/contextualBar/members/RemoveUsersModal/RemoveUsersFirstStep.js create mode 100644 client/views/teams/contextualBar/members/RemoveUsersModal/RemoveUsersSecondStep.js delete mode 100644 client/views/teams/contextualBar/members/RemoveUsersModal/index.js create mode 100644 client/views/teams/contextualBar/members/RemoveUsersModal/index.ts delete mode 100644 client/views/teams/contextualBar/members/index.js create mode 100644 client/views/teams/contextualBar/members/index.ts create mode 100644 ee/client/.eslintrc.js create mode 100644 ee/client/.prettierrc create mode 100644 ee/client/audit/FilterDisplay.js delete mode 100644 ee/client/audit/RoomAutoComplete.js create mode 100644 ee/client/audit/RoomAutoComplete/Avatar.js create mode 100644 ee/client/audit/RoomAutoComplete/RoomAutoComplete.js create mode 100644 ee/client/audit/RoomAutoComplete/index.ts delete mode 100644 ee/client/audit/UserAutoCompleteMultiple.js create mode 100644 ee/client/audit/UserAutoCompleteMultiple/Avatar.js create mode 100644 ee/client/audit/UserAutoCompleteMultiple/UserAutoCompleteMultiple.js create mode 100644 ee/client/audit/UserAutoCompleteMultiple/index.ts create mode 100644 ee/client/audit/UserRow.js delete mode 100644 ee/client/index.js create mode 100644 ee/client/index.ts create mode 100644 ee/client/omnichannel/BusinessHoursRow.js create mode 100644 ee/client/omnichannel/BusinessHoursTableContainer.js delete mode 100644 ee/client/omnichannel/ContactManager.js create mode 100644 ee/client/omnichannel/ContactManagerInfo.js create mode 100644 ee/client/omnichannel/RemoveBusinessHourButton.js create mode 100644 ee/client/omnichannel/additionalForms/BusinessHoursMultipleContainer.js create mode 100644 ee/client/omnichannel/additionalForms/CustomFieldsAdditionalFormContainer.js create mode 100644 ee/client/omnichannel/additionalForms/MaxChatsPerAgentContainer.js delete mode 100644 ee/client/omnichannel/cannedResponses/index.js create mode 100644 ee/client/omnichannel/cannedResponses/index.ts create mode 100644 ee/client/omnichannel/cannedResponses/withData.js create mode 100644 ee/client/omnichannel/monitors/MonitorsPageContainer.js create mode 100644 ee/client/omnichannel/monitors/MonitorsRow.js delete mode 100644 ee/client/omnichannel/priorities/EditPriority.js create mode 100644 ee/client/omnichannel/priorities/PriorityEdit.js create mode 100644 ee/client/omnichannel/priorities/PriorityEditWithData.js create mode 100644 ee/client/omnichannel/priorities/PriorityNew.js create mode 100644 ee/client/omnichannel/priorities/RemovePriorityButton.js delete mode 100644 ee/client/omnichannel/tags/EditTag.js create mode 100644 ee/client/omnichannel/tags/RemoveTagButton.js create mode 100644 ee/client/omnichannel/tags/TagEdit.js create mode 100644 ee/client/omnichannel/tags/TagEditWithData.js create mode 100644 ee/client/omnichannel/tags/TagNew.js delete mode 100644 ee/client/omnichannel/units/EditUnit.js create mode 100644 ee/client/omnichannel/units/RemoveUnitButton.js create mode 100644 ee/client/omnichannel/units/UnitEdit.js create mode 100644 ee/client/omnichannel/units/UnitEditWithData.js create mode 100644 ee/client/omnichannel/units/UnitNew.js delete mode 100644 imports/message-read-receipt/client/index.js delete mode 100644 imports/message-read-receipt/client/main.js delete mode 100644 imports/message-read-receipt/client/message.js delete mode 100644 imports/message-read-receipt/client/readReceipts.html delete mode 100644 imports/message-read-receipt/client/readReceipts.js delete mode 100644 imports/startup/client/index.js delete mode 100644 imports/startup/client/listenActiveUsers.js diff --git a/.eslintignore b/.eslintignore index 5831f3fab82..6a5d7fc9b82 100644 --- a/.eslintignore +++ b/.eslintignore @@ -18,3 +18,5 @@ imports/client/ !/.storybook/ ee/server/services/dist/** !/.mocharc.js +!/client/.eslintrc.js +!/ee/client/.eslintrc.js diff --git a/.storybook/main.js b/.storybook/main.js index ecfbbfab389..a374e09f945 100644 --- a/.storybook/main.js +++ b/.storybook/main.js @@ -1,3 +1,7 @@ +const path = require('path'); + +const webpack = require('webpack'); + module.exports = { stories: [ '../app/**/*.stories.js', @@ -6,5 +10,70 @@ module.exports = { ], addons: [ '@storybook/addon-essentials', + '@storybook/addon-postcss', ], + webpackFinal: async (config) => { + const cssRule = config.module.rules.find(({ test }) => test.test('index.css')); + + cssRule.use[2].options = { + ...cssRule.use[2].options, + postcssOptions: { + plugins: [ + require('postcss-custom-properties')({ preserve: true }), + require('postcss-media-minmax')(), + require('postcss-selector-not')(), + require('postcss-nested')(), + require('autoprefixer')(), + require('postcss-url')({ url: ({ absolutePath, relativePath, url }) => { + const absoluteDir = absolutePath.slice(0, -relativePath.length); + const relativeDir = path.relative(absoluteDir, path.resolve(__dirname, '../public')); + const newPath = path.join(relativeDir, url); + return newPath; + } }), + ], + }, + }; + + config.module.rules.push({ + test: /\.info$/, + type: 'json', + }); + + config.module.rules.push({ + test: /\.html$/, + use: '@settlin/spacebars-loader', + }); + + config.module.rules.push({ + test: /\.(ts|tsx)$/, + use: [ + { + loader: 'ts-loader', + options: { + compilerOptions: { + noEmit: false, + }, + }, + }, + ], + }); + + config.resolve.extensions.push('.ts', '.tsx'); + + config.plugins.push( + new webpack.NormalModuleReplacementPlugin( + /^meteor/, + require.resolve('./mocks/meteor.js'), + ), + new webpack.NormalModuleReplacementPlugin( + /(app)\/*.*\/(server)\/*/, + require.resolve('./mocks/empty.js'), + ), + ); + + config.mode = 'development'; + config.optimization.usedExports = true; + + return config; + }, }; diff --git a/.storybook/webpack.config.js b/.storybook/webpack.config.js deleted file mode 100644 index 65e19305d63..00000000000 --- a/.storybook/webpack.config.js +++ /dev/null @@ -1,65 +0,0 @@ -'use strict'; - -const path = require('path'); - -const webpack = require('webpack'); - -module.exports = async ({ config }) => { - const cssRule = config.module.rules.find(({ test }) => test.test('index.css')); - - cssRule.use[2].options.plugins = [ - require('postcss-custom-properties')({ preserve: true }), - require('postcss-media-minmax')(), - require('postcss-selector-not')(), - require('postcss-nested')(), - require('autoprefixer')(), - require('postcss-url')({ url: ({ absolutePath, relativePath, url }) => { - const absoluteDir = absolutePath.slice(0, -relativePath.length); - const relativeDir = path.relative(absoluteDir, path.resolve(__dirname, '../public')); - const newPath = path.join(relativeDir, url); - return newPath; - } }), - ]; - - config.module.rules.push({ - test: /\.info$/, - type: 'json', - }); - - config.module.rules.push({ - test: /\.html$/, - use: '@settlin/spacebars-loader', - }); - - config.module.rules.push({ - test: /\.(ts|tsx)$/, - use: [ - { - loader: 'ts-loader', - options: { - compilerOptions: { - noEmit: false, - }, - }, - }, - ], - }); - - config.resolve.extensions.push('.ts', '.tsx'); - - config.plugins.push( - new webpack.NormalModuleReplacementPlugin( - /^meteor/, - require.resolve('./mocks/meteor.js'), - ), - new webpack.NormalModuleReplacementPlugin( - /(app)\/*.*\/(server)\/*/, - require.resolve('./mocks/empty.js'), - ), - ); - - config.mode = 'development'; - config.optimization.usedExports = true; - - return config; -}; diff --git a/app/authorization/client/index.js b/app/authorization/client/index.js index bf484b06455..04692ed0749 100644 --- a/app/authorization/client/index.js +++ b/app/authorization/client/index.js @@ -1,7 +1,6 @@ import { hasAllPermission, hasAtLeastOnePermission, hasPermission, userHasAllPermission } from './hasPermission'; import { hasRole } from './hasRole'; import { AuthorizationUtils } from '../lib/AuthorizationUtils'; -import './usersNameChanged'; import './requiresPermission.html'; import './startup'; diff --git a/app/authorization/client/usersNameChanged.js b/app/authorization/client/usersNameChanged.js deleted file mode 100644 index c498ca472b3..00000000000 --- a/app/authorization/client/usersNameChanged.js +++ /dev/null @@ -1,18 +0,0 @@ -import { Meteor } from 'meteor/meteor'; - -import { Notifications } from '../../notifications'; -import { RoomRoles } from '../../models'; - -Meteor.startup(function() { - Notifications.onLogged('Users:NameChanged', function({ _id, name }) { - RoomRoles.update({ - 'u._id': _id, - }, { - $set: { - 'u.name': name, - }, - }, { - multi: true, - }); - }); -}); diff --git a/app/channel-settings/client/index.js b/app/channel-settings/client/index.js index 64b7f76be00..3e8041d42ce 100644 --- a/app/channel-settings/client/index.js +++ b/app/channel-settings/client/index.js @@ -1,5 +1,3 @@ -import './startup/messageTypes'; -import './startup/tabBar'; -import './views/Multiselect'; +import './tabBar'; export { ChannelSettings } from './lib/ChannelSettings'; diff --git a/app/channel-settings/client/startup/messageTypes.js b/app/channel-settings/client/startup/messageTypes.js deleted file mode 100644 index e693779180f..00000000000 --- a/app/channel-settings/client/startup/messageTypes.js +++ /dev/null @@ -1,67 +0,0 @@ -import { Meteor } from 'meteor/meteor'; - -import { escapeHTML } from '../../../../lib/escapeHTML'; -import { MessageTypes } from '../../../ui-utils'; -import { t } from '../../../utils'; - -Meteor.startup(function() { - MessageTypes.registerType({ - id: 'room_changed_privacy', - system: true, - message: 'room_changed_privacy', - data(message) { - return { - user_by: message.u && message.u.username, - room_type: t(message.msg), - }; - }, - }); - - MessageTypes.registerType({ - id: 'room_changed_topic', - system: true, - message: 'room_changed_topic', - data(message) { - return { - user_by: message.u && message.u.username, - room_topic: escapeHTML(message.msg || `(${ t('None').toLowerCase() })`), - }; - }, - }); - - MessageTypes.registerType({ - id: 'room_changed_avatar', - system: true, - message: 'room_changed_avatar', - data(message) { - return { - user_by: message.u && message.u.username, - }; - }, - }); - - - MessageTypes.registerType({ - id: 'room_changed_announcement', - system: true, - message: 'room_changed_announcement', - data(message) { - return { - user_by: message.u && message.u.username, - room_announcement: escapeHTML(message.msg || `(${ t('None').toLowerCase() })`), - }; - }, - }); - - MessageTypes.registerType({ - id: 'room_changed_description', - system: true, - message: 'room_changed_description', - data(message) { - return { - user_by: message.u && message.u.username, - room_description: escapeHTML(message.msg || `(${ t('None').toLowerCase() })`), - }; - }, - }); -}); diff --git a/app/channel-settings/client/startup/tabBar.ts b/app/channel-settings/client/tabBar.ts similarity index 56% rename from app/channel-settings/client/startup/tabBar.ts rename to app/channel-settings/client/tabBar.ts index e655852ae58..e94f08c7b17 100644 --- a/app/channel-settings/client/startup/tabBar.ts +++ b/app/channel-settings/client/tabBar.ts @@ -1,6 +1,6 @@ import { FC, lazy, LazyExoticComponent } from 'react'; -import { addAction } from '../../../../client/views/room/lib/Toolbox'; +import { addAction } from '../../../client/views/room/lib/Toolbox'; addAction('channel-settings', { groups: ['channel', 'group'], @@ -9,6 +9,6 @@ addAction('channel-settings', { full: true, title: 'Room_Info', icon: 'info-circled', - template: lazy(() => import('../../../../client/views/room/contextualBar/Info')) as LazyExoticComponent, + template: lazy(() => import('../../../client/views/room/contextualBar/Info')) as LazyExoticComponent, order: 7, }); diff --git a/app/channel-settings/client/views/Multiselect.js b/app/channel-settings/client/views/Multiselect.js deleted file mode 100644 index 1f90cc45a38..00000000000 --- a/app/channel-settings/client/views/Multiselect.js +++ /dev/null @@ -1,12 +0,0 @@ -import { HTML } from 'meteor/htmljs'; - -import { createTemplateForComponent } from '../../../../client/reactAdapters'; - -createTemplateForComponent( - 'Multiselect', - () => import('../../../../client/admin/settings/inputs/MultiSelectSettingInput'), - { - // eslint-disable-next-line new-cap - renderContainerView: () => HTML.DIV({ class: 'rc-multiselect', style: 'display: flex;' }), - }, -); diff --git a/app/chatpal-search/client/route.js b/app/chatpal-search/client/route.js index 91f718f1498..8f9905b8b63 100644 --- a/app/chatpal-search/client/route.js +++ b/app/chatpal-search/client/route.js @@ -1,5 +1,4 @@ -import { BlazeLayout } from 'meteor/kadira:blaze-layout'; - +import * as BlazeLayout from '../../../client/lib/portals/blazeLayout'; import { registerAdminRoute } from '../../../client/views/admin'; import { t } from '../../utils'; diff --git a/app/livechat/client/tabBar.ts b/app/livechat/client/tabBar.ts index 0e1240d56a5..1ef8df95426 100644 --- a/app/livechat/client/tabBar.ts +++ b/app/livechat/client/tabBar.ts @@ -7,7 +7,7 @@ addAction('room-info', { id: 'room-info', title: 'Room_Info', icon: 'info-circled', - template: lazy(() => import('../../../client/omnichannel/chats/contextualBar')), + template: lazy(() => import('../../../client/views/omnichannel/directory/chats/contextualBar/ChatsContextualBar')), order: 0, }); diff --git a/app/livestream/client/tabBar.tsx b/app/livestream/client/tabBar.tsx index f3d39198578..33e1fbb997d 100644 --- a/app/livestream/client/tabBar.tsx +++ b/app/livestream/client/tabBar.tsx @@ -1,4 +1,4 @@ -import React, { useMemo } from 'react'; +import React, { ReactNode, useMemo } from 'react'; import { Option, Badge } from '@rocket.chat/fuselage'; import { useSetting } from '../../../client/contexts/SettingsContext'; @@ -19,10 +19,10 @@ addAction('livestream', ({ room }) => { icon: 'podcast', template: 'liveStreamTab', order: isLive ? -1 : 15, - renderAction: (props): React.ReactNode => + renderAction: (props): ReactNode => {isLive ? ! : null} , - renderOption: ({ label: { title, icon }, ...props }: any): React.ReactNode => , } : null), [enabled, isLive, t]); diff --git a/app/mail-messages/client/router.js b/app/mail-messages/client/router.js index 73bb53fac23..4f603b16436 100644 --- a/app/mail-messages/client/router.js +++ b/app/mail-messages/client/router.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { FlowRouter } from 'meteor/kadira:flow-router'; -import { BlazeLayout } from 'meteor/kadira:blaze-layout'; + +import * as BlazeLayout from '../../../client/lib/portals/blazeLayout'; FlowRouter.route('/mailer/unsubscribe/:_id/:createdAt', { name: 'mailer-unsubscribe', diff --git a/app/message-snippet/client/router.js b/app/message-snippet/client/router.js index 79c4ab0acc1..9bf90c1f10c 100644 --- a/app/message-snippet/client/router.js +++ b/app/message-snippet/client/router.js @@ -1,5 +1,6 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; -import { BlazeLayout } from 'meteor/kadira:blaze-layout'; + +import * as BlazeLayout from '../../../client/lib/portals/blazeLayout'; FlowRouter.route('/snippet/:snippetId/:snippetName', { name: 'snippetView', diff --git a/app/oauth2-server-config/client/oauth/oauth2-client.js b/app/oauth2-server-config/client/oauth/oauth2-client.js index e913bf14a5c..1a44456b72e 100644 --- a/app/oauth2-server-config/client/oauth/oauth2-client.js +++ b/app/oauth2-server-config/client/oauth/oauth2-client.js @@ -1,10 +1,10 @@ import { Meteor } from 'meteor/meteor'; import { FlowRouter } from 'meteor/kadira:flow-router'; -import { BlazeLayout } from 'meteor/kadira:blaze-layout'; import { Template } from 'meteor/templating'; import { Accounts } from 'meteor/accounts-base'; import { ReactiveVar } from 'meteor/reactive-var'; +import * as BlazeLayout from '../../../../client/lib/portals/blazeLayout'; import { APIClient } from '../../../utils/client'; FlowRouter.route('/oauth/authorize', { diff --git a/app/otr/client/rocketchat.otr.room.js b/app/otr/client/rocketchat.otr.room.js index 221d6a9d0de..b887082210e 100644 --- a/app/otr/client/rocketchat.otr.room.js +++ b/app/otr/client/rocketchat.otr.room.js @@ -3,7 +3,6 @@ import { ReactiveVar } from 'meteor/reactive-var'; import { Random } from 'meteor/random'; import { EJSON } from 'meteor/ejson'; import { Tracker } from 'meteor/tracker'; -import { FlowRouter } from 'meteor/kadira:flow-router'; import { TAPi18n } from 'meteor/rocketchat:tap-i18n'; import { TimeSync } from 'meteor/mizzao:timesync'; import _ from 'underscore'; @@ -14,6 +13,7 @@ import { Notifications } from '../../notifications'; import { modal } from '../../ui-utils'; import { getUidDirectMessage } from '../../ui-utils/client/lib/getUidDirectMessage'; import { Presence } from '../../../client/lib/presence'; +import { goToRoomById } from '../../../client/lib/goToRoomById'; OTR.Room = class { constructor(userId, roomId) { @@ -189,7 +189,7 @@ OTR.Room = class { this.generateKeyPair().then(() => { this.importPublicKey(data.publicKey).then(() => { this.firstPeer = false; - FlowRouter.goToRoomById(data.roomId); + goToRoomById(data.roomId); Meteor.defer(() => { this.established.set(true); this.acknowledge(); diff --git a/app/search/client/provider/result.js b/app/search/client/provider/result.js index 00a6eaee78a..ff2cc972bf1 100644 --- a/app/search/client/provider/result.js +++ b/app/search/client/provider/result.js @@ -11,6 +11,7 @@ import { MessageAction, RoomHistoryManager } from '../../../ui-utils'; import { messageArgs } from '../../../ui-utils/client/lib/messageArgs'; import { Rooms } from '../../../models/client'; import { getCommonRoomEvents } from '../../../ui/client/views/app/lib/getCommonRoomEvents'; +import { goToRoomById } from '../../../../client/lib/goToRoomById'; Meteor.startup(function() { MessageAction.addButton({ @@ -35,7 +36,7 @@ Meteor.startup(function() { return RoomHistoryManager.getSurroundingMessages(message, 50); } - FlowRouter.goToRoomById(message.rid); + goToRoomById(message.rid); // RocketChat.MessageAction.hideDropDown(); if (window.matchMedia('(max-width: 500px)').matches) { diff --git a/imports/message-read-receipt/client/readReceipts.css b/app/theme/client/imports/components/read-receipts.css similarity index 89% rename from imports/message-read-receipt/client/readReceipts.css rename to app/theme/client/imports/components/read-receipts.css index 22788f69166..da73d930416 100644 --- a/imports/message-read-receipt/client/readReceipts.css +++ b/app/theme/client/imports/components/read-receipts.css @@ -5,11 +5,12 @@ } .read-receipt .rc-icon { - height: 0.8em; width: 0.8em; + height: 0.8em; } -.message:hover .read-receipt, .message.active .read-receipt { +.message:hover .read-receipt, +.message.active .read-receipt { display: none; } @@ -20,6 +21,7 @@ .read-receipt.read { color: #1d74f5; color: var(--rc-color-button-primary); + font-style: normal; } @@ -29,13 +31,16 @@ .read-receipts__user { display: flex; - padding: 8px 8px; + + padding: 8px; align-items: center; } .read-receipts__name { flex: 1 1 auto; + margin: 0 10px; + font-size: 16px; } diff --git a/app/theme/client/imports/general/base_old.css b/app/theme/client/imports/general/base_old.css index e65ba2bb351..50c1c337034 100644 --- a/app/theme/client/imports/general/base_old.css +++ b/app/theme/client/imports/general/base_old.css @@ -145,18 +145,6 @@ justify-content: center; } -.connection-status > .alert { - position: absolute; - z-index: 1000000; - top: 0; - - width: 100%; - margin-top: 0 !important; - padding: 2px; - - border-width: 0 0 1px; -} - .rc-old .alert { margin: 1rem 0; padding: 0.5rem; diff --git a/app/theme/client/main.css b/app/theme/client/main.css index 81aea4d296d..7ecf241e098 100644 --- a/app/theme/client/main.css +++ b/app/theme/client/main.css @@ -36,6 +36,7 @@ @import 'imports/components/modal.css'; @import 'imports/components/chip.css'; @import 'imports/components/messages.css'; +@import 'imports/components/read-receipts.css'; @import 'imports/components/contextual-bar.css'; @import 'imports/components/emojiPicker.css'; @import 'imports/components/table.css'; diff --git a/app/threads/client/flextab/thread.js b/app/threads/client/flextab/thread.js index 134af66c45b..96e5092e6e8 100644 --- a/app/threads/client/flextab/thread.js +++ b/app/threads/client/flextab/thread.js @@ -3,7 +3,6 @@ import { Meteor } from 'meteor/meteor'; import { Mongo } from 'meteor/mongo'; import { Template } from 'meteor/templating'; import { Session } from 'meteor/session'; -import { HTML } from 'meteor/htmljs'; import { ReactiveDict } from 'meteor/reactive-dict'; import { Tracker } from 'meteor/tracker'; import { FlowRouter } from 'meteor/kadira:flow-router'; @@ -14,7 +13,6 @@ import { messageContext } from '../../../ui-utils/client/lib/messageContext'; import { upsertMessageBulk } from '../../../ui-utils/client/lib/RoomHistoryManager'; import { Messages } from '../../../models'; import { fileUpload } from '../../../ui/client/lib/fileUpload'; -import { createTemplateForComponent } from '../../../../client/reactAdapters'; import { dropzoneEvents, dropzoneHelpers } from '../../../ui/client/views/app/room'; import './thread.html'; import { getUserPreference } from '../../../utils'; @@ -23,21 +21,8 @@ import { callbacks } from '../../../callbacks/client'; import './messageBoxFollow'; import { getCommonRoomEvents } from '../../../ui/client/views/app/lib/getCommonRoomEvents'; -createTemplateForComponent('Checkbox', async () => { - const { CheckBox } = await import('@rocket.chat/fuselage'); - return { default: CheckBox }; -}, { - // eslint-disable-next-line new-cap - renderContainerView: () => HTML.DIV({ class: 'rcx-checkbox', style: 'display: flex;' }), -}); - const sort = { ts: 1 }; -createTemplateForComponent('ThreadComponent', () => import('../components/ThreadComponent'), { - // eslint-disable-next-line new-cap - renderContainerView: () => HTML.DIV({ class: 'contextual-bar', style: 'display: flex; height: 100%;' }), -}); - Template.thread.events({ ...dropzoneEvents, ...getCommonRoomEvents(), diff --git a/app/token-login/client/login_token_client.js b/app/token-login/client/login_token_client.js index 4809a81f241..6e18bce483e 100644 --- a/app/token-login/client/login_token_client.js +++ b/app/token-login/client/login_token_client.js @@ -1,7 +1,8 @@ import { Meteor } from 'meteor/meteor'; import { Accounts } from 'meteor/accounts-base'; import { FlowRouter } from 'meteor/kadira:flow-router'; -import { BlazeLayout } from 'meteor/kadira:blaze-layout'; + +import * as BlazeLayout from '../../../client/lib/portals/blazeLayout'; Meteor.loginWithLoginToken = function(token) { Accounts.callLoginMethod({ diff --git a/app/ui-login/client/routes.js b/app/ui-login/client/routes.js index 95b6a7ca7c4..247e7696838 100644 --- a/app/ui-login/client/routes.js +++ b/app/ui-login/client/routes.js @@ -1,5 +1,6 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; -import { BlazeLayout } from 'meteor/kadira:blaze-layout'; + +import * as BlazeLayout from '../../../client/lib/portals/blazeLayout'; FlowRouter.route('/reset-password/:token', { name: 'resetPassword', diff --git a/app/ui-master/client/main.html b/app/ui-master/client/main.html index 7b657a62c76..ad1266a7e46 100644 --- a/app/ui-master/client/main.html +++ b/app/ui-master/client/main.html @@ -5,9 +5,6 @@ {{#if subsReady}} {{#unless showSetupWizard}} {{#unless logged}} -
- {{> status}} -
{{#if useIframe}} {{#if iframeUrl}} @@ -40,10 +37,6 @@ {{> Template.dynamic template=center}} - -
- {{> status}} -
{{/if}} {{/if}} {{/unless}} diff --git a/app/ui-master/client/main.js b/app/ui-master/client/main.js index 92ba9766cc4..dd486e4e06f 100644 --- a/app/ui-master/client/main.js +++ b/app/ui-master/client/main.js @@ -17,7 +17,6 @@ import { hasRole } from '../../authorization'; import { tooltip } from '../../ui/client/components/tooltip'; import { callbacks } from '../../callbacks/client'; import { isSyncReady } from '../../../client/lib/userData'; -import { createTemplateForComponent } from '../../../client/reactAdapters'; function executeCustomScript(script) { eval(script);//eslint-disable-line @@ -30,8 +29,6 @@ function customScriptsOnLogout() { } } -createTemplateForComponent('accountSecurity', () => import('../../../client/views/account/security/AccountSecurityPage')); - callbacks.add('afterLogoutCleanUp', () => customScriptsOnLogout(), callbacks.priority.LOW, 'custom-script-on-logout'); Template.body.onRendered(function() { @@ -222,6 +219,11 @@ Template.main.helpers({ return (!userId && Show_Setup_Wizard === 'pending') || (userId && hasRole(userId, 'admin') && Show_Setup_Wizard === 'in_progress'); }, + readReceiptsEnabled() { + if (settings.get('Message_Read_Receipt_Store_Users')) { + return 'read-receipts-enabled'; + } + }, }); Template.main.events({ diff --git a/app/ui-message/client/index.js b/app/ui-message/client/index.js index 879813b2847..ab52f2f87da 100644 --- a/app/ui-message/client/index.js +++ b/app/ui-message/client/index.js @@ -6,4 +6,3 @@ import './popup/messagePopupChannel'; import './popup/messagePopupConfig'; import './popup/messagePopupEmoji'; import './popup/messagePopupSlashCommandPreview'; -import '../../../client/views/blocks'; diff --git a/app/ui-message/client/message.js b/app/ui-message/client/message.js index bb4f59f70ed..3b71f96fd96 100644 --- a/app/ui-message/client/message.js +++ b/app/ui-message/client/message.js @@ -17,12 +17,9 @@ import { AutoTranslate } from '../../autotranslate/client'; import { escapeHTML } from '../../../lib/escapeHTML'; import { renderMentions } from '../../mentions/client/client'; import { renderMessageBody } from '../../../client/lib/renderMessageBody'; -import { createTemplateForComponent } from '../../../client/reactAdapters'; - +import { settings } from '../../settings/client'; import './message.html'; -createTemplateForComponent('messageLocation', () => import('../../../client/views/location/MessageLocation')); - const renderBody = (msg, settings) => { const searchedText = msg.searchedText ? msg.searchedText : ''; const isSystemMessage = MessageTypes.isSystemMessage(msg); @@ -454,6 +451,15 @@ Template.message.helpers({ const { msg } = this; return msg.starred && msg.starred.length > 0 && msg.starred.find((star) => star._id === Meteor.userId()) && !(msg.actionContext === 'starred' || this.context === 'starred'); }, + readReceipt() { + if (!settings.get('Message_Read_Receipt_Enabled')) { + return; + } + + return { + readByEveryone: (!this.msg.unread && 'read') || 'color-component-color', + }; + }, }); const hasTempClass = (node) => node.classList.contains('temp'); diff --git a/app/ui-sidenav/client/sideNav.js b/app/ui-sidenav/client/sideNav.js index 3f2d56bde67..323895a2f28 100644 --- a/app/ui-sidenav/client/sideNav.js +++ b/app/ui-sidenav/client/sideNav.js @@ -1,5 +1,4 @@ import { Meteor } from 'meteor/meteor'; -import { HTML } from 'meteor/htmljs'; import { Tracker } from 'meteor/tracker'; import { ReactiveVar } from 'meteor/reactive-var'; import { FlowRouter } from 'meteor/kadira:flow-router'; @@ -9,10 +8,6 @@ import { SideNav, menu } from '../../ui-utils'; import { settings } from '../../settings'; import { roomTypes, getUserPreference } from '../../utils'; import { Users } from '../../models'; -import { createTemplateForComponent } from '../../../client/reactAdapters'; - -createTemplateForComponent('sidebarHeader', () => import('../../../client/sidebar/header')); -createTemplateForComponent('sidebarChats', () => import('../../../client/sidebar/RoomList'), { renderContainerView: () => HTML.DIV({ style: 'display: flex; flex: 1 1 auto;' }) });// eslint-disable-line new-cap Template.sideNav.helpers({ flexTemplate() { diff --git a/app/ui-sidenav/client/userPresence.js b/app/ui-sidenav/client/userPresence.js index 4c54be3356c..b7e821c104b 100644 --- a/app/ui-sidenav/client/userPresence.js +++ b/app/ui-sidenav/client/userPresence.js @@ -6,7 +6,7 @@ import _ from 'underscore'; import mem from 'mem'; import { APIClient } from '../../utils/client'; -import { saveUser, interestedUserIds } from '../../../imports/startup/client/listenActiveUsers'; +import { saveUser, interestedUserIds } from '../../../client/startup/listenActiveUsers'; import { Presence } from '../../../client/lib/presence'; import './userPresence.html'; diff --git a/app/ui-utils/client/lib/AccountBox.js b/app/ui-utils/client/lib/AccountBox.js index 7216ceec74c..253a1c90a21 100644 --- a/app/ui-utils/client/lib/AccountBox.js +++ b/app/ui-utils/client/lib/AccountBox.js @@ -2,10 +2,10 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Tracker } from 'meteor/tracker'; import { FlowRouter } from 'meteor/kadira:flow-router'; -import { BlazeLayout } from 'meteor/kadira:blaze-layout'; import { Session } from 'meteor/session'; import _ from 'underscore'; +import * as BlazeLayout from '../../../../client/lib/portals/blazeLayout'; import { SideNav } from './SideNav'; export const AccountBox = (function() { diff --git a/app/ui-utils/client/lib/MessageAction.js b/app/ui-utils/client/lib/MessageAction.js index c97b52956f9..85426f4dcc4 100644 --- a/app/ui-utils/client/lib/MessageAction.js +++ b/app/ui-utils/client/lib/MessageAction.js @@ -8,9 +8,7 @@ import { TAPi18n } from 'meteor/rocketchat:tap-i18n'; import { ReactiveVar } from 'meteor/reactive-var'; import { Tracker } from 'meteor/tracker'; import { Session } from 'meteor/session'; -import { HTML } from 'meteor/htmljs'; -import { createTemplateForComponent } from '../../../../client/reactAdapters'; import { messageArgs } from './messageArgs'; import { roomTypes, canDeleteMessage } from '../../../utils/client'; import { Messages, Rooms, Subscriptions } from '../../../models/client'; @@ -387,7 +385,3 @@ Meteor.startup(async function() { group: 'menu', }); }); - -createTemplateForComponent('reactionList', () => import('./ReactionListContent'), { - renderContainerView: () => HTML.DIV({ style: 'margin: -16px; height: 100%; display: flex; flex-direction: column; overflow: hidden;' }), // eslint-disable-line new-cap -}); diff --git a/app/ui-utils/client/lib/messageContext.js b/app/ui-utils/client/lib/messageContext.js index 283cddf5bb9..62342c8d93b 100644 --- a/app/ui-utils/client/lib/messageContext.js +++ b/app/ui-utils/client/lib/messageContext.js @@ -11,6 +11,7 @@ import { AutoTranslate } from '../../../autotranslate/client'; import { Layout } from './Layout'; import { fireGlobalEvent } from './fireGlobalEvent'; import { actionLinks } from '../../../action-links/client'; +import { goToRoomById } from '../../../../client/lib/goToRoomById'; const fields = { name: 1, username: 1, 'settings.preferences.showMessageInMainThread': 1, 'settings.preferences.autoImageLoad': 1, 'settings.preferences.saveMobileBandwidth': 1, 'settings.preferences.collapseMediaByDefault': 1, 'settings.preferences.hideRoles': 1 }; @@ -51,7 +52,7 @@ export function messageContext({ rid } = Template.instance()) { const openDiscussion = (e) => { e.preventDefault(); const { drid } = e.currentTarget.dataset; - FlowRouter.goToRoomById(drid); + goToRoomById(drid); }; const replyBroadcast = (e) => { diff --git a/app/ui-utils/client/lib/openRoom.js b/app/ui-utils/client/lib/openRoom.js index 7dc0d4c9f20..204dba8361f 100644 --- a/app/ui-utils/client/lib/openRoom.js +++ b/app/ui-utils/client/lib/openRoom.js @@ -3,11 +3,11 @@ import { Tracker } from 'meteor/tracker'; import { Blaze } from 'meteor/blaze'; import { Template } from 'meteor/templating'; import { FlowRouter } from 'meteor/kadira:flow-router'; -import { BlazeLayout } from 'meteor/kadira:blaze-layout'; import { Session } from 'meteor/session'; import mem from 'mem'; import _ from 'underscore'; +import * as BlazeLayout from '../../../../client/lib/portals/blazeLayout'; import { Messages, ChatSubscription, Rooms } from '../../../models'; import { settings } from '../../../settings'; import { callbacks } from '../../../callbacks'; diff --git a/app/ui/client/components/status.html b/app/ui/client/components/status.html deleted file mode 100644 index 94aa099d749..00000000000 --- a/app/ui/client/components/status.html +++ /dev/null @@ -1,15 +0,0 @@ - diff --git a/app/ui/client/components/status.js b/app/ui/client/components/status.js deleted file mode 100644 index df435981ec4..00000000000 --- a/app/ui/client/components/status.js +++ /dev/null @@ -1,66 +0,0 @@ -import _ from 'underscore'; -import { Meteor } from 'meteor/meteor'; -import { TAPi18n } from 'meteor/rocketchat:tap-i18n'; -import { ReactiveVar } from 'meteor/reactive-var'; -import { Template } from 'meteor/templating'; - -import './status.html'; - -const retryTime = new ReactiveVar(0); -let retryHandle = null; - -const clearRetryInterval = function() { - clearInterval(retryHandle); - - retryHandle = null; -}; - -const trackStatus = function() { - if (Meteor.status().status === 'waiting') { - retryHandle = retryHandle || setInterval(function() { - const timeDiff = Meteor.status().retryTime - new Date().getTime(); - const _retryTime = (timeDiff > 0 && Math.round(timeDiff / 1000)) || 0; - - retryTime.set(_retryTime); - }, 500); - } else { - clearRetryInterval(); - } -}; - -Template.status.onDestroyed(clearRetryInterval); - -Template.status.onCreated(function() { - this.autorun(trackStatus); -}); - -Template.status.helpers({ - connected() { - return Meteor.status().connected; - }, - - message() { - return TAPi18n.__('meteor_status', { context: Meteor.status().status }); - }, - - extraMessage() { - if (Meteor.status().status === 'waiting') { - return TAPi18n.__('meteor_status_reconnect_in', { count: retryTime.get() }); - } - }, - - showReconnect() { - return _.contains(['waiting', 'offline'], Meteor.status().status); - }, - - reconnectLabel() { - return TAPi18n.__('meteor_status_try_now', { context: Meteor.status().status }); - }, -}); - -Template.status.events({ - 'click a.alert-link'(e) { - e.preventDefault(); - Meteor.reconnect(); - }, -}); diff --git a/app/ui/client/index.js b/app/ui/client/index.js index 8a08c5cdcbf..00cf67b120c 100644 --- a/app/ui/client/index.js +++ b/app/ui/client/index.js @@ -1,5 +1,3 @@ -import { createTemplateForComponent } from '../../../client/reactAdapters'; - import './lib/accounts'; import './lib/collections'; import './lib/iframeCommands'; @@ -37,7 +35,6 @@ import './views/app/videoCall/videoButtons'; import './views/app/videoCall/videoCall'; import './views/app/photoswipe'; import './components/icon'; -import './components/status'; import './components/table.html'; import './components/table'; import './components/tabs'; @@ -58,5 +55,3 @@ export { AudioRecorder } from './lib/recorderjs/audioRecorder'; export { VideoRecorder } from './lib/recorderjs/videoRecorder'; export { chatMessages } from './views/app/room'; export * from './lib/userPopoverStatus'; - -createTemplateForComponent('RoomForeword', () => import('../../../client/components/RoomForeword')); diff --git a/app/ui/client/lib/Tooltip.js b/app/ui/client/lib/Tooltip.js index 07959a79d3c..2a1143811d1 100644 --- a/app/ui/client/lib/Tooltip.js +++ b/app/ui/client/lib/Tooltip.js @@ -1,6 +1,6 @@ import { Tracker } from 'meteor/tracker'; -import { createEphemeralPortal } from '../../../../client/reactAdapters'; +import { createEphemeralPortal } from '../../../../client/lib/portals/createEphemeralPortal'; const Dep = new Tracker.Dependency(); @@ -28,14 +28,14 @@ export const closeTooltip = () => { unregister = unregister && unregister(); }; -export const openToolTip = async (title, anchor) => { +export const openToolTip = (title, anchor) => { dom = dom || createAnchor(); state = { title, anchor, }; Dep.changed(); - unregister = unregister || await createEphemeralPortal(() => import('./TooltipComponent'), props, dom); + unregister = unregister || createEphemeralPortal(() => import('./TooltipComponent'), props, dom); }; document.body.addEventListener('mouseover', (() => { diff --git a/app/ui/client/lib/UserCard.js b/app/ui/client/lib/UserCard.js index fcee56071bf..be6c6c326c4 100644 --- a/app/ui/client/lib/UserCard.js +++ b/app/ui/client/lib/UserCard.js @@ -1,7 +1,7 @@ import { FlowRouter } from 'meteor/kadira:flow-router'; import { Tracker } from 'meteor/tracker'; -import { createEphemeralPortal } from '../../../../client/reactAdapters'; +import { createEphemeralPortal } from '../../../../client/lib/portals/createEphemeralPortal'; const Dep = new Tracker.Dependency(); @@ -35,7 +35,7 @@ export const closeUserCard = () => { }); }; -export const openUserCard = async (args) => { +export const openUserCard = (args) => { props = { ...args, onClose: closeUserCard, @@ -45,7 +45,7 @@ export const openUserCard = async (args) => { container = container || createContainer(); - unregister = unregister || await createEphemeralPortal( + unregister = unregister || createEphemeralPortal( () => import('../../../../client/views/room/UserCard'), () => { Dep.depend(); return props; diff --git a/app/ui/client/views/app/lib/getCommonRoomEvents.js b/app/ui/client/views/app/lib/getCommonRoomEvents.js index 3a28c14094a..c273067e36e 100644 --- a/app/ui/client/views/app/lib/getCommonRoomEvents.js +++ b/app/ui/client/views/app/lib/getCommonRoomEvents.js @@ -21,6 +21,7 @@ import { ChatMessage, Rooms, Messages } from '../../../../../models'; import { t } from '../../../../../utils/client'; import { chatMessages } from '../room'; import { EmojiEvents } from '../../../../../reactions/client/init'; +import { goToRoomById } from '../../../../../../client/lib/goToRoomById'; const mountPopover = (e, i, outerContext) => { let context = $(e.target).parents('.message').data('context'); @@ -313,7 +314,7 @@ export const getCommonRoomEvents = () => ({ if (Layout.isEmbedded()) { fireGlobalEvent('click-mention-link', { path: FlowRouter.path('channel', { name: channel }), channel }); } - FlowRouter.goToRoomById(channel); + goToRoomById(channel); return; } diff --git a/app/videobridge/client/tabBar.tsx b/app/videobridge/client/tabBar.tsx index 7f3fc4beac3..b52fcb20b66 100644 --- a/app/videobridge/client/tabBar.tsx +++ b/app/videobridge/client/tabBar.tsx @@ -1,4 +1,4 @@ -import React, { useMemo, lazy } from 'react'; +import React, { useMemo, lazy, ReactNode } from 'react'; import { useStableArray } from '@rocket.chat/fuselage-hooks'; import { Option, Badge } from '@rocket.chat/fuselage'; @@ -32,10 +32,10 @@ addAction('bbb_video', ({ room }) => { icon: 'phone', template: templateBBB, order: live ? -1 : 0, - renderAction: (props): React.ReactNode => + renderAction: (props): ReactNode => {live ? ! : null} , - renderOption: ({ label: { title, icon }, ...props }: any): React.ReactNode => , + renderOption: ({ label: { title, icon }, ...props }: any): ReactNode => , } : null), [enabled, groups, live, t]); }); @@ -66,10 +66,10 @@ addAction('video', ({ room }) => { template: templateJitsi, full: true, order: live ? -1 : 0, - renderAction: (props): React.ReactNode => + renderAction: (props): ReactNode => {live && !} , - renderOption: ({ label: { title, icon }, ...props }: any): React.ReactNode => , } : null), [enabled, groups, live, t]); diff --git a/app/webrtc/client/WebRTCClass.js b/app/webrtc/client/WebRTCClass.js index 53eed4791b6..67610a6c0b6 100644 --- a/app/webrtc/client/WebRTCClass.js +++ b/app/webrtc/client/WebRTCClass.js @@ -2,7 +2,6 @@ import { Emitter } from '@rocket.chat/emitter'; import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { ReactiveVar } from 'meteor/reactive-var'; -import { FlowRouter } from 'meteor/kadira:flow-router'; import { TAPi18n } from 'meteor/rocketchat:tap-i18n'; import { ChromeScreenShare } from './screenShare'; @@ -12,6 +11,7 @@ import { settings } from '../../settings'; import { modal } from '../../ui-utils'; import { ChatSubscription } from '../../models'; import { WEB_RTC_EVENTS } from '..'; +import { goToRoomById } from '../../../client/lib/goToRoomById'; class WebRTCTransportClass extends Emitter { constructor(webrtcInstance) { @@ -663,7 +663,7 @@ class WebRTCClass { onRemoteCall(data) { if (this.autoAccept === true) { - FlowRouter.goToRoomById(data.room); + goToRoomById(data.room); Meteor.defer(() => { this.joinCall({ to: data.from, @@ -712,7 +712,7 @@ class WebRTCClass { cancelButtonText: t('No'), }, (isConfirm) => { if (isConfirm) { - FlowRouter.goToRoomById(data.room); + goToRoomById(data.room); return this.joinCall({ to: data.from, monitor: data.monitor, diff --git a/client/.eslintrc.js b/client/.eslintrc.js new file mode 100644 index 00000000000..5f7687c6742 --- /dev/null +++ b/client/.eslintrc.js @@ -0,0 +1,129 @@ +module.exports = { + root: true, + extends: ['@rocket.chat/eslint-config', 'prettier'], + parser: 'babel-eslint', + plugins: ['react', 'react-hooks', 'prettier'], + rules: { + 'import/named': 'error', + 'import/order': [ + 'error', + { + 'newlines-between': 'always', + 'groups': ['builtin', 'external', 'internal', ['parent', 'sibling', 'index']], + 'alphabetize': { + order: 'asc', + }, + }, + ], + 'jsx-quotes': ['error', 'prefer-single'], + 'prefer-arrow-callback': ['error', { allowNamedFunctions: true }], + 'prettier/prettier': 2, + 'react/display-name': 'error', + 'react/jsx-uses-react': 'error', + 'react/jsx-uses-vars': 'error', + 'react/jsx-no-undef': 'error', + 'react/jsx-fragments': ['error', 'syntax'], + 'react/no-multi-comp': 'error', + 'react-hooks/rules-of-hooks': 'error', + 'react-hooks/exhaustive-deps': [ + 'warn', + { + additionalHooks: '(useComponentDidUpdate)', + }, + ], + }, + settings: { + 'import/resolver': { + node: { + extensions: ['.js', '.ts', '.tsx'], + }, + }, + 'react': { + version: 'detect', + }, + }, + env: { + browser: true, + es6: true, + }, + overrides: [ + { + files: ['**/*.ts', '**/*.tsx'], + extends: [ + 'plugin:@typescript-eslint/recommended', + 'plugin:@typescript-eslint/eslint-recommended', + '@rocket.chat/eslint-config', + 'prettier', + ], + parser: '@typescript-eslint/parser', + plugins: ['@typescript-eslint', 'react', 'react-hooks', 'prettier'], + rules: { + '@typescript-eslint/ban-ts-ignore': 'off', + '@typescript-eslint/indent': 'off', + '@typescript-eslint/interface-name-prefix': ['error', 'always'], + '@typescript-eslint/no-extra-parens': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-unused-vars': [ + 'error', + { + argsIgnorePattern: '^_', + }, + ], + 'func-call-spacing': 'off', + 'indent': 'off', + 'import/order': [ + 'error', + { + 'newlines-between': 'always', + 'groups': ['builtin', 'external', 'internal', ['parent', 'sibling', 'index']], + 'alphabetize': { + order: 'asc', + }, + }, + ], + 'jsx-quotes': ['error', 'prefer-single'], + 'no-extra-parens': 'off', + 'no-spaced-func': 'off', + 'no-unused-vars': 'off', + 'no-useless-constructor': 'off', + 'no-use-before-define': 'off', + 'prefer-arrow-callback': ['error', { allowNamedFunctions: true }], + 'prettier/prettier': 2, + 'react/display-name': 'error', + 'react/jsx-uses-react': 'error', + 'react/jsx-uses-vars': 'error', + 'react/jsx-no-undef': 'error', + 'react/jsx-fragments': ['error', 'syntax'], + 'react/no-multi-comp': 'error', + 'react-hooks/rules-of-hooks': 'error', + 'react-hooks/exhaustive-deps': [ + 'warn', + { + additionalHooks: '(useComponentDidUpdate)', + }, + ], + }, + env: { + browser: true, + es6: true, + }, + settings: { + 'import/resolver': { + node: { + extensions: ['.js', '.ts', '.tsx'], + }, + }, + 'react': { + version: 'detect', + }, + }, + }, + { + files: ['**/*.stories.js', '**/*.stories.jsx', '**/*.stories.ts', '**/*.stories.tsx'], + rules: { + 'react/display-name': 'off', + 'react/no-multi-comp': 'off', + }, + }, + ], +}; diff --git a/client/.prettierrc b/client/.prettierrc new file mode 100644 index 00000000000..0244eac5684 --- /dev/null +++ b/client/.prettierrc @@ -0,0 +1,12 @@ +{ + "semi": true, + "bracketSpacing": true, + "arrowParens": "always", + "endOfLine": "lf", + "jsxSingleQuote": true, + "printWidth": 100, + "quoteProps": "consistent", + "singleQuote": true, + "trailingComma": "all", + "useTabs": true +} diff --git a/client/UIKit/hooks/useUIKitHandleAction.tsx b/client/UIKit/hooks/useUIKitHandleAction.tsx index be642ff89c1..276d8655d30 100644 --- a/client/UIKit/hooks/useUIKitHandleAction.tsx +++ b/client/UIKit/hooks/useUIKitHandleAction.tsx @@ -10,15 +10,20 @@ import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; import * as ActionManager from '../../../app/ui-message/client/ActionManager'; import { UiKitPayload, UIKitActionEvent } from '../../../definition/UIKit'; -const useUIKitHandleAction = (state: S): (event: UIKitActionEvent) => Promise => useMutableCallback(async ({ blockId, value, appId, actionId }) => ActionManager.triggerBlockAction({ - container: { - type: UIKitIncomingInteractionContainerType.VIEW, - id: state.viewId || state.appId, - }, - actionId, - appId, - value, - blockId, -})); +const useUIKitHandleAction = ( + state: S, +): ((event: UIKitActionEvent) => Promise) => + useMutableCallback(async ({ blockId, value, appId, actionId }) => + ActionManager.triggerBlockAction({ + container: { + type: UIKitIncomingInteractionContainerType.VIEW, + id: state.viewId || state.appId, + }, + actionId, + appId, + value, + blockId, + }), + ); export { useUIKitHandleAction }; diff --git a/client/UIKit/hooks/useUIKitHandleClose.tsx b/client/UIKit/hooks/useUIKitHandleClose.tsx index 975f895f15b..cd0577c2306 100644 --- a/client/UIKit/hooks/useUIKitHandleClose.tsx +++ b/client/UIKit/hooks/useUIKitHandleClose.tsx @@ -7,29 +7,36 @@ import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; // import { UIKitIncomingInteractionContainerType } from '@rocket.chat/apps-engine/definition/uikit/UIKitIncomingInteractionContainer'; // import { useEndpoint } from '../../contexts/ServerContext'; -import { useToastMessageDispatch } from '../../contexts/ToastMessagesContext'; import * as ActionManager from '../../../app/ui-message/client/ActionManager'; import { UiKitPayload } from '../../../definition/UIKit'; +import { useToastMessageDispatch } from '../../contexts/ToastMessagesContext'; // eslint-disable-next-line @typescript-eslint/no-unused-vars const emptyFn = (_error: any, _result: UIKitInteractionType | void): void => undefined; -const useUIKitHandleClose = (state: S, fn = emptyFn): () => Promise => { +const useUIKitHandleClose = ( + state: S, + fn = emptyFn, +): (() => Promise) => { const dispatchToastMessage = useToastMessageDispatch(); - return useMutableCallback(() => ActionManager.triggerCancel({ - appId: state.appId, - viewId: state.viewId, - view: { - ...state, - id: state.viewId, - // state: groupStateByBlockId(values), - }, - isCleared: true, - }).then((result) => fn(undefined, result)).catch((error) => { - dispatchToastMessage({ type: 'error', message: error }); - fn(error, undefined); - return Promise.reject(error); - })); + return useMutableCallback(() => + ActionManager.triggerCancel({ + appId: state.appId, + viewId: state.viewId, + view: { + ...state, + id: state.viewId, + // state: groupStateByBlockId(values), + }, + isCleared: true, + }) + .then((result) => fn(undefined, result)) + .catch((error) => { + dispatchToastMessage({ type: 'error', message: error }); + fn(error, undefined); + return Promise.reject(error); + }), + ); }; export { useUIKitHandleClose }; diff --git a/client/UIKit/hooks/useUIKitStateManager.tsx b/client/UIKit/hooks/useUIKitStateManager.tsx index 1017af4b61d..c773f18d012 100644 --- a/client/UIKit/hooks/useUIKitStateManager.tsx +++ b/client/UIKit/hooks/useUIKitStateManager.tsx @@ -1,9 +1,8 @@ -import { useEffect, useState } from 'react'; import { useSafely } from '@rocket.chat/fuselage-hooks'; +import { useEffect, useState } from 'react'; -import { isErrorType, UIKitUserInteractionResult, UiKitPayload } from '../../../definition/UIKit'; import * as ActionManager from '../../../app/ui-message/client/ActionManager'; - +import { isErrorType, UIKitUserInteractionResult, UiKitPayload } from '../../../definition/UIKit'; const useUIKitStateManager = (initialState: S): S => { const [state, setState] = useSafely(useState(initialState)); diff --git a/client/adapters.js b/client/adapters.js deleted file mode 100644 index 31980a2227f..00000000000 --- a/client/adapters.js +++ /dev/null @@ -1,7 +0,0 @@ -import { createTemplateForComponent } from './reactAdapters'; - -createTemplateForComponent('MessageActions', () => import('./components/Message/Actions')); -createTemplateForComponent('reactAttachments', () => import('./components/Message/Attachments')); -createTemplateForComponent('ThreadMetric', () => import('./components/Message/Metrics/Thread')); -createTemplateForComponent('DiscussionMetric', () => import('./components/Message/Metrics/Discussion')); -createTemplateForComponent('BroadCastMetric', () => import('./components/Message/Metrics/Broadcast')); diff --git a/client/components/AppRoot.js b/client/components/AppRoot.js deleted file mode 100644 index eaceafdd8f0..00000000000 --- a/client/components/AppRoot.js +++ /dev/null @@ -1,18 +0,0 @@ -import React from 'react'; -import { useSubscription } from 'use-subscription'; - -import MeteorProvider from '../providers/MeteorProvider'; -import { portalsSubscription } from '../reactAdapters'; -import BannerRegion from '../views/banners/BannerRegion'; -import PortalWrapper from './PortalWrapper'; - -const AppRoot = () => { - const portals = useSubscription(portalsSubscription); - - return - - {portals.map(({ key, portal }) => )} - ; -}; - -export default AppRoot; diff --git a/client/components/AutoComplete.js b/client/components/AutoComplete.js deleted file mode 100644 index d49166ec857..00000000000 --- a/client/components/AutoComplete.js +++ /dev/null @@ -1,25 +0,0 @@ -import React, { useMemo, useState } from 'react'; -import { AutoComplete, Option, Options } from '@rocket.chat/fuselage'; - -import UserAvatar from './avatar/UserAvatar'; -import { useEndpointData } from '../hooks/useEndpointData'; - -const query = (term = '', conditions = {}) => ({ selector: JSON.stringify({ term, conditions }) }); - -const Avatar = ({ value, ...props }) => ; - -export const UserAutoComplete = React.memo((props) => { - const { conditions = {} } = props; - const [filter, setFilter] = useState(''); - // eslint-disable-next-line react-hooks/exhaustive-deps - const { value: data } = useEndpointData('users.autocomplete', useMemo(() => query(filter, conditions), [filter])); - const options = useMemo(() => (data && data.items.map((user) => ({ value: user.username, label: user.name }))) || [], [data]); - return <> {label}} - renderItem={({ value, ...props }) =>