diff --git a/webapp/channels/src/packages/mattermost-redux/src/action_types/index.ts b/webapp/channels/src/packages/mattermost-redux/src/action_types/index.ts index 1fd4d5ff4a..a27a6bb5e1 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/action_types/index.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/action_types/index.ts @@ -1,6 +1,8 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +import type {AnyAction} from 'redux'; + import AdminTypes from './admin'; import AppsTypes from './apps'; import BotTypes from './bots'; @@ -60,3 +62,8 @@ export { ChannelBookmarkTypes, ScheduledPostTypes, }; + +/** + * An MMReduxAction is any non-Thunk Redux action accepted by mattermost-redux. + */ +export type MMReduxAction = AnyAction; diff --git a/webapp/channels/src/packages/mattermost-redux/src/actions/helpers.ts b/webapp/channels/src/packages/mattermost-redux/src/actions/helpers.ts index 189b3a44d3..b02af7594a 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/actions/helpers.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/actions/helpers.ts @@ -1,6 +1,8 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +import type {AnyAction} from 'redux'; + import type {ServerError} from '@mattermost/types/errors'; import type {GlobalState} from '@mattermost/types/store'; @@ -12,7 +14,7 @@ import {logError} from './errors'; type ActionType = string; const HTTP_UNAUTHORIZED = 401; -export function forceLogoutIfNecessary(err: ServerError, dispatch: DispatchFunc, getState: GetStateFunc) { +export function forceLogoutIfNecessary(err: ServerError, dispatch: DispatchFunc, getState: GetStateFunc) { const {currentUserId} = getState().entities.users; if ('status_code' in err && err.status_code === HTTP_UNAUTHORIZED && err.url && err.url.indexOf('/login') === -1 && currentUserId) { @@ -21,7 +23,7 @@ export function forceLogoutIfNecessary(err: ServerError, dispatch: DispatchFunc, } } -function dispatcher(type: ActionType, data: any, dispatch: DispatchFunc) { +function dispatcher(type: ActionType, data: any, dispatch: DispatchFunc) { if (type.indexOf('SUCCESS') === -1) { // we don't want to pass the data for the request types dispatch(requestSuccess(type, data)); } else { @@ -76,7 +78,7 @@ export function bindClientFunc Promise>({ onSuccess?: ActionType | ActionType[]; onFailure?: ActionType; params?: Parameters; -}): ActionFuncAsync>, GlobalState> { +}): ActionFuncAsync>, GlobalState, AnyAction> { return async (dispatch, getState) => { if (onRequest) { dispatch(requestData(onRequest)); diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/admin.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/admin.ts index 70ddfef904..a22f467235 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/admin.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/admin.ts @@ -1,7 +1,6 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import type {ClusterInfo, AnalyticsRow, AnalyticsState, AdminState} from '@mattermost/types/admin'; @@ -15,11 +14,12 @@ import type {SamlCertificateStatus, SamlMetadataResponse} from '@mattermost/type import type {UserAccessToken, UserProfile} from '@mattermost/types/users'; import type {RelationOneToOne, IDMappedObjects} from '@mattermost/types/utilities'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; import {AdminTypes, UserTypes} from 'mattermost-redux/action_types'; import {Stats} from 'mattermost-redux/constants'; import PluginState from 'mattermost-redux/constants/plugins'; -function logs(state: string[] = [], action: AnyAction) { +function logs(state: string[] = [], action: MMReduxAction) { switch (action.type) { case AdminTypes.RECEIVED_LOGS: { return action.data; @@ -32,7 +32,7 @@ function logs(state: string[] = [], action: AnyAction) { } } -function plainLogs(state: string[] = [], action: AnyAction) { +function plainLogs(state: string[] = [], action: MMReduxAction) { switch (action.type) { case AdminTypes.RECEIVED_PLAIN_LOGS: { return action.data; @@ -45,7 +45,7 @@ function plainLogs(state: string[] = [], action: AnyAction) { } } -function audits(state: Record = {}, action: AnyAction) { +function audits(state: Record = {}, action: MMReduxAction) { switch (action.type) { case AdminTypes.RECEIVED_AUDITS: { const nextState = {...state}; @@ -62,7 +62,7 @@ function audits(state: Record = {}, action: AnyAction) { } } -function config(state: Partial = {}, action: AnyAction) { +function config(state: Partial = {}, action: MMReduxAction) { switch (action.type) { case AdminTypes.RECEIVED_CONFIG: { return action.data; @@ -89,7 +89,7 @@ function config(state: Partial = {}, action: AnyAction) { } } -function prevTrialLicense(state: Partial = {}, action: AnyAction) { +function prevTrialLicense(state: Partial = {}, action: MMReduxAction) { switch (action.type) { case AdminTypes.PREV_TRIAL_LICENSE_SUCCESS: { return action.data; @@ -99,7 +99,7 @@ function prevTrialLicense(state: Partial = {}, action: AnyAction) { } } -function environmentConfig(state: Partial = {}, action: AnyAction) { +function environmentConfig(state: Partial = {}, action: MMReduxAction) { switch (action.type) { case AdminTypes.RECEIVED_ENVIRONMENT_CONFIG: { return action.data; @@ -112,7 +112,7 @@ function environmentConfig(state: Partial = {}, action: AnyAc } } -function complianceReports(state: Record = {}, action: AnyAction) { +function complianceReports(state: Record = {}, action: MMReduxAction) { switch (action.type) { case AdminTypes.RECEIVED_COMPLIANCE_REPORT: { const nextState = {...state}; @@ -134,7 +134,7 @@ function complianceReports(state: Record = {}, action: AnyAc } } -function clusterInfo(state: ClusterInfo[] = [], action: AnyAction) { +function clusterInfo(state: ClusterInfo[] = [], action: MMReduxAction) { switch (action.type) { case AdminTypes.RECEIVED_CLUSTER_STATUS: { return action.data; @@ -147,7 +147,7 @@ function clusterInfo(state: ClusterInfo[] = [], action: AnyAction) { } } -function samlCertStatus(state: Partial = {}, action: AnyAction) { +function samlCertStatus(state: Partial = {}, action: MMReduxAction) { switch (action.type) { case AdminTypes.RECEIVED_SAML_CERT_STATUS: { return action.data; @@ -249,7 +249,7 @@ export function convertAnalyticsRowsToStats(data: AnalyticsRow[], name: string): return stats; } -function analytics(state: AdminState['analytics'] = {}, action: AnyAction) { +function analytics(state: AdminState['analytics'] = {}, action: MMReduxAction) { switch (action.type) { case AdminTypes.RECEIVED_SYSTEM_ANALYTICS: { const stats = convertAnalyticsRowsToStats(action.data, action.name); @@ -263,7 +263,7 @@ function analytics(state: AdminState['analytics'] = {}, action: AnyAction) { } } -function teamAnalytics(state: AdminState['teamAnalytics'] = {}, action: AnyAction) { +function teamAnalytics(state: AdminState['teamAnalytics'] = {}, action: MMReduxAction) { switch (action.type) { case AdminTypes.RECEIVED_TEAM_ANALYTICS: { const nextState = {...state}; @@ -280,7 +280,7 @@ function teamAnalytics(state: AdminState['teamAnalytics'] = {}, action: AnyActio } } -function userAccessTokens(state: Record = {}, action: AnyAction) { +function userAccessTokens(state: Record = {}, action: MMReduxAction) { switch (action.type) { case AdminTypes.RECEIVED_USER_ACCESS_TOKEN: { return {...state, [action.data.id]: action.data}; @@ -314,7 +314,7 @@ function userAccessTokens(state: Record = {}, action: A } } -function userAccessTokensByUser(state: RelationOneToOne> = {}, action: AnyAction) { +function userAccessTokensByUser(state: RelationOneToOne> = {}, action: MMReduxAction) { switch (action.type) { case AdminTypes.RECEIVED_USER_ACCESS_TOKEN: { // UserAccessToken const nextUserState: UserAccessToken | Record = {...(state[action.data.user_id] || {})}; @@ -380,7 +380,7 @@ function userAccessTokensByUser(state: RelationOneToOne = {}, action: AnyAction) { +function plugins(state: Record = {}, action: MMReduxAction) { switch (action.type) { case AdminTypes.RECEIVED_PLUGINS: { const nextState = {...state}; @@ -426,7 +426,7 @@ function plugins(state: Record = {}, action: AnyAction) { } } -function pluginStatuses(state: Record = {}, action: AnyAction) { +function pluginStatuses(state: Record = {}, action: MMReduxAction) { switch (action.type) { case AdminTypes.RECEIVED_PLUGIN_STATUSES: { const nextState: any = {}; @@ -527,7 +527,7 @@ function pluginStatuses(state: Record = {}, action: A } } -function ldapGroupsCount(state = 0, action: AnyAction) { +function ldapGroupsCount(state = 0, action: MMReduxAction) { switch (action.type) { case AdminTypes.RECEIVED_LDAP_GROUPS: return action.data.count; @@ -538,7 +538,7 @@ function ldapGroupsCount(state = 0, action: AnyAction) { } } -function ldapGroups(state: Record = {}, action: AnyAction) { +function ldapGroups(state: Record = {}, action: MMReduxAction) { switch (action.type) { case AdminTypes.RECEIVED_LDAP_GROUPS: { const nextState: any = {}; @@ -594,7 +594,7 @@ function ldapGroups(state: Record = {}, action: } } -function samlMetadataResponse(state: Partial = {}, action: AnyAction) { +function samlMetadataResponse(state: Partial = {}, action: MMReduxAction) { switch (action.type) { case AdminTypes.RECEIVED_SAML_METADATA_RESPONSE: { return action.data; @@ -604,7 +604,7 @@ function samlMetadataResponse(state: Partial = {}, action: } } -function dataRetentionCustomPolicies(state: IDMappedObjects = {}, action: AnyAction): IDMappedObjects { +function dataRetentionCustomPolicies(state: IDMappedObjects = {}, action: MMReduxAction): IDMappedObjects { switch (action.type) { case AdminTypes.CREATE_DATA_RETENTION_CUSTOM_POLICY_SUCCESS: case AdminTypes.RECEIVED_DATA_RETENTION_CUSTOM_POLICY: @@ -638,7 +638,7 @@ function dataRetentionCustomPolicies(state: IDMappedObjects = {}, action: AnyAction) { +function accounts(state: Record = {}, action: MMReduxAction) { switch (action.type) { case BotTypes.RECEIVED_BOT_ACCOUNTS: { const newBots = action.data; diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/channel_bookmarks.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/channel_bookmarks.ts index 38f444e281..6cb4b028b4 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/channel_bookmarks.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/channel_bookmarks.ts @@ -1,12 +1,13 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import {combineReducers, type AnyAction} from 'redux'; +import {combineReducers} from 'redux'; import type {ChannelBookmark, ChannelBookmarksState} from '@mattermost/types/channel_bookmarks'; import type {Channel} from '@mattermost/types/channels'; import type {IDMappedObjects} from '@mattermost/types/utilities'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; import {ChannelBookmarkTypes, UserTypes, ChannelTypes} from 'mattermost-redux/action_types'; const toNewObj = (current: IDMappedObjects, arr: T[]) => { @@ -15,7 +16,7 @@ const toNewObj = (current: IDMappedObjects, arr: T[]) }, {...current}); }; -export function byChannelId(state: ChannelBookmarksState['byChannelId'] = {}, action: AnyAction) { +export function byChannelId(state: ChannelBookmarksState['byChannelId'] = {}, action: MMReduxAction) { switch (action.type) { case ChannelBookmarkTypes.RECEIVED_BOOKMARKS: { const channelId: Channel['id'] = action.data.channelId; diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/channel_categories.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/channel_categories.ts index 586b8d281d..86e29c29b2 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/channel_categories.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/channel_categories.ts @@ -1,7 +1,6 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import type {ChannelCategory} from '@mattermost/types/channel_categories'; @@ -9,10 +8,11 @@ import type {Channel} from '@mattermost/types/channels'; import type {Team} from '@mattermost/types/teams'; import type {IDMappedObjects, RelationOneToOne} from '@mattermost/types/utilities'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; import {ChannelCategoryTypes, TeamTypes, UserTypes, ChannelTypes} from 'mattermost-redux/action_types'; import {removeItem} from 'mattermost-redux/utils/array_utils'; -export function byId(state: IDMappedObjects = {}, action: AnyAction) { +export function byId(state: IDMappedObjects = {}, action: MMReduxAction) { switch (action.type) { case ChannelCategoryTypes.RECEIVED_CATEGORIES: { const categories: ChannelCategory[] = action.data; @@ -132,7 +132,7 @@ export function byId(state: IDMappedObjects = {}, action: AnyAc } } -export function orderByTeam(state: RelationOneToOne> = {}, action: AnyAction) { +export function orderByTeam(state: RelationOneToOne> = {}, action: MMReduxAction) { switch (action.type) { case ChannelCategoryTypes.RECEIVED_CATEGORY_ORDER: { const teamId: string = action.data.teamId; diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/channels.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/channels.ts index 9f5535066e..9ff0bb406b 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/channels.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/channels.ts @@ -22,6 +22,7 @@ import type { IDMappedObjects, } from '@mattermost/types/utilities'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; import {AdminTypes, ChannelTypes, UserTypes, SchemeTypes, GroupTypes, PostTypes} from 'mattermost-redux/action_types'; import {General} from 'mattermost-redux/constants'; import {MarkUnread} from 'mattermost-redux/constants/channels'; @@ -60,7 +61,7 @@ function removeChannelFromSet(state: RelationOneToManyUnique, act }; } -function currentChannelId(state = '', action: AnyAction) { +function currentChannelId(state = '', action: MMReduxAction) { switch (action.type) { case ChannelTypes.SELECT_CHANNEL: return action.data; @@ -71,7 +72,7 @@ function currentChannelId(state = '', action: AnyAction) { } } -function channels(state: IDMappedObjects = {}, action: AnyAction) { +function channels(state: IDMappedObjects = {}, action: MMReduxAction) { switch (action.type) { case ChannelTypes.RECEIVED_CHANNEL: { const channel: Channel = toClientChannel(action.data); @@ -221,7 +222,7 @@ function toClientChannel(serverChannel: ServerChannel): Channel { return channel; } -function channelsInTeam(state: ChannelsState['channelsInTeam'] = {}, action: AnyAction) { +function channelsInTeam(state: ChannelsState['channelsInTeam'] = {}, action: MMReduxAction) { switch (action.type) { case ChannelTypes.RECEIVED_CHANNEL: { const nextSet = new Set(state[action.data.team_id]); @@ -247,7 +248,7 @@ function channelsInTeam(state: ChannelsState['channelsInTeam'] = {}, action: Any } } -export function myMembers(state: RelationOneToOne = {}, action: AnyAction) { +export function myMembers(state: RelationOneToOne = {}, action: MMReduxAction) { switch (action.type) { case ChannelTypes.RECEIVED_MY_CHANNEL_MEMBER: { const channelMember: ChannelMembership = action.data; @@ -507,7 +508,7 @@ function receiveChannelMember(state: RelationOneToOne> = {}, action: AnyAction) { +function membersInChannel(state: RelationOneToOne> = {}, action: MMReduxAction) { switch (action.type) { case ChannelTypes.RECEIVED_MY_CHANNEL_MEMBER: case ChannelTypes.RECEIVED_CHANNEL_MEMBER: { @@ -580,7 +581,7 @@ function membersInChannel(state: RelationOneToOne = {}, action: AnyAction) { +function stats(state: RelationOneToOne = {}, action: MMReduxAction) { switch (action.type) { case ChannelTypes.RECEIVED_CHANNEL_STATS: { const stat: ChannelStats = action.data; @@ -687,7 +688,7 @@ function stats(state: RelationOneToOne = {}, action: AnyA } } -function channelsMemberCount(state: Record = {}, action: AnyAction) { +function channelsMemberCount(state: Record = {}, action: MMReduxAction) { switch (action.type) { case ChannelTypes.RECEIVED_CHANNELS_MEMBER_COUNT: { const memberCount = action.data; @@ -703,7 +704,7 @@ function channelsMemberCount(state: Record = {}, action: AnyActi } } -function groupsAssociatedToChannel(state: any = {}, action: AnyAction) { +function groupsAssociatedToChannel(state: any = {}, action: MMReduxAction) { switch (action.type) { case GroupTypes.RECEIVED_ALL_GROUPS_ASSOCIATED_TO_CHANNELS_IN_TEAM: { const {groupsByChannelId} = action.data; @@ -797,7 +798,7 @@ function updateChannelMemberSchemeRoles(state: any, action: AnyAction) { return state; } -function totalCount(state = 0, action: AnyAction) { +function totalCount(state = 0, action: MMReduxAction) { switch (action.type) { case ChannelTypes.RECEIVED_TOTAL_CHANNEL_COUNT: { return action.data; @@ -807,7 +808,7 @@ function totalCount(state = 0, action: AnyAction) { } } -export function manuallyUnread(state: RelationOneToOne = {}, action: AnyAction) { +export function manuallyUnread(state: RelationOneToOne = {}, action: MMReduxAction) { switch (action.type) { case ChannelTypes.REMOVE_MANUALLY_UNREAD: { if (state[action.data.channelId]) { @@ -831,7 +832,7 @@ export function manuallyUnread(state: RelationOneToOne = {}, a } } -export function channelModerations(state: any = {}, action: AnyAction) { +export function channelModerations(state: any = {}, action: MMReduxAction) { switch (action.type) { case ChannelTypes.RECEIVED_CHANNEL_MODERATIONS: { const {channelId, moderations} = action.data; @@ -845,7 +846,7 @@ export function channelModerations(state: any = {}, action: AnyAction) { } } -export function channelMemberCountsByGroup(state: any = {}, action: AnyAction) { +export function channelMemberCountsByGroup(state: any = {}, action: MMReduxAction) { switch (action.type) { case ChannelTypes.RECEIVED_CHANNEL_MEMBER_COUNTS_BY_GROUP: { const {channelId, memberCounts} = action.data; @@ -879,7 +880,7 @@ export function channelMemberCountsByGroup(state: any = {}, action: AnyAction) { } } -function roles(state: RelationOneToOne> = {}, action: AnyAction) { +function roles(state: RelationOneToOne> = {}, action: MMReduxAction) { switch (action.type) { case ChannelTypes.RECEIVED_MY_CHANNEL_MEMBER: { const channelMember = action.data; diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/channels/message_counts.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/channels/message_counts.ts index 5e2b84c17f..4131c161c9 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/channels/message_counts.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/channels/message_counts.ts @@ -1,8 +1,6 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; - import type { Channel, ChannelMessageCount, @@ -10,6 +8,7 @@ import type { } from '@mattermost/types/channels'; import type {RelationOneToOne} from '@mattermost/types/utilities'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; import { AdminTypes, ChannelTypes, @@ -18,7 +17,7 @@ import { } from 'mattermost-redux/action_types'; import {General} from 'mattermost-redux/constants'; -export default function messageCounts(state: RelationOneToOne = {}, action: AnyAction): RelationOneToOne { +export default function messageCounts(state: RelationOneToOne = {}, action: MMReduxAction): RelationOneToOne { switch (action.type) { case ChannelTypes.RECEIVED_CHANNEL: { const channel: ServerChannel = action.data; diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/cloud.test.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/cloud.test.ts index 6ef01a0a6f..78d8a8c36e 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/cloud.test.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/cloud.test.ts @@ -16,7 +16,7 @@ const minimalLimits = { describe('limits reducer', () => { test('returns empty limits by default', () => { - expect(limits(undefined, {type: 'some action', data: minimalLimits})).toEqual({ + expect(limits(undefined, {type: undefined})).toEqual({ limits: {}, limitsLoaded: false, }); @@ -26,13 +26,7 @@ describe('limits reducer', () => { const unchangedLimits = limits( minimalLimits, { - type: 'some action', - data: { - ...minimalLimits, - integrations: { - enabled: 10, - }, - }, + type: undefined, }, ); expect(unchangedLimits).toEqual(minimalLimits); diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/cloud.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/cloud.ts index ed17727397..6bc17d13d9 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/cloud.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/cloud.ts @@ -1,14 +1,14 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import type {Product, Subscription, CloudCustomer, Invoice, Limits} from '@mattermost/types/cloud'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; import {CloudTypes} from 'mattermost-redux/action_types'; -export function subscription(state: Subscription | null = null, action: AnyAction) { +export function subscription(state: Subscription | null = null, action: MMReduxAction) { switch (action.type) { case CloudTypes.RECEIVED_CLOUD_SUBSCRIPTION: { return action.data; @@ -18,7 +18,7 @@ export function subscription(state: Subscription | null = null, action: AnyActio } } -function customer(state: CloudCustomer | null = null, action: AnyAction) { +function customer(state: CloudCustomer | null = null, action: MMReduxAction) { switch (action.type) { case CloudTypes.RECEIVED_CLOUD_CUSTOMER: { return action.data; @@ -28,7 +28,7 @@ function customer(state: CloudCustomer | null = null, action: AnyAction) { } } -function products(state: Record | null = null, action: AnyAction) { +function products(state: Record | null = null, action: MMReduxAction) { switch (action.type) { case CloudTypes.RECEIVED_CLOUD_PRODUCTS: { const productList: Product[] = action.data; @@ -46,7 +46,7 @@ function products(state: Record | null = null, action: AnyActio } } -function invoices(state: Record | null = null, action: AnyAction) { +function invoices(state: Record | null = null, action: MMReduxAction) { switch (action.type) { case CloudTypes.RECEIVED_CLOUD_INVOICES: { const invoiceList: Invoice[] = action.data; @@ -74,7 +74,7 @@ const emptyLimits = { limitsLoaded: false, }; -export function limits(state: LimitsReducer = emptyLimits, action: AnyAction) { +export function limits(state: LimitsReducer = emptyLimits, action: MMReduxAction) { switch (action.type) { case CloudTypes.RECEIVED_CLOUD_LIMITS: { return { @@ -99,7 +99,7 @@ export interface ErrorsReducer { trueUpReview?: true; } const emptyErrors = {}; -export function errors(state: ErrorsReducer = emptyErrors, action: AnyAction) { +export function errors(state: ErrorsReducer = emptyErrors, action: MMReduxAction) { switch (action.type) { case CloudTypes.CLOUD_SUBSCRIPTION_FAILED: { return {...state, subscription: true}; diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/emojis.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/emojis.ts index 3dfd3b39ea..cf3ee2e8c3 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/emojis.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/emojis.ts @@ -1,16 +1,16 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import type {CustomEmoji} from '@mattermost/types/emojis'; import type {Post} from '@mattermost/types/posts'; import type {IDMappedObjects} from '@mattermost/types/utilities'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; import {EmojiTypes, PostTypes, UserTypes} from 'mattermost-redux/action_types'; -export function customEmoji(state: IDMappedObjects = {}, action: AnyAction): IDMappedObjects { +export function customEmoji(state: IDMappedObjects = {}, action: MMReduxAction): IDMappedObjects { switch (action.type) { case EmojiTypes.RECEIVED_CUSTOM_EMOJI: { const emoji: CustomEmoji = action.data; @@ -75,7 +75,7 @@ function storeEmojisForPost(state: IDMappedObjects, post: Post): ID return post.metadata.emojis.reduce(storeEmoji, state); } -function nonExistentEmoji(state: Set = new Set(), action: AnyAction): Set { +function nonExistentEmoji(state: Set = new Set(), action: MMReduxAction): Set { switch (action.type) { case EmojiTypes.CUSTOM_EMOJI_DOES_NOT_EXIST: { if (!state.has(action.data)) { diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/files.test.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/files.test.ts index de87284755..656e209d1f 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/files.test.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/files.test.ts @@ -1,7 +1,7 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import {PostTypes} from 'mattermost-redux/action_types'; +import {FileTypes, PostTypes} from 'mattermost-redux/action_types'; import { files as filesReducer, filesFromSearch as filesFromSearchReducer, @@ -11,7 +11,7 @@ import deepFreeze from 'mattermost-redux/utils/deep_freeze'; describe('reducers/entities/files', () => { describe('files', () => { - const testForSinglePost = (actionType: string) => () => { + const testForSinglePost = (actionType: typeof PostTypes['RECEIVED_NEW_POST'] | typeof PostTypes['RECEIVED_POST']) => () => { it('no post metadata attribute', () => { const state = deepFreeze({}); const action = { @@ -268,7 +268,7 @@ describe('reducers/entities/files', () => { describe('filesFromSearch', () => { const state = deepFreeze({}); const action = { - type: 'RECEIVED_FILES_FOR_SEARCH', + type: FileTypes.RECEIVED_FILES_FOR_SEARCH, data: { file1: {id: 'file1', post_id: 'post'}, file2: {id: 'file2', post_id: 'post'}, @@ -282,7 +282,7 @@ describe('reducers/entities/files', () => { }); describe('fileIdsByPostId', () => { - const testForSinglePost = (actionType: string) => () => { + const testForSinglePost = (actionType: typeof PostTypes['RECEIVED_NEW_POST'] | typeof PostTypes['RECEIVED_POST']) => () => { describe('no post metadata', () => { const action = { type: actionType, diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/files.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/files.ts index 3e16f42a76..6a0c4f413d 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/files.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/files.ts @@ -1,16 +1,16 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import type {ChannelBookmark} from '@mattermost/types/channel_bookmarks'; import type {FileInfo, FileSearchResultItem} from '@mattermost/types/files'; import type {Post} from '@mattermost/types/posts'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; import {FileTypes, PostTypes, UserTypes, ChannelBookmarkTypes} from 'mattermost-redux/action_types'; -export function files(state: Record = {}, action: AnyAction) { +export function files(state: Record = {}, action: MMReduxAction) { switch (action.type) { case FileTypes.RECEIVED_UPLOAD_FILES: case FileTypes.RECEIVED_FILES_FOR_POST: { @@ -98,7 +98,7 @@ export function files(state: Record = {}, action: AnyAction) { } } -export function filesFromSearch(state: Record = {}, action: AnyAction) { +export function filesFromSearch(state: Record = {}, action: MMReduxAction) { switch (action.type) { case FileTypes.RECEIVED_FILES_FOR_SEARCH: { return {...state, @@ -150,7 +150,7 @@ function storeFilesForPost(state: Record, post: Post) { }, state); } -export function fileIdsByPostId(state: Record = {}, action: AnyAction) { +export function fileIdsByPostId(state: Record = {}, action: MMReduxAction) { switch (action.type) { case FileTypes.RECEIVED_FILES_FOR_POST: { const {data, postId} = action; @@ -204,7 +204,7 @@ function storeFilesIdsForPost(state: Record, post: Post) { }; } -function filePublicLink(state: {link: string} = {link: ''}, action: AnyAction) { +function filePublicLink(state: {link: string} = {link: ''}, action: MMReduxAction) { switch (action.type) { case FileTypes.RECEIVED_FILE_PUBLIC_LINK: { return action.data; diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/general.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/general.ts index fc2a286a77..bc40dd216e 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/general.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/general.ts @@ -1,14 +1,14 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import type {ClientLicense, ClientConfig} from '@mattermost/types/config'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; import {GeneralTypes, UserTypes} from 'mattermost-redux/action_types'; -function config(state: Partial = {}, action: AnyAction) { +function config(state: Partial = {}, action: MMReduxAction) { switch (action.type) { case GeneralTypes.CLIENT_CONFIG_RECEIVED: return Object.assign({}, state, action.data); @@ -23,7 +23,7 @@ function config(state: Partial = {}, action: AnyAction) { } } -function license(state: ClientLicense = {}, action: AnyAction) { +function license(state: ClientLicense = {}, action: MMReduxAction) { switch (action.type) { case GeneralTypes.CLIENT_LICENSE_RECEIVED: return action.data; @@ -37,7 +37,7 @@ function license(state: ClientLicense = {}, action: AnyAction) { } } -function serverVersion(state = '', action: AnyAction) { +function serverVersion(state = '', action: MMReduxAction) { switch (action.type) { case GeneralTypes.RECEIVED_SERVER_VERSION: return action.data; @@ -48,7 +48,7 @@ function serverVersion(state = '', action: AnyAction) { } } -function firstAdminVisitMarketplaceStatus(state = false, action: AnyAction) { +function firstAdminVisitMarketplaceStatus(state = false, action: MMReduxAction) { switch (action.type) { case GeneralTypes.FIRST_ADMIN_VISIT_MARKETPLACE_STATUS_RECEIVED: return action.data; @@ -58,7 +58,7 @@ function firstAdminVisitMarketplaceStatus(state = false, action: AnyAction) { } } -function firstAdminCompleteSetup(state = false, action: AnyAction) { +function firstAdminCompleteSetup(state = false, action: MMReduxAction) { switch (action.type) { case GeneralTypes.FIRST_ADMIN_COMPLETE_SETUP_RECEIVED: return action.data; diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/groups.test.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/groups.test.ts index 8acf25140d..277667c629 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/groups.test.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/groups.test.ts @@ -9,7 +9,7 @@ describe('reducers/entities/groups', () => { it('initial state', () => { const state = undefined; const action = { - type: '', + type: undefined, }; const expectedState = { syncables: {}, diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/groups.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/groups.ts index 0bf06a0798..8183d9a84e 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/groups.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/groups.ts @@ -1,14 +1,14 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import type {GroupChannel, GroupSyncablesState, GroupTeam, Group} from '@mattermost/types/groups'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; import {GroupTypes} from 'mattermost-redux/action_types'; -function syncables(state: Record = {}, action: AnyAction) { +function syncables(state: Record = {}, action: MMReduxAction) { switch (action.type) { case GroupTypes.RECEIVED_GROUP_TEAMS: { return { @@ -141,7 +141,7 @@ function syncables(state: Record = {}, action: AnyA } } -function myGroups(state: string[] = [], action: AnyAction) { +function myGroups(state: string[] = [], action: MMReduxAction) { switch (action.type) { case GroupTypes.ADD_MY_GROUP: { const groupId = action.id; @@ -185,7 +185,7 @@ function myGroups(state: string[] = [], action: AnyAction) { } } -function stats(state: any = {}, action: AnyAction) { +function stats(state: any = {}, action: MMReduxAction) { switch (action.type) { case GroupTypes.RECEIVED_GROUP_STATS: { const stat = action.data; @@ -199,7 +199,7 @@ function stats(state: any = {}, action: AnyAction) { } } -function groups(state: Record = {}, action: AnyAction) { +function groups(state: Record = {}, action: MMReduxAction) { switch (action.type) { case GroupTypes.CREATE_GROUP_SUCCESS: case GroupTypes.PATCHED_GROUP: diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/hosted_customer.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/hosted_customer.ts index f2486ba68e..f667d49f24 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/hosted_customer.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/hosted_customer.ts @@ -1,11 +1,11 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import type {Product} from '@mattermost/types/cloud'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; import {HostedCustomerTypes} from 'mattermost-redux/action_types'; export interface SelfHostedProducts { @@ -18,7 +18,7 @@ const initialProducts = { productsLoaded: false, }; -function products(state: SelfHostedProducts = initialProducts, action: AnyAction) { +function products(state: SelfHostedProducts = initialProducts, action: MMReduxAction) { switch (action.type) { case HostedCustomerTypes.RECEIVED_SELF_HOSTED_PRODUCTS: { const productList: Product[] = action.data; @@ -46,7 +46,7 @@ export interface ErrorsReducer { } const emptyErrors = {}; -export function errors(state: ErrorsReducer = emptyErrors, action: AnyAction) { +export function errors(state: ErrorsReducer = emptyErrors, action: MMReduxAction) { switch (action.type) { case HostedCustomerTypes.SELF_HOSTED_PRODUCTS_FAILED: { return {...state, products: true}; diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/integrations.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/integrations.ts index 6ca7670a75..dcb0abfde7 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/integrations.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/integrations.ts @@ -1,15 +1,15 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import type {Command, IncomingWebhook, OutgoingWebhook, OAuthApp, OutgoingOAuthConnection} from '@mattermost/types/integrations'; import type {IDMappedObjects} from '@mattermost/types/utilities'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; import {IntegrationTypes, UserTypes, ChannelTypes} from 'mattermost-redux/action_types'; -function incomingHooks(state: IDMappedObjects = {}, action: AnyAction) { +function incomingHooks(state: IDMappedObjects = {}, action: MMReduxAction) { switch (action.type) { case IntegrationTypes.RECEIVED_INCOMING_HOOK: { const nextState = {...state}; @@ -52,7 +52,7 @@ function incomingHooks(state: IDMappedObjects = {}, action: Any } } -function incomingHooksTotalCount(state: number = 0, action: AnyAction) { +function incomingHooksTotalCount(state: number = 0, action: MMReduxAction) { switch (action.type) { case IntegrationTypes.RECEIVED_INCOMING_HOOKS_TOTAL_COUNT: { return action.data; @@ -65,7 +65,7 @@ function incomingHooksTotalCount(state: number = 0, action: AnyAction) { } } -function outgoingHooks(state: IDMappedObjects = {}, action: AnyAction) { +function outgoingHooks(state: IDMappedObjects = {}, action: MMReduxAction) { switch (action.type) { case IntegrationTypes.RECEIVED_OUTGOING_HOOK: { const nextState = {...state}; @@ -108,7 +108,7 @@ function outgoingHooks(state: IDMappedObjects = {}, action: Any } } -function commands(state: IDMappedObjects = {}, action: AnyAction) { +function commands(state: IDMappedObjects = {}, action: MMReduxAction) { switch (action.type) { case IntegrationTypes.RECEIVED_COMMANDS: case IntegrationTypes.RECEIVED_CUSTOM_TEAM_COMMANDS: { @@ -154,7 +154,7 @@ function commands(state: IDMappedObjects = {}, action: AnyAction) { } } -function systemCommands(state: IDMappedObjects = {}, action: AnyAction) { +function systemCommands(state: IDMappedObjects = {}, action: MMReduxAction) { switch (action.type) { case IntegrationTypes.RECEIVED_COMMANDS: { const nextCommands: Record = {}; @@ -182,7 +182,7 @@ function systemCommands(state: IDMappedObjects = {}, action: AnyAction) } } -function oauthApps(state: IDMappedObjects = {}, action: AnyAction) { +function oauthApps(state: IDMappedObjects = {}, action: MMReduxAction) { switch (action.type) { case IntegrationTypes.RECEIVED_OAUTH_APPS: { const nextState = {...state}; @@ -209,7 +209,7 @@ function oauthApps(state: IDMappedObjects = {}, action: AnyAction) { } } -function appsOAuthAppIDs(state: string[] = [], action: AnyAction) { +function appsOAuthAppIDs(state: string[] = [], action: MMReduxAction) { switch (action.type) { case IntegrationTypes.RECEIVED_APPS_OAUTH_APP_IDS: { if (state.length === 0 && action.data.length === 0) { @@ -237,7 +237,7 @@ function appsOAuthAppIDs(state: string[] = [], action: AnyAction) { } } -function outgoingOAuthConnections(state: IDMappedObjects = {}, action: AnyAction) { +function outgoingOAuthConnections(state: IDMappedObjects = {}, action: MMReduxAction) { switch (action.type) { case IntegrationTypes.RECEIVED_OUTGOING_OAUTH_CONNECTIONS: { const nextState = {...state}; @@ -264,7 +264,7 @@ function outgoingOAuthConnections(state: IDMappedObjects = {}, action: AnyAction): IDMappedObjects { +function jobs(state: IDMappedObjects = {}, action: MMReduxAction): IDMappedObjects { switch (action.type) { case JobTypes.RECEIVED_JOB: { const nextState = {...state}; @@ -28,7 +28,7 @@ function jobs(state: IDMappedObjects = {}, action: AnyAction): IDMappedObje } } -function jobsByTypeList(state: JobsByType = {}, action: AnyAction): JobsByType { +function jobsByTypeList(state: JobsByType = {}, action: MMReduxAction): JobsByType { switch (action.type) { case JobTypes.RECEIVED_JOBS_BY_TYPE: { const nextState = {...state}; diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/limits.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/limits.ts index 83f560dd02..141dd24019 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/limits.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/limits.ts @@ -1,12 +1,12 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; import {LimitsTypes} from 'mattermost-redux/action_types'; -function serverLimits(state = {}, action: AnyAction) { +function serverLimits(state = {}, action: MMReduxAction) { switch (action.type) { case LimitsTypes.RECIEVED_APP_LIMITS: { const serverLimits = action.data; diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/posts.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/posts.ts index f6d8adf566..0d490b1784 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/posts.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/posts.ts @@ -1,8 +1,6 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; - import type { OpenGraphMetadata, Post, @@ -21,6 +19,7 @@ import type { RelationOneToMany, } from '@mattermost/types/utilities'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; import {ChannelTypes, PostTypes, UserTypes, ThreadTypes, CloudTypes} from 'mattermost-redux/action_types'; import {Posts} from 'mattermost-redux/constants'; import {PostTypes as PostConstant} from 'mattermost-redux/constants/posts'; @@ -99,7 +98,7 @@ export function removeUnneededMetadata(post: Post) { }; } -export function nextPostsReplies(state: {[x in Post['id']]: number} = {}, action: AnyAction) { +export function nextPostsReplies(state: {[x in Post['id']]: number} = {}, action: MMReduxAction) { switch (action.type) { case PostTypes.RECEIVED_POST: case PostTypes.RECEIVED_NEW_POST: { @@ -158,7 +157,7 @@ export function nextPostsReplies(state: {[x in Post['id']]: number} = {}, action } } -export function handlePosts(state: IDMappedObjects = {}, action: AnyAction) { +export function handlePosts(state: IDMappedObjects = {}, action: MMReduxAction) { switch (action.type) { case PostTypes.RECEIVED_POST: case PostTypes.RECEIVED_NEW_POST: { @@ -399,7 +398,7 @@ function handlePostReceived(nextState: any, post: Post, nestedPermalinkLevel?: n return currentState; } -export function handlePendingPosts(state: string[] = [], action: AnyAction) { +export function handlePendingPosts(state: string[] = [], action: MMReduxAction) { switch (action.type) { case PostTypes.RECEIVED_NEW_POST: { const post = action.data; @@ -465,7 +464,7 @@ export function handlePendingPosts(state: string[] = [], action: AnyAction) { } } -export function postsInChannel(state: Record = {}, action: AnyAction, prevPosts: IDMappedObjects, nextPosts: Record) { +export function postsInChannel(state: Record = {}, action: MMReduxAction, prevPosts: IDMappedObjects, nextPosts: Record) { switch (action.type) { case PostTypes.RESET_POSTS_IN_CHANNEL: { return {}; @@ -955,7 +954,7 @@ export function mergePostOrder(left: string[], right: string[], posts: Record = {}, action: AnyAction, prevPosts: Record) { +export function postsInThread(state: RelationOneToMany = {}, action: MMReduxAction, prevPosts: Record) { switch (action.type) { case PostTypes.RECEIVED_NEW_POST: case PostTypes.RECEIVED_POST: { @@ -1154,7 +1153,7 @@ export function postsInThread(state: RelationOneToMany = {}, action: } } -export function postEditHistory(state: Post[] = [], action: AnyAction) { +export function postEditHistory(state: Post[] = [], action: MMReduxAction) { switch (action.type) { case PostTypes.RECEIVED_POST_HISTORY: return action.data; @@ -1165,7 +1164,7 @@ export function postEditHistory(state: Post[] = [], action: AnyAction) { } } -function currentFocusedPostId(state = '', action: AnyAction) { +function currentFocusedPostId(state = '', action: MMReduxAction) { switch (action.type) { case PostTypes.RECEIVED_FOCUSED_POST: return action.data; @@ -1176,7 +1175,7 @@ function currentFocusedPostId(state = '', action: AnyAction) { } } -export function reactions(state: RelationOneToOne> = {}, action: AnyAction) { +export function reactions(state: RelationOneToOne> = {}, action: MMReduxAction) { switch (action.type) { case PostTypes.RECEIVED_REACTION: { const reaction = action.data as Reaction; @@ -1237,7 +1236,7 @@ export function reactions(state: RelationOneToOne } } -export function acknowledgements(state: RelationOneToOne> = {}, action: AnyAction) { +export function acknowledgements(state: RelationOneToOne> = {}, action: MMReduxAction) { switch (action.type) { case PostTypes.CREATE_ACK_POST_SUCCESS: { const ack = action.data as PostAcknowledgement; @@ -1349,7 +1348,7 @@ function storeAcknowledgementsForPost(state: any, post: Post) { }; } -export function openGraph(state: RelationOneToOne> = {}, action: AnyAction) { +export function openGraph(state: RelationOneToOne> = {}, action: MMReduxAction) { switch (action.type) { case PostTypes.RECEIVED_NEW_POST: case PostTypes.RECEIVED_POST: { @@ -1413,7 +1412,7 @@ function messagesHistory(state: Partial = { post: -1, comment: -1, }, -}, action: AnyAction) { +}, action: MMReduxAction) { switch (action.type) { case PostTypes.ADD_MESSAGE_INTO_HISTORY: { const nextIndex: Record = {}; @@ -1495,7 +1494,7 @@ export const zeroStateLimitedViews = { export function limitedViews( state: PostsState['limitedViews'] = zeroStateLimitedViews, - action: AnyAction, + action: MMReduxAction, ): PostsState['limitedViews'] { switch (action.type) { case PostTypes.RECEIVED_POSTS: @@ -1561,7 +1560,7 @@ export function limitedViews( } } -export default function reducer(state: Partial = {}, action: AnyAction) { +export default function reducer(state: Partial = {}, action: MMReduxAction) { const nextPosts = handlePosts(state.posts, action); const nextPostsInChannel = postsInChannel(state.postsInChannel, action, state.posts!, nextPosts); diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/preferences.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/preferences.ts index a3ce67cf59..b157b032f9 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/preferences.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/preferences.ts @@ -1,11 +1,11 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import type {PreferencesType, PreferenceType} from '@mattermost/types/preferences'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; import {PreferenceTypes, UserTypes} from 'mattermost-redux/action_types'; function getKey(preference: PreferenceType) { @@ -42,7 +42,7 @@ function setAllUserPreferences(preferences: PreferenceType[]): {[key: string]: P return nextState; } -function myPreferences(state: Record = {}, action: AnyAction) { +function myPreferences(state: Record = {}, action: MMReduxAction) { switch (action.type) { case PreferenceTypes.RECEIVED_ALL_PREFERENCES: return setAllPreferences(action.data); @@ -80,7 +80,7 @@ function myPreferences(state: Record = {}, action: AnyAc } } -function userPreferences(state: Record = {}, action: AnyAction) { +function userPreferences(state: Record = {}, action: MMReduxAction) { switch (action.type) { case PreferenceTypes.RECEIVED_USER_ALL_PREFERENCES: return setAllUserPreferences(action.data); diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/roles.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/roles.ts index 20d4e4994e..37e98d0a87 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/roles.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/roles.ts @@ -1,14 +1,14 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import type {Role} from '@mattermost/types/roles'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; import {RoleTypes, UserTypes} from 'mattermost-redux/action_types'; -function pending(state: Set = new Set(), action: AnyAction) { +function pending(state: Set = new Set(), action: MMReduxAction) { switch (action.type) { case RoleTypes.SET_PENDING_ROLES: return action.data; @@ -19,7 +19,7 @@ function pending(state: Set = new Set(), action: AnyAction) { } } -function roles(state: Record = {}, action: AnyAction) { +function roles(state: Record = {}, action: MMReduxAction) { switch (action.type) { case RoleTypes.RECEIVED_ROLES: { if (action.data) { diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/scheduled_posts.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/scheduled_posts.ts index c61608b4f1..ec70983af8 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/scheduled_posts.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/scheduled_posts.ts @@ -1,14 +1,14 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import type {ScheduledPost, ScheduledPostsState} from '@mattermost/types/schedule_post'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; import {ScheduledPostTypes, UserTypes} from 'mattermost-redux/action_types'; -function byId(state: ScheduledPostsState['byId'] = {}, action: AnyAction) { +function byId(state: ScheduledPostsState['byId'] = {}, action: MMReduxAction) { switch (action.type) { case ScheduledPostTypes.SCHEDULED_POSTS_RECEIVED: { const {scheduledPostsByTeamId} = action.data; @@ -51,7 +51,7 @@ function byId(state: ScheduledPostsState['byId'] = {}, action: AnyAction) { } } -function byTeamId(state: ScheduledPostsState['byTeamId'] = {}, action: AnyAction) { +function byTeamId(state: ScheduledPostsState['byTeamId'] = {}, action: MMReduxAction) { switch (action.type) { case ScheduledPostTypes.SCHEDULED_POSTS_RECEIVED: { const {scheduledPostsByTeamId} = action.data; @@ -111,7 +111,7 @@ function byTeamId(state: ScheduledPostsState['byTeamId'] = {}, action: AnyAction } } -function errorsByTeamId(state: ScheduledPostsState['errorsByTeamId'] = {}, action: AnyAction) { +function errorsByTeamId(state: ScheduledPostsState['errorsByTeamId'] = {}, action: MMReduxAction) { switch (action.type) { case ScheduledPostTypes.SCHEDULED_POSTS_RECEIVED: { const {scheduledPostsByTeamId} = action.data; @@ -172,7 +172,7 @@ function errorsByTeamId(state: ScheduledPostsState['errorsByTeamId'] = {}, actio } } -function byChannelOrThreadId(state: ScheduledPostsState['byChannelOrThreadId'] = {}, action: AnyAction) { +function byChannelOrThreadId(state: ScheduledPostsState['byChannelOrThreadId'] = {}, action: MMReduxAction) { switch (action.type) { case ScheduledPostTypes.SCHEDULED_POSTS_RECEIVED: { const {scheduledPostsByTeamId} = action.data; diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/schemes.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/schemes.ts index 7edad633c2..408bac48d9 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/schemes.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/schemes.ts @@ -1,16 +1,16 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import type {Scheme} from '@mattermost/types/schemes'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; import {SchemeTypes, UserTypes} from 'mattermost-redux/action_types'; function schemes(state: { [x: string]: Scheme; -} = {}, action: AnyAction): { +} = {}, action: MMReduxAction): { [x: string]: Scheme; } { switch (action.type) { diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/search.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/search.ts index 89389cf199..b717aad430 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/search.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/search.ts @@ -1,16 +1,16 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import type {Post} from '@mattermost/types/posts'; import type {PreferenceType} from '@mattermost/types/preferences'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; import {PostTypes, PreferenceTypes, SearchTypes, UserTypes} from 'mattermost-redux/action_types'; import {Preferences} from 'mattermost-redux/constants'; -function results(state: string[] = [], action: AnyAction) { +function results(state: string[] = [], action: MMReduxAction) { switch (action.type) { case SearchTypes.RECEIVED_SEARCH_POSTS: { if (action.isGettingMore) { @@ -37,7 +37,7 @@ function results(state: string[] = [], action: AnyAction) { } } -function fileResults(state: string[] = [], action: AnyAction) { +function fileResults(state: string[] = [], action: MMReduxAction) { switch (action.type) { case SearchTypes.RECEIVED_SEARCH_FILES: { if (action.isGettingMore) { @@ -54,7 +54,7 @@ function fileResults(state: string[] = [], action: AnyAction) { } } -function matches(state: Record = {}, action: AnyAction) { +function matches(state: Record = {}, action: MMReduxAction) { switch (action.type) { case SearchTypes.RECEIVED_SEARCH_POSTS: if (action.isGettingMore) { @@ -79,7 +79,7 @@ function matches(state: Record = {}, action: AnyAction) { } } -function flagged(state: string[] = [], action: AnyAction) { +function flagged(state: string[] = [], action: MMReduxAction) { switch (action.type) { case SearchTypes.RECEIVED_SEARCH_FLAGGED_POSTS: { return action.data.order; @@ -160,7 +160,7 @@ function removePinnedPost(state: Record, post: Post) { return state; } -function pinned(state: Record = {}, action: AnyAction) { +function pinned(state: Record = {}, action: MMReduxAction) { switch (action.type) { case SearchTypes.RECEIVED_SEARCH_PINNED_POSTS: { const {channelId, pinned: posts} = action.data; @@ -203,12 +203,11 @@ function pinned(state: Record = {}, action: AnyAction) { } } -function current(state: any = {}, action: AnyAction) { - const {data, type} = action; - switch (type) { +function current(state: any = {}, action: MMReduxAction) { + switch (action.type) { case SearchTypes.RECEIVED_SEARCH_TERM: { const nextState = {...state}; - const {teamId, params, isEnd, isFilesEnd} = data; + const {teamId, params, isEnd, isFilesEnd} = action.data; return { ...nextState, [teamId]: { @@ -226,7 +225,7 @@ function current(state: any = {}, action: AnyAction) { } } -function isSearchingTerm(state = false, action: AnyAction) { +function isSearchingTerm(state = false, action: MMReduxAction) { switch (action.type) { case SearchTypes.SEARCH_POSTS_REQUEST: return !action.isGettingMore; @@ -237,7 +236,7 @@ function isSearchingTerm(state = false, action: AnyAction) { } } -function isSearchGettingMore(state = false, action: AnyAction) { +function isSearchGettingMore(state = false, action: MMReduxAction) { switch (action.type) { case SearchTypes.SEARCH_POSTS_REQUEST: return action.isGettingMore; @@ -248,7 +247,7 @@ function isSearchGettingMore(state = false, action: AnyAction) { } } -function isLimitedResults(state = -1, action: AnyAction): number { +function isLimitedResults(state = -1, action: MMReduxAction): number { switch (action.type) { case SearchTypes.SEARCH_POSTS_REQUEST: { if (!action.isGettingMore) { diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/teams.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/teams.ts index e19045c501..3371debc0e 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/teams.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/teams.ts @@ -8,10 +8,11 @@ import type {Team, TeamMembership, TeamUnread} from '@mattermost/types/teams'; import type {UserProfile} from '@mattermost/types/users'; import type {RelationOneToOne, IDMappedObjects} from '@mattermost/types/utilities'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; import {AdminTypes, ChannelTypes, TeamTypes, UserTypes, SchemeTypes, GroupTypes} from 'mattermost-redux/action_types'; import {teamListToMap} from 'mattermost-redux/utils/team_utils'; -function currentTeamId(state = '', action: AnyAction) { +function currentTeamId(state = '', action: MMReduxAction) { switch (action.type) { case TeamTypes.SELECT_TEAM: return action.data; @@ -23,7 +24,7 @@ function currentTeamId(state = '', action: AnyAction) { } } -function teams(state: IDMappedObjects = {}, action: AnyAction) { +function teams(state: IDMappedObjects = {}, action: MMReduxAction) { switch (action.type) { case TeamTypes.RECEIVED_TEAMS_LIST: case SchemeTypes.RECEIVED_SCHEME_TEAMS: @@ -94,7 +95,7 @@ function teams(state: IDMappedObjects = {}, action: AnyAction) { } } -function myMembers(state: RelationOneToOne = {}, action: AnyAction) { +function myMembers(state: RelationOneToOne = {}, action: MMReduxAction) { function updateState(receivedTeams: IDMappedObjects = {}, currentState: RelationOneToOne = {}) { return Object.keys(receivedTeams).forEach((teamId) => { if (receivedTeams[teamId].delete_at > 0 && currentState[teamId]) { @@ -289,7 +290,7 @@ function myMembers(state: RelationOneToOne = {}, action: A } } -function membersInTeam(state: RelationOneToOne> = {}, action: AnyAction) { +function membersInTeam(state: RelationOneToOne> = {}, action: MMReduxAction) { switch (action.type) { case TeamTypes.RECEIVED_MEMBER_IN_TEAM: { const data = action.data; @@ -369,7 +370,7 @@ function membersInTeam(state: RelationOneToOne = {}, action: AnyAction) { +function groupsAssociatedToTeam(state: RelationOneToOne = {}, action: MMReduxAction) { switch (action.type) { case GroupTypes.RECEIVED_GROUP_ASSOCIATED_TO_TEAM: { const {teamID, groups} = action.data; @@ -483,7 +484,7 @@ function updateMyTeamMemberSchemeRoles(state: RelationOneToOne { +export const threadsReducer = (state: ThreadsState['threads'] = {}, action: MMReduxAction, extra: ExtraData) => { switch (action.type) { case ThreadTypes.RECEIVED_UNREAD_THREADS: case ThreadTypes.RECEIVED_THREADS: { @@ -165,7 +164,7 @@ const initialState = { // custom combineReducers function // enables passing data between reducers -function reducer(state: ThreadsState = initialState, action: AnyAction): ThreadsState { +function reducer(state: ThreadsState = initialState, action: MMReduxAction): ThreadsState { const extra: ExtraData = { threads: state.threads, }; diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/threads/threadsInTeam.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/threads/threadsInTeam.ts index 7f36cc0d82..088289d6e5 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/threads/threadsInTeam.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/threads/threadsInTeam.ts @@ -7,6 +7,7 @@ import type {Team} from '@mattermost/types/teams'; import type {ThreadsState, UserThread, UserThreadWithPost} from '@mattermost/types/threads'; import type {IDMappedObjects, RelationOneToMany} from '@mattermost/types/utilities'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; import {ChannelTypes, PostTypes, TeamTypes, ThreadTypes, UserTypes} from 'mattermost-redux/action_types'; import type {ExtraData} from './types'; @@ -242,7 +243,7 @@ function handleSingleTeamThreadRead(state: ThreadsState['unreadThreadsInTeam'], }; } -export const threadsInTeamReducer = (state: ThreadsState['threadsInTeam'] = {}, action: AnyAction, extra: ExtraData) => { +export const threadsInTeamReducer = (state: ThreadsState['threadsInTeam'] = {}, action: MMReduxAction, extra: ExtraData) => { switch (action.type) { case ThreadTypes.RECEIVED_THREAD: return handleReceivedThread(state, action, extra); @@ -262,7 +263,7 @@ export const threadsInTeamReducer = (state: ThreadsState['threadsInTeam'] = {}, return state; }; -export const unreadThreadsInTeamReducer = (state: ThreadsState['unreadThreadsInTeam'] = {}, action: AnyAction, extra: ExtraData) => { +export const unreadThreadsInTeamReducer = (state: ThreadsState['unreadThreadsInTeam'] = {}, action: MMReduxAction, extra: ExtraData) => { switch (action.type) { case ThreadTypes.READ_CHANGED_THREAD: { const {teamId} = action.data; diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/usage.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/usage.ts index 00bbe5e287..85ba9e9175 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/usage.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/usage.ts @@ -1,10 +1,9 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; - import type {CloudUsage} from '@mattermost/types/cloud'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; import {CloudTypes} from 'mattermost-redux/action_types'; const emptyUsage = { @@ -28,7 +27,7 @@ const emptyUsage = { }; // represents the usage associated with this workspace -export default function usage(state: CloudUsage = emptyUsage, action: AnyAction) { +export default function usage(state: CloudUsage = emptyUsage, action: MMReduxAction) { switch (action.type) { case CloudTypes.RECEIVED_MESSAGES_USAGE: { return { diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/users.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/users.ts index f414ab1243..4c910c7123 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/users.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/users.ts @@ -9,6 +9,7 @@ import type {Team} from '@mattermost/types/teams'; import type {UserProfile, UsersState} from '@mattermost/types/users'; import type {IDMappedObjects, RelationOneToManyUnique, RelationOneToOne} from '@mattermost/types/utilities'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; import {UserTypes, ChannelTypes} from 'mattermost-redux/action_types'; function profilesToSet(state: RelationOneToManyUnique, action: AnyAction) { @@ -88,7 +89,7 @@ function removeProfileFromSet(state: RelationOneToManyUnique, }; } -function currentUserId(state: UsersState['currentUserId'] = '', action: AnyAction) { +function currentUserId(state: UsersState['currentUserId'] = '', action: MMReduxAction) { switch (action.type) { case UserTypes.RECEIVED_ME: { const data = action.data; @@ -108,7 +109,7 @@ function currentUserId(state: UsersState['currentUserId'] = '', action: AnyActio return state; } -function mySessions(state: UsersState['mySessions'] = [], action: AnyAction) { +function mySessions(state: UsersState['mySessions'] = [], action: MMReduxAction) { switch (action.type) { case UserTypes.RECEIVED_SESSIONS: return [...action.data]; @@ -146,7 +147,7 @@ function mySessions(state: UsersState['mySessions'] = [], action: AnyAction) { } } -function myAudits(state: UsersState['myAudits'] = [], action: AnyAction) { +function myAudits(state: UsersState['myAudits'] = [], action: MMReduxAction) { switch (action.type) { case UserTypes.RECEIVED_AUDITS: return [...action.data]; @@ -218,7 +219,7 @@ function receiveUserProfile(state: IDMappedObjects, received: UserP }; } -function profiles(state: UsersState['profiles'] = {}, action: AnyAction) { +function profiles(state: UsersState['profiles'] = {}, action: MMReduxAction) { switch (action.type) { case UserTypes.RECEIVED_ME: case UserTypes.RECEIVED_PROFILE: { @@ -264,7 +265,7 @@ function profiles(state: UsersState['profiles'] = {}, action: AnyAction) { } } -function profilesInTeam(state: UsersState['profilesInTeam'] = {}, action: AnyAction) { +function profilesInTeam(state: UsersState['profilesInTeam'] = {}, action: MMReduxAction) { switch (action.type) { case UserTypes.RECEIVED_PROFILE_IN_TEAM: return addProfileToSet(state, action.data.id, action.data.user_id); @@ -292,7 +293,7 @@ function profilesInTeam(state: UsersState['profilesInTeam'] = {}, action: AnyAct } } -function profilesNotInTeam(state: UsersState['profilesNotInTeam'] = {}, action: AnyAction) { +function profilesNotInTeam(state: UsersState['profilesNotInTeam'] = {}, action: MMReduxAction) { switch (action.type) { case UserTypes.RECEIVED_PROFILE_NOT_IN_TEAM: return addProfileToSet(state, action.data.id, action.data.user_id); @@ -320,7 +321,7 @@ function profilesNotInTeam(state: UsersState['profilesNotInTeam'] = {}, action: } } -function profilesWithoutTeam(state: UsersState['profilesWithoutTeam'] = new Set(), action: AnyAction) { +function profilesWithoutTeam(state: UsersState['profilesWithoutTeam'] = new Set(), action: MMReduxAction) { switch (action.type) { case UserTypes.RECEIVED_PROFILE_WITHOUT_TEAM: { const nextSet = new Set(state); @@ -351,7 +352,7 @@ function profilesWithoutTeam(state: UsersState['profilesWithoutTeam'] = new Set< } } -function profilesInChannel(state: UsersState['profilesInChannel'] = {}, action: AnyAction) { +function profilesInChannel(state: UsersState['profilesInChannel'] = {}, action: MMReduxAction) { switch (action.type) { case UserTypes.RECEIVED_PROFILE_IN_CHANNEL: return addProfileToSet(state, action.data.id, action.data.user_id); @@ -383,7 +384,7 @@ function profilesInChannel(state: UsersState['profilesInChannel'] = {}, action: } } -function profilesNotInChannel(state: UsersState['profilesNotInChannel'] = {}, action: AnyAction) { +function profilesNotInChannel(state: UsersState['profilesNotInChannel'] = {}, action: MMReduxAction) { switch (action.type) { case UserTypes.RECEIVED_PROFILE_NOT_IN_CHANNEL: return addProfileToSet(state, action.data.id, action.data.user_id); @@ -422,7 +423,7 @@ function profilesNotInChannel(state: UsersState['profilesNotInChannel'] = {}, ac } } -function profilesInGroup(state: UsersState['profilesInGroup'] = {}, action: AnyAction) { +function profilesInGroup(state: UsersState['profilesInGroup'] = {}, action: MMReduxAction) { switch (action.type) { case UserTypes.RECEIVED_PROFILES_LIST_IN_GROUP: { return profileListToSet(state, action); @@ -468,7 +469,7 @@ function profilesInGroup(state: UsersState['profilesInGroup'] = {}, action: AnyA } } -function profilesNotInGroup(state: UsersState['profilesNotInGroup'] = {}, action: AnyAction) { +function profilesNotInGroup(state: UsersState['profilesNotInGroup'] = {}, action: MMReduxAction) { switch (action.type) { case UserTypes.RECEIVED_PROFILES_FOR_GROUP: { const id = action.id; @@ -499,7 +500,7 @@ function profilesNotInGroup(state: UsersState['profilesNotInGroup'] = {}, action } } -function dndEndTimes(state: UsersState['dndEndTimes'] = {}, action: AnyAction) { +function dndEndTimes(state: UsersState['dndEndTimes'] = {}, action: MMReduxAction) { switch (action.type) { case UserTypes.RECEIVED_DND_END_TIMES: { return {...state, ...action.data}; @@ -520,7 +521,7 @@ function dndEndTimes(state: UsersState['dndEndTimes'] = {}, action: AnyAction) { } } -function statuses(state: RelationOneToOne = {}, action: AnyAction) { +function statuses(state: RelationOneToOne = {}, action: MMReduxAction) { switch (action.type) { case UserTypes.RECEIVED_STATUSES: { return {...state, ...action.data}; @@ -542,7 +543,7 @@ function statuses(state: RelationOneToOne = {}, action: Any } } -function isManualStatus(state: RelationOneToOne = {}, action: AnyAction) { +function isManualStatus(state: RelationOneToOne = {}, action: MMReduxAction) { switch (action.type) { case UserTypes.RECEIVED_STATUSES_IS_MANUAL: { return {...state, ...action.data}; @@ -564,7 +565,7 @@ function isManualStatus(state: RelationOneToOne = {}, acti } } -function myUserAccessTokens(state: UsersState['myUserAccessTokens'] = {}, action: AnyAction) { +function myUserAccessTokens(state: UsersState['myUserAccessTokens'] = {}, action: MMReduxAction) { switch (action.type) { case UserTypes.RECEIVED_MY_USER_ACCESS_TOKEN: { const nextState = {...state}; @@ -615,7 +616,7 @@ function myUserAccessTokens(state: UsersState['myUserAccessTokens'] = {}, action } } -function stats(state: UsersState['stats'] = {}, action: AnyAction) { +function stats(state: UsersState['stats'] = {}, action: MMReduxAction) { switch (action.type) { case UserTypes.RECEIVED_USER_STATS: { const stat = action.data; @@ -629,7 +630,7 @@ function stats(state: UsersState['stats'] = {}, action: AnyAction) { } } -function filteredStats(state: UsersState['filteredStats'] = {}, action: AnyAction) { +function filteredStats(state: UsersState['filteredStats'] = {}, action: MMReduxAction) { switch (action.type) { case UserTypes.RECEIVED_FILTERED_USER_STATS: { const stat = action.data; @@ -643,7 +644,7 @@ function filteredStats(state: UsersState['filteredStats'] = {}, action: AnyActio } } -function lastActivity(state: UsersState['lastActivity'] = {}, action: AnyAction) { +function lastActivity(state: UsersState['lastActivity'] = {}, action: MMReduxAction) { switch (action.type) { case UserTypes.RECEIVED_LAST_ACTIVITIES: { return {...state, ...action.data}; diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/errors/index.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/errors/index.ts index d1362a1eee..b21a366180 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/errors/index.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/errors/index.ts @@ -1,11 +1,10 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; - +import type {MMReduxAction} from 'mattermost-redux/action_types'; import {ErrorTypes} from 'mattermost-redux/action_types'; -export default ((state: Array<{error: any;displayable?: boolean;date: string}> = [], action: AnyAction) => { +export default ((state: Array<{error: any;displayable?: boolean;date: string}> = [], action: MMReduxAction) => { switch (action.type) { case ErrorTypes.DISMISS_ERROR: { const nextState = [...state]; diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/websocket.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/websocket.ts index 3d2012dc5e..159d19cdf0 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/websocket.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/websocket.ts @@ -1,8 +1,7 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; - +import type {MMReduxAction} from 'mattermost-redux/action_types'; import {GeneralTypes, UserTypes} from 'mattermost-redux/action_types'; function getInitialState() { @@ -15,7 +14,7 @@ function getInitialState() { }; } -export default function reducer(state = getInitialState(), action: AnyAction) { +export default function reducer(state = getInitialState(), action: MMReduxAction) { if (!state.connected && action.type === GeneralTypes.WEBSOCKET_SUCCESS) { return { ...state, @@ -35,10 +34,6 @@ export default function reducer(state = getInitialState(), action: AnyAction) { return getInitialState(); } - if (action.type === UserTypes.LOGOUT_SUCCESS) { - return getInitialState(); - } - if (action.type === GeneralTypes.SET_CONNECTION_ID) { return { ...state, diff --git a/webapp/channels/src/packages/mattermost-redux/src/types/actions.ts b/webapp/channels/src/packages/mattermost-redux/src/types/actions.ts index 633e221985..ad0fe536f8 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/types/actions.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/types/actions.ts @@ -1,11 +1,13 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {Action, AnyAction, Dispatch} from 'redux'; +import type {Action, Dispatch} from 'redux'; import type {ThunkAction} from 'redux-thunk'; import type {GlobalState} from '@mattermost/types/store'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; + /** * This file extends Redux's Dispatch type and bindActionCreators function to support Thunk actions by default. * @@ -13,7 +15,7 @@ import type {GlobalState} from '@mattermost/types/store'; */ import 'redux-thunk/extend-redux'; -export type DispatchFunc = Dispatch; +export type DispatchFunc = Dispatch; export type GetStateFunc = () => State; /** @@ -28,13 +30,21 @@ export type ActionResult = { * ActionFunc should be the return type of most non-async Thunk action creators. If that action requires web app state, * the second type parameter should be used to pass the version of GlobalState from 'types/store'. */ -export type ActionFunc = ThunkAction, State, unknown, Action>; +export type ActionFunc< + Data = unknown, + State extends GlobalState = GlobalState, + TAction extends Action = MMReduxAction +> = ThunkAction, State, unknown, TAction>; /** * ActionFuncAsync should be the return type of most async Thunk action creators. If that action requires web app state, * the second type parameter should be used to pass the version of GlobalState from 'types/store'. */ -export type ActionFuncAsync = ThunkAction>, State, unknown, Action>; +export type ActionFuncAsync< + Data = unknown, + State extends GlobalState = GlobalState, + TAction extends Action = MMReduxAction +> = ThunkAction>, State, unknown, TAction>; /** * ThunkActionFunc is a type that extends ActionFunc with defaults that match our other ActionFunc variants to save @@ -42,4 +52,8 @@ export type ActionFuncAsync = ThunkAction; +export type ThunkActionFunc< + ReturnType, + State extends GlobalState = GlobalState, + TAction extends Action = MMReduxAction +> = ThunkAction; diff --git a/webapp/channels/src/reducers/plugins/index.ts b/webapp/channels/src/reducers/plugins/index.ts index 5b9eceb9c2..a537096c55 100644 --- a/webapp/channels/src/reducers/plugins/index.ts +++ b/webapp/channels/src/reducers/plugins/index.ts @@ -13,6 +13,7 @@ import {UserTypes} from 'mattermost-redux/action_types'; import {ActionTypes} from 'utils/constants'; import {extractPluginConfiguration} from 'utils/plugins/plugin_setting_extraction'; +import type {MMAction} from 'types/store'; import type { PluginsState, PluginComponent, @@ -144,7 +145,7 @@ function removePluginComponent(state: PluginsState['components'], action: AnyAct return newState; } -function plugins(state: IDMappedObjects = {}, action: AnyAction) { +function plugins(state: IDMappedObjects = {}, action: MMAction) { switch (action.type) { case ActionTypes.RECEIVED_WEBAPP_PLUGINS: { if (action.data) { @@ -205,7 +206,7 @@ const initialComponents: PluginsState['components'] = { SlashCommandWillBePosted: [], }; -function components(state: PluginsState['components'] = initialComponents, action: AnyAction) { +function components(state: PluginsState['components'] = initialComponents, action: MMAction) { switch (action.type) { case ActionTypes.RECEIVED_PLUGIN_COMPONENT: { if (action.name && action.data) { @@ -242,7 +243,7 @@ function components(state: PluginsState['components'] = initialComponents, actio } } -function postTypes(state: PluginsState['postTypes'] = {}, action: AnyAction) { +function postTypes(state: PluginsState['postTypes'] = {}, action: MMAction) { switch (action.type) { case ActionTypes.RECEIVED_PLUGIN_POST_COMPONENT: { if (action.data) { @@ -271,7 +272,7 @@ function postTypes(state: PluginsState['postTypes'] = {}, action: AnyAction) { } } -function postCardTypes(state: PluginsState['postTypes'] = {}, action: AnyAction) { +function postCardTypes(state: PluginsState['postTypes'] = {}, action: MMAction) { switch (action.type) { case ActionTypes.RECEIVED_PLUGIN_POST_CARD_COMPONENT: { if (action.data) { @@ -300,7 +301,7 @@ function postCardTypes(state: PluginsState['postTypes'] = {}, action: AnyAction) } } -function adminConsoleReducers(state: {[pluginId: string]: any} = {}, action: AnyAction) { +function adminConsoleReducers(state: {[pluginId: string]: any} = {}, action: MMAction) { switch (action.type) { case ActionTypes.RECEIVED_ADMIN_CONSOLE_REDUCER: { if (action.data) { @@ -333,7 +334,7 @@ function adminConsoleReducers(state: {[pluginId: string]: any} = {}, action: Any } } -function adminConsoleCustomComponents(state: {[pluginId: string]: Record} = {}, action: AnyAction) { +function adminConsoleCustomComponents(state: {[pluginId: string]: Record} = {}, action: MMAction) { switch (action.type) { case ActionTypes.RECEIVED_ADMIN_CONSOLE_CUSTOM_COMPONENT: { if (!action.data) { @@ -371,7 +372,7 @@ function adminConsoleCustomComponents(state: {[pluginId: string]: Record} = {}, action: AnyAction) { +function adminConsoleCustomSections(state: {[pluginId: string]: Record} = {}, action: MMAction) { switch (action.type) { case ActionTypes.RECEIVED_ADMIN_CONSOLE_CUSTOM_SECTION: { if (!action.data) { @@ -409,7 +410,7 @@ function adminConsoleCustomSections(state: {[pluginId: string]: Record = {}, action: AnyAction) { +function storage(state: Record = {}, action: MMAction) { switch (action.type) { case REHYDRATE: { if (!action.payload || action.key !== 'storage') { @@ -134,7 +135,7 @@ function migrateDrafts(state: any) { return drafts; } -function initialized(state = false, action: AnyAction) { +function initialized(state = false, action: MMAction) { switch (action.type) { case General.STORE_REHYDRATION_COMPLETE: return state || action.complete; diff --git a/webapp/channels/src/reducers/views/add_channel_cta_dropdown.ts b/webapp/channels/src/reducers/views/add_channel_cta_dropdown.ts index 6029b8704e..75b026b861 100644 --- a/webapp/channels/src/reducers/views/add_channel_cta_dropdown.ts +++ b/webapp/channels/src/reducers/views/add_channel_cta_dropdown.ts @@ -1,12 +1,13 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import {ActionTypes} from 'utils/constants'; -export function isOpen(state = false, action: AnyAction) { +import type {MMAction} from 'types/store'; + +export function isOpen(state = false, action: MMAction) { switch (action.type) { case ActionTypes.ADD_CHANNEL_CTA_DROPDOWN_TOGGLE: return action.open; diff --git a/webapp/channels/src/reducers/views/add_channel_dropdown.ts b/webapp/channels/src/reducers/views/add_channel_dropdown.ts index e7ac7968ce..8b00830c65 100644 --- a/webapp/channels/src/reducers/views/add_channel_dropdown.ts +++ b/webapp/channels/src/reducers/views/add_channel_dropdown.ts @@ -1,12 +1,13 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import {ActionTypes} from 'utils/constants'; -export function isOpen(state = false, action: AnyAction) { +import type {MMAction} from 'types/store'; + +export function isOpen(state = false, action: MMAction) { switch (action.type) { case ActionTypes.ADD_CHANNEL_DROPDOWN_TOGGLE: return action.open; diff --git a/webapp/channels/src/reducers/views/admin.test.ts b/webapp/channels/src/reducers/views/admin.test.ts index 5dcf2efa3e..3ea1f92c84 100644 --- a/webapp/channels/src/reducers/views/admin.test.ts +++ b/webapp/channels/src/reducers/views/admin.test.ts @@ -8,7 +8,7 @@ import {needsLoggedInLimitReachedCheck} from './admin'; describe('views/admin reducers', () => { describe('needsLoggedInLimitReachedCheck', () => { it('defaults to false', () => { - const actual = needsLoggedInLimitReachedCheck(undefined, {type: 'asdf'}); + const actual = needsLoggedInLimitReachedCheck(undefined, {type: undefined}); expect(actual).toBe(false); }); diff --git a/webapp/channels/src/reducers/views/admin.ts b/webapp/channels/src/reducers/views/admin.ts index cfac32fbc8..028baffac4 100644 --- a/webapp/channels/src/reducers/views/admin.ts +++ b/webapp/channels/src/reducers/views/admin.ts @@ -1,7 +1,6 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import {CursorPaginationDirection} from '@mattermost/types/reports'; @@ -10,6 +9,7 @@ import {UserTypes} from 'mattermost-redux/action_types'; import {ActionTypes} from 'utils/constants'; +import type {MMAction} from 'types/store'; import type {AdminConsoleUserManagementTableProperties} from 'types/store/views'; const navigationBlockInitialState = { @@ -18,7 +18,7 @@ const navigationBlockInitialState = { showNavigationPrompt: false, }; -function navigationBlock(state = navigationBlockInitialState, action: AnyAction) { +function navigationBlock(state = navigationBlockInitialState, action: MMAction) { switch (action.type) { case ActionTypes.SET_NAVIGATION_BLOCKED: return {...state, blocked: action.blocked}; @@ -49,7 +49,7 @@ function navigationBlock(state = navigationBlockInitialState, action: AnyAction) } } -export function needsLoggedInLimitReachedCheck(state = false, action: AnyAction) { +export function needsLoggedInLimitReachedCheck(state = false, action: MMAction) { switch (action.type) { case ActionTypes.NEEDS_LOGGED_IN_LIMIT_REACHED_CHECK: return action.data; @@ -74,7 +74,7 @@ export const adminConsoleUserManagementTablePropertiesInitialState: AdminConsole filterRole: '', }; -export function adminConsoleUserManagementTableProperties(state = adminConsoleUserManagementTablePropertiesInitialState, action: AnyAction) { +export function adminConsoleUserManagementTableProperties(state = adminConsoleUserManagementTablePropertiesInitialState, action: MMAction) { switch (action.type) { case ActionTypes.SET_ADMIN_CONSOLE_USER_MANAGEMENT_TABLE_PROPERTIES: { return {...state, ...action.data}; diff --git a/webapp/channels/src/reducers/views/announcement_bar.ts b/webapp/channels/src/reducers/views/announcement_bar.ts index 804483f1d4..c14475a1a5 100644 --- a/webapp/channels/src/reducers/views/announcement_bar.ts +++ b/webapp/channels/src/reducers/views/announcement_bar.ts @@ -1,14 +1,15 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import {UserTypes} from 'mattermost-redux/action_types'; import {ActionTypes} from 'utils/constants'; -function announcementBarState(state = {announcementBarCount: 0}, action: AnyAction) { +import type {MMAction} from 'types/store'; + +function announcementBarState(state = {announcementBarCount: 0}, action: MMAction) { switch (action.type) { case ActionTypes.TRACK_ANNOUNCEMENT_BAR: return { diff --git a/webapp/channels/src/reducers/views/browser.ts b/webapp/channels/src/reducers/views/browser.ts index 662ad50efb..9d011b9657 100644 --- a/webapp/channels/src/reducers/views/browser.ts +++ b/webapp/channels/src/reducers/views/browser.ts @@ -1,12 +1,13 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import {ActionTypes, WindowSizes} from 'utils/constants'; -function focused(state = true, action: AnyAction) { +import type {MMAction} from 'types/store'; + +function focused(state = true, action: MMAction) { switch (action.type) { case ActionTypes.BROWSER_CHANGE_FOCUS: return action.focus; @@ -15,7 +16,7 @@ function focused(state = true, action: AnyAction) { } } -function windowSize(state = WindowSizes.DESKTOP_VIEW, action: AnyAction) { +function windowSize(state = WindowSizes.DESKTOP_VIEW, action: MMAction) { switch (action.type) { case ActionTypes.BROWSER_WINDOW_RESIZED: return action.data; diff --git a/webapp/channels/src/reducers/views/channel.ts b/webapp/channels/src/reducers/views/channel.ts index 7d4ff80643..ad5144ce8b 100644 --- a/webapp/channels/src/reducers/views/channel.ts +++ b/webapp/channels/src/reducers/views/channel.ts @@ -1,14 +1,15 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import {ChannelTypes, PostTypes, UserTypes, GeneralTypes} from 'mattermost-redux/action_types'; import {ActionTypes, Constants} from 'utils/constants'; -function postVisibility(state: {[channelId: string]: number} = {}, action: AnyAction) { +import type {MMAction} from 'types/store'; + +function postVisibility(state: {[channelId: string]: number} = {}, action: MMAction) { switch (action.type) { case ChannelTypes.SELECT_CHANNEL: { const nextState = {...state}; @@ -41,7 +42,7 @@ function postVisibility(state: {[channelId: string]: number} = {}, action: AnyAc } } -function lastChannelViewTime(state: {[channelId: string]: number} = {}, action: AnyAction) { +function lastChannelViewTime(state: {[channelId: string]: number} = {}, action: MMAction) { switch (action.type) { case ActionTypes.SELECT_CHANNEL_WITH_MEMBER: { if (action.member) { @@ -69,7 +70,7 @@ function lastChannelViewTime(state: {[channelId: string]: number} = {}, action: } } -function loadingPosts(state: {[channelId: string]: boolean} = {}, action: AnyAction) { +function loadingPosts(state: {[channelId: string]: boolean} = {}, action: MMAction) { switch (action.type) { case ActionTypes.LOADING_POSTS: { const nextState = {...state}; @@ -84,7 +85,7 @@ function loadingPosts(state: {[channelId: string]: boolean} = {}, action: AnyAct } } -function focusedPostId(state = '', action: AnyAction) { +function focusedPostId(state = '', action: MMAction) { switch (action.type) { case ActionTypes.RECEIVED_FOCUSED_POST: return action.data; @@ -98,7 +99,7 @@ function focusedPostId(state = '', action: AnyAction) { } } -function mobileView(state = false, action: AnyAction) { +function mobileView(state = false, action: MMAction) { switch (action.type) { case ActionTypes.UPDATE_MOBILE_VIEW: return action.data; @@ -109,7 +110,7 @@ function mobileView(state = false, action: AnyAction) { } // lastUnreadChannel tracks if the current channel was unread and if it had mentions when the user switched to it. -function lastUnreadChannel(state: ({channelId: string; hadMentions: boolean}) | null = null, action: AnyAction) { +function lastUnreadChannel(state: ({channelId: string; hadMentions: boolean}) | null = null, action: MMAction) { switch (action.type) { case ChannelTypes.LEAVE_CHANNEL: if (action.data.id === state?.channelId) { @@ -140,7 +141,7 @@ function lastUnreadChannel(state: ({channelId: string; hadMentions: boolean}) | } } -function lastGetPosts(state: {[channelId: string]: number} = {}, action: AnyAction) { +function lastGetPosts(state: {[channelId: string]: number} = {}, action: MMAction) { switch (action.type) { case ActionTypes.RECEIVED_POSTS_FOR_CHANNEL_AT_TIME: return { @@ -154,7 +155,7 @@ function lastGetPosts(state: {[channelId: string]: number} = {}, action: AnyActi } } -function toastStatus(state = false, action: AnyAction) { +function toastStatus(state = false, action: MMAction) { switch (action.type) { case ActionTypes.SELECT_CHANNEL_WITH_MEMBER: return false; @@ -167,7 +168,7 @@ function toastStatus(state = false, action: AnyAction) { } } -function channelPrefetchStatus(state: {[channelId: string]: string} = {}, action: AnyAction) { +function channelPrefetchStatus(state: {[channelId: string]: string} = {}, action: MMAction) { switch (action.type) { case ActionTypes.PREFETCH_POSTS_FOR_CHANNEL: return { diff --git a/webapp/channels/src/reducers/views/channel_selector_modal.ts b/webapp/channels/src/reducers/views/channel_selector_modal.ts index 7e88fb1f4a..b5b4d16913 100644 --- a/webapp/channels/src/reducers/views/channel_selector_modal.ts +++ b/webapp/channels/src/reducers/views/channel_selector_modal.ts @@ -1,14 +1,15 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import type {Channel} from '@mattermost/types/channels'; import {ChannelTypes, UserTypes} from 'mattermost-redux/action_types'; -function channels(state: string[] = [], action: AnyAction) { +import type {MMAction} from 'types/store'; + +function channels(state: string[] = [], action: MMAction) { switch (action.type) { case ChannelTypes.RECEIVED_ALL_CHANNELS: return action.data.map((v: Channel) => v.id); diff --git a/webapp/channels/src/reducers/views/channel_sidebar.ts b/webapp/channels/src/reducers/views/channel_sidebar.ts index 24052fa69f..c132f55811 100644 --- a/webapp/channels/src/reducers/views/channel_sidebar.ts +++ b/webapp/channels/src/reducers/views/channel_sidebar.ts @@ -1,7 +1,6 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import type {ChannelCategory} from '@mattermost/types/channel_categories'; @@ -11,9 +10,9 @@ import {removeItem} from 'mattermost-redux/utils/array_utils'; import {ActionTypes} from 'utils/constants'; -import type {DraggingState} from 'types/store'; +import type {DraggingState, MMAction} from 'types/store'; -export function unreadFilterEnabled(state = false, action: AnyAction) { +export function unreadFilterEnabled(state = false, action: MMAction) { switch (action.type) { case ActionTypes.SET_UNREAD_FILTER_ENABLED: return action.enabled; @@ -25,7 +24,7 @@ export function unreadFilterEnabled(state = false, action: AnyAction) { } } -export function draggingState(state: DraggingState = {}, action: AnyAction): DraggingState { +export function draggingState(state: DraggingState = {}, action: MMAction): DraggingState { switch (action.type) { case ActionTypes.SIDEBAR_DRAGGING_SET_STATE: return { @@ -42,7 +41,7 @@ export function draggingState(state: DraggingState = {}, action: AnyAction): Dra } } -export function newCategoryIds(state: string[] = [], action: AnyAction): string[] { +export function newCategoryIds(state: string[] = [], action: MMAction): string[] { switch (action.type) { case ActionTypes.ADD_NEW_CATEGORY_ID: return [...state, action.data]; @@ -74,7 +73,7 @@ export function newCategoryIds(state: string[] = [], action: AnyAction): string[ } } -export function multiSelectedChannelIds(state: string[] = [], action: AnyAction): string[] { +export function multiSelectedChannelIds(state: string[] = [], action: MMAction): string[] { switch (action.type) { case ActionTypes.MULTISELECT_CHANNEL: // Channel was not previously selected @@ -116,7 +115,7 @@ export function multiSelectedChannelIds(state: string[] = [], action: AnyAction) } } -export function lastSelectedChannel(state = '', action: AnyAction): string { +export function lastSelectedChannel(state = '', action: MMAction): string { switch (action.type) { case ActionTypes.MULTISELECT_CHANNEL: case ActionTypes.MULTISELECT_CHANNEL_ADD: diff --git a/webapp/channels/src/reducers/views/drafts.ts b/webapp/channels/src/reducers/views/drafts.ts index 6acf5298de..530c206b4d 100644 --- a/webapp/channels/src/reducers/views/drafts.ts +++ b/webapp/channels/src/reducers/views/drafts.ts @@ -1,12 +1,13 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import {ActionTypes} from 'utils/constants'; -function remotes(state: Record = {}, action: AnyAction) { +import type {MMAction} from 'types/store'; + +function remotes(state: Record = {}, action: MMAction) { switch (action.type) { case ActionTypes.SET_DRAFT_SOURCE: return { diff --git a/webapp/channels/src/reducers/views/emoji.ts b/webapp/channels/src/reducers/views/emoji.ts index 95c6389a15..b04c48477a 100644 --- a/webapp/channels/src/reducers/views/emoji.ts +++ b/webapp/channels/src/reducers/views/emoji.ts @@ -1,14 +1,15 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import {UserTypes} from 'mattermost-redux/action_types'; import {ActionTypes, Locations} from 'utils/constants'; -function emojiPickerCustomPage(state = 0, action: AnyAction) { +import type {MMAction} from 'types/store'; + +function emojiPickerCustomPage(state = 0, action: MMAction) { switch (action.type) { case ActionTypes.INCREMENT_EMOJI_PICKER_PAGE: return state + 1; @@ -19,7 +20,7 @@ function emojiPickerCustomPage(state = 0, action: AnyAction) { } } -function shortcutReactToLastPostEmittedFrom(state = '', action: AnyAction) { +function shortcutReactToLastPostEmittedFrom(state = '', action: MMAction) { switch (action.type) { case ActionTypes.EMITTED_SHORTCUT_REACT_TO_LAST_POST: if (action.payload === Locations.CENTER) { diff --git a/webapp/channels/src/reducers/views/i18n.ts b/webapp/channels/src/reducers/views/i18n.ts index 9f51fa6ff8..5d091cb699 100644 --- a/webapp/channels/src/reducers/views/i18n.ts +++ b/webapp/channels/src/reducers/views/i18n.ts @@ -1,14 +1,14 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import {ActionTypes} from 'utils/constants'; +import type {MMAction} from 'types/store'; import type {Translations} from 'types/store/i18n'; -function translations(state: Translations = {}, action: AnyAction) { +function translations(state: Translations = {}, action: MMAction) { switch (action.type) { case ActionTypes.RECEIVED_TRANSLATIONS: return { diff --git a/webapp/channels/src/reducers/views/lhs.ts b/webapp/channels/src/reducers/views/lhs.ts index d3eb097326..ca71fbeaa6 100644 --- a/webapp/channels/src/reducers/views/lhs.ts +++ b/webapp/channels/src/reducers/views/lhs.ts @@ -1,7 +1,6 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import {TeamTypes, UserTypes} from 'mattermost-redux/action_types'; @@ -10,7 +9,9 @@ import {SidebarSize} from 'components/resizable_sidebar/constants'; import {ActionTypes} from 'utils/constants'; -function isOpen(state = false, action: AnyAction) { +import type {MMAction} from 'types/store'; + +function isOpen(state = false, action: MMAction) { switch (action.type) { case ActionTypes.TOGGLE_LHS: return !state; @@ -32,7 +33,7 @@ function isOpen(state = false, action: AnyAction) { } } -function size(state = SidebarSize.MEDIUM, action: AnyAction) { +function size(state = SidebarSize.MEDIUM, action: MMAction) { switch (action.type) { case ActionTypes.SET_LHS_SIZE: return action.size; @@ -41,7 +42,7 @@ function size(state = SidebarSize.MEDIUM, action: AnyAction) { } } -function currentStaticPageId(state = '', action: AnyAction) { +function currentStaticPageId(state = '', action: MMAction) { switch (action.type) { case ActionTypes.SELECT_STATIC_PAGE: return action.data; diff --git a/webapp/channels/src/reducers/views/marketplace.ts b/webapp/channels/src/reducers/views/marketplace.ts index 31798e2e57..109385a54d 100644 --- a/webapp/channels/src/reducers/views/marketplace.ts +++ b/webapp/channels/src/reducers/views/marketplace.ts @@ -1,7 +1,6 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import type {MarketplaceApp, MarketplacePlugin} from '@mattermost/types/marketplace'; @@ -10,8 +9,10 @@ import {UserTypes} from 'mattermost-redux/action_types'; import {ActionTypes, ModalIdentifiers} from 'utils/constants'; +import type {MMAction} from 'types/store'; + // plugins tracks the set of marketplace plugins returned by the server -function plugins(state: MarketplacePlugin[] = [], action: AnyAction): MarketplacePlugin[] { +function plugins(state: MarketplacePlugin[] = [], action: MMAction): MarketplacePlugin[] { switch (action.type) { case ActionTypes.RECEIVED_MARKETPLACE_PLUGINS: return action.plugins ? action.plugins : []; @@ -31,7 +32,7 @@ function plugins(state: MarketplacePlugin[] = [], action: AnyAction): Marketplac } // apps tracks the set of marketplace apps returned by the apps plugin -function apps(state: MarketplaceApp[] = [], action: AnyAction): MarketplaceApp[] { +function apps(state: MarketplaceApp[] = [], action: MMAction): MarketplaceApp[] { switch (action.type) { case ActionTypes.RECEIVED_MARKETPLACE_APPS: return action.apps ? action.apps : []; @@ -51,7 +52,7 @@ function apps(state: MarketplaceApp[] = [], action: AnyAction): MarketplaceApp[] } // installing tracks the items pending installation -function installing(state: {[id: string]: boolean} = {}, action: AnyAction): {[id: string]: boolean} { +function installing(state: {[id: string]: boolean} = {}, action: MMAction): {[id: string]: boolean} { switch (action.type) { case ActionTypes.INSTALLING_MARKETPLACE_ITEM: if (state[action.id]) { @@ -90,7 +91,7 @@ function installing(state: {[id: string]: boolean} = {}, action: AnyAction): {[i } // errors tracks the error messages for items that failed installation -function errors(state: {[id: string]: string} = {}, action: AnyAction): {[id: string]: string} { +function errors(state: {[id: string]: string} = {}, action: MMAction): {[id: string]: string} { switch (action.type) { case ActionTypes.INSTALLING_MARKETPLACE_ITEM_FAILED: return { @@ -125,7 +126,7 @@ function errors(state: {[id: string]: string} = {}, action: AnyAction): {[id: st } // filter tracks the current marketplace search query filter -function filter(state = '', action: AnyAction): string { +function filter(state = '', action: MMAction): string { switch (action.type) { case ActionTypes.FILTER_MARKETPLACE_LISTING: return action.filter; diff --git a/webapp/channels/src/reducers/views/modals.ts b/webapp/channels/src/reducers/views/modals.ts index da94355910..3d0a828315 100644 --- a/webapp/channels/src/reducers/views/modals.ts +++ b/webapp/channels/src/reducers/views/modals.ts @@ -1,16 +1,16 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import {GeneralTypes, UserTypes} from 'mattermost-redux/action_types'; import {ActionTypes} from 'utils/constants'; +import type {MMAction} from 'types/store'; import type {ViewsState} from 'types/store/views'; -export function modalState(state: ViewsState['modals']['modalState'] = {}, action: AnyAction) { +export function modalState(state: ViewsState['modals']['modalState'] = {}, action: MMAction) { switch (action.type) { case ActionTypes.MODAL_OPEN: return { @@ -34,7 +34,7 @@ export function modalState(state: ViewsState['modals']['modalState'] = {}, actio } } -export function showLaunchingWorkspace(state = false, action: AnyAction) { +export function showLaunchingWorkspace(state = false, action: MMAction) { switch (action.type) { case GeneralTypes.SHOW_LAUNCHING_WORKSPACE: return action.open; diff --git a/webapp/channels/src/reducers/views/notice.ts b/webapp/channels/src/reducers/views/notice.ts index 6c21c836a2..1378ef6c7f 100644 --- a/webapp/channels/src/reducers/views/notice.ts +++ b/webapp/channels/src/reducers/views/notice.ts @@ -1,14 +1,15 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import {UserTypes} from 'mattermost-redux/action_types'; import {ActionTypes} from 'utils/constants'; -function hasBeenDismissed(state: Record = {}, action: AnyAction) { +import type {MMAction} from 'types/store'; + +function hasBeenDismissed(state: Record = {}, action: MMAction) { switch (action.type) { case ActionTypes.DISMISS_NOTICE: return {...state, [action.data]: true}; diff --git a/webapp/channels/src/reducers/views/onboarding_tasks.ts b/webapp/channels/src/reducers/views/onboarding_tasks.ts index e0cf887dd4..01abc3ab9f 100644 --- a/webapp/channels/src/reducers/views/onboarding_tasks.ts +++ b/webapp/channels/src/reducers/views/onboarding_tasks.ts @@ -1,12 +1,13 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import {ActionTypes} from 'utils/constants'; -export function isShowOnboardingTaskCompletion(state = false, action: AnyAction) { +import type {MMAction} from 'types/store'; + +export function isShowOnboardingTaskCompletion(state = false, action: MMAction) { switch (action.type) { case ActionTypes.SHOW_ONBOARDING_TASK_COMPLETION: return action.open; @@ -15,7 +16,7 @@ export function isShowOnboardingTaskCompletion(state = false, action: AnyAction) } } -export function isShowOnboardingCompleteProfileTour(state = false, action: AnyAction) { +export function isShowOnboardingCompleteProfileTour(state = false, action: MMAction) { switch (action.type) { case ActionTypes.SHOW_ONBOARDING_COMPLETE_PROFILE_TOUR: return action.open; @@ -24,7 +25,7 @@ export function isShowOnboardingCompleteProfileTour(state = false, action: AnyAc } } -export function isShowOnboardingVisitConsoleTour(state = false, action: AnyAction) { +export function isShowOnboardingVisitConsoleTour(state = false, action: MMAction) { switch (action.type) { case ActionTypes.SHOW_ONBOARDING_VISIT_CONSOLE_TOUR: return action.open; diff --git a/webapp/channels/src/reducers/views/posts.ts b/webapp/channels/src/reducers/views/posts.ts index ee002c761a..6e84b3f561 100644 --- a/webapp/channels/src/reducers/views/posts.ts +++ b/webapp/channels/src/reducers/views/posts.ts @@ -1,19 +1,20 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import {UserTypes} from 'mattermost-redux/action_types'; import {ActionTypes} from 'utils/constants'; +import type {MMAction} from 'types/store'; + const defaultState = { post: {}, show: false, }; -function editingPost(state = defaultState, action: AnyAction) { +function editingPost(state = defaultState, action: MMAction) { switch (action.type) { case ActionTypes.TOGGLE_EDITING_POST: return { @@ -28,7 +29,7 @@ function editingPost(state = defaultState, action: AnyAction) { } } -function menuActions(state: {[postId: string]: {[actionId: string]: {text: string; value: string}}} = {}, action: AnyAction) { +function menuActions(state: {[postId: string]: {[actionId: string]: {text: string; value: string}}} = {}, action: MMAction) { switch (action.type) { case ActionTypes.SELECT_ATTACHMENT_MENU_ACTION: { const nextState = {...state}; diff --git a/webapp/channels/src/reducers/views/product_menu.ts b/webapp/channels/src/reducers/views/product_menu.ts index 089e1e9685..2bb7e970c2 100644 --- a/webapp/channels/src/reducers/views/product_menu.ts +++ b/webapp/channels/src/reducers/views/product_menu.ts @@ -1,12 +1,13 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import {ActionTypes} from 'utils/constants'; -export function switcherOpen(state = false, action: AnyAction) { +import type {MMAction} from 'types/store'; + +export function switcherOpen(state = false, action: MMAction) { switch (action.type) { case ActionTypes.SET_PRODUCT_SWITCHER_OPEN: return action.open; diff --git a/webapp/channels/src/reducers/views/rhs.ts b/webapp/channels/src/reducers/views/rhs.ts index b26970708b..14c9866748 100644 --- a/webapp/channels/src/reducers/views/rhs.ts +++ b/webapp/channels/src/reducers/views/rhs.ts @@ -1,7 +1,6 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import { @@ -15,9 +14,10 @@ import {SidebarSize} from 'components/resizable_sidebar/constants'; import {ActionTypes, RHSStates, Threads} from 'utils/constants'; +import type {MMAction} from 'types/store'; import type {RhsState} from 'types/store/rhs'; -function selectedPostId(state = '', action: AnyAction) { +function selectedPostId(state = '', action: MMAction) { switch (action.type) { case ActionTypes.SELECT_POST: return action.postId; @@ -41,7 +41,7 @@ function selectedPostId(state = '', action: AnyAction) { // selectedPostFocussedAt keeps track of the last time a post was selected, whether or not it // is currently selected. -function selectedPostFocussedAt(state = 0, action: AnyAction) { +function selectedPostFocussedAt(state = 0, action: MMAction) { switch (action.type) { case ActionTypes.SELECT_POST: return action.timestamp || 0; @@ -54,7 +54,7 @@ function selectedPostFocussedAt(state = 0, action: AnyAction) { } } -function highlightedPostId(state = '', action: AnyAction) { +function highlightedPostId(state = '', action: MMAction) { switch (action.type) { case ActionTypes.HIGHLIGHT_REPLY: return action.postId; @@ -70,7 +70,7 @@ function highlightedPostId(state = '', action: AnyAction) { } // filesSearchExtFilter keeps track of the extension filters used for file search. -function filesSearchExtFilter(state: string[] = [], action: AnyAction) { +function filesSearchExtFilter(state: string[] = [], action: MMAction) { switch (action.type) { case ActionTypes.SET_FILES_FILTER_BY_EXT: return action.data; @@ -82,7 +82,7 @@ function filesSearchExtFilter(state: string[] = [], action: AnyAction) { } } -function selectedPostCardId(state = '', action: AnyAction) { +function selectedPostCardId(state = '', action: MMAction) { switch (action.type) { case ActionTypes.SELECT_POST_CARD: return action.postId; @@ -103,7 +103,7 @@ function selectedPostCardId(state = '', action: AnyAction) { } } -function selectedChannelId(state = '', action: AnyAction) { +function selectedChannelId(state = '', action: MMAction) { switch (action.type) { case ActionTypes.SELECT_POST: return action.channelId; @@ -128,7 +128,7 @@ function selectedChannelId(state = '', action: AnyAction) { } } -function previousRhsStates(state: any = [], action: AnyAction) { +function previousRhsStates(state: any = [], action: MMAction) { switch (action.type) { case ActionTypes.SELECT_POST: if (action.previousRhsState) { @@ -166,7 +166,7 @@ function previousRhsStates(state: any = [], action: AnyAction) { } } -function rhsState(state: RhsState = null, action: AnyAction) { +function rhsState(state: RhsState = null, action: MMAction) { switch (action.type) { case ActionTypes.UPDATE_RHS_STATE: return action.state; @@ -184,7 +184,7 @@ function rhsState(state: RhsState = null, action: AnyAction) { } } -function size(state: SidebarSize = SidebarSize.MEDIUM, action: AnyAction) { +function size(state: SidebarSize = SidebarSize.MEDIUM, action: MMAction) { switch (action.type) { case ActionTypes.SET_RHS_SIZE: return action.size; @@ -193,7 +193,7 @@ function size(state: SidebarSize = SidebarSize.MEDIUM, action: AnyAction) { } } -function searchTerms(state = '', action: AnyAction) { +function searchTerms(state = '', action: MMAction) { switch (action.type) { case ActionTypes.UPDATE_RHS_SEARCH_TERMS: return action.terms; @@ -209,7 +209,7 @@ function searchTerms(state = '', action: AnyAction) { } } -function searchTeam(state = null, action: AnyAction) { +function searchTeam(state = null, action: MMAction) { switch (action.type) { case ActionTypes.UPDATE_RHS_SEARCH_TEAM: return action.teamId; @@ -225,7 +225,7 @@ function searchTeam(state = null, action: AnyAction) { } } -function searchType(state = '', action: AnyAction) { +function searchType(state = '', action: MMAction) { switch (action.type) { case ActionTypes.UPDATE_RHS_SEARCH_TYPE: return action.searchType; @@ -241,7 +241,7 @@ function searchType(state = '', action: AnyAction) { } } -function pluggableId(state = '', action: AnyAction) { +function pluggableId(state = '', action: MMAction) { switch (action.type) { case ActionTypes.UPDATE_RHS_STATE: if (action.state === RHSStates.PLUGIN) { @@ -259,7 +259,7 @@ function pluggableId(state = '', action: AnyAction) { } } -function searchResultsTerms(state = '', action: AnyAction) { +function searchResultsTerms(state = '', action: MMAction) { switch (action.type) { case ActionTypes.UPDATE_RHS_SEARCH_RESULTS_TERMS: return action.terms; @@ -271,7 +271,7 @@ function searchResultsTerms(state = '', action: AnyAction) { } } -function searchResultsType(state = '', action: AnyAction) { +function searchResultsType(state = '', action: MMAction) { switch (action.type) { case ActionTypes.UPDATE_RHS_SEARCH_RESULTS_TYPE: return action.searchType; @@ -283,7 +283,7 @@ function searchResultsType(state = '', action: AnyAction) { } } -function isSearchingFlaggedPost(state = false, action: AnyAction) { +function isSearchingFlaggedPost(state = false, action: MMAction) { switch (action.type) { case SearchTypes.SEARCH_FLAGGED_POSTS_REQUEST: return true; @@ -298,7 +298,7 @@ function isSearchingFlaggedPost(state = false, action: AnyAction) { } } -function isSearchingPinnedPost(state = false, action: AnyAction) { +function isSearchingPinnedPost(state = false, action: MMAction) { switch (action.type) { case SearchTypes.SEARCH_PINNED_POSTS_REQUEST: return true; @@ -313,7 +313,7 @@ function isSearchingPinnedPost(state = false, action: AnyAction) { } } -function isSidebarOpen(state = false, action: AnyAction) { +function isSidebarOpen(state = false, action: MMAction) { switch (action.type) { case ActionTypes.UPDATE_RHS_STATE: return Boolean(action.state); @@ -337,7 +337,7 @@ function isSidebarOpen(state = false, action: AnyAction) { } } -function isSidebarExpanded(state = false, action: AnyAction) { +function isSidebarExpanded(state = false, action: MMAction) { switch (action.type) { case ActionTypes.SET_RHS_EXPANDED: return action.expanded; @@ -369,7 +369,7 @@ function isSidebarExpanded(state = false, action: AnyAction) { } } -function isMenuOpen(state = false, action: AnyAction) { +function isMenuOpen(state = false, action: MMAction) { switch (action.type) { case ActionTypes.TOGGLE_RHS_MENU: return !state; @@ -391,7 +391,7 @@ function isMenuOpen(state = false, action: AnyAction) { } } -function editChannelMembers(state = false, action: AnyAction) { +function editChannelMembers(state = false, action: MMAction) { switch (action.type) { case ActionTypes.SET_EDIT_CHANNEL_MEMBERS: return action.active; @@ -408,7 +408,7 @@ function editChannelMembers(state = false, action: AnyAction) { } } -function shouldFocusRHS(state = false, action: AnyAction) { +function shouldFocusRHS(state = false, action: MMAction) { switch (action.type) { case ActionTypes.SELECT_POST: return Boolean(action.postId); diff --git a/webapp/channels/src/reducers/views/rhs_suppressed.ts b/webapp/channels/src/reducers/views/rhs_suppressed.ts index a10d86f005..b2de554422 100644 --- a/webapp/channels/src/reducers/views/rhs_suppressed.ts +++ b/webapp/channels/src/reducers/views/rhs_suppressed.ts @@ -1,15 +1,14 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; - import {UserTypes} from 'mattermost-redux/action_types'; import {ActionTypes} from 'utils/constants'; +import type {MMAction} from 'types/store'; import type {ViewsState} from 'types/store/views'; -export default function rhsSuppressed(state: ViewsState['rhsSuppressed'] = false, action: AnyAction): boolean { +export default function rhsSuppressed(state: ViewsState['rhsSuppressed'] = false, action: MMAction): boolean { switch (action.type) { case ActionTypes.SUPPRESS_RHS: return true; diff --git a/webapp/channels/src/reducers/views/search.ts b/webapp/channels/src/reducers/views/search.ts index ff3d06c7be..d65bf4fab4 100644 --- a/webapp/channels/src/reducers/views/search.ts +++ b/webapp/channels/src/reducers/views/search.ts @@ -1,16 +1,16 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import {UserTypes} from 'mattermost-redux/action_types'; import {SearchTypes} from 'utils/constants'; +import type {MMAction} from 'types/store'; import type {ViewsState} from 'types/store/views'; -function modalSearch(state = '', action: AnyAction) { +function modalSearch(state = '', action: MMAction) { switch (action.type) { case SearchTypes.SET_MODAL_SEARCH: { return action.data.trim(); @@ -23,7 +23,7 @@ function modalSearch(state = '', action: AnyAction) { } } -function popoverSearch(state = '', action: AnyAction) { +function popoverSearch(state = '', action: MMAction) { switch (action.type) { case SearchTypes.SET_POPOVER_SEARCH: { return action.data.trim(); @@ -34,7 +34,7 @@ function popoverSearch(state = '', action: AnyAction) { } } -function channelMembersRhsSearch(state = '', action: AnyAction) { +function channelMembersRhsSearch(state = '', action: MMAction) { switch (action.type) { case SearchTypes.SET_CHANNEL_MEMBERS_RHS_SEARCH: { return action.data; @@ -47,7 +47,7 @@ function channelMembersRhsSearch(state = '', action: AnyAction) { } } -function modalFilters(state: ViewsState['search']['modalFilters'] = {}, action: AnyAction) { +function modalFilters(state: ViewsState['search']['modalFilters'] = {}, action: MMAction) { switch (action.type) { case SearchTypes.SET_MODAL_FILTERS: { const filters = action.data; @@ -63,7 +63,7 @@ function modalFilters(state: ViewsState['search']['modalFilters'] = {}, action: } } -function userGridSearch(state: Partial = {}, action: AnyAction) { +function userGridSearch(state: Partial = {}, action: MMAction) { switch (action.type) { case SearchTypes.SET_USER_GRID_SEARCH: { const term = action.data.trim(); @@ -87,7 +87,7 @@ function userGridSearch(state: Partial = } } -function teamListSearch(state = '', action: AnyAction) { +function teamListSearch(state = '', action: MMAction) { switch (action.type) { case SearchTypes.SET_TEAM_LIST_SEARCH: { return action.data.trim(); @@ -100,7 +100,7 @@ function teamListSearch(state = '', action: AnyAction) { } } -function channelListSearch(state: Partial = {}, action: AnyAction) { +function channelListSearch(state: Partial = {}, action: MMAction) { switch (action.type) { case SearchTypes.SET_CHANNEL_LIST_SEARCH: { const term = action.data.trim(); diff --git a/webapp/channels/src/reducers/views/settings.ts b/webapp/channels/src/reducers/views/settings.ts index c53dd17700..a1e44e6a72 100644 --- a/webapp/channels/src/reducers/views/settings.ts +++ b/webapp/channels/src/reducers/views/settings.ts @@ -1,15 +1,14 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; - import {UserTypes} from 'mattermost-redux/action_types'; import {ActionTypes} from 'utils/constants'; +import type {MMAction} from 'types/store'; import type {ViewsState} from 'types/store/views'; -export default function settings(state: ViewsState['settings'] = {activeSection: '', previousActiveSection: ''}, action: AnyAction) { +export default function settings(state: ViewsState['settings'] = {activeSection: '', previousActiveSection: ''}, action: MMAction) { switch (action.type) { case ActionTypes.UPDATE_ACTIVE_SECTION: return { diff --git a/webapp/channels/src/reducers/views/status_dropdown.ts b/webapp/channels/src/reducers/views/status_dropdown.ts index 7a49cc8fa6..a1d9fb542d 100644 --- a/webapp/channels/src/reducers/views/status_dropdown.ts +++ b/webapp/channels/src/reducers/views/status_dropdown.ts @@ -1,14 +1,15 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import {UserTypes} from 'mattermost-redux/action_types'; import {ActionTypes} from 'utils/constants'; -export function isOpen(state = false, action: AnyAction) { +import type {MMAction} from 'types/store'; + +export function isOpen(state = false, action: MMAction) { switch (action.type) { case ActionTypes.STATUS_DROPDOWN_TOGGLE: return action.open; diff --git a/webapp/channels/src/reducers/views/system.ts b/webapp/channels/src/reducers/views/system.ts index e86ec7695c..1f6024ed26 100644 --- a/webapp/channels/src/reducers/views/system.ts +++ b/webapp/channels/src/reducers/views/system.ts @@ -1,14 +1,15 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import {UserTypes} from 'mattermost-redux/action_types'; import {ActionTypes} from 'utils/constants'; -function websocketConnectionErrorCount(state = 0, action: AnyAction) { +import type {MMAction} from 'types/store'; + +function websocketConnectionErrorCount(state = 0, action: MMAction) { switch (action.type) { case ActionTypes.INCREMENT_WS_ERROR_COUNT: { return state + 1; diff --git a/webapp/channels/src/reducers/views/textbox.ts b/webapp/channels/src/reducers/views/textbox.ts index b9b874783c..23e19672d0 100644 --- a/webapp/channels/src/reducers/views/textbox.ts +++ b/webapp/channels/src/reducers/views/textbox.ts @@ -1,14 +1,15 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import {UserTypes} from 'mattermost-redux/action_types'; import {ActionTypes} from 'utils/constants'; -function shouldShowPreviewOnCreateComment(state = false, action: AnyAction) { +import type {MMAction} from 'types/store'; + +function shouldShowPreviewOnCreateComment(state = false, action: MMAction) { switch (action.type) { case ActionTypes.SET_SHOW_PREVIEW_ON_CREATE_COMMENT: return action.showPreview; @@ -20,7 +21,7 @@ function shouldShowPreviewOnCreateComment(state = false, action: AnyAction) { } } -function shouldShowPreviewOnCreatePost(state = false, action: AnyAction) { +function shouldShowPreviewOnCreatePost(state = false, action: MMAction) { switch (action.type) { case ActionTypes.SET_SHOW_PREVIEW_ON_CREATE_POST: return action.showPreview; @@ -32,7 +33,7 @@ function shouldShowPreviewOnCreatePost(state = false, action: AnyAction) { } } -function shouldShowPreviewOnEditChannelHeaderModal(state = false, action: AnyAction) { +function shouldShowPreviewOnEditChannelHeaderModal(state = false, action: MMAction) { switch (action.type) { case ActionTypes.SET_SHOW_PREVIEW_ON_EDIT_CHANNEL_HEADER_MODAL: return action.showPreview; diff --git a/webapp/channels/src/reducers/views/threads.ts b/webapp/channels/src/reducers/views/threads.ts index be897ebd0f..9156c84474 100644 --- a/webapp/channels/src/reducers/views/threads.ts +++ b/webapp/channels/src/reducers/views/threads.ts @@ -2,16 +2,16 @@ // See LICENSE.txt for license information. import findKey from 'lodash/findKey'; -import type {AnyAction} from 'redux'; import {combineReducers} from 'redux'; import {PostTypes, UserTypes} from 'mattermost-redux/action_types'; import {Threads, ActionTypes} from 'utils/constants'; +import type {MMAction} from 'types/store'; import type {ViewsState} from 'types/store/views'; -export const selectedThreadIdInTeam = (state: ViewsState['threads']['selectedThreadIdInTeam'] = {}, action: AnyAction) => { +export const selectedThreadIdInTeam = (state: ViewsState['threads']['selectedThreadIdInTeam'] = {}, action: MMAction) => { switch (action.type) { case PostTypes.POST_REMOVED: { const key = findKey(state, (id) => id === action.data.id); @@ -36,7 +36,7 @@ export const selectedThreadIdInTeam = (state: ViewsState['threads']['selectedThr } }; -export const lastViewedAt = (state: ViewsState['threads']['lastViewedAt'] = {}, action: AnyAction) => { +export const lastViewedAt = (state: ViewsState['threads']['lastViewedAt'] = {}, action: MMAction) => { switch (action.type) { case Threads.CHANGED_LAST_VIEWED_AT: return { @@ -51,7 +51,7 @@ export const lastViewedAt = (state: ViewsState['threads']['lastViewedAt'] = {}, } }; -export function manuallyUnread(state: ViewsState['threads']['manuallyUnread'] = {}, action: AnyAction) { +export function manuallyUnread(state: ViewsState['threads']['manuallyUnread'] = {}, action: MMAction) { switch (action.type) { case Threads.CHANGED_LAST_VIEWED_AT: return { @@ -71,7 +71,7 @@ export function manuallyUnread(state: ViewsState['threads']['manuallyUnread'] = } } -export function toastStatus(state: ViewsState['threads']['toastStatus'] = false, action: AnyAction) { +export function toastStatus(state: ViewsState['threads']['toastStatus'] = false, action: MMAction) { switch (action.type) { case ActionTypes.SELECT_POST: return false; diff --git a/webapp/channels/src/types/store/index.ts b/webapp/channels/src/types/store/index.ts index 16f8220a0e..4b9f7f6d08 100644 --- a/webapp/channels/src/types/store/index.ts +++ b/webapp/channels/src/types/store/index.ts @@ -3,6 +3,7 @@ import type {GlobalState as BaseGlobalState} from '@mattermost/types/store'; +import type {MMReduxAction} from 'mattermost-redux/action_types'; // eslint-disable-next-line @typescript-eslint/no-restricted-imports import type * as MMReduxTypes from 'mattermost-redux/types/actions'; @@ -24,10 +25,15 @@ export type GlobalState = BaseGlobalState & { views: ViewsState; }; +/** + * An MMAction is any non-Thunk Redux action accepted by the web app and mattermost-redux. + */ +export type MMAction = MMReduxAction; + /** * A version of {@link MMReduxTypes.DispatchFunc} which supports dispatching web app actions. */ -export type DispatchFunc = MMReduxTypes.DispatchFunc; +export type DispatchFunc = MMReduxTypes.DispatchFunc; /** * A version of {@link MMReduxTypes.GetStateFunc} which supports web app state. @@ -40,7 +46,7 @@ export type GetStateFunc = MMReduxTypes export type ActionFunc< Data = unknown, State extends GlobalState = GlobalState, -> = MMReduxTypes.ActionFunc; +> = MMReduxTypes.ActionFunc; /** * A version of {@link MMReduxTypes.ActionFuncAsync} which supports web app state and allows dispatching its actions. @@ -48,7 +54,7 @@ export type ActionFunc< export type ActionFuncAsync< Data = unknown, State extends GlobalState = GlobalState, -> = MMReduxTypes.ActionFuncAsync; +> = MMReduxTypes.ActionFuncAsync; /** * A version of {@link MMReduxTypes.ThunkActionFunc} which supports web app state and allows dispatching its actions. @@ -56,4 +62,4 @@ export type ActionFuncAsync< export type ThunkActionFunc< ReturnType, State extends GlobalState = GlobalState -> = MMReduxTypes.ThunkActionFunc; +> = MMReduxTypes.ThunkActionFunc;