1
1
import { useCallback , useMemo } from 'react'
2
2
3
- import { ExtendedTrackMetadata , Nullable } from '@audius/common '
4
- import { Button , ButtonType , IconArrow } from '@audius/stems '
3
+ import { HarmonyButton , HarmonyButtonType , IconArrow } from '@audius/stems '
4
+ import cn from 'classnames '
5
5
import { Form , Formik } from 'formik'
6
6
import moment from 'moment'
7
7
import * as Yup from 'yup'
8
8
9
+ import layoutStyles from 'components/layout/layout.module.css'
9
10
import PreviewButton from 'components/upload/PreviewButton'
10
11
12
+ import { MultiTrackSidebar } from '../fields/MultiTrackSidebar'
11
13
import { TrackMetadataFields } from '../fields/TrackMetadataFields'
14
+ import { defaultHiddenFields } from '../fields/availability/HiddenAvailabilityFields'
15
+ import { TrackEditFormValues } from '../forms/types'
12
16
13
17
import styles from './EditPageNew.module.css'
14
18
import { TrackModalArray } from './TrackModalArray'
@@ -25,14 +29,6 @@ type EditPageProps = {
25
29
setTracks : ( tracks : TrackForUpload [ ] ) => void
26
30
onContinue : ( ) => void
27
31
}
28
- export type EditFormValues = ExtendedTrackMetadata & {
29
- releaseDate : moment . Moment
30
- licenseType : {
31
- allowAttribution : Nullable < boolean >
32
- commercialUse : Nullable < boolean >
33
- derivativeWorks : Nullable < boolean >
34
- }
35
- }
36
32
37
33
const EditTrackSchema = Yup . object ( ) . shape ( {
38
34
title : Yup . string ( ) . required ( messages . titleError ) ,
@@ -47,53 +43,65 @@ const EditTrackSchema = Yup.object().shape({
47
43
export const EditPageNew = ( props : EditPageProps ) => {
48
44
const { tracks, setTracks, onContinue } = props
49
45
50
- const [ { metadata : trackMetadata } ] = tracks
51
-
52
- const initialValues : EditFormValues = useMemo (
46
+ const initialValues : TrackEditFormValues = useMemo (
53
47
( ) => ( {
54
- ...trackMetadata ,
55
- artwork : null ,
56
- description : '' ,
57
- releaseDate : moment ( ) . startOf ( 'day' ) ,
58
- tags : '' ,
59
- licenseType : {
60
- allowAttribution : null ,
61
- commercialUse : null ,
62
- derivativeWorks : null
63
- }
48
+ trackMetadatasIndex : 0 ,
49
+ trackMetadatas : tracks . map ( ( track ) => ( {
50
+ ...track . metadata ,
51
+ artwork : null ,
52
+ description : '' ,
53
+ releaseDate : moment ( ) . startOf ( 'day' ) ,
54
+ tags : '' ,
55
+ field_visibility : {
56
+ ...defaultHiddenFields ,
57
+ remixes : true
58
+ } ,
59
+ licenseType : {
60
+ allowAttribution : null ,
61
+ commercialUse : null ,
62
+ derivativeWorks : null
63
+ }
64
+ } ) )
64
65
} ) ,
65
- [ trackMetadata ]
66
+ [ tracks ]
66
67
)
67
68
68
69
const onSubmit = useCallback (
69
- ( values : EditFormValues ) => {
70
- setTracks ( [ { ...tracks [ 0 ] , metadata : values } ] )
70
+ ( values : TrackEditFormValues ) => {
71
+ const tracksForUpload : TrackForUpload [ ] = tracks . map ( ( track , i ) => ( {
72
+ ...track ,
73
+ metadata : values . trackMetadatas [ i ]
74
+ } ) )
75
+ setTracks ( tracksForUpload )
71
76
onContinue ( )
72
77
} ,
73
78
[ onContinue , setTracks , tracks ]
74
79
)
75
80
81
+ const isMultiTrack = tracks . length > 1
82
+
76
83
return (
77
- < Formik < EditFormValues >
84
+ < Formik < TrackEditFormValues >
78
85
initialValues = { initialValues }
79
86
onSubmit = { onSubmit }
80
87
validationSchema = { EditTrackSchema }
81
88
>
82
89
{ ( ) => (
83
90
< Form >
84
- < div className = { styles . editForm } >
85
- < TrackMetadataFields />
86
- < TrackModalArray />
87
- < PreviewButton playing = { false } onClick = { ( ) => { } } />
91
+ < div className = { cn ( layoutStyles . row , layoutStyles . gap2 ) } >
92
+ < div className = { styles . editForm } >
93
+ < TrackMetadataFields playing = { false } />
94
+ < TrackModalArray />
95
+ < PreviewButton playing = { false } onClick = { ( ) => { } } />
96
+ </ div >
97
+ { isMultiTrack ? < MultiTrackSidebar tracks = { tracks } /> : null }
88
98
</ div >
89
99
< div className = { styles . continue } >
90
- < Button
91
- type = { ButtonType . PRIMARY_ALT }
92
- buttonType = 'submit'
100
+ < HarmonyButton
101
+ variant = { HarmonyButtonType . PRIMARY }
93
102
text = 'Continue'
94
103
name = 'continue'
95
- rightIcon = { < IconArrow /> }
96
- textClassName = { styles . continueButtonText }
104
+ iconRight = { IconArrow }
97
105
className = { styles . continueButton }
98
106
/>
99
107
</ div >
0 commit comments