feat: route ready-title issues through guided workflow
Magent CI/CD / verify (push) Successful in 1m52s
Magent CI/CD / deploy-prod (push) Skipped
Magent CI/CD / deploy-beta (push) Successful in 53s

This commit is contained in:
2026-09-15 15:46:09 +12:00
parent 4ba1a5763e
commit 3465343a69
5 changed files with 116 additions and 175 deletions
+39 -6
View File
@@ -586,13 +586,30 @@ export default function PortalClient({ workspace }: PortalClientProps) {
useEffect(() => {
if (typeof window === 'undefined') return
const raw = new URLSearchParams(window.location.search).get('item')
if (!raw) {
setPreselectedItemId(null)
return
}
const parsed = Number.parseInt(raw, 10)
const params = new URLSearchParams(window.location.search)
const raw = params.get('item')
const parsed = raw ? Number.parseInt(raw, 10) : Number.NaN
setPreselectedItemId(Number.isNaN(parsed) || parsed <= 0 ? null : parsed)
const requestId = Number.parseInt(params.get('reportRequest') ?? '', 10)
const title = params.get('title')?.trim()
const type = params.get('type')
const rawYear = Number.parseInt(params.get('year') ?? '', 10)
if (requestId > 0 && title && (type === 'movie' || type === 'tv')) {
const media: DiscoveryResult = {
title,
year: rawYear >= 1870 && rawYear <= 2200 ? rawYear : null,
type,
requestId,
statusLabel: 'Ready to watch',
accessible: true,
}
setIssueSelectedMedia(media)
setIssueMediaTitle(media.title)
setIssueMediaType(type)
setIssueMediaQuery(`${media.title}${media.year ? ` (${media.year})` : ''}`)
setIssueStep('problem')
}
}, [])
const loadMe = async () => {
@@ -860,6 +877,14 @@ export default function PortalClient({ workspace }: PortalClientProps) {
}
const payload = await response.json() as IssueTargetOptions
if (version !== issueOptionsVersion.current) return
const verifiedMedia: DiscoveryResult = {
...media,
title: payload.title,
type: payload.request_type,
}
setIssueSelectedMedia(verifiedMedia)
setIssueMediaTitle(verifiedMedia.title)
setIssueMediaType(payload.request_type)
setIssueOptions(payload)
setIssueOptionsMessage(payload.message ?? null)
const firstSeason = payload.seasons.find((season) => season.season_number > 0) ?? payload.seasons[0]
@@ -981,12 +1006,14 @@ export default function PortalClient({ workspace }: PortalClientProps) {
setMediaServerError(null)
setError(null)
setStatus(null)
const shouldLoadSelectedRequest = Boolean(issueSelectedMedia?.requestId && !issueOptions)
setIssueStep(issueSelectedMedia && issueOptions ? 'symptoms' : 'media')
setSelectedSeasonNumbers([])
setSelectedEpisodeIds([])
if (category === 'playback' || category === 'service_unavailable') {
void checkMediaServer()
}
if (shouldLoadSelectedRequest && issueSelectedMedia) void loadIssueOptions(issueSelectedMedia)
}
const toggleStringChoice = (
@@ -1607,6 +1634,12 @@ export default function PortalClient({ workspace }: PortalClientProps) {
<form className="issue-guided-form" onSubmit={createGuidedIssue}>
<fieldset className="issue-wizard-fields" disabled={creating}>
<IssueFlowStep {...stepProps('problem')} title="What is wrong?" summary={selectedIssueDefinition?.label ?? ''}>
{issueSelectedMedia?.requestId ? (
<div className="issue-prefilled-request">
<div><span className="section-kicker">Reporting a problem with</span><strong>{issueSelectedMedia.title}{issueSelectedMedia.year ? ` (${issueSelectedMedia.year})` : ''}</strong><small>Request #{issueSelectedMedia.requestId} is already selected.</small></div>
<a className="ghost-button" href={`/requests/${issueSelectedMedia.requestId}`}>Back to request</a>
</div>
) : null}
<div className="issue-category-grid">
{ISSUE_CATEGORIES.map((category) => (
<button