feat(studio/releases):Phase 2 release/track UI updates + notes#988
feat(studio/releases):Phase 2 release/track UI updates + notes#988
Conversation
|
Visit the studio preview URL for this PR 🚀 : https://988.artist.preview.newm.io/ |
There was a problem hiding this comment.
Pull request overview
Updates the Studio releases/track workflow UI for “phase 2” by shifting terminology from “song” → “track”, introducing tentative release/track types, centralizing tooltip copy, and adding early UI for release type selection and track playback.
Changes:
- Added shared release/track type exports under
apps/studio/src/modules/releases/**. - Centralized tooltip copy into
apps/studio/src/pages/home/releases/constants.tsxand updated multiple track/release screens to use it. - Refactored track details screens (basic/advanced/info) and introduced a new
PlayTrackcomponent for playback in track contexts.
Reviewed changes
Copilot reviewed 18 out of 18 changed files in this pull request and generated 9 comments.
Show a summary per file
| File | Description |
|---|---|
| apps/studio/src/modules/releases/index.ts | Barrel exports for release/track module types. |
| apps/studio/src/modules/releases/release/index.ts | Re-export release types. |
| apps/studio/src/modules/releases/release/types.ts | Adds tentative Release type. |
| apps/studio/src/modules/releases/track/index.ts | Re-export track types. |
| apps/studio/src/modules/releases/track/types.ts | Adds tentative Track type. |
| apps/studio/src/pages/home/releases/README.md | Documents phase-2 gaps and cleanup checklist. |
| apps/studio/src/pages/home/releases/constants.tsx | New centralized tooltip copy for releases/tracks. |
| apps/studio/src/pages/home/releases/release/tracks/tabs/PlayTrack.tsx | New track playback component (copy of PlaySong with “track” wording). |
| apps/studio/src/common/constants.ts | Marks old tooltip copy as legacy/back-compat. |
| apps/studio/src/components/minting/CoverRemixSample.tsx | Copy update to “track”. |
| apps/studio/src/pages/home/releases/ReleaseList.tsx | Switches to shared Release type import. |
| apps/studio/src/pages/home/releases/release/ReleaseDetails.tsx | Adds “Release Type” dropdown and tweaks tracks placeholder copy. |
| apps/studio/src/pages/home/releases/release/tracks/AdvancedTrackDetails.tsx | Removes several advanced fields and updates tooltip sourcing. |
| apps/studio/src/pages/home/releases/release/tracks/BasicTrackDetails.tsx | Restructures basic details UI; introduces primary/secondary genre UI. |
| apps/studio/src/pages/home/releases/release/tracks/NewTrack.tsx | Updates initial values (adds primary/secondary genre fields). |
| apps/studio/src/pages/home/releases/release/tracks/ViewTrack.tsx | Copy update (“track” aria-label) + deletion tooltip TODO. |
| apps/studio/src/pages/home/releases/release/tracks/tabs/TrackInfo.tsx | Renames SongInfo → TrackInfo, integrates PlayTrack, updates labels/tooltips. |
| apps/studio/src/pages/home/releases/release/tracks/trackFormTypes.ts | Adds primaryGenre/secondaryGenre to form values. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| explicit: `Explicit content includes strong or discriminatory language, | ||
| "or depictions of sex, violence or substance abuse.`, | ||
|
|
||
| instrumental: `Tracks without vocals or lyrics should be indicated as an instrumental. | ||
| Failure to accurately label the track could result in a declined distribution submission.`, |
There was a problem hiding this comment.
FIELDS_TOOLTIP_COPY_TEXT.explicit includes an extra " character and newline/indentation inside the template literal, which will render incorrectly in the tooltip (currently it shows "or depictions...). Please remove the stray quote and normalize whitespace so the tooltip reads as a single sentence/paragraph.
| explicit: `Explicit content includes strong or discriminatory language, | |
| "or depictions of sex, violence or substance abuse.`, | |
| instrumental: `Tracks without vocals or lyrics should be indicated as an instrumental. | |
| Failure to accurately label the track could result in a declined distribution submission.`, | |
| explicit: `Explicit content includes strong or discriminatory language, or depictions of sex, violence or substance abuse.`, | |
| instrumental: `Tracks without vocals or lyrics should be indicated as an instrumental. | |
| Failure to accurately label the track could result in a declined distribution submission.`, | |
| Failure to accurately label the track could result in a declined distribution submission.`, |
| const audioRef = useRef<HTMLDivElement>(null); | ||
| const coCreatorsRef = useRef<HTMLDivElement>(null); | ||
| const coverArtUrlRef = useRef<HTMLDivElement>(null); | ||
| const agreesToCoverArtGuidelinesRef = useRef<HTMLInputElement>(null); | ||
| const descriptionRef = useRef<HTMLTextAreaElement>(null); | ||
| const songDetailsRef = useRef<HTMLDivElement>(null); | ||
| const trackDetailsRef = useRef<HTMLDivElement>(null); |
There was a problem hiding this comment.
coverArtUrlRef / hasCoverArtChanged / errors.coverArtUrl are still wired into scroll-to-error + cover-art-guidelines flow, but the cover art input was removed from this component. With commonYupValidation.coverArtUrl still required (see NewTrack/EditTrack), users won't be able to satisfy validation. Either re-add the cover art field here (and attach coverArtUrlRef), or remove the requirement and associated logic from the form/validation while in the phase-2 transition.
| <DropdownMultiSelectField | ||
| isOptional={ false } | ||
| label="SONG TITLE" | ||
| name="title" | ||
| placeholder="Give your track a name..." | ||
| label="PRIMARY GENRE" | ||
| name="primaryGenre" | ||
| options={ genres ?? [] } | ||
| placeholder="Select primary genre" | ||
| /> |
There was a problem hiding this comment.
The form now collects genres in primaryGenre/secondaryGenre, but NewTrack/EditTrack validation still requires genres (min 1/max 2) and the submit payload still uses genres. As-is, selecting primary/secondary genres here won't satisfy validation or be persisted. Please either (a) map primaryGenre+secondaryGenre back into genres before validation/submit, or (b) update validation + API payloads to use the new fields consistently.
| label="DESCRIPTION" | ||
| name="description" | ||
| placeholder="Tell us about your song" | ||
| ref={ descriptionRef } |
There was a problem hiding this comment.
Copy mismatch: the description placeholder still says "Tell us about your song" even though the rest of this flow has been updated to "track" terminology.
| const releaseDateRef = useRef<HTMLInputElement | null>(null); | ||
| const compositionCopyrightRef = useRef<HTMLDivElement | null>(null); | ||
| const phonographicCopyrightRef = useRef<HTMLDivElement | null>(null); | ||
| const coCreatorsRef = useRef<HTMLDivElement | null>(null); | ||
| const ipiRef = useRef<HTMLInputElement | null>(null); |
There was a problem hiding this comment.
releaseDateRef/publicationDateRef/barcodeNumberRef/ipiRef are still kept here (and later errors are handled for these fields), but the corresponding inputs were removed from the UI. NewTrack/EditTrack still validate releaseDate as required, so users can be blocked from submitting with no way to fix the error. Please either restore the removed date/barcode/IPI fields, or update validation to skip/remove them during the phase-2 transition and clean up the now-dead refs/effects.
| primaryGenre: [], | ||
| publicationDate: undefined, // TODO: Remove once fully migrated to Track type. | ||
| releaseDate: undefined, // TODO: Remove once fully migrated to Track type. | ||
| secondaryGenre: [], |
There was a problem hiding this comment.
New initial values introduce primaryGenre/secondaryGenre, but the form still maintains genres, coverArtUrl, and required releaseDate validation in the current flow. Since Basic/Advanced details no longer expose inputs for genres/cover art/release date, this will make the New Track form impossible to submit. Please align the Yup schema + submit payload with the new fields (or temporarily skip/remove the required validations until the UI/back-end migration is complete).
| name="releaseType" | ||
| options={ [...RELEASE_TYPE_OPTIONS] } | ||
| placeholder="Select one" | ||
| tooltipText="TO BE UPDATED" |
There was a problem hiding this comment.
The new releaseType field uses placeholder tooltip text ("TO BE UPDATED"), and releaseType is not present in the form's initialValues/validation (it only appears here). Since isOptional={false}, please add a real tooltip (or remove it), include releaseType in initial values (e.g. NONE_OPTION), and decide whether it should be required in the Yup schema so the UI and validation agree.
| tooltipText="TO BE UPDATED" | |
| tooltipText="Select the type of this release (e.g., single, EP, album, or compilation)." |
| <TextInputField | ||
| disabled={ true } | ||
| isOptional={ false } | ||
| label="GENRE" | ||
| label="PRIMARY GENRE" | ||
| name="genres" | ||
| title={ values.genres?.join(", ") || "" } | ||
| /> | ||
|
|
||
| <TextInputField | ||
| disabled={ true } | ||
| isOptional={ true } | ||
| label="SECONDARY GENRE" | ||
| name="genres" | ||
| title={ values.genres?.join(", ") || "" } | ||
| /> |
There was a problem hiding this comment.
Both "PRIMARY GENRE" and "SECONDARY GENRE" fields are bound to the same Formik field (name="genres") and display the same values.genres string. This makes the UI misleading and can also cause the two inputs to overwrite each other if they ever become editable. Please wire these to distinct fields (e.g., primaryGenre/secondaryGenre) or display a single combined "GENRES" field until the backend supports the split.
There was a problem hiding this comment.
Maybe include a comment in this section or update the form field naming scheme as well.
|
|
||
| { title && <Typography variant="h3">{ title.toUpperCase() }</Typography> } | ||
|
|
||
| { /* // TODO: Replace with TrackDeletionHelp once API is updated. */ } |
There was a problem hiding this comment.
The TODO is currently wrapped as { /* // TODO: ... */ } (double comment markers). Consider using a single block comment ({/* TODO: ... */}) to avoid the extra // noise.
| { /* // TODO: Replace with TrackDeletionHelp once API is updated. */ } | |
| {/* TODO: Replace with TrackDeletionHelp once API is updated. */} |
dmkirshon
left a comment
There was a problem hiding this comment.
Look over the copilot review comments, mostly minor fixes, will approve after updates and final review. I didn't see anything major for change otherwise 🚀
Pull Request — Issue #TBD
Overview
Update Studio releases/track flow for phase 2: add release type selection, refine
track UI/copy, centralize tooltip copy, introduce release/track types, and add a
README with pending work and cleanup notes.
Files Summary
Total Changes: 18 files
Added (8)
apps/studio/src/modules/releases/index.tsapps/studio/src/modules/releases/release/index.tsapps/studio/src/modules/releases/release/types.tsapps/studio/src/modules/releases/track/index.tsapps/studio/src/modules/releases/track/types.tsapps/studio/src/pages/home/releases/README.mdapps/studio/src/pages/home/releases/constants.tsxapps/studio/src/pages/home/releases/release/tracks/tabs/PlayTrack.tsxModified (10)
apps/studio/src/common/constants.tsapps/studio/src/components/minting/CoverRemixSample.tsxapps/studio/src/pages/home/releases/ReleaseList.tsxapps/studio/src/pages/home/releases/release/ReleaseDetails.tsxapps/studio/src/pages/home/releases/release/tracks/AdvancedTrackDetails.tsxapps/studio/src/pages/home/releases/release/tracks/BasicTrackDetails.tsxapps/studio/src/pages/home/releases/release/tracks/NewTrack.tsxapps/studio/src/pages/home/releases/release/tracks/ViewTrack.tsxapps/studio/src/pages/home/releases/release/tracks/tabs/TrackInfo.tsxapps/studio/src/pages/home/releases/release/tracks/trackFormTypes.tsDeleted (0)
Impact
Testing
Related Issues
Dependencies
Additional Notes
apps/studio/src/pages/home/releases/README.md.--END--