![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /proc/self/root/opt/mattermost/client/ |
Upload File : |
{"version":3,"file":"6799.5633a51cabd028bb328a.js","mappings":"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","sources":["webpack://mattermost-webapp/./src/components/channel_header_dropdown/channel_header_dropdown.tsx","webpack://mattermost-webapp/./src/components/channel_bookmarks_sub_menu/index.tsx","webpack://mattermost-webapp/./src/components/channel_groups_manage_modal/channel_groups_manage_modal.tsx","webpack://mattermost-webapp/./src/components/channel_groups_manage_modal/index.ts","webpack://mattermost-webapp/./src/components/channel_move_to_sub_menu_old/index.tsx","webpack://mattermost-webapp/./src/components/convert_channel_modal/convert_channel_modal.tsx","webpack://mattermost-webapp/./src/components/convert_channel_modal/index.ts","webpack://mattermost-webapp/./src/components/convert_gm_to_channel_modal/no_common_teams/no_common_teams.tsx","webpack://mattermost-webapp/./src/components/convert_gm_to_channel_modal/team_selector/team_selector.tsx","webpack://mattermost-webapp/./src/components/convert_gm_to_channel_modal/warning_text_section/warning_text_section.tsx","webpack://mattermost-webapp/./src/components/convert_gm_to_channel_modal/convert_gm_to_channel_modal.tsx","webpack://mattermost-webapp/./src/components/convert_gm_to_channel_modal/index.ts","webpack://mattermost-webapp/./src/components/delete_channel_modal/delete_channel_modal.tsx","webpack://mattermost-webapp/./src/components/delete_channel_modal/index.ts","webpack://mattermost-webapp/./src/components/rename_channel_modal/rename_channel_modal.tsx","webpack://mattermost-webapp/./src/components/rename_channel_modal/index.ts","webpack://mattermost-webapp/./src/components/unarchive_channel_modal/unarchive_channel_modal.tsx","webpack://mattermost-webapp/./src/components/unarchive_channel_modal/index.ts","webpack://mattermost-webapp/./src/components/channel_header_dropdown/menu_items/close_channel/close_channel.tsx","webpack://mattermost-webapp/./src/components/channel_header_dropdown/menu_items/close_channel/index.ts","webpack://mattermost-webapp/./src/components/channel_header_dropdown/menu_items/close_message/close_message.tsx","webpack://mattermost-webapp/./src/components/channel_header_dropdown/menu_items/close_message/index.ts","webpack://mattermost-webapp/./src/components/channel_header_dropdown/menu_items/leave_channel/leave_channel.tsx","webpack://mattermost-webapp/./src/components/channel_header_dropdown/menu_items/leave_channel/index.ts","webpack://mattermost-webapp/./src/components/channel_header_dropdown/menu_items/open_members_rhs/open_members_rhs.tsx","webpack://mattermost-webapp/./src/components/channel_header_dropdown/menu_items/open_members_rhs/index.ts","webpack://mattermost-webapp/./src/components/channel_header_dropdown/menu_items/toggle_favorite_channel/toggle_favorite_channel.tsx","webpack://mattermost-webapp/./src/components/channel_header_dropdown/menu_items/toggle_favorite_channel/index.ts","webpack://mattermost-webapp/./src/components/channel_header_dropdown/menu_items/toggle_info/toggle_info.tsx","webpack://mattermost-webapp/./src/components/channel_header_dropdown/menu_items/toggle_info/index.ts","webpack://mattermost-webapp/./src/components/channel_header_dropdown/menu_items/toggle_mute_channel/toggle_mute_channel.tsx","webpack://mattermost-webapp/./src/components/channel_header_dropdown/menu_items/toggle_mute_channel/index.ts","webpack://mattermost-webapp/./src/components/channel_header_dropdown/menu_items/view_pinned_posts/view_pinned_posts.tsx","webpack://mattermost-webapp/./src/components/channel_header_dropdown/menu_items/view_pinned_posts/index.ts","webpack://mattermost-webapp/./src/components/channel_header_dropdown/channel_header_dropdown_items.tsx","webpack://mattermost-webapp/./src/components/channel_header_dropdown/mobile_channel_header_dropdown_animation.tsx","webpack://mattermost-webapp/./src/components/channel_header_dropdown/mobile_channel_header_dropdown.tsx","webpack://mattermost-webapp/./src/components/channel_header_dropdown/index.ts","webpack://mattermost-webapp/./src/plugins/mobile_channel_header_plug/mobile_channel_header_plug.tsx","webpack://mattermost-webapp/./src/plugins/mobile_channel_header_plug/index.ts"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {memo} from 'react';\nimport {useIntl} from 'react-intl';\n\nimport {ChannelHeaderDropdownItems} from 'components/channel_header_dropdown';\nimport Menu from 'components/widgets/menu/menu';\n\nconst ChannelHeaderDropdown = () => {\n const intl = useIntl();\n\n return (\n <Menu\n id='channelHeaderDropdownMenu'\n ariaLabel={intl.formatMessage({id: 'channel_header.menuAriaLabel', defaultMessage: 'Channel Menu'}).toLowerCase()}\n >\n <ChannelHeaderDropdownItems isMobile={false}/>\n </Menu>\n );\n};\n\nexport default memo(ChannelHeaderDropdown);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\n// Purpose of this file to exists is only required until channel header dropdown is migrated to new menus\nimport type {ComponentProps} from 'react';\nimport React, {memo} from 'react';\nimport {useIntl} from 'react-intl';\nimport {useSelector} from 'react-redux';\n\nimport {\n LinkVariantIcon,\n PaperclipIcon,\n} from '@mattermost/compass-icons/components';\nimport type {Channel} from '@mattermost/types/channels';\n\nimport {getChannelBookmarks} from 'mattermost-redux/selectors/entities/channel_bookmarks';\n\nimport {useBookmarkAddActions} from 'components/channel_bookmarks/channel_bookmarks_menu';\nimport {MAX_BOOKMARKS_PER_CHANNEL, useCanUploadFiles, useChannelBookmarkPermission} from 'components/channel_bookmarks/utils';\nimport Menu from 'components/widgets/menu/menu';\n\nimport type {GlobalState} from 'types/store';\n\ntype Props = {\n channel: Channel;\n inHeaderDropdown?: boolean;\n};\n\nconst ChannelBookmarksSubmenu = (props: Props) => {\n const {formatMessage} = useIntl();\n\n const {handleCreateLink, handleCreateFile} = useBookmarkAddActions(props.channel.id);\n const canAdd = useChannelBookmarkPermission(props.channel.id, 'add');\n const canUploadFiles = useCanUploadFiles();\n const limitReached = useSelector((state: GlobalState) => {\n const bookmarks = getChannelBookmarks(state, props.channel.id);\n return bookmarks && Object.keys(bookmarks).length >= MAX_BOOKMARKS_PER_CHANNEL;\n });\n\n if (!canAdd || limitReached) {\n return null;\n }\n\n const items: ComponentProps<typeof Menu.ItemSubMenu>['subMenu'] = [\n {\n id: 'channelBookmarksAddLink',\n icon: <LinkVariantIcon size={16}/>,\n direction: 'right',\n text: formatMessage({id: 'channel_bookmarks.addLink', defaultMessage: 'Add a link'}),\n action: handleCreateLink,\n },\n ];\n\n if (canUploadFiles) {\n items.push({\n id: 'channelBookmarksAttachFile',\n icon: <PaperclipIcon size={16}/>,\n direction: 'right',\n text: formatMessage({id: 'channel_bookmarks.attachFile', defaultMessage: 'Attach a file'}),\n action: handleCreateFile,\n });\n }\n\n return (\n <Menu.ItemSubMenu\n id={`channel-menu-${props.channel.id}-bookmarks`}\n subMenu={items}\n text={formatMessage({id: 'sidebar_left.sidebar_channel_menu.bookmarks', defaultMessage: 'Bookmarks Bar'})}\n direction={'right'}\n styleSelectableItem={true}\n />\n );\n};\n\nexport default memo(ChannelBookmarksSubmenu);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport {FormattedMessage, injectIntl} from 'react-intl';\nimport type {IntlShape} from 'react-intl';\n\nimport type {Channel} from '@mattermost/types/channels';\nimport {SyncableType} from '@mattermost/types/groups';\nimport type {Group} from '@mattermost/types/groups';\n\nimport type {ActionResult} from 'mattermost-redux/types/actions';\n\nimport AddGroupsToChannelModal from 'components/add_groups_to_channel_modal';\nimport ListModal, {DEFAULT_NUM_PER_PAGE} from 'components/list_modal';\nimport DropdownIcon from 'components/widgets/icons/fa_dropdown_icon';\nimport Menu from 'components/widgets/menu/menu';\nimport MenuWrapper from 'components/widgets/menu/menu_wrapper';\n\nimport groupsAvatar from 'images/groups-avatar.png';\nimport {ModalIdentifiers} from 'utils/constants';\nimport * as Utils from 'utils/utils';\n\nimport type {ModalData} from 'types/actions';\n\ntype Props = {\n channel: Channel;\n intl: IntlShape;\n actions: {\n getGroupsAssociatedToChannel: (channelId: string, searchTerm: string, pageNumber: number, perPage: number) => Promise<ActionResult>;\n unlinkGroupSyncable: (itemId: string, channelId: string, groupsSyncableTypeChannel: SyncableType) => Promise<ActionResult>;\n patchGroupSyncable: (itemId: string, channelId: string, groupsSyncableTypeChannel: SyncableType, params: {scheme_admin: boolean}) => Promise<ActionResult>;\n getMyChannelMember: (channelId: string) => void;\n closeModal: (modalId: string) => void;\n openModal: <P>(modalData: ModalData<P>) => void;\n };\n};\n\nclass ChannelGroupsManageModal extends React.PureComponent<Props> {\n public loadItems = async (pageNumber: number, searchTerm: string) => {\n const {data} = await this.props.actions.getGroupsAssociatedToChannel(this.props.channel.id, searchTerm, pageNumber, DEFAULT_NUM_PER_PAGE);\n return {\n items: data.groups,\n totalCount: data.totalGroupCount,\n };\n };\n\n public onClickRemoveGroup = (item: Group, listModal: any) => this.props.actions.unlinkGroupSyncable(item.id, this.props.channel.id, SyncableType.Channel).then(async () => {\n listModal.setState({loading: true});\n const {items, totalCount} = await listModal.props.loadItems(listModal.setState.page, listModal.state.searchTerm);\n listModal.setState({loading: false, items, totalCount});\n });\n\n public onHide = () => {\n this.props.actions.closeModal(ModalIdentifiers.MANAGE_CHANNEL_GROUPS);\n };\n\n public titleButtonOnClick = () => {\n this.onHide();\n this.props.actions.openModal({modalId: ModalIdentifiers.ADD_GROUPS_TO_TEAM, dialogType: AddGroupsToChannelModal});\n };\n\n public setChannelMemberStatus = async (item: Group, listModal: any, isChannelAdmin: boolean) => {\n this.props.actions.patchGroupSyncable(item.id, this.props.channel.id, SyncableType.Channel, {scheme_admin: isChannelAdmin}).then(async () => {\n listModal.setState({loading: true});\n const {items, totalCount} = await listModal.props.loadItems(listModal.setState.page, listModal.state.searchTerm);\n await this.props.actions.getMyChannelMember(this.props.channel.id);\n\n listModal.setState({loading: false, items, totalCount});\n });\n };\n\n public renderRow = (item: Group, listModal: any) => {\n let title;\n if (item.scheme_admin) {\n title = (\n <FormattedMessage\n id='channel_members_dropdown.channel_admins'\n defaultMessage='Channel Admins'\n />\n );\n } else {\n title = (\n <FormattedMessage\n id='channel_members_dropdown.channel_members'\n defaultMessage='Channel Members'\n />\n );\n }\n\n return (\n <div\n key={item.id}\n className='more-modal__row'\n >\n <img\n className='more-modal__image'\n src={groupsAvatar}\n alt='group picture'\n width='32'\n height='32'\n />\n <div className='more-modal__details'>\n <div className='more-modal__name'>{item.display_name} {'-'}{' '}\n <span className='more-modal__name_count'>\n <FormattedMessage\n id='numMembers'\n defaultMessage='{num, number} {num, plural, one {member} other {members}}'\n values={{\n num: item.member_count,\n }}\n />\n </span>\n </div>\n </div>\n <div className='more-modal__actions'>\n <MenuWrapper>\n <button\n id={`teamGroupsDropdown_${item.display_name}`}\n className='dropdown-toggle theme color--link style--none'\n type='button'\n aria-expanded='true'\n >\n <span>{title} </span>\n <DropdownIcon/>\n </button>\n <Menu\n openLeft={true}\n ariaLabel={Utils.localizeMessage({id: 'channel_members_dropdown.menuAriaLabel', defaultMessage: 'Change the role of channel member'})}\n >\n <Menu.ItemAction\n show={!item.scheme_admin}\n onClick={() => this.setChannelMemberStatus(item, listModal, true)}\n text={Utils.localizeMessage({id: 'channel_members_dropdown.make_channel_admins', defaultMessage: 'Make Channel Admins'})}\n />\n <Menu.ItemAction\n show={Boolean(item.scheme_admin)}\n onClick={() => this.setChannelMemberStatus(item, listModal, false)}\n text={Utils.localizeMessage({id: 'channel_members_dropdown.make_channel_members', defaultMessage: 'Make Channel Members'})}\n />\n <Menu.ItemAction\n onClick={() => this.onClickRemoveGroup(item, listModal)}\n text={Utils.localizeMessage({id: 'group_list_modal.removeGroupButton', defaultMessage: 'Remove Group'})}\n />\n </Menu>\n </MenuWrapper>\n </div>\n </div>\n );\n };\n\n render() {\n const {formatMessage} = this.props.intl;\n return (\n <ListModal\n titleText={formatMessage({id: 'channel_groups', defaultMessage: '{channel} Groups'}, {channel: this.props.channel.display_name})}\n searchPlaceholderText={formatMessage({id: 'manage_channel_groups_modal.search_placeholder', defaultMessage: 'Search groups'})}\n renderRow={this.renderRow}\n loadItems={this.loadItems}\n onHide={this.onHide}\n titleBarButtonText={formatMessage({id: 'group_list_modal.addGroupButton', defaultMessage: 'Add Groups'})}\n titleBarButtonOnClick={this.titleButtonOnClick}\n />\n );\n }\n}\n\nexport default injectIntl(ChannelGroupsManageModal);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {connect} from 'react-redux';\nimport {bindActionCreators} from 'redux';\nimport type {Dispatch} from 'redux';\n\nimport type {GlobalState} from '@mattermost/types/store';\n\nimport {getMyChannelMember} from 'mattermost-redux/actions/channels';\nimport {getGroupsAssociatedToChannel, unlinkGroupSyncable, patchGroupSyncable} from 'mattermost-redux/actions/groups';\n\nimport {closeModal, openModal} from 'actions/views/modals';\n\nimport ChannelGroupsManageModal from './channel_groups_manage_modal';\n\nconst mapStateToProps = (state: GlobalState, ownProps: any) => {\n return {\n channel: state.entities.channels.channels[ownProps.channelID],\n };\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\n actions: bindActionCreators(\n {\n getGroupsAssociatedToChannel,\n closeModal,\n openModal,\n unlinkGroupSyncable,\n patchGroupSyncable,\n getMyChannelMember,\n },\n dispatch,\n ),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ChannelGroupsManageModal);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\n// Purpose of this file to exists is only required until channel header dropdown is migrated to new menus\nimport React, {memo} from 'react';\nimport {useIntl} from 'react-intl';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {\n FolderOutlineIcon,\n StarOutlineIcon,\n FolderMoveOutlineIcon,\n} from '@mattermost/compass-icons/components';\nimport type {ChannelCategory} from '@mattermost/types/channel_categories';\nimport type {Channel} from '@mattermost/types/channels';\n\nimport {CategoryTypes} from 'mattermost-redux/constants/channel_categories';\nimport {getCategoryInTeamWithChannel} from 'mattermost-redux/selectors/entities/channel_categories';\nimport {getAllChannels} from 'mattermost-redux/selectors/entities/channels';\nimport {getCurrentTeam} from 'mattermost-redux/selectors/entities/teams';\n\nimport {trackEvent} from 'actions/telemetry_actions';\nimport {addChannelsInSidebar} from 'actions/views/channel_sidebar';\nimport {openModal} from 'actions/views/modals';\nimport {getCategoriesForCurrentTeam} from 'selectors/views/channel_sidebar';\n\nimport EditCategoryModal from 'components/edit_category_modal';\nimport Menu from 'components/widgets/menu/menu';\n\nimport Constants, {ModalIdentifiers} from 'utils/constants';\n\nimport type {GlobalState} from 'types/store';\nimport type {Menu as MenuType} from 'types/store/plugins';\n\ntype Props = {\n channel: Channel;\n openUp: boolean;\n inHeaderDropdown?: boolean;\n};\n\nconst ChannelMoveToSubMenuOld = (props: Props) => {\n const {formatMessage} = useIntl();\n\n const dispatch = useDispatch();\n\n const allChannels = useSelector(getAllChannels);\n const multiSelectedChannelIds = useSelector((state: GlobalState) => state.views.channelSidebar.multiSelectedChannelIds);\n\n const currentTeam = useSelector(getCurrentTeam);\n const categories = useSelector((state: GlobalState) => {\n return currentTeam ? getCategoriesForCurrentTeam(state) : undefined;\n });\n const currentCategory = useSelector((state: GlobalState) => {\n return currentTeam ? getCategoryInTeamWithChannel(state, currentTeam?.id || '', props.channel.id) : undefined;\n });\n\n function handleMoveToCategory(categoryId: string) {\n if (currentCategory?.id !== categoryId) {\n dispatch(addChannelsInSidebar(categoryId, props.channel.id));\n trackEvent('ui', 'ui_sidebar_channel_menu_moveToExistingCategory');\n }\n }\n\n function handleMoveToNewCategory() {\n dispatch(openModal({\n modalId: ModalIdentifiers.EDIT_CATEGORY,\n dialogType: EditCategoryModal,\n dialogProps: {\n channelIdsToAdd: multiSelectedChannelIds.indexOf(props.channel.id) === -1 ? [props.channel.id] : multiSelectedChannelIds,\n },\n }));\n trackEvent('ui', 'ui_sidebar_channel_menu_createCategory');\n }\n\n function createSubmenuItemsForCategoryArray(categories: ChannelCategory[]): MenuType[] {\n const allCategories = categories.map((category: ChannelCategory) => {\n let text = category.display_name;\n\n if (category.type === CategoryTypes.FAVORITES) {\n text = formatMessage({id: 'sidebar_left.sidebar_channel_menu.favorites', defaultMessage: 'Favorites'});\n }\n if (category.type === CategoryTypes.CHANNELS) {\n text = formatMessage({id: 'sidebar_left.sidebar_channel_menu.channels', defaultMessage: 'Channels'});\n }\n\n return {\n id: `moveToCategory-${props.channel.id}-${category.id}`,\n icon: category.type === CategoryTypes.FAVORITES ? (<StarOutlineIcon size={16}/>) : (<FolderOutlineIcon size={16}/>),\n direction: 'right',\n text,\n action: () => handleMoveToCategory(category.id),\n };\n });\n\n const dividerAndNewCategory = [\n {\n id: 'ChannelMenu-moveToDivider',\n text: (<span className='MenuGroup menu-divider'/>),\n },\n {\n id: `moveToNewCategory-${props.channel.id}`,\n icon: (<FolderMoveOutlineIcon size={16}/>),\n direction: 'right' as any,\n text: formatMessage({id: 'sidebar_left.sidebar_channel_menu.moveToNewCategory', defaultMessage: 'New Category'}),\n action: handleMoveToNewCategory,\n },\n ];\n\n return [...allCategories, ...dividerAndNewCategory];\n }\n\n function filterCategoriesBasedOnChannelType(categories: ChannelCategory[], isDmOrGm = false) {\n if (isDmOrGm) {\n return categories.filter((category) => category.type !== CategoryTypes.CHANNELS);\n }\n\n return categories.filter((category) => category.type !== CategoryTypes.DIRECT_MESSAGES);\n }\n\n function getMoveToCategorySubmenuItems(categories: ChannelCategory[]) {\n const isSubmenuOneOfSelectedChannels = multiSelectedChannelIds.includes(props.channel.id);\n\n // If sub menu is in channel header dropdown OR If multiple channels are selected but the menu is open outside of those selected channels\n if (props.inHeaderDropdown || !isSubmenuOneOfSelectedChannels) {\n const isDmOrGm = props.channel.type === Constants.DM_CHANNEL || props.channel.type === Constants.GM_CHANNEL;\n const filteredCategories = filterCategoriesBasedOnChannelType(categories, isDmOrGm);\n return createSubmenuItemsForCategoryArray(filteredCategories);\n }\n\n const areAllSelectedChannelsDMorGM = multiSelectedChannelIds.every((channelId) => allChannels[channelId].type === Constants.DM_CHANNEL || allChannels[channelId].type === Constants.GM_CHANNEL);\n if (areAllSelectedChannelsDMorGM) {\n const filteredCategories = filterCategoriesBasedOnChannelType(categories, true);\n return createSubmenuItemsForCategoryArray(filteredCategories);\n }\n\n const areAllSelectedChannelsAreNotDMorGM = multiSelectedChannelIds.every((channelId) => allChannels[channelId].type !== Constants.DM_CHANNEL && allChannels[channelId].type !== Constants.GM_CHANNEL);\n if (areAllSelectedChannelsAreNotDMorGM) {\n const filteredCategories = filterCategoriesBasedOnChannelType(categories, false);\n return createSubmenuItemsForCategoryArray(filteredCategories);\n }\n\n // If we have a mix of channel types, we need to filter out both the DM and Channel categories\n const filteredCategories = categories.filter((category) => category.type !== CategoryTypes.CHANNELS && category.type !== CategoryTypes.DIRECT_MESSAGES);\n return createSubmenuItemsForCategoryArray(filteredCategories);\n }\n\n if (!categories) {\n return null;\n }\n\n return (\n <Menu.Group>\n <Menu.ItemSubMenu\n id={`moveTo-${props.channel.id}`}\n subMenu={getMoveToCategorySubmenuItems(categories)}\n text={formatMessage({id: 'sidebar_left.sidebar_channel_menu.moveTo', defaultMessage: 'Move to...'})}\n direction={'right'}\n icon={props.inHeaderDropdown ? null : <FolderMoveOutlineIcon size={16}/>}\n openUp={props.openUp}\n styleSelectableItem={true}\n selectedValueText={currentCategory?.display_name}\n renderSelected={false}\n />\n </Menu.Group>\n );\n};\n\nexport default memo(ChannelMoveToSubMenuOld);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport {Modal} from 'react-bootstrap';\nimport {FormattedMessage} from 'react-intl';\n\nimport {General} from 'mattermost-redux/constants';\n\nimport {trackEvent} from 'actions/telemetry_actions.jsx';\n\nimport Constants from 'utils/constants';\n\ntype Props = {\n channelDisplayName: string;\n channelId: string;\n\n /**\n * Function injected by ModalController to be called when the modal can be unmounted\n */\n onExited: () => void;\n\n actions: {\n updateChannelPrivacy: (channelId: string, privacy: string) => void;\n };\n}\n\ntype State = {\n show: boolean;\n}\n\nexport default class ConvertChannelModal extends React.PureComponent<Props, State> {\n constructor(props: Props) {\n super(props);\n\n this.state = {show: true};\n }\n\n handleConvert = () => {\n const {actions, channelId} = this.props;\n if (channelId.length !== Constants.CHANNEL_ID_LENGTH) {\n return;\n }\n\n actions.updateChannelPrivacy(channelId, General.PRIVATE_CHANNEL);\n trackEvent('actions', 'convert_to_private_channel', {channel_id: channelId});\n this.onHide();\n };\n\n onHide = () => {\n this.setState({show: false});\n };\n\n render() {\n const {\n channelDisplayName,\n onExited,\n } = this.props;\n\n return (\n <Modal\n dialogClassName='a11y__modal'\n show={this.state.show}\n onHide={this.onHide}\n onExited={onExited}\n role='none'\n aria-labelledby='convertChannelModalLabel'\n >\n <Modal.Header closeButton={true}>\n <Modal.Title\n componentClass='h1'\n id='convertChannelModalLabel'\n >\n <FormattedMessage\n id='convert_channel.title'\n defaultMessage='Convert {display_name} to a Private Channel?'\n values={{\n display_name: channelDisplayName,\n }}\n />\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <p>\n <FormattedMessage\n id='convertChannel.question1'\n defaultMessage='When you convert <b>{display_name}</b> to a private channel, history and membership are preserved. Publicly shared files remain accessible to anyone with the link. Membership in a private channel is by invitation only.'\n values={{\n display_name: channelDisplayName,\n b: (chunks: string) => <b>{chunks}</b>,\n }}\n />\n </p>\n <p>\n <FormattedMessage\n id='convertChannel.question3'\n defaultMessage='Are you sure you want to convert <b>{display_name}</b> to a private channel?'\n values={{\n display_name: channelDisplayName,\n b: (chunks: string) => <b>{chunks}</b>,\n }}\n />\n </p>\n </Modal.Body>\n <Modal.Footer>\n <button\n type='button'\n className='btn btn-tertiary'\n onClick={this.onHide}\n data-testid='convertChannelCancel'\n >\n <FormattedMessage\n id='convert_channel.cancel'\n defaultMessage='No, cancel'\n />\n </button>\n <button\n type='button'\n className='btn btn-primary'\n data-dismiss='modal'\n onClick={this.handleConvert}\n autoFocus={true}\n data-testid='convertChannelConfirm'\n >\n <FormattedMessage\n id='convert_channel.confirm'\n defaultMessage='Yes, convert to private channel'\n />\n </button>\n </Modal.Footer>\n </Modal>\n );\n }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {connect} from 'react-redux';\nimport {bindActionCreators} from 'redux';\nimport type {Dispatch} from 'redux';\n\nimport {updateChannelPrivacy} from 'mattermost-redux/actions/channels';\n\nimport ConvertChannelModal from './convert_channel_modal';\n\nfunction mapDispatchToProps(dispatch: Dispatch) {\n return {\n actions: bindActionCreators({\n updateChannelPrivacy,\n }, dispatch),\n };\n}\n\nexport default connect(null, mapDispatchToProps)(ConvertChannelModal);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport {useIntl} from 'react-intl';\n\nimport SectionNotice from 'components/section_notice';\n\nconst NoCommonTeamsError = (): JSX.Element => {\n const intl = useIntl();\n return (\n <SectionNotice\n title={intl.formatMessage({\n id: 'sidebar_left.sidebar_channel_modal.no_common_teams_error.heading',\n defaultMessage: 'Unable to convert to a channel because group members are part of different teams',\n })}\n text={intl.formatMessage({\n id: 'sidebar_left.sidebar_channel_modal.no_common_teams_error.body',\n defaultMessage: 'Group Message cannot be converted to a channel because members are not a part of the same team. Add all members to a single team to convert this group message to a channel in that team.',\n })}\n type={'danger'}\n />\n );\n};\n\nexport default NoCommonTeamsError;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {useCallback, useState} from 'react';\nimport {useIntl} from 'react-intl';\nimport {useSelector} from 'react-redux';\n\nimport type {Team} from '@mattermost/types/teams';\n\nimport {getCurrentLocale} from 'selectors/i18n';\n\nimport DropdownInput from 'components/dropdown_input';\n\nexport type Props = {\n teamsById: {[id: string]: Team};\n onChange: (teamId: string) => void;\n}\n\nconst TeamSelector = (props: Props): JSX.Element => {\n const [value, setValue] = useState<Team>();\n const intl = useIntl();\n const {formatMessage} = intl;\n\n const handleTeamChange = useCallback((e) => {\n const teamId = e.value as string;\n\n setValue(props.teamsById[teamId]);\n props.onChange(teamId);\n }, []);\n\n const currentLocale = useSelector(getCurrentLocale);\n\n const teamValues = Object.values(props.teamsById).\n map((team) => ({value: team.id, label: team.display_name})).\n sort((teamA, teamB) => teamA.label.localeCompare(teamB.label, currentLocale));\n\n return (\n <DropdownInput\n className='team_selector'\n required={true}\n onChange={handleTeamChange}\n value={value ? {label: value.display_name, value: value.id} : undefined}\n options={teamValues}\n legend={formatMessage({id: 'sidebar_left.sidebar_channel_modal.select_team_placeholder', defaultMessage: 'Select Team'})}\n placeholder={formatMessage({id: 'sidebar_left.sidebar_channel_modal.select_team_placeholder', defaultMessage: 'Select Team'})}\n name='team_selector'\n />\n );\n};\n\nexport default TeamSelector;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport {useIntl} from 'react-intl';\n\nimport SectionNotice from 'components/section_notice';\n\nexport type Props = {\n channelMemberNames: string[];\n}\nconst WarningTextSection = (props: Props): JSX.Element => {\n const intl = useIntl();\n\n let memberNames: string;\n\n if (props.channelMemberNames.length > 0) {\n memberNames = intl.formatList(props.channelMemberNames);\n } else {\n memberNames = intl.formatMessage({id: 'sidebar_left.sidebar_channel_modal.warning_body_yourself', defaultMessage: 'yourself'});\n }\n\n return (\n <SectionNotice\n title={intl.formatMessage({\n id: 'sidebar_left.sidebar_channel_modal.warning_header',\n defaultMessage: 'Conversation history will be visible to any channel members',\n })}\n text={intl.formatMessage({\n id: 'sidebar_left.sidebar_channel_modal.warning_body',\n defaultMessage: 'You are about to convert the Group Message with {memberNames} to a Channel. This cannot be undone.',\n },\n {\n memberNames,\n })}\n />\n );\n};\nexport default WarningTextSection;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport classNames from 'classnames';\nimport type {ComponentProps} from 'react';\nimport React, {useCallback, useEffect, useRef, useState} from 'react';\nimport {useIntl} from 'react-intl';\nimport {useDispatch} from 'react-redux';\n\nimport './convert_gm_to_channel_modal.scss';\n\nimport {GenericModal} from '@mattermost/components';\nimport type {Channel} from '@mattermost/types/channels';\nimport type {Team} from '@mattermost/types/teams';\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport {displayUsername} from 'mattermost-redux/utils/user_utils';\n\nimport {getGroupMessageMembersCommonTeams} from 'actions/team_actions';\nimport {trackEvent} from 'actions/telemetry_actions';\n\nimport ChannelNameFormField from 'components/channel_name_form_field/channel_name_form_field';\nimport LoadingSpinner from 'components/widgets/loading/loading_spinner';\n\nimport NoCommonTeamsError from './no_common_teams/no_common_teams';\nimport TeamSelector from './team_selector/team_selector';\nimport WarningTextSection from './warning_text_section/warning_text_section';\n\nimport type {Actions} from './index';\n\nconst enum ServerErrorId {\n CHANNEL_NAME_EXISTS = 'store.sql_channel.save_channel.exists.app_error',\n}\n\nexport type Props = {\n onExited: () => void;\n channel: Channel;\n actions: Actions;\n profilesInChannel: UserProfile[];\n teammateNameDisplaySetting: string;\n currentUserId: string;\n}\n\nconst ConvertGmToChannelModal = (props: Props) => {\n const intl = useIntl();\n const {formatMessage} = intl;\n\n const [channelName, setChannelName] = useState<string>('');\n const channelURL = useRef<string>('');\n\n const [urlError, setURLError] = useState('');\n const handleChannelURLChange = useCallback((newURL: string) => {\n channelURL.current = newURL;\n setURLError('');\n }, []);\n\n const [channelMemberNames, setChannelMemberNames] = useState<string[]>([]);\n\n useEffect(() => {\n const validProfilesInChannel = props.profilesInChannel.\n filter((user) => user.id !== props.currentUserId && user.delete_at === 0).\n map((user) => displayUsername(user, props.teammateNameDisplaySetting));\n\n setChannelMemberNames(validProfilesInChannel);\n }, [props.profilesInChannel]);\n\n const [commonTeamsById, setCommonTeamsById] = useState<{[id: string]: Team}>({});\n const [commonTeamsFetched, setCommonTeamsFetched] = useState<boolean>(false);\n const [loadingAnimationTimeout, setLoadingAnimationTimeout] = useState<boolean>(false);\n const [selectedTeamId, setSelectedTeamId] = useState<string>();\n const [nameError, setNameError] = useState<boolean>(false);\n const [conversionError, setConversionError] = useState<string>();\n\n const dispatch = useDispatch();\n\n const mounted = useRef(false);\n useEffect(() => {\n mounted.current = true;\n return (() => {\n mounted.current = false;\n });\n }, []);\n\n useEffect(() => {\n const work = async () => {\n const response = await dispatch(getGroupMessageMembersCommonTeams(props.channel.id));\n if (!mounted.current) {\n return;\n }\n\n if (response.error || !response.data) {\n return;\n }\n const teams = response.data;\n\n const teamsById: {[id: string]: Team} = {};\n teams.forEach((team) => {\n teamsById[team.id] = team;\n });\n\n setCommonTeamsById(teamsById);\n setCommonTeamsFetched(true);\n\n // if there is only common team, selected it.\n if (teams.length === 1) {\n setSelectedTeamId(teams[0].id);\n }\n };\n\n work();\n setTimeout(() => setLoadingAnimationTimeout(true), 1200);\n }, []);\n\n const handleConfirm = useCallback(async () => {\n if (!selectedTeamId) {\n return;\n }\n\n const {error} = await props.actions.convertGroupMessageToPrivateChannel(props.channel.id, selectedTeamId, channelName.trim(), channelURL.current.trim());\n\n if (error) {\n if (error.server_error_id === ServerErrorId.CHANNEL_NAME_EXISTS) {\n setURLError(\n formatMessage({\n id: 'channel_modal.alreadyExist',\n defaultMessage: 'A channel with that URL already exists',\n }),\n );\n } else {\n setConversionError(error.message);\n }\n\n return;\n }\n\n setConversionError(undefined);\n trackEvent('actions', 'convert_group_message_to_private_channel', {channel_id: props.channel.id});\n props.onExited();\n }, [selectedTeamId, props.channel.id, channelName, channelURL.current, props.actions.moveChannelsInSidebar]);\n\n const showLoader = !commonTeamsFetched || !loadingAnimationTimeout;\n const canCreate = selectedTeamId !== undefined && channelName !== '' && !nameError && !urlError;\n const modalProps: Partial<ComponentProps<typeof GenericModal>> = {};\n let modalBody;\n\n if (!showLoader && Object.keys(commonTeamsById).length === 0) {\n modalProps.confirmButtonText = formatMessage({id: 'generic.okay', defaultMessage: 'Okay'});\n modalProps.handleConfirm = props.onExited;\n\n modalBody = (\n <div className='convert-gm-to-channel-modal-body error'>\n <NoCommonTeamsError/>\n </div>\n );\n } else {\n modalProps.handleCancel = showLoader ? undefined : props.onExited;\n modalProps.isDeleteModal = true;\n modalProps.cancelButtonText = formatMessage({id: 'channel_modal.cancel', defaultMessage: 'Cancel'});\n modalProps.confirmButtonText = formatMessage({id: 'sidebar_left.sidebar_channel_modal.confirmation_text', defaultMessage: 'Convert to private channel'});\n modalProps.isConfirmDisabled = !canCreate;\n\n let subBody;\n if (showLoader) {\n subBody = (\n <div className='loadingIndicator'>\n <LoadingSpinner/>\n </div>\n );\n } else {\n subBody = (\n <>\n <WarningTextSection channelMemberNames={channelMemberNames}/>\n\n {\n Object.keys(commonTeamsById).length > 1 &&\n <TeamSelector\n teamsById={commonTeamsById}\n onChange={setSelectedTeamId}\n />\n }\n\n <ChannelNameFormField\n value={channelName}\n name='convert-gm-to-channel-modal-channel-name'\n placeholder={formatMessage({id: 'sidebar_left.sidebar_channel_modal.channel_name_placeholder', defaultMessage: 'Enter a name for the channel'})}\n autoFocus={false}\n onDisplayNameChange={setChannelName}\n onURLChange={handleChannelURLChange}\n onErrorStateChange={setNameError}\n team={selectedTeamId ? commonTeamsById[selectedTeamId] : undefined}\n urlError={urlError}\n />\n\n {\n conversionError &&\n <div className='conversion-error'>\n <i className='icon icon-alert-outline'/>\n <span>{conversionError}</span>\n </div>\n }\n\n </>\n );\n }\n\n modalBody = (\n <div\n className={classNames({\n 'convert-gm-to-channel-modal-body': true,\n loading: showLoader,\n 'single-team': Object.keys(commonTeamsById).length === 1,\n 'multi-team': Object.keys(commonTeamsById).length > 1,\n })}\n >\n {subBody}\n </div>\n );\n }\n\n return (\n <GenericModal\n id='convert-gm-to-channel-modal'\n className='convert-gm-to-channel-modal'\n modalHeaderText={formatMessage({id: 'sidebar_left.sidebar_channel_modal.header', defaultMessage: 'Convert to Private Channel'})}\n compassDesign={true}\n handleConfirm={showLoader ? undefined : handleConfirm}\n onExited={props.onExited}\n autoCloseOnConfirmButton={false}\n {...modalProps}\n >\n {modalBody}\n </GenericModal>\n );\n};\n\nexport default ConvertGmToChannelModal;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {connect} from 'react-redux';\nimport type {Dispatch} from 'redux';\nimport {bindActionCreators} from 'redux';\n\nimport {convertGroupMessageToPrivateChannel} from 'mattermost-redux/actions/channels';\nimport {getTeammateNameDisplaySetting} from 'mattermost-redux/selectors/entities/preferences';\nimport {\n getCurrentUserId,\n makeGetProfilesInChannel,\n} from 'mattermost-redux/selectors/entities/users';\nimport type {ActionResult} from 'mattermost-redux/types/actions';\n\nimport {moveChannelsInSidebar} from 'actions/views/channel_sidebar';\nimport {closeModal} from 'actions/views/modals';\n\nimport type {Props} from 'components/convert_gm_to_channel_modal/convert_gm_to_channel_modal';\nimport ConvertGmToChannelModal from 'components/convert_gm_to_channel_modal/convert_gm_to_channel_modal';\n\nimport type {GlobalState} from 'types/store';\n\nfunction makeMapStateToProps() {\n const getProfilesInChannel = makeGetProfilesInChannel();\n\n return (state: GlobalState, ownProps: Props) => {\n const allProfilesInChannel = getProfilesInChannel(state, ownProps.channel.id);\n const currentUserId = getCurrentUserId(state);\n const teammateNameDisplaySetting = getTeammateNameDisplaySetting(state);\n\n return {\n profilesInChannel: allProfilesInChannel,\n teammateNameDisplaySetting,\n currentUserId,\n };\n };\n}\n\nexport type Actions = {\n closeModal: (modalID: string) => void;\n convertGroupMessageToPrivateChannel: (channelID: string, teamID: string, displayName: string, name: string) => Promise<ActionResult>;\n moveChannelsInSidebar: (categoryId: string, targetIndex: number, draggableChannelId: string, setManualSorting?: boolean) => void;\n}\n\nfunction mapDispatchToProps(dispatch: Dispatch) {\n return {\n actions: bindActionCreators({\n closeModal,\n convertGroupMessageToPrivateChannel,\n moveChannelsInSidebar,\n }, dispatch),\n };\n}\n\nexport default connect(makeMapStateToProps, mapDispatchToProps)(ConvertGmToChannelModal);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport {Modal} from 'react-bootstrap';\nimport {FormattedMessage} from 'react-intl';\n\nimport type {Channel} from '@mattermost/types/channels';\n\nimport {getHistory} from 'utils/browser_history';\nimport Constants from 'utils/constants';\n\nexport type Props = {\n onExited: () => void;\n channel: Channel;\n currentTeamDetails?: {name: string};\n canViewArchivedChannels?: boolean;\n penultimateViewedChannelName: string;\n actions: {\n deleteChannel: (channelId: string) => void;\n };\n}\n\ntype State = {\n show: boolean;\n}\n\nexport default class DeleteChannelModal extends React.PureComponent<Props, State> {\n constructor(props: Props) {\n super(props);\n this.state = {show: true};\n }\n\n handleDelete = () => {\n if (this.props.channel.id.length !== Constants.CHANNEL_ID_LENGTH) {\n return;\n }\n if (!this.props.canViewArchivedChannels) {\n const {penultimateViewedChannelName} = this.props;\n if (this.props.currentTeamDetails) {\n getHistory().push('/' + this.props.currentTeamDetails.name + '/channels/' + penultimateViewedChannelName);\n }\n }\n this.props.actions.deleteChannel(this.props.channel.id);\n this.onHide();\n };\n\n onHide = () => {\n this.setState({show: false});\n };\n\n render() {\n const {canViewArchivedChannels} = this.props;\n return (\n <Modal\n dialogClassName='a11y__modal'\n show={this.state.show}\n onHide={this.onHide}\n onExited={this.props.onExited}\n role='none'\n aria-labelledby='deleteChannelModalLabel'\n id='deleteChannelModal'\n >\n <Modal.Header closeButton={true}>\n <Modal.Title\n componentClass='h1'\n id='deleteChannelModalLabel'\n >\n <FormattedMessage\n id='delete_channel.confirm'\n defaultMessage='Confirm ARCHIVE Channel'\n />\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <div className='alert alert-danger'>\n {!canViewArchivedChannels &&\n <>\n <p>\n <FormattedMessage\n id='deleteChannelModal.cannotViewArchivedChannelsWarning'\n defaultMessage='This will archive the channel from the team and remove it from the user interface. Archived channels can be unarchived if needed again.'\n />\n </p>\n <p>\n <FormattedMessage\n id='deleteChannelModal.confirmArchive'\n defaultMessage='Are you sure you wish to archive the <strong>{display_name}</strong> channel?'\n values={{\n display_name: this.props.channel.display_name,\n strong: (chunks: string) => <strong>{chunks}</strong>,\n }}\n />\n </p>\n </>\n }\n {canViewArchivedChannels &&\n <>\n <p>\n <FormattedMessage\n id='deleteChannelModal.canViewArchivedChannelsWarning'\n defaultMessage='This will archive the channel from the team. Channel contents will still be accessible by channel members.'\n />\n </p>\n <p>\n <FormattedMessage\n id='deleteChannelModal.confirmArchive'\n defaultMessage='Are you sure you wish to archive the <strong>{display_name}</strong> channel?'\n values={{\n display_name: this.props.channel.display_name,\n strong: (chunks: string) => <strong>{chunks}</strong>,\n }}\n />\n </p>\n </>\n }\n </div>\n </Modal.Body>\n <Modal.Footer>\n <button\n type='button'\n className='btn btn-tertiary'\n onClick={this.onHide}\n >\n <FormattedMessage\n id='delete_channel.cancel'\n defaultMessage='Cancel'\n />\n </button>\n <button\n type='button'\n className='btn btn-danger'\n data-dismiss='modal'\n onClick={this.handleDelete}\n autoFocus={true}\n id='deleteChannelModalDeleteButton'\n >\n <FormattedMessage\n id='delete_channel.del'\n defaultMessage='Archive'\n />\n </button>\n </Modal.Footer>\n </Modal>\n );\n }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {connect} from 'react-redux';\nimport {bindActionCreators} from 'redux';\nimport type {Dispatch} from 'redux';\n\nimport type {GlobalState} from '@mattermost/types/store';\n\nimport {getConfig} from 'mattermost-redux/selectors/entities/general';\nimport {getCurrentTeam} from 'mattermost-redux/selectors/entities/teams';\n\nimport {deleteChannel} from 'actions/views/channel';\n\nimport DeleteChannelModal from './delete_channel_modal';\n\nfunction mapStateToProps(state: GlobalState) {\n const config = getConfig(state);\n\n return {\n canViewArchivedChannels: config.ExperimentalViewArchivedChannels === 'true',\n currentTeamDetails: getCurrentTeam(state),\n };\n}\n\nfunction mapDispatchToProps(dispatch: Dispatch) {\n return {\n actions: bindActionCreators(\n {\n deleteChannel,\n },\n dispatch,\n ),\n };\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(DeleteChannelModal);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport type {ChangeEvent, MouseEvent} from 'react';\nimport {Modal} from 'react-bootstrap';\nimport {defineMessages, FormattedMessage, injectIntl} from 'react-intl';\nimport type {IntlShape} from 'react-intl';\n\nimport type {Channel} from '@mattermost/types/channels';\nimport type {ServerError} from '@mattermost/types/errors';\nimport type {Team} from '@mattermost/types/teams';\n\nimport type {ActionResult} from 'mattermost-redux/types/actions';\n\nimport WithTooltip from 'components/with_tooltip';\n\nimport {getHistory} from 'utils/browser_history';\nimport Constants from 'utils/constants';\nimport {getShortenedURL, validateChannelUrl} from 'utils/url';\nimport * as Utils from 'utils/utils';\n\nconst holders = defineMessages({\n maxLength: {\n id: 'rename_channel.maxLength',\n defaultMessage: 'This field must be less than {maxLength, number} characters',\n },\n url: {\n id: 'rename_channel.url',\n defaultMessage: 'URL',\n },\n defaultError: {\n id: 'rename_channel.defaultError',\n defaultMessage: ' - Cannot be changed for the default channel',\n },\n});\n\ntype Props = {\n\n /**\n * react-intl helper object\n */\n intl: IntlShape;\n\n /**\n * Function that is called when modal is hidden\n */\n onExited: () => void;\n\n /**\n * Object with info about current channel\n */\n channel: Channel;\n\n /**\n * Object with info about current team\n */\n team?: Team;\n\n /**\n * String with the current team URL\n */\n currentTeamUrl: string;\n\n /*\n * Object with redux action creators\n */\n actions: {\n\n /*\n * Action creator to patch current channel\n */\n patchChannel: (channelId: string, patch: Channel) => Promise<ActionResult>;\n };\n}\n\ntype State = {\n displayName: string;\n channelName: string;\n serverError?: string;\n urlErrors: React.ReactNode[];\n displayNameError: React.ReactNode;\n invalid: boolean;\n show: boolean;\n};\n\nexport class RenameChannelModal extends React.PureComponent<Props, State> {\n private textbox?: HTMLInputElement;\n\n constructor(props: Props) {\n super(props);\n\n this.state = {\n displayName: props.channel.display_name,\n channelName: props.channel.name,\n serverError: '',\n urlErrors: [],\n displayNameError: '',\n invalid: false,\n show: true,\n };\n }\n\n setError = (err: ServerError) => {\n this.setState({serverError: err.message});\n };\n\n unsetError = () => {\n this.setState({serverError: ''});\n };\n\n handleEntering = () => {\n if (this.textbox) {\n Utils.placeCaretAtEnd(this.textbox);\n }\n };\n\n handleHide = (e?: MouseEvent) => {\n if (e) {\n e.preventDefault();\n }\n\n this.setState({\n serverError: '',\n urlErrors: [],\n displayNameError: '',\n invalid: false,\n show: false,\n });\n };\n\n handleSubmit = async (e?: MouseEvent<HTMLButtonElement>): Promise<void> => {\n if (e) {\n e.preventDefault();\n }\n\n const channel = Object.assign({}, this.props.channel);\n const oldName = channel.name;\n const oldDisplayName = channel.display_name;\n const state = {...this.state, serverError: ''};\n const {formatMessage} = this.props.intl;\n const {actions: {patchChannel}} = this.props;\n\n channel.display_name = this.state.displayName.trim();\n if (!channel.display_name || channel.display_name.length < Constants.MIN_CHANNELNAME_LENGTH) {\n state.displayNameError = (\n <FormattedMessage\n id='rename_channel.minLength'\n defaultMessage='Display name must have at least {minLength, number} characters.'\n values={{\n minLength: Constants.MIN_CHANNELNAME_LENGTH,\n }}\n />\n );\n state.invalid = true;\n } else if (channel.display_name.length > Constants.MAX_CHANNELNAME_LENGTH) {\n state.displayNameError = formatMessage(holders.maxLength, {maxLength: Constants.MAX_CHANNELNAME_LENGTH});\n state.invalid = true;\n } else {\n state.displayNameError = '';\n }\n\n channel.name = this.state.channelName.trim();\n const urlErrors = validateChannelUrl(channel.name);\n if (urlErrors.length > 0) {\n state.invalid = true;\n }\n state.urlErrors = urlErrors;\n\n this.setState(state);\n\n if (state.invalid) {\n return;\n }\n if (oldName === channel.name && oldDisplayName === channel.display_name) {\n this.onSaveSuccess();\n return;\n }\n\n const {data, error} = await patchChannel(channel.id, channel);\n\n if (data) {\n this.onSaveSuccess();\n } else if (error) {\n this.setError(error);\n }\n };\n\n onSaveSuccess = () => {\n this.handleHide();\n this.unsetError();\n if (this.props.team) {\n getHistory().push('/' + this.props.team.name + '/channels/' + this.state.channelName);\n }\n };\n\n handleCancel = (e?: MouseEvent) => {\n this.setState({\n displayName: this.props.channel.display_name,\n channelName: this.props.channel.name,\n });\n\n this.handleHide(e);\n };\n\n onNameChange = (e: ChangeEvent<HTMLInputElement> | {target: {value: string}}) => {\n const name = e.target.value.trim().replace(/[^A-Za-z0-9-_]/g, '').toLowerCase();\n this.setState({channelName: name});\n };\n\n onDisplayNameChange = (e: ChangeEvent<HTMLInputElement>) => {\n this.setState({displayName: e.target.value});\n };\n\n getTextbox = (node: HTMLInputElement) => {\n this.textbox = node;\n };\n\n render(): JSX.Element {\n let displayNameError = null;\n if (this.state.displayNameError) {\n displayNameError = <p className='input__help error'>{this.state.displayNameError}</p>;\n }\n\n let urlErrors = null;\n let urlHelpText = null;\n let urlInputClass = 'input-group input-group--limit';\n if (this.state.urlErrors.length > 0) {\n urlErrors = <p className='input__help error'>{this.state.urlErrors}</p>;\n urlInputClass += ' has-error';\n } else {\n urlHelpText = (\n <p className='input__help'>\n <FormattedMessage\n id='change_url.helpText'\n defaultMessage='You can use lowercase letters, numbers, dashes, and underscores.'\n />\n </p>\n );\n }\n\n let serverError = null;\n if (this.state.serverError) {\n serverError = <div className='form-group has-error'><div className='as-bs-label control-label'>{this.state.serverError}</div></div>;\n }\n\n const {formatMessage} = this.props.intl;\n\n let urlInputLabel = formatMessage(holders.url);\n let readOnlyHandleInput = false;\n if (this.props.channel.name === Constants.DEFAULT_CHANNEL) {\n urlInputLabel += formatMessage(holders.defaultError);\n readOnlyHandleInput = true;\n }\n\n const fullUrl = this.props.currentTeamUrl + '/channels';\n const shortUrl = `${getShortenedURL(fullUrl, 35)}/`;\n\n return (\n <Modal\n dialogClassName='a11y__modal'\n show={this.state.show}\n onHide={this.handleCancel}\n onEntering={this.handleEntering}\n onExited={this.props.onExited}\n role='none'\n aria-labelledby='renameChannelModalLabel'\n >\n <Modal.Header closeButton={true}>\n <Modal.Title\n componentClass='h1'\n id='renameChannelModalLabel'\n >\n <FormattedMessage\n id='rename_channel.title'\n defaultMessage='Rename Channel'\n />\n </Modal.Title>\n </Modal.Header>\n <form role='form'>\n <Modal.Body>\n <div className='form-group'>\n <label\n className='control-label'\n htmlFor='display_name'\n >\n <FormattedMessage\n id='rename_channel.displayName'\n defaultMessage='Display Name'\n />\n </label>\n <input\n onChange={this.onDisplayNameChange}\n type='text'\n ref={this.getTextbox}\n id='display_name'\n className='form-control'\n placeholder={formatMessage({\n id: 'rename_channel.displayNameHolder',\n defaultMessage: 'Enter display name',\n })}\n value={this.state.displayName}\n maxLength={Constants.MAX_CHANNELNAME_LENGTH}\n aria-label={formatMessage({id: 'rename_channel.displayName', defaultMessage: 'Display Name'}).toLowerCase()}\n />\n {displayNameError}\n </div>\n <div className='form-group'>\n <label\n className='control-label'\n htmlFor='channel_name'\n >\n {urlInputLabel}\n </label>\n\n <div className={urlInputClass}>\n <WithTooltip\n title={fullUrl}\n >\n <span className='input-group-addon'>{shortUrl}</span>\n </WithTooltip>\n <input\n onChange={this.onNameChange}\n type='text'\n className='form-control'\n id='channel_name'\n value={this.state.channelName}\n maxLength={Constants.MAX_CHANNELNAME_LENGTH}\n readOnly={readOnlyHandleInput}\n aria-label={formatMessage({id: 'rename_channel.title', defaultMessage: 'Rename Channel'}).toLowerCase()}\n />\n </div>\n {urlHelpText}\n {urlErrors}\n </div>\n {serverError}\n </Modal.Body>\n <Modal.Footer>\n <button\n type='button'\n className='btn btn-tertiary'\n onClick={this.handleCancel}\n >\n <FormattedMessage\n id='rename_channel.cancel'\n defaultMessage='Cancel'\n />\n </button>\n <button\n onClick={this.handleSubmit}\n type='submit'\n id='save-button'\n className='btn btn-primary'\n >\n <FormattedMessage\n id='rename_channel.save'\n defaultMessage='Save'\n />\n </button>\n </Modal.Footer>\n </form>\n </Modal>\n );\n }\n}\n\nexport default injectIntl(RenameChannelModal);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {connect} from 'react-redux';\nimport {bindActionCreators} from 'redux';\nimport type {Dispatch} from 'redux';\n\nimport type {GlobalState} from '@mattermost/types/store';\n\nimport {patchChannel} from 'mattermost-redux/actions/channels';\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {getTeam} from 'mattermost-redux/selectors/entities/teams';\n\nimport {getSiteURL} from 'utils/url';\n\nimport RenameChannelModal from './rename_channel_modal';\n\nconst mapStateToPropsRenameChannel = createSelector(\n 'mapStateToPropsRenameChannel',\n (state: GlobalState) => {\n const currentTeamId = state.entities.teams.currentTeamId;\n const team = getTeam(state, currentTeamId);\n const currentTeamUrl = `${getSiteURL()}/${team ? team.name : ''}`;\n return {\n currentTeamUrl,\n team,\n };\n },\n (teamInfo) => ({...teamInfo}),\n);\n\nfunction mapDispatchToProps(dispatch: Dispatch) {\n return {\n actions: bindActionCreators({\n patchChannel,\n }, dispatch),\n };\n}\n\nexport default connect(mapStateToPropsRenameChannel, mapDispatchToProps)(RenameChannelModal);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport {Modal} from 'react-bootstrap';\nimport {FormattedMessage} from 'react-intl';\n\nimport type {Channel} from '@mattermost/types/channels';\n\nimport type {ActionResult} from 'mattermost-redux/types/actions';\n\nimport Constants from 'utils/constants';\n\ntype Props = {\n onExited: () => void;\n channel: Channel;\n actions: ChannelDetailsActions;\n}\n\ntype State = {\n show: boolean;\n}\n\nexport type ChannelDetailsActions = {\n unarchiveChannel: (channelId: string) => Promise<ActionResult>;\n};\n\nexport default class UnarchiveChannelModal extends React.PureComponent<Props, State> {\n constructor(props: Props) {\n super(props);\n\n this.state = {show: true};\n }\n\n handleUnarchive = (): void => {\n if (this.props.channel.id.length !== Constants.CHANNEL_ID_LENGTH) {\n return;\n }\n this.props.actions.unarchiveChannel(this.props.channel.id);\n this.onHide();\n };\n\n onHide = (): void => {\n this.setState({show: false});\n };\n\n render(): JSX.Element {\n return (\n <Modal\n dialogClassName='a11y__modal'\n show={this.state.show}\n onHide={this.onHide}\n onExited={this.props.onExited}\n role='none'\n aria-labelledby='unarchiveChannelModalLabel'\n id='unarchiveChannelModal'\n >\n <Modal.Header closeButton={true}>\n <Modal.Title\n componentClass='h1'\n id='unarchiveChannelModalLabel'\n >\n <FormattedMessage\n id='unarchive_channel.confirm'\n defaultMessage='Confirm UNARCHIVE Channel'\n />\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <div className='alert alert-danger'>\n <FormattedMessage\n id='unarchiveChannelModal.viewArchived.question'\n defaultMessage={'Are you sure you wish to unarchive the <b>{display_name}</b> channel?'}\n values={{\n display_name: this.props.channel.display_name,\n b: (chunks: string) => <b>{chunks}</b>,\n }}\n />\n </div>\n </Modal.Body>\n <Modal.Footer>\n <button\n type='button'\n className='btn btn-tertiary'\n onClick={this.onHide}\n >\n <FormattedMessage\n id='unarchive_channel.cancel'\n defaultMessage='Cancel'\n />\n </button>\n <button\n type='button'\n className='btn btn-danger'\n data-dismiss='modal'\n onClick={this.handleUnarchive}\n autoFocus={true}\n id='unarchiveChannelModalDeleteButton'\n >\n <FormattedMessage\n id='unarchive_channel.del'\n defaultMessage='Unarchive'\n />\n </button>\n </Modal.Footer>\n </Modal>\n );\n }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {connect} from 'react-redux';\nimport {bindActionCreators} from 'redux';\nimport type {Dispatch} from 'redux';\n\nimport {unarchiveChannel} from 'mattermost-redux/actions/channels';\n\nimport UnarchiveChannelModal from './unarchive_channel_modal';\n\nfunction mapDispatchToProps(dispatch: Dispatch) {\n return {\n actions: bindActionCreators({\n unarchiveChannel,\n }, dispatch),\n };\n}\n\nexport default connect(null, mapDispatchToProps)(UnarchiveChannelModal);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport {useIntl} from 'react-intl';\n\nimport Menu from 'components/widgets/menu/menu';\n\ntype Props = {\n isArchived: boolean;\n actions: {\n goToLastViewedChannel: () => void;\n };\n}\n\nconst CloseChannel = ({\n isArchived,\n actions,\n}: Props): JSX.Element => {\n const intl = useIntl();\n\n return (\n <Menu.ItemAction\n show={isArchived}\n onClick={actions.goToLastViewedChannel}\n text={intl.formatMessage({\n id: 'center_panel.archived.closeChannel',\n defaultMessage: 'Close Channel',\n })}\n />\n );\n};\n\nexport default React.memo(CloseChannel);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {connect} from 'react-redux';\nimport {bindActionCreators} from 'redux';\nimport type {Dispatch} from 'redux';\n\nimport {goToLastViewedChannel} from 'actions/views/channel';\n\nimport CloseChannel from './close_channel';\n\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\n actions: bindActionCreators({\n goToLastViewedChannel,\n }, dispatch),\n});\n\nexport default connect(null, mapDispatchToProps)(CloseChannel);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\n\nimport type {Channel} from '@mattermost/types/channels';\nimport type {PreferenceType} from '@mattermost/types/preferences';\nimport type {Team} from '@mattermost/types/teams';\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport Menu from 'components/widgets/menu/menu';\n\nimport {getHistory} from 'utils/browser_history';\nimport {Constants} from 'utils/constants';\nimport {localizeMessage} from 'utils/utils';\n\ntype Props = {\n\n /**\n * Object with info about currentUser\n */\n currentUser: UserProfile;\n\n /**\n * Object with info about currentTeam\n */\n currentTeam?: Team;\n\n /**\n * String with info about redirect\n */\n redirectChannel: string;\n\n /**\n * Object with info about channel\n */\n channel: Channel;\n\n /**\n * Use for test selector\n */\n id?: string;\n\n /**\n * Object with action creators\n */\n actions: {\n\n /**\n * Action creator to update user preferences\n */\n savePreferences: (userId: string, preferences: PreferenceType[]) => void;\n\n /**\n * Action creator to leave DM/GM\n */\n leaveDirectChannel: (channelName: string) => void;\n };\n};\n\nexport default class CloseMessage extends React.PureComponent<Props> {\n handleClose = (e: React.MouseEvent): void => {\n e.preventDefault();\n\n const {\n channel,\n currentUser,\n currentTeam,\n redirectChannel,\n actions: {\n savePreferences,\n leaveDirectChannel,\n },\n } = this.props;\n\n let name: string;\n let category;\n if (channel.type === Constants.DM_CHANNEL) {\n category = Constants.Preferences.CATEGORY_DIRECT_CHANNEL_SHOW;\n name = channel.teammate_id!;\n } else {\n category = Constants.Preferences.CATEGORY_GROUP_CHANNEL_SHOW;\n name = channel.id;\n }\n\n leaveDirectChannel(channel.name);\n savePreferences(currentUser.id, [{user_id: currentUser.id, category, name, value: 'false'}]);\n\n if (currentTeam) {\n getHistory().push(`/${currentTeam.name}/channels/${redirectChannel}`);\n }\n };\n\n render(): React.ReactNode {\n const {id, channel} = this.props;\n\n let text;\n if (channel.type === Constants.DM_CHANNEL) {\n text = localizeMessage({id: 'center_panel.direct.closeDirectMessage', defaultMessage: 'Close Direct Message'});\n } else if (channel.type === Constants.GM_CHANNEL) {\n text = localizeMessage({id: 'center_panel.direct.closeGroupMessage', defaultMessage: 'Close Group Message'});\n }\n\n return (\n <Menu.ItemAction\n id={id}\n show={channel.type === Constants.DM_CHANNEL || channel.type === Constants.GM_CHANNEL}\n onClick={this.handleClose}\n text={text}\n />\n );\n }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {connect} from 'react-redux';\nimport {bindActionCreators} from 'redux';\nimport type {Dispatch} from 'redux';\n\nimport {savePreferences} from 'mattermost-redux/actions/preferences';\nimport {getRedirectChannelNameForTeam} from 'mattermost-redux/selectors/entities/channels';\nimport {getCurrentTeam, getCurrentTeamId} from 'mattermost-redux/selectors/entities/teams';\n\nimport {leaveDirectChannel} from 'actions/views/channel';\n\nimport type {GlobalState} from 'types/store';\n\nimport CloseMessage from './close_message';\n\nconst mapStateToProps = (state: GlobalState) => {\n return {\n currentTeam: getCurrentTeam(state),\n redirectChannel: getRedirectChannelNameForTeam(state, getCurrentTeamId(state)),\n };\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\n actions: bindActionCreators({savePreferences, leaveDirectChannel}, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(CloseMessage);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {memo, useCallback} from 'react';\nimport {useIntl} from 'react-intl';\n\nimport type {Channel} from '@mattermost/types/channels';\n\nimport LeaveChannelModal from 'components/leave_channel_modal';\nimport Menu from 'components/widgets/menu/menu';\n\nimport {Constants, ModalIdentifiers} from 'utils/constants';\n\nimport type {PropsFromRedux} from './index';\n\ntype Props = PropsFromRedux & {\n\n /**\n * Object with info about user\n */\n channel: Channel;\n\n /**\n * Boolean whether the channel is default\n */\n isDefault: boolean;\n\n /**\n * Boolean whether the user is a guest or no\n */\n isGuestUser: boolean;\n\n /**\n * Use for test selector\n */\n id?: string;\n};\n\nconst LeaveChannel = ({\n isDefault = true,\n isGuestUser = false,\n channel,\n actions: {\n leaveChannel,\n openModal,\n },\n id,\n}: Props) => {\n const intl = useIntl();\n\n const handleLeave = useCallback((e: Event) => {\n e.preventDefault();\n\n if (channel.type === Constants.PRIVATE_CHANNEL) {\n openModal({\n modalId: ModalIdentifiers.LEAVE_PRIVATE_CHANNEL_MODAL,\n dialogType: LeaveChannelModal,\n dialogProps: {\n channel,\n },\n });\n } else {\n leaveChannel(channel.id);\n }\n }, [channel, leaveChannel, openModal]);\n\n return (\n <Menu.ItemAction\n id={id}\n show={(!isDefault || isGuestUser) && channel.type !== Constants.DM_CHANNEL && channel.type !== Constants.GM_CHANNEL}\n onClick={handleLeave}\n text={intl.formatMessage({id: 'channel_header.leave', defaultMessage: 'Leave Channel'})}\n isDangerous={true}\n />\n );\n};\n\nexport default memo(LeaveChannel);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {connect} from 'react-redux';\nimport type {ConnectedProps} from 'react-redux';\nimport {bindActionCreators} from 'redux';\nimport type {Dispatch} from 'redux';\n\nimport {leaveChannel} from 'actions/views/channel';\nimport {openModal} from 'actions/views/modals';\n\nimport LeaveChannel from './leave_channel';\n\nfunction mapDispatchToProps(dispatch: Dispatch) {\n return {\n actions: bindActionCreators({\n leaveChannel,\n openModal,\n }, dispatch),\n };\n}\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport type PropsFromRedux = ConnectedProps<typeof connector>;\n\nexport default connector(LeaveChannel);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\n\nimport type {Channel} from '@mattermost/types/channels';\n\nimport Menu from 'components/widgets/menu/menu';\n\ntype Action = {\n showChannelMembers: (channelId: string, editMembers: boolean) => void;\n};\n\ntype OwnProps = {\n channel: Channel;\n show: boolean;\n id: string;\n editMembers?: boolean;\n text: string;\n}\n\ntype Props = {\n rhsOpen: boolean;\n actions: Action;\n} & OwnProps;\n\nconst ToggleChannelMembersRHS = ({\n show,\n id,\n channel,\n rhsOpen,\n text,\n editMembers = false,\n actions,\n}: Props) => {\n const openRHSIfNotOpen = () => {\n if (rhsOpen) {\n return;\n }\n actions.showChannelMembers(channel.id, editMembers);\n };\n\n return (\n <Menu.ItemAction\n show={show}\n id={id}\n onClick={openRHSIfNotOpen}\n text={text}\n />\n );\n};\n\nexport default ToggleChannelMembersRHS;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {connect} from 'react-redux';\nimport {bindActionCreators} from 'redux';\nimport type {Dispatch} from 'redux';\n\nimport {showChannelMembers} from 'actions/views/rhs';\nimport {getIsRhsOpen, getRhsState} from 'selectors/rhs';\n\nimport {RHSStates} from 'utils/constants';\n\nimport type {GlobalState} from 'types/store';\n\nimport OpenChannelMembersRHS from './open_members_rhs';\n\nconst mapStateToProps = (state: GlobalState) => ({\n rhsOpen: getIsRhsOpen(state) && getRhsState(state) === RHSStates.CHANNEL_MEMBERS,\n});\n\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\n actions: bindActionCreators({\n showChannelMembers,\n }, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(OpenChannelMembersRHS);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {memo, useCallback} from 'react';\nimport type {MouseEvent} from 'react';\nimport {useIntl} from 'react-intl';\n\nimport type {Channel} from '@mattermost/types/channels';\n\nimport Menu from 'components/widgets/menu/menu';\n\ntype Action = {\n favoriteChannel: (channelId: string) => void;\n unfavoriteChannel: (channelId: string) => void;\n};\n\ntype Props = {\n show?: boolean;\n channel: Channel;\n isFavorite: boolean;\n actions: Action;\n};\n\nconst ToggleFavoriteChannel = ({\n show = true,\n isFavorite,\n actions: {\n favoriteChannel,\n unfavoriteChannel,\n },\n channel,\n}: Props) => {\n const intl = useIntl();\n\n const toggleFavoriteChannel = useCallback((channelId: string) => {\n return isFavorite ? unfavoriteChannel(channelId) : favoriteChannel(channelId);\n }, [isFavorite, favoriteChannel, unfavoriteChannel]);\n\n const handleClick = useCallback((e: MouseEvent<HTMLButtonElement>): void => {\n e.preventDefault();\n toggleFavoriteChannel(channel.id);\n }, [channel.id, toggleFavoriteChannel]);\n\n let text;\n if (isFavorite) {\n text = intl.formatMessage({id: 'channelHeader.removeFromFavorites', defaultMessage: 'Remove from Favorites'});\n } else {\n text = intl.formatMessage({id: 'channelHeader.addToFavorites', defaultMessage: 'Add to Favorites'});\n }\n return (\n <Menu.ItemAction\n show={show}\n onClick={handleClick}\n text={text}\n />\n );\n};\n\nexport default memo(ToggleFavoriteChannel);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {connect} from 'react-redux';\nimport {bindActionCreators} from 'redux';\nimport type {Dispatch} from 'redux';\n\nimport {favoriteChannel, unfavoriteChannel} from 'mattermost-redux/actions/channels';\n\nimport ToggleFavoriteChannel from './toggle_favorite_channel';\n\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\n actions: bindActionCreators({\n favoriteChannel,\n unfavoriteChannel,\n }, dispatch),\n});\n\nexport default connect(null, mapDispatchToProps)(ToggleFavoriteChannel);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport {useIntl} from 'react-intl';\n\nimport type {Channel} from '@mattermost/types/channels';\n\nimport Menu from 'components/widgets/menu/menu';\n\ntype Action = {\n closeRightHandSide: () => void;\n showChannelInfo: (channelId: string) => void;\n};\n\ntype Props = {\n show: boolean;\n channel: Channel;\n rhsOpen: boolean;\n actions: Action;\n};\n\nconst ToggleInfo = ({show, channel, rhsOpen, actions}: Props) => {\n const intl = useIntl();\n\n const toggleRHS = () => {\n if (rhsOpen) {\n actions.closeRightHandSide();\n return;\n }\n actions.showChannelInfo(channel.id);\n };\n\n let text;\n if (rhsOpen) {\n text = intl.formatMessage({id: 'channelHeader.hideInfo', defaultMessage: 'Close Info'});\n } else {\n text = intl.formatMessage({id: 'channelHeader.viewInfo', defaultMessage: 'View Info'});\n }\n\n return (\n <Menu.ItemAction\n show={show}\n onClick={toggleRHS}\n text={text}\n />\n );\n};\n\nexport default ToggleInfo;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {connect} from 'react-redux';\nimport {bindActionCreators} from 'redux';\nimport type {Dispatch} from 'redux';\n\nimport {closeRightHandSide, showChannelInfo} from 'actions/views/rhs';\nimport {getIsRhsOpen, getRhsState} from 'selectors/rhs';\n\nimport {RHSStates} from 'utils/constants';\n\nimport type {GlobalState} from 'types/store';\n\nimport ToggleInfo from './toggle_info';\n\nconst mapStateToProps = (state: GlobalState) => ({\n rhsOpen: getIsRhsOpen(state) && getRhsState(state) === RHSStates.CHANNEL_INFO,\n});\n\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\n actions: bindActionCreators({\n closeRightHandSide,\n showChannelInfo,\n }, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ToggleInfo);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {useCallback} from 'react';\nimport {useIntl} from 'react-intl';\n\nimport type {Channel, ChannelNotifyProps} from '@mattermost/types/channels';\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport Menu from 'components/widgets/menu/menu';\n\nimport {Constants, NotificationLevels} from 'utils/constants';\n\nexport type Actions = {\n updateChannelNotifyProps(userId: string, channelId: string, props: Partial<ChannelNotifyProps>): void;\n};\n\ntype Props = {\n\n /**\n * Object with info about the current user\n */\n user: UserProfile;\n\n /**\n * Object with info about the current channel\n */\n channel: Channel;\n\n /**\n * Boolean whether the current channel is muted\n */\n isMuted: boolean;\n\n /**\n * Use for test selector\n */\n id?: string;\n\n /**\n * Object with action creators\n */\n actions: Actions;\n};\n\nexport default function MenuItemToggleMuteChannel({\n id,\n isMuted,\n channel,\n user,\n actions,\n}: Props) {\n const intl = useIntl();\n\n const handleClick = useCallback(() => {\n actions.updateChannelNotifyProps(user.id, channel.id, {\n mark_unread: (isMuted ? NotificationLevels.ALL : NotificationLevels.MENTION) as 'all' | 'mention',\n });\n }, [actions, isMuted, user.id, channel.id]);\n\n let text;\n if (channel.type === Constants.DM_CHANNEL || channel.type === Constants.GM_CHANNEL) {\n text = isMuted ?\n intl.formatMessage({id: 'channel_header.unmuteConversation', defaultMessage: 'Unmute Conversation'}) :\n intl.formatMessage({id: 'channel_header.muteConversation', defaultMessage: 'Mute Conversation'});\n } else {\n text = isMuted ?\n intl.formatMessage({id: 'channel_header.unmute', defaultMessage: 'Unmute Channel'}) :\n intl.formatMessage({id: 'channel_header.mute', defaultMessage: 'Mute Channel'});\n }\n\n return (\n <Menu.ItemAction\n id={id}\n onClick={handleClick}\n text={text}\n />\n );\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {connect} from 'react-redux';\nimport {bindActionCreators} from 'redux';\nimport type {Dispatch} from 'redux';\n\nimport {updateChannelNotifyProps} from 'mattermost-redux/actions/channels';\n\nimport MenuItemToggleMuteChannel from './toggle_mute_channel';\n\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\n actions: bindActionCreators({\n updateChannelNotifyProps,\n }, dispatch),\n});\n\nexport default connect(null, mapDispatchToProps)(MenuItemToggleMuteChannel);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {useCallback, memo} from 'react';\nimport type {MouseEvent} from 'react';\nimport {useIntl} from 'react-intl';\n\nimport Menu from 'components/widgets/menu/menu';\n\ntype Props = {\n show?: boolean;\n channel: any;\n hasPinnedPosts: boolean;\n actions: {\n closeRightHandSide: () => void;\n showPinnedPosts: (id: any) => void;\n };\n}\n\nconst ViewPinnedPosts = ({\n channel,\n hasPinnedPosts,\n actions: {\n closeRightHandSide,\n showPinnedPosts,\n },\n show,\n}: Props) => {\n const intl = useIntl();\n const handleClick = useCallback((e: MouseEvent) => {\n e.preventDefault();\n\n if (hasPinnedPosts) {\n closeRightHandSide();\n } else {\n showPinnedPosts(channel.id);\n }\n }, [channel.id, closeRightHandSide, showPinnedPosts, hasPinnedPosts]);\n\n return (\n <Menu.ItemAction\n show={show}\n onClick={handleClick}\n text={intl.formatMessage({id: 'navbar.viewPinnedPosts', defaultMessage: 'View Pinned Posts'})}\n />\n );\n};\n\nexport default memo(ViewPinnedPosts);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {connect} from 'react-redux';\nimport {bindActionCreators} from 'redux';\nimport type {Dispatch} from 'redux';\n\nimport {closeRightHandSide, showPinnedPosts} from 'actions/views/rhs';\nimport {getRhsState} from 'selectors/rhs';\n\nimport {RHSStates} from 'utils/constants';\n\nimport type {GlobalState} from 'types/store';\n\nimport ViewPinnedPosts from './view_pinned_posts';\n\nconst mapStateToProps = (state: GlobalState) => ({\n hasPinnedPosts: getRhsState(state) === RHSStates.PIN,\n});\n\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\n actions: bindActionCreators({\n closeRightHandSide,\n showPinnedPosts,\n }, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ViewPinnedPosts);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\n\nimport type {Channel} from '@mattermost/types/channels';\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport {Permissions} from 'mattermost-redux/constants';\nimport {isGuest} from 'mattermost-redux/utils/user_utils';\n\nimport AddGroupsToChannelModal from 'components/add_groups_to_channel_modal';\nimport ChannelBookmarksSubmenu from 'components/channel_bookmarks_sub_menu';\nimport ChannelGroupsManageModal from 'components/channel_groups_manage_modal';\nimport ChannelInviteModal from 'components/channel_invite_modal';\nimport ChannelMoveToSubMenuOld from 'components/channel_move_to_sub_menu_old';\nimport ChannelNotificationsModal from 'components/channel_notifications_modal';\nimport ConvertChannelModal from 'components/convert_channel_modal';\nimport ConvertGmToChannelModal from 'components/convert_gm_to_channel_modal';\nimport DeleteChannelModal from 'components/delete_channel_modal';\nimport EditChannelHeaderModal from 'components/edit_channel_header_modal';\nimport EditChannelPurposeModal from 'components/edit_channel_purpose_modal';\nimport MoreDirectChannels from 'components/more_direct_channels';\nimport ChannelPermissionGate from 'components/permissions_gates/channel_permission_gate';\nimport RenameChannelModal from 'components/rename_channel_modal';\nimport UnarchiveChannelModal from 'components/unarchive_channel_modal';\nimport Menu from 'components/widgets/menu/menu';\n\nimport MobileChannelHeaderPlug from 'plugins/mobile_channel_header_plug';\nimport {Constants, ModalIdentifiers} from 'utils/constants';\nimport {localizeMessage} from 'utils/utils';\n\nimport type {PluginComponent} from 'types/store/plugins';\n\nimport MenuItemCloseChannel from './menu_items/close_channel';\nimport MenuItemCloseMessage from './menu_items/close_message';\nimport MenuItemLeaveChannel from './menu_items/leave_channel';\nimport MenuItemOpenMembersRHS from './menu_items/open_members_rhs';\nimport MenuItemToggleFavoriteChannel from './menu_items/toggle_favorite_channel';\nimport MenuItemToggleInfo from './menu_items/toggle_info';\nimport MenuItemToggleMuteChannel from './menu_items/toggle_mute_channel';\nimport MenuItemViewPinnedPosts from './menu_items/view_pinned_posts';\n\nexport type Props = {\n user: UserProfile;\n channel?: Channel;\n isDefault: boolean;\n isFavorite: boolean;\n isReadonly: boolean;\n isMuted: boolean;\n isArchived: boolean;\n isMobile: boolean;\n penultimateViewedChannelName: string;\n pluginMenuItems: PluginComponent[];\n isLicensedForLDAPGroups: boolean;\n isChannelBookmarksEnabled: boolean;\n}\n\nexport default class ChannelHeaderDropdown extends React.PureComponent<Props> {\n render() {\n const {\n user,\n channel,\n isDefault,\n isFavorite,\n isMuted,\n isReadonly,\n isArchived,\n isMobile,\n penultimateViewedChannelName,\n isLicensedForLDAPGroups,\n isChannelBookmarksEnabled,\n } = this.props;\n\n if (!channel) {\n return null;\n }\n\n const isPrivate = channel.type === Constants.PRIVATE_CHANNEL;\n const isGroupConstrained = channel.group_constrained === true;\n const channelMembersPermission = isPrivate ? Permissions.MANAGE_PRIVATE_CHANNEL_MEMBERS : Permissions.MANAGE_PUBLIC_CHANNEL_MEMBERS;\n const channelPropertiesPermission = isPrivate ? Permissions.MANAGE_PRIVATE_CHANNEL_PROPERTIES : Permissions.MANAGE_PUBLIC_CHANNEL_PROPERTIES;\n const channelDeletePermission = isPrivate ? Permissions.DELETE_PRIVATE_CHANNEL : Permissions.DELETE_PUBLIC_CHANNEL;\n const channelUnarchivePermission = Permissions.MANAGE_TEAM;\n\n let divider;\n if (isMobile) {\n divider = (\n <li className='MenuGroup mobile-menu-divider'>\n <hr/>\n </li>\n );\n }\n\n const pluginItems = this.props.pluginMenuItems.map((item) => {\n return (\n <Menu.ItemAction\n id={item.id + '_pluginmenuitem'}\n key={item.id + '_pluginmenuitem'}\n onClick={() => {\n if (item.action) {\n item.action(channel.id);\n }\n }}\n text={item.text}\n />\n );\n });\n\n return (\n <>\n <MenuItemToggleInfo\n show={channel.type !== Constants.DM_CHANNEL && channel.type !== Constants.GM_CHANNEL}\n channel={channel}\n />\n {/* Remove when this components is migrated to new menus */}\n <ChannelMoveToSubMenuOld\n channel={channel}\n openUp={false}\n inHeaderDropdown={true}\n />\n <Menu.Group divider={divider}>\n <MenuItemToggleFavoriteChannel\n show={isMobile}\n channel={channel}\n isFavorite={isFavorite}\n />\n <MenuItemViewPinnedPosts\n show={isMobile}\n channel={channel}\n />\n <Menu.ItemToggleModalRedux\n id='channelNotificationPreferences'\n show={channel.type !== Constants.DM_CHANNEL && !isArchived}\n modalId={ModalIdentifiers.CHANNEL_NOTIFICATIONS}\n dialogType={ChannelNotificationsModal}\n dialogProps={{\n channel,\n currentUser: user,\n }}\n text={localizeMessage({id: 'navbar.preferences', defaultMessage: 'Notification Preferences'})}\n />\n <MenuItemToggleMuteChannel\n id='channelToggleMuteChannel'\n user={user}\n channel={channel}\n isMuted={isMuted}\n />\n </Menu.Group>\n\n <Menu.Group divider={divider}>\n <ChannelPermissionGate\n channelId={channel.id}\n teamId={channel.team_id}\n permissions={[channelMembersPermission]}\n >\n <Menu.ItemToggleModalRedux\n id='channelAddMembers'\n show={channel.type !== Constants.DM_CHANNEL && channel.type !== Constants.GM_CHANNEL && !isArchived && !isDefault && !isGroupConstrained}\n modalId={ModalIdentifiers.CHANNEL_INVITE}\n dialogType={ChannelInviteModal}\n dialogProps={{channel}}\n text={localizeMessage({id: 'navbar.addMembers', defaultMessage: 'Add Members'})}\n />\n <Menu.ItemToggleModalRedux\n id='channelAddMembers'\n show={channel.type === Constants.GM_CHANNEL && !isArchived && !isGroupConstrained}\n modalId={ModalIdentifiers.CREATE_DM_CHANNEL}\n dialogType={MoreDirectChannels}\n dialogProps={{isExistingChannel: true}}\n text={localizeMessage({id: 'navbar.addMembers', defaultMessage: 'Add Members'})}\n />\n </ChannelPermissionGate>\n <MenuItemOpenMembersRHS\n id='channelViewMembers'\n channel={channel}\n show={channel.type !== Constants.DM_CHANNEL && channel.type !== Constants.GM_CHANNEL && (isArchived || isDefault)}\n text={localizeMessage({id: 'channel_header.viewMembers', defaultMessage: 'View Members'})}\n />\n <ChannelPermissionGate\n channelId={channel.id}\n teamId={channel.team_id}\n permissions={[channelMembersPermission]}\n >\n <Menu.ItemToggleModalRedux\n id='channelAddGroups'\n show={channel.type !== Constants.DM_CHANNEL && channel.type !== Constants.GM_CHANNEL && !isArchived && !isDefault && isGroupConstrained && isLicensedForLDAPGroups}\n modalId={ModalIdentifiers.ADD_GROUPS_TO_CHANNEL}\n dialogType={AddGroupsToChannelModal}\n text={localizeMessage({id: 'navbar.addGroups', defaultMessage: 'Add Groups'})}\n />\n <Menu.ItemToggleModalRedux\n id='channelManageGroups'\n show={channel.type !== Constants.DM_CHANNEL && channel.type !== Constants.GM_CHANNEL && !isArchived && !isDefault && isGroupConstrained && isLicensedForLDAPGroups}\n modalId={ModalIdentifiers.MANAGE_CHANNEL_GROUPS}\n dialogType={ChannelGroupsManageModal}\n dialogProps={{channelID: channel.id}}\n text={localizeMessage({id: 'navbar_dropdown.manageGroups', defaultMessage: 'Manage Groups'})}\n />\n <MenuItemOpenMembersRHS\n id='channelManageMembers'\n channel={channel}\n show={channel.type !== Constants.DM_CHANNEL && channel.type !== Constants.GM_CHANNEL && !isArchived && !isDefault}\n text={localizeMessage({id: 'channel_header.manageMembers', defaultMessage: 'Manage Members'})}\n editMembers={!isArchived}\n />\n </ChannelPermissionGate>\n <ChannelPermissionGate\n channelId={channel.id}\n teamId={channel.team_id}\n permissions={[channelMembersPermission]}\n invert={true}\n >\n <MenuItemOpenMembersRHS\n id='channelViewMembers'\n channel={channel}\n show={channel.type !== Constants.DM_CHANNEL && channel.type !== Constants.GM_CHANNEL && !isArchived && !isDefault}\n text={localizeMessage({id: 'channel_header.viewMembers', defaultMessage: 'View Members'})}\n />\n </ChannelPermissionGate>\n </Menu.Group>\n\n <Menu.Group divider={divider}>\n <Menu.ItemToggleModalRedux\n id='channelEditHeader'\n show={(channel.type === Constants.DM_CHANNEL || channel.type === Constants.GM_CHANNEL) && !isArchived && !isReadonly}\n modalId={ModalIdentifiers.EDIT_CHANNEL_HEADER}\n dialogType={EditChannelHeaderModal}\n dialogProps={{channel}}\n text={localizeMessage({id: 'channel_header.setConversationHeader', defaultMessage: 'Edit Conversation Header'})}\n />\n\n <Menu.ItemToggleModalRedux\n id='convertGMPrivateChannel'\n show={channel.type === Constants.GM_CHANNEL && !isArchived && !isReadonly && !isGuest(user.roles)}\n modalId={ModalIdentifiers.CONVERT_GM_TO_CHANNEL}\n dialogType={ConvertGmToChannelModal}\n dialogProps={{channel}}\n text={localizeMessage({id: 'sidebar_left.sidebar_channel_menu_convert_to_channel', defaultMessage: 'Convert to Private Channel'})}\n />\n </Menu.Group>\n\n <Menu.Group divider={divider}>\n {isChannelBookmarksEnabled && <ChannelBookmarksSubmenu channel={channel}/>}\n <ChannelPermissionGate\n channelId={channel.id}\n teamId={channel.team_id}\n permissions={[channelPropertiesPermission]}\n >\n <Menu.ItemToggleModalRedux\n id='channelEditHeader'\n show={channel.type !== Constants.DM_CHANNEL && channel.type !== Constants.GM_CHANNEL && !isArchived && !isReadonly}\n modalId={ModalIdentifiers.EDIT_CHANNEL_HEADER}\n dialogType={EditChannelHeaderModal}\n dialogProps={{channel}}\n text={localizeMessage({id: 'channel_header.setHeader', defaultMessage: 'Edit Channel Header'})}\n />\n <Menu.ItemToggleModalRedux\n id='channelEditPurpose'\n show={!isArchived && !isReadonly && channel.type !== Constants.DM_CHANNEL && channel.type !== Constants.GM_CHANNEL}\n modalId={ModalIdentifiers.EDIT_CHANNEL_PURPOSE}\n dialogType={EditChannelPurposeModal}\n dialogProps={{channel}}\n text={localizeMessage({id: 'channel_header.setPurpose', defaultMessage: 'Edit Channel Purpose'})}\n />\n <Menu.ItemToggleModalRedux\n id='channelRename'\n show={!isArchived && channel.type !== Constants.DM_CHANNEL && channel.type !== Constants.GM_CHANNEL}\n modalId={ModalIdentifiers.RENAME_CHANNEL}\n dialogType={RenameChannelModal}\n dialogProps={{channel}}\n text={localizeMessage({id: 'channel_header.rename', defaultMessage: 'Rename Channel'})}\n />\n </ChannelPermissionGate>\n <ChannelPermissionGate\n channelId={channel.id}\n teamId={channel.team_id}\n permissions={[Permissions.CONVERT_PUBLIC_CHANNEL_TO_PRIVATE]}\n >\n <Menu.ItemToggleModalRedux\n id='channelConvertToPrivate'\n show={!isArchived && !isDefault && channel.type === Constants.OPEN_CHANNEL}\n modalId={ModalIdentifiers.CONVERT_CHANNEL}\n dialogType={ConvertChannelModal}\n dialogProps={{\n channelId: channel.id,\n channelDisplayName: channel.display_name,\n }}\n text={localizeMessage({id: 'channel_header.convert', defaultMessage: 'Convert to Private Channel'})}\n />\n </ChannelPermissionGate>\n <MenuItemLeaveChannel\n id='channelLeaveChannel'\n channel={channel}\n isDefault={isDefault}\n isGuestUser={isGuest(user.roles)}\n />\n <ChannelPermissionGate\n channelId={channel.id}\n teamId={channel.team_id}\n permissions={[channelDeletePermission]}\n >\n <Menu.ItemToggleModalRedux\n id='channelArchiveChannel'\n show={!isArchived && !isDefault && channel.type !== Constants.DM_CHANNEL && channel.type !== Constants.GM_CHANNEL}\n modalId={ModalIdentifiers.DELETE_CHANNEL}\n className='MenuItem__dangerous'\n dialogType={DeleteChannelModal}\n dialogProps={{\n channel,\n penultimateViewedChannelName,\n }}\n text={localizeMessage({id: 'channel_header.delete', defaultMessage: 'Archive Channel'})}\n />\n </ChannelPermissionGate>\n {isMobile &&\n <MobileChannelHeaderPlug\n channel={channel}\n isDropdown={true}\n />}\n <MenuItemCloseMessage\n id='channelCloseMessage'\n channel={channel}\n currentUser={user}\n />\n <MenuItemCloseChannel\n isArchived={isArchived}\n />\n </Menu.Group>\n <Menu.Group>\n {pluginItems}\n </Menu.Group>\n <Menu.Group divider={divider}>\n <ChannelPermissionGate\n channelId={channel.id}\n teamId={channel.team_id}\n permissions={[channelUnarchivePermission]}\n >\n <Menu.ItemToggleModalRedux\n id='channelUnarchiveChannel'\n show={isArchived && !isDefault && channel.type !== Constants.DM_CHANNEL && channel.type !== Constants.GM_CHANNEL}\n modalId={ModalIdentifiers.UNARCHIVE_CHANNEL}\n dialogType={UnarchiveChannelModal}\n dialogProps={{\n channel,\n }}\n text={localizeMessage({id: 'channel_header.unarchive', defaultMessage: 'Unarchive Channel'})}\n />\n </ChannelPermissionGate>\n </Menu.Group>\n </>\n );\n }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport type {ReactNode} from 'react';\nimport {CSSTransition} from 'react-transition-group';\n\nconst ANIMATION_DURATION = 350;\n\ntype Props = {\n children?: ReactNode;\n show: boolean;\n};\n\nconst timeout = {\n enter: ANIMATION_DURATION,\n exit: ANIMATION_DURATION,\n};\n\nconst MobileChannelHeaderDropdownAnimation = ({show, children}: Props) => {\n return (\n <CSSTransition\n in={show}\n classNames='mobile-channel-header-dropdown'\n enter={true}\n exit={true}\n mountOnEnter={true}\n unmountOnExit={true}\n timeout={timeout}\n >\n {children}\n </CSSTransition>\n );\n};\n\nexport default React.memo(MobileChannelHeaderDropdownAnimation);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {memo} from 'react';\nimport {FormattedMessage, useIntl} from 'react-intl';\n\nimport type {Channel} from '@mattermost/types/channels';\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport {ChannelHeaderDropdownItems} from 'components/channel_header_dropdown';\nimport StatusIcon from 'components/status_icon';\nimport Menu from 'components/widgets/menu/menu';\nimport MenuWrapper from 'components/widgets/menu/menu_wrapper';\n\nimport {Constants} from 'utils/constants';\n\nimport MobileChannelHeaderDropdownAnimation from './mobile_channel_header_dropdown_animation';\n\ntype Props = {\n user: UserProfile;\n channel?: Channel;\n teammateId: string | null;\n teammateIsBot?: boolean;\n teammateStatus?: string;\n displayName: string;\n}\n\nconst MobileChannelHeaderDropdown = ({\n user,\n channel,\n teammateId,\n displayName,\n teammateIsBot,\n teammateStatus,\n}: Props) => {\n const intl = useIntl();\n\n const getChannelTitle = () => {\n if (!channel) {\n return '';\n }\n\n if (channel.type === Constants.DM_CHANNEL) {\n if (user.id === teammateId) {\n return (\n <FormattedMessage\n id='channel_header.directchannel.you'\n defaultMessage='{displayname} (you)'\n values={{displayname: displayName}}\n />\n );\n }\n return displayName;\n }\n return channel.display_name;\n };\n\n let dmHeaderIconStatus;\n\n if (!teammateIsBot) {\n dmHeaderIconStatus = (\n <StatusIcon status={teammateStatus}/>\n );\n }\n\n return (\n <MenuWrapper animationComponent={MobileChannelHeaderDropdownAnimation}>\n <a>\n <span className='heading'>\n {dmHeaderIconStatus}\n {getChannelTitle()}\n </span>\n <span\n className='fa fa-angle-down header-dropdown__icon'\n title={intl.formatMessage({id: 'generic_icons.dropdown', defaultMessage: 'Dropdown Icon'})}\n />\n </a>\n\n <Menu ariaLabel={intl.formatMessage({id: 'channel_header.menuAriaLabel', defaultMessage: 'Channel Menu'})}>\n <ChannelHeaderDropdownItems isMobile={true}/>\n <div className='Menu__close visible-xs-block'>\n {'×'}\n </div>\n </Menu>\n </MenuWrapper>\n );\n};\n\nexport default memo(MobileChannelHeaderDropdown);\n\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {connect} from 'react-redux';\n\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {\n getCurrentChannel,\n isCurrentChannelDefault,\n isCurrentChannelFavorite,\n isCurrentChannelMuted,\n isCurrentChannelArchived,\n getRedirectChannelNameForTeam,\n} from 'mattermost-redux/selectors/entities/channels';\nimport {getCurrentTeamId} from 'mattermost-redux/selectors/entities/teams';\nimport {\n getUser,\n getCurrentUser,\n getUserStatuses,\n getCurrentUserId,\n} from 'mattermost-redux/selectors/entities/users';\n\nimport {getPenultimateViewedChannelName} from 'selectors/local_storage';\nimport {getChannelHeaderMenuPluginComponents} from 'selectors/plugins';\n\nimport {getIsChannelBookmarksEnabled} from 'components/channel_bookmarks/utils';\n\nimport {Constants} from 'utils/constants';\nimport * as Utils from 'utils/utils';\n\nimport type {GlobalState} from 'types/store';\n\nimport Desktop from './channel_header_dropdown';\nimport Items from './channel_header_dropdown_items';\nimport Mobile from './mobile_channel_header_dropdown';\n\nconst getTeammateId = createSelector(\n 'getTeammateId',\n getCurrentChannel,\n getCurrentUserId,\n (channel, currentUserId) => {\n if (channel?.type !== Constants.DM_CHANNEL) {\n return null;\n }\n\n return Utils.getUserIdFromChannelId(channel.name, currentUserId);\n },\n);\n\nconst getTeammateStatus = createSelector(\n 'getTeammateStatus',\n getUserStatuses,\n getTeammateId,\n (userStatuses, teammateId) => {\n if (!teammateId) {\n return undefined;\n }\n\n return userStatuses[teammateId];\n },\n);\n\nconst mapStateToProps = (state: GlobalState) => ({\n user: getCurrentUser(state),\n channel: getCurrentChannel(state),\n isDefault: isCurrentChannelDefault(state),\n isFavorite: isCurrentChannelFavorite(state),\n isMuted: isCurrentChannelMuted(state),\n isReadonly: false,\n isArchived: isCurrentChannelArchived(state),\n penultimateViewedChannelName: getPenultimateViewedChannelName(state) || getRedirectChannelNameForTeam(state, getCurrentTeamId(state)),\n pluginMenuItems: getChannelHeaderMenuPluginComponents(state),\n isLicensedForLDAPGroups: state.entities.general.license.LDAPGroups === 'true',\n isChannelBookmarksEnabled: getIsChannelBookmarksEnabled(state),\n});\n\nconst mobileMapStateToProps = (state: GlobalState) => {\n const user = getCurrentUser(state);\n const channel = getCurrentChannel(state);\n const teammateId = getTeammateId(state);\n\n let teammateIsBot = false;\n let displayName = '';\n if (teammateId) {\n const teammate = getUser(state, teammateId);\n teammateIsBot = teammate && teammate.is_bot;\n displayName = Utils.getDisplayNameByUser(state, teammate);\n }\n\n return {\n user,\n channel,\n teammateId,\n teammateIsBot,\n teammateStatus: getTeammateStatus(state),\n displayName,\n };\n};\n\nexport const ChannelHeaderDropdown = Desktop;\nexport const ChannelHeaderDropdownItems = connect(mapStateToProps)(Items);\nexport const MobileChannelHeaderDropdown = connect(mobileMapStateToProps)(Mobile);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport {injectIntl} from 'react-intl';\nimport type {IntlShape} from 'react-intl';\n\nimport type {AppBinding} from '@mattermost/types/apps';\nimport type {Channel, ChannelMembership} from '@mattermost/types/channels';\n\nimport {AppCallResponseTypes} from 'mattermost-redux/constants/apps';\nimport type {Theme} from 'mattermost-redux/selectors/entities/preferences';\n\nimport {createCallContext} from 'utils/apps';\n\nimport type {HandleBindingClick, OpenAppsModal, PostEphemeralCallResponseForChannel} from 'types/apps';\nimport type {PluginComponent} from 'types/store/plugins';\n\ntype Props = {\n\n /*\n * Components or actions to add as channel header buttons\n */\n components?: PluginComponent[];\n\n /*\n * Set to true if the plug is in the dropdown\n */\n isDropdown: boolean;\n channel: Channel;\n channelMember?: ChannelMembership;\n\n /*\n * Logged in user's theme\n */\n theme: Theme;\n appBindings: AppBinding[];\n appsEnabled: boolean;\n intl: IntlShape;\n actions: {\n handleBindingClick: HandleBindingClick;\n postEphemeralCallResponseForChannel: PostEphemeralCallResponseForChannel;\n openAppsModal: OpenAppsModal;\n };\n}\n\nclass MobileChannelHeaderPlug extends React.PureComponent<Props> {\n createAppButton = (binding: AppBinding) => {\n const onClick = () => this.fireAppAction(binding);\n\n if (this.props.isDropdown) {\n return (\n <li\n key={'mobileChannelHeaderItem' + binding.app_id + binding.location}\n role='presentation'\n className='MenuItem'\n >\n <a\n role='menuitem'\n href='#'\n onClick={onClick}\n >\n {binding.label}\n </a>\n </li>\n );\n }\n\n return (\n <li className='flex-parent--center'>\n <button\n id={`${binding.app_id}_${binding.location}`}\n className='navbar-toggle navbar-right__icon'\n onClick={onClick}\n >\n <span className='icon navbar-plugin-button'>\n <img\n src={binding.icon}\n width='16'\n height='16'\n />\n </span>\n </button>\n </li>\n );\n };\n createButton = (plug: PluginComponent) => {\n const onClick = () => this.fireAction(plug);\n\n if (this.props.isDropdown) {\n return (\n <li\n key={'mobileChannelHeaderItem' + plug.id}\n role='presentation'\n className='MenuItem'\n >\n <a\n role='menuitem'\n href='#'\n onClick={onClick}\n >\n {plug.dropdownText}\n </a>\n </li>\n );\n }\n\n return (\n <li className='flex-parent--center'>\n <button\n className='navbar-toggle navbar-right__icon'\n onClick={onClick}\n >\n <span className='icon navbar-plugin-button'>\n {plug.icon}\n </span>\n </button>\n </li>\n );\n };\n\n createList(plugs: PluginComponent[]) {\n return plugs.map(this.createButton);\n }\n\n createAppList(bindings: AppBinding[]) {\n return bindings.map(this.createAppButton);\n }\n\n fireAction(plug: PluginComponent) {\n return plug.action?.(this.props.channel, this.props.channelMember);\n }\n\n fireAppAction = async (binding: AppBinding) => {\n const {channel, intl} = this.props;\n const context = createCallContext(\n binding.app_id,\n binding.location,\n channel.id,\n channel.team_id,\n );\n\n const res = await this.props.actions.handleBindingClick(binding, context, intl);\n\n if (res.error) {\n const errorResponse = res.error;\n const errorMessage = errorResponse.text || intl.formatMessage({\n id: 'apps.error.unknown',\n defaultMessage: 'Unknown error occurred.',\n });\n this.props.actions.postEphemeralCallResponseForChannel(errorResponse, errorMessage, channel.id);\n return;\n }\n\n const callResp = res.data!;\n switch (callResp.type) {\n case AppCallResponseTypes.OK:\n if (callResp.text) {\n this.props.actions.postEphemeralCallResponseForChannel(callResp, callResp.text, channel.id);\n }\n break;\n case AppCallResponseTypes.NAVIGATE:\n break;\n case AppCallResponseTypes.FORM:\n if (callResp.form) {\n this.props.actions.openAppsModal(callResp.form, context);\n }\n break;\n default: {\n const errorMessage = this.props.intl.formatMessage({\n id: 'apps.error.responses.unknown_type',\n defaultMessage: 'App response type not supported. Response type: {type}.',\n }, {\n type: callResp.type,\n });\n this.props.actions.postEphemeralCallResponseForChannel(callResp, errorMessage, channel.id);\n }\n }\n };\n\n render() {\n const components = this.props.components || [];\n const bindings = this.props.appBindings || [];\n\n if (components.length === 0 && bindings.length === 0) {\n return null;\n } else if (components.length === 1 && bindings.length === 0) {\n return this.createButton(components[0]);\n } else if (components.length === 0 && bindings.length === 1) {\n return this.createAppButton(bindings[0]);\n }\n\n if (!this.props.isDropdown) {\n return null;\n }\n\n const plugItems = this.createList(components);\n const appItems = this.createAppList(bindings);\n return (<>\n {plugItems}\n {appItems}\n </>);\n }\n}\n\n// Exported for tests\nexport {MobileChannelHeaderPlug as RawMobileChannelHeaderPlug};\n\nexport default injectIntl(MobileChannelHeaderPlug);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {connect} from 'react-redux';\nimport {bindActionCreators} from 'redux';\nimport type {Dispatch} from 'redux';\n\nimport {AppBindingLocations} from 'mattermost-redux/constants/apps';\nimport {appsEnabled, makeAppBindingsSelector} from 'mattermost-redux/selectors/entities/apps';\nimport {getMyCurrentChannelMembership} from 'mattermost-redux/selectors/entities/channels';\nimport {getTheme} from 'mattermost-redux/selectors/entities/preferences';\n\nimport {handleBindingClick, openAppsModal, postEphemeralCallResponseForChannel} from 'actions/apps';\n\nimport type {GlobalState} from 'types/store';\n\nimport MobileChannelHeaderPlug from './mobile_channel_header_plug';\n\nconst getChannelHeaderBindings = makeAppBindingsSelector(AppBindingLocations.CHANNEL_HEADER_ICON);\n\nfunction mapStateToProps(state: GlobalState) {\n const apps = appsEnabled(state);\n return {\n appBindings: getChannelHeaderBindings(state),\n appsEnabled: apps,\n channelMember: getMyCurrentChannelMembership(state),\n components: state.plugins.components.MobileChannelHeaderButton,\n theme: getTheme(state),\n };\n}\n\nfunction mapDispatchToProps(dispatch: Dispatch) {\n return {\n actions: bindActionCreators({\n handleBindingClick,\n postEphemeralCallResponseForChannel,\n openAppsModal,\n }, dispatch),\n };\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(MobileChannelHeaderPlug);\n"],"names":["ChannelHeaderDropdown","intl","useIntl","React","Menu","id","ariaLabel","formatMessage","defaultMessage","toLowerCase","ChannelHeaderDropdownItems","isMobile","memo","ChannelBookmarksSubmenu","props","handleCreateLink","handleCreateFile","useBookmarkAddActions","channel","canAdd","useChannelBookmarkPermission","canUploadFiles","useCanUploadFiles","limitReached","useSelector","state","bookmarks","getChannelBookmarks","Object","keys","length","MAX_BOOKMARKS_PER_CHANNEL","items","icon","LinkVariantIcon","size","direction","text","action","push","PaperclipIcon","ItemSubMenu","concat","subMenu","styleSelectableItem","propTypes","inHeaderDropdown","_pt","ChannelGroupsManageModal","constructor","arguments","_defineProperty","async","pageNumber","searchTerm","data","this","actions","getGroupsAssociatedToChannel","DEFAULT_NUM_PER_PAGE","groups","totalCount","totalGroupCount","item","listModal","unlinkGroupSyncable","SyncableType","Channel","then","setState","loading","loadItems","page","closeModal","ModalIdentifiers","MANAGE_CHANNEL_GROUPS","onHide","openModal","modalId","ADD_GROUPS_TO_TEAM","dialogType","AddGroupsToChannelModal","isChannelAdmin","patchGroupSyncable","scheme_admin","getMyChannelMember","title","FormattedMessage","key","className","src","groupsAvatar","alt","width","height","display_name","values","num","member_count","MenuWrapper","type","DropdownIcon","openLeft","Utils","ItemAction","show","onClick","setChannelMemberStatus","Boolean","onClickRemoveGroup","render","ListModal","titleText","searchPlaceholderText","renderRow","titleBarButtonText","titleBarButtonOnClick","titleButtonOnClick","isRequired","injectIntl","connect","mapStateToProps","ownProps","entities","channels","channelID","dispatch","bindActionCreators","ChannelMoveToSubMenuOld","useDispatch","allChannels","getAllChannels","multiSelectedChannelIds","views","channelSidebar","currentTeam","getCurrentTeam","categories","getCategoriesForCurrentTeam","undefined","currentCategory","getCategoryInTeamWithChannel","handleMoveToNewCategory","EDIT_CATEGORY","EditCategoryModal","dialogProps","channelIdsToAdd","indexOf","trackEvent","createSubmenuItemsForCategoryArray","map","category","CategoryTypes","FAVORITES","CHANNELS","StarOutlineIcon","FolderOutlineIcon","handleMoveToCategory","categoryId","addChannelsInSidebar","FolderMoveOutlineIcon","filterCategoriesBasedOnChannelType","filter","DIRECT_MESSAGES","Group","isSubmenuOneOfSelectedChannels","includes","Constants","DM_CHANNEL","GM_CHANNEL","every","channelId","getMoveToCategorySubmenuItems","openUp","selectedValueText","renderSelected","ConvertChannelModal","super","CHANNEL_ID_LENGTH","updateChannelPrivacy","General","PRIVATE_CHANNEL","channel_id","channelDisplayName","onExited","Modal","dialogClassName","role","Header","closeButton","Title","componentClass","Body","b","chunks","Footer","handleConvert","autoFocus","NoCommonTeamsError","SectionNotice","TeamSelector","value","setValue","useState","handleTeamChange","useCallback","e","teamId","teamsById","onChange","currentLocale","getCurrentLocale","teamValues","team","label","sort","teamA","teamB","localeCompare","DropdownInput","required","options","legend","placeholder","name","WarningTextSection","memberNames","channelMemberNames","formatList","ServerErrorId","ConvertGmToChannelModal","channelName","setChannelName","channelURL","useRef","urlError","setURLError","handleChannelURLChange","newURL","current","setChannelMemberNames","useEffect","validProfilesInChannel","profilesInChannel","user","currentUserId","delete_at","displayUsername","teammateNameDisplaySetting","commonTeamsById","setCommonTeamsById","commonTeamsFetched","setCommonTeamsFetched","loadingAnimationTimeout","setLoadingAnimationTimeout","selectedTeamId","setSelectedTeamId","nameError","setNameError","conversionError","setConversionError","mounted","response","getGroupMessageMembersCommonTeams","error","teams","forEach","work","setTimeout","handleConfirm","convertGroupMessageToPrivateChannel","trim","server_error_id","CHANNEL_NAME_EXISTS","message","moveChannelsInSidebar","showLoader","canCreate","modalProps","modalBody","subBody","handleCancel","isDeleteModal","cancelButtonText","confirmButtonText","isConfirmDisabled","LoadingSpinner","ChannelNameFormField","onDisplayNameChange","onURLChange","onErrorStateChange","classNames","GenericModal","assign","modalHeaderText","compassDesign","autoCloseOnConfirmButton","getProfilesInChannel","makeGetProfilesInChannel","allProfilesInChannel","getCurrentUserId","getTeammateNameDisplaySetting","DeleteChannelModal","canViewArchivedChannels","penultimateViewedChannelName","currentTeamDetails","getHistory","deleteChannel","strong","handleDelete","getConfig","ExperimentalViewArchivedChannels","holders","defineMessages","maxLength","url","defaultError","RenameChannelModal","err","serverError","textbox","preventDefault","urlErrors","displayNameError","invalid","oldName","oldDisplayName","_objectSpread","patchChannel","displayName","MIN_CHANNELNAME_LENGTH","minLength","MAX_CHANNELNAME_LENGTH","validateChannelUrl","onSaveSuccess","setError","handleHide","unsetError","target","replace","node","urlHelpText","urlInputClass","urlInputLabel","readOnlyHandleInput","DEFAULT_CHANNEL","fullUrl","currentTeamUrl","shortUrl","getShortenedURL","onEntering","handleEntering","htmlFor","ref","getTextbox","WithTooltip","onNameChange","readOnly","handleSubmit","mapStateToPropsRenameChannel","createSelector","currentTeamId","getTeam","getSiteURL","teamInfo","UnarchiveChannelModal","unarchiveChannel","handleUnarchive","CloseChannel","_ref","isArchived","goToLastViewedChannel","CloseMessage","currentUser","redirectChannel","savePreferences","leaveDirectChannel","Preferences","CATEGORY_DIRECT_CHANNEL_SHOW","teammate_id","CATEGORY_GROUP_CHANNEL_SHOW","user_id","localizeMessage","handleClose","getRedirectChannelNameForTeam","getCurrentTeamId","LeaveChannel","isDefault","isGuestUser","leaveChannel","handleLeave","LEAVE_PRIVATE_CHANNEL_MODAL","LeaveChannelModal","isDangerous","ToggleChannelMembersRHS","rhsOpen","editMembers","openRHSIfNotOpen","showChannelMembers","getIsRhsOpen","getRhsState","RHSStates","CHANNEL_MEMBERS","OpenChannelMembersRHS","ToggleFavoriteChannel","isFavorite","favoriteChannel","unfavoriteChannel","toggleFavoriteChannel","handleClick","ToggleInfo","toggleRHS","closeRightHandSide","showChannelInfo","CHANNEL_INFO","MenuItemToggleMuteChannel","isMuted","updateChannelNotifyProps","mark_unread","NotificationLevels","ALL","MENTION","ViewPinnedPosts","hasPinnedPosts","showPinnedPosts","PIN","isReadonly","isLicensedForLDAPGroups","isChannelBookmarksEnabled","isPrivate","isGroupConstrained","group_constrained","channelMembersPermission","Permissions","MANAGE_PRIVATE_CHANNEL_MEMBERS","MANAGE_PUBLIC_CHANNEL_MEMBERS","channelPropertiesPermission","MANAGE_PRIVATE_CHANNEL_PROPERTIES","MANAGE_PUBLIC_CHANNEL_PROPERTIES","channelDeletePermission","DELETE_PRIVATE_CHANNEL","DELETE_PUBLIC_CHANNEL","channelUnarchivePermission","MANAGE_TEAM","divider","pluginItems","pluginMenuItems","MenuItemToggleInfo","MenuItemToggleFavoriteChannel","MenuItemViewPinnedPosts","ItemToggleModalRedux","CHANNEL_NOTIFICATIONS","ChannelNotificationsModal","ChannelPermissionGate","team_id","permissions","CHANNEL_INVITE","ChannelInviteModal","CREATE_DM_CHANNEL","MoreDirectChannels","isExistingChannel","MenuItemOpenMembersRHS","ADD_GROUPS_TO_CHANNEL","invert","EDIT_CHANNEL_HEADER","EditChannelHeaderModal","isGuest","roles","CONVERT_GM_TO_CHANNEL","EDIT_CHANNEL_PURPOSE","EditChannelPurposeModal","RENAME_CHANNEL","CONVERT_PUBLIC_CHANNEL_TO_PRIVATE","OPEN_CHANNEL","CONVERT_CHANNEL","MenuItemLeaveChannel","DELETE_CHANNEL","MobileChannelHeaderPlug","isDropdown","MenuItemCloseMessage","MenuItemCloseChannel","UNARCHIVE_CHANNEL","timeout","enter","exit","MobileChannelHeaderDropdownAnimation","children","CSSTransition","in","mountOnEnter","unmountOnExit","MobileChannelHeaderDropdown","teammateId","teammateIsBot","teammateStatus","dmHeaderIconStatus","StatusIcon","status","animationComponent","displayname","getTeammateId","getCurrentChannel","getTeammateStatus","getUserStatuses","userStatuses","Desktop","getCurrentUser","isCurrentChannelDefault","isCurrentChannelFavorite","isCurrentChannelMuted","isCurrentChannelArchived","getPenultimateViewedChannelName","getChannelHeaderMenuPluginComponents","general","license","LDAPGroups","getIsChannelBookmarksEnabled","Items","teammate","getUser","is_bot","Mobile","binding","fireAppAction","app_id","location","href","plug","fireAction","dropdownText","context","createCallContext","res","handleBindingClick","errorResponse","errorMessage","postEphemeralCallResponseForChannel","callResp","AppCallResponseTypes","OK","NAVIGATE","FORM","form","openAppsModal","createList","plugs","createButton","createAppList","bindings","createAppButton","_plug$action","call","channelMember","components","appBindings","plugItems","appItems","appsEnabled","getChannelHeaderBindings","makeAppBindingsSelector","AppBindingLocations","CHANNEL_HEADER_ICON","apps","getMyCurrentChannelMembership","plugins","MobileChannelHeaderButton","theme","getTheme"],"sourceRoot":""}