@@ -30,14 +30,16 @@ import { mergeReleaseDateValues } from './mergeReleaseDateValues'
30
30
31
31
const messages = {
32
32
...visibilityMessages ,
33
- scheduled : ( date : string ) => `Scheduled for ${ formatCalendarTime ( date ) } `
33
+ scheduled : ( date : string ) => `Scheduled for ${ formatCalendarTime ( date ) } ` ,
34
+ emptyPlaylistTooltipText : 'You must add at least 1 song.'
34
35
}
35
36
36
37
type VisibilityType = 'scheduled' | 'public' | 'hidden'
37
38
38
39
type VisibilityFieldProps = {
39
40
entityType : 'track' | 'album' | 'playlist'
40
41
isUpload : boolean
42
+ isPublishable ?: boolean
41
43
}
42
44
43
45
const visibilitySchema = z
@@ -76,7 +78,7 @@ const visibilitySchema = z
76
78
)
77
79
78
80
export const VisibilityField = ( props : VisibilityFieldProps ) => {
79
- const { entityType, isUpload } = props
81
+ const { entityType, isUpload, isPublishable = true } = props
80
82
const useEntityField = entityType === 'track' ? useTrackField : useField
81
83
const [
82
84
{ value : isHidden } ,
@@ -179,6 +181,7 @@ export const VisibilityField = (props: VisibilityFieldProps) => {
179
181
< VisibilityMenuFields
180
182
entityType = { entityType }
181
183
initiallyPublic = { ! initiallyHidden && ! isUpload }
184
+ isPublishable = { isPublishable }
182
185
/>
183
186
}
184
187
/>
@@ -188,6 +191,7 @@ export const VisibilityField = (props: VisibilityFieldProps) => {
188
191
type VisibilityMenuFieldsProps = {
189
192
entityType : 'track' | 'album' | 'playlist'
190
193
initiallyPublic ?: boolean
194
+ isPublishable ?: boolean
191
195
}
192
196
193
197
const VisibilityMenuFields = ( props : VisibilityMenuFieldsProps ) => {
@@ -197,7 +201,7 @@ const VisibilityMenuFields = (props: VisibilityMenuFieldsProps) => {
197
201
const { isEnabled : isPaidScheduledEnabled } = useFeatureFlag (
198
202
FeatureFlags . PAID_SCHEDULED
199
203
)
200
- const { initiallyPublic, entityType } = props
204
+ const { initiallyPublic, isPublishable = true , entityType } = props
201
205
const [ field ] = useField < VisibilityType > ( 'visibilityType' )
202
206
203
207
return (
@@ -206,6 +210,10 @@ const VisibilityMenuFields = (props: VisibilityMenuFieldsProps) => {
206
210
value = 'public'
207
211
label = { messages . public }
208
212
description = { messages . publicDescription }
213
+ disabled = { ! isPublishable }
214
+ tooltipText = {
215
+ isPublishable ? undefined : messages . emptyPlaylistTooltipText
216
+ }
209
217
/>
210
218
< ModalRadioItem
211
219
value = 'hidden'
0 commit comments