Skip to content

[C-4637] Edit Collection Page - #9021

Merged
dylanjeffers merged 8 commits into
mainfrom
c-4637-edit-collection-page
Jul 6, 2024
Merged

[C-4637] Edit Collection Page#9021
dylanjeffers merged 8 commits into
mainfrom
c-4637-edit-collection-page

Conversation

@dylanjeffers

Copy link
Copy Markdown
Contributor

Description

Adds edit collection page and connects it to edit collection buttons.
Conforms to all the requirements in figma
Still need to determine what to do with "create-playlist-modal"

@changeset-bot

changeset-botBot commented Jul 2, 2024

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: ddcb39d

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@audius-infra

Copy link
Copy Markdown
Collaborator

@audius-infra

Copy link
Copy Markdown
Collaborator

@audius-infra

Copy link
Copy Markdown
Collaborator

@amendelsohnamendelsohn left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Heck yeah 🔥

Comment on lines +18 to +27
// Pick<
// BaseButtonProps,
// | 'onClick'
// | 'disabled'
// | 'className'
// | 'type'
// | 'children'
// | 'isLoading'
// | 'asChild'
// >

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

leftover comment?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes thank you

[styles.editableTitle]: isOwner
})}
onClick={isOwner ? handleClickEditTitle : undefined}
// @ts-ignore

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if this is valid, should we fix the expected type?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

flex as prop isn't doing the best job figuring out type inference, so this saves having to do a big ternery, not the best situation though...

title: string
customHeader?: Nullable<string>
customDescription?: Nullable<string>
header?: Nullable<string>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we need the optional nullable?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seems overkill agreed, will simplify

