Skip to content
This repository was archived by the owner on Oct 4, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion packages/common/src/store/reducers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,10 @@ import deletePlaylistConfirmationReducer from './ui/delete-playlist-confirmation
import { DeletePlaylistConfirmationModalState } from './ui/delete-playlist-confirmation-modal/types'
import duplicateAddConfirmationReducer from './ui/duplicate-add-confirmation-modal/slice'
import { DuplicateAddConfirmationModalState } from './ui/duplicate-add-confirmation-modal/types'
import {
InboxUnavailableModalState,
inboxUnavailableModalReducer
} from './ui/inbox-unavailable-modal'
import {
LeavingAudiusModalState,
leavingAudiusModalReducer
Expand Down Expand Up @@ -200,6 +204,8 @@ export const reducers = () => ({
mobileOverflowModal: mobileOverflowModalReducer,
modals: modalsReducer,
modalsWithState: combineReducers({
createChatModal: createChatModalReducer,
inboxUnavailableModal: inboxUnavailableModalReducer,
leavingAudiusModal: leavingAudiusModalReducer
}),
musicConfetti: musicConfettiReducer,
Expand Down Expand Up @@ -318,7 +324,6 @@ export type CommonState = {
buyAudio: ReturnType<typeof buyAudioReducer>
addToPlaylist: AddToPlaylistState
changePassword: ChangePasswordState
createChatModal: CreateChatModalState
createPlaylistModal: CreatePlaylistModalState
collectibleDetails: CollectibleDetailsState
deletePlaylistConfirmationModal: DeletePlaylistConfirmationModalState
Expand All @@ -327,6 +332,8 @@ export type CommonState = {
mobileOverflowModal: MobileOverflowModalState
modals: ModalsState
modalsWithState: {
createChatModal: CreateChatModalState
inboxUnavailableModal: InboxUnavailableModalState
leavingAudiusModal: LeavingAudiusModalState
}
musicConfetti: MusicConfettiState
Expand Down
7 changes: 6 additions & 1 deletion packages/common/src/store/tipping/slice.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { createSlice, PayloadAction } from '@reduxjs/toolkit'
import { Action, createSlice, PayloadAction } from '@reduxjs/toolkit'

import { TipSource } from '../../models/Analytics'
import { ID } from '../../models/Identifiers'
Expand Down Expand Up @@ -104,6 +104,8 @@ const slice = createSlice({
user: User | null
source: TipSource
trackId?: ID
onSuccessActions?: Action[]
Comment thread
rickyrombo marked this conversation as resolved.
Resolved
onSuccessConfirmedActions?: Action[]
}>
) => {
if (!action.payload.user) {
Expand All @@ -113,6 +115,9 @@ const slice = createSlice({
state.send.source = action.payload.source
state.send.user = action.payload.user
state.send.trackId = action.payload.trackId ?? null
state.send.onSuccessActions = action.payload.onSuccessActions
state.send.onSuccessConfirmedActions =
action.payload.onSuccessConfirmedActions
},
sendTip: (state, action: PayloadAction<{ amount: string }>) => {
if (state.send.status !== 'SEND') {
Expand Down
10 changes: 10 additions & 0 deletions packages/common/src/store/tipping/types.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import type { Action } from '@reduxjs/toolkit'

import { TipSource } from '../../models/Analytics'
import { ID } from '../../models/Identifiers'
import { Supporter, Supporting, UserTip } from '../../models/Tipping'
Expand Down Expand Up @@ -49,6 +51,14 @@ export type TippingState = {
error: Nullable<string>
source: TipSource
trackId: Nullable<number> // in case the user is sending a tip from a gated track page / modal
/**
* Actions to fire when the tip sends successfully
*/
onSuccessActions?: Action[]
/**
* Actions to fire when the tip is confirmed to be indexed by discovery
*/
onSuccessConfirmedActions?: Action[]
}
tipToDisplay: Nullable<UserTip>
showTip: boolean
Expand Down
22 changes: 22 additions & 0 deletions packages/common/src/store/ui/create-chat-modal/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { Action } from '@reduxjs/toolkit'

import { createModal } from '../modals/createModal'

export type CreateChatModalState = {
presetMessage?: string
onCancelAction?: Action
}

const createChatModal = createModal<CreateChatModalState>({
reducerPath: 'createChatModal',
initialState: {
isOpen: false
},
sliceSelector: (state) => state.ui.modalsWithState
})

export const {
hook: useCreateChatModal,
actions: createChatModalActions,
reducer: createChatModalReducer
} = createChatModal
7 changes: 0 additions & 7 deletions packages/common/src/store/ui/create-chat-modal/selectors.ts

This file was deleted.

29 changes: 0 additions & 29 deletions packages/common/src/store/ui/create-chat-modal/slice.ts

This file was deleted.

26 changes: 26 additions & 0 deletions packages/common/src/store/ui/inbox-unavailable-modal/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { Action } from '@reduxjs/toolkit'

import { ID } from 'models/Identifiers'

import { createModal } from '../modals/createModal'

export type InboxUnavailableModalState = {
userId?: ID
presetMessage?: string
onCancelAction?: Action
onSuccessAction?: Action
}

const inboxUnavailableModal = createModal<InboxUnavailableModalState>({
initialState: {
isOpen: false
},
reducerPath: 'inboxUnavailableModal',
sliceSelector: (state) => state.ui.modalsWithState
})

export const {
hook: useInboxUnavailableModal,
actions: inboxUnavailableModalActions,
reducer: inboxUnavailableModalReducer
} = inboxUnavailableModal
15 changes: 3 additions & 12 deletions packages/common/src/store/ui/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -140,15 +140,6 @@ export {
export * as searchUsersModalSelectors from './search-users-modal/selectors'
export { default as searchUsersModalSagas } from './search-users-modal/sagas'

export {
default as createChatModalReducer,
actions as createChatModalActions,
CreateChatModalState
} from './create-chat-modal/slice'
export * as createChatModalSelectors from './create-chat-modal/selectors'

export {
leavingAudiusModalReducer,
useLeavingAudiusModal,
LeavingAudiusModalState
} from './leaving-audius-modal'
export * from './create-chat-modal'
export * from './leaving-audius-modal'
export * from './inbox-unavailable-modal'
5 changes: 3 additions & 2 deletions packages/common/src/store/ui/modals/createModal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ export const createModal = <T>({
name: `modals/${reducerPath}`,
initialState,
reducers: {
open: (_, action: PayloadAction<T & BaseModalState>) => {
return action.payload
open: (_, action: PayloadAction<T>) => {
return { ...action.payload, isOpen: true }
},
close: (state) => {
state.isOpen = 'closing'
Expand Down Expand Up @@ -99,6 +99,7 @@ export const createModal = <T>({

return {
hook: useModal,
actions: slice.actions,
reducer: slice.reducer
}
}
1 change: 0 additions & 1 deletion packages/common/src/store/ui/modals/slice.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ const initialState: ModalsState = {
TransactionDetails: false,
VipDiscord: false,
StripeOnRamp: false,
CreateChat: false,
InboxSettings: false,
LockedContent: false,
PlaybackRate: false,
Expand Down
1 change: 0 additions & 1 deletion packages/common/src/store/ui/modals/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ export type Modals =
| 'TransactionDetails'
| 'VipDiscord'
| 'StripeOnRamp'
| 'CreateChat'
| 'InboxSettings'
| 'LockedContent'
| 'PlaybackRate'
Expand Down
3 changes: 3 additions & 0 deletions packages/common/src/store/ui/search-users-modal/selectors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,6 @@ import { CommonState } from 'store/reducers'

export const getUserList = (state: CommonState) =>
state.ui.searchUsersModal.userList

export const getLastSearchQuery = (state: CommonState) =>
state.ui.searchUsersModal.lastQuery
23 changes: 14 additions & 9 deletions packages/web/src/common/store/tipping/sagas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,13 @@ function* sendTipAsync() {
}

const sendTipData = yield* select(getSendTipData)
const { user: recipient, amount, source, trackId } = sendTipData
const {
user: recipient,
amount,
source,
trackId,
onSuccessConfirmedActions
} = sendTipData
if (!recipient) {
return
}
Expand Down Expand Up @@ -385,15 +391,14 @@ function* sendTipAsync() {
yield* put(
fetchPermissions({ userIds: [sender.user_id, recipient.user_id] })
)
if (onSuccessConfirmedActions) {
// Spread here to unfreeze the action
// Redux sagas can't "put" frozen actions
for (const action of onSuccessConfirmedActions) {
yield* put({ ...action })
}
}
if (source === 'inboxUnavailableModal') {
console.debug('Creating chat silently...')
// Create the chat but don't navigate
yield* put(
chatActions.createChat({
userIds: [recipient.user_id],
skipNavigation: true
})
)
yield* put(
make(Name.TIP_UNLOCKED_CHAT, {
recipientUserId: recipient.user_id
Expand Down
Loading