{"version":3,"file":"1011.cb8755d1832506d80357.js","mappings":"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","sources":["webpack://mattermost-webapp/./src/actions/storage.ts","webpack://mattermost-webapp/./src/components/resizable_sidebar/constants.ts","webpack://mattermost-webapp/./src/components/app.tsx","webpack://mattermost-webapp/./src/entry.tsx","webpack://mattermost-webapp/./src/module_registry.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/admin.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/apps.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/bots.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/channel_categories.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/channels.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/cloud.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/emojis.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/files.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/general.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/groups.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/hosted_customer.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/integrations.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/jobs.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/limits.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/posts.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/preferences.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/roles.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/schemes.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/search.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/teams.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/threads.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/action_types/users.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/actions/files.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/actions/groups.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/actions/posts.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/actions/roles.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/selectors/entities/threads.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/utils/theme_utils.ts","webpack://mattermost-webapp/./src/selectors/general.ts","webpack://mattermost-webapp/./src/stores/redux_store.tsx","webpack://mattermost-webapp/../platform/types/lib/config.js","webpack://mattermost-webapp/../platform/types/lib/groups.js","webpack://mattermost-webapp/../platform/types/lib/threads.js","webpack://mattermost-webapp/../node_modules/lodash/uniq.js"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {DispatchFunc, GetStateFunc} from 'mattermost-redux/types/actions';\n\nimport {StorageTypes} from 'utils/constants';\nimport {getPrefix} from 'utils/storage_utils';\n\nexport function setItem(name: string, value: string) {\n return (dispatch: DispatchFunc, getState: GetStateFunc) => {\n const state = getState();\n const prefix = getPrefix(state);\n dispatch({\n type: StorageTypes.SET_ITEM,\n data: {prefix, name, value, timestamp: new Date()},\n });\n return {data: true};\n };\n}\n\nexport function removeItem(name: string) {\n return (dispatch: DispatchFunc, getState: GetStateFunc) => {\n const state = getState();\n const prefix = getPrefix(state);\n dispatch({\n type: StorageTypes.REMOVE_ITEM,\n data: {prefix, name},\n });\n return {data: true};\n };\n}\n\nexport function setGlobalItem(name: string, value: any) {\n return {\n type: StorageTypes.SET_GLOBAL_ITEM,\n data: {name, value, timestamp: new Date()},\n };\n}\n\nexport function removeGlobalItem(name: string) {\n return (dispatch: DispatchFunc) => {\n dispatch({\n type: StorageTypes.REMOVE_GLOBAL_ITEM,\n data: {name},\n });\n return {data: true};\n };\n}\n\nexport function actionOnGlobalItemsWithPrefix(prefix: string, action: (key: string, value: any) => any) {\n return {\n type: StorageTypes.ACTION_ON_GLOBAL_ITEMS_WITH_PREFIX,\n data: {prefix, action},\n };\n}\n\nexport function cleanLocalStorage() {\n const userProfileColorPattern = /^[a-z0-9.\\-_]+-#[a-z0-9]{6}$/i;\n\n for (const key of Object.keys(localStorage)) {\n // Remove all keys added for user profile colours before MM-47782\n if (userProfileColorPattern.test(key)) {\n localStorage.removeItem(key);\n }\n }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nexport enum SidebarSize {\n SMALL='small',\n MEDIUM= 'medium',\n LARGE= 'large',\n XLARGE= 'xLarge',\n}\n\nexport enum ResizeDirection {\n LEFT = 'left',\n RIGHT = 'right',\n}\n\nexport enum CssVarKeyForResizable {\n LHS = 'overrideLhsWidth',\n RHS = 'overrideRhsWidth',\n}\n\nexport const SIDEBAR_SNAP_SIZE = 16;\nexport const SIDEBAR_SNAP_SPEED_LIMIT = 5;\n\nexport const DEFAULT_LHS_WIDTH = 240;\n\nexport const RHS_MIN_MAX_WIDTH: { [size in SidebarSize]: { min: number; max: number; default: number}} = {\n [SidebarSize.SMALL]: {\n min: 400,\n max: 400,\n default: 400,\n },\n [SidebarSize.MEDIUM]: {\n min: 304,\n max: 400,\n default: 400,\n },\n [SidebarSize.LARGE]: {\n min: 304,\n max: 464,\n default: 400,\n },\n [SidebarSize.XLARGE]: {\n min: 304,\n max: 776,\n default: 500,\n },\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport {hot} from 'react-hot-loader/root';\nimport {Provider} from 'react-redux';\nimport {Router, Route} from 'react-router-dom';\n\nimport store from 'stores/redux_store';\n\nimport {makeAsyncComponent} from 'components/async_load';\nimport CRTPostsChannelResetWatcher from 'components/threading/channel_threads/posts_channel_reset_watcher';\n\nimport {getHistory} from 'utils/browser_history';\nconst LazyRoot = React.lazy(() => import('components/root'));\n\nconst Root = makeAsyncComponent('Root', LazyRoot);\n\nconst App = () => {\n return (\n \n \n \n \n \n \n );\n};\n\nexport default hot(React.memo(App));\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport {logError} from 'mattermost-redux/actions/errors';\n\nimport store from 'stores/redux_store';\n\nimport App from 'components/app';\n\nimport {AnnouncementBarTypes} from 'utils/constants';\nimport {setCSRFFromCookie} from 'utils/utils';\n\n// Import our styles\nimport './sass/styles.scss';\nimport 'katex/dist/katex.min.css';\n\nimport '@mattermost/compass-icons/css/compass-icons.css';\nimport '@mattermost/components/dist/index.esm.css';\n\ndeclare global {\n interface Window {\n publicPath?: string;\n }\n}\n\n// This is for anything that needs to be done for ALL react components.\n// This runs before we start to render anything.\nfunction preRenderSetup(callwhendone: () => void) {\n window.onerror = (msg, url, line, column, error) => {\n if (msg === 'ResizeObserver loop limit exceeded') {\n return;\n }\n\n store.dispatch(\n logError(\n {\n type: AnnouncementBarTypes.DEVELOPER,\n message: 'A JavaScript error in the webapp client has occurred. (msg: ' + msg + ', row: ' + line + ', col: ' + column + ').',\n stack: error?.stack,\n url,\n },\n true,\n true,\n ),\n );\n };\n setCSRFFromCookie();\n callwhendone();\n}\n\nfunction renderRootComponent() {\n ReactDOM.render((\n \n ),\n document.getElementById('root'));\n}\n\n/**\n * Adds a function to be invoked onload appended to any existing onload\n * event handlers.\n */\nfunction appendOnLoadEvent(fn: (evt: Event) => void) {\n if (window.onload) {\n const curronload = window.onload;\n window.onload = (evt) => {\n (curronload as any)(evt);\n fn(evt);\n };\n } else {\n window.onload = fn;\n }\n}\n\nappendOnLoadEvent(() => {\n // Do the pre-render setup and call renderRootComponent when done\n preRenderSetup(renderRootComponent);\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nconst modules: Record = {};\n\nexport const getModule = (name: string) => {\n return modules[name] as T;\n};\n\nexport const setModule = (name: string, component: T) => {\n if (modules[name]) {\n return false;\n }\n\n modules[name] = component;\n return true;\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 CREATE_COMPLIANCE_REQUEST: null,\n CREATE_COMPLIANCE_SUCCESS: null,\n CREATE_COMPLIANCE_FAILURE: null,\n\n LINK_LDAP_GROUP_FAILURE: null,\n\n UNLINK_LDAP_GROUP_FAILURE: null,\n\n PREV_TRIAL_LICENSE_SUCCESS: null,\n\n ENABLE_PLUGIN_REQUEST: null,\n ENABLE_PLUGIN_FAILURE: null,\n\n DISABLE_PLUGIN_REQUEST: null,\n\n RECEIVED_LOGS: null,\n RECEIVED_PLAIN_LOGS: null,\n RECEIVED_AUDITS: null,\n RECEIVED_CONFIG: null,\n RECEIVED_ENVIRONMENT_CONFIG: null,\n RECEIVED_COMPLIANCE_REPORT: null,\n RECEIVED_COMPLIANCE_REPORTS: null,\n RECEIVED_CLUSTER_STATUS: null,\n RECEIVED_SAML_CERT_STATUS: null,\n RECEIVED_SYSTEM_ANALYTICS: null,\n RECEIVED_TEAM_ANALYTICS: null,\n RECEIVED_USER_ACCESS_TOKEN: null,\n RECEIVED_USER_ACCESS_TOKENS: null,\n RECEIVED_USER_ACCESS_TOKENS_FOR_USER: null,\n RECEIVED_PLUGINS: null,\n RECEIVED_PLUGIN_STATUSES: null,\n RECEIVED_LDAP_GROUPS: null,\n LINKED_LDAP_GROUP: null,\n UNLINKED_LDAP_GROUP: null,\n REMOVED_PLUGIN: null,\n ENABLED_PLUGIN: null,\n DISABLED_PLUGIN: null,\n\n RECEIVED_SAML_METADATA_RESPONSE: null,\n\n RECEIVED_DATA_RETENTION_CUSTOM_POLICIES: null,\n RECEIVED_DATA_RETENTION_CUSTOM_POLICY: null,\n DELETE_DATA_RETENTION_CUSTOM_POLICY_SUCCESS: null,\n DELETE_DATA_RETENTION_CUSTOM_POLICY_FAILURE: null,\n RECEIVED_DATA_RETENTION_CUSTOM_POLICY_TEAMS: null,\n RECEIVED_DATA_RETENTION_CUSTOM_POLICY_CHANNELS: null,\n RECEIVED_DATA_RETENTION_CUSTOM_POLICY_TEAMS_SEARCH: null,\n RECEIVED_DATA_RETENTION_CUSTOM_POLICY_CHANNELS_SEARCH: null,\n CREATE_DATA_RETENTION_CUSTOM_POLICY_SUCCESS: null,\n UPDATE_DATA_RETENTION_CUSTOM_POLICY_SUCCESS: null,\n ADD_DATA_RETENTION_CUSTOM_POLICY_TEAMS_SUCCESS: null,\n ADD_DATA_RETENTION_CUSTOM_POLICY_CHANNELS_SUCCESS: null,\n REMOVE_DATA_RETENTION_CUSTOM_POLICY_TEAMS_SUCCESS: null,\n REMOVE_DATA_RETENTION_CUSTOM_POLICY_TEAMS_FAILURE: null,\n REMOVE_DATA_RETENTION_CUSTOM_POLICY_CHANNELS_SUCCESS: null,\n REMOVE_DATA_RETENTION_CUSTOM_POLICY_CHANNELS_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 RECEIVED_APP_BINDINGS: null,\n FAILED_TO_FETCH_APP_BINDINGS: null,\n RECEIVED_APP_RHS_BINDINGS: null,\n RECEIVED_APP_COMMAND_FORM: null,\n RECEIVED_APP_RHS_COMMAND_FORM: null,\n APPS_PLUGIN_ENABLED: null,\n APPS_PLUGIN_DISABLED: 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_BOT_ACCOUNTS: null,\n RECEIVED_BOT_ACCOUNT: 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_CATEGORY: null,\n RECEIVED_CATEGORIES: null,\n RECEIVED_CATEGORY_ORDER: null,\n\n CATEGORY_COLLAPSED: null,\n CATEGORY_EXPANDED: null,\n\n CATEGORY_DELETED: 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 CHANNEL_REQUEST: null,\n CHANNEL_SUCCESS: null,\n CHANNEL_FAILURE: null,\n\n CHANNELS_REQUEST: null,\n CHANNELS_SUCCESS: null,\n CHANNELS_FAILURE: null,\n\n CREATE_CHANNEL_REQUEST: null,\n CREATE_CHANNEL_SUCCESS: null,\n CREATE_CHANNEL_FAILURE: null,\n\n UPDATE_CHANNEL_REQUEST: null,\n UPDATE_CHANNEL_SUCCESS: null,\n UPDATE_CHANNEL_FAILURE: null,\n\n DELETE_CHANNEL_SUCCESS: null,\n UNARCHIVED_CHANNEL_SUCCESS: null,\n\n GET_CHANNELS_REQUEST: null,\n GET_CHANNELS_SUCCESS: null,\n GET_CHANNELS_FAILURE: null,\n\n GET_ALL_CHANNELS_REQUEST: null,\n GET_ALL_CHANNELS_SUCCESS: null,\n GET_ALL_CHANNELS_FAILURE: null,\n\n GET_CHANNELS_TIMEZONE_REQUEST: null,\n GET_CHANNELS_TIMEZONE_SUCCESS: null,\n GET_CHANNELS_TIMEZONE_FAILURE: null,\n\n CHANNEL_STATS_REQUEST: null,\n CHANNEL_STATS_SUCCESS: null,\n CHANNEL_STATS_FAILURE: null,\n\n ADD_CHANNEL_MEMBER_REQUEST: null,\n ADD_CHANNEL_MEMBER_SUCCESS: null,\n\n REMOVE_CHANNEL_MEMBER_SUCCESS: null,\n\n SELECT_CHANNEL: null,\n LEAVE_CHANNEL: null,\n REMOVE_MEMBER_FROM_CHANNEL: null,\n RECEIVED_CHANNEL: null,\n RECEIVED_CHANNELS: null,\n RECEIVED_ALL_CHANNELS: null,\n RECEIVED_CHANNELS_LIST: null,\n RECEIVED_MY_CHANNEL_MEMBERS: null,\n RECEIVED_MY_CHANNEL_MEMBER: null,\n RECEIVED_CHANNEL_MEMBERS: null,\n RECEIVED_CHANNEL_MEMBER: null,\n RECEIVED_CHANNEL_STATS: null,\n RECEIVED_CHANNELS_MEMBER_COUNT: null,\n RECEIVED_CHANNEL_PROPS: null,\n RECEIVED_CHANNEL_DELETED: null,\n RECEIVED_CHANNEL_UNARCHIVED: null,\n RECEIVED_LAST_VIEWED_AT: null,\n UPDATE_CHANNEL_HEADER: null,\n UPDATE_CHANNEL_PURPOSE: null,\n CHANNEL_MEMBER_ADDED: null,\n CHANNEL_MEMBER_REMOVED: null,\n\n SET_CHANNEL_MUTED: null,\n\n INCREMENT_TOTAL_MSG_COUNT: null,\n INCREMENT_UNREAD_MSG_COUNT: null,\n DECREMENT_UNREAD_MSG_COUNT: null,\n INCREMENT_UNREAD_MENTION_COUNT: null,\n DECREMENT_UNREAD_MENTION_COUNT: null,\n\n UPDATED_CHANNEL_SCHEME: null,\n UPDATED_CHANNEL_MEMBER_SCHEME_ROLES: null,\n\n RECEIVED_CHANNEL_MEMBERS_MINUS_GROUP_MEMBERS: null,\n\n RECEIVED_CHANNEL_MODERATIONS: null,\n\n RECEIVED_CHANNEL_MEMBER_COUNTS_BY_GROUP: null,\n RECEIVED_CHANNEL_MEMBER_COUNTS_FROM_GROUPS_LIST: null,\n\n RECEIVED_TOTAL_CHANNEL_COUNT: null,\n\n POST_UNREAD_SUCCESS: null,\n\n ADD_MANUALLY_UNREAD: null,\n REMOVE_MANUALLY_UNREAD: null,\n\n INCREMENT_PINNED_POST_COUNT: null,\n DECREMENT_PINNED_POST_COUNT: null,\n\n INCREMENT_FILE_COUNT: null,\n\n GM_CONVERTED_TO_CHANNEL: 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_CLOUD_CUSTOMER: null,\n RECEIVED_CLOUD_PRODUCTS: null,\n RECEIVED_CLOUD_SUBSCRIPTION: null,\n RECEIVED_CLOUD_INVOICES: null,\n RECEIVED_CLOUD_LIMITS: null,\n RECEIVED_MESSAGES_USAGE: null,\n RECEIVED_FILES_USAGE: null,\n RECEIVED_BOARDS_USAGE: null,\n RECEIVED_TEAMS_USAGE: null,\n RECEIVED_LICENSE_SELF_SERVE_STATS: null,\n\n CLOUD_CUSTOMER_FAILED: null,\n CLOUD_INVOICES_FAILED: null,\n CLOUD_LIMITS_FAILED: null,\n CLOUD_PRODUCTS_FAILED: null,\n CLOUD_SUBSCRIPTION_FAILED: null,\n LICENSE_SELF_SERVE_STATS_FAILED: null,\n\n CLOUD_CUSTOMER_REQUEST: null,\n CLOUD_INVOICES_REQUEST: null,\n CLOUD_LIMITS_REQUEST: null,\n CLOUD_PRODUCTS_REQUEST: null,\n CLOUD_SUBSCRIPTION_REQUEST: null,\n LICENSE_SELF_SERVE_STATS_REQUEST: null,\n RECEIVED_SELF_HOSTED_SIGNUP_PROGRESS: 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 CLEAR_CUSTOM_EMOJIS: null,\n RECEIVED_CUSTOM_EMOJI: null,\n RECEIVED_CUSTOM_EMOJIS: null,\n DELETED_CUSTOM_EMOJI: null,\n CUSTOM_EMOJI_DOES_NOT_EXIST: 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';\nexport default keyMirror({\n\n UPLOAD_FILES_REQUEST: null,\n UPLOAD_FILES_SUCCESS: null,\n UPLOAD_FILES_FAILURE: null,\n UPLOAD_FILES_CANCEL: null,\n\n RECEIVED_FILES_FOR_SEARCH: null,\n RECEIVED_FILES_FOR_POST: null,\n RECEIVED_UPLOAD_FILES: null,\n RECEIVED_FILE_PUBLIC_LINK: 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_SERVER_VERSION: null,\n\n CLIENT_CONFIG_RECEIVED: null,\n CLIENT_CONFIG_RESET: null,\n\n CLIENT_LICENSE_RECEIVED: null,\n CLIENT_LICENSE_RESET: null,\n\n RECEIVED_DATA_RETENTION_POLICY: null,\n\n LOG_CLIENT_ERROR_REQUEST: null,\n LOG_CLIENT_ERROR_SUCCESS: null,\n LOG_CLIENT_ERROR_FAILURE: null,\n\n WEBSOCKET_REQUEST: null,\n WEBSOCKET_SUCCESS: null,\n WEBSOCKET_FAILURE: null,\n WEBSOCKET_CLOSED: null,\n SET_CONNECTION_ID: null,\n\n SET_CONFIG_AND_LICENSE: null,\n\n WARN_METRICS_STATUS_RECEIVED: null,\n WARN_METRIC_STATUS_RECEIVED: null,\n WARN_METRIC_STATUS_REMOVED: null,\n\n FIRST_ADMIN_VISIT_MARKETPLACE_STATUS_RECEIVED: null,\n FIRST_ADMIN_COMPLETE_SETUP_RECEIVED: null,\n SHOW_LAUNCHING_WORKSPACE: 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 LINKED_GROUP_TEAM: null,\n LINKED_GROUP_CHANNEL: null,\n\n UNLINKED_GROUP_TEAM: null,\n UNLINKED_GROUP_CHANNEL: null,\n\n RECEIVED_GROUP_TEAMS: null,\n RECEIVED_GROUP_CHANNELS: null,\n\n RECEIVED_GROUP_STATS: null,\n\n RECEIVED_GROUP: null,\n\n RECEIVED_GROUPS: null,\n\n RECEIVED_GROUP_ASSOCIATED_TO_TEAM: null,\n RECEIVED_GROUPS_ASSOCIATED_TO_TEAM: null,\n\n RECEIVED_ALL_GROUPS_ASSOCIATED_TO_CHANNELS_IN_TEAM: null,\n\n RECEIVED_GROUP_ASSOCIATED_TO_CHANNEL: null,\n RECEIVED_GROUPS_ASSOCIATED_TO_CHANNEL: null,\n\n RECEIVED_ALL_GROUPS_ASSOCIATED_TO_TEAM: null,\n\n RECEIVED_ALL_GROUPS_ASSOCIATED_TO_CHANNEL: null,\n\n RECEIVED_GROUP_NOT_ASSOCIATED_TO_TEAM: null,\n RECEIVED_GROUPS_NOT_ASSOCIATED_TO_TEAM: null,\n\n RECEIVED_GROUP_NOT_ASSOCIATED_TO_CHANNEL: null,\n RECEIVED_GROUPS_NOT_ASSOCIATED_TO_CHANNEL: null,\n\n PATCHED_GROUP_TEAM: null,\n PATCHED_GROUP_CHANNEL: null,\n\n RECEIVED_MY_GROUPS: null,\n REMOVE_MY_GROUP: null,\n ADD_MY_GROUP: null,\n\n PATCHED_GROUP: null,\n\n CREATE_GROUP_SUCCESS: null,\n\n ARCHIVED_GROUP: null,\n\n CREATED_GROUP_TEAMS_AND_CHANNELS: null,\n\n RESTORED_GROUP: 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 SELF_HOSTED_PRODUCTS_REQUEST: null,\n SELF_HOSTED_PRODUCTS_FAILED: null,\n SELF_HOSTED_INVOICES_REQUEST: null,\n SELF_HOSTED_INVOICES_FAILED: null,\n RECEIVED_SELF_HOSTED_PRODUCTS: null,\n RECEIVED_SELF_HOSTED_SIGNUP_PROGRESS: null,\n RECEIVED_SELF_HOSTED_INVOICES: null,\n RECEIVED_TRUE_UP_REVIEW_BUNDLE: null,\n TRUE_UP_REVIEW_PROFILE_FAILED: null,\n RECEIVED_TRUE_UP_REVIEW_STATUS: null,\n TRUE_UP_REVIEW_STATUS_FAILED: null,\n TRUE_UP_REVIEW_PROFILE_REQUEST: null,\n TRUE_UP_REVIEW_STATUS_REQUEST: 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\n RECEIVED_INCOMING_HOOK: null,\n RECEIVED_INCOMING_HOOKS: null,\n DELETED_INCOMING_HOOK: null,\n RECEIVED_OUTGOING_HOOK: null,\n RECEIVED_OUTGOING_HOOKS: null,\n DELETED_OUTGOING_HOOK: null,\n RECEIVED_CUSTOM_TEAM_COMMANDS: null,\n RECEIVED_COMMAND: null,\n RECEIVED_COMMANDS: null,\n RECEIVED_COMMAND_TOKEN: null,\n DELETED_COMMAND: null,\n RECEIVED_OAUTH_APP: null,\n RECEIVED_OAUTH_APPS: null,\n DELETED_OAUTH_APP: null,\n RECEIVED_APPS_OAUTH_APP_IDS: null,\n RECEIVED_APPS_BOT_IDS: null,\n\n RECEIVED_DIALOG_TRIGGER_ID: null,\n RECEIVED_DIALOG: 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_JOB: null,\n RECEIVED_JOBS: null,\n RECEIVED_JOBS_BY_TYPE: 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 RECIEVED_USERS_LIMITS: 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 CREATE_POST_REQUEST: null,\n CREATE_POST_SUCCESS: null,\n CREATE_POST_FAILURE: null,\n CREATE_POST_RESET_REQUEST: null,\n\n EDIT_POST_REQUEST: null,\n EDIT_POST_SUCCESS: null,\n EDIT_POST_FAILURE: null,\n\n GET_POST_THREAD_REQUEST: null,\n GET_POST_THREAD_SUCCESS: null,\n GET_POST_THREAD_FAILURE: null,\n\n GET_POSTS_SUCCESS: null,\n GET_POSTS_FAILURE: null,\n GET_POSTS_SINCE_SUCCESS: null,\n\n GET_POST_THREAD_WITH_RETRY_ATTEMPT: null,\n GET_POSTS_WITH_RETRY_ATTEMPT: null,\n GET_POSTS_SINCE_WITH_RETRY_ATTEMPT: null,\n GET_POSTS_BEFORE_WITH_RETRY_ATTEMPT: null,\n GET_POSTS_AFTER_WITH_RETRY_ATTEMPT: null,\n\n RECEIVED_POST: null,\n RECEIVED_NEW_POST: null,\n RECEIVED_POST_HISTORY: null,\n\n RECEIVED_POSTS: null,\n RECEIVED_POSTS_AFTER: null,\n RECEIVED_POSTS_BEFORE: null,\n RECEIVED_POSTS_IN_CHANNEL: null,\n RECEIVED_POSTS_IN_THREAD: null,\n RECEIVED_POSTS_SINCE: null,\n\n POST_DELETED: null,\n POST_REMOVED: null,\n\n RECEIVED_FOCUSED_POST: null,\n RECEIVED_POST_SELECTED: null,\n RECEIVED_EDIT_POST: null,\n RECEIVED_REACTION: null,\n RECEIVED_REACTIONS: null,\n REACTION_DELETED: null,\n\n ADD_MESSAGE_INTO_HISTORY: null,\n RESET_HISTORY_INDEX: null,\n MOVE_HISTORY_INDEX_BACK: null,\n MOVE_HISTORY_INDEX_FORWARD: null,\n\n RESET_POSTS_IN_CHANNEL: null,\n\n CREATE_ACK_POST_SUCCESS: null,\n\n DELETE_ACK_POST_SUCCESS: null,\n\n MOVE_POST_SUCCESS: null,\n MOVE_POST_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 RECEIVED_PREFERENCES: null,\n RECEIVED_ALL_PREFERENCES: null,\n DELETED_PREFERENCES: 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 ROLES_BY_NAMES_REQUEST: null,\n ROLES_BY_NAMES_SUCCESS: null,\n ROLES_BY_NAMES_FAILURE: null,\n\n ROLE_BY_NAME_REQUEST: null,\n ROLE_BY_NAME_SUCCESS: null,\n ROLE_BY_NAME_FAILURE: null,\n\n ROLE_BY_ID_REQUEST: null,\n ROLE_BY_ID_SUCCESS: null,\n ROLE_BY_ID_FAILURE: null,\n\n EDIT_ROLE_REQUEST: null,\n EDIT_ROLE_SUCCESS: null,\n EDIT_ROLE_FAILURE: null,\n\n RECEIVED_ROLES: null,\n RECEIVED_ROLE: null,\n ROLE_DELETED: null,\n\n SET_PENDING_ROLES: 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_SCHEME: null,\n\n RECEIVED_SCHEMES: null,\n\n CREATED_SCHEME: null,\n\n DELETED_SCHEME: null,\n\n PATCHED_SCHEME: null,\n\n RECEIVED_SCHEME_TEAMS: null,\n\n RECEIVED_SCHEME_CHANNELS: 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 SEARCH_POSTS_REQUEST: null,\n SEARCH_POSTS_SUCCESS: null,\n\n SEARCH_FILES_REQUEST: null,\n SEARCH_FILES_SUCCESS: null,\n\n SEARCH_FLAGGED_POSTS_REQUEST: null,\n SEARCH_FLAGGED_POSTS_SUCCESS: null,\n SEARCH_FLAGGED_POSTS_FAILURE: null,\n\n SEARCH_PINNED_POSTS_REQUEST: null,\n SEARCH_PINNED_POSTS_SUCCESS: null,\n SEARCH_PINNED_POSTS_FAILURE: null,\n REMOVE_SEARCH_PINNED_POSTS: null,\n RECEIVED_SEARCH_POSTS: null,\n RECEIVED_SEARCH_FILES: null,\n RECEIVED_SEARCH_FLAGGED_POSTS: null,\n RECEIVED_SEARCH_PINNED_POSTS: null,\n RECEIVED_SEARCH_TERM: null,\n REMOVE_SEARCH_POSTS: null,\n REMOVE_SEARCH_FILES: null,\n REMOVE_SEARCH_TERM: 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 GET_TEAMS_REQUEST: null,\n GET_TEAMS_SUCCESS: null,\n GET_TEAMS_FAILURE: null,\n\n MY_TEAMS_REQUEST: null,\n MY_TEAMS_SUCCESS: null,\n MY_TEAMS_FAILURE: null,\n\n CREATE_TEAM_REQUEST: null,\n CREATE_TEAM_SUCCESS: null,\n CREATE_TEAM_FAILURE: null,\n\n GET_TEAM_MEMBERS_REQUEST: null,\n GET_TEAM_MEMBERS_SUCCESS: null,\n GET_TEAM_MEMBERS_FAILURE: null,\n\n JOIN_TEAM_REQUEST: null,\n JOIN_TEAM_SUCCESS: null,\n JOIN_TEAM_FAILURE: null,\n\n TEAM_INVITE_INFO_REQUEST: null,\n TEAM_INVITE_INFO_SUCCESS: null,\n TEAM_INVITE_INFO_FAILURE: null,\n\n ADD_TO_TEAM_FROM_INVITE_REQUEST: null,\n ADD_TO_TEAM_FROM_INVITE_SUCCESS: null,\n ADD_TO_TEAM_FROM_INVITE_FAILURE: null,\n\n CREATED_TEAM: null,\n SELECT_TEAM: null,\n UPDATED_TEAM: null,\n PATCHED_TEAM: null,\n REGENERATED_TEAM_INVITE_ID: null,\n RECEIVED_TEAM: null,\n RECEIVED_TEAMS: null,\n RECEIVED_TEAM_DELETED: null,\n RECEIVED_TEAM_UNARCHIVED: null,\n RECEIVED_TEAMS_LIST: null,\n RECEIVED_MY_TEAM_MEMBERS: null,\n RECEIVED_MY_TEAM_MEMBER: null,\n RECEIVED_TEAM_MEMBERS: null,\n RECEIVED_MEMBERS_IN_TEAM: null,\n RECEIVED_MEMBER_IN_TEAM: null,\n REMOVE_MEMBER_FROM_TEAM: null,\n RECEIVED_TEAM_STATS: null,\n RECEIVED_MY_TEAM_UNREADS: null,\n LEAVE_TEAM: null,\n UPDATED_TEAM_SCHEME: null,\n UPDATED_TEAM_MEMBER_SCHEME_ROLES: null,\n\n RECEIVED_TEAM_MEMBERS_MINUS_GROUP_MEMBERS: null,\n\n RECEIVED_TOTAL_TEAM_COUNT: 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_THREAD: null,\n RECEIVED_THREADS: null,\n RECEIVED_UNREAD_THREADS: null,\n FOLLOW_CHANGED_THREAD: null,\n READ_CHANGED_THREAD: null,\n ALL_TEAM_THREADS_READ: null,\n DECREMENT_THREAD_COUNTS: null,\n RECEIVED_THREAD_COUNTS: 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 CREATE_USER_REQUEST: null,\n CREATE_USER_SUCCESS: null,\n CREATE_USER_FAILURE: null,\n\n LOGIN_REQUEST: null,\n LOGIN_SUCCESS: null,\n LOGIN_FAILURE: null,\n\n LOGOUT_REQUEST: null,\n LOGOUT_SUCCESS: null,\n LOGOUT_FAILURE: null,\n\n REVOKE_ALL_USER_SESSIONS_SUCCESS: null,\n REVOKE_SESSIONS_FOR_ALL_USERS_SUCCESS: null,\n\n AUTOCOMPLETE_USERS_REQUEST: null,\n AUTOCOMPLETE_USERS_SUCCESS: null,\n AUTOCOMPLETE_USERS_FAILURE: null,\n\n UPDATE_ME_REQUEST: null,\n UPDATE_ME_SUCCESS: null,\n UPDATE_ME_FAILURE: null,\n\n RECEIVED_ME: null,\n RECEIVED_TERMS_OF_SERVICE_STATUS: null,\n RECEIVED_PROFILE: null,\n RECEIVED_PROFILES: null,\n RECEIVED_PROFILES_LIST: null,\n RECEIVED_PROFILES_IN_TEAM: null,\n RECEIVED_PROFILE_IN_TEAM: null,\n RECEIVED_PROFILES_LIST_IN_TEAM: null,\n RECEIVED_PROFILE_NOT_IN_TEAM: null,\n RECEIVED_PROFILES_LIST_NOT_IN_TEAM: null,\n RECEIVED_PROFILES_LIST_NOT_IN_TEAM_AND_REPLACE: null,\n RECEIVED_PROFILE_WITHOUT_TEAM: null,\n RECEIVED_PROFILES_LIST_WITHOUT_TEAM: null,\n RECEIVED_PROFILES_IN_CHANNEL: null,\n RECEIVED_PROFILES_LIST_IN_CHANNEL: null,\n RECEIVED_PROFILE_IN_CHANNEL: null,\n RECEIVED_PROFILES_NOT_IN_CHANNEL: null,\n RECEIVED_PROFILES_LIST_NOT_IN_CHANNEL: null,\n RECEIVED_PROFILES_LIST_NOT_IN_CHANNEL_AND_REPLACE: null,\n RECEIVED_PROFILE_NOT_IN_CHANNEL: null,\n RECEIVED_PROFILES_LIST_IN_GROUP: null,\n RECEIVED_PROFILES_FOR_GROUP: null,\n RECEIVED_PROFILES_LIST_TO_REMOVE_FROM_GROUP: null,\n RECEIVED_PROFILES_LIST_NOT_IN_GROUP: null,\n RECEIVED_SESSIONS: null,\n RECEIVED_REVOKED_SESSION: null,\n RECEIVED_AUDITS: null,\n RECEIVED_STATUS: null,\n RECEIVED_STATUSES: null,\n RECEIVED_AUTOCOMPLETE_IN_CHANNEL: null,\n RESET_LOGOUT_STATE: null,\n RECEIVED_MY_USER_ACCESS_TOKEN: null,\n RECEIVED_MY_USER_ACCESS_TOKENS: null,\n CLEAR_MY_USER_ACCESS_TOKENS: null,\n REVOKED_USER_ACCESS_TOKEN: null,\n DISABLED_USER_ACCESS_TOKEN: null,\n ENABLED_USER_ACCESS_TOKEN: null,\n RECEIVED_USER_STATS: null,\n RECIEVED_USERS_LIMITS: null,\n RECEIVED_FILTERED_USER_STATS: null,\n PROFILE_NO_LONGER_VISIBLE: null,\n LOGIN: null,\n});\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {FileSearchResultItem} from '@mattermost/types/files';\nimport type {Post} from '@mattermost/types/posts';\n\nimport {FileTypes} from 'mattermost-redux/action_types';\nimport {Client4} from 'mattermost-redux/client';\nimport type {DispatchFunc, GetStateFunc, ActionFunc, NewActionFuncAsync} from 'mattermost-redux/types/actions';\n\nimport {logError} from './errors';\nimport {bindClientFunc, forceLogoutIfNecessary} from './helpers';\n\nexport function receivedFiles(files: Map) {\n return {\n type: FileTypes.RECEIVED_FILES_FOR_SEARCH,\n data: files,\n };\n}\n\nexport function getMissingFilesByPosts(posts: Post[]) {\n return (dispatch: DispatchFunc, getState: GetStateFunc) => {\n const {files} = getState().entities.files;\n const postIds = posts.reduce((curr: Array, post: Post) => {\n const {file_ids: fileIds} = post;\n if (!fileIds || fileIds.every((id) => files[id])) {\n return curr;\n }\n curr.push(post.id);\n\n return curr;\n }, []);\n\n const promises: Array> = [];\n\n for (const id of postIds) {\n dispatch(getFilesForPost(id));\n }\n\n return {data: promises};\n };\n}\n\nexport function getFilesForPost(postId: string): ActionFunc {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n let files;\n\n try {\n files = await Client4.getFileInfosForPost(postId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: FileTypes.RECEIVED_FILES_FOR_POST,\n data: files,\n postId,\n });\n\n return {data: true};\n };\n}\n\nexport function getFilePublicLink(fileId: string): NewActionFuncAsync<{link: string}> {\n return bindClientFunc({\n clientFunc: Client4.getFilePublicLink,\n onSuccess: FileTypes.RECEIVED_FILE_PUBLIC_LINK,\n params: [\n fileId,\n ],\n }) as any; // HARRISONTODO Type bindClientFunc\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 {batchActions} from 'redux-batched-actions';\n\nimport type {GroupPatch, SyncablePatch, GroupCreateWithUserIds, CustomGroupPatch, GroupSearchParams, GetGroupsParams, GetGroupsForUserParams, Group, GroupsWithCount, GroupStats} from '@mattermost/types/groups';\nimport {SyncableType, GroupSource} from '@mattermost/types/groups';\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport {ChannelTypes, GroupTypes, UserTypes} from 'mattermost-redux/action_types';\nimport {Client4} from 'mattermost-redux/client';\nimport {General} from 'mattermost-redux/constants';\nimport type {ActionFunc, NewActionFuncAsync} from 'mattermost-redux/types/actions';\n\nimport {logError} from './errors';\nimport {bindClientFunc, forceLogoutIfNecessary} from './helpers';\n\nexport function linkGroupSyncable(groupID: string, syncableID: string, syncableType: SyncableType, patch: Partial): NewActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.linkGroupSyncable(groupID, syncableID, syncableType, patch);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const dispatches: AnyAction[] = [];\n let type = '';\n switch (syncableType) {\n case SyncableType.Team:\n dispatches.push({type: GroupTypes.RECEIVED_GROUP_ASSOCIATED_TO_TEAM, data: {teamID: syncableID, groups: [{id: groupID}]}});\n type = GroupTypes.LINKED_GROUP_TEAM;\n break;\n case SyncableType.Channel:\n type = GroupTypes.LINKED_GROUP_CHANNEL;\n break;\n default:\n console.warn(`unhandled syncable type ${syncableType}`); // eslint-disable-line no-console\n }\n\n dispatches.push({type, data});\n dispatch(batchActions(dispatches));\n\n return {data: true};\n };\n}\n\nexport function unlinkGroupSyncable(groupID: string, syncableID: string, syncableType: SyncableType): NewActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.unlinkGroupSyncable(groupID, syncableID, syncableType);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const dispatches: AnyAction[] = [];\n\n let type = '';\n const data = {group_id: groupID, syncable_id: syncableID};\n switch (syncableType) {\n case SyncableType.Team:\n type = GroupTypes.UNLINKED_GROUP_TEAM;\n data.syncable_id = syncableID;\n dispatches.push({type: GroupTypes.RECEIVED_GROUPS_NOT_ASSOCIATED_TO_TEAM, data: {teamID: syncableID, groups: [{id: groupID}]}});\n break;\n case SyncableType.Channel:\n type = GroupTypes.UNLINKED_GROUP_CHANNEL;\n data.syncable_id = syncableID;\n break;\n default:\n console.warn(`unhandled syncable type ${syncableType}`); // eslint-disable-line no-console\n }\n\n dispatches.push({type, data});\n dispatch(batchActions(dispatches));\n\n return {data: true};\n };\n}\n\nexport function getGroupSyncables(groupID: string, syncableType: SyncableType): NewActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.getGroupSyncables(groupID, syncableType);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n let type = '';\n switch (syncableType) {\n case SyncableType.Team:\n type = GroupTypes.RECEIVED_GROUP_TEAMS;\n break;\n case SyncableType.Channel:\n type = GroupTypes.RECEIVED_GROUP_CHANNELS;\n break;\n default:\n console.warn(`unhandled syncable type ${syncableType}`); // eslint-disable-line no-console\n }\n\n dispatch(batchActions([\n {type, data, group_id: groupID},\n ]));\n\n return {data: true};\n };\n}\n\nexport function patchGroupSyncable(groupID: string, syncableID: string, syncableType: SyncableType, patch: Partial): NewActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.patchGroupSyncable(groupID, syncableID, syncableType, patch);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n return {error};\n }\n\n const dispatches: AnyAction[] = [];\n\n let type = '';\n switch (syncableType) {\n case SyncableType.Team:\n type = GroupTypes.PATCHED_GROUP_TEAM;\n break;\n case SyncableType.Channel:\n type = GroupTypes.PATCHED_GROUP_CHANNEL;\n break;\n default:\n console.warn(`unhandled syncable type ${syncableType}`); // eslint-disable-line no-console\n }\n\n dispatches.push(\n {type, data},\n );\n dispatch(batchActions(dispatches));\n\n return {data: true};\n };\n}\n\nexport function getGroup(id: string, includeMemberCount = false): NewActionFuncAsync {\n return bindClientFunc({\n clientFunc: Client4.getGroup,\n onSuccess: [GroupTypes.RECEIVED_GROUP],\n params: [\n id,\n includeMemberCount,\n ],\n }) as any; // HARRISONTODO Type bindClientFunc\n}\n\nexport function getGroups(opts: GetGroupsParams): NewActionFuncAsync {\n return bindClientFunc({\n clientFunc: async (opts) => {\n const result = await Client4.getGroups(opts);\n return result;\n },\n onSuccess: [GroupTypes.RECEIVED_GROUPS],\n params: [\n opts,\n ],\n }) as any; // HARRISONTODO Type bindClientFunc\n}\n\nexport function getGroupsNotAssociatedToTeam(teamID: string, q = '', page = 0, perPage: number = General.PAGE_SIZE_DEFAULT, source = GroupSource.Ldap): NewActionFuncAsync {\n return bindClientFunc({\n clientFunc: Client4.getGroupsNotAssociatedToTeam,\n onSuccess: [GroupTypes.RECEIVED_GROUPS],\n params: [\n teamID,\n q,\n page,\n perPage,\n source,\n ],\n }) as any; // HARRISONTODO Type bindClientFunc\n}\n\nexport function getGroupsNotAssociatedToChannel(channelID: string, q = '', page = 0, perPage: number = General.PAGE_SIZE_DEFAULT, filterParentTeamPermitted = false, source = GroupSource.Ldap): NewActionFuncAsync {\n return bindClientFunc({\n clientFunc: Client4.getGroupsNotAssociatedToChannel,\n onSuccess: [GroupTypes.RECEIVED_GROUPS],\n params: [\n channelID,\n q,\n page,\n perPage,\n filterParentTeamPermitted,\n source,\n ],\n }) as any; // HARRISONTODO Type bindClientFunc\n}\n\nexport function getAllGroupsAssociatedToTeam(teamID: string, filterAllowReference = false, includeMemberCount = false): NewActionFuncAsync {\n return bindClientFunc({\n clientFunc: async (param1, param2, param3) => {\n const result = await Client4.getAllGroupsAssociatedToTeam(param1, param2, param3);\n result.teamID = param1;\n return result;\n },\n onSuccess: [GroupTypes.RECEIVED_ALL_GROUPS_ASSOCIATED_TO_TEAM],\n params: [\n teamID,\n filterAllowReference,\n includeMemberCount,\n ],\n }) as any; // HARRISONTODO Type bindClientFunc\n}\n\nexport function getAllGroupsAssociatedToChannelsInTeam(teamID: string, filterAllowReference = false): ActionFunc {\n return bindClientFunc({\n clientFunc: async (param1, param2) => {\n const result = await Client4.getAllGroupsAssociatedToChannelsInTeam(param1, param2);\n return {groupsByChannelId: result.groups};\n },\n onSuccess: [GroupTypes.RECEIVED_ALL_GROUPS_ASSOCIATED_TO_CHANNELS_IN_TEAM],\n params: [\n teamID,\n filterAllowReference,\n ],\n });\n}\n\nexport function getAllGroupsAssociatedToChannel(channelID: string, filterAllowReference = false, includeMemberCount = false): NewActionFuncAsync {\n return bindClientFunc({\n clientFunc: async (param1, param2, param3) => {\n const result = await Client4.getAllGroupsAssociatedToChannel(param1, param2, param3);\n result.channelID = param1;\n return result;\n },\n onSuccess: [GroupTypes.RECEIVED_ALL_GROUPS_ASSOCIATED_TO_CHANNEL],\n params: [\n channelID,\n filterAllowReference,\n includeMemberCount,\n ],\n }) as any; // HARRISONTODO Type bindClientFunc\n}\n\nexport function getGroupsAssociatedToTeam(teamID: string, q = '', page = 0, perPage: number = General.PAGE_SIZE_DEFAULT, filterAllowReference = false): NewActionFuncAsync<{groups: Group[]; totalGroupCount: number}> {\n return bindClientFunc({\n clientFunc: async (param1, param2, param3, param4, param5) => {\n const result = await Client4.getGroupsAssociatedToTeam(param1, param2, param3, param4, param5);\n return {groups: result.groups, totalGroupCount: result.total_group_count, teamID: param1};\n },\n onSuccess: [GroupTypes.RECEIVED_GROUPS_ASSOCIATED_TO_TEAM],\n params: [\n teamID,\n q,\n page,\n perPage,\n filterAllowReference,\n ],\n }) as any; // HARRISONTODO Type bindClientFunc\n}\n\nexport function getGroupsAssociatedToChannel(channelID: string, q = '', page = 0, perPage: number = General.PAGE_SIZE_DEFAULT, filterAllowReference = false): NewActionFuncAsync<{groups: Group[]; totalGroupCount: number}> {\n return bindClientFunc({\n clientFunc: async (param1, param2, param3, param4, param5) => {\n const result = await Client4.getGroupsAssociatedToChannel(param1, param2, param3, param4, param5);\n return {groups: result.groups, totalGroupCount: result.total_group_count, channelID: param1};\n },\n onSuccess: [GroupTypes.RECEIVED_GROUPS_ASSOCIATED_TO_CHANNEL],\n params: [\n channelID,\n q,\n page,\n perPage,\n filterAllowReference,\n ],\n }) as any; // HARRISONTODO Type bindClientFunc\n}\n\nexport function patchGroup(groupID: string, patch: GroupPatch | CustomGroupPatch): NewActionFuncAsync {\n return bindClientFunc({\n clientFunc: Client4.patchGroup,\n onSuccess: [GroupTypes.PATCHED_GROUP],\n params: [\n groupID,\n patch,\n ],\n }) as any; // HARRISONTODO Type bindClientFunc\n}\n\nexport function getGroupsByUserId(userID: string): ActionFunc {\n return bindClientFunc({\n clientFunc: Client4.getGroupsByUserId,\n onSuccess: [GroupTypes.RECEIVED_MY_GROUPS],\n params: [\n userID,\n ],\n });\n}\n\nexport function getGroupsByUserIdPaginated(opts: GetGroupsForUserParams): NewActionFuncAsync {\n return bindClientFunc({\n clientFunc: async (opts) => {\n const result = await Client4.getGroups(opts);\n return result;\n },\n onSuccess: [GroupTypes.RECEIVED_MY_GROUPS, GroupTypes.RECEIVED_GROUPS],\n params: [\n opts,\n ],\n }) as any; // HARRISONTODO Type bindClientFunc\n}\n\nexport function getGroupStats(groupID: string): NewActionFuncAsync {\n return bindClientFunc({\n clientFunc: Client4.getGroupStats,\n onSuccess: [GroupTypes.RECEIVED_GROUP_STATS],\n params: [\n groupID,\n ],\n }) as any; // HARRISONTODO Type bindClientFunc\n}\n\nexport function createGroupWithUserIds(group: GroupCreateWithUserIds): NewActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.createGroupWithUserIds(group);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n return {error};\n }\n\n dispatch(\n {type: GroupTypes.CREATE_GROUP_SUCCESS, data},\n );\n\n return {data};\n };\n}\n\nexport function addUsersToGroup(groupId: string, userIds: string[]): NewActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.addUsersToGroup(groupId, userIds);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n return {error};\n }\n\n dispatch(\n {\n type: UserTypes.RECEIVED_PROFILES_FOR_GROUP,\n data,\n id: groupId,\n },\n );\n\n return {data};\n };\n}\n\nexport function removeUsersFromGroup(groupId: string, userIds: string[]): NewActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.removeUsersFromGroup(groupId, userIds);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n return {error};\n }\n\n dispatch(\n {\n type: UserTypes.RECEIVED_PROFILES_LIST_TO_REMOVE_FROM_GROUP,\n data,\n id: groupId,\n },\n );\n\n return {data};\n };\n}\n\nexport function searchGroups(params: GroupSearchParams): NewActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.searchGroups(params);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const dispatches: AnyAction[] = [{type: GroupTypes.RECEIVED_GROUPS, data}];\n\n if (params.filter_has_member) {\n dispatches.push({type: GroupTypes.RECEIVED_MY_GROUPS, data});\n }\n if (params.include_channel_member_count) {\n dispatches.push({type: ChannelTypes.RECEIVED_CHANNEL_MEMBER_COUNTS_FROM_GROUPS_LIST, data, channelId: params.include_channel_member_count});\n }\n dispatch(batchActions(dispatches));\n\n return {data: true};\n };\n}\n\nexport function archiveGroup(groupId: string): NewActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.archiveGroup(groupId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n return {error};\n }\n\n dispatch(\n {\n type: GroupTypes.ARCHIVED_GROUP,\n id: groupId,\n data,\n },\n );\n\n return {data};\n };\n}\n\nexport function restoreGroup(groupId: string): NewActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.restoreGroup(groupId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n return {error};\n }\n\n dispatch(\n {\n type: GroupTypes.RESTORED_GROUP,\n id: groupId,\n data,\n },\n );\n\n return {data};\n };\n}\n\nexport function createGroupTeamsAndChannels(userID: string): NewActionFuncAsync<{user_id: string}> {\n return async (dispatch, getState) => {\n try {\n await Client4.createGroupTeamsAndChannels(userID);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n return {error};\n }\n return {user_id: userID};\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 {batchActions} from 'redux-batched-actions';\n\nimport type {Channel, ChannelUnread} from '@mattermost/types/channels';\nimport type {FetchPaginatedThreadOptions} from '@mattermost/types/client4';\nimport type {Group} from '@mattermost/types/groups';\nimport type {Post, PostList, PostAcknowledgement} from '@mattermost/types/posts';\nimport type {Reaction} from '@mattermost/types/reactions';\nimport type {GlobalState} from '@mattermost/types/store';\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport {PostTypes, ChannelTypes, FileTypes, IntegrationTypes} from 'mattermost-redux/action_types';\nimport {selectChannel} from 'mattermost-redux/actions/channels';\nimport {systemEmojis, getCustomEmojiByName, getCustomEmojisByName} from 'mattermost-redux/actions/emojis';\nimport {searchGroups} from 'mattermost-redux/actions/groups';\nimport {bindClientFunc, forceLogoutIfNecessary} from 'mattermost-redux/actions/helpers';\nimport {\n deletePreferences,\n savePreferences,\n} from 'mattermost-redux/actions/preferences';\nimport {decrementThreadCounts} from 'mattermost-redux/actions/threads';\nimport {getProfilesByIds, getProfilesByUsernames, getStatusesByIds} from 'mattermost-redux/actions/users';\nimport {Client4, DEFAULT_LIMIT_AFTER, DEFAULT_LIMIT_BEFORE} from 'mattermost-redux/client';\nimport {General, Preferences, Posts} from 'mattermost-redux/constants';\nimport {getCurrentChannelId, getMyChannelMember as getMyChannelMemberSelector} from 'mattermost-redux/selectors/entities/channels';\nimport {getCustomEmojisByName as selectCustomEmojisByName} from 'mattermost-redux/selectors/entities/emojis';\nimport {getAllGroupsByName} from 'mattermost-redux/selectors/entities/groups';\nimport * as PostSelectors from 'mattermost-redux/selectors/entities/posts';\nimport {getUnreadScrollPositionPreference, isCollapsedThreadsEnabled} from 'mattermost-redux/selectors/entities/preferences';\nimport {getCurrentUserId, getUsersByUsername} from 'mattermost-redux/selectors/entities/users';\nimport type {ActionResult, DispatchFunc, GetStateFunc, NewActionFuncAsync} from 'mattermost-redux/types/actions';\nimport {isCombinedUserActivityPost} from 'mattermost-redux/utils/post_list';\n\nimport {logError} from './errors';\n\n// receivedPost should be dispatched after a single post from the server. This typically happens when an existing post\n// is updated.\nexport function receivedPost(post: Post, crtEnabled?: boolean) {\n return {\n type: PostTypes.RECEIVED_POST,\n data: post,\n features: {crtEnabled},\n };\n}\n\n// receivedNewPost should be dispatched when receiving a newly created post or when sending a request to the server\n// to make a new post.\nexport function receivedNewPost(post: Post, crtEnabled: boolean) {\n return {\n type: PostTypes.RECEIVED_NEW_POST,\n data: post,\n features: {crtEnabled},\n };\n}\n\n// receivedPosts should be dispatched when receiving multiple posts from the server that may or may not be ordered.\n// This will typically be used alongside other actions like receivedPostsAfter which require the posts to be ordered.\nexport function receivedPosts(posts: PostList) {\n return {\n type: PostTypes.RECEIVED_POSTS,\n data: posts,\n };\n}\n\n// receivedPostsAfter should be dispatched when receiving an ordered list of posts that come before a given post.\nexport function receivedPostsAfter(posts: PostList, channelId: string, afterPostId: string, recent = false) {\n return {\n type: PostTypes.RECEIVED_POSTS_AFTER,\n channelId,\n data: posts,\n afterPostId,\n recent,\n };\n}\n\n// receivedPostsBefore should be dispatched when receiving an ordered list of posts that come after a given post.\nexport function receivedPostsBefore(posts: PostList, channelId: string, beforePostId: string, oldest = false) {\n return {\n type: PostTypes.RECEIVED_POSTS_BEFORE,\n channelId,\n data: posts,\n beforePostId,\n oldest,\n };\n}\n\n// receivedPostsSince should be dispatched when receiving a list of posts that have been updated since a certain time.\n// Due to how the API endpoint works, some of these posts will be ordered, but others will not, so this needs special\n// handling from the reducers.\nexport function receivedPostsSince(posts: PostList, channelId: string) {\n return {\n type: PostTypes.RECEIVED_POSTS_SINCE,\n channelId,\n data: posts,\n };\n}\n\n// receivedPostsInChannel should be dispatched when receiving a list of ordered posts within a channel when the\n// the adjacent posts are not known.\nexport function receivedPostsInChannel(posts: PostList, channelId: string, recent = false, oldest = false) {\n return {\n type: PostTypes.RECEIVED_POSTS_IN_CHANNEL,\n channelId,\n data: posts,\n recent,\n oldest,\n };\n}\n\n// receivedPostsInThread should be dispatched when receiving a list of unordered posts in a thread.\nexport function receivedPostsInThread(posts: PostList, rootId: string) {\n return {\n type: PostTypes.RECEIVED_POSTS_IN_THREAD,\n data: posts,\n rootId,\n };\n}\n\n// postDeleted should be dispatched when a post has been deleted and should be replaced with a \"message deleted\"\n// placeholder. This typically happens when a post is deleted by another user.\nexport function postDeleted(post: Post) {\n return {\n type: PostTypes.POST_DELETED,\n data: post,\n };\n}\n\n// postRemoved should be dispatched when a post should be immediately removed. This typically happens when a post is\n// deleted by the current user.\nexport function postRemoved(post: Post) {\n return {\n type: PostTypes.POST_REMOVED,\n data: post,\n };\n}\n\nexport function getPost(postId: string) {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n let post;\n const crtEnabled = isCollapsedThreadsEnabled(getState());\n\n try {\n post = await Client4.getPost(postId);\n getMentionsAndStatusesForPosts([post], dispatch, getState);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: PostTypes.GET_POSTS_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n receivedPost(post, crtEnabled),\n {\n type: PostTypes.GET_POSTS_SUCCESS,\n },\n ]));\n\n return {data: post};\n };\n}\n\nexport function createPost(post: Post, files: any[] = []) {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n const state = getState();\n const currentUserId = state.entities.users.currentUserId;\n\n const timestamp = Date.now();\n const pendingPostId = post.pending_post_id || `${currentUserId}:${timestamp}`;\n let actions: AnyAction[] = [];\n\n if (PostSelectors.isPostIdSending(state, pendingPostId)) {\n return {data: true};\n }\n\n let newPost = {\n ...post,\n pending_post_id: pendingPostId,\n create_at: timestamp,\n update_at: timestamp,\n reply_count: 0,\n };\n\n if (post.root_id) {\n newPost.reply_count = PostSelectors.getPostRepliesCount(state, post.root_id) + 1;\n }\n\n // We are retrying a pending post that had files\n if (newPost.file_ids && !files.length) {\n // eslint-disable-next-line no-param-reassign\n files = newPost.file_ids.map((id) => state.entities.files.files[id]);\n }\n\n if (files.length) {\n const fileIds = files.map((file) => file.id);\n\n newPost = {\n ...newPost,\n file_ids: fileIds,\n };\n\n actions.push({\n type: FileTypes.RECEIVED_FILES_FOR_POST,\n postId: pendingPostId,\n data: files,\n }, {\n type: ChannelTypes.INCREMENT_FILE_COUNT,\n amount: files.length,\n id: newPost.channel_id,\n });\n }\n\n const crtEnabled = isCollapsedThreadsEnabled(getState());\n actions.push({\n type: PostTypes.RECEIVED_NEW_POST,\n data: {\n ...newPost,\n id: pendingPostId,\n },\n features: {crtEnabled},\n });\n\n dispatch(batchActions(actions, 'BATCH_CREATE_POST_INIT'));\n\n (async function createPostWrapper() {\n try {\n const created = await Client4.createPost({...newPost, create_at: 0});\n\n actions = [\n receivedPost(created, crtEnabled),\n {\n type: PostTypes.CREATE_POST_SUCCESS,\n },\n {\n type: ChannelTypes.INCREMENT_TOTAL_MSG_COUNT,\n data: {\n channelId: newPost.channel_id,\n amount: 1,\n amountRoot: created.root_id === '' ? 1 : 0,\n },\n },\n {\n type: ChannelTypes.DECREMENT_UNREAD_MSG_COUNT,\n data: {\n channelId: newPost.channel_id,\n amount: 1,\n amountRoot: created.root_id === '' ? 1 : 0,\n },\n },\n ];\n\n if (files) {\n actions.push({\n type: FileTypes.RECEIVED_FILES_FOR_POST,\n postId: created.id,\n data: files,\n });\n }\n\n dispatch(batchActions(actions, 'BATCH_CREATE_POST'));\n } catch (error) {\n const data = {\n ...newPost,\n id: pendingPostId,\n failed: true,\n update_at: Date.now(),\n };\n actions = [{type: PostTypes.CREATE_POST_FAILURE, error}];\n\n // If the failure was because: the root post was deleted or\n // TownSquareIsReadOnly=true then remove the post\n if (error.server_error_id === 'api.post.create_post.root_id.app_error' ||\n error.server_error_id === 'api.post.create_post.town_square_read_only' ||\n error.server_error_id === 'plugin.message_will_be_posted.dismiss_post'\n ) {\n // RemovePost is a Thunk, and not handled by batchActions\n dispatch(removePost(data));\n } else {\n actions.push(receivedPost(data, crtEnabled));\n }\n\n dispatch(batchActions(actions, 'BATCH_CREATE_POST_FAILED'));\n }\n }());\n\n return {data: true};\n };\n}\n\nexport function createPostImmediately(post: Post, files: any[] = []) {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n const state = getState();\n const currentUserId = state.entities.users.currentUserId;\n const timestamp = Date.now();\n const pendingPostId = `${currentUserId}:${timestamp}`;\n\n let newPost: Post = {\n ...post,\n pending_post_id: pendingPostId,\n create_at: timestamp,\n update_at: timestamp,\n reply_count: 0,\n };\n\n if (post.root_id) {\n newPost.reply_count = PostSelectors.getPostRepliesCount(state, post.root_id) + 1;\n }\n\n if (files.length) {\n const fileIds = files.map((file) => file.id);\n\n newPost = {\n ...newPost,\n file_ids: fileIds,\n };\n\n dispatch({\n type: FileTypes.RECEIVED_FILES_FOR_POST,\n postId: pendingPostId,\n data: files,\n });\n dispatch({\n type: ChannelTypes.INCREMENT_FILE_COUNT,\n amount: files.length,\n id: newPost.channel_id,\n });\n }\n\n const crtEnabled = isCollapsedThreadsEnabled(state);\n dispatch(receivedNewPost({\n ...newPost,\n id: pendingPostId,\n }, crtEnabled));\n\n try {\n const created = await Client4.createPost({...newPost, create_at: 0});\n newPost.id = created.id;\n newPost.reply_count = created.reply_count;\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: PostTypes.CREATE_POST_FAILURE, data: newPost, error});\n dispatch(removePost({\n ...newPost,\n id: pendingPostId,\n }));\n dispatch(logError(error));\n return {error};\n }\n\n const actions: AnyAction[] = [\n receivedPost(newPost, crtEnabled),\n {\n type: PostTypes.CREATE_POST_SUCCESS,\n },\n {\n type: ChannelTypes.INCREMENT_TOTAL_MSG_COUNT,\n data: {\n channelId: newPost.channel_id,\n amount: 1,\n amountRoot: newPost.root_id === '' ? 1 : 0,\n },\n },\n {\n type: ChannelTypes.DECREMENT_UNREAD_MSG_COUNT,\n data: {\n channelId: newPost.channel_id,\n amount: 1,\n amountRoot: newPost.root_id === '' ? 1 : 0,\n },\n },\n ];\n\n if (files) {\n actions.push({\n type: FileTypes.RECEIVED_FILES_FOR_POST,\n postId: newPost.id,\n data: files,\n });\n }\n\n dispatch(batchActions(actions));\n\n return {data: newPost};\n };\n}\n\nexport function resetCreatePostRequest() {\n return {type: PostTypes.CREATE_POST_RESET_REQUEST};\n}\n\nexport function deletePost(post: ExtendedPost): NewActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const delPost = {...post};\n if (!post.root_id && isCollapsedThreadsEnabled(state)) {\n dispatch(decrementThreadCounts(post));\n }\n if (delPost.type === Posts.POST_TYPES.COMBINED_USER_ACTIVITY && delPost.system_post_ids) {\n delPost.system_post_ids.forEach((systemPostId) => {\n const systemPost = PostSelectors.getPost(state, systemPostId);\n if (systemPost) {\n dispatch(deletePost(systemPost));\n }\n });\n } else {\n (async function deletePostWrapper() {\n try {\n dispatch({\n type: PostTypes.POST_DELETED,\n data: delPost,\n });\n\n await Client4.deletePost(post.id);\n } catch (e) {\n // Recovering from this state doesn't actually work. The deleteAndRemovePost action\n // in the webapp needs to get an error in order to not call removePost, but then\n // the delete modal needs to handle this to show something to the user. Since none\n // of that ever worked (even with redux-offline in play), leave the behaviour here\n // unresolved.\n console.error('failed to delete post', e); // eslint-disable-line no-console\n }\n }());\n }\n\n return {data: true};\n };\n}\n\nexport function editPost(post: Post) {\n return bindClientFunc({\n clientFunc: Client4.patchPost,\n onRequest: PostTypes.EDIT_POST_REQUEST,\n onSuccess: [PostTypes.RECEIVED_POST, PostTypes.EDIT_POST_SUCCESS],\n onFailure: PostTypes.EDIT_POST_FAILURE,\n params: [\n post,\n ],\n });\n}\n\nfunction getUnreadPostData(unreadChan: ChannelUnread, state: GlobalState) {\n const member = getMyChannelMemberSelector(state, unreadChan.channel_id);\n const delta = member ? member.msg_count - unreadChan.msg_count : unreadChan.msg_count;\n const deltaRoot = member ? member.msg_count_root - unreadChan.msg_count_root : unreadChan.msg_count_root;\n\n const data = {\n teamId: unreadChan.team_id,\n channelId: unreadChan.channel_id,\n msgCount: unreadChan.msg_count,\n mentionCount: unreadChan.mention_count,\n msgCountRoot: unreadChan.msg_count_root,\n mentionCountRoot: unreadChan.mention_count_root,\n urgentMentionCount: unreadChan.urgent_mention_count,\n lastViewedAt: unreadChan.last_viewed_at,\n deltaMsgs: delta,\n deltaMsgsRoot: deltaRoot,\n };\n\n return data;\n}\n\nexport function setUnreadPost(userId: string, postId: string) {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n let state = getState();\n const post = PostSelectors.getPost(state, postId);\n let unreadChan;\n\n try {\n if (isCombinedUserActivityPost(postId)) {\n return {};\n }\n dispatch({\n type: ChannelTypes.ADD_MANUALLY_UNREAD,\n data: {\n channelId: post.channel_id,\n },\n });\n unreadChan = await Client4.markPostAsUnread(userId, postId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n dispatch({\n type: ChannelTypes.REMOVE_MANUALLY_UNREAD,\n data: {\n channelId: post.channel_id,\n },\n });\n return {error};\n }\n\n state = getState();\n const data = getUnreadPostData(unreadChan, state);\n dispatch({\n type: ChannelTypes.POST_UNREAD_SUCCESS,\n data,\n });\n return {data};\n };\n}\n\nexport function pinPost(postId: string) {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n dispatch({type: PostTypes.EDIT_POST_REQUEST});\n let posts;\n\n try {\n posts = await Client4.pinPost(postId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: PostTypes.EDIT_POST_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n const actions: AnyAction[] = [\n {\n type: PostTypes.EDIT_POST_SUCCESS,\n },\n ];\n\n const state = getState();\n const post = PostSelectors.getPost(state, postId);\n if (post) {\n actions.push(\n receivedPost({\n ...post,\n is_pinned: true,\n update_at: Date.now(),\n }, isCollapsedThreadsEnabled(state)),\n {\n type: ChannelTypes.INCREMENT_PINNED_POST_COUNT,\n id: post.channel_id,\n },\n );\n }\n\n dispatch(batchActions(actions));\n\n return {data: posts};\n };\n}\n\n/**\n * Decrements the pinned post count for a channel by 1\n */\nexport function decrementPinnedPostCount(channelId: Channel['id']) {\n return {\n type: ChannelTypes.DECREMENT_PINNED_POST_COUNT,\n id: channelId,\n };\n}\n\nexport function unpinPost(postId: string) {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n dispatch({type: PostTypes.EDIT_POST_REQUEST});\n let posts;\n\n try {\n posts = await Client4.unpinPost(postId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: PostTypes.EDIT_POST_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n const actions: AnyAction[] = [\n {\n type: PostTypes.EDIT_POST_SUCCESS,\n },\n ];\n\n const state = getState();\n const post = PostSelectors.getPost(state, postId);\n if (post) {\n actions.push(\n receivedPost({\n ...post,\n is_pinned: false,\n update_at: Date.now(),\n }, isCollapsedThreadsEnabled(state)),\n decrementPinnedPostCount(post.channel_id),\n );\n }\n\n dispatch(batchActions(actions));\n\n return {data: posts};\n };\n}\n\nexport function addReaction(postId: string, emojiName: string) {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n const currentUserId = getState().entities.users.currentUserId;\n\n let reaction;\n try {\n reaction = await Client4.addReaction(currentUserId, postId, emojiName);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: PostTypes.RECEIVED_REACTION,\n data: reaction,\n });\n\n return {data: true};\n };\n}\n\nexport function removeReaction(postId: string, emojiName: string): NewActionFuncAsync {\n return async (dispatch, getState) => {\n const currentUserId = getState().entities.users.currentUserId;\n\n try {\n await Client4.removeReaction(currentUserId, postId, emojiName);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: PostTypes.REACTION_DELETED,\n data: {user_id: currentUserId, post_id: postId, emoji_name: emojiName},\n });\n\n return {data: true};\n };\n}\n\nexport function getCustomEmojiForReaction(name: string) {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n const nonExistentEmoji = getState().entities.emojis.nonExistentEmoji;\n const customEmojisByName = selectCustomEmojisByName(getState());\n\n if (systemEmojis.has(name)) {\n return {data: true};\n }\n\n if (nonExistentEmoji.has(name)) {\n return {data: true};\n }\n\n if (customEmojisByName.has(name)) {\n return {data: true};\n }\n\n return dispatch(getCustomEmojiByName(name));\n };\n}\n\nexport function getReactionsForPost(postId: string) {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n let reactions;\n try {\n reactions = await Client4.getReactionsForPost(postId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n if (reactions && reactions.length > 0) {\n const nonExistentEmoji = getState().entities.emojis.nonExistentEmoji;\n const customEmojisByName = selectCustomEmojisByName(getState());\n const emojisToLoad = new Set();\n\n reactions.forEach((r: Reaction) => {\n const name = r.emoji_name;\n\n if (systemEmojis.has(name)) {\n // It's a system emoji, go the next match\n return;\n }\n\n if (nonExistentEmoji.has(name)) {\n // We've previously confirmed this is not a custom emoji\n return;\n }\n\n if (customEmojisByName.has(name)) {\n // We have the emoji, go to the next match\n return;\n }\n\n emojisToLoad.add(name);\n });\n\n dispatch(getCustomEmojisByName(Array.from(emojisToLoad)));\n }\n\n dispatch(batchActions([\n {\n type: PostTypes.RECEIVED_REACTIONS,\n data: reactions,\n postId,\n },\n ]));\n\n return reactions;\n };\n}\n\nexport function flagPost(postId: string) {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n const {currentUserId} = getState().entities.users;\n const preference = {\n user_id: currentUserId,\n category: Preferences.CATEGORY_FLAGGED_POST,\n name: postId,\n value: 'true',\n };\n\n Client4.trackEvent('action', 'action_posts_flag');\n\n return dispatch(savePreferences(currentUserId, [preference]));\n };\n}\n\nasync function getPaginatedPostThread(rootId: string, options: FetchPaginatedThreadOptions, prevList?: PostList): Promise {\n // since there are no complicated things inside (functions, Maps, Sets, etc.) we\n // can use the JSON approach to deep-copy the object\n const list: PostList = prevList ? JSON.parse(JSON.stringify(prevList)) : {\n order: [rootId],\n posts: {},\n prev_post_id: '',\n next_post_id: '',\n first_inaccessible_post_time: 0,\n };\n\n const result = await Client4.getPaginatedPostThread(rootId, options);\n\n if (result.first_inaccessible_post_time) {\n list.first_inaccessible_post_time = list.first_inaccessible_post_time ? Math.min(result.first_inaccessible_post_time, list.first_inaccessible_post_time) : result.first_inaccessible_post_time;\n }\n list.order.push(...result.order.slice(1));\n list.posts = Object.assign(list.posts, result.posts);\n\n if (result.has_next) {\n const [nextPostId] = list.order!.slice(-1);\n const nextPostPointer = list.posts[nextPostId];\n const newOptions = {\n ...options,\n fromCreateAt: nextPostPointer.create_at,\n fromPost: nextPostId,\n };\n\n return getPaginatedPostThread(rootId, newOptions, list);\n }\n\n return list;\n}\n\nexport function getPostThread(rootId: string, fetchThreads = true) {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n dispatch({type: PostTypes.GET_POST_THREAD_REQUEST});\n const collapsedThreadsEnabled = isCollapsedThreadsEnabled(getState());\n\n let posts;\n try {\n posts = await getPaginatedPostThread(rootId, {fetchThreads, collapsedThreads: collapsedThreadsEnabled});\n getMentionsAndStatusesForPosts(posts.posts, dispatch, getState);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: PostTypes.GET_POST_THREAD_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n receivedPosts(posts),\n receivedPostsInThread(posts, rootId),\n {\n type: PostTypes.GET_POST_THREAD_SUCCESS,\n },\n ]));\n\n return {data: posts};\n };\n}\n\nexport function getNewestPostThread(rootId: string) {\n const getPostsForThread = PostSelectors.makeGetPostsForThread();\n\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n dispatch({type: PostTypes.GET_POST_THREAD_REQUEST});\n const collapsedThreadsEnabled = isCollapsedThreadsEnabled(getState());\n const savedPosts = getPostsForThread(getState(), rootId);\n\n const latestReply = savedPosts?.[0];\n\n const options: FetchPaginatedThreadOptions = {\n fetchThreads: true,\n collapsedThreads: collapsedThreadsEnabled,\n direction: 'down',\n fromCreateAt: latestReply?.create_at,\n fromPost: latestReply?.id,\n };\n\n let posts;\n try {\n posts = await getPaginatedPostThread(rootId, options);\n getMentionsAndStatusesForPosts(posts.posts, dispatch, getState);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: PostTypes.GET_POST_THREAD_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n receivedPosts(posts),\n receivedPostsInThread(posts, rootId),\n {\n type: PostTypes.GET_POST_THREAD_SUCCESS,\n },\n ]));\n\n return {data: posts};\n };\n}\n\nexport function getPosts(channelId: string, page = 0, perPage = Posts.POST_CHUNK_SIZE, fetchThreads = true, collapsedThreadsExtended = false) {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n let posts;\n const collapsedThreadsEnabled = isCollapsedThreadsEnabled(getState());\n try {\n posts = await Client4.getPosts(channelId, page, perPage, fetchThreads, collapsedThreadsEnabled, collapsedThreadsExtended);\n getMentionsAndStatusesForPosts(posts.posts, dispatch, getState);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n receivedPosts(posts),\n receivedPostsInChannel(posts, channelId, page === 0, posts.prev_post_id === ''),\n ]));\n\n return {data: posts};\n };\n}\n\nexport function getPostsUnread(channelId: string, fetchThreads = true, collapsedThreadsExtended = false) {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n const shouldLoadRecent = getUnreadScrollPositionPreference(getState()) === Preferences.UNREAD_SCROLL_POSITION_START_FROM_NEWEST;\n const collapsedThreadsEnabled = isCollapsedThreadsEnabled(getState());\n const userId = getCurrentUserId(getState());\n let posts;\n let recentPosts;\n try {\n posts = await Client4.getPostsUnread(channelId, userId, DEFAULT_LIMIT_BEFORE, DEFAULT_LIMIT_AFTER, fetchThreads, collapsedThreadsEnabled, collapsedThreadsExtended);\n\n if (posts.next_post_id && shouldLoadRecent) {\n recentPosts = await Client4.getPosts(channelId, 0, Posts.POST_CHUNK_SIZE / 2, fetchThreads, collapsedThreadsEnabled, collapsedThreadsExtended);\n }\n\n getMentionsAndStatusesForPosts(posts.posts, dispatch, getState);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const recentPostsActions = recentPosts ? [\n receivedPosts(recentPosts),\n receivedPostsInChannel(recentPosts, channelId, recentPosts.next_post_id === '', recentPosts.prev_post_id === ''),\n ] : [];\n\n dispatch(batchActions([\n receivedPosts(posts),\n receivedPostsInChannel(posts, channelId, posts.next_post_id === '', posts.prev_post_id === ''),\n ...recentPostsActions,\n ]));\n dispatch({\n type: PostTypes.RECEIVED_POSTS,\n data: posts,\n channelId,\n });\n\n return {data: posts};\n };\n}\n\nexport function getPostsSince(channelId: string, since: number, fetchThreads = true, collapsedThreadsExtended = false) {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n let posts;\n try {\n const collapsedThreadsEnabled = isCollapsedThreadsEnabled(getState());\n posts = await Client4.getPostsSince(channelId, since, fetchThreads, collapsedThreadsEnabled, collapsedThreadsExtended);\n getMentionsAndStatusesForPosts(posts.posts, dispatch, getState);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n receivedPosts(posts),\n receivedPostsSince(posts, channelId),\n {\n type: PostTypes.GET_POSTS_SINCE_SUCCESS,\n },\n ]));\n\n return {data: posts};\n };\n}\n\nexport function getPostsBefore(channelId: string, postId: string, page = 0, perPage = Posts.POST_CHUNK_SIZE, fetchThreads = true, collapsedThreadsExtended = false) {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n let posts;\n try {\n const collapsedThreadsEnabled = isCollapsedThreadsEnabled(getState());\n posts = await Client4.getPostsBefore(channelId, postId, page, perPage, fetchThreads, collapsedThreadsEnabled, collapsedThreadsExtended);\n getMentionsAndStatusesForPosts(posts.posts, dispatch, getState);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n receivedPosts(posts),\n receivedPostsBefore(posts, channelId, postId, posts.prev_post_id === ''),\n ]));\n\n return {data: posts};\n };\n}\n\nexport function getPostsAfter(channelId: string, postId: string, page = 0, perPage = Posts.POST_CHUNK_SIZE, fetchThreads = true, collapsedThreadsExtended = false) {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n let posts;\n try {\n const collapsedThreadsEnabled = isCollapsedThreadsEnabled(getState());\n posts = await Client4.getPostsAfter(channelId, postId, page, perPage, fetchThreads, collapsedThreadsEnabled, collapsedThreadsExtended);\n getMentionsAndStatusesForPosts(posts.posts, dispatch, getState);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n receivedPosts(posts),\n receivedPostsAfter(posts, channelId, postId, posts.next_post_id === ''),\n ]));\n\n return {data: posts};\n };\n}\n\nexport function getPostsAround(channelId: string, postId: string, perPage = Posts.POST_CHUNK_SIZE / 2, fetchThreads = true, collapsedThreadsExtended = false) {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n let after;\n let thread;\n let before;\n\n try {\n const collapsedThreadsEnabled = isCollapsedThreadsEnabled(getState());\n [after, thread, before] = await Promise.all([\n Client4.getPostsAfter(channelId, postId, 0, perPage, fetchThreads, collapsedThreadsEnabled, collapsedThreadsExtended),\n Client4.getPostThread(postId, fetchThreads, collapsedThreadsEnabled, collapsedThreadsExtended),\n Client4.getPostsBefore(channelId, postId, 0, perPage, fetchThreads, collapsedThreadsEnabled, collapsedThreadsExtended),\n ]);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n // Dispatch a combined post list so that the order is correct for postsInChannel\n const posts: PostList = {\n posts: {\n ...after.posts,\n ...thread.posts,\n ...before.posts,\n },\n order: [ // Remember that the order is newest posts first\n ...after.order,\n postId,\n ...before.order,\n ],\n next_post_id: after.next_post_id,\n prev_post_id: before.prev_post_id,\n first_inaccessible_post_time: Math.max(before.first_inaccessible_post_time, after.first_inaccessible_post_time, thread.first_inaccessible_post_time) || 0,\n };\n\n getMentionsAndStatusesForPosts(posts.posts, dispatch, getState);\n\n dispatch(batchActions([\n receivedPosts(posts),\n receivedPostsInChannel(posts, channelId, after.next_post_id === '', before.prev_post_id === ''),\n ]));\n\n return {data: posts};\n };\n}\n\n// getThreadsForPosts is intended for an array of posts that have been batched\n// (see the actions/websocket_actions/handleNewPostEvents function in the webapp)\nexport function getThreadsForPosts(posts: Post[], fetchThreads = true) {\n const rootsSet = new Set();\n return (dispatch: DispatchFunc, getState: GetStateFunc) => {\n if (!Array.isArray(posts) || !posts.length) {\n return {data: true};\n }\n\n const state = getState();\n const promises: Array> = [];\n\n posts.forEach((post) => {\n if (!post.root_id) {\n return;\n }\n const rootPost = PostSelectors.getPost(state, post.root_id);\n\n if (!rootPost) {\n rootsSet.add(post.root_id);\n }\n });\n\n rootsSet.forEach((rootId) => {\n promises.push(dispatch(getPostThread(rootId, fetchThreads)));\n });\n\n return Promise.all(promises);\n };\n}\n\n// Note that getMentionsAndStatusesForPosts can take either an array of posts or a map of ids to posts\nexport async function getMentionsAndStatusesForPosts(postsArrayOrMap: Post[]|PostList['posts'], dispatch: DispatchFunc, getState: GetStateFunc) {\n if (!postsArrayOrMap) {\n // Some API methods return {error} for no results\n return Promise.resolve();\n }\n\n const postsArray: Post[] = Array.isArray(postsArrayOrMap) ? postsArrayOrMap : Object.values(postsArrayOrMap);\n\n if (postsArray.length === 0) {\n return Promise.resolve();\n }\n\n const postsDictionary: Record = {};\n for (let i = 0; i < postsArray.length; i++) {\n postsDictionary[postsArray[i].id] = postsArray[i];\n }\n\n const state = getState();\n const {currentUserId, profiles, statuses} = state.entities.users;\n\n // Statuses and profiles of the users who made the posts\n const userIdsToLoad = new Set();\n const statusesToLoad = new Set();\n\n postsArray.forEach((post) => {\n const userId = post.user_id;\n\n if (post.metadata) {\n if (post.metadata.embeds) {\n post.metadata.embeds.forEach((embed: any) => {\n if (embed.type === 'permalink' && embed.data) {\n if (embed.data.post?.user_id && !profiles[embed.data.post.user_id] && embed.data.post.user_id !== currentUserId) {\n userIdsToLoad.add(embed.data.post.user_id);\n }\n if (embed.data.post?.user_id && !statuses[embed.data.post.user_id]) {\n statusesToLoad.add(embed.data.post.user_id);\n }\n }\n });\n }\n\n if (post.metadata.acknowledgements) {\n post.metadata.acknowledgements.forEach((ack: any) => {\n if (ack.acknowledged_at > 0) {\n userIdsToLoad.add(ack.user_id);\n }\n });\n }\n }\n\n if (!statuses[userId]) {\n statusesToLoad.add(userId);\n }\n\n if (userId === currentUserId) {\n return;\n }\n\n if (!profiles[userId]) {\n userIdsToLoad.add(userId);\n }\n });\n\n const promises: any[] = [];\n if (userIdsToLoad.size > 0) {\n promises.push(dispatch(getProfilesByIds(Array.from(userIdsToLoad))));\n }\n\n if (statusesToLoad.size > 0) {\n promises.push(dispatch(getStatusesByIds(Array.from(statusesToLoad))));\n }\n\n // Profiles of users mentioned in the posts\n const usernamesAndGroupsToLoad = getNeededAtMentionedUsernamesAndGroups(state, postsArray);\n\n if (usernamesAndGroupsToLoad.size > 0) {\n // We need to load the profiles synchronously to filter them\n // out of the groups to check\n const getProfilesPromise = dispatch(getProfilesByUsernames(Array.from(usernamesAndGroupsToLoad)));\n promises.push(getProfilesPromise);\n\n const {data} = await getProfilesPromise as ActionResult;\n const loadedProfiles = new Set((data || []).map((p) => p.username));\n const groupsToCheck = Array.from(usernamesAndGroupsToLoad).filter((name) => !loadedProfiles.has(name));\n\n groupsToCheck.forEach((name) => {\n const groupParams = {\n q: name,\n filter_allow_reference: true,\n page: 0,\n per_page: 60,\n include_member_count: true,\n };\n promises.push(dispatch(searchGroups(groupParams)));\n });\n }\n\n return Promise.all(promises);\n}\n\nexport function getPostsByIds(ids: string[]) {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n let posts;\n\n try {\n posts = await Client4.getPostsByIds(ids);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: PostTypes.RECEIVED_POSTS,\n data: {posts},\n });\n\n return {data: {posts}};\n };\n}\n\nexport function getPostEditHistory(postId: string) {\n return bindClientFunc({\n clientFunc: Client4.getPostEditHistory,\n onSuccess: PostTypes.RECEIVED_POST_HISTORY,\n params: [postId],\n });\n}\n\nexport function getNeededAtMentionedUsernamesAndGroups(state: GlobalState, posts: Post[]): Set {\n let usersByUsername: Record; // Populate this lazily since it's relatively expensive\n let groupsByName: Record;\n\n const usernamesAndGroupsToLoad = new Set();\n\n function findNeededUsernamesAndGroups(text?: string) {\n if (!text || !text.includes('@')) {\n return;\n }\n\n if (!usersByUsername) {\n usersByUsername = getUsersByUsername(state);\n }\n\n if (!groupsByName) {\n groupsByName = getAllGroupsByName(state);\n }\n\n const pattern = /\\B@(([a-z0-9_.-]*[a-z0-9_])[.-]*)/gi;\n\n let match;\n while ((match = pattern.exec(text)) !== null) {\n // match[1] is the matched mention including trailing punctuation\n // match[2] is the matched mention without trailing punctuation\n if (General.SPECIAL_MENTIONS.indexOf(match[2]) !== -1) {\n continue;\n }\n\n if (usersByUsername[match[1]] || usersByUsername[match[2]]) {\n // We have the user, go to the next match\n continue;\n }\n\n if (groupsByName[match[1]] || groupsByName[match[2]]) {\n // We have the group, go to the next match\n continue;\n }\n\n // If there's no trailing punctuation, this will only add 1 item to the set\n usernamesAndGroupsToLoad.add(match[1]);\n usernamesAndGroupsToLoad.add(match[2]);\n }\n }\n\n for (const post of posts) {\n // These correspond to the fields searched by getMentionsEnabledFields on the server\n findNeededUsernamesAndGroups(post.message);\n\n if (post.props?.attachments) {\n for (const attachment of post.props.attachments) {\n findNeededUsernamesAndGroups(attachment.pretext);\n findNeededUsernamesAndGroups(attachment.text);\n }\n }\n }\n\n return usernamesAndGroupsToLoad;\n}\n\nexport type ExtendedPost = Post & { system_post_ids?: string[] };\n\nexport function removePost(post: ExtendedPost) {\n return (dispatch: DispatchFunc, getState: GetStateFunc) => {\n if (post.type === Posts.POST_TYPES.COMBINED_USER_ACTIVITY && post.system_post_ids) {\n const state = getState();\n for (const systemPostId of post.system_post_ids) {\n const systemPost = PostSelectors.getPost(state, systemPostId);\n\n if (systemPost) {\n dispatch(removePost(systemPost as any) as any);\n }\n }\n } else {\n dispatch(postRemoved(post));\n if (post.is_pinned) {\n dispatch(decrementPinnedPostCount(post.channel_id));\n }\n }\n return {data: true};\n };\n}\n\nexport function selectPost(postId: string) {\n return async (dispatch: DispatchFunc) => {\n dispatch({\n type: PostTypes.RECEIVED_POST_SELECTED,\n data: postId,\n });\n\n return {data: true};\n };\n}\n\nexport function moveThread(postId: string, channelId: string) {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n try {\n await Client4.moveThread(postId, channelId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: PostTypes.MOVE_POST_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({type: PostTypes.MOVE_POST_SUCCESS});\n\n return {data: true};\n };\n}\n\nexport function selectFocusedPostId(postId: string) {\n return {\n type: PostTypes.RECEIVED_FOCUSED_POST,\n data: postId,\n };\n}\n\nexport function unflagPost(postId: string) {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n const {currentUserId} = getState().entities.users;\n const preference = {\n user_id: currentUserId,\n category: Preferences.CATEGORY_FLAGGED_POST,\n name: postId,\n };\n\n Client4.trackEvent('action', 'action_posts_unflag');\n\n return dispatch(deletePreferences(currentUserId, [preference]));\n };\n}\n\nexport function addPostReminder(userId: string, postId: string, timestamp: number) {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n try {\n await Client4.addPostReminder(userId, postId, timestamp);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n return {data: true};\n };\n}\n\nexport function doPostAction(postId: string, actionId: string, selectedOption = '') {\n return doPostActionWithCookie(postId, actionId, '', selectedOption);\n}\n\nexport function doPostActionWithCookie(postId: string, actionId: string, actionCookie: string, selectedOption = '') {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n let data;\n try {\n data = await Client4.doPostActionWithCookie(postId, actionId, actionCookie, selectedOption);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n if (data && data.trigger_id) {\n dispatch({\n type: IntegrationTypes.RECEIVED_DIALOG_TRIGGER_ID,\n data: data.trigger_id,\n });\n }\n\n return {data};\n };\n}\n\nexport function addMessageIntoHistory(message: string) {\n return async (dispatch: DispatchFunc) => {\n dispatch({\n type: PostTypes.ADD_MESSAGE_INTO_HISTORY,\n data: message,\n });\n\n return {data: true};\n };\n}\n\nexport function resetHistoryIndex(index: string) {\n return async (dispatch: DispatchFunc) => {\n dispatch({\n type: PostTypes.RESET_HISTORY_INDEX,\n data: index,\n });\n\n return {data: true};\n };\n}\n\nexport function moveHistoryIndexBack(index: string) {\n return async (dispatch: DispatchFunc) => {\n dispatch({\n type: PostTypes.MOVE_HISTORY_INDEX_BACK,\n data: index,\n });\n\n return {data: true};\n };\n}\n\nexport function moveHistoryIndexForward(index: string) {\n return async (dispatch: DispatchFunc) => {\n dispatch({\n type: PostTypes.MOVE_HISTORY_INDEX_FORWARD,\n data: index,\n });\n\n return {data: true};\n };\n}\n\n/**\n * Ensures thread-replies in channels correctly follow CRT:ON/OFF\n */\nexport function resetReloadPostsInChannel() {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n dispatch({\n type: PostTypes.RESET_POSTS_IN_CHANNEL,\n });\n\n const currentChannelId = getCurrentChannelId(getState());\n if (currentChannelId) {\n // wait for channel to be fully deselected; prevent stuck loading screen\n // full state-change/reconciliation will cause prefetchChannelPosts to reload posts\n await dispatch(selectChannel('')); // do not remove await\n dispatch(selectChannel(currentChannelId));\n }\n return {data: true};\n };\n}\n\nexport function acknowledgePost(postId: string) {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n const userId = getCurrentUserId(getState());\n\n let data;\n try {\n data = await Client4.acknowledgePost(postId, userId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: PostTypes.CREATE_ACK_POST_SUCCESS,\n data,\n });\n\n return {data};\n };\n}\n\nexport function unacknowledgePost(postId: string) {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n const userId = getCurrentUserId(getState());\n\n try {\n await Client4.unacknowledgePost(postId, userId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const data = {\n post_id: postId,\n user_id: userId,\n acknowledged_at: 0,\n } as PostAcknowledgement;\n\n dispatch({\n type: PostTypes.DELETE_ACK_POST_SUCCESS,\n data,\n });\n\n return {data};\n };\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';\n\nimport {RoleTypes} from 'mattermost-redux/action_types';\nimport {Client4} from 'mattermost-redux/client';\nimport {getRoles} from 'mattermost-redux/selectors/entities/roles_helpers';\nimport type {DispatchFunc, NewActionFuncAsync} from 'mattermost-redux/types/actions';\n\nimport {bindClientFunc} from './helpers';\n\nimport {General} from '../constants';\n\nexport function getRolesByNames(rolesNames: string[]) {\n return bindClientFunc({\n clientFunc: Client4.getRolesByNames,\n onRequest: RoleTypes.ROLES_BY_NAMES_REQUEST,\n onSuccess: [RoleTypes.RECEIVED_ROLES, RoleTypes.ROLES_BY_NAMES_SUCCESS],\n onFailure: RoleTypes.ROLES_BY_NAMES_FAILURE,\n params: [\n rolesNames,\n ],\n });\n}\n\nexport function getRoleByName(roleName: string) {\n return bindClientFunc({\n clientFunc: Client4.getRoleByName,\n onRequest: RoleTypes.ROLE_BY_NAME_REQUEST,\n onSuccess: [RoleTypes.RECEIVED_ROLE, RoleTypes.ROLE_BY_NAME_SUCCESS],\n onFailure: RoleTypes.ROLE_BY_NAME_FAILURE,\n params: [\n roleName,\n ],\n });\n}\n\nexport function getRole(roleId: string) {\n return bindClientFunc({\n clientFunc: Client4.getRole,\n onRequest: RoleTypes.ROLE_BY_ID_REQUEST,\n onSuccess: [RoleTypes.RECEIVED_ROLE, RoleTypes.ROLE_BY_ID_SUCCESS],\n onFailure: RoleTypes.ROLE_BY_ID_FAILURE,\n params: [\n roleId,\n ],\n });\n}\n\nexport function editRole(role: Partial): NewActionFuncAsync {\n return bindClientFunc({\n clientFunc: Client4.patchRole,\n onRequest: RoleTypes.EDIT_ROLE_REQUEST,\n onSuccess: [RoleTypes.RECEIVED_ROLE, RoleTypes.EDIT_ROLE_SUCCESS],\n onFailure: RoleTypes.EDIT_ROLE_FAILURE,\n params: [\n role.id,\n role,\n ],\n }) as any; // HARRISONTODO Type bindClientFunc\n}\n\nexport function setPendingRoles(roles: string[]) {\n return async (dispatch: DispatchFunc) => {\n dispatch({type: RoleTypes.SET_PENDING_ROLES, data: roles});\n return {data: roles};\n };\n}\n\nexport function loadRolesIfNeeded(roles: Iterable): NewActionFuncAsync> {\n return async (dispatch, getState) => {\n const state = getState();\n let pendingRoles = new Set();\n\n try {\n pendingRoles = new Set(state.entities.roles.pending);\n } catch (e) {\n // do nothing\n }\n\n for (const role of roles) {\n pendingRoles.add(role);\n }\n if (!state.entities.general.serverVersion) {\n dispatch(setPendingRoles(Array.from(pendingRoles)));\n setTimeout(() => dispatch(loadRolesIfNeeded([])), 500);\n return {data: []};\n }\n\n const loadedRoles = getRoles(state);\n const newRoles = new Set();\n\n for (const role of pendingRoles) {\n if (!loadedRoles[role] && role.trim() !== '') {\n newRoles.add(role);\n }\n }\n\n if (state.entities.roles.pending) {\n await dispatch(setPendingRoles([]));\n }\n\n if (newRoles.size > 0) {\n const newRolesArray = Array.from(newRoles);\n const getRolesRequests = [];\n\n for (let i = 0; i < newRolesArray.length; i += General.MAX_GET_ROLES_BY_NAMES) {\n const chunk = newRolesArray.slice(i, i + General.MAX_GET_ROLES_BY_NAMES);\n getRolesRequests.push(dispatch(getRolesByNames(chunk)));\n }\n\n const result = await Promise.all(getRolesRequests);\n return result.reduce(\n (acc: Record, val: Record): Record => {\n acc.data = acc.data.concat(val.data);\n return acc;\n },\n {data: []},\n );\n }\n return {data: state.entities.roles.roles};\n };\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} from '@mattermost/types/posts';\nimport type {GlobalState} from '@mattermost/types/store';\nimport type {Team} from '@mattermost/types/teams';\nimport {UserThreadType} from '@mattermost/types/threads';\nimport type {UserThread, ThreadsState, UserThreadSynthetic} from '@mattermost/types/threads';\nimport type {IDMappedObjects, RelationOneToMany} from '@mattermost/types/utilities';\n\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {getCurrentTeamId} from 'mattermost-redux/selectors/entities/teams';\n\nexport function getThreadsInTeam(state: GlobalState): RelationOneToMany {\n return state.entities.threads.threadsInTeam;\n}\n\nexport function getUnreadThreadsInTeam(state: GlobalState): RelationOneToMany {\n return state.entities.threads.unreadThreadsInTeam;\n}\n\nexport const getThreadsInCurrentTeam: (state: GlobalState) => Array = createSelector(\n 'getThreadsInCurrentTeam',\n getCurrentTeamId,\n getThreadsInTeam,\n (\n currentTeamId,\n threadsInTeam,\n ) => {\n return threadsInTeam?.[currentTeamId] ?? [];\n },\n);\n\nexport const getUnreadThreadsInCurrentTeam: (state: GlobalState) => Array = createSelector(\n 'getUnreadThreadsInCurrentTeam',\n getCurrentTeamId,\n getUnreadThreadsInTeam,\n (\n currentTeamId,\n threadsInTeam,\n ) => {\n return threadsInTeam?.[currentTeamId] ?? [];\n },\n);\n\nexport function getThreadCounts(state: GlobalState): ThreadsState['counts'] {\n return state.entities.threads.counts;\n}\n\nexport function getThreadCountsIncludingDirect(state: GlobalState): ThreadsState['counts'] {\n return state.entities.threads.countsIncludingDirect;\n}\n\nexport const getThreadCountsInCurrentTeam: (state: GlobalState) => ThreadsState['counts'][Team['id']] = createSelector(\n 'getThreadCountsInCurrentTeam',\n getCurrentTeamId,\n getThreadCountsIncludingDirect,\n (\n currentTeamId,\n counts,\n ) => {\n return counts?.[currentTeamId];\n },\n);\n\nexport function getThreads(state: GlobalState): IDMappedObjects {\n return state.entities.threads.threads;\n}\n\nexport function getThread(state: GlobalState, threadId?: UserThread['id']) {\n if (!threadId) {\n return null;\n }\n\n const threads = getThreads(state);\n return threads[threadId];\n}\n\nexport function makeGetThreadOrSynthetic(): (state: GlobalState, rootPost: Post) => UserThread | UserThreadSynthetic {\n return createSelector(\n 'getThreadOrSynthetic',\n (_: GlobalState, rootPost: Post) => rootPost,\n getThreads,\n (rootPost, threads) => {\n const thread = threads[rootPost.id];\n if (thread?.id) {\n return thread;\n }\n\n return {\n id: rootPost.id,\n type: UserThreadType.Synthetic,\n reply_count: rootPost.reply_count,\n participants: rootPost.participants,\n last_reply_at: rootPost.last_reply_at ?? 0,\n is_following: thread?.is_following ?? rootPost.is_following ?? null,\n post: {\n user_id: rootPost.user_id,\n channel_id: rootPost.channel_id,\n },\n };\n },\n );\n}\n\nexport const getThreadOrderInCurrentTeam: (state: GlobalState, selectedThreadIdInTeam?: UserThread['id']) => Array = createSelector(\n 'getThreadOrderInCurrentTeam',\n getThreadsInCurrentTeam,\n getThreads,\n (state: GlobalState, selectedThreadIdInTeam?: UserThread['id']) => selectedThreadIdInTeam,\n (\n threadsInTeam,\n threads,\n selectedThreadIdInTeam,\n ) => {\n const ids = [...threadsInTeam.filter((id) => threads[id].is_following)];\n\n if (selectedThreadIdInTeam && !ids.includes(selectedThreadIdInTeam)) {\n ids.push(selectedThreadIdInTeam);\n }\n\n return sortByLastReply(ids, threads);\n },\n);\n\nexport const getNewestThreadInTeam: (state: GlobalState, teamID: string,) => (UserThread | null) = createSelector(\n 'getNewestThreadInTeam',\n getThreadsInTeam,\n getThreads,\n (state: GlobalState, teamID: string) => teamID,\n (\n threadsInTeam,\n threads,\n teamID: string,\n ) => {\n const threadsInGivenTeam = threadsInTeam?.[teamID] ?? [];\n if (!threadsInGivenTeam) {\n return null;\n }\n const ids = [...threadsInGivenTeam.filter((id) => threads[id].is_following)];\n return threads[sortByLastReply(ids, threads)[0]];\n },\n);\n\nexport const getUnreadThreadOrderInCurrentTeam: (\n state: GlobalState,\n selectedThreadIdInTeam?: UserThread['id'],\n) => Array = createSelector(\n 'getUnreadThreadOrderInCurrentTeam',\n getUnreadThreadsInCurrentTeam,\n getThreads,\n (state: GlobalState, selectedThreadIdInTeam?: UserThread['id']) => selectedThreadIdInTeam,\n (\n threadsInTeam,\n threads,\n selectedThreadIdInTeam,\n ) => {\n const ids = threadsInTeam.filter((id) => {\n const thread = threads[id];\n return thread.is_following && (thread.unread_replies || thread.unread_mentions);\n });\n\n if (selectedThreadIdInTeam && !ids.includes(selectedThreadIdInTeam)) {\n ids.push(selectedThreadIdInTeam);\n }\n\n return sortByLastReply(ids, threads);\n },\n);\n\nfunction sortByLastReply(ids: Array, threads: ReturnType) {\n return ids.filter((id) => threads[id].last_reply_at !== 0).sort((a, b) => threads[b].last_reply_at - threads[a].last_reply_at);\n}\n\nexport const getThreadsInChannel: (\n state: GlobalState,\n channelID: string,\n) => Array = createSelector(\n 'getThreadsInChannel',\n getThreads,\n (state: GlobalState, channelID: string) => channelID,\n (allThreads: IDMappedObjects, channelID: string) => {\n return Object.keys(allThreads).filter((id) => allThreads[id].post.channel_id === channelID);\n },\n);\n\nexport const getThreadItemsInChannel: (\n state: GlobalState,\n channelID: string,\n) => UserThread[] = createSelector(\n 'getThreadItemsInChannel',\n getThreads,\n (state: GlobalState, channelID: string) => channelID,\n (allThreads: IDMappedObjects, channelID: Channel['id']) => {\n return Object.keys(allThreads).\n map((id) => allThreads[id]).\n filter((item) => item.post.channel_id === channelID);\n },\n);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Preferences} from 'mattermost-redux/constants';\nimport type {LegacyThemeType, Theme, ThemeKey, ThemeType} from 'mattermost-redux/selectors/entities/preferences';\n\nexport function makeStyleFromTheme(getStyleFromTheme: (a: any) => any): (a: any) => any {\n let lastTheme: any;\n let style: any;\n return (theme: any) => {\n if (!style || theme !== lastTheme) {\n style = getStyleFromTheme(theme);\n lastTheme = theme;\n }\n\n return style;\n };\n}\n\nconst rgbPattern = /^rgba?\\((\\d+),(\\d+),(\\d+)(?:,([\\d.]+))?\\)$/;\n\nexport function getComponents(inColor: string): {red: number; green: number; blue: number; alpha: number} {\n let color = inColor;\n\n // RGB color\n const match = rgbPattern.exec(color);\n if (match) {\n return {\n red: parseInt(match[1], 10),\n green: parseInt(match[2], 10),\n blue: parseInt(match[3], 10),\n alpha: match[4] ? parseFloat(match[4]) : 1,\n };\n }\n\n // Hex color\n if (color[0] === '#') {\n color = color.slice(1);\n }\n\n if (color.length === 3) {\n const tempColor = color;\n color = '';\n\n color += tempColor[0] + tempColor[0];\n color += tempColor[1] + tempColor[1];\n color += tempColor[2] + tempColor[2];\n }\n\n return {\n red: parseInt(color.substring(0, 2), 16),\n green: parseInt(color.substring(2, 4), 16),\n blue: parseInt(color.substring(4, 6), 16),\n alpha: 1,\n };\n}\n\nexport function changeOpacity(oldColor: string, opacity: number): string {\n const {\n red,\n green,\n blue,\n alpha,\n } = getComponents(oldColor);\n\n return `rgba(${red},${green},${blue},${alpha * opacity})`;\n}\n\nfunction blendComponent(background: number, foreground: number, opacity: number): number {\n return ((1 - opacity) * background) + (opacity * foreground);\n}\n\nexport const blendColors = (background: string, foreground: string, opacity: number, hex = false): string => {\n const backgroundComponents = getComponents(background);\n const foregroundComponents = getComponents(foreground);\n\n const red = Math.floor(blendComponent(\n backgroundComponents.red,\n foregroundComponents.red,\n opacity,\n ));\n const green = Math.floor(blendComponent(\n backgroundComponents.green,\n foregroundComponents.green,\n opacity,\n ));\n const blue = Math.floor(blendComponent(\n backgroundComponents.blue,\n foregroundComponents.blue,\n opacity,\n ));\n const alpha = blendComponent(\n backgroundComponents.alpha,\n foregroundComponents.alpha,\n opacity,\n );\n\n if (hex) {\n let r = red.toString(16);\n let g = green.toString(16);\n let b = blue.toString(16);\n\n if (r.length === 1) {\n r = '0' + r;\n }\n if (g.length === 1) {\n g = '0' + g;\n }\n if (b.length === 1) {\n b = '0' + b;\n }\n\n return `#${r + g + b}`;\n }\n\n return `rgba(${red},${green},${blue},${alpha})`;\n};\n\ntype ThemeTypeMap = Record;\n\n// object mapping theme types to their respective keys for retrieving the source themes directly\n// - supports mapping old themes to new themes\nconst themeTypeMap: ThemeTypeMap = {\n Mattermost: 'denim',\n Organization: 'sapphire',\n 'Mattermost Dark': 'indigo',\n 'Windows Dark': 'onyx',\n Denim: 'denim',\n Sapphire: 'sapphire',\n Quartz: 'quartz',\n Indigo: 'indigo',\n Onyx: 'onyx',\n};\n\n// setThemeDefaults will set defaults on the theme for any unset properties.\nexport function setThemeDefaults(theme: Partial): Theme {\n const defaultTheme = Preferences.THEMES.denim;\n\n const processedTheme = {...theme};\n\n // If this is a system theme, return the source theme object matching the theme preference type\n if (theme.type && theme.type !== 'custom' && Object.keys(themeTypeMap).includes(theme.type)) {\n return Preferences.THEMES[themeTypeMap[theme.type]];\n }\n\n for (const key of Object.keys(defaultTheme)) {\n if (theme[key]) {\n // Fix a case where upper case theme colours are rendered as black\n processedTheme[key] = theme[key]?.toLowerCase();\n }\n }\n\n for (const property in defaultTheme) {\n if (property === 'type' || (property === 'sidebarTeamBarBg' && theme.sidebarHeaderBg)) {\n continue;\n }\n if (theme[property] == null) {\n processedTheme[property] = defaultTheme[property];\n }\n\n // Backwards compatability with old name\n if (!theme.mentionBg && theme.mentionBj) {\n processedTheme.mentionBg = theme.mentionBj;\n }\n }\n\n if (!theme.sidebarTeamBarBg && theme.sidebarHeaderBg) {\n processedTheme.sidebarTeamBarBg = blendColors(theme.sidebarHeaderBg, '#000000', 0.2, true);\n }\n\n return processedTheme as Theme;\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\n// This is a temporary store while we are transitioning from Flux to Redux. This file exports\n// the configured Redux store for use by actions and selectors.\n\nimport configureStore from 'store';\n\nconst store = configureStore();\n\n// Export the store to simplify debugging in production environments. This is not a supported API,\n// and should not be relied upon by plugins.\n(window as any).store = store;\n\nexport default store;\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.ServiceEnvironment = exports.CollapsedThreads = void 0;\nvar CollapsedThreads;\n(function (CollapsedThreads) {\n CollapsedThreads[\"DISABLED\"] = \"disabled\";\n CollapsedThreads[\"DEFAULT_ON\"] = \"default_on\";\n CollapsedThreads[\"DEFAULT_OFF\"] = \"default_off\";\n CollapsedThreads[\"ALWAYS_ON\"] = \"always_on\";\n})(CollapsedThreads = exports.CollapsedThreads || (exports.CollapsedThreads = {}));\nvar ServiceEnvironment;\n(function (ServiceEnvironment) {\n ServiceEnvironment[\"PRODUCTION\"] = \"production\";\n ServiceEnvironment[\"TEST\"] = \"test\";\n ServiceEnvironment[\"DEV\"] = \"dev\";\n})(ServiceEnvironment = exports.ServiceEnvironment || (exports.ServiceEnvironment = {}));\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.GroupSource = exports.SyncableType = void 0;\nvar SyncableType;\n(function (SyncableType) {\n SyncableType[\"Team\"] = \"team\";\n SyncableType[\"Channel\"] = \"channel\";\n})(SyncableType = exports.SyncableType || (exports.SyncableType = {}));\nvar GroupSource;\n(function (GroupSource) {\n GroupSource[\"Ldap\"] = \"ldap\";\n GroupSource[\"Custom\"] = \"custom\";\n})(GroupSource = exports.GroupSource || (exports.GroupSource = {}));\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.threadIsSynthetic = exports.UserThreadType = void 0;\nvar UserThreadType;\n(function (UserThreadType) {\n UserThreadType[\"Synthetic\"] = \"S\"; // derived from post\n})(UserThreadType = exports.UserThreadType || (exports.UserThreadType = {}));\nfunction threadIsSynthetic(thread) {\n return thread.type === UserThreadType.Synthetic;\n}\nexports.threadIsSynthetic = threadIsSynthetic;\n","var baseUniq = require('./_baseUniq');\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n}\n\nmodule.exports = uniq;\n"],"names":["setGlobalItem","name","value","type","StorageTypes","data","timestamp","Date","removeGlobalItem","dispatch","actionOnGlobalItemsWithPrefix","prefix","action","cleanLocalStorage","userProfileColorPattern","key","Object","keys","localStorage","test","removeItem","SidebarSize","ResizeDirection","CssVarKeyForResizable","SIDEBAR_SNAP_SIZE","SIDEBAR_SNAP_SPEED_LIMIT","DEFAULT_LHS_WIDTH","RHS_MIN_MAX_WIDTH","SMALL","min","max","default","MEDIUM","LARGE","XLARGE","LazyRoot","React","Root","makeAsyncComponent","App","Provider","store","CRTPostsChannelResetWatcher","Router","history","getHistory","Route","path","component","hot","renderRootComponent","ReactDOM","document","getElementById","fn","window","onload","curronload","evt","appendOnLoadEvent","callwhendone","onerror","msg","url","line","column","error","logError","AnnouncementBarTypes","message","stack","setCSRFFromCookie","modules","getModule","keyMirror","CREATE_COMPLIANCE_REQUEST","CREATE_COMPLIANCE_SUCCESS","CREATE_COMPLIANCE_FAILURE","LINK_LDAP_GROUP_FAILURE","UNLINK_LDAP_GROUP_FAILURE","PREV_TRIAL_LICENSE_SUCCESS","ENABLE_PLUGIN_REQUEST","ENABLE_PLUGIN_FAILURE","DISABLE_PLUGIN_REQUEST","RECEIVED_LOGS","RECEIVED_PLAIN_LOGS","RECEIVED_AUDITS","RECEIVED_CONFIG","RECEIVED_ENVIRONMENT_CONFIG","RECEIVED_COMPLIANCE_REPORT","RECEIVED_COMPLIANCE_REPORTS","RECEIVED_CLUSTER_STATUS","RECEIVED_SAML_CERT_STATUS","RECEIVED_SYSTEM_ANALYTICS","RECEIVED_TEAM_ANALYTICS","RECEIVED_USER_ACCESS_TOKEN","RECEIVED_USER_ACCESS_TOKENS","RECEIVED_USER_ACCESS_TOKENS_FOR_USER","RECEIVED_PLUGINS","RECEIVED_PLUGIN_STATUSES","RECEIVED_LDAP_GROUPS","LINKED_LDAP_GROUP","UNLINKED_LDAP_GROUP","REMOVED_PLUGIN","ENABLED_PLUGIN","DISABLED_PLUGIN","RECEIVED_SAML_METADATA_RESPONSE","RECEIVED_DATA_RETENTION_CUSTOM_POLICIES","RECEIVED_DATA_RETENTION_CUSTOM_POLICY","DELETE_DATA_RETENTION_CUSTOM_POLICY_SUCCESS","DELETE_DATA_RETENTION_CUSTOM_POLICY_FAILURE","RECEIVED_DATA_RETENTION_CUSTOM_POLICY_TEAMS","RECEIVED_DATA_RETENTION_CUSTOM_POLICY_CHANNELS","RECEIVED_DATA_RETENTION_CUSTOM_POLICY_TEAMS_SEARCH","RECEIVED_DATA_RETENTION_CUSTOM_POLICY_CHANNELS_SEARCH","CREATE_DATA_RETENTION_CUSTOM_POLICY_SUCCESS","UPDATE_DATA_RETENTION_CUSTOM_POLICY_SUCCESS","ADD_DATA_RETENTION_CUSTOM_POLICY_TEAMS_SUCCESS","ADD_DATA_RETENTION_CUSTOM_POLICY_CHANNELS_SUCCESS","REMOVE_DATA_RETENTION_CUSTOM_POLICY_TEAMS_SUCCESS","REMOVE_DATA_RETENTION_CUSTOM_POLICY_TEAMS_FAILURE","REMOVE_DATA_RETENTION_CUSTOM_POLICY_CHANNELS_SUCCESS","REMOVE_DATA_RETENTION_CUSTOM_POLICY_CHANNELS_FAILURE","RECEIVED_APP_BINDINGS","FAILED_TO_FETCH_APP_BINDINGS","RECEIVED_APP_RHS_BINDINGS","RECEIVED_APP_COMMAND_FORM","RECEIVED_APP_RHS_COMMAND_FORM","APPS_PLUGIN_ENABLED","APPS_PLUGIN_DISABLED","RECEIVED_BOT_ACCOUNTS","RECEIVED_BOT_ACCOUNT","RECEIVED_CATEGORY","RECEIVED_CATEGORIES","RECEIVED_CATEGORY_ORDER","CATEGORY_COLLAPSED","CATEGORY_EXPANDED","CATEGORY_DELETED","CHANNEL_REQUEST","CHANNEL_SUCCESS","CHANNEL_FAILURE","CHANNELS_REQUEST","CHANNELS_SUCCESS","CHANNELS_FAILURE","CREATE_CHANNEL_REQUEST","CREATE_CHANNEL_SUCCESS","CREATE_CHANNEL_FAILURE","UPDATE_CHANNEL_REQUEST","UPDATE_CHANNEL_SUCCESS","UPDATE_CHANNEL_FAILURE","DELETE_CHANNEL_SUCCESS","UNARCHIVED_CHANNEL_SUCCESS","GET_CHANNELS_REQUEST","GET_CHANNELS_SUCCESS","GET_CHANNELS_FAILURE","GET_ALL_CHANNELS_REQUEST","GET_ALL_CHANNELS_SUCCESS","GET_ALL_CHANNELS_FAILURE","GET_CHANNELS_TIMEZONE_REQUEST","GET_CHANNELS_TIMEZONE_SUCCESS","GET_CHANNELS_TIMEZONE_FAILURE","CHANNEL_STATS_REQUEST","CHANNEL_STATS_SUCCESS","CHANNEL_STATS_FAILURE","ADD_CHANNEL_MEMBER_REQUEST","ADD_CHANNEL_MEMBER_SUCCESS","REMOVE_CHANNEL_MEMBER_SUCCESS","SELECT_CHANNEL","LEAVE_CHANNEL","REMOVE_MEMBER_FROM_CHANNEL","RECEIVED_CHANNEL","RECEIVED_CHANNELS","RECEIVED_ALL_CHANNELS","RECEIVED_CHANNELS_LIST","RECEIVED_MY_CHANNEL_MEMBERS","RECEIVED_MY_CHANNEL_MEMBER","RECEIVED_CHANNEL_MEMBERS","RECEIVED_CHANNEL_MEMBER","RECEIVED_CHANNEL_STATS","RECEIVED_CHANNELS_MEMBER_COUNT","RECEIVED_CHANNEL_PROPS","RECEIVED_CHANNEL_DELETED","RECEIVED_CHANNEL_UNARCHIVED","RECEIVED_LAST_VIEWED_AT","UPDATE_CHANNEL_HEADER","UPDATE_CHANNEL_PURPOSE","CHANNEL_MEMBER_ADDED","CHANNEL_MEMBER_REMOVED","SET_CHANNEL_MUTED","INCREMENT_TOTAL_MSG_COUNT","INCREMENT_UNREAD_MSG_COUNT","DECREMENT_UNREAD_MSG_COUNT","INCREMENT_UNREAD_MENTION_COUNT","DECREMENT_UNREAD_MENTION_COUNT","UPDATED_CHANNEL_SCHEME","UPDATED_CHANNEL_MEMBER_SCHEME_ROLES","RECEIVED_CHANNEL_MEMBERS_MINUS_GROUP_MEMBERS","RECEIVED_CHANNEL_MODERATIONS","RECEIVED_CHANNEL_MEMBER_COUNTS_BY_GROUP","RECEIVED_CHANNEL_MEMBER_COUNTS_FROM_GROUPS_LIST","RECEIVED_TOTAL_CHANNEL_COUNT","POST_UNREAD_SUCCESS","ADD_MANUALLY_UNREAD","REMOVE_MANUALLY_UNREAD","INCREMENT_PINNED_POST_COUNT","DECREMENT_PINNED_POST_COUNT","INCREMENT_FILE_COUNT","GM_CONVERTED_TO_CHANNEL","RECEIVED_CLOUD_CUSTOMER","RECEIVED_CLOUD_PRODUCTS","RECEIVED_CLOUD_SUBSCRIPTION","RECEIVED_CLOUD_INVOICES","RECEIVED_CLOUD_LIMITS","RECEIVED_MESSAGES_USAGE","RECEIVED_FILES_USAGE","RECEIVED_BOARDS_USAGE","RECEIVED_TEAMS_USAGE","RECEIVED_LICENSE_SELF_SERVE_STATS","CLOUD_CUSTOMER_FAILED","CLOUD_INVOICES_FAILED","CLOUD_LIMITS_FAILED","CLOUD_PRODUCTS_FAILED","CLOUD_SUBSCRIPTION_FAILED","LICENSE_SELF_SERVE_STATS_FAILED","CLOUD_CUSTOMER_REQUEST","CLOUD_INVOICES_REQUEST","CLOUD_LIMITS_REQUEST","CLOUD_PRODUCTS_REQUEST","CLOUD_SUBSCRIPTION_REQUEST","LICENSE_SELF_SERVE_STATS_REQUEST","RECEIVED_SELF_HOSTED_SIGNUP_PROGRESS","CLEAR_CUSTOM_EMOJIS","RECEIVED_CUSTOM_EMOJI","RECEIVED_CUSTOM_EMOJIS","DELETED_CUSTOM_EMOJI","CUSTOM_EMOJI_DOES_NOT_EXIST","UPLOAD_FILES_REQUEST","UPLOAD_FILES_SUCCESS","UPLOAD_FILES_FAILURE","UPLOAD_FILES_CANCEL","RECEIVED_FILES_FOR_SEARCH","RECEIVED_FILES_FOR_POST","RECEIVED_UPLOAD_FILES","RECEIVED_FILE_PUBLIC_LINK","RECEIVED_SERVER_VERSION","CLIENT_CONFIG_RECEIVED","CLIENT_CONFIG_RESET","CLIENT_LICENSE_RECEIVED","CLIENT_LICENSE_RESET","RECEIVED_DATA_RETENTION_POLICY","LOG_CLIENT_ERROR_REQUEST","LOG_CLIENT_ERROR_SUCCESS","LOG_CLIENT_ERROR_FAILURE","WEBSOCKET_REQUEST","WEBSOCKET_SUCCESS","WEBSOCKET_FAILURE","WEBSOCKET_CLOSED","SET_CONNECTION_ID","SET_CONFIG_AND_LICENSE","WARN_METRICS_STATUS_RECEIVED","WARN_METRIC_STATUS_RECEIVED","WARN_METRIC_STATUS_REMOVED","FIRST_ADMIN_VISIT_MARKETPLACE_STATUS_RECEIVED","FIRST_ADMIN_COMPLETE_SETUP_RECEIVED","SHOW_LAUNCHING_WORKSPACE","LINKED_GROUP_TEAM","LINKED_GROUP_CHANNEL","UNLINKED_GROUP_TEAM","UNLINKED_GROUP_CHANNEL","RECEIVED_GROUP_TEAMS","RECEIVED_GROUP_CHANNELS","RECEIVED_GROUP_STATS","RECEIVED_GROUP","RECEIVED_GROUPS","RECEIVED_GROUP_ASSOCIATED_TO_TEAM","RECEIVED_GROUPS_ASSOCIATED_TO_TEAM","RECEIVED_ALL_GROUPS_ASSOCIATED_TO_CHANNELS_IN_TEAM","RECEIVED_GROUP_ASSOCIATED_TO_CHANNEL","RECEIVED_GROUPS_ASSOCIATED_TO_CHANNEL","RECEIVED_ALL_GROUPS_ASSOCIATED_TO_TEAM","RECEIVED_ALL_GROUPS_ASSOCIATED_TO_CHANNEL","RECEIVED_GROUP_NOT_ASSOCIATED_TO_TEAM","RECEIVED_GROUPS_NOT_ASSOCIATED_TO_TEAM","RECEIVED_GROUP_NOT_ASSOCIATED_TO_CHANNEL","RECEIVED_GROUPS_NOT_ASSOCIATED_TO_CHANNEL","PATCHED_GROUP_TEAM","PATCHED_GROUP_CHANNEL","RECEIVED_MY_GROUPS","REMOVE_MY_GROUP","ADD_MY_GROUP","PATCHED_GROUP","CREATE_GROUP_SUCCESS","ARCHIVED_GROUP","CREATED_GROUP_TEAMS_AND_CHANNELS","RESTORED_GROUP","SELF_HOSTED_PRODUCTS_REQUEST","SELF_HOSTED_PRODUCTS_FAILED","SELF_HOSTED_INVOICES_REQUEST","SELF_HOSTED_INVOICES_FAILED","RECEIVED_SELF_HOSTED_PRODUCTS","RECEIVED_SELF_HOSTED_INVOICES","RECEIVED_TRUE_UP_REVIEW_BUNDLE","TRUE_UP_REVIEW_PROFILE_FAILED","RECEIVED_TRUE_UP_REVIEW_STATUS","TRUE_UP_REVIEW_STATUS_FAILED","TRUE_UP_REVIEW_PROFILE_REQUEST","TRUE_UP_REVIEW_STATUS_REQUEST","RECEIVED_INCOMING_HOOK","RECEIVED_INCOMING_HOOKS","DELETED_INCOMING_HOOK","RECEIVED_OUTGOING_HOOK","RECEIVED_OUTGOING_HOOKS","DELETED_OUTGOING_HOOK","RECEIVED_CUSTOM_TEAM_COMMANDS","RECEIVED_COMMAND","RECEIVED_COMMANDS","RECEIVED_COMMAND_TOKEN","DELETED_COMMAND","RECEIVED_OAUTH_APP","RECEIVED_OAUTH_APPS","DELETED_OAUTH_APP","RECEIVED_APPS_OAUTH_APP_IDS","RECEIVED_APPS_BOT_IDS","RECEIVED_DIALOG_TRIGGER_ID","RECEIVED_DIALOG","RECEIVED_JOB","RECEIVED_JOBS","RECEIVED_JOBS_BY_TYPE","RECIEVED_USERS_LIMITS","CREATE_POST_REQUEST","CREATE_POST_SUCCESS","CREATE_POST_FAILURE","CREATE_POST_RESET_REQUEST","EDIT_POST_REQUEST","EDIT_POST_SUCCESS","EDIT_POST_FAILURE","GET_POST_THREAD_REQUEST","GET_POST_THREAD_SUCCESS","GET_POST_THREAD_FAILURE","GET_POSTS_SUCCESS","GET_POSTS_FAILURE","GET_POSTS_SINCE_SUCCESS","GET_POST_THREAD_WITH_RETRY_ATTEMPT","GET_POSTS_WITH_RETRY_ATTEMPT","GET_POSTS_SINCE_WITH_RETRY_ATTEMPT","GET_POSTS_BEFORE_WITH_RETRY_ATTEMPT","GET_POSTS_AFTER_WITH_RETRY_ATTEMPT","RECEIVED_POST","RECEIVED_NEW_POST","RECEIVED_POST_HISTORY","RECEIVED_POSTS","RECEIVED_POSTS_AFTER","RECEIVED_POSTS_BEFORE","RECEIVED_POSTS_IN_CHANNEL","RECEIVED_POSTS_IN_THREAD","RECEIVED_POSTS_SINCE","POST_DELETED","POST_REMOVED","RECEIVED_FOCUSED_POST","RECEIVED_POST_SELECTED","RECEIVED_EDIT_POST","RECEIVED_REACTION","RECEIVED_REACTIONS","REACTION_DELETED","ADD_MESSAGE_INTO_HISTORY","RESET_HISTORY_INDEX","MOVE_HISTORY_INDEX_BACK","MOVE_HISTORY_INDEX_FORWARD","RESET_POSTS_IN_CHANNEL","CREATE_ACK_POST_SUCCESS","DELETE_ACK_POST_SUCCESS","MOVE_POST_SUCCESS","MOVE_POST_FAILURE","RECEIVED_PREFERENCES","RECEIVED_ALL_PREFERENCES","DELETED_PREFERENCES","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","RECEIVED_ROLES","RECEIVED_ROLE","ROLE_DELETED","SET_PENDING_ROLES","RECEIVED_SCHEME","RECEIVED_SCHEMES","CREATED_SCHEME","DELETED_SCHEME","PATCHED_SCHEME","RECEIVED_SCHEME_TEAMS","RECEIVED_SCHEME_CHANNELS","SEARCH_POSTS_REQUEST","SEARCH_POSTS_SUCCESS","SEARCH_FILES_REQUEST","SEARCH_FILES_SUCCESS","SEARCH_FLAGGED_POSTS_REQUEST","SEARCH_FLAGGED_POSTS_SUCCESS","SEARCH_FLAGGED_POSTS_FAILURE","SEARCH_PINNED_POSTS_REQUEST","SEARCH_PINNED_POSTS_SUCCESS","SEARCH_PINNED_POSTS_FAILURE","REMOVE_SEARCH_PINNED_POSTS","RECEIVED_SEARCH_POSTS","RECEIVED_SEARCH_FILES","RECEIVED_SEARCH_FLAGGED_POSTS","RECEIVED_SEARCH_PINNED_POSTS","RECEIVED_SEARCH_TERM","REMOVE_SEARCH_POSTS","REMOVE_SEARCH_FILES","REMOVE_SEARCH_TERM","GET_TEAMS_REQUEST","GET_TEAMS_SUCCESS","GET_TEAMS_FAILURE","MY_TEAMS_REQUEST","MY_TEAMS_SUCCESS","MY_TEAMS_FAILURE","CREATE_TEAM_REQUEST","CREATE_TEAM_SUCCESS","CREATE_TEAM_FAILURE","GET_TEAM_MEMBERS_REQUEST","GET_TEAM_MEMBERS_SUCCESS","GET_TEAM_MEMBERS_FAILURE","JOIN_TEAM_REQUEST","JOIN_TEAM_SUCCESS","JOIN_TEAM_FAILURE","TEAM_INVITE_INFO_REQUEST","TEAM_INVITE_INFO_SUCCESS","TEAM_INVITE_INFO_FAILURE","ADD_TO_TEAM_FROM_INVITE_REQUEST","ADD_TO_TEAM_FROM_INVITE_SUCCESS","ADD_TO_TEAM_FROM_INVITE_FAILURE","CREATED_TEAM","SELECT_TEAM","UPDATED_TEAM","PATCHED_TEAM","REGENERATED_TEAM_INVITE_ID","RECEIVED_TEAM","RECEIVED_TEAMS","RECEIVED_TEAM_DELETED","RECEIVED_TEAM_UNARCHIVED","RECEIVED_TEAMS_LIST","RECEIVED_MY_TEAM_MEMBERS","RECEIVED_MY_TEAM_MEMBER","RECEIVED_TEAM_MEMBERS","RECEIVED_MEMBERS_IN_TEAM","RECEIVED_MEMBER_IN_TEAM","REMOVE_MEMBER_FROM_TEAM","RECEIVED_TEAM_STATS","RECEIVED_MY_TEAM_UNREADS","LEAVE_TEAM","UPDATED_TEAM_SCHEME","UPDATED_TEAM_MEMBER_SCHEME_ROLES","RECEIVED_TEAM_MEMBERS_MINUS_GROUP_MEMBERS","RECEIVED_TOTAL_TEAM_COUNT","RECEIVED_THREAD","RECEIVED_THREADS","RECEIVED_UNREAD_THREADS","FOLLOW_CHANGED_THREAD","READ_CHANGED_THREAD","ALL_TEAM_THREADS_READ","DECREMENT_THREAD_COUNTS","RECEIVED_THREAD_COUNTS","CREATE_USER_REQUEST","CREATE_USER_SUCCESS","CREATE_USER_FAILURE","LOGIN_REQUEST","LOGIN_SUCCESS","LOGIN_FAILURE","LOGOUT_REQUEST","LOGOUT_SUCCESS","LOGOUT_FAILURE","REVOKE_ALL_USER_SESSIONS_SUCCESS","REVOKE_SESSIONS_FOR_ALL_USERS_SUCCESS","AUTOCOMPLETE_USERS_REQUEST","AUTOCOMPLETE_USERS_SUCCESS","AUTOCOMPLETE_USERS_FAILURE","UPDATE_ME_REQUEST","UPDATE_ME_SUCCESS","UPDATE_ME_FAILURE","RECEIVED_ME","RECEIVED_TERMS_OF_SERVICE_STATUS","RECEIVED_PROFILE","RECEIVED_PROFILES","RECEIVED_PROFILES_LIST","RECEIVED_PROFILES_IN_TEAM","RECEIVED_PROFILE_IN_TEAM","RECEIVED_PROFILES_LIST_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_PROFILES_IN_CHANNEL","RECEIVED_PROFILES_LIST_IN_CHANNEL","RECEIVED_PROFILE_IN_CHANNEL","RECEIVED_PROFILES_NOT_IN_CHANNEL","RECEIVED_PROFILES_LIST_NOT_IN_CHANNEL","RECEIVED_PROFILES_LIST_NOT_IN_CHANNEL_AND_REPLACE","RECEIVED_PROFILE_NOT_IN_CHANNEL","RECEIVED_PROFILES_LIST_IN_GROUP","RECEIVED_PROFILES_FOR_GROUP","RECEIVED_PROFILES_LIST_TO_REMOVE_FROM_GROUP","RECEIVED_PROFILES_LIST_NOT_IN_GROUP","RECEIVED_SESSIONS","RECEIVED_REVOKED_SESSION","RECEIVED_STATUS","RECEIVED_STATUSES","RECEIVED_AUTOCOMPLETE_IN_CHANNEL","RESET_LOGOUT_STATE","RECEIVED_MY_USER_ACCESS_TOKEN","RECEIVED_MY_USER_ACCESS_TOKENS","CLEAR_MY_USER_ACCESS_TOKENS","REVOKED_USER_ACCESS_TOKEN","DISABLED_USER_ACCESS_TOKEN","ENABLED_USER_ACCESS_TOKEN","RECEIVED_USER_STATS","RECEIVED_FILTERED_USER_STATS","PROFILE_NO_LONGER_VISIBLE","LOGIN","receivedFiles","files","FileTypes","getMissingFilesByPosts","posts","getState","entities","postIds","reduce","curr","post","file_ids","fileIds","every","id","push","getFilesForPost","postId","async","Client4","forceLogoutIfNecessary","getFilePublicLink","fileId","bindClientFunc","clientFunc","onSuccess","params","linkGroupSyncable","groupID","syncableID","syncableType","patch","dispatches","SyncableType","GroupTypes","teamID","groups","console","warn","concat","batchActions","unlinkGroupSyncable","group_id","syncable_id","getGroupSyncables","patchGroupSyncable","getGroup","includeMemberCount","arguments","length","undefined","getGroups","opts","getGroupsNotAssociatedToTeam","q","page","perPage","General","source","GroupSource","getGroupsNotAssociatedToChannel","channelID","filterParentTeamPermitted","getAllGroupsAssociatedToTeam","filterAllowReference","param1","param2","param3","result","getAllGroupsAssociatedToChannelsInTeam","groupsByChannelId","getAllGroupsAssociatedToChannel","getGroupsAssociatedToTeam","param4","param5","totalGroupCount","total_group_count","getGroupsAssociatedToChannel","patchGroup","getGroupsByUserIdPaginated","getGroupStats","createGroupWithUserIds","group","addUsersToGroup","groupId","userIds","UserTypes","removeUsersFromGroup","searchGroups","filter_has_member","include_channel_member_count","ChannelTypes","channelId","archiveGroup","restoreGroup","createGroupTeamsAndChannels","userID","user_id","receivedPost","crtEnabled","PostTypes","features","receivedNewPost","receivedPosts","receivedPostsAfter","afterPostId","recent","receivedPostsBefore","beforePostId","oldest","receivedPostsSince","receivedPostsInChannel","receivedPostsInThread","rootId","postDeleted","getPost","isCollapsedThreadsEnabled","getMentionsAndStatusesForPosts","createPost","state","currentUserId","users","now","pendingPostId","pending_post_id","actions","PostSelectors","newPost","_objectSpread","create_at","update_at","reply_count","root_id","map","file","amount","channel_id","created","amountRoot","failed","server_error_id","removePost","createPostImmediately","resetCreatePostRequest","deletePost","delPost","decrementThreadCounts","Posts","system_post_ids","forEach","systemPostId","systemPost","e","editPost","onRequest","onFailure","setUnreadPost","userId","unreadChan","isCombinedUserActivityPost","member","getMyChannelMemberSelector","delta","msg_count","deltaRoot","msg_count_root","teamId","team_id","msgCount","mentionCount","mention_count","msgCountRoot","mentionCountRoot","mention_count_root","urgentMentionCount","urgent_mention_count","lastViewedAt","last_viewed_at","deltaMsgs","deltaMsgsRoot","getUnreadPostData","pinPost","is_pinned","decrementPinnedPostCount","unpinPost","addReaction","emojiName","reaction","removeReaction","post_id","emoji_name","getCustomEmojiForReaction","nonExistentEmoji","emojis","customEmojisByName","selectCustomEmojisByName","systemEmojis","has","getCustomEmojiByName","flagPost","preference","category","Preferences","savePreferences","getPaginatedPostThread","options","prevList","list","JSON","parse","stringify","order","prev_post_id","next_post_id","first_inaccessible_post_time","Math","slice","assign","has_next","nextPostId","nextPostPointer","fromCreateAt","fromPost","getPostThread","fetchThreads","collapsedThreadsEnabled","collapsedThreads","getNewestPostThread","getPostsForThread","savedPosts","latestReply","direction","getPosts","collapsedThreadsExtended","getPostsUnread","shouldLoadRecent","getUnreadScrollPositionPreference","getCurrentUserId","recentPosts","DEFAULT_LIMIT_BEFORE","DEFAULT_LIMIT_AFTER","recentPostsActions","getPostsSince","since","getPostsBefore","getPostsAfter","getPostsAround","after","thread","before","Promise","all","getThreadsForPosts","rootsSet","Set","Array","isArray","promises","add","postsArrayOrMap","resolve","postsArray","values","postsDictionary","i","profiles","statuses","userIdsToLoad","statusesToLoad","metadata","embeds","embed","_embed$data$post","_embed$data$post2","acknowledgements","ack","acknowledged_at","size","getProfilesByIds","from","getStatusesByIds","usernamesAndGroupsToLoad","usersByUsername","groupsByName","findNeededUsernamesAndGroups","text","includes","getUsersByUsername","getAllGroupsByName","pattern","match","exec","_post$props","props","attachments","attachment","pretext","getNeededAtMentionedUsernamesAndGroups","getProfilesPromise","getProfilesByUsernames","loadedProfiles","p","username","filter","groupParams","filter_allow_reference","per_page","include_member_count","getPostsByIds","ids","getPostEditHistory","postRemoved","moveThread","unflagPost","deletePreferences","addPostReminder","doPostActionWithCookie","actionId","actionCookie","selectedOption","trigger_id","IntegrationTypes","addMessageIntoHistory","resetHistoryIndex","index","moveHistoryIndexBack","moveHistoryIndexForward","resetReloadPostsInChannel","currentChannelId","getCurrentChannelId","selectChannel","acknowledgePost","unacknowledgePost","editRole","role","RoleTypes","setPendingRoles","roles","loadRolesIfNeeded","pendingRoles","pending","general","serverVersion","setTimeout","loadedRoles","getRoles","newRoles","trim","newRolesArray","getRolesRequests","chunk","rolesNames","acc","val","getThreadsInTeam","threads","threadsInTeam","getThreadsInCurrentTeam","createSelector","getCurrentTeamId","currentTeamId","_threadsInTeam$curren","getUnreadThreadsInCurrentTeam","unreadThreadsInTeam","_threadsInTeam$curren2","getThreadCounts","counts","getThreadCountsIncludingDirect","countsIncludingDirect","getThreadCountsInCurrentTeam","getThreads","getThread","threadId","makeGetThreadOrSynthetic","_","rootPost","_rootPost$last_reply_","_ref","_thread$is_following","UserThreadType","participants","last_reply_at","is_following","getThreadOrderInCurrentTeam","selectedThreadIdInTeam","sortByLastReply","getNewestThreadInTeam","_threadsInTeam$teamID","threadsInGivenTeam","getUnreadThreadOrderInCurrentTeam","unread_replies","unread_mentions","sort","a","b","allThreads","getThreadItemsInChannel","item","rgbPattern","getComponents","inColor","color","red","parseInt","green","blue","alpha","parseFloat","tempColor","substring","changeOpacity","oldColor","opacity","blendComponent","background","foreground","blendColors","hex","backgroundComponents","foregroundComponents","floor","r","toString","g","themeTypeMap","Mattermost","Organization","Denim","Sapphire","Quartz","Indigo","Onyx","setThemeDefaults","theme","defaultTheme","processedTheme","_theme$key","toLowerCase","property","sidebarHeaderBg","mentionBg","mentionBj","sidebarTeamBarBg","getBasePath","config","getConfig","SiteURL","URL","pathname","basename","getConnectionId","websocket","connectionId","isDevModeEnabled","EnableDeveloper","configureStore","ServiceEnvironment","CollapsedThreads","exports","Synthetic","baseUniq","module","array"],"sourceRoot":""}