props: DeleteCollectionConfirmationModalProps
) => {
const history = useHistory()
const lastLocation = useLastLocation()

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ohhh that's what I was looking for on the track edit page's back button!

if (is_private && !values.is_private && !isReleaseConfirmationOpen) {
setIsReleaseConfirmationOpen(true)
} else {
setIsReleaseConfirmationOpen(false)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this line necessary?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i can double check if that modal closes automatically, probably does since the page naviagtes huh?

const TopLevelPage = ({ showAddToCollection }: TopLevelPageProps) => {
const { isOpen } = useEditPlaylistModal()
const showPage = isOpen || showAddToCollection
const showPage = showAddToCollection

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: could remove this var and use showAddToCollection below

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will dooo


dispatch(editPlaylist(playlist_id, collection as EditPlaylistValues))

dispatch(replace(permalink))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

curious what's the reason to replace here? do we want to remove the edit page from history so you can't back into it?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah that's what is was thinking, its not really a "go-back" type thing, but maybe a product question?


const initialMetadata = {
...(metadata as Collection),
...(collection as unknown as Collection),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tangent, but I think the need to do this arises from the lack of a cache type mapping in audius-query

The endpoints return api models, but once we cache and return them, we're actually returning the cache models. Been thinking about ways to handle this if you want to discuss sometime

import { removeNullable } from 'utils/typeUtils'

// The edit collection form receives a tracks array, but we need to convert that to playlist_contents
export const updatePlaylistContents = (

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so this is just reordering the existing playlist_contents array using tracks as source of truth of order only?

@dylanjeffersdylanjeffersJul 3, 2024

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

order and deletes, yeah. its a bit of annoying addition but it's because we use the tracks array for rending the list of tracks, but ultimately we need to update playlist_contents for the updatePlaylist call

playlist_contents?.track_ids.map((item) => [item.track, item])
)

const updatedPlaylistIds = tracks

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updatedTrackIds?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks

@audius-infra

Copy link
Copy Markdown
Collaborator

@DejayJDDejayJD left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, couple small comments

}),
trackDetails: z.optional(
z.object({
genre: z.optional(GenreSchema),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is genre optional? I thought it was required

Comment on lines +18 to +27
// Pick<
// BaseButtonProps,
// | 'onClick'
// | 'disabled'
// | 'className'
// | 'type'
// | 'children'
// | 'isLoading'
// | 'asChild'
// >

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

comments 👀

[styles.editableTitle]: isOwner
})}
onClick={isOwner ? handleClickEditTitle : undefined}
// @ts-ignore

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

would you mind adding a comment context for the ignore?

Comment on lines +119 to +148
<Flex
direction='column'
gap='l'
ph='xl'
pv='l'
alignItems='flex-start'
>
<Text variant='title' size='l'>
{messages.trackDetails.title}
</Text>
<Text variant='body'>{messages.trackDetails.description}</Text>
<Flex w='100%' gap='s'>
<SelectGenreField name='trackDetails.genre' />
<SelectMoodField name='trackDetails.mood' />
</Flex>
<TagField name='trackDetails.tags' />
{isAlbum && <StemsAndDownloadsCollectionField />}
</Flex>
) : null}
{!isUpload ? (
<Flex>
<Button
variant='destructive'
size='small'
iconLeft={IconTrash}
onClick={() => setIsDeleteConfirmationOpen(true)}
>
{messages.deleteCollection(collectionTypeName)}
</Button>
</Flex>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: imo could read a bit clearer if you split these out above like

constrenderUpload=()=>constrenderEdit=()=>{isUpload ? renderUpload() : renderEdit()}

const collection = useSelector((state) =>
getCollection(state, { id: collectionId })
)
const { is_album, permalink } = collection ?? {}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: prefer to convert this to isAlbum

@dylanjeffers
dylanjeffersforce-pushed the c-4637-edit-collection-page branch from 61a13b9 to 339daf6CompareJuly 5, 2024 17:57
@audius-infra

Copy link
Copy Markdown
Collaborator

@dylanjeffers
dylanjeffers merged commit ef68724 into mainJul 6, 2024
@dylanjeffers
dylanjeffers deleted the c-4637-edit-collection-page branch July 6, 2024 02:02
audius-infra pushed a commit that referenced this pull request Jul 6, 2024
[9819b5d] [PROTO-1867] OTP only on unfamiliar devices (#9023) Danny
[ef68724] [C-4637] Edit Collection Page (#9021) Dylan Jeffers
[119465e] [C-4632] Show 'remove' artwork button on edit collection, otherwise 'change' button (#9042) Andrew Mendelsohn
[fb506c3] Fix preview times longer than track duration not erroring (#9039) Reed
[8df874e] [C-4649] fix jumping date picker popup (#9038) Andrew Mendelsohn
[6ed21e6] [C-4606] Mobile advanced search All Results screen (#9037) Sebastian Klingler
[7f77671] [C-4641C-4654C-4648] Edit track page fixes (#9033) Dylan Jeffers
[69dd11c] [C-4688] Add AlbumResults and PlaylistResults for advanced search (#9031) Sebastian Klingler
[23835e7] [C-4652] Fix track update access conditions (#9035) Reed
[0e1c5ee] [PAY-3125] Add SDK support for location in transaction (#8904) Raymond Jacobson
[83b37e8] Connect remaining mobile search filters (#9032) Kyle Shanks
[826bcd2] [C-4586] Add mobile FilterBpmScreen for new search screen (#9029) Kyle Shanks
[e273c60] Update dapp-store build artifacts audius-infra
[0869462] [C-4687] Wire up mobile advanced search tracks lineup (#9030) Sebastian Klingler
[a00a708] [C-4412] Migrate native buttons to harmony-native (#8810) Dylan Jeffers
[8302e19] [QA-1416] Fix top-artists and audius-query (#9025) Dylan Jeffers
[a94c07e] [C-4621] Advanced search mobile web (#9019) Sebastian Klingler
[0fbd54f] [QA-1414] Force fetch playlist on navigate from playlist tile (#9020) Andrew Mendelsohn
[2cabca6] [PAY-3145][PAY-3150] Do not show hidden track/album in feed/trending/explore (#9015) Saliou Diallo
[42e8be5] [PROTO-1868PROTO-1871PROTO-1865] lookup key <> wallet association (#8815) alecsavvy
[9a50c42] [QA-1403] Fix "Not enough signers" simulation error in "Claim All Rewards" flow (#9012) Marcus Pasell
[3027d8a] [C-4555] Add release date to new track edit (#9018) JD Francis
[ecc4e27] PAY-2489PAY-2507 Fix UI for Change Email, Change Password (#9010) Marcus Pasell
[ab89dc3] [C-4585] Add mobile search musical key filter (#9009) Dylan Jeffers
[d400b83] [QA-1412] Show play button and hide stats on smart collections (#9017) Andrew Mendelsohn
[e2f3cc2] Make small label update to FilterButton (#9016) Kyle Shanks
[4a4b3aa] [PAY-3147] Allow unsave/unrepost hidden track/album (#8995) Saliou Diallo
[abb2e78] [C-4624] Add FilterButton to Harmony Native (#8998) Kyle Shanks
[db90ca8] [C-4572] Advanced search UI polish (#9004) Sebastian Klingler
[1e87a5b] [QA-1409] Fix mobile nowplaying images not loading after failure state (#9005) JD Francis
[8b671b4] Improve mobile search state and navigation (#9008) Dylan Jeffers
[b3b898b] Bump mobile apps to 105 (#9013) Dylan Jeffers
[1fda969] [PAY-3133][PAY-3127] Better UX for accept/reject flows (#8980) Randy Schott
[a3001b2] Fix visibility field tests (#9011) Andrew Mendelsohn
schottra added a commit that referenced this pull request Jul 8, 2024
…nav-styling
* origin/main: (36 commits)
Fix mobile single-OTP signup (#9056)
Hide 0 stats on mobile collection screens (#9054)
[C-4695] Fix remix field visibility (#9049)
[C-4647] Fix license type (#9048)
[C-4594] Fix user-generated-text links (#9050)
Mediorum: skip image transcode (#9051)
[Protodash] Show pending transactions on Overview page; tell users they have to come back to undelegate [QA-1396] (#8903)
PROTO-1866: merge change email and post auth into one route (#9028)
Bump mobile versions to 106 (#9047)
Audius Protocol v0.6.142
[C-46916] Fix Block API Streaming (#9044)
[C-4650] Fix visibility field when released scheduled release (#9043)
Patch paginated query bug (#9046)
Fix condition for adding hidden track to playlist (#9045)
Audius Client (Web and Mobile) v1.5.89
[PROTO-1867] OTP only on unfamiliar devices (#9023)
[C-4637] Edit Collection Page (#9021)
[C-4632] Show 'remove' artwork button on edit collection, otherwise 'change' button (#9042)
[C-4694] Add track_count to non-full playlist endpoint (#9040)
Fix preview times longer than track duration not erroring (#9039)
...
dylanjeffers added a commit that referenced this pull request Jul 10, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@dylanjeffers@audius-infra@amendelsohn@DejayJD
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
[C-4637] Edit Collection Page by dylanjeffers · Pull Request #9021 · AudiusProject/apps · GitHub
Skip to content

[C-4637] Edit Collection Page - #9021

Merged
dylanjeffers merged 8 commits into
mainfrom
c-4637-edit-collection-page
Jul 6, 2024
Merged

[C-4637] Edit Collection Page#9021
dylanjeffers merged 8 commits into
mainfrom
c-4637-edit-collection-page

Conversation

@dylanjeffers

Copy link
Copy Markdown
Contributor

Description

Adds edit collection page and connects it to edit collection buttons.
Conforms to all the requirements in figma
Still need to determine what to do with "create-playlist-modal"

@changeset-bot

changeset-botBot commented Jul 2, 2024

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: ddcb39d

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@audius-infra

Copy link
Copy Markdown
Collaborator

@audius-infra

Copy link
Copy Markdown
Collaborator

@audius-infra

Copy link
Copy Markdown
Collaborator

@amendelsohnamendelsohn left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Heck yeah 🔥

Comment on lines +18 to +27
// Pick<
// BaseButtonProps,
// | 'onClick'
// | 'disabled'
// | 'className'
// | 'type'
// | 'children'
// | 'isLoading'
// | 'asChild'
// >

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

leftover comment?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes thank you

[styles.editableTitle]: isOwner
})}
onClick={isOwner ? handleClickEditTitle : undefined}
// @ts-ignore

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if this is valid, should we fix the expected type?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

flex as prop isn't doing the best job figuring out type inference, so this saves having to do a big ternery, not the best situation though...

title: string
customHeader?: Nullable<string>
customDescription?: Nullable<string>
header?: Nullable<string>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we need the optional nullable?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seems overkill agreed, will simplify

props: DeleteCollectionConfirmationModalProps
) => {
const history = useHistory()
const lastLocation = useLastLocation()

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ohhh that's what I was looking for on the track edit page's back button!

if (is_private && !values.is_private && !isReleaseConfirmationOpen) {
setIsReleaseConfirmationOpen(true)
} else {
setIsReleaseConfirmationOpen(false)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this line necessary?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i can double check if that modal closes automatically, probably does since the page naviagtes huh?

const TopLevelPage = ({ showAddToCollection }: TopLevelPageProps) => {
const { isOpen } = useEditPlaylistModal()
const showPage = isOpen || showAddToCollection
const showPage = showAddToCollection

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: could remove this var and use showAddToCollection below

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will dooo


dispatch(editPlaylist(playlist_id, collection as EditPlaylistValues))

dispatch(replace(permalink))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

curious what's the reason to replace here? do we want to remove the edit page from history so you can't back into it?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah that's what is was thinking, its not really a "go-back" type thing, but maybe a product question?


const initialMetadata = {
...(metadata as Collection),
...(collection as unknown as Collection),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tangent, but I think the need to do this arises from the lack of a cache type mapping in audius-query

The endpoints return api models, but once we cache and return them, we're actually returning the cache models. Been thinking about ways to handle this if you want to discuss sometime

import { removeNullable } from 'utils/typeUtils'

// The edit collection form receives a tracks array, but we need to convert that to playlist_contents
export const updatePlaylistContents = (

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so this is just reordering the existing playlist_contents array using tracks as source of truth of order only?

@dylanjeffersdylanjeffersJul 3, 2024

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

order and deletes, yeah. its a bit of annoying addition but it's because we use the tracks array for rending the list of tracks, but ultimately we need to update playlist_contents for the updatePlaylist call

playlist_contents?.track_ids.map((item) => [item.track, item])
)

const updatedPlaylistIds = tracks

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updatedTrackIds?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks

@audius-infra

Copy link
Copy Markdown
Collaborator

@DejayJDDejayJD left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, couple small comments

}),
trackDetails: z.optional(
z.object({
genre: z.optional(GenreSchema),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is genre optional? I thought it was required

Comment on lines +18 to +27
// Pick<
// BaseButtonProps,
// | 'onClick'
// | 'disabled'
// | 'className'
// | 'type'
// | 'children'
// | 'isLoading'
// | 'asChild'
// >

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

comments 👀

[styles.editableTitle]: isOwner
})}
onClick={isOwner ? handleClickEditTitle : undefined}
// @ts-ignore

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

would you mind adding a comment context for the ignore?

Comment on lines +119 to +148
<Flex
direction='column'
gap='l'
ph='xl'
pv='l'
alignItems='flex-start'
>
<Text variant='title' size='l'>
{messages.trackDetails.title}
</Text>
<Text variant='body'>{messages.trackDetails.description}</Text>
<Flex w='100%' gap='s'>
<SelectGenreField name='trackDetails.genre' />
<SelectMoodField name='trackDetails.mood' />
</Flex>
<TagField name='trackDetails.tags' />
{isAlbum && <StemsAndDownloadsCollectionField />}
</Flex>
) : null}
{!isUpload ? (
<Flex>
<Button
variant='destructive'
size='small'
iconLeft={IconTrash}
onClick={() => setIsDeleteConfirmationOpen(true)}
>
{messages.deleteCollection(collectionTypeName)}
</Button>
</Flex>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: imo could read a bit clearer if you split these out above like

constrenderUpload=()=>constrenderEdit=()=>{isUpload ? renderUpload() : renderEdit()}

const collection = useSelector((state) =>
getCollection(state, { id: collectionId })
)
const { is_album, permalink } = collection ?? {}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: prefer to convert this to isAlbum

@dylanjeffers
dylanjeffersforce-pushed the c-4637-edit-collection-page branch from 61a13b9 to 339daf6CompareJuly 5, 2024 17:57
@audius-infra

Copy link
Copy Markdown
Collaborator

@dylanjeffers
dylanjeffers merged commit ef68724 into mainJul 6, 2024
@dylanjeffers
dylanjeffers deleted the c-4637-edit-collection-page branch July 6, 2024 02:02
audius-infra pushed a commit that referenced this pull request Jul 6, 2024
[9819b5d] [PROTO-1867] OTP only on unfamiliar devices (#9023) Danny
[ef68724] [C-4637] Edit Collection Page (#9021) Dylan Jeffers
[119465e] [C-4632] Show 'remove' artwork button on edit collection, otherwise 'change' button (#9042) Andrew Mendelsohn
[fb506c3] Fix preview times longer than track duration not erroring (#9039) Reed
[8df874e] [C-4649] fix jumping date picker popup (#9038) Andrew Mendelsohn
[6ed21e6] [C-4606] Mobile advanced search All Results screen (#9037) Sebastian Klingler
[7f77671] [C-4641C-4654C-4648] Edit track page fixes (#9033) Dylan Jeffers
[69dd11c] [C-4688] Add AlbumResults and PlaylistResults for advanced search (#9031) Sebastian Klingler
[23835e7] [C-4652] Fix track update access conditions (#9035) Reed
[0e1c5ee] [PAY-3125] Add SDK support for location in transaction (#8904) Raymond Jacobson
[83b37e8] Connect remaining mobile search filters (#9032) Kyle Shanks
[826bcd2] [C-4586] Add mobile FilterBpmScreen for new search screen (#9029) Kyle Shanks
[e273c60] Update dapp-store build artifacts audius-infra
[0869462] [C-4687] Wire up mobile advanced search tracks lineup (#9030) Sebastian Klingler
[a00a708] [C-4412] Migrate native buttons to harmony-native (#8810) Dylan Jeffers
[8302e19] [QA-1416] Fix top-artists and audius-query (#9025) Dylan Jeffers
[a94c07e] [C-4621] Advanced search mobile web (#9019) Sebastian Klingler
[0fbd54f] [QA-1414] Force fetch playlist on navigate from playlist tile (#9020) Andrew Mendelsohn
[2cabca6] [PAY-3145][PAY-3150] Do not show hidden track/album in feed/trending/explore (#9015) Saliou Diallo
[42e8be5] [PROTO-1868PROTO-1871PROTO-1865] lookup key <> wallet association (#8815) alecsavvy
[9a50c42] [QA-1403] Fix "Not enough signers" simulation error in "Claim All Rewards" flow (#9012) Marcus Pasell
[3027d8a] [C-4555] Add release date to new track edit (#9018) JD Francis
[ecc4e27] PAY-2489PAY-2507 Fix UI for Change Email, Change Password (#9010) Marcus Pasell
[ab89dc3] [C-4585] Add mobile search musical key filter (#9009) Dylan Jeffers
[d400b83] [QA-1412] Show play button and hide stats on smart collections (#9017) Andrew Mendelsohn
[e2f3cc2] Make small label update to FilterButton (#9016) Kyle Shanks
[4a4b3aa] [PAY-3147] Allow unsave/unrepost hidden track/album (#8995) Saliou Diallo
[abb2e78] [C-4624] Add FilterButton to Harmony Native (#8998) Kyle Shanks
[db90ca8] [C-4572] Advanced search UI polish (#9004) Sebastian Klingler
[1e87a5b] [QA-1409] Fix mobile nowplaying images not loading after failure state (#9005) JD Francis
[8b671b4] Improve mobile search state and navigation (#9008) Dylan Jeffers
[b3b898b] Bump mobile apps to 105 (#9013) Dylan Jeffers
[1fda969] [PAY-3133][PAY-3127] Better UX for accept/reject flows (#8980) Randy Schott
[a3001b2] Fix visibility field tests (#9011) Andrew Mendelsohn
schottra added a commit that referenced this pull request Jul 8, 2024
…nav-styling
* origin/main: (36 commits)
Fix mobile single-OTP signup (#9056)
Hide 0 stats on mobile collection screens (#9054)
[C-4695] Fix remix field visibility (#9049)
[C-4647] Fix license type (#9048)
[C-4594] Fix user-generated-text links (#9050)
Mediorum: skip image transcode (#9051)
[Protodash] Show pending transactions on Overview page; tell users they have to come back to undelegate [QA-1396] (#8903)
PROTO-1866: merge change email and post auth into one route (#9028)
Bump mobile versions to 106 (#9047)
Audius Protocol v0.6.142
[C-46916] Fix Block API Streaming (#9044)
[C-4650] Fix visibility field when released scheduled release (#9043)
Patch paginated query bug (#9046)
Fix condition for adding hidden track to playlist (#9045)
Audius Client (Web and Mobile) v1.5.89
[PROTO-1867] OTP only on unfamiliar devices (#9023)
[C-4637] Edit Collection Page (#9021)
[C-4632] Show 'remove' artwork button on edit collection, otherwise 'change' button (#9042)
[C-4694] Add track_count to non-full playlist endpoint (#9040)
Fix preview times longer than track duration not erroring (#9039)
...
dylanjeffers added a commit that referenced this pull request Jul 10, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@dylanjeffers@audius-infra@amendelsohn@DejayJD
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [C-4637] Edit Collection Page by dylanjeffers · Pull Request #9021 · AudiusProject/apps · GitHub
Skip to content

[C-4637] Edit Collection Page - #9021

Merged
dylanjeffers merged 8 commits into
mainfrom
c-4637-edit-collection-page
Jul 6, 2024
Merged

[C-4637] Edit Collection Page#9021
dylanjeffers merged 8 commits into
mainfrom
c-4637-edit-collection-page

Conversation

@dylanjeffers

Copy link
Copy Markdown
Contributor

Description

Adds edit collection page and connects it to edit collection buttons.
Conforms to all the requirements in figma
Still need to determine what to do with "create-playlist-modal"

@changeset-bot

changeset-botBot commented Jul 2, 2024

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: ddcb39d

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@audius-infra

Copy link
Copy Markdown
Collaborator

@audius-infra

Copy link
Copy Markdown
Collaborator

@audius-infra

Copy link
Copy Markdown
Collaborator

@amendelsohnamendelsohn left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Heck yeah 🔥

Comment on lines +18 to +27
// Pick<
// BaseButtonProps,
// | 'onClick'
// | 'disabled'
// | 'className'
// | 'type'
// | 'children'
// | 'isLoading'
// | 'asChild'
// >

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

leftover comment?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes thank you

[styles.editableTitle]: isOwner
})}
onClick={isOwner ? handleClickEditTitle : undefined}
// @ts-ignore

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if this is valid, should we fix the expected type?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

flex as prop isn't doing the best job figuring out type inference, so this saves having to do a big ternery, not the best situation though...

title: string
customHeader?: Nullable<string>
customDescription?: Nullable<string>
header?: Nullable<string>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we need the optional nullable?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seems overkill agreed, will simplify

props: DeleteCollectionConfirmationModalProps
) => {
const history = useHistory()
const lastLocation = useLastLocation()

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ohhh that's what I was looking for on the track edit page's back button!

if (is_private && !values.is_private && !isReleaseConfirmationOpen) {
setIsReleaseConfirmationOpen(true)
} else {
setIsReleaseConfirmationOpen(false)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this line necessary?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i can double check if that modal closes automatically, probably does since the page naviagtes huh?

const TopLevelPage = ({ showAddToCollection }: TopLevelPageProps) => {
const { isOpen } = useEditPlaylistModal()
const showPage = isOpen || showAddToCollection
const showPage = showAddToCollection

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: could remove this var and use showAddToCollection below

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will dooo


dispatch(editPlaylist(playlist_id, collection as EditPlaylistValues))

dispatch(replace(permalink))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

curious what's the reason to replace here? do we want to remove the edit page from history so you can't back into it?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah that's what is was thinking, its not really a "go-back" type thing, but maybe a product question?


const initialMetadata = {
...(metadata as Collection),
...(collection as unknown as Collection),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tangent, but I think the need to do this arises from the lack of a cache type mapping in audius-query

The endpoints return api models, but once we cache and return them, we're actually returning the cache models. Been thinking about ways to handle this if you want to discuss sometime

import { removeNullable } from 'utils/typeUtils'

// The edit collection form receives a tracks array, but we need to convert that to playlist_contents
export const updatePlaylistContents = (

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so this is just reordering the existing playlist_contents array using tracks as source of truth of order only?

@dylanjeffersdylanjeffersJul 3, 2024

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

order and deletes, yeah. its a bit of annoying addition but it's because we use the tracks array for rending the list of tracks, but ultimately we need to update playlist_contents for the updatePlaylist call

playlist_contents?.track_ids.map((item) => [item.track, item])
)

const updatedPlaylistIds = tracks

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updatedTrackIds?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks

@audius-infra

Copy link
Copy Markdown
Collaborator

@DejayJDDejayJD left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, couple small comments

}),
trackDetails: z.optional(
z.object({
genre: z.optional(GenreSchema),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is genre optional? I thought it was required

Comment on lines +18 to +27
// Pick<
// BaseButtonProps,
// | 'onClick'
// | 'disabled'
// | 'className'
// | 'type'
// | 'children'
// | 'isLoading'
// | 'asChild'
// >

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

comments 👀

[styles.editableTitle]: isOwner
})}
onClick={isOwner ? handleClickEditTitle : undefined}
// @ts-ignore

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

would you mind adding a comment context for the ignore?

Comment on lines +119 to +148
<Flex
direction='column'
gap='l'
ph='xl'
pv='l'
alignItems='flex-start'
>
<Text variant='title' size='l'>
{messages.trackDetails.title}
</Text>
<Text variant='body'>{messages.trackDetails.description}</Text>
<Flex w='100%' gap='s'>
<SelectGenreField name='trackDetails.genre' />
<SelectMoodField name='trackDetails.mood' />
</Flex>
<TagField name='trackDetails.tags' />
{isAlbum && <StemsAndDownloadsCollectionField />}
</Flex>
) : null}
{!isUpload ? (
<Flex>
<Button
variant='destructive'
size='small'
iconLeft={IconTrash}
onClick={() => setIsDeleteConfirmationOpen(true)}
>
{messages.deleteCollection(collectionTypeName)}
</Button>
</Flex>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: imo could read a bit clearer if you split these out above like

constrenderUpload=()=>constrenderEdit=()=>{isUpload ? renderUpload() : renderEdit()}

const collection = useSelector((state) =>
getCollection(state, { id: collectionId })
)
const { is_album, permalink } = collection ?? {}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: prefer to convert this to isAlbum

@dylanjeffers
dylanjeffersforce-pushed the c-4637-edit-collection-page branch from 61a13b9 to 339daf6CompareJuly 5, 2024 17:57
@audius-infra

Copy link
Copy Markdown
Collaborator

@dylanjeffers
dylanjeffers merged commit ef68724 into mainJul 6, 2024
@dylanjeffers
dylanjeffers deleted the c-4637-edit-collection-page branch July 6, 2024 02:02
audius-infra pushed a commit that referenced this pull request Jul 6, 2024
[9819b5d] [PROTO-1867] OTP only on unfamiliar devices (#9023) Danny
[ef68724] [C-4637] Edit Collection Page (#9021) Dylan Jeffers
[119465e] [C-4632] Show 'remove' artwork button on edit collection, otherwise 'change' button (#9042) Andrew Mendelsohn
[fb506c3] Fix preview times longer than track duration not erroring (#9039) Reed
[8df874e] [C-4649] fix jumping date picker popup (#9038) Andrew Mendelsohn
[6ed21e6] [C-4606] Mobile advanced search All Results screen (#9037) Sebastian Klingler
[7f77671] [C-4641C-4654C-4648] Edit track page fixes (#9033) Dylan Jeffers
[69dd11c] [C-4688] Add AlbumResults and PlaylistResults for advanced search (#9031) Sebastian Klingler
[23835e7] [C-4652] Fix track update access conditions (#9035) Reed
[0e1c5ee] [PAY-3125] Add SDK support for location in transaction (#8904) Raymond Jacobson
[83b37e8] Connect remaining mobile search filters (#9032) Kyle Shanks
[826bcd2] [C-4586] Add mobile FilterBpmScreen for new search screen (#9029) Kyle Shanks
[e273c60] Update dapp-store build artifacts audius-infra
[0869462] [C-4687] Wire up mobile advanced search tracks lineup (#9030) Sebastian Klingler
[a00a708] [C-4412] Migrate native buttons to harmony-native (#8810) Dylan Jeffers
[8302e19] [QA-1416] Fix top-artists and audius-query (#9025) Dylan Jeffers
[a94c07e] [C-4621] Advanced search mobile web (#9019) Sebastian Klingler
[0fbd54f] [QA-1414] Force fetch playlist on navigate from playlist tile (#9020) Andrew Mendelsohn
[2cabca6] [PAY-3145][PAY-3150] Do not show hidden track/album in feed/trending/explore (#9015) Saliou Diallo
[42e8be5] [PROTO-1868PROTO-1871PROTO-1865] lookup key <> wallet association (#8815) alecsavvy
[9a50c42] [QA-1403] Fix "Not enough signers" simulation error in "Claim All Rewards" flow (#9012) Marcus Pasell
[3027d8a] [C-4555] Add release date to new track edit (#9018) JD Francis
[ecc4e27] PAY-2489PAY-2507 Fix UI for Change Email, Change Password (#9010) Marcus Pasell
[ab89dc3] [C-4585] Add mobile search musical key filter (#9009) Dylan Jeffers
[d400b83] [QA-1412] Show play button and hide stats on smart collections (#9017) Andrew Mendelsohn
[e2f3cc2] Make small label update to FilterButton (#9016) Kyle Shanks
[4a4b3aa] [PAY-3147] Allow unsave/unrepost hidden track/album (#8995) Saliou Diallo
[abb2e78] [C-4624] Add FilterButton to Harmony Native (#8998) Kyle Shanks
[db90ca8] [C-4572] Advanced search UI polish (#9004) Sebastian Klingler
[1e87a5b] [QA-1409] Fix mobile nowplaying images not loading after failure state (#9005) JD Francis
[8b671b4] Improve mobile search state and navigation (#9008) Dylan Jeffers
[b3b898b] Bump mobile apps to 105 (#9013) Dylan Jeffers
[1fda969] [PAY-3133][PAY-3127] Better UX for accept/reject flows (#8980) Randy Schott
[a3001b2] Fix visibility field tests (#9011) Andrew Mendelsohn
schottra added a commit that referenced this pull request Jul 8, 2024
…nav-styling
* origin/main: (36 commits)
Fix mobile single-OTP signup (#9056)
Hide 0 stats on mobile collection screens (#9054)
[C-4695] Fix remix field visibility (#9049)
[C-4647] Fix license type (#9048)
[C-4594] Fix user-generated-text links (#9050)
Mediorum: skip image transcode (#9051)
[Protodash] Show pending transactions on Overview page; tell users they have to come back to undelegate [QA-1396] (#8903)
PROTO-1866: merge change email and post auth into one route (#9028)
Bump mobile versions to 106 (#9047)
Audius Protocol v0.6.142
[C-46916] Fix Block API Streaming (#9044)
[C-4650] Fix visibility field when released scheduled release (#9043)
Patch paginated query bug (#9046)
Fix condition for adding hidden track to playlist (#9045)
Audius Client (Web and Mobile) v1.5.89
[PROTO-1867] OTP only on unfamiliar devices (#9023)
[C-4637] Edit Collection Page (#9021)
[C-4632] Show 'remove' artwork button on edit collection, otherwise 'change' button (#9042)
[C-4694] Add track_count to non-full playlist endpoint (#9040)
Fix preview times longer than track duration not erroring (#9039)
...
dylanjeffers added a commit that referenced this pull request Jul 10, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@dylanjeffers@audius-infra@amendelsohn@DejayJD
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [C-4637] Edit Collection Page by dylanjeffers · Pull Request #9021 · AudiusProject/apps · GitHub
Skip to content

[C-4637] Edit Collection Page - #9021

Merged
dylanjeffers merged 8 commits into
mainfrom
c-4637-edit-collection-page
Jul 6, 2024
Merged

[C-4637] Edit Collection Page#9021
dylanjeffers merged 8 commits into
mainfrom
c-4637-edit-collection-page

Conversation

@dylanjeffers

Copy link
Copy Markdown
Contributor

Description

Adds edit collection page and connects it to edit collection buttons.
Conforms to all the requirements in figma
Still need to determine what to do with "create-playlist-modal"

@changeset-bot

changeset-botBot commented Jul 2, 2024

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: ddcb39d

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@audius-infra

Copy link
Copy Markdown
Collaborator

@audius-infra

Copy link
Copy Markdown
Collaborator

@audius-infra

Copy link
Copy Markdown
Collaborator

@amendelsohnamendelsohn left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Heck yeah 🔥

Comment on lines +18 to +27
// Pick<
// BaseButtonProps,
// | 'onClick'
// | 'disabled'
// | 'className'
// | 'type'
// | 'children'
// | 'isLoading'
// | 'asChild'
// >

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

leftover comment?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes thank you

[styles.editableTitle]: isOwner
})}
onClick={isOwner ? handleClickEditTitle : undefined}
// @ts-ignore

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if this is valid, should we fix the expected type?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

flex as prop isn't doing the best job figuring out type inference, so this saves having to do a big ternery, not the best situation though...

title: string
customHeader?: Nullable<string>
customDescription?: Nullable<string>
header?: Nullable<string>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we need the optional nullable?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seems overkill agreed, will simplify

props: DeleteCollectionConfirmationModalProps
) => {
const history = useHistory()
const lastLocation = useLastLocation()

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ohhh that's what I was looking for on the track edit page's back button!

if (is_private && !values.is_private && !isReleaseConfirmationOpen) {
setIsReleaseConfirmationOpen(true)
} else {
setIsReleaseConfirmationOpen(false)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this line necessary?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i can double check if that modal closes automatically, probably does since the page naviagtes huh?

const TopLevelPage = ({ showAddToCollection }: TopLevelPageProps) => {
const { isOpen } = useEditPlaylistModal()
const showPage = isOpen || showAddToCollection
const showPage = showAddToCollection

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: could remove this var and use showAddToCollection below

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will dooo


dispatch(editPlaylist(playlist_id, collection as EditPlaylistValues))

dispatch(replace(permalink))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

curious what's the reason to replace here? do we want to remove the edit page from history so you can't back into it?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah that's what is was thinking, its not really a "go-back" type thing, but maybe a product question?


const initialMetadata = {
...(metadata as Collection),
...(collection as unknown as Collection),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tangent, but I think the need to do this arises from the lack of a cache type mapping in audius-query

The endpoints return api models, but once we cache and return them, we're actually returning the cache models. Been thinking about ways to handle this if you want to discuss sometime

import { removeNullable } from 'utils/typeUtils'

// The edit collection form receives a tracks array, but we need to convert that to playlist_contents
export const updatePlaylistContents = (

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so this is just reordering the existing playlist_contents array using tracks as source of truth of order only?

@dylanjeffersdylanjeffersJul 3, 2024

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

order and deletes, yeah. its a bit of annoying addition but it's because we use the tracks array for rending the list of tracks, but ultimately we need to update playlist_contents for the updatePlaylist call

playlist_contents?.track_ids.map((item) => [item.track, item])
)

const updatedPlaylistIds = tracks

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updatedTrackIds?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks

@audius-infra

Copy link
Copy Markdown
Collaborator

@DejayJDDejayJD left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, couple small comments

}),
trackDetails: z.optional(
z.object({
genre: z.optional(GenreSchema),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is genre optional? I thought it was required

Comment on lines +18 to +27
// Pick<
// BaseButtonProps,
// | 'onClick'
// | 'disabled'
// | 'className'
// | 'type'
// | 'children'
// | 'isLoading'
// | 'asChild'
// >

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

comments 👀

[styles.editableTitle]: isOwner
})}
onClick={isOwner ? handleClickEditTitle : undefined}
// @ts-ignore

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

would you mind adding a comment context for the ignore?

Comment on lines +119 to +148
<Flex
direction='column'
gap='l'
ph='xl'
pv='l'
alignItems='flex-start'
>
<Text variant='title' size='l'>
{messages.trackDetails.title}
</Text>
<Text variant='body'>{messages.trackDetails.description}</Text>
<Flex w='100%' gap='s'>
<SelectGenreField name='trackDetails.genre' />
<SelectMoodField name='trackDetails.mood' />
</Flex>
<TagField name='trackDetails.tags' />
{isAlbum && <StemsAndDownloadsCollectionField />}
</Flex>
) : null}
{!isUpload ? (
<Flex>
<Button
variant='destructive'
size='small'
iconLeft={IconTrash}
onClick={() => setIsDeleteConfirmationOpen(true)}
>
{messages.deleteCollection(collectionTypeName)}
</Button>
</Flex>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: imo could read a bit clearer if you split these out above like

constrenderUpload=()=>constrenderEdit=()=>{isUpload ? renderUpload() : renderEdit()}

const collection = useSelector((state) =>
getCollection(state, { id: collectionId })
)
const { is_album, permalink } = collection ?? {}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: prefer to convert this to isAlbum

@dylanjeffers
dylanjeffersforce-pushed the c-4637-edit-collection-page branch from 61a13b9 to 339daf6CompareJuly 5, 2024 17:57
@audius-infra

Copy link
Copy Markdown
Collaborator

@dylanjeffers
dylanjeffers merged commit ef68724 into mainJul 6, 2024
@dylanjeffers
dylanjeffers deleted the c-4637-edit-collection-page branch July 6, 2024 02:02
audius-infra pushed a commit that referenced this pull request Jul 6, 2024
[9819b5d] [PROTO-1867] OTP only on unfamiliar devices (#9023) Danny
[ef68724] [C-4637] Edit Collection Page (#9021) Dylan Jeffers
[119465e] [C-4632] Show 'remove' artwork button on edit collection, otherwise 'change' button (#9042) Andrew Mendelsohn
[fb506c3] Fix preview times longer than track duration not erroring (#9039) Reed
[8df874e] [C-4649] fix jumping date picker popup (#9038) Andrew Mendelsohn
[6ed21e6] [C-4606] Mobile advanced search All Results screen (#9037) Sebastian Klingler
[7f77671] [C-4641C-4654C-4648] Edit track page fixes (#9033) Dylan Jeffers
[69dd11c] [C-4688] Add AlbumResults and PlaylistResults for advanced search (#9031) Sebastian Klingler
[23835e7] [C-4652] Fix track update access conditions (#9035) Reed
[0e1c5ee] [PAY-3125] Add SDK support for location in transaction (#8904) Raymond Jacobson
[83b37e8] Connect remaining mobile search filters (#9032) Kyle Shanks
[826bcd2] [C-4586] Add mobile FilterBpmScreen for new search screen (#9029) Kyle Shanks
[e273c60] Update dapp-store build artifacts audius-infra
[0869462] [C-4687] Wire up mobile advanced search tracks lineup (#9030) Sebastian Klingler
[a00a708] [C-4412] Migrate native buttons to harmony-native (#8810) Dylan Jeffers
[8302e19] [QA-1416] Fix top-artists and audius-query (#9025) Dylan Jeffers
[a94c07e] [C-4621] Advanced search mobile web (#9019) Sebastian Klingler
[0fbd54f] [QA-1414] Force fetch playlist on navigate from playlist tile (#9020) Andrew Mendelsohn
[2cabca6] [PAY-3145][PAY-3150] Do not show hidden track/album in feed/trending/explore (#9015) Saliou Diallo
[42e8be5] [PROTO-1868PROTO-1871PROTO-1865] lookup key <> wallet association (#8815) alecsavvy
[9a50c42] [QA-1403] Fix "Not enough signers" simulation error in "Claim All Rewards" flow (#9012) Marcus Pasell
[3027d8a] [C-4555] Add release date to new track edit (#9018) JD Francis
[ecc4e27] PAY-2489PAY-2507 Fix UI for Change Email, Change Password (#9010) Marcus Pasell
[ab89dc3] [C-4585] Add mobile search musical key filter (#9009) Dylan Jeffers
[d400b83] [QA-1412] Show play button and hide stats on smart collections (#9017) Andrew Mendelsohn
[e2f3cc2] Make small label update to FilterButton (#9016) Kyle Shanks
[4a4b3aa] [PAY-3147] Allow unsave/unrepost hidden track/album (#8995) Saliou Diallo
[abb2e78] [C-4624] Add FilterButton to Harmony Native (#8998) Kyle Shanks
[db90ca8] [C-4572] Advanced search UI polish (#9004) Sebastian Klingler
[1e87a5b] [QA-1409] Fix mobile nowplaying images not loading after failure state (#9005) JD Francis
[8b671b4] Improve mobile search state and navigation (#9008) Dylan Jeffers
[b3b898b] Bump mobile apps to 105 (#9013) Dylan Jeffers
[1fda969] [PAY-3133][PAY-3127] Better UX for accept/reject flows (#8980) Randy Schott
[a3001b2] Fix visibility field tests (#9011) Andrew Mendelsohn
schottra added a commit that referenced this pull request Jul 8, 2024
…nav-styling
* origin/main: (36 commits)
Fix mobile single-OTP signup (#9056)
Hide 0 stats on mobile collection screens (#9054)
[C-4695] Fix remix field visibility (#9049)
[C-4647] Fix license type (#9048)
[C-4594] Fix user-generated-text links (#9050)
Mediorum: skip image transcode (#9051)
[Protodash] Show pending transactions on Overview page; tell users they have to come back to undelegate [QA-1396] (#8903)
PROTO-1866: merge change email and post auth into one route (#9028)
Bump mobile versions to 106 (#9047)
Audius Protocol v0.6.142
[C-46916] Fix Block API Streaming (#9044)
[C-4650] Fix visibility field when released scheduled release (#9043)
Patch paginated query bug (#9046)
Fix condition for adding hidden track to playlist (#9045)
Audius Client (Web and Mobile) v1.5.89
[PROTO-1867] OTP only on unfamiliar devices (#9023)
[C-4637] Edit Collection Page (#9021)
[C-4632] Show 'remove' artwork button on edit collection, otherwise 'change' button (#9042)
[C-4694] Add track_count to non-full playlist endpoint (#9040)
Fix preview times longer than track duration not erroring (#9039)
...
dylanjeffers added a commit that referenced this pull request Jul 10, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@dylanjeffers@audius-infra@amendelsohn@DejayJD
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' [C-4637] Edit Collection Page by dylanjeffers · Pull Request #9021 · AudiusProject/apps · GitHub
Skip to content

[C-4637] Edit Collection Page - #9021

Merged
dylanjeffers merged 8 commits into
mainfrom
c-4637-edit-collection-page
Jul 6, 2024
Merged

[C-4637] Edit Collection Page#9021
dylanjeffers merged 8 commits into
mainfrom
c-4637-edit-collection-page

Conversation

@dylanjeffers

Copy link
Copy Markdown
Contributor

Description

Adds edit collection page and connects it to edit collection buttons.
Conforms to all the requirements in figma
Still need to determine what to do with "create-playlist-modal"

@changeset-bot

changeset-botBot commented Jul 2, 2024

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: ddcb39d

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@audius-infra

Copy link
Copy Markdown
Collaborator

@audius-infra

Copy link
Copy Markdown
Collaborator

@audius-infra

Copy link
Copy Markdown
Collaborator

@amendelsohnamendelsohn left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Heck yeah 🔥

Comment on lines +18 to +27
// Pick<
// BaseButtonProps,
// | 'onClick'
// | 'disabled'
// | 'className'
// | 'type'
// | 'children'
// | 'isLoading'
// | 'asChild'
// >

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

leftover comment?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes thank you

[styles.editableTitle]: isOwner
})}
onClick={isOwner ? handleClickEditTitle : undefined}
// @ts-ignore

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if this is valid, should we fix the expected type?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

flex as prop isn't doing the best job figuring out type inference, so this saves having to do a big ternery, not the best situation though...

title: string
customHeader?: Nullable<string>
customDescription?: Nullable<string>
header?: Nullable<string>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we need the optional nullable?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seems overkill agreed, will simplify

props: DeleteCollectionConfirmationModalProps
) => {
const history = useHistory()
const lastLocation = useLastLocation()

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ohhh that's what I was looking for on the track edit page's back button!

if (is_private && !values.is_private && !isReleaseConfirmationOpen) {
setIsReleaseConfirmationOpen(true)
} else {
setIsReleaseConfirmationOpen(false)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this line necessary?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i can double check if that modal closes automatically, probably does since the page naviagtes huh?

const TopLevelPage = ({ showAddToCollection }: TopLevelPageProps) => {
const { isOpen } = useEditPlaylistModal()
const showPage = isOpen || showAddToCollection
const showPage = showAddToCollection

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: could remove this var and use showAddToCollection below

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will dooo


dispatch(editPlaylist(playlist_id, collection as EditPlaylistValues))

dispatch(replace(permalink))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

curious what's the reason to replace here? do we want to remove the edit page from history so you can't back into it?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah that's what is was thinking, its not really a "go-back" type thing, but maybe a product question?


const initialMetadata = {
...(metadata as Collection),
...(collection as unknown as Collection),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tangent, but I think the need to do this arises from the lack of a cache type mapping in audius-query

The endpoints return api models, but once we cache and return them, we're actually returning the cache models. Been thinking about ways to handle this if you want to discuss sometime

import { removeNullable } from 'utils/typeUtils'

// The edit collection form receives a tracks array, but we need to convert that to playlist_contents
export const updatePlaylistContents = (

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so this is just reordering the existing playlist_contents array using tracks as source of truth of order only?

@dylanjeffersdylanjeffersJul 3, 2024

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

order and deletes, yeah. its a bit of annoying addition but it's because we use the tracks array for rending the list of tracks, but ultimately we need to update playlist_contents for the updatePlaylist call

playlist_contents?.track_ids.map((item) => [item.track, item])
)

const updatedPlaylistIds = tracks

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updatedTrackIds?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks

@audius-infra

Copy link
Copy Markdown
Collaborator

@DejayJDDejayJD left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, couple small comments

}),
trackDetails: z.optional(
z.object({
genre: z.optional(GenreSchema),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is genre optional? I thought it was required

Comment on lines +18 to +27
// Pick<
// BaseButtonProps,
// | 'onClick'
// | 'disabled'
// | 'className'
// | 'type'
// | 'children'
// | 'isLoading'
// | 'asChild'
// >

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

comments 👀

[styles.editableTitle]: isOwner
})}
onClick={isOwner ? handleClickEditTitle : undefined}
// @ts-ignore

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

would you mind adding a comment context for the ignore?

Comment on lines +119 to +148
<Flex
direction='column'
gap='l'
ph='xl'
pv='l'
alignItems='flex-start'
>
<Text variant='title' size='l'>
{messages.trackDetails.title}
</Text>
<Text variant='body'>{messages.trackDetails.description}</Text>
<Flex w='100%' gap='s'>
<SelectGenreField name='trackDetails.genre' />
<SelectMoodField name='trackDetails.mood' />
</Flex>
<TagField name='trackDetails.tags' />
{isAlbum && <StemsAndDownloadsCollectionField />}
</Flex>
) : null}
{!isUpload ? (
<Flex>
<Button
variant='destructive'
size='small'
iconLeft={IconTrash}
onClick={() => setIsDeleteConfirmationOpen(true)}
>
{messages.deleteCollection(collectionTypeName)}
</Button>
</Flex>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: imo could read a bit clearer if you split these out above like

constrenderUpload=()=>constrenderEdit=()=>{isUpload ? renderUpload() : renderEdit()}

const collection = useSelector((state) =>
getCollection(state, { id: collectionId })
)
const { is_album, permalink } = collection ?? {}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: prefer to convert this to isAlbum

@dylanjeffers
dylanjeffersforce-pushed the c-4637-edit-collection-page branch from 61a13b9 to 339daf6CompareJuly 5, 2024 17:57
@audius-infra

Copy link
Copy Markdown
Collaborator

@dylanjeffers
dylanjeffers merged commit ef68724 into mainJul 6, 2024
@dylanjeffers
dylanjeffers deleted the c-4637-edit-collection-page branch July 6, 2024 02:02
audius-infra pushed a commit that referenced this pull request Jul 6, 2024
[9819b5d] [PROTO-1867] OTP only on unfamiliar devices (#9023) Danny
[ef68724] [C-4637] Edit Collection Page (#9021) Dylan Jeffers
[119465e] [C-4632] Show 'remove' artwork button on edit collection, otherwise 'change' button (#9042) Andrew Mendelsohn
[fb506c3] Fix preview times longer than track duration not erroring (#9039) Reed
[8df874e] [C-4649] fix jumping date picker popup (#9038) Andrew Mendelsohn
[6ed21e6] [C-4606] Mobile advanced search All Results screen (#9037) Sebastian Klingler
[7f77671] [C-4641C-4654C-4648] Edit track page fixes (#9033) Dylan Jeffers
[69dd11c] [C-4688] Add AlbumResults and PlaylistResults for advanced search (#9031) Sebastian Klingler
[23835e7] [C-4652] Fix track update access conditions (#9035) Reed
[0e1c5ee] [PAY-3125] Add SDK support for location in transaction (#8904) Raymond Jacobson
[83b37e8] Connect remaining mobile search filters (#9032) Kyle Shanks
[826bcd2] [C-4586] Add mobile FilterBpmScreen for new search screen (#9029) Kyle Shanks
[e273c60] Update dapp-store build artifacts audius-infra
[0869462] [C-4687] Wire up mobile advanced search tracks lineup (#9030) Sebastian Klingler
[a00a708] [C-4412] Migrate native buttons to harmony-native (#8810) Dylan Jeffers
[8302e19] [QA-1416] Fix top-artists and audius-query (#9025) Dylan Jeffers
[a94c07e] [C-4621] Advanced search mobile web (#9019) Sebastian Klingler
[0fbd54f] [QA-1414] Force fetch playlist on navigate from playlist tile (#9020) Andrew Mendelsohn
[2cabca6] [PAY-3145][PAY-3150] Do not show hidden track/album in feed/trending/explore (#9015) Saliou Diallo
[42e8be5] [PROTO-1868PROTO-1871PROTO-1865] lookup key <> wallet association (#8815) alecsavvy
[9a50c42] [QA-1403] Fix "Not enough signers" simulation error in "Claim All Rewards" flow (#9012) Marcus Pasell
[3027d8a] [C-4555] Add release date to new track edit (#9018) JD Francis
[ecc4e27] PAY-2489PAY-2507 Fix UI for Change Email, Change Password (#9010) Marcus Pasell
[ab89dc3] [C-4585] Add mobile search musical key filter (#9009) Dylan Jeffers
[d400b83] [QA-1412] Show play button and hide stats on smart collections (#9017) Andrew Mendelsohn
[e2f3cc2] Make small label update to FilterButton (#9016) Kyle Shanks
[4a4b3aa] [PAY-3147] Allow unsave/unrepost hidden track/album (#8995) Saliou Diallo
[abb2e78] [C-4624] Add FilterButton to Harmony Native (#8998) Kyle Shanks
[db90ca8] [C-4572] Advanced search UI polish (#9004) Sebastian Klingler
[1e87a5b] [QA-1409] Fix mobile nowplaying images not loading after failure state (#9005) JD Francis
[8b671b4] Improve mobile search state and navigation (#9008) Dylan Jeffers
[b3b898b] Bump mobile apps to 105 (#9013) Dylan Jeffers
[1fda969] [PAY-3133][PAY-3127] Better UX for accept/reject flows (#8980) Randy Schott
[a3001b2] Fix visibility field tests (#9011) Andrew Mendelsohn
schottra added a commit that referenced this pull request Jul 8, 2024
…nav-styling
* origin/main: (36 commits)
Fix mobile single-OTP signup (#9056)
Hide 0 stats on mobile collection screens (#9054)
[C-4695] Fix remix field visibility (#9049)
[C-4647] Fix license type (#9048)
[C-4594] Fix user-generated-text links (#9050)
Mediorum: skip image transcode (#9051)
[Protodash] Show pending transactions on Overview page; tell users they have to come back to undelegate [QA-1396] (#8903)
PROTO-1866: merge change email and post auth into one route (#9028)
Bump mobile versions to 106 (#9047)
Audius Protocol v0.6.142
[C-46916] Fix Block API Streaming (#9044)
[C-4650] Fix visibility field when released scheduled release (#9043)
Patch paginated query bug (#9046)
Fix condition for adding hidden track to playlist (#9045)
Audius Client (Web and Mobile) v1.5.89
[PROTO-1867] OTP only on unfamiliar devices (#9023)
[C-4637] Edit Collection Page (#9021)
[C-4632] Show 'remove' artwork button on edit collection, otherwise 'change' button (#9042)
[C-4694] Add track_count to non-full playlist endpoint (#9040)
Fix preview times longer than track duration not erroring (#9039)
...
dylanjeffers added a commit that referenced this pull request Jul 10, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@dylanjeffers@audius-infra@amendelsohn@DejayJD
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [C-4637] Edit Collection Page by dylanjeffers · Pull Request #9021 · AudiusProject/apps · GitHub
Skip to content

[C-4637] Edit Collection Page - #9021

Merged
dylanjeffers merged 8 commits into
mainfrom
c-4637-edit-collection-page
Jul 6, 2024
Merged

[C-4637] Edit Collection Page#9021
dylanjeffers merged 8 commits into
mainfrom
c-4637-edit-collection-page

Conversation

@dylanjeffers

Copy link
Copy Markdown
Contributor

Description

Adds edit collection page and connects it to edit collection buttons.
Conforms to all the requirements in figma
Still need to determine what to do with "create-playlist-modal"

@changeset-bot

changeset-botBot commented Jul 2, 2024

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: ddcb39d

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@audius-infra

Copy link
Copy Markdown
Collaborator

@audius-infra

Copy link
Copy Markdown
Collaborator

@audius-infra

Copy link
Copy Markdown
Collaborator

@amendelsohnamendelsohn left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Heck yeah 🔥

Comment on lines +18 to +27
// Pick<
// BaseButtonProps,
// | 'onClick'
// | 'disabled'
// | 'className'
// | 'type'
// | 'children'
// | 'isLoading'
// | 'asChild'
// >

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

leftover comment?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes thank you

[styles.editableTitle]: isOwner
})}
onClick={isOwner ? handleClickEditTitle : undefined}
// @ts-ignore

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if this is valid, should we fix the expected type?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

flex as prop isn't doing the best job figuring out type inference, so this saves having to do a big ternery, not the best situation though...

title: string
customHeader?: Nullable<string>
customDescription?: Nullable<string>
header?: Nullable<string>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we need the optional nullable?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seems overkill agreed, will simplify

props: DeleteCollectionConfirmationModalProps
) => {
const history = useHistory()
const lastLocation = useLastLocation()

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ohhh that's what I was looking for on the track edit page's back button!

if (is_private && !values.is_private && !isReleaseConfirmationOpen) {
setIsReleaseConfirmationOpen(true)
} else {
setIsReleaseConfirmationOpen(false)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this line necessary?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i can double check if that modal closes automatically, probably does since the page naviagtes huh?

const TopLevelPage = ({ showAddToCollection }: TopLevelPageProps) => {
const { isOpen } = useEditPlaylistModal()
const showPage = isOpen || showAddToCollection
const showPage = showAddToCollection

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: could remove this var and use showAddToCollection below

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will dooo


dispatch(editPlaylist(playlist_id, collection as EditPlaylistValues))

dispatch(replace(permalink))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

curious what's the reason to replace here? do we want to remove the edit page from history so you can't back into it?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah that's what is was thinking, its not really a "go-back" type thing, but maybe a product question?


const initialMetadata = {
...(metadata as Collection),
...(collection as unknown as Collection),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tangent, but I think the need to do this arises from the lack of a cache type mapping in audius-query

The endpoints return api models, but once we cache and return them, we're actually returning the cache models. Been thinking about ways to handle this if you want to discuss sometime

import { removeNullable } from 'utils/typeUtils'

// The edit collection form receives a tracks array, but we need to convert that to playlist_contents
export const updatePlaylistContents = (

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so this is just reordering the existing playlist_contents array using tracks as source of truth of order only?

@dylanjeffersdylanjeffersJul 3, 2024

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

order and deletes, yeah. its a bit of annoying addition but it's because we use the tracks array for rending the list of tracks, but ultimately we need to update playlist_contents for the updatePlaylist call

playlist_contents?.track_ids.map((item) => [item.track, item])
)

const updatedPlaylistIds = tracks

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updatedTrackIds?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks

@audius-infra

Copy link
Copy Markdown
Collaborator

@DejayJDDejayJD left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, couple small comments

}),
trackDetails: z.optional(
z.object({
genre: z.optional(GenreSchema),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is genre optional? I thought it was required

Comment on lines +18 to +27
// Pick<
// BaseButtonProps,
// | 'onClick'
// | 'disabled'
// | 'className'
// | 'type'
// | 'children'
// | 'isLoading'
// | 'asChild'
// >

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

comments 👀

[styles.editableTitle]: isOwner
})}
onClick={isOwner ? handleClickEditTitle : undefined}
// @ts-ignore

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

would you mind adding a comment context for the ignore?

Comment on lines +119 to +148
<Flex
direction='column'
gap='l'
ph='xl'
pv='l'
alignItems='flex-start'
>
<Text variant='title' size='l'>
{messages.trackDetails.title}
</Text>
<Text variant='body'>{messages.trackDetails.description}</Text>
<Flex w='100%' gap='s'>
<SelectGenreField name='trackDetails.genre' />
<SelectMoodField name='trackDetails.mood' />
</Flex>
<TagField name='trackDetails.tags' />
{isAlbum && <StemsAndDownloadsCollectionField />}
</Flex>
) : null}
{!isUpload ? (
<Flex>
<Button
variant='destructive'
size='small'
iconLeft={IconTrash}
onClick={() => setIsDeleteConfirmationOpen(true)}
>
{messages.deleteCollection(collectionTypeName)}
</Button>
</Flex>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: imo could read a bit clearer if you split these out above like

constrenderUpload=()=>constrenderEdit=()=>{isUpload ? renderUpload() : renderEdit()}

const collection = useSelector((state) =>
getCollection(state, { id: collectionId })
)
const { is_album, permalink } = collection ?? {}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: prefer to convert this to isAlbum

@dylanjeffers
dylanjeffersforce-pushed the c-4637-edit-collection-page branch from 61a13b9 to 339daf6CompareJuly 5, 2024 17:57
@audius-infra

Copy link
Copy Markdown
Collaborator

@dylanjeffers
dylanjeffers merged commit ef68724 into mainJul 6, 2024
@dylanjeffers
dylanjeffers deleted the c-4637-edit-collection-page branch July 6, 2024 02:02
audius-infra pushed a commit that referenced this pull request Jul 6, 2024
[9819b5d] [PROTO-1867] OTP only on unfamiliar devices (#9023) Danny
[ef68724] [C-4637] Edit Collection Page (#9021) Dylan Jeffers
[119465e] [C-4632] Show 'remove' artwork button on edit collection, otherwise 'change' button (#9042) Andrew Mendelsohn
[fb506c3] Fix preview times longer than track duration not erroring (#9039) Reed
[8df874e] [C-4649] fix jumping date picker popup (#9038) Andrew Mendelsohn
[6ed21e6] [C-4606] Mobile advanced search All Results screen (#9037) Sebastian Klingler
[7f77671] [C-4641C-4654C-4648] Edit track page fixes (#9033) Dylan Jeffers
[69dd11c] [C-4688] Add AlbumResults and PlaylistResults for advanced search (#9031) Sebastian Klingler
[23835e7] [C-4652] Fix track update access conditions (#9035) Reed
[0e1c5ee] [PAY-3125] Add SDK support for location in transaction (#8904) Raymond Jacobson
[83b37e8] Connect remaining mobile search filters (#9032) Kyle Shanks
[826bcd2] [C-4586] Add mobile FilterBpmScreen for new search screen (#9029) Kyle Shanks
[e273c60] Update dapp-store build artifacts audius-infra
[0869462] [C-4687] Wire up mobile advanced search tracks lineup (#9030) Sebastian Klingler
[a00a708] [C-4412] Migrate native buttons to harmony-native (#8810) Dylan Jeffers
[8302e19] [QA-1416] Fix top-artists and audius-query (#9025) Dylan Jeffers
[a94c07e] [C-4621] Advanced search mobile web (#9019) Sebastian Klingler
[0fbd54f] [QA-1414] Force fetch playlist on navigate from playlist tile (#9020) Andrew Mendelsohn
[2cabca6] [PAY-3145][PAY-3150] Do not show hidden track/album in feed/trending/explore (#9015) Saliou Diallo
[42e8be5] [PROTO-1868PROTO-1871PROTO-1865] lookup key <> wallet association (#8815) alecsavvy
[9a50c42] [QA-1403] Fix "Not enough signers" simulation error in "Claim All Rewards" flow (#9012) Marcus Pasell
[3027d8a] [C-4555] Add release date to new track edit (#9018) JD Francis
[ecc4e27] PAY-2489PAY-2507 Fix UI for Change Email, Change Password (#9010) Marcus Pasell
[ab89dc3] [C-4585] Add mobile search musical key filter (#9009) Dylan Jeffers
[d400b83] [QA-1412] Show play button and hide stats on smart collections (#9017) Andrew Mendelsohn
[e2f3cc2] Make small label update to FilterButton (#9016) Kyle Shanks
[4a4b3aa] [PAY-3147] Allow unsave/unrepost hidden track/album (#8995) Saliou Diallo
[abb2e78] [C-4624] Add FilterButton to Harmony Native (#8998) Kyle Shanks
[db90ca8] [C-4572] Advanced search UI polish (#9004) Sebastian Klingler
[1e87a5b] [QA-1409] Fix mobile nowplaying images not loading after failure state (#9005) JD Francis
[8b671b4] Improve mobile search state and navigation (#9008) Dylan Jeffers
[b3b898b] Bump mobile apps to 105 (#9013) Dylan Jeffers
[1fda969] [PAY-3133][PAY-3127] Better UX for accept/reject flows (#8980) Randy Schott
[a3001b2] Fix visibility field tests (#9011) Andrew Mendelsohn
schottra added a commit that referenced this pull request Jul 8, 2024
…nav-styling
* origin/main: (36 commits)
Fix mobile single-OTP signup (#9056)
Hide 0 stats on mobile collection screens (#9054)
[C-4695] Fix remix field visibility (#9049)
[C-4647] Fix license type (#9048)
[C-4594] Fix user-generated-text links (#9050)
Mediorum: skip image transcode (#9051)
[Protodash] Show pending transactions on Overview page; tell users they have to come back to undelegate [QA-1396] (#8903)
PROTO-1866: merge change email and post auth into one route (#9028)
Bump mobile versions to 106 (#9047)
Audius Protocol v0.6.142
[C-46916] Fix Block API Streaming (#9044)
[C-4650] Fix visibility field when released scheduled release (#9043)
Patch paginated query bug (#9046)
Fix condition for adding hidden track to playlist (#9045)
Audius Client (Web and Mobile) v1.5.89
[PROTO-1867] OTP only on unfamiliar devices (#9023)
[C-4637] Edit Collection Page (#9021)
[C-4632] Show 'remove' artwork button on edit collection, otherwise 'change' button (#9042)
[C-4694] Add track_count to non-full playlist endpoint (#9040)
Fix preview times longer than track duration not erroring (#9039)
...
dylanjeffers added a commit that referenced this pull request Jul 10, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@dylanjeffers@audius-infra@amendelsohn@DejayJD
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [C-4637] Edit Collection Page by dylanjeffers · Pull Request #9021 · AudiusProject/apps · GitHub
Skip to content

[C-4637] Edit Collection Page - #9021

Merged
dylanjeffers merged 8 commits into
mainfrom
c-4637-edit-collection-page
Jul 6, 2024
Merged

[C-4637] Edit Collection Page#9021
dylanjeffers merged 8 commits into
mainfrom
c-4637-edit-collection-page

Conversation

@dylanjeffers

Copy link
Copy Markdown
Contributor

Description

Adds edit collection page and connects it to edit collection buttons.
Conforms to all the requirements in figma
Still need to determine what to do with "create-playlist-modal"

@changeset-bot

changeset-botBot commented Jul 2, 2024

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: ddcb39d

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@audius-infra

Copy link
Copy Markdown
Collaborator

@audius-infra

Copy link
Copy Markdown
Collaborator

@audius-infra

Copy link
Copy Markdown
Collaborator

@amendelsohnamendelsohn left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Heck yeah 🔥

Comment on lines +18 to +27
// Pick<
// BaseButtonProps,
// | 'onClick'
// | 'disabled'
// | 'className'
// | 'type'
// | 'children'
// | 'isLoading'
// | 'asChild'
// >

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

leftover comment?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes thank you

[styles.editableTitle]: isOwner
})}
onClick={isOwner ? handleClickEditTitle : undefined}
// @ts-ignore

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if this is valid, should we fix the expected type?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

flex as prop isn't doing the best job figuring out type inference, so this saves having to do a big ternery, not the best situation though...

title: string
customHeader?: Nullable<string>
customDescription?: Nullable<string>
header?: Nullable<string>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we need the optional nullable?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seems overkill agreed, will simplify

props: DeleteCollectionConfirmationModalProps
) => {
const history = useHistory()
const lastLocation = useLastLocation()

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ohhh that's what I was looking for on the track edit page's back button!

if (is_private && !values.is_private && !isReleaseConfirmationOpen) {
setIsReleaseConfirmationOpen(true)
} else {
setIsReleaseConfirmationOpen(false)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this line necessary?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i can double check if that modal closes automatically, probably does since the page naviagtes huh?

const TopLevelPage = ({ showAddToCollection }: TopLevelPageProps) => {
const { isOpen } = useEditPlaylistModal()
const showPage = isOpen || showAddToCollection
const showPage = showAddToCollection

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: could remove this var and use showAddToCollection below

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will dooo


dispatch(editPlaylist(playlist_id, collection as EditPlaylistValues))

dispatch(replace(permalink))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

curious what's the reason to replace here? do we want to remove the edit page from history so you can't back into it?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah that's what is was thinking, its not really a "go-back" type thing, but maybe a product question?


const initialMetadata = {
...(metadata as Collection),
...(collection as unknown as Collection),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tangent, but I think the need to do this arises from the lack of a cache type mapping in audius-query

The endpoints return api models, but once we cache and return them, we're actually returning the cache models. Been thinking about ways to handle this if you want to discuss sometime

import { removeNullable } from 'utils/typeUtils'

// The edit collection form receives a tracks array, but we need to convert that to playlist_contents
export const updatePlaylistContents = (

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so this is just reordering the existing playlist_contents array using tracks as source of truth of order only?

@dylanjeffersdylanjeffersJul 3, 2024

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

order and deletes, yeah. its a bit of annoying addition but it's because we use the tracks array for rending the list of tracks, but ultimately we need to update playlist_contents for the updatePlaylist call

playlist_contents?.track_ids.map((item) => [item.track, item])
)

const updatedPlaylistIds = tracks

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updatedTrackIds?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks

@audius-infra

Copy link
Copy Markdown
Collaborator

@DejayJDDejayJD left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, couple small comments

}),
trackDetails: z.optional(
z.object({
genre: z.optional(GenreSchema),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is genre optional? I thought it was required

Comment on lines +18 to +27
// Pick<
// BaseButtonProps,
// | 'onClick'
// | 'disabled'
// | 'className'
// | 'type'
// | 'children'
// | 'isLoading'
// | 'asChild'
// >

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

comments 👀

[styles.editableTitle]: isOwner
})}
onClick={isOwner ? handleClickEditTitle : undefined}
// @ts-ignore

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

would you mind adding a comment context for the ignore?

Comment on lines +119 to +148
<Flex
direction='column'
gap='l'
ph='xl'
pv='l'
alignItems='flex-start'
>
<Text variant='title' size='l'>
{messages.trackDetails.title}
</Text>
<Text variant='body'>{messages.trackDetails.description}</Text>
<Flex w='100%' gap='s'>
<SelectGenreField name='trackDetails.genre' />
<SelectMoodField name='trackDetails.mood' />
</Flex>
<TagField name='trackDetails.tags' />
{isAlbum && <StemsAndDownloadsCollectionField />}
</Flex>
) : null}
{!isUpload ? (
<Flex>
<Button
variant='destructive'
size='small'
iconLeft={IconTrash}
onClick={() => setIsDeleteConfirmationOpen(true)}
>
{messages.deleteCollection(collectionTypeName)}
</Button>
</Flex>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: imo could read a bit clearer if you split these out above like

constrenderUpload=()=>constrenderEdit=()=>{isUpload ? renderUpload() : renderEdit()}

const collection = useSelector((state) =>
getCollection(state, { id: collectionId })
)
const { is_album, permalink } = collection ?? {}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: prefer to convert this to isAlbum

@dylanjeffers
dylanjeffersforce-pushed the c-4637-edit-collection-page branch from 61a13b9 to 339daf6CompareJuly 5, 2024 17:57
@audius-infra

Copy link
Copy Markdown
Collaborator

@dylanjeffers
dylanjeffers merged commit ef68724 into mainJul 6, 2024
@dylanjeffers
dylanjeffers deleted the c-4637-edit-collection-page branch July 6, 2024 02:02
audius-infra pushed a commit that referenced this pull request Jul 6, 2024
[9819b5d] [PROTO-1867] OTP only on unfamiliar devices (#9023) Danny
[ef68724] [C-4637] Edit Collection Page (#9021) Dylan Jeffers
[119465e] [C-4632] Show 'remove' artwork button on edit collection, otherwise 'change' button (#9042) Andrew Mendelsohn
[fb506c3] Fix preview times longer than track duration not erroring (#9039) Reed
[8df874e] [C-4649] fix jumping date picker popup (#9038) Andrew Mendelsohn
[6ed21e6] [C-4606] Mobile advanced search All Results screen (#9037) Sebastian Klingler
[7f77671] [C-4641C-4654C-4648] Edit track page fixes (#9033) Dylan Jeffers
[69dd11c] [C-4688] Add AlbumResults and PlaylistResults for advanced search (#9031) Sebastian Klingler
[23835e7] [C-4652] Fix track update access conditions (#9035) Reed
[0e1c5ee] [PAY-3125] Add SDK support for location in transaction (#8904) Raymond Jacobson
[83b37e8] Connect remaining mobile search filters (#9032) Kyle Shanks
[826bcd2] [C-4586] Add mobile FilterBpmScreen for new search screen (#9029) Kyle Shanks
[e273c60] Update dapp-store build artifacts audius-infra
[0869462] [C-4687] Wire up mobile advanced search tracks lineup (#9030) Sebastian Klingler
[a00a708] [C-4412] Migrate native buttons to harmony-native (#8810) Dylan Jeffers
[8302e19] [QA-1416] Fix top-artists and audius-query (#9025) Dylan Jeffers
[a94c07e] [C-4621] Advanced search mobile web (#9019) Sebastian Klingler
[0fbd54f] [QA-1414] Force fetch playlist on navigate from playlist tile (#9020) Andrew Mendelsohn
[2cabca6] [PAY-3145][PAY-3150] Do not show hidden track/album in feed/trending/explore (#9015) Saliou Diallo
[42e8be5] [PROTO-1868PROTO-1871PROTO-1865] lookup key <> wallet association (#8815) alecsavvy
[9a50c42] [QA-1403] Fix "Not enough signers" simulation error in "Claim All Rewards" flow (#9012) Marcus Pasell
[3027d8a] [C-4555] Add release date to new track edit (#9018) JD Francis
[ecc4e27] PAY-2489PAY-2507 Fix UI for Change Email, Change Password (#9010) Marcus Pasell
[ab89dc3] [C-4585] Add mobile search musical key filter (#9009) Dylan Jeffers
[d400b83] [QA-1412] Show play button and hide stats on smart collections (#9017) Andrew Mendelsohn
[e2f3cc2] Make small label update to FilterButton (#9016) Kyle Shanks
[4a4b3aa] [PAY-3147] Allow unsave/unrepost hidden track/album (#8995) Saliou Diallo
[abb2e78] [C-4624] Add FilterButton to Harmony Native (#8998) Kyle Shanks
[db90ca8] [C-4572] Advanced search UI polish (#9004) Sebastian Klingler
[1e87a5b] [QA-1409] Fix mobile nowplaying images not loading after failure state (#9005) JD Francis
[8b671b4] Improve mobile search state and navigation (#9008) Dylan Jeffers
[b3b898b] Bump mobile apps to 105 (#9013) Dylan Jeffers
[1fda969] [PAY-3133][PAY-3127] Better UX for accept/reject flows (#8980) Randy Schott
[a3001b2] Fix visibility field tests (#9011) Andrew Mendelsohn
schottra added a commit that referenced this pull request Jul 8, 2024
…nav-styling
* origin/main: (36 commits)
Fix mobile single-OTP signup (#9056)
Hide 0 stats on mobile collection screens (#9054)
[C-4695] Fix remix field visibility (#9049)
[C-4647] Fix license type (#9048)
[C-4594] Fix user-generated-text links (#9050)
Mediorum: skip image transcode (#9051)
[Protodash] Show pending transactions on Overview page; tell users they have to come back to undelegate [QA-1396] (#8903)
PROTO-1866: merge change email and post auth into one route (#9028)
Bump mobile versions to 106 (#9047)
Audius Protocol v0.6.142
[C-46916] Fix Block API Streaming (#9044)
[C-4650] Fix visibility field when released scheduled release (#9043)
Patch paginated query bug (#9046)
Fix condition for adding hidden track to playlist (#9045)
Audius Client (Web and Mobile) v1.5.89
[PROTO-1867] OTP only on unfamiliar devices (#9023)
[C-4637] Edit Collection Page (#9021)
[C-4632] Show 'remove' artwork button on edit collection, otherwise 'change' button (#9042)
[C-4694] Add track_count to non-full playlist endpoint (#9040)
Fix preview times longer than track duration not erroring (#9039)
...
dylanjeffers added a commit that referenced this pull request Jul 10, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@dylanjeffers@audius-infra@amendelsohn@DejayJD
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); [C-4637] Edit Collection Page by dylanjeffers · Pull Request #9021 · AudiusProject/apps · GitHub
Skip to content

[C-4637] Edit Collection Page - #9021

Merged
dylanjeffers merged 8 commits into
mainfrom
c-4637-edit-collection-page
Jul 6, 2024
Merged

[C-4637] Edit Collection Page#9021
dylanjeffers merged 8 commits into
mainfrom
c-4637-edit-collection-page

Conversation

@dylanjeffers

Copy link
Copy Markdown
Contributor

Description

Adds edit collection page and connects it to edit collection buttons.
Conforms to all the requirements in figma
Still need to determine what to do with "create-playlist-modal"

@changeset-bot

changeset-botBot commented Jul 2, 2024

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: ddcb39d

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@audius-infra

Copy link
Copy Markdown
Collaborator

@audius-infra

Copy link
Copy Markdown
Collaborator

@audius-infra

Copy link
Copy Markdown
Collaborator

@amendelsohnamendelsohn left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Heck yeah 🔥

Comment on lines +18 to +27
// Pick<
// BaseButtonProps,
// | 'onClick'
// | 'disabled'
// | 'className'
// | 'type'
// | 'children'
// | 'isLoading'
// | 'asChild'
// >

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

leftover comment?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes thank you

[styles.editableTitle]: isOwner
})}
onClick={isOwner ? handleClickEditTitle : undefined}
// @ts-ignore

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if this is valid, should we fix the expected type?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

flex as prop isn't doing the best job figuring out type inference, so this saves having to do a big ternery, not the best situation though...

title: string
customHeader?: Nullable<string>
customDescription?: Nullable<string>
header?: Nullable<string>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we need the optional nullable?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seems overkill agreed, will simplify

props: DeleteCollectionConfirmationModalProps
) => {
const history = useHistory()
const lastLocation = useLastLocation()

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ohhh that's what I was looking for on the track edit page's back button!

if (is_private && !values.is_private && !isReleaseConfirmationOpen) {
setIsReleaseConfirmationOpen(true)
} else {
setIsReleaseConfirmationOpen(false)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this line necessary?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i can double check if that modal closes automatically, probably does since the page naviagtes huh?

const TopLevelPage = ({ showAddToCollection }: TopLevelPageProps) => {
const { isOpen } = useEditPlaylistModal()
const showPage = isOpen || showAddToCollection
const showPage = showAddToCollection

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: could remove this var and use showAddToCollection below

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will dooo


dispatch(editPlaylist(playlist_id, collection as EditPlaylistValues))

dispatch(replace(permalink))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

curious what's the reason to replace here? do we want to remove the edit page from history so you can't back into it?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah that's what is was thinking, its not really a "go-back" type thing, but maybe a product question?


const initialMetadata = {
...(metadata as Collection),
...(collection as unknown as Collection),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tangent, but I think the need to do this arises from the lack of a cache type mapping in audius-query

The endpoints return api models, but once we cache and return them, we're actually returning the cache models. Been thinking about ways to handle this if you want to discuss sometime

import { removeNullable } from 'utils/typeUtils'

// The edit collection form receives a tracks array, but we need to convert that to playlist_contents
export const updatePlaylistContents = (

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so this is just reordering the existing playlist_contents array using tracks as source of truth of order only?

@dylanjeffersdylanjeffersJul 3, 2024

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

order and deletes, yeah. its a bit of annoying addition but it's because we use the tracks array for rending the list of tracks, but ultimately we need to update playlist_contents for the updatePlaylist call

playlist_contents?.track_ids.map((item) => [item.track, item])
)

const updatedPlaylistIds = tracks

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updatedTrackIds?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks

@audius-infra

Copy link
Copy Markdown
Collaborator

@DejayJDDejayJD left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, couple small comments

}),
trackDetails: z.optional(
z.object({
genre: z.optional(GenreSchema),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is genre optional? I thought it was required

Comment on lines +18 to +27
// Pick<
// BaseButtonProps,
// | 'onClick'
// | 'disabled'
// | 'className'
// | 'type'
// | 'children'
// | 'isLoading'
// | 'asChild'
// >

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

comments 👀

[styles.editableTitle]: isOwner
})}
onClick={isOwner ? handleClickEditTitle : undefined}
// @ts-ignore

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

would you mind adding a comment context for the ignore?

Comment on lines +119 to +148
<Flex
direction='column'
gap='l'
ph='xl'
pv='l'
alignItems='flex-start'
>
<Text variant='title' size='l'>
{messages.trackDetails.title}
</Text>
<Text variant='body'>{messages.trackDetails.description}</Text>
<Flex w='100%' gap='s'>
<SelectGenreField name='trackDetails.genre' />
<SelectMoodField name='trackDetails.mood' />
</Flex>
<TagField name='trackDetails.tags' />
{isAlbum && <StemsAndDownloadsCollectionField />}
</Flex>
) : null}
{!isUpload ? (
<Flex>
<Button
variant='destructive'
size='small'
iconLeft={IconTrash}
onClick={() => setIsDeleteConfirmationOpen(true)}
>
{messages.deleteCollection(collectionTypeName)}
</Button>
</Flex>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: imo could read a bit clearer if you split these out above like

constrenderUpload=()=>constrenderEdit=()=>{isUpload ? renderUpload() : renderEdit()}

const collection = useSelector((state) =>
getCollection(state, { id: collectionId })
)
const { is_album, permalink } = collection ?? {}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: prefer to convert this to isAlbum

@dylanjeffers
dylanjeffersforce-pushed the c-4637-edit-collection-page branch from 61a13b9 to 339daf6CompareJuly 5, 2024 17:57
@audius-infra

Copy link
Copy Markdown
Collaborator

@dylanjeffers
dylanjeffers merged commit ef68724 into mainJul 6, 2024
@dylanjeffers
dylanjeffers deleted the c-4637-edit-collection-page branch July 6, 2024 02:02
audius-infra pushed a commit that referenced this pull request Jul 6, 2024
[9819b5d] [PROTO-1867] OTP only on unfamiliar devices (#9023) Danny
[ef68724] [C-4637] Edit Collection Page (#9021) Dylan Jeffers
[119465e] [C-4632] Show 'remove' artwork button on edit collection, otherwise 'change' button (#9042) Andrew Mendelsohn
[fb506c3] Fix preview times longer than track duration not erroring (#9039) Reed
[8df874e] [C-4649] fix jumping date picker popup (#9038) Andrew Mendelsohn
[6ed21e6] [C-4606] Mobile advanced search All Results screen (#9037) Sebastian Klingler
[7f77671] [C-4641C-4654C-4648] Edit track page fixes (#9033) Dylan Jeffers
[69dd11c] [C-4688] Add AlbumResults and PlaylistResults for advanced search (#9031) Sebastian Klingler
[23835e7] [C-4652] Fix track update access conditions (#9035) Reed
[0e1c5ee] [PAY-3125] Add SDK support for location in transaction (#8904) Raymond Jacobson
[83b37e8] Connect remaining mobile search filters (#9032) Kyle Shanks
[826bcd2] [C-4586] Add mobile FilterBpmScreen for new search screen (#9029) Kyle Shanks
[e273c60] Update dapp-store build artifacts audius-infra
[0869462] [C-4687] Wire up mobile advanced search tracks lineup (#9030) Sebastian Klingler
[a00a708] [C-4412] Migrate native buttons to harmony-native (#8810) Dylan Jeffers
[8302e19] [QA-1416] Fix top-artists and audius-query (#9025) Dylan Jeffers
[a94c07e] [C-4621] Advanced search mobile web (#9019) Sebastian Klingler
[0fbd54f] [QA-1414] Force fetch playlist on navigate from playlist tile (#9020) Andrew Mendelsohn
[2cabca6] [PAY-3145][PAY-3150] Do not show hidden track/album in feed/trending/explore (#9015) Saliou Diallo
[42e8be5] [PROTO-1868PROTO-1871PROTO-1865] lookup key <> wallet association (#8815) alecsavvy
[9a50c42] [QA-1403] Fix "Not enough signers" simulation error in "Claim All Rewards" flow (#9012) Marcus Pasell
[3027d8a] [C-4555] Add release date to new track edit (#9018) JD Francis
[ecc4e27] PAY-2489PAY-2507 Fix UI for Change Email, Change Password (#9010) Marcus Pasell
[ab89dc3] [C-4585] Add mobile search musical key filter (#9009) Dylan Jeffers
[d400b83] [QA-1412] Show play button and hide stats on smart collections (#9017) Andrew Mendelsohn
[e2f3cc2] Make small label update to FilterButton (#9016) Kyle Shanks
[4a4b3aa] [PAY-3147] Allow unsave/unrepost hidden track/album (#8995) Saliou Diallo
[abb2e78] [C-4624] Add FilterButton to Harmony Native (#8998) Kyle Shanks
[db90ca8] [C-4572] Advanced search UI polish (#9004) Sebastian Klingler
[1e87a5b] [QA-1409] Fix mobile nowplaying images not loading after failure state (#9005) JD Francis
[8b671b4] Improve mobile search state and navigation (#9008) Dylan Jeffers
[b3b898b] Bump mobile apps to 105 (#9013) Dylan Jeffers
[1fda969] [PAY-3133][PAY-3127] Better UX for accept/reject flows (#8980) Randy Schott
[a3001b2] Fix visibility field tests (#9011) Andrew Mendelsohn
schottra added a commit that referenced this pull request Jul 8, 2024
…nav-styling
* origin/main: (36 commits)
Fix mobile single-OTP signup (#9056)
Hide 0 stats on mobile collection screens (#9054)
[C-4695] Fix remix field visibility (#9049)
[C-4647] Fix license type (#9048)
[C-4594] Fix user-generated-text links (#9050)
Mediorum: skip image transcode (#9051)
[Protodash] Show pending transactions on Overview page; tell users they have to come back to undelegate [QA-1396] (#8903)
PROTO-1866: merge change email and post auth into one route (#9028)
Bump mobile versions to 106 (#9047)
Audius Protocol v0.6.142
[C-46916] Fix Block API Streaming (#9044)
[C-4650] Fix visibility field when released scheduled release (#9043)
Patch paginated query bug (#9046)
Fix condition for adding hidden track to playlist (#9045)
Audius Client (Web and Mobile) v1.5.89
[PROTO-1867] OTP only on unfamiliar devices (#9023)
[C-4637] Edit Collection Page (#9021)
[C-4632] Show 'remove' artwork button on edit collection, otherwise 'change' button (#9042)
[C-4694] Add track_count to non-full playlist endpoint (#9040)
Fix preview times longer than track duration not erroring (#9039)
...
dylanjeffers added a commit that referenced this pull request Jul 10, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@dylanjeffers@audius-infra@amendelsohn@DejayJD