Note that there is a side effect of the channel going away immediately after Follow button is pressed. More elaborate code is needed like in the Following Manage page if we want the claim to be retained.
Adds ability for homepage team to define the Discover list of IDs.
If undefined, falls back to English's list. If English is also undefined, falls back to LATEST / PRIMARY.
* Playlists v2
* Style pass
* Change playlist items arrange icon
* Playlist card body open by default
* Refactor collectionEdit components
* Paginate & Refactor bid field
* Collection page changes
* Add Thumbnail optional
* Replace extra info for description on collection page
* Playlist card right below video on medium screen
* Allow editing private collections
* Add edit option to menus
* Allow deleting a public playlist but keeping a private version
* Add queue to Save menu, remove edit option from Builtin pages, show queue on playlists page
* Fix scroll to recent persisting on medium screen
* Fix adding to queue from menu
* Fixes for delete
* PublishList: delay mounting Items tab to prevent lock-up (#1783)
For a large list, the playlist publish form is unusable (super-slow typing) due to the entire list being mounted despite the tab is not active.
The full solution is still to paginate it, but for now, don't mount the tab until it is selected. Add a spinner to indicate something is loading. It's not prefect, but it's throwaway code anyway. At least we can fill in the fields properly now.
* Batch-resolve private collections (#1782)
* makeSelectClaimForClaimId --> selectClaimForClaimId
Move away from the problematic `makeSelect*`, especially in large loops.
* Batch-resolve private collections
1758
This alleviates the lock-up that is caused by large number of invidual resolves. There will still be some minor stutter due to the large DOM that React needs to handle -- that is logged in 1758 and will be handled separately.
At least the stutter is short (1-2s) and the app is still usable.
Private list items are being resolve individually, super slow if the list is large (>100). Published lists doesn't have this issue.
doFetchItemsInCollections contains most of the useful logic, but it isn't called for private/built-in lists because it's not an actual claim.
Tweaked doFetchItemsInCollections to handle private (UUID-based) collections.
* Use persisted state for floating player playlist card body
- I find it annoying being open everytime
* Fix removing edits from published playlist
* Fix scroll on mobile
* Allow going editing items from toast
* Fix ClaimShareButton
* Prevent edit/publish of builtin
* Fix async inside forEach
* Fix sync on queue edit
* Fix autoplayCountdown replay
* Fix deleting an item scrolling the playlist
* CreatedAt fixes
* Remove repost for now
* Anon publish fixes
* Fix mature case on floating
Co-authored-by: infinite-persistence <64950861+infinite-persistence@users.noreply.github.com>
## Issue
https://github.com/OdyseeTeam/odysee-frontend/issues/1815#issuecomment-1178728712
When settings are changed before the first successful sync, the changes are on top of the default wallet preferences, and becomes the "latest". When sync is possible again later, the bad data is pushed to the cloud.
## Change
Continue to operate on 'local' until the first successful sync. Most of the GUI will warn (or even prevent) the user from changing settings in this scenario, so the amount of "discarded" changes in 'local' is minimal.
## Ticket
1822
## Changes
- Add `?commentId=` support in the URL.
- `claimId` remains a required parameter so that we can derive the comment URL.
- The backend will know it's a comment report when both parameters are present.
- The comment URL is added to the top of `additional_details`.
- The backend rejects if `additional_details` is provided for DMCA. Grayed out DMCA for the case of reporting comments.
d16ae73c
## Issue
dev instances are also affected.
## Change
Use another env to enable the feature.
The cleaner solution that avoids the double env is to simply not make MIN_VERSION appear in the default file + define only in production instances. But putting it in the default file makes things clearer, plus easier to "bump + build" by just pushing a new commit.
Fixes the "force repost" behavior in Category Page.
Got the logic wrong when the boolean parameter was inverted from "force" (+ve) to "hideRepostOverride" (-ve) to support the "Hide Repost" button.
hideRepostOverride:
- undefined = follow user setting
- true = always hide
- false = always show << we want this
- Use `finally` instead of an arbitrary timer to clear the spinner when resolving the claim.
- Move away from `makeSelect*`
- `perform`: use object form as there is no customization.
- Effect-dependency cleanup.
## Issue
https://odysee-workspace.slack.com/archives/C02GSHBKYEM/p1657571082411839?thread_ts=1654909550.197639&cid=C02GSHBKYEM
If the user refreshed on a v1 upload, we can't do much but must at least provide a Cancel button for them to remove the entry.
## Change
- Restore the cancel button behavior for v1 like it was before. The recent changes on the visibility of the Cancel button should only be applied to v2.
- Also fixed missing cancel button on v2 after refresh if the progress reached 100%.
* Move menu entries & add publish buttons
* Save
* Separate publish forms
* Make new header dynamic for all screen sizes
* Save some livestream creation changes
* Save more livestream changes
* Save
* Change publish folder structure
* Update paths
* Change position of form elements. Again.
* Move, add & delete form fields
* Clean post form
* Clean post form even more
* Clean publish post component
* Save
* Add custom post form state
* Move price to additional options
* Adjust livestream form
* Adjust headers & titles
* Update key section
* Adjust active header icons
* Adjust toggle menu
* Save
* Adjust active button style
* Change active button selector in header
* Fix header menu links
* Move price section in post form
* Adjust instruction text color
* Adjust replay table
* Revert changes & adjust tag section
* Make more form elements dynamic
* Finalize additional options section
* Update post form
* Set mode in upload form
* Update livestream form
* Add clear button
* Make clear button dynamic
* Set upload mode
* Remove new button
* Clean upload form
* Show disabled key on livestream form
* Remove old key section
* Update channel selector for publish forms
* Add updated channel selector to publish forms
* Add mobile links
* Update mobile header
* Adjust channel selector on mobile
* Adjust livestream form on mobile
* Adjust edit links for livestreams
* Adjust edit links for posts
* Adjust more edit links
* Adjust channel selector
* Update disabled in livestream form
* Add missing change
* Fix sign out function
* Save
* Adjust livestream page on mobile
* Adjust tags section on upload page on mobile
* Adjust publish links in left navigation on mobile
* Add images to accepted filetypes on upload page
* Add autofocus to input fields
* Add autofocus to all publish forms
* Save
* Ignore thumbnail api status
* Put active thumbnail upload label in card
* Fix crashes
* Fix flow
* Fix licence fields
* Adjust wallet in header on smaller screens
* Fix channel selector line break on small screens
* Fix border radius for some buttons
* PublishReleaseDate: fix initial value to reflect what's actually in Redux
'undefined' is a valid value that means "use publish time", but the GUI incorrectly starts off by locking to the mounted timestamp.
* Add and hide channel selector on livestream publish page
* Fix channel selector on livestream setup page
* Fix gif aspect ratio in channel selector
* Make layout more dynamic
* Fix some edit redirects
* Save
* Clean publishFile
* Fix build errors
* Fix more build errors in profile menu button
* Remove console logs
* Remove post form reducer
* Limit publish title length to 200 characters
* Remove totalRewardValue from livestreamCreate index
* Remove console log
* Add tooltip to replay refresh button
* Remove scrollToTop function from publish forms
* Adjust emty wallet value trigger and add error to livestream publish page
* Disable some tabs in edit mode in livestream form
* Fix maxLength typo
* Remove 'as' label
* Remove selectPublishFormValues
* Reenable setup tab
* Remove inactive line
* Remove another inactive line
* Remove flow fix
* Update label switch logic in confirmation modal
Adjust gif margin
Adjust gif margin
Remove navigate from edit link
Remove manual updateLabels execution on init
Remove editLabel function
Fix labels in publish modal
Adjust post livestream setup redirect
Remove setOverMaxBitrate from livestream form
Clean livestream publish
More cleanup
Update post livestream creation redirect
Bring back edit tab for livestreams
Update edit tab
Reset form on livestream edit => clear
Update label switch logic
Readjust channel selector position on mobile
* Make some space adjustments for mobile
Update livestream edit page on mobile
Update action label on publish forms in edit mode
* Hide replay options in edit mode in livestream form
* Update label switch logic in confirmation modal
Adjust gif margin
Adjust gif margin
Remove navigate from edit link
Remove manual updateLabels execution on init
Remove editLabel function
Fix labels in publish modal
Adjust post livestream setup redirect
Remove setOverMaxBitrate from livestream form
Clean livestream publish
More cleanup
Update post livestream creation redirect
Bring back edit tab for livestreams
Update edit tab
Reset form on livestream edit => clear
Update label switch logic
Readjust channel selector position on mobile
Make some space adjustments for mobile
Update livestream edit page on mobile
Update action label on publish forms in edit mode
Hide replay options in edit mode in livestream form
* Make form titles dynamic
* Remove spinner on livestream form
* Remove console log
* Fix double history push
* Fix thumbnail status on post form
* Update error message style
* Handle publish error button behavior
* Clean code
* Fix scheduling & date picker
* Fix calendar overlap
* Add replay selector to livestream claim edit form
* Clean code
* Disable autocomplete
* Show replays in edit & replay tab
* Redesign replay picker
* Fix design details
* Save dynamic replay picker
* Fix autoComplete typo
* Change label text
* Add upload to livestream replay form
* Fix scss structure
* Add comunity guideline link to publish forms
* Fix error
* Fix selectThumbnail index
* Reset form values on replay source change
* Add replay redirect to upload page
* Fix publishError state change
* Remove label effect from publish confirmation modal
* Update labels in publish confirmation modal
* Add ? to chaptersButton
* Remove doPrepareEdit({ name })
* Bring upload redirect back
* Adjust redirects
* Save
* Update edit redirects
* Revert scheduling options
* Replace checkboxes for replays with radio
* Update form on source change
* Rearrange entries in mobile navigation
* Change key position on livestream setup page
* Change label for livestream update without replay change
* Adjust margin below label
Co-authored-by: infinite-persistence <inf.persistence@gmail.com>
Second attempt, this time just hiding the cancel button when the upload is done. If user is impatient and refreshed in between this and `notify`, it will still be resumable later.
Bumped MINIMUM_VERSION to nudge for a refresh so we get a slightly more accurate logging, and also to prevent the issue from lingering.
>= (and =) are having a filtering issue with reposts. Don't need to pass >= for all content - I think this was some old hackaround that's no longer required.
When Safari parses lbry:// URLs, it breaks them as they are not
compliant with the RFC 3986 URI syntax. This causes iframes in text
posts which link to a lbry:// URL to not display on Safari.
Instead, just use the lbry:// URL matched from the iframe regex instead
of parsing the iframe on Safari.
## Issue
If the reward-list fetch is slow, the selector assumes the weekly_watch hasn't been claimed yet, causing an unnecessary claim.
## Change
The selector now tells the caller if there is no data -- up to caller on what to do (in this case, don't claim the reward).
It should be harmless if the claim action was missed, since the user can still manually claim it.
## Issue
Hide reposts gets enabled on channel page by default, on a fresh browser session.
Open Odysee in private tab
Go to some channel page
Go back
Go to some channel page(same or different)
"Hide reposts" is enabled, and settings expanded
Above also works with logging in while having "hide reposts" disabled in global settings. (edited)
## Fix
Forgot to add default value.
## Issue
It's a split-string (both in sentence and html) that translators can't translate
## Change
Asked around, and it's not a design requirement to have 2 lines. Feel free to put in a better drive tagline.
* Re-organized per 'state->var->func->effect->return' structure.
* Add "Hide Repost" button in channel page
Ticket: 1762
## Change
For the placement of the button, putting it inside the expanded settings group feels the most natural, plus we then don't need to check whether the channel has reposts or not before displaying it (the expanded area is for stuff like this).
## Notes
The tricky part was making the code maintainable w.r.t to the global "Hide Repost" setting. Changed `forceShowReposts` to `hideRepostsOverride`, hopefully makes things more obvious.
- undefined = fallback to global setting
- true/false = use override
## Ticket
1329
The existing nudge to refresh the webpage only happens when the app cannot find the specific javascript file in the server. As we don't purge the files on each build, the browser typically uses the cached version of the app, which could be weeks behind (based on the error logs).
## Approach
Poll the current version periodically (set to 1 hour for now) and invoke the nudge when a newer version is detected.
We typically don't need to bump `MINIMUM_VERSION` unless there is an urgent need to make users move away from older versions (e.g. API changes, mistakes, etc.)
## Trade-offs
Wanted to put the value in a separate file called `.min.version` so that the env's history won't be polluted with version bumps, but not sure how to implement with minimal code without having to read from the file. Getting from the env is the easiest to implement (per my limited knowledge).
## Ticket
"1742 Notification popup: incorrect target"
Commentron uses old links for some of the notification types.
## Change
Factored out the code that determines the new target and use it both Notifications Page and Popup Menu.
## Ticket
1768 Check reward claiming logic
## Change
- Bump to >6.5 days
- Remove unnecessary `Math.ceil` -- not sure why I added that. It was causing diff to hit earlier than necessary.
> _and I'm 5 days away._
Not sure how to replicate/explain this, though -- the old code would have still covered this range. One possibility is when `last_claimed` is not defined, where we assume user hasn't claimed yet. We could flip this to assume "claimed" and just let the user manually claim as the fallback -- let me know.
* DRY up membership selector
Selectors should be chained up, not copy/pasted.
* PremiumBadge: retrieve membership db internally instead of from parent
## Ticket
1753 odyseeMembershipByUri function causing unnecessary renders
## Issue
While the rendering issue in the ticket is due to the way the props are defined, it also surfaced a prop-drilling issue with PremiumBadge.
Instead of asking the parent for the membership db, it can retrieve from Redux itself. This prevents the prop from polluting 2 levels of components and causing unnecessary renders.
## Approach
- Make `PremiumBadge` accept `uri` like most other components.
- I still leave the `membership` prop as (i.e. parent can still pass it directly). In some cases (e.g. `livestreamComment`, `page/odyseeMembership`), the parent itself needs the same data, so we don't need to derive it twice.
## Ticket
725
## Issue
Upload a video. When `notify` is sent at the end of the tus upload, refresh immediately. The GUI allowed the user to resume the upload, but the ID is no longer present in the server.
## Approach
Until the polling API for `notify` is available, we can only assume the best and let the user know how to handle it.
- Store the "notify was sent" state.
- Show a dialog explaining the situation.
Thought of trying to make `claim_list` calls behind the scenes to clear itself, but it doesn't handle the case of `notify` actually failing. The best is to just let the user handle it for now.
Note that for the case of `onerror` actually received, we still retry since a network error could be the culprit (`notify` wasn't sent).
## Issue
Depending on what the markdown content was, React crashes when unmounting the component if Google Translate is active.
## Change
It seems like the content is too dynamic to apply the same workaround used in 1772 for FileReactions (someone else can take a stab).
Until we have a better solution, just make the markdown component (posts, comments, file description, etc.) not participate in Chrome-level translations. It's not a good solution from a user standpoint, but it at least it doesn't crash.
This reverts commit 1dccc1ac64.
Closes 1770
Re-opens "1515 uploads page cleared/reloaded on each navigation"
1515 is just a minor annoyance, while the current issue is a non-functional page, so reverting for now and revisit later.
fix chapters button not being hidden
add back live ui
fix chapters button showing up when using miniplayer
bugfix race condition for removing chapters button
move chapter loading to videoviewer component
remove unnecessary claim being passed