:sparkles: Report based ticketing system (#461)
* User Assignments (#453) * update docs for using local @atproto * create beta routes for queues and reports. local state for now * temp fix for queue id being required * update hacking step to handle issue where NextJs can cache an old version * clear up wording * cleanup syntax * create useAutoClaimReport * use tools.ozone.report.getAssignments * improve report list to show fixed number * use fixed number of queues * cleanup useAutoAssignReport * dont try to un-assign * useCallback for assign method * display handle for queue assignments * show handle in new Assignee component * display avatar * remove accidental commit * use realtime hooks. restructure routes to sort by queue first * cleanup * create AssignmentWsClient * cleanup * create assignments ws client * refetching even if failed * handle missing events in ws client * create AssignmentsContext * remove upgrade hook since context handles it * move all state management into AssignmentsContext * use ws in UI components * track subscribed queues in context * remove subscriptions from ws client * use http for now * add alias * remove ws client for now * cleanup based on new API changes * updates for @atproto/oauth-client-browser * update for new api changes * cleanup * remove /beta routes * Queue Configure UI (#455) * update oath client due to breaking changes * basic queue UI * cleanup * basic queue cypress tests * remove access control tests (backend will enforce that) * only show available fields when editing * all triage to view queues * remove beta tag * refactor tooltip to accept children prop * tooltip: dont show title or children if not provided * display summary of queue config to user * cleanup * cleanup * allow newline in report type * update match summary * create ReportTypeCombobox * use ReportTypeCombobox in QueueForm * put collection field next to record subject type * add description to QueueForm * dont store queue config page state in url * create queue configure folder * handle pagination when configuring queues * cleanup * simplify component to just be multi select * cleanup * :bug: Add missing alias * update collection matching wording * add disclaimer * use ReasonBadge in queue list * add queue enable/disable confirmation popup * cleanup * cleanup * add description preview * add other queue list filters * cleanup * make layout responsive * add reset button * add subject type tooltips * create autocomplete collection field * create nsid validator * cleanup * cleanup * update name attributes for better browser experience * move test file * limit select to 10 to match api limit * use fixed margins due to changing height of ReportTypeMultiselect * show limit warning * show limit warning in placeholder * shorten warning * debounce collection filter search * cleanup --------- Co-authored-by: Foysal Ahamed <foysal@blueskyweb.xyz> * Queue UI (#457) * update oath client due to breaking changes * basic queue UI * cleanup * basic queue cypress tests * remove access control tests (backend will enforce that) * only show available fields when editing * all triage to view queues * remove beta tag * refactor tooltip to accept children prop * tooltip: dont show title or children if not provided * display summary of queue config to user * cleanup * cleanup * allow newline in report type * update match summary * create ReportTypeCombobox * use ReportTypeCombobox in QueueForm * put collection field next to record subject type * add description to QueueForm * dont store queue config page state in url * create queue configure folder * handle pagination when configuring queues * cleanup * simplify component to just be multi select * cleanup * :bug: Add missing alias * update collection matching wording * add disclaimer * use ReasonBadge in queue list * add queue enable/disable confirmation popup * cleanup * cleanup * add description preview * add other queue list filters * cleanup * make layout responsive * add reset button * add subject type tooltips * create autocomplete collection field * create nsid validator * cleanup * cleanup * update name attributes for better browser experience * move test file * create /queues route * remove test components * add assignees to queue items * add configure button * de-couple queue components for configure page and /queues page * clean up layout * rename for easier merge * rename for clarity * update cy field to not be repeated * fix merge issue * fix layout issue * use autocomplete in config page * make autocomplete component have a fixed height * use CollectionAutoComplete in configure page * cleanup * create QueueFilters * make single QueuesList * dont show configure button if not given access * cleanup layout * cleanup * make mobile responsive * cleanup * cleanup * default to enabled in /queues page * allow filters to be hidden * hide enable filter in /queues * hide enabled flag in /queues page * cleanup * Report rerouting (#458) * add report re-routing hooks * add queue manager dialog * refactor queue manager window with log window * add reset button * rename route * remove reset button * hold to confirm * add HoldButton to buttons file * use ActionButton for routing reports * cleanup wording * hightlight fields on change * rename to ModeratorBadge --------- Co-authored-by: Foysal Ahamed <foysal@blueskyweb.xyz> * :sparkles: Add new report queue list and single report viewer (#456) * update oath client due to breaking changes * basic queue UI * cleanup * basic queue cypress tests * remove access control tests (backend will enforce that) * only show available fields when editing * all triage to view queues * remove beta tag * refactor tooltip to accept children prop * tooltip: dont show title or children if not provided * display summary of queue config to user * cleanup * cleanup * allow newline in report type * update match summary * create ReportTypeCombobox * use ReportTypeCombobox in QueueForm * put collection field next to record subject type * add description to QueueForm * dont store queue config page state in url * create queue configure folder * handle pagination when configuring queues * cleanup * simplify component to just be multi select * cleanup * :bug: Add missing alias * update collection matching wording * add disclaimer * use ReasonBadge in queue list * add queue enable/disable confirmation popup * cleanup * cleanup * add description preview * add other queue list filters * cleanup * make layout responsive * add reset button * add subject type tooltips * create autocomplete collection field * create nsid validator * cleanup * cleanup * update name attributes for better browser experience * move test file * :sparkles: Add new report queue list and single report viewer * :sparkles: Add report navigation * :lipstick: Nicer UI for actioning * :sparkles: Integrate with report activity * :sparkles: Show moderator details for activity * :sparkles: Move to limited action options * :sparkles: Improve queue summary view * :broom: Cleanup unnecessary action related code * :bug: Fix display of assignment notification * :lipstick: Add helptext for public note --------- Co-authored-by: gcwill70 <gcwill70@gmail.com> * ❇️ Muted report support (#463) * feat: add MutedBadge component for report mute status Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: show muted badge in report list view Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: show muted badge in report detail view Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add mute filter to beta reports filters Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: pass isMuted filter to queryReports API Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * :bug: Fix muted filter selection * :bug: Add quick action panel to report pages * feat: add isAppealReport helper and expand REPORT_STATUS_EVENT_TYPES Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: expand ReportActionType and add subjectStatus prop to ReportActionsBar Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: render appeal-specific standalone buttons in ReportActionsBar Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: emit resolveAppeal on appeal no-action close Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: wire up revert-takedown form rendering and props in ReportDetailLayout Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: emit resolveAppeal after primary action for appeal reports Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * :rotating_lights: Fix lint issue * :sparkles: Add local development command * :lipstick: Improve filtering buttons * :sparkles: Add better back button --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * Ozone report stats (#462) * show additional stats on queues * fix hidden fields * add getLiveStats * add aggregate stats above queues * create analytics dashboard with mock data for now * add date range limit * fix bug * make filters mutually exclusive * create useStatsFilters * back arrow * cleanup * cleanup * cleanup * cleanup * remove queue stats card * cleanup * add moderator filter * rename component * create MemberSingleSelect * cleanup * cleanup * cleanup * store grouping in stats filters * cleanup * show no data indicator * fix spacing * use consistent coloring for stats values * make mocking easier to use * clear local dev setup * use max limit * allow limit override when fetching queues * rename for accuracy * show live stats in single row in analytics page * create PaginatedGrid * create PaginatedSelect * update coloring to match other places in the app * use paginated dropdown in stats filters * refactor component * set width * fix unstable query key bug * add new packages * fix infinite fetching bug * remove stats mocking * add aggregate grouping * allow viewing stats of unqueued reports * update stat types * update testing fixture for updated stats type * cleanup * update wording * cleanup * dont zero out nullish stats * cleanup * Ozone ticketing fixes (#467) * refacotr assignee status to show handle self assign case Co-authored-by: Copilot <copilot@github.com> * add canAssignOthers permission * create StatValues * use StatValues Co-authored-by: Copilot <copilot@github.com> * cleanup * rearrange sidebar and reduce number of items * add old sidebar links to profile menu * handle if stats havent been calculated yet * avoid duplicate fetch * cleanup * cleanup Co-authored-by: Copilot <copilot@github.com> * put ReportTypeMultiselect in horizontal orientation in reports/beta page * cleanup * wording * reword --------- Co-authored-by: Copilot <copilot@github.com> * Various UX fixes (#466) * :sparkles: Add action list display on reports * :sparkles: Add manual report routing * :sparkles: Add unassignment for report, cleanup query invalidation, remove public notes (#475) * :sparkles: Add unassignment for report, cleanup query invvalidation, remove public notes * :sparkles: Change queue filtering, add queue unassignment, move analytics * :arrow_up: Upgrade package versions * :bug: Make status fixed * Remove claude file * :rotating_lights: Fix lint issue * default selected types to cover current queue --------- Co-authored-by: Geoff Cramer <gcwill70@gmail.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: Copilot <copilot@github.com>