diff --git a/packages/web/src/components/edit-collection/EditCollectionForm.tsx b/packages/web/src/components/edit-collection/EditCollectionForm.tsx index 64e7d282bb2..27e90d20810 100644 --- a/packages/web/src/components/edit-collection/EditCollectionForm.tsx +++ b/packages/web/src/components/edit-collection/EditCollectionForm.tsx @@ -62,7 +62,8 @@ export const EditCollectionForm = (props: EditCollectionFormProps) => { const { playlist_id, is_private: initiallyHidden, - is_scheduled_release: isInitiallyScheduled + is_scheduled_release: isInitiallyScheduled, + playlist_contents: initialContents } = initialValues const [isDeleteConfirmationOpen, setIsDeleteConfirmationOpen] = @@ -157,6 +158,12 @@ export const EditCollectionForm = (props: EditCollectionFormProps) => { 0 && + !isUpload) + } /> ) : ( diff --git a/packages/web/src/components/edit/fields/visibility/VisibilityField.tsx b/packages/web/src/components/edit/fields/visibility/VisibilityField.tsx index 8ae62ef01f2..fa0475e324d 100644 --- a/packages/web/src/components/edit/fields/visibility/VisibilityField.tsx +++ b/packages/web/src/components/edit/fields/visibility/VisibilityField.tsx @@ -30,7 +30,8 @@ import { mergeReleaseDateValues } from './mergeReleaseDateValues' const messages = { ...visibilityMessages, - scheduled: (date: string) => `Scheduled for ${formatCalendarTime(date)}` + scheduled: (date: string) => `Scheduled for ${formatCalendarTime(date)}`, + emptyPlaylistTooltipText: 'You must add at least 1 song.' } type VisibilityType = 'scheduled' | 'public' | 'hidden' @@ -38,6 +39,7 @@ type VisibilityType = 'scheduled' | 'public' | 'hidden' type VisibilityFieldProps = { entityType: 'track' | 'album' | 'playlist' isUpload: boolean + isPublishable?: boolean } const visibilitySchema = z @@ -76,7 +78,7 @@ const visibilitySchema = z ) export const VisibilityField = (props: VisibilityFieldProps) => { - const { entityType, isUpload } = props + const { entityType, isUpload, isPublishable = true } = props const useEntityField = entityType === 'track' ? useTrackField : useField const [ { value: isHidden }, @@ -179,6 +181,7 @@ export const VisibilityField = (props: VisibilityFieldProps) => { } /> @@ -188,6 +191,7 @@ export const VisibilityField = (props: VisibilityFieldProps) => { type VisibilityMenuFieldsProps = { entityType: 'track' | 'album' | 'playlist' initiallyPublic?: boolean + isPublishable?: boolean } const VisibilityMenuFields = (props: VisibilityMenuFieldsProps) => { @@ -197,7 +201,7 @@ const VisibilityMenuFields = (props: VisibilityMenuFieldsProps) => { const { isEnabled: isPaidScheduledEnabled } = useFeatureFlag( FeatureFlags.PAID_SCHEDULED ) - const { initiallyPublic, entityType } = props + const { initiallyPublic, isPublishable = true, entityType } = props const [field] = useField('visibilityType') return ( @@ -206,6 +210,10 @@ const VisibilityMenuFields = (props: VisibilityMenuFieldsProps) => { value='public' label={messages.public} description={messages.publicDescription} + disabled={!isPublishable} + tooltipText={ + isPublishable ? undefined : messages.emptyPlaylistTooltipText + } />