![]() 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 : /opt/mattermost/client/ |
Upload File : |
{"version":3,"file":"1083.30842cea7ae7c3bfc296.js","mappings":"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","sources":["webpack://mattermost-webapp/./src/actions/views/cookie.js","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/drafts.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/errors.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/playbooks.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/plugins.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/constants/apps.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/constants/channel_categories.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/constants/channels.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/constants/general.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/constants/emoji.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/constants/request_status.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/constants/roles.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/constants/stats.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/constants/teams.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/constants/users.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/constants/websocket.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/constants/permissions.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/constants/plugins.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/constants/posts.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/constants/preferences.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/constants/threads.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/selectors/create_selector/index.js","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/selectors/entities/admin.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/selectors/entities/channel_categories.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/selectors/entities/channels.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/selectors/entities/common.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/selectors/entities/general.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/selectors/entities/i18n.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/selectors/entities/posts.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/selectors/entities/preferences.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/selectors/entities/roles.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/selectors/entities/roles_helpers.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/selectors/entities/teams.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/selectors/entities/users.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/store/helpers.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/posts.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/store/initial_state.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/admin.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/apps.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/bots.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/channel_bookmarks.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/channel_categories.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/channels/message_counts.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/channels.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/cloud.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/emojis.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/files.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/general.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/groups.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/hosted_customer.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/integrations.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/jobs.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/limits.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/preferences.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/roles.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/scheduled_posts.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/schemes.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/search.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/teams.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/threads/counts.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/threads/threadsInTeam.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/threads/index.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/usage.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/users.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/index.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/entities/typing.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/requests/helpers.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/requests/admin.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/requests/channels.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/requests/files.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/requests/general.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/requests/posts.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/requests/roles.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/requests/search.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/requests/teams.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/requests/users.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/index.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/errors/index.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/requests/index.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/reducers/websocket.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/store/configureStore.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/store/reducer_registry.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/utils/apps.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/utils/array_utils.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/utils/channel_utils.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/utils/deep_freeze.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/utils/helpers.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/utils/i18n_utils.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/utils/key_mirror.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/utils/post_list.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/utils/post_utils.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/utils/preference_utils.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/utils/team_utils.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/utils/timezone_utils.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/utils/user_utils.ts","webpack://mattermost-webapp/./src/utils/plugins/plugin_setting_extraction.tsx","webpack://mattermost-webapp/./src/reducers/plugins/index.ts","webpack://mattermost-webapp/./src/reducers/storage.ts","webpack://mattermost-webapp/./src/reducers/views/add_channel_cta_dropdown.ts","webpack://mattermost-webapp/./src/reducers/views/add_channel_dropdown.ts","webpack://mattermost-webapp/./src/reducers/views/announcement_bar.ts","webpack://mattermost-webapp/./src/reducers/views/browser.ts","webpack://mattermost-webapp/./src/reducers/views/channel.ts","webpack://mattermost-webapp/./src/reducers/views/channel_selector_modal.ts","webpack://mattermost-webapp/./src/reducers/views/channel_sidebar.ts","webpack://mattermost-webapp/./src/reducers/views/drafts.ts","webpack://mattermost-webapp/./src/reducers/views/emoji.ts","webpack://mattermost-webapp/./src/reducers/views/i18n.ts","webpack://mattermost-webapp/./src/reducers/views/lhs.ts","webpack://mattermost-webapp/./src/reducers/views/marketplace.ts","webpack://mattermost-webapp/./src/reducers/views/modals.ts","webpack://mattermost-webapp/./src/reducers/views/notice.ts","webpack://mattermost-webapp/./src/reducers/views/onboarding_tasks.ts","webpack://mattermost-webapp/./src/reducers/views/posts.ts","webpack://mattermost-webapp/./src/reducers/views/product_menu.ts","webpack://mattermost-webapp/./src/reducers/views/rhs.ts","webpack://mattermost-webapp/./src/reducers/views/search.ts","webpack://mattermost-webapp/./src/reducers/views/status_dropdown.ts","webpack://mattermost-webapp/./src/reducers/views/system.ts","webpack://mattermost-webapp/./src/reducers/views/textbox.ts","webpack://mattermost-webapp/./src/reducers/views/threads.ts","webpack://mattermost-webapp/./src/reducers/index.ts","webpack://mattermost-webapp/./src/reducers/views/index.ts","webpack://mattermost-webapp/./src/reducers/views/rhs_suppressed.ts","webpack://mattermost-webapp/./src/reducers/views/settings.ts","webpack://mattermost-webapp/./src/reducers/views/admin.ts","webpack://mattermost-webapp/./src/selectors/general.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/store/index.ts","webpack://mattermost-webapp/./src/store/index.js","webpack://mattermost-webapp/./src/utils/constants.tsx","webpack://mattermost-webapp/./src/utils/storage_utils.ts","webpack://mattermost-webapp/../platform/types/lib/channel_categories.js","webpack://mattermost-webapp/../platform/types/lib/reports.js","webpack://mattermost-webapp/../platform/types/lib/users.js","webpack://mattermost-webapp/../platform/types/lib/utilities.js","webpack://mattermost-webapp/../node_modules/moment/locale/ sync ^\\.\\/.*$"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nexport function clearUserCookie() {\n // We need to clear the cookie without the domain, with the domain, and with both the domain and path set because we\n // can't tell if the server set the cookie with or without the domain.\n // The server will have set the domain if ServiceSettings.EnableCookiesForSubdomains is true\n // The server will have set a non-default path if Mattermost is also served from a subpath.\n document.cookie = 'MMUSERID=;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/';\n document.cookie = `MMUSERID=;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=${window.basename}`;\n document.cookie = `MMUSERID=;expires=Thu, 01 Jan 1970 00:00:01 GMT;domain=${window.location.hostname};path=/`;\n document.cookie = `MMUSERID=;expires=Thu, 01 Jan 1970 00:00:01 GMT;domain=${window.location.hostname};path=${window.basename}`;\n document.cookie = 'MMCSRF=;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/';\n document.cookie = `MMCSRF=;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=${window.basename}`;\n document.cookie = `MMCSRF=;expires=Thu, 01 Jan 1970 00:00:01 GMT;domain=${window.location.hostname};path=/`;\n document.cookie = `MMCSRF=;expires=Thu, 01 Jan 1970 00:00:01 GMT;domain=${window.location.hostname};path=${window.basename}`;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport keyMirror from 'mattermost-redux/utils/key_mirror';\n\nexport default keyMirror({\n GET_USER_DRAFTS: null,\n CREATE_USER_DRAFT: null,\n DELETE_USER_DRAFT: null,\n UPDATE_USER_DRAFT: null,\n UPSERT_USER_DRAFT: null,\n\n GET_DRAFTS_FAILURE: null,\n UPSERT_DRAFT_FAILURE: null,\n DELETE_DRAFT_FAILURE: null,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport keyMirror from 'mattermost-redux/utils/key_mirror';\n\nexport default keyMirror({\n DISMISS_ERROR: null,\n LOG_ERROR: null,\n CLEAR_ERRORS: null,\n RESTORE_ERRORS: null,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport keyMirror from 'mattermost-redux/utils/key_mirror';\n\n// The actions are created and triggered from the playbooks repository\nexport default keyMirror({\n PLAYBOOKS_PUBLISH_TEMPLATES: null,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport keyMirror from 'mattermost-redux/utils/key_mirror';\n\nexport default keyMirror({\n RECEIVED_MARKETPLACE_PLUGINS: null,\n GET_MARKETPLACE_PLUGINS_FAILURE: null,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AppCallResponseType, AppExpandLevel, AppFieldType} from '@mattermost/types/apps';\n\nexport const AppBindingLocations = {\n POST_MENU_ITEM: '/post_menu',\n CHANNEL_HEADER_ICON: '/channel_header',\n APP_BAR: '/app_bar',\n COMMAND: '/command',\n IN_POST: '/in_post',\n MARKETPLACE: '/marketplace',\n};\n\nexport const AppBindingPresentations = {\n MODAL: 'modal',\n};\n\nexport const AppCallResponseTypes: { [name: string]: AppCallResponseType } = {\n OK: 'ok',\n ERROR: 'error',\n FORM: 'form',\n CALL: 'call',\n NAVIGATE: 'navigate',\n};\n\nexport const AppExpandLevels: { [name: string]: AppExpandLevel } = {\n EXPAND_DEFAULT: '',\n EXPAND_NONE: 'none',\n EXPAND_ALL: 'all',\n EXPAND_SUMMARY: 'summary',\n};\n\nexport const AppFieldTypes: { [name: string]: AppFieldType } = {\n TEXT: 'text',\n STATIC_SELECT: 'static_select',\n DYNAMIC_SELECT: 'dynamic_select',\n BOOL: 'bool',\n USER: 'user',\n CHANNEL: 'channel',\n MARKDOWN: 'markdown',\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {ChannelCategoryType} from '@mattermost/types/channel_categories';\n\nexport const CategoryTypes: {[name: string]: ChannelCategoryType} = {\n FAVORITES: 'favorites',\n CHANNELS: 'channels',\n DIRECT_MESSAGES: 'direct_messages',\n CUSTOM: 'custom',\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nexport const NotificationLevel = {\n DEFAULT: 'default' as const,\n ALL: 'all' as const,\n MENTION: 'mention' as const,\n NONE: 'none' as const,\n};\n\nexport const MarkUnread = {\n ALL: 'all',\n MENTION: 'mention',\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nexport default {\n CONFIG_CHANGED: 'config_changed',\n SERVER_VERSION_CHANGED: 'server_version_changed',\n PAGE_SIZE_DEFAULT: 60,\n PAGE_SIZE_MAXIMUM: 200,\n LOGS_PAGE_SIZE_DEFAULT: 10000,\n AUDITS_CHUNK_SIZE: 100,\n PROFILE_CHUNK_SIZE: 100, // WARN: Do not change this without changing the cache key on server side as well. See https://github.com/mattermost/mattermost/pull/26391.\n CHANNELS_CHUNK_SIZE: 50,\n TEAMS_CHUNK_SIZE: 50,\n JOBS_CHUNK_SIZE: 50,\n SEARCH_TIMEOUT_MILLISECONDS: 100,\n AUTOCOMPLETE_SPLIT_CHARACTERS: ['.', '-', '_'],\n OUT_OF_OFFICE: 'ooo',\n OFFLINE: 'offline',\n AWAY: 'away',\n ONLINE: 'online',\n DND: 'dnd',\n PERMISSIONS_ALL: 'all',\n PERMISSIONS_CHANNEL_ADMIN: 'channel_admin',\n PERMISSIONS_TEAM_ADMIN: 'team_admin',\n PERMISSIONS_SYSTEM_ADMIN: 'system_admin',\n TEAM_GUEST_ROLE: 'team_guest',\n TEAM_USER_ROLE: 'team_user',\n TEAM_ADMIN_ROLE: 'team_admin',\n CHANNEL_GUEST_ROLE: 'channel_guest',\n CHANNEL_USER_ROLE: 'channel_user',\n CHANNEL_ADMIN_ROLE: 'channel_admin',\n SYSTEM_GUEST_ROLE: 'system_guest',\n SYSTEM_USER_ROLE: 'system_user',\n SYSTEM_ADMIN_ROLE: 'system_admin',\n SYSTEM_USER_MANAGER_ROLE: 'system_user_manager',\n SYSTEM_READ_ONLY_ADMIN_ROLE: 'system_read_only_admin',\n SYSTEM_MANAGER_ROLE: 'system_manager',\n SYSTEM_USER_ACCESS_TOKEN_ROLE: 'system_user_access_token',\n SYSTEM_POST_ALL_ROLE: 'system_post_all',\n SYSTEM_POST_ALL_PUBLIC_ROLE: 'system_post_all_public',\n PLAYBOOK_ADMIN_ROLE: 'playbook_admin',\n PLAYBOOK_MEMBER_ROLE: 'playbook_member',\n RUN_ADMIN_ROLE: 'run_admin',\n RUN_MEMBER_ROLE: 'run_member',\n ALLOW_EDIT_POST_ALWAYS: 'always',\n ALLOW_EDIT_POST_NEVER: 'never',\n ALLOW_EDIT_POST_TIME_LIMIT: 'time_limit',\n DEFAULT_POST_EDIT_TIME_LIMIT: 300,\n RESTRICT_DIRECT_MESSAGE_ANY: 'any',\n RESTRICT_DIRECT_MESSAGE_TEAM: 'team',\n SWITCH_TO_DEFAULT_CHANNEL: 'switch_to_default_channel',\n DEFAULT_CHANNEL: 'town-square',\n DM_CHANNEL: 'D' as const,\n OPEN_CHANNEL: 'O' as const,\n PRIVATE_CHANNEL: 'P' as const,\n GM_CHANNEL: 'G' as const,\n ARCHIVED_CHANNEL: 'archive',\n PUSH_NOTIFY_APPLE_REACT_NATIVE: 'apple_rn',\n PUSH_NOTIFY_ANDROID_REACT_NATIVE: 'android_rn',\n STORE_REHYDRATION_COMPLETE: 'store_hydation_complete',\n TEAMMATE_NAME_DISPLAY: {\n SHOW_USERNAME: 'username',\n SHOW_NICKNAME_FULLNAME: 'nickname_full_name',\n SHOW_FULLNAME: 'full_name',\n },\n SPECIAL_MENTIONS: ['all', 'channel', 'here'],\n MAX_USERS_IN_GM: 8,\n MIN_USERS_IN_GM: 3,\n MAX_GROUP_CHANNELS_FOR_PROFILES: 50,\n DEFAULT_LOCALE: 'en',\n DEFAULT_AUTOLINKED_URL_SCHEMES: ['http', 'https', 'ftp', 'mailto', 'tel', 'mattermost'],\n DISABLED: 'disabled',\n DEFAULT_ON: 'default_on',\n DEFAULT_OFF: 'default_off',\n ALWAYS_ON: 'always_on',\n DEFAULT_GROUP: 'board',\n CUSTOM_GROUP_USER_ROLE: 'custom_group_user',\n MAX_GET_ROLES_BY_NAMES: 100,\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nexport default {\n SORT_BY_NAME: 'name',\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {RequestStatusOption} from '@mattermost/types/requests';\n\nconst status: Record<string, RequestStatusOption> = {\n NOT_STARTED: 'not_started',\n STARTED: 'started',\n SUCCESS: 'success',\n FAILURE: 'failure',\n CANCELLED: 'cancelled',\n};\n\nexport default status;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nexport default {\n MEMBERS: 'members',\n GUESTS: 'guests',\n ADMINS: 'admins',\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport keyMirror from 'mattermost-redux/utils/key_mirror';\n\nexport default keyMirror({\n TOTAL_USERS: null,\n TOTAL_INACTIVE_USERS: null,\n TOTAL_PUBLIC_CHANNELS: null,\n TOTAL_PRIVATE_GROUPS: null,\n TOTAL_POSTS: null,\n TOTAL_TEAMS: null,\n TOTAL_FILE_POSTS: null,\n TOTAL_HASHTAG_POSTS: null,\n TOTAL_IHOOKS: null,\n TOTAL_OHOOKS: null,\n TOTAL_COMMANDS: null,\n TOTAL_SESSIONS: null,\n POST_PER_DAY: null,\n BOT_POST_PER_DAY: null,\n USERS_WITH_POSTS_PER_DAY: null,\n RECENTLY_ACTIVE_USERS: null,\n NEWLY_CREATED_USERS: null,\n TOTAL_WEBSOCKET_CONNECTIONS: null,\n TOTAL_MASTER_DB_CONNECTIONS: null,\n TOTAL_READ_DB_CONNECTIONS: null,\n DAILY_ACTIVE_USERS: null,\n MONTHLY_ACTIVE_USERS: null,\n REGISTERED_USERS: null,\n});\n\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nexport default {\n TEAM_TYPE_OPEN: 'O',\n TEAM_TYPE_INVITE: 'I',\n SORT_USERNAME_OPTION: 'Username',\n} as const;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nexport default {\n IGNORE_CHANNEL_MENTIONS_ON: 'on',\n IGNORE_CHANNEL_MENTIONS_OFF: 'off',\n IGNORE_CHANNEL_MENTIONS_DEFAULT: 'default',\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nconst WebsocketEvents = {\n POSTED: 'posted',\n POST_EDITED: 'post_edited',\n POST_DELETED: 'post_deleted',\n POST_UNREAD: 'post_unread',\n CHANNEL_CONVERTED: 'channel_converted',\n CHANNEL_CREATED: 'channel_created',\n CHANNEL_DELETED: 'channel_deleted',\n CHANNEL_UNARCHIVED: 'channel_restored',\n CHANNEL_UPDATED: 'channel_updated',\n MULTIPLE_CHANNELS_VIEWED: 'multiple_channels_viewed',\n CHANNEL_MEMBER_UPDATED: 'channel_member_updated',\n CHANNEL_SCHEME_UPDATED: 'channel_scheme_updated',\n DIRECT_ADDED: 'direct_added',\n ADDED_TO_TEAM: 'added_to_team',\n LEAVE_TEAM: 'leave_team',\n UPDATE_TEAM: 'update_team',\n USER_ADDED: 'user_added',\n USER_REMOVED: 'user_removed',\n USER_UPDATED: 'user_updated',\n USER_ROLE_UPDATED: 'user_role_updated',\n ROLE_ADDED: 'role_added',\n ROLE_REMOVED: 'role_removed',\n ROLE_UPDATED: 'role_updated',\n TYPING: 'typing',\n STOP_TYPING: 'stop_typing',\n PREFERENCE_CHANGED: 'preference_changed',\n PREFERENCES_CHANGED: 'preferences_changed',\n PREFERENCES_DELETED: 'preferences_deleted',\n EPHEMERAL_MESSAGE: 'ephemeral_message',\n STATUS_CHANGED: 'status_change',\n HELLO: 'hello',\n WEBRTC: 'webrtc',\n REACTION_ADDED: 'reaction_added',\n REACTION_REMOVED: 'reaction_removed',\n EMOJI_ADDED: 'emoji_added',\n LICENSE_CHANGED: 'license_changed',\n CONFIG_CHANGED: 'config_changed',\n PLUGIN_STATUSES_CHANGED: 'plugin_statuses_changed',\n OPEN_DIALOG: 'open_dialog',\n INCREASE_POST_VISIBILITY_BY_ONE: 'increase_post_visibility_by_one',\n RECEIVED_GROUP: 'received_group',\n RECEIVED_GROUP_ASSOCIATED_TO_TEAM: 'group_associated_to_team',\n RECEIVED_GROUP_NOT_ASSOCIATED_TO_TEAM: 'group_not_associated_to_team',\n RECEIVED_GROUP_ASSOCIATED_TO_CHANNEL: 'group_associated_to_channel',\n RECEIVED_GROUP_NOT_ASSOCIATED_TO_CHANNEL: 'group_not_associated_to_channel',\n THREAD_UPDATED: 'thread_updated',\n THREAD_FOLLOW_CHANGED: 'thread_follow_changed',\n THREAD_READ_CHANGED: 'thread_read_changed',\n FIRST_ADMIN_VISIT_MARKETPLACE_STATUS_RECEIVED: 'first_admin_visit_marketplace_status_received',\n GROUP_MEMBER_DELETED: 'group_member_deleted',\n};\nexport default WebsocketEvents;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nconst values = {\n INVITE_USER: 'invite_user',\n ADD_USER_TO_TEAM: 'add_user_to_team',\n MANAGE_SLASH_COMMANDS: 'manage_slash_commands',\n MANAGE_OTHERS_SLASH_COMMANDS: 'manage_others_slash_commands',\n CREATE_PUBLIC_CHANNEL: 'create_public_channel',\n CREATE_PRIVATE_CHANNEL: 'create_private_channel',\n MANAGE_PUBLIC_CHANNEL_MEMBERS: 'manage_public_channel_members',\n MANAGE_PRIVATE_CHANNEL_MEMBERS: 'manage_private_channel_members',\n READ_PUBLIC_CHANNEL_GROUPS: 'read_public_channel_groups',\n READ_PRIVATE_CHANNEL_GROUPS: 'read_private_channel_groups',\n ASSIGN_SYSTEM_ADMIN_ROLE: 'assign_system_admin_role',\n MANAGE_ROLES: 'manage_roles',\n MANAGE_TEAM_ROLES: 'manage_team_roles',\n MANAGE_CHANNEL_ROLES: 'manage_channel_roles',\n MANAGE_SYSTEM: 'manage_system',\n CREATE_DIRECT_CHANNEL: 'create_direct_channel',\n CREATE_GROUP_CHANNEL: 'create_group_channel',\n MANAGE_PUBLIC_CHANNEL_PROPERTIES: 'manage_public_channel_properties',\n MANAGE_PRIVATE_CHANNEL_PROPERTIES: 'manage_private_channel_properties',\n LIST_PUBLIC_TEAMS: 'list_public_teams',\n JOIN_PUBLIC_TEAMS: 'join_public_teams',\n LIST_PRIVATE_TEAMS: 'list_private_teams',\n JOIN_PRIVATE_TEAMS: 'join_private_teams',\n LIST_TEAM_CHANNELS: 'list_team_channels',\n JOIN_PUBLIC_CHANNELS: 'join_public_channels',\n DELETE_PUBLIC_CHANNEL: 'delete_public_channel',\n CONVERT_PUBLIC_CHANNEL_TO_PRIVATE: 'convert_public_channel_to_private',\n CONVERT_PRIVATE_CHANNEL_TO_PUBLIC: 'convert_private_channel_to_public',\n DELETE_PRIVATE_CHANNEL: 'delete_private_channel',\n EDIT_OTHER_USERS: 'edit_other_users',\n READ_CHANNEL: 'read_channel',\n READ_CHANNEL_CONTENT: 'read_channel_content',\n READ_PUBLIC_CHANNEL: 'read_public_channel',\n ADD_REACTION: 'add_reaction',\n REMOVE_REACTION: 'remove_reaction',\n REMOVE_OTHERS_REACTIONS: 'remove_others_reactions',\n PERMANENT_DELETE_USER: 'permanent_delete_user',\n UPLOAD_FILE: 'upload_file',\n GET_PUBLIC_LINK: 'get_public_link',\n MANAGE_WEBHOOKS: 'manage_webhooks',\n MANAGE_OTHERS_WEBHOOKS: 'manage_others_webhooks',\n MANAGE_INCOMING_WEBHOOKS: 'manage_incoming_webhooks',\n MANAGE_OTHERS_INCOMING_WEBHOOKS: 'manage_others_incoming_webhooks',\n MANAGE_OUTGOING_WEBHOOKS: 'manage_outgoing_webhooks',\n MANAGE_OTHERS_OUTGOING_WEBHOOKS: 'manage_others_outgoing_webhooks',\n MANAGE_OAUTH: 'manage_oauth',\n MANAGE_OUTGOING_OAUTH_CONNECTIONS: 'manage_outgoing_oauth_connections',\n MANAGE_SYSTEM_WIDE_OAUTH: 'manage_system_wide_oauth',\n CREATE_POST: 'create_post',\n CREATE_POST_PUBLIC: 'create_post_public',\n EDIT_POST: 'edit_post',\n EDIT_OTHERS_POSTS: 'edit_others_posts',\n DELETE_POST: 'delete_post',\n DELETE_OTHERS_POSTS: 'delete_others_posts',\n REMOVE_USER_FROM_TEAM: 'remove_user_from_team',\n CREATE_TEAM: 'create_team',\n MANAGE_TEAM: 'manage_team',\n IMPORT_TEAM: 'import_team',\n VIEW_TEAM: 'view_team',\n LIST_USERS_WITHOUT_TEAM: 'list_users_without_team',\n CREATE_USER_ACCESS_TOKEN: 'create_user_access_token',\n READ_USER_ACCESS_TOKEN: 'read_user_access_token',\n REVOKE_USER_ACCESS_TOKEN: 'revoke_user_access_token',\n MANAGE_JOBS: 'manage_jobs',\n MANAGE_EMOJIS: 'manage_emojis',\n MANAGE_OTHERS_EMOJIS: 'manage_others_emojis',\n CREATE_EMOJIS: 'create_emojis',\n DELETE_EMOJIS: 'delete_emojis',\n DELETE_OTHERS_EMOJIS: 'delete_others_emojis',\n VIEW_MEMBERS: 'view_members',\n INVITE_GUEST: 'invite_guest',\n PROMOTE_GUEST: 'promote_guest',\n DEMOTE_TO_GUEST: 'demote_to_guest',\n USE_CHANNEL_MENTIONS: 'use_channel_mentions',\n USE_GROUP_MENTIONS: 'use_group_mentions',\n READ_OTHER_USERS_TEAMS: 'read_other_users_teams',\n EDIT_BRAND: 'edit_brand',\n READ_JOBS: 'read_jobs',\n DOWNLOAD_COMPLIANCE_EXPORT_RESULT: 'download_compliance_export_result',\n CREATE_LDAP_SYNC_JOB: 'create_ldap_sync_job',\n READ_LDAP_SYNC_JOB: 'read_ldap_sync_job',\n TEST_LDAP: 'test_ldap',\n GET_SAML_METADATA_FROM_IDP: 'get_saml_metadata_from_idp',\n ADD_SAML_PUBLIC_CERT: 'add_saml_public_cert',\n ADD_SAML_PRIVATE_CERT: 'add_saml_private_cert',\n ADD_SAML_IDP_CERT: 'add_saml_idp_cert',\n REMOVE_SAML_PUBLIC_CERT: 'remove_saml_public_cert',\n REMOVE_SAML_PRIVATE_CERT: 'remove_saml_private_cert',\n REMOVE_SAML_IDP_CERT: 'remove_saml_idp_cert',\n GET_SAML_CERT_STATUS: 'get_saml_cert_status',\n ADD_LDAP_PUBLIC_CERT: 'add_ldap_public_cert',\n ADD_LDAP_PRIVATE_CERT: 'add_ldap_private_cert',\n REMOVE_LDAP_PUBLIC_CERT: 'remove_ldap_public_cert',\n REMOVE_LDAP_PRIVATE_CERT: 'remove_ldap_private_cert',\n INVALIDATE_EMAIL_INVITE: 'invalidate_email_invite',\n TEST_SITE_URL: 'test_site_url',\n TEST_ELASTICSEARCH: 'test_elasticsearch',\n TEST_S3: 'test_s3',\n TEST_EMAIL: 'test_email',\n RELOAD_CONFIG: 'reload_config',\n INVALIDATE_CACHES: 'invalidate_caches',\n PURGE_ELASTICSEARCH_INDEXES: 'purge_elasticsearch_indexes',\n RECYCLE_DATABASE_CONNECTIONS: 'recycle_database_connections',\n CREATE_ELASTICSEARCH_POST_INDEXING_JOB: 'create_elasticsearch_post_indexing_job',\n CREATE_ELASTICSEARCH_POST_AGGREGATION_JOB: 'create_elasticsearch_post_aggregation_job',\n READ_ELASTICSEARCH_POST_INDEXING_JOB: 'read_elasticsearch_post_indexing_job',\n READ_ELASTICSEARCH_POST_AGGREGATION_JOB: 'read_elasticsearch_post_aggregation_job',\n USE_SLASH_COMMANDS: 'use_slash_commands',\n\n SYSCONSOLE_READ_ABOUT_EDITION_AND_LICENSE: 'sysconsole_read_about_edition_and_license',\n SYSCONSOLE_WRITE_ABOUT_EDITION_AND_LICENSE: 'sysconsole_write_about_edition_and_license',\n SYSCONSOLE_READ_BILLING: 'sysconsole_read_billing',\n SYSCONSOLE_WRITE_BILLING: 'sysconsole_write_billing',\n SYSCONSOLE_READ_REPORTING_SITE_STATISTICS: 'sysconsole_read_reporting_site_statistics',\n SYSCONSOLE_WRITE_REPORTING_SITE_STATISTICS: 'sysconsole_write_reporting_site_statistics',\n SYSCONSOLE_READ_REPORTING_TEAM_STATISTICS: 'sysconsole_read_reporting_team_statistics',\n SYSCONSOLE_WRITE_REPORTING_TEAM_STATISTICS: 'sysconsole_write_reporting_statistics',\n SYSCONSOLE_READ_REPORTING_SERVER_LOGS: 'sysconsole_read_reporting_server_logs',\n SYSCONSOLE_WRITE_REPORTING_SERVER_LOGS: 'sysconsole_write_reporting_server_logs',\n SYSCONSOLE_READ_USERMANAGEMENT_USERS: 'sysconsole_read_user_management_users',\n SYSCONSOLE_WRITE_USERMANAGEMENT_USERS: 'sysconsole_write_user_management_users',\n SYSCONSOLE_READ_USERMANAGEMENT_GROUPS: 'sysconsole_read_user_management_groups',\n SYSCONSOLE_WRITE_USERMANAGEMENT_GROUPS: 'sysconsole_write_user_management_groups',\n SYSCONSOLE_READ_USERMANAGEMENT_TEAMS: 'sysconsole_read_user_management_teams',\n SYSCONSOLE_WRITE_USERMANAGEMENT_TEAMS: 'sysconsole_write_user_management_teams',\n SYSCONSOLE_READ_USERMANAGEMENT_CHANNELS: 'sysconsole_read_user_management_channels',\n SYSCONSOLE_WRITE_USERMANAGEMENT_CHANNELS: 'sysconsole_write_user_management_channels',\n SYSCONSOLE_READ_USERMANAGEMENT_PERMISSIONS: 'sysconsole_read_user_management_permissions',\n SYSCONSOLE_WRITE_USERMANAGEMENT_PERMISSIONS: 'sysconsole_write_user_management_permissions',\n SYSCONSOLE_READ_USERMANAGEMENT_SYSTEM_ROLES: 'sysconsole_read_user_management_system_roles',\n SYSCONSOLE_WRITE_USERMANAGEMENT_SYSTEM_ROLES: 'sysconsole_write_user_management_system_roles',\n SYSCONSOLE_READ_SITE_CUSTOMIZATION: 'sysconsole_read_site_customization',\n SYSCONSOLE_WRITE_SITE_CUSTOMIZATION: 'sysconsole_write_site_customization',\n SYSCONSOLE_READ_SITE_LOCALIZATION: 'sysconsole_read_site_localization',\n SYSCONSOLE_WRITE_SITE_LOCALIZATION: 'sysconsole_write_site_localization',\n SYSCONSOLE_READ_SITE_USERS_AND_TEAMS: 'sysconsole_read_site_users_and_teams',\n SYSCONSOLE_WRITE_SITE_USERS_AND_TEAMS: 'sysconsole_write_site_users_and_teams',\n SYSCONSOLE_READ_SITE_NOTIFICATIONS: 'sysconsole_read_site_notifications',\n SYSCONSOLE_WRITE_SITE_NOTIFICATIONS: 'sysconsole_write_site_notifications',\n SYSCONSOLE_READ_SITE_ANNOUNCEMENT_BANNER: 'sysconsole_read_site_announcement_banner',\n SYSCONSOLE_WRITE_SITE_ANNOUNCEMENT_BANNER: 'sysconsole_write_site_announcement_banner',\n SYSCONSOLE_READ_SITE_EMOJI: 'sysconsole_read_site_emoji',\n SYSCONSOLE_WRITE_SITE_EMOJI: 'sysconsole_write_site_emoji',\n SYSCONSOLE_READ_SITE_POSTS: 'sysconsole_read_site_posts',\n SYSCONSOLE_WRITE_SITE_POSTS: 'sysconsole_write_site_posts',\n SYSCONSOLE_READ_SITE_FILE_SHARING_AND_DOWNLOADS: 'sysconsole_read_site_file_sharing_and_downloads',\n SYSCONSOLE_WRITE_SITE_FILE_SHARING_AND_DOWNLOADS: 'sysconsole_write_site_file_sharing_and_downloads',\n SYSCONSOLE_READ_SITE_PUBLIC_LINKS: 'sysconsole_read_site_public_links',\n SYSCONSOLE_WRITE_SITE_PUBLIC_LINKS: 'sysconsole_write_site_public_links',\n SYSCONSOLE_READ_SITE_NOTICES: 'sysconsole_read_site_notices',\n SYSCONSOLE_WRITE_SITE_NOTICES: 'sysconsole_write_site_notices',\n SYSCONSOLE_READ_SITE_IP_FILTERS: 'sysconsole_read_site_ip_filters',\n SYSCONSOLE_WRITE_SITE_IP_FILTERS: 'sysconsole_write_site_ip_filters',\n SYSCONSOLE_READ_ENVIRONMENT_WEB_SERVER: 'sysconsole_read_environment_web_server',\n SYSCONSOLE_WRITE_ENVIRONMENT_WEB_SERVER: 'sysconsole_write_environment_web_server',\n SYSCONSOLE_READ_ENVIRONMENT_DATABASE: 'sysconsole_read_environment_database',\n SYSCONSOLE_WRITE_ENVIRONMENT_DATABASE: 'sysconsole_write_environment_database',\n SYSCONSOLE_READ_ENVIRONMENT_ELASTICSEARCH: 'sysconsole_read_environment_elasticsearch',\n SYSCONSOLE_WRITE_ENVIRONMENT_ELASTICSEARCH: 'sysconsole_write_environment_elasticsearch',\n SYSCONSOLE_READ_ENVIRONMENT_FILE_STORAGE: 'sysconsole_read_environment_file_storage',\n SYSCONSOLE_WRITE_ENVIRONMENT_FILE_STORAGE: 'sysconsole_write_environment_file_storage',\n SYSCONSOLE_READ_ENVIRONMENT_IMAGE_PROXY: 'sysconsole_read_environment_image_proxy',\n SYSCONSOLE_WRITE_ENVIRONMENT_IMAGE_PROXY: 'sysconsole_write_environment_image_proxy',\n SYSCONSOLE_READ_ENVIRONMENT_SMTP: 'sysconsole_read_environment_smtp',\n SYSCONSOLE_WRITE_ENVIRONMENT_SMTP: 'sysconsole_write_environment_smtp',\n SYSCONSOLE_READ_ENVIRONMENT_PUSH_NOTIFICATION_SERVER: 'sysconsole_read_environment_push_notification_server',\n SYSCONSOLE_WRITE_ENVIRONMENT_PUSH_NOTIFICATION_SERVER: 'sysconsole_write_environment_push_notification_server',\n SYSCONSOLE_READ_ENVIRONMENT_HIGH_AVAILABILITY: 'sysconsole_read_environment_high_availability',\n SYSCONSOLE_WRITE_ENVIRONMENT_HIGH_AVAILABILITY: 'sysconsole_write_environment_high_availability',\n SYSCONSOLE_READ_ENVIRONMENT_RATE_LIMITING: 'sysconsole_read_environment_rate_limiting',\n SYSCONSOLE_WRITE_ENVIRONMENT_RATE_LIMITING: 'sysconsole_write_environment_rate_limiting',\n SYSCONSOLE_READ_ENVIRONMENT_LOGGING: 'sysconsole_read_environment_logging',\n SYSCONSOLE_WRITE_ENVIRONMENT_LOGGING: 'sysconsole_write_environment_logging',\n SYSCONSOLE_READ_ENVIRONMENT_SESSION_LENGTHS: 'sysconsole_read_environment_session_lengths',\n SYSCONSOLE_WRITE_ENVIRONMENT_SESSION_LENGTHS: 'sysconsole_write_environment_session_lengths',\n SYSCONSOLE_READ_ENVIRONMENT_PERFORMANCE_MONITORING: 'sysconsole_read_environment_performance_monitoring',\n SYSCONSOLE_WRITE_ENVIRONMENT_PERFORMANCE_MONITORING: 'sysconsole_write_environment_performance_monitoring',\n SYSCONSOLE_READ_ENVIRONMENT_DEVELOPER: 'sysconsole_read_environment_developer',\n SYSCONSOLE_WRITE_ENVIRONMENT_DEVELOPER: 'sysconsole_write_environment_developer',\n SYSCONSOLE_READ_AUTHENTICATION_SIGNUP: 'sysconsole_read_authentication_signup',\n SYSCONSOLE_WRITE_AUTHENTICATION_SIGNUP: 'sysconsole_write_authentication_signup',\n SYSCONSOLE_READ_AUTHENTICATION_EMAIL: 'sysconsole_read_authentication_email',\n SYSCONSOLE_WRITE_AUTHENTICATION_EMAIL: 'sysconsole_write_authentication_email',\n SYSCONSOLE_READ_AUTHENTICATION_PASSWORD: 'sysconsole_read_authentication_password',\n SYSCONSOLE_WRITE_AUTHENTICATION_PASSWORD: 'sysconsole_write_authentication_password',\n SYSCONSOLE_READ_AUTHENTICATION_MFA: 'sysconsole_read_authentication_mfa',\n SYSCONSOLE_WRITE_AUTHENTICATION_MFA: 'sysconsole_write_authentication_mfa',\n SYSCONSOLE_READ_AUTHENTICATION_LDAP: 'sysconsole_read_authentication_ldap',\n SYSCONSOLE_WRITE_AUTHENTICATION_LDAP: 'sysconsole_write_authentication_ldap',\n SYSCONSOLE_READ_AUTHENTICATION_SAML: 'sysconsole_read_authentication_saml',\n SYSCONSOLE_WRITE_AUTHENTICATION_SAML: 'sysconsole_write_authentication_saml',\n SYSCONSOLE_READ_AUTHENTICATION_OPENID: 'sysconsole_read_authentication_openid',\n SYSCONSOLE_WRITE_AUTHENTICATION_OPENID: 'sysconsole_write_authentication_openid',\n SYSCONSOLE_READ_AUTHENTICATION_GUEST_ACCESS: 'sysconsole_read_authentication_guest_access',\n SYSCONSOLE_WRITE_AUTHENTICATION_GUEST_ACCESS: 'sysconsole_write_authentication_guest_access',\n SYSCONSOLE_READ_PLUGINS: 'sysconsole_read_plugins',\n SYSCONSOLE_WRITE_PLUGINS: 'sysconsole_write_plugins',\n SYSCONSOLE_READ_INTEGRATIONS_INTEGRATION_MANAGEMENT: 'sysconsole_read_integrations_integration_management',\n SYSCONSOLE_WRITE_INTEGRATIONS_INTEGRATION_MANAGEMENT: 'sysconsole_write_integrations_integration_management',\n SYSCONSOLE_READ_INTEGRATIONS_BOT_ACCOUNTS: 'sysconsole_read_integrations_bot_accounts',\n SYSCONSOLE_WRITE_INTEGRATIONS_BOT_ACCOUNTS: 'sysconsole_write_integrations_bot_accounts',\n SYSCONSOLE_READ_INTEGRATIONS_GIF: 'sysconsole_read_integrations_gif',\n SYSCONSOLE_WRITE_INTEGRATIONS_GIF: 'sysconsole_write_integrations_gif',\n SYSCONSOLE_READ_INTEGRATIONS_CORS: 'sysconsole_read_integrations_cors',\n SYSCONSOLE_WRITE_INTEGRATIONS_CORS: 'sysconsole_write_integrations_cors',\n SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY: 'sysconsole_read_compliance_data_retention_policy',\n SYSCONSOLE_WRITE_COMPLIANCE_DATA_RETENTION_POLICY: 'sysconsole_write_compliance_data_retention_policy',\n SYSCONSOLE_READ_COMPLIANCE_COMPLIANCE_EXPORT: 'sysconsole_read_compliance_compliance_export',\n SYSCONSOLE_WRITE_COMPLIANCE_COMPLIANCE_EXPORT: 'sysconsole_write_compliance_compliance_export',\n SYSCONSOLE_READ_COMPLIANCE_COMPLIANCE_MONITORING: 'sysconsole_read_compliance_compliance_monitoring',\n SYSCONSOLE_WRITE_COMPLIANCE_COMPLIANCE_MONITORING: 'sysconsole_write_compliance_compliance_monitoring',\n SYSCONSOLE_READ_COMPLIANCE_CUSTOM_TERMS_OF_SERVICE: 'sysconsole_read_compliance_custom_terms_of_service',\n SYSCONSOLE_WRITE_COMPLIANCE_CUSTOM_TERMS_OF_SERVICE: 'sysconsole_write_compliance_custom_terms_of_service',\n SYSCONSOLE_READ_EXPERIMENTAL_FEATURES: 'sysconsole_read_experimental_features',\n SYSCONSOLE_WRITE_EXPERIMENTAL_FEATURES: 'sysconsole_write_experimental_features',\n SYSCONSOLE_READ_EXPERIMENTAL_FEATURE_FLAGS: 'sysconsole_read_experimental_feature_flags',\n SYSCONSOLE_WRITE_EXPERIMENTAL_FEATURE_FLAGS: 'sysconsole_write_experimental_feature_flags',\n SYSCONSOLE_READ_EXPERIMENTAL_BLEVE: 'sysconsole_read_experimental_bleve',\n SYSCONSOLE_WRITE_EXPERIMENTAL_BLEVE: 'sysconsole_write_experimental_bleve',\n\n SYSCONSOLE_READ_PRODUCTS_BOARDS: 'sysconsole_read_products_boards',\n SYSCONSOLE_WRITE_PRODUCTS_BOARDS: 'sysconsole_write_products_boards',\n\n PLAYBOOK_PUBLIC_CREATE: 'playbook_public_create',\n PLAYBOOK_PUBLIC_MANAGE_PROPERTIES: 'playbook_public_manage_properties',\n PLAYBOOK_PUBLIC_MANAGE_MEMBERS: 'playbook_public_manage_members',\n PLAYBOOK_PUBLIC_VIEW: 'playbook_public_view',\n PLAYBOOK_PUBLIC_MAKE_PRIVATE: 'playbook_public_make_private',\n\n PLAYBOOK_PRIVATE_CREATE: 'playbook_private_create',\n PLAYBOOK_PRIVATE_MANAGE_PROPERTIES: 'playbook_private_manage_properties',\n PLAYBOOK_PRIVATE_MANAGE_MEMBERS: 'playbook_private_manage_members',\n PLAYBOOK_PRIVATE_VIEW: 'playbook_private_view',\n PLAYBOOK_PRIVATE_MAKE_PUBLIC: 'playbook_private_make_public',\n\n RUN_CREATE: 'run_create',\n RUN_MANAGE_PROPERTIES: 'run_manage_properties',\n RUN_MANAGE_MEMBERS: 'run_manage_members',\n RUN_VIEW: 'run_view',\n\n CHANNEL_MODERATED_PERMISSIONS: {\n CREATE_POST: 'create_post',\n CREATE_REACTIONS: 'create_reactions',\n MANAGE_MEMBERS: 'manage_members',\n USE_CHANNEL_MENTIONS: 'use_channel_mentions',\n MANAGE_BOOKMARKS: 'manage_bookmarks',\n },\n MANAGE_BOTS: 'manage_bots',\n MANAGE_OTHERS_BOTS: 'manage_others_bots',\n SYSCONSOLE_READ_PERMISSIONS: [] as string[],\n SYSCONSOLE_WRITE_PERMISSIONS: [] as string[],\n MANAGE_SHARED_CHANNELS: 'manage_shared_channels',\n MANAGE_SECURE_CONNECTIONS: 'manage_secure_connections',\n\n CREATE_CUSTOM_GROUP: 'create_custom_group',\n MANAGE_CUSTOM_GROUP_MEMBERS: 'manage_custom_group_members',\n EDIT_CUSTOM_GROUP: 'edit_custom_group',\n DELETE_CUSTOM_GROUP: 'delete_custom_group',\n RESTORE_CUSTOM_GROUP: 'restore_custom_group',\n\n ADD_BOOKMARK_PUBLIC_CHANNEL: 'add_bookmark_public_channel',\n EDIT_BOOKMARK_PUBLIC_CHANNEL: 'edit_bookmark_public_channel',\n DELETE_BOOKMARK_PUBLIC_CHANNEL: 'delete_bookmark_public_channel',\n ORDER_BOOKMARK_PUBLIC_CHANNEL: 'order_bookmark_public_channel',\n ADD_BOOKMARK_PRIVATE_CHANNEL: 'add_bookmark_private_channel',\n EDIT_BOOKMARK_PRIVATE_CHANNEL: 'edit_bookmark_private_channel',\n DELETE_BOOKMARK_PRIVATE_CHANNEL: 'delete_bookmark_private_channel',\n ORDER_BOOKMARK_PRIVATE_CHANNEL: 'order_bookmark_private_channel',\n};\n\nvalues.SYSCONSOLE_READ_PERMISSIONS = [\n values.SYSCONSOLE_READ_ABOUT_EDITION_AND_LICENSE,\n values.SYSCONSOLE_READ_BILLING,\n values.SYSCONSOLE_READ_REPORTING_SITE_STATISTICS,\n values.SYSCONSOLE_READ_REPORTING_TEAM_STATISTICS,\n values.SYSCONSOLE_READ_REPORTING_SERVER_LOGS,\n values.SYSCONSOLE_READ_USERMANAGEMENT_USERS,\n values.SYSCONSOLE_READ_USERMANAGEMENT_GROUPS,\n values.SYSCONSOLE_READ_USERMANAGEMENT_TEAMS,\n values.SYSCONSOLE_READ_USERMANAGEMENT_CHANNELS,\n values.SYSCONSOLE_READ_USERMANAGEMENT_PERMISSIONS,\n values.SYSCONSOLE_READ_SITE_CUSTOMIZATION,\n values.SYSCONSOLE_READ_SITE_LOCALIZATION,\n values.SYSCONSOLE_READ_SITE_USERS_AND_TEAMS,\n values.SYSCONSOLE_READ_SITE_NOTIFICATIONS,\n values.SYSCONSOLE_READ_SITE_ANNOUNCEMENT_BANNER,\n values.SYSCONSOLE_READ_SITE_EMOJI,\n values.SYSCONSOLE_READ_SITE_POSTS,\n values.SYSCONSOLE_READ_SITE_FILE_SHARING_AND_DOWNLOADS,\n values.SYSCONSOLE_READ_SITE_PUBLIC_LINKS,\n values.SYSCONSOLE_READ_SITE_NOTICES,\n values.SYSCONSOLE_READ_ENVIRONMENT_WEB_SERVER,\n values.SYSCONSOLE_READ_ENVIRONMENT_DATABASE,\n values.SYSCONSOLE_READ_ENVIRONMENT_ELASTICSEARCH,\n values.SYSCONSOLE_READ_ENVIRONMENT_FILE_STORAGE,\n values.SYSCONSOLE_READ_ENVIRONMENT_IMAGE_PROXY,\n values.SYSCONSOLE_READ_ENVIRONMENT_SMTP,\n values.SYSCONSOLE_READ_ENVIRONMENT_PUSH_NOTIFICATION_SERVER,\n values.SYSCONSOLE_READ_ENVIRONMENT_HIGH_AVAILABILITY,\n values.SYSCONSOLE_READ_ENVIRONMENT_RATE_LIMITING,\n values.SYSCONSOLE_READ_ENVIRONMENT_LOGGING,\n values.SYSCONSOLE_READ_ENVIRONMENT_SESSION_LENGTHS,\n values.SYSCONSOLE_READ_ENVIRONMENT_PERFORMANCE_MONITORING,\n values.SYSCONSOLE_READ_ENVIRONMENT_DEVELOPER,\n values.SYSCONSOLE_READ_AUTHENTICATION_SIGNUP,\n values.SYSCONSOLE_READ_AUTHENTICATION_EMAIL,\n values.SYSCONSOLE_READ_AUTHENTICATION_PASSWORD,\n values.SYSCONSOLE_READ_AUTHENTICATION_MFA,\n values.SYSCONSOLE_READ_AUTHENTICATION_LDAP,\n values.SYSCONSOLE_READ_AUTHENTICATION_SAML,\n values.SYSCONSOLE_READ_AUTHENTICATION_OPENID,\n values.SYSCONSOLE_READ_AUTHENTICATION_GUEST_ACCESS,\n values.SYSCONSOLE_READ_PLUGINS,\n values.SYSCONSOLE_READ_INTEGRATIONS_INTEGRATION_MANAGEMENT,\n values.SYSCONSOLE_READ_INTEGRATIONS_BOT_ACCOUNTS,\n values.SYSCONSOLE_READ_INTEGRATIONS_GIF,\n values.SYSCONSOLE_READ_INTEGRATIONS_CORS,\n values.SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY,\n values.SYSCONSOLE_READ_COMPLIANCE_COMPLIANCE_EXPORT,\n values.SYSCONSOLE_READ_COMPLIANCE_COMPLIANCE_MONITORING,\n values.SYSCONSOLE_READ_COMPLIANCE_CUSTOM_TERMS_OF_SERVICE,\n values.SYSCONSOLE_READ_EXPERIMENTAL_FEATURES,\n values.SYSCONSOLE_READ_EXPERIMENTAL_FEATURE_FLAGS,\n values.SYSCONSOLE_READ_EXPERIMENTAL_BLEVE,\n values.SYSCONSOLE_READ_PRODUCTS_BOARDS,\n];\n\nvalues.SYSCONSOLE_WRITE_PERMISSIONS = [\n values.SYSCONSOLE_WRITE_ABOUT_EDITION_AND_LICENSE,\n values.SYSCONSOLE_WRITE_BILLING,\n values.SYSCONSOLE_WRITE_REPORTING_SITE_STATISTICS,\n values.SYSCONSOLE_WRITE_REPORTING_TEAM_STATISTICS,\n values.SYSCONSOLE_WRITE_REPORTING_SERVER_LOGS,\n values.SYSCONSOLE_WRITE_USERMANAGEMENT_USERS,\n values.SYSCONSOLE_WRITE_USERMANAGEMENT_GROUPS,\n values.SYSCONSOLE_WRITE_USERMANAGEMENT_TEAMS,\n values.SYSCONSOLE_WRITE_USERMANAGEMENT_CHANNELS,\n values.SYSCONSOLE_WRITE_USERMANAGEMENT_PERMISSIONS,\n values.SYSCONSOLE_WRITE_SITE_CUSTOMIZATION,\n values.SYSCONSOLE_WRITE_SITE_LOCALIZATION,\n values.SYSCONSOLE_WRITE_SITE_USERS_AND_TEAMS,\n values.SYSCONSOLE_WRITE_SITE_NOTIFICATIONS,\n values.SYSCONSOLE_WRITE_SITE_ANNOUNCEMENT_BANNER,\n values.SYSCONSOLE_WRITE_SITE_EMOJI,\n values.SYSCONSOLE_WRITE_SITE_POSTS,\n values.SYSCONSOLE_WRITE_SITE_FILE_SHARING_AND_DOWNLOADS,\n values.SYSCONSOLE_WRITE_SITE_PUBLIC_LINKS,\n values.SYSCONSOLE_WRITE_SITE_NOTICES,\n values.SYSCONSOLE_WRITE_ENVIRONMENT_WEB_SERVER,\n values.SYSCONSOLE_WRITE_ENVIRONMENT_DATABASE,\n values.SYSCONSOLE_WRITE_ENVIRONMENT_ELASTICSEARCH,\n values.SYSCONSOLE_WRITE_ENVIRONMENT_FILE_STORAGE,\n values.SYSCONSOLE_WRITE_ENVIRONMENT_IMAGE_PROXY,\n values.SYSCONSOLE_WRITE_ENVIRONMENT_SMTP,\n values.SYSCONSOLE_WRITE_ENVIRONMENT_PUSH_NOTIFICATION_SERVER,\n values.SYSCONSOLE_WRITE_ENVIRONMENT_HIGH_AVAILABILITY,\n values.SYSCONSOLE_WRITE_ENVIRONMENT_RATE_LIMITING,\n values.SYSCONSOLE_WRITE_ENVIRONMENT_LOGGING,\n values.SYSCONSOLE_WRITE_ENVIRONMENT_SESSION_LENGTHS,\n values.SYSCONSOLE_WRITE_ENVIRONMENT_PERFORMANCE_MONITORING,\n values.SYSCONSOLE_WRITE_ENVIRONMENT_DEVELOPER,\n values.SYSCONSOLE_WRITE_AUTHENTICATION_SIGNUP,\n values.SYSCONSOLE_WRITE_AUTHENTICATION_EMAIL,\n values.SYSCONSOLE_WRITE_AUTHENTICATION_PASSWORD,\n values.SYSCONSOLE_WRITE_AUTHENTICATION_MFA,\n values.SYSCONSOLE_WRITE_AUTHENTICATION_LDAP,\n values.SYSCONSOLE_WRITE_AUTHENTICATION_SAML,\n values.SYSCONSOLE_WRITE_AUTHENTICATION_OPENID,\n values.SYSCONSOLE_WRITE_AUTHENTICATION_GUEST_ACCESS,\n values.SYSCONSOLE_WRITE_PLUGINS,\n values.SYSCONSOLE_WRITE_INTEGRATIONS_INTEGRATION_MANAGEMENT,\n values.SYSCONSOLE_WRITE_INTEGRATIONS_BOT_ACCOUNTS,\n values.SYSCONSOLE_WRITE_INTEGRATIONS_GIF,\n values.SYSCONSOLE_WRITE_INTEGRATIONS_CORS,\n values.SYSCONSOLE_WRITE_COMPLIANCE_DATA_RETENTION_POLICY,\n values.SYSCONSOLE_WRITE_COMPLIANCE_COMPLIANCE_EXPORT,\n values.SYSCONSOLE_WRITE_COMPLIANCE_COMPLIANCE_MONITORING,\n values.SYSCONSOLE_WRITE_COMPLIANCE_CUSTOM_TERMS_OF_SERVICE,\n values.SYSCONSOLE_WRITE_EXPERIMENTAL_FEATURES,\n values.SYSCONSOLE_WRITE_EXPERIMENTAL_FEATURE_FLAGS,\n values.SYSCONSOLE_WRITE_EXPERIMENTAL_BLEVE,\n values.SYSCONSOLE_WRITE_PRODUCTS_BOARDS,\n];\n\nexport default values;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nexport default {\n PLUGIN_STATE_NOT_RUNNING: 0,\n PLUGIN_STATE_STARTING: 1,\n PLUGIN_STATE_RUNNING: 2,\n PLUGIN_STATE_FAILED_TO_START: 3,\n PLUGIN_STATE_FAILED_TO_STAY_RUNNING: 4,\n PLUGIN_STATE_STOPPING: 5,\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {PostType} from '@mattermost/types/posts';\n\nexport const PostTypes = {\n CHANNEL_DELETED: 'system_channel_deleted' as PostType,\n CHANNEL_UNARCHIVED: 'system_channel_restored' as PostType,\n DISPLAYNAME_CHANGE: 'system_displayname_change' as PostType,\n CONVERT_CHANNEL: 'system_convert_channel' as PostType,\n EPHEMERAL: 'system_ephemeral' as PostType,\n EPHEMERAL_ADD_TO_CHANNEL: 'system_ephemeral_add_to_channel' as PostType,\n HEADER_CHANGE: 'system_header_change' as PostType,\n PURPOSE_CHANGE: 'system_purpose_change' as PostType,\n\n JOIN_LEAVE: 'system_join_leave' as PostType,\n JOIN_CHANNEL: 'system_join_channel' as PostType,\n GUEST_JOIN_CHANNEL: 'system_guest_join_channel' as PostType,\n LEAVE_CHANNEL: 'system_leave_channel' as PostType,\n JOIN_LEAVE_CHANNEL: 'system_join_leave_channel' as PostType,\n ADD_REMOVE: 'system_add_remove' as PostType,\n ADD_TO_CHANNEL: 'system_add_to_channel' as PostType,\n ADD_GUEST_TO_CHANNEL: 'system_add_guest_to_chan' as PostType,\n REMOVE_FROM_CHANNEL: 'system_remove_from_channel' as PostType,\n\n JOIN_TEAM: 'system_join_team' as PostType,\n LEAVE_TEAM: 'system_leave_team' as PostType,\n ADD_TO_TEAM: 'system_add_to_team' as PostType,\n REMOVE_FROM_TEAM: 'system_remove_from_team' as PostType,\n\n COMBINED_USER_ACTIVITY: 'system_combined_user_activity' as PostType,\n ME: 'me' as PostType,\n ADD_BOT_TEAMS_CHANNELS: 'add_bot_teams_channels' as PostType,\n REMINDER: 'reminder' as PostType,\n WRANGLER: 'system_wrangler' as PostType,\n GM_CONVERTED_TO_CHANNEL: 'system_gm_to_channel' as PostType,\n};\n\nexport default {\n POST_CHUNK_SIZE: 60,\n POST_DELETED: 'DELETED',\n SYSTEM_MESSAGE_PREFIX: 'system_',\n SYSTEM_AUTO_RESPONDER: 'system_auto_responder',\n POST_TYPES: PostTypes,\n MESSAGE_TYPES: {\n POST: 'post',\n COMMENT: 'comment',\n },\n MAX_PREV_MSGS: 100,\n POST_COLLAPSE_TIMEOUT: 1000 * 60 * 5, // five minutes\n IGNORE_POST_TYPES: [\n PostTypes.ADD_REMOVE,\n PostTypes.ADD_TO_CHANNEL,\n PostTypes.CHANNEL_DELETED,\n PostTypes.CHANNEL_UNARCHIVED,\n PostTypes.JOIN_LEAVE,\n PostTypes.JOIN_CHANNEL,\n PostTypes.LEAVE_CHANNEL,\n PostTypes.REMOVE_FROM_CHANNEL,\n PostTypes.JOIN_TEAM,\n PostTypes.LEAVE_TEAM,\n PostTypes.ADD_TO_TEAM,\n PostTypes.REMOVE_FROM_TEAM,\n ],\n USER_ACTIVITY_POST_TYPES: [\n PostTypes.ADD_TO_CHANNEL,\n PostTypes.JOIN_CHANNEL,\n PostTypes.LEAVE_CHANNEL,\n PostTypes.REMOVE_FROM_CHANNEL,\n PostTypes.ADD_TO_TEAM,\n PostTypes.JOIN_TEAM,\n PostTypes.LEAVE_TEAM,\n PostTypes.REMOVE_FROM_TEAM,\n ],\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {Theme, ThemeKey} from 'mattermost-redux/selectors/entities/preferences';\n\nconst Preferences = {\n APP_BAR: 'app_bar',\n CATEGORY_CHANNEL_OPEN_TIME: 'channel_open_time',\n CATEGORY_CHANNEL_APPROXIMATE_VIEW_TIME: 'channel_approximate_view_time',\n CATEGORY_DIRECT_CHANNEL_SHOW: 'direct_channel_show',\n CATEGORY_GROUP_CHANNEL_SHOW: 'group_channel_show',\n CATEGORY_FLAGGED_POST: 'flagged_post',\n CATEGORY_AUTO_RESET_MANUAL_STATUS: 'auto_reset_manual_status',\n CATEGORY_NOTIFICATIONS: 'notifications',\n COLLAPSED_REPLY_THREADS: 'collapsed_reply_threads',\n COLLAPSED_REPLY_THREADS_OFF: 'off',\n COLLAPSED_REPLY_THREADS_ON: 'on',\n COLLAPSED_REPLY_THREADS_FALLBACK_DEFAULT: 'off',\n COMMENTS: 'comments',\n COMMENTS_ANY: 'any',\n COMMENTS_ROOT: 'root',\n COMMENTS_NEVER: 'never',\n EMAIL: 'email',\n EMAIL_INTERVAL: 'email_interval',\n INTERVAL_FIFTEEN_MINUTES: 15 * 60,\n INTERVAL_HOUR: 60 * 60,\n INTERVAL_IMMEDIATE: 30,\n\n // \"immediate\" is a 30 second interval\n INTERVAL_NEVER: 0,\n INTERVAL_NOT_SET: -1,\n CATEGORY_DISPLAY_SETTINGS: 'display_settings',\n NAME_NAME_FORMAT: 'name_format',\n DISPLAY_PREFER_NICKNAME: 'nickname_full_name',\n DISPLAY_PREFER_FULL_NAME: 'full_name',\n DISPLAY_PREFER_USERNAME: 'username',\n MENTION_KEYS: 'mention_keys',\n USE_MILITARY_TIME: 'use_military_time',\n\n CATEGORY_CUSTOM_STATUS: 'custom_status',\n NAME_CUSTOM_STATUS_TUTORIAL_STATE: 'custom_status_tutorial_state',\n NAME_RECENT_CUSTOM_STATUSES: 'recent_custom_statuses',\n CUSTOM_STATUS_MODAL_VIEWED: 'custom_status_modal_viewed',\n\n CATEGORY_SIDEBAR_SETTINGS: 'sidebar_settings',\n CHANNEL_SIDEBAR_ORGANIZATION: 'channel_sidebar_organization',\n LIMIT_VISIBLE_DMS_GMS: 'limit_visible_dms_gms',\n SHOW_UNREAD_SECTION: 'show_unread_section',\n CATEGORY_ADVANCED_SETTINGS: 'advanced_settings',\n ADVANCED_FILTER_JOIN_LEAVE: 'join_leave',\n ADVANCED_CODE_BLOCK_ON_CTRL_ENTER: 'code_block_ctrl_enter',\n ADVANCED_SEND_ON_CTRL_ENTER: 'send_on_ctrl_enter',\n ADVANCED_SYNC_DRAFTS: 'sync_drafts',\n CATEGORY_WHATS_NEW_MODAL: 'whats_new_modal',\n HAS_SEEN_SIDEBAR_WHATS_NEW_MODAL: 'has_seen_sidebar_whats_new_modal',\n\n CATEGORY_PERFORMANCE_DEBUGGING: 'performance_debugging',\n NAME_DISABLE_CLIENT_PLUGINS: 'disable_client_plugins',\n NAME_DISABLE_TELEMETRY: 'disable_telemetry',\n NAME_DISABLE_TYPING_MESSAGES: 'disable_typing_messages',\n\n UNREAD_SCROLL_POSITION: 'unread_scroll_position',\n UNREAD_SCROLL_POSITION_START_FROM_LEFT: 'start_from_left_off',\n UNREAD_SCROLL_POSITION_START_FROM_NEWEST: 'start_from_newest',\n\n CATEGORY_UPGRADE_CLOUD: 'upgrade_cloud',\n SYSTEM_CONSOLE_LIMIT_REACHED: 'system_console_limit_reached',\n\n NEW_CHANNEL_WITH_BOARD_TOUR_SHOWED: 'channel_with_board_tip_showed',\n\n CATEGORY_ONBOARDING: 'category_onboarding',\n\n CATEGORY_DRAFTS: 'drafts',\n DRAFTS_TOUR_TIP_SHOWED: 'drafts_tour_tip_showed',\n\n CATEGORY_REPORTING: 'reporting',\n\n HIDE_BATCH_EXPORT_CONFIRM_MODAL: 'hide_batch_export_confirm_modal',\n HIDE_MYSQL_STATS_NOTIFICATION: 'hide_mysql_stats_notifcation',\n\n CATEGORY_OVERAGE_USERS_BANNER: 'overage_users_banner',\n\n CATEGORY_THEME: 'theme',\n THEMES: {\n denim: {\n type: 'Denim',\n sidebarBg: '#1e325c',\n sidebarText: '#ffffff',\n sidebarUnreadText: '#ffffff',\n sidebarTextHoverBg: '#28427b',\n sidebarTextActiveBorder: '#5d89ea',\n sidebarTextActiveColor: '#ffffff',\n sidebarHeaderBg: '#192a4d',\n sidebarHeaderTextColor: '#ffffff',\n sidebarTeamBarBg: '#162545',\n onlineIndicator: '#3db887',\n awayIndicator: '#ffbc1f',\n dndIndicator: '#d24b4e',\n mentionBg: '#ffffff',\n mentionBj: '#ffffff',\n mentionColor: '#1e325c',\n centerChannelBg: '#ffffff',\n centerChannelColor: '#3f4350',\n newMessageSeparator: '#cc8f00',\n linkColor: '#386fe5',\n buttonBg: '#1c58d9',\n buttonColor: '#ffffff',\n errorTextColor: '#d24b4e',\n mentionHighlightBg: '#ffd470',\n mentionHighlightLink: '#1b1d22',\n codeTheme: 'github',\n },\n sapphire: {\n type: 'Sapphire',\n sidebarBg: '#1543a3',\n sidebarText: '#ffffff',\n sidebarUnreadText: '#ffffff',\n sidebarTextHoverBg: '#2a58ba',\n sidebarTextActiveBorder: '#57b5f0',\n sidebarTextActiveColor: '#ffffff',\n sidebarHeaderBg: '#123b91',\n sidebarHeaderTextColor: '#ffffff',\n sidebarTeamBarBg: '#123582',\n onlineIndicator: '#3db887',\n awayIndicator: '#ffbc1f',\n dndIndicator: '#d24b4e',\n mentionBg: '#ffffff',\n mentionBj: '#ffffff',\n mentionColor: '#174ab5',\n centerChannelBg: '#ffffff',\n centerChannelColor: '#3f4350',\n newMessageSeparator: '#15b7b7',\n linkColor: '#1c58d9',\n buttonBg: '#1c58d9',\n buttonColor: '#ffffff',\n errorTextColor: '#d24b4e',\n mentionHighlightBg: '#7ff0f0',\n mentionHighlightLink: '#0d6e6e',\n codeTheme: 'github',\n },\n quartz: {\n type: 'Quartz',\n sidebarBg: '#f4f4f6',\n sidebarText: '#1f2228',\n sidebarUnreadText: '#1f2228',\n sidebarTextHoverBg: '#e8eaed',\n sidebarTextActiveBorder: '#32a4ec',\n sidebarTextActiveColor: '#1f2228',\n sidebarHeaderBg: '#ebecef',\n sidebarHeaderTextColor: '#1f2228',\n sidebarTeamBarBg: '#e5e7eb',\n onlineIndicator: '#3db887',\n awayIndicator: '#f5ab07',\n dndIndicator: '#d24b4e',\n mentionBg: '#1c58d9',\n mentionBj: '#1c58d9',\n mentionColor: '#ffffff',\n centerChannelBg: '#ffffff',\n centerChannelColor: '#3f4350',\n newMessageSeparator: '#15b7b7',\n linkColor: '#1c58d9',\n buttonBg: '#1c58d9',\n buttonColor: '#ffffff',\n errorTextColor: '#d24b4e',\n mentionHighlightBg: '#7ff0f0',\n mentionHighlightLink: '#0d6e6e',\n codeTheme: 'github',\n },\n indigo: {\n type: 'Indigo',\n sidebarBg: '#151e32',\n sidebarText: '#ffffff',\n sidebarUnreadText: '#ffffff',\n sidebarTextHoverBg: '#222c3f',\n sidebarTextActiveBorder: '#4a7ce8',\n sidebarTextActiveColor: '#ffffff',\n sidebarHeaderBg: '#182339',\n sidebarHeaderTextColor: '#ffffff',\n sidebarTeamBarBg: '#1c2740',\n onlineIndicator: '#3db887',\n awayIndicator: '#f5ab00',\n dndIndicator: '#d24b4e',\n mentionBg: '#4a7ce8',\n mentionBj: '#4a7ce8',\n mentionColor: '#ffffff',\n centerChannelBg: '#111827',\n centerChannelColor: '#dddfe4',\n newMessageSeparator: '#81a3ef',\n linkColor: '#5d89ea',\n buttonBg: '#4a7ce8',\n buttonColor: '#ffffff',\n errorTextColor: '#d24b4e',\n mentionHighlightBg: '#133a91',\n mentionHighlightLink: '#a4f4f4',\n codeTheme: 'solarized-dark',\n },\n onyx: {\n type: 'Onyx',\n sidebarBg: '#202228',\n sidebarText: '#ffffff',\n sidebarUnreadText: '#ffffff',\n sidebarTextHoverBg: '#25262a',\n sidebarTextActiveBorder: '#4a7ce8',\n sidebarTextActiveColor: '#ffffff',\n sidebarHeaderBg: '#24272d',\n sidebarHeaderTextColor: '#ffffff',\n sidebarTeamBarBg: '#292c33',\n onlineIndicator: '#3db887',\n awayIndicator: '#f5ab00',\n dndIndicator: '#d24b4e',\n mentionBg: '#4b7ce7',\n mentionBj: '#4b7ce7',\n mentionColor: '#ffffff',\n centerChannelBg: '#191b1f',\n centerChannelColor: '#e3e4e8',\n newMessageSeparator: '#1adbdb',\n linkColor: '#5d89ea',\n buttonBg: '#4a7ce8',\n buttonColor: '#ffffff',\n errorTextColor: '#da6c6e',\n mentionHighlightBg: '#0d6e6e',\n mentionHighlightLink: '#a4f4f4',\n codeTheme: 'monokai',\n },\n } as Record<ThemeKey, Theme>,\n RECENT_EMOJIS: 'recent_emojis',\n};\n\nexport default Preferences;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nexport default {\n THREADS_CHUNK_SIZE: 20,\n THREADS_PAGE_SIZE: 25,\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\n/* eslint-disable */\n\n// Generates a RFC-4122 version 4 compliant globally unique identifier.\nexport function generateId() {\n // implementation taken from http://stackoverflow.com/a/2117523\n let id = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';\n id = id.replace(/[xy]/g, (c) => {\n const r = Math.floor(Math.random() * 16);\n let v;\n\n if (c === 'x') {\n v = r;\n } else {\n // eslint-disable-next-line no-mixed-operators\n v = r & 0x3 | 0x8;\n }\n\n return v.toString(16);\n });\n return id;\n}\n\nfunction defaultEqualityCheck(a, b) {\n return a === b;\n}\n\nfunction areArgumentsShallowlyEqual(equalityCheck, prev, next) {\n if (prev === null || next === null || prev.length !== next.length) {\n return false;\n }\n\n // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.\n const length = prev.length;\n for (let i = 0; i < length; i++) {\n if (!equalityCheck(prev[i], next[i])) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function defaultMemoize(func, measure, equalityCheck = defaultEqualityCheck) {\n let lastArgs = null\n let lastResult = null\n // we reference arguments instead of spreading them for performance reasons\n return function () {\n if (!areArgumentsShallowlyEqual(equalityCheck, lastArgs, arguments)) {\n // apply arguments instead of spreading for performance.\n lastResult = func.apply(null, arguments)\n }\n\n if (measure) {\n measure();\n }\n lastArgs = arguments\n return lastResult\n }\n}\n\nfunction getDependencies(funcs) {\n const dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs;\n\n if (!dependencies.every((dep) => typeof dep === 'function')) {\n const dependencyTypes = dependencies.map(\n (dep) => typeof dep,\n ).join(', ');\n throw new Error(\n 'Selector creators expect all input-selectors to be functions, ' +\n `instead received the following types: [${dependencyTypes}]`,\n );\n }\n\n return dependencies;\n}\n\nconst trackedSelectors = {};\n\nexport function createSelectorCreator(memoize, ...memoizeOptions) {\n return (name, ...funcs) => {\n const id = generateId();\n let recomputations = 0;\n let calls = 0;\n const resultFunc = funcs.pop();\n const dependencies = getDependencies(funcs);\n\n const memoizedResultFunc = memoize(\n function() {\n recomputations++;\n trackedSelectors[id].recomputations++;\n\n // apply arguments instead of spreading for performance.\n return resultFunc?.apply(null, arguments);\n },\n null,\n ...memoizeOptions,\n );\n\n // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.\n const selector = memoize(function() {\n const params = [];\n const length = dependencies.length;\n\n for (let i = 0; i < length; i++) {\n // apply arguments instead of spreading and mutate a local list of params for performance.\n params.push(dependencies[i].apply(null, arguments));\n }\n\n // apply arguments instead of spreading for performance.\n return memoizedResultFunc.apply(null, params);\n },\n () => {\n calls++;\n trackedSelectors[id].calls++;\n });\n\n selector.resultFunc = resultFunc;\n selector.dependencies = dependencies;\n selector.recomputations = () => recomputations;\n selector.resetRecomputations = () => recomputations = 0;\n\n trackedSelectors[id] = {\n id,\n name,\n calls: 0,\n recomputations: 0,\n };\n\n return selector;\n };\n}\n\nexport const createSelector = /* #__PURE__ */ createSelectorCreator(defaultMemoize);\n\nexport function createStructuredSelector(selectors, selectorCreator = createSelector) {\n if (typeof selectors !== 'object') {\n throw new Error(\n 'createStructuredSelector expects first argument to be an object ' +\n `where each property is a selector, instead received a ${typeof selectors}`,\n );\n }\n const objectKeys = Object.keys(selectors);\n return selectorCreator(\n objectKeys.map((key) => selectors[key]),\n (...values) => {\n return values.reduce((composition, value, index) => {\n composition[objectKeys[index]] = value;\n return composition;\n }, {});\n },\n );\n}\n\n// resetTrackedSelectors resets all the measurements for memoization effectiveness.\nfunction resetTrackedSelectors() {\n Object.values(trackedSelectors).forEach((selector) => {\n selector.calls = 0;\n selector.recomputations = 0;\n });\n}\n\n// getSortedTrackedSelectors returns an array, sorted by effectivness, containing mesaurement data on all tracked selectors.\nexport function getSortedTrackedSelectors() {\n let selectors = Object.values(trackedSelectors);\n // Filter out any selector not called\n selectors = selectors.filter(selector => selector.calls > 0);\n const selectorsData = selectors.map((selector) => ({name: selector.name, effectiveness: effectiveness(selector), recomputations: selector.recomputations, calls: selector.calls}));\n selectorsData.sort((a, b) => {\n // Sort effectiveness ascending\n if (a.effectiveness !== b.effectiveness) {\n return a.effectiveness - b.effectiveness;\n }\n\n // And everything else descending\n if (a.recomputations !== b.recomputations) {\n return b.recomputations - a.recomputations;\n }\n\n if (a.calls !== b.calls) {\n return b.calls - a.calls;\n }\n\n return a.name.localeCompare(b.name);\n });\n return selectorsData;\n}\n\nfunction effectiveness(selector) {\n return 100 - ((selector.recomputations / selector.calls) * 100);\n}\n\n// dumpTrackedSelectorsStatistics prints to console a table containing the measurement data on all tracked selectors.\nfunction dumpTrackedSelectorsStatistics() {\n const selectors = getSortedTrackedSelectors();\n console.table(selectors); //eslint-disable-line no-console\n}\n\nwindow.dumpTrackedSelectorsStatistics = dumpTrackedSelectorsStatistics;\nwindow.resetTrackedSelectors = resetTrackedSelectors;\nwindow.getSortedTrackedSelectors = getSortedTrackedSelectors\n\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {LogObject} from '@mattermost/types/admin';\nimport type {DataRetentionCustomPolicies, DataRetentionCustomPolicy} from '@mattermost/types/data_retention';\nimport type {PluginStatusRedux} from '@mattermost/types/plugins';\nimport type {GlobalState} from '@mattermost/types/store';\n\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\n\nexport function getLogs(state: GlobalState) {\n return state.entities.admin.logs;\n}\n\nexport function getPlainLogs(state: GlobalState) {\n return state.entities.admin.plainLogs;\n}\n\nexport const getAllLogs = createSelector(\n 'getAllLogs',\n getLogs,\n (logs) => {\n return Object.values(logs).reduce<LogObject[]>((acc, log) => {\n // @ts-expect-error: object that is returned from the server contains an array of logs but ts gets confused that its one log object\n acc.push(...log);\n return acc;\n }, []);\n },\n);\n\nexport function getAudits(state: GlobalState) {\n return state.entities.admin.audits;\n}\n\nexport function getConfig(state: GlobalState) {\n return state.entities.admin.config;\n}\n\nexport function getLdapGroups(state: GlobalState) {\n return state.entities.admin.ldapGroups;\n}\n\nexport function getLdapGroupsCount(state: GlobalState) {\n return state.entities.admin.ldapGroupsCount;\n}\n\nexport function getEnvironmentConfig(state: GlobalState) {\n return state.entities.admin.environmentConfig;\n}\n\nexport function getComplianceReports(state: GlobalState) {\n return state.entities.admin.complianceReports;\n}\n\nexport function getClusterInfo(state: GlobalState) {\n return state.entities.admin.clusterInfo;\n}\n\nexport function getUserAccessTokens(state: GlobalState) {\n return state.entities.admin.userAccessTokens;\n}\n\nexport function getDataRetentionCustomPolicies(state: GlobalState): DataRetentionCustomPolicies {\n return state.entities.admin.dataRetentionCustomPolicies;\n}\n\nexport function getDataRetentionCustomPoliciesCount(state: GlobalState): number {\n return state.entities.admin.dataRetentionCustomPoliciesCount;\n}\n\nexport function getDataRetentionCustomPolicy(state: GlobalState, id: string): DataRetentionCustomPolicy | undefined | null {\n const policy = getDataRetentionCustomPolicies(state);\n return policy[id];\n}\n\nexport function getAdminAnalytics(state: GlobalState) {\n return state.entities.admin.analytics;\n}\n\nexport function getPluginStatuses(state: GlobalState): Record<string, PluginStatusRedux> | undefined {\n return state.entities.admin.pluginStatuses;\n}\n\nexport function getPluginStatus(state: GlobalState, id: string): PluginStatusRedux | undefined {\n return getPluginStatuses(state)?.[id];\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport shallowEquals from 'shallow-equals';\n\nimport type {ChannelCategory, ChannelCategoryType} from '@mattermost/types/channel_categories';\nimport {CategorySorting} from '@mattermost/types/channel_categories';\nimport type {Channel, ChannelMembership, ChannelMessageCount} from '@mattermost/types/channels';\nimport type {GlobalState} from '@mattermost/types/store';\nimport type {UserProfile} from '@mattermost/types/users';\nimport type {IDMappedObjects, RelationOneToOne} from '@mattermost/types/utilities';\n\nimport {General, Preferences} from 'mattermost-redux/constants';\nimport {CategoryTypes} from 'mattermost-redux/constants/channel_categories';\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {getChannelMessageCounts, getCurrentChannelId, getMyChannelMemberships, makeGetChannelsForIds} from 'mattermost-redux/selectors/entities/channels';\nimport {getCurrentUserLocale} from 'mattermost-redux/selectors/entities/i18n';\nimport {getMyPreferences, getTeammateNameDisplaySetting, getVisibleDmGmLimit, isCollapsedThreadsEnabled} from 'mattermost-redux/selectors/entities/preferences';\nimport {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';\nimport {\n calculateUnreadCount,\n getUserIdFromChannelName,\n isChannelMuted,\n} from 'mattermost-redux/utils/channel_utils';\nimport {getPreferenceKey} from 'mattermost-redux/utils/preference_utils';\nimport {displayUsername} from 'mattermost-redux/utils/user_utils';\n\nexport function getAllCategoriesByIds(state: GlobalState) {\n return state.entities.channelCategories.byId;\n}\n\nexport function getCategory(state: GlobalState, categoryId: string) {\n return getAllCategoriesByIds(state)[categoryId];\n}\n\n// getCategoryInTeamByType returns the first category found of the given type on the given team. This is intended for use\n// with only non-custom types of categories.\nexport function getCategoryInTeamByType(state: GlobalState, teamId: string, categoryType: ChannelCategoryType) {\n return getCategoryWhere(\n state,\n (category) => category.type === categoryType && category.team_id === teamId,\n );\n}\n\n// getCategoryInTeamWithChannel returns the category on a given team containing the given channel ID.\nexport function getCategoryInTeamWithChannel(state: GlobalState, teamId: string, channelId: string) {\n return getCategoryWhere(\n state,\n (category) => category.team_id === teamId && category.channel_ids.includes(channelId),\n );\n}\n\n// getCategoryWhere returns the first category meeting the given condition. This should not be used with a condition\n// that matches multiple categories.\nexport function getCategoryWhere(state: GlobalState, condition: (category: ChannelCategory) => boolean) {\n const categoriesByIds = getAllCategoriesByIds(state);\n\n return Object.values(categoriesByIds).find(condition);\n}\n\nexport function getCategoryIdsForTeam(state: GlobalState, teamId: string): string[] {\n return state.entities.channelCategories.orderByTeam[teamId];\n}\n\nexport function makeGetCategoriesForTeam(): (state: GlobalState, teamId: string) => ChannelCategory[] {\n return createSelector(\n 'makeGetCategoriesForTeam',\n getCategoryIdsForTeam,\n (state: GlobalState) => state.entities.channelCategories.byId,\n (categoryIds, categoriesById) => {\n if (!categoryIds) {\n return [];\n }\n\n return categoryIds.map((id) => categoriesById[id]);\n },\n );\n}\n\n// makeFilterArchivedChannels returns a selector that filters a given list of channels based on whether or not the channel\n// is archived or is currently being viewed. The selector returns the original array if no channels are filtered out.\nexport function makeFilterArchivedChannels(): (state: GlobalState, channels: Channel[]) => Channel[] {\n return createSelector(\n 'makeFilterArchivedChannels',\n (state: GlobalState, channels: Channel[]) => channels,\n getCurrentChannelId,\n (channels: Channel[], currentChannelId: string) => {\n const filtered = channels.filter((channel) => channel && (channel.id === currentChannelId || channel.delete_at === 0));\n\n return filtered.length === channels.length ? channels : filtered;\n },\n );\n}\n\nexport function makeFilterAutoclosedDMs(): (state: GlobalState, channels: Channel[], categoryType: string) => Channel[] {\n return createSelector(\n 'makeFilterAutoclosedDMs',\n (state: GlobalState, channels: Channel[]) => channels,\n (state: GlobalState, channels: Channel[], categoryType: string) => categoryType,\n getCurrentChannelId,\n (state: GlobalState) => state.entities.users.profiles,\n getCurrentUserId,\n getMyChannelMemberships,\n getChannelMessageCounts,\n (state) => getVisibleDmGmLimit(state),\n getMyPreferences,\n isCollapsedThreadsEnabled,\n (channels, categoryType, currentChannelId, profiles, currentUserId, myMembers, messageCounts, limitPref, myPreferences, collapsedThreads) => {\n if (categoryType !== CategoryTypes.DIRECT_MESSAGES) {\n // Only autoclose DMs that haven't been assigned to a category\n return channels;\n }\n\n const getTimestampFromPrefs = (category: string, name: string) => {\n const pref = myPreferences[getPreferenceKey(category, name)];\n return parseInt(pref ? pref.value! : '0', 10);\n };\n const getLastViewedAt = (channel: Channel) => {\n // The server only ever sets the last_viewed_at to the time of the last post in channel, so we may need\n // to use the preferences added for the previous version of autoclosing DMs.\n return Math.max(\n myMembers[channel.id]?.last_viewed_at,\n getTimestampFromPrefs(Preferences.CATEGORY_CHANNEL_APPROXIMATE_VIEW_TIME, channel.id),\n getTimestampFromPrefs(Preferences.CATEGORY_CHANNEL_OPEN_TIME, channel.id),\n );\n };\n\n let unreadCount = 0;\n let visibleChannels = channels.filter((channel) => {\n if (isUnreadChannel(channel.id, messageCounts, myMembers, collapsedThreads)) {\n unreadCount++;\n\n // Unread DMs/GMs are always visible\n return true;\n }\n\n if (channel.id === currentChannelId) {\n return true;\n }\n\n // DMs with deactivated users will be visible if you're currently viewing them and they were opened\n // since the user was deactivated\n if (channel.type === General.DM_CHANNEL) {\n const teammateId = getUserIdFromChannelName(currentUserId, channel.name);\n const teammate = profiles[teammateId];\n\n const lastViewedAt = getLastViewedAt(channel);\n\n if (!teammate || teammate.delete_at > lastViewedAt) {\n return false;\n }\n }\n\n return true;\n });\n\n visibleChannels.sort((channelA, channelB) => {\n // Should always prioritise the current channel\n if (channelA.id === currentChannelId) {\n return -1;\n } else if (channelB.id === currentChannelId) {\n return 1;\n }\n\n // Second priority is for unread channels\n if (isUnreadChannel(channelA.id, messageCounts, myMembers, collapsedThreads) && !isUnreadChannel(channelB.id, messageCounts, myMembers, collapsedThreads)) {\n return -1;\n } else if (!isUnreadChannel(channelA.id, messageCounts, myMembers, collapsedThreads) && isUnreadChannel(channelB.id, messageCounts, myMembers, collapsedThreads)) {\n return 1;\n }\n\n // Third priority is last_viewed_at\n const channelAlastViewed = getLastViewedAt(channelA) || 0;\n const channelBlastViewed = getLastViewedAt(channelB) || 0;\n\n if (channelAlastViewed > channelBlastViewed) {\n return -1;\n } else if (channelBlastViewed > channelAlastViewed) {\n return 1;\n }\n\n return 0;\n });\n\n // The limit of DMs user specifies to be rendered in the sidebar\n const remaining = Math.max(limitPref, unreadCount);\n visibleChannels = visibleChannels.slice(0, remaining);\n\n const visibleChannelsSet = new Set(visibleChannels);\n const filteredChannels = channels.filter((channel) => visibleChannelsSet.has(channel));\n\n return filteredChannels.length === channels.length ? channels : filteredChannels;\n },\n );\n}\n\nexport function makeFilterManuallyClosedDMs(): (state: GlobalState, channels: Channel[]) => Channel[] {\n return createSelector(\n 'makeFilterManuallyClosedDMs',\n (state: GlobalState, channels: Channel[]) => channels,\n getMyPreferences,\n getCurrentChannelId,\n getCurrentUserId,\n getMyChannelMemberships,\n getChannelMessageCounts,\n isCollapsedThreadsEnabled,\n (channels, myPreferences, currentChannelId, currentUserId, myMembers, messageCounts, collapsedThreads) => {\n const filtered = channels.filter((channel) => {\n let preference;\n\n if (channel.type !== General.DM_CHANNEL && channel.type !== General.GM_CHANNEL) {\n return true;\n }\n\n if (isUnreadChannel(channel.id, messageCounts, myMembers, collapsedThreads)) {\n // Unread DMs/GMs are always visible\n return true;\n }\n\n if (currentChannelId === channel.id) {\n // The current channel is always visible\n return true;\n }\n\n if (channel.type === General.DM_CHANNEL) {\n const teammateId = getUserIdFromChannelName(currentUserId, channel.name);\n\n preference = myPreferences[getPreferenceKey(Preferences.CATEGORY_DIRECT_CHANNEL_SHOW, teammateId)];\n } else {\n preference = myPreferences[getPreferenceKey(Preferences.CATEGORY_GROUP_CHANNEL_SHOW, channel.id)];\n }\n\n return preference && preference.value !== 'false';\n });\n\n // Only return a new array if anything was removed\n return filtered.length === channels.length ? channels : filtered;\n },\n );\n}\n\nexport function makeCompareChannels(getDisplayName: (channel: Channel) => string, locale: string, myMembers: RelationOneToOne<Channel, ChannelMembership>) {\n return (a: Channel, b: Channel) => {\n // Sort muted channels last\n const aMuted = isChannelMuted(myMembers[a.id]);\n const bMuted = isChannelMuted(myMembers[b.id]);\n\n if (aMuted && !bMuted) {\n return 1;\n } else if (!aMuted && bMuted) {\n return -1;\n }\n\n // And then sort alphabetically\n return getDisplayName(a).localeCompare(getDisplayName(b), locale, {numeric: true});\n };\n}\n\nexport function makeSortChannelsByName(): (state: GlobalState, channels: Channel[]) => Channel[] {\n return createSelector(\n 'makeSortChannelsByName',\n (state: GlobalState, channels: Channel[]) => channels,\n (state: GlobalState) => getCurrentUserLocale(state),\n getMyChannelMemberships,\n (channels: Channel[], locale: string, myMembers: RelationOneToOne<Channel, ChannelMembership>) => {\n const getDisplayName = (channel: Channel) => channel.display_name;\n\n return [...channels].sort(makeCompareChannels(getDisplayName, locale, myMembers));\n },\n );\n}\n\nexport function makeSortChannelsByNameWithDMs(): (state: GlobalState, channels: Channel[]) => Channel[] {\n return createSelector(\n 'makeSortChannelsByNameWithDMs',\n (state: GlobalState, channels: Channel[]) => channels,\n getCurrentUserId,\n (state: GlobalState) => state.entities.users.profiles,\n getTeammateNameDisplaySetting,\n (state: GlobalState) => getCurrentUserLocale(state),\n getMyChannelMemberships,\n (channels: Channel[], currentUserId: string, profiles: IDMappedObjects<UserProfile>, teammateNameDisplay: string, locale: string, myMembers: RelationOneToOne<Channel, ChannelMembership>) => {\n const cachedNames: RelationOneToOne<Channel, string> = {};\n\n const getDisplayName = (channel: Channel): string => {\n if (cachedNames[channel.id]) {\n return cachedNames[channel.id];\n }\n\n let displayName;\n\n // TODO it might be easier to do this by using channel members to find the users\n if (channel.type === General.DM_CHANNEL) {\n const teammateId = getUserIdFromChannelName(currentUserId, channel.name);\n const teammate = profiles[teammateId];\n\n displayName = displayUsername(teammate, teammateNameDisplay, false);\n } else if (channel.type === General.GM_CHANNEL) {\n const usernames = channel.display_name.split(', ');\n\n const userDisplayNames = [];\n for (const username of usernames) {\n const user = Object.values(profiles).find((profile) => profile.username === username);\n\n if (!user) {\n continue;\n }\n\n if (user.id === currentUserId) {\n continue;\n }\n\n userDisplayNames.push(displayUsername(user, teammateNameDisplay, false));\n }\n\n displayName = userDisplayNames.sort((a, b) => a.localeCompare(b, locale, {numeric: true})).join(', ');\n } else {\n displayName = channel.display_name;\n }\n\n cachedNames[channel.id] = displayName;\n\n return displayName;\n };\n\n return [...channels].sort(makeCompareChannels(getDisplayName, locale, myMembers));\n },\n );\n}\n\nexport function makeSortChannelsByRecency(): (state: GlobalState, channels: Channel[]) => Channel[] {\n return createSelector(\n 'makeSortChannelsByRecency',\n (_state: GlobalState, channels: Channel[]) => channels,\n isCollapsedThreadsEnabled,\n (channels, crtEnabled) => {\n return [...channels].sort((a, b) => {\n const aLastPostAt = Math.max(crtEnabled ? (a.last_root_post_at || a.last_post_at) : a.last_post_at, a.create_at);\n const bLastPostAt = Math.max(crtEnabled ? (b.last_root_post_at || b.last_post_at) : b.last_post_at, b.create_at);\n return bLastPostAt - aLastPostAt;\n });\n },\n );\n}\n\nexport function makeSortChannels() {\n const sortChannelsByName = makeSortChannelsByName();\n const sortChannelsByNameWithDMs = makeSortChannelsByNameWithDMs();\n const sortChannelsByRecency = makeSortChannelsByRecency();\n\n return (state: GlobalState, originalChannels: Channel[], category: ChannelCategory) => {\n let channels = originalChannels;\n\n // While this function isn't memoized, sortChannelsByX should be since they know what parts of state\n // will affect sort order.\n\n if (category.sorting === CategorySorting.Recency) {\n channels = sortChannelsByRecency(state, channels);\n } else if (category.sorting === CategorySorting.Alphabetical || category.sorting === CategorySorting.Default) {\n if (channels.some((channel) => channel.type === General.DM_CHANNEL || channel.type === General.GM_CHANNEL)) {\n channels = sortChannelsByNameWithDMs(state, channels);\n } else {\n channels = sortChannelsByName(state, channels);\n }\n }\n\n return channels;\n };\n}\n\nexport function makeGetChannelIdsForCategory() {\n const getChannels = makeGetChannelsForIds();\n const filterAndSortChannelsForCategory = makeFilterAndSortChannelsForCategory();\n\n let lastChannelIds: string[] = [];\n\n return (state: GlobalState, category: ChannelCategory) => {\n const channels = getChannels(state, category.channel_ids);\n\n const filteredChannelIds = filterAndSortChannelsForCategory(state, channels, category).map((channel) => channel.id);\n\n if (shallowEquals(filteredChannelIds, lastChannelIds)) {\n return lastChannelIds;\n }\n\n lastChannelIds = filteredChannelIds;\n return lastChannelIds;\n };\n}\n\n// Returns a selector that takes an array of channels and the category they belong to and returns the array sorted and\n// with inactive DMs/GMs and archived channels filtered out.\nexport function makeFilterAndSortChannelsForCategory() {\n const filterArchivedChannels = makeFilterArchivedChannels();\n const filterAutoclosedDMs = makeFilterAutoclosedDMs();\n\n const filterManuallyClosedDMs = makeFilterManuallyClosedDMs();\n\n const sortChannels = makeSortChannels();\n\n return (state: GlobalState, originalChannels: Channel[], category: ChannelCategory) => {\n let channels = originalChannels;\n\n channels = filterArchivedChannels(state, channels);\n channels = filterManuallyClosedDMs(state, channels);\n\n channels = filterAutoclosedDMs(state, channels, category.type);\n\n channels = sortChannels(state, channels, category);\n\n return channels;\n };\n}\n\nexport function makeGetChannelsByCategory() {\n const getCategoriesForTeam = makeGetCategoriesForTeam();\n\n // Memoize by category. As long as the categories don't change, we can keep using the same selectors for each category.\n let getChannels: RelationOneToOne<ChannelCategory, ReturnType<typeof makeGetChannelsForIds>>;\n let filterAndSortChannels: RelationOneToOne<ChannelCategory, ReturnType<typeof makeFilterAndSortChannelsForCategory>>;\n\n let lastCategoryIds: ReturnType<typeof getCategoryIdsForTeam> = [];\n let lastChannelsByCategory: RelationOneToOne<ChannelCategory, Channel[]> = {};\n\n return (state: GlobalState, teamId: string) => {\n const categoryIds = getCategoryIdsForTeam(state, teamId);\n\n // Create an instance of filterAndSortChannels for each category. As long as we don't add or remove new categories,\n // we can reuse these selectors to memoize the results of each category. This will also create new selectors when\n // categories are reordered, but that should be rare enough that it won't meaningfully affect performance.\n if (categoryIds !== lastCategoryIds) {\n lastCategoryIds = categoryIds;\n lastChannelsByCategory = {};\n\n getChannels = {};\n filterAndSortChannels = {};\n\n if (categoryIds) {\n for (const categoryId of categoryIds) {\n getChannels[categoryId] = makeGetChannelsForIds();\n filterAndSortChannels[categoryId] = makeFilterAndSortChannelsForCategory();\n }\n }\n }\n\n const categories = getCategoriesForTeam(state, teamId);\n\n const channelsByCategory: RelationOneToOne<ChannelCategory, Channel[]> = {};\n\n // TODO: This avoids some rendering, but there is a bigger issue underneath\n // Every time myPreferences or myChannels change (which can happen for many\n // unrelated reasons) the whole list of channels gets reordered and re-filtered.\n let allEquals = categoryIds === lastCategoryIds;\n for (const category of categories) {\n const channels = getChannels[category.id](state, category.channel_ids);\n channelsByCategory[category.id] = filterAndSortChannels[category.id](state, channels, category);\n allEquals = allEquals && shallowEquals(channelsByCategory[category.id], lastChannelsByCategory[category.id]);\n }\n\n // Do a shallow equality check of channelsByCategory to avoid returning a new object containing the same data\n if (allEquals) {\n return lastChannelsByCategory;\n }\n\n lastChannelsByCategory = channelsByCategory;\n return channelsByCategory;\n };\n}\n\nfunction isUnreadChannel(\n channelId: string,\n messageCounts: RelationOneToOne<Channel, ChannelMessageCount>,\n members: RelationOneToOne<Channel, ChannelMembership>,\n crtEnabled: boolean,\n): boolean {\n const unreadCount = calculateUnreadCount(messageCounts[channelId], members[channelId], crtEnabled);\n return unreadCount.showUnread;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport max from 'lodash/max';\n\nimport type {\n Channel,\n ChannelMemberCountsByGroup,\n ChannelMembership,\n ChannelMessageCount,\n ChannelModeration,\n ChannelSearchOpts,\n ChannelStats,\n} from '@mattermost/types/channels';\nimport type {GlobalState} from '@mattermost/types/store';\nimport type {Team} from '@mattermost/types/teams';\nimport type {UserProfile, UsersState} from '@mattermost/types/users';\nimport type {\n IDMappedObjects,\n RelationOneToManyUnique,\n RelationOneToOne,\n} from '@mattermost/types/utilities';\n\nimport {General, Permissions, Preferences} from 'mattermost-redux/constants';\nimport {CategoryTypes} from 'mattermost-redux/constants/channel_categories';\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {getDataRetentionCustomPolicy} from 'mattermost-redux/selectors/entities/admin';\nimport {getCategoryInTeamByType} from 'mattermost-redux/selectors/entities/channel_categories';\nimport {\n getCurrentChannelId,\n getCurrentUser,\n getMyChannelMemberships,\n getMyCurrentChannelMembership,\n getUsers,\n} from 'mattermost-redux/selectors/entities/common';\nimport {\n getTeammateNameDisplaySetting,\n isCollapsedThreadsEnabled,\n} from 'mattermost-redux/selectors/entities/preferences';\nimport {\n haveIChannelPermission,\n haveICurrentChannelPermission,\n haveITeamPermission,\n} from 'mattermost-redux/selectors/entities/roles';\nimport {getCurrentTeamId, getMyTeams, getTeamMemberships} from 'mattermost-redux/selectors/entities/teams';\nimport {\n getCurrentUserId,\n getStatusForUserId,\n getUser,\n getUserIdsInChannels,\n isCurrentUserSystemAdmin,\n} from 'mattermost-redux/selectors/entities/users';\nimport {\n calculateUnreadCount,\n completeDirectChannelDisplayName,\n completeDirectChannelInfo,\n completeDirectGroupInfo,\n filterChannelsMatchingTerm,\n getChannelByName as getChannelByNameHelper,\n getUserIdFromChannelName,\n isChannelMuted,\n isDefault,\n isDirectChannel,\n newCompleteDirectChannelInfo,\n sortChannelsByDisplayName,\n} from 'mattermost-redux/utils/channel_utils';\nimport {createIdsSelector} from 'mattermost-redux/utils/helpers';\n\nimport {isPostPriorityEnabled} from './posts';\nimport {getThreadCounts, getThreadCountsIncludingDirect} from './threads';\n\nexport {getCurrentChannelId, getMyChannelMemberships, getMyCurrentChannelMembership};\nexport function getAllChannels(state: GlobalState): IDMappedObjects<Channel> {\n return state.entities.channels.channels;\n}\n\nexport const getAllDmChannels = createSelector(\n 'getAllDmChannels',\n getAllChannels,\n (allChannels) => {\n let allDmChannels: Record<string, Channel> = {};\n\n Object.values(allChannels).forEach((channel: Channel) => {\n if (channel.type === General.DM_CHANNEL) {\n allDmChannels = {...allDmChannels, [channel.name]: channel};\n }\n });\n\n return allDmChannels;\n },\n);\n\nexport function getAllChannelStats(state: GlobalState): RelationOneToOne<Channel, ChannelStats> {\n return state.entities.channels.stats;\n}\n\nexport function getChannelsMemberCount(state: GlobalState): Record<string, number> {\n return state.entities.channels.channelsMemberCount;\n}\n\nexport function getChannelsInTeam(state: GlobalState): RelationOneToManyUnique<Team, Channel> {\n return state.entities.channels.channelsInTeam;\n}\n\nexport function getChannelsInPolicy() {\n return (createSelector(\n 'getChannelsInPolicy',\n getAllChannels,\n (state: GlobalState, props: {policyId: string}) => getDataRetentionCustomPolicy(state, props.policyId),\n (getAllChannels, policy) => {\n if (!policy) {\n return [];\n }\n\n const policyChannels: Channel[] = [];\n\n Object.entries(getAllChannels).forEach((channelEntry: [string, Channel]) => {\n const [, channel] = channelEntry;\n if (channel.policy_id === policy.id) {\n policyChannels.push(channel);\n }\n });\n\n return policyChannels;\n }) as (b: GlobalState, a: {\n policyId: string;\n }) => Channel[]);\n}\n\nexport const getDirectChannelsSet: (state: GlobalState) => Set<string> = createSelector(\n 'getDirectChannelsSet',\n getChannelsInTeam,\n (channelsInTeam: RelationOneToManyUnique<Team, Channel>): Set<string> => {\n if (!channelsInTeam) {\n return new Set();\n }\n\n return new Set(channelsInTeam['']);\n },\n);\n\nexport function getChannelMembersInChannels(state: GlobalState): RelationOneToOne<Channel, Record<string, ChannelMembership>> {\n return state.entities.channels.membersInChannel;\n}\n\nexport function getChannelMember(state: GlobalState, channelId: string, userId: string): ChannelMembership | undefined {\n return getChannelMembersInChannels(state)[channelId]?.[userId];\n}\n\ntype OldMakeChannelArgument = {id: string};\n\n// makeGetChannel returns a selector that returns a channel from the store with the following filled in for DM/GM channels:\n// - The display_name set to the other user(s) names, following the Teammate Name Display setting\n// - The teammate_id for DM channels\n// - The status of the other user in a DM channel\nexport function makeGetChannel(): (state: GlobalState, id: string) => Channel | undefined {\n return createSelector(\n 'makeGetChannel',\n getCurrentUserId,\n (state: GlobalState) => state.entities.users.profiles,\n (state: GlobalState) => state.entities.users.profilesInChannel,\n (state: GlobalState, channelId: string | OldMakeChannelArgument) => {\n const id = typeof channelId === 'string' ? channelId : channelId.id;\n const channel = getChannel(state, id);\n if (!channel || !isDirectChannel(channel)) {\n return '';\n }\n\n const currentUserId = getCurrentUserId(state);\n const teammateId = getUserIdFromChannelName(currentUserId, channel.name);\n const teammateStatus = getStatusForUserId(state, teammateId);\n\n return teammateStatus || 'offline';\n },\n (state: GlobalState, channelId: string | OldMakeChannelArgument) => {\n const id = typeof channelId === 'string' ? channelId : channelId.id;\n return getChannel(state, id);\n },\n getTeammateNameDisplaySetting,\n (currentUserId, profiles, profilesInChannel, teammateStatus, channel, teammateNameDisplay) => {\n if (channel) {\n return newCompleteDirectChannelInfo(currentUserId, profiles, profilesInChannel, teammateStatus, teammateNameDisplay!, channel);\n }\n\n return channel;\n },\n );\n}\n\n// getChannel returns a channel as it exists in the store without filling in any additional details such as the\n// display_name for DM/GM channels.\nexport function getChannel(state: GlobalState, id: string): Channel | undefined {\n return getAllChannels(state)[id];\n}\n\n// getDirectChannel returns a direct channel channel as it exists in the store filling in any additional details such as the\n// display_name or teammate_id.\nexport function getDirectChannel(state: GlobalState, id: string): Channel | undefined {\n const channel = getAllChannels(state)[id];\n if (channel && channel.type === 'D') {\n return completeDirectChannelInfo(state.entities.users, getTeammateNameDisplaySetting(state), channel);\n }\n return undefined;\n}\n\nexport function getMyChannelMembership(state: GlobalState, channelId: string): ChannelMembership | undefined {\n return getMyChannelMemberships(state)[channelId];\n}\n\n// makeGetChannelsForIds returns a selector that, given an array of channel IDs, returns a list of the corresponding\n// channels. Channels are returned in the same order as the given IDs with undefined entries replacing any invalid IDs.\n// Note that memoization will fail if an array literal is passed in.\nexport function makeGetChannelsForIds(): (state: GlobalState, ids: string[]) => Channel[] {\n return createSelector(\n 'makeGetChannelsForIds',\n getAllChannels,\n (state: GlobalState, ids: string[]) => ids,\n (allChannels, ids) => {\n return ids.map((id) => allChannels[id]);\n },\n );\n}\n\nexport const getCurrentChannel: (state: GlobalState) => Channel | undefined = createSelector(\n 'getCurrentChannel',\n getAllChannels,\n getCurrentChannelId,\n (state: GlobalState) => state.entities.users,\n getTeammateNameDisplaySetting,\n (allChannels, currentChannelId, users, teammateNameDisplay): Channel => {\n const channel = allChannels[currentChannelId];\n\n if (channel) {\n return completeDirectChannelInfo(users, teammateNameDisplay, channel);\n }\n\n return channel;\n },\n);\n\nexport const getCurrentChannelNameForSearchShortcut: (state: GlobalState) => string | undefined = createSelector(\n 'getCurrentChannelNameForSearchShortcut',\n getAllChannels,\n getCurrentChannelId,\n (state: GlobalState): UsersState => state.entities.users,\n (allChannels: IDMappedObjects<Channel>, currentChannelId: string, users: UsersState): string | undefined => {\n const channel = allChannels[currentChannelId];\n\n // Only get the extra info from users if we need it\n if (channel?.type === General.DM_CHANNEL) {\n const dmChannelWithInfo = completeDirectChannelInfo(users, Preferences.DISPLAY_PREFER_USERNAME, channel);\n return `@${dmChannelWithInfo.display_name}`;\n }\n\n // Replace spaces in GM channel names\n if (channel?.type === General.GM_CHANNEL) {\n const gmChannelWithInfo = completeDirectGroupInfo(users, Preferences.DISPLAY_PREFER_USERNAME, channel, false);\n return `@${gmChannelWithInfo.display_name.replace(/\\s/g, '')}`;\n }\n\n return channel?.name;\n },\n);\n\nexport const getMyChannelMember: (state: GlobalState, channelId: string) => ChannelMembership | undefined = createSelector(\n 'getMyChannelMember',\n getMyChannelMemberships,\n (state: GlobalState, channelId: string): string => channelId,\n (channelMemberships: RelationOneToOne<Channel, ChannelMembership>, channelId: string): ChannelMembership | undefined => {\n return channelMemberships[channelId];\n },\n);\n\nexport const getCurrentChannelStats: (state: GlobalState) => ChannelStats | undefined = createSelector(\n 'getCurrentChannelStats',\n getAllChannelStats,\n getCurrentChannelId,\n (allChannelStats: RelationOneToOne<Channel, ChannelStats>, currentChannelId: string): ChannelStats => {\n return allChannelStats[currentChannelId];\n },\n);\n\nexport function isCurrentChannelFavorite(state: GlobalState): boolean {\n const currentChannelId = getCurrentChannelId(state);\n return isFavoriteChannel(state, currentChannelId);\n}\n\nexport const isCurrentChannelMuted: (state: GlobalState) => boolean = createSelector(\n 'isCurrentChannelMuted',\n getMyCurrentChannelMembership,\n (membership?: ChannelMembership): boolean => {\n if (!membership) {\n return false;\n }\n\n return isChannelMuted(membership);\n },\n);\n\nexport const isMutedChannel: (state: GlobalState, channelId: string) => boolean = createSelector(\n 'isMutedChannel',\n (state: GlobalState, channelId: string) => getMyChannelMembership(state, channelId),\n (membership?: ChannelMembership): boolean => {\n if (!membership) {\n return false;\n }\n\n return isChannelMuted(membership);\n },\n);\n\nexport const isCurrentChannelArchived: (state: GlobalState) => boolean = createSelector(\n 'isCurrentChannelArchived',\n getCurrentChannel,\n (channel) => channel?.delete_at !== 0,\n);\n\nexport const isCurrentChannelDefault: (state: GlobalState) => boolean = createSelector(\n 'isCurrentChannelDefault',\n getCurrentChannel,\n (channel) => isDefault(channel),\n);\n\nexport function isCurrentChannelReadOnly(state: GlobalState): boolean {\n return isChannelReadOnly(state, getCurrentChannel(state));\n}\n\nexport function isChannelReadOnlyById(state: GlobalState, channelId: string): boolean {\n return isChannelReadOnly(state, getChannel(state, channelId));\n}\n\nexport function isChannelReadOnly(state: GlobalState, channel?: Channel): boolean {\n return Boolean(channel && channel.name === General.DEFAULT_CHANNEL && !isCurrentUserSystemAdmin(state));\n}\n\nexport function getChannelMessageCounts(state: GlobalState): RelationOneToOne<Channel, ChannelMessageCount> {\n return state.entities.channels.messageCounts;\n}\n\nexport function getChannelMessageCount(state: GlobalState, channelId: string): ChannelMessageCount | undefined {\n return getChannelMessageCounts(state)[channelId];\n}\n\nfunction getCurrentChannelMessageCount(state: GlobalState) {\n return getChannelMessageCount(state, getCurrentChannelId(state));\n}\n\nexport const countCurrentChannelUnreadMessages: (state: GlobalState) => number = createSelector(\n 'countCurrentChannelUnreadMessages',\n getCurrentChannelMessageCount,\n getMyCurrentChannelMembership,\n isCollapsedThreadsEnabled,\n (messageCount?: ChannelMessageCount, membership?: ChannelMembership, crtEnabled?: boolean): number => {\n if (!membership || !messageCount) {\n return 0;\n }\n return crtEnabled ? messageCount.root - membership.msg_count_root : messageCount.total - membership.msg_count;\n },\n);\n\nexport function makeGetChannelUnreadCount(): (state: GlobalState, channelId: string) => ReturnType<typeof calculateUnreadCount> {\n return createSelector(\n 'makeGetChannelUnreadCount',\n (state: GlobalState, channelId: string) => getChannelMessageCount(state, channelId),\n (state: GlobalState, channelId: string) => getMyChannelMembership(state, channelId),\n isCollapsedThreadsEnabled,\n (messageCount: ChannelMessageCount | undefined, member: ChannelMembership | undefined, crtEnabled) =>\n calculateUnreadCount(messageCount, member, crtEnabled),\n );\n}\n\nexport function getChannelByName(state: GlobalState, channelName: string): Channel | undefined {\n return getChannelByNameHelper(getAllChannels(state), channelName);\n}\n\nexport function getChannelByTeamIdAndChannelName(state: GlobalState, teamId: string, channelName: string): Channel | undefined | null {\n return Object.values(getAllChannels(state)).find((channel) =>\n channel.team_id === teamId && channel.name === channelName,\n );\n}\n\nexport const getChannelSetInCurrentTeam: (state: GlobalState) => Set<string> = createSelector(\n 'getChannelSetInCurrentTeam',\n getCurrentTeamId,\n getChannelsInTeam,\n (currentTeamId: string, channelsInTeam: RelationOneToManyUnique<Team, Channel>) => {\n return (channelsInTeam && channelsInTeam[currentTeamId]) || new Set();\n },\n);\n\nexport const getChannelSetForAllTeams: (state: GlobalState) => string[] = createSelector(\n 'getChannelSetForAllTeams',\n getAllChannels,\n (allChannels): string[] => {\n const channelSet: string[] = [];\n Object.values(allChannels).forEach((channel: Channel) => {\n if (channel.type !== General.GM_CHANNEL && channel.type !== General.DM_CHANNEL) {\n channelSet.push(channel.id);\n }\n });\n return channelSet;\n },\n);\n\nfunction sortAndInjectChannels(channels: IDMappedObjects<Channel>, channelSet: string[] | Set<string>, locale: string): Channel[] {\n const currentChannels: Channel[] = [];\n\n if (typeof channelSet === 'undefined') {\n return currentChannels;\n }\n\n channelSet.forEach((c) => {\n currentChannels.push(channels[c]);\n });\n\n return currentChannels.sort(sortChannelsByDisplayName.bind(null, locale));\n}\n\nexport const getChannelsInCurrentTeam: (state: GlobalState) => Channel[] = createSelector(\n 'getChannelsInCurrentTeam',\n getAllChannels,\n getChannelSetInCurrentTeam,\n getCurrentUser,\n (channels: IDMappedObjects<Channel>, currentTeamChannelSet: Set<string>, currentUser: UserProfile): Channel[] => {\n let locale = General.DEFAULT_LOCALE;\n\n if (currentUser && currentUser.locale) {\n locale = currentUser.locale;\n }\n\n return sortAndInjectChannels(channels, currentTeamChannelSet, locale);\n },\n);\n\nexport const getChannelsInAllTeams: (state: GlobalState) => Channel[] = createSelector(\n 'getChannelsInAllTeams',\n getAllChannels,\n getChannelSetForAllTeams,\n getCurrentUser,\n (channels: IDMappedObjects<Channel>, getChannelSetForAllTeams: string[], currentUser: UserProfile): Channel[] => {\n const locale = currentUser?.locale || General.DEFAULT_LOCALE;\n return sortAndInjectChannels(channels, getChannelSetForAllTeams, locale);\n },\n);\n\nexport const getChannelsNameMapInTeam: (state: GlobalState, teamId: string) => Record<string, Channel> = createSelector(\n 'getChannelsNameMapInTeam',\n getAllChannels,\n getChannelsInTeam,\n (state: GlobalState, teamId: string): string => teamId,\n (channels: IDMappedObjects<Channel>, channelsInTeams: RelationOneToManyUnique<Team, Channel>, teamId: string): Record<string, Channel> => {\n const channelsInTeam = channelsInTeams[teamId] || new Set();\n const channelMap: Record<string, Channel> = {};\n channelsInTeam.forEach((id) => {\n const channel = channels[id];\n channelMap[channel.name] = channel;\n });\n return channelMap;\n },\n);\n\nexport const getChannelsNameMapInCurrentTeam: (state: GlobalState) => Record<string, Channel> = createSelector(\n 'getChannelsNameMapInCurrentTeam',\n getAllChannels,\n getChannelSetInCurrentTeam,\n (channels: IDMappedObjects<Channel>, currentTeamChannelSet: Set<string>): Record<string, Channel> => {\n const channelMap: Record<string, Channel> = {};\n currentTeamChannelSet.forEach((id) => {\n const channel = channels[id];\n channelMap[channel.name] = channel;\n });\n return channelMap;\n },\n);\n\nexport const getChannelNameToDisplayNameMap: (state: GlobalState) => Record<string, string> = createIdsSelector(\n 'getChannelNameToDisplayNameMap',\n getAllChannels,\n getChannelSetInCurrentTeam,\n (channels: IDMappedObjects<Channel>, currentTeamChannelSet: Set<string>) => {\n const channelMap: Record<string, string> = {};\n for (const id of currentTeamChannelSet) {\n const channel = channels[id];\n channelMap[channel.name] = channel.display_name;\n }\n return channelMap;\n },\n);\n\n// Returns both DMs and GMs\nexport const getAllDirectChannels: (state: GlobalState) => Channel[] = createSelector(\n 'getAllDirectChannels',\n getAllChannels,\n getDirectChannelsSet,\n (state: GlobalState): UsersState => state.entities.users,\n getTeammateNameDisplaySetting,\n (channels: IDMappedObjects<Channel>, channelSet: Set<string>, users: UsersState, teammateNameDisplay: string): Channel[] => {\n const dmChannels: Channel[] = [];\n channelSet.forEach((c) => {\n dmChannels.push(completeDirectChannelInfo(users, teammateNameDisplay, channels[c]));\n });\n return dmChannels;\n },\n);\n\nexport const getAllDirectChannelsNameMapInCurrentTeam: (state: GlobalState) => Record<string, Channel> = createSelector(\n 'getAllDirectChannelsNameMapInCurrentTeam',\n getAllChannels,\n getDirectChannelsSet,\n (state: GlobalState): UsersState => state.entities.users,\n getTeammateNameDisplaySetting,\n (channels: IDMappedObjects<Channel>, channelSet: Set<string>, users: UsersState, teammateNameDisplay: string): Record<string, Channel> => {\n const channelMap: Record<string, Channel> = {};\n channelSet.forEach((id) => {\n const channel = channels[id];\n channelMap[channel.name] = completeDirectChannelInfo(users, teammateNameDisplay, channel);\n });\n return channelMap;\n },\n);\n\n// Returns only GMs\nexport const getGroupChannels: (state: GlobalState) => Channel[] = createSelector(\n 'getGroupChannels',\n getAllChannels,\n getDirectChannelsSet,\n (state: GlobalState): UsersState => state.entities.users,\n getTeammateNameDisplaySetting,\n (channels: IDMappedObjects<Channel>, channelSet: Set<string>, users: UsersState, teammateNameDisplay: string): Channel[] => {\n const gmChannels: Channel[] = [];\n channelSet.forEach((id) => {\n const channel = channels[id];\n\n if (channel.type === General.GM_CHANNEL) {\n gmChannels.push(completeDirectChannelInfo(users, teammateNameDisplay, channel));\n }\n });\n return gmChannels;\n },\n);\n\nexport const getMyChannels: (state: GlobalState) => Channel[] = createSelector(\n 'getMyChannels',\n getChannelsInCurrentTeam,\n getAllDirectChannels,\n getMyChannelMemberships,\n (channels: Channel[], directChannels: Channel[], myMembers: RelationOneToOne<Channel, ChannelMembership>): Channel[] => {\n return [...channels, ...directChannels].filter((c) => Object.hasOwn(myMembers, c.id));\n },\n);\n\nexport const getOtherChannels: (state: GlobalState, archived?: boolean | null) => Channel[] = createSelector(\n 'getOtherChannels',\n getChannelsInCurrentTeam,\n getMyChannelMemberships,\n (state: GlobalState, archived: boolean | undefined | null = true) => archived,\n (channels: Channel[], myMembers: RelationOneToOne<Channel, ChannelMembership>, archived?: boolean | null): Channel[] => {\n return channels.filter((c) => !Object.hasOwn(myMembers, c.id) && c.type === General.OPEN_CHANNEL && (archived ? true : c.delete_at === 0));\n },\n);\n\nexport const getMembersInCurrentChannel: (state: GlobalState) => Record<string, ChannelMembership> = createSelector(\n 'getMembersInCurrentChannel',\n getCurrentChannelId,\n getChannelMembersInChannels,\n (currentChannelId: string, members: RelationOneToOne<Channel, Record<string, ChannelMembership>>): Record<string, ChannelMembership> => {\n return members[currentChannelId];\n },\n);\n\n/**\n * A scalar encoding or primitive-value representation of\n */\nexport type BasicUnreadStatus = boolean | number;\nexport type BasicUnreadMeta = {isUnread: boolean; unreadMentionCount: number}\n\nexport function basicUnreadMeta(unreadStatus: BasicUnreadStatus): BasicUnreadMeta {\n return {\n isUnread: Boolean(unreadStatus),\n unreadMentionCount: (typeof unreadStatus === 'number' && unreadStatus) || 0,\n };\n}\n\n// muted channel will not be counted towards unreads\nexport const getUnreadStatus: (state: GlobalState) => BasicUnreadStatus = createSelector(\n 'getUnreadStatus',\n getAllChannels,\n getMyChannelMemberships,\n getChannelMessageCounts,\n getUsers,\n getCurrentUserId,\n getCurrentTeamId,\n getMyTeams,\n getTeamMemberships,\n isCollapsedThreadsEnabled,\n getThreadCounts,\n getThreadCountsIncludingDirect,\n (\n channels,\n myMembers,\n messageCounts,\n users,\n currentUserId,\n currentTeamId,\n myTeams,\n myTeamMemberships,\n collapsedThreads,\n threadCounts,\n threadCountsIncludingDirect,\n ) => {\n const {\n messages: currentTeamUnreadMessages,\n mentions: currentTeamUnreadMentions,\n } = Object.entries(myMembers).reduce((counts, [channelId, membership]) => {\n const channel = channels[channelId];\n\n if (!channel || !membership) {\n return counts;\n }\n\n if (\n // other-team non-DM/non-GM channels\n channel.team_id !== currentTeamId &&\n channel.type !== General.DM_CHANNEL &&\n channel.type !== General.GM_CHANNEL\n ) {\n return counts;\n }\n\n const channelExists = channel.type === General.DM_CHANNEL ? users[getUserIdFromChannelName(currentUserId, channel.name)]?.delete_at === 0 : channel.delete_at === 0;\n if (!channelExists) {\n return counts;\n }\n\n const mentions = collapsedThreads ? membership.mention_count_root : membership.mention_count;\n if (mentions && !isChannelMuted(membership)) {\n counts.mentions += mentions;\n }\n\n const unreadCount = calculateUnreadCount(messageCounts[channelId], myMembers[channelId], collapsedThreads);\n if (unreadCount.showUnread) {\n counts.messages += unreadCount.messages;\n }\n\n return counts;\n }, {\n messages: 0,\n mentions: 0,\n });\n\n // Includes mention count and message count from teams other than the current team\n // This count does not include GM's and DM's\n const {\n messages: otherTeamsUnreadMessages,\n mentions: otherTeamsUnreadMentions,\n } = myTeams.reduce((acc, team) => {\n if (currentTeamId !== team.id) {\n const member = myTeamMemberships[team.id];\n acc.messages += collapsedThreads ? member.msg_count_root : member.msg_count;\n acc.mentions += collapsedThreads ? member.mention_count_root : member.mention_count;\n }\n\n return acc;\n }, {\n messages: 0,\n mentions: 0,\n });\n\n const totalUnreadMessages = currentTeamUnreadMessages + otherTeamsUnreadMessages;\n let totalUnreadMentions = currentTeamUnreadMentions + otherTeamsUnreadMentions;\n let anyUnreadThreads = false;\n\n // when collapsed threads are enabled, we start with root-post counts from channels, then\n // add the same thread-reply counts from the global threads view\n if (collapsedThreads) {\n Object.keys(threadCounts).forEach((teamId) => {\n const c = threadCounts[teamId];\n if (teamId === currentTeamId) {\n const currentTeamDirectCounts = threadCountsIncludingDirect[currentTeamId] || 0;\n anyUnreadThreads = Boolean(currentTeamDirectCounts.total_unread_threads);\n totalUnreadMentions += currentTeamDirectCounts.total_unread_mentions;\n } else {\n anyUnreadThreads = anyUnreadThreads || Boolean(c.total_unread_threads);\n totalUnreadMentions += c.total_unread_mentions;\n }\n });\n }\n\n return totalUnreadMentions || anyUnreadThreads || Boolean(totalUnreadMessages);\n },\n);\n\n/**\n * Return a tuple of\n * - Set of team IDs that have unread messages\n * - Map with team IDs as keys and unread mentions counts as values\n */\nexport const getTeamsUnreadStatuses: (state: GlobalState) => [Set<Team['id']>, Map<Team['id'], number>, Map<Team['id'], boolean>] = createSelector(\n 'getTeamsUnreadStatuses',\n getAllChannels,\n getMyChannelMemberships,\n getChannelMessageCounts,\n isCollapsedThreadsEnabled,\n getThreadCounts,\n (\n channels,\n channelMemberships,\n channelMessageCounts,\n collapsedThreadsEnabled,\n teamThreadCounts,\n ) => {\n const teamUnreadsSet = new Set<Team['id']>();\n const teamMentionsMap = new Map<Team['id'], number>();\n const teamHasUrgentMap = new Map<Team['id'], boolean>();\n\n for (const [channelId, channelMembership] of Object.entries(channelMemberships)) {\n const channel = channels[channelId];\n\n if (!channel || !channelMembership) {\n continue;\n }\n\n // if channel is muted, we skip its count\n if (isChannelMuted(channelMembership)) {\n continue;\n }\n\n // We skip DMs and GMs in counting since they are accesible through Direct messages across teams\n if (channel.type === General.DM_CHANNEL || channel.type === General.GM_CHANNEL) {\n continue;\n }\n\n // If other user is deleted in a DM channel, we skip its count\n // TODO: This is a check overlap with the above condition, so it can never execute.\n // Evaluate if it some logic should be changed or if this branch should be removed.\n // if (channel.type === General.DM_CHANNEL) {\n // const otherUserId = getUserIdFromChannelName(currentUserId, channel.name);\n // if (users[otherUserId]?.delete_at !== 0) {\n // continue;\n // }\n // }\n\n // If channel is deleted, we skip its count\n if (channel.delete_at !== 0) {\n continue;\n }\n\n // Add read/unread from channel membership\n const unreadCountObjectForChannel = calculateUnreadCount(channelMessageCounts[channelId], channelMembership, collapsedThreadsEnabled);\n if (unreadCountObjectForChannel.showUnread) {\n teamUnreadsSet.add(channel.team_id);\n }\n\n // Add mentions count from channel membership\n if (unreadCountObjectForChannel.mentions > 0) {\n const previousMentionsInTeam = teamMentionsMap.has(channel.team_id) ? teamMentionsMap.get(channel.team_id) as number : 0;\n if (previousMentionsInTeam === 0) {\n teamMentionsMap.set(channel.team_id, unreadCountObjectForChannel.mentions);\n } else {\n teamMentionsMap.set(channel.team_id, unreadCountObjectForChannel.mentions + previousMentionsInTeam);\n }\n }\n\n // Add has urgent mentions count from channel membership\n if (unreadCountObjectForChannel.hasUrgent) {\n const previousHasUrgetInTeam = teamHasUrgentMap.has(channel.team_id) ? teamHasUrgentMap.get(channel.team_id) as boolean : false;\n if (!previousHasUrgetInTeam) {\n teamHasUrgentMap.set(channel.team_id, unreadCountObjectForChannel.hasUrgent);\n }\n }\n }\n\n if (collapsedThreadsEnabled) {\n for (const teamId of Object.keys(teamThreadCounts)) {\n const threadCountsObjectForTeam = teamThreadCounts[teamId];\n\n // Add read/unread from global threads view for team\n if (threadCountsObjectForTeam.total_unread_threads > 0) {\n teamUnreadsSet.add(teamId);\n }\n\n // Add mentions count from global threads view for team\n if (threadCountsObjectForTeam.total_unread_mentions > 0) {\n const previousMentionsInTeam = teamMentionsMap.has(teamId) ? teamMentionsMap.get(teamId) as number : 0;\n if (previousMentionsInTeam === 0) {\n teamMentionsMap.set(teamId, threadCountsObjectForTeam.total_unread_mentions);\n } else {\n teamMentionsMap.set(teamId, threadCountsObjectForTeam.total_unread_mentions + previousMentionsInTeam);\n }\n }\n\n // Add mentions count from global threads view for team\n if (threadCountsObjectForTeam.total_unread_urgent_mentions) {\n const previousHasUrgetInTeam = teamHasUrgentMap.has(teamId) ? teamHasUrgentMap.get(teamId) as boolean : false;\n if (!previousHasUrgetInTeam) {\n teamHasUrgentMap.set(teamId, Boolean(threadCountsObjectForTeam.total_unread_urgent_mentions));\n }\n }\n }\n }\n\n return [teamUnreadsSet, teamMentionsMap, teamHasUrgentMap];\n },\n);\n\nexport const getUnreadStatusInCurrentTeam: (state: GlobalState) => BasicUnreadStatus = createSelector(\n 'getUnreadStatusInCurrentTeam',\n getCurrentChannelId,\n getMyChannels,\n getMyChannelMemberships,\n getChannelMessageCounts,\n getUsers,\n getCurrentUserId,\n getCurrentTeamId,\n isCollapsedThreadsEnabled,\n getThreadCountsIncludingDirect,\n isPostPriorityEnabled,\n (\n currentChannelId,\n channels,\n myMembers,\n messageCounts,\n users,\n currentUserId,\n currentTeamId,\n collapsedThreadsEnabled,\n threadCounts,\n postPriorityEnabled,\n ) => {\n const {\n messages: currentTeamUnreadMessages,\n mentions: currentTeamUnreadMentions,\n } = channels.reduce((counts, channel) => {\n const m = myMembers[channel.id];\n\n if (!m || channel.id === currentChannelId) {\n return counts;\n }\n\n const channelExists = channel.type === General.DM_CHANNEL ? users[getUserIdFromChannelName(currentUserId, channel.name)]?.delete_at === 0 : channel.delete_at === 0;\n if (!channelExists) {\n return counts;\n }\n\n const mentions = collapsedThreadsEnabled ? m.mention_count_root : m.mention_count;\n if (mentions) {\n counts.mentions += mentions;\n }\n\n if (postPriorityEnabled) {\n counts.urgentMentions += m.urgent_mention_count;\n }\n\n const unreadCount = calculateUnreadCount(messageCounts[channel.id], m, collapsedThreadsEnabled);\n if (unreadCount.showUnread) {\n counts.messages += unreadCount.messages;\n }\n\n return counts;\n }, {\n messages: 0,\n mentions: 0,\n urgentMentions: 0,\n });\n\n let totalUnreadMentions = currentTeamUnreadMentions;\n let anyUnreadThreads = false;\n\n // when collapsed threads are enabled, we start with root-post counts from channels, then\n // add the same thread-reply counts from the global threads view IF we're not in global threads\n if (collapsedThreadsEnabled && currentChannelId) {\n const c = threadCounts[currentTeamId];\n if (c) {\n anyUnreadThreads = anyUnreadThreads || Boolean(c.total_unread_threads);\n totalUnreadMentions += c.total_unread_mentions;\n }\n }\n\n return totalUnreadMentions || anyUnreadThreads || Boolean(currentTeamUnreadMessages);\n },\n);\n\nexport const canManageChannelMembers: (state: GlobalState) => boolean = createSelector(\n 'canManageChannelMembers',\n getCurrentChannel,\n (state: GlobalState): boolean => haveICurrentChannelPermission(state,\n Permissions.MANAGE_PRIVATE_CHANNEL_MEMBERS,\n ),\n (state: GlobalState): boolean => haveICurrentChannelPermission(state,\n Permissions.MANAGE_PUBLIC_CHANNEL_MEMBERS,\n ),\n (\n channel: Channel | undefined,\n managePrivateMembers: boolean,\n managePublicMembers: boolean,\n ): boolean => {\n if (!channel) {\n return false;\n }\n\n if (channel.delete_at !== 0) {\n return false;\n }\n\n if (channel.type === General.DM_CHANNEL || channel.type === General.GM_CHANNEL || channel.name === General.DEFAULT_CHANNEL) {\n return false;\n }\n\n if (channel.type === General.OPEN_CHANNEL) {\n return managePublicMembers;\n } else if (channel.type === General.PRIVATE_CHANNEL) {\n return managePrivateMembers;\n }\n\n return true;\n },\n);\n\n// Determine if the user has permissions to manage members in at least one channel of the current team\nexport function canManageAnyChannelMembersInCurrentTeam(state: GlobalState): boolean {\n const myChannelMemberships = getMyChannelMemberships(state);\n const myChannelsIds = Object.keys(myChannelMemberships);\n const currentTeamId = getCurrentTeamId(state);\n\n for (const channelId of myChannelsIds) {\n const channel = getChannel(state, channelId);\n\n if (!channel || channel.team_id !== currentTeamId) {\n continue;\n }\n\n if (channel.type === General.OPEN_CHANNEL && haveIChannelPermission(state,\n currentTeamId,\n channelId,\n Permissions.MANAGE_PUBLIC_CHANNEL_MEMBERS,\n )) {\n return true;\n } else if (channel.type === General.PRIVATE_CHANNEL && haveIChannelPermission(state,\n currentTeamId,\n channelId,\n Permissions.MANAGE_PRIVATE_CHANNEL_MEMBERS,\n )) {\n return true;\n }\n }\n\n return false;\n}\n\nexport const getAllDirectChannelIds: (state: GlobalState) => string[] = createIdsSelector(\n 'getAllDirectChannelIds',\n getDirectChannelsSet,\n (directIds: Set<string>): string[] => {\n return Array.from(directIds);\n },\n);\n\nexport const getChannelIdsInCurrentTeam: (state: GlobalState) => string[] = createIdsSelector(\n 'getChannelIdsInCurrentTeam',\n getCurrentTeamId,\n getChannelsInTeam,\n (currentTeamId: string, channelsInTeam: RelationOneToManyUnique<Team, Channel>): string[] => {\n return Array.from(channelsInTeam[currentTeamId] || []);\n },\n);\n\nexport const getChannelIdsForCurrentTeam: (state: GlobalState) => string[] = createIdsSelector(\n 'getChannelIdsForCurrentTeam',\n getChannelIdsInCurrentTeam,\n getAllDirectChannelIds,\n (channels, direct) => {\n return [...channels, ...direct];\n },\n);\n\nexport const getChannelIdsInAllTeams: (state: GlobalState) => string[] = createIdsSelector(\n 'getChannelIdsInAllTeams',\n getChannelSetForAllTeams,\n (channels): string[] => {\n return Array.from(channels || []);\n },\n);\n\nexport const getChannelIdsForAllTeams: (state: GlobalState) => string[] = createIdsSelector(\n 'getChannelIdsForAllTeams',\n getChannelIdsInAllTeams,\n getAllDirectChannelIds,\n (channels, direct) => {\n return [...channels, ...direct];\n },\n);\n\nexport const getUnreadChannelIds: (state: GlobalState, lastUnreadChannel?: Channel | null) => string[] = createIdsSelector(\n 'getUnreadChannelIds',\n isCollapsedThreadsEnabled,\n getMyChannelMemberships,\n getChannelMessageCounts,\n getChannelIdsForCurrentTeam,\n (state: GlobalState, lastUnreadChannel: Channel | undefined | null = null): Channel | undefined | null => lastUnreadChannel,\n (\n collapsedThreads,\n members: RelationOneToOne<Channel, ChannelMembership>,\n messageCounts: RelationOneToOne<Channel, ChannelMessageCount>,\n teamChannelIds: string[],\n lastUnreadChannel?: Channel | null,\n ): string[] => {\n const unreadIds = teamChannelIds.filter((id) => {\n return calculateUnreadCount(messageCounts[id], members[id], collapsedThreads).showUnread;\n });\n\n if (lastUnreadChannel && members[lastUnreadChannel.id] && !unreadIds.includes(lastUnreadChannel.id)) {\n unreadIds.push(lastUnreadChannel.id);\n }\n\n return unreadIds;\n },\n);\n\nexport const getAllTeamsUnreadChannelIds: (state: GlobalState) => string[] = createIdsSelector(\n 'getAllTeamsUnreadChannelIds',\n isCollapsedThreadsEnabled,\n getMyChannelMemberships,\n getChannelMessageCounts,\n getChannelIdsForAllTeams,\n (\n collapsedThreads,\n members: RelationOneToOne<Channel, ChannelMembership>,\n messageCounts: RelationOneToOne<Channel, ChannelMessageCount>,\n allTeamsChannelIds: string[],\n ): string[] => {\n return allTeamsChannelIds.filter((id) => {\n return calculateUnreadCount(messageCounts[id], members[id], collapsedThreads).showUnread;\n });\n },\n);\n\nexport const getUnreadChannels: (state: GlobalState, lastUnreadChannel?: Channel | null) => Channel[] = createIdsSelector(\n 'getUnreadChannels',\n getCurrentUser,\n getUsers,\n getUserIdsInChannels,\n getAllChannels,\n getUnreadChannelIds,\n getTeammateNameDisplaySetting,\n (currentUser, profiles, userIdsInChannels: any, channels, unreadIds, settings) => {\n // If we receive an unread for a channel and then a mention the channel\n // won't be sorted correctly until we receive a message in another channel\n if (!currentUser) {\n return [];\n }\n\n const allUnreadChannels = unreadIds.filter((id) => channels[id] && channels[id].delete_at === 0).map((id) => {\n const c = channels[id];\n\n if (c.type === General.DM_CHANNEL || c.type === General.GM_CHANNEL) {\n return completeDirectChannelDisplayName(currentUser.id, profiles, userIdsInChannels[id], settings!, c);\n }\n\n return c;\n });\n return allUnreadChannels;\n },\n);\n\nexport const getUnsortedAllTeamsUnreadChannels: (state: GlobalState) => Channel[] = createSelector(\n 'getAllTeamsUnreadChannels',\n getCurrentUser,\n getUsers,\n getUserIdsInChannels,\n getAllChannels,\n getAllTeamsUnreadChannelIds,\n getTeammateNameDisplaySetting,\n (currentUser, profiles, userIdsInChannels, channels, allTeamsUnreadChannelIds, settings) => {\n // If we receive an unread for a channel and then a mention the channel\n // won't be sorted correctly until we receive a message in another channel\n if (!currentUser) {\n return [];\n }\n\n return allTeamsUnreadChannelIds.filter((id) => channels[id] && channels[id].delete_at === 0).map((id) => {\n const c = channels[id];\n\n if (c.type === General.DM_CHANNEL || c.type === General.GM_CHANNEL) {\n return completeDirectChannelDisplayName(currentUser.id, profiles, userIdsInChannels[id], settings!, c);\n }\n\n return c;\n });\n },\n);\n\nexport const sortUnreadChannels = (\n channels: Channel[],\n myMembers: RelationOneToOne<Channel, ChannelMembership>,\n lastUnreadChannel: (Channel & {hadMentions: boolean}) | null,\n crtEnabled: boolean,\n) => {\n function isMuted(channel: Channel) {\n return isChannelMuted(myMembers[channel.id]);\n }\n\n function hasMentions(channel: Channel) {\n if (lastUnreadChannel && channel.id === lastUnreadChannel.id && lastUnreadChannel.hadMentions) {\n return true;\n }\n\n const member = myMembers[channel.id];\n return member?.mention_count !== 0;\n }\n\n // Sort channels with mentions first and then sort by recency\n return [...channels].sort((a, b) => {\n // Sort muted channels last\n if (isMuted(a) && !isMuted(b)) {\n return 1;\n } else if (!isMuted(a) && isMuted(b)) {\n return -1;\n }\n\n // Sort non-muted mentions first\n if (hasMentions(a) && !hasMentions(b)) {\n return -1;\n } else if (!hasMentions(a) && hasMentions(b)) {\n return 1;\n }\n\n const aLastPostAt = max([crtEnabled ? a.last_root_post_at : a.last_post_at, a.create_at]) || 0;\n const bLastPostAt = max([crtEnabled ? b.last_root_post_at : b.last_post_at, b.create_at]) || 0;\n\n return bLastPostAt - aLastPostAt;\n });\n};\n\nexport const getSortedAllTeamsUnreadChannels: (state: GlobalState) => Channel[] = createSelector(\n 'getSortedAllTeamsUnreadChannels',\n getUnsortedAllTeamsUnreadChannels,\n getMyChannelMemberships,\n isCollapsedThreadsEnabled,\n (channels, myMembers, crtEnabled) => {\n return sortUnreadChannels(channels, myMembers, null, crtEnabled);\n },\n);\n\n// getDirectAndGroupChannels returns all direct and group channels, even if they have been manually\n// or automatically closed.\n//\n// This is similar to the getAllDirectChannels above which actually also returns group channels,\n// but suppresses manually closed group channels but not manually closed direct channels. This\n// method does away with all the suppression, since the webapp client downstream uses this for\n// the channel switcher and puts such suppressed channels in a separate category.\nexport const getDirectAndGroupChannels: (a: GlobalState) => Channel[] = createSelector(\n 'getDirectAndGroupChannels',\n getCurrentUser,\n getUsers,\n getUserIdsInChannels,\n getAllChannels,\n getTeammateNameDisplaySetting,\n (currentUser: UserProfile, profiles: IDMappedObjects<UserProfile>, userIdsInChannels: any, channels: IDMappedObjects<Channel>, settings): Channel[] => {\n if (!currentUser) {\n return [];\n }\n\n return Object.keys(channels).\n map((key) => channels[key]).\n filter((channel: Channel): boolean => Boolean(channel)).\n filter((channel: Channel): boolean => channel.type === General.DM_CHANNEL || channel.type === General.GM_CHANNEL).\n map((channel: Channel): Channel => completeDirectChannelDisplayName(currentUser.id, profiles, userIdsInChannels[channel.id], settings!, channel));\n },\n);\n\nconst getProfiles = (currentUserId: string, usersIdsInChannel: Set<string>, users: IDMappedObjects<UserProfile>): UserProfile[] => {\n const profiles: UserProfile[] = [];\n usersIdsInChannel.forEach((userId) => {\n if (userId !== currentUserId) {\n profiles.push(users[userId]);\n }\n });\n return profiles;\n};\n\n/**\n * Returns an array of unsorted group channels, each with an array of the user profiles in the channel attached to them.\n */\nexport const getChannelsWithUserProfiles: (state: GlobalState) => Array<{\n profiles: UserProfile[];\n} & Channel> = createSelector(\n 'getChannelsWithUserProfiles',\n getUserIdsInChannels,\n getUsers,\n getGroupChannels,\n getCurrentUserId,\n (channelUserMap: RelationOneToManyUnique<Channel, UserProfile>, users: IDMappedObjects<UserProfile>, channels: Channel[], currentUserId: string) => {\n return channels.map((channel: Channel): {\n profiles: UserProfile[];\n } & Channel => {\n const profiles = getProfiles(currentUserId, channelUserMap[channel.id] || new Set(), users);\n return {\n ...channel,\n profiles,\n };\n });\n },\n);\n\nexport const getDefaultChannelForTeams: (state: GlobalState) => RelationOneToOne<Team, Channel> = createSelector(\n 'getDefaultChannelForTeams',\n getAllChannels,\n (channels: IDMappedObjects<Channel>): RelationOneToOne<Team, Channel> => {\n const result: RelationOneToOne<Team, Channel> = {};\n\n for (const channel of Object.keys(channels).map((key) => channels[key])) {\n if (channel && channel.name === General.DEFAULT_CHANNEL) {\n result[channel.team_id] = channel;\n }\n }\n\n return result;\n },\n);\n\nexport const getMyFirstChannelForTeams: (state: GlobalState) => RelationOneToOne<Team, Channel> = createSelector(\n 'getMyFirstChannelForTeams',\n getAllChannels,\n getMyChannelMemberships,\n getMyTeams,\n getCurrentUser,\n (allChannels: IDMappedObjects<Channel>, myChannelMemberships: RelationOneToOne<Channel, ChannelMembership>, myTeams: Team[], currentUser: UserProfile): RelationOneToOne<Team, Channel> => {\n const locale = currentUser.locale || General.DEFAULT_LOCALE;\n const result: RelationOneToOne<Team, Channel> = {};\n\n for (const team of myTeams) {\n // Get a sorted array of all channels in the team that the current user is a member of\n const teamChannels = Object.values(allChannels).filter((channel: Channel) => channel && channel.team_id === team.id && Boolean(myChannelMemberships[channel.id])).sort(sortChannelsByDisplayName.bind(null, locale));\n\n if (teamChannels.length === 0) {\n continue;\n }\n\n result[team.id] = teamChannels[0];\n }\n\n return result;\n },\n);\n\nexport const getRedirectChannelNameForTeam = (state: GlobalState, teamId: string): string => {\n const defaultChannelForTeam = getDefaultChannelForTeams(state)[teamId];\n const canIJoinPublicChannelsInTeam = haveITeamPermission(state,\n teamId,\n Permissions.JOIN_PUBLIC_CHANNELS,\n );\n const myChannelMemberships = getMyChannelMemberships(state);\n const iAmMemberOfTheTeamDefaultChannel = Boolean(defaultChannelForTeam && myChannelMemberships[defaultChannelForTeam.id]);\n\n if (iAmMemberOfTheTeamDefaultChannel || canIJoinPublicChannelsInTeam) {\n return General.DEFAULT_CHANNEL;\n }\n\n const myFirstChannelForTeam = getMyFirstChannelForTeams(state)[teamId];\n\n return (myFirstChannelForTeam && myFirstChannelForTeam.name) || General.DEFAULT_CHANNEL;\n};\n\n// isManually unread looks into state if the provided channelId is marked as unread by the user.\nexport function isManuallyUnread(state: GlobalState, channelId?: string): boolean {\n if (!channelId) {\n return false;\n }\n\n return Boolean(state.entities.channels.manuallyUnread[channelId]);\n}\n\nexport function getChannelModerations(state: GlobalState, channelId: string): ChannelModeration[] {\n return state.entities.channels.channelModerations[channelId];\n}\n\nconst EMPTY_OBJECT = {};\nexport function getChannelMemberCountsByGroup(state: GlobalState, channelId?: string): ChannelMemberCountsByGroup {\n if (!channelId) {\n return EMPTY_OBJECT;\n }\n return state.entities.channels.channelMemberCountsByGroup[channelId] || EMPTY_OBJECT;\n}\n\nexport function isFavoriteChannel(state: GlobalState, channelId: string): boolean {\n const channel = getChannel(state, channelId);\n if (!channel) {\n return false;\n }\n\n const category = getCategoryInTeamByType(state, channel.team_id || getCurrentTeamId(state), CategoryTypes.FAVORITES);\n\n if (!category) {\n return false;\n }\n\n return category.channel_ids.includes(channel.id);\n}\n\nexport function filterChannelList(channelList: Channel[], filters: ChannelSearchOpts): Channel[] {\n if (!filters || (!filters.private && !filters.public && !filters.deleted && !filters.team_ids)) {\n return channelList;\n }\n let result: Channel[] = [];\n const channelType: string[] = [];\n const channels = channelList;\n if (filters.public) {\n channelType.push(General.OPEN_CHANNEL);\n }\n if (filters.private) {\n channelType.push(General.PRIVATE_CHANNEL);\n }\n if (filters.deleted) {\n channelType.push(General.ARCHIVED_CHANNEL);\n }\n channelType.forEach((type) => {\n result = result.concat(channels.filter((channel) => channel.type === type));\n });\n if (filters.team_ids && filters.team_ids.length > 0) {\n let teamResult: Channel[] = [];\n filters.team_ids.forEach((id) => {\n if (channelType.length > 0) {\n const filterResult = result.filter((channel) => channel.team_id === id);\n teamResult = teamResult.concat(filterResult);\n } else {\n teamResult = teamResult.concat(channels.filter((channel) => channel.team_id === id));\n }\n });\n result = teamResult;\n }\n return result;\n}\nexport function searchChannelsInPolicy(state: GlobalState, policyId: string, term: string, filters: ChannelSearchOpts): Channel[] {\n const channelsInPolicy = getChannelsInPolicy();\n const channelArray = channelsInPolicy(state, {policyId});\n let channels = filterChannelList(channelArray, filters);\n channels = filterChannelsMatchingTerm(channels, term);\n\n return channels;\n}\n\nexport function getDirectTeammate(state: GlobalState, channelId: string): UserProfile | undefined {\n const channel = getChannel(state, channelId);\n if (!channel || channel.type !== 'D') {\n return undefined;\n }\n\n const userIds = channel.name.split('__');\n const currentUserId = getCurrentUserId(state);\n\n if (userIds.length !== 2 || userIds.indexOf(currentUserId) === -1) {\n return undefined;\n }\n\n if (userIds[0] === userIds[1]) {\n return getUser(state, userIds[0]);\n }\n\n for (const id of userIds) {\n if (id !== currentUserId) {\n return getUser(state, id);\n }\n }\n\n return undefined;\n}\n\nexport function makeGetGmChannelMemberCount(): (state: GlobalState, channel: Channel) => number {\n return createSelector(\n 'getChannelMemberCount',\n getUserIdsInChannels,\n getCurrentUserId,\n (_state: GlobalState, channel: Channel) => channel,\n (memberIds, userId, channel) => {\n let membersCount = 0;\n if (memberIds && memberIds[channel.id]) {\n const groupMemberIds: Set<string> = memberIds[channel.id] as unknown as Set<string>;\n membersCount = groupMemberIds.size;\n if (groupMemberIds.has(userId)) {\n membersCount--;\n }\n }\n\n return membersCount;\n },\n );\n}\n\nexport const getMyActiveChannelIds = createSelector(\n 'getMyActiveChannels',\n getMyChannels,\n (channels) => channels.flatMap((chan) => {\n if (chan.delete_at > 0) {\n return [];\n }\n return chan.id;\n }),\n);\nexport const getRecentProfilesFromDMs: (state: GlobalState) => UserProfile[] = createSelector(\n 'getRecentProfilesFromDMs',\n getAllChannels,\n getUsers,\n getCurrentUser,\n getMyChannelMemberships,\n (allChannels: IDMappedObjects<Channel>, users: IDMappedObjects<UserProfile>, currentUser: UserProfile, memberships: RelationOneToOne<Channel, ChannelMembership>) => {\n if (!allChannels || !users) {\n return [];\n }\n const recentChannelIds = Object.values(memberships).sort((aMembership, bMembership) => {\n return bMembership.last_viewed_at - aMembership.last_viewed_at;\n }).map((membership) => membership.channel_id);\n const groupChannels = Object.values(allChannels).filter((channel: Channel) => channel.type === General.GM_CHANNEL);\n const dmChannels = Object.values(allChannels).filter((channel: Channel) => channel.type === General.DM_CHANNEL);\n\n const userProfilesByChannel: {[key: string]: UserProfile[]} = {};\n\n dmChannels.forEach((channel) => {\n if (channel.name) {\n const otherUserId = getUserIdFromChannelName(currentUser.id, channel.name);\n const userProfile = users[otherUserId];\n if (userProfile) {\n userProfilesByChannel[channel.id] = [userProfile];\n }\n }\n });\n\n groupChannels.forEach((channel) => {\n if (channel.display_name) {\n const memberUsernames = channel.display_name.split(',').map((username) => username.trim()).filter((username) => username !== currentUser.username).sort();\n const memberProfiles = memberUsernames.map((username) => {\n return Object.values(users).find((profile) => profile.username === username);\n });\n if (memberProfiles) {\n userProfilesByChannel[channel.id] = memberProfiles as UserProfile[];\n }\n }\n });\n const sortedUserProfiles: Set<UserProfile> = new Set<UserProfile>();\n recentChannelIds.forEach((cid: string) => {\n if (userProfilesByChannel[cid]) {\n userProfilesByChannel[cid].forEach((user) => sortedUserProfiles.add(user));\n }\n });\n return [...sortedUserProfiles];\n },\n);\n\nexport const isDeactivatedDirectChannel = (state: GlobalState, channelId: string) => {\n const teammate = getDirectTeammate(state, channelId);\n return Boolean(teammate && teammate.delete_at);\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {ChannelMembership, Channel} from '@mattermost/types/channels';\nimport type {GlobalState} from '@mattermost/types/store';\nimport type {TeamMembership} from '@mattermost/types/teams';\nimport type {UserProfile} from '@mattermost/types/users';\nimport type {RelationOneToOne, IDMappedObjects} from '@mattermost/types/utilities';\n\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\n\n// Channels\n\nexport function getCurrentChannelId(state: GlobalState): string {\n return state.entities.channels.currentChannelId;\n}\n\nexport function getMyChannelMemberships(state: GlobalState): RelationOneToOne<Channel, ChannelMembership> {\n return state.entities.channels.myMembers;\n}\n\nexport const getMyCurrentChannelMembership: (a: GlobalState) => ChannelMembership | undefined = createSelector(\n 'getMyCurrentChannelMembership',\n getCurrentChannelId,\n getMyChannelMemberships,\n (currentChannelId, channelMemberships) => {\n return channelMemberships[currentChannelId];\n },\n);\n\nexport function getMembersInChannel(state: GlobalState, channelId: string): Record<string, ChannelMembership> {\n return state.entities.channels?.membersInChannel?.[channelId] || {};\n}\n\n// Teams\n\nexport function getMembersInTeam(state: GlobalState, teamId: string): RelationOneToOne<UserProfile, TeamMembership> {\n return state.entities.teams?.membersInTeam?.[teamId] || {};\n}\n\n// Users\n\nexport function getCurrentUser(state: GlobalState): UserProfile {\n return state.entities.users.profiles[getCurrentUserId(state)];\n}\n\nexport function getCurrentUserEmail(state: GlobalState): UserProfile['email'] {\n return getCurrentUser(state)?.email;\n}\n\nexport function getCurrentUserId(state: GlobalState): string {\n return state.entities.users.currentUserId;\n}\n\nexport function getUsers(state: GlobalState): IDMappedObjects<UserProfile> {\n return state.entities.users.profiles;\n}\n\n// Config\nexport const getIsUserStatusesConfigEnabled: (a: GlobalState) => boolean = createSelector(\n 'getIsUserStatusesConfigEnabled',\n (state: GlobalState) => state.entities.general.config.EnableUserStatuses,\n (EnableUserStatuses) => EnableUserStatuses !== 'false',\n);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {GiphyFetch} from '@giphy/js-fetch-api';\n\nimport type {ClientConfig, FeatureFlags, ClientLicense} from '@mattermost/types/config';\nimport type {UserPropertyField} from '@mattermost/types/properties';\nimport type {GlobalState} from '@mattermost/types/store';\nimport type {IDMappedObjects} from '@mattermost/types/utilities';\n\nimport {General} from 'mattermost-redux/constants';\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {isMinimumServerVersion} from 'mattermost-redux/utils/helpers';\n\nexport function getConfig(state: GlobalState): Partial<ClientConfig> {\n return state.entities.general.config;\n}\n\n/**\n * Safely get value of a specific or known FeatureFlag\n */\nexport function getFeatureFlagValue(state: GlobalState, key: keyof FeatureFlags): string | undefined {\n return getConfig(state)?.[`FeatureFlag${key}` as keyof Partial<ClientConfig>];\n}\n\nexport type PasswordConfig = {\n minimumLength: number;\n requireLowercase: boolean;\n requireUppercase: boolean;\n requireNumber: boolean;\n requireSymbol: boolean;\n};\n\nexport const getPasswordConfig: (state: GlobalState) => PasswordConfig = createSelector(\n 'getPasswordConfig',\n getConfig,\n (config) => {\n return {\n minimumLength: parseInt(config.PasswordMinimumLength!, 10),\n requireLowercase: config.PasswordRequireLowercase === 'true',\n requireUppercase: config.PasswordRequireUppercase === 'true',\n requireNumber: config.PasswordRequireNumber === 'true',\n requireSymbol: config.PasswordRequireSymbol === 'true',\n };\n },\n);\n\nexport function getLicense(state: GlobalState): ClientLicense {\n return state.entities.general.license;\n}\n\nexport const isCloudLicense: (state: GlobalState) => boolean = createSelector(\n 'isCloudLicense',\n getLicense,\n (license: ClientLicense) => license?.Cloud === 'true',\n);\n\nexport function isCompatibleWithJoinViewTeamPermissions(state: GlobalState): boolean {\n const version = state.entities.general.serverVersion;\n return isMinimumServerVersion(version, 5, 10, 0) ||\n (version.indexOf('dev') !== -1 && isMinimumServerVersion(version, 5, 8, 0)) ||\n (version.match(/^5.8.\\d.\\d\\d\\d\\d.*$/) !== null && isMinimumServerVersion(version, 5, 8, 0));\n}\n\nexport const canUploadFilesOnMobile: (a: GlobalState) => boolean = createSelector(\n 'canUploadFilesOnMobile',\n getConfig,\n getLicense,\n (config: Partial<ClientConfig>, license: any): boolean => {\n // Defaults to true if either setting doesn't exist\n return config.EnableFileAttachments !== 'false' &&\n (license.IsLicensed === 'false' || license.Compliance === 'false' || config.EnableMobileFileUpload !== 'false');\n },\n);\n\nexport const canDownloadFilesOnMobile: (a: GlobalState) => boolean = createSelector(\n 'canDownloadFilesOnMobile',\n getConfig,\n getLicense,\n (config: Partial<ClientConfig>, license: any): boolean => {\n // Defaults to true if the setting doesn't exist\n return license.IsLicensed === 'false' || license.Compliance === 'false' || config.EnableMobileFileDownload !== 'false';\n },\n);\n\nexport const getAutolinkedUrlSchemes: (a: GlobalState) => string[] = createSelector(\n 'getAutolinkedUrlSchemes',\n getConfig,\n (config: Partial<ClientConfig>): string[] => {\n if (!config.CustomUrlSchemes) {\n return General.DEFAULT_AUTOLINKED_URL_SCHEMES;\n }\n\n return [\n ...General.DEFAULT_AUTOLINKED_URL_SCHEMES,\n ...config.CustomUrlSchemes.split(','),\n ];\n },\n);\n\nexport const getManagedResourcePaths: (state: GlobalState) => string[] = createSelector(\n 'getManagedResourcePaths',\n getConfig,\n (config) => {\n if (!config.ManagedResourcePaths) {\n return [];\n }\n\n return config.ManagedResourcePaths.split(',').map((path) => path.trim());\n },\n);\n\nexport const getServerVersion = (state: GlobalState): string => {\n return state.entities.general.serverVersion;\n};\n\nexport function getFirstAdminVisitMarketplaceStatus(state: GlobalState): boolean {\n return state.entities.general.firstAdminVisitMarketplaceStatus;\n}\n\nexport function getFirstAdminSetupComplete(state: GlobalState): boolean {\n return state.entities.general.firstAdminCompleteSetup;\n}\n\nexport function isPerformanceDebuggingEnabled(state: GlobalState): boolean {\n return state.entities.general.config.EnableClientPerformanceDebugging === 'true';\n}\n\nexport const isMarketplaceEnabled: (state: GlobalState) => boolean = createSelector(\n 'isMarketplaceEnabled',\n getConfig,\n (config) => {\n return config.PluginsEnabled === 'true' && config.EnableMarketplace === 'true';\n },\n);\n\nexport const getGiphyFetchInstance: (state: GlobalState) => GiphyFetch | null = createSelector(\n 'getGiphyFetchInstance',\n (state) => getConfig(state).GiphySdkKey,\n (giphySdkKey) => {\n if (giphySdkKey) {\n const giphyFetch = new GiphyFetch(giphySdkKey);\n return giphyFetch;\n }\n\n return null;\n },\n);\n\nexport const getUsersStatusAndProfileFetchingPollInterval: (state: GlobalState) => number | null = createSelector(\n 'getUsersStatusAndProfileFetchingPollInterval',\n getConfig,\n (config) => {\n const usersStatusAndProfileFetchingPollInterval = config.UsersStatusAndProfileFetchingPollIntervalMilliseconds;\n if (usersStatusAndProfileFetchingPollInterval) {\n return parseInt(usersStatusAndProfileFetchingPollInterval, 10);\n }\n\n return null;\n },\n);\n\nexport function developerModeEnabled(state: GlobalState): boolean {\n return state.entities.general.config.EnableDeveloper === 'true';\n}\n\nexport function testingEnabled(state: GlobalState): boolean {\n return state.entities.general.config.EnableTesting === 'true';\n}\n\nexport function getCustomProfileAttributes(state: GlobalState): IDMappedObjects<UserPropertyField> {\n return state.entities.general.customProfileAttributes;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {GlobalState} from '@mattermost/types/store';\n\nimport {General} from 'mattermost-redux/constants';\nimport {getCurrentUser} from 'mattermost-redux/selectors/entities/common';\n\nexport function getCurrentUserLocale(state: GlobalState, defaultLocale = General.DEFAULT_LOCALE) {\n const currentUser = getCurrentUser(state);\n\n if (!currentUser) {\n return defaultLocale;\n }\n\n return currentUser.locale || defaultLocale;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {Channel} from '@mattermost/types/channels';\nimport type {\n MessageHistory,\n OpenGraphMetadata,\n Post,\n PostAcknowledgement,\n PostOrderBlock,\n} from '@mattermost/types/posts';\nimport type {Reaction} from '@mattermost/types/reactions';\nimport type {GlobalState} from '@mattermost/types/store';\nimport type {Team} from '@mattermost/types/teams';\nimport type {UserProfile} from '@mattermost/types/users';\nimport type {\n RelationOneToOne,\n RelationOneToMany,\n} from '@mattermost/types/utilities';\n\nimport {General, Posts, Preferences} from 'mattermost-redux/constants';\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {getChannel} from 'mattermost-redux/selectors/entities/channels';\nimport {getCurrentChannelId, getCurrentUser} from 'mattermost-redux/selectors/entities/common';\nimport {getConfig} from 'mattermost-redux/selectors/entities/general';\nimport {getBool, shouldShowJoinLeaveMessages} from 'mattermost-redux/selectors/entities/preferences';\nimport {getCurrentTeamId} from 'mattermost-redux/selectors/entities/teams';\nimport {getUsers, getCurrentUserId, getUserStatuses} from 'mattermost-redux/selectors/entities/users';\nimport {createIdsSelector} from 'mattermost-redux/utils/helpers';\nimport {\n isPostEphemeral,\n isSystemMessage,\n shouldFilterJoinLeavePost,\n comparePosts,\n isPostPendingOrFailed,\n isPostCommentMention,\n} from 'mattermost-redux/utils/post_utils';\nimport {isGuest} from 'mattermost-redux/utils/user_utils';\n\nexport function getAllPosts(state: GlobalState) {\n return state.entities.posts.posts;\n}\n\nexport type UserActivityPost = Post & {\n system_post_ids: string[];\n user_activity_posts: Post[];\n}\n\nexport function getPost(state: GlobalState, postId: Post['id']): Post {\n return getAllPosts(state)[postId];\n}\n\nexport function isPostFlagged(state: GlobalState, postId: Post['id']): boolean {\n return getBool(state, Preferences.CATEGORY_FLAGGED_POST, postId);\n}\n\nexport function getPostRepliesCount(state: GlobalState, postId: Post['id']): number {\n return state.entities.posts.postsReplies[postId] || 0;\n}\n\nexport function getPostsInThread(state: GlobalState): RelationOneToMany<Post, Post> {\n return state.entities.posts.postsInThread;\n}\n\nexport function getPostsInThreadOrdered(state: GlobalState, rootId: string): string[] {\n const postIds = getPostsInThread(state)[rootId];\n if (!postIds) {\n return [rootId];\n }\n\n const allPosts = getAllPosts(state);\n const threadPosts = postIds.map((v) => allPosts[v]).filter((v) => v);\n const sortedPosts = threadPosts.sort(comparePosts);\n return [...sortedPosts.map((v) => v.id), rootId];\n}\n\nexport function getReactionsForPosts(state: GlobalState): RelationOneToOne<Post, {\n [x: string]: Reaction;\n}> {\n return state.entities.posts.reactions;\n}\n\nexport function makeGetReactionsForPost(): (state: GlobalState, postId: Post['id']) => {\n [x: string]: Reaction;\n} | undefined {\n return createSelector('makeGetReactionsForPost', getReactionsForPosts, (state: GlobalState, postId: string) => postId, (reactions, postId) => {\n if (reactions[postId]) {\n return reactions[postId];\n }\n\n return undefined;\n });\n}\n\nexport function getHasReactions(state: GlobalState, postId: Post['id']): boolean {\n const reactions = getReactionsForPosts(state)?.[postId] || {};\n return Object.keys(reactions).length > 0;\n}\n\nexport function getOpenGraphMetadata(state: GlobalState): RelationOneToOne<Post, Record<string, OpenGraphMetadata>> {\n return state.entities.posts.openGraph;\n}\n\nexport function getOpenGraphMetadataForUrl(state: GlobalState, postId: string, url: string) {\n const openGraphForPost = state.entities.posts.openGraph[postId];\n return openGraphForPost ? openGraphForPost[url] : undefined;\n}\n\n// getPostIdsInCurrentChannel returns the IDs of posts loaded at the bottom of the channel. It does not include older\n// posts such as those loaded by viewing a thread or a permalink.\nexport function getPostIdsInCurrentChannel(state: GlobalState): Array<Post['id']> | undefined | null {\n return getPostIdsInChannel(state, state.entities.channels.currentChannelId);\n}\n\nexport function makeGetPostIdsForThread(): (state: GlobalState, postId: Post['id']) => Array<Post['id']> {\n const getPostsForThread = makeGetPostsForThread();\n\n return createIdsSelector(\n 'makeGetPostIdsForThread',\n (state: GlobalState, rootId: Post['id']) => getPostsForThread(state, rootId),\n (posts) => {\n return posts.map((post) => post.id);\n },\n );\n}\n\nexport function makeGetPostsChunkAroundPost(): (state: GlobalState, postId: Post['id'], channelId: Channel['id']) => PostOrderBlock| null | undefined {\n return createIdsSelector(\n 'makeGetPostsChunkAroundPost',\n (state: GlobalState, postId: string, channelId: string) => state.entities.posts.postsInChannel[channelId],\n (state: GlobalState, postId) => postId,\n (postsForChannel, postId) => {\n if (!postsForChannel) {\n return null;\n }\n\n let postChunk;\n\n for (const block of postsForChannel) {\n const index = block.order.indexOf(postId);\n\n if (index === -1) {\n continue;\n }\n\n postChunk = block;\n }\n\n return postChunk;\n },\n );\n}\n\nfunction isPostInteractable(post: Post | undefined) {\n return post &&\n !post.delete_at &&\n !isPostEphemeral(post) &&\n !isSystemMessage(post) &&\n !isPostPendingOrFailed(post) &&\n post.state !== Posts.POST_DELETED;\n}\n\nexport function getLatestInteractablePostId(state: GlobalState, channelId: string, rootId = '') {\n const postsIds = rootId ? getPostsInThreadOrdered(state, rootId) : getPostIdsInChannel(state, channelId);\n if (!postsIds) {\n return '';\n }\n\n const allPosts = getAllPosts(state);\n\n for (const postId of postsIds) {\n if (!isPostInteractable(allPosts[postId])) {\n continue;\n }\n return postId;\n }\n\n return '';\n}\n\nexport function getLatestPostToEdit(state: GlobalState, channelId: string, rootId = '') {\n const postsIds = rootId ? getPostsInThreadOrdered(state, rootId) : getPostIdsInChannel(state, channelId);\n if (!postsIds) {\n return '';\n }\n\n if (rootId) {\n postsIds.push(rootId);\n }\n\n const allPosts = getAllPosts(state);\n const currentUserId = getCurrentUserId(state);\n\n for (const postId of postsIds) {\n const post = allPosts[postId];\n if (post?.user_id !== currentUserId || !isPostInteractable(post)) {\n continue;\n }\n\n return post.id;\n }\n\n return '';\n}\n\nexport const getLatestReplyablePostId: (state: GlobalState) => Post['id'] = (state) => getLatestInteractablePostId(state, getCurrentChannelId(state));\n\n// getPostsInCurrentChannel returns an array of all recent posts loaded at the bottom of the given channel.\n// It does not include older posts such as those loaded by viewing a thread or a permalink.\nexport const getPostsInCurrentChannel: (state: GlobalState) => Post[] | undefined | null = createSelector(\n 'getPostsInCurrentChannel',\n getAllPosts,\n getPostIdsInCurrentChannel,\n getCurrentUser,\n shouldShowJoinLeaveMessages,\n (allPosts, postIds, currentUser, showJoinLeave) => {\n if (!postIds) {\n return null;\n }\n\n const posts: Post[] = [];\n\n for (let i = 0; i < postIds.length; i++) {\n const post = allPosts[postIds[i]];\n\n if (!post || shouldFilterJoinLeavePost(post, showJoinLeave, currentUser ? currentUser.username : '')) {\n continue;\n }\n\n posts.push(post);\n }\n\n return posts;\n },\n);\n\n// Returns a function that creates a creates a selector that will get the posts for a given thread.\n// That selector will take a props object (containing a rootId field) as its\n// only argument and will be memoized based on that argument.\n\nexport function makeGetPostsForThread(): (state: GlobalState, rootId: string) => Post[] {\n return createIdsSelector(\n 'makeGetPostsForThread',\n getAllPosts,\n getCurrentUser,\n (state: GlobalState, rootId: string) => state.entities.posts.postsInThread[rootId],\n (state: GlobalState, rootId: string) => state.entities.posts.posts[rootId],\n shouldShowJoinLeaveMessages,\n (posts, currentUser, postsForThread, rootPost, showJoinLeave) => {\n const thread: Post[] = [];\n\n if (rootPost) {\n thread.push(rootPost);\n }\n\n if (postsForThread && Array.isArray(postsForThread) && postsForThread.length > 0) {\n for (const postId of postsForThread) {\n const post = posts[postId];\n if (!post) {\n continue;\n }\n\n const skip = shouldFilterJoinLeavePost(post, showJoinLeave, currentUser ? currentUser.username : '');\n if (!skip) {\n thread.push(post);\n }\n }\n }\n\n thread.sort(comparePosts);\n return thread;\n },\n );\n}\n\n// The selector below filters current user if it exists. Excluding currentUser is just for convenience\nexport function makeGetProfilesForThread(): (state: GlobalState, rootId: string) => UserProfile[] {\n const getPostsForThread = makeGetPostsForThread();\n return createSelector(\n 'makeGetProfilesForThread',\n getUsers,\n getCurrentUserId,\n getPostsForThread,\n getUserStatuses,\n (allUsers, currentUserId, posts, userStatuses) => {\n const profileIds = posts.map((post) => post.user_id).filter(Boolean);\n const uniqueIds = [...new Set(profileIds)];\n return uniqueIds.reduce((acc: UserProfile[], id: string) => {\n const profile: UserProfile = userStatuses ? {...allUsers[id], status: userStatuses[id]} : {...allUsers[id]};\n\n if (profile && Object.keys(profile).length > 0 && currentUserId !== id) {\n return [\n ...acc,\n profile,\n ];\n }\n return acc;\n }, []);\n },\n );\n}\n\nexport function makeGetCommentCountForPost(): (state: GlobalState, post: Post) => number {\n return createSelector(\n 'makeGetCommentCountForPost',\n getAllPosts,\n (state: GlobalState, post: Post) => state.entities.posts.postsInThread[post ? post.root_id || post.id : ''] || null,\n (state, post: Post) => post,\n (posts, postsForThread, post) => {\n if (!post) {\n return 0;\n }\n\n if (!postsForThread) {\n return post.reply_count;\n }\n\n let count = 0;\n postsForThread.forEach((id) => {\n const post = posts[id];\n if (post && post.state !== Posts.POST_DELETED && !isPostEphemeral(post)) {\n count += 1;\n }\n });\n return count;\n },\n );\n}\n\nexport const getSearchResults: (state: GlobalState) => Post[] = createSelector(\n 'getSearchResults',\n getAllPosts,\n (state: GlobalState) => state.entities.search.results,\n (posts, postIds) => {\n if (!postIds) {\n return [];\n }\n\n return postIds.map((id) => posts[id]);\n },\n);\n\n// Returns the matched text from the search results, if the server has provided them.\n// These matches will only be present if the server is running Mattermost 5.1 or higher\n// with Elasticsearch enabled to search posts. Otherwise, null will be returned.\nexport function getSearchMatches(state: GlobalState): {\n [x: string]: string[];\n} {\n return state.entities.search.matches;\n}\n\nexport function makeGetMessageInHistoryItem(type: 'post'|'comment'): (state: GlobalState) => string {\n return createSelector(\n 'makeGetMessageInHistoryItem',\n (state: GlobalState) => state.entities.posts.messagesHistory,\n (messagesHistory: MessageHistory) => {\n const idx = messagesHistory.index[type];\n const messages = messagesHistory.messages;\n if (idx >= 0 && messages && messages.length > idx) {\n return messages[idx];\n }\n return '';\n },\n );\n}\n\nexport function makeGetPostsForIds(): (state: GlobalState, postIds: Array<Post['id']>) => Post[] {\n return createIdsSelector(\n 'makeGetPostsForIds',\n getAllPosts,\n (state: GlobalState, postIds: Array<Post['id']>) => postIds,\n (allPosts, postIds) => {\n if (!postIds) {\n return [];\n }\n\n return postIds.map((id) => allPosts[id]);\n },\n );\n}\n\nexport const getMostRecentPostIdInChannel: (state: GlobalState, channelId: Channel['id']) => Post['id'] | undefined | null = createSelector(\n 'getMostRecentPostIdInChannel',\n getAllPosts,\n (state: GlobalState, channelId: string) => getPostIdsInChannel(state, channelId),\n shouldShowJoinLeaveMessages,\n (posts, postIdsInChannel, allowSystemMessages) => {\n if (!postIdsInChannel) {\n return '';\n }\n\n if (!allowSystemMessages) {\n // return the most recent non-system message in the channel\n let postId;\n for (let i = 0; i < postIdsInChannel.length; i++) {\n const p = posts[postIdsInChannel[i]];\n if (!p.type || !p.type.startsWith(Posts.SYSTEM_MESSAGE_PREFIX)) {\n postId = p.id;\n break;\n }\n }\n return postId;\n }\n\n // return the most recent message in the channel\n return postIdsInChannel[0];\n },\n);\n\nexport function getRecentPostsChunkInChannel(state: GlobalState, channelId: Channel['id']): PostOrderBlock | null | undefined {\n const postsForChannel = state.entities.posts.postsInChannel[channelId];\n\n if (!postsForChannel) {\n return null;\n }\n\n return postsForChannel.find((block) => block.recent);\n}\n\nexport function getOldestPostsChunkInChannel(state: GlobalState, channelId: Channel['id']): PostOrderBlock | null | undefined {\n const postsForChannel = state.entities.posts.postsInChannel[channelId];\n\n if (!postsForChannel) {\n return null;\n }\n\n return postsForChannel.find((block) => block.oldest);\n}\n\n// returns timestamp of the channel's oldest post. 0 otherwise\nexport function getOldestPostTimeInChannel(state: GlobalState, channelId: Channel['id']): number {\n const postsForChannel = state.entities.posts.postsInChannel[channelId];\n\n if (!postsForChannel) {\n return 0;\n }\n\n const allPosts = getAllPosts(state);\n const oldestPostTime = postsForChannel.reduce((acc: number, postBlock) => {\n if (postBlock.order.length > 0) {\n const oldestPostIdInBlock = postBlock.order[postBlock.order.length - 1];\n const blockOldestPostTime = allPosts[oldestPostIdInBlock]?.create_at;\n if (typeof blockOldestPostTime === 'number' && blockOldestPostTime < acc) {\n return blockOldestPostTime;\n }\n }\n return acc;\n }, Number.MAX_SAFE_INTEGER);\n if (oldestPostTime === Number.MAX_SAFE_INTEGER) {\n return 0;\n }\n return oldestPostTime;\n}\n\n// getPostIdsInChannel returns the IDs of posts loaded at the bottom of the given channel. It does not include older\n// posts such as those loaded by viewing a thread or a permalink.\nexport function getPostIdsInChannel(state: GlobalState, channelId: Channel['id']): Array<Post['id']> | undefined | null {\n const recentBlock = getRecentPostsChunkInChannel(state, channelId);\n\n if (!recentBlock) {\n return null;\n }\n\n return recentBlock.order;\n}\n\nexport function getPostsChunkInChannelAroundTime(state: GlobalState, channelId: Channel['id'], timeStamp: number): PostOrderBlock | undefined | null {\n const postsEntity = state.entities.posts;\n const postsForChannel = postsEntity.postsInChannel[channelId];\n const posts = postsEntity.posts;\n if (!postsForChannel) {\n return null;\n }\n\n const blockAroundTimestamp = postsForChannel.find((block) => {\n const {order} = block;\n const recentPostInBlock = posts[order[0]];\n const oldestPostInBlock = posts[order[order.length - 1]];\n if (recentPostInBlock && oldestPostInBlock) {\n return (recentPostInBlock.create_at >= timeStamp && oldestPostInBlock.create_at <= timeStamp);\n }\n return false;\n });\n\n return blockAroundTimestamp;\n}\n\nexport function getUnreadPostsChunk(state: GlobalState, channelId: Channel['id'], timeStamp: number): PostOrderBlock | undefined | null {\n const postsEntity = state.entities.posts;\n const posts = postsEntity.posts;\n const recentChunk = getRecentPostsChunkInChannel(state, channelId);\n\n /* 1. lastViewedAt can be greater than the most recent chunk in case of edited posts etc.\n * return if recent block exists and oldest post is created after the last lastViewedAt timestamp\n i.e all posts are read and the lastViewedAt is greater than the last post\n\n 2. lastViewedAt can be less than the first post in a channel if all the last viewed posts are deleted\n * return if oldest block exist and oldest post created_at is greater than the last viewed post\n i.e all posts are unread so the lastViewedAt is lessthan the first post\n\n The above two exceptions are added because we cannot select the chunk based on timestamp alone as these cases are out of bounds\n\n 3. Normal cases where there are few unreads and few reads in a chunk as that is how unread API returns data\n * return getPostsChunkInChannelAroundTime\n */\n\n if (recentChunk) {\n // This would happen if there are no posts in channel.\n // If the system messages are deleted by sys admin.\n // Experimental changes like hiding Join/Leave still will have recent chunk so it follows the default path based on timestamp\n if (!recentChunk.order.length) {\n return recentChunk;\n }\n\n const {order} = recentChunk;\n const oldestPostInBlock = posts[order[order.length - 1]];\n\n // check for only oldest posts because this can be higher than the latest post if the last post is edited\n if (oldestPostInBlock.create_at <= timeStamp) {\n return recentChunk;\n }\n }\n\n const oldestPostsChunk = getOldestPostsChunkInChannel(state, channelId);\n\n if (oldestPostsChunk && oldestPostsChunk.order.length) {\n const {order} = oldestPostsChunk;\n const oldestPostInBlock = posts[order[order.length - 1]];\n\n if (oldestPostInBlock.create_at >= timeStamp) {\n return oldestPostsChunk;\n }\n }\n\n return getPostsChunkInChannelAroundTime(state, channelId, timeStamp);\n}\n\nexport const isPostsChunkIncludingUnreadsPosts = (state: GlobalState, chunk: PostOrderBlock, timeStamp: number): boolean => {\n const postsEntity = state.entities.posts;\n const posts = postsEntity.posts;\n\n if (!chunk || !chunk.order.length) {\n return false;\n }\n\n const {order} = chunk;\n const oldestPostInBlock = posts[order[order.length - 1]];\n\n return oldestPostInBlock.create_at <= timeStamp;\n};\n\nexport const isPostIdSending = (state: GlobalState, postId: Post['id']): boolean => {\n return state.entities.posts.pendingPostIds.some((sendingPostId) => sendingPostId === postId);\n};\n\nexport const makeIsPostCommentMention = (): ((state: GlobalState, postId: Post['id']) => boolean) => {\n return createSelector(\n 'makeIsPostCommentMention',\n getAllPosts,\n getPostsInThread,\n getCurrentUser,\n getPost,\n (allPosts, postsInThread, currentUser, post) => {\n if (!post) {\n return false;\n }\n\n let threadRepliedToByCurrentUser = false;\n let isCommentMention = false;\n if (currentUser) {\n const rootId = post.root_id || post.id;\n const threadIds = postsInThread[rootId] || [];\n\n for (const pid of threadIds) {\n const p = allPosts[pid];\n if (!p) {\n continue;\n }\n\n if (p.user_id === currentUser.id) {\n threadRepliedToByCurrentUser = true;\n }\n }\n\n const rootPost = allPosts[rootId];\n\n isCommentMention = isPostCommentMention({post, currentUser, threadRepliedToByCurrentUser, rootPost});\n }\n\n return isCommentMention;\n },\n );\n};\n\nexport function getLimitedViews(state: GlobalState): GlobalState['entities']['posts']['limitedViews'] {\n return state.entities.posts.limitedViews;\n}\n\nexport function isPostPriorityEnabled(state: GlobalState) {\n return getConfig(state).PostPriority === 'true';\n}\n\nexport function isPostAcknowledgementsEnabled(state: GlobalState) {\n return (\n isPostPriorityEnabled(state) &&\n getConfig(state).PostAcknowledgements === 'true'\n );\n}\n\nexport function getAllowPersistentNotifications(state: GlobalState) {\n return (\n isPostPriorityEnabled(state) &&\n getConfig(state).AllowPersistentNotifications === 'true'\n );\n}\n\nexport function getPersistentNotificationMaxRecipients(state: GlobalState) {\n return getConfig(state).PersistentNotificationMaxRecipients;\n}\n\nexport function getPersistentNotificationIntervalMinutes(state: GlobalState) {\n return getConfig(state).PersistentNotificationIntervalMinutes;\n}\n\nexport function getAllowPersistentNotificationsForGuests(state: GlobalState) {\n return (\n isPostPriorityEnabled(state) &&\n getConfig(state).AllowPersistentNotificationsForGuests === 'true'\n );\n}\n\nexport function getPostAcknowledgements(state: GlobalState, postId: Post['id']): Record<UserProfile['id'], PostAcknowledgement['acknowledged_at']> {\n return state.entities.posts.acknowledgements[postId];\n}\n\nexport const isPersistentNotificationsEnabled = createSelector(\n 'getPersistentNotificationsEnabled',\n getCurrentUser,\n getAllowPersistentNotifications,\n getAllowPersistentNotificationsForGuests,\n (user, forAll, forGuests) => (isGuest(user.roles) ? (forAll && forGuests) : forAll),\n);\n\nexport function makeGetPostAcknowledgementsWithProfiles(): (state: GlobalState, postId: Post['id']) => Array<{user: UserProfile; acknowledgedAt: PostAcknowledgement['acknowledged_at']}> {\n return createSelector(\n 'makeGetPostAcknowledgementsWithProfiles',\n getUsers,\n getPostAcknowledgements,\n (users, acknowledgements) => {\n if (!acknowledgements) {\n return [];\n }\n return Object.keys(acknowledgements).flatMap((userId) => {\n if (!users[userId]) {\n return [];\n }\n return {\n user: users[userId],\n acknowledgedAt: acknowledgements[userId],\n };\n }).sort((a, b) => b.acknowledgedAt - a.acknowledgedAt);\n },\n );\n}\n\nexport function getTeamIdFromPost(state: GlobalState, post: Post): Team['id'] | undefined {\n const channel = getChannel(state, post.channel_id);\n\n if (!channel) {\n return undefined;\n }\n\n if (channel.type === General.DM_CHANNEL || channel.type === General.GM_CHANNEL) {\n return getCurrentTeamId(state);\n }\n\n return channel.team_id;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {CollapsedThreads} from '@mattermost/types/config';\nimport type {PreferencesType, PreferenceType} from '@mattermost/types/preferences';\nimport type {GlobalState} from '@mattermost/types/store';\n\nimport {General, Preferences} from 'mattermost-redux/constants';\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {getConfig, getFeatureFlagValue, getLicense} from 'mattermost-redux/selectors/entities/general';\nimport {createIdsSelector, createShallowSelector} from 'mattermost-redux/utils/helpers';\nimport {getPreferenceKey} from 'mattermost-redux/utils/preference_utils';\nimport {setThemeDefaults} from 'mattermost-redux/utils/theme_utils';\n\nexport function getMyPreferences(state: GlobalState): { [x: string]: PreferenceType } {\n return state.entities.preferences.myPreferences;\n}\n\nexport function getUserPreferences(state: GlobalState, userID: string): PreferencesType {\n return state.entities.preferences.userPreferences[userID];\n}\n\nfunction getPreferenceObject(state: GlobalState, category: string, name: string): PreferenceType | undefined {\n return getMyPreferences(state)[getPreferenceKey(category, name)];\n}\n\nexport function get(state: GlobalState, category: string, name: string, defaultValue = '', preferences?: PreferencesType): string {\n if (preferences) {\n return getFromPreferences(preferences, category, name, defaultValue);\n }\n\n const pref = getPreferenceObject(state, category, name);\n\n return pref ? pref.value : defaultValue;\n}\n\nexport function getFromPreferences(preferences: PreferencesType, category: string, name: string, defaultValue: any = '') {\n const key = getPreferenceKey(category, name);\n\n if (!(key in preferences)) {\n return defaultValue;\n }\n\n return preferences[key].value;\n}\n\nexport function getBool(state: GlobalState, category: string, name: string, defaultValue = false, userPreferences?: PreferencesType): boolean {\n const value = get(state, category, name, String(defaultValue), userPreferences);\n return value !== 'false';\n}\n\nexport function getInt(state: GlobalState, category: string, name: string, defaultValue = 0, userPreferences?: PreferencesType): number {\n const value = get(state, category, name, String(defaultValue), userPreferences);\n return parseInt(value, 10);\n}\n\nexport function makeGetCategory(selectorName: string, category: string): (state: GlobalState) => PreferenceType[] {\n return createIdsSelector(\n selectorName,\n getMyPreferences,\n (preferences) => {\n const prefix = category + '--';\n const prefsInCategory: PreferenceType[] = [];\n\n for (const key in preferences) {\n if (key.startsWith(prefix)) {\n prefsInCategory.push(preferences[key]);\n }\n }\n\n return prefsInCategory;\n },\n );\n}\n\nexport function makeGetUserCategory(selectorName: string, category: string): (state: GlobalState, userID: string) => PreferenceType[] {\n return createIdsSelector(\n selectorName,\n (state: GlobalState, userID: string) => getUserPreferences(state, userID),\n (preferences) => {\n const prefix = category + '--';\n const prefsInCategory: PreferenceType[] = [];\n\n for (const key in preferences) {\n if (key.startsWith(prefix)) {\n prefsInCategory.push(preferences[key]);\n }\n }\n\n return prefsInCategory;\n },\n );\n}\n\nexport const getDirectShowPreferences = makeGetCategory('getDirectShowPreferences', Preferences.CATEGORY_DIRECT_CHANNEL_SHOW);\nexport const getGroupShowPreferences = makeGetCategory('getGroupShowPreferences', Preferences.CATEGORY_GROUP_CHANNEL_SHOW);\n\nexport const getTeammateNameDisplaySetting: (state: GlobalState) => string = createSelector(\n 'getTeammateNameDisplaySetting',\n getConfig,\n (state) => getPreferenceObject(state, Preferences.CATEGORY_DISPLAY_SETTINGS, Preferences.NAME_NAME_FORMAT),\n getLicense,\n (config, teammateNameDisplayPreference, license) => {\n const useAdminTeammateNameDisplaySetting = (license && license.LockTeammateNameDisplay === 'true') && config.LockTeammateNameDisplay === 'true';\n if (teammateNameDisplayPreference && !useAdminTeammateNameDisplaySetting) {\n return teammateNameDisplayPreference.value || '';\n } else if (config.TeammateNameDisplay) {\n return config.TeammateNameDisplay;\n }\n return General.TEAMMATE_NAME_DISPLAY.SHOW_USERNAME;\n },\n);\n\nexport const getThemePreferences = makeGetCategory('getThemePreferences', Preferences.CATEGORY_THEME);\n\nconst getThemePreference = createSelector(\n 'getThemePreference',\n getMyPreferences,\n (state) => state.entities.teams.currentTeamId,\n (myPreferences, currentTeamId) => {\n // Prefer the user's current team-specific theme over the user's current global theme\n let themePreference;\n\n if (currentTeamId) {\n themePreference = myPreferences[getPreferenceKey(Preferences.CATEGORY_THEME, currentTeamId)];\n }\n\n if (!themePreference) {\n themePreference = myPreferences[getPreferenceKey(Preferences.CATEGORY_THEME, '')];\n }\n\n return themePreference;\n },\n);\n\nexport type ThemeKey = 'denim' | 'sapphire' | 'quartz' | 'indigo' | 'onyx';\n\nexport type LegacyThemeType = 'Mattermost' | 'Organization' | 'Mattermost Dark' | 'Windows Dark';\n\nexport type ThemeType = 'Denim' | 'Sapphire' | 'Quartz' | 'Indigo' | 'Onyx';\n\nexport type Theme = {\n [key: string]: string | undefined;\n type?: ThemeType | 'custom';\n sidebarBg: string;\n sidebarText: string;\n sidebarUnreadText: string;\n sidebarTextHoverBg: string;\n sidebarTextActiveBorder: string;\n sidebarTextActiveColor: string;\n sidebarHeaderBg: string;\n sidebarTeamBarBg: string;\n sidebarHeaderTextColor: string;\n onlineIndicator: string;\n awayIndicator: string;\n dndIndicator: string;\n mentionBg: string;\n mentionBj: string;\n mentionColor: string;\n centerChannelBg: string;\n centerChannelColor: string;\n newMessageSeparator: string;\n linkColor: string;\n buttonBg: string;\n buttonColor: string;\n errorTextColor: string;\n mentionHighlightBg: string;\n mentionHighlightLink: string;\n codeTheme: string;\n};\n\nconst getDefaultTheme = createSelector('getDefaultTheme', getConfig, (config): Theme => {\n if (config.DefaultTheme && config.DefaultTheme in Preferences.THEMES) {\n const theme: Theme = Preferences.THEMES[config.DefaultTheme as ThemeKey];\n if (theme) {\n return theme;\n }\n }\n\n // If no config.DefaultTheme or value doesn't refer to a valid theme name...\n return Preferences.THEMES.denim;\n});\n\nexport const getTheme: (state: GlobalState) => Theme = createShallowSelector(\n 'getTheme',\n getThemePreference,\n getDefaultTheme,\n (themePreference, defaultTheme): Theme => {\n const themeValue: Theme | string = themePreference?.value ?? defaultTheme;\n\n // A custom theme will be a JSON-serialized object stored in a preference\n // At this point, the theme should be a plain object\n const theme: Theme = typeof themeValue === 'string' ? JSON.parse(themeValue) : themeValue;\n\n return setThemeDefaults(theme);\n },\n);\n\nexport function makeGetStyleFromTheme<Style>(): (state: GlobalState, getStyleFromTheme: (theme: Theme) => Style) => Style {\n return createSelector(\n 'makeGetStyleFromTheme',\n getTheme,\n (state: GlobalState, getStyleFromTheme: (theme: Theme) => Style) => getStyleFromTheme,\n (theme, getStyleFromTheme) => {\n return getStyleFromTheme(theme);\n },\n );\n}\n\nexport function shouldShowJoinLeaveMessages(state: GlobalState) {\n const config = getConfig(state);\n const enableJoinLeaveMessage = config.EnableJoinLeaveMessageByDefault === 'true';\n\n // This setting is true or not set if join/leave messages are to be displayed\n return getBool(state, Preferences.CATEGORY_ADVANCED_SETTINGS, Preferences.ADVANCED_FILTER_JOIN_LEAVE, enableJoinLeaveMessage);\n}\n\n// shouldShowUnreadsCategory returns true if the user has unereads grouped separately with the new sidebar enabled.\nexport const shouldShowUnreadsCategory: (state: GlobalState, userPreferences?: PreferencesType) => boolean = createSelector(\n 'shouldShowUnreadsCategory',\n (state: GlobalState, userPreferences?: PreferencesType) => get(state, Preferences.CATEGORY_SIDEBAR_SETTINGS, Preferences.SHOW_UNREAD_SECTION, '', userPreferences),\n (state: GlobalState, userPreferences?: PreferencesType) => get(state, Preferences.CATEGORY_SIDEBAR_SETTINGS, '', '', userPreferences),\n (state: GlobalState) => getConfig(state).ExperimentalGroupUnreadChannels,\n (userPreference: string, oldUserPreference: string, serverDefault?: string): boolean => {\n // Prefer the show_unread_section user preference over the previous version\n if (userPreference) {\n return userPreference === 'true';\n }\n\n if (oldUserPreference) {\n return JSON.parse(oldUserPreference).unreads_at_top === 'true';\n }\n\n // The user setting is not set, so use the system default\n return serverDefault === General.DEFAULT_ON;\n },\n);\n\nexport function getUnreadScrollPositionPreference(state: GlobalState, userPreferences?: PreferencesType): string {\n return get(state, Preferences.CATEGORY_ADVANCED_SETTINGS, Preferences.UNREAD_SCROLL_POSITION, Preferences.UNREAD_SCROLL_POSITION_START_FROM_LEFT, userPreferences);\n}\n\nexport function getCollapsedThreadsPreference(state: GlobalState): string {\n const configValue = getConfig(state)?.CollapsedThreads;\n let preferenceDefault = Preferences.COLLAPSED_REPLY_THREADS_OFF;\n\n if (configValue === CollapsedThreads.DEFAULT_ON || configValue === CollapsedThreads.ALWAYS_ON) {\n preferenceDefault = Preferences.COLLAPSED_REPLY_THREADS_ON;\n }\n\n return get(\n state,\n Preferences.CATEGORY_DISPLAY_SETTINGS,\n Preferences.COLLAPSED_REPLY_THREADS,\n preferenceDefault,\n );\n}\n\nexport function getCollapsedThreadsPreferenceFromPreferences(state: GlobalState, userPreferences: PreferencesType): string {\n const configValue = getConfig(state)?.CollapsedThreads;\n let preferenceDefault = Preferences.COLLAPSED_REPLY_THREADS_OFF;\n\n if (configValue === CollapsedThreads.DEFAULT_ON || configValue === CollapsedThreads.ALWAYS_ON) {\n preferenceDefault = Preferences.COLLAPSED_REPLY_THREADS_ON;\n }\n\n return getFromPreferences(\n userPreferences,\n Preferences.CATEGORY_DISPLAY_SETTINGS,\n Preferences.COLLAPSED_REPLY_THREADS,\n preferenceDefault,\n );\n}\n\nexport function isCollapsedThreadsAllowed(state: GlobalState): boolean {\n return Boolean(getConfig(state)) && getConfig(state).CollapsedThreads !== undefined && getConfig(state).CollapsedThreads !== CollapsedThreads.DISABLED;\n}\n\nexport function isCollapsedThreadsEnabled(state: GlobalState): boolean {\n const isAllowed = isCollapsedThreadsAllowed(state);\n const userPreference = getCollapsedThreadsPreference(state);\n\n return isAllowed && (userPreference === Preferences.COLLAPSED_REPLY_THREADS_ON || getConfig(state).CollapsedThreads === CollapsedThreads.ALWAYS_ON);\n}\n\nexport function isCollapsedThreadsEnabledForUser(state: GlobalState, userPreferences: PreferencesType): boolean {\n const isAllowed = isCollapsedThreadsAllowed(state);\n const userPreference = getCollapsedThreadsPreferenceFromPreferences(state, userPreferences);\n\n return isAllowed && (userPreference === Preferences.COLLAPSED_REPLY_THREADS_ON || getConfig(state).CollapsedThreads === CollapsedThreads.ALWAYS_ON);\n}\n\nexport function isGroupChannelManuallyVisible(state: GlobalState, channelId: string): boolean {\n return getBool(state, Preferences.CATEGORY_GROUP_CHANNEL_SHOW, channelId, false);\n}\n\nexport function isCustomGroupsEnabled(state: GlobalState): boolean {\n return getConfig(state).EnableCustomGroups === 'true';\n}\n\nexport function getIsOnboardingFlowEnabled(state: GlobalState): boolean {\n return getConfig(state).EnableOnboardingFlow === 'true';\n}\n\nexport function getHasDismissedSystemConsoleLimitReached(state: GlobalState): boolean {\n return getBool(state, Preferences.CATEGORY_UPGRADE_CLOUD, Preferences.SYSTEM_CONSOLE_LIMIT_REACHED, false);\n}\n\nexport function syncedDraftsAreAllowed(state: GlobalState): boolean {\n return getConfig(state).AllowSyncedDrafts === 'true';\n}\n\nexport function syncedDraftsAreAllowedAndEnabled(state: GlobalState): boolean {\n const isConfiguredForFeature = getConfig(state).AllowSyncedDrafts === 'true';\n const isConfiguredForUser = getBool(state, Preferences.CATEGORY_ADVANCED_SETTINGS, Preferences.ADVANCED_SYNC_DRAFTS, true);\n\n return isConfiguredForFeature && isConfiguredForUser;\n}\n\nexport function getVisibleDmGmLimit(state: GlobalState, userPreferences?: PreferencesType) {\n const defaultLimit = 40;\n return getInt(state, Preferences.CATEGORY_SIDEBAR_SETTINGS, Preferences.LIMIT_VISIBLE_DMS_GMS, defaultLimit, userPreferences);\n}\n\nexport function onboardingTourTipsEnabled(state: GlobalState): boolean {\n return getFeatureFlagValue(state, 'OnboardingTourTips') === 'true';\n}\n\nexport function moveThreadsEnabled(state: GlobalState): boolean {\n return getFeatureFlagValue(state, 'MoveThreadsEnabled') === 'true' && getLicense(state).IsLicensed === 'true';\n}\n\nexport function streamlinedMarketplaceEnabled(state: GlobalState): boolean {\n return getFeatureFlagValue(state, 'StreamlinedMarketplace') === 'true';\n}\n\nexport const getOverageBannerPreferences = makeGetCategory('getOverageBannerPreferences', Preferences.CATEGORY_OVERAGE_USERS_BANNER);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {GroupMembership, GroupPermissions} from '@mattermost/types/groups';\nimport type {Role} from '@mattermost/types/roles';\nimport type {GlobalState} from '@mattermost/types/store';\n\nimport {General, Permissions} from 'mattermost-redux/constants';\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {getCurrentChannelId} from 'mattermost-redux/selectors/entities/common';\nimport {\n getMySystemPermissions,\n getMySystemRoles,\n getPermissionsForRoles,\n getRoles,\n haveISystemPermission,\n} from 'mattermost-redux/selectors/entities/roles_helpers';\nimport {getTeamMemberships, getCurrentTeamId} from 'mattermost-redux/selectors/entities/teams';\nimport {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';\n\nexport {getMySystemPermissions, getMySystemRoles, getRoles, haveISystemPermission};\n\nexport const getGroupMemberships: (state: GlobalState) => Record<string, GroupMembership> = createSelector(\n 'getGroupMemberships',\n (state) => state.entities.groups.myGroups,\n getCurrentUserId,\n (myGroupIDs: string[], currentUserID: string) => {\n const groupMemberships: Record<string, GroupMembership> = {};\n myGroupIDs.forEach((groupID) => {\n groupMemberships[groupID] = {user_id: currentUserID, roles: General.CUSTOM_GROUP_USER_ROLE};\n });\n return groupMemberships;\n },\n);\n\nexport const getMyGroupRoles: (state: GlobalState) => Record<string, Set<string>> = createSelector(\n 'getMyGroupRoles',\n getGroupMemberships,\n (groupMemberships) => {\n const roles: Record<string, Set<string>> = {};\n if (groupMemberships) {\n for (const key in groupMemberships) {\n if (Object.hasOwn(groupMemberships, key) && groupMemberships[key].roles) {\n roles[key] = new Set<string>(groupMemberships[key].roles.split(' '));\n }\n }\n }\n return roles;\n },\n);\n\n/**\n * Returns a map of permissions, keyed by group id, for all groups that are mentionable and not deleted.\n */\nexport const getGroupListPermissions: (state: GlobalState) => Record<string, GroupPermissions> = createSelector(\n 'getGroupListPermissions',\n getMyGroupRoles,\n getRoles,\n getMySystemPermissions,\n (state) => state.entities.groups.groups,\n (myGroupRoles, roles, systemPermissions, allGroups) => {\n const groups = Object.entries(allGroups).filter((entry) => (entry[1].allow_reference)).map((entry) => entry[1]);\n\n const permissions = new Set<string>();\n groups.forEach((group) => {\n const roleNames = myGroupRoles[group.id!];\n if (roleNames) {\n for (const roleName of roleNames) {\n if (roles[roleName]) {\n for (const permission of roles[roleName].permissions) {\n permissions.add(permission);\n }\n }\n }\n }\n });\n\n for (const permission of systemPermissions) {\n permissions.add(permission);\n }\n\n const groupPermissionsMap: Record<string, GroupPermissions> = {};\n groups.forEach((g) => {\n groupPermissionsMap[g.id] = {\n can_delete: permissions.has(Permissions.DELETE_CUSTOM_GROUP) && g.source.toLowerCase() !== 'ldap' && g.delete_at === 0,\n can_manage_members: permissions.has(Permissions.MANAGE_CUSTOM_GROUP_MEMBERS) && g.source.toLowerCase() !== 'ldap' && g.delete_at === 0,\n can_restore: permissions.has(Permissions.RESTORE_CUSTOM_GROUP) && g.source.toLowerCase() !== 'ldap' && g.delete_at !== 0,\n };\n });\n return groupPermissionsMap;\n },\n);\n\nexport const getMyTeamRoles: (state: GlobalState) => Record<string, Set<string>> = createSelector(\n 'getMyTeamRoles',\n getTeamMemberships,\n (teamsMemberships) => {\n const roles: Record<string, Set<string>> = {};\n if (teamsMemberships) {\n for (const key in teamsMemberships) {\n if (Object.hasOwn(teamsMemberships, key) && teamsMemberships[key].roles) {\n roles[key] = new Set<string>(teamsMemberships[key].roles.split(' '));\n }\n }\n }\n return roles;\n },\n);\n\nexport function getMyChannelRoles(state: GlobalState): Record<string, Set<string>> {\n return state.entities.channels.roles;\n}\n\nexport const getRolesById: (state: GlobalState) => Record<string, Role> = createSelector(\n 'getRolesById',\n getRoles,\n (rolesByName) => {\n const rolesById: Record<string, Role> = {};\n for (const role of Object.values(rolesByName)) {\n rolesById[role.id] = role;\n }\n return rolesById;\n },\n);\n\nconst getMyPermissionsByTeam = createSelector(\n 'getMyPermissionsByTeam',\n getMyTeamRoles,\n getRoles,\n (myTeamRoles, allRoles) => {\n const permissionsByTeam: Record<string, Set<string>> = {};\n\n for (const [teamId, roles] of Object.entries(myTeamRoles)) {\n permissionsByTeam[teamId] = getPermissionsForRoles(allRoles, roles);\n }\n\n return permissionsByTeam;\n },\n);\n\nconst getMyPermissionsByGroup = createSelector(\n 'getMyPermissionsByGroup',\n getMyGroupRoles,\n getRoles,\n (myGroupRoles, allRoles) => {\n const permissionsByGroup: Record<string, Set<string>> = {};\n\n for (const [groupId, roles] of Object.entries(myGroupRoles)) {\n permissionsByGroup[groupId] = getPermissionsForRoles(allRoles, roles);\n }\n\n return permissionsByGroup;\n },\n);\n\nconst getMyPermissionsByChannel = createSelector(\n 'getMyPermissionsByChannel',\n getMyChannelRoles,\n getRoles,\n (myChannelRoles, allRoles) => {\n const permissionsByChannel: Record<string, Set<string>> = {};\n\n for (const [channelId, roles] of Object.entries(myChannelRoles)) {\n permissionsByChannel[channelId] = getPermissionsForRoles(allRoles, roles);\n }\n\n return permissionsByChannel;\n },\n);\n\nexport function haveITeamPermission(state: GlobalState, teamId: string | undefined, permission: string) {\n if (getMySystemPermissions(state).has(permission)) {\n return true;\n }\n if (!teamId) {\n return false;\n }\n\n return getMyPermissionsByTeam(state)[teamId]?.has(permission);\n}\n\nexport const haveIGroupPermission: (state: GlobalState, groupID: string, permission: string) => boolean = createSelector(\n 'haveIGroupPermission',\n getMySystemPermissions,\n getMyPermissionsByGroup,\n (state: GlobalState, groupID: string) => state.entities.groups.groups[groupID],\n (state: GlobalState, groupID: string, permission: string) => permission,\n (systemPermissions, permissionGroups, group, permission) => {\n if (permission === Permissions.RESTORE_CUSTOM_GROUP) {\n if ((group.source !== 'ldap' && group.delete_at !== 0) && (systemPermissions.has(permission) || (permissionGroups[group.id] && permissionGroups[group.id].has(permission)))) {\n return true;\n }\n return false;\n }\n\n if (group.source === 'ldap' || group.delete_at !== 0) {\n return false;\n }\n\n if (systemPermissions.has(permission)) {\n return true;\n }\n\n if (permissionGroups[group.id] && permissionGroups[group.id].has(permission)) {\n return true;\n }\n return false;\n },\n);\n\nexport function haveIChannelPermission(state: GlobalState, teamId: string | undefined, channelId: string | undefined, permission: string): boolean {\n if (getMySystemPermissions(state).has(permission)) {\n return true;\n }\n\n if (teamId && getMyPermissionsByTeam(state)[teamId]?.has(permission)) {\n return true;\n }\n\n if (channelId && getMyPermissionsByChannel(state)[channelId]?.has(permission)) {\n return true;\n }\n\n return false;\n}\n\nexport function haveICurrentTeamPermission(state: GlobalState, permission: string): boolean {\n return haveITeamPermission(state, getCurrentTeamId(state), permission);\n}\n\nexport function haveICurrentChannelPermission(state: GlobalState, permission: string): boolean {\n return haveIChannelPermission(state, getCurrentTeamId(state), getCurrentChannelId(state), permission);\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {Role} from '@mattermost/types/roles';\nimport type {GlobalState} from '@mattermost/types/store';\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {getCurrentUser} from 'mattermost-redux/selectors/entities/common';\n\nexport type PermissionsOptions = {\n channel?: string;\n team?: string;\n permission: string;\n};\n\nexport function getRoles(state: GlobalState) {\n return state.entities.roles.roles;\n}\n\nexport const getMySystemRoles: (state: GlobalState) => Set<string> = createSelector(\n 'getMySystemRoles',\n getCurrentUser,\n (user: UserProfile) => {\n if (user) {\n return new Set<string>(user.roles.split(' '));\n }\n\n return new Set<string>();\n },\n);\n\nexport const getMySystemPermissions: (state: GlobalState) => Set<string> = createSelector(\n 'getMySystemPermissions',\n getMySystemRoles,\n getRoles,\n (mySystemRoles: Set<string>, allRoles) => {\n return getPermissionsForRoles(allRoles, mySystemRoles);\n },\n);\n\nexport function haveISystemPermission(state: GlobalState, options: PermissionsOptions) {\n return getMySystemPermissions(state).has(options.permission);\n}\n\nexport function getPermissionsForRoles(allRoles: Record<string, Role>, roleSet: Set<string>) {\n const permissions = new Set<string>();\n\n for (const roleName of roleSet) {\n const role = allRoles[roleName];\n\n if (!role) {\n continue;\n }\n\n for (const permission of role.permissions) {\n permissions.add(permission);\n }\n }\n\n return permissions;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {GlobalState} from '@mattermost/types/store';\nimport type {Team, TeamMembership, TeamStats} from '@mattermost/types/teams';\nimport type {UserProfile} from '@mattermost/types/users';\nimport type {RelationOneToOne} from '@mattermost/types/utilities';\n\nimport {Permissions} from 'mattermost-redux/constants';\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {getDataRetentionCustomPolicy} from 'mattermost-redux/selectors/entities/admin';\nimport {getConfig, isCompatibleWithJoinViewTeamPermissions} from 'mattermost-redux/selectors/entities/general';\nimport {haveISystemPermission} from 'mattermost-redux/selectors/entities/roles_helpers';\nimport {createIdsSelector} from 'mattermost-redux/utils/helpers';\nimport {sortTeamsWithLocale, filterTeamsStartingWithTerm} from 'mattermost-redux/utils/team_utils';\nimport {isTeamAdmin} from 'mattermost-redux/utils/user_utils';\n\nimport {isCollapsedThreadsEnabled} from './preferences';\n\nexport function getCurrentTeamId(state: GlobalState) {\n return state.entities.teams.currentTeamId;\n}\n\nexport function getTeamByName(state: GlobalState, name: string) {\n const teams = getTeams(state);\n\n return Object.values(teams).find((team) => team.name === name);\n}\n\nexport function getTeams(state: GlobalState) {\n return state.entities.teams.teams;\n}\n\nexport function getTeamsInPolicy() {\n return (createSelector(\n 'getTeamsInPolicy',\n getTeams,\n (state: GlobalState, props: {policyId: string}) => getDataRetentionCustomPolicy(state, props.policyId),\n (allTeams, policy) => {\n if (!policy) {\n return [];\n }\n\n const policyTeams: Team[] = [];\n\n Object.entries(allTeams).forEach((item: [string, Team]) => {\n const [, team] = item;\n if (team.policy_id === policy.id) {\n policyTeams.push(team);\n }\n });\n\n return policyTeams;\n }) as (b: GlobalState, a: {\n policyId: string;\n }) => Team[]);\n}\n\nexport function getTeamStats(state: GlobalState) {\n return state.entities.teams.stats;\n}\n\nexport function getTeamMemberships(state: GlobalState) {\n return state.entities.teams.myMembers;\n}\n\nexport function getMembersInTeams(state: GlobalState) {\n return state.entities.teams.membersInTeam;\n}\n\nexport const getTeamsList: (state: GlobalState) => Team[] = createSelector(\n 'getTeamsList',\n getTeams,\n (teams) => {\n return Object.values(teams);\n },\n);\n\nexport const getActiveTeamsList: (state: GlobalState) => Team[] = createSelector(\n 'getActiveTeamsList',\n getTeamsList,\n (teams) => {\n return teams.filter((team) => team.delete_at === 0);\n },\n);\n\nexport const getCurrentTeam: (state: GlobalState) => Team | undefined = createSelector(\n 'getCurrentTeam',\n getTeams,\n getCurrentTeamId,\n (teams, currentTeamId) => {\n return teams[currentTeamId];\n },\n);\n\nexport function getTeam(state: GlobalState, id: string): Team | undefined {\n const teams = getTeams(state);\n return teams[id];\n}\n\nexport const getCurrentTeamMembership: (state: GlobalState) => TeamMembership | undefined = createSelector(\n 'getCurrentTeamMembership',\n getCurrentTeamId,\n getTeamMemberships,\n (currentTeamId: string, teamMemberships: {[teamId: string]: TeamMembership}): TeamMembership => {\n return teamMemberships[currentTeamId];\n },\n);\n\nexport const isCurrentUserCurrentTeamAdmin: (state: GlobalState) => boolean = createSelector(\n 'isCurrentUserCurrentTeamAdmin',\n getCurrentTeamMembership,\n (member) => {\n if (member) {\n const roles = member.roles || '';\n return isTeamAdmin(roles);\n }\n return false;\n },\n);\n\nexport const getCurrentTeamUrl: (state: GlobalState) => string = createSelector(\n 'getCurrentTeamUrl',\n getCurrentTeam,\n (state) => getConfig(state).SiteURL as string,\n (currentTeam, siteURL) => {\n if (!currentTeam) {\n return siteURL;\n }\n\n return `${siteURL}/${currentTeam.name}`;\n },\n);\n\nexport const getCurrentRelativeTeamUrl: (state: GlobalState) => string = createSelector(\n 'getCurrentRelativeTeamUrl',\n getCurrentTeam,\n (currentTeam) => {\n if (!currentTeam) {\n return '/';\n }\n return `/${currentTeam.name}`;\n },\n);\n\nexport function getRelativeTeamUrl(state: GlobalState, teamId: string): string {\n const team = getTeam(state, teamId);\n if (!team) {\n return '/';\n }\n return `/${team.name}`;\n}\n\nexport const getCurrentTeamStats: (state: GlobalState) => TeamStats | undefined = createSelector(\n 'getCurrentTeamStats',\n getCurrentTeamId,\n getTeamStats,\n (currentTeamId, teamStats) => {\n return teamStats[currentTeamId];\n },\n);\n\nexport const getMyTeams: (state: GlobalState) => Team[] = createSelector(\n 'getMyTeams',\n getTeams,\n getTeamMemberships,\n (teams, members) => {\n return Object.values(teams).filter((t) => members[t.id] && t.delete_at === 0);\n },\n);\n\nexport const getMyDeletedTeams: (state: GlobalState) => Team[] = createSelector(\n 'getMyDeletedTeams',\n getTeams,\n getTeamMemberships,\n (teams, members) => {\n return Object.values(teams).filter((t) => members[t.id] && t.delete_at !== 0);\n },\n);\n\nexport const getMyTeamMember: (state: GlobalState, teamId: string) => TeamMembership | undefined = createSelector(\n 'getMyTeamMember',\n getTeamMemberships,\n (state: GlobalState, teamId: string) => teamId,\n (teamMemberships, teamId) => {\n return teamMemberships[teamId];\n },\n);\n\nexport const getMembersInCurrentTeam: (state: GlobalState) => RelationOneToOne<UserProfile, TeamMembership> | undefined = createSelector(\n 'getMembersInCurrentTeam',\n getCurrentTeamId,\n getMembersInTeams,\n (currentTeamId, teamMembers) => {\n return teamMembers[currentTeamId];\n },\n);\n\nexport const getMembersInTeam: (state: GlobalState, teamId: string) => RelationOneToOne<UserProfile, TeamMembership> | undefined = createSelector(\n 'getMembersInTeam',\n (state: GlobalState, teamId: string) => teamId,\n getMembersInTeams,\n (teamId, teamMembers) => {\n return teamMembers[teamId];\n },\n);\n\nexport function getTeamMember(state: GlobalState, teamId: string, userId: string): TeamMembership | undefined {\n return getMembersInTeams(state)[teamId]?.[userId];\n}\n\nexport const getListableTeamIds: (state: GlobalState) => Array<Team['id']> = createIdsSelector(\n 'getListableTeamIds',\n getTeams,\n getTeamMemberships,\n (state) => haveISystemPermission(state, {permission: Permissions.LIST_PUBLIC_TEAMS}),\n (state) => haveISystemPermission(state, {permission: Permissions.LIST_PRIVATE_TEAMS}),\n isCompatibleWithJoinViewTeamPermissions,\n (teams, myMembers, canListPublicTeams, canListPrivateTeams, compatibleWithJoinViewTeamPermissions) => {\n return Object.keys(teams).filter((id) => {\n const team = teams[id];\n const member = myMembers[id];\n let canList = team.allow_open_invite;\n if (compatibleWithJoinViewTeamPermissions) {\n canList = (canListPrivateTeams && !team.allow_open_invite) || (canListPublicTeams && team.allow_open_invite);\n }\n return team.delete_at === 0 && canList && !member;\n });\n },\n);\n\nexport const getSortedListableTeams: (state: GlobalState, locale: string) => Team[] = createSelector(\n 'getSortedListableTeams',\n getTeams,\n getListableTeamIds,\n (state: GlobalState, locale: string) => locale,\n (teams, listableTeamIds, locale) => {\n const listableTeams: {[x: string]: Team} = {};\n\n for (const id of listableTeamIds) {\n listableTeams[id] = teams[id];\n }\n\n return Object.values(listableTeams).sort(sortTeamsWithLocale(locale));\n },\n);\n\nexport const getJoinableTeamIds: (state: GlobalState) => Array<Team['id']> = createIdsSelector(\n 'getJoinableTeamIds',\n getTeams,\n getTeamMemberships,\n (state: GlobalState) => haveISystemPermission(state, {permission: Permissions.JOIN_PUBLIC_TEAMS}),\n (state: GlobalState) => haveISystemPermission(state, {permission: Permissions.JOIN_PRIVATE_TEAMS}),\n isCompatibleWithJoinViewTeamPermissions,\n (teams, myMembers, canJoinPublicTeams, canJoinPrivateTeams, compatibleWithJoinViewTeamPermissions) => {\n return Object.keys(teams).filter((id) => {\n const team = teams[id];\n const member = myMembers[id];\n let canJoin = team.allow_open_invite;\n if (compatibleWithJoinViewTeamPermissions) {\n canJoin = (canJoinPrivateTeams && !team.allow_open_invite) || (canJoinPublicTeams && team.allow_open_invite);\n }\n return team.delete_at === 0 && canJoin && !member;\n });\n },\n);\n\nexport const getJoinableTeams: (state: GlobalState) => Team[] = createSelector(\n 'getJoinableTeams',\n getTeams,\n getJoinableTeamIds,\n (teams, joinableTeamIds) => {\n return joinableTeamIds.map((id) => teams[id]);\n },\n);\n\nexport const getSortedJoinableTeams: (state: GlobalState, locale: string) => Team[] = createSelector(\n 'getSortedJoinableTeams',\n getTeams,\n getJoinableTeamIds,\n (state: GlobalState, locale: string) => locale,\n (teams, joinableTeamIds, locale) => {\n const joinableTeams: {[x: string]: Team} = {};\n\n for (const id of joinableTeamIds) {\n joinableTeams[id] = teams[id];\n }\n\n return Object.values(joinableTeams).sort(sortTeamsWithLocale(locale));\n },\n);\n\nexport const getMySortedTeamIds: (state: GlobalState, locale: string) => Array<Team['id']> = createIdsSelector(\n 'getMySortedTeamIds',\n getMyTeams,\n (state: GlobalState, locale: string) => locale,\n (teams, locale) => {\n return teams.sort(sortTeamsWithLocale(locale)).map((t) => t.id);\n },\n);\n\nexport function getMyTeamsCount(state: GlobalState) {\n return getMyTeams(state).length;\n}\n\n// returns the badge number to show (excluding the current team)\n// > 0 means is returning the mention count\n// 0 means that there are no unread messages\n// -1 means that there are unread messages but no mentions\nexport const getChannelDrawerBadgeCount: (state: GlobalState) => number = createSelector(\n 'getChannelDrawerBadgeCount',\n getCurrentTeamId,\n getTeamMemberships,\n isCollapsedThreadsEnabled,\n (currentTeamId, teamMembers, collapsed) => {\n let mentionCount = 0;\n let messageCount = 0;\n Object.values(teamMembers).forEach((m: TeamMembership) => {\n if (m.team_id !== currentTeamId) {\n mentionCount += collapsed ? (m.mention_count_root || 0) : (m.mention_count || 0);\n messageCount += collapsed ? (m.msg_count_root || 0) : (m.msg_count || 0);\n }\n });\n\n let badgeCount = 0;\n if (mentionCount) {\n badgeCount = mentionCount;\n } else if (messageCount) {\n badgeCount = -1;\n }\n\n return badgeCount;\n },\n);\n\nexport const isTeamSameWithCurrentTeam = (state: GlobalState, teamName: string): boolean => {\n const targetTeam = getTeamByName(state, teamName);\n const currentTeam = getCurrentTeam(state);\n\n return Boolean(targetTeam && targetTeam.id === currentTeam?.id);\n};\n\n// returns the badge for a team\n// > 0 means is returning the mention count\n// 0 means that there are no unread messages\n// -1 means that there are unread messages but no mentions\nexport function makeGetBadgeCountForTeamId(): (state: GlobalState, id: string) => number {\n return createSelector(\n 'makeGetBadgeCountForTeamId',\n getTeamMemberships,\n (state: GlobalState, id: string) => id,\n isCollapsedThreadsEnabled,\n (members, teamId, collapsed) => {\n const member = members[teamId];\n let badgeCount = 0;\n\n if (member) {\n const mentionCount = collapsed ? member.mention_count_root : member.mention_count;\n const msgCount = collapsed ? member.msg_count_root : member.msg_count;\n if (mentionCount) {\n badgeCount = mentionCount;\n } else if (msgCount) {\n badgeCount = -1;\n }\n }\n\n return badgeCount;\n },\n );\n}\n\nexport function searchTeamsInPolicy(teams: Team[], term: string): Team[] {\n return filterTeamsStartingWithTerm(teams, term);\n}\n\nexport function getTeamIdByChannelId(state: GlobalState, channelId: string): string | undefined {\n const channels = state.entities.channels.channels;\n if (!channels) {\n return undefined;\n }\n const channel = channels[channelId];\n return channel ? channel.team_id : undefined;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {Channel, ChannelMembership} from '@mattermost/types/channels';\nimport type {Group} from '@mattermost/types/groups';\nimport type {Reaction} from '@mattermost/types/reactions';\nimport type {GlobalState} from '@mattermost/types/store';\nimport type {Team, TeamMembership} from '@mattermost/types/teams';\nimport type {UserProfile} from '@mattermost/types/users';\nimport type {\n IDMappedObjects,\n RelationOneToManyUnique,\n RelationOneToOne,\n} from '@mattermost/types/utilities';\n\nimport {General} from 'mattermost-redux/constants';\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {\n getCurrentChannelId,\n getCurrentUser,\n getCurrentUserId,\n getMyCurrentChannelMembership,\n getUsers,\n getMembersInTeam,\n getMembersInChannel,\n} from 'mattermost-redux/selectors/entities/common';\nimport {getConfig, getLicense} from 'mattermost-redux/selectors/entities/general';\nimport {getDirectShowPreferences, getTeammateNameDisplaySetting} from 'mattermost-redux/selectors/entities/preferences';\nimport {secureGetFromRecord} from 'mattermost-redux/utils/post_utils';\nimport {\n displayUsername,\n filterProfilesStartingWithTerm,\n filterProfilesMatchingWithTerm,\n isSystemAdmin,\n includesAnAdminRole,\n profileListToMap,\n sortByUsername,\n isGuest,\n applyRolesFilters,\n} from 'mattermost-redux/utils/user_utils';\n\nexport {getCurrentUser, getCurrentUserId, getUsers};\n\nexport type Filters = {\n role?: string;\n inactive?: boolean;\n active?: boolean;\n roles?: string[];\n exclude_roles?: string[];\n channel_roles?: string[];\n team_roles?: string[];\n exclude_bots?: boolean;\n exclude_remote?: boolean;\n};\n\nexport function getUserIdsInChannels(state: GlobalState): RelationOneToManyUnique<Channel, UserProfile> {\n return state.entities.users.profilesInChannel;\n}\n\nexport function getUserIdsNotInChannels(state: GlobalState): RelationOneToManyUnique<Channel, UserProfile> {\n return state.entities.users.profilesNotInChannel;\n}\n\nexport function getUserIdsInTeams(state: GlobalState): RelationOneToManyUnique<Team, UserProfile> {\n return state.entities.users.profilesInTeam;\n}\n\nexport function getUserIdsNotInTeams(state: GlobalState): RelationOneToManyUnique<Team, UserProfile> {\n return state.entities.users.profilesNotInTeam;\n}\n\nexport function getUserIdsWithoutTeam(state: GlobalState): Set<UserProfile['id']> {\n return state.entities.users.profilesWithoutTeam;\n}\n\nexport function getUserIdsInGroups(state: GlobalState): RelationOneToManyUnique<Group, UserProfile> {\n return state.entities.users.profilesInGroup;\n}\n\nexport function getUserIdsNotInGroups(state: GlobalState): RelationOneToManyUnique<Group, UserProfile> {\n return state.entities.users.profilesNotInGroup;\n}\n\nexport function getUserStatuses(state: GlobalState): RelationOneToOne<UserProfile, string> {\n return state.entities.users.statuses;\n}\n\nexport function getUserSessions(state: GlobalState): any[] {\n return state.entities.users.mySessions;\n}\n\nexport function getUserAudits(state: GlobalState): any[] {\n return state.entities.users.myAudits;\n}\n\nexport function getUser(state: GlobalState, id: UserProfile['id']): UserProfile {\n return state.entities.users.profiles[id];\n}\n\nexport const getUsersByUsername: (a: GlobalState) => Record<string, UserProfile> = createSelector(\n 'getUsersByUsername',\n getUsers,\n (users) => {\n const usersByUsername: Record<string, UserProfile> = {};\n\n for (const id in users) {\n if (Object.hasOwn(users, id)) {\n const user = users[id];\n usersByUsername[user.username] = user;\n }\n }\n\n return usersByUsername;\n },\n);\n\nexport function getUserByUsername(state: GlobalState, username: UserProfile['username']): UserProfile {\n return getUsersByUsername(state)[username];\n}\n\nexport const getUsersByEmail: (a: GlobalState) => Record<string, UserProfile> = createSelector(\n 'getUsersByEmail',\n getUsers,\n (users) => {\n const usersByEmail: Record<string, UserProfile> = {};\n\n for (const user of Object.keys(users).map((key) => users[key])) {\n usersByEmail[user.email] = user;\n }\n\n return usersByEmail;\n },\n);\n\nexport function getUserByEmail(state: GlobalState, email: UserProfile['email']): UserProfile {\n return getUsersByEmail(state)[email];\n}\n\nexport const isCurrentUserSystemAdmin: (state: GlobalState) => boolean = createSelector(\n 'isCurrentUserSystemAdmin',\n getCurrentUser,\n (user) => {\n const roles = user?.roles || '';\n return isSystemAdmin(roles);\n },\n);\n\nexport const isCurrentUserGuestUser: (state: GlobalState) => boolean = createSelector(\n 'isCurrentUserGuestUser',\n getCurrentUser,\n (user) => {\n const roles = user?.roles || '';\n return isGuest(roles);\n },\n);\n\nexport const currentUserHasAnAdminRole: (state: GlobalState) => boolean = createSelector(\n 'currentUserHasAnAdminRole',\n getCurrentUser,\n (user) => {\n const roles = user.roles || '';\n return includesAnAdminRole(roles);\n },\n);\n\nexport const getCurrentUserRoles: (_: GlobalState) => UserProfile['roles'] = createSelector(\n 'getCurrentUserRoles',\n getMyCurrentChannelMembership,\n (state) => state.entities.teams.myMembers[state.entities.teams.currentTeamId],\n getCurrentUser,\n (currentChannelMembership, currentTeamMembership, currentUser) => {\n let roles = '';\n if (currentTeamMembership) {\n roles += `${currentTeamMembership.roles} `;\n }\n\n if (currentChannelMembership) {\n roles += `${currentChannelMembership.roles} `;\n }\n\n if (currentUser) {\n roles += currentUser.roles;\n }\n return roles.trim();\n },\n);\n\nexport type UserMentionKey = {\n key: string;\n caseSensitive?: boolean;\n}\n\nexport const getCurrentUserMentionKeys: (state: GlobalState) => UserMentionKey[] = createSelector(\n 'getCurrentUserMentionKeys',\n getCurrentUser,\n (user: UserProfile) => {\n let keys: UserMentionKey[] = [];\n\n if (!user || !user.notify_props) {\n return keys;\n }\n\n if (user.notify_props.mention_keys) {\n keys = keys.concat(user.notify_props.mention_keys.split(',').map((key) => {\n return {key};\n }));\n }\n\n if (user.notify_props.first_name === 'true' && user.first_name) {\n keys.push({key: user.first_name, caseSensitive: true});\n }\n\n if (user.notify_props.channel === 'true') {\n keys.push({key: '@channel'});\n keys.push({key: '@all'});\n keys.push({key: '@here'});\n }\n\n const usernameKey = '@' + user.username;\n if (keys.findIndex((key) => key.key === usernameKey) === -1) {\n keys.push({key: usernameKey});\n }\n\n return keys;\n },\n);\n\nexport type HighlightWithoutNotificationKey = {\n key: string;\n}\n\nexport const getHighlightWithoutNotificationKeys: (state: GlobalState) => HighlightWithoutNotificationKey[] = createSelector(\n 'getHighlightWithoutNotificationKeys',\n getCurrentUser,\n (user: UserProfile) => {\n const highlightKeys: HighlightWithoutNotificationKey[] = [];\n\n if (user?.notify_props?.highlight_keys?.length > 0) {\n user.notify_props.highlight_keys.split(',').forEach((key) => {\n highlightKeys.push({key});\n });\n }\n\n return highlightKeys;\n },\n);\n\nexport const getProfileSetInCurrentChannel: (state: GlobalState) => Set<UserProfile['id']> = createSelector(\n 'getProfileSetInCurrentChannel',\n getCurrentChannelId,\n getUserIdsInChannels,\n (currentChannel, channelProfiles) => {\n return channelProfiles[currentChannel];\n },\n);\n\nexport const getProfileSetNotInCurrentChannel: (state: GlobalState) => Set<UserProfile['id']> = createSelector(\n 'getProfileSetNotInCurrentChannel',\n getCurrentChannelId,\n getUserIdsNotInChannels,\n (currentChannel, channelProfiles) => {\n return channelProfiles[currentChannel];\n },\n);\n\nexport const getProfileSetInCurrentTeam: (state: GlobalState) => Set<UserProfile['id']> = createSelector(\n 'getProfileSetInCurrentTeam',\n (state) => state.entities.teams.currentTeamId,\n getUserIdsInTeams,\n (currentTeam, teamProfiles) => {\n return teamProfiles[currentTeam];\n },\n);\n\nexport const getProfileSetNotInCurrentTeam: (state: GlobalState) => Set<UserProfile['id']> = createSelector(\n 'getProfileSetNotInCurrentTeam',\n (state) => state.entities.teams.currentTeamId,\n getUserIdsNotInTeams,\n (currentTeam, teamProfiles) => {\n return teamProfiles[currentTeam];\n },\n);\n\nconst PROFILE_SET_ALL = 'all';\nfunction sortAndInjectProfiles(profiles: IDMappedObjects<UserProfile>, profileSet?: 'all' | Set<UserProfile['id']>): UserProfile[] {\n const currentProfiles = injectProfiles(profiles, profileSet);\n return currentProfiles.sort(sortByUsername);\n}\n\nfunction injectProfiles(profiles: IDMappedObjects<UserProfile>, profileSet?: 'all' | Set<UserProfile['id']>): UserProfile[] {\n let currentProfiles: UserProfile[] = [];\n\n if (typeof profileSet === 'undefined') {\n return currentProfiles;\n } else if (profileSet === PROFILE_SET_ALL) {\n currentProfiles = Object.keys(profiles).map((key) => profiles[key]);\n } else {\n currentProfiles = Array.from(profileSet).map((p) => profiles[p]);\n }\n\n return currentProfiles.filter((profile) => Boolean(profile));\n}\n\nexport const getProfiles: (state: GlobalState, filters?: Filters) => UserProfile[] = createSelector(\n 'getProfiles',\n getUsers,\n (state: GlobalState, filters?: Filters) => filters,\n (profiles, filters) => {\n return sortAndInjectProfiles(filterProfiles(profiles, filters), PROFILE_SET_ALL);\n },\n);\n\nexport function filterProfiles(profiles: IDMappedObjects<UserProfile>, filters?: Filters, memberships?: RelationOneToOne<UserProfile, TeamMembership> | RelationOneToOne<UserProfile, ChannelMembership>): IDMappedObjects<UserProfile> {\n if (!filters) {\n return profiles;\n }\n\n let users = Object.keys(profiles).map((key) => profiles[key]);\n\n const filterRole = (filters.role && filters.role !== '') ? [filters.role] : [];\n const filterRoles = [...filterRole, ...(filters.roles || []), ...(filters.team_roles || []), ...(filters.channel_roles || [])];\n const excludeRoles = filters.exclude_roles || [];\n if (filterRoles.length > 0 || excludeRoles.length > 0) {\n users = users.filter((user) => {\n return user.roles.length > 0 && applyRolesFilters(user, filterRoles, excludeRoles, memberships?.[user.id]);\n });\n }\n\n if (filters.exclude_bots) {\n users = users.filter((user) => !user.is_bot);\n }\n\n if (filters.inactive) {\n users = users.filter((user) => user.delete_at !== 0);\n } else if (filters.active) {\n users = users.filter((user) => user.delete_at === 0);\n }\n\n if (filters.exclude_remote) {\n users = users.filter((user) => !user.remote_id);\n }\n\n return users.reduce((acc, user) => {\n acc[user.id] = user;\n return acc;\n }, {} as IDMappedObjects<UserProfile>);\n}\n\nexport function getIsManualStatusForUserId(state: GlobalState, userId: UserProfile['id']): boolean {\n return state.entities.users.isManualStatus[userId];\n}\n\nexport const getProfilesInCurrentChannel: (state: GlobalState) => UserProfile[] = createSelector(\n 'getProfilesInCurrentChannel',\n getUsers,\n getProfileSetInCurrentChannel,\n (profiles, currentChannelProfileSet) => {\n return sortAndInjectProfiles(profiles, currentChannelProfileSet);\n },\n);\n\nexport const getActiveProfilesInCurrentChannel: (state: GlobalState) => UserProfile[] = createSelector(\n 'getProfilesInCurrentChannel',\n getUsers,\n getProfileSetInCurrentChannel,\n (profiles, currentChannelProfileSet) => {\n return sortAndInjectProfiles(profiles, currentChannelProfileSet).filter((user) => user.delete_at === 0);\n },\n);\n\nexport const getActiveProfilesInCurrentChannelWithoutSorting: (state: GlobalState) => UserProfile[] = createSelector(\n 'getProfilesInCurrentChannel',\n getUsers,\n getProfileSetInCurrentChannel,\n (profiles, currentChannelProfileSet) => {\n return injectProfiles(profiles, currentChannelProfileSet).filter((user) => user.delete_at === 0);\n },\n);\n\nexport const getProfilesNotInCurrentChannel: (state: GlobalState, filters?: Filters) => UserProfile[] = createSelector(\n 'getProfilesNotInCurrentChannel',\n getUsers,\n getProfileSetNotInCurrentChannel,\n (state: GlobalState, filters?: Filters) => filters,\n (profiles, notInCurrentChannelProfileSet, filters) => {\n return sortAndInjectProfiles(filterProfiles(profiles, filters), notInCurrentChannelProfileSet);\n },\n);\n\nexport const getProfilesInCurrentTeam: (state: GlobalState, filters?: Filters) => UserProfile[] = createSelector(\n 'getProfilesInCurrentTeam',\n getUsers,\n getProfileSetInCurrentTeam,\n (state: GlobalState, filters?: Filters) => filters,\n (profiles, currentTeamProfileSet, filters) => {\n return sortAndInjectProfiles(filterProfiles(profiles, filters), currentTeamProfileSet);\n },\n);\n\nexport const getProfilesInTeam: (state: GlobalState, teamId: Team['id'], filters?: Filters) => UserProfile[] = createSelector(\n 'getProfilesInTeam',\n getUsers,\n getUserIdsInTeams,\n getMembersInTeam,\n (state: GlobalState, teamId: string) => teamId,\n (state: GlobalState, teamId: string, filters: Filters) => filters,\n (profiles, usersInTeams, memberships, teamId, filters) => {\n return sortAndInjectProfiles(filterProfiles(profiles, filters, memberships), usersInTeams[teamId] || new Set());\n },\n);\n\nexport const getProfilesNotInTeam: (state: GlobalState, teamId: Team['id'], filters?: Filters) => UserProfile[] = createSelector(\n 'getProfilesNotInTeam',\n getUsers,\n getUserIdsNotInTeams,\n (state: GlobalState, teamId: string) => teamId,\n (state: GlobalState, teamId: string, filters: Filters) => filters,\n (profiles, usersNotInTeams, teamId, filters) => {\n return sortAndInjectProfiles(filterProfiles(profiles, filters), usersNotInTeams[teamId] || new Set());\n },\n);\n\nexport const getProfilesNotInCurrentTeam: (state: GlobalState) => UserProfile[] = createSelector(\n 'getProfilesNotInCurrentTeam',\n getUsers,\n getProfileSetNotInCurrentTeam,\n (profiles, notInCurrentTeamProfileSet) => {\n return sortAndInjectProfiles(profiles, notInCurrentTeamProfileSet);\n },\n);\n\nexport const getProfilesWithoutTeam: (state: GlobalState, filters: Filters) => UserProfile[] = createSelector(\n 'getProfilesWithoutTeam',\n getUsers,\n getUserIdsWithoutTeam,\n (state: GlobalState, filters: Filters) => filters,\n (profiles, withoutTeamProfileSet, filters) => {\n return sortAndInjectProfiles(filterProfiles(profiles, filters), withoutTeamProfileSet);\n },\n);\n\nexport function getStatusForUserId(state: GlobalState, userId: UserProfile['id']): string {\n return getUserStatuses(state)[userId];\n}\n\nexport function getDndEndTimeForUserId(state: GlobalState, userId: UserProfile['id']): number {\n return state.entities.users.dndEndTimes[userId];\n}\n\nexport function getTotalUsersStats(state: GlobalState) {\n return state.entities.users.stats;\n}\n\nexport function getFilteredUsersStats(state: GlobalState) {\n return state.entities.users.filteredStats;\n}\n\nfunction filterFromProfiles(currentUserId: UserProfile['id'], profiles: UserProfile[], skipCurrent = false, filters?: Filters): UserProfile[] {\n const filteredProfilesMap = filterProfiles(profileListToMap(profiles), filters);\n const filteredProfiles = Object.keys(filteredProfilesMap).map((key) => filteredProfilesMap[key]);\n\n if (skipCurrent) {\n removeCurrentUserFromList(filteredProfiles, currentUserId);\n }\n\n return filteredProfiles;\n}\n\nexport function makeSearchProfilesStartingWithTerm(): (state: GlobalState, term: string, skipCurrent?: boolean, filters?: Filters) => UserProfile[] {\n return createSelector(\n 'makeSearchProfilesStartingWithTerm',\n getUsers,\n getCurrentUserId,\n (state: GlobalState, term: string) => term,\n (state: GlobalState, term: string, skipCurrent?: boolean) => skipCurrent || false,\n (stateGlobalState, term: string, skipCurrent?: boolean, filters?: Filters) => filters,\n (users, currentUserId, term, skipCurrent, filters) => {\n const profiles = filterProfilesMatchingWithTerm(Object.values(users), term);\n return filterFromProfiles(currentUserId, profiles, skipCurrent, filters);\n },\n );\n}\n\nexport function makeSearchProfilesMatchingWithTerm(): (state: GlobalState, term: string, skipCurrent?: boolean, filters?: Filters) => UserProfile[] {\n return createSelector(\n 'makeSearchProfilesMatchingWithTerm',\n getUsers,\n getCurrentUserId,\n (state: GlobalState, term: string) => term,\n (state: GlobalState, term: string, skipCurrent?: boolean) => skipCurrent || false,\n (stateGlobalState, term: string, skipCurrent?: boolean, filters?: Filters) => filters,\n (users, currentUserId, term, skipCurrent, filters) => {\n const profiles = filterProfilesMatchingWithTerm(Object.values(users), term);\n return filterFromProfiles(currentUserId, profiles, skipCurrent, filters);\n },\n );\n}\n\nexport function makeSearchProfilesInChannel() {\n const doGetProfilesInChannel = makeGetProfilesInChannel();\n return (state: GlobalState, channelId: Channel['id'], term: string, skipCurrent = false, filters?: Filters): UserProfile[] => {\n const profiles = filterProfilesStartingWithTerm(doGetProfilesInChannel(state, channelId, filters), term);\n\n if (skipCurrent) {\n removeCurrentUserFromList(profiles, getCurrentUserId(state));\n }\n\n return profiles;\n };\n}\n\nexport function searchProfilesInCurrentChannel(state: GlobalState, term: string, skipCurrent = false): UserProfile[] {\n const profiles = filterProfilesStartingWithTerm(getProfilesInCurrentChannel(state), term);\n\n if (skipCurrent) {\n removeCurrentUserFromList(profiles, getCurrentUserId(state));\n }\n\n return profiles;\n}\n\nexport function searchActiveProfilesInCurrentChannel(state: GlobalState, term: string, skipCurrent = false): UserProfile[] {\n return searchProfilesInCurrentChannel(state, term, skipCurrent).filter((user) => user.delete_at === 0);\n}\n\nexport function searchProfilesNotInCurrentChannel(state: GlobalState, term: string, skipCurrent = false): UserProfile[] {\n const profiles = filterProfilesStartingWithTerm(getProfilesNotInCurrentChannel(state), term);\n if (skipCurrent) {\n removeCurrentUserFromList(profiles, getCurrentUserId(state));\n }\n\n return profiles;\n}\n\nexport function searchProfilesInCurrentTeam(state: GlobalState, term: string, skipCurrent = false, filters?: Filters): UserProfile[] {\n const profiles = filterProfilesStartingWithTerm(getProfilesInCurrentTeam(state, filters), term);\n if (skipCurrent) {\n removeCurrentUserFromList(profiles, getCurrentUserId(state));\n }\n\n return profiles;\n}\n\nexport function searchProfilesInTeam(state: GlobalState, teamId: Team['id'], term: string, skipCurrent = false, filters?: Filters): UserProfile[] {\n const profiles = filterProfilesMatchingWithTerm(getProfilesInTeam(state, teamId, filters), term);\n if (skipCurrent) {\n removeCurrentUserFromList(profiles, getCurrentUserId(state));\n }\n\n return profiles;\n}\n\nexport function searchProfilesNotInCurrentTeam(state: GlobalState, term: string, skipCurrent = false): UserProfile[] {\n const profiles = filterProfilesStartingWithTerm(getProfilesNotInCurrentTeam(state), term);\n if (skipCurrent) {\n removeCurrentUserFromList(profiles, getCurrentUserId(state));\n }\n\n return profiles;\n}\n\nexport function searchProfilesWithoutTeam(state: GlobalState, term: string, skipCurrent = false, filters: Filters): UserProfile[] {\n const filteredProfiles = filterProfilesStartingWithTerm(getProfilesWithoutTeam(state, filters), term);\n if (skipCurrent) {\n removeCurrentUserFromList(filteredProfiles, getCurrentUserId(state));\n }\n\n return filteredProfiles;\n}\n\nfunction removeCurrentUserFromList(profiles: UserProfile[], currentUserId: UserProfile['id']) {\n const index = profiles.findIndex((p) => p.id === currentUserId);\n if (index >= 0) {\n profiles.splice(index, 1);\n }\n}\n\nexport const shouldShowTermsOfService: (state: GlobalState) => boolean = createSelector(\n 'shouldShowTermsOfService',\n getConfig,\n getCurrentUser,\n getLicense,\n (config, user, license) => {\n // Defaults to false if the user is not logged in or the setting doesn't exist\n const acceptedTermsId = user ? user.terms_of_service_id : '';\n const acceptedAt = user ? user.terms_of_service_create_at : 0;\n\n const featureEnabled = license.IsLicensed === 'true' && config.EnableCustomTermsOfService === 'true';\n const reacceptanceTime = parseInt(config.CustomTermsOfServiceReAcceptancePeriod!, 10) * 1000 * 60 * 60 * 24;\n const timeElapsed = new Date().getTime() - acceptedAt;\n return Boolean(user && featureEnabled && (config.CustomTermsOfServiceId !== acceptedTermsId || timeElapsed > reacceptanceTime));\n },\n);\n\nexport const getUsersInVisibleDMs: (state: GlobalState) => UserProfile[] = createSelector(\n 'getUsersInVisibleDMs',\n getUsers,\n getDirectShowPreferences,\n (users, preferences) => {\n const dmUsers: UserProfile[] = [];\n preferences.forEach((pref) => {\n if (pref.value === 'true' && users[pref.name]) {\n dmUsers.push(users[pref.name]);\n }\n });\n return dmUsers;\n },\n);\n\nexport function makeGetProfilesForReactions(): (state: GlobalState, reactions: Reaction[]) => UserProfile[] {\n return createSelector(\n 'makeGetProfilesForReactions',\n getUsers,\n (state: GlobalState, reactions: Reaction[]) => reactions,\n (users, reactions) => {\n const profiles: UserProfile[] = [];\n reactions.forEach((r) => {\n if (users[r.user_id]) {\n profiles.push(users[r.user_id]);\n }\n });\n return profiles;\n },\n );\n}\n\n/**\n * Returns a selector that returns all profiles in a given channel with the given filters applied.\n *\n * Note that filters, if provided, must be either a constant or memoized to prevent constant recomputation of the selector.\n */\nexport function makeGetProfilesInChannel(): (state: GlobalState, channelId: Channel['id'], filters?: Filters) => UserProfile[] {\n return createSelector(\n 'makeGetProfilesInChannel',\n getUsers,\n getUserIdsInChannels,\n getMembersInChannel,\n (state: GlobalState, channelId: string) => channelId,\n (state, channelId, filters) => filters,\n (users, userIds, membersInChannel, channelId, filters = {}) => {\n const userIdsInChannel = userIds[channelId];\n\n if (!userIdsInChannel) {\n return [];\n }\n\n return sortAndInjectProfiles(filterProfiles(users, filters, membersInChannel), userIdsInChannel);\n },\n );\n}\n\n/**\n * Returns a selector that returns all profiles not in a given channel.\n */\nexport function makeGetProfilesNotInChannel(): (state: GlobalState, channelId: Channel['id'], filters?: Filters) => UserProfile[] {\n return createSelector(\n 'makeGetProfilesNotInChannel',\n getUsers,\n getUserIdsNotInChannels,\n (state: GlobalState, channelId: string) => channelId,\n (users, userIds, channelId) => {\n const userIdsInChannel = userIds[channelId];\n\n if (!userIdsInChannel) {\n return [];\n }\n\n return sortAndInjectProfiles(users, userIdsInChannel);\n },\n );\n}\n\nexport function makeGetProfilesByIdsAndUsernames(): (\n state: GlobalState,\n props: {\n allUserIds: Array<UserProfile['id']>;\n allUsernames: Array<UserProfile['username']>;\n }\n) => UserProfile[] {\n return createSelector(\n 'makeGetProfilesByIdsAndUsernames',\n getUsers,\n getUsersByUsername,\n (state: GlobalState, props: {allUserIds: Array<UserProfile['id']>; allUsernames: Array<UserProfile['username']>}) => props.allUserIds,\n (state, props) => props.allUsernames,\n (allProfilesById: Record<string, UserProfile>, allProfilesByUsername: Record<string, UserProfile>, allUserIds: string[], allUsernames: string[]) => {\n const userProfiles: UserProfile[] = [];\n\n if (allUserIds && allUserIds.length > 0) {\n const profilesById = allUserIds.\n filter((userId) => secureGetFromRecord(allProfilesById, userId)).\n map((userId) => allProfilesById[userId]);\n\n if (profilesById && profilesById.length > 0) {\n userProfiles.push(...profilesById);\n }\n }\n\n if (allUsernames && allUsernames.length > 0) {\n const profilesByUsername = allUsernames.\n filter((username) => secureGetFromRecord(allProfilesByUsername, username)).\n map((username) => allProfilesByUsername[username]);\n\n if (profilesByUsername && profilesByUsername.length > 0) {\n userProfiles.push(...profilesByUsername);\n }\n }\n\n return userProfiles;\n },\n );\n}\n\nexport function makeGetDisplayName(): (state: GlobalState, userId: UserProfile['id'], useFallbackUsername?: boolean) => string {\n return createSelector(\n 'makeGetDisplayName',\n (state: GlobalState, userId: string) => getUser(state, userId),\n getTeammateNameDisplaySetting,\n (state, userId, useFallbackUsername = true) => useFallbackUsername,\n (user, teammateNameDisplaySetting, useFallbackUsername) => {\n return displayUsername(user, teammateNameDisplaySetting!, useFallbackUsername);\n },\n );\n}\n\nexport function makeDisplayNameGetter(): (state: GlobalState, useFallbackUsername: boolean) => (user: UserProfile | null | undefined) => string {\n return createSelector(\n 'makeDisplayNameGetter',\n getTeammateNameDisplaySetting,\n (_, useFallbackUsername = true) => useFallbackUsername,\n (teammateNameDisplaySetting, useFallbackUsername) => {\n return (user: UserProfile | null | undefined) => displayUsername(user, teammateNameDisplaySetting!, useFallbackUsername);\n },\n );\n}\n\nexport const getProfilesInGroup: (state: GlobalState, groupId: Group['id'], filters?: Filters) => UserProfile[] = createSelector(\n 'getProfilesInGroup',\n getUsers,\n getUserIdsInGroups,\n (state: GlobalState, groupId: string) => groupId,\n (state: GlobalState, groupId: string, filters: Filters) => filters,\n (profiles, usersInGroups, groupId, filters) => {\n return sortAndInjectProfiles(filterProfiles(profiles, filters), usersInGroups[groupId] || new Set());\n },\n);\n\nexport const getProfilesInGroupWithoutSorting: (state: GlobalState, groupId: Group['id'], filters?: Filters) => UserProfile[] = createSelector(\n 'getProfilesInGroup',\n getUsers,\n getUserIdsInGroups,\n (state: GlobalState, groupId: string) => groupId,\n (state: GlobalState, groupId: string, filters: Filters) => filters,\n (profiles, usersInGroups, groupId, filters) => {\n return injectProfiles(filterProfiles(profiles, filters), usersInGroups[groupId] || new Set());\n },\n);\n\nexport const getProfilesNotInCurrentGroup: (state: GlobalState, groupId: Group['id'], filters?: Filters) => UserProfile[] = createSelector(\n 'getProfilesNotInGroup',\n getUsers,\n getUserIdsNotInGroups,\n (state: GlobalState, groupId: string) => groupId,\n (state: GlobalState, groupId: string, filters: Filters) => filters,\n (profiles, usersNotInGroups, groupId, filters) => {\n return sortAndInjectProfiles(filterProfiles(profiles, filters), usersNotInGroups[groupId] || new Set());\n },\n);\n\nexport function searchProfilesInGroup(state: GlobalState, groupId: Group['id'], term: string, skipCurrent = false, filters?: Filters): UserProfile[] {\n const profiles = filterProfilesStartingWithTerm(getProfilesInGroup(state, groupId, filters), term);\n if (skipCurrent) {\n removeCurrentUserFromList(profiles, getCurrentUserId(state));\n }\n\n return profiles;\n}\n\nexport function searchProfilesInGroupWithoutSorting(state: GlobalState, groupId: Group['id'], term: string, skipCurrent = false, filters?: Filters): UserProfile[] {\n const profiles = filterProfilesStartingWithTerm(getProfilesInGroupWithoutSorting(state, groupId, filters), term);\n if (skipCurrent) {\n removeCurrentUserFromList(profiles, getCurrentUserId(state));\n }\n\n return profiles;\n}\n\nexport function getUserLastActivities(state: GlobalState): RelationOneToOne<UserProfile, number> {\n return state.entities.users.lastActivity;\n}\n\nexport function getLastActivityForUserId(state: GlobalState, userId: UserProfile['id']): number {\n return getUserLastActivities(state)[userId];\n}\n\nexport function checkIsFirstAdmin(currentUser: UserProfile, users: IDMappedObjects<UserProfile>): boolean {\n if (!currentUser) {\n return false;\n }\n if (!currentUser.roles.includes('system_admin')) {\n return false;\n }\n for (const user of Object.values(users)) {\n if (user.roles.includes('system_admin') && user.create_at < currentUser.create_at) {\n // If the user in the list is an admin with create_at less than our user, than that user is older than the current one, so it can't be the first admin.\n return false;\n }\n }\n return true;\n}\n\nexport const isFirstAdmin = createSelector(\n 'isFirstAdmin',\n (state: GlobalState) => getCurrentUser(state),\n (state: GlobalState) => getUsers(state),\n checkIsFirstAdmin,\n);\n\nexport const displayLastActiveLabel: (state: GlobalState, userId: string) => boolean = createSelector(\n 'displayLastActiveLabel',\n (state: GlobalState, userId: string) => getStatusForUserId(state, userId),\n (state: GlobalState, userId: string) => getLastActivityForUserId(state, userId),\n (state: GlobalState, userId: string) => getUser(state, userId),\n getConfig,\n (userStatus, timestamp, user, config) => {\n const currentTime = new Date();\n const oneMin = 60 * 1000;\n\n if (\n (!userStatus || userStatus === General.ONLINE) ||\n (timestamp && (currentTime.valueOf() - new Date(timestamp).valueOf()) <= oneMin) ||\n user?.props?.show_last_active === 'false' ||\n user?.is_bot ||\n timestamp === 0 ||\n config.EnableLastActiveTime !== 'true'\n ) {\n return false;\n }\n return true;\n },\n);\n\nexport const getLastActiveTimestampUnits: (state: GlobalState, userId: string) => string[] = createSelector(\n 'getLastActiveTimestampUnits',\n (state: GlobalState, userId: string) => getLastActivityForUserId(state, userId),\n (timestamp) => {\n const timestampUnits = [\n 'now',\n 'minute',\n 'hour',\n ];\n const currentTime = new Date();\n const twoDaysAgo = 48 * 60 * 60 * 1000;\n if ((currentTime.valueOf() - new Date(timestamp).valueOf()) < twoDaysAgo) {\n timestampUnits.push('day');\n }\n return timestampUnits;\n },\n);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\nimport type {AnyAction, Reducer} from 'redux';\nimport {enableBatching} from 'redux-batched-actions';\n\nimport deepFreezeAndThrowOnMutation from 'mattermost-redux/utils/deep_freeze';\n\nexport function createReducer(...reducerSets: Array<Record<string, Reducer>>) {\n // Merge each dictionary of reducers into a single combined reducer\n let reducer: Reducer = combineReducers(reducerSets.reduce((fullSet, reducerSet) => {\n return {...fullSet, ...reducerSet};\n }, {}));\n\n reducer = enableBatching(reducer);\n reducer = enableFreezing(reducer);\n\n return reducer;\n}\n\nfunction enableFreezing<S, A extends AnyAction>(reducer: Reducer<S, A>) {\n // Skip the overhead of freezing in production.\n // eslint-disable-next-line no-process-env\n if (process.env.NODE_ENV === 'production') {\n return reducer;\n }\n\n const frozenReducer = (state: S | undefined, action: A): S => {\n const nextState = reducer(state, action);\n\n if (nextState !== state) {\n deepFreezeAndThrowOnMutation(nextState);\n }\n\n return nextState;\n };\n\n return frozenReducer;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {\n OpenGraphMetadata,\n Post,\n PostsState,\n PostOrderBlock,\n MessageHistory,\n PostAcknowledgement,\n PostEmbed,\n PostPreviewMetadata,\n} from '@mattermost/types/posts';\nimport type {Reaction} from '@mattermost/types/reactions';\nimport type {UserProfile} from '@mattermost/types/users';\nimport type {\n RelationOneToOne,\n IDMappedObjects,\n RelationOneToMany,\n} from '@mattermost/types/utilities';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {ChannelTypes, PostTypes, UserTypes, ThreadTypes, CloudTypes} from 'mattermost-redux/action_types';\nimport {Posts} from 'mattermost-redux/constants';\nimport {PostTypes as PostConstant} from 'mattermost-redux/constants/posts';\nimport {comparePosts, isPermalink, shouldUpdatePost} from 'mattermost-redux/utils/post_utils';\n\nexport function removeUnneededMetadata(post: Post) {\n if (!post.metadata) {\n return post;\n }\n\n const metadata = {...post.metadata};\n let changed = false;\n\n // These fields are stored separately\n if (metadata.emojis) {\n Reflect.deleteProperty(metadata, 'emojis');\n changed = true;\n }\n\n if (metadata.files) {\n Reflect.deleteProperty(metadata, 'files');\n changed = true;\n }\n\n if (metadata.reactions) {\n Reflect.deleteProperty(metadata, 'reactions');\n changed = true;\n }\n\n if (metadata.reactions) {\n Reflect.deleteProperty(metadata, 'acknowledgements');\n changed = true;\n }\n\n if (metadata.embeds) {\n let embedsChanged = false;\n\n const newEmbeds = metadata.embeds.map((embed) => {\n switch (embed.type) {\n case 'opengraph': {\n const newEmbed = {...embed};\n Reflect.deleteProperty(newEmbed, 'data');\n\n embedsChanged = true;\n\n return newEmbed;\n }\n case 'permalink': {\n const permalinkEmbed = {...embed};\n if (permalinkEmbed.data) {\n Reflect.deleteProperty(permalinkEmbed.data, 'post');\n }\n embedsChanged = true;\n\n return permalinkEmbed;\n }\n default:\n return embed;\n }\n });\n\n if (embedsChanged) {\n metadata.embeds = newEmbeds;\n changed = true;\n }\n }\n\n if (!changed) {\n // Nothing changed\n return post;\n }\n\n return {\n ...post,\n metadata,\n };\n}\n\nexport function nextPostsReplies(state: {[x in Post['id']]: number} = {}, action: MMReduxAction) {\n switch (action.type) {\n case PostTypes.RECEIVED_POST:\n case PostTypes.RECEIVED_NEW_POST: {\n const post = action.data;\n if (!post.id || !post.root_id || !post.reply_count) {\n // Ignoring pending posts and root posts\n return state;\n }\n\n const newState = {...state};\n newState[post.root_id] = post.reply_count;\n return newState;\n }\n\n case PostTypes.RECEIVED_POSTS: {\n const posts = Object.values(action.data.posts) as Post[];\n\n if (posts.length === 0) {\n return state;\n }\n\n const nextState = {...state};\n\n for (const post of posts) {\n if (post.root_id) {\n nextState[post.root_id] = post.reply_count;\n } else {\n nextState[post.id] = post.reply_count;\n }\n }\n\n return nextState;\n }\n\n case PostTypes.POST_DELETED: {\n const post: Post = action.data;\n\n if (!state[post.root_id] && !state[post.id]) {\n return state;\n }\n\n const nextState = {...state};\n if (post.root_id && state[post.root_id]) {\n nextState[post.root_id] -= 1;\n }\n if (!post.root_id && state[post.id]) {\n Reflect.deleteProperty(nextState, post.id);\n }\n\n return nextState;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nexport function handlePosts(state: IDMappedObjects<Post> = {}, action: MMReduxAction) {\n switch (action.type) {\n case PostTypes.RECEIVED_POST:\n case PostTypes.RECEIVED_NEW_POST: {\n return handlePostReceived({...state}, action.data);\n }\n\n case PostTypes.RECEIVED_POSTS: {\n const posts = Object.values(action.data.posts) as Post[];\n\n if (posts.length === 0) {\n return state;\n }\n\n const nextState = {...state};\n\n for (const post of posts) {\n handlePostReceived(nextState, post);\n }\n\n return nextState;\n }\n\n case PostTypes.POST_DELETED: {\n const post: Post = action.data;\n\n if (!state[post.id]) {\n return state;\n }\n\n // Mark the post as deleted\n const nextState = {\n ...state,\n [post.id]: {\n ...state[post.id],\n state: Posts.POST_DELETED,\n message: '',\n file_ids: [],\n has_reactions: false,\n },\n };\n\n for (const otherPost of Object.values(state)) {\n // Remove any of its comments\n if (otherPost.root_id === post.id) {\n Reflect.deleteProperty(nextState, otherPost.id);\n }\n\n // a deleted post may exist in some other post's\n // embeds when its link is mentioned in the post message.\n // We need to remove the deleted post from post embeds of all posts\n // to ensure the deleted post's contents cannot be retrieved from the store.\n if (otherPost.metadata && otherPost.metadata.embeds && otherPost.metadata.embeds.length > 0) {\n // This will become the post's new embeds array.\n // We'll add everything other than the deleted post's embed here.\n const newEmbeds: PostEmbed[] = [];\n\n for (const embed of otherPost.metadata.embeds) {\n if (embed.type === 'permalink' && embed.data && (embed.data as PostPreviewMetadata).post_id === post.id) {\n // skip if the embed is the deleted post\n continue;\n }\n\n // include everything else\n newEmbeds.push(embed);\n }\n\n // if newEmbeds changed, update post's embeds\n if (newEmbeds.length !== otherPost.metadata.embeds.length) {\n // Since otherPost refers to the post from store, its frozen un immutable.\n // That's why cloning it and modifying required parts here.\n nextState[otherPost.id] = {\n ...nextState[otherPost.id],\n metadata: {\n ...nextState[otherPost.id].metadata,\n embeds: newEmbeds,\n },\n };\n }\n }\n }\n\n return nextState;\n }\n\n case PostTypes.POST_REMOVED: {\n const post = action.data;\n\n if (!state[post.id]) {\n return state;\n }\n\n // Remove the post itself\n const nextState = {...state};\n Reflect.deleteProperty(nextState, post.id);\n\n // Remove any of its comments\n for (const otherPost of Object.values(state)) {\n if (otherPost.root_id === post.id) {\n Reflect.deleteProperty(nextState, otherPost.id);\n }\n }\n\n return nextState;\n }\n\n case PostTypes.POST_PINNED_CHANGED: {\n const {postId, isPinned, updateAt} = action;\n\n if (!state[postId]) {\n return state;\n }\n\n return {\n ...state,\n [postId]: {\n ...state[postId],\n is_pinned: isPinned,\n last_update_at: updateAt,\n },\n };\n }\n\n case ChannelTypes.RECEIVED_CHANNEL_DELETED:\n case ChannelTypes.DELETE_CHANNEL_SUCCESS:\n case ChannelTypes.LEAVE_CHANNEL: {\n if (action.data && action.data.viewArchivedChannels) {\n // Nothing to do since we still want to store posts in archived channels\n return state;\n }\n\n const channelId = action.data.id;\n\n let postDeleted = false;\n\n // Remove any posts in the deleted channel\n const nextState = {...state};\n for (const post of Object.values(state)) {\n if (post.channel_id === channelId) {\n Reflect.deleteProperty(nextState, post.id);\n postDeleted = true;\n }\n }\n\n if (!postDeleted) {\n // Nothing changed\n return state;\n }\n\n return nextState;\n }\n\n case ThreadTypes.FOLLOW_CHANGED_THREAD: {\n const {id, following} = action.data;\n const post = state[id];\n return {\n ...state,\n [id]: {\n ...post,\n is_following: following,\n },\n };\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction handlePostReceived(nextState: any, post: Post, nestedPermalinkLevel?: number) {\n let currentState = nextState;\n\n // Check if post already exists in state or if nested permalink\n if (!shouldUpdatePost(post, currentState[post.id]) || (nestedPermalinkLevel && nestedPermalinkLevel > 1)) {\n return currentState;\n }\n\n // If post is a permalink and not nested (it links directly to the original message),\n // and is missing embedded metadata, then update state with new post metadata\n if (!nestedPermalinkLevel && isPermalink(post) && currentState[post.id] && !currentState[post.id].metadata && post.metadata) {\n currentState[post.id] = {...currentState[post.id], ...post.metadata};\n }\n\n // Edited posts that don't have 'is_following' specified should maintain 'is_following' state\n if (post.update_at > 0 && post.is_following == null && currentState[post.id]) {\n post.is_following = currentState[post.id].is_following;\n }\n\n if (post.delete_at > 0) {\n // We've received a deleted post, so mark the post as deleted if we already have it\n if (currentState[post.id]) {\n currentState[post.id] = {\n ...removeUnneededMetadata(post),\n state: Posts.POST_DELETED,\n file_ids: [],\n has_reactions: false,\n };\n }\n } else if (post.metadata && post.metadata.embeds) {\n post.metadata.embeds.forEach((embed) => {\n if (embed.type === 'permalink') {\n if (embed.data && 'post_id' in embed.data && embed.data.post) {\n currentState = handlePostReceived(currentState, embed.data.post, nestedPermalinkLevel ? nestedPermalinkLevel + 1 : 1);\n\n if (isPermalink(embed.data.post)) {\n currentState[post.id] = removeUnneededMetadata(post);\n }\n }\n }\n });\n\n currentState[post.id] = post;\n } else {\n currentState[post.id] = removeUnneededMetadata(post);\n }\n\n // Delete any pending post that existed for this post\n if (post.pending_post_id && post.id !== post.pending_post_id && currentState[post.pending_post_id]) {\n Reflect.deleteProperty(currentState, post.pending_post_id);\n }\n\n const rootPost: Post = currentState[post.root_id];\n if (post.root_id && rootPost) {\n const participants = rootPost.participants || [];\n const nextRootPost = {...rootPost};\n if (!participants.find((user: UserProfile) => user.id === post.user_id)) {\n nextRootPost.participants = [...participants, {id: post.user_id}];\n }\n\n if (post.reply_count) {\n nextRootPost.reply_count = post.reply_count;\n }\n\n currentState[post.root_id] = nextRootPost;\n }\n\n return currentState;\n}\n\nexport function handlePendingPosts(state: string[] = [], action: MMReduxAction) {\n switch (action.type) {\n case PostTypes.RECEIVED_NEW_POST: {\n const post = action.data;\n\n if (!post.pending_post_id) {\n // This is not a pending post\n return state;\n }\n\n const index = state.indexOf(post.pending_post_id);\n\n if (index !== -1) {\n // An entry already exists for this post\n return state;\n }\n\n // Add the new pending post ID\n const nextState = [...state];\n nextState.push(post.pending_post_id);\n\n return nextState;\n }\n case PostTypes.POST_REMOVED: {\n const post = action.data;\n\n const index = state.indexOf(post.id);\n\n if (index === -1) {\n // There's nothing to remove\n return state;\n }\n\n // The post has been removed, so remove the entry for it\n const nextState = [...state];\n nextState.splice(index, 1);\n\n return nextState;\n }\n case PostTypes.RECEIVED_POST: {\n const post = action.data;\n\n if (!post.pending_post_id) {\n // This isn't a pending post\n return state;\n }\n\n const index = state.indexOf(post.pending_post_id);\n\n if (index === -1) {\n // There's nothing to remove\n return state;\n }\n\n // The post has actually been created, so remove the entry for it\n const nextState = [...state];\n nextState.splice(index, 1);\n\n return nextState;\n }\n\n default:\n return state;\n }\n}\n\nexport function postsInChannel(state: Record<string, PostOrderBlock[]> = {}, action: MMReduxAction, prevPosts: IDMappedObjects<Post>, nextPosts: Record<string, Post>) {\n switch (action.type) {\n case PostTypes.RESET_POSTS_IN_CHANNEL: {\n return {};\n }\n case PostTypes.RECEIVED_NEW_POST: {\n const post = action.data as Post;\n\n if (action.features?.crtEnabled && post.root_id && post.type !== PostConstant.EPHEMERAL) {\n return state;\n }\n\n const postsForChannel = state[post.channel_id];\n if (!postsForChannel) {\n // Don't save newly created posts until the channel has been loaded\n return state;\n }\n\n const recentBlockIndex = postsForChannel.findIndex((block: PostOrderBlock) => block.recent);\n\n let nextRecentBlock: PostOrderBlock;\n if (recentBlockIndex === -1) {\n nextRecentBlock = {\n order: [],\n recent: true,\n };\n } else {\n const recentBlock = postsForChannel[recentBlockIndex];\n nextRecentBlock = {\n ...recentBlock,\n order: [...recentBlock.order],\n };\n }\n\n let changed = false;\n\n // Add the new post to the channel\n if (!nextRecentBlock.order.includes(post.id)) {\n nextRecentBlock.order.unshift(post.id);\n changed = true;\n }\n\n // If this is a newly created post, remove any pending post that exists for it\n if (post.pending_post_id && post.id !== post.pending_post_id) {\n const index = nextRecentBlock.order.indexOf(post.pending_post_id);\n\n if (index !== -1) {\n nextRecentBlock.order.splice(index, 1);\n\n // Need to re-sort to make sure any other pending posts come first\n nextRecentBlock.order.sort((a, b) => {\n return comparePosts(nextPosts[a], nextPosts[b]);\n });\n changed = true;\n }\n }\n\n if (!changed) {\n return state;\n }\n\n const nextPostsForChannel = [...postsForChannel];\n\n if (recentBlockIndex === -1) {\n nextPostsForChannel.push(nextRecentBlock);\n } else {\n nextPostsForChannel[recentBlockIndex] = nextRecentBlock;\n }\n\n return {\n ...state,\n [post.channel_id]: nextPostsForChannel,\n };\n }\n\n case PostTypes.RECEIVED_POST: {\n const post = action.data;\n\n if (action.features?.crtEnabled && post.root_id) {\n return state;\n }\n\n // Receiving a single post doesn't usually affect the order of posts in a channel, except for when we've\n // received a newly created post that was previously stored as pending\n\n if (!post.pending_post_id) {\n return state;\n }\n\n const postsForChannel = state[post.channel_id] || [];\n\n const recentBlockIndex = postsForChannel.findIndex((block: PostOrderBlock) => block.recent);\n if (recentBlockIndex === -1) {\n // Nothing to do since there's no recent block and only the recent block should contain pending posts\n return state;\n }\n\n const recentBlock = postsForChannel[recentBlockIndex];\n\n // Replace the pending post with the newly created one\n const index = recentBlock.order.indexOf(post.pending_post_id);\n if (index === -1) {\n // No pending post found to remove\n return state;\n }\n\n const nextRecentBlock = {\n ...recentBlock,\n order: [...recentBlock.order],\n };\n\n nextRecentBlock.order[index] = post.id;\n\n const nextPostsForChannel = [...postsForChannel];\n nextPostsForChannel[recentBlockIndex] = nextRecentBlock;\n\n return {\n ...state,\n [post.channel_id]: nextPostsForChannel,\n };\n }\n\n case PostTypes.RECEIVED_POSTS_IN_CHANNEL: {\n const {recent, oldest} = action;\n const order = action.data.order;\n\n if (order.length === 0 && state[action.channelId]) {\n // No new posts received when we already have posts\n return state;\n }\n\n const postsForChannel = state[action.channelId] || [];\n let nextPostsForChannel = [...postsForChannel];\n\n if (recent) {\n // The newly received block is now the most recent, so unmark the current most recent block\n const recentBlockIndex = postsForChannel.findIndex((block: PostOrderBlock) => block.recent);\n if (recentBlockIndex !== -1) {\n const recentBlock = postsForChannel[recentBlockIndex];\n\n if (recentBlock.order.length === order.length &&\n recentBlock.order[0] === order[0] &&\n recentBlock.order[recentBlock.order.length - 1] === order[order.length - 1]) {\n // The newly received posts are identical to the most recent block, so there's nothing to do\n return state;\n }\n\n // Unmark the most recent block since the new posts are more recent\n const nextRecentBlock = {\n ...recentBlock,\n recent: false,\n };\n\n nextPostsForChannel[recentBlockIndex] = nextRecentBlock;\n }\n }\n\n // Add the new most recent block\n nextPostsForChannel.push({\n order,\n recent,\n oldest,\n });\n\n // Merge overlapping blocks\n nextPostsForChannel = mergePostBlocks(nextPostsForChannel, nextPosts);\n\n return {\n ...state,\n [action.channelId]: nextPostsForChannel,\n };\n }\n\n case PostTypes.RECEIVED_POSTS_AFTER: {\n const order = action.data.order;\n const afterPostId = action.afterPostId;\n\n if (order.length === 0) {\n // No posts received\n return state;\n }\n\n const postsForChannel = state[action.channelId] || [];\n\n // Add a new block including the previous post and then have mergePostBlocks sort out any overlap or duplicates\n const newBlock = {\n order: [...order, afterPostId],\n recent: action.recent,\n };\n\n let nextPostsForChannel = [...postsForChannel, newBlock];\n nextPostsForChannel = mergePostBlocks(nextPostsForChannel, nextPosts);\n\n return {\n ...state,\n [action.channelId]: nextPostsForChannel,\n };\n }\n\n case PostTypes.RECEIVED_POSTS_BEFORE: {\n const {order} = action.data;\n const {beforePostId, oldest} = action;\n\n if (order.length === 0) {\n // No posts received\n return state;\n }\n\n const postsForChannel = state[action.channelId] || [];\n\n // Add a new block including the next post and then have mergePostBlocks sort out any overlap or duplicates\n const newBlock = {\n order: [beforePostId, ...order],\n recent: false,\n oldest,\n };\n\n let nextPostsForChannel = [...postsForChannel, newBlock];\n nextPostsForChannel = mergePostBlocks(nextPostsForChannel, nextPosts);\n\n return {\n ...state,\n [action.channelId]: nextPostsForChannel,\n };\n }\n\n case PostTypes.RECEIVED_POSTS_SINCE: {\n const order = action.data.order;\n\n if (order.length === 0 && state[action.channelId]) {\n // No new posts received when we already have posts\n return state;\n }\n\n const postsForChannel = state[action.channelId] || [];\n\n const recentBlockIndex = postsForChannel.findIndex((block: PostOrderBlock) => block.recent);\n if (recentBlockIndex === -1) {\n // Nothing to do since this shouldn't be dispatched if we haven't loaded the most recent posts yet\n return state;\n }\n\n const recentBlock = postsForChannel[recentBlockIndex];\n\n const mostOldestCreateAt = nextPosts[recentBlock.order[recentBlock.order.length - 1]].create_at;\n\n const nextRecentBlock: PostOrderBlock = {\n ...recentBlock,\n order: [...recentBlock.order],\n };\n\n // Add any new posts to the most recent block while skipping ones that were only updated\n for (let i = order.length - 1; i >= 0; i--) {\n const postId = order[i];\n\n if (!nextPosts[postId]) {\n // the post was removed from the list\n continue;\n }\n\n if (nextPosts[postId].create_at <= mostOldestCreateAt) {\n // This is an old post\n continue;\n }\n\n if (nextRecentBlock.order.indexOf(postId) !== -1) {\n // This postId exists so no need to add it again\n continue;\n }\n\n // This post is newer than what we have\n nextRecentBlock.order.unshift(postId);\n }\n\n if (nextRecentBlock.order.length === recentBlock.order.length) {\n // Nothing was added\n return state;\n }\n\n nextRecentBlock.order.sort((a, b) => {\n return comparePosts(nextPosts[a], nextPosts[b]);\n });\n\n const nextPostsForChannel = [...postsForChannel];\n nextPostsForChannel[recentBlockIndex] = nextRecentBlock;\n\n return {\n ...state,\n [action.channelId]: nextPostsForChannel,\n };\n }\n\n case PostTypes.POST_DELETED: {\n const post = action.data;\n\n // Deleting a post removes its comments from the order, but does not remove the post itself\n\n const postsForChannel = state[post.channel_id] || [];\n if (postsForChannel.length === 0) {\n return state;\n }\n\n let changed = false;\n\n let nextPostsForChannel = [...postsForChannel];\n for (let i = 0; i < nextPostsForChannel.length; i++) {\n const block = nextPostsForChannel[i];\n\n // Remove any comments for this post\n const nextOrder = block.order.filter((postId: string) => prevPosts[postId].root_id !== post.id);\n\n if (nextOrder.length !== block.order.length) {\n nextPostsForChannel[i] = {\n ...block,\n order: nextOrder,\n };\n\n changed = true;\n }\n }\n\n if (!changed) {\n // Nothing was removed\n return state;\n }\n\n nextPostsForChannel = removeNonRecentEmptyPostBlocks(nextPostsForChannel);\n\n return {\n ...state,\n [post.channel_id]: nextPostsForChannel,\n };\n }\n\n case PostTypes.POST_REMOVED: {\n const post = action.data;\n\n // Removing a post removes it as well as its comments\n\n const postsForChannel = state[post.channel_id] || [];\n if (postsForChannel.length === 0) {\n return state;\n }\n\n let changed = false;\n\n // Remove the post and its comments from the channel\n let nextPostsForChannel = [...postsForChannel];\n for (let i = 0; i < nextPostsForChannel.length; i++) {\n const block = nextPostsForChannel[i];\n\n const nextOrder = block.order.filter((postId: string) => postId !== post.id && prevPosts[postId].root_id !== post.id);\n\n if (nextOrder.length !== block.order.length) {\n nextPostsForChannel[i] = {\n ...block,\n order: nextOrder,\n };\n\n changed = true;\n }\n }\n\n if (!changed) {\n // Nothing was removed\n return state;\n }\n\n nextPostsForChannel = removeNonRecentEmptyPostBlocks(nextPostsForChannel);\n\n return {\n ...state,\n [post.channel_id]: nextPostsForChannel,\n };\n }\n\n case ChannelTypes.RECEIVED_CHANNEL_DELETED:\n case ChannelTypes.DELETE_CHANNEL_SUCCESS:\n case ChannelTypes.LEAVE_CHANNEL: {\n if (action.data && action.data.viewArchivedChannels) {\n // Nothing to do since we still want to store posts in archived channels\n return state;\n }\n\n const channelId = action.data.id;\n\n if (!state[channelId]) {\n // Nothing to do since we have no posts for this channel\n return state;\n }\n\n // Remove the entry for the deleted channel\n const nextState = {...state};\n Reflect.deleteProperty(nextState, channelId);\n\n return nextState;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nexport function removeNonRecentEmptyPostBlocks(blocks: PostOrderBlock[]) {\n return blocks.filter((block: PostOrderBlock) => block.order.length !== 0 || block.recent);\n}\n\nexport function mergePostBlocks(blocks: PostOrderBlock[], posts: Record<string, Post>) {\n let nextBlocks = [...blocks];\n\n // Remove any blocks that may have become empty by removing posts\n nextBlocks = removeNonRecentEmptyPostBlocks(blocks);\n\n // If a channel does not have any posts(Experimental feature where join and leave messages don't exist)\n // return the previous state i.e an empty block\n if (!nextBlocks.length) {\n return blocks;\n }\n\n // Sort blocks so that the most recent one comes first\n nextBlocks.sort((a, b) => {\n const aStartsAt = posts[a.order[0]].create_at;\n const bStartsAt = posts[b.order[0]].create_at;\n\n return bStartsAt - aStartsAt;\n });\n\n // Merge adjacent blocks\n let i = 0;\n while (i < nextBlocks.length - 1) {\n // Since we know the start of a is more recent than the start of b, they'll overlap if the last post in a is\n // older than the first post in b\n const a = nextBlocks[i];\n const aEndsAt = posts[a.order[a.order.length - 1]].create_at;\n\n const b = nextBlocks[i + 1];\n const bStartsAt = posts[b.order[0]].create_at;\n\n if (aEndsAt <= bStartsAt) {\n // The blocks overlap, so combine them and remove the second block\n nextBlocks[i] = {\n order: mergePostOrder(a.order, b.order, posts),\n };\n\n nextBlocks[i].recent = a.recent || b.recent;\n nextBlocks[i].oldest = a.oldest || b.oldest;\n\n nextBlocks.splice(i + 1, 1);\n\n // Do another iteration on this index since it may need to be merged into the next\n } else {\n // The blocks don't overlap, so move on to the next one\n i += 1;\n }\n }\n\n if (blocks.length === nextBlocks.length) {\n // No changes were made\n return blocks;\n }\n\n return nextBlocks;\n}\n\nexport function mergePostOrder(left: string[], right: string[], posts: Record<string, Post>) {\n const result = [...left];\n\n // Add without duplicates\n const seen = new Set(left);\n for (const id of right) {\n if (seen.has(id)) {\n continue;\n }\n\n result.push(id);\n }\n\n if (result.length === left.length) {\n // No new items added\n return left;\n }\n\n // Re-sort so that the most recent post comes first\n result.sort((a, b) => posts[b].create_at - posts[a].create_at);\n\n return result;\n}\n\nexport function postsInThread(state: RelationOneToMany<Post, Post> = {}, action: MMReduxAction, prevPosts: Record<string, Post>) {\n switch (action.type) {\n case PostTypes.RECEIVED_NEW_POST:\n case PostTypes.RECEIVED_POST: {\n const post = action.data;\n\n if (!post.root_id) {\n // Only store comments, not the root post\n return state;\n }\n\n const postsForThread = state[post.root_id] || [];\n const nextPostsForThread = [...postsForThread];\n\n let changed = false;\n\n if (!postsForThread.includes(post.id)) {\n nextPostsForThread.push(post.id);\n changed = true;\n }\n\n // If this is a new non-pending post, remove any pending post that exists for it\n if (post.pending_post_id && post.id !== post.pending_post_id) {\n const index = nextPostsForThread.indexOf(post.pending_post_id);\n\n if (index !== -1) {\n nextPostsForThread.splice(index, 1);\n changed = true;\n }\n }\n\n if (!changed) {\n return state;\n }\n\n return {\n ...state,\n [post.root_id]: nextPostsForThread,\n };\n }\n\n case PostTypes.RECEIVED_POSTS_AFTER:\n case PostTypes.RECEIVED_POSTS_BEFORE:\n case PostTypes.RECEIVED_POSTS_IN_CHANNEL:\n case PostTypes.RECEIVED_POSTS_SINCE: {\n const newPosts: Post[] = Object.values(action.data.posts);\n\n if (newPosts.length === 0) {\n // Nothing to add\n return state;\n }\n\n const nextState: Record<string, string[]> = {};\n\n for (const post of newPosts) {\n if (!post.root_id) {\n // Only store comments, not the root post\n continue;\n }\n\n const postsForThread = state[post.root_id] || [];\n const nextPostsForThread = nextState[post.root_id] || [...postsForThread];\n\n // Add the post to the thread\n if (!nextPostsForThread.includes(post.id)) {\n nextPostsForThread.push(post.id);\n }\n\n nextState[post.root_id] = nextPostsForThread;\n }\n\n if (Object.keys(nextState).length === 0) {\n return state;\n }\n\n return {\n ...state,\n ...nextState,\n };\n }\n\n case PostTypes.RECEIVED_POSTS_IN_THREAD: {\n const newPosts: Post[] = Object.values(action.data.posts);\n\n if (newPosts.length === 0) {\n // Nothing to add\n return state;\n }\n\n const postsForThread = state[action.rootId] || [];\n const nextPostsForThread = [...postsForThread];\n\n for (const post of newPosts) {\n if (post.root_id !== action.rootId) {\n // Only store comments\n continue;\n }\n\n if (nextPostsForThread.includes(post.id)) {\n // Don't store duplicates\n continue;\n }\n\n nextPostsForThread.push(post.id);\n }\n\n return {\n ...state,\n [action.rootId]: nextPostsForThread,\n };\n }\n\n case PostTypes.POST_DELETED: {\n const post = action.data;\n\n const postsForThread = state[post.id];\n if (!postsForThread) {\n // Nothing to remove\n return state;\n }\n\n const nextState = {...state};\n Reflect.deleteProperty(nextState, post.id);\n\n return nextState;\n }\n\n case PostTypes.POST_REMOVED: {\n const post = action.data;\n\n if (post.root_id) {\n // This is a comment, so remove it from the thread\n const postsForThread = state[post.root_id];\n if (!postsForThread) {\n return state;\n }\n\n const index = postsForThread.findIndex((postId) => postId === post.id);\n if (index === -1) {\n return state;\n }\n\n const nextPostsForThread = [...postsForThread];\n nextPostsForThread.splice(index, 1);\n\n return {\n ...state,\n [post.root_id]: nextPostsForThread,\n };\n }\n\n // This is not a comment, so remove any comments on it\n const postsForThread = state[post.id];\n if (!postsForThread) {\n return state;\n }\n\n const nextState = {...state};\n Reflect.deleteProperty(nextState, post.id);\n\n return nextState;\n }\n\n case ChannelTypes.RECEIVED_CHANNEL_DELETED:\n case ChannelTypes.DELETE_CHANNEL_SUCCESS:\n case ChannelTypes.LEAVE_CHANNEL: {\n if (action.data && action.data.viewArchivedChannels) {\n // Nothing to do since we still want to store posts in archived channels\n return state;\n }\n\n const channelId = action.data.id;\n\n let postDeleted = false;\n\n // Remove entries for any thread in the channel\n const nextState = {...state};\n for (const rootId of Object.keys(state)) {\n if (prevPosts[rootId] && prevPosts[rootId].channel_id === channelId) {\n Reflect.deleteProperty(nextState, rootId);\n postDeleted = true;\n }\n }\n\n if (!postDeleted) {\n // Nothing was actually removed\n return state;\n }\n\n return nextState;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nexport function postEditHistory(state: Post[] = [], action: MMReduxAction) {\n switch (action.type) {\n case PostTypes.RECEIVED_POST_HISTORY:\n return action.data;\n case UserTypes.LOGOUT_SUCCESS:\n return [];\n default:\n return state;\n }\n}\n\nfunction currentFocusedPostId(state = '', action: MMReduxAction) {\n switch (action.type) {\n case PostTypes.RECEIVED_FOCUSED_POST:\n return action.data;\n case UserTypes.LOGOUT_SUCCESS:\n return '';\n default:\n return state;\n }\n}\n\nexport function reactions(state: RelationOneToOne<Post, Record<string, Reaction>> = {}, action: MMReduxAction) {\n switch (action.type) {\n case PostTypes.RECEIVED_REACTION: {\n const reaction = action.data as Reaction;\n const nextReactions = {...(state[reaction.post_id] || {})};\n nextReactions[reaction.user_id + '-' + reaction.emoji_name] = reaction;\n\n return {\n ...state,\n [reaction.post_id]: nextReactions,\n };\n }\n case PostTypes.REACTION_DELETED: {\n const reaction = action.data;\n const nextReactions = {...(state[reaction.post_id] || {})};\n if (!nextReactions[reaction.user_id + '-' + reaction.emoji_name]) {\n return state;\n }\n\n Reflect.deleteProperty(nextReactions, reaction.user_id + '-' + reaction.emoji_name);\n\n return {\n ...state,\n [reaction.post_id]: nextReactions,\n };\n }\n\n case PostTypes.RECEIVED_NEW_POST:\n case PostTypes.RECEIVED_POST: {\n const post = action.data;\n\n return storeReactionsForPost(state, post);\n }\n\n case PostTypes.RECEIVED_POSTS: {\n const posts: Post[] = Object.values(action.data.posts);\n\n return posts.reduce(storeReactionsForPost, state);\n }\n\n case PostTypes.POST_DELETED:\n case PostTypes.POST_REMOVED: {\n const post = action.data;\n\n if (post && state[post.id]) {\n const nextState = {...state};\n Reflect.deleteProperty(nextState, post.id);\n\n return nextState;\n }\n\n return state;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nexport function acknowledgements(state: RelationOneToOne<Post, Record<UserProfile['id'], number>> = {}, action: MMReduxAction) {\n switch (action.type) {\n case PostTypes.CREATE_ACK_POST_SUCCESS: {\n const ack = action.data as PostAcknowledgement;\n const oldState = state[ack.post_id] || {};\n\n return {\n ...state,\n [ack.post_id]: {\n ...oldState,\n [ack.user_id]: ack.acknowledged_at,\n },\n };\n }\n case PostTypes.DELETE_ACK_POST_SUCCESS: {\n const ack = action.data;\n\n if (!state[ack.post_id] || !state[ack.post_id][ack.user_id]) {\n return state;\n }\n\n // avoid a race condition\n const acknowledgedAt = state[ack.post_id][ack.user_id];\n if (acknowledgedAt > ack.acknowledged_at) {\n return state;\n }\n\n const nextState = {...(state[ack.post_id])};\n Reflect.deleteProperty(nextState, ack.user_id);\n\n return {\n ...state,\n [ack.post_id]: {\n ...nextState,\n },\n };\n }\n\n case PostTypes.RECEIVED_POST: {\n const post = action.data;\n\n return storeAcknowledgementsForPost(state, post);\n }\n\n case PostTypes.RECEIVED_POSTS: {\n const posts: Post[] = Object.values(action.data.posts);\n\n return posts.reduce(storeAcknowledgementsForPost, state);\n }\n\n case PostTypes.POST_DELETED:\n case PostTypes.POST_REMOVED: {\n const post = action.data;\n\n if (post && state[post.id]) {\n const nextState = {...state};\n Reflect.deleteProperty(nextState, post.id);\n\n return nextState;\n }\n\n return state;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction storeReactionsForPost(state: RelationOneToOne<Post, Record<string, Reaction>>, post: Post) {\n if (!post.metadata || post.delete_at > 0) {\n return state;\n }\n\n const reactionsForPost: Record<string, Reaction> = {};\n if (post.metadata.reactions && post.metadata.reactions.length > 0) {\n for (const reaction of post.metadata.reactions) {\n reactionsForPost[reaction.user_id + '-' + reaction.emoji_name] = reaction;\n }\n }\n\n return {\n ...state,\n [post.id]: reactionsForPost,\n };\n}\n\nfunction storeAcknowledgementsForPost(state: any, post: Post) {\n if (\n !post.metadata ||\n !post.metadata.acknowledgements ||\n !post.metadata.acknowledgements.length ||\n post.delete_at > 0\n ) {\n return state;\n }\n\n const acknowledgementsForPost: Record<UserProfile['id'], number> = {};\n if (post?.metadata?.acknowledgements && post.metadata.acknowledgements.length > 0) {\n for (const ack of post.metadata.acknowledgements) {\n acknowledgementsForPost[ack.user_id] = ack.acknowledged_at;\n }\n }\n\n return {\n ...state,\n [post.id]: acknowledgementsForPost,\n };\n}\n\nexport function openGraph(state: RelationOneToOne<Post, Record<string, OpenGraphMetadata>> = {}, action: MMReduxAction) {\n switch (action.type) {\n case PostTypes.RECEIVED_NEW_POST:\n case PostTypes.RECEIVED_POST: {\n const post = action.data;\n\n return storeOpenGraphForPost(state, post);\n }\n case PostTypes.RECEIVED_POSTS: {\n const posts: Post[] = Object.values(action.data.posts);\n\n return posts.reduce(storeOpenGraphForPost, state);\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction storeOpenGraphForPost(state: any, post: Post) {\n if (!post.metadata || !post.metadata.embeds) {\n return state;\n }\n\n return post.metadata.embeds.reduce((nextState, embed) => {\n // If post contains a permalink, we need to store opengraph data for the embedded message\n if (embed.type === 'permalink' && embed.data && 'post' in embed.data && embed.data.post) {\n const previewPost = embed.data.post;\n\n if (previewPost.metadata && previewPost.metadata.embeds) {\n return previewPost.metadata.embeds.reduce((nextState, embed) => {\n if (embed.type !== 'opengraph' || !embed.data || nextState[previewPost.id]) {\n return nextState;\n }\n\n return {\n ...nextState,\n [previewPost.id]: {[embed.url]: embed.data},\n };\n }, nextState);\n }\n }\n\n if (embed.type !== 'opengraph' || !embed.data) {\n // Not an OpenGraph embed\n return nextState;\n }\n\n const postIdState = nextState[post.id] ? {...nextState[post.id], [embed.url]: embed.data} : {[embed.url]: embed.data};\n return {\n ...nextState,\n [post.id]: postIdState,\n };\n }, state);\n}\n\nfunction messagesHistory(state: Partial<MessageHistory> = {\n messages: [],\n index: {\n post: -1,\n comment: -1,\n },\n}, action: MMReduxAction) {\n switch (action.type) {\n case PostTypes.ADD_MESSAGE_INTO_HISTORY: {\n const nextIndex: Record<string, number> = {};\n let nextMessages = state.messages ? [...state.messages] : [];\n nextMessages.push(action.data);\n nextIndex[Posts.MESSAGE_TYPES.POST] = nextMessages.length;\n nextIndex[Posts.MESSAGE_TYPES.COMMENT] = nextMessages.length;\n\n if (nextMessages.length > Posts.MAX_PREV_MSGS) {\n nextMessages = nextMessages.slice(1, Posts.MAX_PREV_MSGS + 1);\n }\n\n return {\n messages: nextMessages,\n index: nextIndex,\n };\n }\n case PostTypes.RESET_HISTORY_INDEX: {\n const index: Record<string, number> = {};\n index[Posts.MESSAGE_TYPES.POST] = -1;\n index[Posts.MESSAGE_TYPES.COMMENT] = -1;\n\n const messages = state.messages || [];\n const nextIndex = state.index ? {...state.index} : index;\n nextIndex[action.data] = messages.length;\n return {\n messages: state.messages,\n index: nextIndex,\n };\n }\n case PostTypes.MOVE_HISTORY_INDEX_BACK: {\n const index: Record<string, number> = {};\n index[Posts.MESSAGE_TYPES.POST] = -1;\n index[Posts.MESSAGE_TYPES.COMMENT] = -1;\n\n const nextIndex = state.index ? {...state.index} : index;\n if (nextIndex[action.data] > 0) {\n nextIndex[action.data]--;\n }\n return {\n messages: state.messages,\n index: nextIndex,\n };\n }\n case PostTypes.MOVE_HISTORY_INDEX_FORWARD: {\n const index: Record<string, number> = {};\n index[Posts.MESSAGE_TYPES.POST] = -1;\n index[Posts.MESSAGE_TYPES.COMMENT] = -1;\n\n const messages = state.messages || [];\n const nextIndex = state.index ? {...state.index} : index;\n if (nextIndex[action.data] < messages.length) {\n nextIndex[action.data]++;\n }\n return {\n messages: state.messages,\n index: nextIndex,\n };\n }\n case UserTypes.LOGOUT_SUCCESS: {\n const index: Record<string, number> = {};\n index[Posts.MESSAGE_TYPES.POST] = -1;\n index[Posts.MESSAGE_TYPES.COMMENT] = -1;\n\n return {\n messages: [],\n index,\n };\n }\n default:\n return state;\n }\n}\n\nexport const zeroStateLimitedViews = {\n threads: {},\n channels: {},\n};\n\nexport function limitedViews(\n state: PostsState['limitedViews'] = zeroStateLimitedViews,\n action: MMReduxAction,\n): PostsState['limitedViews'] {\n switch (action.type) {\n case PostTypes.RECEIVED_POSTS:\n case PostTypes.RECEIVED_POSTS_AFTER:\n case PostTypes.RECEIVED_POSTS_BEFORE:\n case PostTypes.RECEIVED_POSTS_SINCE:\n case PostTypes.RECEIVED_POSTS_IN_CHANNEL: {\n if (action.data.first_inaccessible_post_time && action.channelId) {\n return {\n ...state,\n channels: {\n ...state.channels,\n [action.channelId]: action.data.first_inaccessible_post_time || 0,\n },\n };\n }\n return state;\n }\n case PostTypes.RECEIVED_POSTS_IN_THREAD: {\n if (action.data.first_inaccessible_post_time && action.rootId) {\n return {\n ...state,\n threads: {\n ...state.threads,\n [action.rootId]: action.data.first_inaccessible_post_time || 0,\n },\n };\n }\n return state;\n }\n case CloudTypes.RECEIVED_CLOUD_LIMITS: {\n const {limits} = action.data;\n\n // If limits change and there is no message limit any more (e.g. upgrade to non limited plan),\n // this state is stale and should be dumped.\n if (!limits?.messages || (!limits?.messages?.history && limits?.messages?.history !== 0)) {\n return zeroStateLimitedViews;\n }\n return state;\n }\n case ChannelTypes.RECEIVED_CHANNEL_DELETED:\n case ChannelTypes.DELETE_CHANNEL_SUCCESS:\n case ChannelTypes.LEAVE_CHANNEL: {\n if (action.data && action.data.viewArchivedChannels) {\n // Nothing to do since we still want to store posts in archived channels\n return state;\n }\n\n const channelId = action.data.id;\n if (!state.channels[channelId]) {\n return state;\n }\n const newState = {\n threads: state.threads,\n channels: {...state.channels},\n };\n delete newState.channels[channelId];\n return newState;\n }\n\n default:\n return state;\n }\n}\n\nexport default function reducer(state: Partial<PostsState> = {}, action: MMReduxAction) {\n const nextPosts = handlePosts(state.posts, action);\n const nextPostsInChannel = postsInChannel(state.postsInChannel, action, state.posts!, nextPosts);\n\n const nextState = {\n\n // Object mapping post ids to post objects\n posts: nextPosts,\n\n // Object mapping post ids to replies count\n postsReplies: nextPostsReplies(state.postsReplies, action),\n\n // Array that contains the pending post ids for those messages that are in transition to being created\n pendingPostIds: handlePendingPosts(state.pendingPostIds, action),\n\n // Object mapping channel ids to an array of posts ids in that channel with the most recent post first\n postsInChannel: nextPostsInChannel,\n\n // Object mapping post root ids to an array of posts ids of comments (but not the root post) in that thread\n // with no guaranteed order\n postsInThread: postsInThread(state.postsInThread, action, state.posts!),\n\n // The post history of selected post\n postEditHistory: postEditHistory(state.postEditHistory, action),\n\n // The current selected focused post (permalink view)\n currentFocusedPostId: currentFocusedPostId(state.currentFocusedPostId, action),\n\n // Object mapping post ids to an object of emoji reactions using userId-emojiName as keys\n reactions: reactions(state.reactions, action),\n\n // Object mapping URLs to their relevant opengraph metadata for link previews\n openGraph: openGraph(state.openGraph, action),\n\n // History of posts and comments\n messagesHistory: messagesHistory(state.messagesHistory, action),\n acknowledgements: acknowledgements(state.acknowledgements, action),\n\n // For cloud instances with a message limit,\n // whether this particular view has messages that are hidden\n // because of the cloud workspace limit.\n limitedViews: limitedViews(state.limitedViews, action),\n };\n\n if (state.posts === nextState.posts && state.postsInChannel === nextState.postsInChannel &&\n state.postsInThread === nextState.postsInThread &&\n state.pendingPostIds === nextState.pendingPostIds &&\n state.postEditHistory === nextState.postEditHistory &&\n state.currentFocusedPostId === nextState.currentFocusedPostId &&\n state.reactions === nextState.reactions &&\n state.acknowledgements === nextState.acknowledgements &&\n state.openGraph === nextState.openGraph &&\n state.messagesHistory === nextState.messagesHistory &&\n state.limitedViews === nextState.limitedViews) {\n // None of the children have changed so don't even let the parent object change\n return state;\n }\n\n return nextState;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {GlobalState} from '@mattermost/types/store';\n\nimport {zeroStateLimitedViews} from '../reducers/entities/posts';\n\nconst state: GlobalState = {\n entities: {\n general: {\n config: {},\n license: {},\n serverVersion: '',\n firstAdminVisitMarketplaceStatus: false,\n firstAdminCompleteSetup: false,\n customProfileAttributes: {},\n },\n users: {\n currentUserId: '',\n isManualStatus: {},\n mySessions: [],\n myAudits: [],\n profiles: {},\n profilesInTeam: {},\n profilesNotInTeam: {},\n profilesWithoutTeam: new Set(),\n profilesInChannel: {},\n profilesNotInChannel: {},\n profilesInGroup: {},\n profilesNotInGroup: {},\n statuses: {},\n stats: {},\n filteredStats: {},\n myUserAccessTokens: {},\n lastActivity: {},\n dndEndTimes: {},\n },\n limits: {\n serverLimits: {\n activeUserCount: 0,\n maxUsersLimit: 0,\n },\n },\n teams: {\n currentTeamId: '',\n teams: {},\n myMembers: {},\n membersInTeam: {},\n stats: {},\n groupsAssociatedToTeam: {},\n totalCount: 0,\n },\n channels: {\n currentChannelId: '',\n channels: {},\n channelsInTeam: {},\n myMembers: {},\n membersInChannel: {},\n stats: {},\n roles: {},\n groupsAssociatedToChannel: {},\n totalCount: 0,\n manuallyUnread: {},\n channelModerations: {},\n channelMemberCountsByGroup: {},\n messageCounts: {},\n channelsMemberCount: {},\n },\n channelBookmarks: {\n byChannelId: {},\n },\n posts: {\n posts: {},\n postsReplies: {},\n postsInChannel: {},\n postsInThread: {},\n pendingPostIds: [],\n postEditHistory: [],\n reactions: {},\n openGraph: {},\n currentFocusedPostId: '',\n messagesHistory: {\n messages: [],\n index: {\n post: -1,\n comment: -1,\n },\n },\n limitedViews: zeroStateLimitedViews,\n acknowledgements: {},\n },\n threads: {\n threadsInTeam: {},\n unreadThreadsInTeam: {},\n threads: {},\n counts: {},\n countsIncludingDirect: {},\n },\n preferences: {\n myPreferences: {},\n userPreferences: {},\n },\n bots: {\n accounts: {},\n },\n admin: {\n logs: [],\n plainLogs: [],\n audits: {},\n config: {},\n environmentConfig: {},\n complianceReports: {},\n ldapGroups: {},\n ldapGroupsCount: 0,\n userAccessTokens: {},\n clusterInfo: [],\n analytics: {},\n teamAnalytics: {},\n dataRetentionCustomPolicies: {},\n dataRetentionCustomPoliciesCount: 0,\n prevTrialLicense: {},\n },\n jobs: {\n jobs: {},\n jobsByTypeList: {},\n },\n integrations: {\n incomingHooks: {},\n incomingHooksTotalCount: 0,\n outgoingHooks: {},\n oauthApps: {},\n systemCommands: {},\n commands: {},\n appsBotIDs: [],\n appsOAuthAppIDs: [],\n outgoingOAuthConnections: {},\n },\n files: {\n files: {},\n filesFromSearch: {},\n fileIdsByPostId: {},\n },\n emojis: {\n customEmoji: {},\n nonExistentEmoji: new Set(),\n },\n search: {\n results: [],\n fileResults: [],\n current: {},\n matches: {},\n flagged: [],\n pinned: {},\n isSearchingTerm: false,\n isSearchGettingMore: false,\n isLimitedResults: -1,\n },\n typing: {},\n roles: {\n roles: {},\n pending: new Set(),\n },\n schemes: {\n schemes: {},\n },\n groups: {\n groups: {},\n syncables: {},\n myGroups: [],\n stats: {},\n },\n channelCategories: {\n byId: {},\n orderByTeam: {},\n },\n apps: {\n main: {\n bindings: [],\n forms: {},\n },\n rhs: {\n bindings: [],\n forms: {},\n },\n pluginEnabled: true,\n },\n cloud: {\n limits: {\n limits: {},\n limitsLoaded: false,\n },\n errors: {},\n },\n hostedCustomer: {\n products: {\n products: {},\n productsLoaded: false,\n },\n },\n usage: {\n files: {\n totalStorage: 0,\n totalStorageLoaded: false,\n },\n messages: {\n history: 0,\n historyLoaded: false,\n },\n teams: {\n active: 0,\n cloudArchived: 0,\n teamsLoaded: false,\n },\n },\n scheduledPosts: {\n byId: {},\n byTeamId: {},\n errorsByTeamId: {},\n byChannelOrThreadId: {},\n },\n },\n errors: [],\n requests: {\n channels: {\n getAllChannels: {\n status: 'not_started',\n error: null,\n },\n getChannels: {\n status: 'not_started',\n error: null,\n },\n myChannels: {\n status: 'not_started',\n error: null,\n },\n createChannel: {\n status: 'not_started',\n error: null,\n },\n },\n general: {\n websocket: {\n status: 'not_started',\n error: null,\n },\n },\n posts: {\n createPost: {\n status: 'not_started',\n error: null,\n },\n editPost: {\n status: 'not_started',\n error: null,\n },\n getPostThread: {\n status: 'not_started',\n error: null,\n },\n },\n teams: {\n getTeams: {\n status: 'not_started',\n error: null,\n },\n },\n users: {\n login: {\n status: 'not_started',\n error: null,\n },\n logout: {\n status: 'not_started',\n error: null,\n },\n autocompleteUsers: {\n status: 'not_started',\n error: null,\n },\n updateMe: {\n status: 'not_started',\n error: null,\n },\n },\n admin: {\n createCompliance: {\n status: 'not_started',\n error: null,\n },\n },\n files: {\n uploadFiles: {\n status: 'not_started',\n error: null,\n },\n },\n roles: {\n getRolesByNames: {\n status: 'not_started',\n error: null,\n },\n getRoleByName: {\n status: 'not_started',\n error: null,\n },\n getRole: {\n status: 'not_started',\n error: null,\n },\n editRole: {\n status: 'not_started',\n error: null,\n },\n },\n },\n websocket: {\n connected: false,\n lastConnectAt: 0,\n lastDisconnectAt: 0,\n connectionId: '',\n serverHostname: '',\n },\n};\nexport default state;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport type {ClusterInfo, AnalyticsRow, AnalyticsState, AdminState} from '@mattermost/types/admin';\nimport type {Audit} from '@mattermost/types/audits';\nimport type {Compliance} from '@mattermost/types/compliance';\nimport type {AdminConfig, EnvironmentConfig} from '@mattermost/types/config';\nimport type {DataRetentionCustomPolicy} from '@mattermost/types/data_retention';\nimport type {MixedUnlinkedGroupRedux} from '@mattermost/types/groups';\nimport type {PluginRedux, PluginStatusRedux} from '@mattermost/types/plugins';\nimport type {SamlCertificateStatus, SamlMetadataResponse} from '@mattermost/types/saml';\nimport type {UserAccessToken, UserProfile} from '@mattermost/types/users';\nimport type {RelationOneToOne, IDMappedObjects} from '@mattermost/types/utilities';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {AdminTypes, UserTypes} from 'mattermost-redux/action_types';\nimport {Stats} from 'mattermost-redux/constants';\nimport PluginState from 'mattermost-redux/constants/plugins';\n\nfunction logs(state: string[] = [], action: MMReduxAction) {\n switch (action.type) {\n case AdminTypes.RECEIVED_LOGS: {\n return action.data;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return [];\n\n default:\n return state;\n }\n}\n\nfunction plainLogs(state: string[] = [], action: MMReduxAction) {\n switch (action.type) {\n case AdminTypes.RECEIVED_PLAIN_LOGS: {\n return action.data;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return [];\n\n default:\n return state;\n }\n}\n\nfunction audits(state: Record<string, Audit> = {}, action: MMReduxAction) {\n switch (action.type) {\n case AdminTypes.RECEIVED_AUDITS: {\n const nextState = {...state};\n for (const audit of action.data) {\n nextState[audit.id] = audit;\n }\n return nextState;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n default:\n return state;\n }\n}\n\nfunction config(state: Partial<AdminConfig> = {}, action: MMReduxAction) {\n switch (action.type) {\n case AdminTypes.RECEIVED_CONFIG: {\n return action.data;\n }\n case AdminTypes.ENABLED_PLUGIN: {\n const nextPluginSettings = {...state.PluginSettings!};\n const nextPluginStates = {...nextPluginSettings.PluginStates};\n nextPluginStates[action.data] = {Enable: true};\n nextPluginSettings.PluginStates = nextPluginStates;\n return {...state, PluginSettings: nextPluginSettings};\n }\n case AdminTypes.DISABLED_PLUGIN: {\n const nextPluginSettings = {...state.PluginSettings!};\n const nextPluginStates = {...nextPluginSettings.PluginStates};\n nextPluginStates[action.data] = {Enable: false};\n nextPluginSettings.PluginStates = nextPluginStates;\n return {...state, PluginSettings: nextPluginSettings};\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n default:\n return state;\n }\n}\n\nfunction prevTrialLicense(state: Partial<AdminConfig> = {}, action: MMReduxAction) {\n switch (action.type) {\n case AdminTypes.PREV_TRIAL_LICENSE_SUCCESS: {\n return action.data;\n }\n default:\n return state;\n }\n}\n\nfunction environmentConfig(state: Partial<EnvironmentConfig> = {}, action: MMReduxAction) {\n switch (action.type) {\n case AdminTypes.RECEIVED_ENVIRONMENT_CONFIG: {\n return action.data;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n default:\n return state;\n }\n}\n\nfunction complianceReports(state: Record<string, Compliance> = {}, action: MMReduxAction) {\n switch (action.type) {\n case AdminTypes.RECEIVED_COMPLIANCE_REPORT: {\n const nextState = {...state};\n nextState[action.data.id] = action.data;\n return nextState;\n }\n case AdminTypes.RECEIVED_COMPLIANCE_REPORTS: {\n const nextState = {...state};\n for (const report of action.data) {\n nextState[report.id] = report;\n }\n return nextState;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n default:\n return state;\n }\n}\n\nfunction clusterInfo(state: ClusterInfo[] = [], action: MMReduxAction) {\n switch (action.type) {\n case AdminTypes.RECEIVED_CLUSTER_STATUS: {\n return action.data;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return [];\n\n default:\n return state;\n }\n}\n\nfunction samlCertStatus(state: Partial<SamlCertificateStatus> = {}, action: MMReduxAction) {\n switch (action.type) {\n case AdminTypes.RECEIVED_SAML_CERT_STATUS: {\n return action.data;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n default:\n return state;\n }\n}\n\nexport function convertAnalyticsRowsToStats(data: AnalyticsRow[], name: string): AnalyticsState {\n const stats: AnalyticsState = {};\n const clonedData = [...data];\n\n if (name === 'post_counts_day') {\n clonedData.reverse();\n stats[Stats.POST_PER_DAY] = clonedData;\n return stats;\n }\n\n if (name === 'bot_post_counts_day') {\n clonedData.reverse();\n stats[Stats.BOT_POST_PER_DAY] = clonedData;\n return stats;\n }\n\n if (name === 'user_counts_with_posts_day') {\n clonedData.reverse();\n stats[Stats.USERS_WITH_POSTS_PER_DAY] = clonedData;\n return stats;\n }\n\n clonedData.forEach((row) => {\n let key;\n switch (row.name) {\n case 'channel_open_count':\n key = Stats.TOTAL_PUBLIC_CHANNELS;\n break;\n case 'channel_private_count':\n key = Stats.TOTAL_PRIVATE_GROUPS;\n break;\n case 'post_count':\n key = Stats.TOTAL_POSTS;\n break;\n case 'unique_user_count':\n key = Stats.TOTAL_USERS;\n break;\n case 'inactive_user_count':\n key = Stats.TOTAL_INACTIVE_USERS;\n break;\n case 'team_count':\n key = Stats.TOTAL_TEAMS;\n break;\n case 'total_websocket_connections':\n key = Stats.TOTAL_WEBSOCKET_CONNECTIONS;\n break;\n case 'total_master_db_connections':\n key = Stats.TOTAL_MASTER_DB_CONNECTIONS;\n break;\n case 'total_read_db_connections':\n key = Stats.TOTAL_READ_DB_CONNECTIONS;\n break;\n case 'daily_active_users':\n key = Stats.DAILY_ACTIVE_USERS;\n break;\n case 'monthly_active_users':\n key = Stats.MONTHLY_ACTIVE_USERS;\n break;\n case 'file_post_count':\n key = Stats.TOTAL_FILE_POSTS;\n break;\n case 'hashtag_post_count':\n key = Stats.TOTAL_HASHTAG_POSTS;\n break;\n case 'incoming_webhook_count':\n key = Stats.TOTAL_IHOOKS;\n break;\n case 'outgoing_webhook_count':\n key = Stats.TOTAL_OHOOKS;\n break;\n case 'command_count':\n key = Stats.TOTAL_COMMANDS;\n break;\n case 'session_count':\n key = Stats.TOTAL_SESSIONS;\n break;\n case 'registered_users':\n key = Stats.REGISTERED_USERS;\n break;\n }\n\n if (key) {\n stats[key] = row.value;\n }\n });\n\n return stats;\n}\n\nfunction analytics(state: AdminState['analytics'] = {}, action: MMReduxAction) {\n switch (action.type) {\n case AdminTypes.RECEIVED_SYSTEM_ANALYTICS: {\n const stats = convertAnalyticsRowsToStats(action.data, action.name);\n return {...state, ...stats};\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n default:\n return state;\n }\n}\n\nfunction teamAnalytics(state: AdminState['teamAnalytics'] = {}, action: MMReduxAction) {\n switch (action.type) {\n case AdminTypes.RECEIVED_TEAM_ANALYTICS: {\n const nextState = {...state};\n const stats = convertAnalyticsRowsToStats(action.data, action.name);\n const analyticsForTeam = {...(nextState[action.teamId] || {}), ...stats};\n nextState[action.teamId] = analyticsForTeam;\n return nextState;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n default:\n return state;\n }\n}\n\nfunction userAccessTokens(state: Record<string, UserAccessToken> = {}, action: MMReduxAction) {\n switch (action.type) {\n case AdminTypes.RECEIVED_USER_ACCESS_TOKEN: {\n return {...state, [action.data.id]: action.data};\n }\n case AdminTypes.RECEIVED_USER_ACCESS_TOKENS_FOR_USER: {\n const nextState: any = {};\n\n for (const uat of action.data) {\n nextState[uat.id] = uat;\n }\n\n return {...state, ...nextState};\n }\n case UserTypes.REVOKED_USER_ACCESS_TOKEN: {\n const nextState = {...state};\n Reflect.deleteProperty(nextState, action.data);\n return {...nextState};\n }\n case UserTypes.ENABLED_USER_ACCESS_TOKEN: {\n const token = {...state[action.data], is_active: true};\n return {...state, [action.data]: token};\n }\n case UserTypes.DISABLED_USER_ACCESS_TOKEN: {\n const token = {...state[action.data], is_active: false};\n return {...state, [action.data]: token};\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction userAccessTokensByUser(state: RelationOneToOne<UserProfile, Record<string, UserAccessToken>> = {}, action: MMReduxAction) {\n switch (action.type) {\n case AdminTypes.RECEIVED_USER_ACCESS_TOKEN: { // UserAccessToken\n const nextUserState: UserAccessToken | Record<string, UserAccessToken> = {...(state[action.data.user_id] || {})};\n nextUserState[action.data.id] = action.data;\n\n return {...state, [action.data.user_id]: nextUserState};\n }\n case AdminTypes.RECEIVED_USER_ACCESS_TOKENS_FOR_USER: { // UserAccessToken[]\n const nextUserState = {...(state[action.userId] || {})};\n\n for (const uat of action.data) {\n nextUserState[uat.id] = uat;\n }\n\n return {...state, [action.userId]: nextUserState};\n }\n case UserTypes.REVOKED_USER_ACCESS_TOKEN: {\n const userIds = Object.keys(state);\n for (let i = 0; i < userIds.length; i++) {\n const userId = userIds[i];\n if (state[userId] && state[userId][action.data]) {\n const nextUserState = {...state[userId]};\n Reflect.deleteProperty(nextUserState, action.data);\n return {...state, [userId]: nextUserState};\n }\n }\n\n return state;\n }\n case UserTypes.ENABLED_USER_ACCESS_TOKEN: {\n const userIds = Object.keys(state);\n for (let i = 0; i < userIds.length; i++) {\n const userId = userIds[i];\n if (state[userId] && state[userId][action.data]) {\n const nextUserState = {...state[userId]};\n const token = {...nextUserState[action.data], is_active: true};\n nextUserState[token.id] = token;\n return {...state, [userId]: nextUserState};\n }\n }\n\n return state;\n }\n case UserTypes.DISABLED_USER_ACCESS_TOKEN: {\n const userIds = Object.keys(state);\n for (let i = 0; i < userIds.length; i++) {\n const userId = userIds[i];\n if (state[userId] && state[userId][action.data]) {\n const nextUserState = {...state[userId]};\n const token = {...nextUserState[action.data], is_active: false};\n nextUserState[token.id] = token;\n return {...state, [userId]: nextUserState};\n }\n }\n\n return state;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n default:\n return state;\n }\n}\n\nfunction plugins(state: Record<string, PluginRedux> = {}, action: MMReduxAction) {\n switch (action.type) {\n case AdminTypes.RECEIVED_PLUGINS: {\n const nextState = {...state};\n const activePlugins = action.data.active;\n for (const plugin of activePlugins) {\n nextState[plugin.id] = {...plugin, active: true};\n }\n\n const inactivePlugins = action.data.inactive;\n for (const plugin of inactivePlugins) {\n nextState[plugin.id] = {...plugin, active: false};\n }\n return nextState;\n }\n case AdminTypes.REMOVED_PLUGIN: {\n const nextState = {...state};\n Reflect.deleteProperty(nextState, action.data);\n return nextState;\n }\n case AdminTypes.ENABLED_PLUGIN: {\n const nextState = {...state};\n const plugin = nextState[action.data];\n if (plugin && !plugin.active) {\n nextState[action.data] = {...plugin, active: true};\n return nextState;\n }\n return state;\n }\n case AdminTypes.DISABLED_PLUGIN: {\n const nextState = {...state};\n const plugin = nextState[action.data];\n if (plugin && plugin.active) {\n nextState[action.data] = {...plugin, active: false};\n return nextState;\n }\n return state;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n default:\n return state;\n }\n}\n\nfunction pluginStatuses(state: Record<string, PluginStatusRedux> = {}, action: MMReduxAction) {\n switch (action.type) {\n case AdminTypes.RECEIVED_PLUGIN_STATUSES: {\n const nextState: any = {};\n\n for (const plugin of (action.data || [])) {\n const id = plugin.plugin_id;\n\n // The plugin may be in different states across the cluster. Pick the highest one to\n // surface an error.\n const pluginState = Math.max((nextState[id] && nextState[id].state) || 0, plugin.state);\n\n const instances = [\n ...((nextState[id] && nextState[id].instances) || []),\n {\n cluster_id: plugin.cluster_id,\n version: plugin.version,\n state: plugin.state,\n },\n ];\n\n nextState[id] = {\n id,\n name: (nextState[id] && nextState[id].name) || plugin.name,\n description: (nextState[id] && nextState[id].description) || plugin.description,\n version: (nextState[id] && nextState[id].version) || plugin.version,\n active: pluginState > 0,\n state: pluginState,\n error: plugin.error,\n instances,\n };\n }\n\n return nextState;\n }\n\n case AdminTypes.ENABLE_PLUGIN_REQUEST: {\n const pluginId = action.data;\n if (!state[pluginId]) {\n return state;\n }\n\n return {\n ...state,\n [pluginId]: {\n ...state[pluginId],\n state: PluginState.PLUGIN_STATE_STARTING,\n },\n };\n }\n\n case AdminTypes.ENABLE_PLUGIN_FAILURE: {\n const pluginId = action.data;\n if (!state[pluginId]) {\n return state;\n }\n\n return {\n ...state,\n [pluginId]: {\n ...state[pluginId],\n state: PluginState.PLUGIN_STATE_NOT_RUNNING,\n },\n };\n }\n\n case AdminTypes.DISABLE_PLUGIN_REQUEST: {\n const pluginId = action.data;\n if (!state[pluginId]) {\n return state;\n }\n\n return {\n ...state,\n [pluginId]: {\n ...state[pluginId],\n state: PluginState.PLUGIN_STATE_STOPPING,\n },\n };\n }\n\n case AdminTypes.REMOVED_PLUGIN: {\n const pluginId = action.data;\n if (!state[pluginId]) {\n return state;\n }\n\n const nextState = {...state};\n Reflect.deleteProperty(nextState, pluginId);\n\n return nextState;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n default:\n return state;\n }\n}\n\nfunction ldapGroupsCount(state = 0, action: MMReduxAction) {\n switch (action.type) {\n case AdminTypes.RECEIVED_LDAP_GROUPS:\n return action.data.count;\n case UserTypes.LOGOUT_SUCCESS:\n return 0;\n default:\n return state;\n }\n}\n\nfunction ldapGroups(state: Record<string, MixedUnlinkedGroupRedux> = {}, action: MMReduxAction) {\n switch (action.type) {\n case AdminTypes.RECEIVED_LDAP_GROUPS: {\n const nextState: any = {};\n for (const group of action.data.groups) {\n nextState[group.primary_key] = group;\n }\n return nextState;\n }\n case AdminTypes.LINKED_LDAP_GROUP: {\n const nextState = {...state};\n if (nextState[action.data.primary_key]) {\n nextState[action.data.primary_key] = action.data;\n }\n return nextState;\n }\n case AdminTypes.UNLINKED_LDAP_GROUP: {\n const nextState = {...state};\n if (nextState[action.data]) {\n nextState[action.data] = {\n ...nextState[action.data],\n mattermost_group_id: undefined,\n has_syncables: undefined,\n failed: false,\n };\n }\n return nextState;\n }\n case AdminTypes.LINK_LDAP_GROUP_FAILURE: {\n const nextState = {...state};\n if (nextState[action.data]) {\n nextState[action.data] = {\n ...nextState[action.data],\n failed: true,\n };\n }\n return nextState;\n }\n case AdminTypes.UNLINK_LDAP_GROUP_FAILURE: {\n const nextState = {...state};\n if (nextState[action.data]) {\n nextState[action.data] = {\n ...nextState[action.data],\n failed: true,\n };\n }\n return nextState;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n default:\n return state;\n }\n}\n\nfunction samlMetadataResponse(state: Partial<SamlMetadataResponse> = {}, action: MMReduxAction) {\n switch (action.type) {\n case AdminTypes.RECEIVED_SAML_METADATA_RESPONSE: {\n return action.data;\n }\n default:\n return state;\n }\n}\n\nfunction dataRetentionCustomPolicies(state: IDMappedObjects<DataRetentionCustomPolicy> = {}, action: MMReduxAction): IDMappedObjects<DataRetentionCustomPolicy> {\n switch (action.type) {\n case AdminTypes.CREATE_DATA_RETENTION_CUSTOM_POLICY_SUCCESS:\n case AdminTypes.RECEIVED_DATA_RETENTION_CUSTOM_POLICY:\n case AdminTypes.UPDATE_DATA_RETENTION_CUSTOM_POLICY_SUCCESS: {\n return {\n ...state,\n [action.data.id]: action.data,\n };\n }\n\n case AdminTypes.RECEIVED_DATA_RETENTION_CUSTOM_POLICIES: {\n const nextState = {...state};\n if (action.data.policies) {\n for (const dataRetention of action.data.policies) {\n nextState[dataRetention.id] = dataRetention;\n }\n }\n return nextState;\n }\n\n case AdminTypes.DELETE_DATA_RETENTION_CUSTOM_POLICY_SUCCESS: {\n const nextState = {...state};\n Reflect.deleteProperty(nextState, action.data.id);\n return nextState;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n default:\n return state;\n }\n}\nfunction dataRetentionCustomPoliciesCount(state = 0, action: MMReduxAction) {\n switch (action.type) {\n case AdminTypes.RECEIVED_DATA_RETENTION_CUSTOM_POLICIES:\n return action.data.total_count;\n case UserTypes.LOGOUT_SUCCESS:\n return 0;\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n\n // array of LogObjects each representing a log entry (JSON)\n logs,\n\n // array of strings each representing a log entry (legacy) with pagination\n plainLogs,\n\n // object where every key is an audit id and has an object with audit details\n audits,\n\n // object representing the server configuration\n config,\n\n // object representing which fields of the server configuration were set through the environment config\n environmentConfig,\n\n // object where every key is a report id and has an object with report details\n complianceReports,\n\n // array of cluster status data\n clusterInfo,\n\n // object with certificate type as keys and boolean statuses as values\n samlCertStatus,\n\n // object with analytic categories as types and numbers as values\n analytics,\n\n // object with team ids as keys and analytics objects as values\n teamAnalytics,\n\n // object with user ids as keys and objects, with token ids as keys, and\n // user access tokens as values without actual token\n userAccessTokensByUser,\n\n // object with token ids as keys, and user access tokens as values without actual token\n userAccessTokens,\n\n // object with plugin ids as keys and objects representing plugin manifests as values\n plugins,\n\n // object with plugin ids as keys and objects representing plugin statuses across the cluster\n pluginStatuses,\n\n // object representing the ldap groups\n ldapGroups,\n\n // total ldap groups\n ldapGroupsCount,\n\n // object representing the metadata response obtained from the IdP\n samlMetadataResponse,\n\n // object representing the custom data retention policies\n dataRetentionCustomPolicies,\n\n // total custom retention policies\n dataRetentionCustomPoliciesCount,\n\n // the last trial license the server used.\n prevTrialLicense,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport type {AppBinding, AppCommandFormMap} from '@mattermost/types/apps';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {AppsTypes} from 'mattermost-redux/action_types';\nimport {validateBindings} from 'mattermost-redux/utils/apps';\n\nexport function mainBindings(state: AppBinding[] = [], action: MMReduxAction): AppBinding[] {\n switch (action.type) {\n case AppsTypes.FAILED_TO_FETCH_APP_BINDINGS: {\n if (!state.length) {\n return state;\n }\n\n return [];\n }\n case AppsTypes.RECEIVED_APP_BINDINGS: {\n const bindings = action.data;\n return validateBindings(bindings);\n }\n case AppsTypes.APPS_PLUGIN_DISABLED: {\n if (!state.length) {\n return state;\n }\n\n return [];\n }\n default:\n return state;\n }\n}\n\nfunction mainForms(state: AppCommandFormMap = {}, action: MMReduxAction): AppCommandFormMap {\n switch (action.type) {\n case AppsTypes.RECEIVED_APP_BINDINGS:\n return {};\n case AppsTypes.RECEIVED_APP_COMMAND_FORM: {\n const {form, location} = action.data;\n const newState = {\n ...state,\n [location]: form,\n };\n return newState;\n }\n default:\n return state;\n }\n}\n\nconst main = combineReducers({\n bindings: mainBindings,\n forms: mainForms,\n});\n\nfunction rhsBindings(state: AppBinding[] = [], action: MMReduxAction): AppBinding[] {\n switch (action.type) {\n case AppsTypes.RECEIVED_APP_RHS_BINDINGS: {\n const bindings = action.data;\n return validateBindings(bindings);\n }\n default:\n return state;\n }\n}\n\nfunction rhsForms(state: AppCommandFormMap = {}, action: MMReduxAction): AppCommandFormMap {\n switch (action.type) {\n case AppsTypes.RECEIVED_APP_RHS_BINDINGS:\n return {};\n case AppsTypes.RECEIVED_APP_RHS_COMMAND_FORM: {\n const {form, location} = action.data;\n const newState = {\n ...state,\n [location]: form,\n };\n return newState;\n }\n default:\n return state;\n }\n}\n\nconst rhs = combineReducers({\n bindings: rhsBindings,\n forms: rhsForms,\n});\n\nexport function pluginEnabled(state = true, action: MMReduxAction): boolean {\n switch (action.type) {\n case AppsTypes.APPS_PLUGIN_ENABLED: {\n return true;\n }\n case AppsTypes.APPS_PLUGIN_DISABLED: {\n return false;\n }\n case AppsTypes.RECEIVED_APP_BINDINGS: {\n return true;\n }\n case AppsTypes.FAILED_TO_FETCH_APP_BINDINGS: {\n return false;\n }\n\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n main,\n rhs,\n pluginEnabled,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport type {Bot} from '@mattermost/types/bots';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {BotTypes, UserTypes} from 'mattermost-redux/action_types';\n\nfunction accounts(state: Record<string, Bot> = {}, action: MMReduxAction) {\n switch (action.type) {\n case BotTypes.RECEIVED_BOT_ACCOUNTS: {\n const newBots = action.data;\n const nextState = {...state};\n for (const bot of newBots) {\n nextState[bot.user_id] = bot;\n }\n return nextState;\n }\n case BotTypes.RECEIVED_BOT_ACCOUNT: {\n const bot = action.data;\n const nextState = {...state};\n nextState[bot.user_id] = bot;\n return nextState;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n accounts,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport type {ChannelBookmark, ChannelBookmarksState} from '@mattermost/types/channel_bookmarks';\nimport type {Channel} from '@mattermost/types/channels';\nimport type {IDMappedObjects} from '@mattermost/types/utilities';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {ChannelBookmarkTypes, UserTypes, ChannelTypes} from 'mattermost-redux/action_types';\n\nconst toNewObj = <T extends {id: string}>(current: IDMappedObjects<T>, arr: T[]) => {\n return arr.reduce((acc, x) => {\n return {...acc, [x.id]: x};\n }, {...current});\n};\n\nexport function byChannelId(state: ChannelBookmarksState['byChannelId'] = {}, action: MMReduxAction) {\n switch (action.type) {\n case ChannelBookmarkTypes.RECEIVED_BOOKMARKS: {\n const channelId: Channel['id'] = action.data.channelId;\n const bookmarks: ChannelBookmark[] = action.data.bookmarks;\n\n return {\n ...state,\n [channelId]: toNewObj(state[channelId], bookmarks),\n };\n }\n\n case ChannelBookmarkTypes.RECEIVED_BOOKMARK: {\n const bookmark: ChannelBookmark = action.data;\n const {id, channel_id: channelId} = bookmark;\n\n return {\n ...state,\n [channelId]: {\n ...state[channelId],\n [id]: bookmark,\n },\n };\n }\n\n case ChannelBookmarkTypes.BOOKMARK_DELETED: {\n const bookmark: ChannelBookmark = action.data;\n\n const channelNextState = {...state[bookmark.channel_id]};\n\n Reflect.deleteProperty(channelNextState, bookmark.id);\n\n const nextState = {...state, [bookmark.channel_id]: channelNextState};\n\n return nextState;\n }\n\n case ChannelTypes.LEAVE_CHANNEL: {\n const channelId: string = action.data.channelId;\n\n const nextState = {...state};\n\n Reflect.deleteProperty(nextState, channelId);\n\n return nextState;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n byChannelId,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport type {ChannelCategory} from '@mattermost/types/channel_categories';\nimport type {Channel} from '@mattermost/types/channels';\nimport type {Team} from '@mattermost/types/teams';\nimport type {IDMappedObjects, RelationOneToOne} from '@mattermost/types/utilities';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {ChannelCategoryTypes, TeamTypes, UserTypes, ChannelTypes} from 'mattermost-redux/action_types';\nimport {removeItem} from 'mattermost-redux/utils/array_utils';\n\nexport function byId(state: IDMappedObjects<ChannelCategory> = {}, action: MMReduxAction) {\n switch (action.type) {\n case ChannelCategoryTypes.RECEIVED_CATEGORIES: {\n const categories: ChannelCategory[] = action.data;\n\n return categories.reduce((nextState, category) => {\n return {\n ...nextState,\n [category.id]: {\n ...nextState[category.id],\n ...category,\n collapsed: action.isWebSocket ? state[category.id].collapsed : category.collapsed,\n },\n };\n }, state);\n }\n case ChannelCategoryTypes.RECEIVED_CATEGORY: {\n const category: ChannelCategory = action.data;\n\n return {\n ...state,\n [category.id]: {\n ...state[category.id],\n ...category,\n },\n };\n }\n\n case ChannelCategoryTypes.CATEGORY_DELETED: {\n const categoryId: ChannelCategory['id'] = action.data;\n\n const nextState = {...state};\n\n Reflect.deleteProperty(nextState, categoryId);\n\n return nextState;\n }\n\n case ChannelTypes.LEAVE_CHANNEL: {\n const channelId: string = action.data.id;\n\n const nextState = {...state};\n let changed = false;\n\n for (const category of Object.values(state)) {\n const index = category.channel_ids.indexOf(channelId);\n\n if (index === -1) {\n continue;\n }\n\n const nextChannelIds = [...category.channel_ids];\n nextChannelIds.splice(index, 1);\n\n nextState[category.id] = {\n ...category,\n channel_ids: nextChannelIds,\n };\n\n changed = true;\n }\n\n return changed ? nextState : state;\n }\n case TeamTypes.LEAVE_TEAM: {\n const team: Team = action.data;\n\n const nextState = {...state};\n let changed = false;\n\n for (const category of Object.values(state)) {\n if (category.team_id !== team.id) {\n continue;\n }\n\n Reflect.deleteProperty(nextState, category.id);\n changed = true;\n }\n\n return changed ? nextState : state;\n }\n case ChannelTypes.GM_CONVERTED_TO_CHANNEL: {\n // For GM to Private channel conversion feature\n // In the case when someone converts your GM to a private channel and moves it to a team\n // you're not currently on, we need to remove the channel from \"direct messages\" category\n // and add it to \"channels\" category of target team. Even though the server sends a websocket event about updated category data,\n // it does so only for the team the channel got moved into, and not every team a user is part of, for performance reasons.\n // For every other team, we update the state here. Everything is correct on server side, but we update state here\n // to avoid re-fetching all categories again for all teams.\n\n const receivedChannel = action.data as Channel;\n const newState: IDMappedObjects<ChannelCategory> = {};\n const categoryIDs = Object.keys(state);\n\n categoryIDs.forEach((categoryID) => {\n if (categoryID.startsWith('channels_') && state[categoryID].team_id === receivedChannel.team_id && state[categoryID].channel_ids.indexOf(receivedChannel.id) < 0) {\n // We don't need to worry about adding the channel in the right order as this is only\n // an intermediate step, meant to handle the edge case of missing the upcoming \"update category\"\n // websocket message, triggered on conversion of GM to private channel.\n newState[categoryID] = {\n ...state[categoryID],\n channel_ids: [...state[categoryID].channel_ids, receivedChannel.id],\n };\n } else {\n newState[categoryID] = {\n ...state[categoryID],\n channel_ids: state[categoryID].channel_ids.filter((channelID) => channelID !== receivedChannel.id),\n };\n }\n });\n\n return newState;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nexport function orderByTeam(state: RelationOneToOne<Team, Array<ChannelCategory['id']>> = {}, action: MMReduxAction) {\n switch (action.type) {\n case ChannelCategoryTypes.RECEIVED_CATEGORY_ORDER: {\n const teamId: string = action.data.teamId;\n const order: string[] = action.data.order;\n\n return {\n ...state,\n [teamId]: order,\n };\n }\n\n case ChannelCategoryTypes.CATEGORY_DELETED: {\n const categoryId: ChannelCategory['id'] = action.data;\n\n const nextState = {...state};\n\n for (const teamId of Object.keys(nextState)) {\n // removeItem only modifies the array if it contains the category ID, so other teams' state won't be modified\n nextState[teamId] = removeItem(state[teamId], categoryId);\n }\n\n return nextState;\n }\n\n case TeamTypes.LEAVE_TEAM: {\n const team: Team = action.data;\n\n if (!state[team.id]) {\n return state;\n }\n\n const nextState = {...state};\n Reflect.deleteProperty(nextState, team.id);\n\n return nextState;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n byId,\n orderByTeam,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {\n Channel,\n ChannelMessageCount,\n ServerChannel,\n} from '@mattermost/types/channels';\nimport type {RelationOneToOne} from '@mattermost/types/utilities';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {\n AdminTypes,\n ChannelTypes,\n UserTypes,\n SchemeTypes,\n} from 'mattermost-redux/action_types';\nimport {General} from 'mattermost-redux/constants';\n\nexport default function messageCounts(state: RelationOneToOne<Channel, ChannelMessageCount> = {}, action: MMReduxAction): RelationOneToOne<Channel, ChannelMessageCount> {\n switch (action.type) {\n case ChannelTypes.RECEIVED_CHANNEL: {\n const channel: ServerChannel = action.data;\n\n return updateMessageCount(state, channel);\n }\n case AdminTypes.RECEIVED_DATA_RETENTION_CUSTOM_POLICY_CHANNELS: {\n const channels: ServerChannel[] = action.data.channels;\n\n return channels.reduce(updateMessageCount, state);\n }\n case AdminTypes.RECEIVED_DATA_RETENTION_CUSTOM_POLICY_CHANNELS_SEARCH:\n case ChannelTypes.RECEIVED_CHANNELS:\n case ChannelTypes.RECEIVED_ALL_CHANNELS:\n case SchemeTypes.RECEIVED_SCHEME_CHANNELS: {\n const channels: ServerChannel[] = action.data;\n\n return channels.reduce(updateMessageCount, state);\n }\n\n case ChannelTypes.LEAVE_CHANNEL: {\n const channel: ServerChannel | undefined = action.data;\n\n if (!channel || channel.type !== General.OPEN_CHANNEL) {\n return state;\n }\n\n const nextState = {...state};\n Reflect.deleteProperty(nextState, channel.id);\n return nextState;\n }\n\n case ChannelTypes.INCREMENT_TOTAL_MSG_COUNT: {\n const channelId: string = action.data.channelId;\n const amount: number = action.data.amount;\n const amountRoot: number = action.data.amountRoot;\n\n const existing = state[channelId];\n\n if (!existing) {\n return state;\n }\n\n return {\n ...state,\n [channelId]: {\n root: existing.root + amountRoot,\n total: existing.total + amount,\n },\n };\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nexport function updateMessageCount(state: RelationOneToOne<Channel, ChannelMessageCount>, channel: ServerChannel) {\n const existing = state[channel.id];\n if (\n existing &&\n existing.root === channel.total_msg_count_root &&\n existing.total === channel.total_msg_count\n ) {\n return state;\n }\n\n return {\n ...state,\n [channel.id]: {\n root: channel.total_msg_count_root,\n total: channel.total_msg_count,\n },\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport isEqual from 'lodash/isEqual';\nimport type {AnyAction} from 'redux';\nimport {combineReducers} from 'redux';\n\nimport type {\n Channel,\n ChannelMembership,\n ChannelStats,\n ChannelMemberCountByGroup,\n ChannelMemberCountsByGroup,\n ServerChannel,\n ChannelsState,\n} from '@mattermost/types/channels';\nimport type {Group} from '@mattermost/types/groups';\nimport type {Team} from '@mattermost/types/teams';\nimport type {\n RelationOneToManyUnique,\n RelationOneToOne,\n IDMappedObjects,\n} from '@mattermost/types/utilities';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {AdminTypes, ChannelTypes, UserTypes, SchemeTypes, GroupTypes, PostTypes} from 'mattermost-redux/action_types';\nimport {General} from 'mattermost-redux/constants';\nimport {MarkUnread} from 'mattermost-redux/constants/channels';\nimport {channelListToMap, splitRoles} from 'mattermost-redux/utils/channel_utils';\n\nimport messageCounts from './channels/message_counts';\n\nfunction removeMemberFromChannels(state: RelationOneToOne<Channel, Record<string, ChannelMembership>>, action: AnyAction) {\n const nextState = {...state};\n Object.keys(state).forEach((channel) => {\n nextState[channel] = {...nextState[channel]};\n delete nextState[channel][action.data.user_id];\n });\n return nextState;\n}\n\nfunction channelListToSet(state: RelationOneToManyUnique<Team, Channel>, action: AnyAction) {\n const nextState = {...state};\n\n action.data.forEach((channel: Channel) => {\n const nextSet = new Set(nextState[channel.team_id]);\n nextSet.add(channel.id);\n nextState[channel.team_id] = nextSet;\n });\n\n return nextState;\n}\n\nfunction removeChannelFromSet(state: RelationOneToManyUnique<Team, Channel>, action: AnyAction): RelationOneToManyUnique<Team, Channel> {\n const id = action.data.team_id;\n const nextSet = new Set(state[id]);\n nextSet.delete(action.data.id);\n return {\n ...state,\n [id]: nextSet,\n };\n}\n\nfunction currentChannelId(state = '', action: MMReduxAction) {\n switch (action.type) {\n case ChannelTypes.SELECT_CHANNEL:\n return action.data;\n case UserTypes.LOGOUT_SUCCESS:\n return '';\n default:\n return state;\n }\n}\n\nfunction channels(state: IDMappedObjects<Channel> = {}, action: MMReduxAction) {\n switch (action.type) {\n case ChannelTypes.RECEIVED_CHANNEL: {\n const channel: Channel = toClientChannel(action.data);\n\n if (state[channel.id] && channel.type === General.DM_CHANNEL) {\n channel.display_name = channel.display_name || state[channel.id].display_name;\n }\n\n return {\n ...state,\n [channel.id]: channel,\n };\n }\n case AdminTypes.RECEIVED_DATA_RETENTION_CUSTOM_POLICY_CHANNELS: {\n const channels: Channel[] = action.data.channels.map(toClientChannel);\n\n if (channels.length === 0) {\n return state;\n }\n\n return {\n ...state,\n ...channelListToMap(channels),\n };\n }\n case AdminTypes.RECEIVED_DATA_RETENTION_CUSTOM_POLICY_CHANNELS_SEARCH:\n case ChannelTypes.RECEIVED_CHANNELS:\n case ChannelTypes.RECEIVED_ALL_CHANNELS:\n case SchemeTypes.RECEIVED_SCHEME_CHANNELS: {\n const channels: Channel[] = action.data.map(toClientChannel);\n\n if (channels.length === 0) {\n return state;\n }\n\n const nextState = {...state};\n\n for (let channel of channels) {\n if (state[channel.id] && channel.type === General.DM_CHANNEL && !channel.display_name) {\n channel = {...channel, display_name: state[channel.id].display_name};\n }\n nextState[channel.id] = channel;\n }\n\n return nextState;\n }\n case ChannelTypes.RECEIVED_CHANNEL_DELETED: {\n const {id, deleteAt} = action.data;\n\n if (!state[id]) {\n return state;\n }\n\n return {\n ...state,\n [id]: {\n ...state[id],\n delete_at: deleteAt,\n },\n };\n }\n case ChannelTypes.RECEIVED_CHANNEL_UNARCHIVED: {\n const {id} = action.data;\n\n if (!state[id]) {\n return state;\n }\n\n return {\n ...state,\n [id]: {\n ...state[id],\n delete_at: 0,\n },\n };\n }\n case ChannelTypes.LEAVE_CHANNEL: {\n if (action.data) {\n const nextState = {...state};\n Reflect.deleteProperty(nextState, action.data.id);\n return nextState;\n }\n return state;\n }\n\n case PostTypes.RECEIVED_NEW_POST: {\n const {channel_id: channelId, create_at: createAt, root_id: rootId} = action.data;\n const isCrtReply = action.features?.crtEnabled && rootId !== '';\n\n const channel = state[channelId];\n\n if (!channel) {\n return state;\n }\n\n const lastRootPostAt = isCrtReply ? channel.last_root_post_at : Math.max(createAt, channel.last_root_post_at);\n\n return {\n ...state,\n [channelId]: {\n ...channel,\n last_post_at: Math.max(createAt, channel.last_post_at),\n last_root_post_at: lastRootPostAt,\n },\n };\n }\n\n case ChannelTypes.UPDATED_CHANNEL_SCHEME: {\n const {channelId, schemeId} = action.data;\n const channel = state[channelId];\n\n if (!channel) {\n return state;\n }\n\n return {...state, [channelId]: {...channel, scheme_id: schemeId}};\n }\n\n case AdminTypes.REMOVE_DATA_RETENTION_CUSTOM_POLICY_CHANNELS_SUCCESS: {\n const {channels} = action.data;\n const nextState = {...state};\n channels.forEach((channelId: string) => {\n if (nextState[channelId]) {\n nextState[channelId] = {\n ...nextState[channelId],\n policy_id: null,\n };\n }\n });\n\n return nextState;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction toClientChannel(serverChannel: ServerChannel): Channel {\n const channel = {...serverChannel};\n\n Reflect.deleteProperty(channel, 'total_msg_count');\n Reflect.deleteProperty(channel, 'total_msg_count_root');\n\n return channel;\n}\n\nfunction channelsInTeam(state: ChannelsState['channelsInTeam'] = {}, action: MMReduxAction) {\n switch (action.type) {\n case ChannelTypes.RECEIVED_CHANNEL: {\n const nextSet = new Set(state[action.data.team_id]);\n nextSet.add(action.data.id);\n return {\n ...state,\n [action.data.team_id]: nextSet,\n };\n }\n case ChannelTypes.RECEIVED_CHANNELS: {\n return channelListToSet(state, action);\n }\n case ChannelTypes.LEAVE_CHANNEL: {\n if (action.data) {\n return removeChannelFromSet(state, action);\n }\n return state;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nexport function myMembers(state: RelationOneToOne<Channel, ChannelMembership> = {}, action: MMReduxAction) {\n switch (action.type) {\n case ChannelTypes.RECEIVED_MY_CHANNEL_MEMBER: {\n const channelMember: ChannelMembership = action.data;\n\n return receiveChannelMember(state, channelMember);\n }\n case ChannelTypes.RECEIVED_MY_CHANNEL_MEMBERS: {\n const nextState = {...state};\n const remove = action.remove as string[];\n if (remove) {\n remove.forEach((id: string) => {\n Reflect.deleteProperty(nextState, id);\n });\n }\n\n const channelMembers: ChannelMembership[] = action.data;\n\n return channelMembers.reduce(receiveChannelMember, state);\n }\n case ChannelTypes.RECEIVED_CHANNEL_PROPS: {\n const member = {...state[action.data.channel_id]};\n member.notify_props = action.data.notifyProps;\n\n return {\n ...state,\n [action.data.channel_id]: member,\n };\n }\n case ChannelTypes.SET_CHANNEL_MUTED: {\n const {channelId, muted} = action.data;\n\n if (!state[channelId]) {\n return state;\n }\n\n return {\n ...state,\n [channelId]: {\n ...state[channelId],\n notify_props: {\n ...state[channelId].notify_props,\n mark_unread: muted ? MarkUnread.MENTION : MarkUnread.ALL,\n },\n },\n };\n }\n case ChannelTypes.INCREMENT_UNREAD_MSG_COUNT: {\n const {\n channelId,\n amount,\n amountRoot,\n onlyMentions,\n fetchedChannelMember,\n } = action.data;\n const member = state[channelId];\n\n if (amount === 0 && amountRoot === 0) {\n return state;\n }\n\n if (!member) {\n // Don't keep track of unread posts until we've loaded the actual channel member\n return state;\n }\n\n if (!onlyMentions) {\n // Incrementing the msg_count marks the channel as read, so don't do that if these posts should be unread\n return state;\n }\n\n if (fetchedChannelMember) {\n // We've already updated the channel member with the correct msg_count\n return state;\n }\n\n return {\n ...state,\n [channelId]: {\n ...member,\n msg_count: member.msg_count + amount,\n msg_count_root: member.msg_count_root + amountRoot,\n },\n };\n }\n case ChannelTypes.DECREMENT_UNREAD_MSG_COUNT: {\n const {channelId, amount, amountRoot} = action.data;\n\n if (amount === 0 && amountRoot === 0) {\n return state;\n }\n\n const member = state[channelId];\n\n if (!member) {\n // Don't keep track of unread posts until we've loaded the actual channel member\n return state;\n }\n\n return {\n ...state,\n [channelId]: {\n ...member,\n msg_count: member.msg_count + amount,\n msg_count_root: member.msg_count_root + amountRoot,\n },\n };\n }\n case ChannelTypes.INCREMENT_UNREAD_MENTION_COUNT: {\n const {\n channelId,\n amount,\n amountRoot,\n amountUrgent,\n fetchedChannelMember,\n } = action.data;\n\n if (amount === 0 && amountRoot === 0) {\n return state;\n }\n\n const member = state[channelId];\n\n if (!member) {\n // Don't keep track of unread posts until we've loaded the actual channel member\n return state;\n }\n\n if (fetchedChannelMember) {\n // We've already updated the channel member with the correct msg_count\n return state;\n }\n\n return {\n ...state,\n [channelId]: {\n ...member,\n mention_count: member.mention_count + amount,\n mention_count_root: member.mention_count_root + amountRoot,\n urgent_mention_count: member.urgent_mention_count + amountUrgent,\n\n },\n };\n }\n case ChannelTypes.DECREMENT_UNREAD_MENTION_COUNT: {\n const {channelId, amount, amountRoot, amountUrgent} = action.data;\n\n if (amount === 0 && amountRoot === 0) {\n return state;\n }\n\n const member = state[channelId];\n\n if (!member) {\n // Don't keep track of unread posts until we've loaded the actual channel member\n return state;\n }\n\n return {\n ...state,\n [channelId]: {\n ...member,\n mention_count: Math.max(member.mention_count - amount, 0),\n mention_count_root: Math.max(member.mention_count_root - amountRoot, 0),\n urgent_mention_count: Math.max(member.urgent_mention_count - amountUrgent, 0),\n },\n };\n }\n case ChannelTypes.RECEIVED_LAST_VIEWED_AT: {\n const {data} = action;\n let member = state[data.channel_id];\n\n if (member.last_viewed_at === data.last_viewed_at) {\n return state;\n }\n\n member = {\n ...member,\n last_viewed_at: data.last_viewed_at,\n };\n\n return {\n ...state,\n [action.data.channel_id]: member,\n };\n }\n case ChannelTypes.LEAVE_CHANNEL: {\n const nextState = {...state};\n if (action.data) {\n Reflect.deleteProperty(nextState, action.data.id);\n return nextState;\n }\n\n return state;\n }\n case ChannelTypes.UPDATED_CHANNEL_MEMBER_SCHEME_ROLES: {\n return updateChannelMemberSchemeRoles(state, action);\n }\n case ChannelTypes.POST_UNREAD_SUCCESS: {\n const data = action.data;\n const channelState = state[data.channelId];\n\n if (!channelState) {\n return state;\n }\n\n return {\n ...state,\n [data.channelId]: {\n ...channelState,\n msg_count: data.msgCount,\n mention_count: data.mentionCount,\n msg_count_root: data.msgCountRoot,\n mention_count_root: data.mentionCountRoot,\n urgent_mention_count: data.urgentMentionCount,\n last_viewed_at: data.lastViewedAt,\n },\n };\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction receiveChannelMember(state: RelationOneToOne<Channel, ChannelMembership>, received: ChannelMembership) {\n const existingChannelMember = state[received.channel_id];\n let updatedChannelMember = {...received};\n\n if (isEqual(existingChannelMember, updatedChannelMember)) {\n return state;\n }\n\n // https://github.com/mattermost/mattermost-webapp/pull/10589 and\n // https://github.com/mattermost/mattermost-webapp/pull/11094\n if (existingChannelMember &&\n updatedChannelMember.last_viewed_at < existingChannelMember.last_viewed_at &&\n updatedChannelMember.last_update_at <= existingChannelMember.last_update_at) {\n // The last_viewed_at should almost never decrease upon receiving a member, so if it does, assume that the\n // unread state of the existing channel member is correct. See MM-44900 for more information.\n updatedChannelMember = {\n ...received,\n last_viewed_at: Math.max(existingChannelMember.last_viewed_at, received.last_viewed_at),\n last_update_at: Math.max(existingChannelMember.last_update_at, received.last_update_at),\n msg_count: Math.max(existingChannelMember.msg_count, received.msg_count),\n msg_count_root: Math.max(existingChannelMember.msg_count_root, received.msg_count_root),\n mention_count: Math.min(existingChannelMember.mention_count, received.mention_count),\n urgent_mention_count: Math.min(existingChannelMember.urgent_mention_count, received.urgent_mention_count),\n mention_count_root: Math.min(existingChannelMember.mention_count_root, received.mention_count_root),\n };\n }\n\n return {\n ...state,\n [updatedChannelMember.channel_id]: updatedChannelMember,\n };\n}\n\nfunction membersInChannel(state: RelationOneToOne<Channel, Record<string, ChannelMembership>> = {}, action: MMReduxAction) {\n switch (action.type) {\n case ChannelTypes.RECEIVED_MY_CHANNEL_MEMBER:\n case ChannelTypes.RECEIVED_CHANNEL_MEMBER: {\n const member = action.data;\n const members = {...(state[member.channel_id] || {})};\n if ((!members[member.user_id]) ||\n (member.last_update_at > members[member.user_id]?.last_update_at) ||\n (member.roles !== members[member.user_id]?.roles)) {\n members[member.user_id] = member;\n return {\n ...state,\n [member.channel_id]: members,\n };\n }\n return {\n ...state,\n };\n }\n case ChannelTypes.RECEIVED_MY_CHANNEL_MEMBERS:\n case ChannelTypes.RECEIVED_CHANNEL_MEMBERS: {\n const nextState = {...state};\n const remove = action.remove as string[];\n const currentUserId = action.currentUserId;\n if (remove && currentUserId) {\n remove.forEach((id) => {\n if (nextState[id]) {\n Reflect.deleteProperty(nextState[id], currentUserId);\n }\n });\n }\n\n for (const cm of action.data) {\n if (nextState[cm.channel_id]) {\n nextState[cm.channel_id] = {...nextState[cm.channel_id]};\n } else {\n nextState[cm.channel_id] = {};\n }\n nextState[cm.channel_id][cm.user_id] = cm;\n }\n return nextState;\n }\n\n case UserTypes.PROFILE_NO_LONGER_VISIBLE:\n return removeMemberFromChannels(state, action);\n\n case ChannelTypes.LEAVE_CHANNEL:\n case ChannelTypes.REMOVE_MEMBER_FROM_CHANNEL:\n case UserTypes.RECEIVED_PROFILE_NOT_IN_CHANNEL: {\n if (action.data) {\n const data = action.data;\n const members = {...(state[data.id] || {})};\n if (state[data.id]) {\n Reflect.deleteProperty(members, data.user_id);\n return {\n ...state,\n [data.id]: members,\n };\n }\n }\n\n return state;\n }\n case ChannelTypes.UPDATED_CHANNEL_MEMBER_SCHEME_ROLES: {\n return updateChannelMemberSchemeRoles(state, action);\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction stats(state: RelationOneToOne<Channel, ChannelStats> = {}, action: MMReduxAction) {\n switch (action.type) {\n case ChannelTypes.RECEIVED_CHANNEL_STATS: {\n const stat: ChannelStats = action.data;\n\n if (isEqual(state[stat.channel_id], stat)) {\n return state;\n }\n\n return {\n ...state,\n [stat.channel_id]: stat,\n };\n }\n case ChannelTypes.ADD_CHANNEL_MEMBER_SUCCESS: {\n const nextState = {...state};\n const id = action.id;\n const receivedCount = action.count ? action.count : 1;\n const nextStat = nextState[id];\n if (nextStat) {\n const count = nextStat.member_count + receivedCount;\n return {\n ...nextState,\n [id]: {\n ...nextStat,\n member_count: count,\n },\n };\n }\n\n return state;\n }\n case ChannelTypes.REMOVE_CHANNEL_MEMBER_SUCCESS: {\n const nextState = {...state};\n const id = action.id;\n const nextStat = nextState[id];\n if (nextStat) {\n const count = nextStat.member_count - 1;\n return {\n ...nextState,\n [id]: {\n ...nextStat,\n member_count: count || 1,\n },\n };\n }\n\n return state;\n }\n case ChannelTypes.INCREMENT_PINNED_POST_COUNT: {\n const nextState = {...state};\n const id = action.id;\n const nextStat = nextState[id];\n if (nextStat) {\n const count = nextStat.pinnedpost_count + 1;\n return {\n ...nextState,\n [id]: {\n ...nextStat,\n pinnedpost_count: count,\n },\n };\n }\n\n return state;\n }\n case ChannelTypes.DECREMENT_PINNED_POST_COUNT: {\n const nextState = {...state};\n const id = action.id;\n const nextStat = nextState[id];\n if (nextStat) {\n const count = nextStat.pinnedpost_count - 1;\n return {\n ...nextState,\n [id]: {\n ...nextStat,\n pinnedpost_count: count,\n },\n };\n }\n\n return state;\n }\n case ChannelTypes.INCREMENT_FILE_COUNT: {\n const nextState = {...state};\n const id = action.id;\n const nextStat = nextState[id];\n if (nextStat) {\n const count = nextStat.files_count + action.amount;\n return {\n ...nextState,\n [id]: {\n ...nextStat,\n files_count: count,\n },\n };\n }\n\n return state;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction channelsMemberCount(state: Record<string, number> = {}, action: MMReduxAction) {\n switch (action.type) {\n case ChannelTypes.RECEIVED_CHANNELS_MEMBER_COUNT: {\n const memberCount = action.data;\n return {\n ...state,\n ...memberCount,\n };\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction groupsAssociatedToChannel(state: any = {}, action: MMReduxAction) {\n switch (action.type) {\n case GroupTypes.RECEIVED_ALL_GROUPS_ASSOCIATED_TO_CHANNELS_IN_TEAM: {\n const {groupsByChannelId} = action.data;\n const nextState = {...state};\n\n for (const channelID of Object.keys(groupsByChannelId)) {\n if (groupsByChannelId[channelID]) {\n const associatedGroupIDs = new Set<string>([]);\n for (const group of groupsByChannelId[channelID]) {\n associatedGroupIDs.add(group.id);\n }\n const ids = Array.from(associatedGroupIDs);\n nextState[channelID] = {ids, totalCount: ids.length};\n }\n }\n\n return nextState;\n }\n case GroupTypes.RECEIVED_GROUP_ASSOCIATED_TO_CHANNEL: {\n const {channelID, groups} = action.data;\n const nextState = {...state};\n const associatedGroupIDs = new Set(state[channelID] ? state[channelID].ids : []);\n for (const group of groups) {\n associatedGroupIDs.add(group.id);\n }\n nextState[channelID] = {ids: Array.from(associatedGroupIDs), totalCount: associatedGroupIDs.size};\n\n return nextState;\n }\n case GroupTypes.RECEIVED_GROUPS_ASSOCIATED_TO_CHANNEL: {\n const {channelID, groups, totalGroupCount} = action.data;\n const nextState = {...state};\n const associatedGroupIDs = new Set<string>([]);\n for (const group of groups) {\n associatedGroupIDs.add(group.id);\n }\n nextState[channelID] = {ids: Array.from(associatedGroupIDs), totalCount: totalGroupCount};\n\n return nextState;\n }\n case GroupTypes.RECEIVED_ALL_GROUPS_ASSOCIATED_TO_CHANNEL: {\n const {channelID, groups} = action.data;\n const nextState = {...state};\n const associatedGroupIDs = new Set<string>([]);\n for (const group of groups) {\n associatedGroupIDs.add(group.id);\n }\n const ids = Array.from(associatedGroupIDs);\n nextState[channelID] = {ids, totalCount: ids.length};\n\n return nextState;\n }\n case GroupTypes.RECEIVED_GROUP_NOT_ASSOCIATED_TO_CHANNEL:\n case GroupTypes.RECEIVED_GROUPS_NOT_ASSOCIATED_TO_CHANNEL: {\n const {channelID, groups} = action.data;\n\n const nextState = {...state};\n const associatedGroupIDs = new Set(state[channelID] ? state[channelID].ids : []);\n\n for (const group of groups) {\n associatedGroupIDs.delete(group.id);\n }\n nextState[channelID] = {ids: Array.from(associatedGroupIDs), totalCount: associatedGroupIDs.size};\n\n return nextState;\n }\n default:\n return state;\n }\n}\n\nfunction updateChannelMemberSchemeRoles(state: any, action: AnyAction) {\n const {channelId, userId, isSchemeUser, isSchemeAdmin} = action.data;\n const channel = state[channelId];\n if (channel) {\n const member = channel[userId];\n if (member) {\n return {\n ...state,\n [channelId]: {\n ...state[channelId],\n [userId]: {\n ...state[channelId][userId],\n scheme_user: isSchemeUser,\n scheme_admin: isSchemeAdmin,\n },\n },\n };\n }\n }\n return state;\n}\n\nfunction totalCount(state = 0, action: MMReduxAction) {\n switch (action.type) {\n case ChannelTypes.RECEIVED_TOTAL_CHANNEL_COUNT: {\n return action.data;\n }\n default:\n return state;\n }\n}\n\nexport function manuallyUnread(state: RelationOneToOne<Channel, boolean> = {}, action: MMReduxAction) {\n switch (action.type) {\n case ChannelTypes.REMOVE_MANUALLY_UNREAD: {\n if (state[action.data.channelId]) {\n const newState = {...state};\n delete newState[action.data.channelId];\n return newState;\n }\n return state;\n }\n case UserTypes.LOGOUT_SUCCESS: {\n // user is logging out, remove any reference\n return {};\n }\n\n case ChannelTypes.ADD_MANUALLY_UNREAD:\n case ChannelTypes.POST_UNREAD_SUCCESS: {\n return {...state, [action.data.channelId]: true};\n }\n default:\n return state;\n }\n}\n\nexport function channelModerations(state: any = {}, action: MMReduxAction) {\n switch (action.type) {\n case ChannelTypes.RECEIVED_CHANNEL_MODERATIONS: {\n const {channelId, moderations} = action.data;\n return {\n ...state,\n [channelId]: moderations,\n };\n }\n default:\n return state;\n }\n}\n\nexport function channelMemberCountsByGroup(state: any = {}, action: MMReduxAction) {\n switch (action.type) {\n case ChannelTypes.RECEIVED_CHANNEL_MEMBER_COUNTS_BY_GROUP: {\n const {channelId, memberCounts} = action.data;\n const memberCountsByGroup: ChannelMemberCountsByGroup = {};\n memberCounts.forEach((channelMemberCount: ChannelMemberCountByGroup) => {\n memberCountsByGroup[channelMemberCount.group_id] = channelMemberCount;\n });\n\n return {\n ...state,\n [channelId]: memberCountsByGroup,\n };\n }\n case ChannelTypes.RECEIVED_CHANNEL_MEMBER_COUNTS_FROM_GROUPS_LIST: {\n const memberCountsByGroup: ChannelMemberCountsByGroup = {};\n action.data.forEach((group: Group) => {\n memberCountsByGroup[group.id] = {\n group_id: group.id,\n channel_member_count: group.member_count || 0,\n channel_member_timezones_count: group.channel_member_timezones_count || 0,\n };\n });\n\n return {\n ...state,\n [action.channelId]: memberCountsByGroup,\n };\n }\n default:\n return state;\n }\n}\n\nfunction roles(state: RelationOneToOne<Channel, Set<string>> = {}, action: MMReduxAction) {\n switch (action.type) {\n case ChannelTypes.RECEIVED_MY_CHANNEL_MEMBER: {\n const channelMember = action.data;\n const oldRoles = state[channelMember.channel_id];\n const newRoles = splitRoles(channelMember.roles);\n\n // If roles didn't change no need to update state\n if (isEqual(oldRoles, newRoles)) {\n return state;\n }\n\n return {\n ...state,\n [channelMember.channel_id]: newRoles,\n };\n }\n case ChannelTypes.RECEIVED_MY_CHANNEL_MEMBERS: {\n const nextState = {...state};\n const remove = action.remove as string[];\n let stateChanged = false;\n if (remove && remove.length) {\n remove.forEach((id: string) => {\n Reflect.deleteProperty(nextState, id);\n });\n stateChanged = true;\n }\n\n for (const cm of action.data) {\n const oldRoles = nextState[cm.channel_id];\n const newRoles = splitRoles(cm.roles);\n\n // If roles didn't change no need to update state\n if (!isEqual(oldRoles, newRoles)) {\n nextState[cm.channel_id] = splitRoles(cm.roles);\n stateChanged = true;\n }\n }\n\n if (stateChanged) {\n return nextState;\n }\n\n return state;\n }\n case ChannelTypes.LEAVE_CHANNEL: {\n const nextState = {...state};\n if (action.data) {\n Reflect.deleteProperty(nextState, action.data.id);\n return nextState;\n }\n\n return state;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n\n // the current selected channel\n currentChannelId,\n\n // object where every key is the channel id and has and object with the channel detail\n channels,\n\n // object where every key is a team id and has set of channel ids that are on the team\n channelsInTeam,\n\n // object where every key is the channel id and has an object with the channel members detail\n myMembers,\n\n // object where every key is the channel id and has an object with the channel roles\n roles,\n\n // object where every key is the channel id with an object where key is a user id and has an object with the channel members detail\n membersInChannel,\n\n // object where every key is the channel id and has an object with the channel stats\n stats,\n\n groupsAssociatedToChannel,\n\n totalCount,\n\n // object where every key is the channel id, if present means a user requested to mark that channel as unread.\n manuallyUnread,\n\n // object where every key is the channel id and has an object with the channel moderations\n channelModerations,\n\n // object where every key is the channel id containing map of <group_id: ChannelMemberCountByGroup>\n channelMemberCountsByGroup,\n\n // object where every key is the channel id mapping to an object containing the number of messages in the channel\n messageCounts,\n\n // object where key is the channel id and value is the member count for the channel\n channelsMemberCount,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport type {Product, Subscription, CloudCustomer, Invoice, Limits} from '@mattermost/types/cloud';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {CloudTypes} from 'mattermost-redux/action_types';\n\nexport function subscription(state: Subscription | null = null, action: MMReduxAction) {\n switch (action.type) {\n case CloudTypes.RECEIVED_CLOUD_SUBSCRIPTION: {\n return action.data;\n }\n default:\n return state;\n }\n}\n\nfunction customer(state: CloudCustomer | null = null, action: MMReduxAction) {\n switch (action.type) {\n case CloudTypes.RECEIVED_CLOUD_CUSTOMER: {\n return action.data;\n }\n default:\n return state;\n }\n}\n\nfunction products(state: Record<string, Product> | null = null, action: MMReduxAction) {\n switch (action.type) {\n case CloudTypes.RECEIVED_CLOUD_PRODUCTS: {\n const productList: Product[] = action.data;\n const productDict = productList.reduce((map, obj) => {\n map[obj.id] = obj;\n return map;\n }, {} as Record<string, Product>);\n return {\n ...state,\n ...productDict,\n };\n }\n default:\n return state;\n }\n}\n\nfunction invoices(state: Record<string, Invoice> | null = null, action: MMReduxAction) {\n switch (action.type) {\n case CloudTypes.RECEIVED_CLOUD_INVOICES: {\n const invoiceList: Invoice[] = action.data;\n const invoiceDict = invoiceList.reduce((map, obj) => {\n map[obj.id] = obj;\n return map;\n }, {} as Record<string, Invoice>);\n return {\n ...state,\n ...invoiceDict,\n };\n }\n default:\n return state;\n }\n}\n\nexport interface LimitsReducer {\n limits: Limits;\n limitsLoaded: boolean;\n}\n\nconst emptyLimits = {\n limits: {},\n limitsLoaded: false,\n};\n\nexport function limits(state: LimitsReducer = emptyLimits, action: MMReduxAction) {\n switch (action.type) {\n case CloudTypes.RECEIVED_CLOUD_LIMITS: {\n return {\n limits: action.data,\n limitsLoaded: true,\n };\n }\n case CloudTypes.RECEIVED_CLOUD_SUBSCRIPTION: {\n return emptyLimits;\n }\n default:\n return state;\n }\n}\n\nexport interface ErrorsReducer {\n subscription?: true;\n products?: true;\n customer?: true;\n invoices?: true;\n limits?: true;\n trueUpReview?: true;\n}\nconst emptyErrors = {};\nexport function errors(state: ErrorsReducer = emptyErrors, action: MMReduxAction) {\n switch (action.type) {\n case CloudTypes.CLOUD_SUBSCRIPTION_FAILED: {\n return {...state, subscription: true};\n }\n case CloudTypes.CLOUD_PRODUCTS_FAILED: {\n return {...state, products: true};\n }\n case CloudTypes.CLOUD_CUSTOMER_FAILED: {\n return {...state, customer: true};\n }\n case CloudTypes.CLOUD_INVOICES_FAILED: {\n return {...state, invoices: true};\n }\n case CloudTypes.CLOUD_LIMITS_FAILED: {\n return {...state, limits: true};\n }\n\n case CloudTypes.RECEIVED_CLOUD_SUBSCRIPTION: {\n const newState = Object.assign({}, state);\n delete newState.subscription;\n return newState;\n }\n case CloudTypes.RECEIVED_CLOUD_PRODUCTS: {\n const newState = Object.assign({}, state);\n delete newState.products;\n return newState;\n }\n case CloudTypes.RECEIVED_CLOUD_CUSTOMER: {\n const newState = Object.assign({}, state);\n delete newState.customer;\n return newState;\n }\n case CloudTypes.RECEIVED_CLOUD_INVOICES: {\n const newState = Object.assign({}, state);\n delete newState.invoices;\n return newState;\n }\n case CloudTypes.RECEIVED_CLOUD_LIMITS: {\n const newState = Object.assign({}, state);\n delete newState.limits;\n return newState;\n }\n\n case CloudTypes.CLOUD_SUBSCRIPTION_REQUEST: {\n const newState = Object.assign({}, state);\n delete newState.subscription;\n return newState;\n }\n case CloudTypes.CLOUD_PRODUCTS_REQUEST: {\n const newState = Object.assign({}, state);\n delete newState.products;\n return newState;\n }\n case CloudTypes.CLOUD_CUSTOMER_REQUEST: {\n const newState = Object.assign({}, state);\n delete newState.customer;\n return newState;\n }\n case CloudTypes.CLOUD_INVOICES_REQUEST: {\n const newState = Object.assign({}, state);\n delete newState.invoices;\n return newState;\n }\n case CloudTypes.CLOUD_LIMITS_REQUEST: {\n const newState = Object.assign({}, state);\n delete newState.limits;\n return newState;\n }\n\n default: {\n return state;\n }\n }\n}\nexport default combineReducers({\n\n // represents the current cloud customer\n customer,\n\n // represents the current cloud subscription\n subscription,\n\n // represents the cloud products offered\n products,\n\n // represents the invoices tied to the current subscription\n invoices,\n\n // represents the usage limits associated with this workspace\n limits,\n\n // network errors, used to show errors in ui instead of blowing up and showing nothing\n errors,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport type {CustomEmoji} from '@mattermost/types/emojis';\nimport type {Post} from '@mattermost/types/posts';\nimport type {IDMappedObjects} from '@mattermost/types/utilities';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {EmojiTypes, PostTypes, UserTypes} from 'mattermost-redux/action_types';\n\nexport function customEmoji(state: IDMappedObjects<CustomEmoji> = {}, action: MMReduxAction): IDMappedObjects<CustomEmoji> {\n switch (action.type) {\n case EmojiTypes.RECEIVED_CUSTOM_EMOJI: {\n const emoji: CustomEmoji = action.data;\n\n return storeEmoji(state, emoji);\n }\n case EmojiTypes.RECEIVED_CUSTOM_EMOJIS: {\n const emojis: CustomEmoji[] = action.data;\n\n return emojis.reduce(storeEmoji, state);\n }\n case EmojiTypes.DELETED_CUSTOM_EMOJI: {\n const emoji: CustomEmoji = action.data;\n\n if (!state[emoji.id]) {\n return state;\n }\n\n const nextState = {...state};\n Reflect.deleteProperty(nextState, emoji.id);\n return nextState;\n }\n\n case EmojiTypes.CLEAR_CUSTOM_EMOJIS:\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n case PostTypes.RECEIVED_NEW_POST:\n case PostTypes.RECEIVED_POST: {\n const post: Post = action.data;\n\n return storeEmojisForPost(state, post);\n }\n case PostTypes.RECEIVED_POSTS: {\n const posts: Post[] = Object.values(action.data.posts);\n\n return posts.reduce(storeEmojisForPost, state);\n }\n\n default:\n return state;\n }\n}\n\nfunction storeEmoji(state: IDMappedObjects<CustomEmoji>, emoji: CustomEmoji) {\n if (state[emoji.id]) {\n // Emoji is already in the store\n return state;\n }\n\n return {\n ...state,\n [emoji.id]: emoji,\n };\n}\n\nfunction storeEmojisForPost(state: IDMappedObjects<CustomEmoji>, post: Post): IDMappedObjects<CustomEmoji> {\n if (!post.metadata || !post.metadata.emojis) {\n return state;\n }\n\n return post.metadata.emojis.reduce(storeEmoji, state);\n}\n\nfunction nonExistentEmoji(state: Set<string> = new Set(), action: MMReduxAction): Set<string> {\n switch (action.type) {\n case EmojiTypes.CUSTOM_EMOJI_DOES_NOT_EXIST: {\n if (!state.has(action.data)) {\n const nextState = new Set(state);\n nextState.add(action.data);\n return nextState;\n }\n return state;\n }\n case EmojiTypes.RECEIVED_CUSTOM_EMOJI: {\n if (action.data && state.has(action.data.name)) {\n const nextState = new Set(state);\n nextState.delete(action.data.name);\n return nextState;\n }\n return state;\n }\n case EmojiTypes.RECEIVED_CUSTOM_EMOJIS: {\n const data = action.data || [];\n const nextState = new Set(state);\n\n let changed = false;\n for (const emoji of data) {\n if (emoji && nextState.has(emoji.name)) {\n nextState.delete(emoji.name);\n changed = true;\n }\n }\n return changed ? nextState : state;\n }\n case EmojiTypes.CLEAR_CUSTOM_EMOJIS:\n case UserTypes.LOGOUT_SUCCESS:\n return new Set();\n\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n\n // object where every key is the custom emoji id and has an object with the custom emoji details\n customEmoji,\n\n // set containing custom emoji names that do not exist\n nonExistentEmoji,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport type {ChannelBookmark} from '@mattermost/types/channel_bookmarks';\nimport type {FileInfo, FileSearchResultItem} from '@mattermost/types/files';\nimport type {Post} from '@mattermost/types/posts';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {FileTypes, PostTypes, UserTypes, ChannelBookmarkTypes} from 'mattermost-redux/action_types';\n\nexport function files(state: Record<string, FileInfo> = {}, action: MMReduxAction) {\n switch (action.type) {\n case FileTypes.RECEIVED_UPLOAD_FILES:\n case FileTypes.RECEIVED_FILES_FOR_POST: {\n const filesById = action.data.reduce((filesMap: any, file: any) => {\n return {...filesMap,\n [file.id]: file,\n };\n }, {} as any);\n return {...state,\n ...filesById,\n };\n }\n\n case PostTypes.RECEIVED_NEW_POST:\n case PostTypes.RECEIVED_POST: {\n const post = action.data;\n\n return storeAllFilesForPost(storeFilesForPost, state, post);\n }\n\n case PostTypes.RECEIVED_POSTS: {\n const posts: Post[] = Object.values(action.data.posts);\n\n return posts.reduce((nextState, post) => {\n return storeAllFilesForPost(storeFilesForPost, nextState, post);\n }, state);\n }\n\n case PostTypes.POST_DELETED:\n case PostTypes.POST_REMOVED: {\n if (action.data && action.data.file_ids && action.data.file_ids.length) {\n const nextState = {...state};\n const fileIds = action.data.file_ids as string[];\n fileIds.forEach((id) => {\n Reflect.deleteProperty(nextState, id);\n });\n\n return nextState;\n }\n\n return state;\n }\n\n case FileTypes.REMOVED_FILE: {\n const nextState = {...state};\n const {fileIds} = action.data;\n if (fileIds) {\n fileIds.forEach((id: string) => {\n Reflect.deleteProperty(nextState, id);\n });\n }\n\n return nextState;\n }\n\n case ChannelBookmarkTypes.RECEIVED_BOOKMARKS: {\n const bookmarks: ChannelBookmark[] = action.data.bookmarks;\n\n const nextState = {...state};\n\n bookmarks.forEach(({file}) => {\n if (file) {\n nextState[file.id] = file;\n }\n });\n\n return nextState;\n }\n\n case ChannelBookmarkTypes.RECEIVED_BOOKMARK: {\n const {file}: ChannelBookmark = action.data;\n\n if (file) {\n return {...state, [file.id]: file};\n }\n\n return state;\n }\n\n case ChannelBookmarkTypes.BOOKMARK_DELETED: {\n const {file}: ChannelBookmark = action.data;\n\n if (!file) {\n return state;\n }\n\n const nextState = {...state};\n Reflect.deleteProperty(nextState, file.id);\n\n return nextState;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nexport function filesFromSearch(state: Record<string, FileSearchResultItem> = {}, action: MMReduxAction) {\n switch (action.type) {\n case FileTypes.RECEIVED_FILES_FOR_SEARCH: {\n return {...state,\n ...action.data,\n };\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction storeAllFilesForPost(storeFilesCallback: (state: Record<string, any>, post: Post) => any, state: any, post: Post) {\n let currentState = state;\n\n // Handle permalink embedded files\n if (post.metadata && post.metadata.embeds) {\n const embeds = post.metadata.embeds;\n\n currentState = embeds.reduce((nextState, embed) => {\n if (embed && embed.type === 'permalink' && embed.data && 'post' in embed.data && embed.data.post) {\n return storeFilesCallback(nextState, embed.data.post);\n }\n\n return nextState;\n }, currentState);\n }\n\n return storeFilesCallback(currentState, post);\n}\n\nfunction storeFilesForPost(state: Record<string, FileInfo>, post: Post) {\n if (!post.metadata || !post.metadata.files) {\n return state;\n }\n\n return post.metadata.files.reduce((nextState, file) => {\n if (nextState[file.id]) {\n // File is already in the store\n return nextState;\n }\n\n return {\n ...nextState,\n [file.id]: file,\n };\n }, state);\n}\n\nexport function fileIdsByPostId(state: Record<string, string[]> = {}, action: MMReduxAction) {\n switch (action.type) {\n case FileTypes.RECEIVED_FILES_FOR_POST: {\n const {data, postId} = action;\n const filesIdsForPost = data.map((file: FileInfo) => file.id);\n return {...state,\n [postId as string]: filesIdsForPost,\n };\n }\n\n case PostTypes.RECEIVED_NEW_POST:\n case PostTypes.RECEIVED_POST: {\n const post = action.data;\n\n return storeAllFilesForPost(storeFilesIdsForPost, state, post);\n }\n\n case PostTypes.RECEIVED_POSTS: {\n const posts: Post[] = Object.values(action.data.posts);\n\n return posts.reduce((nextState, post) => {\n return storeAllFilesForPost(storeFilesIdsForPost, nextState, post);\n }, state);\n }\n\n case PostTypes.POST_DELETED:\n case PostTypes.POST_REMOVED: {\n if (action.data) {\n const nextState = {...state};\n Reflect.deleteProperty(nextState, action.data.id);\n return nextState;\n }\n\n return state;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction storeFilesIdsForPost(state: Record<string, string[]>, post: Post) {\n if (!post.metadata || !post.metadata.files) {\n return state;\n }\n\n return {\n ...state,\n [post.id]: post.metadata.files ? post.metadata.files.map((file) => file.id) : [],\n };\n}\n\nfunction filePublicLink(state: {link: string} = {link: ''}, action: MMReduxAction) {\n switch (action.type) {\n case FileTypes.RECEIVED_FILE_PUBLIC_LINK: {\n return action.data;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {link: ''};\n\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n files,\n filesFromSearch,\n fileIdsByPostId,\n filePublicLink,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport type {ClientLicense, ClientConfig} from '@mattermost/types/config';\nimport type {UserPropertyField} from '@mattermost/types/properties';\nimport type {IDMappedObjects} from '@mattermost/types/utilities';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {GeneralTypes, UserTypes} from 'mattermost-redux/action_types';\n\nfunction config(state: Partial<ClientConfig> = {}, action: MMReduxAction) {\n switch (action.type) {\n case GeneralTypes.CLIENT_CONFIG_RECEIVED:\n return Object.assign({}, state, action.data);\n case UserTypes.LOGIN: // Used by the mobile app\n case GeneralTypes.SET_CONFIG_AND_LICENSE:\n return Object.assign({}, state, action.data.config);\n case GeneralTypes.CLIENT_CONFIG_RESET:\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction license(state: ClientLicense = {}, action: MMReduxAction) {\n switch (action.type) {\n case GeneralTypes.CLIENT_LICENSE_RECEIVED:\n return action.data;\n case GeneralTypes.SET_CONFIG_AND_LICENSE:\n return Object.assign({}, state, action.data.license);\n case GeneralTypes.CLIENT_LICENSE_RESET:\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction customProfileAttributes(state: IDMappedObjects<UserPropertyField> = {}, action: MMReduxAction) {\n const data: UserPropertyField[] = action.data;\n switch (action.type) {\n case GeneralTypes.CUSTOM_PROFILE_ATTRIBUTES_RECEIVED:\n return data.reduce<IDMappedObjects<UserPropertyField>>((acc, field) => {\n acc[field.id] = field;\n return acc;\n }, {});\n default:\n return state;\n }\n}\n\nfunction serverVersion(state = '', action: MMReduxAction) {\n switch (action.type) {\n case GeneralTypes.RECEIVED_SERVER_VERSION:\n return action.data;\n case UserTypes.LOGOUT_SUCCESS:\n return '';\n default:\n return state;\n }\n}\n\nfunction firstAdminVisitMarketplaceStatus(state = false, action: MMReduxAction) {\n switch (action.type) {\n case GeneralTypes.FIRST_ADMIN_VISIT_MARKETPLACE_STATUS_RECEIVED:\n return action.data;\n\n default:\n return state;\n }\n}\n\nfunction firstAdminCompleteSetup(state = false, action: MMReduxAction) {\n switch (action.type) {\n case GeneralTypes.FIRST_ADMIN_COMPLETE_SETUP_RECEIVED:\n return action.data;\n\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n config,\n license,\n customProfileAttributes,\n serverVersion,\n firstAdminVisitMarketplaceStatus,\n firstAdminCompleteSetup,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport type {GroupChannel, GroupSyncablesState, GroupTeam, Group} from '@mattermost/types/groups';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {GroupTypes} from 'mattermost-redux/action_types';\n\nfunction syncables(state: Record<string, GroupSyncablesState> = {}, action: MMReduxAction) {\n switch (action.type) {\n case GroupTypes.RECEIVED_GROUP_TEAMS: {\n return {\n ...state,\n [action.group_id]: {\n ...state[action.group_id],\n teams: action.data,\n },\n };\n }\n case GroupTypes.RECEIVED_GROUP_CHANNELS: {\n return {\n ...state,\n [action.group_id]: {\n ...state[action.group_id],\n channels: action.data,\n },\n };\n }\n case GroupTypes.PATCHED_GROUP_TEAM:\n case GroupTypes.LINKED_GROUP_TEAM: {\n let nextGroupTeams: GroupTeam[] = [];\n if (!state[action.data.group_id] || !state[action.data.group_id].teams || state[action.data.group_id].teams.length === 0) {\n nextGroupTeams = [action.data];\n } else {\n nextGroupTeams = {...state}[action.data.group_id].teams.slice();\n\n for (let i = 0, len = nextGroupTeams.length; i < len; i++) {\n if (nextGroupTeams[i].team_id === action.data.team_id) {\n nextGroupTeams[i] = action.data;\n }\n }\n }\n\n return {\n ...state,\n [action.data.group_id]: {\n ...state[action.data.group_id],\n teams: nextGroupTeams,\n },\n };\n }\n case GroupTypes.PATCHED_GROUP_CHANNEL:\n case GroupTypes.LINKED_GROUP_CHANNEL: {\n let nextGroupChannels: GroupChannel[] = [];\n\n if (!state[action.data.group_id] || !state[action.data.group_id].channels) {\n nextGroupChannels = [action.data];\n } else {\n nextGroupChannels = {...state}[action.data.group_id].channels.slice();\n for (let i = 0, len = nextGroupChannels.length; i < len; i++) {\n if (nextGroupChannels[i].channel_id === action.data.channel_id) {\n nextGroupChannels[i] = action.data;\n }\n }\n }\n\n return {\n ...state,\n [action.data.group_id]: {\n ...state[action.data.group_id],\n channels: nextGroupChannels,\n },\n };\n }\n case GroupTypes.UNLINKED_GROUP_TEAM: {\n if (!state[action.data.group_id]) {\n return state;\n }\n let nextTeams: GroupTeam[] = [];\n let nextChannels: GroupChannel[] = [];\n if (state[action.data.group_id].teams?.length > 0) {\n nextTeams = state[action.data.group_id].teams.slice();\n\n const index = nextTeams.findIndex((groupTeam) => {\n return groupTeam.team_id === action.data.syncable_id;\n });\n\n if (index !== -1) {\n nextTeams.splice(index, 1);\n }\n }\n\n // When we remove a team we also need to remove all channels in that team\n if (state[action.data.group_id].channels?.length > 0) {\n nextChannels = state[action.data.group_id].channels.slice();\n\n const index = nextChannels.findIndex((groupChannel) => {\n return groupChannel.team_id === action.data.syncable_id;\n });\n\n if (index !== -1) {\n nextChannels.splice(index, 1);\n }\n }\n\n return {\n ...state,\n [action.data.group_id]: {\n ...state[action.data.group_id],\n teams: nextTeams,\n channels: nextChannels,\n },\n };\n }\n case GroupTypes.UNLINKED_GROUP_CHANNEL: {\n if (!state[action.data.group_id]) {\n return state;\n }\n const nextChannels = state[action.data.group_id].channels.slice();\n\n const index = nextChannels.findIndex((groupChannel) => {\n return groupChannel.channel_id === action.data.syncable_id;\n });\n\n if (index !== -1) {\n nextChannels.splice(index, 1);\n }\n\n return {\n ...state,\n [action.data.group_id]: {\n ...state[action.data.group_id],\n channels: nextChannels,\n },\n };\n }\n default:\n return state;\n }\n}\n\nfunction myGroups(state: string[] = [], action: MMReduxAction) {\n switch (action.type) {\n case GroupTypes.ADD_MY_GROUP: {\n const groupId = action.id;\n const nextState = [...state];\n if (state.indexOf(groupId) === -1) {\n nextState.push(groupId);\n }\n return nextState;\n }\n case GroupTypes.RECEIVED_MY_GROUPS: {\n const groups: Group[] = action.data;\n const nextState = [...state];\n\n groups.forEach((group) => {\n const index = state.indexOf(group.id);\n\n if (index === -1) {\n nextState.push(group.id);\n }\n });\n\n return nextState;\n }\n case GroupTypes.REMOVE_MY_GROUP: {\n const groupId = action.id;\n const index = state.indexOf(groupId);\n\n if (index === -1) {\n // There's nothing to remove\n return state;\n }\n\n // Remove the group ID from my groups list\n const nextState = [...state];\n nextState.splice(index, 1);\n\n return nextState;\n }\n default:\n return state;\n }\n}\n\nfunction stats(state: any = {}, action: MMReduxAction) {\n switch (action.type) {\n case GroupTypes.RECEIVED_GROUP_STATS: {\n const stat = action.data;\n return {\n ...state,\n [stat.group_id]: stat,\n };\n }\n default:\n return state;\n }\n}\n\nfunction groups(state: Record<string, Group> = {}, action: MMReduxAction) {\n switch (action.type) {\n case GroupTypes.CREATE_GROUP_SUCCESS:\n case GroupTypes.PATCHED_GROUP:\n case GroupTypes.RESTORED_GROUP:\n case GroupTypes.ARCHIVED_GROUP:\n case GroupTypes.RECEIVED_GROUP: {\n return {\n ...state,\n [action.data.id]: action.data,\n };\n }\n case GroupTypes.RECEIVED_MY_GROUPS:\n case GroupTypes.RECEIVED_GROUPS: {\n const nextState = {...state};\n for (const group of action.data) {\n nextState[group.id] = group;\n }\n return nextState;\n }\n case GroupTypes.RECEIVED_ALL_GROUPS_ASSOCIATED_TO_CHANNELS_IN_TEAM: {\n const nextState = {...state};\n const {groupsByChannelId} = action.data;\n\n for (const channelID of Object.keys(groupsByChannelId)) {\n if (groupsByChannelId[channelID]) {\n for (const group of groupsByChannelId[channelID]) {\n nextState[group.id] = group;\n }\n }\n }\n return nextState;\n }\n case GroupTypes.RECEIVED_GROUPS_ASSOCIATED_TO_TEAM:\n case GroupTypes.RECEIVED_ALL_GROUPS_ASSOCIATED_TO_TEAM:\n case GroupTypes.RECEIVED_ALL_GROUPS_ASSOCIATED_TO_CHANNEL:\n case GroupTypes.RECEIVED_GROUPS_ASSOCIATED_TO_CHANNEL: {\n const nextState = {...state};\n for (const group of action.data.groups) {\n nextState[group.id] = group;\n }\n\n return nextState;\n }\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n syncables,\n groups,\n stats,\n myGroups,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport type {Product} from '@mattermost/types/cloud';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {HostedCustomerTypes} from 'mattermost-redux/action_types';\n\nexport interface SelfHostedProducts {\n products: Record<string, Product>;\n productsLoaded: boolean;\n}\n\nconst initialProducts = {\n products: {},\n productsLoaded: false,\n};\n\nfunction products(state: SelfHostedProducts = initialProducts, action: MMReduxAction) {\n switch (action.type) {\n case HostedCustomerTypes.RECEIVED_SELF_HOSTED_PRODUCTS: {\n const productList: Product[] = action.data;\n const productDict = productList.reduce((map, obj) => {\n map[obj.id] = obj;\n return map;\n }, {} as Record<string, Product>);\n return {\n ...state,\n products: {\n ...state.products,\n ...productDict,\n },\n productsLoaded: true,\n };\n }\n default:\n return state;\n }\n}\n\nexport interface ErrorsReducer {\n products?: true;\n invoices?: true;\n}\n\nconst emptyErrors = {};\nexport function errors(state: ErrorsReducer = emptyErrors, action: MMReduxAction) {\n switch (action.type) {\n case HostedCustomerTypes.SELF_HOSTED_PRODUCTS_FAILED: {\n return {...state, products: true};\n }\n case HostedCustomerTypes.SELF_HOSTED_PRODUCTS_REQUEST:\n case HostedCustomerTypes.RECEIVED_SELF_HOSTED_PRODUCTS: {\n const newState = Object.assign({}, state);\n delete newState.products;\n return newState;\n }\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n products,\n errors,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport type {Command, IncomingWebhook, OutgoingWebhook, OAuthApp, OutgoingOAuthConnection} from '@mattermost/types/integrations';\nimport type {IDMappedObjects} from '@mattermost/types/utilities';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {IntegrationTypes, UserTypes, ChannelTypes} from 'mattermost-redux/action_types';\n\nfunction incomingHooks(state: IDMappedObjects<IncomingWebhook> = {}, action: MMReduxAction) {\n switch (action.type) {\n case IntegrationTypes.RECEIVED_INCOMING_HOOK: {\n const nextState = {...state};\n nextState[action.data.id] = action.data;\n return nextState;\n }\n case IntegrationTypes.RECEIVED_INCOMING_HOOKS: {\n const nextState = {...state};\n for (const hook of action.data) {\n nextState[hook.id] = hook;\n }\n return nextState;\n }\n case IntegrationTypes.DELETED_INCOMING_HOOK: {\n const nextState = {...state};\n Reflect.deleteProperty(nextState, action.data.id);\n return nextState;\n }\n case ChannelTypes.RECEIVED_CHANNEL_DELETED: {\n const nextState = {...state};\n let deleted = false;\n Object.keys(nextState).forEach((id) => {\n if (nextState[id].channel_id === action.data.id) {\n deleted = true;\n Reflect.deleteProperty(nextState, id);\n }\n });\n\n if (deleted) {\n return nextState;\n }\n\n return state;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n default:\n return state;\n }\n}\n\nfunction incomingHooksTotalCount(state: number = 0, action: MMReduxAction) {\n switch (action.type) {\n case IntegrationTypes.RECEIVED_INCOMING_HOOKS_TOTAL_COUNT: {\n return action.data;\n }\n case IntegrationTypes.DELETED_INCOMING_HOOK: {\n return Math.max(state - 1, 0);\n }\n default:\n return state;\n }\n}\n\nfunction outgoingHooks(state: IDMappedObjects<OutgoingWebhook> = {}, action: MMReduxAction) {\n switch (action.type) {\n case IntegrationTypes.RECEIVED_OUTGOING_HOOK: {\n const nextState = {...state};\n nextState[action.data.id] = action.data;\n return nextState;\n }\n case IntegrationTypes.RECEIVED_OUTGOING_HOOKS: {\n const nextState = {...state};\n for (const hook of action.data) {\n nextState[hook.id] = hook;\n }\n return nextState;\n }\n case IntegrationTypes.DELETED_OUTGOING_HOOK: {\n const nextState = {...state};\n Reflect.deleteProperty(nextState, action.data.id);\n return nextState;\n }\n case ChannelTypes.RECEIVED_CHANNEL_DELETED: {\n const nextState = {...state};\n let deleted = false;\n Object.keys(nextState).forEach((id) => {\n if (nextState[id].channel_id === action.data.id) {\n deleted = true;\n Reflect.deleteProperty(nextState, id);\n }\n });\n\n if (deleted) {\n return nextState;\n }\n\n return state;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n default:\n return state;\n }\n}\n\nfunction commands(state: IDMappedObjects<Command> = {}, action: MMReduxAction) {\n switch (action.type) {\n case IntegrationTypes.RECEIVED_COMMANDS:\n case IntegrationTypes.RECEIVED_CUSTOM_TEAM_COMMANDS: {\n const nextState = {...state};\n for (const command of action.data) {\n if (command.id) {\n const id = command.id;\n nextState[id] = command;\n }\n }\n\n return nextState;\n }\n case IntegrationTypes.RECEIVED_COMMAND:\n if (action.data.id) {\n return {\n ...state,\n [action.data.id]: action.data,\n };\n }\n\n return state;\n case IntegrationTypes.RECEIVED_COMMAND_TOKEN: {\n const {id, token} = action.data;\n return {\n ...state,\n [id]: {\n ...state[id],\n token,\n },\n };\n }\n case IntegrationTypes.DELETED_COMMAND: {\n const nextState = {...state};\n Reflect.deleteProperty(nextState, action.data.id);\n return nextState;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n default:\n return state;\n }\n}\n\nfunction systemCommands(state: IDMappedObjects<Command> = {}, action: MMReduxAction) {\n switch (action.type) {\n case IntegrationTypes.RECEIVED_COMMANDS: {\n const nextCommands: Record<string, Command> = {};\n for (const command of action.data) {\n if (!command.id) {\n nextCommands[command.trigger] = command;\n }\n }\n return nextCommands;\n }\n case IntegrationTypes.RECEIVED_COMMAND:\n if (!action.data.id) {\n return {\n ...state,\n [action.data.trigger]: action.data,\n };\n }\n\n return state;\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n default:\n return state;\n }\n}\n\nfunction oauthApps(state: IDMappedObjects<OAuthApp> = {}, action: MMReduxAction) {\n switch (action.type) {\n case IntegrationTypes.RECEIVED_OAUTH_APPS: {\n const nextState = {...state};\n for (const app of action.data) {\n nextState[app.id] = app;\n }\n return nextState;\n }\n case IntegrationTypes.RECEIVED_OAUTH_APP:\n return {\n ...state,\n [action.data.id]: action.data,\n };\n case IntegrationTypes.DELETED_OAUTH_APP: {\n const nextState = {...state};\n Reflect.deleteProperty(nextState, action.data.id);\n return nextState;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n default:\n return state;\n }\n}\n\nfunction appsOAuthAppIDs(state: string[] = [], action: MMReduxAction) {\n switch (action.type) {\n case IntegrationTypes.RECEIVED_APPS_OAUTH_APP_IDS: {\n if (state.length === 0 && action.data.length === 0) {\n return state;\n }\n\n if (state.length !== action.data.length) {\n return action.data;\n }\n\n const orderedState = state.concat().sort();\n const orderedData = action.data.concat().sort();\n for (let i = 0; i < state.length; i++) {\n if (orderedState[i] !== orderedData[i]) {\n return orderedData;\n }\n }\n\n return state;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return [];\n default:\n return state;\n }\n}\n\nfunction outgoingOAuthConnections(state: IDMappedObjects<OutgoingOAuthConnection> = {}, action: MMReduxAction) {\n switch (action.type) {\n case IntegrationTypes.RECEIVED_OUTGOING_OAUTH_CONNECTIONS: {\n const nextState = {...state};\n for (const connection of action.data) {\n nextState[connection.id] = connection;\n }\n return nextState;\n }\n case IntegrationTypes.RECEIVED_OUTGOING_OAUTH_CONNECTION:\n return {\n ...state,\n [action.data.id]: action.data,\n };\n case IntegrationTypes.DELETED_OUTGOING_OAUTH_CONNECTION: {\n const nextState = {...state};\n Reflect.deleteProperty(nextState, action.data.id);\n return nextState;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n default:\n return state;\n }\n}\n\nfunction appsBotIDs(state: string[] = [], action: MMReduxAction) {\n switch (action.type) {\n case IntegrationTypes.RECEIVED_APPS_BOT_IDS: {\n if (!action.data) {\n return state;\n }\n\n if (state.length === 0 && action.data.length === 0) {\n return state;\n }\n\n if (state.length !== action.data.length) {\n return action.data;\n }\n\n const orderedState = state.concat().sort();\n const orderedData = action.data.concat().sort();\n for (let i = 0; i < state.length; i++) {\n if (orderedState[i] !== orderedData[i]) {\n return orderedData;\n }\n }\n\n return state;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return [];\n default:\n return state;\n }\n}\n\nfunction dialogTriggerId(state = '', action: MMReduxAction) {\n switch (action.type) {\n case IntegrationTypes.RECEIVED_DIALOG_TRIGGER_ID:\n return action.data;\n default:\n return state;\n }\n}\n\nfunction dialog(state = '', action: MMReduxAction) {\n switch (action.type) {\n case IntegrationTypes.RECEIVED_DIALOG:\n return action.data;\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n\n // object where every key is the hook id and has an object with the incoming hook details\n incomingHooks,\n\n // object to represent total amount of incoming hooks\n incomingHooksTotalCount,\n\n // object where every key is the hook id and has an object with the outgoing hook details\n outgoingHooks,\n\n // object to represent installed slash commands for a current team\n commands,\n\n // object to represent registered oauth apps with app id as the key\n oauthApps,\n\n // object to represent the list of ids for oauth apps associated to apps\n appsOAuthAppIDs,\n\n // object to represent the list of ids for bots associated to apps\n appsBotIDs,\n\n // object to represent registered outgoing oauth connections with connection id as the key\n outgoingOAuthConnections,\n\n // object to represent built-in slash commands\n systemCommands,\n\n // trigger ID for interactive dialogs\n dialogTriggerId,\n\n // data for an interactive dialog to display\n dialog,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport type {JobType, Job, JobsByType} from '@mattermost/types/jobs';\nimport type {IDMappedObjects} from '@mattermost/types/utilities';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {JobTypes} from 'mattermost-redux/action_types';\n\nfunction jobs(state: IDMappedObjects<Job> = {}, action: MMReduxAction): IDMappedObjects<Job> {\n switch (action.type) {\n case JobTypes.RECEIVED_JOB: {\n const nextState = {...state};\n nextState[action.data.id] = action.data;\n return nextState;\n }\n case JobTypes.RECEIVED_JOBS: {\n const nextState = {...state};\n for (const job of action.data) {\n nextState[job.id] = job;\n }\n return nextState;\n }\n default:\n return state;\n }\n}\n\nfunction jobsByTypeList(state: JobsByType = {}, action: MMReduxAction): JobsByType {\n switch (action.type) {\n case JobTypes.RECEIVED_JOBS_BY_TYPE: {\n const nextState = {...state};\n if (action.data && action.data.length && action.data.length > 0) {\n nextState[action.data[0].type as JobType] = action.data;\n }\n return nextState;\n }\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n\n // object where every key is the job id and has an object with the job details\n jobs,\n\n // object where every key is a job type and contains a list of jobs.\n jobsByTypeList,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {LimitsTypes} from 'mattermost-redux/action_types';\n\nfunction serverLimits(state = {}, action: MMReduxAction) {\n switch (action.type) {\n case LimitsTypes.RECIEVED_APP_LIMITS: {\n const serverLimits = action.data;\n return {\n ...state,\n ...serverLimits,\n };\n }\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n serverLimits,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport type {PreferencesType, PreferenceType} from '@mattermost/types/preferences';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {PreferenceTypes, UserTypes} from 'mattermost-redux/action_types';\n\nfunction getKey(preference: PreferenceType) {\n return `${preference.category}--${preference.name}`;\n}\n\nfunction setAllPreferences(preferences: PreferenceType[]): any {\n const nextState: any = {};\n\n if (preferences) {\n for (const preference of preferences) {\n nextState[getKey(preference)] = preference;\n }\n }\n\n return nextState;\n}\n\nfunction setAllUserPreferences(preferences: PreferenceType[]): {[key: string]: PreferencesType} {\n const nextState: {[key: string]: PreferencesType} = {};\n if (preferences.length === 0) {\n return nextState;\n }\n\n const userID = preferences[0].user_id;\n nextState[userID] = {};\n\n if (preferences) {\n for (const preference of preferences) {\n nextState[userID][getKey(preference)] = preference;\n }\n }\n\n return nextState;\n}\n\nfunction myPreferences(state: Record<string, PreferenceType> = {}, action: MMReduxAction) {\n switch (action.type) {\n case PreferenceTypes.RECEIVED_ALL_PREFERENCES:\n return setAllPreferences(action.data);\n\n case UserTypes.LOGIN: // Used by the mobile app\n return setAllPreferences(action.data.preferences);\n\n case PreferenceTypes.RECEIVED_PREFERENCES: {\n const nextState = {...state};\n\n if (action.data) {\n for (const preference of action.data) {\n nextState[getKey(preference)] = preference;\n }\n }\n\n return nextState;\n }\n case PreferenceTypes.DELETED_PREFERENCES: {\n const nextState = {...state};\n\n if (action.data) {\n for (const preference of action.data) {\n Reflect.deleteProperty(nextState, getKey(preference));\n }\n }\n\n return nextState;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction userPreferences(state: Record<string, PreferencesType> = {}, action: MMReduxAction) {\n switch (action.type) {\n case PreferenceTypes.RECEIVED_USER_ALL_PREFERENCES:\n return setAllUserPreferences(action.data);\n\n case PreferenceTypes.RECEIVED_USER_PREFERENCES: {\n const nextState = {...state};\n\n const data = action.data as PreferenceType[];\n if (action.data && data.length > 0) {\n const userID = data[0].user_id;\n nextState[userID] = nextState[userID] ? {...nextState[userID]} : {};\n\n for (const preference of action.data) {\n nextState[preference.user_id][getKey(preference)] = preference;\n }\n }\n\n return nextState;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n\n // object where the key is the category-name and has the corresponding value\n myPreferences,\n userPreferences,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport type {Role} from '@mattermost/types/roles';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {RoleTypes, UserTypes} from 'mattermost-redux/action_types';\n\nfunction pending(state: Set<string> = new Set(), action: MMReduxAction) {\n switch (action.type) {\n case RoleTypes.SET_PENDING_ROLES:\n return action.data;\n case UserTypes.LOGOUT_SUCCESS:\n return new Set();\n default:\n return state;\n }\n}\n\nfunction roles(state: Record<string, Role> = {}, action: MMReduxAction) {\n switch (action.type) {\n case RoleTypes.RECEIVED_ROLES: {\n if (action.data) {\n const nextState = {...state};\n for (const role of action.data) {\n nextState[role.name] = role;\n }\n return nextState;\n }\n\n return state;\n }\n case RoleTypes.ROLE_DELETED: {\n if (action.data) {\n const nextState = {...state};\n Reflect.deleteProperty(nextState, action.data.name);\n return nextState;\n }\n\n return state;\n }\n case RoleTypes.RECEIVED_ROLE: {\n if (action.data) {\n const nextState = {...state};\n nextState[action.data.name] = action.data;\n return nextState;\n }\n\n return state;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n\n // object where the key is the category-name and has the corresponding value\n roles,\n pending,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport type {ScheduledPost, ScheduledPostsState} from '@mattermost/types/schedule_post';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {ScheduledPostTypes, UserTypes} from 'mattermost-redux/action_types';\n\nfunction byId(state: ScheduledPostsState['byId'] = {}, action: MMReduxAction) {\n switch (action.type) {\n case ScheduledPostTypes.SCHEDULED_POSTS_RECEIVED: {\n const {scheduledPostsByTeamId} = action.data;\n const newState = {...state};\n\n Object.keys(scheduledPostsByTeamId).forEach((teamId: string) => {\n if (Object.hasOwn(scheduledPostsByTeamId, teamId)) {\n scheduledPostsByTeamId[teamId].forEach((scheduledPost: ScheduledPost) => {\n newState[scheduledPost.id] = scheduledPost;\n });\n }\n });\n\n return newState;\n }\n case ScheduledPostTypes.SINGLE_SCHEDULED_POST_RECEIVED: {\n const scheduledPost = action.data.scheduledPost;\n return {\n ...state,\n [scheduledPost.id]: scheduledPost,\n };\n }\n case ScheduledPostTypes.SCHEDULED_POST_UPDATED: {\n const scheduledPost = action.data.scheduledPost;\n return {\n ...state,\n [scheduledPost.id]: scheduledPost,\n };\n }\n case ScheduledPostTypes.SCHEDULED_POST_DELETED: {\n const scheduledPost = action.data.scheduledPost;\n const newState = {...state};\n delete newState[scheduledPost.id];\n return newState;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction byTeamId(state: ScheduledPostsState['byTeamId'] = {}, action: MMReduxAction) {\n switch (action.type) {\n case ScheduledPostTypes.SCHEDULED_POSTS_RECEIVED: {\n const {scheduledPostsByTeamId} = action.data;\n const newState = {...state};\n\n Object.keys(scheduledPostsByTeamId).forEach((teamId: string) => {\n if (Object.hasOwn(scheduledPostsByTeamId, teamId)) {\n newState[teamId] = scheduledPostsByTeamId[teamId].map((scheduledPost: ScheduledPost) => scheduledPost.id);\n }\n });\n\n return newState;\n }\n case ScheduledPostTypes.SINGLE_SCHEDULED_POST_RECEIVED: {\n const scheduledPost = action.data.scheduledPost as ScheduledPost;\n const teamId = action.data.teamId || 'directChannels';\n\n const newState = {...state};\n\n const existingIndex = newState[teamId].findIndex((existingScheduledPostId) => existingScheduledPostId === scheduledPost.id);\n if (existingIndex >= 0) {\n newState[teamId].splice(existingIndex, 1);\n }\n\n if (newState[teamId]) {\n newState[teamId] = [...newState[teamId], scheduledPost.id];\n } else {\n newState[teamId] = [scheduledPost.id];\n }\n\n return newState;\n }\n case ScheduledPostTypes.SCHEDULED_POST_DELETED: {\n const scheduledPost = action.data.scheduledPost as ScheduledPost;\n\n const newState = {...state};\n let modified = false;\n\n for (const teamId of Object.keys(state)) {\n const index = newState[teamId].findIndex((existingScheduledPostId) => existingScheduledPostId === scheduledPost.id);\n\n if (index >= 0) {\n newState[teamId] = [...newState[teamId]];\n newState[teamId].splice(index, 1);\n modified = true;\n\n break;\n }\n }\n\n return modified ? newState : state;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction errorsByTeamId(state: ScheduledPostsState['errorsByTeamId'] = {}, action: MMReduxAction) {\n switch (action.type) {\n case ScheduledPostTypes.SCHEDULED_POSTS_RECEIVED: {\n const {scheduledPostsByTeamId} = action.data;\n const newState = {...state};\n\n Object.keys(scheduledPostsByTeamId).forEach((teamId: string) => {\n if (Object.hasOwn(scheduledPostsByTeamId, teamId)) {\n const teamScheduledPosts = scheduledPostsByTeamId[teamId] as ScheduledPost[];\n newState[teamId] = teamScheduledPosts.filter((scheduledPost) => scheduledPost.error_code).map((scheduledPost) => scheduledPost.id);\n }\n });\n\n return newState;\n }\n case ScheduledPostTypes.SINGLE_SCHEDULED_POST_RECEIVED: {\n let changed = false;\n\n const teamId = action.data.teamId || 'directChannels';\n const newState = {...state};\n if (!newState[teamId]) {\n newState[teamId] = [];\n }\n\n const scheduledPost = action.data.scheduledPost as ScheduledPost;\n if (scheduledPost.error_code) {\n const alreadyExists = newState[teamId].find((scheduledPostId) => scheduledPostId === scheduledPost.id);\n if (!alreadyExists) {\n newState[teamId] = [...newState[teamId], scheduledPost.id];\n changed = true;\n }\n }\n\n return changed ? newState : state;\n }\n case ScheduledPostTypes.SCHEDULED_POST_DELETED: {\n let changed = false;\n\n const scheduledPost = action.data.scheduledPost as ScheduledPost;\n const newState = {...state};\n\n for (const teamId of Object.keys(state)) {\n const index = newState[teamId].findIndex((scheduledPostId) => scheduledPostId === scheduledPost.id);\n\n if (index >= 0) {\n changed = true;\n newState[teamId] = [...newState[teamId]];\n newState[teamId].splice(index, 1);\n break;\n }\n }\n return changed ? newState : state;\n }\n case UserTypes.LOGOUT_SUCCESS: {\n return {};\n }\n default:\n return state;\n }\n}\n\nfunction byChannelOrThreadId(state: ScheduledPostsState['byChannelOrThreadId'] = {}, action: MMReduxAction) {\n switch (action.type) {\n case ScheduledPostTypes.SCHEDULED_POSTS_RECEIVED: {\n const {scheduledPostsByTeamId, prune} = action.data;\n const newState = prune ? {} : {...state};\n\n Object.keys(scheduledPostsByTeamId).forEach((teamId: string) => {\n if (Object.hasOwn(scheduledPostsByTeamId, teamId)) {\n scheduledPostsByTeamId[teamId].forEach((scheduledPost: ScheduledPost) => {\n const id = scheduledPost.root_id || scheduledPost.channel_id;\n\n // Check if the entry for that channel/thread ID exists\n if (newState[id]) {\n // Only add if its not already there\n if (!newState[id].includes(scheduledPost.id)) {\n newState[id] = [...newState[id], scheduledPost.id];\n }\n } else {\n // If the entry does not exist at this moment, create it\n newState[id] = [scheduledPost.id];\n }\n });\n }\n });\n\n return newState;\n }\n case ScheduledPostTypes.SINGLE_SCHEDULED_POST_RECEIVED: {\n const scheduledPost = action.data.scheduledPost;\n const newState = {...state};\n const id = scheduledPost.root_id || scheduledPost.channel_id;\n\n if (!newState[id]) {\n newState[id] = [scheduledPost.id];\n return newState;\n }\n\n let changed = false;\n const existingIndex = newState[id].findIndex((scheduledPostId) => scheduledPostId === scheduledPost.id);\n\n if (existingIndex) {\n newState[id] = [...newState[id], scheduledPost.id];\n changed = true;\n }\n\n return changed ? newState : state;\n }\n case ScheduledPostTypes.SCHEDULED_POST_DELETED: {\n const scheduledPost = action.data.scheduledPost;\n const id = scheduledPost.root_id || scheduledPost.channel_id;\n\n if (!state[id]) {\n return state;\n }\n\n const newState = {...state};\n const index = newState[id].findIndex((scheduledPostId) => scheduledPostId === scheduledPost.id);\n newState[id] = [...newState[id]];\n newState[id].splice(index, 1);\n\n return newState;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n byId,\n byTeamId,\n byChannelOrThreadId,\n errorsByTeamId,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport type {Scheme} from '@mattermost/types/schemes';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {SchemeTypes, UserTypes} from 'mattermost-redux/action_types';\n\nfunction schemes(state: {\n [x: string]: Scheme;\n} = {}, action: MMReduxAction): {\n [x: string]: Scheme;\n } {\n switch (action.type) {\n case SchemeTypes.CREATED_SCHEME:\n case SchemeTypes.PATCHED_SCHEME:\n case SchemeTypes.RECEIVED_SCHEME: {\n return {\n ...state,\n [action.data.id]: action.data,\n };\n }\n\n case SchemeTypes.RECEIVED_SCHEMES: {\n const nextState = {...state};\n for (const scheme of action.data) {\n nextState[scheme.id] = scheme;\n }\n return nextState;\n }\n\n case SchemeTypes.DELETED_SCHEME: {\n const nextState = {...state};\n Reflect.deleteProperty(nextState, action.data.schemeId);\n return nextState;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n schemes,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport type {Post} from '@mattermost/types/posts';\nimport type {PreferenceType} from '@mattermost/types/preferences';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {PostTypes, PreferenceTypes, SearchTypes, UserTypes} from 'mattermost-redux/action_types';\nimport {Preferences} from 'mattermost-redux/constants';\n\nfunction results(state: string[] = [], action: MMReduxAction) {\n switch (action.type) {\n case SearchTypes.RECEIVED_SEARCH_POSTS: {\n if (action.isGettingMore) {\n return [...new Set(state.concat(action.data.order))];\n }\n return action.data.order;\n }\n case PostTypes.POST_REMOVED: {\n const postId = action.data ? action.data.id : null;\n const index = state.indexOf(postId);\n if (index !== -1) {\n const newState = [...state];\n newState.splice(index, 1);\n return newState;\n }\n return state;\n }\n case SearchTypes.REMOVE_SEARCH_POSTS:\n case UserTypes.LOGOUT_SUCCESS:\n return [];\n\n default:\n return state;\n }\n}\n\nfunction fileResults(state: string[] = [], action: MMReduxAction) {\n switch (action.type) {\n case SearchTypes.RECEIVED_SEARCH_FILES: {\n if (action.isGettingMore) {\n return [...new Set(state.concat(action.data.order))];\n }\n return action.data.order;\n }\n case SearchTypes.REMOVE_SEARCH_FILES:\n case UserTypes.LOGOUT_SUCCESS:\n return [];\n\n default:\n return state;\n }\n}\n\nfunction matches(state: Record<string, string[]> = {}, action: MMReduxAction) {\n switch (action.type) {\n case SearchTypes.RECEIVED_SEARCH_POSTS:\n if (action.isGettingMore) {\n return Object.assign({}, state, action.data.matches);\n }\n return action.data.matches || {};\n case PostTypes.POST_REMOVED: {\n if (!state[action.data.id]) {\n return state;\n }\n\n const newState = {...state};\n Reflect.deleteProperty(newState, action.data.id);\n return newState;\n }\n case SearchTypes.REMOVE_SEARCH_POSTS:\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n default:\n return state;\n }\n}\n\nfunction flagged(state: string[] = [], action: MMReduxAction) {\n switch (action.type) {\n case SearchTypes.RECEIVED_SEARCH_FLAGGED_POSTS: {\n return action.data.order;\n }\n case PostTypes.POST_REMOVED: {\n const postId = action.data ? action.data.id : null;\n const index = state.indexOf(postId);\n if (index !== -1) {\n const newState = [...state];\n newState.splice(index, 1);\n return newState;\n }\n return state;\n }\n case PreferenceTypes.RECEIVED_PREFERENCES: {\n if (action.data) {\n const nextState = [...state];\n let hasNewFlaggedPosts = false;\n action.data.forEach((pref: PreferenceType) => {\n if (pref.category === Preferences.CATEGORY_FLAGGED_POST) {\n const exists = nextState.find((p) => p === pref.name);\n if (!exists) {\n hasNewFlaggedPosts = true;\n nextState.unshift(pref.name);\n }\n }\n });\n\n return hasNewFlaggedPosts ? nextState : state;\n }\n\n return state;\n }\n case PreferenceTypes.DELETED_PREFERENCES: {\n if (action.data) {\n const nextState = [...state];\n let flaggedPostsRemoved = false;\n action.data.forEach((pref: PreferenceType) => {\n if (pref.category === Preferences.CATEGORY_FLAGGED_POST) {\n const index = state.indexOf(pref.name);\n if (index !== -1) {\n flaggedPostsRemoved = true;\n nextState.splice(index, 1);\n }\n }\n });\n\n return flaggedPostsRemoved ? nextState : state;\n }\n\n return state;\n }\n case SearchTypes.REMOVE_SEARCH_POSTS:\n case UserTypes.LOGOUT_SUCCESS:\n return [];\n\n default:\n return state;\n }\n}\n\nfunction removePinnedPost(state: Record<string, string[]>, post: Post) {\n if (post && state[post.channel_id]) {\n const postId = post.id;\n const channelId = post.channel_id;\n const pinnedPosts = [...state[channelId]];\n const index = pinnedPosts.indexOf(postId);\n\n if (index !== -1) {\n pinnedPosts.splice(index, 1);\n return {\n ...state,\n [channelId]: pinnedPosts,\n };\n }\n }\n\n return state;\n}\n\nfunction pinned(state: Record<string, string[]> = {}, action: MMReduxAction) {\n switch (action.type) {\n case SearchTypes.RECEIVED_SEARCH_PINNED_POSTS: {\n const {channelId, pinned: posts} = action.data;\n return {\n ...state,\n [channelId]: posts.order.reverse(),\n };\n }\n case PostTypes.POST_DELETED:\n case PostTypes.POST_REMOVED: {\n return removePinnedPost(state, action.data);\n }\n case PostTypes.RECEIVED_POST: {\n const post = action.data;\n if (post && post.is_pinned) {\n const channelId = post.channel_id;\n let pinnedPosts: string[] = [];\n\n if (state[channelId]) {\n pinnedPosts = [...state[channelId]];\n }\n\n if (!pinnedPosts.includes(post.id)) {\n pinnedPosts.unshift(post.id);\n }\n\n return {\n ...state,\n [channelId]: pinnedPosts,\n };\n }\n\n return removePinnedPost(state, action.data);\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n default:\n return state;\n }\n}\n\nfunction current(state: any = {}, action: MMReduxAction) {\n switch (action.type) {\n case SearchTypes.RECEIVED_SEARCH_TERM: {\n const nextState = {...state};\n const {teamId, params, isEnd, isFilesEnd} = action.data;\n return {\n ...nextState,\n [teamId]: {\n params,\n isEnd: typeof isEnd === 'undefined' && state[teamId] ? state[teamId].isEnd : isEnd,\n isFilesEnd: typeof isFilesEnd === 'undefined' && state[teamId] ? state[teamId].isFilesEnd : isFilesEnd,\n },\n };\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n default:\n return state;\n }\n}\n\nfunction isSearchingTerm(state = false, action: MMReduxAction) {\n switch (action.type) {\n case SearchTypes.SEARCH_POSTS_REQUEST:\n return !action.isGettingMore;\n case SearchTypes.SEARCH_POSTS_SUCCESS:\n return false;\n default:\n return state;\n }\n}\n\nfunction isSearchGettingMore(state = false, action: MMReduxAction) {\n switch (action.type) {\n case SearchTypes.SEARCH_POSTS_REQUEST:\n return action.isGettingMore;\n case SearchTypes.SEARCH_POSTS_SUCCESS:\n return false;\n default:\n return state;\n }\n}\n\nfunction isLimitedResults(state = -1, action: MMReduxAction): number {\n switch (action.type) {\n case SearchTypes.SEARCH_POSTS_REQUEST: {\n if (!action.isGettingMore) {\n return -1;\n }\n return state;\n }\n case SearchTypes.RECEIVED_SEARCH_POSTS: {\n if (action.data?.first_inaccessible_post_time) {\n return action.data.first_inaccessible_post_time || 0;\n }\n return state;\n }\n default: {\n return state;\n }\n }\n}\n\nexport default combineReducers({\n\n // An ordered array with posts ids of flagged posts\n flagged,\n\n // An Object where every key is a channel id mapping to an ordered array with posts ids of pinned posts\n pinned,\n\n // An ordered array with posts ids from the search results\n results,\n\n // An ordered array with files ids from the search results\n fileResults,\n\n // Object where every key is a post id mapping to an array of matched words in that post\n matches,\n\n // Object holding the current searches for every team\n current,\n\n // Boolean true if we are are searching initally\n isSearchingTerm,\n\n // Boolean true if we are getting more search results\n isSearchGettingMore,\n\n // Boolean true if the search returns results inaccessible because\n // they are beyond a cloud workspace's message limits.\n isLimitedResults,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AnyAction} from 'redux';\nimport {combineReducers} from 'redux';\n\nimport type {Team, TeamMembership, TeamUnread} from '@mattermost/types/teams';\nimport type {UserProfile} from '@mattermost/types/users';\nimport type {RelationOneToOne, IDMappedObjects} from '@mattermost/types/utilities';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {AdminTypes, ChannelTypes, TeamTypes, UserTypes, SchemeTypes, GroupTypes} from 'mattermost-redux/action_types';\nimport {teamListToMap} from 'mattermost-redux/utils/team_utils';\n\nfunction currentTeamId(state = '', action: MMReduxAction) {\n switch (action.type) {\n case TeamTypes.SELECT_TEAM:\n return action.data;\n\n case UserTypes.LOGOUT_SUCCESS:\n return '';\n default:\n return state;\n }\n}\n\nfunction teams(state: IDMappedObjects<Team> = {}, action: MMReduxAction) {\n switch (action.type) {\n case TeamTypes.RECEIVED_TEAMS_LIST:\n case SchemeTypes.RECEIVED_SCHEME_TEAMS:\n case AdminTypes.RECEIVED_DATA_RETENTION_CUSTOM_POLICY_TEAMS_SEARCH:\n return Object.assign({}, state, teamListToMap(action.data));\n case AdminTypes.RECEIVED_DATA_RETENTION_CUSTOM_POLICY_TEAMS:\n case UserTypes.LOGIN: // Used by the mobile app\n return Object.assign({}, state, teamListToMap(action.data.teams));\n case TeamTypes.RECEIVED_TEAMS:\n return Object.assign({}, state, action.data);\n case TeamTypes.CREATED_TEAM:\n case TeamTypes.UPDATED_TEAM:\n case TeamTypes.PATCHED_TEAM:\n case TeamTypes.REGENERATED_TEAM_INVITE_ID:\n case TeamTypes.RECEIVED_TEAM:\n return {\n ...state,\n [action.data.id]: action.data,\n };\n\n case TeamTypes.RECEIVED_TEAM_DELETED: {\n const nextState = {...state};\n const teamId = action.data.id;\n if (Object.hasOwn(nextState, teamId)) {\n Reflect.deleteProperty(nextState, teamId);\n return nextState;\n }\n\n return state;\n }\n case TeamTypes.RECEIVED_TEAM_UNARCHIVED: {\n const team = action.data;\n\n return {...state, [team.id]: team};\n }\n\n case TeamTypes.UPDATED_TEAM_SCHEME: {\n const {teamId, schemeId} = action.data;\n const team = state[teamId];\n\n if (!team) {\n return state;\n }\n\n return {...state, [teamId]: {...team, scheme_id: schemeId}};\n }\n\n case AdminTypes.REMOVE_DATA_RETENTION_CUSTOM_POLICY_TEAMS_SUCCESS: {\n const {teams} = action.data;\n const nextState = {...state};\n teams.forEach((teamId: string) => {\n if (nextState[teamId]) {\n nextState[teamId] = {\n ...nextState[teamId],\n policy_id: null,\n };\n }\n });\n\n return nextState;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n default:\n return state;\n }\n}\n\nfunction myMembers(state: RelationOneToOne<Team, TeamMembership> = {}, action: MMReduxAction) {\n function updateState(receivedTeams: IDMappedObjects<Team> = {}, currentState: RelationOneToOne<Team, TeamMembership> = {}) {\n return Object.keys(receivedTeams).forEach((teamId) => {\n if (receivedTeams[teamId].delete_at > 0 && currentState[teamId]) {\n Reflect.deleteProperty(currentState, teamId);\n }\n });\n }\n\n switch (action.type) {\n case TeamTypes.RECEIVED_MY_TEAM_MEMBER: {\n const nextState = {...state};\n const member = action.data;\n if (member.delete_at === 0) {\n nextState[member.team_id] = member;\n }\n return nextState;\n }\n case TeamTypes.RECEIVED_MY_TEAM_MEMBERS: {\n const nextState: RelationOneToOne<Team, TeamMembership> = {};\n const members = action.data;\n for (const m of members) {\n if (m.delete_at == null || m.delete_at === 0) {\n const prevMember = state[m.team_id] || {mention_count: 0, msg_count: 0, mention_count_root: 0, msg_count_root: 0};\n nextState[m.team_id] = {\n ...prevMember,\n ...m,\n };\n }\n }\n return nextState;\n }\n case TeamTypes.RECEIVED_TEAMS_LIST: {\n const nextState = {...state};\n const receivedTeams = teamListToMap(action.data);\n updateState(receivedTeams, nextState);\n return nextState;\n }\n case TeamTypes.RECEIVED_TEAMS: {\n const nextState = {...state};\n const receivedTeams = action.data;\n updateState(receivedTeams, nextState);\n return nextState;\n }\n case TeamTypes.RECEIVED_MY_TEAM_UNREADS: {\n const nextState = {...state};\n const unreads = action.data;\n for (const u of unreads) {\n const msgCount = u.msg_count < 0 ? 0 : u.msg_count;\n const mentionCount = u.mention_count < 0 ? 0 : u.mention_count;\n const msgCountRoot = u.msg_count_root < 0 ? 0 : u.msg_count_root;\n const mentionCountRoot = u.mention_count_root < 0 ? 0 : u.mention_count_root;\n const m = {\n ...state[u.team_id],\n mention_count: mentionCount,\n msg_count: msgCount,\n mention_count_root: mentionCountRoot,\n msg_count_root: msgCountRoot,\n };\n nextState[u.team_id] = m;\n }\n\n return nextState;\n }\n case ChannelTypes.INCREMENT_UNREAD_MSG_COUNT: {\n const {teamId, amount, amountRoot, onlyMentions} = action.data;\n const member = state[teamId];\n\n if (!member) {\n // Don't keep track of unread posts until we've loaded the actual team member\n return state;\n }\n\n if (onlyMentions) {\n // Incrementing the msg_count marks the team as unread, so don't do that if these posts shouldn't be unread\n return state;\n }\n return {\n ...state,\n [teamId]: {\n ...member,\n msg_count: member.msg_count + amount,\n msg_count_root: member.msg_count_root + amountRoot,\n },\n };\n }\n case ChannelTypes.DECREMENT_UNREAD_MSG_COUNT: {\n const {teamId, amount, amountRoot} = action.data;\n const member = state[teamId];\n\n if (!member) {\n // Don't keep track of unread posts until we've loaded the actual team member\n return state;\n }\n\n return {\n ...state,\n [teamId]: {\n ...member,\n msg_count: Math.max(member.msg_count - Math.abs(amount), 0),\n msg_count_root: Math.max(member.msg_count_root - Math.abs(amountRoot), 0),\n },\n };\n }\n case ChannelTypes.INCREMENT_UNREAD_MENTION_COUNT: {\n const {teamId, amount, amountRoot} = action.data;\n const member = state[teamId];\n\n if (!member) {\n // Don't keep track of unread posts until we've loaded the actual team member\n return state;\n }\n\n return {\n ...state,\n [teamId]: {\n ...member,\n mention_count: member.mention_count + amount,\n mention_count_root: member.mention_count_root + amountRoot,\n },\n };\n }\n case ChannelTypes.DECREMENT_UNREAD_MENTION_COUNT: {\n const {teamId, amount, amountRoot} = action.data;\n const member = state[teamId];\n\n if (!member) {\n // Don't keep track of unread posts until we've loaded the actual team member\n return state;\n }\n\n return {\n ...state,\n [teamId]: {\n ...member,\n mention_count: Math.max(member.mention_count - amount, 0),\n mention_count_root: Math.max(member.mention_count_root - amountRoot, 0),\n },\n };\n }\n\n case TeamTypes.LEAVE_TEAM:\n case TeamTypes.RECEIVED_TEAM_DELETED: {\n const nextState = {...state};\n const data = action.data;\n Reflect.deleteProperty(nextState, data.id);\n return nextState;\n }\n case TeamTypes.UPDATED_TEAM_MEMBER_SCHEME_ROLES: {\n return updateMyTeamMemberSchemeRoles(state, action);\n }\n\n case ChannelTypes.POST_UNREAD_SUCCESS: {\n const {teamId, deltaMsgs, mentionCount, msgCount} = action.data;\n\n const teamState = state[teamId];\n if (!teamState) {\n return state;\n }\n\n const newTeamState = {\n ...teamState,\n msg_count: (typeof teamState.msg_count === 'undefined' ? msgCount : teamState.msg_count - deltaMsgs),\n mention_count: (typeof teamState.mention_count === 'undefined' ? mentionCount : teamState.mention_count + mentionCount),\n };\n\n return {...state, [teamId]: newTeamState};\n }\n\n case UserTypes.LOGIN: {// Used by the mobile app\n const {teamMembers, teamUnreads} = action.data;\n const nextState = {...state};\n\n for (const m of teamMembers) {\n if (m.delete_at == null || m.delete_at === 0) {\n const unread = teamUnreads.find((u: TeamUnread) => u.team_id === m.team_id);\n if (unread) {\n m.mention_count = unread.mention_count;\n m.msg_count = unread.msg_count;\n m.mention_count_root = unread.mention_count_root;\n m.msg_count_root = unread.msg_count_root;\n }\n nextState[m.team_id] = m;\n }\n }\n\n return nextState;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction membersInTeam(state: RelationOneToOne<Team, RelationOneToOne<UserProfile, TeamMembership>> = {}, action: MMReduxAction) {\n switch (action.type) {\n case TeamTypes.RECEIVED_MEMBER_IN_TEAM: {\n const data = action.data;\n const members = {...(state[data.team_id] || {})};\n members[data.user_id] = data;\n return {\n ...state,\n [data.team_id]: members,\n };\n }\n case TeamTypes.RECEIVED_TEAM_MEMBERS: {\n const data = action.data;\n if (data && data.length) {\n const nextState = {...state};\n for (const member of data) {\n if (nextState[member.team_id]) {\n nextState[member.team_id] = {...nextState[member.team_id]};\n } else {\n nextState[member.team_id] = {};\n }\n nextState[member.team_id][member.user_id] = member;\n }\n\n return nextState;\n }\n\n return state;\n }\n case TeamTypes.RECEIVED_MEMBERS_IN_TEAM: {\n const data = action.data;\n if (data && data.length) {\n const teamId = data[0].team_id;\n const members = {...(state[teamId] || {})};\n for (const member of data) {\n members[member.user_id] = member;\n }\n\n return {\n ...state,\n [teamId]: members,\n };\n }\n\n return state;\n }\n case TeamTypes.REMOVE_MEMBER_FROM_TEAM: {\n const data = action.data;\n const members = state[data.team_id];\n if (members) {\n const nextState = {...members};\n Reflect.deleteProperty(nextState, data.user_id);\n return {\n ...state,\n [data.team_id]: nextState,\n };\n }\n\n return state;\n }\n case TeamTypes.RECEIVED_TEAM_DELETED: {\n const nextState = {...state};\n const teamId = action.data.id;\n if (Object.hasOwn(nextState, teamId)) {\n Reflect.deleteProperty(nextState, teamId);\n return nextState;\n }\n\n return state;\n }\n case TeamTypes.UPDATED_TEAM_MEMBER_SCHEME_ROLES: {\n return updateTeamMemberSchemeRoles(state, action);\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction stats(state: any = {}, action: MMReduxAction) {\n switch (action.type) {\n case TeamTypes.RECEIVED_TEAM_STATS: {\n const stat = action.data;\n return {\n ...state,\n [stat.team_id]: stat,\n };\n }\n case TeamTypes.RECEIVED_TEAM_DELETED: {\n const nextState = {...state};\n const teamId = action.data.id;\n if (Object.hasOwn(nextState, teamId)) {\n Reflect.deleteProperty(nextState, teamId);\n return nextState;\n }\n\n return state;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction groupsAssociatedToTeam(state: RelationOneToOne<Team, {ids: string[]; totalCount: number}> = {}, action: MMReduxAction) {\n switch (action.type) {\n case GroupTypes.RECEIVED_GROUP_ASSOCIATED_TO_TEAM: {\n const {teamID, groups} = action.data;\n const nextState = {...state};\n const associatedGroupIDs = new Set(state[teamID] ? state[teamID].ids : []);\n for (const group of groups) {\n associatedGroupIDs.add(group.id);\n }\n nextState[teamID] = {ids: Array.from(associatedGroupIDs), totalCount: associatedGroupIDs.size};\n\n return nextState;\n }\n case GroupTypes.RECEIVED_GROUPS_ASSOCIATED_TO_TEAM: {\n const {teamID, groups, totalGroupCount} = action.data;\n const nextState = {...state};\n const associatedGroupIDs = new Set(state[teamID] ? state[teamID].ids : []);\n for (const group of groups) {\n associatedGroupIDs.add(group.id);\n }\n nextState[teamID] = {ids: Array.from(associatedGroupIDs), totalCount: totalGroupCount};\n return nextState;\n }\n case GroupTypes.RECEIVED_ALL_GROUPS_ASSOCIATED_TO_TEAM: {\n const {teamID, groups} = action.data;\n const nextState = {...state};\n const associatedGroupIDs = new Set<string>([]);\n for (const group of groups) {\n associatedGroupIDs.add(group.id);\n }\n const ids = Array.from(associatedGroupIDs);\n nextState[teamID] = {ids, totalCount: ids.length};\n return nextState;\n }\n case GroupTypes.RECEIVED_GROUP_NOT_ASSOCIATED_TO_TEAM:\n case GroupTypes.RECEIVED_GROUPS_NOT_ASSOCIATED_TO_TEAM: {\n const {teamID, groups} = action.data;\n const nextState = {...state};\n const associatedGroupIDs = new Set(state[teamID] ? state[teamID].ids : []);\n for (const group of groups) {\n associatedGroupIDs.delete(group.id);\n }\n nextState[teamID] = {ids: Array.from(associatedGroupIDs), totalCount: associatedGroupIDs.size};\n return nextState;\n }\n default:\n return state;\n }\n}\n\nfunction updateTeamMemberSchemeRoles(state: RelationOneToOne<Team, RelationOneToOne<UserProfile, TeamMembership>>, action: AnyAction) {\n const {teamId, userId, isSchemeUser, isSchemeAdmin} = action.data;\n const team = state[teamId];\n if (team) {\n const member = team[userId];\n if (member) {\n return {\n ...state,\n [teamId]: {\n ...state[teamId],\n [userId]: {\n ...state[teamId][userId],\n scheme_user: isSchemeUser,\n scheme_admin: isSchemeAdmin,\n },\n },\n };\n }\n }\n return state;\n}\n\nfunction updateMyTeamMemberSchemeRoles(state: RelationOneToOne<Team, TeamMembership>, action: AnyAction) {\n const {teamId, isSchemeUser, isSchemeAdmin} = action.data;\n const member = state[teamId];\n if (member) {\n return {\n ...state,\n [teamId]: {\n ...state[teamId],\n scheme_user: isSchemeUser,\n scheme_admin: isSchemeAdmin,\n },\n };\n }\n return state;\n}\n\nfunction totalCount(state = 0, action: MMReduxAction) {\n switch (action.type) {\n case TeamTypes.RECEIVED_TOTAL_TEAM_COUNT: {\n return action.data;\n }\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n\n // the current selected team\n currentTeamId,\n\n // object where every key is the team id and has and object with the team detail\n teams,\n\n // object where every key is the team id and has and object with the team members detail\n myMembers,\n\n // object where every key is the team id and has an object of members in the team where the key is user id\n membersInTeam,\n\n // object where every key is the team id and has an object with the team stats\n stats,\n\n groupsAssociatedToTeam,\n\n totalCount,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AnyAction} from 'redux';\n\nimport type {Channel} from '@mattermost/types/channels';\nimport type {Team, TeamUnread} from '@mattermost/types/teams';\nimport type {ThreadsState, UserThread} from '@mattermost/types/threads';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {ChannelTypes, TeamTypes, ThreadTypes, UserTypes} from 'mattermost-redux/action_types';\nimport {General} from 'mattermost-redux/constants';\n\nimport type {ExtraData} from './types';\n\nfunction isDmGmChannel(channelType: Channel['type']) {\n return channelType === General.DM_CHANNEL || channelType === General.GM_CHANNEL;\n}\n\nfunction handleAllTeamThreadsRead(state: ThreadsState['counts'], action: AnyAction): ThreadsState['counts'] {\n const counts = state[action.data.team_id] ?? {};\n return {\n ...state,\n [action.data.team_id]: {\n ...counts,\n total_unread_mentions: 0,\n total_unread_threads: 0,\n total_unread_urgent_mentions: 0,\n },\n };\n}\n\nfunction isEqual(state: ThreadsState['counts'], action: AnyAction, unreads: boolean) {\n const counts = state[action.data.team_id] ?? {};\n\n const {\n total,\n total_unread_threads: totalUnreadThreads,\n total_unread_mentions: totalUnreadMentions,\n total_unread_urgent_mentions: totalUnreadUrgentMentions,\n } = action.data;\n\n if (\n totalUnreadMentions !== counts.total_unread_mentions ||\n totalUnreadThreads !== counts.total_unread_threads ||\n totalUnreadUrgentMentions !== counts.total_unread_urgent_mentions\n ) {\n return false;\n }\n\n // in unread threads we exclude saving the total number,\n // since it doesn't reflect the actual total of threads\n // but only the total of unread threads\n if (!unreads && total !== counts.total) {\n return false;\n }\n\n return true;\n}\n\nfunction handleReadChangedThread(state: ThreadsState['counts'], action: AnyAction, teamId: string, isUrgent: boolean): ThreadsState['counts'] {\n const {\n prevUnreadMentions = 0,\n newUnreadMentions = 0,\n prevUnreadReplies = 0,\n newUnreadReplies = 0,\n } = action.data;\n const counts = state[teamId] ? {\n ...state[teamId],\n } : {\n total_unread_threads: prevUnreadReplies,\n total: 0,\n total_unread_mentions: prevUnreadMentions,\n total_unread_urgent_mentions: isUrgent ? prevUnreadMentions : 0,\n };\n\n const unreadMentionDiff = newUnreadMentions - prevUnreadMentions;\n\n counts.total_unread_mentions = Math.max(counts.total_unread_mentions + unreadMentionDiff, 0);\n if (isUrgent) {\n counts.total_unread_urgent_mentions = Math.max(counts.total_unread_urgent_mentions + unreadMentionDiff, 0);\n }\n\n if (newUnreadReplies > 0 && prevUnreadReplies === 0) {\n counts.total_unread_threads += 1;\n } else if (prevUnreadReplies > 0 && newUnreadReplies === 0) {\n counts.total_unread_threads = Math.max(counts.total_unread_threads - 1, 0);\n }\n\n return {\n ...state,\n [teamId]: counts,\n };\n}\n\nfunction handleLeaveTeam(state: ThreadsState['counts'], action: AnyAction): ThreadsState['counts'] {\n const team: Team = action.data;\n\n if (!state[team.id]) {\n return state;\n }\n\n const nextState = {...state};\n Reflect.deleteProperty(nextState, team.id);\n\n return nextState;\n}\n\nfunction handleLeaveChannel(state: ThreadsState['counts'] = {}, action: AnyAction, extra: ExtraData) {\n if (!extra.threadsToDelete || extra.threadsToDelete.length === 0) {\n return state;\n }\n\n const teamId = action.data.team_id;\n\n if (!teamId || !state[teamId]) {\n return state;\n }\n\n const {unreadMentions, unreadThreads, unreadUrgentMentions} = extra.threadsToDelete.reduce((curr, item: UserThread) => {\n curr.unreadMentions += item.unread_mentions;\n curr.unreadThreads = item.unread_replies > 0 ? curr.unreadThreads + 1 : curr.unreadThreads;\n curr.unreadUrgentMentions = item.is_urgent ? curr.unreadUrgentMentions + item.unread_mentions : curr.unreadUrgentMentions;\n return curr;\n }, {unreadMentions: 0, unreadThreads: 0, unreadUrgentMentions: 0});\n\n const {total, total_unread_mentions: totalUnreadMentions, total_unread_threads: totalUnreadThreads, total_unread_urgent_mentions: totalUnreadUrgentMentions} = state[teamId];\n\n return {\n ...state,\n [teamId]: {\n total: Math.max(total - extra.threadsToDelete.length, 0),\n total_unread_mentions: Math.max(totalUnreadMentions - unreadMentions, 0),\n total_unread_threads: Math.max(totalUnreadThreads - unreadThreads, 0),\n total_unread_urgent_mentions: Math.max((totalUnreadUrgentMentions || 0) - unreadUrgentMentions, 0),\n },\n };\n}\n\nfunction handleDecrementThreadCounts(state: ThreadsState['counts'], action: AnyAction) {\n const {teamId, replies, mentions} = action;\n const counts = state[teamId];\n if (!counts) {\n return state;\n }\n\n return {\n ...state,\n [teamId]: {\n total: Math.max(counts.total - 1, 0),\n total_unread_mentions: Math.max(counts.total_unread_mentions - mentions, 0),\n total_unread_threads: Math.max(counts.total_unread_threads - replies, 0),\n },\n };\n}\n\nexport function countsIncludingDirectReducer(state: ThreadsState['counts'] = {}, action: MMReduxAction, extra: ExtraData) {\n switch (action.type) {\n case ThreadTypes.ALL_TEAM_THREADS_READ:\n return handleAllTeamThreadsRead(state, action);\n case ThreadTypes.READ_CHANGED_THREAD: {\n const {teamId, channelType, isUrgent} = action.data;\n if (isDmGmChannel(channelType)) {\n const teamIds = new Set(Object.keys(state));\n\n // if the case of dm/gm make sure we add counts for all teams\n if (teamId !== '') {\n teamIds.add(teamId);\n }\n\n let newState = {...state};\n teamIds.forEach((id) => {\n newState = handleReadChangedThread(newState, action, id, isUrgent);\n });\n\n return newState;\n }\n\n return handleReadChangedThread(state, action, teamId, isUrgent);\n }\n case ThreadTypes.FOLLOW_CHANGED_THREAD: {\n const {team_id: teamId, following} = action.data;\n const counts = state[teamId];\n\n if (counts?.total == null) {\n return state;\n }\n\n return {\n ...state,\n [teamId]: {\n ...counts,\n total: following ? counts.total + 1 : counts.total - 1,\n },\n };\n }\n case TeamTypes.LEAVE_TEAM:\n return handleLeaveTeam(state, action);\n case ChannelTypes.RECEIVED_CHANNEL_DELETED:\n case ChannelTypes.LEAVE_CHANNEL:\n return handleLeaveChannel(state, action, extra);\n case ThreadTypes.RECEIVED_THREAD_COUNTS:\n if (isEqual(state, action, false)) {\n return state;\n }\n\n return {\n ...state,\n [action.data.team_id]: {\n total: action.data.total,\n total_unread_threads: action.data.total_unread_threads,\n total_unread_mentions: action.data.total_unread_mentions,\n total_unread_urgent_mentions: action.data.total_unread_urgent_mentions,\n },\n };\n case ThreadTypes.DECREMENT_THREAD_COUNTS:\n return handleDecrementThreadCounts(state, action);\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n }\n return state;\n}\n\nexport function countsReducer(state: ThreadsState['counts'] = {}, action: MMReduxAction, extra: ExtraData) {\n switch (action.type) {\n case ThreadTypes.ALL_TEAM_THREADS_READ:\n return handleAllTeamThreadsRead(state, action);\n case ThreadTypes.READ_CHANGED_THREAD:\n if (isDmGmChannel(action.data.channelType)) {\n return state;\n }\n return handleReadChangedThread(state, action, action.data.teamId, action.data.isUrgent);\n case TeamTypes.LEAVE_TEAM:\n return handleLeaveTeam(state, action);\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n case ChannelTypes.RECEIVED_CHANNEL_DELETED:\n case ChannelTypes.LEAVE_CHANNEL:\n return handleLeaveChannel(state, action, extra);\n case TeamTypes.RECEIVED_MY_TEAM_UNREADS: {\n const members = action.data;\n return {\n ...state,\n ...members.reduce((result: ThreadsState['counts'], member: TeamUnread) => {\n result[member.team_id] = {\n ...state[member.team_id],\n total_unread_threads: member.thread_count || 0,\n total_unread_mentions: member.thread_mention_count || 0,\n total_unread_urgent_mentions: member.thread_urgent_mention_count || 0,\n };\n\n return result;\n }, {}),\n };\n }\n case ThreadTypes.DECREMENT_THREAD_COUNTS: {\n if (isDmGmChannel(action.channelType)) {\n return state;\n }\n return handleDecrementThreadCounts(state, action);\n }\n }\n return state;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AnyAction} from 'redux';\n\nimport type {Team} from '@mattermost/types/teams';\nimport type {ThreadsState, UserThread, UserThreadWithPost} from '@mattermost/types/threads';\nimport type {IDMappedObjects, RelationOneToMany} from '@mattermost/types/utilities';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {ChannelTypes, PostTypes, TeamTypes, ThreadTypes, UserTypes} from 'mattermost-redux/action_types';\n\nimport type {ExtraData} from './types';\n\ntype State = ThreadsState['threadsInTeam'] | ThreadsState['unreadThreadsInTeam'];\n\n// return true only if it's 'newer' than other threads\n// older threads will be added by scrolling so no need to manually add.\n// furthermore manually adding older thread will BREAK pagination\nfunction shouldAddThreadId(ids: Array<UserThread['id']>, thread: UserThread, threads: IDMappedObjects<UserThread>) {\n return ids.some((id) => {\n const t = threads![id];\n return thread.last_reply_at > t.last_reply_at;\n });\n}\n\nfunction handlePostRemoved(state: State, action: AnyAction): State {\n const post = action.data;\n if (post.root_id) {\n return state;\n }\n\n const teams = Object.keys(state).\n filter((id) => state[id].indexOf(post.id) !== -1);\n\n if (!teams?.length) {\n return state;\n }\n\n const teamState: RelationOneToMany<Team, UserThread> = {};\n\n for (let i = 0; i < teams.length; i++) {\n const teamId = teams[i];\n const index = state[teamId].indexOf(post.id);\n\n teamState[teamId] = [\n ...state[teamId].slice(0, index),\n ...state[teamId].slice(index + 1),\n ];\n }\n\n return {\n ...state,\n ...teamState,\n };\n}\n\n// adds thread to all teams in state\nfunction handleAllTeamsReceivedThread(state: State, thread: UserThread, teamId: Team['id'], extra: ExtraData) {\n const teamIds = Object.keys(state);\n\n let newState = {...state};\n for (const teamId of teamIds) {\n newState = handleSingleTeamReceivedThread(newState, thread, teamId, extra);\n }\n\n return newState;\n}\n\n// adds thread to single team\nfunction handleSingleTeamReceivedThread(state: State, thread: UserThread, teamId: Team['id'], extra: ExtraData) {\n const nextSet = new Set(state[teamId] || []);\n\n // thread exists in state\n if (nextSet.has(thread.id)) {\n return state;\n }\n\n // check if thread is newer than any of the existing threads\n const shouldAdd = shouldAddThreadId([...nextSet], thread, extra.threads);\n\n if (shouldAdd) {\n nextSet.add(thread.id);\n\n return {\n ...state,\n [teamId]: [...nextSet],\n };\n }\n\n return state;\n}\n\nexport function handleReceivedThread(state: State, action: AnyAction, extra: ExtraData) {\n const {thread, team_id: teamId} = action.data;\n\n if (!teamId) {\n return handleAllTeamsReceivedThread(state, thread, teamId, extra);\n }\n\n return handleSingleTeamReceivedThread(state, thread, teamId, extra);\n}\n\n// add the thread only if it's 'newer' than other threads\n// older threads will be added by scrolling so no need to manually add.\n// furthermore manually adding older thread will BREAK pagination\nexport function handleFollowChanged(state: State, action: AnyAction, extra: ExtraData) {\n const {id, team_id: teamId, following} = action.data;\n const nextSet = new Set(state[teamId] || []);\n\n const thread = extra.threads[id];\n\n if (!thread) {\n return state;\n }\n\n // thread exists in state\n if (nextSet.has(id)) {\n // remove it if we unfollowed\n if (!following) {\n nextSet.delete(id);\n return {\n ...state,\n [teamId]: [...nextSet],\n };\n }\n return state;\n }\n\n // check if thread is newer than any of the existing threads\n const shouldAdd = shouldAddThreadId([...nextSet], thread, extra.threads);\n\n if (shouldAdd && following) {\n nextSet.add(thread.id);\n\n return {\n ...state,\n [teamId]: [...nextSet],\n };\n }\n\n return state;\n}\n\nfunction handleReceiveThreads(state: State, action: AnyAction) {\n const nextSet = new Set(state[action.data.team_id] || []);\n\n action.data.threads.forEach((thread: UserThread) => {\n nextSet.add(thread.id);\n });\n\n return {\n ...state,\n [action.data.team_id]: [...nextSet],\n };\n}\n\nfunction handleLeaveChannel(state: State, action: AnyAction, extra: ExtraData) {\n if (!extra.threadsToDelete || extra.threadsToDelete.length === 0) {\n return state;\n }\n\n const teamId = action.data.team_id;\n\n let threadDeleted = false;\n\n // Remove entries for any thread in the channel\n const nextState = {...state};\n for (const thread of extra.threadsToDelete) {\n if (nextState[teamId]) {\n const index = nextState[teamId].indexOf(thread.id);\n if (index !== -1) {\n nextState[teamId] = [...nextState[teamId].slice(0, index), ...nextState[teamId].slice(index + 1)];\n threadDeleted = true;\n }\n }\n }\n\n if (!threadDeleted) {\n // Nothing was actually removed\n return state;\n }\n\n return nextState;\n}\n\nfunction handleLeaveTeam(state: State, action: AnyAction) {\n const team: Team = action.data;\n\n if (!state[team.id]) {\n return state;\n }\n\n const nextState = {...state};\n Reflect.deleteProperty(nextState, team.id);\n\n return nextState;\n}\n\nfunction handleSingleTeamThreadRead(state: ThreadsState['unreadThreadsInTeam'], action: AnyAction, teamId: string, extra: ExtraData) {\n const {\n id,\n newUnreadMentions,\n newUnreadReplies,\n } = action.data;\n const team = state[teamId] || [];\n const index = team.indexOf(id);\n\n // the thread is not in the unread list\n if (index === -1) {\n const thread = extra.threads[id];\n\n // the thread is unread\n if (thread && (newUnreadReplies > 0 || newUnreadMentions > 0)) {\n // if it's newer add it, we don't care about ordering here since we order on the selector\n if (shouldAddThreadId(team, thread, extra.threads)) {\n return {\n ...state,\n [teamId]: [\n ...team,\n id,\n ],\n };\n }\n }\n\n // do nothing when the thread is read\n return state;\n }\n\n // do nothing when the thread exists and it's unread\n if (newUnreadReplies > 0 || newUnreadMentions > 0) {\n return state;\n }\n\n // if the thread is read remove it\n return {\n ...state,\n [teamId]: [\n ...team.slice(0, index),\n ...team.slice(index + 1),\n ],\n };\n}\n\nexport const threadsInTeamReducer = (state: ThreadsState['threadsInTeam'] = {}, action: MMReduxAction, extra: ExtraData) => {\n switch (action.type) {\n case ThreadTypes.RECEIVED_THREAD:\n return handleReceivedThread(state, action, extra);\n case PostTypes.POST_REMOVED:\n return handlePostRemoved(state, action);\n case ThreadTypes.RECEIVED_THREADS:\n return handleReceiveThreads(state, action);\n case TeamTypes.LEAVE_TEAM:\n return handleLeaveTeam(state, action);\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n case ChannelTypes.RECEIVED_CHANNEL_DELETED:\n case ChannelTypes.LEAVE_CHANNEL:\n return handleLeaveChannel(state, action, extra);\n }\n\n return state;\n};\n\nexport const unreadThreadsInTeamReducer = (state: ThreadsState['unreadThreadsInTeam'] = {}, action: MMReduxAction, extra: ExtraData) => {\n switch (action.type) {\n case ThreadTypes.READ_CHANGED_THREAD: {\n const {teamId} = action.data;\n if (teamId === '') {\n const teamIds = Object.keys(state);\n\n let newState = {...state};\n for (const teamId of teamIds) {\n newState = handleSingleTeamThreadRead(newState, action, teamId, extra);\n }\n return newState;\n }\n\n return handleSingleTeamThreadRead(state, action, teamId, extra);\n }\n case ThreadTypes.RECEIVED_THREAD:\n if (action.data.thread.unread_replies > 0 || action.data.thread.unread_mentions > 0) {\n return handleReceivedThread(state, action, extra);\n }\n return state;\n case ThreadTypes.RECEIVED_THREADS:\n return handleReceiveThreads(state, {\n ...action,\n data: {\n ...action.data,\n threads: action.data.threads.filter((thread: UserThreadWithPost) => thread.unread_replies > 0 || thread.unread_mentions > 0),\n },\n });\n case PostTypes.POST_REMOVED:\n return handlePostRemoved(state, action);\n case ThreadTypes.RECEIVED_UNREAD_THREADS:\n return handleReceiveThreads(state, action);\n case TeamTypes.LEAVE_TEAM:\n return handleLeaveTeam(state, action);\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n case ChannelTypes.RECEIVED_CHANNEL_DELETED:\n case ChannelTypes.LEAVE_CHANNEL:\n return handleLeaveChannel(state, action, extra);\n case ThreadTypes.FOLLOW_CHANGED_THREAD:\n return handleFollowChanged(state, action, extra);\n }\n return state;\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {Post} from '@mattermost/types/posts';\nimport type {ThreadsState, UserThread} from '@mattermost/types/threads';\nimport type {UserProfile} from '@mattermost/types/users';\nimport type {IDMappedObjects} from '@mattermost/types/utilities';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {ChannelTypes, PostTypes, ThreadTypes, UserTypes} from 'mattermost-redux/action_types';\n\nimport {countsReducer, countsIncludingDirectReducer} from './counts';\nimport {threadsInTeamReducer, unreadThreadsInTeamReducer} from './threadsInTeam';\nimport type {ExtraData} from './types';\n\nexport const threadsReducer = (state: ThreadsState['threads'] = {}, action: MMReduxAction, extra: ExtraData) => {\n switch (action.type) {\n case ThreadTypes.RECEIVED_UNREAD_THREADS:\n case ThreadTypes.RECEIVED_THREADS: {\n const {threads} = action.data;\n return {\n ...state,\n ...threads.reduce((results: IDMappedObjects<UserThread>, thread: UserThread) => {\n results[thread.id] = thread;\n return results;\n }, {}),\n };\n }\n case PostTypes.POST_REMOVED: {\n const post = action.data;\n\n if (post.root_id || !state[post.id]) {\n return state;\n }\n\n const nextState = {...state};\n Reflect.deleteProperty(nextState, post.id);\n\n return nextState;\n }\n case ThreadTypes.RECEIVED_THREAD: {\n const {thread} = action.data;\n return {\n ...state,\n [thread.id]: thread,\n };\n }\n case ThreadTypes.READ_CHANGED_THREAD: {\n const {\n id,\n newUnreadMentions,\n newUnreadReplies,\n lastViewedAt,\n } = action.data;\n\n return {\n ...state,\n [id]: {\n ...(state[id] || {}),\n last_viewed_at: lastViewedAt,\n unread_mentions: newUnreadMentions,\n unread_replies: newUnreadReplies,\n is_following: true,\n },\n };\n }\n case ThreadTypes.FOLLOW_CHANGED_THREAD: {\n const {id, following} = action.data;\n\n if (!state[id]) {\n return state;\n }\n\n return {\n ...state,\n [id]: {\n ...state[id],\n is_following: following,\n },\n };\n }\n case PostTypes.RECEIVED_NEW_POST: {\n const post: Post = action.data;\n const thread: UserThread | undefined = state[post.root_id];\n if (post.root_id && thread) {\n const participants = thread.participants || [];\n const nextThread = {...thread};\n if (!participants.find((user: UserProfile | {id: string}) => user.id === post.user_id)) {\n nextThread.participants = [...participants, {id: post.user_id}];\n }\n\n if (post.reply_count) {\n nextThread.reply_count = post.reply_count;\n }\n\n return {\n ...state,\n [post.root_id]: nextThread,\n };\n }\n return state;\n }\n case ThreadTypes.ALL_TEAM_THREADS_READ: {\n return Object.entries(state).reduce<ThreadsState['threads']>((newState, [id, thread]) => {\n newState[id] = {\n ...thread,\n unread_mentions: 0,\n unread_replies: 0,\n };\n return newState;\n }, {});\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n case ChannelTypes.RECEIVED_CHANNEL_DELETED:\n case ChannelTypes.LEAVE_CHANNEL: {\n if (!extra.threadsToDelete || extra.threadsToDelete.length === 0) {\n return state;\n }\n\n let threadDeleted = false;\n\n // Remove entries for any thread in the channel\n const nextState = {...state};\n for (const thread of extra.threadsToDelete) {\n Reflect.deleteProperty(nextState, thread.id);\n threadDeleted = true;\n }\n\n if (!threadDeleted) {\n // Nothing was actually removed\n return state;\n }\n\n return nextState;\n }\n }\n\n return state;\n};\n\nfunction getThreadsOfChannel(threads: ThreadsState['threads'], channelId: string) {\n const channelThreads: UserThread[] = [];\n for (const rootId of Object.keys(threads)) {\n if (\n threads[rootId] &&\n threads[rootId].post &&\n threads[rootId].post.channel_id === channelId\n ) {\n channelThreads.push(threads[rootId]);\n }\n }\n\n return channelThreads;\n}\n\nconst initialState = {\n threads: {},\n threadsInTeam: {},\n unreadThreadsInTeam: {},\n counts: {},\n countsIncludingDirect: {},\n};\n\n// custom combineReducers function\n// enables passing data between reducers\nfunction reducer(state: ThreadsState = initialState, action: MMReduxAction): ThreadsState {\n const extra: ExtraData = {\n threads: state.threads,\n };\n\n // acting as a 'middleware'\n if (\n action.type === ChannelTypes.LEAVE_CHANNEL ||\n action.type === ChannelTypes.RECEIVED_CHANNEL_DELETED\n ) {\n if (!action.data.viewArchivedChannels) {\n extra.threadsToDelete = getThreadsOfChannel(state.threads, action.data.id);\n }\n }\n\n const nextState = {\n\n // Object mapping thread ids to thread objects\n threads: threadsReducer(state.threads, action, extra),\n\n // Object mapping teams ids to thread ids\n threadsInTeam: threadsInTeamReducer(state.threadsInTeam, action, extra),\n\n // Object mapping teams ids to unread thread ids\n unreadThreadsInTeam: unreadThreadsInTeamReducer(state.unreadThreadsInTeam, action, extra),\n\n // Object mapping teams ids to unread counts without DM/GM\n counts: countsReducer(state.counts, action, extra),\n\n // Object mapping teams ids to unread counts including direct channels\n countsIncludingDirect: countsIncludingDirectReducer(state.countsIncludingDirect, action, extra),\n };\n\n if (\n state.threads === nextState.threads &&\n state.threadsInTeam === nextState.threadsInTeam &&\n state.unreadThreadsInTeam === nextState.unreadThreadsInTeam &&\n state.counts === nextState.counts &&\n state.countsIncludingDirect === nextState.countsIncludingDirect\n ) {\n // None of the children have changed so don't even let the parent object change\n return state;\n }\n\n return nextState;\n}\n\nexport default reducer;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {CloudUsage} from '@mattermost/types/cloud';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {CloudTypes} from 'mattermost-redux/action_types';\n\nconst emptyUsage = {\n files: {\n totalStorage: 0,\n totalStorageLoaded: false,\n },\n messages: {\n history: 0,\n historyLoaded: false,\n },\n boards: {\n cards: 0,\n cardsLoaded: false,\n },\n teams: {\n active: 0,\n cloudArchived: 0,\n teamsLoaded: false,\n },\n};\n\n// represents the usage associated with this workspace\nexport default function usage(state: CloudUsage = emptyUsage, action: MMReduxAction) {\n switch (action.type) {\n case CloudTypes.RECEIVED_MESSAGES_USAGE: {\n return {\n ...state,\n messages: {\n history: action.data,\n historyLoaded: true,\n },\n };\n }\n case CloudTypes.RECEIVED_FILES_USAGE: {\n return {\n ...state,\n files: {\n totalStorage: action.data,\n totalStorageLoaded: true,\n },\n };\n }\n case CloudTypes.RECEIVED_BOARDS_USAGE: {\n return {\n ...state,\n boards: {\n cards: action.data,\n cardsLoaded: true,\n },\n };\n }\n case CloudTypes.RECEIVED_TEAMS_USAGE: {\n return {\n ...state,\n teams: {\n ...action.data,\n teamsLoaded: true,\n },\n };\n }\n default:\n return state;\n }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport isEqual from 'lodash/isEqual';\nimport type {AnyAction} from 'redux';\nimport {combineReducers} from 'redux';\n\nimport type {Team} from '@mattermost/types/teams';\nimport type {UserProfile, UsersState} from '@mattermost/types/users';\nimport type {IDMappedObjects, RelationOneToManyUnique, RelationOneToOne} from '@mattermost/types/utilities';\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {UserTypes, ChannelTypes} from 'mattermost-redux/action_types';\n\nfunction profilesToSet(state: RelationOneToManyUnique<Team, UserProfile>, action: AnyAction) {\n const id = action.id;\n const users: UserProfile[] = Object.values(action.data);\n\n return users.reduce((nextState, user) => addProfileToSet(nextState, id, user.id), state);\n}\n\nfunction removeProfilesFromSet(state: RelationOneToManyUnique<Team, UserProfile>, action: AnyAction) {\n const id = action.id;\n const users: UserProfile[] = Object.values(action.data);\n return users.reduce((nextState, user) => removeProfileFromSet(nextState, {type: '', data: {id, user_id: user.id}}), state);\n}\n\nfunction profileListToSet(state: RelationOneToManyUnique<Team, UserProfile>, action: AnyAction, replace = false) {\n const id = action.id;\n const users: UserProfile[] = action.data || [];\n\n if (replace) {\n return {\n ...state,\n [id]: new Set(users.map((user) => user.id)),\n };\n }\n\n return users.reduce((nextState, user) => addProfileToSet(nextState, id, user.id), state);\n}\n\nfunction removeProfileListFromSet(state: RelationOneToManyUnique<Team, UserProfile>, action: AnyAction) {\n const id = action.id;\n const nextSet = new Set(state[id]);\n if (action.data) {\n action.data.forEach((profile: UserProfile) => {\n nextSet.delete(profile.id);\n });\n\n return {\n ...state,\n [id]: nextSet,\n };\n }\n\n return state;\n}\n\nfunction addProfileToSet(state: RelationOneToManyUnique<Team, UserProfile>, id: string, userId: string) {\n const nextSet = new Set(state[id]);\n nextSet.add(userId);\n return {\n ...state,\n [id]: nextSet,\n };\n}\n\nfunction removeProfileFromSets(state: RelationOneToManyUnique<Team, UserProfile>, action: AnyAction) {\n const newState = {...state};\n let removed = false;\n Object.keys(state).forEach((key) => {\n if (newState[key].has(action.data.user_id)) {\n newState[key] = new Set(newState[key]);\n newState[key].delete(action.data.user_id);\n removed = true;\n }\n });\n return removed ? newState : state;\n}\n\nfunction removeProfileFromSet(state: RelationOneToManyUnique<Team, UserProfile>, action: AnyAction) {\n const {id, user_id: userId} = action.data;\n\n const nextSet = new Set(state[id]);\n nextSet.delete(userId);\n return {\n ...state,\n [id]: nextSet,\n };\n}\n\nfunction currentUserId(state: UsersState['currentUserId'] = '', action: MMReduxAction) {\n switch (action.type) {\n case UserTypes.RECEIVED_ME: {\n const data = action.data;\n\n return data.id;\n }\n\n case UserTypes.LOGIN: { // Used by the mobile app\n const {user} = action.data;\n\n return user ? user.id : state;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return '';\n }\n\n return state;\n}\n\nfunction mySessions(state: UsersState['mySessions'] = [], action: MMReduxAction) {\n switch (action.type) {\n case UserTypes.RECEIVED_SESSIONS:\n return [...action.data];\n\n case UserTypes.RECEIVED_REVOKED_SESSION: {\n let index = -1;\n const length = state.length;\n for (let i = 0; i < length; i++) {\n if (state[i].id === action.sessionId) {\n index = i;\n break;\n }\n }\n if (index > -1) {\n return state.slice(0, index).concat(state.slice(index + 1));\n }\n\n return state;\n }\n\n case UserTypes.REVOKE_ALL_USER_SESSIONS_SUCCESS:\n if (action.data.isCurrentUser === true) {\n return [];\n }\n return state;\n\n case UserTypes.REVOKE_SESSIONS_FOR_ALL_USERS_SUCCESS:\n return [];\n\n case UserTypes.LOGOUT_SUCCESS:\n return [];\n\n default:\n return state;\n }\n}\n\nfunction myAudits(state: UsersState['myAudits'] = [], action: MMReduxAction) {\n switch (action.type) {\n case UserTypes.RECEIVED_AUDITS:\n return [...action.data];\n\n case UserTypes.LOGOUT_SUCCESS:\n return [];\n\n default:\n return state;\n }\n}\n\nfunction receiveUserProfile(state: IDMappedObjects<UserProfile>, received: UserProfile) {\n const existing = state[received.id];\n\n if (!existing) {\n // No existing data to merge with\n return {\n ...state,\n [received.id]: received,\n };\n }\n\n const merged = {\n ...existing,\n ...received,\n };\n\n // If there was a remote_id but not anymore, remove it\n if (existing.remote_id && !received.remote_id) {\n delete merged.remote_id;\n }\n\n // MM-53377:\n // For non-admin users, certain API responses don't return details for the current user that would be sanitized\n // out for others. This currently includes:\n // - email (if PrivacySettings.ShowEmailAddress is false)\n // - first_name/last_name (if PrivacySettings.ShowFullName is false)\n // - last_password_update\n // - auth_service\n // - notify_props\n //\n // Because email, first_name, last_name, and auth_service can all be empty strings regularly, we can't just\n // merge the received user and the existing one together like we normally would. Instead, we can use the\n // existence of existing.notify_props or existing.last_password_update to determine which object has that extra\n // data so that it can take precedence. Those fields are:\n // 1. Never empty or zero by Go standards\n // 2. Only ever sent to the current user, not even to admins, so we know that the object contains privileged data\n //\n // Note that admins may have the email/name/auth_service of other users loaded as well. This does not prevent that\n // data from being replaced when merging sanitized user objects. There doesn't seem to be a way for us to detect\n // whether the object is sanitized for admins.\n if (existing.notify_props && (!received.notify_props || Object.keys(received.notify_props).length === 0)) {\n merged.email = existing.email;\n merged.first_name = existing.first_name;\n merged.last_name = existing.last_name;\n merged.last_password_update = existing.last_password_update;\n merged.auth_service = existing.auth_service;\n merged.notify_props = existing.notify_props;\n }\n\n if (isEqual(existing, merged)) {\n return state;\n }\n\n return {\n ...state,\n [merged.id]: merged,\n };\n}\n\nfunction profiles(state: UsersState['profiles'] = {}, action: MMReduxAction) {\n switch (action.type) {\n case UserTypes.RECEIVED_ME:\n case UserTypes.RECEIVED_PROFILE: {\n const user = action.data;\n\n return receiveUserProfile(state, user);\n }\n case UserTypes.RECEIVED_PROFILES_LIST: {\n const users: UserProfile[] = action.data;\n\n return users.reduce(receiveUserProfile, state);\n }\n case UserTypes.RECEIVED_PROFILES: {\n const users: UserProfile[] = Object.values(action.data);\n\n return users.reduce(receiveUserProfile, state);\n }\n\n case UserTypes.RECEIVED_TERMS_OF_SERVICE_STATUS: {\n const data = action.data;\n return {\n ...state,\n [data.user_id]: {\n ...state[data.user_id],\n terms_of_service_id: data.terms_of_service_id,\n terms_of_service_create_at: data.terms_of_service_create_at,\n },\n };\n }\n case UserTypes.PROFILE_NO_LONGER_VISIBLE: {\n if (state[action.data.user_id]) {\n const newState = {...state};\n delete newState[action.data.user_id];\n return newState;\n }\n return state;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction profilesInTeam(state: UsersState['profilesInTeam'] = {}, action: MMReduxAction) {\n switch (action.type) {\n case UserTypes.RECEIVED_PROFILE_IN_TEAM:\n return addProfileToSet(state, action.data.id, action.data.user_id);\n\n case UserTypes.RECEIVED_PROFILES_LIST_IN_TEAM:\n return profileListToSet(state, action);\n\n case UserTypes.RECEIVED_PROFILES_IN_TEAM:\n return profilesToSet(state, action);\n\n case UserTypes.RECEIVED_PROFILE_NOT_IN_TEAM:\n return removeProfileFromSet(state, action);\n\n case UserTypes.RECEIVED_PROFILES_LIST_NOT_IN_TEAM:\n return removeProfileListFromSet(state, action);\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n case UserTypes.PROFILE_NO_LONGER_VISIBLE:\n return removeProfileFromSets(state, action);\n\n default:\n return state;\n }\n}\n\nfunction profilesNotInTeam(state: UsersState['profilesNotInTeam'] = {}, action: MMReduxAction) {\n switch (action.type) {\n case UserTypes.RECEIVED_PROFILE_NOT_IN_TEAM:\n return addProfileToSet(state, action.data.id, action.data.user_id);\n\n case UserTypes.RECEIVED_PROFILES_LIST_NOT_IN_TEAM:\n return profileListToSet(state, action);\n\n case UserTypes.RECEIVED_PROFILES_LIST_NOT_IN_TEAM_AND_REPLACE:\n return profileListToSet(state, action, true);\n\n case UserTypes.RECEIVED_PROFILE_IN_TEAM:\n return removeProfileFromSet(state, action);\n\n case UserTypes.RECEIVED_PROFILES_LIST_IN_TEAM:\n return removeProfileListFromSet(state, action);\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n case UserTypes.PROFILE_NO_LONGER_VISIBLE:\n return removeProfileFromSets(state, action);\n\n default:\n return state;\n }\n}\n\nfunction profilesWithoutTeam(state: UsersState['profilesWithoutTeam'] = new Set<string>(), action: MMReduxAction) {\n switch (action.type) {\n case UserTypes.RECEIVED_PROFILE_WITHOUT_TEAM: {\n const nextSet = new Set(state);\n Object.values(action.data as string[]).forEach((id: string) => nextSet.add(id));\n return nextSet;\n }\n case UserTypes.RECEIVED_PROFILES_LIST_WITHOUT_TEAM: {\n const nextSet = new Set(state);\n action.data.forEach((user: UserProfile) => nextSet.add(user.id));\n return nextSet;\n }\n case UserTypes.RECEIVED_PROFILE_IN_TEAM: {\n const nextSet = new Set(state);\n nextSet.delete(action.data.id);\n return nextSet;\n }\n case UserTypes.PROFILE_NO_LONGER_VISIBLE: {\n const nextSet = new Set(state);\n nextSet.delete(action.data.user_id);\n return nextSet;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return new Set<string>();\n\n default:\n return state;\n }\n}\n\nfunction profilesInChannel(state: UsersState['profilesInChannel'] = {}, action: MMReduxAction) {\n switch (action.type) {\n case UserTypes.RECEIVED_PROFILE_IN_CHANNEL:\n return addProfileToSet(state, action.data.id, action.data.user_id);\n\n case UserTypes.RECEIVED_PROFILES_LIST_IN_CHANNEL:\n return profileListToSet(state, action);\n\n case UserTypes.RECEIVED_PROFILES_IN_CHANNEL:\n return profilesToSet(state, action);\n\n case UserTypes.RECEIVED_PROFILE_NOT_IN_CHANNEL:\n return removeProfileFromSet(state, action);\n\n case ChannelTypes.CHANNEL_MEMBER_REMOVED:\n return removeProfileFromSet(state, {\n type: '',\n data: {\n id: action.data.channel_id,\n user_id: action.data.user_id,\n }});\n\n case UserTypes.PROFILE_NO_LONGER_VISIBLE:\n return removeProfileFromSets(state, action);\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction profilesNotInChannel(state: UsersState['profilesNotInChannel'] = {}, action: MMReduxAction) {\n switch (action.type) {\n case UserTypes.RECEIVED_PROFILE_NOT_IN_CHANNEL:\n return addProfileToSet(state, action.data.id, action.data.user_id);\n\n case UserTypes.RECEIVED_PROFILES_LIST_NOT_IN_CHANNEL:\n return profileListToSet(state, action);\n\n case UserTypes.RECEIVED_PROFILES_LIST_NOT_IN_CHANNEL_AND_REPLACE:\n return profileListToSet(state, action, true);\n\n case UserTypes.RECEIVED_PROFILES_NOT_IN_CHANNEL:\n return profilesToSet(state, action);\n\n case UserTypes.RECEIVED_PROFILES_IN_CHANNEL:\n return removeProfilesFromSet(state, action);\n\n case UserTypes.RECEIVED_PROFILE_IN_CHANNEL:\n return removeProfileFromSet(state, action);\n\n case ChannelTypes.CHANNEL_MEMBER_ADDED:\n return removeProfileFromSet(state, {\n type: '',\n data: {\n id: action.data.channel_id,\n user_id: action.data.user_id,\n }});\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n case UserTypes.PROFILE_NO_LONGER_VISIBLE:\n return removeProfileFromSets(state, action);\n\n default:\n return state;\n }\n}\n\nfunction profilesInGroup(state: UsersState['profilesInGroup'] = {}, action: MMReduxAction) {\n switch (action.type) {\n case UserTypes.RECEIVED_PROFILES_LIST_IN_GROUP: {\n return profileListToSet(state, action);\n }\n case UserTypes.RECEIVED_PROFILES_FOR_GROUP: {\n const id = action.id;\n const nextSet = new Set(state[id]);\n if (action.data) {\n action.data.forEach((profile: any) => {\n nextSet.add(profile.user_id);\n });\n\n return {\n ...state,\n [id]: nextSet,\n };\n }\n return state;\n }\n case UserTypes.RECEIVED_PROFILES_LIST_TO_REMOVE_FROM_GROUP: {\n const id = action.id;\n const nextSet = new Set(state[id]);\n if (action.data) {\n action.data.forEach((profile: any) => {\n nextSet.delete(profile.user_id);\n });\n\n return {\n ...state,\n [id]: nextSet,\n };\n }\n return state;\n }\n\n case UserTypes.PROFILE_NO_LONGER_VISIBLE:\n return removeProfileFromSets(state, action);\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction profilesNotInGroup(state: UsersState['profilesNotInGroup'] = {}, action: MMReduxAction) {\n switch (action.type) {\n case UserTypes.RECEIVED_PROFILES_FOR_GROUP: {\n const id = action.id;\n const nextSet = new Set(state[id]);\n if (action.data) {\n action.data.forEach((profile: any) => {\n nextSet.delete(profile.user_id);\n });\n\n return {\n ...state,\n [id]: nextSet,\n };\n }\n return state;\n }\n case UserTypes.RECEIVED_PROFILES_LIST_NOT_IN_GROUP: {\n return profileListToSet(state, action);\n }\n\n case UserTypes.PROFILE_NO_LONGER_VISIBLE:\n return removeProfileFromSets(state, action);\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction dndEndTimes(state: UsersState['dndEndTimes'] = {}, action: MMReduxAction) {\n switch (action.type) {\n case UserTypes.RECEIVED_DND_END_TIMES: {\n return {...state, ...action.data};\n }\n case UserTypes.PROFILE_NO_LONGER_VISIBLE: {\n if (state[action.data.user_id]) {\n const newState = {...state};\n delete newState[action.data.user_id];\n return newState;\n }\n return state;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction statuses(state: RelationOneToOne<UserProfile, string> = {}, action: MMReduxAction) {\n switch (action.type) {\n case UserTypes.RECEIVED_STATUSES: {\n return {...state, ...action.data};\n }\n\n case UserTypes.PROFILE_NO_LONGER_VISIBLE: {\n if (state[action.data.user_id]) {\n const newState = {...state};\n delete newState[action.data.user_id];\n return newState;\n }\n return state;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction isManualStatus(state: RelationOneToOne<UserProfile, boolean> = {}, action: MMReduxAction) {\n switch (action.type) {\n case UserTypes.RECEIVED_STATUSES_IS_MANUAL: {\n return {...state, ...action.data};\n }\n\n case UserTypes.PROFILE_NO_LONGER_VISIBLE: {\n if (state[action.data.user_id]) {\n const newState = {...state};\n delete newState[action.data.user_id];\n return newState;\n }\n return state;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction myUserAccessTokens(state: UsersState['myUserAccessTokens'] = {}, action: MMReduxAction) {\n switch (action.type) {\n case UserTypes.RECEIVED_MY_USER_ACCESS_TOKEN: {\n const nextState = {...state};\n nextState[action.data.id] = action.data;\n\n return nextState;\n }\n case UserTypes.RECEIVED_MY_USER_ACCESS_TOKENS: {\n const nextState = {...state};\n\n for (const uat of action.data) {\n nextState[uat.id] = uat;\n }\n\n return nextState;\n }\n case UserTypes.REVOKED_USER_ACCESS_TOKEN: {\n const nextState = {...state};\n Reflect.deleteProperty(nextState, action.data);\n\n return nextState;\n }\n\n case UserTypes.ENABLED_USER_ACCESS_TOKEN: {\n if (state[action.data]) {\n const nextState = {...state};\n nextState[action.data] = {...nextState[action.data], is_active: true};\n return nextState;\n }\n return state;\n }\n\n case UserTypes.DISABLED_USER_ACCESS_TOKEN: {\n if (state[action.data]) {\n const nextState = {...state};\n nextState[action.data] = {...nextState[action.data], is_active: false};\n return nextState;\n }\n return state;\n }\n\n case UserTypes.CLEAR_MY_USER_ACCESS_TOKENS:\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n\n default:\n return state;\n }\n}\n\nfunction stats(state: UsersState['stats'] = {}, action: MMReduxAction) {\n switch (action.type) {\n case UserTypes.RECEIVED_USER_STATS: {\n const stat = action.data;\n return {\n ...state,\n ...stat,\n };\n }\n default:\n return state;\n }\n}\n\nfunction filteredStats(state: UsersState['filteredStats'] = {}, action: MMReduxAction) {\n switch (action.type) {\n case UserTypes.RECEIVED_FILTERED_USER_STATS: {\n const stat = action.data;\n return {\n ...state,\n ...stat,\n };\n }\n default:\n return state;\n }\n}\n\nfunction lastActivity(state: UsersState['lastActivity'] = {}, action: MMReduxAction) {\n switch (action.type) {\n case UserTypes.RECEIVED_LAST_ACTIVITIES: {\n return {...state, ...action.data};\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n case UserTypes.PROFILE_NO_LONGER_VISIBLE: {\n if (state[action.data.user_id]) {\n const newState = {...state};\n delete newState[action.data.user_id];\n return newState;\n }\n return state;\n }\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n\n // the current selected user\n currentUserId,\n\n // array with the user's sessions\n mySessions,\n\n // array with the user's audits\n myAudits,\n\n // object where every key is the token id and has a user access token as a value\n myUserAccessTokens,\n\n // object where every key is a user id and has an object with the users details\n profiles,\n\n // object where every key is a team id and has a Set with the users id that are members of the team\n profilesInTeam,\n\n // object where every key is a team id and has a Set with the users id that are not members of the team\n profilesNotInTeam,\n\n // set with user ids for users that are not on any team\n profilesWithoutTeam,\n\n // object where every key is a channel id and has a Set with the users id that are members of the channel\n profilesInChannel,\n\n // object where every key is a channel id and has a Set with the users id that are not members of the channel\n profilesNotInChannel,\n\n // object where every key is a group id and has a Set with the users id that are members of the group\n profilesInGroup,\n\n // object where every key is a group id and has a Set with the users id that are members of the group\n profilesNotInGroup,\n\n // object where every key is the user id and has a value with the dnd end time of each user\n dndEndTimes,\n\n // object where every key is the user id and has a value with the current status of each user\n statuses,\n\n // object where every key is the user id and has a value with a flag determining if their status was set manually\n isManualStatus,\n\n // Total user stats\n stats,\n\n // Total user stats after filters have been applied\n filteredStats,\n\n // object where every key is the user id and has a value with the last activity timestamp\n lastActivity,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport admin from './admin';\nimport apps from './apps';\nimport bots from './bots';\nimport channelBookmarks from './channel_bookmarks';\nimport channelCategories from './channel_categories';\nimport channels from './channels';\nimport cloud from './cloud';\nimport emojis from './emojis';\nimport files from './files';\nimport general from './general';\nimport groups from './groups';\nimport hostedCustomer from './hosted_customer';\nimport integrations from './integrations';\nimport jobs from './jobs';\nimport limits from './limits';\nimport posts from './posts';\nimport preferences from './preferences';\nimport roles from './roles';\nimport scheduledPosts from './scheduled_posts';\nimport schemes from './schemes';\nimport search from './search';\nimport teams from './teams';\nimport threads from './threads';\nimport typing from './typing';\nimport usage from './usage';\nimport users from './users';\n\nexport default combineReducers({\n general,\n users,\n limits,\n teams,\n channels,\n posts,\n files,\n preferences,\n typing,\n integrations,\n emojis,\n admin,\n jobs,\n search,\n roles,\n schemes,\n groups,\n bots,\n threads,\n channelCategories,\n apps,\n cloud,\n usage,\n hostedCustomer,\n channelBookmarks,\n scheduledPosts,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AnyAction} from 'redux';\n\nimport type {Typing} from '@mattermost/types/typing';\n\nimport {WebsocketEvents} from 'mattermost-redux/constants';\n\nexport default function typing(state: Typing = {}, action: AnyAction): Typing {\n const {\n data,\n type,\n } = action;\n\n switch (type) {\n case WebsocketEvents.TYPING: {\n const {\n id,\n userId,\n now,\n } = data;\n\n if (id && userId) {\n return {\n ...state,\n [id]: {\n ...(state[id] || {}),\n [userId]: now,\n },\n };\n }\n\n return state;\n }\n case WebsocketEvents.STOP_TYPING: {\n const {\n id,\n userId,\n now,\n } = data;\n\n if (state[id] && state[id][userId] <= now) {\n const nextState: Typing = {\n ...state,\n [id]: {...state[id]},\n };\n\n Reflect.deleteProperty(nextState[id], userId);\n\n if (Object.keys(nextState[id]).length === 0) {\n Reflect.deleteProperty(nextState, id);\n }\n\n return nextState;\n }\n\n return state;\n }\n\n default:\n return state;\n }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AnyAction} from 'redux';\n\nimport type {RequestStatusType} from '@mattermost/types/requests';\n\nimport {RequestStatus} from 'mattermost-redux/constants';\n\nexport function initialRequestState(): RequestStatusType {\n return {\n status: RequestStatus.NOT_STARTED,\n error: null,\n };\n}\n\nexport function handleRequest(\n REQUEST: string,\n SUCCESS: string,\n FAILURE: string,\n state: RequestStatusType,\n action: AnyAction,\n): RequestStatusType {\n switch (action.type) {\n case REQUEST:\n return {\n ...state,\n status: RequestStatus.STARTED,\n };\n case SUCCESS:\n return {\n ...state,\n status: RequestStatus.SUCCESS,\n error: null,\n };\n case FAILURE: {\n return {\n ...state,\n status: RequestStatus.FAILURE,\n error: action.error,\n };\n }\n default:\n return state;\n }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AnyAction} from 'redux';\nimport {combineReducers} from 'redux';\n\nimport type {RequestStatusType} from '@mattermost/types/requests';\n\nimport {AdminTypes} from 'mattermost-redux/action_types';\n\nimport {handleRequest, initialRequestState} from './helpers';\n\nfunction createCompliance(state: RequestStatusType = initialRequestState(), action: AnyAction): RequestStatusType {\n return handleRequest(\n AdminTypes.CREATE_COMPLIANCE_REQUEST,\n AdminTypes.CREATE_COMPLIANCE_SUCCESS,\n AdminTypes.CREATE_COMPLIANCE_FAILURE,\n state,\n action,\n );\n}\n\nexport default combineReducers({\n createCompliance,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AnyAction} from 'redux';\nimport {combineReducers} from 'redux';\n\nimport type {RequestStatusType} from '@mattermost/types/requests';\n\nimport {ChannelTypes} from 'mattermost-redux/action_types';\n\nimport {handleRequest, initialRequestState} from './helpers';\n\nfunction myChannels(state: RequestStatusType = initialRequestState(), action: AnyAction): RequestStatusType {\n return handleRequest(\n ChannelTypes.CHANNELS_REQUEST,\n ChannelTypes.CHANNELS_SUCCESS,\n ChannelTypes.CHANNELS_FAILURE,\n state,\n action,\n );\n}\n\nfunction createChannel(state: RequestStatusType = initialRequestState(), action: AnyAction): RequestStatusType {\n return handleRequest(\n ChannelTypes.CREATE_CHANNEL_REQUEST,\n ChannelTypes.CREATE_CHANNEL_SUCCESS,\n ChannelTypes.CREATE_CHANNEL_FAILURE,\n state,\n action,\n );\n}\n\nfunction getChannels(state: RequestStatusType = initialRequestState(), action: AnyAction): RequestStatusType {\n return handleRequest(\n ChannelTypes.GET_CHANNELS_REQUEST,\n ChannelTypes.GET_CHANNELS_SUCCESS,\n ChannelTypes.GET_CHANNELS_FAILURE,\n state,\n action,\n );\n}\n\nfunction getAllChannels(state: RequestStatusType = initialRequestState(), action: AnyAction): RequestStatusType {\n return handleRequest(\n ChannelTypes.GET_ALL_CHANNELS_REQUEST,\n ChannelTypes.GET_ALL_CHANNELS_SUCCESS,\n ChannelTypes.GET_ALL_CHANNELS_FAILURE,\n state,\n action,\n );\n}\n\nexport default combineReducers({\n getChannels,\n getAllChannels,\n myChannels,\n createChannel,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AnyAction} from 'redux';\nimport {combineReducers} from 'redux';\n\nimport type {RequestStatusType} from '@mattermost/types/requests';\n\nimport {FileTypes} from 'mattermost-redux/action_types';\nimport {RequestStatus} from 'mattermost-redux/constants';\n\nimport {initialRequestState} from './helpers';\n\nexport function handleUploadFilesRequest(\n REQUEST: string,\n SUCCESS: string,\n FAILURE: string,\n CANCEL: string,\n state: RequestStatusType,\n action: AnyAction,\n): RequestStatusType {\n switch (action.type) {\n case REQUEST:\n return {\n ...state,\n status: RequestStatus.STARTED,\n };\n case SUCCESS:\n return {\n ...state,\n status: RequestStatus.SUCCESS,\n error: null,\n };\n case FAILURE: {\n let error = action.error;\n\n if (error instanceof Error) {\n error = Object.hasOwn(error, 'intl') ? {...error} : error.toString();\n }\n\n return {\n ...state,\n status: RequestStatus.FAILURE,\n error,\n };\n }\n case CANCEL:\n return {\n ...state,\n status: RequestStatus.CANCELLED,\n error: null,\n };\n default:\n return state;\n }\n}\n\nfunction uploadFiles(state: RequestStatusType = initialRequestState(), action: AnyAction): RequestStatusType {\n return handleUploadFilesRequest(\n FileTypes.UPLOAD_FILES_REQUEST,\n FileTypes.UPLOAD_FILES_SUCCESS,\n FileTypes.UPLOAD_FILES_FAILURE,\n FileTypes.UPLOAD_FILES_CANCEL,\n state,\n action,\n );\n}\n\nexport default combineReducers({\n uploadFiles,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AnyAction} from 'redux';\nimport {combineReducers} from 'redux';\n\nimport type {RequestStatusType} from '@mattermost/types/requests';\n\nimport {GeneralTypes} from 'mattermost-redux/action_types';\n\nimport {handleRequest, initialRequestState} from './helpers';\n\nfunction websocket(state: RequestStatusType = initialRequestState(), action: AnyAction): RequestStatusType {\n if (action.type === GeneralTypes.WEBSOCKET_CLOSED) {\n return initialRequestState();\n }\n\n return handleRequest(\n GeneralTypes.WEBSOCKET_REQUEST,\n GeneralTypes.WEBSOCKET_SUCCESS,\n GeneralTypes.WEBSOCKET_FAILURE,\n state,\n action,\n );\n}\n\nexport default combineReducers({\n websocket,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AnyAction} from 'redux';\nimport {combineReducers} from 'redux';\n\nimport type {RequestStatusType} from '@mattermost/types/requests';\n\nimport {PostTypes} from 'mattermost-redux/action_types';\n\nimport {handleRequest, initialRequestState} from './helpers';\n\nfunction createPost(state: RequestStatusType = initialRequestState(), action: AnyAction): RequestStatusType {\n if (action.type === PostTypes.CREATE_POST_RESET_REQUEST) {\n return initialRequestState();\n }\n\n return handleRequest(\n PostTypes.CREATE_POST_REQUEST,\n PostTypes.CREATE_POST_SUCCESS,\n PostTypes.CREATE_POST_FAILURE,\n state,\n action,\n );\n}\n\nfunction editPost(state: RequestStatusType = initialRequestState(), action: AnyAction): RequestStatusType {\n return handleRequest(\n PostTypes.EDIT_POST_REQUEST,\n PostTypes.EDIT_POST_SUCCESS,\n PostTypes.EDIT_POST_FAILURE,\n state,\n action,\n );\n}\n\nfunction getPostThread(state: RequestStatusType = initialRequestState(), action: AnyAction): RequestStatusType {\n return handleRequest(\n PostTypes.GET_POST_THREAD_REQUEST,\n PostTypes.GET_POST_THREAD_SUCCESS,\n PostTypes.GET_POST_THREAD_FAILURE,\n state,\n action,\n );\n}\n\nexport default combineReducers({\n createPost,\n editPost,\n getPostThread,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AnyAction} from 'redux';\nimport {combineReducers} from 'redux';\n\nimport type {RequestStatusType} from '@mattermost/types/requests';\n\nimport {RoleTypes} from 'mattermost-redux/action_types';\n\nimport {handleRequest, initialRequestState} from './helpers';\n\nfunction getRolesByNames(state: RequestStatusType = initialRequestState(), action: AnyAction): RequestStatusType {\n return handleRequest(\n RoleTypes.ROLES_BY_NAMES_REQUEST,\n RoleTypes.ROLES_BY_NAMES_SUCCESS,\n RoleTypes.ROLES_BY_NAMES_FAILURE,\n state,\n action,\n );\n}\n\nfunction getRoleByName(state: RequestStatusType = initialRequestState(), action: AnyAction): RequestStatusType {\n return handleRequest(\n RoleTypes.ROLE_BY_NAME_REQUEST,\n RoleTypes.ROLE_BY_NAME_SUCCESS,\n RoleTypes.ROLE_BY_NAME_FAILURE,\n state,\n action,\n );\n}\n\nfunction getRole(state: RequestStatusType = initialRequestState(), action: AnyAction): RequestStatusType {\n return handleRequest(\n RoleTypes.ROLE_BY_ID_REQUEST,\n RoleTypes.ROLE_BY_ID_SUCCESS,\n RoleTypes.ROLE_BY_ID_FAILURE,\n state,\n action,\n );\n}\n\nfunction editRole(state: RequestStatusType = initialRequestState(), action: AnyAction): RequestStatusType {\n return handleRequest(\n RoleTypes.EDIT_ROLE_REQUEST,\n RoleTypes.EDIT_ROLE_SUCCESS,\n RoleTypes.EDIT_ROLE_FAILURE,\n state,\n action,\n );\n}\n\nexport default combineReducers({\n getRolesByNames,\n getRoleByName,\n getRole,\n editRole,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AnyAction} from 'redux';\nimport {combineReducers} from 'redux';\n\nimport type {RequestStatusType} from '@mattermost/types/requests';\n\nimport {SearchTypes} from 'mattermost-redux/action_types';\n\nimport {handleRequest, initialRequestState} from './helpers';\n\nfunction flaggedPosts(state: RequestStatusType = initialRequestState(), action: AnyAction): RequestStatusType {\n if (action.type === SearchTypes.REMOVE_SEARCH_POSTS) {\n return initialRequestState();\n }\n\n return handleRequest(\n SearchTypes.SEARCH_FLAGGED_POSTS_REQUEST,\n SearchTypes.SEARCH_FLAGGED_POSTS_SUCCESS,\n SearchTypes.SEARCH_FLAGGED_POSTS_FAILURE,\n state,\n action,\n );\n}\n\nfunction pinnedPosts(state: RequestStatusType = initialRequestState(), action: AnyAction): RequestStatusType {\n if (action.type === SearchTypes.REMOVE_SEARCH_POSTS) {\n return initialRequestState();\n }\n\n return handleRequest(\n SearchTypes.SEARCH_PINNED_POSTS_REQUEST,\n SearchTypes.SEARCH_PINNED_POSTS_SUCCESS,\n SearchTypes.SEARCH_PINNED_POSTS_FAILURE,\n state,\n action,\n );\n}\n\nexport default combineReducers({\n flaggedPosts,\n pinnedPosts,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AnyAction} from 'redux';\nimport {combineReducers} from 'redux';\n\nimport type {RequestStatusType} from '@mattermost/types/requests';\n\nimport {TeamTypes} from 'mattermost-redux/action_types';\n\nimport {handleRequest, initialRequestState} from './helpers';\n\nfunction getTeams(state: RequestStatusType = initialRequestState(), action: AnyAction): RequestStatusType {\n return handleRequest(\n TeamTypes.GET_TEAMS_REQUEST,\n TeamTypes.GET_TEAMS_SUCCESS,\n TeamTypes.GET_TEAMS_FAILURE,\n state,\n action,\n );\n}\n\nexport default combineReducers({\n getTeams,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AnyAction} from 'redux';\nimport {combineReducers} from 'redux';\n\nimport type {RequestStatusType} from '@mattermost/types/requests';\n\nimport {UserTypes} from 'mattermost-redux/action_types';\nimport {RequestStatus} from 'mattermost-redux/constants';\n\nimport {handleRequest, initialRequestState} from './helpers';\n\nfunction login(state: RequestStatusType = initialRequestState(), action: AnyAction): RequestStatusType {\n switch (action.type) {\n case UserTypes.LOGIN_REQUEST:\n return {...state, status: RequestStatus.STARTED};\n\n case UserTypes.LOGIN_SUCCESS:\n return {...state, status: RequestStatus.SUCCESS, error: null};\n\n case UserTypes.LOGIN_FAILURE:\n return {...state, status: RequestStatus.FAILURE, error: action.error};\n\n case UserTypes.LOGOUT_SUCCESS:\n return {...state, status: RequestStatus.NOT_STARTED, error: null};\n\n default:\n return state;\n }\n}\n\nfunction logout(state: RequestStatusType = initialRequestState(), action: AnyAction): RequestStatusType {\n switch (action.type) {\n case UserTypes.LOGOUT_REQUEST:\n return {...state, status: RequestStatus.STARTED};\n\n case UserTypes.LOGOUT_SUCCESS:\n return {...state, status: RequestStatus.SUCCESS, error: null};\n\n case UserTypes.LOGOUT_FAILURE:\n return {...state, status: RequestStatus.FAILURE, error: action.error};\n\n case UserTypes.RESET_LOGOUT_STATE:\n return initialRequestState();\n\n default:\n return state;\n }\n}\n\nfunction autocompleteUsers(state: RequestStatusType = initialRequestState(), action: AnyAction): RequestStatusType {\n return handleRequest(\n UserTypes.AUTOCOMPLETE_USERS_REQUEST,\n UserTypes.AUTOCOMPLETE_USERS_SUCCESS,\n UserTypes.AUTOCOMPLETE_USERS_FAILURE,\n state,\n action,\n );\n}\n\nfunction updateMe(state: RequestStatusType = initialRequestState(), action: AnyAction): RequestStatusType {\n return handleRequest(\n UserTypes.UPDATE_ME_REQUEST,\n UserTypes.UPDATE_ME_SUCCESS,\n UserTypes.UPDATE_ME_FAILURE,\n state,\n action,\n );\n}\n\nexport default combineReducers({\n login,\n logout,\n autocompleteUsers,\n updateMe,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport entities from './entities';\nimport errors from './errors';\nimport requests from './requests';\nimport websocket from './websocket';\n\nexport default {\n entities,\n errors,\n requests,\n websocket,\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {ErrorTypes} from 'mattermost-redux/action_types';\n\nexport default ((state: Array<{error: any;displayable?: boolean;date: string}> = [], action: MMReduxAction) => {\n switch (action.type) {\n case ErrorTypes.DISMISS_ERROR: {\n const nextState = [...state];\n nextState.splice(action.index!, 1);\n\n return nextState;\n }\n case ErrorTypes.LOG_ERROR: {\n const nextState = [...state];\n const {displayable, error} = action;\n nextState.push({\n displayable,\n error,\n date: new Date(Date.now()).toUTCString(),\n });\n\n return nextState;\n }\n case ErrorTypes.RESTORE_ERRORS:\n return action.data;\n case ErrorTypes.CLEAR_ERRORS: {\n return [];\n }\n default:\n return state;\n }\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport admin from './admin';\nimport channels from './channels';\nimport files from './files';\nimport general from './general';\nimport posts from './posts';\nimport roles from './roles';\nimport search from './search';\nimport teams from './teams';\nimport users from './users';\n\nexport default combineReducers({\n channels,\n files,\n general,\n posts,\n teams,\n users,\n admin,\n search,\n roles,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {MMReduxAction} from 'mattermost-redux/action_types';\nimport {GeneralTypes, UserTypes} from 'mattermost-redux/action_types';\n\nfunction getInitialState() {\n return {\n connected: false,\n lastConnectAt: 0,\n lastDisconnectAt: 0,\n connectionId: '',\n serverHostname: '',\n };\n}\n\nexport default function reducer(state = getInitialState(), action: MMReduxAction) {\n if (!state.connected && action.type === GeneralTypes.WEBSOCKET_SUCCESS) {\n return {\n ...state,\n connected: true,\n lastConnectAt: action.timestamp,\n };\n } else if (state.connected && (action.type === GeneralTypes.WEBSOCKET_FAILURE || action.type === GeneralTypes.WEBSOCKET_CLOSED)) {\n return {\n ...state,\n connected: false,\n lastDisconnectAt: action.timestamp,\n serverHostname: '',\n };\n }\n\n if (action.type === UserTypes.LOGOUT_SUCCESS) {\n return getInitialState();\n }\n\n if (action.type === GeneralTypes.SET_CONNECTION_ID) {\n return {\n ...state,\n connectionId: action.payload.connectionId,\n };\n }\n\n if (action.type === GeneralTypes.SET_SERVER_HOSTNAME) {\n return {\n ...state,\n serverHostname: action.payload.serverHostname,\n };\n }\n\n return state;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {composeWithDevTools} from '@redux-devtools/extension';\nimport {\n applyMiddleware,\n legacy_createStore,\n} from 'redux';\nimport type {\n Reducer,\n Store} from 'redux';\nimport thunk from 'redux-thunk';\n\nimport type {GlobalState} from '@mattermost/types/store';\n\nimport {createReducer} from './helpers';\nimport initialState from './initial_state';\nimport reducerRegistry from './reducer_registry';\n\nimport serviceReducers from '../reducers';\n\n/**\n * Configures and constructs the redux store. Accepts the following parameters:\n * preloadedState - Any preloaded state to be applied to the store after it is initially configured.\n * appReducer - An object containing any app-specific reducer functions that the client needs.\n * getAppReducers - A function that returns the appReducer as defined above. Only used in development to enable hot reloading.\n */\nexport default function configureStore<S extends GlobalState>({\n appReducers,\n getAppReducers,\n preloadedState,\n}: {\n appReducers: Record<string, Reducer>;\n getAppReducers: () => Record<string, Reducer>;\n preloadedState: Partial<S>;\n}): Store {\n const baseState = {\n ...initialState,\n ...preloadedState,\n };\n\n const composeEnhancers = composeWithDevTools({\n shouldHotReload: false,\n trace: true,\n traceLimit: 25,\n autoPause: true,\n });\n\n const middleware = applyMiddleware(\n\n // @hmhealey I've added this extra argument to Thunks to store information related to the store that can't be\n // part of Redux state itself. At the moment, this is so that I can attach let DataLoaders dispatch actions.\n // If you want to make use of this, talk to me first since I want to know more.\n thunk.withExtraArgument({loaders: {}}),\n );\n\n const enhancers = composeEnhancers(middleware);\n\n const baseReducer = createReducer(serviceReducers, appReducers);\n\n const store = legacy_createStore(\n baseReducer,\n baseState,\n enhancers,\n );\n\n reducerRegistry.setChangeListener((reducers: Record<string, Reducer>) => {\n store.replaceReducer(createReducer(reducers, serviceReducers, appReducers));\n });\n\n if (module.hot) {\n // Enable Webpack hot module replacement for reducers\n module.hot.accept(() => {\n const registryReducers = reducerRegistry.getReducers();\n const nextServiceReducers = require('../reducers').default; // eslint-disable-line global-require\n const nextAppReducers = getAppReducers();\n\n // Ensure registryReducers comes first so that stored service/app reducers are replaced by the new ones\n store.replaceReducer(createReducer(registryReducers, nextServiceReducers, nextAppReducers));\n });\n }\n\n return store;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {Reducer} from 'redux';\n\n// Based on http://nicolasgallagher.com/redux-modules-and-code-splitting/\nexport class ReducerRegistry {\n emitChange?: (reducers: Record<string, Reducer>) => void;\n reducers: Record<string, Reducer> = {};\n\n setReducers = (reducers: Record<string, Reducer>): void => {\n this.reducers = reducers;\n };\n\n getReducers = (): Record<string, Reducer> => {\n return {...this.reducers};\n };\n\n register = (name: string, reducer: Reducer): void => {\n this.reducers = {...this.reducers, [name]: reducer};\n if (this.emitChange) {\n this.emitChange(this.getReducers());\n }\n };\n\n setChangeListener = (listener: (reducers: Record<string, Reducer>) => void): void => {\n this.emitChange = listener;\n };\n}\n\nconst reducerRegistry = new ReducerRegistry();\nexport default reducerRegistry;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AppBinding, AppField, AppForm} from '@mattermost/types/apps';\n\nimport {AppBindingLocations, AppFieldTypes} from 'mattermost-redux/constants/apps';\n\nexport function cleanBinding(binding: AppBinding, topLocation: string) {\n cleanBindingRec(binding, topLocation, 0);\n}\n\nfunction cleanBindingRec(binding: AppBinding, topLocation: string, depth: number) {\n if (!binding) {\n return;\n }\n\n const toRemove: number[] = [];\n const usedLabels: {[label: string]: boolean} = {};\n binding.bindings?.forEach((b, i) => {\n // Inheritance and defaults\n\n if (!b.app_id) {\n b.app_id = binding.app_id;\n }\n\n if (!b.label) {\n b.label = b.location || '';\n }\n\n b.location = binding.location + '/' + b.location;\n\n // Validation\n if (!b.app_id) {\n toRemove.unshift(i);\n return;\n }\n\n // No empty labels nor \"whitespace\" labels\n if (!b.label.trim()) {\n toRemove.unshift(i);\n return;\n }\n\n switch (topLocation) {\n case AppBindingLocations.COMMAND: {\n if (b.label.match(/ |\\t/)) {\n toRemove.unshift(i);\n return;\n }\n\n if (usedLabels[b.label]) {\n toRemove.unshift(i);\n return;\n }\n break;\n }\n case AppBindingLocations.CHANNEL_HEADER_ICON: {\n // First level of channel header icons must have an icon to show as the icon\n if (!b.icon && depth === 0) {\n toRemove.unshift(i);\n return;\n }\n break;\n }\n }\n\n // Must have only subbindings, a form or a submit call.\n const hasBindings = Boolean(b.bindings?.length);\n const hasForm = Boolean(b.form);\n const hasSubmit = Boolean(b.submit);\n if ((!hasBindings && !hasForm && !hasSubmit) ||\n (hasBindings && hasForm) ||\n (hasBindings && hasSubmit) ||\n (hasForm && hasSubmit)) {\n toRemove.unshift(i);\n return;\n }\n\n if (hasBindings) {\n cleanBindingRec(b, topLocation, depth + 1);\n\n // Remove invalid branches\n if (!b.bindings?.length) {\n toRemove.unshift(i);\n return;\n }\n } else if (hasForm) {\n if (!b.form?.submit && !b.form?.source) {\n toRemove.unshift(i);\n return;\n }\n\n cleanForm(b.form);\n }\n\n usedLabels[b.label] = true;\n });\n\n toRemove.forEach((i) => {\n binding.bindings?.splice(i, 1);\n });\n}\n\nexport function validateBindings(bindings: AppBinding[] | null = []): AppBinding[] {\n if (!bindings || (bindings.length && bindings.length === 0)) {\n return [];\n }\n const filterAndCleanBindings = (location: string): AppBinding[] => {\n const filteredBindings = bindings.filter((b) => b.location === location);\n if (filteredBindings?.length === 0) {\n return [];\n }\n filteredBindings.forEach((b) => cleanBinding(b, location));\n return filteredBindings.filter((b) => b.bindings?.length);\n };\n\n const channelHeaderBindings = filterAndCleanBindings(AppBindingLocations.CHANNEL_HEADER_ICON);\n const postMenuBindings = filterAndCleanBindings(AppBindingLocations.POST_MENU_ITEM);\n const commandBindings = filterAndCleanBindings(AppBindingLocations.COMMAND);\n\n return postMenuBindings.concat(channelHeaderBindings, commandBindings);\n}\n\nexport function cleanForm(form?: AppForm) {\n if (!form) {\n return;\n }\n\n const toRemove: number[] = [];\n const usedLabels: {[label: string]: boolean} = {};\n form.fields?.forEach((field, i) => {\n if (!field.name) {\n toRemove.unshift(i);\n return;\n }\n\n if (field.name.match(/ |\\t/)) {\n toRemove.unshift(i);\n return;\n }\n\n let label = field.label;\n if (!label) {\n label = field.name;\n }\n\n if (label.match(/ |\\t/)) {\n toRemove.unshift(i);\n return;\n }\n\n if (usedLabels[label]) {\n toRemove.unshift(i);\n return;\n }\n\n switch (field.type) {\n case AppFieldTypes.STATIC_SELECT:\n cleanStaticSelect(field);\n if (!field.options?.length) {\n toRemove.unshift(i);\n return;\n }\n break;\n case AppFieldTypes.DYNAMIC_SELECT:\n if (!field.lookup) {\n toRemove.unshift(i);\n return;\n }\n }\n usedLabels[label] = true;\n });\n\n toRemove.forEach((i) => {\n form.fields!.splice(i, 1);\n });\n}\n\nfunction cleanStaticSelect(field: AppField) {\n const toRemove: number[] = [];\n const usedLabels: {[label: string]: boolean} = {};\n const usedValues: {[label: string]: boolean} = {};\n field.options?.forEach((option, i) => {\n let label = option.label;\n if (!label) {\n label = option.value;\n }\n\n if (!label) {\n toRemove.unshift(i);\n return;\n }\n\n if (usedLabels[label]) {\n toRemove.unshift(i);\n return;\n }\n\n if (usedValues[option.value]) {\n toRemove.unshift(i);\n return;\n }\n\n usedLabels[label] = true;\n usedValues[option.value] = true;\n });\n\n toRemove.forEach((i) => {\n field.options?.splice(i, 1);\n });\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\n// insertWithoutDuplicates inserts an item into an array and returns the result. The provided array is not modified.\n// If the array already contains the given item, that item is moved to the new location instead of adding a duplicate.\n// If the array already had the given item at the given index, the origianl array is returned.\nexport function insertWithoutDuplicates<T>(array: T[], item: T, newIndex: number) {\n const index = array.indexOf(item);\n if (newIndex === index) {\n // The item doesn't need to be moved since its location hasn't changed\n return array;\n }\n\n const newArray = [...array];\n\n // Remove the item from its old location if it already exists in the array\n if (index !== -1) {\n newArray.splice(index, 1);\n }\n\n // And re-add it in its new location\n newArray.splice(newIndex, 0, item);\n\n return newArray;\n}\n\nexport function insertMultipleWithoutDuplicates<T>(array: T[], items: T[], newIndex: number) {\n let newArray = [...array];\n\n items.forEach((item) => {\n newArray = removeItem(newArray, item);\n });\n\n // And re-add it in its new location\n newArray.splice(newIndex, 0, ...items);\n\n return newArray;\n}\n\n// removeItem removes an item from an array and returns the result. The provided array is not modified. If the array\n// did not originally contain the given item, the original array is returned.\nexport function removeItem<T>(array: T[], item: T) {\n const index = array.indexOf(item);\n if (index === -1) {\n return array;\n }\n\n const result = [...array];\n result.splice(index, 1);\n return result;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {Channel, ChannelType, ChannelMembership, ChannelNotifyProps, ChannelMessageCount} from '@mattermost/types/channels';\nimport type {Post} from '@mattermost/types/posts';\nimport type {GlobalState} from '@mattermost/types/store';\nimport type {UsersState, UserProfile, UserNotifyProps} from '@mattermost/types/users';\nimport type {IDMappedObjects, RelationOneToManyUnique, RelationOneToOne} from '@mattermost/types/utilities';\n\nimport {MarkUnread} from 'mattermost-redux/constants/channels';\n\nimport {displayUsername} from './user_utils';\n\nimport {General, Users} from '../constants';\n\nconst channelTypeOrder: Record<ChannelType, number> = {\n [General.OPEN_CHANNEL]: 0,\n [General.PRIVATE_CHANNEL]: 1,\n [General.DM_CHANNEL]: 2,\n [General.GM_CHANNEL]: 3,\n} as Record<ChannelType, number>;\n\nexport function completeDirectChannelInfo(usersState: UsersState, teammateNameDisplay: string, channel: Channel): Channel {\n if (isDirectChannel(channel)) {\n const teammateId = getUserIdFromChannelName(usersState.currentUserId, channel.name);\n\n // return empty string instead of `someone` default string for display_name\n return {\n ...channel,\n display_name: displayUsername(usersState.profiles[teammateId], teammateNameDisplay, false),\n teammate_id: teammateId,\n status: usersState.statuses[teammateId] || 'offline',\n };\n } else if (isGroupChannel(channel)) {\n return completeDirectGroupInfo(usersState, teammateNameDisplay, channel);\n }\n\n return channel;\n}\n\nexport function splitRoles(roles: string): Set<string> {\n return roles ? new Set<string>(roles.split(' ')) : new Set<string>([]);\n}\n\n// newCompleteDirectChannelInfo is a variant of completeDirectChannelInfo that accepts the minimal\n// data required instead of depending on the entirety of state.entities.users. This allows the\n// calling selector to have fewer dependencies, reducing its need to recompute when memoized.\n//\n// Ideally, this would replace completeDirectChannelInfo altogether, but is currently factored out\n// to minimize changes while addressing a critical performance issue.\nexport function newCompleteDirectChannelInfo(currentUserId: string, profiles: IDMappedObjects<UserProfile>, profilesInChannel: RelationOneToManyUnique<Channel, UserProfile>, teammateStatus: string, teammateNameDisplay: string, channel: Channel): Channel {\n if (isDirectChannel(channel)) {\n const teammateId = getUserIdFromChannelName(currentUserId, channel.name);\n\n // return empty string instead of `someone` default string for display_name\n return {\n ...channel,\n display_name: displayUsername(profiles[teammateId], teammateNameDisplay, false),\n teammate_id: teammateId,\n status: teammateStatus,\n };\n } else if (isGroupChannel(channel)) {\n return newCompleteDirectGroupInfo(currentUserId, profiles, profilesInChannel, teammateNameDisplay, channel);\n }\n\n return channel;\n}\n\nexport function completeDirectChannelDisplayName(currentUserId: string, profiles: IDMappedObjects<UserProfile>, userIdsInChannel: Set<string>, teammateNameDisplay: string, channel: Channel): Channel {\n if (isDirectChannel(channel)) {\n const dmChannelClone = {...channel};\n const teammateId = getUserIdFromChannelName(currentUserId, channel.name);\n\n return Object.assign(dmChannelClone, {display_name: displayUsername(profiles[teammateId], teammateNameDisplay)});\n } else if (isGroupChannel(channel) && userIdsInChannel && userIdsInChannel.size > 0) {\n const displayName = getGroupDisplayNameFromUserIds(userIdsInChannel, profiles, currentUserId, teammateNameDisplay);\n return {...channel, display_name: displayName};\n }\n\n return channel;\n}\n\nexport function cleanUpUrlable(input: string): string {\n let cleaned = input.trim().replace(/-/g, ' ').replace(/[^\\w\\s]/gi, '').toLowerCase().replace(/\\s/g, '-');\n cleaned = cleaned.replace(/-{2,}/, '-');\n cleaned = cleaned.replace(/^-+/, '');\n cleaned = cleaned.replace(/-+$/, '');\n return cleaned;\n}\n\nexport function getChannelByName(channels: IDMappedObjects<Channel>, name: string): Channel | undefined {\n return Object.values(channels).find((channel) => channel.name === name);\n}\n\nexport function getDirectChannelName(id: string, otherId: string): string {\n let handle;\n\n if (otherId > id) {\n handle = id + '__' + otherId;\n } else {\n handle = otherId + '__' + id;\n }\n\n return handle;\n}\n\nexport function getUserIdFromChannelName(userId: string, channelName: string): string {\n const ids = channelName.split('__');\n let otherUserId = '';\n if (ids[0] === userId) {\n otherUserId = ids[1];\n } else {\n otherUserId = ids[0];\n }\n\n return otherUserId;\n}\n\nexport function isDirectChannel(channel: Channel): boolean {\n return channel.type === General.DM_CHANNEL;\n}\n\nexport function isGroupChannel(channel: Channel): boolean {\n return channel.type === General.GM_CHANNEL;\n}\n\nexport function getChannelsIdForTeam(state: GlobalState, teamId: string): string[] {\n const {channels} = state.entities.channels;\n\n return Object.keys(channels).map((key) => channels[key]).reduce((res, channel: Channel) => {\n if (channel.team_id === teamId) {\n res.push(channel.id);\n }\n return res;\n }, [] as string[]);\n}\n\nexport function getGroupDisplayNameFromUserIds(userIds: Set<string>, profiles: IDMappedObjects<UserProfile>, currentUserId: string, teammateNameDisplay: string, omitCurrentUser = true): string {\n const names: string[] = [];\n userIds.forEach((id) => {\n if (!(id === currentUserId && omitCurrentUser)) {\n names.push(displayUsername(profiles[id], teammateNameDisplay));\n }\n });\n\n function sortUsernames(a: string, b: string) {\n const locale = getUserLocale(currentUserId, profiles);\n return a.localeCompare(b, locale, {numeric: true});\n }\n\n return names.sort(sortUsernames).join(', ');\n}\n\nexport function isDefault(channel?: Channel): boolean {\n return channel?.name === General.DEFAULT_CHANNEL;\n}\n\nexport function completeDirectGroupInfo(usersState: UsersState, teammateNameDisplay: string, channel: Channel, omitCurrentUser = true) {\n const {currentUserId, profiles, profilesInChannel} = usersState;\n const profilesIds = profilesInChannel[channel.id];\n const gm = {...channel};\n\n if (profilesIds) {\n gm.display_name = getGroupDisplayNameFromUserIds(profilesIds, profiles, currentUserId, teammateNameDisplay, omitCurrentUser);\n return gm;\n }\n\n const usernames = gm.display_name.split(', ');\n const users = Object.keys(profiles).map((key) => profiles[key]);\n const userIds: Set<string> = new Set();\n usernames.forEach((username: string) => {\n const u = users.find((p): boolean => p.username === username);\n if (u) {\n userIds.add(u.id);\n }\n });\n if (usernames.length === userIds.size) {\n gm.display_name = getGroupDisplayNameFromUserIds(userIds, profiles, currentUserId, teammateNameDisplay);\n return gm;\n }\n\n return channel;\n}\n\n// newCompleteDirectGroupInfo is a variant of completeDirectGroupInfo that accepts the minimal\n// data required instead of depending on the entirety of state.entities.users. This allows the\n// calling selector to have fewer dependencies, reducing its need to recompute when memoized.\n//\n// See also newCompleteDirectChannelInfo.\nfunction newCompleteDirectGroupInfo(currentUserId: string, profiles: IDMappedObjects<UserProfile>, profilesInChannel: RelationOneToManyUnique<Channel, UserProfile>, teammateNameDisplay: string, channel: Channel) {\n const profilesIds = profilesInChannel[channel.id];\n const gm = {...channel};\n\n if (profilesIds) {\n gm.display_name = getGroupDisplayNameFromUserIds(profilesIds, profiles, currentUserId, teammateNameDisplay);\n return gm;\n }\n\n const usernames = gm.display_name.split(', ');\n const users = Object.keys(profiles).map((key) => profiles[key]);\n const userIds: Set<string> = new Set();\n usernames.forEach((username: string) => {\n const u = users.find((p): boolean => p.username === username);\n if (u) {\n userIds.add(u.id);\n }\n });\n if (usernames.length === userIds.size) {\n gm.display_name = getGroupDisplayNameFromUserIds(userIds, profiles, currentUserId, teammateNameDisplay);\n return gm;\n }\n\n return channel;\n}\n\nexport function isOpenChannel(channel: Channel): boolean {\n return channel.type === General.OPEN_CHANNEL;\n}\n\nexport function isPrivateChannel(channel: Channel): boolean {\n return channel.type === General.PRIVATE_CHANNEL;\n}\n\nexport function sortChannelsByTypeListAndDisplayName(locale: string, typeList: string[], a: Channel, b: Channel): number {\n const idxA = typeList.indexOf(a.type);\n const idxB = typeList.indexOf(b.type);\n\n if (idxA === -1 && idxB !== -1) {\n return 1;\n }\n if (idxB === -1 && idxA !== -1) {\n return -1;\n }\n\n if (idxA !== idxB) {\n if (idxA < idxB) {\n return -1;\n }\n return 1;\n }\n\n const aDisplayName = filterName(a.display_name);\n const bDisplayName = filterName(b.display_name);\n\n if (aDisplayName !== bDisplayName) {\n return aDisplayName.toLowerCase().localeCompare(bDisplayName.toLowerCase(), locale, {numeric: true});\n }\n\n return a.name.toLowerCase().localeCompare(b.name.toLowerCase(), locale, {numeric: true});\n}\n\nexport function sortChannelsByTypeAndDisplayName(locale: string, a: Channel, b: Channel): number {\n if (channelTypeOrder[a.type] !== channelTypeOrder[b.type]) {\n if (channelTypeOrder[a.type] < channelTypeOrder[b.type]) {\n return -1;\n }\n\n return 1;\n }\n\n const aDisplayName = filterName(a.display_name);\n const bDisplayName = filterName(b.display_name);\n\n if (aDisplayName !== bDisplayName) {\n return aDisplayName.toLowerCase().localeCompare(bDisplayName.toLowerCase(), locale, {numeric: true});\n }\n\n return a.name.toLowerCase().localeCompare(b.name.toLowerCase(), locale, {numeric: true});\n}\n\nfunction filterName(name: string): string {\n return name.replace(/[.,'\"\\/#!$%\\^&\\*;:{}=\\-_`~()]/g, ''); // eslint-disable-line no-useless-escape\n}\n\nexport function sortChannelsByDisplayName(locale: string, a: Channel, b: Channel): number {\n // if both channels have the display_name defined\n if (a.display_name && b.display_name && a.display_name !== b.display_name) {\n return a.display_name.toLowerCase().localeCompare(b.display_name.toLowerCase(), locale, {numeric: true});\n }\n\n return a.name.toLowerCase().localeCompare(b.name.toLowerCase(), locale, {numeric: true});\n}\n\nexport function sortChannelsByDisplayNameAndMuted(locale: string, members: RelationOneToOne<Channel, ChannelMembership>, a: Channel, b: Channel): number {\n const aMember = members[a.id];\n const bMember = members[b.id];\n\n if (isChannelMuted(bMember) === isChannelMuted(aMember)) {\n return sortChannelsByDisplayName(locale, a, b);\n }\n\n if (!isChannelMuted(bMember) && isChannelMuted(aMember)) {\n return 1;\n }\n\n return -1;\n}\n\nexport function sortChannelsByRecency(lastPosts: RelationOneToOne<Channel, Post>, a: Channel, b: Channel): number {\n let aLastPostAt = a.last_post_at;\n if (lastPosts[a.id] && lastPosts[a.id].create_at > a.last_post_at) {\n aLastPostAt = lastPosts[a.id].create_at;\n }\n\n let bLastPostAt = b.last_post_at;\n if (lastPosts[b.id] && lastPosts[b.id].create_at > b.last_post_at) {\n bLastPostAt = lastPosts[b.id].create_at;\n }\n\n return bLastPostAt - aLastPostAt;\n}\n\nexport function isChannelMuted(member?: ChannelMembership): boolean {\n return member?.notify_props ? (member.notify_props.mark_unread === MarkUnread.MENTION) : false;\n}\n\nexport function areChannelMentionsIgnored(channelMemberNotifyProps: ChannelNotifyProps, currentUserNotifyProps: UserNotifyProps) {\n let ignoreChannelMentionsDefault = Users.IGNORE_CHANNEL_MENTIONS_OFF;\n\n if (currentUserNotifyProps.channel && currentUserNotifyProps.channel === 'false') {\n ignoreChannelMentionsDefault = Users.IGNORE_CHANNEL_MENTIONS_ON;\n }\n\n let ignoreChannelMentions = channelMemberNotifyProps && channelMemberNotifyProps.ignore_channel_mentions;\n if (!ignoreChannelMentions || ignoreChannelMentions === Users.IGNORE_CHANNEL_MENTIONS_DEFAULT) {\n ignoreChannelMentions = ignoreChannelMentionsDefault as any;\n }\n\n return ignoreChannelMentions !== Users.IGNORE_CHANNEL_MENTIONS_OFF;\n}\n\nfunction getUserLocale(userId: string, profiles: IDMappedObjects<UserProfile>) {\n let locale = General.DEFAULT_LOCALE;\n if (profiles && profiles[userId] && profiles[userId].locale) {\n locale = profiles[userId].locale;\n }\n\n return locale;\n}\n\nexport function filterChannelsMatchingTerm(channels: Channel[], term: string): Channel[] {\n const lowercasedTerm = term.toLowerCase();\n\n return channels.filter((channel: Channel): boolean => {\n if (!channel) {\n return false;\n }\n const name = (channel.name || '').toLowerCase();\n const displayName = (channel.display_name || '').toLowerCase();\n\n return name.startsWith(lowercasedTerm) ||\n displayName.startsWith(lowercasedTerm);\n });\n}\n\nexport function channelListToMap(channelList: Channel[]): IDMappedObjects<Channel> {\n const channels: Record<string, Channel> = {};\n for (let i = 0; i < channelList.length; i++) {\n channels[channelList[i].id] = channelList[i];\n }\n return channels;\n}\n\n// calculateUnreadCount returns an object containing the number of unread mentions/mesasges in a channel and whether\n// or not that channel would be shown as unread in the sidebar.\nexport function calculateUnreadCount(\n messageCount: ChannelMessageCount | undefined,\n member: ChannelMembership | undefined,\n crtEnabled: boolean,\n): {showUnread: boolean; mentions: number; messages: number; hasUrgent: boolean} {\n if (!member || !messageCount) {\n return {\n showUnread: false,\n hasUrgent: false,\n mentions: 0,\n messages: 0,\n };\n }\n\n let messages;\n let mentions;\n let hasUrgent = false;\n if (crtEnabled) {\n messages = messageCount.root - member.msg_count_root;\n mentions = member.mention_count_root;\n } else {\n mentions = member.mention_count;\n messages = messageCount.total - member.msg_count;\n }\n if (member.urgent_mention_count) {\n hasUrgent = true;\n }\n\n return {\n showUnread: mentions > 0 || (!isChannelMuted(member) && messages > 0),\n messages,\n mentions,\n hasUrgent,\n };\n}\n","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n/* eslint-disable header/header */\n\n/**\n * If your application is accepting different values for the same field over\n * time and is doing a diff on them, you can either (1) create a copy or\n * (2) ensure that those values are not mutated behind two passes.\n * This function helps you with (2) by freezing the object and throwing if\n * the user subsequently modifies the value.\n *\n * There are two caveats with this function:\n * - If the call site is not in strict mode, it will only throw when\n * mutating existing fields, adding a new one\n * will unfortunately fail silently :(\n * - If the object is already frozen or sealed, it will not continue the\n * deep traversal and will leave leaf nodes unfrozen.\n *\n * Freezing the object and adding the throw mechanism is expensive and will\n * only be used in DEV.\n */\n\nexport default function deepFreezeAndThrowOnMutation(object: any): any {\n // Some objects in IE11 don't have a hasOwnProperty method so don't even bother trying to freeze them\n\n if (typeof object !== 'object' || object === null || Object.isFrozen(object) || Object.isSealed(object)) {\n return object;\n }\n\n for (const key in object) {\n if (Object.hasOwn(object, key)) {\n object.__defineGetter__(key, identity.bind(null, object[key])); // eslint-disable-line no-underscore-dangle\n object.__defineSetter__(key, throwOnImmutableMutation.bind(null, key)); // eslint-disable-line no-underscore-dangle\n }\n }\n\n Object.freeze(object);\n Object.seal(object);\n\n for (const key in object) {\n if (Object.hasOwn(object, key)) {\n deepFreezeAndThrowOnMutation(object[key]);\n }\n }\n\n return object;\n}\n\nfunction throwOnImmutableMutation(key: string, value: any) {\n throw Error(\n 'You attempted to set the key `' + key + '` with the value `' +\n JSON.stringify(value) + '` on an object that is meant to be immutable ' +\n 'and has been frozen.',\n );\n}\n\nfunction identity(value: any): any {\n return value;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport shallowEqual from 'shallow-equals';\n\nimport {createSelectorCreator, defaultMemoize} from 'mattermost-redux/selectors/create_selector';\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function memoizeResult<F extends Function>(func: F, measure: Function | undefined = undefined): F {\n let lastArgs: IArguments|null = null;\n let lastResult: any = null;\n\n // we reference arguments instead of spreading them for performance reasons\n return function memoizedFunc() {\n if (!shallowEqual(lastArgs, arguments)) { //eslint-disable-line prefer-rest-params\n //eslint-disable-line prefer-rest-params\n // apply arguments instead of spreading for performance.\n const result = Reflect.apply(func, null, arguments); //eslint-disable-line prefer-rest-params\n if (!shallowEqual(lastResult, result)) {\n lastResult = result;\n }\n }\n\n if (measure) {\n measure();\n }\n\n lastArgs = arguments; //eslint-disable-line prefer-rest-params\n return lastResult;\n } as unknown as F;\n}\n\n// Use this selector when you want a shallow comparison of the arguments and you want to memoize the result\n// try and use this only when your selector returns an array of ids\nexport const createIdsSelector = createSelectorCreator(memoizeResult);\n\n// Use this selector when you want a shallow comparison of the arguments and you don't need to memoize the result\nexport const createShallowSelector = createSelectorCreator(defaultMemoize, shallowEqual as any);\n\n// isMinimumServerVersion will return true if currentVersion is equal to higher or than the\n// the provided minimum version. A non-equal major version will ignore minor and dot\n// versions, and a non-equal minor version will ignore dot version.\n// currentVersion is a string, e.g '4.6.0'\n// minMajorVersion, minMinorVersion, minDotVersion are integers\nexport const isMinimumServerVersion = (currentVersion: string, minMajorVersion = 0, minMinorVersion = 0, minDotVersion = 0): boolean => {\n if (!currentVersion || typeof currentVersion !== 'string') {\n return false;\n }\n\n const split = currentVersion.split('.');\n\n const major = parseInt(split[0], 10);\n const minor = parseInt(split[1] || '0', 10);\n const dot = parseInt(split[2] || '0', 10);\n\n if (major > minMajorVersion) {\n return true;\n }\n if (major < minMajorVersion) {\n return false;\n }\n\n // Major version is equal, check minor\n if (minor > minMinorVersion) {\n return true;\n }\n if (minor < minMinorVersion) {\n return false;\n }\n\n // Minor version is equal, check dot\n if (dot > minDotVersion) {\n return true;\n }\n if (dot < minDotVersion) {\n return false;\n }\n\n // Dot version is equal\n return true;\n};\n\n// Generates a RFC-4122 version 4 compliant globally unique identifier.\nexport function generateId(): string {\n // implementation taken from http://stackoverflow.com/a/2117523\n let id = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';\n id = id.replace(/[xy]/g, (c) => {\n const r = Math.floor(Math.random() * 16);\n let v;\n\n if (c === 'x') {\n v = r;\n } else {\n // eslint-disable-next-line no-mixed-operators\n v = r & 0x3 | 0x8;\n }\n\n return v.toString(16);\n });\n return id;\n}\n\nexport function isEmail(email: string): boolean {\n // writing a regex to match all valid email addresses is really, really hard. (see http://stackoverflow.com/a/201378)\n // this regex ensures:\n // - at least one character that is not a space, comma, or @ symbol\n // - followed by a single @ symbol\n // - followed by at least one character that is not a space, comma, or @ symbol\n // this prevents <Outlook Style> outlook.style@domain.com addresses and multiple comma-separated addresses from being accepted\n return (/^[^ ,@]+@[^ ,@]+$/).test(email);\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\ntype LocalizeFunc = (descriptor: {id: string; defaultMessage?: string}) => string;\n\nlet localizeFunction: LocalizeFunc;\n\nexport function setLocalizeFunction(func: LocalizeFunc) {\n localizeFunction = func;\n}\n\nexport function localizeMessage(descriptor: {id: string; defaultMessage?: string}): string {\n if (!localizeFunction) {\n return descriptor.defaultMessage ?? '';\n }\n\n return localizeFunction(descriptor);\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n/* eslint-disable header/header */\n\n/**\n * Constructs an enumeration with keys equal to their value.\n *\n * For example:\n *\n * var COLORS = keyMirror({blue: null, red: null});\n * var myColor = COLORS.blue;\n * var isColorValid = !!COLORS[myColor];\n *\n * The last line could not be performed if the values of the generated enum were\n * not equal to their keys.\n *\n * Input: {key1: val1, key2: val2}\n * Output: {key1: key1, key2: key2}\n *\n * @param {object} obj\n * @return {object}\n */\nexport default function keyMirror<T extends Record<string, unknown>>(obj: T): { [K in keyof T]: K } {\n if (!(obj instanceof Object && !Array.isArray(obj))) {\n throw new Error('keyMirror(...): Argument must be an object.');\n }\n\n const ret: any = {};\n for (const key in obj) {\n if (!Object.hasOwn(obj, key)) {\n continue;\n }\n\n ret[key] = key;\n }\n return ret;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport moment from 'moment-timezone';\n\nimport type {ActivityEntry, Post} from '@mattermost/types/posts';\nimport type {GlobalState} from '@mattermost/types/store';\nimport {isStringArray, isArrayOf} from '@mattermost/types/utilities';\n\nimport {Posts} from 'mattermost-redux/constants';\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {makeGetPostsForIds} from 'mattermost-redux/selectors/entities/posts';\nimport type {UserActivityPost} from 'mattermost-redux/selectors/entities/posts';\nimport {shouldShowJoinLeaveMessages} from 'mattermost-redux/selectors/entities/preferences';\nimport {getCurrentUser} from 'mattermost-redux/selectors/entities/users';\nimport {createIdsSelector, memoizeResult} from 'mattermost-redux/utils/helpers';\nimport {isUserActivityPost, shouldFilterJoinLeavePost, isFromWebhook, ensureString} from 'mattermost-redux/utils/post_utils';\nimport {getUserCurrentTimezone} from 'mattermost-redux/utils/timezone_utils';\n\nexport const COMBINED_USER_ACTIVITY = 'user-activity-';\nexport const CREATE_COMMENT = 'create-comment';\nexport const DATE_LINE = 'date-';\nexport const START_OF_NEW_MESSAGES = 'start-of-new-messages-';\nexport const MAX_COMBINED_SYSTEM_POSTS = 100;\n\ninterface PostFilterOptions {\n postIds: string[];\n lastViewedAt: number;\n indicateNewMessages?: boolean;\n}\n\nexport function makePreparePostIdsForPostList() {\n const filterPostsAndAddSeparators = makeFilterPostsAndAddSeparators();\n const combineUserActivityPosts = makeCombineUserActivityPosts();\n return (state: GlobalState, options: PostFilterOptions) => {\n let postIds = filterPostsAndAddSeparators(state, options);\n postIds = combineUserActivityPosts(state, postIds);\n return postIds;\n };\n}\n\n// Returns a selector that, given the state and an object containing an array of postIds and an optional\n// timestamp of when the channel was last read, returns a memoized array of postIds interspersed with\n// day indicators and an optional new message indicator.\nexport function makeFilterPostsAndAddSeparators() {\n const getPostsForIds = makeGetPostsForIds();\n\n return createIdsSelector(\n 'makeFilterPostsAndAddSeparators',\n (state: GlobalState, {postIds}: PostFilterOptions) => getPostsForIds(state, postIds),\n (state: GlobalState, {lastViewedAt}: PostFilterOptions) => lastViewedAt,\n (state: GlobalState, {indicateNewMessages}: PostFilterOptions) => indicateNewMessages,\n () => '', // This previously returned state.entities.posts.selectedPostId which stopped being set at some point\n getCurrentUser,\n shouldShowJoinLeaveMessages,\n (posts, lastViewedAt, indicateNewMessages, selectedPostId, currentUser, showJoinLeave) => {\n if (posts.length === 0 || !currentUser) {\n return [];\n }\n\n const out: string[] = [];\n let lastDate;\n let addedNewMessagesIndicator = false;\n\n // Iterating through the posts from oldest to newest\n for (let i = posts.length - 1; i >= 0; i--) {\n const post = posts[i];\n\n if (\n !post ||\n (post.type === Posts.POST_TYPES.EPHEMERAL_ADD_TO_CHANNEL && !selectedPostId)\n ) {\n continue;\n }\n\n // Filter out join/leave messages if necessary\n if (shouldFilterJoinLeavePost(post, showJoinLeave, currentUser.username)) {\n continue;\n }\n\n // Push on a date header if the last post was on a different day than the current one\n const postDate = new Date(post.create_at);\n const currentOffset = postDate.getTimezoneOffset() * 60 * 1000;\n const timezone = getUserCurrentTimezone(currentUser.timezone);\n if (timezone) {\n const zone = moment.tz.zone(timezone);\n if (zone) {\n const timezoneOffset = zone.utcOffset(postDate.getTime()) * 60 * 1000;\n postDate.setTime(postDate.getTime() + (currentOffset - timezoneOffset));\n }\n }\n\n if (!lastDate || lastDate.toDateString() !== postDate.toDateString()) {\n out.push(DATE_LINE + postDate.getTime());\n\n lastDate = postDate;\n }\n\n if (\n lastViewedAt &&\n post.create_at > lastViewedAt &&\n (post.user_id !== currentUser.id || isFromWebhook(post)) &&\n !addedNewMessagesIndicator &&\n indicateNewMessages\n ) {\n out.push(START_OF_NEW_MESSAGES + lastViewedAt);\n addedNewMessagesIndicator = true;\n }\n\n out.push(post.id);\n }\n\n // Flip it back to newest to oldest\n return out.reverse();\n },\n );\n}\n\nexport function makeCombineUserActivityPosts() {\n const getPostsForIds = makeGetPostsForIds();\n\n return createIdsSelector(\n 'makeCombineUserActivityPosts',\n (state: GlobalState, postIds: string[]) => postIds,\n (state: GlobalState, postIds: string[]) => getPostsForIds(state, postIds),\n (postIds, posts) => {\n let lastPostIsUserActivity = false;\n let combinedCount = 0;\n const out: string[] = [];\n let changed = false;\n\n for (let i = 0; i < postIds.length; i++) {\n const postId = postIds[i];\n\n if (isStartOfNewMessages(postId) || isDateLine(postId) || isCreateComment(postId)) {\n // Not a post, so it won't be combined\n out.push(postId);\n\n lastPostIsUserActivity = false;\n combinedCount = 0;\n\n continue;\n }\n\n const post = posts[i];\n const postIsUserActivity = isUserActivityPost(post.type);\n\n if (postIsUserActivity && lastPostIsUserActivity && combinedCount < MAX_COMBINED_SYSTEM_POSTS) {\n // Add the ID to the previous combined post\n out[out.length - 1] += '_' + postId;\n\n combinedCount += 1;\n\n changed = true;\n } else if (postIsUserActivity) {\n // Start a new combined post, even if the \"combined\" post is only a single post\n out.push(COMBINED_USER_ACTIVITY + postId);\n\n combinedCount = 1;\n\n changed = true;\n } else {\n out.push(postId);\n\n combinedCount = 0;\n }\n\n lastPostIsUserActivity = postIsUserActivity;\n }\n\n if (!changed) {\n // Nothing was combined, so return the original array\n return postIds;\n }\n\n return out;\n },\n );\n}\n\nexport function isStartOfNewMessages(item: string) {\n return item.startsWith(START_OF_NEW_MESSAGES);\n}\n\nexport function getTimestampForStartOfNewMessages(item: string) {\n return parseInt(item.substring(START_OF_NEW_MESSAGES.length), 10);\n}\n\nexport function getNewMessagesIndex(postListIds: string[]): number {\n return postListIds.findIndex(isStartOfNewMessages);\n}\n\nexport function isCreateComment(item: string) {\n return item === CREATE_COMMENT;\n}\n\nexport function isDateLine(item: string) {\n return item.startsWith(DATE_LINE);\n}\n\nexport function getDateForDateLine(item: string) {\n return parseInt(item.substring(DATE_LINE.length), 10);\n}\n\nexport function isCombinedUserActivityPost(item: string) {\n return (/^user-activity-(?:[^_]+_)*[^_]+$/).test(item);\n}\n\nexport function getPostIdsForCombinedUserActivityPost(item: string) {\n return item.substring(COMBINED_USER_ACTIVITY.length).split('_');\n}\n\nexport function getFirstPostId(items: string[]) {\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n\n if (isStartOfNewMessages(item) || isDateLine(item) || isCreateComment(item)) {\n // This is not a post at all\n continue;\n }\n\n if (isCombinedUserActivityPost(item)) {\n // This is a combined post, so find the first post ID from it\n const combinedIds = getPostIdsForCombinedUserActivityPost(item);\n\n return combinedIds[0];\n }\n\n // This is a post ID\n return item;\n }\n\n return '';\n}\n\nexport function getLastPostId(items: string[]) {\n for (let i = items.length - 1; i >= 0; i--) {\n const item = items[i];\n\n if (isStartOfNewMessages(item) || isDateLine(item) || isCreateComment(item)) {\n // This is not a post at all\n continue;\n }\n\n if (isCombinedUserActivityPost(item)) {\n // This is a combined post, so find the first post ID from it\n const combinedIds = getPostIdsForCombinedUserActivityPost(item);\n\n return combinedIds[combinedIds.length - 1];\n }\n\n // This is a post ID\n return item;\n }\n\n return '';\n}\n\nexport function getLastPostIndex(postIds: string[]) {\n let index = 0;\n for (let i = postIds.length - 1; i > 0; i--) {\n const item = postIds[i];\n if (!isStartOfNewMessages(item) && !isDateLine(item) && !isCreateComment(item)) {\n index = i;\n break;\n }\n }\n\n return index;\n}\n\nexport function makeGenerateCombinedPost(): (state: GlobalState, combinedId: string) => UserActivityPost {\n const getPostsForIds = makeGetPostsForIds();\n const getPostIds = memoizeResult(getPostIdsForCombinedUserActivityPost);\n\n return createSelector(\n 'makeGenerateCombinedPost',\n (state: GlobalState, combinedId: string) => combinedId,\n (state: GlobalState, combinedId: string) => getPostsForIds(state, getPostIds(combinedId)),\n (combinedId, posts) => {\n // All posts should be in the same channel\n const channelId = posts[0].channel_id;\n\n // Assume that the last post is the oldest one\n const createAt = posts[posts.length - 1].create_at;\n const messages = posts.map((post) => post.message);\n\n return {\n id: combinedId,\n create_at: createAt,\n update_at: 0,\n edit_at: 0,\n delete_at: 0,\n is_pinned: false,\n user_id: '',\n channel_id: channelId,\n root_id: '',\n parent_id: '',\n original_id: '',\n message: messages.join('\\n'),\n type: Posts.POST_TYPES.COMBINED_USER_ACTIVITY,\n props: {\n messages,\n user_activity: combineUserActivitySystemPost(posts),\n },\n hashtags: '',\n pending_post_id: '',\n reply_count: 0,\n metadata: {\n embeds: [],\n emojis: [],\n files: [],\n images: {},\n reactions: [],\n },\n system_post_ids: posts.map((post) => post.id),\n user_activity_posts: posts,\n };\n },\n );\n}\n\nexport function extractUserActivityData(userActivities: ActivityEntry[]) {\n const messageData: MessageData[] = [];\n const allUserIds: string[] = [];\n const allUsernames: string[] = [];\n userActivities.forEach((activity) => {\n if (isUsersRelatedPost(activity.postType)) {\n const {postType, actorId, userIds, usernames} = activity;\n if (usernames && userIds) {\n messageData.push({postType, userIds: [...userIds], actorId: actorId[0]});\n if (userIds.length > 0) {\n allUserIds.push(...userIds.filter((userId) => userId));\n }\n if (usernames.length > 0) {\n allUsernames.push(...usernames.filter((username) => username));\n }\n allUserIds.push(actorId[0]);\n }\n } else {\n const {postType, actorId} = activity;\n const userIds = actorId;\n messageData.push({postType, userIds});\n allUserIds.push(...userIds);\n }\n });\n function reduceUsers(acc: string[], curr: string) {\n if (!acc.includes(curr)) {\n acc.push(curr);\n }\n return acc;\n }\n\n return {\n allUserIds: allUserIds.reduce(reduceUsers, []),\n allUsernames: allUsernames.reduce(reduceUsers, []),\n messageData,\n };\n}\nfunction isUsersRelatedPost(postType: string) {\n return (\n postType === Posts.POST_TYPES.ADD_TO_TEAM ||\n postType === Posts.POST_TYPES.ADD_TO_CHANNEL ||\n postType === Posts.POST_TYPES.REMOVE_FROM_CHANNEL\n );\n}\nfunction mergeLastSimilarPosts(userActivities: ActivityEntry[]) {\n const prevPost = userActivities[userActivities.length - 1];\n const prePrevPost = userActivities[userActivities.length - 2];\n const prevPostType = prevPost && prevPost.postType;\n const prePrevPostType = prePrevPost && prePrevPost.postType;\n\n if (prevPostType === prePrevPostType) {\n userActivities.pop();\n prePrevPost.actorId.push(...prevPost.actorId);\n }\n}\nfunction isSameActorsInUserActivities(prevActivity: ActivityEntry, curActivity: ActivityEntry) {\n const prevPostActorsSet = new Set(prevActivity.actorId);\n const currentPostActorsSet = new Set(curActivity.actorId);\n\n if (prevPostActorsSet.size !== currentPostActorsSet.size) {\n return false;\n }\n let hasAllActors = true;\n\n currentPostActorsSet.forEach((actor) => {\n if (!prevPostActorsSet.has(actor)) {\n hasAllActors = false;\n }\n });\n return hasAllActors;\n}\nexport function combineUserActivitySystemPost(systemPosts: Post[] = []): UserActivityProp | undefined {\n if (systemPosts.length === 0) {\n return undefined;\n }\n const userActivities: ActivityEntry[] = [];\n systemPosts.reverse().forEach((post: Post) => {\n const postType = post.type;\n const actorId = post.user_id;\n\n // When combining removed posts, the actorId does not need to be the same for each post.\n // All removed posts will be combined regardless of their respective actorIds.\n const isRemovedPost = post.type === Posts.POST_TYPES.REMOVE_FROM_CHANNEL;\n const addedUserId = ensureString(post.props?.addedUserId);\n const removedUserId = ensureString(post.props?.removedUserId);\n const addedUsername = ensureString(post.props?.addedUsername);\n const removedUsername = ensureString(post.props?.removedUsername);\n const userId = isUsersRelatedPost(postType) ? addedUserId || removedUserId : '';\n const username = isUsersRelatedPost(postType) ? addedUsername || removedUsername : '';\n const prevPost = userActivities[userActivities.length - 1];\n const isSamePostType = prevPost && prevPost.postType === post.type;\n const isSameActor = prevPost && prevPost.actorId[0] === post.user_id;\n const isJoinedPrevPost = prevPost && prevPost.postType === Posts.POST_TYPES.JOIN_CHANNEL;\n const isLeftCurrentPost = post.type === Posts.POST_TYPES.LEAVE_CHANNEL;\n const prePrevPost = userActivities[userActivities.length - 2];\n const isJoinedPrePrevPost = prePrevPost && prePrevPost.postType === Posts.POST_TYPES.JOIN_CHANNEL;\n const isLeftPrevPost = prevPost && prevPost.postType === Posts.POST_TYPES.LEAVE_CHANNEL;\n\n if (prevPost && isSamePostType && (isSameActor || isRemovedPost)) {\n prevPost.userIds.push(userId);\n prevPost.usernames.push(username);\n } else if (isSamePostType && !isSameActor && !isUsersRelatedPost(postType)) {\n prevPost.actorId.push(actorId);\n const isSameActors = (prePrevPost && isSameActorsInUserActivities(prePrevPost, prevPost));\n if (isJoinedPrePrevPost && isLeftPrevPost && isSameActors) {\n userActivities.pop();\n prePrevPost.postType = Posts.POST_TYPES.JOIN_LEAVE_CHANNEL;\n mergeLastSimilarPosts(userActivities);\n }\n } else if (isJoinedPrevPost && isLeftCurrentPost && prevPost.actorId.length === 1 && isSameActor) {\n prevPost.postType = Posts.POST_TYPES.JOIN_LEAVE_CHANNEL;\n mergeLastSimilarPosts(userActivities);\n } else {\n userActivities.push({\n actorId: [actorId],\n userIds: [userId],\n usernames: [username],\n postType,\n });\n }\n });\n\n return extractUserActivityData(userActivities);\n}\n\nexport type MessageData = {\n actorId?: string;\n postType: string;\n userIds: string[];\n}\n\nfunction isMessageData(v: unknown): v is MessageData {\n if (typeof v !== 'object' || !v) {\n return false;\n }\n\n if ('actorId' in v && typeof v.actorId !== 'string') {\n return false;\n }\n\n if (!('postType' in v) || typeof v.postType !== 'string') {\n return false;\n }\n\n if (!('userIds' in v) || !isStringArray(v.userIds)) {\n return false;\n }\n\n return true;\n}\n\ntype UserActivityProp = {\n allUserIds: string[];\n allUsernames: string[];\n messageData: MessageData[];\n}\n\nexport function isUserActivityProp(v: unknown): v is UserActivityProp {\n if (typeof v !== 'object' || !v) {\n return false;\n }\n\n if (!('allUserIds' in v) || !isStringArray(v.allUserIds)) {\n return false;\n }\n\n if (!('allUsernames' in v) || !isStringArray(v.allUsernames)) {\n return false;\n }\n\n if (!('messageData' in v) || !isArrayOf(v.messageData, isMessageData)) {\n return false;\n }\n\n return true;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {Channel} from '@mattermost/types/channels';\nimport type {Post, PostType, PostMetadata, PostEmbed} from '@mattermost/types/posts';\nimport type {GlobalState} from '@mattermost/types/store';\nimport type {Team} from '@mattermost/types/teams';\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport {haveIChannelPermission} from 'mattermost-redux/selectors/entities/roles';\n\nimport {Posts, Preferences, Permissions} from '../constants';\n\nexport function isSystemMessage(post: Post): boolean {\n return Boolean(post.type && post.type.startsWith(Posts.SYSTEM_MESSAGE_PREFIX));\n}\n\nexport function isMeMessage(post: Post): boolean {\n return Boolean(post.type && post.type === Posts.POST_TYPES.ME);\n}\n\nexport function isFromWebhook(post: Post): boolean {\n return post.props?.from_webhook === 'true';\n}\n\nexport function isPostEphemeral(post: Post): boolean {\n return post.type === Posts.POST_TYPES.EPHEMERAL || post.type === Posts.POST_TYPES.EPHEMERAL_ADD_TO_CHANNEL || post.state === Posts.POST_DELETED;\n}\n\nexport function isUserAddedInChannel(post: Post, userId?: UserProfile['id']): boolean {\n const postTypeCheck = Boolean(post.type && (post.type === Posts.POST_TYPES.ADD_TO_CHANNEL));\n const userIdCheck = Boolean(post.props && post.props.addedUserId && (post.props.addedUserId === userId));\n return postTypeCheck && userIdCheck;\n}\n\nexport function shouldIgnorePost(post: Post, userId?: UserProfile['id']): boolean {\n if (isUserAddedInChannel(post, userId)) {\n return false;\n }\n return Posts.IGNORE_POST_TYPES.includes(post.type);\n}\n\nexport function isUserActivityPost(postType: PostType): boolean {\n return Posts.USER_ACTIVITY_POST_TYPES.includes(postType);\n}\n\nexport function isPostOwner(userId: UserProfile['id'], post: Post) {\n return userId === post.user_id;\n}\n\nexport function isEdited(post: Post): boolean {\n return post.edit_at > 0;\n}\n\nexport function canEditPost(state: GlobalState, config: any, license: any, teamId: Team['id'], channelId: Channel['id'], userId: UserProfile['id'], post: Post): boolean {\n if (!post || isSystemMessage(post)) {\n return false;\n }\n\n const isOwner = isPostOwner(userId, post);\n let canEdit = true;\n\n const permission = isOwner ? Permissions.EDIT_POST : Permissions.EDIT_OTHERS_POSTS;\n canEdit = haveIChannelPermission(state, teamId, channelId, permission);\n if (license.IsLicensed === 'true' && config.PostEditTimeLimit !== '-1' && config.PostEditTimeLimit !== -1) {\n const timeLeft = (post.create_at + (config.PostEditTimeLimit * 1000)) - Date.now();\n if (timeLeft <= 0) {\n canEdit = false;\n }\n }\n\n return canEdit;\n}\n\nexport function getLastCreateAt(postsArray: Post[]): number {\n const createAt = postsArray.map((p) => p.create_at);\n\n if (createAt.length) {\n return Reflect.apply(Math.max, null, createAt);\n }\n\n return 0;\n}\n\nconst joinLeavePostTypes = [\n Posts.POST_TYPES.JOIN_LEAVE,\n Posts.POST_TYPES.JOIN_CHANNEL,\n Posts.POST_TYPES.LEAVE_CHANNEL,\n Posts.POST_TYPES.ADD_REMOVE,\n Posts.POST_TYPES.ADD_TO_CHANNEL,\n Posts.POST_TYPES.REMOVE_FROM_CHANNEL,\n Posts.POST_TYPES.JOIN_TEAM,\n Posts.POST_TYPES.LEAVE_TEAM,\n Posts.POST_TYPES.ADD_TO_TEAM,\n Posts.POST_TYPES.REMOVE_FROM_TEAM,\n Posts.POST_TYPES.COMBINED_USER_ACTIVITY,\n];\n\n/**\n * If the user has \"Show Join/Leave Messages\" disabled, this function will return true if the post should be hidden if it's of type join/leave.\n * The post object passed in must be not null/undefined.\n * @returns Returns true if a post should be hidden\n */\nexport function shouldFilterJoinLeavePost(post: Post, showJoinLeave: boolean, currentUsername: string): boolean {\n if (showJoinLeave) {\n return false;\n }\n\n // Don't filter out non-join/leave messages\n if (joinLeavePostTypes.indexOf(post.type) === -1) {\n return false;\n }\n\n // Don't filter out join/leave messages about the current user\n return !isJoinLeavePostForUsername(post, currentUsername);\n}\n\nfunction isJoinLeavePostForUsername(post: Post, currentUsername: string): boolean {\n if (!post.props || !currentUsername) {\n return false;\n }\n\n if (post.user_activity_posts) {\n for (const childPost of post.user_activity_posts) {\n if (isJoinLeavePostForUsername(childPost, currentUsername)) {\n // If any of the contained posts are for this user, the client will\n // need to figure out how to render the post\n return true;\n }\n }\n }\n\n return post.props.username === currentUsername ||\n post.props.addedUsername === currentUsername ||\n post.props.removedUsername === currentUsername;\n}\n\nexport function isPostPendingOrFailed(post: Post): boolean {\n return post.failed || post.id === post.pending_post_id;\n}\n\nexport function comparePosts(a: Post, b: Post): number {\n const aIsPendingOrFailed = isPostPendingOrFailed(a);\n const bIsPendingOrFailed = isPostPendingOrFailed(b);\n if (aIsPendingOrFailed && !bIsPendingOrFailed) {\n return -1;\n } else if (!aIsPendingOrFailed && bIsPendingOrFailed) {\n return 1;\n }\n\n if (a.create_at > b.create_at) {\n return -1;\n } else if (a.create_at < b.create_at) {\n return 1;\n }\n\n return 0;\n}\n\nexport function isPostCommentMention({post, currentUser, threadRepliedToByCurrentUser, rootPost}: {post: Post; currentUser: UserProfile; threadRepliedToByCurrentUser: boolean; rootPost: Post}): boolean {\n let commentsNotifyLevel = Preferences.COMMENTS_NEVER;\n let isCommentMention = false;\n let threadCreatedByCurrentUser = false;\n\n if (rootPost && rootPost.user_id === currentUser.id) {\n threadCreatedByCurrentUser = true;\n }\n if (currentUser.notify_props && currentUser.notify_props.comments) {\n commentsNotifyLevel = currentUser.notify_props.comments;\n }\n\n const notCurrentUser = post.user_id !== currentUser.id || isFromWebhook(post);\n if (notCurrentUser) {\n if (commentsNotifyLevel === Preferences.COMMENTS_ANY && (threadCreatedByCurrentUser || threadRepliedToByCurrentUser)) {\n isCommentMention = true;\n } else if (commentsNotifyLevel === Preferences.COMMENTS_ROOT && threadCreatedByCurrentUser) {\n isCommentMention = true;\n }\n }\n return isCommentMention;\n}\n\nexport function fromAutoResponder(post: Post): boolean {\n return Boolean(post.type && (post.type === Posts.SYSTEM_AUTO_RESPONDER));\n}\n\nexport function getEmbedFromMetadata(metadata: PostMetadata): PostEmbed | null {\n if (!metadata || !metadata.embeds || metadata.embeds.length === 0) {\n return null;\n }\n\n return metadata.embeds[0];\n}\n\nexport function isPermalink(post: Post) {\n if (post.metadata && post.metadata.embeds) {\n for (const embed of post.metadata.embeds) {\n if (embed.type === 'permalink') {\n return true;\n }\n }\n }\n\n return false;\n}\n\nexport function shouldUpdatePost(receivedPost: Post, storedPost?: Post): boolean {\n if (!storedPost) {\n return true;\n }\n\n if (storedPost.update_at > receivedPost.update_at) {\n // The stored post is newer than the one we've received\n return false;\n }\n\n if (\n storedPost.update_at && receivedPost.update_at &&\n storedPost.update_at === receivedPost.update_at\n ) {\n // The stored post has the same update at with the one we've received\n if (\n storedPost.is_following !== receivedPost.is_following ||\n storedPost.reply_count !== receivedPost.reply_count ||\n storedPost.participants?.length !== receivedPost.participants?.length\n ) {\n // CRT properties are not the same between posts\n // e.g: in the case of toggling CRT on/off\n return true;\n }\n\n if (!storedPost.metadata && receivedPost.metadata) {\n // Metadata is not the same between posts\n return true;\n }\n\n // The stored post is the same as the one we've received\n return false;\n }\n\n // The stored post is older than the one we've received\n return true;\n}\n\nexport function ensureString(v: unknown) {\n return typeof v === 'string' ? v : '';\n}\n\nexport function ensureNumber(v: unknown) {\n return typeof v === 'number' ? v : 0;\n}\n\nexport function secureGetFromRecord<T>(v: Record<string, T> | undefined, key: string) {\n return typeof v === 'object' && v && Object.hasOwn(v, key) ? v[key] : undefined;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {PreferencesType} from '@mattermost/types/preferences';\n\nexport function getPreferenceKey(category: string, name: string): string {\n return `${category}--${name}`;\n}\n\nexport function getPreferencesByCategory(myPreferences: PreferencesType, category: string): Map<string, any> {\n const prefix = `${category}--`;\n const preferences = new Map();\n Object.keys(myPreferences).forEach((key) => {\n if (key.startsWith(prefix)) {\n preferences.set(key.substring(prefix.length), myPreferences[key]);\n }\n });\n\n return preferences;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {Team} from '@mattermost/types/teams';\nimport type {IDMappedObjects} from '@mattermost/types/utilities';\n\nimport {General} from '../constants';\n\nexport function teamListToMap(teamList: Team[]): IDMappedObjects<Team> {\n const teams: Record<string, Team> = {};\n for (let i = 0; i < teamList.length; i++) {\n teams[teamList[i].id] = teamList[i];\n }\n return teams;\n}\n\nexport function sortTeamsWithLocale(locale: string): (a: Team, b: Team) => number {\n return (a: Team, b: Team): number => {\n if (a.display_name !== b.display_name) {\n return a.display_name.toLowerCase().localeCompare(b.display_name.toLowerCase(), locale || General.DEFAULT_LOCALE, {numeric: true});\n }\n\n return a.name.toLowerCase().localeCompare(b.name.toLowerCase(), locale || General.DEFAULT_LOCALE, {numeric: true});\n };\n}\n\nexport function filterTeamsStartingWithTerm(teams: Team[], term: string): Team[] {\n const lowercasedTerm = term.toLowerCase();\n\n return teams.filter((team: Team) => {\n if (!team) {\n return false;\n }\n\n const name = team.name?.toLowerCase();\n const displayName = team.display_name?.toLowerCase();\n\n return name.startsWith(lowercasedTerm) ||\n displayName.startsWith(lowercasedTerm);\n });\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {Timezone} from 'timezones.json';\n\nimport type {UserTimezone} from '@mattermost/types/users';\n\nexport function getUserCurrentTimezone(userTimezone?: UserTimezone): string {\n if (!userTimezone) {\n return 'UTC';\n }\n const {\n useAutomaticTimezone,\n automaticTimezone,\n manualTimezone,\n } = userTimezone;\n\n let useAutomatic = useAutomaticTimezone;\n if (typeof useAutomaticTimezone === 'string') {\n useAutomatic = useAutomaticTimezone === 'true';\n }\n\n if (useAutomatic) {\n return automaticTimezone || 'UTC';\n }\n return manualTimezone || 'UTC';\n}\n\nexport function getTimezoneRegion(timezone: string): string {\n if (timezone) {\n const split = timezone.split('/');\n if (split.length > 1) {\n return split.pop()!.replace(/_/g, ' ');\n }\n }\n\n return timezone;\n}\n\nexport function getTimezoneLabel(timezones: Timezone[], timezone: string): string {\n for (let i = 0; i < timezones.length; i++) {\n const zone = timezones[i];\n for (let j = 0; j < zone.utc.length; j++) {\n const utcZone = zone.utc[j];\n if (utcZone.toLowerCase() === timezone.toLowerCase()) {\n return zone.text;\n }\n }\n }\n return timezone;\n}\n\nexport function getDateForTimezone(date: Date|string, tzString: string): Date {\n return new Date((typeof date === 'string' ? new Date(date) : date).toLocaleString('en-US', {timeZone: tzString}));\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {ChannelMembership} from '@mattermost/types/channels';\nimport type {TeamMembership} from '@mattermost/types/teams';\nimport type {UserProfile} from '@mattermost/types/users';\nimport type {IDMappedObjects} from '@mattermost/types/utilities';\n\nimport {localizeMessage} from 'mattermost-redux/utils/i18n_utils';\n\nimport {General, Preferences} from '../constants';\n\nexport function getFullName(user: UserProfile): string {\n if (user.first_name && user.last_name) {\n return user.first_name + ' ' + user.last_name;\n } else if (user.first_name) {\n return user.first_name;\n } else if (user.last_name) {\n return user.last_name;\n }\n\n return '';\n}\n\nexport function displayUsername(\n user: UserProfile | null | undefined,\n teammateNameDisplay: string,\n useFallbackUsername = true,\n): string {\n let name = useFallbackUsername ? localizeMessage({id: 'channel_loader.someone', defaultMessage: 'Someone'}) : '';\n if (user) {\n if (teammateNameDisplay === Preferences.DISPLAY_PREFER_NICKNAME) {\n name = user.nickname || getFullName(user);\n } else if (teammateNameDisplay === Preferences.DISPLAY_PREFER_FULL_NAME) {\n name = getFullName(user);\n } else {\n name = user.username;\n }\n\n if (!name || name.trim().length === 0) {\n name = user.username;\n }\n }\n\n return name;\n}\n\nexport function spaceSeparatedStringIncludes(item: string, spaceSeparated?: string): boolean {\n if (spaceSeparated) {\n const items = spaceSeparated?.split(' ');\n return items.includes(item);\n }\n return false;\n}\n\nexport function isAdmin(roles: string): boolean {\n return isSystemAdmin(roles) || isTeamAdmin(roles);\n}\n\nexport function isGuest(roles: string): boolean {\n return spaceSeparatedStringIncludes('system_guest', roles);\n}\n\nexport function isTeamAdmin(roles: string): boolean {\n return spaceSeparatedStringIncludes(General.TEAM_ADMIN_ROLE, roles);\n}\n\nexport function isSystemAdmin(roles: string): boolean {\n return spaceSeparatedStringIncludes(General.SYSTEM_ADMIN_ROLE, roles);\n}\n\nexport function includesAnAdminRole(roles: string): boolean {\n const rolesArray = roles.split(' ');\n return [\n General.SYSTEM_ADMIN_ROLE,\n General.SYSTEM_USER_MANAGER_ROLE,\n General.SYSTEM_READ_ONLY_ADMIN_ROLE,\n General.SYSTEM_MANAGER_ROLE,\n ].some((el) => rolesArray.includes(el));\n}\n\nexport function isChannelAdmin(roles: string): boolean {\n return spaceSeparatedStringIncludes(General.CHANNEL_ADMIN_ROLE, roles);\n}\n\nexport function hasUserAccessTokenRole(roles: string): boolean {\n return spaceSeparatedStringIncludes(General.SYSTEM_USER_ACCESS_TOKEN_ROLE, roles);\n}\n\nexport function hasPostAllRole(roles: string): boolean {\n return spaceSeparatedStringIncludes(General.SYSTEM_POST_ALL_ROLE, roles);\n}\n\nexport function hasPostAllPublicRole(roles: string): boolean {\n return spaceSeparatedStringIncludes(General.SYSTEM_POST_ALL_PUBLIC_ROLE, roles);\n}\n\nexport function profileListToMap(profileList: UserProfile[]): IDMappedObjects<UserProfile> {\n const profiles: Record<string, UserProfile> = {};\n for (let i = 0; i < profileList.length; i++) {\n profiles[profileList[i].id] = profileList[i];\n }\n return profiles;\n}\n\nexport function removeUserFromList(userId: UserProfile['id'], list: UserProfile[]): UserProfile[] {\n for (let i = list.length - 1; i >= 0; i--) {\n if (list[i].id === userId) {\n list.splice(i, 1);\n return list;\n }\n }\n\n return list;\n}\n\n// Splits the term by a splitStr and composes a list of the parts of\n// the split concatenated with the rest, forming a set of suggesitons\n// matchable with startsWith\n//\n// E.g.: for \"one.two.three\" by \".\" it would yield\n// [\"one.two.three\", \".two.three\", \"two.three\", \".three\", \"three\"]\nexport function getSuggestionsSplitBy(term: string, splitStr: string): string[] {\n const splitTerm = term.split(splitStr);\n const initialSuggestions = splitTerm.map((st, i) => splitTerm.slice(i).join(splitStr));\n let suggestions: string[] = [];\n\n if (splitStr === ' ') {\n suggestions = initialSuggestions;\n } else {\n suggestions = initialSuggestions.reduce((acc, val) => {\n if (acc.length === 0) {\n acc.push(val);\n } else {\n acc.push(splitStr + val, val);\n }\n return acc;\n }, [] as string[]);\n }\n return suggestions;\n}\n\nexport function getSuggestionsSplitByMultiple(term: string, splitStrs: string[]): string[] {\n const suggestions = splitStrs.reduce((acc, val) => {\n getSuggestionsSplitBy(term, val).forEach((suggestion) => acc.add(suggestion));\n return acc;\n }, new Set<string>());\n\n return [...suggestions];\n}\n\nexport function nameSuggestionsForUser(user: UserProfile): string[] {\n const profileSuggestions: string[] = [];\n const usernameSuggestions = getSuggestionsSplitByMultiple((user.username || '').toLowerCase(), General.AUTOCOMPLETE_SPLIT_CHARACTERS);\n profileSuggestions.push(...usernameSuggestions);\n const first = (user.first_name || '').toLowerCase();\n const last = (user.last_name || '').toLowerCase();\n const full = first + ' ' + last;\n profileSuggestions.push(first, last, full);\n profileSuggestions.push((user.nickname || '').toLowerCase());\n const positionSuggestions = getSuggestionsSplitBy((user.position || '').toLowerCase(), ' ');\n profileSuggestions.push(...positionSuggestions);\n const email = (user.email || '').toLowerCase();\n profileSuggestions.push(email);\n\n const split = email.split('@');\n if (split.length > 1) {\n profileSuggestions.push(split[1]);\n }\n return profileSuggestions;\n}\n\nexport function filterProfilesStartingWithTerm(users: UserProfile[], term: string): UserProfile[] {\n const lowercasedTerm = term.toLowerCase();\n let trimmedTerm = lowercasedTerm;\n if (trimmedTerm.startsWith('@')) {\n trimmedTerm = trimmedTerm.substr(1);\n }\n\n return users.filter((user: UserProfile) => {\n if (!user) {\n return false;\n }\n\n const profileSuggestions = nameSuggestionsForUser(user);\n return profileSuggestions.filter((suggestion) => suggestion !== '').some((suggestion) => suggestion.startsWith(trimmedTerm));\n });\n}\n\nexport function filterProfilesMatchingWithTerm(users: UserProfile[], term: string): UserProfile[] {\n const lowercasedTerm = term.toLowerCase();\n let trimmedTerm = lowercasedTerm;\n if (trimmedTerm.startsWith('@')) {\n trimmedTerm = trimmedTerm.substr(1);\n }\n\n return users.filter((user: UserProfile) => {\n if (!user) {\n return false;\n }\n\n const profileSuggestions = nameSuggestionsForUser(user);\n return profileSuggestions.filter((suggestion) => suggestion !== '').some((suggestion) => suggestion.includes(trimmedTerm));\n });\n}\n\nexport function sortByUsername(a: UserProfile, b: UserProfile): number {\n const nameA = a.username;\n const nameB = b.username;\n\n return nameA.localeCompare(nameB);\n}\n\nfunction checkUserHasRole(user: UserProfile, userIsNotAdminOrGuest: boolean, membership: TeamMembership | ChannelMembership | undefined, role: string) {\n const isSystemRole = role.includes('system');\n return (\n (\n\n // If role is system user then user cannot have system admin or system guest roles\n isSystemRole && user.roles.includes(role) && (\n (role === General.SYSTEM_USER_ROLE && userIsNotAdminOrGuest) ||\n role !== General.SYSTEM_USER_ROLE\n )\n ) || (\n\n // If user is a system admin or a system guest then ignore team and channel memberships\n !isSystemRole && userIsNotAdminOrGuest && (\n (role === General.TEAM_ADMIN_ROLE && membership?.scheme_admin) ||\n (role === General.CHANNEL_ADMIN_ROLE && membership?.scheme_admin) ||\n (role === General.TEAM_USER_ROLE && membership?.scheme_user && !membership?.scheme_admin) ||\n (role === General.CHANNEL_USER_ROLE && membership?.scheme_user && !membership?.scheme_admin)\n )\n )\n );\n}\n\nexport function applyRolesFilters(user: UserProfile, filterRoles: string[], excludeRoles: string[], membership: TeamMembership | ChannelMembership | undefined): boolean {\n const userIsNotAdminOrGuest = !(user.roles.includes(General.SYSTEM_ADMIN_ROLE) || user.roles.includes(General.SYSTEM_GUEST_ROLE));\n const userHasExcludedRole = excludeRoles.some(checkUserHasRole.bind(null, user, userIsNotAdminOrGuest, membership));\n if (userHasExcludedRole) {\n return false;\n }\n return filterRoles.length === 0 || filterRoles.some(checkUserHasRole.bind(null, user, userIsNotAdminOrGuest, membership));\n}\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 {\n BasePluginConfigurationSetting,\n PluginConfiguration,\n PluginConfigurationAction,\n PluginConfigurationRadioSetting,\n PluginConfigurationRadioSettingOption,\n PluginConfigurationSection,\n PluginConfigurationCustomSetting,\n PluginCustomSettingComponent,\n} from 'types/plugins/user_settings';\n\nexport function extractPluginConfiguration(pluginConfiguration: unknown, pluginId: string) {\n if (!pluginConfiguration) {\n return undefined;\n }\n\n if (typeof pluginConfiguration !== 'object') {\n return undefined;\n }\n\n if (!('uiName' in pluginConfiguration) || !pluginConfiguration.uiName || typeof pluginConfiguration.uiName !== 'string') {\n return undefined;\n }\n\n let icon;\n if ('icon' in pluginConfiguration && pluginConfiguration.icon) {\n if (typeof pluginConfiguration.icon === 'string') {\n icon = pluginConfiguration.icon;\n } else {\n return undefined;\n }\n }\n\n if (!('sections' in pluginConfiguration) || !Array.isArray(pluginConfiguration.sections)) {\n return undefined;\n }\n\n if (!pluginConfiguration.sections.length) {\n return undefined;\n }\n\n let action;\n if ('action' in pluginConfiguration && pluginConfiguration.action) {\n action = extractPluginConfigurationAction(pluginConfiguration.action);\n }\n\n const result: PluginConfiguration = {\n id: pluginId,\n icon,\n sections: [],\n uiName: pluginConfiguration.uiName,\n action,\n };\n\n for (const section of pluginConfiguration.sections) {\n const validSections = extractPluginConfigurationSection(section, pluginId);\n if (validSections) {\n result.sections.push(validSections);\n } else {\n // eslint-disable-next-line no-console\n console.warn(`Plugin ${pluginId} is trying to register an invalid configuration section. Contact the plugin developer to fix this issue.`);\n }\n }\n\n if (!result.sections.length) {\n return undefined;\n }\n\n return result;\n}\n\nfunction extractPluginConfigurationAction(action: unknown): PluginConfigurationAction | undefined {\n if (!action) {\n return undefined;\n }\n\n if (typeof action !== 'object') {\n return undefined;\n }\n\n if (!('title' in action) || !action.title || typeof action.title !== 'string') {\n return undefined;\n }\n\n if (!('text' in action) || !action.text || typeof action.text !== 'string') {\n return undefined;\n }\n\n if (!('buttonText' in action) || !action.buttonText || typeof action.buttonText !== 'string') {\n return undefined;\n }\n\n if (!('onClick' in action) || !action.onClick || typeof action.onClick !== 'function') {\n return undefined;\n }\n\n return {\n title: action.title,\n text: action.text,\n buttonText: action.buttonText,\n onClick: action.onClick as PluginConfigurationAction['onClick'],\n };\n}\n\nfunction extractPluginConfigurationSection(section: unknown, pluginId: string) {\n if (!section) {\n return undefined;\n }\n\n if (typeof section !== 'object') {\n return undefined;\n }\n\n if (!('title' in section) || !section.title || typeof section.title !== 'string') {\n return undefined;\n }\n\n if ('component' in section) {\n if (!section.component || typeof section.component !== 'function') {\n return undefined;\n }\n\n try {\n const Component = section.component;\n if (!React.isValidElement((<Component/>))) {\n return undefined;\n }\n } catch {\n return undefined;\n }\n\n return {\n title: section.title,\n component: section.component as React.ComponentType,\n };\n }\n\n if (!('settings' in section) || !Array.isArray(section.settings)) {\n return undefined;\n }\n\n if (!section.settings.length) {\n return undefined;\n }\n\n let onSubmit;\n if ('onSubmit' in section && section.onSubmit) {\n if (typeof section.onSubmit === 'function') {\n onSubmit = section.onSubmit as PluginConfigurationSection['onSubmit'];\n } else {\n return undefined;\n }\n }\n\n let disabled;\n if ('disabled' in section && section.disabled) {\n if (typeof section.disabled === 'boolean') {\n disabled = section.disabled;\n } else {\n return undefined;\n }\n }\n\n const result: PluginConfigurationSection = {\n settings: [],\n title: section.title,\n disabled,\n onSubmit,\n };\n\n for (const setting of section.settings) {\n const validSetting = extractPluginConfigurationSetting(setting);\n if (validSetting) {\n result.settings.push(validSetting);\n } else {\n // eslint-disable-next-line no-console\n console.warn(`Plugin ${pluginId} is trying to register an invalid configuration section setting. Contact the plugin developer to fix this issue.`);\n }\n }\n\n if (!result.settings.length) {\n return undefined;\n }\n\n return result;\n}\n\nfunction extractPluginConfigurationSetting(setting: unknown) {\n if (!setting || typeof setting !== 'object') {\n return undefined;\n }\n\n if (!('name' in setting) || !setting.name || typeof setting.name !== 'string') {\n return undefined;\n }\n\n let title;\n if (('title' in setting) && setting.title) {\n if (typeof setting.title === 'string') {\n title = setting.title;\n } else {\n return undefined;\n }\n }\n\n let helpText;\n if ('helpText' in setting && setting.helpText) {\n if (typeof setting.helpText === 'string') {\n helpText = setting.helpText;\n } else {\n return undefined;\n }\n }\n\n let defaultValue;\n if ('default' in setting && setting.default) {\n if (typeof setting.default === 'string') {\n defaultValue = setting.default;\n } else {\n return undefined;\n }\n }\n\n if (!('type' in setting) || !setting.type || typeof setting.type !== 'string') {\n return undefined;\n }\n\n const res: BasePluginConfigurationSetting = {\n default: defaultValue,\n name: setting.name,\n title,\n helpText,\n };\n\n switch (setting.type) {\n case 'radio':\n return extractPluginConfigurationRadioSetting(setting, res);\n case 'custom':\n return extractPluginConfigurationCustomSetting(setting, res);\n default:\n return undefined;\n }\n}\n\nfunction extractPluginConfigurationCustomSetting(setting: unknown, base: BasePluginConfigurationSetting) {\n if (!setting || typeof setting !== 'object') {\n return undefined;\n }\n\n if (!('component' in setting) || !setting.component || typeof setting.component !== 'function') {\n return undefined;\n }\n\n try {\n const Component = setting.component;\n if (!React.isValidElement((<Component/>))) {\n return undefined;\n }\n } catch {\n return undefined;\n }\n\n const res: PluginConfigurationCustomSetting = {\n ...base,\n type: 'custom',\n component: setting.component as PluginCustomSettingComponent,\n };\n\n return res;\n}\n\nfunction extractPluginConfigurationRadioSetting(setting: unknown, base: BasePluginConfigurationSetting) {\n if (!setting || typeof setting !== 'object') {\n return undefined;\n }\n\n if (!('default' in setting) || !setting.default || typeof setting.default !== 'string') {\n return undefined;\n }\n\n if (!('options' in setting) || !Array.isArray(setting.options)) {\n return undefined;\n }\n\n const res: PluginConfigurationRadioSetting = {\n ...base,\n type: 'radio',\n default: setting.default,\n options: [],\n };\n\n for (const option of setting.options) {\n const isValid = extractValidRadioOption(option);\n if (isValid) {\n res.options.push(isValid);\n }\n }\n\n if (!res.options.length) {\n return undefined;\n }\n\n return res;\n}\n\nfunction extractValidRadioOption(option: unknown) {\n if (!option || typeof option !== 'object') {\n return undefined;\n }\n\n if (!('value' in option) || !option.value || typeof option.value !== 'string') {\n return undefined;\n }\n\n if (!('text' in option) || !option.text || typeof option.text !== 'string') {\n return undefined;\n }\n\n let helpText;\n if ('helpText' in option && option.helpText) {\n if (typeof option.helpText === 'string') {\n helpText = option.helpText;\n } else {\n return undefined;\n }\n }\n\n const res: PluginConfigurationRadioSettingOption = {\n value: option.value,\n text: option.text,\n helpText,\n };\n\n return res;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport remove from 'lodash/remove';\nimport type {AnyAction} from 'redux';\nimport {combineReducers} from 'redux';\n\nimport type {ClientPluginManifest} from '@mattermost/types/plugins';\nimport type {IDMappedObjects} from '@mattermost/types/utilities';\n\nimport {UserTypes} from 'mattermost-redux/action_types';\n\nimport {ActionTypes} from 'utils/constants';\nimport {extractPluginConfiguration} from 'utils/plugins/plugin_setting_extraction';\n\nimport type {MMAction} from 'types/store';\nimport type {\n PluginsState,\n PluginComponent,\n AdminConsolePluginComponent,\n AdminConsolePluginCustomSection,\n Menu,\n} from 'types/store/plugins';\n\nfunction hasMenuId(menu: Menu|PluginComponent, menuId: string) {\n if (!menu.subMenu) {\n return false;\n }\n\n if (menu.id === menuId) {\n return true;\n }\n for (const subMenu of menu.subMenu) {\n // Recursively check if subMenu contains menuId.\n if (hasMenuId(subMenu, menuId)) {\n return true;\n }\n }\n return false;\n}\n\nfunction buildMenu(rootMenu: Menu|PluginComponent, data: Menu): Menu|PluginComponent {\n // Recursively build the full menu tree.\n const subMenu = rootMenu.subMenu?.map((m: Menu) => buildMenu(m, data));\n if (rootMenu.id === data.parentMenuId) {\n subMenu?.push(data);\n }\n\n return {\n ...rootMenu,\n subMenu: subMenu as Menu[],\n };\n}\n\nfunction sortComponents(a: PluginComponent, b: PluginComponent) {\n if (a.pluginId < b.pluginId) {\n return -1;\n }\n\n if (a.pluginId > b.pluginId) {\n return 1;\n }\n\n return 0;\n}\n\nfunction removePostPluginComponents(state: PluginsState['postTypes'], action: AnyAction) {\n if (!action.data) {\n return state;\n }\n\n const nextState = {...state};\n let modified = false;\n Object.keys(nextState).forEach((k) => {\n const c = nextState[k];\n if (c.pluginId === action.data.id) {\n Reflect.deleteProperty(nextState, k);\n modified = true;\n }\n });\n\n if (modified) {\n return nextState;\n }\n\n return state;\n}\n\nfunction removePostPluginComponent(state: PluginsState['postTypes'], action: AnyAction) {\n const nextState = {...state};\n const keys = Object.keys(nextState);\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n if (nextState[k].id === action.id) {\n Reflect.deleteProperty(nextState, k);\n return nextState;\n }\n }\n\n return state;\n}\n\nfunction removePluginComponents(state: PluginsState['components'], action: AnyAction) {\n if (!action.data) {\n return state;\n }\n\n const nextState = {...state};\n const types = Object.keys(nextState);\n let modified = false;\n for (let i = 0; i < types.length; i++) {\n const componentType = types[i];\n const componentList = nextState[componentType] || [];\n for (let j = componentList.length - 1; j >= 0; j--) {\n if (componentList[j].pluginId === action.data.id) {\n const nextArray = [...nextState[componentType]];\n nextArray.splice(j, 1);\n nextState[componentType] = nextArray;\n modified = true;\n }\n }\n }\n\n if (modified) {\n return nextState;\n }\n\n return state;\n}\n\nfunction removePluginComponent(state: PluginsState['components'], action: AnyAction) {\n let newState = state;\n const types = Object.keys(state);\n for (let i = 0; i < types.length; i++) {\n const componentType = types[i];\n const componentList = state[componentType] || [];\n for (let j = 0; j < componentList.length; j++) {\n if (componentList[j].id === action.id) {\n const nextArray = [...componentList];\n nextArray.splice(j, 1);\n newState = {...newState, [componentType]: nextArray};\n }\n }\n }\n return newState;\n}\n\nfunction plugins(state: IDMappedObjects<ClientPluginManifest> = {}, action: MMAction) {\n switch (action.type) {\n case ActionTypes.RECEIVED_WEBAPP_PLUGINS: {\n if (action.data) {\n const nextState: IDMappedObjects<ClientPluginManifest> = {};\n action.data.forEach((p: ClientPluginManifest) => {\n nextState[p.id] = p;\n });\n return nextState;\n }\n return state;\n }\n case ActionTypes.RECEIVED_WEBAPP_PLUGIN: {\n if (action.data) {\n const nextState = {...state};\n nextState[action.data.id] = action.data;\n return nextState;\n }\n return state;\n }\n case ActionTypes.REMOVED_WEBAPP_PLUGIN: {\n if (action.data && state[action.data.id]) {\n const nextState = {...state};\n Reflect.deleteProperty(nextState, action.data.id);\n return nextState;\n }\n return state;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nconst initialComponents: PluginsState['components'] = {\n AppBar: [],\n CallButton: [],\n FilePreview: [],\n LinkTooltip: [],\n MainMenu: [],\n ChannelHeaderButton: [],\n MobileChannelHeaderButton: [],\n PostDropdownMenu: [],\n PostAction: [],\n PostEditorAction: [],\n CodeBlockAction: [],\n NewMessagesSeparatorAction: [],\n Product: [],\n RightHandSidebarComponent: [],\n UserGuideDropdownItem: [],\n FilesWillUploadHook: [],\n NeedsTeamComponent: [],\n CreateBoardFromTemplate: [],\n DesktopNotificationHooks: [],\n MessageWillBePosted: [],\n MessageWillBeUpdated: [],\n MessageWillFormat: [],\n SlashCommandWillBePosted: [],\n};\n\nfunction components(state: PluginsState['components'] = initialComponents, action: MMAction) {\n switch (action.type) {\n case ActionTypes.RECEIVED_PLUGIN_COMPONENT: {\n if (action.name && action.data) {\n const nextState = {...state};\n const currentArray = nextState[action.name] || [];\n const nextArray = [...currentArray];\n let actionData = action.data;\n if (action.name === 'PostDropdownMenu' && actionData.parentMenuId) {\n // Remove the menu from nextArray to rebuild it later.\n const menu = remove(nextArray, (c) => hasMenuId(c, actionData.parentMenuId) && c.pluginId === actionData.pluginId);\n\n // Request is for an unknown menuId, return original state.\n if (!menu[0]) {\n return state;\n }\n actionData = buildMenu(menu[0], actionData);\n }\n nextArray.push(actionData);\n nextArray.sort(sortComponents);\n nextState[action.name] = nextArray;\n return nextState;\n }\n return state;\n }\n case ActionTypes.REMOVED_PLUGIN_COMPONENT:\n return removePluginComponent(state, action);\n case ActionTypes.REMOVED_WEBAPP_PLUGIN:\n return removePluginComponents(state, action);\n\n case UserTypes.LOGOUT_SUCCESS:\n return initialComponents;\n default:\n return state;\n }\n}\n\nfunction postTypes(state: PluginsState['postTypes'] = {}, action: MMAction) {\n switch (action.type) {\n case ActionTypes.RECEIVED_PLUGIN_POST_COMPONENT: {\n if (action.data) {\n // Skip saving the component if one already exists and the new plugin id\n // is lower alphabetically\n const currentPost = state[action.data.type];\n if (currentPost && action.data.pluginId > currentPost.pluginId) {\n return state;\n }\n\n const nextState = {...state};\n nextState[action.data.type] = action.data;\n return nextState;\n }\n return state;\n }\n case ActionTypes.REMOVED_PLUGIN_POST_COMPONENT:\n return removePostPluginComponent(state, action);\n case ActionTypes.REMOVED_WEBAPP_PLUGIN:\n return removePostPluginComponents(state, action);\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction postCardTypes(state: PluginsState['postTypes'] = {}, action: MMAction) {\n switch (action.type) {\n case ActionTypes.RECEIVED_PLUGIN_POST_CARD_COMPONENT: {\n if (action.data) {\n // Skip saving the component if one already exists and the new plugin id\n // is lower alphabetically\n const currentPost = state[action.data.type];\n if (currentPost && action.data.pluginId > currentPost.pluginId) {\n return state;\n }\n\n const nextState = {...state};\n nextState[action.data.type] = action.data;\n return nextState;\n }\n return state;\n }\n case ActionTypes.REMOVED_PLUGIN_POST_CARD_COMPONENT:\n return removePostPluginComponent(state, action);\n case ActionTypes.REMOVED_WEBAPP_PLUGIN:\n return removePostPluginComponents(state, action);\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction adminConsoleReducers(state: {[pluginId: string]: any} = {}, action: MMAction) {\n switch (action.type) {\n case ActionTypes.RECEIVED_ADMIN_CONSOLE_REDUCER: {\n if (action.data) {\n const nextState = {...state};\n nextState[action.data.pluginId] = action.data.reducer;\n return nextState;\n }\n return state;\n }\n case ActionTypes.REMOVED_ADMIN_CONSOLE_REDUCER: {\n if (action.data && state[action.data.pluginId]) {\n const nextState = {...state};\n delete nextState[action.data.pluginId];\n return nextState;\n }\n return state;\n }\n case ActionTypes.REMOVED_WEBAPP_PLUGIN:\n if (action.data && state[action.data.id]) {\n const nextState = {...state};\n delete nextState[action.data.id];\n return nextState;\n }\n return state;\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction adminConsoleCustomComponents(state: {[pluginId: string]: Record<string, AdminConsolePluginComponent>} = {}, action: MMAction) {\n switch (action.type) {\n case ActionTypes.RECEIVED_ADMIN_CONSOLE_CUSTOM_COMPONENT: {\n if (!action.data) {\n return state;\n }\n\n const pluginId = action.data.pluginId;\n const key = action.data.key.toLowerCase();\n\n const nextState = {...state};\n let nextArray: Record<string, AdminConsolePluginComponent> = {};\n if (nextState[pluginId]) {\n nextArray = {...nextState[pluginId]};\n }\n nextArray[key] = action.data;\n nextState[pluginId] = nextArray;\n\n return nextState;\n }\n case ActionTypes.REMOVED_WEBAPP_PLUGIN: {\n if (!action.data || !state[action.data.id]) {\n return state;\n }\n\n const pluginId = action.data.id;\n const nextState = {...state};\n delete nextState[pluginId];\n return nextState;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction adminConsoleCustomSections(state: {[pluginId: string]: Record<string, AdminConsolePluginCustomSection>} = {}, action: MMAction) {\n switch (action.type) {\n case ActionTypes.RECEIVED_ADMIN_CONSOLE_CUSTOM_SECTION: {\n if (!action.data) {\n return state;\n }\n\n const pluginId = action.data.pluginId;\n const key = action.data.key.toLowerCase();\n\n const nextState = {...state};\n let nextObject: Record<string, AdminConsolePluginCustomSection> = {};\n if (nextState[pluginId]) {\n nextObject = {...nextState[pluginId]};\n }\n nextObject[key] = action.data;\n nextState[pluginId] = nextObject;\n\n return nextState;\n }\n case ActionTypes.REMOVED_WEBAPP_PLUGIN: {\n if (!action.data || !state[action.data.id]) {\n return state;\n }\n\n const pluginId = action.data.id;\n const nextState = {...state};\n delete nextState[pluginId];\n return nextState;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction siteStatsHandlers(state: PluginsState['siteStatsHandlers'] = {}, action: MMAction) {\n switch (action.type) {\n case ActionTypes.RECEIVED_PLUGIN_STATS_HANDLER:\n if (action.data) {\n const nextState = {...state};\n nextState[action.data.pluginId] = action.data.handler;\n return nextState;\n }\n return state;\n\n case ActionTypes.REMOVED_WEBAPP_PLUGIN:\n if (action.data) {\n const nextState = {...state};\n delete nextState[action.data.id];\n return nextState;\n }\n return state;\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction userSettings(state: PluginsState['userSettings'] = {}, action: MMAction) {\n switch (action.type) {\n case ActionTypes.RECEIVED_PLUGIN_USER_SETTINGS:\n if (action.data) {\n const extractedConfiguration = extractPluginConfiguration(action.data.setting, action.data.pluginId);\n if (!extractedConfiguration) {\n // eslint-disable-next-line no-console\n console.warn(`Plugin ${action.data.pluginId} is trying to register an invalid configuration. Contact the plugin developer to fix this issue.`);\n return state;\n }\n const nextState = {...state};\n nextState[action.data.pluginId] = extractedConfiguration;\n return nextState;\n }\n return state;\n case ActionTypes.REMOVED_WEBAPP_PLUGIN:\n if (action.data) {\n const nextState = {...state};\n delete nextState[action.data.id];\n return nextState;\n }\n return state;\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n\n // object where every key is a plugin id and values are webapp plugin manifests\n plugins,\n\n // object where every key is a component name and the values are arrays of\n // components wrapped in an object that contains an id and plugin id\n components,\n\n // object where every key is a post type and the values are components wrapped in an\n // an object that contains a plugin id\n postTypes,\n\n // object where every key is a post type and the values are components wrapped in an\n // an object that contains a plugin id\n postCardTypes,\n\n // object where every key is a plugin id and the value is a function that\n // modifies the admin console definition data structure\n adminConsoleReducers,\n\n // objects where every key is a plugin id and the value is an object mapping keys to a custom\n // React component to render on the plugin's system console.\n adminConsoleCustomComponents,\n\n // objects where every key is a plugin id and the value is an object mapping keys to a custom\n // React component to render on the plugin's system console as custom section.\n adminConsoleCustomSections,\n\n // objects where every key is a plugin id and the value is a promise to fetch stats from\n // a plugin to render on system console\n siteStatsHandlers,\n\n // objects where every key is a plugin id and the value is configuration schema to show in\n // the user settings modal\n userSettings,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport localForage from 'localforage';\nimport {combineReducers} from 'redux';\nimport {createMigrate, persistReducer, REHYDRATE} from 'redux-persist';\nimport type {MigrationManifest, PersistedState} from 'redux-persist';\n\nimport {UserTypes} from 'mattermost-redux/action_types';\nimport {General} from 'mattermost-redux/constants';\n\nimport {StoragePrefixes, StorageTypes} from 'utils/constants';\nimport {getDraftInfoFromKey} from 'utils/storage_utils';\n\nimport type {MMAction} from 'types/store';\nimport type {StorageItem} from 'types/store/storage';\n\nfunction storage(state: Record<string, any> = {}, action: MMAction) {\n switch (action.type) {\n case REHYDRATE: {\n if (!action.payload || action.key !== 'storage') {\n return state;\n }\n\n // We have to do some transformation here to correct for the transformation we do when persisting storage state\n const nextState = {...state};\n\n for (const [key, value] of Object.entries(action.payload)) {\n const nextValue = {...value as StorageItem};\n if (nextValue.timestamp && typeof nextValue.timestamp === 'string') {\n nextValue.timestamp = new Date(nextValue.timestamp);\n }\n nextState[key] = nextValue;\n }\n\n return nextState;\n }\n case StorageTypes.SET_GLOBAL_ITEM: {\n if (!state[action.data.name] ||\n !state[action.data.name].timestamp ||\n state[action.data.name].timestamp < action.data.timestamp\n ) {\n const nextState = {...state};\n nextState[action.data.name] = {\n timestamp: action.data.timestamp,\n value: action.data.value,\n };\n return nextState;\n }\n return state;\n }\n case StorageTypes.REMOVE_GLOBAL_ITEM: {\n const nextState = {...state};\n Reflect.deleteProperty(nextState, action.data.name);\n return nextState;\n }\n case StorageTypes.ACTION_ON_GLOBAL_ITEMS_WITH_PREFIX: {\n const nextState = {...state};\n let changed = false;\n\n for (const key of Object.keys(nextState)) {\n if (!key.startsWith(action.data.prefix)) {\n continue;\n }\n\n const value = nextState[key].value;\n const nextValue = action.data.action(key, value);\n if (value === nextValue) {\n continue;\n }\n\n nextState[key] = {\n timestamp: new Date(),\n value: action.data.action(key, state[key].value),\n };\n changed = true;\n }\n\n return changed ? nextState : state;\n }\n case StorageTypes.STORAGE_REHYDRATE: {\n return {...state, ...action.data};\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction migrateDrafts(state: any) {\n const drafts: any = {};\n for (const storageKey of Object.keys(state)) {\n if (!storageKey.startsWith('draft')) {\n continue;\n }\n\n const storageDraft = state[storageKey];\n if (storageDraft.value?.channelId) {\n // No migration is needed\n continue;\n }\n\n const info = getDraftInfoFromKey(storageKey, StoragePrefixes.DRAFT);\n const timestamp = new Date(storageDraft.timestamp);\n\n if (!info?.id) {\n drafts[storageKey] = {timestamp, value: {message: '', fileInfos: [], uploadsInProgress: []}};\n continue;\n }\n\n const migratedDraft = {\n timestamp,\n value: {\n message: storageDraft.value?.message,\n fileInfos: storageDraft.value?.fileInfos || [],\n props: storageDraft.value?.props || {},\n uploadsInProgress: storageDraft.value?.uploadsInProgress || [],\n channelId: info.id,\n rootId: '',\n createAt: timestamp.getTime(),\n updateAt: timestamp.getTime(),\n show: true,\n },\n };\n\n drafts[storageKey] = {...migratedDraft};\n }\n\n return drafts;\n}\n\nfunction initialized(state = false, action: MMAction) {\n switch (action.type) {\n case General.STORE_REHYDRATION_COMPLETE:\n return state || action.complete;\n\n default:\n return state;\n }\n}\n\nconst migrations: MigrationManifest = {\n 1: (state: PersistedState): PersistedState => {\n return {\n ...state,\n ...migrateDrafts(state),\n };\n },\n};\n\nconst config = {\n key: 'storage',\n version: 1,\n storage: localForage,\n migrate: createMigrate(migrations, {debug: false}),\n};\n\nexport default combineReducers({\n storage: persistReducer(config, storage),\n initialized,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport {ActionTypes} from 'utils/constants';\n\nimport type {MMAction} from 'types/store';\n\nexport function isOpen(state = false, action: MMAction) {\n switch (action.type) {\n case ActionTypes.ADD_CHANNEL_CTA_DROPDOWN_TOGGLE:\n return action.open;\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n isOpen,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport {ActionTypes} from 'utils/constants';\n\nimport type {MMAction} from 'types/store';\n\nexport function isOpen(state = false, action: MMAction) {\n switch (action.type) {\n case ActionTypes.ADD_CHANNEL_DROPDOWN_TOGGLE:\n return action.open;\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n isOpen,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport {UserTypes} from 'mattermost-redux/action_types';\n\nimport {ActionTypes} from 'utils/constants';\n\nimport type {MMAction} from 'types/store';\n\nfunction announcementBarState(state = {announcementBarCount: 0}, action: MMAction) {\n switch (action.type) {\n case ActionTypes.TRACK_ANNOUNCEMENT_BAR:\n return {\n ...state,\n announcementBarCount: state.announcementBarCount + 1,\n };\n\n case ActionTypes.DISMISS_ANNOUNCEMENT_BAR:\n return {\n ...state,\n announcementBarCount: Math.max(state.announcementBarCount - 1, 0),\n };\n\n case UserTypes.LOGOUT_SUCCESS:\n return {\n announcementBarCount: 0,\n };\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n announcementBarState,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport {ActionTypes, WindowSizes} from 'utils/constants';\n\nimport type {MMAction} from 'types/store';\n\nfunction focused(state = true, action: MMAction) {\n switch (action.type) {\n case ActionTypes.BROWSER_CHANGE_FOCUS:\n return action.focus;\n default:\n return state;\n }\n}\n\nfunction windowSize(state = WindowSizes.DESKTOP_VIEW, action: MMAction) {\n switch (action.type) {\n case ActionTypes.BROWSER_WINDOW_RESIZED:\n return action.data;\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n focused,\n windowSize,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport {ChannelTypes, PostTypes, UserTypes, GeneralTypes} from 'mattermost-redux/action_types';\n\nimport {ActionTypes, Constants} from 'utils/constants';\n\nimport type {MMAction} from 'types/store';\n\nfunction postVisibility(state: {[channelId: string]: number} = {}, action: MMAction) {\n switch (action.type) {\n case ChannelTypes.SELECT_CHANNEL: {\n const nextState = {...state};\n nextState[action.data] = Constants.POST_CHUNK_SIZE / 2;\n return nextState;\n }\n case ActionTypes.INCREASE_POST_VISIBILITY: {\n const nextState = {...state};\n nextState[action.data] += action.amount;\n return nextState;\n }\n case ActionTypes.RECEIVED_FOCUSED_POST: {\n const nextState = {...state};\n nextState[action.channelId] = Constants.POST_CHUNK_SIZE / 2;\n return nextState;\n }\n case PostTypes.RECEIVED_NEW_POST: {\n if (action.data && state[action.data.channel_id]) {\n const nextState = {...state};\n nextState[action.data.channel_id] += 1;\n return nextState;\n }\n return state;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction lastChannelViewTime(state: {[channelId: string]: number} = {}, action: MMAction) {\n switch (action.type) {\n case ActionTypes.SELECT_CHANNEL_WITH_MEMBER: {\n if (action.member) {\n const nextState = {...state};\n nextState[action.data] = action.member.last_viewed_at;\n return nextState;\n }\n return state;\n }\n case ActionTypes.UPDATE_CHANNEL_LAST_VIEWED_AT: {\n const nextState = {...state};\n nextState[action.channel_id] = action.last_viewed_at;\n return nextState;\n }\n\n case ActionTypes.POST_UNREAD_SUCCESS: {\n const data = action.data;\n return {...state, [data.channelId]: data.lastViewedAt};\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction loadingPosts(state: {[channelId: string]: boolean} = {}, action: MMAction) {\n switch (action.type) {\n case ActionTypes.LOADING_POSTS: {\n const nextState = {...state};\n nextState[action.channelId] = action.data;\n return nextState;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction focusedPostId(state = '', action: MMAction) {\n switch (action.type) {\n case ActionTypes.RECEIVED_FOCUSED_POST:\n return action.data;\n case ChannelTypes.SELECT_CHANNEL:\n return '';\n\n case UserTypes.LOGOUT_SUCCESS:\n return '';\n default:\n return state;\n }\n}\n\nfunction mobileView(state = false, action: MMAction) {\n switch (action.type) {\n case ActionTypes.UPDATE_MOBILE_VIEW:\n return action.data;\n\n default:\n return state;\n }\n}\n\n// lastUnreadChannel tracks if the current channel was unread and if it had mentions when the user switched to it.\nfunction lastUnreadChannel(state: ({channelId: string; hadMentions: boolean}) | null = null, action: MMAction) {\n switch (action.type) {\n case ChannelTypes.LEAVE_CHANNEL:\n if (action.data.id === state?.channelId) {\n return null;\n }\n return state;\n case ActionTypes.SET_LAST_UNREAD_CHANNEL: {\n const {\n channelId,\n hadMentions,\n hadUnreads,\n } = action;\n\n if (hadMentions || hadUnreads) {\n return {\n id: channelId,\n hadMentions,\n };\n }\n\n return null;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return null;\n default:\n return state;\n }\n}\n\nfunction lastGetPosts(state: {[channelId: string]: number} = {}, action: MMAction) {\n switch (action.type) {\n case ActionTypes.RECEIVED_POSTS_FOR_CHANNEL_AT_TIME:\n return {\n ...state,\n [action.channelId]: action.time,\n };\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction toastStatus(state = false, action: MMAction) {\n switch (action.type) {\n case ActionTypes.SELECT_CHANNEL_WITH_MEMBER:\n return false;\n case ActionTypes.UPDATE_TOAST_STATUS:\n return action.data;\n case UserTypes.LOGOUT_SUCCESS:\n return false;\n default:\n return state;\n }\n}\n\nfunction channelPrefetchStatus(state: {[channelId: string]: string} = {}, action: MMAction) {\n switch (action.type) {\n case ActionTypes.PREFETCH_POSTS_FOR_CHANNEL:\n return {\n ...state,\n [action.channelId]: action.status,\n };\n case GeneralTypes.WEBSOCKET_FAILURE:\n case GeneralTypes.WEBSOCKET_CLOSED:\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n postVisibility,\n lastChannelViewTime,\n loadingPosts,\n focusedPostId,\n mobileView,\n lastUnreadChannel,\n lastGetPosts,\n toastStatus,\n channelPrefetchStatus,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport type {Channel} from '@mattermost/types/channels';\n\nimport {ChannelTypes, UserTypes} from 'mattermost-redux/action_types';\n\nimport type {MMAction} from 'types/store';\n\nfunction channels(state: string[] = [], action: MMAction) {\n switch (action.type) {\n case ChannelTypes.RECEIVED_ALL_CHANNELS:\n return action.data.map((v: Channel) => v.id);\n case UserTypes.LOGOUT_SUCCESS:\n return [];\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n channels,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport type {ChannelCategory} from '@mattermost/types/channel_categories';\n\nimport {ChannelCategoryTypes, UserTypes} from 'mattermost-redux/action_types';\nimport {removeItem} from 'mattermost-redux/utils/array_utils';\n\nimport {ActionTypes} from 'utils/constants';\n\nimport type {DraggingState, MMAction} from 'types/store';\n\nexport function unreadFilterEnabled(state = false, action: MMAction) {\n switch (action.type) {\n case ActionTypes.SET_UNREAD_FILTER_ENABLED:\n return action.enabled;\n\n case UserTypes.LOGOUT_SUCCESS:\n return false;\n default:\n return state;\n }\n}\n\nexport function draggingState(state: DraggingState = {}, action: MMAction): DraggingState {\n switch (action.type) {\n case ActionTypes.SIDEBAR_DRAGGING_SET_STATE:\n return {\n state: action.data.state || state?.state,\n type: action.data.type || state?.type,\n id: action.data.id || state?.id,\n };\n\n case ActionTypes.SIDEBAR_DRAGGING_STOP:\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nexport function newCategoryIds(state: string[] = [], action: MMAction): string[] {\n switch (action.type) {\n case ActionTypes.ADD_NEW_CATEGORY_ID:\n return [...state, action.data];\n case ChannelCategoryTypes.RECEIVED_CATEGORY: {\n const category: ChannelCategory = action.data;\n\n if (category.channel_ids.length > 0) {\n return removeItem(state, category.id);\n }\n\n return state;\n }\n case ChannelCategoryTypes.RECEIVED_CATEGORIES: {\n const categories = action.data;\n\n return categories.reduce((nextState: string[], category: ChannelCategory) => {\n if (category.channel_ids.length > 0) {\n return removeItem(nextState, category.id);\n }\n\n return nextState;\n }, state);\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return [];\n default:\n return state;\n }\n}\n\nexport function multiSelectedChannelIds(state: string[] = [], action: MMAction): string[] {\n switch (action.type) {\n case ActionTypes.MULTISELECT_CHANNEL:\n // Channel was not previously selected\n // now will be the only selected item\n if (!state.includes(action.data)) {\n return [action.data];\n }\n\n // Channel was part of a selected group\n // will now become the only selected item\n if (state.length > 1) {\n return [action.data];\n }\n\n // Channel was previously selected but not in a group\n // we will now clear the selection\n return [];\n case ActionTypes.MULTISELECT_CHANNEL_ADD:\n // if not selected - add it to the selected items\n if (state.indexOf(action.data) === -1) {\n return [\n ...state,\n action.data,\n ];\n }\n\n // it was previously selected and now needs to be removed from the group\n return removeItem(state, action.data);\n case ActionTypes.MULTISELECT_CHANNEL_TO:\n return action.data;\n\n case ActionTypes.MULTISELECT_CHANNEL_CLEAR:\n return state.length > 0 ? [] : state;\n\n case UserTypes.LOGOUT_SUCCESS:\n return [];\n default:\n return state;\n }\n}\n\nexport function lastSelectedChannel(state = '', action: MMAction): string {\n switch (action.type) {\n case ActionTypes.MULTISELECT_CHANNEL:\n case ActionTypes.MULTISELECT_CHANNEL_ADD:\n return action.data;\n case ActionTypes.MULTISELECT_CHANNEL_CLEAR:\n case UserTypes.LOGOUT_SUCCESS:\n return '';\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n unreadFilterEnabled,\n draggingState,\n newCategoryIds,\n multiSelectedChannelIds,\n lastSelectedChannel,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport {ActionTypes} from 'utils/constants';\n\nimport type {MMAction} from 'types/store';\n\nfunction remotes(state: Record<string, boolean> = {}, action: MMAction) {\n switch (action.type) {\n case ActionTypes.SET_DRAFT_SOURCE:\n return {\n ...state,\n [action.data.key]: action.data.isRemote,\n };\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n\n // object that stores global draft keys indicating whether the draft came from a WebSocket event.\n remotes,\n\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport {UserTypes} from 'mattermost-redux/action_types';\n\nimport {ActionTypes, Locations} from 'utils/constants';\n\nimport type {MMAction} from 'types/store';\n\nfunction emojiPickerCustomPage(state = 0, action: MMAction) {\n switch (action.type) {\n case ActionTypes.INCREMENT_EMOJI_PICKER_PAGE:\n return state + 1;\n case UserTypes.LOGOUT_SUCCESS:\n return 0;\n default:\n return state;\n }\n}\n\nfunction shortcutReactToLastPostEmittedFrom(state = '', action: MMAction) {\n switch (action.type) {\n case ActionTypes.EMITTED_SHORTCUT_REACT_TO_LAST_POST:\n if (action.payload === Locations.CENTER) {\n return Locations.CENTER;\n } else if (action.payload === Locations.RHS_ROOT) {\n return Locations.RHS_ROOT;\n }\n return '';\n\n case UserTypes.LOGOUT_SUCCESS:\n return '';\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n emojiPickerCustomPage,\n shortcutReactToLastPostEmittedFrom,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport {ActionTypes} from 'utils/constants';\n\nimport type {MMAction} from 'types/store';\nimport type {Translations} from 'types/store/i18n';\n\nfunction translations(state: Translations = {}, action: MMAction) {\n switch (action.type) {\n case ActionTypes.RECEIVED_TRANSLATIONS:\n return {\n ...state,\n [action.data.locale]: action.data.translations,\n };\n\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n translations,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport {TeamTypes, UserTypes} from 'mattermost-redux/action_types';\n\nimport {SidebarSize} from 'components/resizable_sidebar/constants';\n\nimport {ActionTypes} from 'utils/constants';\n\nimport type {MMAction} from 'types/store';\n\nfunction isOpen(state = false, action: MMAction) {\n switch (action.type) {\n case ActionTypes.TOGGLE_LHS:\n return !state;\n case ActionTypes.OPEN_LHS:\n return true;\n case ActionTypes.CLOSE_LHS:\n return false;\n case ActionTypes.TOGGLE_RHS_MENU:\n return false;\n case ActionTypes.OPEN_RHS_MENU:\n return false;\n case TeamTypes.SELECT_TEAM:\n return false;\n\n case UserTypes.LOGOUT_SUCCESS:\n return false;\n default:\n return state;\n }\n}\n\nfunction size(state = SidebarSize.MEDIUM, action: MMAction) {\n switch (action.type) {\n case ActionTypes.SET_LHS_SIZE:\n return action.size;\n default:\n return state;\n }\n}\n\nfunction currentStaticPageId(state = '', action: MMAction) {\n switch (action.type) {\n case ActionTypes.SELECT_STATIC_PAGE:\n return action.data;\n case UserTypes.LOGOUT_SUCCESS:\n return '';\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n isOpen,\n size,\n currentStaticPageId,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport type {MarketplaceApp, MarketplacePlugin} from '@mattermost/types/marketplace';\n\nimport {UserTypes} from 'mattermost-redux/action_types';\n\nimport {ActionTypes, ModalIdentifiers} from 'utils/constants';\n\nimport type {MMAction} from 'types/store';\n\n// plugins tracks the set of marketplace plugins returned by the server\nfunction plugins(state: MarketplacePlugin[] = [], action: MMAction): MarketplacePlugin[] {\n switch (action.type) {\n case ActionTypes.RECEIVED_MARKETPLACE_PLUGINS:\n return action.plugins ? action.plugins : [];\n\n case ActionTypes.MODAL_CLOSE:\n if (action.modalId !== ModalIdentifiers.PLUGIN_MARKETPLACE) {\n return state;\n }\n\n return [];\n\n case UserTypes.LOGOUT_SUCCESS:\n return [];\n default:\n return state;\n }\n}\n\n// apps tracks the set of marketplace apps returned by the apps plugin\nfunction apps(state: MarketplaceApp[] = [], action: MMAction): MarketplaceApp[] {\n switch (action.type) {\n case ActionTypes.RECEIVED_MARKETPLACE_APPS:\n return action.apps ? action.apps : [];\n\n case ActionTypes.MODAL_CLOSE:\n if (action.modalId !== ModalIdentifiers.PLUGIN_MARKETPLACE) {\n return state;\n }\n\n return [];\n\n case UserTypes.LOGOUT_SUCCESS:\n return [];\n default:\n return state;\n }\n}\n\n// installing tracks the items pending installation\nfunction installing(state: {[id: string]: boolean} = {}, action: MMAction): {[id: string]: boolean} {\n switch (action.type) {\n case ActionTypes.INSTALLING_MARKETPLACE_ITEM:\n if (state[action.id]) {\n return state;\n }\n\n return {\n ...state,\n [action.id]: true,\n };\n\n case ActionTypes.INSTALLING_MARKETPLACE_ITEM_SUCCEEDED:\n case ActionTypes.INSTALLING_MARKETPLACE_ITEM_FAILED: {\n if (!Object.hasOwn(state, action.id)) {\n return state;\n }\n\n const newState = {...state};\n delete newState[action.id];\n\n return newState;\n }\n\n case ActionTypes.MODAL_CLOSE:\n if (action.modalId !== ModalIdentifiers.PLUGIN_MARKETPLACE) {\n return state;\n }\n\n return {};\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\n// errors tracks the error messages for items that failed installation\nfunction errors(state: {[id: string]: string} = {}, action: MMAction): {[id: string]: string} {\n switch (action.type) {\n case ActionTypes.INSTALLING_MARKETPLACE_ITEM_FAILED:\n return {\n ...state,\n [action.id]: action.error,\n };\n\n case ActionTypes.INSTALLING_MARKETPLACE_ITEM_SUCCEEDED:\n case ActionTypes.INSTALLING_MARKETPLACE_ITEM: {\n if (!Object.hasOwn(state, action.id)) {\n return state;\n }\n\n const newState = {...state};\n delete newState[action.id];\n\n return newState;\n }\n\n case ActionTypes.MODAL_CLOSE:\n if (action.modalId !== ModalIdentifiers.PLUGIN_MARKETPLACE) {\n return state;\n }\n\n return {};\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\n// filter tracks the current marketplace search query filter\nfunction filter(state = '', action: MMAction): string {\n switch (action.type) {\n case ActionTypes.FILTER_MARKETPLACE_LISTING:\n return action.filter;\n\n case ActionTypes.MODAL_CLOSE:\n if (action.modalId !== ModalIdentifiers.PLUGIN_MARKETPLACE) {\n return state;\n }\n\n return '';\n\n case UserTypes.LOGOUT_SUCCESS:\n return '';\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n plugins,\n apps,\n installing,\n errors,\n filter,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport {GeneralTypes, UserTypes} from 'mattermost-redux/action_types';\n\nimport {ActionTypes} from 'utils/constants';\n\nimport type {MMAction} from 'types/store';\nimport type {ViewsState} from 'types/store/views';\n\nexport function modalState(state: ViewsState['modals']['modalState'] = {}, action: MMAction) {\n switch (action.type) {\n case ActionTypes.MODAL_OPEN:\n return {\n ...state,\n [action.modalId]: {\n open: true,\n dialogProps: action.dialogProps,\n dialogType: action.dialogType,\n },\n };\n case ActionTypes.MODAL_CLOSE: {\n const newState = Object.assign({}, state);\n Reflect.deleteProperty(newState, action.modalId);\n return newState;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nexport function showLaunchingWorkspace(state = false, action: MMAction) {\n switch (action.type) {\n case GeneralTypes.SHOW_LAUNCHING_WORKSPACE:\n return action.open;\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n modalState,\n showLaunchingWorkspace,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport {UserTypes} from 'mattermost-redux/action_types';\n\nimport {ActionTypes} from 'utils/constants';\n\nimport type {MMAction} from 'types/store';\n\nfunction hasBeenDismissed(state: Record<string, boolean> = {}, action: MMAction) {\n switch (action.type) {\n case ActionTypes.DISMISS_NOTICE:\n return {...state, [action.data]: true};\n case ActionTypes.SHOW_NOTICE:\n return {...state, [action.data]: false};\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n hasBeenDismissed,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport {ActionTypes} from 'utils/constants';\n\nimport type {MMAction} from 'types/store';\n\nexport function isShowOnboardingTaskCompletion(state = false, action: MMAction) {\n switch (action.type) {\n case ActionTypes.SHOW_ONBOARDING_TASK_COMPLETION:\n return action.open;\n default:\n return state;\n }\n}\n\nexport function isShowOnboardingCompleteProfileTour(state = false, action: MMAction) {\n switch (action.type) {\n case ActionTypes.SHOW_ONBOARDING_COMPLETE_PROFILE_TOUR:\n return action.open;\n default:\n return state;\n }\n}\n\nexport function isShowOnboardingVisitConsoleTour(state = false, action: MMAction) {\n switch (action.type) {\n case ActionTypes.SHOW_ONBOARDING_VISIT_CONSOLE_TOUR:\n return action.open;\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n isShowOnboardingTaskCompletion,\n isShowOnboardingCompleteProfileTour,\n isShowOnboardingVisitConsoleTour,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport {UserTypes} from 'mattermost-redux/action_types';\n\nimport {ActionTypes} from 'utils/constants';\n\nimport type {MMAction} from 'types/store';\nimport type {ViewsState} from 'types/store/views';\n\nconst editingPostDefaultState: ViewsState['posts']['editingPost'] = {\n show: false,\n postId: '',\n refocusId: '',\n isRHS: false,\n};\n\nfunction editingPost(state: ViewsState['posts']['editingPost'] = editingPostDefaultState, action: MMAction) {\n switch (action.type) {\n case ActionTypes.TOGGLE_EDITING_POST: {\n if (action.data.show) {\n return {\n ...state,\n ...action.data,\n };\n }\n\n return editingPostDefaultState;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return editingPostDefaultState;\n default:\n return state;\n }\n}\n\nfunction menuActions(state: {[postId: string]: {[actionId: string]: {text: string; value: string}}} = {}, action: MMAction) {\n switch (action.type) {\n case ActionTypes.SELECT_ATTACHMENT_MENU_ACTION: {\n const nextState = {...state};\n if (nextState[action.data.postId]) {\n nextState[action.data.postId] = {\n ...nextState[action.data.postId],\n ...action.data.actions,\n };\n } else {\n nextState[action.data.postId] = action.data.actions;\n }\n return nextState;\n }\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n editingPost,\n menuActions,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport {ActionTypes} from 'utils/constants';\n\nimport type {MMAction} from 'types/store';\n\nexport function switcherOpen(state = false, action: MMAction) {\n switch (action.type) {\n case ActionTypes.SET_PRODUCT_SWITCHER_OPEN:\n return action.open;\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n switcherOpen,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport {\n PostTypes,\n TeamTypes,\n SearchTypes,\n UserTypes,\n} from 'mattermost-redux/action_types';\n\nimport {SidebarSize} from 'components/resizable_sidebar/constants';\n\nimport {ActionTypes, RHSStates, Threads} from 'utils/constants';\n\nimport type {MMAction} from 'types/store';\nimport type {RhsState} from 'types/store/rhs';\n\nfunction selectedPostId(state = '', action: MMAction) {\n switch (action.type) {\n case ActionTypes.SELECT_POST:\n return action.postId;\n case ActionTypes.SELECT_POST_CARD:\n return '';\n case PostTypes.POST_REMOVED:\n if (action.data && action.data.id === state) {\n return '';\n }\n return state;\n case ActionTypes.UPDATE_RHS_STATE:\n return action.postId ?? '';\n case ActionTypes.RHS_GO_BACK:\n return '';\n case UserTypes.LOGOUT_SUCCESS:\n return '';\n default:\n return state;\n }\n}\n\n// selectedPostFocussedAt keeps track of the last time a post was selected, whether or not it\n// is currently selected.\nfunction selectedPostFocussedAt(state = 0, action: MMAction) {\n switch (action.type) {\n case ActionTypes.SELECT_POST:\n return action.timestamp || 0;\n case ActionTypes.UPDATE_RHS_STATE:\n return action.timestamp ?? state;\n case UserTypes.LOGOUT_SUCCESS:\n return 0;\n default:\n return state;\n }\n}\n\nfunction highlightedPostId(state = '', action: MMAction) {\n switch (action.type) {\n case ActionTypes.HIGHLIGHT_REPLY:\n return action.postId;\n case ActionTypes.CLEAR_HIGHLIGHT_REPLY:\n case ActionTypes.UPDATE_RHS_STATE:\n return '';\n\n case UserTypes.LOGOUT_SUCCESS:\n return '';\n default:\n return state;\n }\n}\n\n// filesSearchExtFilter keeps track of the extension filters used for file search.\nfunction filesSearchExtFilter(state: string[] = [], action: MMAction) {\n switch (action.type) {\n case ActionTypes.SET_FILES_FILTER_BY_EXT:\n return action.data;\n\n case UserTypes.LOGOUT_SUCCESS:\n return [];\n default:\n return state;\n }\n}\n\nfunction selectedPostCardId(state = '', action: MMAction) {\n switch (action.type) {\n case ActionTypes.SELECT_POST_CARD:\n return action.postId;\n case ActionTypes.SELECT_POST:\n return '';\n case PostTypes.POST_REMOVED:\n if (action.data && action.data.id === state) {\n return '';\n }\n return state;\n case ActionTypes.UPDATE_RHS_STATE:\n return '';\n\n case UserTypes.LOGOUT_SUCCESS:\n return '';\n default:\n return state;\n }\n}\n\nfunction selectedChannelId(state = '', action: MMAction) {\n switch (action.type) {\n case ActionTypes.SELECT_POST:\n return action.channelId;\n case ActionTypes.SELECT_POST_CARD:\n return action.channelId;\n case ActionTypes.UPDATE_RHS_STATE:\n if ([\n RHSStates.PIN,\n RHSStates.CHANNEL_FILES,\n RHSStates.CHANNEL_INFO,\n RHSStates.CHANNEL_MEMBERS,\n RHSStates.EDIT_HISTORY,\n ].includes(action.state)) {\n return action.channelId;\n }\n return '';\n\n case UserTypes.LOGOUT_SUCCESS:\n return '';\n default:\n return state;\n }\n}\n\nfunction previousRhsStates(state: any = [], action: MMAction) {\n switch (action.type) {\n case ActionTypes.SELECT_POST:\n if (action.previousRhsState) {\n return [\n ...state,\n action.previousRhsState,\n ];\n }\n return [];\n case ActionTypes.SELECT_POST_CARD:\n if (action.previousRhsState) {\n return [\n ...state,\n action.previousRhsState,\n ];\n }\n return [];\n case ActionTypes.UPDATE_RHS_STATE:\n if (action.previousRhsState) {\n return [\n ...state,\n action.previousRhsState,\n ];\n }\n return [];\n case ActionTypes.RHS_GO_BACK:\n // eslint-disable-next-line no-case-declarations\n const newState = [...state];\n newState.pop();\n return newState;\n case UserTypes.LOGOUT_SUCCESS:\n return [];\n default:\n return state;\n }\n}\n\nfunction rhsState(state: RhsState = null, action: MMAction) {\n switch (action.type) {\n case ActionTypes.UPDATE_RHS_STATE:\n return action.state;\n case ActionTypes.RHS_GO_BACK:\n return action.state;\n case ActionTypes.SELECT_POST:\n return null;\n case ActionTypes.SELECT_POST_CARD:\n return null;\n\n case UserTypes.LOGOUT_SUCCESS:\n return null;\n default:\n return state;\n }\n}\n\nfunction size(state: SidebarSize = SidebarSize.MEDIUM, action: MMAction) {\n switch (action.type) {\n case ActionTypes.SET_RHS_SIZE:\n return action.size;\n default:\n return state;\n }\n}\n\nfunction searchTerms(state = '', action: MMAction) {\n switch (action.type) {\n case ActionTypes.UPDATE_RHS_SEARCH_TERMS:\n return action.terms;\n case ActionTypes.UPDATE_RHS_STATE:\n if (action.state !== RHSStates.SEARCH) {\n return '';\n }\n return state;\n case UserTypes.LOGOUT_SUCCESS:\n return '';\n default:\n return state;\n }\n}\n\nfunction searchTeam(state = null, action: MMAction) {\n switch (action.type) {\n case ActionTypes.UPDATE_RHS_SEARCH_TEAM:\n return action.teamId;\n case ActionTypes.UPDATE_RHS_STATE:\n if (action.state !== RHSStates.SEARCH) {\n return null;\n }\n return state;\n case UserTypes.LOGOUT_SUCCESS:\n return null;\n default:\n return state;\n }\n}\n\nfunction searchType(state = '', action: MMAction) {\n switch (action.type) {\n case ActionTypes.UPDATE_RHS_SEARCH_TYPE:\n return action.searchType;\n case ActionTypes.UPDATE_RHS_STATE:\n if (action.state !== RHSStates.SEARCH) {\n return '';\n }\n return state;\n case UserTypes.LOGOUT_SUCCESS:\n return '';\n default:\n return state;\n }\n}\n\nfunction pluggableId(state = '', action: MMAction) {\n switch (action.type) {\n case ActionTypes.UPDATE_RHS_STATE:\n if (action.state === RHSStates.PLUGIN) {\n return action.pluggableId;\n }\n return '';\n case ActionTypes.SELECT_POST:\n case ActionTypes.SELECT_POST_CARD:\n return '';\n\n case UserTypes.LOGOUT_SUCCESS:\n return '';\n default:\n return state;\n }\n}\n\nfunction searchResultsTerms(state = '', action: MMAction) {\n switch (action.type) {\n case ActionTypes.UPDATE_RHS_SEARCH_RESULTS_TERMS:\n return action.terms;\n\n case UserTypes.LOGOUT_SUCCESS:\n return '';\n default:\n return state;\n }\n}\n\nfunction searchResultsType(state = '', action: MMAction) {\n switch (action.type) {\n case ActionTypes.UPDATE_RHS_SEARCH_RESULTS_TYPE:\n return action.searchType;\n\n case UserTypes.LOGOUT_SUCCESS:\n return '';\n default:\n return state;\n }\n}\n\nfunction isSearchingFlaggedPost(state = false, action: MMAction) {\n switch (action.type) {\n case SearchTypes.SEARCH_FLAGGED_POSTS_REQUEST:\n return true;\n case SearchTypes.SEARCH_FLAGGED_POSTS_FAILURE:\n case SearchTypes.SEARCH_FLAGGED_POSTS_SUCCESS:\n return false;\n\n case UserTypes.LOGOUT_SUCCESS:\n return false;\n default:\n return state;\n }\n}\n\nfunction isSearchingPinnedPost(state = false, action: MMAction) {\n switch (action.type) {\n case SearchTypes.SEARCH_PINNED_POSTS_REQUEST:\n return true;\n case SearchTypes.SEARCH_PINNED_POSTS_FAILURE:\n case SearchTypes.SEARCH_PINNED_POSTS_SUCCESS:\n return false;\n\n case UserTypes.LOGOUT_SUCCESS:\n return false;\n default:\n return state;\n }\n}\n\nfunction isSidebarOpen(state = false, action: MMAction) {\n switch (action.type) {\n case ActionTypes.UPDATE_RHS_STATE:\n return Boolean(action.state);\n case ActionTypes.SELECT_POST:\n return Boolean(action.postId);\n case ActionTypes.SELECT_POST_CARD:\n return Boolean(action.postId);\n case ActionTypes.TOGGLE_RHS_MENU:\n return false;\n case ActionTypes.OPEN_RHS_MENU:\n return false;\n case ActionTypes.TOGGLE_LHS:\n return false;\n case ActionTypes.OPEN_LHS:\n return false;\n\n case UserTypes.LOGOUT_SUCCESS:\n return false;\n default:\n return state;\n }\n}\n\nfunction isSidebarExpanded(state = false, action: MMAction) {\n switch (action.type) {\n case ActionTypes.SET_RHS_EXPANDED:\n return action.expanded;\n case ActionTypes.TOGGLE_RHS_EXPANDED:\n return !state;\n case ActionTypes.UPDATE_RHS_STATE:\n return action.state ? state : false;\n case ActionTypes.SELECT_POST:\n return action.postId ? state : false;\n case ActionTypes.SELECT_POST_CARD:\n return action.postId ? state : false;\n case ActionTypes.TOGGLE_RHS_MENU:\n return false;\n case ActionTypes.SUPPRESS_RHS:\n return false;\n case ActionTypes.OPEN_RHS_MENU:\n return false;\n case ActionTypes.TOGGLE_LHS:\n return false;\n case ActionTypes.OPEN_LHS:\n return false;\n case TeamTypes.SELECT_TEAM:\n return false;\n\n case UserTypes.LOGOUT_SUCCESS:\n return false;\n default:\n return state;\n }\n}\n\nfunction isMenuOpen(state = false, action: MMAction) {\n switch (action.type) {\n case ActionTypes.TOGGLE_RHS_MENU:\n return !state;\n case ActionTypes.OPEN_RHS_MENU:\n return true;\n case ActionTypes.CLOSE_RHS_MENU:\n return false;\n case ActionTypes.TOGGLE_LHS:\n return false;\n case ActionTypes.OPEN_LHS:\n return false;\n case TeamTypes.SELECT_TEAM:\n return false;\n\n case UserTypes.LOGOUT_SUCCESS:\n return false;\n default:\n return state;\n }\n}\n\nfunction editChannelMembers(state = false, action: MMAction) {\n switch (action.type) {\n case ActionTypes.SET_EDIT_CHANNEL_MEMBERS:\n return action.active;\n case ActionTypes.UPDATE_RHS_STATE:\n if (!action.state) {\n return false;\n }\n return state;\n\n case UserTypes.LOGOUT_SUCCESS:\n return false;\n default:\n return state;\n }\n}\n\nfunction shouldFocusRHS(state = false, action: MMAction) {\n switch (action.type) {\n case ActionTypes.SELECT_POST:\n return Boolean(action.postId);\n case Threads.CHANGED_SELECTED_THREAD:\n return Boolean(action.data.thread_id);\n case ActionTypes.HIGHLIGHT_REPLY:\n return false;\n case ActionTypes.RHS_FOCUSED:\n return false;\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n selectedPostId,\n selectedPostFocussedAt,\n selectedPostCardId,\n selectedChannelId,\n highlightedPostId,\n previousRhsStates,\n filesSearchExtFilter,\n rhsState,\n searchTerms,\n searchTeam,\n searchType,\n searchResultsTerms,\n searchResultsType,\n size,\n pluggableId,\n isSearchingFlaggedPost,\n isSearchingPinnedPost,\n isSidebarOpen,\n isSidebarExpanded,\n isMenuOpen,\n editChannelMembers,\n shouldFocusRHS,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport {UserTypes} from 'mattermost-redux/action_types';\n\nimport {SearchTypes} from 'utils/constants';\n\nimport type {MMAction} from 'types/store';\nimport type {ViewsState} from 'types/store/views';\n\nfunction modalSearch(state = '', action: MMAction) {\n switch (action.type) {\n case SearchTypes.SET_MODAL_SEARCH: {\n return action.data.trim();\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return '';\n default:\n return state;\n }\n}\n\nfunction popoverSearch(state = '', action: MMAction) {\n switch (action.type) {\n case SearchTypes.SET_POPOVER_SEARCH: {\n return action.data.trim();\n }\n\n default:\n return state;\n }\n}\n\nfunction channelMembersRhsSearch(state = '', action: MMAction) {\n switch (action.type) {\n case SearchTypes.SET_CHANNEL_MEMBERS_RHS_SEARCH: {\n return action.data;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return '';\n default:\n return state;\n }\n}\n\nfunction modalFilters(state: ViewsState['search']['modalFilters'] = {}, action: MMAction) {\n switch (action.type) {\n case SearchTypes.SET_MODAL_FILTERS: {\n const filters = action.data;\n return {\n ...filters,\n };\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction userGridSearch(state: Partial<ViewsState['search']['userGridSearch']> = {}, action: MMAction) {\n switch (action.type) {\n case SearchTypes.SET_USER_GRID_SEARCH: {\n const term = action.data.trim();\n return {\n ...state,\n term,\n };\n }\n case SearchTypes.SET_USER_GRID_FILTERS: {\n const filters = action.data;\n return {\n ...state,\n filters,\n };\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nfunction teamListSearch(state = '', action: MMAction) {\n switch (action.type) {\n case SearchTypes.SET_TEAM_LIST_SEARCH: {\n return action.data.trim();\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return '';\n default:\n return state;\n }\n}\n\nfunction channelListSearch(state: Partial<ViewsState['search']['channelListSearch']> = {}, action: MMAction) {\n switch (action.type) {\n case SearchTypes.SET_CHANNEL_LIST_SEARCH: {\n const term = action.data.trim();\n return {\n ...state,\n term,\n };\n }\n case SearchTypes.SET_CHANNEL_LIST_FILTERS: {\n const filters = action.data;\n return {\n ...state,\n filters,\n };\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n modalSearch,\n popoverSearch,\n channelMembersRhsSearch,\n modalFilters,\n userGridSearch,\n teamListSearch,\n channelListSearch,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport {UserTypes} from 'mattermost-redux/action_types';\n\nimport {ActionTypes} from 'utils/constants';\n\nimport type {MMAction} from 'types/store';\n\nexport function isOpen(state = false, action: MMAction) {\n switch (action.type) {\n case ActionTypes.STATUS_DROPDOWN_TOGGLE:\n return action.open;\n\n case UserTypes.LOGOUT_SUCCESS:\n return false;\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n isOpen,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport {UserTypes} from 'mattermost-redux/action_types';\n\nimport {ActionTypes} from 'utils/constants';\n\nimport type {MMAction} from 'types/store';\n\nfunction websocketConnectionErrorCount(state = 0, action: MMAction) {\n switch (action.type) {\n case ActionTypes.INCREMENT_WS_ERROR_COUNT: {\n return state + 1;\n }\n case ActionTypes.RESET_WS_ERROR_COUNT: {\n return 0;\n }\n\n case UserTypes.LOGOUT_SUCCESS:\n return 0;\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n websocketConnectionErrorCount,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport {UserTypes} from 'mattermost-redux/action_types';\n\nimport {ActionTypes} from 'utils/constants';\n\nimport type {MMAction} from 'types/store';\n\nfunction shouldShowPreviewOnCreateComment(state = false, action: MMAction) {\n switch (action.type) {\n case ActionTypes.SET_SHOW_PREVIEW_ON_CREATE_COMMENT:\n return action.showPreview;\n\n case UserTypes.LOGOUT_SUCCESS:\n return false;\n default:\n return state;\n }\n}\n\nfunction shouldShowPreviewOnCreatePost(state = false, action: MMAction) {\n switch (action.type) {\n case ActionTypes.SET_SHOW_PREVIEW_ON_CREATE_POST:\n return action.showPreview;\n\n case UserTypes.LOGOUT_SUCCESS:\n return false;\n default:\n return state;\n }\n}\n\nfunction shouldShowPreviewOnEditChannelHeaderModal(state = false, action: MMAction) {\n switch (action.type) {\n case ActionTypes.SET_SHOW_PREVIEW_ON_EDIT_CHANNEL_HEADER_MODAL:\n return action.showPreview;\n\n case UserTypes.LOGOUT_SUCCESS:\n return false;\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n shouldShowPreviewOnCreateComment,\n shouldShowPreviewOnCreatePost,\n shouldShowPreviewOnEditChannelHeaderModal,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport findKey from 'lodash/findKey';\nimport {combineReducers} from 'redux';\n\nimport {PostTypes, UserTypes} from 'mattermost-redux/action_types';\n\nimport {Threads, ActionTypes} from 'utils/constants';\n\nimport type {MMAction} from 'types/store';\nimport type {ViewsState} from 'types/store/views';\n\nexport const selectedThreadIdInTeam = (state: ViewsState['threads']['selectedThreadIdInTeam'] = {}, action: MMAction) => {\n switch (action.type) {\n case PostTypes.POST_REMOVED: {\n const key = findKey(state, (id) => id === action.data.id);\n if (key) {\n return {\n ...state,\n [key]: '',\n };\n }\n return state;\n }\n case Threads.CHANGED_SELECTED_THREAD:\n return {\n ...state,\n [action.data.team_id]: action.data.thread_id,\n };\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n};\n\nexport const lastViewedAt = (state: ViewsState['threads']['lastViewedAt'] = {}, action: MMAction) => {\n switch (action.type) {\n case Threads.CHANGED_LAST_VIEWED_AT:\n return {\n ...state,\n [action.data.threadId]: action.data.lastViewedAt,\n };\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n};\n\nexport function manuallyUnread(state: ViewsState['threads']['manuallyUnread'] = {}, action: MMAction) {\n switch (action.type) {\n case Threads.CHANGED_LAST_VIEWED_AT:\n return {\n ...state,\n [action.data.threadId]: false,\n };\n case Threads.MANUALLY_UNREAD_THREAD:\n return {\n ...state,\n [action.data.threadId]: true,\n };\n\n case UserTypes.LOGOUT_SUCCESS:\n return {};\n default:\n return state;\n }\n}\n\nexport function toastStatus(state: ViewsState['threads']['toastStatus'] = false, action: MMAction) {\n switch (action.type) {\n case ActionTypes.SELECT_POST:\n return false;\n case ActionTypes.UPDATE_THREAD_TOAST_STATUS:\n return action.data;\n\n case UserTypes.LOGOUT_SUCCESS:\n return false;\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n selectedThreadIdInTeam,\n lastViewedAt,\n manuallyUnread,\n toastStatus,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport plugins from './plugins';\nimport storage from './storage';\nimport views from './views';\n\nexport default {\n views,\n plugins,\n storage,\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport addChannelCtaDropdown from './add_channel_cta_dropdown';\nimport addChannelDropdown from './add_channel_dropdown';\nimport admin from './admin';\nimport announcementBar from './announcement_bar';\nimport browser from './browser';\nimport channel from './channel';\nimport channelSelectorModal from './channel_selector_modal';\nimport channelSidebar from './channel_sidebar';\nimport drafts from './drafts';\nimport emoji from './emoji';\nimport i18n from './i18n';\nimport lhs from './lhs';\nimport marketplace from './marketplace';\nimport modals from './modals';\nimport notice from './notice';\nimport onboardingTasks from './onboarding_tasks';\nimport posts from './posts';\nimport productMenu from './product_menu';\nimport rhs from './rhs';\nimport rhsSuppressed from './rhs_suppressed';\nimport search from './search';\nimport settings from './settings';\nimport statusDropdown from './status_dropdown';\nimport system from './system';\nimport textbox from './textbox';\nimport threads from './threads';\n\nexport default combineReducers({\n admin,\n announcementBar,\n browser,\n channel,\n rhs,\n rhsSuppressed,\n posts,\n modals,\n emoji,\n i18n,\n lhs,\n search,\n notice,\n system,\n channelSelectorModal,\n settings,\n marketplace,\n textbox,\n channelSidebar,\n statusDropdown,\n addChannelDropdown,\n addChannelCtaDropdown,\n onboardingTasks,\n threads,\n productMenu,\n drafts,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {UserTypes} from 'mattermost-redux/action_types';\n\nimport {ActionTypes} from 'utils/constants';\n\nimport type {MMAction} from 'types/store';\nimport type {ViewsState} from 'types/store/views';\n\nexport default function rhsSuppressed(state: ViewsState['rhsSuppressed'] = false, action: MMAction): boolean {\n switch (action.type) {\n case ActionTypes.SUPPRESS_RHS:\n return true;\n case ActionTypes.UNSUPPRESS_RHS:\n return false;\n\n // if RHS is to be opened stop supressing RHS\n case ActionTypes.UPDATE_RHS_STATE:\n if (action.state === null) {\n return state;\n }\n return false;\n case ActionTypes.SELECT_POST:\n case ActionTypes.SELECT_POST_CARD:\n if (action.postId === '') {\n return state;\n }\n return false;\n\n case UserTypes.LOGOUT_SUCCESS:\n return false;\n default:\n return state;\n }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {UserTypes} from 'mattermost-redux/action_types';\n\nimport {ActionTypes} from 'utils/constants';\n\nimport type {MMAction} from 'types/store';\nimport type {ViewsState} from 'types/store/views';\n\nexport default function settings(state: ViewsState['settings'] = {activeSection: '', previousActiveSection: ''}, action: MMAction) {\n switch (action.type) {\n case ActionTypes.UPDATE_ACTIVE_SECTION:\n return {\n activeSection: action.data,\n previousActiveSection: state.activeSection,\n };\n\n case UserTypes.LOGOUT_SUCCESS:\n return {\n activeSection: '',\n previousActiveSection: '',\n };\n default:\n return state;\n }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {combineReducers} from 'redux';\n\nimport {CursorPaginationDirection} from '@mattermost/types/reports';\n\nimport {UserTypes} from 'mattermost-redux/action_types';\n\nimport {ActionTypes} from 'utils/constants';\n\nimport type {MMAction} from 'types/store';\nimport type {AdminConsoleUserManagementTableProperties} from 'types/store/views';\n\nconst navigationBlockInitialState = {\n blocked: false,\n onNavigationConfirmed: null,\n showNavigationPrompt: false,\n};\n\nfunction navigationBlock(state = navigationBlockInitialState, action: MMAction) {\n switch (action.type) {\n case ActionTypes.SET_NAVIGATION_BLOCKED:\n return {...state, blocked: action.blocked};\n case ActionTypes.DEFER_NAVIGATION:\n return {\n ...state,\n onNavigationConfirmed: action.onNavigationConfirmed,\n showNavigationPrompt: true,\n };\n case ActionTypes.CANCEL_NAVIGATION:\n return {\n ...state,\n onNavigationConfirmed: null,\n showNavigationPrompt: false,\n };\n case ActionTypes.CONFIRM_NAVIGATION:\n return {\n ...state,\n blocked: false,\n onNavigationConfirmed: null,\n showNavigationPrompt: false,\n };\n\n case UserTypes.LOGOUT_SUCCESS:\n return navigationBlockInitialState;\n default:\n return state;\n }\n}\n\nexport function needsLoggedInLimitReachedCheck(state = false, action: MMAction) {\n switch (action.type) {\n case ActionTypes.NEEDS_LOGGED_IN_LIMIT_REACHED_CHECK:\n return action.data;\n default:\n return state;\n }\n}\n\nexport const adminConsoleUserManagementTablePropertiesInitialState: AdminConsoleUserManagementTableProperties = {\n sortColumn: '',\n sortIsDescending: false,\n pageSize: 0,\n pageIndex: 0,\n cursorDirection: CursorPaginationDirection.next,\n cursorUserId: '',\n cursorColumnValue: '',\n columnVisibility: {},\n searchTerm: '',\n filterTeam: '',\n filterTeamLabel: '',\n filterStatus: '',\n filterRole: '',\n};\n\nexport function adminConsoleUserManagementTableProperties(state = adminConsoleUserManagementTablePropertiesInitialState, action: MMAction) {\n switch (action.type) {\n case ActionTypes.SET_ADMIN_CONSOLE_USER_MANAGEMENT_TABLE_PROPERTIES: {\n return {...state, ...action.data};\n }\n case ActionTypes.CLEAR_ADMIN_CONSOLE_USER_MANAGEMENT_TABLE_PROPERTIES:\n return adminConsoleUserManagementTablePropertiesInitialState;\n default:\n return state;\n }\n}\n\nexport default combineReducers({\n navigationBlock,\n needsLoggedInLimitReachedCheck,\n adminConsoleUserManagementTableProperties,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {getConfig} from 'mattermost-redux/selectors/entities/general';\n\nimport type {GlobalState} from 'types/store';\n\ndeclare global {\n interface Window {\n basename: string;\n }\n}\n\nexport function getBasePath(state: GlobalState) {\n const config = getConfig(state) || {};\n\n if (config.SiteURL) {\n return new URL(config.SiteURL).pathname;\n }\n\n return window.basename || '/';\n}\n\nexport function getConnectionId(state: GlobalState) {\n return state.websocket.connectionId;\n}\n\nexport function isDevModeEnabled(state: GlobalState) {\n const config = getConfig(state);\n const EnableDeveloper = config && config.EnableDeveloper ? config.EnableDeveloper === 'true' : false;\n return EnableDeveloper;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nconst config = require('./configureStore').default;\nexport default config;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport baseLocalForage from 'localforage';\nimport {extendPrototype} from 'localforage-observable';\nimport {persistStore, REHYDRATE} from 'redux-persist';\nimport Observable from 'zen-observable';\n\nimport {General, RequestStatus} from 'mattermost-redux/constants';\nimport configureServiceStore from 'mattermost-redux/store';\n\nimport {cleanLocalStorage} from 'actions/storage';\nimport {clearUserCookie} from 'actions/views/cookie';\nimport appReducers from 'reducers';\nimport {getBasePath} from 'selectors/general';\n\nfunction getAppReducers() {\n return require('../reducers'); // eslint-disable-line global-require\n}\n\nwindow.Observable = Observable;\n\nconst localForage = extendPrototype(baseLocalForage);\n\nexport default function configureStore(preloadedState, additionalReducers) {\n const reducers = additionalReducers ? {...appReducers, ...additionalReducers} : appReducers;\n const store = configureServiceStore({\n appReducers: reducers,\n getAppReducers,\n preloadedState,\n });\n\n localForage.ready().then(() => {\n const persistor = persistStore(store, null, () => {\n store.dispatch({\n type: General.STORE_REHYDRATION_COMPLETE,\n complete: true,\n });\n\n migratePersistedState(store, persistor);\n });\n\n localForage.configObservables({\n crossTabNotification: true,\n });\n\n const observable = localForage.newObservable({\n crossTabNotification: true,\n changeDetection: true,\n });\n\n // Rehydrate redux-persist when another tab changes localForage\n observable.subscribe({\n next: (args) => {\n if (!args.crossTabNotification) {\n // Ignore changes made by this tab\n return;\n }\n\n const keyPrefix = 'persist:';\n\n if (!args.key.startsWith(keyPrefix)) {\n // Ignore changes that weren't made by redux-persist\n return;\n }\n\n const key = args.key.substring(keyPrefix.length);\n const newValue = JSON.parse(args.newValue);\n\n const payload = {};\n\n for (const reducerKey of Object.keys(newValue)) {\n if (reducerKey === '_persist') {\n // Don't overwrite information used by redux-persist itself\n continue;\n }\n\n payload[reducerKey] = JSON.parse(newValue[reducerKey]);\n }\n\n store.dispatch({\n type: REHYDRATE,\n key,\n payload,\n });\n },\n });\n\n let purging = false;\n\n // Clean up after a logout\n store.subscribe(() => {\n const state = store.getState();\n const basePath = getBasePath(state);\n\n if (state.requests.users.logout.status === RequestStatus.SUCCESS && !purging) {\n purging = true;\n\n persistor.purge().then(() => {\n cleanLocalStorage();\n clearUserCookie();\n\n // Preserve any query string parameters on logout, including parameters\n // used by the application such as extra and redirect_to.\n window.location.href = `${basePath}${window.location.search}`;\n\n setTimeout(() => {\n purging = false;\n }, 500);\n });\n }\n });\n }).catch((e) => {\n // eslint-disable-next-line no-console\n console.error('Failed to initialize localForage', e);\n });\n\n return store;\n}\n\n/**\n * Migrates state.storage from redux-persist@4 to redux-persist@6\n */\nfunction migratePersistedState(store, persistor) {\n const oldKeyPrefix = 'reduxPersist:storage:';\n\n const restoredState = {};\n localForage.iterate((value, key) => {\n if (key && key.startsWith(oldKeyPrefix)) {\n restoredState[key.substring(oldKeyPrefix.length)] = value;\n }\n }).then(async () => {\n if (Object.keys(restoredState).length === 0) {\n // Nothing to migrate\n return;\n }\n\n // eslint-disable-next-line no-console\n console.log('Migrating storage for redux-persist@6 upgrade');\n\n persistor.pause();\n\n const persistedState = {};\n\n for (const [key, value] of Object.entries(restoredState)) {\n // eslint-disable-next-line no-console\n console.log('Migrating `' + key + '`', JSON.parse(value));\n persistedState[key] = JSON.parse(value);\n }\n\n store.dispatch({\n type: REHYDRATE,\n key: 'storage',\n payload: persistedState,\n });\n\n // Persist the migrated values and resume\n persistor.persist();\n\n // Remove the leftover values from localForage\n for (const key of Object.keys(restoredState)) {\n localForage.removeItem(oldKeyPrefix + key);\n }\n\n // eslint-disable-next-line no-console\n console.log('Done migration for redux-persist@6 upgrade');\n });\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\n/* eslint-disable max-lines */\n\nimport solarizedDarkCSS from 'highlight.js/styles/base16/solarized-dark.css';\nimport solarizedLightCSS from 'highlight.js/styles/base16/solarized-light.css';\nimport githubCSS from 'highlight.js/styles/github.css';\nimport monokaiCSS from 'highlight.js/styles/monokai.css';\nimport keyMirror from 'key-mirror';\nimport {defineMessage, defineMessages} from 'react-intl';\n\nimport {CustomStatusDuration} from '@mattermost/types/users';\n\nimport {Preferences as ReduxPreferences} from 'mattermost-redux/constants';\nimport Permissions from 'mattermost-redux/constants/permissions';\nimport * as PostListUtils from 'mattermost-redux/utils/post_list';\n\nimport audioIcon from 'images/icons/audio.svg';\nimport codeIcon from 'images/icons/code.svg';\nimport excelIcon from 'images/icons/excel.svg';\nimport genericIcon from 'images/icons/generic.svg';\nimport patchIcon from 'images/icons/patch.svg';\nimport pdfIcon from 'images/icons/pdf.svg';\nimport pptIcon from 'images/icons/ppt.svg';\nimport videoIcon from 'images/icons/video.svg';\nimport wordIcon from 'images/icons/word.svg';\nimport githubIcon from 'images/themes/code_themes/github.png';\nimport monokaiIcon from 'images/themes/code_themes/monokai.png';\nimport solarizedDarkIcon from 'images/themes/code_themes/solarized-dark.png';\nimport solarizedLightIcon from 'images/themes/code_themes/solarized-light.png';\nimport logoWebhook from 'images/webhook_icon.jpg';\n\nexport const SettingsTypes = {\n TYPE_TEXT: 'text' as const,\n TYPE_LONG_TEXT: 'longtext' as const,\n TYPE_NUMBER: 'number' as const,\n TYPE_COLOR: 'color' as const,\n TYPE_BOOL: 'bool' as const,\n TYPE_PERMISSION: 'permission' as const,\n TYPE_RADIO: 'radio' as const,\n TYPE_BANNER: 'banner' as const,\n TYPE_DROPDOWN: 'dropdown' as const,\n TYPE_GENERATED: 'generated' as const,\n TYPE_USERNAME: 'username' as const,\n TYPE_BUTTON: 'button' as const,\n TYPE_LANGUAGE: 'language' as const,\n TYPE_JOBSTABLE: 'jobstable' as const,\n TYPE_FILE_UPLOAD: 'fileupload' as const,\n TYPE_CUSTOM: 'custom' as const,\n TYPE_ROLES: 'roles' as const,\n};\n\nexport const InviteTypes = {\n INVITE_MEMBER: 'member',\n INVITE_GUEST: 'guest',\n};\n\nexport const PreviousViewedTypes = {\n CHANNELS: 'channels',\n THREADS: 'threads',\n};\n\nexport const Preferences = {\n CATEGORY_CHANNEL_OPEN_TIME: 'channel_open_time',\n CATEGORY_DIRECT_CHANNEL_SHOW: ReduxPreferences.CATEGORY_DIRECT_CHANNEL_SHOW,\n CATEGORY_GROUP_CHANNEL_SHOW: ReduxPreferences.CATEGORY_GROUP_CHANNEL_SHOW,\n CATEGORY_DISPLAY_SETTINGS: 'display_settings',\n CATEGORY_SIDEBAR_SETTINGS: 'sidebar_settings',\n CATEGORY_ADVANCED_SETTINGS: 'advanced_settings',\n TUTORIAL_STEP: 'tutorial_step',\n TUTORIAL_STEP_AUTO_TOUR_STATUS: 'tutorial_step_auto_tour_status',\n CRT_TUTORIAL_TRIGGERED: 'crt_tutorial_triggered',\n CRT_TUTORIAL_AUTO_TOUR_STATUS: 'crt_tutorial_auto_tour_status',\n CRT_TUTORIAL_STEP: 'crt_tutorial_step',\n EXPLORE_OTHER_TOOLS_TUTORIAL_STEP: 'explore_other_tools_step',\n CRT_THREAD_PANE_STEP: 'crt_thread_pane_step',\n CHANNEL_DISPLAY_MODE: 'channel_display_mode',\n CHANNEL_DISPLAY_MODE_CENTERED: 'centered',\n CHANNEL_DISPLAY_MODE_FULL_SCREEN: 'full',\n CHANNEL_DISPLAY_MODE_DEFAULT: 'full',\n MESSAGE_DISPLAY: 'message_display',\n MESSAGE_DISPLAY_CLEAN: 'clean',\n MESSAGE_DISPLAY_COMPACT: 'compact',\n MESSAGE_DISPLAY_DEFAULT: 'clean',\n COLORIZE_USERNAMES: 'colorize_usernames',\n COLORIZE_USERNAMES_DEFAULT: 'true',\n COLLAPSED_REPLY_THREADS: 'collapsed_reply_threads',\n COLLAPSED_REPLY_THREADS_OFF: 'off',\n COLLAPSED_REPLY_THREADS_ON: 'on',\n CLICK_TO_REPLY: 'click_to_reply',\n CLICK_TO_REPLY_DEFAULT: 'true',\n COLLAPSED_REPLY_THREADS_FALLBACK_DEFAULT: 'off',\n LINK_PREVIEW_DISPLAY: 'link_previews',\n LINK_PREVIEW_DISPLAY_DEFAULT: 'true',\n COLLAPSE_DISPLAY: 'collapse_previews',\n COLLAPSE_DISPLAY_DEFAULT: 'false',\n AVAILABILITY_STATUS_ON_POSTS: 'availability_status_on_posts',\n AVAILABILITY_STATUS_ON_POSTS_DEFAULT: 'true',\n USE_MILITARY_TIME: 'use_military_time',\n USE_MILITARY_TIME_DEFAULT: 'false',\n UNREAD_SCROLL_POSITION: 'unread_scroll_position',\n UNREAD_SCROLL_POSITION_START_FROM_LEFT: 'start_from_left_off',\n UNREAD_SCROLL_POSITION_START_FROM_NEWEST: 'start_from_newest',\n CATEGORY_THEME: 'theme',\n CATEGORY_NOTIFICATIONS: 'notifications',\n EMAIL_INTERVAL: 'email_interval',\n INTERVAL_IMMEDIATE: 30, // \"immediate\" is a 30 second interval\n INTERVAL_FIFTEEN_MINUTES: 15 * 60,\n INTERVAL_HOUR: 60 * 60,\n INTERVAL_NEVER: 0,\n NAME_NAME_FORMAT: 'name_format',\n CATEGORY_SYSTEM_NOTICE: 'system_notice',\n RECOMMENDED_NEXT_STEPS: 'recommended_next_steps',\n TEAMS_ORDER: 'teams_order',\n CLOUD_UPGRADE_BANNER: 'cloud_upgrade_banner',\n CLOUD_TRIAL_BANNER: 'cloud_trial_banner',\n START_TRIAL_MODAL: 'start_trial_modal',\n ADMIN_CLOUD_UPGRADE_PANEL: 'admin_cloud_upgrade_panel',\n CATEGORY_EMOJI: 'emoji',\n EMOJI_SKINTONE: 'emoji_skintone',\n ONE_CLICK_REACTIONS_ENABLED: 'one_click_reactions_enabled',\n ONE_CLICK_REACTIONS_ENABLED_DEFAULT: 'true',\n CLOUD_TRIAL_END_BANNER: 'cloud_trial_end_banner',\n CLOUD_USER_EPHEMERAL_INFO: 'cloud_user_ephemeral_info',\n CATEGORY_CLOUD_LIMITS: 'cloud_limits',\n THREE_DAYS_LEFT_TRIAL_MODAL: 'three_days_left_trial_modal',\n\n // For one off things that have a special, attention-grabbing UI until you interact with them\n TOUCHED: 'touched',\n\n // Category for actions/interactions that will happen just once\n UNIQUE: 'unique',\n\n // A/B test preference value\n AB_TEST_PREFERENCE_VALUE: 'ab_test_preference_value',\n\n RECENT_EMOJIS: 'recent_emojis',\n ONBOARDING: 'onboarding',\n ADVANCED_TEXT_EDITOR: 'advanced_text_editor',\n\n FORWARD_POST_VIEWED: 'forward_post_viewed',\n HIDE_POST_FILE_UPGRADE_WARNING: 'hide_post_file_upgrade_warning',\n SHOWN_LIMITS_REACHED_ON_LOGIN: 'shown_limits_reached_on_login',\n USE_CASE: 'use_case',\n DELINQUENCY_MODAL_CONFIRMED: 'delinquency_modal_confirmed',\n CONFIGURATION_BANNERS: 'configuration_banners',\n NOTIFY_ADMIN_REVOKE_DOWNGRADED_WORKSPACE: 'admin_revoke_downgraded_instance',\n OVERAGE_USERS_BANNER: ReduxPreferences.CATEGORY_OVERAGE_USERS_BANNER,\n TO_CLOUD_YEARLY_PLAN_NUDGE: 'to_cloud_yearly_plan_nudge',\n TO_PAID_PLAN_NUDGE: 'to_paid_plan_nudge',\n CLOUD_ANNUAL_RENEWAL_BANNER: 'cloud_annual_renewal_banner',\n};\n\n// For one off things that have a special, attention-grabbing UI until you interact with them\nexport const Touched = {\n ADD_CHANNELS_CTA: 'add_channels_cta',\n};\n\n// Category for actions/interactions that will happen just once\nexport const Unique = {\n HAS_CLOUD_PURCHASE: 'has_cloud_purchase',\n REQUEST_TRIAL_AFTER_SERVER_UPGRADE: 'request_trial_after_upgrade',\n CLICKED_UPGRADE_AND_TRIAL_BTN: 'clicked_upgradeandtrial_btn',\n};\n\nexport const TrialPeriodDays = {\n TRIAL_30_DAYS: 30,\n TRIAL_14_DAYS: 14,\n TRIAL_WARNING_THRESHOLD: 7,\n TRIAL_2_DAYS: 2,\n TRIAL_1_DAY: 1,\n TRIAL_0_DAYS: 0,\n};\n\nexport const suitePluginIds = {\n playbooks: 'playbooks',\n focalboard: 'focalboard',\n\n apps: 'com.mattermost.apps',\n calls: 'com.mattermost.calls',\n nps: 'com.mattermost.nps',\n channelExport: 'com.mattermost.plugin-channel-export',\n};\n\nexport const ActionTypes = keyMirror({\n SET_PRODUCT_SWITCHER_OPEN: null,\n RECEIVED_FOCUSED_POST: null,\n SELECT_POST: null,\n HIGHLIGHT_REPLY: null,\n CLEAR_HIGHLIGHT_REPLY: null,\n SELECT_POST_CARD: null,\n INCREASE_POST_VISIBILITY: null,\n LOADING_POSTS: null,\n\n UPDATE_RHS_STATE: null,\n UPDATE_RHS_SEARCH_TERMS: null,\n UPDATE_RHS_SEARCH_TEAM: null,\n UPDATE_RHS_SEARCH_TYPE: null,\n UPDATE_RHS_SEARCH_RESULTS_TERMS: null,\n UPDATE_RHS_SEARCH_RESULTS_TYPE: null,\n\n SET_RHS_SIZE: null,\n\n RHS_GO_BACK: null,\n RHS_FOCUSED: null,\n\n SET_RHS_EXPANDED: null,\n TOGGLE_RHS_EXPANDED: null,\n\n UPDATE_MOBILE_VIEW: null,\n\n SET_NAVIGATION_BLOCKED: null,\n DEFER_NAVIGATION: null,\n CANCEL_NAVIGATION: null,\n CONFIRM_NAVIGATION: null,\n\n TOGGLE_IMPORT_THEME_MODAL: null,\n TOGGLE_DELETE_POST_MODAL: null,\n TOGGLE_EDITING_POST: null,\n\n EMITTED_SHORTCUT_REACT_TO_LAST_POST: null,\n\n BROWSER_CHANGE_FOCUS: null,\n BROWSER_WINDOW_RESIZED: null,\n\n RECEIVED_PLUGIN_COMPONENT: null,\n REMOVED_PLUGIN_COMPONENT: null,\n RECEIVED_PLUGIN_POST_COMPONENT: null,\n RECEIVED_PLUGIN_POST_CARD_COMPONENT: null,\n REMOVED_PLUGIN_POST_COMPONENT: null,\n REMOVED_PLUGIN_POST_CARD_COMPONENT: null,\n RECEIVED_WEBAPP_PLUGINS: null,\n RECEIVED_WEBAPP_PLUGIN: null,\n REMOVED_WEBAPP_PLUGIN: null,\n RECEIVED_ADMIN_CONSOLE_REDUCER: null,\n REMOVED_ADMIN_CONSOLE_REDUCER: null,\n RECEIVED_ADMIN_CONSOLE_CUSTOM_COMPONENT: null,\n RECEIVED_ADMIN_CONSOLE_CUSTOM_SECTION: null,\n RECEIVED_PLUGIN_STATS_HANDLER: null,\n RECEIVED_PLUGIN_USER_SETTINGS: null,\n\n MODAL_OPEN: null,\n MODAL_CLOSE: null,\n\n SELECT_CHANNEL_WITH_MEMBER: null,\n SET_LAST_UNREAD_CHANNEL: null,\n UPDATE_CHANNEL_LAST_VIEWED_AT: null,\n\n INCREMENT_EMOJI_PICKER_PAGE: null,\n SET_RECENT_SKIN: null,\n\n STATUS_DROPDOWN_TOGGLE: null,\n ADD_CHANNEL_DROPDOWN_TOGGLE: null,\n ADD_CHANNEL_CTA_DROPDOWN_TOGGLE: null,\n\n SHOW_ONBOARDING_TASK_COMPLETION: null,\n SHOW_ONBOARDING_COMPLETE_PROFILE_TOUR: null,\n SHOW_ONBOARDING_VISIT_CONSOLE_TOUR: null,\n\n TOGGLE_LHS: null,\n OPEN_LHS: null,\n CLOSE_LHS: null,\n SET_LHS_SIZE: null,\n SELECT_STATIC_PAGE: null,\n\n SET_SHOW_PREVIEW_ON_CREATE_COMMENT: null,\n SET_SHOW_PREVIEW_ON_CREATE_POST: null,\n SET_SHOW_PREVIEW_ON_EDIT_CHANNEL_HEADER_MODAL: null,\n\n TOGGLE_RHS_MENU: null,\n OPEN_RHS_MENU: null,\n CLOSE_RHS_MENU: null,\n\n DISMISS_NOTICE: null,\n SHOW_NOTICE: null,\n\n SELECT_ATTACHMENT_MENU_ACTION: null,\n\n RECEIVED_TRANSLATIONS: null,\n\n INCREMENT_WS_ERROR_COUNT: null,\n RESET_WS_ERROR_COUNT: null,\n RECEIVED_POSTS_FOR_CHANNEL_AT_TIME: null,\n CHANNEL_POSTS_STATUS: null,\n CHANNEL_SYNC_STATUS: null,\n ALL_CHANNEL_SYNC_STATUS: null,\n\n UPDATE_ACTIVE_SECTION: null,\n\n RECEIVED_MARKETPLACE_PLUGINS: null,\n RECEIVED_MARKETPLACE_APPS: null,\n FILTER_MARKETPLACE_LISTING: null,\n INSTALLING_MARKETPLACE_ITEM: null,\n INSTALLING_MARKETPLACE_ITEM_SUCCEEDED: null,\n INSTALLING_MARKETPLACE_ITEM_FAILED: null,\n\n POST_UNREAD_SUCCESS: null,\n\n SET_UNREAD_FILTER_ENABLED: null,\n UPDATE_TOAST_STATUS: null,\n UPDATE_THREAD_TOAST_STATUS: null,\n\n SIDEBAR_DRAGGING_SET_STATE: null,\n SIDEBAR_DRAGGING_STOP: null,\n ADD_NEW_CATEGORY_ID: null,\n MULTISELECT_CHANNEL: null,\n MULTISELECT_CHANNEL_ADD: null,\n MULTISELECT_CHANNEL_TO: null,\n MULTISELECT_CHANNEL_CLEAR: null,\n\n TRACK_ANNOUNCEMENT_BAR: null,\n DISMISS_ANNOUNCEMENT_BAR: null,\n\n PREFETCH_POSTS_FOR_CHANNEL: null,\n\n SET_FILES_FILTER_BY_EXT: null,\n\n SUPPRESS_RHS: null,\n UNSUPPRESS_RHS: null,\n\n SET_EDIT_CHANNEL_MEMBERS: null,\n NEEDS_LOGGED_IN_LIMIT_REACHED_CHECK: null,\n\n SET_DRAFT_SOURCE: null,\n\n SET_ADMIN_CONSOLE_USER_MANAGEMENT_TABLE_PROPERTIES: null,\n CLEAR_ADMIN_CONSOLE_USER_MANAGEMENT_TABLE_PROPERTIES: null,\n});\n\nexport const PostRequestTypes = keyMirror({\n BEFORE_ID: null,\n AFTER_ID: null,\n});\n\nexport const ModalIdentifiers = {\n ABOUT: 'about',\n TEAM_SETTINGS: 'team_settings',\n CHANNEL_INFO: 'channel_info',\n DELETE_CHANNEL: 'delete_channel',\n UNARCHIVE_CHANNEL: 'unarchive_channel',\n CHANNEL_NOTIFICATIONS: 'channel_notifications',\n CHANNEL_INVITE: 'channel_invite',\n CHANNEL_MEMBERS: 'channel_members',\n TEAM_MEMBERS: 'team_members',\n ADD_USER_TO_CHANNEL: 'add_user_to_channel',\n ADD_USER_TO_ROLE: 'add_user_to_role',\n ADD_USER_TO_TEAM: 'add_user_to_team',\n CREATE_DM_CHANNEL: 'create_dm_channel',\n EDIT_CHANNEL_HEADER: 'edit_channel_header',\n EDIT_CHANNEL_PURPOSE: 'edit_channel_purpose',\n NOTIFICATIONS: 'notifications',\n DELETE_POST: 'delete_post',\n CONVERT_CHANNEL: 'convert_channel',\n RESET_STATUS: 'reset_status',\n LEAVE_TEAM: 'leave_team',\n RENAME_CHANNEL: 'rename_channel',\n USER_SETTINGS: 'user_settings',\n QUICK_SWITCH: 'quick_switch',\n REMOVED_FROM_CHANNEL: 'removed_from_channel',\n EMAIL_INVITE: 'email_invite',\n INTERACTIVE_DIALOG: 'interactive_dialog',\n APPS_MODAL: 'apps_modal',\n ADD_TEAMS_TO_SCHEME: 'add_teams_to_scheme',\n INVITATION: 'invitation',\n ADD_GROUPS_TO_TEAM: 'add_groups_to_team',\n ADD_GROUPS_TO_CHANNEL: 'add_groups_to_channel',\n MANAGE_TEAM_GROUPS: 'manage_team_groups',\n MANAGE_CHANNEL_GROUPS: 'manage_channel_groups',\n GROUP_MEMBERS: 'group_members',\n MOBILE_SUBMENU: 'mobile_submenu',\n PLUGIN_MARKETPLACE: 'plugin_marketplace',\n EDIT_CATEGORY: 'edit_category',\n DELETE_CATEGORY: 'delete_category',\n SIDEBAR_WHATS_NEW_MODAL: 'sidebar_whats_new_modal',\n UPGRADE_CLOUD_ACCOUNT: 'upgrade_cloud_account',\n START_TRIAL_MODAL: 'start_trial_modal',\n TRIAL_BENEFITS_MODAL: 'trial_benefits_modal',\n PRICING_MODAL: 'pricing_modal',\n LEARN_MORE_TRIAL_MODAL: 'learn_more_trial_modal',\n ENTERPRISE_EDITION_LICENSE: 'enterprise_edition_license',\n CONFIRM_NOTIFY_ADMIN: 'confirm_notify_admin',\n REMOVE_NEXT_STEPS_MODAL: 'remove_next_steps_modal',\n MORE_CHANNELS: 'more_channels',\n NEW_CHANNEL_MODAL: 'new_channel_modal',\n CLOUD_PURCHASE: 'cloud_purchase',\n SELF_HOSTED_PURCHASE: 'self_hosted_purchase',\n CLOUD_DOWNGRADE_CHOOSE_TEAM: 'cloud_downgrade_choose_team',\n SUCCESS_MODAL: 'success_modal',\n ERROR_MODAL: 'error_modal',\n DND_CUSTOM_TIME_PICKER: 'dnd_custom_time_picker',\n POST_REMINDER_CUSTOM_TIME_PICKER: 'post_reminder_custom_time_picker',\n CUSTOM_STATUS: 'custom_status',\n COMMERCIAL_SUPPORT: 'commercial_support',\n NO_INTERNET_CONNECTION: 'no_internet_connection',\n JOIN_CHANNEL_PROMPT: 'join_channel_prompt',\n COLLAPSED_REPLY_THREADS_MODAL: 'collapsed_reply_threads_modal',\n NOTIFY_CONFIRM_MODAL: 'notify_confirm_modal',\n CONFIRM_LICENSE_REMOVAL: 'confirm_license_removal',\n CONFIRM: 'confirm',\n USER_GROUPS: 'user_groups',\n USER_GROUPS_CREATE: 'user_groups_create',\n VIEW_USER_GROUP: 'view_user_group',\n ADD_USERS_TO_GROUP: 'add_users_to_group',\n EDIT_GROUP_MODAL: 'edit_group_modal',\n POST_DELETED_MODAL: 'post_deleted_modal',\n FILE_PREVIEW_MODAL: 'file_preview_modal',\n LEAVE_PRIVATE_CHANNEL_MODAL: 'leave_private_channel_modal',\n GET_PUBLIC_LINK_MODAL: 'get_public_link_modal',\n KEYBOARD_SHORTCUTS_MODAL: 'keyboar_shortcuts_modal',\n USERS_TO_BE_REMOVED: 'users_to_be_removed',\n DELETE_DRAFT: 'delete_draft_modal',\n SEND_DRAFT: 'send_draft_modal',\n UPLOAD_LICENSE: 'upload_license',\n CLOUD_LIMITS: 'cloud_limits',\n THREE_DAYS_LEFT_TRIAL_MODAL: 'three_days_left_trial_modal',\n REQUEST_BUSINESS_EMAIL_MODAL: 'request_business_email_modal',\n FEATURE_RESTRICTED_MODAL: 'feature_restricted_modal',\n FORWARD_POST_MODAL: 'forward_post_modal',\n JOIN_PUBLIC_CHANNEL_MODAL: 'join_public_channel_modal',\n CLOUD_INVOICE_PREVIEW: 'cloud_invoice_preview',\n BILLING_HISTORY: 'billing_history',\n SUM_OF_MEMBERS_MODAL: 'sum_of_members_modal',\n RESTORE_POST_MODAL: 'restore_post',\n INFO_TOAST: 'info_toast',\n MARK_ALL_THREADS_AS_READ: 'mark_all_threads_as_read_modal',\n DELINQUENCY_MODAL_DOWNGRADE: 'delinquency_modal_downgrade',\n CLOUD_LIMITS_DOWNGRADE: 'cloud_limits_downgrade',\n PERSIST_NOTIFICATION_CONFIRM_MODAL: 'persist_notification_confirm_modal',\n AIR_GAPPED_SELF_HOSTED_PURCHASE: 'air_gapped_self_hosted_purchase',\n DOWNGRADE_MODAL: 'downgrade_modal',\n PURCHASE_IN_PROGRESS: 'purchase_in_progress',\n DELETE_WORKSPACE: 'delete_workspace',\n FEEDBACK: 'feedback',\n DELETE_WORKSPACE_PROGRESS: 'delete_workspace_progress',\n DELETE_WORKSPACE_RESULT: 'delete_workspace_result',\n SCREENING_IN_PROGRESS: 'screening_in_progress',\n CONFIRM_SWITCH_TO_YEARLY: 'confirm_switch_to_yearly',\n EXPANSION_IN_PROGRESS: 'expansion_in_progress',\n SELF_HOSTED_EXPANSION: 'self_hosted_expansion',\n START_TRIAL_FORM_MODAL: 'start_trial_form_modal',\n START_TRIAL_FORM_MODAL_RESULT: 'start_trial_form_modal_result',\n MOVE_THREAD_MODAL: 'move_thread_modal',\n CONVERT_GM_TO_CHANNEL: 'convert_gm_to_channel',\n IP_FILTERING_ADD_EDIT_MODAL: 'ip_filtering_add_edit_modal',\n IP_FILTERING_DELETE_CONFIRMATION_MODAL: 'ip_filtering_delete_confirmation_modal',\n IP_FILTERING_SAVE_CONFIRMATION_MODAL: 'ip_filtering_save_confirmation_modal',\n REACTION_LIMIT_REACHED: 'reaction_limit_reached',\n AIR_GAPPED_CONTACT_SALES: 'air_gapped_contact_sales',\n MANAGE_ROLES_MODAL: 'manage_roles_modal',\n MANAGE_TEAMS_MODAL: 'manage_teams_modal',\n MANAGE_TOKENS_MODAL: 'manage_teams_modal',\n RESET_PASSWORD_MODAL: 'reset_password_modal',\n RESET_EMAIL_MODAL: 'reset_email_modal',\n DEACTIVATE_MEMBER_MODAL: 'deactivate_member_modal',\n PROMOTE_TO_MEMBER_MODAL: 'promote_to_member_modal',\n DEMOTE_TO_GUEST_MODAL: 'demote_to_guest_modal',\n REVOKE_SESSIONS_MODAL: 'revoke_sessions_modal',\n CREATE_GROUP_SYNCABLES_MEMBERSHIP_MODAL: 'create_group_syncables_membership_modal',\n EXPORT_USER_DATA_MODAL: 'export_user_data_modal',\n UPGRADE_EXPORT_DATA_MODAL: 'upgrade_export_data_modal',\n EXPORT_ERROR_MODAL: 'export_error_modal',\n CHANNEL_BOOKMARK_DELETE: 'channel_bookmark_delete',\n CHANNEL_BOOKMARK_CREATE: 'channel_bookmark_create',\n CONFIRM_MANAGE_USER_SETTINGS_MODAL: 'confirm_switch_to_settings',\n SCHEDULED_POST_CUSTOM_TIME_MODAL: 'scheduled_post_custom_time',\n SECURE_CONNECTION_DELETE: 'secure_connection_delete',\n SECURE_CONNECTION_CREATE_INVITE: 'secure_connection_create_invite',\n SECURE_CONNECTION_ACCEPT_INVITE: 'secure_connection_accept_invite',\n SHARED_CHANNEL_REMOTE_INVITE: 'shared_channel_remote_invite',\n SHARED_CHANNEL_REMOTE_UNINVITE: 'shared_channel_remote_uninvite',\n USER_PROPERTY_FIELD_DELETE: 'user_property_field_delete',\n};\n\nexport const UserStatuses = {\n OUT_OF_OFFICE: 'ooo',\n OFFLINE: 'offline',\n AWAY: 'away',\n ONLINE: 'online',\n DND: 'dnd',\n} as const;\n\nexport const EventTypes = Object.assign(\n {\n KEY_DOWN: 'keydown',\n KEY_UP: 'keyup',\n CLICK: 'click',\n FOCUS: 'focus',\n BLUR: 'blur',\n SHORTCUT: 'shortcut',\n MOUSE_DOWN: 'mousedown',\n MOUSE_UP: 'mouseup',\n },\n keyMirror({\n POST_LIST_SCROLL_TO_BOTTOM: null,\n }),\n);\n\nexport const CloudProducts = {\n\n // STARTER sku is used by both free cloud starter\n // and paid cloud starter (legacy cloud starter).\n // Where differentiation is needed, check whether any limits are applied.\n // If none are applied, it must be legacy cloud starter.\n STARTER: 'cloud-starter',\n PROFESSIONAL: 'cloud-professional',\n ENTERPRISE: 'cloud-enterprise',\n LEGACY: 'cloud-legacy',\n};\n\nexport const CloudBillingTypes = {\n INTERNAL: 'internal',\n LICENSED: 'licensed',\n};\n\nexport const SelfHostedProducts = {\n STARTER: 'starter',\n PROFESSIONAL: 'professional',\n ENTERPRISE: 'enterprise',\n};\n\nexport const MattermostFeatures = {\n GUEST_ACCOUNTS: 'mattermost.feature.guest_accounts',\n CUSTOM_USER_GROUPS: 'mattermost.feature.custom_user_groups',\n CREATE_MULTIPLE_TEAMS: 'mattermost.feature.create_multiple_teams',\n START_CALL: 'mattermost.feature.start_call',\n PLAYBOOKS_RETRO: 'mattermost.feature.playbooks_retro',\n UNLIMITED_MESSAGES: 'mattermost.feature.unlimited_messages',\n UNLIMITED_FILE_STORAGE: 'mattermost.feature.unlimited_file_storage',\n ALL_PROFESSIONAL_FEATURES: 'mattermost.feature.all_professional',\n ALL_ENTERPRISE_FEATURES: 'mattermost.feature.all_enterprise',\n UPGRADE_DOWNGRADED_WORKSPACE: 'mattermost.feature.upgrade_downgraded_workspace',\n PLUGIN_FEATURE: 'mattermost.feature.plugin',\n HIGHLIGHT_WITHOUT_NOTIFICATION: 'mattermost.feature.highlight_without_notification',\n};\n\nexport enum LicenseSkus {\n E10 = 'E10',\n E20 = 'E20',\n Starter = 'starter',\n Professional = 'professional',\n Enterprise = 'enterprise',\n}\n\nexport const CloudProductToSku = {\n [CloudProducts.PROFESSIONAL]: LicenseSkus.Professional,\n [CloudProducts.ENTERPRISE]: LicenseSkus.Enterprise,\n};\n\nexport const A11yClassNames = {\n REGION: 'a11y__region',\n SECTION: 'a11y__section',\n ACTIVE: 'a11y--active',\n FOCUSED: 'a11y--focused',\n MODAL: 'a11y__modal',\n POPUP: 'a11y__popup',\n};\n\nexport const A11yAttributeNames = {\n SORT_ORDER: 'data-a11y-sort-order',\n ORDER_REVERSE: 'data-a11y-order-reversed',\n FOCUS_CHILD: 'data-a11y-focus-child',\n LOOP_NAVIGATION: 'data-a11y-loop-navigation',\n DISABLE_NAVIGATION: 'data-a11y-disable-nav',\n};\n\nexport const A11yCustomEventTypes = {\n ACTIVATE: 'a11yactivate',\n DEACTIVATE: 'a11ydeactivate',\n UPDATE: 'a11yupdate',\n FOCUS: 'a11yfocus',\n};\n\nexport type A11yFocusEventDetail = {\n target: HTMLElement | null | undefined;\n keyboardOnly: boolean;\n}\n\nexport function isA11yFocusEventDetail(o: unknown): o is A11yFocusEventDetail {\n return Boolean(o && typeof o === 'object' && 'keyboardOnly' in o);\n}\n\nexport const AppEvents = {\n FOCUS_EDIT_TEXTBOX: 'focus_edit_textbox',\n};\n\nexport const SocketEvents = {\n POSTED: 'posted',\n POST_EDITED: 'post_edited',\n POST_DELETED: 'post_deleted',\n POST_UPDATED: 'post_updated',\n POST_UNREAD: 'post_unread',\n CHANNEL_CONVERTED: 'channel_converted',\n CHANNEL_CREATED: 'channel_created',\n CHANNEL_DELETED: 'channel_deleted',\n CHANNEL_UNARCHIVED: 'channel_restored',\n CHANNEL_UPDATED: 'channel_updated',\n CHANNEL_BOOKMARK_CREATED: 'channel_bookmark_created',\n CHANNEL_BOOKMARK_DELETED: 'channel_bookmark_deleted',\n CHANNEL_BOOKMARK_UPDATED: 'channel_bookmark_updated',\n CHANNEL_BOOKMARK_SORTED: 'channel_bookmark_sorted',\n MULTIPLE_CHANNELS_VIEWED: 'multiple_channels_viewed',\n CHANNEL_MEMBER_UPDATED: 'channel_member_updated',\n CHANNEL_SCHEME_UPDATED: 'channel_scheme_updated',\n DIRECT_ADDED: 'direct_added',\n GROUP_ADDED: 'group_added',\n NEW_USER: 'new_user',\n ADDED_TO_TEAM: 'added_to_team',\n JOIN_TEAM: 'join_team',\n LEAVE_TEAM: 'leave_team',\n UPDATE_TEAM: 'update_team',\n DELETE_TEAM: 'delete_team',\n UPDATE_TEAM_SCHEME: 'update_team_scheme',\n USER_ADDED: 'user_added',\n USER_REMOVED: 'user_removed',\n USER_UPDATED: 'user_updated',\n USER_ROLE_UPDATED: 'user_role_updated',\n MEMBERROLE_UPDATED: 'memberrole_updated',\n ROLE_ADDED: 'role_added',\n ROLE_REMOVED: 'role_removed',\n ROLE_UPDATED: 'role_updated',\n TYPING: 'typing',\n PREFERENCE_CHANGED: 'preference_changed',\n PREFERENCES_CHANGED: 'preferences_changed',\n PREFERENCES_DELETED: 'preferences_deleted',\n EPHEMERAL_MESSAGE: 'ephemeral_message',\n STATUS_CHANGED: 'status_change',\n HELLO: 'hello',\n REACTION_ADDED: 'reaction_added',\n REACTION_REMOVED: 'reaction_removed',\n EMOJI_ADDED: 'emoji_added',\n PLUGIN_ENABLED: 'plugin_enabled',\n PLUGIN_DISABLED: 'plugin_disabled',\n LICENSE_CHANGED: 'license_changed',\n CONFIG_CHANGED: 'config_changed',\n PLUGIN_STATUSES_CHANGED: 'plugin_statuses_changed',\n OPEN_DIALOG: 'open_dialog',\n RECEIVED_GROUP: 'received_group',\n GROUP_MEMBER_ADD: 'group_member_add',\n GROUP_MEMBER_DELETED: 'group_member_deleted',\n RECEIVED_GROUP_ASSOCIATED_TO_TEAM: 'received_group_associated_to_team',\n RECEIVED_GROUP_NOT_ASSOCIATED_TO_TEAM: 'received_group_not_associated_to_team',\n RECEIVED_GROUP_ASSOCIATED_TO_CHANNEL: 'received_group_associated_to_channel',\n RECEIVED_GROUP_NOT_ASSOCIATED_TO_CHANNEL: 'received_group_not_associated_to_channel',\n SIDEBAR_CATEGORY_CREATED: 'sidebar_category_created',\n SIDEBAR_CATEGORY_UPDATED: 'sidebar_category_updated',\n SIDEBAR_CATEGORY_DELETED: 'sidebar_category_deleted',\n SIDEBAR_CATEGORY_ORDER_UPDATED: 'sidebar_category_order_updated',\n USER_ACTIVATION_STATUS_CHANGED: 'user_activation_status_change',\n CLOUD_PAYMENT_STATUS_UPDATED: 'cloud_payment_status_updated',\n CLOUD_SUBSCRIPTION_CHANGED: 'cloud_subscription_changed',\n APPS_FRAMEWORK_REFRESH_BINDINGS: 'custom_com.mattermost.apps_refresh_bindings',\n APPS_FRAMEWORK_PLUGIN_ENABLED: 'custom_com.mattermost.apps_plugin_enabled',\n APPS_FRAMEWORK_PLUGIN_DISABLED: 'custom_com.mattermost.apps_plugin_disabled',\n FIRST_ADMIN_VISIT_MARKETPLACE_STATUS_RECEIVED: 'first_admin_visit_marketplace_status_received',\n THREAD_UPDATED: 'thread_updated',\n THREAD_FOLLOW_CHANGED: 'thread_follow_changed',\n THREAD_READ_CHANGED: 'thread_read_changed',\n POST_ACKNOWLEDGEMENT_ADDED: 'post_acknowledgement_added',\n POST_ACKNOWLEDGEMENT_REMOVED: 'post_acknowledgement_removed',\n DRAFT_CREATED: 'draft_created',\n DRAFT_UPDATED: 'draft_updated',\n DRAFT_DELETED: 'draft_deleted',\n SCHEDULED_POST_CREATED: 'scheduled_post_created',\n SCHEDULED_POST_UPDATED: 'scheduled_post_updated',\n SCHEDULED_POST_DELETED: 'scheduled_post_deleted',\n PERSISTENT_NOTIFICATION_TRIGGERED: 'persistent_notification_triggered',\n HOSTED_CUSTOMER_SIGNUP_PROGRESS_UPDATED: 'hosted_customer_signup_progress_updated',\n};\n\nexport const TutorialSteps = {\n ADD_FIRST_CHANNEL: -1,\n POST_POPOVER: 0,\n CHANNEL_POPOVER: 1,\n ADD_CHANNEL_POPOVER: 2,\n MENU_POPOVER: 3,\n PRODUCT_SWITCHER: 4,\n SETTINGS: 5,\n START_TRIAL: 6,\n FINISHED: 999,\n};\n\n// note: add steps in same order as the keys in TutorialSteps above\nexport const AdminTutorialSteps = ['START_TRIAL'];\n\nexport const CrtTutorialSteps = {\n WELCOME_POPOVER: 0,\n LIST_POPOVER: 1,\n UNREAD_POPOVER: 2,\n FINISHED: 999,\n};\n\nexport const CrtTutorialTriggerSteps = {\n START: 0,\n STARTED: 1,\n FINISHED: 999,\n};\n\nexport const CrtThreadPaneSteps = {\n THREADS_PANE_POPOVER: 0,\n FINISHED: 999,\n};\n\nexport const TopLevelProducts = {\n BOARDS: 'Boards',\n PLAYBOOKS: 'Playbooks',\n};\n\nexport enum ItemStatus {\n NONE = 'none',\n SUCCESS = 'success',\n INFO = 'info',\n WARNING = 'warning',\n ERROR = 'error',\n}\n\nexport const RecommendedNextStepsLegacy = {\n COMPLETE_PROFILE: 'complete_profile',\n TEAM_SETUP: 'team_setup',\n INVITE_MEMBERS: 'invite_members',\n PREFERENCES_SETUP: 'preferences_setup',\n NOTIFICATION_SETUP: 'notification_setup',\n DOWNLOAD_APPS: 'download_apps',\n CREATE_FIRST_CHANNEL: 'create_first_channel',\n HIDE: 'hide',\n SKIP: 'skip',\n};\n\nexport const Threads = {\n CHANGED_SELECTED_THREAD: 'changed_selected_thread',\n CHANGED_LAST_VIEWED_AT: 'changed_last_viewed_at',\n MANUALLY_UNREAD_THREAD: 'manually_unread_thread',\n};\n\nexport const CloudBanners = {\n HIDE: 'hide',\n TRIAL: 'trial',\n UPGRADE_FROM_TRIAL: 'upgrade_from_trial',\n THREE_DAYS_LEFT_TRIAL_MODAL_DISMISSED: 'dismiss_3_days_left_trial_modal',\n NUDGE_TO_CLOUD_YEARLY_PLAN_SNOOZED: 'nudge_to_cloud_yearly_plan_snoozed',\n NUDGE_TO_PAID_PLAN_SNOOZED: 'nudge_to_paid_plan_snoozed',\n ANNUAL_RENEWAL_60_DAY: 'annual_renewal_60_day',\n ANNUAL_RENEWAL_30_DAY: 'annual_renewal_30_day',\n};\n\nexport const ConfigurationBanners = {\n LICENSE_EXPIRED: 'license_expired',\n};\n\nexport const AdvancedTextEditor = {\n COMMENT: 'comment',\n POST: 'post',\n EDIT: 'edit',\n};\n\nexport const TELEMETRY_CATEGORIES = {\n CLOUD_PURCHASING: 'cloud_purchasing',\n CLOUD_PRICING: 'cloud_pricing',\n SELF_HOSTED_PURCHASING: 'self_hosted_purchasing',\n SELF_HOSTED_EXPANSION: 'self_hosted_expansion',\n CLOUD_ADMIN: 'cloud_admin',\n CLOUD_DELINQUENCY: 'cloud_delinquency',\n SELF_HOSTED_ADMIN: 'self_hosted_admin',\n POST_INFO_MORE: 'post_info_more_menu',\n POST_INFO: 'post_info',\n SELF_HOSTED_START_TRIAL_AUTO_MODAL: 'self_hosted_start_trial_auto_modal',\n SELF_HOSTED_START_TRIAL_MODAL: 'self_hosted_start_trial_modal',\n CLOUD_START_TRIAL_BUTTON: 'cloud_start_trial_button',\n CLOUD_THREE_DAYS_LEFT_MODAL: 'cloud_three_days_left_modal',\n SELF_HOSTED_START_TRIAL_TASK_LIST: 'self_hosted_start_trial_task_list',\n SELF_HOSTED_LICENSE_EXPIRED: 'self_hosted_license_expired',\n WORKSPACE_OPTIMIZATION_DASHBOARD: 'workspace_optimization_dashboard',\n REQUEST_BUSINESS_EMAIL: 'request_business_email',\n TRUE_UP_REVIEW: 'true_up_review',\n};\n\nexport const TELEMETRY_LABELS = {\n UNSAVE: 'unsave',\n SAVE: 'save',\n COPY_LINK: 'copy_link',\n COPY_TEXT: 'copy_text',\n DELETE: 'delete',\n EDIT: 'edit',\n FOLLOW: 'follow',\n UNFOLLOW: 'unfollow',\n PIN: 'pin',\n UNPIN: 'unpin',\n REPLY: 'reply',\n UNREAD: 'unread',\n FORWARD: 'forward',\n MOVE_THREAD: 'move_thread',\n};\n\nexport const PostTypes = {\n JOIN_LEAVE: 'system_join_leave',\n JOIN_CHANNEL: 'system_join_channel',\n LEAVE_CHANNEL: 'system_leave_channel',\n ADD_TO_CHANNEL: 'system_add_to_channel',\n REMOVE_FROM_CHANNEL: 'system_remove_from_channel',\n ADD_REMOVE: 'system_add_remove',\n JOIN_TEAM: 'system_join_team',\n LEAVE_TEAM: 'system_leave_team',\n ADD_TO_TEAM: 'system_add_to_team',\n REMOVE_FROM_TEAM: 'system_remove_from_team',\n HEADER_CHANGE: 'system_header_change',\n DISPLAYNAME_CHANGE: 'system_displayname_change',\n CONVERT_CHANNEL: 'system_convert_channel',\n PURPOSE_CHANGE: 'system_purpose_change',\n CHANNEL_DELETED: 'system_channel_deleted',\n CHANNEL_UNARCHIVED: 'system_channel_restored',\n SYSTEM_GENERIC: 'system_generic',\n FAKE_PARENT_DELETED: 'system_fake_parent_deleted',\n EPHEMERAL: 'system_ephemeral',\n EPHEMERAL_ADD_TO_CHANNEL: 'system_ephemeral_add_to_channel',\n REMOVE_LINK_PREVIEW: 'remove_link_preview',\n ME: 'me',\n REMINDER: 'reminder',\n WRANGLER: 'system_wrangler',\n CUSTOM_CALLS: 'custom_calls',\n CUSTOM_CALLS_RECORDING: 'custom_calls_recording',\n};\n\nexport const StatTypes = keyMirror({\n TOTAL_USERS: null,\n TOTAL_PUBLIC_CHANNELS: null,\n TOTAL_PRIVATE_GROUPS: null,\n TOTAL_POSTS: null,\n TOTAL_TEAMS: null,\n TOTAL_FILE_POSTS: null,\n TOTAL_HASHTAG_POSTS: null,\n TOTAL_IHOOKS: null,\n TOTAL_OHOOKS: null,\n TOTAL_COMMANDS: null,\n TOTAL_SESSIONS: null,\n POST_PER_DAY: null,\n BOT_POST_PER_DAY: null,\n USERS_WITH_POSTS_PER_DAY: null,\n RECENTLY_ACTIVE_USERS: null,\n NEWLY_CREATED_USERS: null,\n TOTAL_WEBSOCKET_CONNECTIONS: null,\n TOTAL_MASTER_DB_CONNECTIONS: null,\n TOTAL_READ_DB_CONNECTIONS: null,\n DAILY_ACTIVE_USERS: null,\n MONTHLY_ACTIVE_USERS: null,\n});\n\nexport const SearchTypes = keyMirror({\n SET_MODAL_SEARCH: null,\n SET_POPOVER_SEARCH: null,\n SET_MODAL_FILTERS: null,\n SET_USER_GRID_SEARCH: null,\n SET_USER_GRID_FILTERS: null,\n SET_TEAM_LIST_SEARCH: null,\n SET_CHANNEL_LIST_SEARCH: null,\n SET_CHANNEL_LIST_FILTERS: null,\n SET_CHANNEL_MEMBERS_RHS_SEARCH: null,\n});\n\nexport const StorageTypes = keyMirror({\n SET_GLOBAL_ITEM: null,\n REMOVE_GLOBAL_ITEM: null,\n ACTION_ON_GLOBAL_ITEMS_WITH_PREFIX: null,\n STORAGE_REHYDRATE: null,\n});\n\nexport const StoragePrefixes = {\n EMBED_VISIBLE: 'isVisible_',\n COMMENT_DRAFT: 'comment_draft_',\n EDIT_DRAFT: 'edit_draft_',\n DRAFT: 'draft_',\n LOGOUT: '__logout__',\n LOGIN: '__login__',\n ANNOUNCEMENT: '__announcement__',\n LANDING_PAGE_SEEN: '__landingPageSeen__',\n LANDING_PREFERENCE: '__landing-preference__',\n CHANNEL_CATEGORY_COLLAPSED: 'channelCategoryCollapsed_',\n INLINE_IMAGE_VISIBLE: 'isInlineImageVisible_',\n DELINQUENCY: 'delinquency_',\n HIDE_JOINED_CHANNELS: 'hideJoinedChannels',\n HIDE_NOTIFICATION_PERMISSION_REQUEST_BANNER: 'hideNotificationPermissionRequestBanner',\n};\n\nexport const LandingPreferenceTypes = {\n MATTERMOSTAPP: 'mattermostapp',\n BROWSER: 'browser',\n};\n\nexport const ErrorPageTypes = {\n LOCAL_STORAGE: 'local_storage',\n OAUTH_ACCESS_DENIED: 'oauth_access_denied',\n OAUTH_MISSING_CODE: 'oauth_missing_code',\n OAUTH_INVALID_PARAM: 'oauth_invalid_param',\n OAUTH_INVALID_REDIRECT_URL: 'oauth_invalid_redirect_url',\n PAGE_NOT_FOUND: 'page_not_found',\n PERMALINK_NOT_FOUND: 'permalink_not_found',\n TEAM_NOT_FOUND: 'team_not_found',\n CHANNEL_NOT_FOUND: 'channel_not_found',\n CLOUD_ARCHIVED: 'cloud_archived',\n};\n\nexport const JobTypes = {\n DATA_RETENTION: 'data_retention',\n ELASTICSEARCH_POST_INDEXING: 'elasticsearch_post_indexing',\n BLEVE_POST_INDEXING: 'bleve_post_indexing',\n LDAP_SYNC: 'ldap_sync',\n MESSAGE_EXPORT: 'message_export',\n} as const;\n\nexport const JobStatuses = {\n PENDING: 'pending',\n IN_PROGRESS: 'in_progress',\n SUCCESS: 'success',\n ERROR: 'error',\n CANCEL_REQUESTED: 'cancel_requested',\n CANCELED: 'canceled',\n WARNING: 'warning',\n};\n\nexport const AnnouncementBarTypes = {\n ANNOUNCEMENT: 'announcement',\n CRITICAL: 'critical',\n DEVELOPER: 'developer',\n SUCCESS: 'success',\n ADVISOR: 'advisor',\n ADVISOR_ACK: 'advisor-ack',\n GENERAL: 'general',\n};\n\nexport const AnnouncementBarMessages = {\n EMAIL_VERIFICATION_REQUIRED: 'announcement_bar.error.email_verification_required',\n EMAIL_VERIFIED: 'announcement_bar.notification.email_verified',\n LICENSE_EXPIRED: 'announcement_bar.error.license_expired',\n LICENSE_EXPIRING: 'announcement_bar.error.license_expiring',\n LICENSE_PAST_GRACE: 'announcement_bar.error.past_grace',\n PREVIEW_MODE: 'announcement_bar.error.preview_mode',\n WEBSOCKET_PORT_ERROR: 'channel_loader.socketError',\n TRIAL_LICENSE_EXPIRING: 'announcement_bar.error.trial_license_expiring',\n};\n\n// These messages correspond to AnnouncementBarMessages above\ndefineMessages({\n emailVerificationRequired: {\n id: 'announcement_bar.error.email_verification_required',\n defaultMessage: 'Check your email inbox to verify the address.',\n },\n emailVerified: {\n id: 'announcement_bar.notification.email_verified',\n defaultMessage: 'Email verified',\n },\n licenseExpired: {\n id: 'announcement_bar.error.license_expired',\n defaultMessage: '{licenseSku} license is expired and some features may be disabled.',\n },\n licenseExpiring: {\n id: 'announcement_bar.error.license_expiring',\n defaultMessage: '{licenseSku} license expires on {date, date, long}.',\n },\n pastGrace: {\n id: 'announcement_bar.error.past_grace',\n defaultMessage: '{licenseSku} license is expired and some features may be disabled. Please contact your System Administrator for details.',\n },\n previewMode: {\n id: 'announcement_bar.error.preview_mode',\n defaultMessage: 'Preview Mode: Email notifications have not been configured.',\n },\n socketError: {\n id: 'channel_loader.socketError',\n defaultMessage: 'Please check connection, Mattermost unreachable. If issue persists, ask administrator to [check WebSocket port](!https://docs.mattermost.com/install/troubleshooting.html#please-check-connection-mattermost-unreachable-if-issue-persists-ask-administrator-to-check-websocket-port).',\n },\n trialLicenseExpiring: {\n id: 'announcement_bar.error.trial_license_expiring',\n defaultMessage: 'There are {days} days left on your free trial.',\n },\n});\n\nexport const VerifyEmailErrors = {\n FAILED_EMAIL_VERIFICATION: 'failed_email_verification',\n FAILED_USER_STATE_GET: 'failed_get_user_state',\n};\n\nexport const FileTypes = {\n TEXT: 'text',\n IMAGE: 'image',\n AUDIO: 'audio',\n VIDEO: 'video',\n SPREADSHEET: 'spreadsheet',\n CODE: 'code',\n WORD: 'word',\n PRESENTATION: 'presentation',\n PDF: 'pdf',\n PATCH: 'patch',\n SVG: 'svg',\n OTHER: 'other',\n LICENSE_EXTENSION: '.mattermost-license',\n};\n\nexport const NotificationLevels = {\n DEFAULT: 'default',\n ALL: 'all',\n MENTION: 'mention',\n NONE: 'none',\n} as const;\n\nexport const DesktopSound = {\n DEFAULT: 'default',\n ON: 'on',\n OFF: 'off',\n} as const;\n\nexport const IgnoreChannelMentions = {\n ON: 'on',\n OFF: 'off',\n DEFAULT: 'default',\n} as const;\n\nexport const ChannelAutoFollowThreads = {\n ON: 'on',\n OFF: 'off',\n} as const;\n\nexport const UserSettingsNotificationSections = {\n DESKTOP_AND_MOBILE: 'desktopAndMobile',\n DESKTOP_NOTIFICATION_SOUND: 'desktopNotificationSound',\n EMAIL: 'email',\n KEYWORDS_MENTIONS: 'keywordsAndMentions',\n KEYWORDS_HIGHLIGHT: 'keywordsAndHighlight',\n REPLY_NOTIFCATIONS: 'replyNotifications',\n AUTO_RESPONDER: 'autoResponder',\n};\n\nexport const AdvancedSections = {\n CONTROL_SEND: 'advancedCtrlSend',\n FORMATTING: 'formatting',\n JOIN_LEAVE: 'joinLeave',\n PERFORMANCE_DEBUGGING: 'performanceDebugging',\n SYNC_DRAFTS: 'syncDrafts',\n};\n\nexport const RHSStates = {\n MENTION: 'mention',\n SEARCH: 'search',\n FLAG: 'flag',\n PIN: 'pin',\n PLUGIN: 'plugin',\n CHANNEL_FILES: 'channel-files',\n CHANNEL_INFO: 'channel-info',\n CHANNEL_MEMBERS: 'channel-members',\n EDIT_HISTORY: 'edit-history',\n};\n\nexport const UploadStatuses = {\n LOADING: 'loading',\n COMPLETE: 'complete',\n DEFAULT: '',\n};\n\nexport const GroupUnreadChannels = {\n DISABLED: 'disabled',\n DEFAULT_ON: 'default_on',\n DEFAULT_OFF: 'default_off',\n};\n\nexport const SidebarChannelGroups = {\n UNREADS: 'unreads',\n FAVORITE: 'favorite',\n};\n\nexport const DraggingStates = {\n CAPTURE: 'capture',\n BEFORE: 'before',\n DURING: 'during',\n};\n\nexport const DraggingStateTypes = {\n CATEGORY: 'category',\n CHANNEL: 'channel',\n DM: 'DM',\n MIXED_CHANNELS: 'mixed_channels',\n};\n\nexport const AboutLinks = {\n TERMS_OF_SERVICE: 'https://mattermost.com/pl/terms-of-use/',\n PRIVACY_POLICY: 'https://mattermost.com/pl/privacy-policy/',\n};\n\nexport const CloudLinks = {\n BILLING_DOCS: 'https://docs.mattermost.com/pl/cloud-billing',\n PRICING: 'https://mattermost.com/pl/pricing/',\n PRORATED_PAYMENT: 'https://mattermost.com/pl/mattermost-cloud-prorate-documentation',\n DEPLOYMENT_OPTIONS: 'https://mattermost.com/deploy/',\n DOWNLOAD_UPDATE: 'https://mattermost.com/deploy/',\n CLOUD_SIGNUP_PAGE: 'https://mattermost.com/sign-up/',\n SELF_HOSTED_SIGNUP: 'https://customers.mattermost.com/signup',\n DELINQUENCY_DOCS: 'https://docs.mattermost.com/about/cloud-subscriptions.html#failed-or-late-payments',\n SELF_HOSTED_PRICING: 'https://mattermost.com/pl/pricing/#self-hosted',\n};\n\nexport const HostedCustomerLinks = {\n BILLING_DOCS: 'https://mattermost.com/pl/how-self-hosted-billing-works',\n SELF_HOSTED_BILLING: 'https://mattermost.com/pl/self-hosted-billing',\n TERMS_AND_CONDITIONS: 'https://mattermost.com/enterprise-edition-terms/',\n SECURITY_UPDATES: 'https://mattermost.com/security-updates/',\n DOWNLOAD: 'https://mattermost.com/download',\n NEWSLETTER_UNSUBSCRIBE_LINK: 'https://forms.mattermost.com/UnsubscribePage.html',\n PRIVACY: AboutLinks.PRIVACY_POLICY,\n};\n\nexport const DocLinks = {\n ABOUT_TEAMS: 'https://docs.mattermost.com/welcome/about-teams.html#team-url',\n ADVANCED_LOGGING: 'https://mattermost.com/pl/advanced-logging',\n CONFIGURE_DOCUMENT_CONTENT_SEARCH: 'https://mattermost.com/pl/configure-document-content-search',\n CONFIGURE_AD_LDAP_QUERY_TIMEOUT: 'https://mattermost.com/pl/configure-ad-ldap-query-timeout',\n CONFIGURE_OVERRIDE_SAML_BIND_DATA_WITH_LDAP: 'https://mattermost.com/pl/configure-override-saml-bind-data-with-ldap',\n COMPILANCE_EXPORT: 'https://mattermost.com/pl/compliance-export',\n COMPILANCE_MONITORING: 'https://mattermost.com/pl/compliance-monitoring',\n DATA_RETENTION_POLICY: 'https://mattermost.com/pl/data-retention-policy',\n DEFAULT_LDAP_GROUP_SYNC: 'https://mattermost.com/pl/default-ldap-group-sync',\n DESKTOP_MANAGED_RESOURCES: 'https://mattermost.com/pl/desktop-managed-resources',\n ELASTICSEARCH: 'https://mattermost.com/pl/setup-elasticsearch',\n ENABLE_CLIENT_SIDE_CERTIFICATION: 'https://mattermost.com/pl/enable-client-side-certification',\n ENABLE_HARDENED_MODE: 'https://mattermost.com/pl/enable-hardened-mode',\n FORMAT_MESSAGES: 'https://mattermost.com/pl/format-messages',\n FILE_STORAGE: 'https://mattermost.com/pl/configure-file-storage',\n GUEST_ACCOUNTS: 'https://docs.mattermost.com/onboard/guest-accounts.html',\n HIGH_AVAILABILITY_CLUSTER: 'https://mattermost.com/pl/high-availability-cluster',\n IN_PRODUCT_NOTICES: 'https://mattermost.com/pl/in-product-notices',\n MULTI_FACTOR_AUTH: 'https://mattermost.com/pl/multi-factor-authentication',\n ONBOARD_ADVANCED_PERMISSIONS: 'https://mattermost.com/pl/advanced-permissions',\n ONBOARD_LDAP: 'https://mattermost.com/pl/setup-ldap',\n SELF_HOSTED_BILLING: HostedCustomerLinks.SELF_HOSTED_BILLING,\n SESSION_LENGTHS: 'https://mattermost.com/pl/configure-session-lengths',\n SETUP_IMAGE_PROXY: 'https://mattermost.com/pl/setup-image-proxy',\n SETUP_LDAP: 'https://mattermost.com/pl/setup-ldap',\n SETUP_PERFORMANCE_MONITORING: 'https://mattermost.com/pl/setup-performance-monitoring',\n SETUP_PUSH_NOTIFICATIONS: 'https://mattermost.com/pl/setup-push-notifications',\n SETUP_SAML: 'https://docs.mattermost.com/pl/setup-saml',\n SHARE_LINKS_TO_MESSAGES: 'https://mattermost.com/pl/share-links-to-messages',\n SITE_URL: 'https://mattermost.com/pl/configure-site-url',\n SSL_CERTIFICATE: 'https://mattermost.com/pl/setup-ssl-client-certificate',\n TRUE_UP_REVIEW: 'https://mattermost.com/pl/true-up-documentation',\n TRUSTED_CONNECTION: 'https://mattermost.com/pl/default-allow-untrusted-internal-connections',\n UPGRADE_SERVER: 'https://mattermost.com/pl/upgrade-mattermost',\n};\n\nexport const DeveloperLinks = {\n CUSTOM_SLASH_COMMANDS: 'https://mattermost.com/pl/custom-slash-commands',\n ENABLE_OAUTH2: 'https://mattermost.com/pl/enable-oauth',\n INCOMING_WEBHOOKS: 'https://mattermost.com/pl/incoming-webhooks',\n OUTGOING_WEBHOOKS: 'https://mattermost.com/pl/outgoing-webhooks',\n INTERACTIVE_MESSAGES: 'https://mattermost.com/pl/interactive-messages',\n INTERACTIVE_DIALOGS: 'https://mattermost.com/pl/interactive-dialogs',\n PERSONAL_ACCESS_TOKENS: 'https://mattermost.com/pl/personal-access-tokens',\n PLUGIN_SIGNING: 'https://mattermost.com/pl/sign-plugins',\n PLUGINS: 'https://mattermost.com/pl/plugins',\n SETUP_CUSTOM_SLASH_COMMANDS: 'https://mattermost.com/pl/setup-custom-slash-commands',\n SETUP_INCOMING_WEBHOOKS: 'https://mattermost.com/pl/setup-incoming-webhooks',\n SETUP_OAUTH2: 'https://mattermost.com/pl/setup-oauth-2.0',\n SETUP_OUTGOING_WEBHOOKS: 'https://mattermost.com/pl/setup-outgoing-webhooks',\n};\n\nexport const LicenseLinks = {\n CONTACT_SALES: 'https://mattermost.com/contact-sales/',\n TRIAL_INFO_LINK: 'https://mattermost.com/trial',\n EMBARGOED_COUNTRIES: 'https://mattermost.com/pl/limitations-for-embargoed-countries',\n SOFTWARE_SERVICES_LICENSE_AGREEMENT: 'https://mattermost.com/pl/software-and-services-license-agreement',\n SOFTWARE_SERVICES_LICENSE_AGREEMENT_TEXT: 'Software Services and License Agreement',\n UNSUPPORTED: 'https://mattermost.com/pricing/',\n};\n\nexport const MattermostLink = 'https://mattermost.com/';\n\nexport const BillingSchemes = {\n FLAT_FEE: 'flat_fee',\n PER_SEAT: 'per_seat',\n SALES_SERVE: 'sales_serve',\n};\n\nexport const RecurringIntervals = {\n YEAR: 'year',\n MONTH: 'month',\n};\n\nexport const PermissionsScope = {\n [Permissions.INVITE_USER]: 'team_scope',\n [Permissions.INVITE_GUEST]: 'team_scope',\n [Permissions.ADD_USER_TO_TEAM]: 'team_scope',\n [Permissions.MANAGE_SLASH_COMMANDS]: 'team_scope',\n [Permissions.MANAGE_OTHERS_SLASH_COMMANDS]: 'team_scope',\n [Permissions.CREATE_PUBLIC_CHANNEL]: 'team_scope',\n [Permissions.CREATE_PRIVATE_CHANNEL]: 'team_scope',\n [Permissions.MANAGE_PUBLIC_CHANNEL_MEMBERS]: 'channel_scope',\n [Permissions.MANAGE_PRIVATE_CHANNEL_MEMBERS]: 'channel_scope',\n [Permissions.ASSIGN_SYSTEM_ADMIN_ROLE]: 'system_scope',\n [Permissions.MANAGE_ROLES]: 'system_scope',\n [Permissions.MANAGE_TEAM_ROLES]: 'team_scope',\n [Permissions.MANAGE_CHANNEL_ROLES]: 'chanel_scope',\n [Permissions.MANAGE_SYSTEM]: 'system_scope',\n [Permissions.CREATE_DIRECT_CHANNEL]: 'system_scope',\n [Permissions.CREATE_GROUP_CHANNEL]: 'system_scope',\n [Permissions.MANAGE_PUBLIC_CHANNEL_PROPERTIES]: 'channel_scope',\n [Permissions.MANAGE_PRIVATE_CHANNEL_PROPERTIES]: 'channel_scope',\n [Permissions.LIST_PUBLIC_TEAMS]: 'system_scope',\n [Permissions.JOIN_PUBLIC_TEAMS]: 'system_scope',\n [Permissions.LIST_PRIVATE_TEAMS]: 'system_scope',\n [Permissions.JOIN_PRIVATE_TEAMS]: 'system_scope',\n [Permissions.LIST_TEAM_CHANNELS]: 'team_scope',\n [Permissions.JOIN_PUBLIC_CHANNELS]: 'team_scope',\n [Permissions.DELETE_PUBLIC_CHANNEL]: 'channel_scope',\n [Permissions.DELETE_PRIVATE_CHANNEL]: 'channel_scope',\n [Permissions.EDIT_OTHER_USERS]: 'system_scope',\n [Permissions.READ_CHANNEL]: 'channel_scope',\n [Permissions.READ_CHANNEL_CONTENT]: 'channel_scope',\n [Permissions.READ_PUBLIC_CHANNEL]: 'team_scope',\n [Permissions.ADD_REACTION]: 'channel_scope',\n [Permissions.REMOVE_REACTION]: 'channel_scope',\n [Permissions.REMOVE_OTHERS_REACTIONS]: 'channel_scope',\n [Permissions.PERMANENT_DELETE_USER]: 'system_scope',\n [Permissions.UPLOAD_FILE]: 'channel_scope',\n [Permissions.GET_PUBLIC_LINK]: 'system_scope',\n [Permissions.MANAGE_INCOMING_WEBHOOKS]: 'team_scope',\n [Permissions.MANAGE_OTHERS_INCOMING_WEBHOOKS]: 'team_scope',\n [Permissions.MANAGE_OUTGOING_WEBHOOKS]: 'team_scope',\n [Permissions.MANAGE_OTHERS_OUTGOING_WEBHOOKS]: 'team_scope',\n [Permissions.MANAGE_OAUTH]: 'system_scope',\n [Permissions.MANAGE_SYSTEM_WIDE_OAUTH]: 'system_scope',\n [Permissions.CREATE_POST]: 'channel_scope',\n [Permissions.CREATE_POST_PUBLIC]: 'channel_scope',\n [Permissions.EDIT_POST]: 'channel_scope',\n [Permissions.EDIT_OTHERS_POSTS]: 'channel_scope',\n [Permissions.DELETE_POST]: 'channel_scope',\n [Permissions.DELETE_OTHERS_POSTS]: 'channel_scope',\n [Permissions.REMOVE_USER_FROM_TEAM]: 'team_scope',\n [Permissions.CREATE_TEAM]: 'system_scope',\n [Permissions.MANAGE_TEAM]: 'team_scope',\n [Permissions.IMPORT_TEAM]: 'team_scope',\n [Permissions.VIEW_TEAM]: 'team_scope',\n [Permissions.LIST_USERS_WITHOUT_TEAM]: 'system_scope',\n [Permissions.CREATE_USER_ACCESS_TOKEN]: 'system_scope',\n [Permissions.READ_USER_ACCESS_TOKEN]: 'system_scope',\n [Permissions.REVOKE_USER_ACCESS_TOKEN]: 'system_scope',\n [Permissions.MANAGE_JOBS]: 'system_scope',\n [Permissions.CREATE_EMOJIS]: 'team_scope',\n [Permissions.DELETE_EMOJIS]: 'team_scope',\n [Permissions.DELETE_OTHERS_EMOJIS]: 'team_scope',\n [Permissions.USE_CHANNEL_MENTIONS]: 'channel_scope',\n [Permissions.USE_GROUP_MENTIONS]: 'channel_scope',\n [Permissions.READ_PUBLIC_CHANNEL_GROUPS]: 'channel_scope',\n [Permissions.READ_PRIVATE_CHANNEL_GROUPS]: 'channel_scope',\n [Permissions.CONVERT_PUBLIC_CHANNEL_TO_PRIVATE]: 'channel_scope',\n [Permissions.CONVERT_PRIVATE_CHANNEL_TO_PUBLIC]: 'channel_scope',\n [Permissions.MANAGE_SHARED_CHANNELS]: 'system_scope',\n [Permissions.MANAGE_SECURE_CONNECTIONS]: 'system_scope',\n [Permissions.PLAYBOOK_PUBLIC_CREATE]: 'team_scope',\n [Permissions.PLAYBOOK_PUBLIC_MANAGE_PROPERTIES]: 'playbook_scope',\n [Permissions.PLAYBOOK_PUBLIC_MANAGE_MEMBERS]: 'playbook_scope',\n [Permissions.PLAYBOOK_PUBLIC_VIEW]: 'playbook_scope',\n [Permissions.PLAYBOOK_PUBLIC_MAKE_PRIVATE]: 'playbook_scope',\n [Permissions.PLAYBOOK_PRIVATE_CREATE]: 'team_scope',\n [Permissions.PLAYBOOK_PRIVATE_MANAGE_PROPERTIES]: 'playbook_scope',\n [Permissions.PLAYBOOK_PRIVATE_MANAGE_MEMBERS]: 'playbook_scope',\n [Permissions.PLAYBOOK_PRIVATE_VIEW]: 'playbook_scope',\n [Permissions.PLAYBOOK_PRIVATE_MAKE_PUBLIC]: 'playbook_scope',\n [Permissions.RUN_CREATE]: 'playbook_scope',\n [Permissions.RUN_MANAGE_MEMBERS]: 'run_scope',\n [Permissions.RUN_MANAGE_PROPERTIES]: 'run_scope',\n [Permissions.RUN_VIEW]: 'run_scope',\n [Permissions.CREATE_CUSTOM_GROUP]: 'system_scope',\n [Permissions.EDIT_CUSTOM_GROUP]: 'system_scope',\n [Permissions.DELETE_CUSTOM_GROUP]: 'system_scope',\n [Permissions.RESTORE_CUSTOM_GROUP]: 'system_scope',\n [Permissions.MANAGE_CUSTOM_GROUP_MEMBERS]: 'system_scope',\n [Permissions.USE_SLASH_COMMANDS]: 'channel_scope',\n [Permissions.ADD_BOOKMARK_PUBLIC_CHANNEL]: 'channel_scope',\n [Permissions.EDIT_BOOKMARK_PUBLIC_CHANNEL]: 'channel_scope',\n [Permissions.DELETE_BOOKMARK_PUBLIC_CHANNEL]: 'channel_scope',\n [Permissions.ORDER_BOOKMARK_PUBLIC_CHANNEL]: 'channel_scope',\n [Permissions.ADD_BOOKMARK_PRIVATE_CHANNEL]: 'channel_scope',\n [Permissions.EDIT_BOOKMARK_PRIVATE_CHANNEL]: 'channel_scope',\n [Permissions.DELETE_BOOKMARK_PRIVATE_CHANNEL]: 'channel_scope',\n [Permissions.ORDER_BOOKMARK_PRIVATE_CHANNEL]: 'channel_scope',\n};\n\nexport const DefaultRolePermissions = {\n all_users: [\n Permissions.CREATE_DIRECT_CHANNEL,\n Permissions.CREATE_GROUP_CHANNEL,\n Permissions.CREATE_TEAM,\n Permissions.LIST_TEAM_CHANNELS,\n Permissions.JOIN_PUBLIC_CHANNELS,\n Permissions.READ_PUBLIC_CHANNEL,\n Permissions.VIEW_TEAM,\n Permissions.CREATE_PUBLIC_CHANNEL,\n Permissions.MANAGE_PUBLIC_CHANNEL_PROPERTIES,\n Permissions.DELETE_PUBLIC_CHANNEL,\n Permissions.CREATE_PRIVATE_CHANNEL,\n Permissions.MANAGE_PRIVATE_CHANNEL_PROPERTIES,\n Permissions.DELETE_PRIVATE_CHANNEL,\n Permissions.INVITE_USER,\n Permissions.ADD_USER_TO_TEAM,\n Permissions.READ_CHANNEL,\n Permissions.READ_CHANNEL_CONTENT,\n Permissions.ADD_REACTION,\n Permissions.REMOVE_REACTION,\n Permissions.MANAGE_PUBLIC_CHANNEL_MEMBERS,\n Permissions.READ_PUBLIC_CHANNEL_GROUPS,\n Permissions.READ_PRIVATE_CHANNEL_GROUPS,\n Permissions.UPLOAD_FILE,\n Permissions.GET_PUBLIC_LINK,\n Permissions.CREATE_POST,\n Permissions.MANAGE_PRIVATE_CHANNEL_MEMBERS,\n Permissions.DELETE_POST,\n Permissions.EDIT_POST,\n Permissions.USE_CHANNEL_MENTIONS,\n Permissions.USE_GROUP_MENTIONS,\n Permissions.CREATE_CUSTOM_GROUP,\n Permissions.EDIT_CUSTOM_GROUP,\n Permissions.DELETE_CUSTOM_GROUP,\n Permissions.MANAGE_CUSTOM_GROUP_MEMBERS,\n Permissions.PLAYBOOK_PUBLIC_CREATE,\n Permissions.PLAYBOOK_PRIVATE_CREATE,\n Permissions.PLAYBOOK_PUBLIC_MANAGE_MEMBERS,\n Permissions.PLAYBOOK_PRIVATE_MANAGE_MEMBERS,\n Permissions.PLAYBOOK_PUBLIC_MANAGE_PROPERTIES,\n Permissions.PLAYBOOK_PRIVATE_MANAGE_PROPERTIES,\n Permissions.RUN_CREATE,\n Permissions.USE_SLASH_COMMANDS,\n Permissions.DELETE_EMOJIS,\n Permissions.INVITE_GUEST,\n Permissions.CREATE_EMOJIS,\n Permissions.RUN_VIEW,\n Permissions.RESTORE_CUSTOM_GROUP,\n Permissions.ADD_BOOKMARK_PUBLIC_CHANNEL,\n Permissions.EDIT_BOOKMARK_PUBLIC_CHANNEL,\n Permissions.DELETE_BOOKMARK_PUBLIC_CHANNEL,\n Permissions.ORDER_BOOKMARK_PUBLIC_CHANNEL,\n Permissions.ADD_BOOKMARK_PRIVATE_CHANNEL,\n Permissions.EDIT_BOOKMARK_PRIVATE_CHANNEL,\n Permissions.DELETE_BOOKMARK_PRIVATE_CHANNEL,\n Permissions.ORDER_BOOKMARK_PRIVATE_CHANNEL,\n ],\n channel_admin: [\n Permissions.MANAGE_CHANNEL_ROLES,\n Permissions.CREATE_POST,\n Permissions.ADD_REACTION,\n Permissions.REMOVE_REACTION,\n Permissions.MANAGE_PUBLIC_CHANNEL_MEMBERS,\n Permissions.READ_PUBLIC_CHANNEL_GROUPS,\n Permissions.READ_PRIVATE_CHANNEL_GROUPS,\n Permissions.MANAGE_PRIVATE_CHANNEL_MEMBERS,\n Permissions.USE_CHANNEL_MENTIONS,\n Permissions.USE_GROUP_MENTIONS,\n Permissions.ADD_BOOKMARK_PUBLIC_CHANNEL,\n Permissions.EDIT_BOOKMARK_PUBLIC_CHANNEL,\n Permissions.DELETE_BOOKMARK_PUBLIC_CHANNEL,\n Permissions.ORDER_BOOKMARK_PUBLIC_CHANNEL,\n Permissions.ADD_BOOKMARK_PRIVATE_CHANNEL,\n Permissions.EDIT_BOOKMARK_PRIVATE_CHANNEL,\n Permissions.DELETE_BOOKMARK_PRIVATE_CHANNEL,\n Permissions.ORDER_BOOKMARK_PRIVATE_CHANNEL,\n ],\n team_admin: [\n Permissions.EDIT_OTHERS_POSTS,\n Permissions.REMOVE_USER_FROM_TEAM,\n Permissions.MANAGE_TEAM,\n Permissions.IMPORT_TEAM,\n Permissions.MANAGE_TEAM_ROLES,\n Permissions.MANAGE_CHANNEL_ROLES,\n Permissions.MANAGE_SLASH_COMMANDS,\n Permissions.MANAGE_OTHERS_SLASH_COMMANDS,\n Permissions.MANAGE_INCOMING_WEBHOOKS,\n Permissions.MANAGE_OUTGOING_WEBHOOKS,\n Permissions.DELETE_POST,\n Permissions.DELETE_OTHERS_POSTS,\n Permissions.MANAGE_OTHERS_OUTGOING_WEBHOOKS,\n Permissions.ADD_REACTION,\n Permissions.MANAGE_OTHERS_INCOMING_WEBHOOKS,\n Permissions.USE_CHANNEL_MENTIONS,\n Permissions.MANAGE_PUBLIC_CHANNEL_MEMBERS,\n Permissions.CONVERT_PUBLIC_CHANNEL_TO_PRIVATE,\n Permissions.CONVERT_PRIVATE_CHANNEL_TO_PUBLIC,\n Permissions.READ_PUBLIC_CHANNEL_GROUPS,\n Permissions.READ_PRIVATE_CHANNEL_GROUPS,\n Permissions.MANAGE_PRIVATE_CHANNEL_MEMBERS,\n Permissions.CREATE_POST,\n Permissions.REMOVE_REACTION,\n Permissions.USE_GROUP_MENTIONS,\n Permissions.ADD_BOOKMARK_PUBLIC_CHANNEL,\n Permissions.EDIT_BOOKMARK_PUBLIC_CHANNEL,\n Permissions.DELETE_BOOKMARK_PUBLIC_CHANNEL,\n Permissions.ORDER_BOOKMARK_PUBLIC_CHANNEL,\n Permissions.ADD_BOOKMARK_PRIVATE_CHANNEL,\n Permissions.EDIT_BOOKMARK_PRIVATE_CHANNEL,\n Permissions.DELETE_BOOKMARK_PRIVATE_CHANNEL,\n Permissions.ORDER_BOOKMARK_PRIVATE_CHANNEL,\n ],\n guests: [\n Permissions.EDIT_POST,\n Permissions.ADD_REACTION,\n Permissions.REMOVE_REACTION,\n Permissions.USE_CHANNEL_MENTIONS,\n Permissions.READ_CHANNEL,\n Permissions.UPLOAD_FILE,\n Permissions.CREATE_POST,\n ],\n};\n\n// ModeratedPermissions are permissions that can be turned off for members and guests\n// on a per channel basis. These permissions are on by default for team/channel admins.\nexport const ModeratedPermissions = [\n Permissions.CREATE_POST,\n Permissions.UPLOAD_FILE,\n Permissions.ADD_REACTION,\n Permissions.REMOVE_REACTION,\n Permissions.MANAGE_PUBLIC_CHANNEL_MEMBERS,\n Permissions.MANAGE_PRIVATE_CHANNEL_MEMBERS,\n Permissions.USE_CHANNEL_MENTIONS,\n Permissions.ADD_BOOKMARK_PUBLIC_CHANNEL,\n Permissions.EDIT_BOOKMARK_PUBLIC_CHANNEL,\n Permissions.DELETE_BOOKMARK_PUBLIC_CHANNEL,\n Permissions.ORDER_BOOKMARK_PUBLIC_CHANNEL,\n Permissions.ADD_BOOKMARK_PRIVATE_CHANNEL,\n Permissions.EDIT_BOOKMARK_PRIVATE_CHANNEL,\n Permissions.DELETE_BOOKMARK_PRIVATE_CHANNEL,\n Permissions.ORDER_BOOKMARK_PRIVATE_CHANNEL,\n];\n\nexport const Locations = {\n CENTER: 'CENTER' as const,\n RHS_ROOT: 'RHS_ROOT' as const,\n RHS_COMMENT: 'RHS_COMMENT' as const,\n SEARCH: 'SEARCH' as const,\n NO_WHERE: 'NO_WHERE' as const,\n MODAL: 'MODAL' as const,\n};\n\nexport const PostListRowListIds = {\n DATE_LINE: PostListUtils.DATE_LINE,\n START_OF_NEW_MESSAGES: PostListUtils.START_OF_NEW_MESSAGES,\n CHANNEL_INTRO_MESSAGE: 'CHANNEL_INTRO_MESSAGE',\n OLDER_MESSAGES_LOADER: 'OLDER_MESSAGES_LOADER',\n NEWER_MESSAGES_LOADER: 'NEWER_MESSAGES_LOADER',\n LOAD_OLDER_MESSAGES_TRIGGER: 'LOAD_OLDER_MESSAGES_TRIGGER',\n LOAD_NEWER_MESSAGES_TRIGGER: 'LOAD_NEWER_MESSAGES_TRIGGER',\n};\n\nexport const exportFormats = {\n EXPORT_FORMAT_CSV: 'csv',\n EXPORT_FORMAT_ACTIANCE: 'actiance',\n EXPORT_FORMAT_GLOBALRELAY: 'globalrelay',\n};\n\nexport const CacheTypes = {\n REDIS: 'redis',\n LRU: 'lru',\n};\n\nexport const ZoomSettings = {\n DEFAULT_SCALE: 1.75,\n SCALE_DELTA: 0.25,\n MIN_SCALE: 0.25,\n MAX_SCALE: 3.0,\n};\n\nexport const Constants = {\n SettingsTypes,\n JobTypes,\n Preferences,\n SocketEvents,\n ActionTypes,\n UserStatuses,\n TutorialSteps,\n AdminTutorialSteps,\n CrtTutorialSteps,\n CrtTutorialTriggerSteps,\n CrtThreadPaneSteps,\n PostTypes,\n ErrorPageTypes,\n AnnouncementBarTypes,\n AnnouncementBarMessages,\n FileTypes,\n Locations,\n PostListRowListIds,\n MAX_POST_VISIBILITY: 1000000,\n REMOTE_USERS_HOUR_LIMIT_END_OF_THE_DAY: 22,\n REMOTE_USERS_HOUR_LIMIT_BEGINNING_OF_THE_DAY: 6,\n\n IGNORE_POST_TYPES: [PostTypes.JOIN_LEAVE, PostTypes.JOIN_TEAM, PostTypes.LEAVE_TEAM, PostTypes.JOIN_CHANNEL, PostTypes.LEAVE_CHANNEL, PostTypes.REMOVE_FROM_CHANNEL, PostTypes.ADD_REMOVE],\n\n PayloadSources: keyMirror({\n SERVER_ACTION: null,\n VIEW_ACTION: null,\n }),\n\n // limit of users to show the lhs invite members button highlighted\n USER_LIMIT: 10,\n\n StatTypes,\n STAT_MAX_ACTIVE_USERS: 20,\n STAT_MAX_NEW_USERS: 20,\n\n ScrollTypes: {\n FREE: 1,\n BOTTOM: 2,\n SIDEBBAR_OPEN: 3,\n NEW_MESSAGE: 4,\n POST: 5,\n },\n\n // This is the same limit set https://github.com/mattermost/mattermost-server/blob/master/model/config.go#L105\n MAXIMUM_LOGIN_ATTEMPTS_DEFAULT: 10,\n\n // This is the same limit set https://github.com/mattermost/mattermost-server/blob/master/api4/team.go#L23\n MAX_ADD_MEMBERS_BATCH: 256,\n\n SPECIAL_MENTIONS: ['all', 'channel', 'here'],\n PLAN_MENTIONS: /Professional plan|Enterprise plan|Enterprise trial/gi,\n SPECIAL_MENTIONS_REGEX: /(?:\\B|\\b_+)@(channel|all|here)(?!(\\.|-|_)*[^\\W_])/gi,\n SUM_OF_MEMBERS_MENTION_REGEX: /\\d+ members/gi,\n ALL_MENTION_REGEX: /(?:\\B|\\b_+)@(all)(?!(\\.|-|_)*[^\\W_])/gi,\n CHANNEL_MENTION_REGEX: /(?:\\B|\\b_+)@(channel)(?!(\\.|-|_)*[^\\W_])/gi,\n HERE_MENTION_REGEX: /(?:\\B|\\b_+)@(here)(?!(\\.|-|_)*[^\\W_])/gi,\n NOTIFY_ALL_MEMBERS: 5,\n ALL_MEMBERS_MENTIONS_REGEX: /(?:\\B|\\b_+)@(channel|all)(?!(\\.|-|_)*[^\\W_])/gi,\n MENTIONS_REGEX: /(?:\\B|\\b_+)@([a-z0-9.\\-_]+)/gi,\n DEFAULT_CHARACTER_LIMIT: 4000,\n IMAGE_TYPE_GIF: 'gif',\n TEXT_TYPES: ['txt', 'rtf', 'vtt'],\n IMAGE_TYPES: ['jpg', 'gif', 'bmp', 'png', 'jpeg', 'tiff', 'tif', 'psd', 'webp'],\n AUDIO_TYPES: ['mp3', 'wav', 'wma', 'm4a', 'flac', 'aac', 'ogg', 'm4r'],\n VIDEO_TYPES: ['mp4', 'avi', 'webm', 'mkv', 'wmv', 'mpg', 'mov', 'flv'],\n PRESENTATION_TYPES: ['ppt', 'pptx'],\n SPREADSHEET_TYPES: ['xlsx', 'csv'],\n WORD_TYPES: ['doc', 'docx'],\n CHANNEL_HEADER_HEIGHT: 62,\n CODE_TYPES: ['applescript', 'as', 'atom', 'bas', 'bash', 'boot', 'c', 'c++', 'cake', 'cc', 'cjsx', 'cl2', 'clj', 'cljc', 'cljs', 'cljs.hl', 'cljscm', 'cljx', '_coffee', 'coffee', 'cpp', 'cs', 'csharp', 'cson', 'css', 'd', 'dart', 'delphi', 'dfm', 'di', 'diff', 'django', 'docker', 'dockerfile', 'dpr', 'erl', 'ex', 'exs', 'f90', 'f95', 'freepascal', 'fs', 'fsharp', 'gcode', 'gemspec', 'go', 'groovy', 'gyp', 'h', 'h++', 'handlebars', 'hbs', 'hic', 'hpp', 'hs', 'html', 'html.handlebars', 'html.hbs', 'hx', 'iced', 'irb', 'java', 'jinja', 'jl', 'js', 'json', 'jsp', 'jsx', 'kt', 'ktm', 'kts', 'lazarus', 'less', 'lfm', 'lisp', 'log', 'lpr', 'lua', 'm', 'mak', 'matlab', 'md', 'mk', 'mkd', 'mkdown', 'ml', 'mm', 'nc', 'obj-c', 'objc', 'osascript', 'pas', 'pascal', 'perl', 'php', 'php3', 'php4', 'php5', 'php6', 'pl', 'plist', 'podspec', 'pp', 'ps', 'ps1', 'py', 'r', 'rb', 'rs', 'rss', 'ruby', 'scala', 'scm', 'scpt', 'scss', 'sh', 'sld', 'sql', 'st', 'styl', 'swift', 'tex', 'thor', 'v', 'vb', 'vbnet', 'vbs', 'veo', 'xhtml', 'xml', 'xsl', 'yaml', 'zsh'],\n PDF_TYPES: ['pdf'],\n PATCH_TYPES: ['patch'],\n SVG_TYPES: ['svg'],\n ICON_FROM_TYPE: {\n audio: audioIcon,\n video: videoIcon,\n spreadsheet: excelIcon,\n presentation: pptIcon,\n pdf: pdfIcon,\n code: codeIcon,\n word: wordIcon,\n patch: patchIcon,\n other: genericIcon,\n },\n ICON_NAME_FROM_TYPE: {\n text: 'text',\n audio: 'audio',\n video: 'video',\n spreadsheet: 'excel',\n presentation: 'ppt',\n pdf: 'pdf',\n code: 'code',\n word: 'word',\n patch: 'patch',\n other: 'generic',\n image: 'image',\n },\n MAX_UPLOAD_FILES: 10,\n MAX_FILENAME_LENGTH: 35,\n EXPANDABLE_INLINE_IMAGE_MIN_HEIGHT: 100,\n THUMBNAIL_WIDTH: 128,\n THUMBNAIL_HEIGHT: 100,\n PREVIEWER_HEIGHT: 170,\n WEB_VIDEO_WIDTH: 640,\n WEB_VIDEO_HEIGHT: 480,\n MOBILE_VIDEO_WIDTH: 480,\n MOBILE_VIDEO_HEIGHT: 360,\n\n DESKTOP_SCREEN_WIDTH: 1679,\n TABLET_SCREEN_WIDTH: 1020,\n MOBILE_SCREEN_WIDTH: 768,\n\n SMALL_SIDEBAR_BREAKPOINT: 900,\n MEDIUM_SIDEBAR_BREAKPOINT: 1200,\n LARGE_SIDEBAR_BREAKPOINT: 1680,\n\n POST_MODAL_PADDING: 170,\n SCROLL_DELAY: 2000,\n SCROLL_PAGE_FRACTION: 3,\n DEFAULT_CHANNEL: 'town-square',\n DEFAULT_CHANNEL_UI_NAME: 'Town Square',\n OFFTOPIC_CHANNEL: 'off-topic',\n OFFTOPIC_CHANNEL_UI_NAME: 'Off-Topic',\n GITLAB_SERVICE: 'gitlab',\n GOOGLE_SERVICE: 'google',\n OFFICE365_SERVICE: 'office365',\n OAUTH_SERVICES: ['gitlab', 'google', 'office365', 'openid'],\n OPENID_SERVICE: 'openid',\n OPENID_SERVICE_FEATURE_DISCOVERY: 'openid_feature_discovery',\n OPENID_SCOPES: 'profile openid email',\n EMAIL_SERVICE: 'email',\n LDAP_SERVICE: 'ldap',\n SAML_SERVICE: 'saml',\n USERNAME_SERVICE: 'username',\n SIGNIN_CHANGE: 'signin_change',\n PASSWORD_CHANGE: 'password_change',\n GET_TERMS_ERROR: 'get_terms_error',\n TERMS_REJECTED: 'terms_rejected',\n SIGNIN_VERIFIED: 'verified',\n CREATE_LDAP: 'create_ldap',\n SESSION_EXPIRED: 'expired',\n POST_AREA_HEIGHT: 80,\n POST_CHUNK_SIZE: 60,\n PROFILE_CHUNK_SIZE: 100,\n POST_FOCUS_CONTEXT_RADIUS: 10,\n POST_LOADING: 'loading',\n POST_FAILED: 'failed',\n POST_DELETED: 'deleted',\n POST_UPDATED: 'updated',\n SYSTEM_MESSAGE_PREFIX: 'system_',\n SUGGESTION_LIST_MAXHEIGHT: 292,\n SUGGESTION_LIST_MAXWIDTH: 496,\n SUGGESTION_LIST_SPACE_RHS: 420,\n MOBILE_SUGGESTION_LIST_SPACE_RHS: 220,\n SUGGESTION_LIST_MODAL_WIDTH: 496,\n MENTION_NAME_PADDING_LEFT: 2.4,\n AVATAR_WIDTH: 24,\n AUTO_RESPONDER: 'system_auto_responder',\n RESERVED_TEAM_NAMES: [\n 'signup',\n 'login',\n 'admin',\n 'channel',\n 'post',\n 'api',\n 'oauth',\n 'error',\n 'help',\n 'plugins',\n 'playbooks',\n 'boards',\n ],\n RESERVED_USERNAMES: [\n 'valet',\n 'all',\n 'channel',\n 'here',\n 'matterbot',\n 'system',\n ],\n MONTHS: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n MAX_DMS: 20,\n MAX_USERS_IN_GM: 8,\n MIN_USERS_IN_GM: 3,\n MAX_CHANNEL_POPOVER_COUNT: 100,\n DM_AND_GM_SHOW_COUNTS: [10, 15, 20, 40],\n HIGHEST_DM_SHOW_COUNT: 10000,\n DM_CHANNEL: 'D',\n GM_CHANNEL: 'G',\n OPEN_CHANNEL: 'O',\n PRIVATE_CHANNEL: 'P',\n ARCHIVED_CHANNEL: 'archive',\n INVITE_TEAM: 'I',\n OPEN_TEAM: 'O',\n THREADS: 'threads',\n MAX_POST_LEN: 4000,\n EMOJI_SIZE: 16,\n DEFAULT_EMOJI_PICKER_LEFT_OFFSET: 87,\n DEFAULT_EMOJI_PICKER_RIGHT_OFFSET: 15,\n EMOJI_PICKER_WIDTH_OFFSET: 295,\n SIDEBAR_MINIMUM_WIDTH: 640,\n THEME_ELEMENTS: [\n {\n group: 'sidebarElements',\n id: 'sidebarBg',\n uiName: 'Sidebar BG',\n },\n {\n group: 'sidebarElements',\n id: 'sidebarText',\n uiName: 'Sidebar Text',\n },\n {\n group: 'sidebarElements',\n id: 'sidebarHeaderBg',\n uiName: 'Sidebar Header BG',\n },\n {\n group: 'sidebarElements',\n id: 'sidebarTeamBarBg',\n uiName: 'Team Sidebar BG',\n },\n {\n group: 'sidebarElements',\n id: 'sidebarHeaderTextColor',\n uiName: 'Sidebar Header Text',\n },\n {\n group: 'sidebarElements',\n id: 'sidebarUnreadText',\n uiName: 'Sidebar Unread Text',\n },\n {\n group: 'sidebarElements',\n id: 'sidebarTextHoverBg',\n uiName: 'Sidebar Text Hover BG',\n },\n {\n group: 'sidebarElements',\n id: 'sidebarTextActiveBorder',\n uiName: 'Sidebar Text Active Border',\n },\n {\n group: 'sidebarElements',\n id: 'sidebarTextActiveColor',\n uiName: 'Sidebar Text Active Color',\n },\n {\n group: 'sidebarElements',\n id: 'onlineIndicator',\n uiName: 'Online Indicator',\n },\n {\n group: 'sidebarElements',\n id: 'awayIndicator',\n uiName: 'Away Indicator',\n },\n {\n group: 'sidebarElements',\n id: 'dndIndicator',\n uiName: 'Away Indicator',\n },\n {\n group: 'sidebarElements',\n id: 'mentionBg',\n uiName: 'Mention Jewel BG',\n },\n {\n group: 'sidebarElements',\n id: 'mentionColor',\n uiName: 'Mention Jewel Text',\n },\n {\n group: 'centerChannelElements',\n id: 'centerChannelBg',\n uiName: 'Center Channel BG',\n },\n {\n group: 'centerChannelElements',\n id: 'centerChannelColor',\n uiName: 'Center Channel Text',\n },\n {\n group: 'centerChannelElements',\n id: 'newMessageSeparator',\n uiName: 'New Message Separator',\n },\n {\n group: 'centerChannelElements',\n id: 'errorTextColor',\n uiName: 'Error Text Color',\n },\n {\n group: 'centerChannelElements',\n id: 'mentionHighlightBg',\n uiName: 'Mention Highlight BG',\n },\n {\n group: 'linkAndButtonElements',\n id: 'linkColor',\n uiName: 'Link Color',\n },\n {\n group: 'centerChannelElements',\n id: 'mentionHighlightLink',\n uiName: 'Mention Highlight Link',\n },\n {\n group: 'linkAndButtonElements',\n id: 'buttonBg',\n uiName: 'Button BG',\n },\n {\n group: 'linkAndButtonElements',\n id: 'buttonColor',\n uiName: 'Button Text',\n },\n {\n group: 'centerChannelElements',\n id: 'codeTheme',\n uiName: 'Code Theme',\n themes: [\n {\n id: 'solarized-dark',\n uiName: 'Solarized Dark',\n cssURL: solarizedDarkCSS,\n iconURL: solarizedDarkIcon,\n },\n {\n id: 'solarized-light',\n uiName: 'Solarized Light',\n cssURL: solarizedLightCSS,\n iconURL: solarizedLightIcon,\n },\n {\n id: 'github',\n uiName: 'GitHub',\n cssURL: githubCSS,\n iconURL: githubIcon,\n },\n {\n id: 'monokai',\n uiName: 'Monokai',\n cssURL: monokaiCSS,\n iconURL: monokaiIcon,\n },\n ],\n },\n ],\n DEFAULT_CODE_THEME: 'github',\n\n // KeyCodes\n // key[0]: used for KeyboardEvent.key\n // key[1]: used for KeyboardEvent.keyCode\n // key[2]: used for KeyboardEvent.code\n\n // KeyboardEvent.code is used as primary check to support multiple keyborad layouts\n // support of KeyboardEvent.code is just in chrome and firefox so using key and keyCode for better browser support\n\n KeyCodes: ({\n BACKSPACE: ['Backspace', 8],\n TAB: ['Tab', 9],\n ENTER: ['Enter', 13],\n SHIFT: ['Shift', 16],\n CTRL: ['Control', 17],\n ALT: ['Alt', 18],\n CAPS_LOCK: ['CapsLock', 20],\n ESCAPE: ['Escape', 27],\n SPACE: [' ', 32],\n PAGE_UP: ['PageUp', 33],\n PAGE_DOWN: ['PageDown', 34],\n END: ['End', 35],\n HOME: ['Home', 36],\n LEFT: ['ArrowLeft', 37],\n UP: ['ArrowUp', 38],\n RIGHT: ['ArrowRight', 39],\n DOWN: ['ArrowDown', 40],\n INSERT: ['Insert', 45],\n DELETE: ['Delete', 46],\n ZERO: ['0', 48],\n ONE: ['1', 49],\n TWO: ['2', 50],\n THREE: ['3', 51],\n FOUR: ['4', 52],\n FIVE: ['5', 53],\n SIX: ['6', 54],\n SEVEN: ['7', 55],\n EIGHT: ['8', 56],\n NINE: ['9', 57],\n A: ['a', 65],\n B: ['b', 66],\n C: ['c', 67],\n D: ['d', 68],\n E: ['e', 69],\n F: ['f', 70],\n G: ['g', 71],\n H: ['h', 72],\n I: ['i', 73],\n J: ['j', 74],\n K: ['k', 75],\n L: ['l', 76],\n M: ['m', 77],\n N: ['n', 78],\n O: ['o', 79],\n P: ['p', 80],\n Q: ['q', 81],\n R: ['r', 82],\n S: ['s', 83],\n T: ['t', 84],\n U: ['u', 85],\n V: ['v', 86],\n W: ['w', 87],\n X: ['x', 88],\n Y: ['y', 89],\n Z: ['z', 90],\n CMD: ['Meta', 91],\n MENU: ['ContextMenu', 93],\n NUMPAD_0: ['0', 96],\n NUMPAD_1: ['1', 97],\n NUMPAD_2: ['2', 98],\n NUMPAD_3: ['3', 99],\n NUMPAD_4: ['4', 100],\n NUMPAD_5: ['5', 101],\n NUMPAD_6: ['6', 102],\n NUMPAD_7: ['7', 103],\n NUMPAD_8: ['8', 104],\n NUMPAD_9: ['9', 105],\n MULTIPLY: ['*', 106],\n ADD: ['+', 107],\n SUBTRACT: ['-', 109],\n DECIMAL: ['.', 110],\n DIVIDE: ['/', 111],\n F1: ['F1', 112],\n F2: ['F2', 113],\n F3: ['F3', 114],\n F4: ['F4', 115],\n F5: ['F5', 116],\n F6: ['F6', 117],\n F7: ['F7', 118],\n F8: ['F8', 119],\n F9: ['F9', 120],\n F10: ['F10', 121],\n F11: ['F11', 122],\n F12: ['F12', 123],\n NUM_LOCK: ['NumLock', 144],\n SEMICOLON: [';', 186],\n EQUAL: ['=', 187],\n COMMA: [',', 188],\n DASH: ['-', 189],\n PERIOD: ['.', 190],\n FORWARD_SLASH: ['/', 191],\n TILDE: ['~', 192], // coudnt find the key or even get code from browser - no reference in code as of now\n OPEN_BRACKET: ['[', 219],\n BACK_SLASH: ['\\\\', 220],\n CLOSE_BRACKET: [']', 221],\n COMPOSING: ['Composing', 229],\n } as Record<string, [string, number]>),\n CODE_PREVIEW_MAX_FILE_SIZE: 500000, // 500 KB\n HighlightedLanguages: {\n '1c': {name: '1C:Enterprise', extensions: ['bsl', 'os'], aliases: ['bsl']},\n actionscript: {name: 'ActionScript', extensions: ['as'], aliases: ['as', 'as3']},\n applescript: {name: 'AppleScript', extensions: ['applescript', 'osascript', 'scpt'], aliases: ['osascript']},\n bash: {name: 'Bash', extensions: ['sh'], aliases: ['sh', 'zsh']},\n clojure: {name: 'Clojure', extensions: ['clj', 'boot', 'cl2', 'cljc', 'cljs', 'cljs.hl', 'cljscm', 'cljx', 'hic'], aliases: ['clj']},\n coffeescript: {name: 'CoffeeScript', extensions: ['coffee', '_coffee', 'cake', 'cjsx', 'cson', 'iced'], aliases: ['coffee', 'coffee-script']},\n cpp: {name: 'C/C++', extensions: ['cpp', 'c', 'cc', 'h', 'c++', 'h++', 'hpp'], aliases: ['c++', 'c']},\n csharp: {name: 'C#', extensions: ['cs', 'csharp'], aliases: ['c#', 'cs', 'csharp']},\n css: {name: 'CSS', extensions: ['css']},\n d: {name: 'D', extensions: ['d', 'di'], aliases: ['dlang']},\n dart: {name: 'Dart', extensions: ['dart']},\n delphi: {name: 'Delphi', extensions: ['delphi', 'dpr', 'dfm', 'pas', 'pascal', 'freepascal', 'lazarus', 'lpr', 'lfm'], aliases: ['pas', 'pascal']},\n diff: {name: 'Diff', extensions: ['diff', 'patch'], aliases: ['patch', 'udiff']},\n django: {name: 'Django', extensions: ['django', 'jinja'], aliases: ['jinja']},\n dockerfile: {name: 'Dockerfile', extensions: ['dockerfile', 'docker'], aliases: ['docker']},\n elixir: {name: 'Elixir', extensions: ['ex', 'exs'], aliases: ['ex', 'exs']},\n erlang: {name: 'Erlang', extensions: ['erl'], aliases: ['erl']},\n fortran: {name: 'Fortran', extensions: ['f90', 'f95'], aliases: ['f90', 'f95']},\n fsharp: {name: 'F#', extensions: ['fsharp', 'fs'], aliases: ['fs']},\n gcode: {name: 'G-Code', extensions: ['gcode', 'nc']},\n go: {name: 'Go', extensions: ['go'], aliases: ['golang']},\n groovy: {name: 'Groovy', extensions: ['groovy']},\n handlebars: {name: 'Handlebars', extensions: ['handlebars', 'hbs', 'html.hbs', 'html.handlebars'], aliases: ['hbs', 'mustache']},\n haskell: {name: 'Haskell', extensions: ['hs'], aliases: ['hs']},\n haxe: {name: 'Haxe', extensions: ['hx'], aliases: ['hx']},\n java: {name: 'Java', extensions: ['java', 'jsp']},\n javascript: {name: 'JavaScript', extensions: ['js', 'jsx'], aliases: ['js']},\n json: {name: 'JSON', extensions: ['json']},\n julia: {name: 'Julia', extensions: ['jl'], aliases: ['jl']},\n kotlin: {name: 'Kotlin', extensions: ['kt', 'ktm', 'kts'], aliases: ['kt']},\n latex: {name: 'LaTeX', extensions: ['tex'], aliases: ['tex']},\n less: {name: 'Less', extensions: ['less']},\n lisp: {name: 'Lisp', extensions: ['lisp']},\n lua: {name: 'Lua', extensions: ['lua']},\n makefile: {name: 'Makefile', extensions: ['mk', 'mak'], aliases: ['make', 'mf', 'gnumake', 'bsdmake', 'mk']},\n markdown: {name: 'Markdown', extensions: ['md', 'mkdown', 'mkd'], aliases: ['md', 'mkd']},\n matlab: {name: 'Matlab', extensions: ['matlab', 'm'], aliases: ['m']},\n objectivec: {name: 'Objective C', extensions: ['mm', 'objc', 'obj-c'], aliases: ['objective_c', 'objc']},\n ocaml: {name: 'OCaml', extensions: ['ml'], aliases: ['ml']},\n perl: {name: 'Perl', extensions: ['perl', 'pl'], aliases: ['pl']},\n pgsql: {name: 'PostgreSQL', extensions: ['pgsql', 'postgres', 'postgresql'], aliases: ['postgres', 'postgresql']},\n php: {name: 'PHP', extensions: ['php', 'php3', 'php4', 'php5', 'php6'], aliases: ['php3', 'php4', 'php5', 'php6']},\n powershell: {name: 'PowerShell', extensions: ['ps', 'ps1'], aliases: ['posh']},\n puppet: {name: 'Puppet', extensions: ['pp'], aliases: ['pp']},\n python: {name: 'Python', extensions: ['py', 'gyp'], aliases: ['py']},\n r: {name: 'R', extensions: ['r'], aliases: ['r', 's']},\n ruby: {name: 'Ruby', extensions: ['ruby', 'rb', 'gemspec', 'podspec', 'thor', 'irb'], aliases: ['rb']},\n rust: {name: 'Rust', extensions: ['rs'], aliases: ['rs']},\n scala: {name: 'Scala', extensions: ['scala']},\n scheme: {name: 'Scheme', extensions: ['scm', 'sld'], aliases: ['scm']},\n scss: {name: 'SCSS', extensions: ['scss']},\n smalltalk: {name: 'Smalltalk', extensions: ['st'], aliases: ['st', 'squeak']},\n sql: {name: 'SQL', extensions: ['sql']},\n stylus: {name: 'Stylus', extensions: ['styl'], aliases: ['styl']},\n swift: {name: 'Swift', extensions: ['swift']},\n text: {name: 'Text', extensions: ['txt', 'log'], aliases: ['txt']},\n typescript: {name: 'TypeScript', extensions: ['ts', 'tsx'], aliases: ['ts', 'tsx']},\n vbnet: {name: 'VB.Net', extensions: ['vbnet', 'vb', 'bas'], aliases: ['vb', 'visualbasic']},\n vbscript: {name: 'VBScript', extensions: ['vbs'], aliases: ['vbs']},\n verilog: {name: 'Verilog', extensions: ['v', 'veo', 'sv', 'svh']},\n vhdl: {name: 'VHDL', extensions: ['vhd', 'vhdl'], aliases: ['vhd']},\n vtt: {name: 'WebVTT', extensions: ['vtt'], aliases: ['vtt', 'webvtt']},\n xml: {name: 'HTML, XML', extensions: ['xml', 'html', 'xhtml', 'rss', 'atom', 'xsl', 'plist']},\n yaml: {name: 'YAML', extensions: ['yaml'], aliases: ['yml']},\n },\n PostsViewJumpTypes: {\n BOTTOM: 1,\n POST: 2,\n SIDEBAR_OPEN: 3,\n },\n NotificationPrefs: {\n MENTION: 'mention',\n },\n Integrations: {\n COMMAND: 'commands',\n PAGE_SIZE: 10000,\n START_PAGE_NUM: 0,\n INCOMING_WEBHOOK: 'incoming_webhooks',\n OUTGOING_WEBHOOK: 'outgoing_webhooks',\n OAUTH_APP: 'oauth2-apps',\n OUTGOING_OAUTH_CONNECTIONS: 'outgoing-oauth2-connections',\n BOT: 'bots',\n EXECUTE_CURRENT_COMMAND_ITEM_ID: '_execute_current_command',\n OPEN_COMMAND_IN_MODAL_ITEM_ID: '_open_command_in_modal',\n COMMAND_SUGGESTION_ERROR: 'error',\n COMMAND_SUGGESTION_CHANNEL: 'channel',\n COMMAND_SUGGESTION_USER: 'user',\n },\n PERMALINK_FADEOUT: 5000,\n DEFAULT_MAX_USERS_PER_TEAM: 50,\n DEFAULT_MAX_CHANNELS_PER_TEAM: 2000,\n DEFAULT_MAX_NOTIFICATIONS_PER_CHANNEL: 1000,\n MIN_TEAMNAME_LENGTH: 2,\n MAX_TEAMNAME_LENGTH: 64,\n MAX_TEAMDESCRIPTION_LENGTH: 50,\n MIN_CHANNELNAME_LENGTH: 1,\n MAX_CHANNELNAME_LENGTH: 64,\n DEFAULT_CHANNELURL_SHORTEN_LENGTH: 52,\n MAX_CHANNELPURPOSE_LENGTH: 250,\n MAX_CUSTOM_ATTRIBUTE_NAME_LENGTH: 40,\n MAX_CUSTOM_ATTRIBUTES: 20,\n MAX_CUSTOM_ATTRIBUTE_LENGTH: 64,\n MAX_FIRSTNAME_LENGTH: 64,\n MAX_LASTNAME_LENGTH: 64,\n MAX_EMAIL_LENGTH: 128,\n MIN_USERNAME_LENGTH: 3,\n MAX_USERNAME_LENGTH: 22,\n MAX_NICKNAME_LENGTH: 64,\n MIN_PASSWORD_LENGTH: 5,\n MAX_PASSWORD_LENGTH: 72,\n MAX_POSITION_LENGTH: 128,\n MIN_TRIGGER_LENGTH: 1,\n MAX_TRIGGER_LENGTH: 128,\n MAX_SITENAME_LENGTH: 30,\n MAX_CUSTOM_BRAND_TEXT_LENGTH: 500,\n MAX_TERMS_OF_SERVICE_TEXT_LENGTH: 16383,\n DEFAULT_TERMS_OF_SERVICE_RE_ACCEPTANCE_PERIOD: 365,\n EMOJI_PATH: '/static/emoji',\n RECENT_EMOJI_KEY: 'recentEmojis',\n DEFAULT_WEBHOOK_LOGO: logoWebhook,\n MHPNS_US: 'https://push.mattermost.com',\n MHPNS_DE: 'https://hpns-de.mattermost.com',\n MTPNS: 'https://push-test.mattermost.com',\n MAX_PREV_MSGS: 100,\n POST_COLLAPSE_TIMEOUT: 1000 * 60 * 5, // five minutes\n SAVE_DRAFT_TIMEOUT: 500,\n PERMISSIONS_ALL: 'all',\n PERMISSIONS_CHANNEL_ADMIN: 'channel_admin',\n PERMISSIONS_TEAM_ADMIN: 'team_admin',\n PERMISSIONS_SYSTEM_ADMIN: 'system_admin',\n PERMISSIONS_SYSTEM_READ_ONLY_ADMIN: 'system_read_only_admin',\n PERMISSIONS_SYSTEM_USER_MANAGER: 'system_user_manager',\n PERMISSIONS_SYSTEM_MANAGER: 'system_manager',\n PERMISSIONS_DELETE_POST_ALL: 'all',\n PERMISSIONS_DELETE_POST_TEAM_ADMIN: 'team_admin',\n PERMISSIONS_DELETE_POST_SYSTEM_ADMIN: 'system_admin',\n PERMISSIONS_SYSTEM_CUSTOM_GROUP_ADMIN: 'system_custom_group_admin',\n ALLOW_EDIT_POST_ALWAYS: 'always',\n ALLOW_EDIT_POST_NEVER: 'never',\n ALLOW_EDIT_POST_TIME_LIMIT: 'time_limit',\n UNSET_POST_EDIT_TIME_LIMIT: -1,\n MENTION_CHANNELS: 'mention.channels',\n MENTION_MORE_CHANNELS: 'mention.morechannels',\n MENTION_UNREAD_CHANNELS: 'mention.unread.channels',\n MENTION_UNREAD: 'mention.unread',\n MENTION_MEMBERS: 'mention.members',\n MENTION_MORE_MEMBERS: 'mention.moremembers',\n MENTION_NONMEMBERS: 'mention.nonmembers',\n MENTION_PUBLIC_CHANNELS: 'mention.public.channels',\n MENTION_PRIVATE_CHANNELS: 'mention.private.channels',\n MENTION_RECENT_CHANNELS: 'mention.recent.channels',\n MENTION_SPECIAL: 'mention.special',\n MENTION_GROUPS: 'search.group',\n STATUS_INTERVAL: 60000,\n AUTOCOMPLETE_TIMEOUT: 100,\n AUTOCOMPLETE_SPLIT_CHARACTERS: ['.', '-', '_'],\n ANIMATION_TIMEOUT: 1000,\n SEARCH_TIMEOUT_MILLISECONDS: 100,\n TEAMMATE_NAME_DISPLAY: {\n SHOW_USERNAME: 'username',\n SHOW_NICKNAME_FULLNAME: 'nickname_full_name',\n SHOW_FULLNAME: 'full_name',\n },\n SEARCH_POST: 'searchpost',\n CHANNEL_ID_LENGTH: 26,\n TRANSPARENT_PIXEL: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=',\n REGEX_CODE_BLOCK_OPTIONAL_LANGUAGE_TAG: /^```.*$/gm,\n MAX_ATTACHMENT_FOOTER_LENGTH: 300,\n ACCEPT_STATIC_IMAGE: '.jpeg,.jpg,.png,.bmp',\n ACCEPT_EMOJI_IMAGE: '.jpeg,.jpg,.png,.gif',\n THREADS_LOADING_INDICATOR_ITEM_ID: 'threads_loading_indicator_item_id',\n THREADS_NO_RESULTS_ITEM_ID: 'threads_no_results_item_id',\n TRIAL_MODAL_AUTO_SHOWN: 'trial_modal_auto_shown',\n DEFAULT_SITE_URL: 'http://localhost:8065',\n CHANNEL_HEADER_BUTTON_DISABLE_TIMEOUT: 1000,\n FIRST_ADMIN_ROLE: 'first_admin',\n MAX_PURCHASE_SEATS: 1000000,\n MIN_PURCHASE_SEATS: 10,\n};\n\nexport const ValidationErrors = {\n USERNAME_REQUIRED: 'USERNAME_REQUIRED',\n INVALID_LENGTH: 'INVALID_LENGTH',\n INVALID_CHARACTERS: 'INVALID_CHARACTERS',\n INVALID_FIRST_CHARACTER: 'INVALID_FIRST_CHARACTER',\n RESERVED_NAME: 'RESERVED_NAME',\n INVALID_LAST_CHARACTER: 'INVALID_LAST_CHARACTER',\n};\n\nexport const ConsolePages = {\n AD_LDAP: '/admin_console/authentication/ldap',\n COMPLIANCE_EXPORT: '/admin_console/compliance/export',\n CUSTOM_TERMS: '/admin_console/compliance/custom_terms_of_service',\n DATA_RETENTION: '/admin_console/compliance/data_retention_settings',\n ELASTICSEARCH: '/admin_console/environment/elasticsearch',\n GUEST_ACCOUNTS: '/admin_console/authentication/guest_access',\n LICENSE: '/admin_console/about/license',\n SAML: '/admin_console/authentication/saml',\n FILE_STORAGE: '/admin_console/environment/file_storage',\n SESSION_LENGTHS: '/admin_console/environment/session_lengths',\n WEB_SERVER: '/admin_console/environment/web_server',\n PUSH_NOTIFICATION_CENTER: '/admin_console/environment/push_notification_server',\n SMTP: '/admin_console/environment/smtp',\n PAYMENT_INFO: '/admin_console/billing/payment_info',\n BILLING_HISTORY: '/admin_console/billing/billing_history',\n};\n\nexport const WindowSizes = {\n MOBILE_VIEW: 'mobileView',\n TABLET_VIEW: 'tabletView',\n SMALL_DESKTOP_VIEW: 'smallDesktopView',\n DESKTOP_VIEW: 'desktopView',\n};\n\nexport const AcceptedProfileImageTypes = ['image/jpeg', 'image/png', 'image/bmp'];\n\nexport const searchHintOptions = [{searchTerm: 'From:', message: defineMessage({id: 'search_list_option.from', defaultMessage: 'Messages from a user'})},\n {searchTerm: 'In:', message: defineMessage({id: 'search_list_option.in', defaultMessage: 'Messages in a channel'})},\n {searchTerm: 'On:', message: defineMessage({id: 'search_list_option.on', defaultMessage: 'Messages on a date'})},\n {searchTerm: 'Before:', message: defineMessage({id: 'search_list_option.before', defaultMessage: 'Messages before a date'})},\n {searchTerm: 'After:', message: defineMessage({id: 'search_list_option.after', defaultMessage: 'Messages after a date'})},\n {searchTerm: '-', message: defineMessage({id: 'search_list_option.exclude', defaultMessage: 'Exclude search terms'}), additionalDisplay: '—'},\n {searchTerm: '\"\"', message: defineMessage({id: 'search_list_option.phrases', defaultMessage: 'Messages with phrases'})},\n];\n\nexport const searchFilesHintOptions = [{searchTerm: 'From:', message: defineMessage({id: 'search_files_list_option.from', defaultMessage: 'Files from a user'})},\n {searchTerm: 'In:', message: defineMessage({id: 'search_files_list_option.in', defaultMessage: 'Files in a channel'})},\n {searchTerm: 'On:', message: defineMessage({id: 'search_files_list_option.on', defaultMessage: 'Files on a date'})},\n {searchTerm: 'Before:', message: defineMessage({id: 'search_files_list_option.before', defaultMessage: 'Files before a date'})},\n {searchTerm: 'After:', message: defineMessage({id: 'search_files_list_option.after', defaultMessage: 'Files after a date'})},\n {searchTerm: 'Ext:', message: defineMessage({id: 'search_files_list_option.ext', defaultMessage: 'Files with a extension'})},\n {searchTerm: '-', message: defineMessage({id: 'search_files_list_option.exclude', defaultMessage: 'Exclude search terms'}), additionalDisplay: '—'},\n {searchTerm: '\"\"', message: defineMessage({id: 'search_files_list_option.phrases', defaultMessage: 'Files with phrases'})},\n];\n\nconst {\n DONT_CLEAR,\n THIRTY_MINUTES,\n ONE_HOUR,\n FOUR_HOURS,\n TODAY,\n THIS_WEEK,\n DATE_AND_TIME,\n CUSTOM_DATE_TIME,\n} = CustomStatusDuration;\n\nexport const durationValues = defineMessages({\n [DONT_CLEAR]: {\n id: 'custom_status.expiry_dropdown.dont_clear',\n defaultMessage: \"Don't clear\",\n },\n [THIRTY_MINUTES]: {\n id: 'custom_status.expiry_dropdown.thirty_minutes',\n defaultMessage: '30 minutes',\n },\n [ONE_HOUR]: {\n id: 'custom_status.expiry_dropdown.one_hour',\n defaultMessage: '1 hour',\n },\n [FOUR_HOURS]: {\n id: 'custom_status.expiry_dropdown.four_hours',\n defaultMessage: '4 hours',\n },\n [TODAY]: {\n id: 'custom_status.expiry_dropdown.today',\n defaultMessage: 'Today',\n },\n [THIS_WEEK]: {\n id: 'custom_status.expiry_dropdown.this_week',\n defaultMessage: 'This week',\n },\n [DATE_AND_TIME]: {\n id: 'custom_status.expiry_dropdown.date_and_time',\n defaultMessage: 'Custom Date and Time',\n },\n [CUSTOM_DATE_TIME]: {\n id: 'custom_status.expiry_dropdown.date_and_time',\n defaultMessage: 'Custom Date and Time',\n },\n});\n\nexport enum ClaimErrors {\n MFA_VALIDATE_TOKEN_AUTHENTICATE = 'mfa.validate_token.authenticate.app_error',\n ENT_LDAP_LOGIN_USER_NOT_REGISTERED = 'ent.ldap.do_login.user_not_registered.app_error',\n ENT_LDAP_LOGIN_USER_FILTERED = 'ent.ldap.do_login.user_filtered.app_error',\n ENT_LDAP_LOGIN_MATCHED_TOO_MANY_USERS = 'ent.ldap.do_login.matched_to_many_users.app_error',\n ENT_LDAP_LOGIN_INVALID_PASSWORD = 'ent.ldap.do_login.invalid_password.app_error',\n API_USER_INVALID_PASSWORD = 'api.user.check_user_password.invalid.app_error',\n}\n\nexport const DataSearchTypes = {\n FILES_SEARCH_TYPE: 'files',\n MESSAGES_SEARCH_TYPE: 'messages',\n};\n\nexport const OverActiveUserLimits = {\n MIN: 0.05,\n MAX: 0.1,\n} as const;\n\nexport const PageLoadContext = {\n PAGE_LOAD: 'page_load',\n RECONNECT: 'reconnect',\n} as const;\n\nexport const SCHEDULED_POST_URL_SUFFIX = 'scheduled_posts';\n\nexport const scheduledPosts = {\n RECENTLY_USED_CUSTOM_TIME: 'recently_used_custom_time',\n SCHEDULED_POSTS: 'scheduled_posts',\n};\n\n/**\n * This is the ID of the root portal container that is used to render modals and other components\n * that need to be rendered outside of the main app container.\n */\nexport const RootHtmlPortalId = 'root-portal';\n\nexport const OverlaysTimings = {\n CURSOR_REST_TIME_BEFORE_OPEN: 400, // in ms\n CURSOR_MOUSEOVER_TO_OPEN: 400, // in ms\n CURSOR_MOUSEOUT_TO_CLOSE: 0,\n CURSOR_MOUSEOUT_TO_CLOSE_WITH_DELAY: 200, // in ms\n FADE_IN_DURATION: 250, // in ms\n FADE_OUT_DURATION: 150, // in ms\n};\n\nexport const OverlayTransitionStyles = {\n START: {\n opacity: 0,\n },\n};\n\nexport const OverlayArrow = {\n WIDTH: 10, // in px\n HEIGHT: 6, // in px\n OFFSET: 8, // in px\n};\n\nexport default Constants;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {DraftInfo} from 'types/store/draft';\n\nimport {StoragePrefixes} from './constants';\n\nexport function getDraftInfoFromKey(key: string, prefix: string): DraftInfo | null {\n const keyArr = key.split('_');\n if (prefix === StoragePrefixes.DRAFT) {\n return {\n id: keyArr[1],\n type: 'channel',\n };\n }\n\n if (prefix === StoragePrefixes.COMMENT_DRAFT) {\n return {\n id: keyArr[2],\n type: 'thread',\n };\n }\n\n return null;\n}\n","\"use strict\";\n// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CategorySorting = void 0;\nvar CategorySorting;\n(function (CategorySorting) {\n CategorySorting[\"Alphabetical\"] = \"alpha\";\n CategorySorting[\"Default\"] = \"\";\n CategorySorting[\"Recency\"] = \"recent\";\n CategorySorting[\"Manual\"] = \"manual\";\n})(CategorySorting || (exports.CategorySorting = CategorySorting = {}));\n","\"use strict\";\n// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CursorPaginationDirection = exports.ReportDuration = exports.ReportSortDirection = exports.UserReportSortColumns = void 0;\nvar UserReportSortColumns;\n(function (UserReportSortColumns) {\n UserReportSortColumns[\"username\"] = \"Username\";\n UserReportSortColumns[\"email\"] = \"Email\";\n UserReportSortColumns[\"createAt\"] = \"CreateAt\";\n UserReportSortColumns[\"firstName\"] = \"FirstName\";\n UserReportSortColumns[\"lastName\"] = \"LastName\";\n UserReportSortColumns[\"nickname\"] = \"Nickname\";\n})(UserReportSortColumns || (exports.UserReportSortColumns = UserReportSortColumns = {}));\nvar ReportSortDirection;\n(function (ReportSortDirection) {\n ReportSortDirection[\"ascending\"] = \"asc\";\n ReportSortDirection[\"descending\"] = \"desc\";\n})(ReportSortDirection || (exports.ReportSortDirection = ReportSortDirection = {}));\nvar ReportDuration;\n(function (ReportDuration) {\n ReportDuration[\"AllTime\"] = \"all_time\";\n ReportDuration[\"Last30Days\"] = \"last_30_days\";\n ReportDuration[\"PreviousMonth\"] = \"previous_month\";\n ReportDuration[\"Last6Months\"] = \"last_6_months\";\n})(ReportDuration || (exports.ReportDuration = ReportDuration = {}));\nvar CursorPaginationDirection;\n(function (CursorPaginationDirection) {\n CursorPaginationDirection[\"prev\"] = \"prev\";\n CursorPaginationDirection[\"next\"] = \"next\";\n})(CursorPaginationDirection || (exports.CursorPaginationDirection = CursorPaginationDirection = {}));\n","\"use strict\";\n// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CustomStatusDuration = void 0;\nvar CustomStatusDuration;\n(function (CustomStatusDuration) {\n CustomStatusDuration[\"DONT_CLEAR\"] = \"\";\n CustomStatusDuration[\"THIRTY_MINUTES\"] = \"thirty_minutes\";\n CustomStatusDuration[\"ONE_HOUR\"] = \"one_hour\";\n CustomStatusDuration[\"FOUR_HOURS\"] = \"four_hours\";\n CustomStatusDuration[\"TODAY\"] = \"today\";\n CustomStatusDuration[\"THIS_WEEK\"] = \"this_week\";\n CustomStatusDuration[\"DATE_AND_TIME\"] = \"date_and_time\";\n CustomStatusDuration[\"CUSTOM_DATE_TIME\"] = \"custom_date_time\";\n})(CustomStatusDuration || (exports.CustomStatusDuration = CustomStatusDuration = {}));\n","\"use strict\";\n// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.collectionRemoveItem = exports.collectionAddItem = exports.collectionReplaceItem = exports.collectionToArray = exports.collectionFromArray = void 0;\nexports.isArrayOf = isArrayOf;\nexports.isStringArray = isStringArray;\nexports.isRecordOf = isRecordOf;\nfunction isArrayOf(v, check) {\n if (!Array.isArray(v)) {\n return false;\n }\n return v.every(check);\n}\nfunction isStringArray(v) {\n return isArrayOf(v, (e) => typeof e === 'string');\n}\nfunction isRecordOf(v, check) {\n if (typeof v !== 'object' || !v) {\n return false;\n }\n if (!(Object.keys(v).every((k) => typeof k === 'string'))) {\n return false;\n }\n if (!(Object.values(v).every(check))) {\n return false;\n }\n return true;\n}\nconst collectionFromArray = (arr = []) => {\n return arr.reduce((current, item) => {\n current.data = Object.assign(Object.assign({}, current.data), { [item.id]: item });\n current.order.push(item.id);\n return current;\n }, { data: {}, order: [] });\n};\nexports.collectionFromArray = collectionFromArray;\nconst collectionToArray = ({ data, order }) => {\n return order.map((id) => data[id]);\n};\nexports.collectionToArray = collectionToArray;\nconst collectionReplaceItem = (collection, item) => {\n return Object.assign(Object.assign({}, collection), { data: Object.assign(Object.assign({}, collection.data), { [item.id]: item }) });\n};\nexports.collectionReplaceItem = collectionReplaceItem;\nconst collectionAddItem = (collection, item) => {\n return Object.assign(Object.assign({}, collection), { data: Object.assign(Object.assign({}, collection.data), { [item.id]: item }), order: [...collection.order, item.id] });\n};\nexports.collectionAddItem = collectionAddItem;\nconst collectionRemoveItem = (collection, item) => {\n const data = Object.assign({}, collection.data);\n Reflect.deleteProperty(data, item.id);\n const order = collection.order.filter((id) => id !== item.id);\n return Object.assign(Object.assign({}, collection), { data, order });\n};\nexports.collectionRemoveItem = collectionRemoveItem;\n","var map = {\n\t\"./af\": 99805,\n\t\"./af.js\": 99805,\n\t\"./ar\": 94449,\n\t\"./ar-dz\": 44468,\n\t\"./ar-dz.js\": 44468,\n\t\"./ar-kw\": 63480,\n\t\"./ar-kw.js\": 63480,\n\t\"./ar-ly\": 64197,\n\t\"./ar-ly.js\": 64197,\n\t\"./ar-ma\": 62180,\n\t\"./ar-ma.js\": 62180,\n\t\"./ar-ps\": 29343,\n\t\"./ar-ps.js\": 29343,\n\t\"./ar-sa\": 50230,\n\t\"./ar-sa.js\": 50230,\n\t\"./ar-tn\": 72808,\n\t\"./ar-tn.js\": 72808,\n\t\"./ar.js\": 94449,\n\t\"./az\": 45865,\n\t\"./az.js\": 45865,\n\t\"./be\": 86627,\n\t\"./be.js\": 86627,\n\t\"./bg\": 60901,\n\t\"./bg.js\": 60901,\n\t\"./bm\": 63179,\n\t\"./bm.js\": 63179,\n\t\"./bn\": 61966,\n\t\"./bn-bd\": 90969,\n\t\"./bn-bd.js\": 90969,\n\t\"./bn.js\": 61966,\n\t\"./bo\": 6317,\n\t\"./bo.js\": 6317,\n\t\"./br\": 46474,\n\t\"./br.js\": 46474,\n\t\"./bs\": 35961,\n\t\"./bs.js\": 35961,\n\t\"./ca\": 77270,\n\t\"./ca.js\": 77270,\n\t\"./cs\": 61564,\n\t\"./cs.js\": 61564,\n\t\"./cv\": 43239,\n\t\"./cv.js\": 43239,\n\t\"./cy\": 92366,\n\t\"./cy.js\": 92366,\n\t\"./da\": 82453,\n\t\"./da.js\": 82453,\n\t\"./de\": 76601,\n\t\"./de-at\": 25027,\n\t\"./de-at.js\": 25027,\n\t\"./de-ch\": 8101,\n\t\"./de-ch.js\": 8101,\n\t\"./de.js\": 76601,\n\t\"./dv\": 96080,\n\t\"./dv.js\": 96080,\n\t\"./el\": 12655,\n\t\"./el.js\": 12655,\n\t\"./en-au\": 46836,\n\t\"./en-au.js\": 46836,\n\t\"./en-ca\": 22086,\n\t\"./en-ca.js\": 22086,\n\t\"./en-gb\": 2103,\n\t\"./en-gb.js\": 2103,\n\t\"./en-ie\": 35964,\n\t\"./en-ie.js\": 35964,\n\t\"./en-il\": 74379,\n\t\"./en-il.js\": 74379,\n\t\"./en-in\": 50765,\n\t\"./en-in.js\": 50765,\n\t\"./en-nz\": 71502,\n\t\"./en-nz.js\": 71502,\n\t\"./en-sg\": 1152,\n\t\"./en-sg.js\": 1152,\n\t\"./eo\": 90050,\n\t\"./eo.js\": 90050,\n\t\"./es\": 43350,\n\t\"./es-do\": 49338,\n\t\"./es-do.js\": 49338,\n\t\"./es-mx\": 51326,\n\t\"./es-mx.js\": 51326,\n\t\"./es-us\": 89947,\n\t\"./es-us.js\": 89947,\n\t\"./es.js\": 43350,\n\t\"./et\": 18231,\n\t\"./et.js\": 18231,\n\t\"./eu\": 28512,\n\t\"./eu.js\": 28512,\n\t\"./fa\": 59083,\n\t\"./fa.js\": 59083,\n\t\"./fi\": 25059,\n\t\"./fi.js\": 25059,\n\t\"./fil\": 32607,\n\t\"./fil.js\": 32607,\n\t\"./fo\": 83369,\n\t\"./fo.js\": 83369,\n\t\"./fr\": 27390,\n\t\"./fr-ca\": 66711,\n\t\"./fr-ca.js\": 66711,\n\t\"./fr-ch\": 6152,\n\t\"./fr-ch.js\": 6152,\n\t\"./fr.js\": 27390,\n\t\"./fy\": 62419,\n\t\"./fy.js\": 62419,\n\t\"./ga\": 3002,\n\t\"./ga.js\": 3002,\n\t\"./gd\": 82533,\n\t\"./gd.js\": 82533,\n\t\"./gl\": 16557,\n\t\"./gl.js\": 16557,\n\t\"./gom-deva\": 48944,\n\t\"./gom-deva.js\": 48944,\n\t\"./gom-latn\": 25387,\n\t\"./gom-latn.js\": 25387,\n\t\"./gu\": 17462,\n\t\"./gu.js\": 17462,\n\t\"./he\": 39237,\n\t\"./he.js\": 39237,\n\t\"./hi\": 49617,\n\t\"./hi.js\": 49617,\n\t\"./hr\": 36544,\n\t\"./hr.js\": 36544,\n\t\"./hu\": 60341,\n\t\"./hu.js\": 60341,\n\t\"./hy-am\": 41388,\n\t\"./hy-am.js\": 41388,\n\t\"./id\": 75251,\n\t\"./id.js\": 75251,\n\t\"./is\": 41146,\n\t\"./is.js\": 41146,\n\t\"./it\": 37891,\n\t\"./it-ch\": 80007,\n\t\"./it-ch.js\": 80007,\n\t\"./it.js\": 37891,\n\t\"./ja\": 73727,\n\t\"./ja.js\": 73727,\n\t\"./jv\": 5198,\n\t\"./jv.js\": 5198,\n\t\"./ka\": 28974,\n\t\"./ka.js\": 28974,\n\t\"./kk\": 37308,\n\t\"./kk.js\": 37308,\n\t\"./km\": 57786,\n\t\"./km.js\": 57786,\n\t\"./kn\": 84807,\n\t\"./kn.js\": 84807,\n\t\"./ko\": 61584,\n\t\"./ko.js\": 61584,\n\t\"./ku\": 61906,\n\t\"./ku-kmr\": 75305,\n\t\"./ku-kmr.js\": 75305,\n\t\"./ku.js\": 61906,\n\t\"./ky\": 79190,\n\t\"./ky.js\": 79190,\n\t\"./lb\": 7396,\n\t\"./lb.js\": 7396,\n\t\"./lo\": 38503,\n\t\"./lo.js\": 38503,\n\t\"./lt\": 33010,\n\t\"./lt.js\": 33010,\n\t\"./lv\": 5192,\n\t\"./lv.js\": 5192,\n\t\"./me\": 51944,\n\t\"./me.js\": 51944,\n\t\"./mi\": 56492,\n\t\"./mi.js\": 56492,\n\t\"./mk\": 2934,\n\t\"./mk.js\": 2934,\n\t\"./ml\": 61463,\n\t\"./ml.js\": 61463,\n\t\"./mn\": 8377,\n\t\"./mn.js\": 8377,\n\t\"./mr\": 78733,\n\t\"./mr.js\": 78733,\n\t\"./ms\": 18030,\n\t\"./ms-my\": 39445,\n\t\"./ms-my.js\": 39445,\n\t\"./ms.js\": 18030,\n\t\"./mt\": 55887,\n\t\"./mt.js\": 55887,\n\t\"./my\": 87228,\n\t\"./my.js\": 87228,\n\t\"./nb\": 48294,\n\t\"./nb.js\": 48294,\n\t\"./ne\": 19559,\n\t\"./ne.js\": 19559,\n\t\"./nl\": 20600,\n\t\"./nl-be\": 78796,\n\t\"./nl-be.js\": 78796,\n\t\"./nl.js\": 20600,\n\t\"./nn\": 9570,\n\t\"./nn.js\": 9570,\n\t\"./oc-lnc\": 5662,\n\t\"./oc-lnc.js\": 5662,\n\t\"./pa-in\": 87101,\n\t\"./pa-in.js\": 87101,\n\t\"./pl\": 56118,\n\t\"./pl.js\": 56118,\n\t\"./pt\": 29198,\n\t\"./pt-br\": 7203,\n\t\"./pt-br.js\": 7203,\n\t\"./pt.js\": 29198,\n\t\"./ro\": 45565,\n\t\"./ro.js\": 45565,\n\t\"./ru\": 33315,\n\t\"./ru.js\": 33315,\n\t\"./sd\": 58473,\n\t\"./sd.js\": 58473,\n\t\"./se\": 11258,\n\t\"./se.js\": 11258,\n\t\"./si\": 98798,\n\t\"./si.js\": 98798,\n\t\"./sk\": 26404,\n\t\"./sk.js\": 26404,\n\t\"./sl\": 7057,\n\t\"./sl.js\": 7057,\n\t\"./sq\": 25718,\n\t\"./sq.js\": 25718,\n\t\"./sr\": 45363,\n\t\"./sr-cyrl\": 20478,\n\t\"./sr-cyrl.js\": 20478,\n\t\"./sr.js\": 45363,\n\t\"./ss\": 37260,\n\t\"./ss.js\": 37260,\n\t\"./sv\": 42231,\n\t\"./sv.js\": 42231,\n\t\"./sw\": 27104,\n\t\"./sw.js\": 27104,\n\t\"./ta\": 47493,\n\t\"./ta.js\": 47493,\n\t\"./te\": 57705,\n\t\"./te.js\": 57705,\n\t\"./tet\": 94457,\n\t\"./tet.js\": 94457,\n\t\"./tg\": 22727,\n\t\"./tg.js\": 22727,\n\t\"./th\": 32206,\n\t\"./th.js\": 32206,\n\t\"./tk\": 33419,\n\t\"./tk.js\": 33419,\n\t\"./tl-ph\": 77243,\n\t\"./tl-ph.js\": 77243,\n\t\"./tlh\": 60016,\n\t\"./tlh.js\": 60016,\n\t\"./tr\": 87020,\n\t\"./tr.js\": 87020,\n\t\"./tzl\": 8026,\n\t\"./tzl.js\": 8026,\n\t\"./tzm\": 78537,\n\t\"./tzm-latn\": 87899,\n\t\"./tzm-latn.js\": 87899,\n\t\"./tzm.js\": 78537,\n\t\"./ug-cn\": 40818,\n\t\"./ug-cn.js\": 40818,\n\t\"./uk\": 48478,\n\t\"./uk.js\": 48478,\n\t\"./ur\": 77893,\n\t\"./ur.js\": 77893,\n\t\"./uz\": 89133,\n\t\"./uz-latn\": 20311,\n\t\"./uz-latn.js\": 20311,\n\t\"./uz.js\": 89133,\n\t\"./vi\": 52179,\n\t\"./vi.js\": 52179,\n\t\"./x-pseudo\": 92455,\n\t\"./x-pseudo.js\": 92455,\n\t\"./yo\": 3310,\n\t\"./yo.js\": 3310,\n\t\"./zh-cn\": 27244,\n\t\"./zh-cn.js\": 27244,\n\t\"./zh-hk\": 40076,\n\t\"./zh-hk.js\": 40076,\n\t\"./zh-mo\": 62305,\n\t\"./zh-mo.js\": 62305,\n\t\"./zh-tw\": 88588,\n\t\"./zh-tw.js\": 88588\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 61738;"],"names":["clearUserCookie","document","cookie","concat","window","basename","location","hostname","keyMirror","GET_USER_DRAFTS","CREATE_USER_DRAFT","DELETE_USER_DRAFT","UPDATE_USER_DRAFT","UPSERT_USER_DRAFT","GET_DRAFTS_FAILURE","UPSERT_DRAFT_FAILURE","DELETE_DRAFT_FAILURE","DISMISS_ERROR","LOG_ERROR","CLEAR_ERRORS","RESTORE_ERRORS","PLAYBOOKS_PUBLISH_TEMPLATES","RECEIVED_MARKETPLACE_PLUGINS","GET_MARKETPLACE_PLUGINS_FAILURE","AppBindingLocations","POST_MENU_ITEM","CHANNEL_HEADER_ICON","APP_BAR","COMMAND","IN_POST","MARKETPLACE","AppCallResponseTypes","OK","ERROR","FORM","CALL","NAVIGATE","AppFieldTypes","TEXT","STATIC_SELECT","DYNAMIC_SELECT","BOOL","USER","CHANNEL","MARKDOWN","CategoryTypes","FAVORITES","CHANNELS","DIRECT_MESSAGES","CUSTOM","NotificationLevel","DEFAULT","ALL","MENTION","NONE","MarkUnread","CONFIG_CHANGED","SERVER_VERSION_CHANGED","PAGE_SIZE_DEFAULT","PAGE_SIZE_MAXIMUM","LOGS_PAGE_SIZE_DEFAULT","AUDITS_CHUNK_SIZE","PROFILE_CHUNK_SIZE","CHANNELS_CHUNK_SIZE","TEAMS_CHUNK_SIZE","JOBS_CHUNK_SIZE","SEARCH_TIMEOUT_MILLISECONDS","AUTOCOMPLETE_SPLIT_CHARACTERS","OUT_OF_OFFICE","OFFLINE","AWAY","ONLINE","DND","PERMISSIONS_ALL","PERMISSIONS_CHANNEL_ADMIN","PERMISSIONS_TEAM_ADMIN","PERMISSIONS_SYSTEM_ADMIN","TEAM_GUEST_ROLE","TEAM_USER_ROLE","TEAM_ADMIN_ROLE","CHANNEL_GUEST_ROLE","CHANNEL_USER_ROLE","CHANNEL_ADMIN_ROLE","SYSTEM_GUEST_ROLE","SYSTEM_USER_ROLE","SYSTEM_ADMIN_ROLE","SYSTEM_USER_MANAGER_ROLE","SYSTEM_READ_ONLY_ADMIN_ROLE","SYSTEM_MANAGER_ROLE","SYSTEM_USER_ACCESS_TOKEN_ROLE","SYSTEM_POST_ALL_ROLE","SYSTEM_POST_ALL_PUBLIC_ROLE","PLAYBOOK_ADMIN_ROLE","PLAYBOOK_MEMBER_ROLE","RUN_ADMIN_ROLE","RUN_MEMBER_ROLE","ALLOW_EDIT_POST_ALWAYS","ALLOW_EDIT_POST_NEVER","ALLOW_EDIT_POST_TIME_LIMIT","DEFAULT_POST_EDIT_TIME_LIMIT","RESTRICT_DIRECT_MESSAGE_ANY","RESTRICT_DIRECT_MESSAGE_TEAM","SWITCH_TO_DEFAULT_CHANNEL","DEFAULT_CHANNEL","DM_CHANNEL","OPEN_CHANNEL","PRIVATE_CHANNEL","GM_CHANNEL","ARCHIVED_CHANNEL","PUSH_NOTIFY_APPLE_REACT_NATIVE","PUSH_NOTIFY_ANDROID_REACT_NATIVE","STORE_REHYDRATION_COMPLETE","TEAMMATE_NAME_DISPLAY","SHOW_USERNAME","SHOW_NICKNAME_FULLNAME","SHOW_FULLNAME","SPECIAL_MENTIONS","MAX_USERS_IN_GM","MIN_USERS_IN_GM","MAX_GROUP_CHANNELS_FOR_PROFILES","DEFAULT_LOCALE","DEFAULT_AUTOLINKED_URL_SCHEMES","DISABLED","DEFAULT_ON","DEFAULT_OFF","ALWAYS_ON","DEFAULT_GROUP","CUSTOM_GROUP_USER_ROLE","MAX_GET_ROLES_BY_NAMES","SORT_BY_NAME","NOT_STARTED","STARTED","SUCCESS","FAILURE","CANCELLED","MEMBERS","GUESTS","ADMINS","TOTAL_USERS","TOTAL_INACTIVE_USERS","TOTAL_PUBLIC_CHANNELS","TOTAL_PRIVATE_GROUPS","TOTAL_POSTS","TOTAL_TEAMS","TOTAL_FILE_POSTS","TOTAL_HASHTAG_POSTS","TOTAL_IHOOKS","TOTAL_OHOOKS","TOTAL_COMMANDS","TOTAL_SESSIONS","POST_PER_DAY","BOT_POST_PER_DAY","USERS_WITH_POSTS_PER_DAY","RECENTLY_ACTIVE_USERS","NEWLY_CREATED_USERS","TOTAL_WEBSOCKET_CONNECTIONS","TOTAL_MASTER_DB_CONNECTIONS","TOTAL_READ_DB_CONNECTIONS","DAILY_ACTIVE_USERS","MONTHLY_ACTIVE_USERS","REGISTERED_USERS","TEAM_TYPE_OPEN","TEAM_TYPE_INVITE","SORT_USERNAME_OPTION","POSTED","POST_EDITED","POST_DELETED","POST_UNREAD","CHANNEL_CONVERTED","CHANNEL_CREATED","CHANNEL_DELETED","CHANNEL_UNARCHIVED","CHANNEL_UPDATED","MULTIPLE_CHANNELS_VIEWED","CHANNEL_MEMBER_UPDATED","CHANNEL_SCHEME_UPDATED","DIRECT_ADDED","ADDED_TO_TEAM","LEAVE_TEAM","UPDATE_TEAM","USER_ADDED","USER_REMOVED","USER_UPDATED","USER_ROLE_UPDATED","ROLE_ADDED","ROLE_REMOVED","ROLE_UPDATED","TYPING","STOP_TYPING","PREFERENCE_CHANGED","PREFERENCES_CHANGED","PREFERENCES_DELETED","EPHEMERAL_MESSAGE","STATUS_CHANGED","HELLO","WEBRTC","REACTION_ADDED","REACTION_REMOVED","EMOJI_ADDED","LICENSE_CHANGED","PLUGIN_STATUSES_CHANGED","OPEN_DIALOG","INCREASE_POST_VISIBILITY_BY_ONE","RECEIVED_GROUP","RECEIVED_GROUP_ASSOCIATED_TO_TEAM","RECEIVED_GROUP_NOT_ASSOCIATED_TO_TEAM","RECEIVED_GROUP_ASSOCIATED_TO_CHANNEL","RECEIVED_GROUP_NOT_ASSOCIATED_TO_CHANNEL","THREAD_UPDATED","THREAD_FOLLOW_CHANGED","THREAD_READ_CHANGED","FIRST_ADMIN_VISIT_MARKETPLACE_STATUS_RECEIVED","GROUP_MEMBER_DELETED","values","INVITE_USER","ADD_USER_TO_TEAM","MANAGE_SLASH_COMMANDS","MANAGE_OTHERS_SLASH_COMMANDS","CREATE_PUBLIC_CHANNEL","CREATE_PRIVATE_CHANNEL","MANAGE_PUBLIC_CHANNEL_MEMBERS","MANAGE_PRIVATE_CHANNEL_MEMBERS","READ_PUBLIC_CHANNEL_GROUPS","READ_PRIVATE_CHANNEL_GROUPS","ASSIGN_SYSTEM_ADMIN_ROLE","MANAGE_ROLES","MANAGE_TEAM_ROLES","MANAGE_CHANNEL_ROLES","MANAGE_SYSTEM","CREATE_DIRECT_CHANNEL","CREATE_GROUP_CHANNEL","MANAGE_PUBLIC_CHANNEL_PROPERTIES","MANAGE_PRIVATE_CHANNEL_PROPERTIES","LIST_PUBLIC_TEAMS","JOIN_PUBLIC_TEAMS","LIST_PRIVATE_TEAMS","JOIN_PRIVATE_TEAMS","LIST_TEAM_CHANNELS","JOIN_PUBLIC_CHANNELS","DELETE_PUBLIC_CHANNEL","CONVERT_PUBLIC_CHANNEL_TO_PRIVATE","CONVERT_PRIVATE_CHANNEL_TO_PUBLIC","DELETE_PRIVATE_CHANNEL","EDIT_OTHER_USERS","READ_CHANNEL","READ_CHANNEL_CONTENT","READ_PUBLIC_CHANNEL","ADD_REACTION","REMOVE_REACTION","REMOVE_OTHERS_REACTIONS","PERMANENT_DELETE_USER","UPLOAD_FILE","GET_PUBLIC_LINK","MANAGE_WEBHOOKS","MANAGE_OTHERS_WEBHOOKS","MANAGE_INCOMING_WEBHOOKS","MANAGE_OTHERS_INCOMING_WEBHOOKS","MANAGE_OUTGOING_WEBHOOKS","MANAGE_OTHERS_OUTGOING_WEBHOOKS","MANAGE_OAUTH","MANAGE_OUTGOING_OAUTH_CONNECTIONS","MANAGE_SYSTEM_WIDE_OAUTH","CREATE_POST","CREATE_POST_PUBLIC","EDIT_POST","EDIT_OTHERS_POSTS","DELETE_POST","DELETE_OTHERS_POSTS","REMOVE_USER_FROM_TEAM","CREATE_TEAM","MANAGE_TEAM","IMPORT_TEAM","VIEW_TEAM","LIST_USERS_WITHOUT_TEAM","CREATE_USER_ACCESS_TOKEN","READ_USER_ACCESS_TOKEN","REVOKE_USER_ACCESS_TOKEN","MANAGE_JOBS","MANAGE_EMOJIS","MANAGE_OTHERS_EMOJIS","CREATE_EMOJIS","DELETE_EMOJIS","DELETE_OTHERS_EMOJIS","VIEW_MEMBERS","INVITE_GUEST","PROMOTE_GUEST","DEMOTE_TO_GUEST","USE_CHANNEL_MENTIONS","USE_GROUP_MENTIONS","READ_OTHER_USERS_TEAMS","EDIT_BRAND","READ_JOBS","DOWNLOAD_COMPLIANCE_EXPORT_RESULT","CREATE_LDAP_SYNC_JOB","READ_LDAP_SYNC_JOB","TEST_LDAP","GET_SAML_METADATA_FROM_IDP","ADD_SAML_PUBLIC_CERT","ADD_SAML_PRIVATE_CERT","ADD_SAML_IDP_CERT","REMOVE_SAML_PUBLIC_CERT","REMOVE_SAML_PRIVATE_CERT","REMOVE_SAML_IDP_CERT","GET_SAML_CERT_STATUS","ADD_LDAP_PUBLIC_CERT","ADD_LDAP_PRIVATE_CERT","REMOVE_LDAP_PUBLIC_CERT","REMOVE_LDAP_PRIVATE_CERT","INVALIDATE_EMAIL_INVITE","TEST_SITE_URL","TEST_ELASTICSEARCH","TEST_S3","TEST_EMAIL","RELOAD_CONFIG","INVALIDATE_CACHES","PURGE_ELASTICSEARCH_INDEXES","RECYCLE_DATABASE_CONNECTIONS","CREATE_ELASTICSEARCH_POST_INDEXING_JOB","CREATE_ELASTICSEARCH_POST_AGGREGATION_JOB","READ_ELASTICSEARCH_POST_INDEXING_JOB","READ_ELASTICSEARCH_POST_AGGREGATION_JOB","USE_SLASH_COMMANDS","SYSCONSOLE_READ_ABOUT_EDITION_AND_LICENSE","SYSCONSOLE_WRITE_ABOUT_EDITION_AND_LICENSE","SYSCONSOLE_READ_BILLING","SYSCONSOLE_WRITE_BILLING","SYSCONSOLE_READ_REPORTING_SITE_STATISTICS","SYSCONSOLE_WRITE_REPORTING_SITE_STATISTICS","SYSCONSOLE_READ_REPORTING_TEAM_STATISTICS","SYSCONSOLE_WRITE_REPORTING_TEAM_STATISTICS","SYSCONSOLE_READ_REPORTING_SERVER_LOGS","SYSCONSOLE_WRITE_REPORTING_SERVER_LOGS","SYSCONSOLE_READ_USERMANAGEMENT_USERS","SYSCONSOLE_WRITE_USERMANAGEMENT_USERS","SYSCONSOLE_READ_USERMANAGEMENT_GROUPS","SYSCONSOLE_WRITE_USERMANAGEMENT_GROUPS","SYSCONSOLE_READ_USERMANAGEMENT_TEAMS","SYSCONSOLE_WRITE_USERMANAGEMENT_TEAMS","SYSCONSOLE_READ_USERMANAGEMENT_CHANNELS","SYSCONSOLE_WRITE_USERMANAGEMENT_CHANNELS","SYSCONSOLE_READ_USERMANAGEMENT_PERMISSIONS","SYSCONSOLE_WRITE_USERMANAGEMENT_PERMISSIONS","SYSCONSOLE_READ_USERMANAGEMENT_SYSTEM_ROLES","SYSCONSOLE_WRITE_USERMANAGEMENT_SYSTEM_ROLES","SYSCONSOLE_READ_SITE_CUSTOMIZATION","SYSCONSOLE_WRITE_SITE_CUSTOMIZATION","SYSCONSOLE_READ_SITE_LOCALIZATION","SYSCONSOLE_WRITE_SITE_LOCALIZATION","SYSCONSOLE_READ_SITE_USERS_AND_TEAMS","SYSCONSOLE_WRITE_SITE_USERS_AND_TEAMS","SYSCONSOLE_READ_SITE_NOTIFICATIONS","SYSCONSOLE_WRITE_SITE_NOTIFICATIONS","SYSCONSOLE_READ_SITE_ANNOUNCEMENT_BANNER","SYSCONSOLE_WRITE_SITE_ANNOUNCEMENT_BANNER","SYSCONSOLE_READ_SITE_EMOJI","SYSCONSOLE_WRITE_SITE_EMOJI","SYSCONSOLE_READ_SITE_POSTS","SYSCONSOLE_WRITE_SITE_POSTS","SYSCONSOLE_READ_SITE_FILE_SHARING_AND_DOWNLOADS","SYSCONSOLE_WRITE_SITE_FILE_SHARING_AND_DOWNLOADS","SYSCONSOLE_READ_SITE_PUBLIC_LINKS","SYSCONSOLE_WRITE_SITE_PUBLIC_LINKS","SYSCONSOLE_READ_SITE_NOTICES","SYSCONSOLE_WRITE_SITE_NOTICES","SYSCONSOLE_READ_SITE_IP_FILTERS","SYSCONSOLE_WRITE_SITE_IP_FILTERS","SYSCONSOLE_READ_ENVIRONMENT_WEB_SERVER","SYSCONSOLE_WRITE_ENVIRONMENT_WEB_SERVER","SYSCONSOLE_READ_ENVIRONMENT_DATABASE","SYSCONSOLE_WRITE_ENVIRONMENT_DATABASE","SYSCONSOLE_READ_ENVIRONMENT_ELASTICSEARCH","SYSCONSOLE_WRITE_ENVIRONMENT_ELASTICSEARCH","SYSCONSOLE_READ_ENVIRONMENT_FILE_STORAGE","SYSCONSOLE_WRITE_ENVIRONMENT_FILE_STORAGE","SYSCONSOLE_READ_ENVIRONMENT_IMAGE_PROXY","SYSCONSOLE_WRITE_ENVIRONMENT_IMAGE_PROXY","SYSCONSOLE_READ_ENVIRONMENT_SMTP","SYSCONSOLE_WRITE_ENVIRONMENT_SMTP","SYSCONSOLE_READ_ENVIRONMENT_PUSH_NOTIFICATION_SERVER","SYSCONSOLE_WRITE_ENVIRONMENT_PUSH_NOTIFICATION_SERVER","SYSCONSOLE_READ_ENVIRONMENT_HIGH_AVAILABILITY","SYSCONSOLE_WRITE_ENVIRONMENT_HIGH_AVAILABILITY","SYSCONSOLE_READ_ENVIRONMENT_RATE_LIMITING","SYSCONSOLE_WRITE_ENVIRONMENT_RATE_LIMITING","SYSCONSOLE_READ_ENVIRONMENT_LOGGING","SYSCONSOLE_WRITE_ENVIRONMENT_LOGGING","SYSCONSOLE_READ_ENVIRONMENT_SESSION_LENGTHS","SYSCONSOLE_WRITE_ENVIRONMENT_SESSION_LENGTHS","SYSCONSOLE_READ_ENVIRONMENT_PERFORMANCE_MONITORING","SYSCONSOLE_WRITE_ENVIRONMENT_PERFORMANCE_MONITORING","SYSCONSOLE_READ_ENVIRONMENT_DEVELOPER","SYSCONSOLE_WRITE_ENVIRONMENT_DEVELOPER","SYSCONSOLE_READ_AUTHENTICATION_SIGNUP","SYSCONSOLE_WRITE_AUTHENTICATION_SIGNUP","SYSCONSOLE_READ_AUTHENTICATION_EMAIL","SYSCONSOLE_WRITE_AUTHENTICATION_EMAIL","SYSCONSOLE_READ_AUTHENTICATION_PASSWORD","SYSCONSOLE_WRITE_AUTHENTICATION_PASSWORD","SYSCONSOLE_READ_AUTHENTICATION_MFA","SYSCONSOLE_WRITE_AUTHENTICATION_MFA","SYSCONSOLE_READ_AUTHENTICATION_LDAP","SYSCONSOLE_WRITE_AUTHENTICATION_LDAP","SYSCONSOLE_READ_AUTHENTICATION_SAML","SYSCONSOLE_WRITE_AUTHENTICATION_SAML","SYSCONSOLE_READ_AUTHENTICATION_OPENID","SYSCONSOLE_WRITE_AUTHENTICATION_OPENID","SYSCONSOLE_READ_AUTHENTICATION_GUEST_ACCESS","SYSCONSOLE_WRITE_AUTHENTICATION_GUEST_ACCESS","SYSCONSOLE_READ_PLUGINS","SYSCONSOLE_WRITE_PLUGINS","SYSCONSOLE_READ_INTEGRATIONS_INTEGRATION_MANAGEMENT","SYSCONSOLE_WRITE_INTEGRATIONS_INTEGRATION_MANAGEMENT","SYSCONSOLE_READ_INTEGRATIONS_BOT_ACCOUNTS","SYSCONSOLE_WRITE_INTEGRATIONS_BOT_ACCOUNTS","SYSCONSOLE_READ_INTEGRATIONS_GIF","SYSCONSOLE_WRITE_INTEGRATIONS_GIF","SYSCONSOLE_READ_INTEGRATIONS_CORS","SYSCONSOLE_WRITE_INTEGRATIONS_CORS","SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY","SYSCONSOLE_WRITE_COMPLIANCE_DATA_RETENTION_POLICY","SYSCONSOLE_READ_COMPLIANCE_COMPLIANCE_EXPORT","SYSCONSOLE_WRITE_COMPLIANCE_COMPLIANCE_EXPORT","SYSCONSOLE_READ_COMPLIANCE_COMPLIANCE_MONITORING","SYSCONSOLE_WRITE_COMPLIANCE_COMPLIANCE_MONITORING","SYSCONSOLE_READ_COMPLIANCE_CUSTOM_TERMS_OF_SERVICE","SYSCONSOLE_WRITE_COMPLIANCE_CUSTOM_TERMS_OF_SERVICE","SYSCONSOLE_READ_EXPERIMENTAL_FEATURES","SYSCONSOLE_WRITE_EXPERIMENTAL_FEATURES","SYSCONSOLE_READ_EXPERIMENTAL_FEATURE_FLAGS","SYSCONSOLE_WRITE_EXPERIMENTAL_FEATURE_FLAGS","SYSCONSOLE_READ_EXPERIMENTAL_BLEVE","SYSCONSOLE_WRITE_EXPERIMENTAL_BLEVE","SYSCONSOLE_READ_PRODUCTS_BOARDS","SYSCONSOLE_WRITE_PRODUCTS_BOARDS","PLAYBOOK_PUBLIC_CREATE","PLAYBOOK_PUBLIC_MANAGE_PROPERTIES","PLAYBOOK_PUBLIC_MANAGE_MEMBERS","PLAYBOOK_PUBLIC_VIEW","PLAYBOOK_PUBLIC_MAKE_PRIVATE","PLAYBOOK_PRIVATE_CREATE","PLAYBOOK_PRIVATE_MANAGE_PROPERTIES","PLAYBOOK_PRIVATE_MANAGE_MEMBERS","PLAYBOOK_PRIVATE_VIEW","PLAYBOOK_PRIVATE_MAKE_PUBLIC","RUN_CREATE","RUN_MANAGE_PROPERTIES","RUN_MANAGE_MEMBERS","RUN_VIEW","CHANNEL_MODERATED_PERMISSIONS","CREATE_REACTIONS","MANAGE_MEMBERS","MANAGE_BOOKMARKS","MANAGE_BOTS","MANAGE_OTHERS_BOTS","SYSCONSOLE_READ_PERMISSIONS","SYSCONSOLE_WRITE_PERMISSIONS","MANAGE_SHARED_CHANNELS","MANAGE_SECURE_CONNECTIONS","CREATE_CUSTOM_GROUP","MANAGE_CUSTOM_GROUP_MEMBERS","EDIT_CUSTOM_GROUP","DELETE_CUSTOM_GROUP","RESTORE_CUSTOM_GROUP","ADD_BOOKMARK_PUBLIC_CHANNEL","EDIT_BOOKMARK_PUBLIC_CHANNEL","DELETE_BOOKMARK_PUBLIC_CHANNEL","ORDER_BOOKMARK_PUBLIC_CHANNEL","ADD_BOOKMARK_PRIVATE_CHANNEL","EDIT_BOOKMARK_PRIVATE_CHANNEL","DELETE_BOOKMARK_PRIVATE_CHANNEL","ORDER_BOOKMARK_PRIVATE_CHANNEL","PLUGIN_STATE_NOT_RUNNING","PLUGIN_STATE_STARTING","PLUGIN_STATE_RUNNING","PLUGIN_STATE_FAILED_TO_START","PLUGIN_STATE_FAILED_TO_STAY_RUNNING","PLUGIN_STATE_STOPPING","PostTypes","DISPLAYNAME_CHANGE","CONVERT_CHANNEL","EPHEMERAL","EPHEMERAL_ADD_TO_CHANNEL","HEADER_CHANGE","PURPOSE_CHANGE","JOIN_LEAVE","JOIN_CHANNEL","GUEST_JOIN_CHANNEL","LEAVE_CHANNEL","JOIN_LEAVE_CHANNEL","ADD_REMOVE","ADD_TO_CHANNEL","ADD_GUEST_TO_CHANNEL","REMOVE_FROM_CHANNEL","JOIN_TEAM","ADD_TO_TEAM","REMOVE_FROM_TEAM","COMBINED_USER_ACTIVITY","ME","ADD_BOT_TEAMS_CHANNELS","REMINDER","WRANGLER","GM_CONVERTED_TO_CHANNEL","POST_CHUNK_SIZE","SYSTEM_MESSAGE_PREFIX","SYSTEM_AUTO_RESPONDER","POST_TYPES","MESSAGE_TYPES","POST","COMMENT","MAX_PREV_MSGS","POST_COLLAPSE_TIMEOUT","IGNORE_POST_TYPES","USER_ACTIVITY_POST_TYPES","CATEGORY_CHANNEL_OPEN_TIME","CATEGORY_CHANNEL_APPROXIMATE_VIEW_TIME","CATEGORY_DIRECT_CHANNEL_SHOW","CATEGORY_GROUP_CHANNEL_SHOW","CATEGORY_FLAGGED_POST","CATEGORY_AUTO_RESET_MANUAL_STATUS","CATEGORY_NOTIFICATIONS","COLLAPSED_REPLY_THREADS","COLLAPSED_REPLY_THREADS_OFF","COLLAPSED_REPLY_THREADS_ON","COLLAPSED_REPLY_THREADS_FALLBACK_DEFAULT","COMMENTS","COMMENTS_ANY","COMMENTS_ROOT","COMMENTS_NEVER","EMAIL","EMAIL_INTERVAL","INTERVAL_FIFTEEN_MINUTES","INTERVAL_HOUR","INTERVAL_IMMEDIATE","INTERVAL_NEVER","INTERVAL_NOT_SET","CATEGORY_DISPLAY_SETTINGS","NAME_NAME_FORMAT","DISPLAY_PREFER_NICKNAME","DISPLAY_PREFER_FULL_NAME","DISPLAY_PREFER_USERNAME","MENTION_KEYS","USE_MILITARY_TIME","CATEGORY_CUSTOM_STATUS","NAME_CUSTOM_STATUS_TUTORIAL_STATE","NAME_RECENT_CUSTOM_STATUSES","CUSTOM_STATUS_MODAL_VIEWED","CATEGORY_SIDEBAR_SETTINGS","CHANNEL_SIDEBAR_ORGANIZATION","LIMIT_VISIBLE_DMS_GMS","SHOW_UNREAD_SECTION","CATEGORY_ADVANCED_SETTINGS","ADVANCED_FILTER_JOIN_LEAVE","ADVANCED_CODE_BLOCK_ON_CTRL_ENTER","ADVANCED_SEND_ON_CTRL_ENTER","ADVANCED_SYNC_DRAFTS","CATEGORY_WHATS_NEW_MODAL","HAS_SEEN_SIDEBAR_WHATS_NEW_MODAL","CATEGORY_PERFORMANCE_DEBUGGING","NAME_DISABLE_CLIENT_PLUGINS","NAME_DISABLE_TELEMETRY","NAME_DISABLE_TYPING_MESSAGES","UNREAD_SCROLL_POSITION","UNREAD_SCROLL_POSITION_START_FROM_LEFT","UNREAD_SCROLL_POSITION_START_FROM_NEWEST","CATEGORY_UPGRADE_CLOUD","SYSTEM_CONSOLE_LIMIT_REACHED","NEW_CHANNEL_WITH_BOARD_TOUR_SHOWED","CATEGORY_ONBOARDING","CATEGORY_DRAFTS","DRAFTS_TOUR_TIP_SHOWED","CATEGORY_REPORTING","HIDE_BATCH_EXPORT_CONFIRM_MODAL","HIDE_MYSQL_STATS_NOTIFICATION","CATEGORY_OVERAGE_USERS_BANNER","CATEGORY_THEME","THEMES","denim","type","sidebarBg","sidebarText","sidebarUnreadText","sidebarTextHoverBg","sidebarTextActiveBorder","sidebarTextActiveColor","sidebarHeaderBg","sidebarHeaderTextColor","sidebarTeamBarBg","onlineIndicator","awayIndicator","dndIndicator","mentionBg","mentionBj","mentionColor","centerChannelBg","centerChannelColor","newMessageSeparator","linkColor","buttonBg","buttonColor","errorTextColor","mentionHighlightBg","mentionHighlightLink","codeTheme","sapphire","quartz","indigo","onyx","RECENT_EMOJIS","THREADS_CHUNK_SIZE","THREADS_PAGE_SIZE","defaultEqualityCheck","a","b","defaultMemoize","func","measure","equalityCheck","arguments","length","undefined","lastArgs","lastResult","prev","next","i","areArgumentsShallowlyEqual","apply","trackedSelectors","createSelectorCreator","memoize","_len","memoizeOptions","Array","_key","name","_len2","funcs","_key2","id","replace","c","r","Math","floor","random","v","toString","generateId","recomputations","resultFunc","pop","dependencies","isArray","every","dep","dependencyTypes","map","join","Error","getDependencies","memoizedResultFunc","selector","params","push","calls","resetRecomputations","createSelector","getSortedTrackedSelectors","selectors","Object","filter","selectorsData","effectiveness","sort","localeCompare","dumpTrackedSelectorsStatistics","console","table","resetTrackedSelectors","forEach","getPlainLogs","state","entities","admin","plainLogs","getAllLogs","logs","reduce","acc","log","getAudits","audits","getConfig","config","getLdapGroups","ldapGroups","getLdapGroupsCount","ldapGroupsCount","getEnvironmentConfig","environmentConfig","getComplianceReports","complianceReports","getDataRetentionCustomPolicies","dataRetentionCustomPolicies","getDataRetentionCustomPoliciesCount","dataRetentionCustomPoliciesCount","getDataRetentionCustomPolicy","getPluginStatus","_getPluginStatuses","pluginStatuses","getPluginStatuses","getAllCategoriesByIds","channelCategories","byId","getCategory","categoryId","getCategoryInTeamByType","teamId","categoryType","getCategoryWhere","category","team_id","getCategoryInTeamWithChannel","channelId","channel_ids","includes","condition","categoriesByIds","find","getCategoryIdsForTeam","orderByTeam","makeGetCategoriesForTeam","categoryIds","categoriesById","makeCompareChannels","getDisplayName","locale","myMembers","aMuted","isChannelMuted","bMuted","numeric","makeGetChannelIdsForCategory","getChannels","makeGetChannelsForIds","filterAndSortChannelsForCategory","makeFilterAndSortChannelsForCategory","lastChannelIds","channels","filteredChannelIds","channel","shallowEquals","filterArchivedChannels","getCurrentChannelId","currentChannelId","filtered","delete_at","filterAutoclosedDMs","users","profiles","getCurrentUserId","getMyChannelMemberships","getChannelMessageCounts","getVisibleDmGmLimit","getMyPreferences","isCollapsedThreadsEnabled","currentUserId","messageCounts","limitPref","myPreferences","collapsedThreads","getTimestampFromPrefs","pref","getPreferenceKey","parseInt","value","getLastViewedAt","_myMembers$channel$id","max","last_viewed_at","Preferences","unreadCount","visibleChannels","isUnreadChannel","General","teammateId","getUserIdFromChannelName","teammate","lastViewedAt","channelA","channelB","channelAlastViewed","channelBlastViewed","remaining","slice","visibleChannelsSet","Set","filteredChannels","has","filterManuallyClosedDMs","preference","sortChannels","sortChannelsByName","getCurrentUserLocale","display_name","sortChannelsByNameWithDMs","getTeammateNameDisplaySetting","teammateNameDisplay","cachedNames","displayName","displayUsername","usernames","split","userDisplayNames","username","user","profile","sortChannelsByRecency","_state","crtEnabled","aLastPostAt","last_root_post_at","last_post_at","create_at","originalChannels","sorting","CategorySorting","Recency","Alphabetical","Default","some","makeSortChannels","makeGetChannelsByCategory","getCategoriesForTeam","filterAndSortChannels","lastCategoryIds","lastChannelsByCategory","categories","channelsByCategory","allEquals","members","calculateUnreadCount","showUnread","getAllChannels","getAllDmChannels","allChannels","allDmChannels","_objectSpread","getAllChannelStats","stats","getChannelsMemberCount","channelsMemberCount","getChannelsInTeam","channelsInTeam","getChannelsInPolicy","props","policyId","policy","policyChannels","entries","channelEntry","policy_id","getDirectChannelsSet","getChannelMembersInChannels","membersInChannel","getChannelMember","userId","_getChannelMembersInC","makeGetChannel","profilesInChannel","getChannel","isDirectChannel","getStatusForUserId","teammateStatus","newCompleteDirectChannelInfo","getDirectChannel","completeDirectChannelInfo","getMyChannelMembership","ids","getCurrentChannel","getCurrentChannelNameForSearchShortcut","dmChannelWithInfo","gmChannelWithInfo","completeDirectGroupInfo","getMyChannelMember","channelMemberships","getCurrentChannelStats","allChannelStats","isCurrentChannelFavorite","isFavoriteChannel","isCurrentChannelMuted","getMyCurrentChannelMembership","membership","isCurrentChannelArchived","isCurrentChannelDefault","isDefault","getChannelMessageCount","countCurrentChannelUnreadMessages","messageCount","root","msg_count_root","total","msg_count","makeGetChannelUnreadCount","member","getChannelByName","channelName","getChannelByNameHelper","getChannelByTeamIdAndChannelName","getChannelSetInCurrentTeam","getCurrentTeamId","currentTeamId","getChannelSetForAllTeams","channelSet","sortAndInjectChannels","currentChannels","sortChannelsByDisplayName","bind","getChannelsInCurrentTeam","getCurrentUser","currentTeamChannelSet","currentUser","getChannelsInAllTeams","getChannelsNameMapInTeam","channelsInTeams","channelMap","getChannelsNameMapInCurrentTeam","getChannelNameToDisplayNameMap","createIdsSelector","getAllDirectChannels","dmChannels","getAllDirectChannelsNameMapInCurrentTeam","getGroupChannels","gmChannels","getMyChannels","directChannels","hasOwn","getOtherChannels","archived","getMembersInCurrentChannel","basicUnreadMeta","unreadStatus","isUnread","Boolean","unreadMentionCount","getUnreadStatus","getUsers","getMyTeams","getTeamMemberships","getThreadCounts","getThreadCountsIncludingDirect","myTeams","myTeamMemberships","threadCounts","threadCountsIncludingDirect","messages","currentTeamUnreadMessages","mentions","currentTeamUnreadMentions","counts","_ref","_users$getUserIdFromC","mention_count_root","mention_count","otherTeamsUnreadMessages","otherTeamsUnreadMentions","team","totalUnreadMessages","totalUnreadMentions","anyUnreadThreads","keys","currentTeamDirectCounts","total_unread_threads","total_unread_mentions","getTeamsUnreadStatuses","channelMessageCounts","collapsedThreadsEnabled","teamThreadCounts","teamUnreadsSet","teamMentionsMap","Map","teamHasUrgentMap","channelMembership","unreadCountObjectForChannel","add","previousMentionsInTeam","get","set","hasUrgent","threadCountsObjectForTeam","total_unread_urgent_mentions","getUnreadStatusInCurrentTeam","isPostPriorityEnabled","postPriorityEnabled","_users$getUserIdFromC2","m","urgentMentions","urgent_mention_count","canManageChannelMembers","haveICurrentChannelPermission","Permissions","managePrivateMembers","managePublicMembers","canManageAnyChannelMembersInCurrentTeam","myChannelMemberships","myChannelsIds","haveIChannelPermission","getAllDirectChannelIds","directIds","from","getChannelIdsInCurrentTeam","getChannelIdsForCurrentTeam","direct","getChannelIdsInAllTeams","getChannelIdsForAllTeams","getUnreadChannelIds","teamChannelIds","lastUnreadChannel","unreadIds","getAllTeamsUnreadChannelIds","allTeamsChannelIds","getUnreadChannels","getUserIdsInChannels","userIdsInChannels","settings","completeDirectChannelDisplayName","getUnsortedAllTeamsUnreadChannels","allTeamsUnreadChannelIds","sortUnreadChannels","isMuted","hasMentions","hadMentions","getSortedAllTeamsUnreadChannels","getDirectAndGroupChannels","key","getChannelsWithUserProfiles","channelUserMap","getProfiles","usersIdsInChannel","getDefaultChannelForTeams","result","getMyFirstChannelForTeams","teamChannels","getRedirectChannelNameForTeam","defaultChannelForTeam","canIJoinPublicChannelsInTeam","haveITeamPermission","myFirstChannelForTeam","isManuallyUnread","manuallyUnread","getChannelModerations","channelModerations","EMPTY_OBJECT","getChannelMemberCountsByGroup","channelMemberCountsByGroup","filterChannelList","channelList","filters","private","public","deleted","team_ids","channelType","teamResult","filterResult","searchChannelsInPolicy","term","channelsInPolicy","filterChannelsMatchingTerm","getDirectTeammate","userIds","indexOf","getUser","makeGetGmChannelMemberCount","memberIds","membersCount","groupMemberIds","size","getMyActiveChannelIds","flatMap","chan","getRecentProfilesFromDMs","memberships","recentChannelIds","aMembership","bMembership","channel_id","groupChannels","userProfilesByChannel","otherUserId","userProfile","memberProfiles","trim","sortedUserProfiles","cid","isDeactivatedDirectChannel","getMembersInChannel","_state$entities$chann","_state$entities$chann2","getMembersInTeam","_state$entities$teams","_state$entities$teams2","teams","membersInTeam","getIsUserStatusesConfigEnabled","general","EnableUserStatuses","getFeatureFlagValue","_getConfig","getPasswordConfig","minimumLength","PasswordMinimumLength","requireLowercase","PasswordRequireLowercase","requireUppercase","PasswordRequireUppercase","requireNumber","PasswordRequireNumber","requireSymbol","PasswordRequireSymbol","getLicense","license","isCloudLicense","Cloud","isCompatibleWithJoinViewTeamPermissions","version","serverVersion","isMinimumServerVersion","match","EnableFileAttachments","IsLicensed","Compliance","EnableMobileFileUpload","EnableMobileFileDownload","getAutolinkedUrlSchemes","CustomUrlSchemes","getManagedResourcePaths","ManagedResourcePaths","path","getServerVersion","getFirstAdminVisitMarketplaceStatus","firstAdminVisitMarketplaceStatus","getFirstAdminSetupComplete","firstAdminCompleteSetup","isPerformanceDebuggingEnabled","EnableClientPerformanceDebugging","isMarketplaceEnabled","PluginsEnabled","EnableMarketplace","getGiphyFetchInstance","GiphySdkKey","giphySdkKey","GiphyFetch","getUsersStatusAndProfileFetchingPollInterval","usersStatusAndProfileFetchingPollInterval","UsersStatusAndProfileFetchingPollIntervalMilliseconds","testingEnabled","EnableTesting","getCustomProfileAttributes","customProfileAttributes","defaultLocale","getAllPosts","posts","getPost","postId","isPostFlagged","getBool","getPostRepliesCount","postsReplies","getPostsInThread","postsInThread","getPostsInThreadOrdered","rootId","postIds","allPosts","comparePosts","getReactionsForPosts","reactions","makeGetReactionsForPost","getHasReactions","_getReactionsForPosts","getOpenGraphMetadataForUrl","url","openGraphForPost","openGraph","makeGetPostIdsForThread","getPostsForThread","makeGetPostsForThread","post","makeGetPostsChunkAroundPost","postsInChannel","postsForChannel","postChunk","block","order","isPostInteractable","isPostEphemeral","isSystemMessage","isPostPendingOrFailed","Posts","getLatestInteractablePostId","postsIds","getPostIdsInChannel","getLatestPostToEdit","user_id","getPostsInCurrentChannel","shouldShowJoinLeaveMessages","showJoinLeave","shouldFilterJoinLeavePost","postsForThread","rootPost","thread","makeGetProfilesForThread","getUserStatuses","allUsers","userStatuses","profileIds","status","makeGetCommentCountForPost","root_id","reply_count","count","getSearchResults","search","results","getSearchMatches","matches","makeGetPostsForIds","getMostRecentPostIdInChannel","postIdsInChannel","allowSystemMessages","p","startsWith","getRecentPostsChunkInChannel","recent","getOldestPostTimeInChannel","oldestPostTime","postBlock","_allPosts$oldestPostI","oldestPostIdInBlock","blockOldestPostTime","Number","MAX_SAFE_INTEGER","recentBlock","getUnreadPostsChunk","timeStamp","recentChunk","oldestPostsChunk","oldest","getOldestPostsChunkInChannel","postsEntity","recentPostInBlock","oldestPostInBlock","getPostsChunkInChannelAroundTime","isPostsChunkIncludingUnreadsPosts","chunk","isPostIdSending","pendingPostIds","sendingPostId","makeIsPostCommentMention","threadRepliedToByCurrentUser","isCommentMention","threadIds","pid","isPostCommentMention","getLimitedViews","limitedViews","PostPriority","isPostAcknowledgementsEnabled","PostAcknowledgements","getPersistentNotificationMaxRecipients","PersistentNotificationMaxRecipients","getPersistentNotificationIntervalMinutes","PersistentNotificationIntervalMinutes","getPostAcknowledgements","acknowledgements","isPersistentNotificationsEnabled","AllowPersistentNotifications","AllowPersistentNotificationsForGuests","forAll","forGuests","isGuest","roles","makeGetPostAcknowledgementsWithProfiles","acknowledgedAt","getTeamIdFromPost","preferences","getUserPreferences","userID","userPreferences","getPreferenceObject","defaultValue","getFromPreferences","String","getInt","makeGetCategory","selectorName","prefix","prefsInCategory","makeGetUserCategory","getDirectShowPreferences","teammateNameDisplayPreference","useAdminTeammateNameDisplaySetting","LockTeammateNameDisplay","TeammateNameDisplay","getThemePreferences","getThemePreference","themePreference","getDefaultTheme","DefaultTheme","theme","getTheme","createShallowSelector","defaultTheme","_themePreference$valu","themeValue","JSON","parse","setThemeDefaults","enableJoinLeaveMessage","EnableJoinLeaveMessageByDefault","shouldShowUnreadsCategory","ExperimentalGroupUnreadChannels","userPreference","oldUserPreference","serverDefault","unreads_at_top","getUnreadScrollPositionPreference","getCollapsedThreadsPreference","configValue","CollapsedThreads","preferenceDefault","isCollapsedThreadsAllowed","isAllowed","isCollapsedThreadsEnabledForUser","_getConfig2","getCollapsedThreadsPreferenceFromPreferences","isGroupChannelManuallyVisible","isCustomGroupsEnabled","EnableCustomGroups","getIsOnboardingFlowEnabled","EnableOnboardingFlow","syncedDraftsAreAllowed","AllowSyncedDrafts","syncedDraftsAreAllowedAndEnabled","isConfiguredForFeature","isConfiguredForUser","onboardingTourTipsEnabled","moveThreadsEnabled","streamlinedMarketplaceEnabled","getOverageBannerPreferences","getGroupMemberships","groups","myGroups","myGroupIDs","currentUserID","groupMemberships","groupID","getMyGroupRoles","getGroupListPermissions","getRoles","getMySystemPermissions","myGroupRoles","systemPermissions","allGroups","entry","allow_reference","permissions","group","roleNames","roleName","permission","groupPermissionsMap","g","can_delete","source","toLowerCase","can_manage_members","can_restore","getMyTeamRoles","teamsMemberships","getRolesById","rolesByName","rolesById","role","getMyPermissionsByTeam","myTeamRoles","allRoles","permissionsByTeam","getPermissionsForRoles","getMyPermissionsByGroup","permissionsByGroup","groupId","getMyPermissionsByChannel","myChannelRoles","permissionsByChannel","_getMyPermissionsByTe","haveIGroupPermission","permissionGroups","_getMyPermissionsByTe2","_getMyPermissionsByCh","haveICurrentTeamPermission","getMySystemRoles","mySystemRoles","haveISystemPermission","options","roleSet","getTeamByName","getTeams","getTeamsInPolicy","allTeams","policyTeams","item","getTeamStats","getMembersInTeams","getTeamsList","getActiveTeamsList","getCurrentTeam","getTeam","getCurrentTeamMembership","teamMemberships","getCurrentTeamUrl","isTeamAdmin","SiteURL","currentTeam","siteURL","getCurrentRelativeTeamUrl","getRelativeTeamUrl","getCurrentTeamStats","teamStats","t","getMyTeamMember","getMembersInCurrentTeam","teamMembers","getTeamMember","_getMembersInTeams$te","getListableTeamIds","canListPublicTeams","canListPrivateTeams","compatibleWithJoinViewTeamPermissions","canList","allow_open_invite","getSortedListableTeams","listableTeamIds","listableTeams","sortTeamsWithLocale","getJoinableTeamIds","canJoinPublicTeams","canJoinPrivateTeams","canJoin","getMyTeamsCount","joinableTeamIds","joinableTeams","collapsed","mentionCount","badgeCount","isTeamSameWithCurrentTeam","teamName","targetTeam","searchTeamsInPolicy","filterTeamsStartingWithTerm","getTeamIdByChannelId","getUserIdsNotInChannels","profilesNotInChannel","getUserIdsInTeams","profilesInTeam","getUserIdsNotInTeams","profilesNotInTeam","getUserIdsInGroups","profilesInGroup","statuses","getUserSessions","mySessions","getUserAudits","myAudits","getUsersByUsername","usersByUsername","getUserByUsername","getUsersByEmail","usersByEmail","email","getUserByEmail","isCurrentUserSystemAdmin","isSystemAdmin","isCurrentUserGuestUser","currentUserHasAnAdminRole","includesAnAdminRole","getCurrentUserRoles","currentChannelMembership","currentTeamMembership","getCurrentUserMentionKeys","notify_props","mention_keys","first_name","caseSensitive","usernameKey","findIndex","getHighlightWithoutNotificationKeys","_user$notify_props","_user$notify_props$hi","highlightKeys","highlight_keys","getProfileSetInCurrentChannel","currentChannel","channelProfiles","getProfileSetNotInCurrentChannel","getProfileSetInCurrentTeam","teamProfiles","getProfileSetNotInCurrentTeam","PROFILE_SET_ALL","sortAndInjectProfiles","profileSet","injectProfiles","sortByUsername","currentProfiles","filterProfiles","filterRoles","team_roles","channel_roles","excludeRoles","exclude_roles","applyRolesFilters","exclude_bots","is_bot","inactive","active","exclude_remote","remote_id","getIsManualStatusForUserId","isManualStatus","getProfilesInCurrentChannel","currentChannelProfileSet","getActiveProfilesInCurrentChannelWithoutSorting","getProfilesNotInCurrentChannel","notInCurrentChannelProfileSet","getProfilesInCurrentTeam","currentTeamProfileSet","getProfilesInTeam","usersInTeams","getProfilesNotInTeam","usersNotInTeams","getProfilesNotInCurrentTeam","notInCurrentTeamProfileSet","getDndEndTimeForUserId","dndEndTimes","getTotalUsersStats","getFilteredUsersStats","filteredStats","filterFromProfiles","skipCurrent","filteredProfilesMap","profileListToMap","filteredProfiles","removeCurrentUserFromList","makeSearchProfilesStartingWithTerm","stateGlobalState","filterProfilesMatchingWithTerm","makeSearchProfilesMatchingWithTerm","makeSearchProfilesInChannel","doGetProfilesInChannel","makeGetProfilesInChannel","filterProfilesStartingWithTerm","searchProfilesInCurrentChannel","searchActiveProfilesInCurrentChannel","searchProfilesInCurrentTeam","searchProfilesInTeam","index","splice","profilesWithoutTeam","withoutTeamProfileSet","shouldShowTermsOfService","acceptedTermsId","terms_of_service_id","acceptedAt","terms_of_service_create_at","featureEnabled","EnableCustomTermsOfService","reacceptanceTime","CustomTermsOfServiceReAcceptancePeriod","timeElapsed","Date","getTime","CustomTermsOfServiceId","makeGetProfilesForReactions","userIdsInChannel","makeGetProfilesNotInChannel","makeGetProfilesByIdsAndUsernames","allUserIds","allUsernames","allProfilesById","allProfilesByUsername","userProfiles","profilesById","secureGetFromRecord","profilesByUsername","makeGetDisplayName","teammateNameDisplaySetting","useFallbackUsername","makeDisplayNameGetter","_","dmUsers","getProfilesInGroup","usersInGroups","getProfilesInGroupWithoutSorting","getProfilesNotInCurrentGroup","profilesNotInGroup","usersNotInGroups","searchProfilesInGroup","searchProfilesInGroupWithoutSorting","getLastActivityForUserId","lastActivity","getUserLastActivities","checkIsFirstAdmin","isFirstAdmin","displayLastActiveLabel","userStatus","timestamp","_user$props","currentTime","valueOf","show_last_active","EnableLastActiveTime","getLastActiveTimestampUnits","timestampUnits","createReducer","reducerSets","reducer","combineReducers","fullSet","reducerSet","enableBatching","removeUnneededMetadata","metadata","changed","emojis","Reflect","deleteProperty","files","embeds","embedsChanged","newEmbeds","embed","newEmbed","permalinkEmbed","data","nextPostsReplies","action","RECEIVED_POST","RECEIVED_NEW_POST","newState","RECEIVED_POSTS","nextState","UserTypes","LOGOUT_SUCCESS","handlePostReceived","nestedPermalinkLevel","currentState","shouldUpdatePost","isPermalink","update_at","is_following","file_ids","has_reactions","pending_post_id","participants","nextRootPost","handlePendingPosts","POST_REMOVED","removeNonRecentEmptyPostBlocks","blocks","mergePostBlocks","nextBlocks","aStartsAt","aEndsAt","mergePostOrder","left","right","seen","prevPosts","nextPostsForThread","RECEIVED_POSTS_AFTER","RECEIVED_POSTS_BEFORE","RECEIVED_POSTS_IN_CHANNEL","RECEIVED_POSTS_SINCE","newPosts","RECEIVED_POSTS_IN_THREAD","ChannelTypes","RECEIVED_CHANNEL_DELETED","DELETE_CHANNEL_SUCCESS","viewArchivedChannels","postDeleted","postEditHistory","RECEIVED_POST_HISTORY","currentFocusedPostId","RECEIVED_FOCUSED_POST","RECEIVED_REACTION","reaction","nextReactions","post_id","emoji_name","REACTION_DELETED","storeReactionsForPost","CREATE_ACK_POST_SUCCESS","ack","oldState","acknowledged_at","DELETE_ACK_POST_SUCCESS","storeAcknowledgementsForPost","reactionsForPost","_post$metadata","acknowledgementsForPost","storeOpenGraphForPost","previewPost","postIdState","messagesHistory","comment","ADD_MESSAGE_INTO_HISTORY","nextIndex","nextMessages","RESET_HISTORY_INDEX","MOVE_HISTORY_INDEX_BACK","MOVE_HISTORY_INDEX_FORWARD","zeroStateLimitedViews","threads","first_inaccessible_post_time","CloudTypes","RECEIVED_CLOUD_LIMITS","_limits$messages","_limits$messages2","limits","history","myUserAccessTokens","serverLimits","activeUserCount","maxUsersLimit","groupsAssociatedToTeam","totalCount","groupsAssociatedToChannel","channelBookmarks","byChannelId","threadsInTeam","unreadThreadsInTeam","countsIncludingDirect","bots","accounts","userAccessTokens","clusterInfo","analytics","teamAnalytics","prevTrialLicense","jobs","jobsByTypeList","integrations","incomingHooks","incomingHooksTotalCount","outgoingHooks","oauthApps","systemCommands","commands","appsBotIDs","appsOAuthAppIDs","outgoingOAuthConnections","filesFromSearch","fileIdsByPostId","customEmoji","nonExistentEmoji","fileResults","current","flagged","pinned","isSearchingTerm","isSearchGettingMore","isLimitedResults","typing","pending","schemes","syncables","apps","main","bindings","forms","rhs","pluginEnabled","cloud","limitsLoaded","errors","hostedCustomer","products","productsLoaded","usage","totalStorage","totalStorageLoaded","historyLoaded","cloudArchived","teamsLoaded","scheduledPosts","byTeamId","errorsByTeamId","byChannelOrThreadId","requests","error","myChannels","createChannel","websocket","createPost","editPost","getPostThread","login","logout","autocompleteUsers","updateMe","createCompliance","uploadFiles","getRolesByNames","getRoleByName","getRole","editRole","connected","lastConnectAt","lastDisconnectAt","connectionId","serverHostname","convertAnalyticsRowsToStats","clonedData","reverse","Stats","row","AdminTypes","RECEIVED_LOGS","RECEIVED_PLAIN_LOGS","RECEIVED_AUDITS","audit","RECEIVED_CONFIG","ENABLED_PLUGIN","nextPluginSettings","PluginSettings","nextPluginStates","PluginStates","Enable","DISABLED_PLUGIN","RECEIVED_ENVIRONMENT_CONFIG","RECEIVED_COMPLIANCE_REPORT","RECEIVED_COMPLIANCE_REPORTS","report","RECEIVED_CLUSTER_STATUS","samlCertStatus","RECEIVED_SAML_CERT_STATUS","RECEIVED_SYSTEM_ANALYTICS","RECEIVED_TEAM_ANALYTICS","analyticsForTeam","userAccessTokensByUser","RECEIVED_USER_ACCESS_TOKEN","nextUserState","RECEIVED_USER_ACCESS_TOKENS_FOR_USER","uat","REVOKED_USER_ACCESS_TOKEN","ENABLED_USER_ACCESS_TOKEN","token","is_active","DISABLED_USER_ACCESS_TOKEN","plugins","RECEIVED_PLUGINS","activePlugins","plugin","inactivePlugins","REMOVED_PLUGIN","RECEIVED_PLUGIN_STATUSES","plugin_id","pluginState","instances","cluster_id","description","ENABLE_PLUGIN_REQUEST","pluginId","PluginState","ENABLE_PLUGIN_FAILURE","DISABLE_PLUGIN_REQUEST","RECEIVED_LDAP_GROUPS","primary_key","LINKED_LDAP_GROUP","UNLINKED_LDAP_GROUP","mattermost_group_id","has_syncables","failed","LINK_LDAP_GROUP_FAILURE","UNLINK_LDAP_GROUP_FAILURE","samlMetadataResponse","RECEIVED_SAML_METADATA_RESPONSE","CREATE_DATA_RETENTION_CUSTOM_POLICY_SUCCESS","RECEIVED_DATA_RETENTION_CUSTOM_POLICY","UPDATE_DATA_RETENTION_CUSTOM_POLICY_SUCCESS","RECEIVED_DATA_RETENTION_CUSTOM_POLICIES","policies","dataRetention","DELETE_DATA_RETENTION_CUSTOM_POLICY_SUCCESS","total_count","PREV_TRIAL_LICENSE_SUCCESS","AppsTypes","FAILED_TO_FETCH_APP_BINDINGS","RECEIVED_APP_BINDINGS","validateBindings","APPS_PLUGIN_DISABLED","RECEIVED_APP_COMMAND_FORM","form","RECEIVED_APP_RHS_BINDINGS","RECEIVED_APP_RHS_COMMAND_FORM","APPS_PLUGIN_ENABLED","BotTypes","RECEIVED_BOT_ACCOUNTS","newBots","bot","RECEIVED_BOT_ACCOUNT","ChannelBookmarkTypes","RECEIVED_BOOKMARKS","bookmarks","arr","x","RECEIVED_BOOKMARK","bookmark","BOOKMARK_DELETED","channelNextState","toNewObj","ChannelCategoryTypes","RECEIVED_CATEGORIES","isWebSocket","RECEIVED_CATEGORY","CATEGORY_DELETED","nextChannelIds","TeamTypes","receivedChannel","categoryID","channelID","RECEIVED_CATEGORY_ORDER","removeItem","updateMessageCount","existing","total_msg_count_root","total_msg_count","toClientChannel","serverChannel","receiveChannelMember","received","existingChannelMember","updatedChannelMember","isEqual","last_update_at","min","updateChannelMemberSchemeRoles","isSchemeUser","isSchemeAdmin","scheme_user","scheme_admin","SELECT_CHANNEL","RECEIVED_CHANNEL","RECEIVED_DATA_RETENTION_CUSTOM_POLICY_CHANNELS","channelListToMap","RECEIVED_DATA_RETENTION_CUSTOM_POLICY_CHANNELS_SEARCH","RECEIVED_CHANNELS","RECEIVED_ALL_CHANNELS","SchemeTypes","RECEIVED_SCHEME_CHANNELS","deleteAt","RECEIVED_CHANNEL_UNARCHIVED","_action$features","createAt","isCrtReply","features","lastRootPostAt","UPDATED_CHANNEL_SCHEME","schemeId","scheme_id","REMOVE_DATA_RETENTION_CUSTOM_POLICY_CHANNELS_SUCCESS","nextSet","channelListToSet","delete","removeChannelFromSet","RECEIVED_MY_CHANNEL_MEMBER","RECEIVED_MY_CHANNEL_MEMBERS","remove","RECEIVED_CHANNEL_PROPS","notifyProps","SET_CHANNEL_MUTED","muted","mark_unread","INCREMENT_UNREAD_MSG_COUNT","amount","amountRoot","onlyMentions","fetchedChannelMember","DECREMENT_UNREAD_MSG_COUNT","INCREMENT_UNREAD_MENTION_COUNT","amountUrgent","DECREMENT_UNREAD_MENTION_COUNT","RECEIVED_LAST_VIEWED_AT","UPDATED_CHANNEL_MEMBER_SCHEME_ROLES","POST_UNREAD_SUCCESS","channelState","msgCount","msgCountRoot","mentionCountRoot","urgentMentionCount","channelMember","oldRoles","newRoles","splitRoles","stateChanged","cm","RECEIVED_CHANNEL_MEMBER","_members$member$user_","_members$member$user_2","RECEIVED_CHANNEL_MEMBERS","PROFILE_NO_LONGER_VISIBLE","removeMemberFromChannels","REMOVE_MEMBER_FROM_CHANNEL","RECEIVED_PROFILE_NOT_IN_CHANNEL","RECEIVED_CHANNEL_STATS","stat","ADD_CHANNEL_MEMBER_SUCCESS","receivedCount","nextStat","member_count","REMOVE_CHANNEL_MEMBER_SUCCESS","INCREMENT_PINNED_POST_COUNT","pinnedpost_count","DECREMENT_PINNED_POST_COUNT","INCREMENT_FILE_COUNT","files_count","GroupTypes","RECEIVED_ALL_GROUPS_ASSOCIATED_TO_CHANNELS_IN_TEAM","groupsByChannelId","associatedGroupIDs","RECEIVED_GROUPS_ASSOCIATED_TO_CHANNEL","totalGroupCount","RECEIVED_ALL_GROUPS_ASSOCIATED_TO_CHANNEL","RECEIVED_GROUPS_NOT_ASSOCIATED_TO_CHANNEL","RECEIVED_TOTAL_CHANNEL_COUNT","REMOVE_MANUALLY_UNREAD","ADD_MANUALLY_UNREAD","RECEIVED_CHANNEL_MODERATIONS","moderations","RECEIVED_CHANNEL_MEMBER_COUNTS_BY_GROUP","memberCounts","memberCountsByGroup","channelMemberCount","group_id","RECEIVED_CHANNEL_MEMBER_COUNTS_FROM_GROUPS_LIST","channel_member_count","channel_member_timezones_count","INCREMENT_TOTAL_MSG_COUNT","RECEIVED_CHANNELS_MEMBER_COUNT","memberCount","emptyLimits","emptyErrors","customer","RECEIVED_CLOUD_CUSTOMER","subscription","RECEIVED_CLOUD_SUBSCRIPTION","RECEIVED_CLOUD_PRODUCTS","productDict","obj","invoices","RECEIVED_CLOUD_INVOICES","invoiceDict","CLOUD_SUBSCRIPTION_FAILED","CLOUD_PRODUCTS_FAILED","CLOUD_CUSTOMER_FAILED","CLOUD_INVOICES_FAILED","CLOUD_LIMITS_FAILED","assign","CLOUD_SUBSCRIPTION_REQUEST","CLOUD_PRODUCTS_REQUEST","CLOUD_CUSTOMER_REQUEST","CLOUD_INVOICES_REQUEST","CLOUD_LIMITS_REQUEST","storeEmoji","emoji","storeEmojisForPost","EmojiTypes","RECEIVED_CUSTOM_EMOJI","RECEIVED_CUSTOM_EMOJIS","DELETED_CUSTOM_EMOJI","CLEAR_CUSTOM_EMOJIS","CUSTOM_EMOJI_DOES_NOT_EXIST","storeAllFilesForPost","storeFilesCallback","storeFilesForPost","file","storeFilesIdsForPost","FileTypes","RECEIVED_UPLOAD_FILES","RECEIVED_FILES_FOR_POST","filesById","filesMap","REMOVED_FILE","fileIds","RECEIVED_FILES_FOR_SEARCH","filesIdsForPost","filePublicLink","link","RECEIVED_FILE_PUBLIC_LINK","GeneralTypes","CLIENT_CONFIG_RECEIVED","LOGIN","SET_CONFIG_AND_LICENSE","CLIENT_CONFIG_RESET","CLIENT_LICENSE_RECEIVED","CLIENT_LICENSE_RESET","CUSTOM_PROFILE_ATTRIBUTES_RECEIVED","field","RECEIVED_SERVER_VERSION","FIRST_ADMIN_COMPLETE_SETUP_RECEIVED","RECEIVED_GROUP_TEAMS","RECEIVED_GROUP_CHANNELS","PATCHED_GROUP_TEAM","LINKED_GROUP_TEAM","nextGroupTeams","len","PATCHED_GROUP_CHANNEL","LINKED_GROUP_CHANNEL","nextGroupChannels","UNLINKED_GROUP_TEAM","_state$action$data$gr","_state$action$data$gr2","nextTeams","nextChannels","groupTeam","syncable_id","groupChannel","UNLINKED_GROUP_CHANNEL","CREATE_GROUP_SUCCESS","PATCHED_GROUP","RESTORED_GROUP","ARCHIVED_GROUP","RECEIVED_MY_GROUPS","RECEIVED_GROUPS","RECEIVED_GROUPS_ASSOCIATED_TO_TEAM","RECEIVED_ALL_GROUPS_ASSOCIATED_TO_TEAM","RECEIVED_GROUP_STATS","ADD_MY_GROUP","REMOVE_MY_GROUP","initialProducts","HostedCustomerTypes","RECEIVED_SELF_HOSTED_PRODUCTS","SELF_HOSTED_PRODUCTS_FAILED","SELF_HOSTED_PRODUCTS_REQUEST","IntegrationTypes","RECEIVED_INCOMING_HOOK","RECEIVED_INCOMING_HOOKS","hook","DELETED_INCOMING_HOOK","RECEIVED_INCOMING_HOOKS_TOTAL_COUNT","RECEIVED_OUTGOING_HOOK","RECEIVED_OUTGOING_HOOKS","DELETED_OUTGOING_HOOK","RECEIVED_COMMANDS","RECEIVED_CUSTOM_TEAM_COMMANDS","command","RECEIVED_COMMAND","RECEIVED_COMMAND_TOKEN","DELETED_COMMAND","RECEIVED_OAUTH_APPS","app","RECEIVED_OAUTH_APP","DELETED_OAUTH_APP","RECEIVED_APPS_OAUTH_APP_IDS","orderedState","orderedData","RECEIVED_APPS_BOT_IDS","RECEIVED_OUTGOING_OAUTH_CONNECTIONS","connection","RECEIVED_OUTGOING_OAUTH_CONNECTION","DELETED_OUTGOING_OAUTH_CONNECTION","nextCommands","trigger","dialogTriggerId","RECEIVED_DIALOG_TRIGGER_ID","dialog","RECEIVED_DIALOG","JobTypes","RECEIVED_JOB","RECEIVED_JOBS","job","RECEIVED_JOBS_BY_TYPE","LimitsTypes","RECIEVED_APP_LIMITS","getKey","setAllPreferences","PreferenceTypes","RECEIVED_ALL_PREFERENCES","RECEIVED_PREFERENCES","DELETED_PREFERENCES","RECEIVED_USER_ALL_PREFERENCES","setAllUserPreferences","RECEIVED_USER_PREFERENCES","RoleTypes","RECEIVED_ROLES","ROLE_DELETED","RECEIVED_ROLE","SET_PENDING_ROLES","ScheduledPostTypes","SCHEDULED_POSTS_RECEIVED","scheduledPostsByTeamId","scheduledPost","SINGLE_SCHEDULED_POST_RECEIVED","SCHEDULED_POST_UPDATED","SCHEDULED_POST_DELETED","existingIndex","existingScheduledPostId","modified","prune","scheduledPostId","teamScheduledPosts","error_code","CREATED_SCHEME","PATCHED_SCHEME","RECEIVED_SCHEME","RECEIVED_SCHEMES","scheme","DELETED_SCHEME","removePinnedPost","pinnedPosts","SearchTypes","RECEIVED_SEARCH_FLAGGED_POSTS","hasNewFlaggedPosts","unshift","flaggedPostsRemoved","REMOVE_SEARCH_POSTS","RECEIVED_SEARCH_PINNED_POSTS","is_pinned","RECEIVED_SEARCH_POSTS","isGettingMore","RECEIVED_SEARCH_FILES","REMOVE_SEARCH_FILES","RECEIVED_SEARCH_TERM","isEnd","isFilesEnd","SEARCH_POSTS_REQUEST","SEARCH_POSTS_SUCCESS","_action$data","SELECT_TEAM","RECEIVED_TEAMS_LIST","RECEIVED_SCHEME_TEAMS","RECEIVED_DATA_RETENTION_CUSTOM_POLICY_TEAMS_SEARCH","teamListToMap","RECEIVED_DATA_RETENTION_CUSTOM_POLICY_TEAMS","RECEIVED_TEAMS","CREATED_TEAM","UPDATED_TEAM","PATCHED_TEAM","REGENERATED_TEAM_INVITE_ID","RECEIVED_TEAM","RECEIVED_TEAM_DELETED","RECEIVED_TEAM_UNARCHIVED","UPDATED_TEAM_SCHEME","REMOVE_DATA_RETENTION_CUSTOM_POLICY_TEAMS_SUCCESS","updateState","receivedTeams","RECEIVED_MY_TEAM_MEMBER","RECEIVED_MY_TEAM_MEMBERS","prevMember","RECEIVED_MY_TEAM_UNREADS","unreads","u","abs","UPDATED_TEAM_MEMBER_SCHEME_ROLES","updateMyTeamMemberSchemeRoles","deltaMsgs","teamState","newTeamState","teamUnreads","unread","RECEIVED_MEMBER_IN_TEAM","RECEIVED_TEAM_MEMBERS","RECEIVED_MEMBERS_IN_TEAM","REMOVE_MEMBER_FROM_TEAM","updateTeamMemberSchemeRoles","RECEIVED_TEAM_STATS","teamID","RECEIVED_GROUPS_NOT_ASSOCIATED_TO_TEAM","RECEIVED_TOTAL_TEAM_COUNT","isDmGmChannel","handleAllTeamThreadsRead","_state$action$data$te","handleReadChangedThread","isUrgent","prevUnreadMentions","newUnreadMentions","prevUnreadReplies","newUnreadReplies","unreadMentionDiff","handleLeaveTeam","handleLeaveChannel","extra","threadsToDelete","unreadMentions","unreadThreads","unreadUrgentMentions","curr","unread_mentions","unread_replies","is_urgent","totalUnreadThreads","totalUnreadUrgentMentions","handleDecrementThreadCounts","replies","countsIncludingDirectReducer","ThreadTypes","ALL_TEAM_THREADS_READ","READ_CHANGED_THREAD","teamIds","FOLLOW_CHANGED_THREAD","following","RECEIVED_THREAD_COUNTS","_state$action$data$te2","DECREMENT_THREAD_COUNTS","countsReducer","thread_count","thread_mention_count","thread_urgent_mention_count","shouldAddThreadId","last_reply_at","handlePostRemoved","handleSingleTeamReceivedThread","handleReceivedThread","handleAllTeamsReceivedThread","handleReceiveThreads","threadDeleted","handleSingleTeamThreadRead","threadsInTeamReducer","RECEIVED_THREAD","RECEIVED_THREADS","unreadThreadsInTeamReducer","RECEIVED_UNREAD_THREADS","handleFollowChanged","threadsReducer","nextThread","initialState","emptyUsage","boards","cards","cardsLoaded","profilesToSet","addProfileToSet","profileListToSet","removeProfileListFromSet","removeProfileFromSets","removed","removeProfileFromSet","receiveUserProfile","merged","last_name","last_password_update","auth_service","RECEIVED_ME","RECEIVED_SESSIONS","RECEIVED_REVOKED_SESSION","sessionId","REVOKE_ALL_USER_SESSIONS_SUCCESS","isCurrentUser","REVOKE_SESSIONS_FOR_ALL_USERS_SUCCESS","RECEIVED_MY_USER_ACCESS_TOKEN","RECEIVED_MY_USER_ACCESS_TOKENS","CLEAR_MY_USER_ACCESS_TOKENS","RECEIVED_PROFILE","RECEIVED_PROFILES_LIST","RECEIVED_PROFILES","RECEIVED_TERMS_OF_SERVICE_STATUS","RECEIVED_PROFILE_IN_TEAM","RECEIVED_PROFILES_LIST_IN_TEAM","RECEIVED_PROFILES_IN_TEAM","RECEIVED_PROFILE_NOT_IN_TEAM","RECEIVED_PROFILES_LIST_NOT_IN_TEAM","RECEIVED_PROFILES_LIST_NOT_IN_TEAM_AND_REPLACE","RECEIVED_PROFILE_WITHOUT_TEAM","RECEIVED_PROFILES_LIST_WITHOUT_TEAM","RECEIVED_PROFILE_IN_CHANNEL","RECEIVED_PROFILES_LIST_IN_CHANNEL","RECEIVED_PROFILES_IN_CHANNEL","CHANNEL_MEMBER_REMOVED","RECEIVED_PROFILES_LIST_NOT_IN_CHANNEL","RECEIVED_PROFILES_LIST_NOT_IN_CHANNEL_AND_REPLACE","RECEIVED_PROFILES_NOT_IN_CHANNEL","removeProfilesFromSet","CHANNEL_MEMBER_ADDED","RECEIVED_PROFILES_LIST_IN_GROUP","RECEIVED_PROFILES_FOR_GROUP","RECEIVED_PROFILES_LIST_TO_REMOVE_FROM_GROUP","RECEIVED_PROFILES_LIST_NOT_IN_GROUP","RECEIVED_DND_END_TIMES","RECEIVED_STATUSES","RECEIVED_STATUSES_IS_MANUAL","RECEIVED_USER_STATS","RECEIVED_FILTERED_USER_STATS","RECEIVED_LAST_ACTIVITIES","nextPosts","message","otherPost","POST_PINNED_CHANGED","isPinned","updateAt","handlePosts","nextPostsInChannel","RESET_POSTS_IN_CHANNEL","PostConstant","recentBlockIndex","nextRecentBlock","nextPostsForChannel","_action$features2","afterPostId","beforePostId","mostOldestCreateAt","nextOrder","WebsocketEvents","now","channelThreads","getThreadsOfChannel","RECEIVED_MESSAGES_USAGE","RECEIVED_FILES_USAGE","RECEIVED_BOARDS_USAGE","RECEIVED_TEAMS_USAGE","initialRequestState","RequestStatus","handleRequest","REQUEST","CREATE_COMPLIANCE_REQUEST","CREATE_COMPLIANCE_SUCCESS","CREATE_COMPLIANCE_FAILURE","GET_CHANNELS_REQUEST","GET_CHANNELS_SUCCESS","GET_CHANNELS_FAILURE","GET_ALL_CHANNELS_REQUEST","GET_ALL_CHANNELS_SUCCESS","GET_ALL_CHANNELS_FAILURE","CHANNELS_REQUEST","CHANNELS_SUCCESS","CHANNELS_FAILURE","CREATE_CHANNEL_REQUEST","CREATE_CHANNEL_SUCCESS","CREATE_CHANNEL_FAILURE","CANCEL","handleUploadFilesRequest","UPLOAD_FILES_REQUEST","UPLOAD_FILES_SUCCESS","UPLOAD_FILES_FAILURE","UPLOAD_FILES_CANCEL","WEBSOCKET_CLOSED","WEBSOCKET_REQUEST","WEBSOCKET_SUCCESS","WEBSOCKET_FAILURE","CREATE_POST_RESET_REQUEST","CREATE_POST_REQUEST","CREATE_POST_SUCCESS","CREATE_POST_FAILURE","EDIT_POST_REQUEST","EDIT_POST_SUCCESS","EDIT_POST_FAILURE","GET_POST_THREAD_REQUEST","GET_POST_THREAD_SUCCESS","GET_POST_THREAD_FAILURE","ROLES_BY_NAMES_REQUEST","ROLES_BY_NAMES_SUCCESS","ROLES_BY_NAMES_FAILURE","ROLE_BY_NAME_REQUEST","ROLE_BY_NAME_SUCCESS","ROLE_BY_NAME_FAILURE","ROLE_BY_ID_REQUEST","ROLE_BY_ID_SUCCESS","ROLE_BY_ID_FAILURE","EDIT_ROLE_REQUEST","EDIT_ROLE_SUCCESS","EDIT_ROLE_FAILURE","flaggedPosts","SEARCH_FLAGGED_POSTS_REQUEST","SEARCH_FLAGGED_POSTS_SUCCESS","SEARCH_FLAGGED_POSTS_FAILURE","SEARCH_PINNED_POSTS_REQUEST","SEARCH_PINNED_POSTS_SUCCESS","SEARCH_PINNED_POSTS_FAILURE","GET_TEAMS_REQUEST","GET_TEAMS_SUCCESS","GET_TEAMS_FAILURE","LOGIN_REQUEST","LOGIN_SUCCESS","LOGIN_FAILURE","LOGOUT_REQUEST","LOGOUT_FAILURE","RESET_LOGOUT_STATE","AUTOCOMPLETE_USERS_REQUEST","AUTOCOMPLETE_USERS_SUCCESS","AUTOCOMPLETE_USERS_FAILURE","UPDATE_ME_REQUEST","UPDATE_ME_SUCCESS","UPDATE_ME_FAILURE","ErrorTypes","displayable","date","toUTCString","SET_CONNECTION_ID","payload","SET_SERVER_HOSTNAME","configureStore","appReducers","getAppReducers","preloadedState","baseState","enhancers","composeWithDevTools","shouldHotReload","trace","traceLimit","autoPause","composeEnhancers","applyMiddleware","thunk","withExtraArgument","loaders","baseReducer","serviceReducers","store","legacy_createStore","reducerRegistry","setChangeListener","reducers","replaceReducer","constructor","_defineProperty","this","emitChange","getReducers","listener","cleanBinding","binding","topLocation","cleanBindingRec","depth","_binding$bindings","toRemove","usedLabels","_b$bindings","app_id","label","icon","hasBindings","hasForm","hasSubmit","submit","_b$bindings2","_b$form","_b$form2","cleanForm","_binding$bindings2","filterAndCleanBindings","filteredBindings","_b$bindings3","channelHeaderBindings","postMenuBindings","commandBindings","_form$fields","fields","_field$options","_field$options2","usedValues","option","_field$options3","cleanStaticSelect","lookup","insertWithoutDuplicates","array","newIndex","newArray","insertMultipleWithoutDuplicates","items","channelTypeOrder","usersState","teammate_id","isGroupChannel","profilesIds","gm","getGroupDisplayNameFromUserIds","newCompleteDirectGroupInfo","dmChannelClone","getDirectChannelName","otherId","handle","omitCurrentUser","names","getUserLocale","isPrivateChannel","sortChannelsByTypeListAndDisplayName","typeList","idxA","idxB","aDisplayName","filterName","bDisplayName","sortChannelsByTypeAndDisplayName","lowercasedTerm","deepFreezeAndThrowOnMutation","object","isFrozen","isSealed","__defineGetter__","identity","__defineSetter__","throwOnImmutableMutation","freeze","seal","stringify","memoizeResult","shallowEqual","currentVersion","minMajorVersion","minMinorVersion","minDotVersion","major","minor","dot","isEmail","test","localizeFunction","setLocalizeFunction","localizeMessage","descriptor","_descriptor$defaultMe","defaultMessage","ret","CREATE_COMMENT","DATE_LINE","START_OF_NEW_MESSAGES","MAX_COMBINED_SYSTEM_POSTS","makePreparePostIdsForPostList","filterPostsAndAddSeparators","getPostsForIds","_ref2","_ref3","indicateNewMessages","selectedPostId","out","lastDate","addedNewMessagesIndicator","postDate","currentOffset","getTimezoneOffset","timezone","getUserCurrentTimezone","zone","moment","timezoneOffset","utcOffset","setTime","toDateString","isFromWebhook","makeFilterPostsAndAddSeparators","combineUserActivityPosts","makeCombineUserActivityPosts","lastPostIsUserActivity","combinedCount","isStartOfNewMessages","isDateLine","isCreateComment","postIsUserActivity","isUserActivityPost","getTimestampForStartOfNewMessages","substring","getNewMessagesIndex","postListIds","getDateForDateLine","isCombinedUserActivityPost","getPostIdsForCombinedUserActivityPost","makeGenerateCombinedPost","getPostIds","combinedId","edit_at","parent_id","original_id","user_activity","combineUserActivitySystemPost","hashtags","images","system_post_ids","user_activity_posts","isUsersRelatedPost","postType","mergeLastSimilarPosts","userActivities","prevPost","prePrevPost","actorId","systemPosts","_post$props","_post$props2","_post$props3","_post$props4","isRemovedPost","addedUserId","ensureString","removedUserId","addedUsername","removedUsername","isSamePostType","isSameActor","isJoinedPrevPost","isLeftCurrentPost","isJoinedPrePrevPost","isLeftPrevPost","isSameActors","prevActivity","curActivity","prevPostActorsSet","currentPostActorsSet","hasAllActors","actor","isSameActorsInUserActivities","messageData","reduceUsers","activity","extractUserActivityData","isMessageData","isStringArray","isUserActivityProp","isArrayOf","isMeMessage","from_webhook","isUserAddedInChannel","postTypeCheck","userIdCheck","shouldIgnorePost","canEditPost","isOwner","isPostOwner","canEdit","PostEditTimeLimit","joinLeavePostTypes","currentUsername","isJoinLeavePostForUsername","childPost","aIsPendingOrFailed","bIsPendingOrFailed","commentsNotifyLevel","threadCreatedByCurrentUser","comments","getEmbedFromMetadata","receivedPost","storedPost","_storedPost$participa","_receivedPost$partici","ensureNumber","teamList","_team$name","_team$display_name","userTimezone","useAutomaticTimezone","automaticTimezone","manualTimezone","useAutomatic","getTimezoneLabel","timezones","j","utc","text","getDateForTimezone","tzString","toLocaleString","timeZone","getFullName","nickname","spaceSeparatedStringIncludes","spaceSeparated","isAdmin","rolesArray","el","isChannelAdmin","hasUserAccessTokenRole","hasPostAllRole","hasPostAllPublicRole","profileList","getSuggestionsSplitBy","splitStr","splitTerm","initialSuggestions","st","suggestions","val","getSuggestionsSplitByMultiple","splitStrs","suggestion","nameSuggestionsForUser","profileSuggestions","usernameSuggestions","first","last","full","positionSuggestions","position","trimmedTerm","substr","nameA","nameB","checkUserHasRole","userIsNotAdminOrGuest","isSystemRole","extractPluginConfigurationSection","section","title","component","Component","React","_unused","onSubmit","disabled","setting","validSetting","extractPluginConfigurationSetting","warn","helpText","default","res","base","isValid","extractValidRadioOption","extractPluginConfigurationRadioSetting","_unused2","extractPluginConfigurationCustomSetting","hasMenuId","menu","menuId","subMenu","buildMenu","rootMenu","_rootMenu$subMenu","parentMenuId","sortComponents","removePostPluginComponents","k","removePostPluginComponent","initialComponents","AppBar","CallButton","FilePreview","LinkTooltip","MainMenu","ChannelHeaderButton","MobileChannelHeaderButton","PostDropdownMenu","PostAction","PostEditorAction","CodeBlockAction","NewMessagesSeparatorAction","Product","RightHandSidebarComponent","UserGuideDropdownItem","FilesWillUploadHook","NeedsTeamComponent","CreateBoardFromTemplate","DesktopNotificationHooks","MessageWillBePosted","MessageWillBeUpdated","MessageWillFormat","SlashCommandWillBePosted","ActionTypes","RECEIVED_WEBAPP_PLUGINS","RECEIVED_WEBAPP_PLUGIN","REMOVED_WEBAPP_PLUGIN","components","RECEIVED_PLUGIN_COMPONENT","nextArray","actionData","REMOVED_PLUGIN_COMPONENT","types","componentType","componentList","removePluginComponent","removePluginComponents","postTypes","RECEIVED_PLUGIN_POST_COMPONENT","currentPost","REMOVED_PLUGIN_POST_COMPONENT","postCardTypes","RECEIVED_PLUGIN_POST_CARD_COMPONENT","REMOVED_PLUGIN_POST_CARD_COMPONENT","adminConsoleReducers","RECEIVED_ADMIN_CONSOLE_REDUCER","REMOVED_ADMIN_CONSOLE_REDUCER","adminConsoleCustomComponents","RECEIVED_ADMIN_CONSOLE_CUSTOM_COMPONENT","adminConsoleCustomSections","RECEIVED_ADMIN_CONSOLE_CUSTOM_SECTION","nextObject","siteStatsHandlers","RECEIVED_PLUGIN_STATS_HANDLER","handler","userSettings","RECEIVED_PLUGIN_USER_SETTINGS","extractedConfiguration","pluginConfiguration","uiName","sections","buttonText","onClick","extractPluginConfigurationAction","validSections","extractPluginConfiguration","migrations","drafts","storageKey","_storageDraft$value","_storageDraft$value2","_storageDraft$value3","_storageDraft$value4","_storageDraft$value5","storageDraft","info","getDraftInfoFromKey","StoragePrefixes","DRAFT","fileInfos","uploadsInProgress","migratedDraft","show","migrateDrafts","storage","localForage","migrate","createMigrate","debug","persistReducer","REHYDRATE","nextValue","StorageTypes","SET_GLOBAL_ITEM","REMOVE_GLOBAL_ITEM","ACTION_ON_GLOBAL_ITEMS_WITH_PREFIX","STORAGE_REHYDRATE","initialized","complete","isOpen","ADD_CHANNEL_CTA_DROPDOWN_TOGGLE","open","ADD_CHANNEL_DROPDOWN_TOGGLE","announcementBarState","announcementBarCount","TRACK_ANNOUNCEMENT_BAR","DISMISS_ANNOUNCEMENT_BAR","focused","BROWSER_CHANGE_FOCUS","focus","windowSize","WindowSizes","DESKTOP_VIEW","BROWSER_WINDOW_RESIZED","postVisibility","Constants","INCREASE_POST_VISIBILITY","lastChannelViewTime","SELECT_CHANNEL_WITH_MEMBER","UPDATE_CHANNEL_LAST_VIEWED_AT","loadingPosts","LOADING_POSTS","focusedPostId","mobileView","UPDATE_MOBILE_VIEW","SET_LAST_UNREAD_CHANNEL","hadUnreads","lastGetPosts","RECEIVED_POSTS_FOR_CHANNEL_AT_TIME","time","toastStatus","UPDATE_TOAST_STATUS","channelPrefetchStatus","PREFETCH_POSTS_FOR_CHANNEL","unreadFilterEnabled","SET_UNREAD_FILTER_ENABLED","enabled","draggingState","SIDEBAR_DRAGGING_SET_STATE","SIDEBAR_DRAGGING_STOP","newCategoryIds","ADD_NEW_CATEGORY_ID","multiSelectedChannelIds","MULTISELECT_CHANNEL","MULTISELECT_CHANNEL_ADD","MULTISELECT_CHANNEL_TO","MULTISELECT_CHANNEL_CLEAR","lastSelectedChannel","remotes","SET_DRAFT_SOURCE","isRemote","emojiPickerCustomPage","INCREMENT_EMOJI_PICKER_PAGE","shortcutReactToLastPostEmittedFrom","EMITTED_SHORTCUT_REACT_TO_LAST_POST","Locations","CENTER","RHS_ROOT","translations","RECEIVED_TRANSLATIONS","TOGGLE_LHS","OPEN_LHS","CLOSE_LHS","TOGGLE_RHS_MENU","OPEN_RHS_MENU","SidebarSize","MEDIUM","SET_LHS_SIZE","currentStaticPageId","SELECT_STATIC_PAGE","MODAL_CLOSE","modalId","ModalIdentifiers","PLUGIN_MARKETPLACE","RECEIVED_MARKETPLACE_APPS","installing","INSTALLING_MARKETPLACE_ITEM","INSTALLING_MARKETPLACE_ITEM_SUCCEEDED","INSTALLING_MARKETPLACE_ITEM_FAILED","FILTER_MARKETPLACE_LISTING","modalState","MODAL_OPEN","dialogProps","dialogType","showLaunchingWorkspace","SHOW_LAUNCHING_WORKSPACE","hasBeenDismissed","DISMISS_NOTICE","SHOW_NOTICE","isShowOnboardingTaskCompletion","SHOW_ONBOARDING_TASK_COMPLETION","isShowOnboardingCompleteProfileTour","SHOW_ONBOARDING_COMPLETE_PROFILE_TOUR","isShowOnboardingVisitConsoleTour","SHOW_ONBOARDING_VISIT_CONSOLE_TOUR","editingPostDefaultState","refocusId","isRHS","editingPost","TOGGLE_EDITING_POST","menuActions","SELECT_ATTACHMENT_MENU_ACTION","actions","switcherOpen","SET_PRODUCT_SWITCHER_OPEN","_action$postId","SELECT_POST","SELECT_POST_CARD","UPDATE_RHS_STATE","RHS_GO_BACK","selectedPostFocussedAt","_action$timestamp","selectedPostCardId","selectedChannelId","RHSStates","PIN","CHANNEL_FILES","CHANNEL_INFO","CHANNEL_MEMBERS","EDIT_HISTORY","highlightedPostId","HIGHLIGHT_REPLY","CLEAR_HIGHLIGHT_REPLY","previousRhsStates","previousRhsState","filesSearchExtFilter","SET_FILES_FILTER_BY_EXT","rhsState","searchTerms","UPDATE_RHS_SEARCH_TERMS","terms","SEARCH","searchTeam","UPDATE_RHS_SEARCH_TEAM","searchType","UPDATE_RHS_SEARCH_TYPE","searchResultsTerms","UPDATE_RHS_SEARCH_RESULTS_TERMS","searchResultsType","UPDATE_RHS_SEARCH_RESULTS_TYPE","SET_RHS_SIZE","pluggableId","PLUGIN","isSearchingFlaggedPost","isSearchingPinnedPost","isSidebarOpen","isSidebarExpanded","SET_RHS_EXPANDED","expanded","TOGGLE_RHS_EXPANDED","SUPPRESS_RHS","isMenuOpen","CLOSE_RHS_MENU","editChannelMembers","SET_EDIT_CHANNEL_MEMBERS","shouldFocusRHS","Threads","CHANGED_SELECTED_THREAD","thread_id","RHS_FOCUSED","modalSearch","SET_MODAL_SEARCH","popoverSearch","SET_POPOVER_SEARCH","channelMembersRhsSearch","SET_CHANNEL_MEMBERS_RHS_SEARCH","modalFilters","SET_MODAL_FILTERS","userGridSearch","SET_USER_GRID_SEARCH","SET_USER_GRID_FILTERS","teamListSearch","SET_TEAM_LIST_SEARCH","channelListSearch","SET_CHANNEL_LIST_SEARCH","SET_CHANNEL_LIST_FILTERS","STATUS_DROPDOWN_TOGGLE","websocketConnectionErrorCount","INCREMENT_WS_ERROR_COUNT","RESET_WS_ERROR_COUNT","shouldShowPreviewOnCreateComment","SET_SHOW_PREVIEW_ON_CREATE_COMMENT","showPreview","shouldShowPreviewOnCreatePost","SET_SHOW_PREVIEW_ON_CREATE_POST","shouldShowPreviewOnEditChannelHeaderModal","SET_SHOW_PREVIEW_ON_EDIT_CHANNEL_HEADER_MODAL","selectedThreadIdInTeam","findKey","CHANGED_LAST_VIEWED_AT","threadId","MANUALLY_UNREAD_THREAD","UPDATE_THREAD_TOAST_STATUS","views","announcementBar","browser","rhsSuppressed","UNSUPPRESS_RHS","modals","i18n","lhs","notice","system","channelSelectorModal","activeSection","previousActiveSection","UPDATE_ACTIVE_SECTION","marketplace","textbox","channelSidebar","statusDropdown","addChannelDropdown","addChannelCtaDropdown","onboardingTasks","productMenu","navigationBlockInitialState","blocked","onNavigationConfirmed","showNavigationPrompt","adminConsoleUserManagementTablePropertiesInitialState","sortColumn","sortIsDescending","pageSize","pageIndex","cursorDirection","CursorPaginationDirection","cursorUserId","cursorColumnValue","columnVisibility","searchTerm","filterTeam","filterTeamLabel","filterStatus","filterRole","navigationBlock","SET_NAVIGATION_BLOCKED","DEFER_NAVIGATION","CANCEL_NAVIGATION","CONFIRM_NAVIGATION","needsLoggedInLimitReachedCheck","NEEDS_LOGGED_IN_LIMIT_REACHED_CHECK","adminConsoleUserManagementTableProperties","SET_ADMIN_CONSOLE_USER_MANAGEMENT_TABLE_PROPERTIES","CLEAR_ADMIN_CONSOLE_USER_MANAGEMENT_TABLE_PROPERTIES","getBasePath","URL","pathname","getConnectionId","isDevModeEnabled","EnableDeveloper","require","Observable","extendPrototype","baseLocalForage","additionalReducers","configureServiceStore","ready","then","persistor","persistStore","dispatch","oldKeyPrefix","restoredState","iterate","async","pause","persistedState","persist","migratePersistedState","configObservables","crossTabNotification","newObservable","changeDetection","subscribe","args","keyPrefix","newValue","reducerKey","purging","getState","basePath","purge","cleanLocalStorage","href","setTimeout","catch","e","PreviousViewedTypes","THREADS","ReduxPreferences","TUTORIAL_STEP","TUTORIAL_STEP_AUTO_TOUR_STATUS","CRT_TUTORIAL_TRIGGERED","CRT_TUTORIAL_AUTO_TOUR_STATUS","CRT_TUTORIAL_STEP","EXPLORE_OTHER_TOOLS_TUTORIAL_STEP","CRT_THREAD_PANE_STEP","CHANNEL_DISPLAY_MODE","CHANNEL_DISPLAY_MODE_CENTERED","CHANNEL_DISPLAY_MODE_FULL_SCREEN","CHANNEL_DISPLAY_MODE_DEFAULT","MESSAGE_DISPLAY","MESSAGE_DISPLAY_CLEAN","MESSAGE_DISPLAY_COMPACT","MESSAGE_DISPLAY_DEFAULT","COLORIZE_USERNAMES","COLORIZE_USERNAMES_DEFAULT","CLICK_TO_REPLY","CLICK_TO_REPLY_DEFAULT","LINK_PREVIEW_DISPLAY","LINK_PREVIEW_DISPLAY_DEFAULT","COLLAPSE_DISPLAY","COLLAPSE_DISPLAY_DEFAULT","AVAILABILITY_STATUS_ON_POSTS","AVAILABILITY_STATUS_ON_POSTS_DEFAULT","USE_MILITARY_TIME_DEFAULT","CATEGORY_SYSTEM_NOTICE","RECOMMENDED_NEXT_STEPS","TEAMS_ORDER","CLOUD_UPGRADE_BANNER","CLOUD_TRIAL_BANNER","START_TRIAL_MODAL","ADMIN_CLOUD_UPGRADE_PANEL","CATEGORY_EMOJI","EMOJI_SKINTONE","ONE_CLICK_REACTIONS_ENABLED","ONE_CLICK_REACTIONS_ENABLED_DEFAULT","CLOUD_TRIAL_END_BANNER","CLOUD_USER_EPHEMERAL_INFO","CATEGORY_CLOUD_LIMITS","THREE_DAYS_LEFT_TRIAL_MODAL","TOUCHED","UNIQUE","AB_TEST_PREFERENCE_VALUE","ONBOARDING","ADVANCED_TEXT_EDITOR","FORWARD_POST_VIEWED","HIDE_POST_FILE_UPGRADE_WARNING","SHOWN_LIMITS_REACHED_ON_LOGIN","USE_CASE","DELINQUENCY_MODAL_CONFIRMED","CONFIGURATION_BANNERS","NOTIFY_ADMIN_REVOKE_DOWNGRADED_WORKSPACE","OVERAGE_USERS_BANNER","TO_CLOUD_YEARLY_PLAN_NUDGE","TO_PAID_PLAN_NUDGE","CLOUD_ANNUAL_RENEWAL_BANNER","Touched","ADD_CHANNELS_CTA","Unique","HAS_CLOUD_PURCHASE","REQUEST_TRIAL_AFTER_SERVER_UPGRADE","CLICKED_UPGRADE_AND_TRIAL_BTN","TrialPeriodDays","TRIAL_30_DAYS","TRIAL_14_DAYS","TRIAL_WARNING_THRESHOLD","TRIAL_2_DAYS","TRIAL_1_DAY","TRIAL_0_DAYS","suitePluginIds","playbooks","focalboard","nps","channelExport","TOGGLE_IMPORT_THEME_MODAL","TOGGLE_DELETE_POST_MODAL","SET_RECENT_SKIN","CHANNEL_POSTS_STATUS","CHANNEL_SYNC_STATUS","ALL_CHANNEL_SYNC_STATUS","PostRequestTypes","BEFORE_ID","AFTER_ID","ABOUT","TEAM_SETTINGS","DELETE_CHANNEL","UNARCHIVE_CHANNEL","CHANNEL_NOTIFICATIONS","CHANNEL_INVITE","TEAM_MEMBERS","ADD_USER_TO_CHANNEL","ADD_USER_TO_ROLE","CREATE_DM_CHANNEL","EDIT_CHANNEL_HEADER","EDIT_CHANNEL_PURPOSE","NOTIFICATIONS","RESET_STATUS","RENAME_CHANNEL","USER_SETTINGS","QUICK_SWITCH","REMOVED_FROM_CHANNEL","EMAIL_INVITE","INTERACTIVE_DIALOG","APPS_MODAL","ADD_TEAMS_TO_SCHEME","INVITATION","ADD_GROUPS_TO_TEAM","ADD_GROUPS_TO_CHANNEL","MANAGE_TEAM_GROUPS","MANAGE_CHANNEL_GROUPS","GROUP_MEMBERS","MOBILE_SUBMENU","EDIT_CATEGORY","DELETE_CATEGORY","SIDEBAR_WHATS_NEW_MODAL","UPGRADE_CLOUD_ACCOUNT","TRIAL_BENEFITS_MODAL","PRICING_MODAL","LEARN_MORE_TRIAL_MODAL","ENTERPRISE_EDITION_LICENSE","CONFIRM_NOTIFY_ADMIN","REMOVE_NEXT_STEPS_MODAL","MORE_CHANNELS","NEW_CHANNEL_MODAL","CLOUD_PURCHASE","SELF_HOSTED_PURCHASE","CLOUD_DOWNGRADE_CHOOSE_TEAM","SUCCESS_MODAL","ERROR_MODAL","DND_CUSTOM_TIME_PICKER","POST_REMINDER_CUSTOM_TIME_PICKER","CUSTOM_STATUS","COMMERCIAL_SUPPORT","NO_INTERNET_CONNECTION","JOIN_CHANNEL_PROMPT","COLLAPSED_REPLY_THREADS_MODAL","NOTIFY_CONFIRM_MODAL","CONFIRM_LICENSE_REMOVAL","CONFIRM","USER_GROUPS","USER_GROUPS_CREATE","VIEW_USER_GROUP","ADD_USERS_TO_GROUP","EDIT_GROUP_MODAL","POST_DELETED_MODAL","FILE_PREVIEW_MODAL","LEAVE_PRIVATE_CHANNEL_MODAL","GET_PUBLIC_LINK_MODAL","KEYBOARD_SHORTCUTS_MODAL","USERS_TO_BE_REMOVED","DELETE_DRAFT","SEND_DRAFT","UPLOAD_LICENSE","CLOUD_LIMITS","REQUEST_BUSINESS_EMAIL_MODAL","FEATURE_RESTRICTED_MODAL","FORWARD_POST_MODAL","JOIN_PUBLIC_CHANNEL_MODAL","CLOUD_INVOICE_PREVIEW","BILLING_HISTORY","SUM_OF_MEMBERS_MODAL","RESTORE_POST_MODAL","INFO_TOAST","MARK_ALL_THREADS_AS_READ","DELINQUENCY_MODAL_DOWNGRADE","CLOUD_LIMITS_DOWNGRADE","PERSIST_NOTIFICATION_CONFIRM_MODAL","AIR_GAPPED_SELF_HOSTED_PURCHASE","DOWNGRADE_MODAL","PURCHASE_IN_PROGRESS","DELETE_WORKSPACE","FEEDBACK","DELETE_WORKSPACE_PROGRESS","DELETE_WORKSPACE_RESULT","SCREENING_IN_PROGRESS","CONFIRM_SWITCH_TO_YEARLY","EXPANSION_IN_PROGRESS","SELF_HOSTED_EXPANSION","START_TRIAL_FORM_MODAL","START_TRIAL_FORM_MODAL_RESULT","MOVE_THREAD_MODAL","CONVERT_GM_TO_CHANNEL","IP_FILTERING_ADD_EDIT_MODAL","IP_FILTERING_DELETE_CONFIRMATION_MODAL","IP_FILTERING_SAVE_CONFIRMATION_MODAL","REACTION_LIMIT_REACHED","AIR_GAPPED_CONTACT_SALES","MANAGE_ROLES_MODAL","MANAGE_TEAMS_MODAL","MANAGE_TOKENS_MODAL","RESET_PASSWORD_MODAL","RESET_EMAIL_MODAL","DEACTIVATE_MEMBER_MODAL","PROMOTE_TO_MEMBER_MODAL","DEMOTE_TO_GUEST_MODAL","REVOKE_SESSIONS_MODAL","CREATE_GROUP_SYNCABLES_MEMBERSHIP_MODAL","EXPORT_USER_DATA_MODAL","UPGRADE_EXPORT_DATA_MODAL","EXPORT_ERROR_MODAL","CHANNEL_BOOKMARK_DELETE","CHANNEL_BOOKMARK_CREATE","CONFIRM_MANAGE_USER_SETTINGS_MODAL","SCHEDULED_POST_CUSTOM_TIME_MODAL","SECURE_CONNECTION_DELETE","SECURE_CONNECTION_CREATE_INVITE","SECURE_CONNECTION_ACCEPT_INVITE","SHARED_CHANNEL_REMOTE_INVITE","SHARED_CHANNEL_REMOTE_UNINVITE","USER_PROPERTY_FIELD_DELETE","UserStatuses","EventTypes","KEY_DOWN","KEY_UP","CLICK","FOCUS","BLUR","SHORTCUT","MOUSE_DOWN","MOUSE_UP","POST_LIST_SCROLL_TO_BOTTOM","CloudProducts","STARTER","PROFESSIONAL","ENTERPRISE","LEGACY","SelfHostedProducts","MattermostFeatures","GUEST_ACCOUNTS","CUSTOM_USER_GROUPS","CREATE_MULTIPLE_TEAMS","START_CALL","PLAYBOOKS_RETRO","UNLIMITED_MESSAGES","UNLIMITED_FILE_STORAGE","ALL_PROFESSIONAL_FEATURES","ALL_ENTERPRISE_FEATURES","UPGRADE_DOWNGRADED_WORKSPACE","PLUGIN_FEATURE","HIGHLIGHT_WITHOUT_NOTIFICATION","LicenseSkus","Professional","Enterprise","A11yClassNames","REGION","SECTION","ACTIVE","FOCUSED","MODAL","POPUP","A11yAttributeNames","SORT_ORDER","ORDER_REVERSE","FOCUS_CHILD","LOOP_NAVIGATION","DISABLE_NAVIGATION","A11yCustomEventTypes","ACTIVATE","DEACTIVATE","UPDATE","isA11yFocusEventDetail","o","AppEvents","FOCUS_EDIT_TEXTBOX","SocketEvents","POST_UPDATED","CHANNEL_BOOKMARK_CREATED","CHANNEL_BOOKMARK_DELETED","CHANNEL_BOOKMARK_UPDATED","CHANNEL_BOOKMARK_SORTED","GROUP_ADDED","NEW_USER","DELETE_TEAM","UPDATE_TEAM_SCHEME","MEMBERROLE_UPDATED","PLUGIN_ENABLED","PLUGIN_DISABLED","GROUP_MEMBER_ADD","SIDEBAR_CATEGORY_CREATED","SIDEBAR_CATEGORY_UPDATED","SIDEBAR_CATEGORY_DELETED","SIDEBAR_CATEGORY_ORDER_UPDATED","USER_ACTIVATION_STATUS_CHANGED","CLOUD_PAYMENT_STATUS_UPDATED","CLOUD_SUBSCRIPTION_CHANGED","APPS_FRAMEWORK_REFRESH_BINDINGS","APPS_FRAMEWORK_PLUGIN_ENABLED","APPS_FRAMEWORK_PLUGIN_DISABLED","POST_ACKNOWLEDGEMENT_ADDED","POST_ACKNOWLEDGEMENT_REMOVED","DRAFT_CREATED","DRAFT_UPDATED","DRAFT_DELETED","SCHEDULED_POST_CREATED","PERSISTENT_NOTIFICATION_TRIGGERED","HOSTED_CUSTOMER_SIGNUP_PROGRESS_UPDATED","CrtTutorialSteps","WELCOME_POPOVER","LIST_POPOVER","UNREAD_POPOVER","FINISHED","CrtTutorialTriggerSteps","START","CrtThreadPaneSteps","THREADS_PANE_POPOVER","ItemStatus","RecommendedNextStepsLegacy","COMPLETE_PROFILE","TEAM_SETUP","INVITE_MEMBERS","PREFERENCES_SETUP","NOTIFICATION_SETUP","DOWNLOAD_APPS","CREATE_FIRST_CHANNEL","HIDE","SKIP","CloudBanners","TRIAL","UPGRADE_FROM_TRIAL","THREE_DAYS_LEFT_TRIAL_MODAL_DISMISSED","NUDGE_TO_CLOUD_YEARLY_PLAN_SNOOZED","NUDGE_TO_PAID_PLAN_SNOOZED","ANNUAL_RENEWAL_60_DAY","ANNUAL_RENEWAL_30_DAY","ConfigurationBanners","LICENSE_EXPIRED","AdvancedTextEditor","EDIT","TELEMETRY_CATEGORIES","CLOUD_PURCHASING","CLOUD_PRICING","SELF_HOSTED_PURCHASING","CLOUD_ADMIN","CLOUD_DELINQUENCY","SELF_HOSTED_ADMIN","POST_INFO_MORE","POST_INFO","SELF_HOSTED_START_TRIAL_AUTO_MODAL","SELF_HOSTED_START_TRIAL_MODAL","CLOUD_START_TRIAL_BUTTON","CLOUD_THREE_DAYS_LEFT_MODAL","SELF_HOSTED_START_TRIAL_TASK_LIST","SELF_HOSTED_LICENSE_EXPIRED","WORKSPACE_OPTIMIZATION_DASHBOARD","REQUEST_BUSINESS_EMAIL","TRUE_UP_REVIEW","TELEMETRY_LABELS","UNSAVE","SAVE","COPY_LINK","COPY_TEXT","DELETE","FOLLOW","UNFOLLOW","UNPIN","REPLY","UNREAD","FORWARD","MOVE_THREAD","SYSTEM_GENERIC","FAKE_PARENT_DELETED","REMOVE_LINK_PREVIEW","CUSTOM_CALLS","CUSTOM_CALLS_RECORDING","StatTypes","EMBED_VISIBLE","COMMENT_DRAFT","EDIT_DRAFT","LOGOUT","ANNOUNCEMENT","LANDING_PAGE_SEEN","LANDING_PREFERENCE","CHANNEL_CATEGORY_COLLAPSED","INLINE_IMAGE_VISIBLE","DELINQUENCY","HIDE_JOINED_CHANNELS","HIDE_NOTIFICATION_PERMISSION_REQUEST_BANNER","LandingPreferenceTypes","MATTERMOSTAPP","BROWSER","ErrorPageTypes","LOCAL_STORAGE","OAUTH_ACCESS_DENIED","OAUTH_MISSING_CODE","OAUTH_INVALID_PARAM","OAUTH_INVALID_REDIRECT_URL","PAGE_NOT_FOUND","PERMALINK_NOT_FOUND","TEAM_NOT_FOUND","CHANNEL_NOT_FOUND","CLOUD_ARCHIVED","DATA_RETENTION","ELASTICSEARCH_POST_INDEXING","BLEVE_POST_INDEXING","LDAP_SYNC","MESSAGE_EXPORT","JobStatuses","PENDING","IN_PROGRESS","CANCEL_REQUESTED","CANCELED","WARNING","AnnouncementBarTypes","CRITICAL","DEVELOPER","ADVISOR","ADVISOR_ACK","GENERAL","AnnouncementBarMessages","EMAIL_VERIFICATION_REQUIRED","EMAIL_VERIFIED","LICENSE_EXPIRING","LICENSE_PAST_GRACE","PREVIEW_MODE","WEBSOCKET_PORT_ERROR","TRIAL_LICENSE_EXPIRING","defineMessages","emailVerificationRequired","emailVerified","licenseExpired","licenseExpiring","pastGrace","previewMode","socketError","trialLicenseExpiring","IMAGE","AUDIO","VIDEO","SPREADSHEET","CODE","WORD","PRESENTATION","PDF","PATCH","SVG","OTHER","LICENSE_EXTENSION","NotificationLevels","DesktopSound","ON","OFF","IgnoreChannelMentions","UserSettingsNotificationSections","DESKTOP_AND_MOBILE","DESKTOP_NOTIFICATION_SOUND","KEYWORDS_MENTIONS","KEYWORDS_HIGHLIGHT","REPLY_NOTIFCATIONS","AUTO_RESPONDER","AdvancedSections","CONTROL_SEND","FORMATTING","PERFORMANCE_DEBUGGING","SYNC_DRAFTS","FLAG","DraggingStates","CAPTURE","BEFORE","DURING","DraggingStateTypes","CATEGORY","DM","MIXED_CHANNELS","AboutLinks","TERMS_OF_SERVICE","PRIVACY_POLICY","CloudLinks","BILLING_DOCS","PRICING","PRORATED_PAYMENT","DEPLOYMENT_OPTIONS","DOWNLOAD_UPDATE","CLOUD_SIGNUP_PAGE","SELF_HOSTED_SIGNUP","DELINQUENCY_DOCS","SELF_HOSTED_PRICING","HostedCustomerLinks","SELF_HOSTED_BILLING","TERMS_AND_CONDITIONS","SECURITY_UPDATES","DOWNLOAD","NEWSLETTER_UNSUBSCRIBE_LINK","PRIVACY","DocLinks","ABOUT_TEAMS","ADVANCED_LOGGING","CONFIGURE_DOCUMENT_CONTENT_SEARCH","CONFIGURE_AD_LDAP_QUERY_TIMEOUT","CONFIGURE_OVERRIDE_SAML_BIND_DATA_WITH_LDAP","COMPILANCE_EXPORT","COMPILANCE_MONITORING","DATA_RETENTION_POLICY","DEFAULT_LDAP_GROUP_SYNC","DESKTOP_MANAGED_RESOURCES","ELASTICSEARCH","ENABLE_CLIENT_SIDE_CERTIFICATION","ENABLE_HARDENED_MODE","FORMAT_MESSAGES","FILE_STORAGE","HIGH_AVAILABILITY_CLUSTER","IN_PRODUCT_NOTICES","MULTI_FACTOR_AUTH","ONBOARD_ADVANCED_PERMISSIONS","ONBOARD_LDAP","SESSION_LENGTHS","SETUP_IMAGE_PROXY","SETUP_LDAP","SETUP_PERFORMANCE_MONITORING","SETUP_PUSH_NOTIFICATIONS","SETUP_SAML","SHARE_LINKS_TO_MESSAGES","SITE_URL","SSL_CERTIFICATE","TRUSTED_CONNECTION","UPGRADE_SERVER","DeveloperLinks","CUSTOM_SLASH_COMMANDS","ENABLE_OAUTH2","INCOMING_WEBHOOKS","OUTGOING_WEBHOOKS","INTERACTIVE_MESSAGES","INTERACTIVE_DIALOGS","PERSONAL_ACCESS_TOKENS","PLUGIN_SIGNING","PLUGINS","SETUP_CUSTOM_SLASH_COMMANDS","SETUP_INCOMING_WEBHOOKS","SETUP_OAUTH2","SETUP_OUTGOING_WEBHOOKS","LicenseLinks","CONTACT_SALES","TRIAL_INFO_LINK","EMBARGOED_COUNTRIES","SOFTWARE_SERVICES_LICENSE_AGREEMENT","SOFTWARE_SERVICES_LICENSE_AGREEMENT_TEXT","UNSUPPORTED","BillingSchemes","FLAT_FEE","PER_SEAT","SALES_SERVE","RecurringIntervals","YEAR","MONTH","PermissionsScope","DefaultRolePermissions","all_users","channel_admin","team_admin","guests","ModeratedPermissions","RHS_COMMENT","NO_WHERE","PostListRowListIds","PostListUtils","CHANNEL_INTRO_MESSAGE","OLDER_MESSAGES_LOADER","NEWER_MESSAGES_LOADER","LOAD_OLDER_MESSAGES_TRIGGER","LOAD_NEWER_MESSAGES_TRIGGER","exportFormats","EXPORT_FORMAT_CSV","EXPORT_FORMAT_ACTIANCE","EXPORT_FORMAT_GLOBALRELAY","CacheTypes","REDIS","LRU","ZoomSettings","DEFAULT_SCALE","SCALE_DELTA","MIN_SCALE","MAX_SCALE","SettingsTypes","TYPE_TEXT","TYPE_LONG_TEXT","TYPE_NUMBER","TYPE_COLOR","TYPE_BOOL","TYPE_PERMISSION","TYPE_RADIO","TYPE_BANNER","TYPE_DROPDOWN","TYPE_GENERATED","TYPE_USERNAME","TYPE_BUTTON","TYPE_LANGUAGE","TYPE_JOBSTABLE","TYPE_FILE_UPLOAD","TYPE_CUSTOM","TYPE_ROLES","TutorialSteps","ADD_FIRST_CHANNEL","POST_POPOVER","CHANNEL_POPOVER","ADD_CHANNEL_POPOVER","MENU_POPOVER","PRODUCT_SWITCHER","SETTINGS","START_TRIAL","AdminTutorialSteps","MAX_POST_VISIBILITY","REMOTE_USERS_HOUR_LIMIT_END_OF_THE_DAY","REMOTE_USERS_HOUR_LIMIT_BEGINNING_OF_THE_DAY","PayloadSources","SERVER_ACTION","VIEW_ACTION","USER_LIMIT","STAT_MAX_ACTIVE_USERS","STAT_MAX_NEW_USERS","ScrollTypes","FREE","BOTTOM","SIDEBBAR_OPEN","NEW_MESSAGE","MAXIMUM_LOGIN_ATTEMPTS_DEFAULT","MAX_ADD_MEMBERS_BATCH","PLAN_MENTIONS","SPECIAL_MENTIONS_REGEX","SUM_OF_MEMBERS_MENTION_REGEX","ALL_MENTION_REGEX","CHANNEL_MENTION_REGEX","HERE_MENTION_REGEX","NOTIFY_ALL_MEMBERS","ALL_MEMBERS_MENTIONS_REGEX","MENTIONS_REGEX","DEFAULT_CHARACTER_LIMIT","IMAGE_TYPE_GIF","TEXT_TYPES","IMAGE_TYPES","AUDIO_TYPES","VIDEO_TYPES","PRESENTATION_TYPES","SPREADSHEET_TYPES","WORD_TYPES","CHANNEL_HEADER_HEIGHT","CODE_TYPES","PDF_TYPES","PATCH_TYPES","SVG_TYPES","ICON_FROM_TYPE","audio","audioIcon","video","videoIcon","spreadsheet","excelIcon","presentation","pptIcon","pdf","pdfIcon","code","codeIcon","word","wordIcon","patch","patchIcon","other","genericIcon","ICON_NAME_FROM_TYPE","image","MAX_UPLOAD_FILES","MAX_FILENAME_LENGTH","EXPANDABLE_INLINE_IMAGE_MIN_HEIGHT","THUMBNAIL_WIDTH","THUMBNAIL_HEIGHT","PREVIEWER_HEIGHT","WEB_VIDEO_WIDTH","WEB_VIDEO_HEIGHT","MOBILE_VIDEO_WIDTH","MOBILE_VIDEO_HEIGHT","DESKTOP_SCREEN_WIDTH","TABLET_SCREEN_WIDTH","MOBILE_SCREEN_WIDTH","SMALL_SIDEBAR_BREAKPOINT","MEDIUM_SIDEBAR_BREAKPOINT","LARGE_SIDEBAR_BREAKPOINT","POST_MODAL_PADDING","SCROLL_DELAY","SCROLL_PAGE_FRACTION","DEFAULT_CHANNEL_UI_NAME","OFFTOPIC_CHANNEL","OFFTOPIC_CHANNEL_UI_NAME","GITLAB_SERVICE","GOOGLE_SERVICE","OFFICE365_SERVICE","OAUTH_SERVICES","OPENID_SERVICE","OPENID_SERVICE_FEATURE_DISCOVERY","OPENID_SCOPES","EMAIL_SERVICE","LDAP_SERVICE","SAML_SERVICE","USERNAME_SERVICE","SIGNIN_CHANGE","PASSWORD_CHANGE","GET_TERMS_ERROR","TERMS_REJECTED","SIGNIN_VERIFIED","CREATE_LDAP","SESSION_EXPIRED","POST_AREA_HEIGHT","POST_FOCUS_CONTEXT_RADIUS","POST_LOADING","POST_FAILED","SUGGESTION_LIST_MAXHEIGHT","SUGGESTION_LIST_MAXWIDTH","SUGGESTION_LIST_SPACE_RHS","MOBILE_SUGGESTION_LIST_SPACE_RHS","SUGGESTION_LIST_MODAL_WIDTH","MENTION_NAME_PADDING_LEFT","AVATAR_WIDTH","RESERVED_TEAM_NAMES","RESERVED_USERNAMES","MONTHS","MAX_DMS","MAX_CHANNEL_POPOVER_COUNT","DM_AND_GM_SHOW_COUNTS","HIGHEST_DM_SHOW_COUNT","INVITE_TEAM","OPEN_TEAM","MAX_POST_LEN","EMOJI_SIZE","DEFAULT_EMOJI_PICKER_LEFT_OFFSET","DEFAULT_EMOJI_PICKER_RIGHT_OFFSET","EMOJI_PICKER_WIDTH_OFFSET","SIDEBAR_MINIMUM_WIDTH","THEME_ELEMENTS","themes","cssURL","solarizedDarkCSS","iconURL","solarizedDarkIcon","solarizedLightCSS","solarizedLightIcon","githubCSS","githubIcon","monokaiCSS","monokaiIcon","DEFAULT_CODE_THEME","KeyCodes","BACKSPACE","TAB","ENTER","SHIFT","CTRL","ALT","CAPS_LOCK","ESCAPE","SPACE","PAGE_UP","PAGE_DOWN","END","HOME","LEFT","UP","RIGHT","DOWN","INSERT","ZERO","ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","CMD","MENU","NUMPAD_0","NUMPAD_1","NUMPAD_2","NUMPAD_3","NUMPAD_4","NUMPAD_5","NUMPAD_6","NUMPAD_7","NUMPAD_8","NUMPAD_9","MULTIPLY","ADD","SUBTRACT","DECIMAL","DIVIDE","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","NUM_LOCK","SEMICOLON","EQUAL","COMMA","DASH","PERIOD","FORWARD_SLASH","TILDE","OPEN_BRACKET","BACK_SLASH","CLOSE_BRACKET","COMPOSING","CODE_PREVIEW_MAX_FILE_SIZE","HighlightedLanguages","extensions","aliases","actionscript","applescript","bash","clojure","coffeescript","cpp","csharp","css","d","dart","delphi","diff","django","dockerfile","elixir","erlang","fortran","fsharp","gcode","go","groovy","handlebars","haskell","haxe","java","javascript","json","julia","kotlin","latex","less","lisp","lua","makefile","markdown","matlab","objectivec","ocaml","perl","pgsql","php","powershell","puppet","python","ruby","rust","scala","scss","smalltalk","sql","stylus","swift","typescript","vbnet","vbscript","verilog","vhdl","vtt","xml","yaml","PostsViewJumpTypes","SIDEBAR_OPEN","NotificationPrefs","Integrations","PAGE_SIZE","START_PAGE_NUM","INCOMING_WEBHOOK","OUTGOING_WEBHOOK","OAUTH_APP","OUTGOING_OAUTH_CONNECTIONS","BOT","EXECUTE_CURRENT_COMMAND_ITEM_ID","OPEN_COMMAND_IN_MODAL_ITEM_ID","COMMAND_SUGGESTION_ERROR","COMMAND_SUGGESTION_CHANNEL","COMMAND_SUGGESTION_USER","PERMALINK_FADEOUT","DEFAULT_MAX_USERS_PER_TEAM","DEFAULT_MAX_CHANNELS_PER_TEAM","DEFAULT_MAX_NOTIFICATIONS_PER_CHANNEL","MIN_TEAMNAME_LENGTH","MAX_TEAMNAME_LENGTH","MAX_TEAMDESCRIPTION_LENGTH","MIN_CHANNELNAME_LENGTH","MAX_CHANNELNAME_LENGTH","DEFAULT_CHANNELURL_SHORTEN_LENGTH","MAX_CHANNELPURPOSE_LENGTH","MAX_CUSTOM_ATTRIBUTE_NAME_LENGTH","MAX_CUSTOM_ATTRIBUTES","MAX_CUSTOM_ATTRIBUTE_LENGTH","MAX_FIRSTNAME_LENGTH","MAX_LASTNAME_LENGTH","MAX_EMAIL_LENGTH","MIN_USERNAME_LENGTH","MAX_USERNAME_LENGTH","MAX_NICKNAME_LENGTH","MIN_PASSWORD_LENGTH","MAX_PASSWORD_LENGTH","MAX_POSITION_LENGTH","MIN_TRIGGER_LENGTH","MAX_TRIGGER_LENGTH","MAX_SITENAME_LENGTH","MAX_CUSTOM_BRAND_TEXT_LENGTH","MAX_TERMS_OF_SERVICE_TEXT_LENGTH","DEFAULT_TERMS_OF_SERVICE_RE_ACCEPTANCE_PERIOD","EMOJI_PATH","RECENT_EMOJI_KEY","DEFAULT_WEBHOOK_LOGO","logoWebhook","MHPNS_US","MHPNS_DE","MTPNS","SAVE_DRAFT_TIMEOUT","PERMISSIONS_SYSTEM_READ_ONLY_ADMIN","PERMISSIONS_SYSTEM_USER_MANAGER","PERMISSIONS_SYSTEM_MANAGER","PERMISSIONS_DELETE_POST_ALL","PERMISSIONS_DELETE_POST_TEAM_ADMIN","PERMISSIONS_DELETE_POST_SYSTEM_ADMIN","PERMISSIONS_SYSTEM_CUSTOM_GROUP_ADMIN","UNSET_POST_EDIT_TIME_LIMIT","MENTION_CHANNELS","MENTION_MORE_CHANNELS","MENTION_UNREAD_CHANNELS","MENTION_UNREAD","MENTION_MEMBERS","MENTION_MORE_MEMBERS","MENTION_NONMEMBERS","MENTION_PUBLIC_CHANNELS","MENTION_PRIVATE_CHANNELS","MENTION_RECENT_CHANNELS","MENTION_SPECIAL","MENTION_GROUPS","STATUS_INTERVAL","AUTOCOMPLETE_TIMEOUT","ANIMATION_TIMEOUT","SEARCH_POST","CHANNEL_ID_LENGTH","TRANSPARENT_PIXEL","REGEX_CODE_BLOCK_OPTIONAL_LANGUAGE_TAG","MAX_ATTACHMENT_FOOTER_LENGTH","ACCEPT_STATIC_IMAGE","ACCEPT_EMOJI_IMAGE","THREADS_LOADING_INDICATOR_ITEM_ID","THREADS_NO_RESULTS_ITEM_ID","TRIAL_MODAL_AUTO_SHOWN","DEFAULT_SITE_URL","CHANNEL_HEADER_BUTTON_DISABLE_TIMEOUT","FIRST_ADMIN_ROLE","MAX_PURCHASE_SEATS","MIN_PURCHASE_SEATS","ValidationErrors","USERNAME_REQUIRED","INVALID_LENGTH","INVALID_CHARACTERS","INVALID_FIRST_CHARACTER","RESERVED_NAME","INVALID_LAST_CHARACTER","ConsolePages","AD_LDAP","COMPLIANCE_EXPORT","CUSTOM_TERMS","LICENSE","SAML","WEB_SERVER","PUSH_NOTIFICATION_CENTER","SMTP","PAYMENT_INFO","MOBILE_VIEW","TABLET_VIEW","SMALL_DESKTOP_VIEW","AcceptedProfileImageTypes","searchHintOptions","defineMessage","additionalDisplay","searchFilesHintOptions","DONT_CLEAR","THIRTY_MINUTES","ONE_HOUR","FOUR_HOURS","TODAY","THIS_WEEK","DATE_AND_TIME","CUSTOM_DATE_TIME","CustomStatusDuration","durationValues","ClaimErrors","DataSearchTypes","FILES_SEARCH_TYPE","MESSAGES_SEARCH_TYPE","OverActiveUserLimits","MIN","MAX","PageLoadContext","PAGE_LOAD","RECONNECT","SCHEDULED_POST_URL_SUFFIX","RECENTLY_USED_CUSTOM_TIME","SCHEDULED_POSTS","RootHtmlPortalId","OverlaysTimings","CURSOR_REST_TIME_BEFORE_OPEN","CURSOR_MOUSEOVER_TO_OPEN","CURSOR_MOUSEOUT_TO_CLOSE","CURSOR_MOUSEOUT_TO_CLOSE_WITH_DELAY","FADE_IN_DURATION","FADE_OUT_DURATION","OverlayTransitionStyles","opacity","OverlayArrow","WIDTH","HEIGHT","OFFSET","keyArr","exports","UserReportSortColumns","ReportSortDirection","ReportDuration","check","defineProperty","collectionRemoveItem","collectionAddItem","collectionReplaceItem","collectionToArray","collectionFromArray","isRecordOf","collection","webpackContext","req","webpackContextResolve","__webpack_require__","resolve","module"],"sourceRoot":""}