Skip to content

Feature/in review pinning - #183

Open
camerontarget14 wants to merge 21 commits into
mainfrom
feature/in-review-pinning
Open

Feature/in review pinning#183
camerontarget14 wants to merge 21 commits into
mainfrom
feature/in-review-pinning

Conversation

@camerontarget14

Copy link
Copy Markdown
Collaborator

Summary

Summary

In-review eyeball moved and made interactive in the version sidebar

UI (VersionCard.tsx, Sidebar.tsx)

  • The icon column is now full-height with space-between: note-status badge stays top-right, the in-review eye moved to the bottom-right of each card.
  • Hovering a version reveals a muted eye on versions not in review; clicking it sets that version in review.
  • When RV is connected, that click also pins it: a Pinned label appears left of the eye and the card gets a soft accent wash. Clicking the pinned eye unpins and resumes RV sync.
  • When RV is not connected, the eye is just a picker — no label, no highlight, and the version already in review shows a static accent eye.
  • Eye clicks are stopPropagation'd so pinning doesn't change the selected version.

Pin state (backend)

  • New in_review_pinned field on playlist metadata (Python models + interfaces.ts).
  • RVSyncService still tracks/broadcasts RV's playhead while pinned but skips writing in_review.
  • New resume_sync(), called by PUT /playlists/{id}/metadata when in_review_pinned goes false, so unpinning snaps in_review to RV's current version instead of waiting for RV's next move.

Hook (useSetInReview)

  • Added pinInReview, unpinInReview, and selectInReview (sets in review and clears any stale pin, for the RV-disconnected case).

Tests — 3 new backend tests (pin suppresses sync; resume with/without a session), 689 backend tests pass. New VersionCard.test.tsx with 7 tests covering both RV-connected and disconnected behavior. No new typecheck errors; the 19 pre-existing frontend test failures are unchanged.

Testing

  • I have tested these changes locally
  • I have run all relevant automated tests
  • I have verified this does not break existing workflows
  • For changes that can be tested in UI, I have included screenshots or gif animations of the changes.

How I Tested

Stood up the app and tested.

Screen Recording 2026-08-11 at 3 38 49 PM

Signed-off-by: Cameron Target <camerontarget@gmail.com>
Signed-off-by: Cameron Target <camerontarget@gmail.com>
Signed-off-by: Cameron Target <camerontarget@gmail.com>
Signed-off-by: Cameron Target <camerontarget@gmail.com>
in RV"

Signed-off-by: Cameron Target <camerontarget@gmail.com>
Opening a playlist from DNA with no RV running spawned two RV windows
(the first showing an error) and in-review sync tracked the wrong one.

Two root causes:
- The launch rvlink carried the sessionFromVersionIDs -eval, which a
  cold-booting RV executes before its ShotGrid machinery is up: the
  eval errors and the session stays empty.
- The URL used -reuse 0, which a *running* RV handles by spawning a
  brand-new RV process, so the retry opened a second window while DNA
  stayed connected to the first one's network port.

Fix: the backend now returns two baked rvlink URLs, both with -reuse 1
so everything stays in one window. The launch URL only brings RV up
with networking (or enables networking on a running RV); the frontend
sends the load URL — carrying the -eval — only after the sync session
is connected, when RV is warm enough to honor it.

Verified cold end-to-end: single window, no error dialog, playlist
loads, and playhead moves sync in_review live.

Signed-off-by: Cameron Target <camerontarget@gmail.com>
Signed-off-by: Cameron Target <camerontarget@gmail.com>
stowed. Also added RV sync to settings modal.

Signed-off-by: Cameron Target <camerontarget@gmail.com>
- "Add Version" menu item now opens a search field: pick an existing
  version to add to the playlist, or create a new one in ShotGrid via
  "+ Add Version". Creating prompts a second step to link the version
  to a shot/asset, with the option to create that entity too.
- "Change Playlist" no longer bounces to the home page; it opens the
  same style of typeahead listing the project's playlists, with
  "+ Add Playlist" to create one and switch into it.
- Backend: new POST /playlists/{id}/versions and
  POST /projects/{id}/playlists endpoints; create_version,
  create_entity, create_playlist, and add_version_to_playlist on the
  provider base, ShotGrid, and mock providers (mock uses a short-lived
  read-write SQLite connection).
- Inline inputs keep their dropdown open during pending/error states
  so failures are visible, and reset the error on the next keystroke.

Signed-off-by: Cameron Target <camerontarget@gmail.com>
Signed-off-by: Cameron Target <camerontarget@gmail.com>
- Publish dialog: per-version "Version Status" row (checkbox + dropdown)
  above notes, pre-checked when a status change is pending; status-only
  changes now surface and publish without a note
- Backend: PATCH /versions/{id}/status endpoint; status_version_ids
  allowlist on publish-notes to decouple status from note publishing
- Reload Playlist / refresh now syncs the selected version so upstream
  status changes are reflected

Signed-off-by: Cameron Target <camerontarget@gmail.com>
Clear draft version_status overrides after a successful status publish
and sync versionStatus from the server in useDraftNote so the version
header dropdown follows the freshly published status.

Signed-off-by: Cameron Target <camerontarget@gmail.com>
notes

- PATCH /versions/{id}/status accepts playlist_id and clears fulfilled
  draft version_status intents server-side, touching only that field so
  note publish state is preserved (a frontend-side clear was resetting
  published=false and causing unchanged notes to republish)
- useDraftNote syncs versionStatus from the server so the version header
  dropdown follows the freshly published status

Signed-off-by: Cameron Target <camerontarget@gmail.com>
Sync content and subject from the server in useDraftNote's same-context
update so edits saved by another instance (e.g. the publish dialog's
editor) appear in the main editor. Skipped while the local instance has
unsaved or in-flight edits so typing is never clobbered.

Signed-off-by: Cameron Target <camerontarget@gmail.com>
reflect back to main UI after publish.

Signed-off-by: Cameron Target <camerontarget@gmail.com>
Signed-off-by: Cameron Target <camerontarget@gmail.com>
Signed-off-by: Cameron Target <camerontarget@gmail.com>
Signed-off-by: Cameron Target <camerontarget@gmail.com>
Signed-off-by: Cameron Target <camerontarget@gmail.com>
Signed-off-by: Cameron Target <camerontarget@gmail.com>
Signed-off-by: Cameron Target <camerontarget@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant