1
- import { useEffect , useState } from 'react'
1
+ import { useCallback , useEffect , useMemo , useState } from 'react'
2
2
3
- import { UploadType } from '@audius/common'
3
+ import { uploadActions , UploadType } from '@audius/common'
4
+ import { useDispatch } from 'react-redux'
4
5
5
6
import Header from 'components/header/desktop/Header'
6
7
import Page from 'components/page/Page'
7
8
8
9
import styles from './UploadPage.module.css'
9
10
import { EditPageNew } from './components/EditPageNew'
11
+ import { FinishPageNew } from './components/FinishPageNew'
10
12
import SelectPageNew from './components/SelectPageNew'
11
13
import { TrackForUpload } from './components/types'
12
14
15
+ const { uploadTracks } = uploadActions
16
+
13
17
type UploadPageProps = {
14
18
uploadType : UploadType
15
19
}
@@ -20,7 +24,16 @@ enum Phase {
20
24
FINISH
21
25
}
22
26
27
+ const messages = {
28
+ selectPageTitle : 'Upload Your Music' ,
29
+ editSingleTrackPageTitle : 'Complete Your Track' ,
30
+ editMultiTrackPageTitle : 'Complete Your Tracks' ,
31
+ finishSingleTrackPageTitle : 'Uploading Your Track' ,
32
+ finishMultiTrackPageTitle : 'Uploading Your Tracks'
33
+ }
34
+
23
35
export const UploadPageNew = ( props : UploadPageProps ) => {
36
+ const dispatch = useDispatch ( )
24
37
const [ phase , setPhase ] = useState ( Phase . SELECT )
25
38
const [ tracks , setTracks ] = useState < TrackForUpload [ ] > ( [ ] )
26
39
@@ -48,14 +61,32 @@ export const UploadPageNew = (props: UploadPageProps) => {
48
61
injectPrettifyScript ( )
49
62
} , [ phase ] )
50
63
64
+ const pageTitle = useMemo ( ( ) => {
65
+ switch ( phase ) {
66
+ case Phase . EDIT :
67
+ return tracks . length > 1
68
+ ? messages . editMultiTrackPageTitle
69
+ : messages . editSingleTrackPageTitle
70
+ case Phase . FINISH :
71
+ return tracks . length > 1
72
+ ? messages . finishMultiTrackPageTitle
73
+ : messages . finishSingleTrackPageTitle
74
+ case Phase . SELECT :
75
+ default :
76
+ return messages . selectPageTitle
77
+ }
78
+ } , [ phase , tracks ] )
79
+
51
80
let page
52
81
switch ( phase ) {
53
82
case Phase . SELECT :
54
83
page = (
55
84
< SelectPageNew
56
85
tracks = { tracks }
57
86
setTracks = { setTracks }
58
- onContinue = { ( ) => setPhase ( Phase . EDIT ) }
87
+ onContinue = { ( ) => {
88
+ setPhase ( Phase . EDIT )
89
+ } }
59
90
/>
60
91
)
61
92
break
@@ -64,20 +95,56 @@ export const UploadPageNew = (props: UploadPageProps) => {
64
95
< EditPageNew
65
96
tracks = { tracks }
66
97
setTracks = { setTracks }
67
- onContinue = { ( ) => setPhase ( Phase . FINISH ) }
98
+ onContinue = { ( ) => {
99
+ setPhase ( Phase . FINISH )
100
+ } }
68
101
/>
69
102
)
70
103
break
71
104
case Phase . FINISH :
72
- console . log ( tracks [ 0 ] )
73
- page = < pre > { JSON . stringify ( tracks , null , 2 ) } </ pre >
105
+ page = (
106
+ < FinishPageNew
107
+ tracks = { tracks }
108
+ onContinue = { ( ) => {
109
+ setTracks ( [ ] )
110
+ setPhase ( Phase . SELECT )
111
+ } }
112
+ />
113
+ )
74
114
}
115
+
116
+ const handleUpload = useCallback ( ( ) => {
117
+ console . log ( 'Handling upload' )
118
+ const trackStems = tracks . reduce ( ( acc , track ) => {
119
+ // @ts -ignore - This has stems in it sometimes
120
+ acc = [ ...acc , ...( track . metadata . stems ?? [ ] ) ]
121
+ return acc
122
+ } , [ ] )
123
+
124
+ dispatch (
125
+ uploadTracks (
126
+ // @ts -ignore - This has artwork on it
127
+ tracks ,
128
+ // NOTE: Need to add metadata for collections here for collection upload
129
+ undefined ,
130
+ tracks . length > 1
131
+ ? UploadType . INDIVIDUAL_TRACKS
132
+ : UploadType . INDIVIDUAL_TRACK ,
133
+ trackStems
134
+ )
135
+ )
136
+ } , [ dispatch , tracks ] )
137
+
138
+ useEffect ( ( ) => {
139
+ if ( phase === Phase . FINISH ) handleUpload ( )
140
+ } , [ handleUpload , phase ] )
141
+
75
142
return (
76
143
< Page
77
144
title = 'Upload'
78
145
description = 'Upload and publish audio content to the Audius platform'
79
146
contentClassName = { styles . upload }
80
- header = { < Header primary = { 'Upload' } /> }
147
+ header = { < Header primary = { pageTitle } /> }
81
148
>
82
149
{ page }
83
150
</ Page >
0 commit comments