Process 1 build 0803262038

This commit is contained in:
2026-03-08 20:40:18 +13:00
parent 4e2b902760
commit 3989e90a9a
8 changed files with 952 additions and 42 deletions

View File

@@ -28,6 +28,18 @@ type PortalItem = {
updated_at: string
last_activity_at: string
permissions?: PortalPermissions
workflow?: {
request_status?: string
media_status?: string
stage_label?: string
is_terminal?: boolean
}
issue?: {
issue_type?: string
related_item_id?: number | null
is_resolved?: boolean
resolved_at?: string | null
}
}
type PortalComment = {
@@ -68,10 +80,31 @@ const STATUS_OPTIONS = [
{ value: 'in_progress', label: 'In progress' },
{ value: 'blocked', label: 'Blocked' },
{ value: 'done', label: 'Done' },
{ value: 'pending', label: 'Pending approval' },
{ value: 'approved', label: 'Approved' },
{ value: 'processing', label: 'Processing' },
{ value: 'partially_available', label: 'Partially available' },
{ value: 'available', label: 'Available' },
{ value: 'failed', label: 'Failed' },
{ value: 'declined', label: 'Declined' },
{ value: 'closed', label: 'Closed' },
] as const
const REQUEST_STATUS_OPTIONS = [
{ value: 'pending', label: 'Pending approval' },
{ value: 'approved', label: 'Approved' },
{ value: 'declined', label: 'Declined' },
] as const
const MEDIA_STATUS_OPTIONS = [
{ value: 'pending', label: 'Pending' },
{ value: 'processing', label: 'Processing' },
{ value: 'partially_available', label: 'Partially available' },
{ value: 'available', label: 'Available' },
{ value: 'failed', label: 'Failed' },
{ value: 'unknown', label: 'Unknown' },
] as const
const PRIORITY_OPTIONS = [
{ value: 'low', label: 'Low' },
{ value: 'normal', label: 'Normal' },
@@ -135,6 +168,8 @@ export default function PortalPage() {
const [editYear, setEditYear] = useState('')
const [editExternalRef, setEditExternalRef] = useState('')
const [editStatus, setEditStatus] = useState('new')
const [editRequestStatus, setEditRequestStatus] = useState('pending')
const [editMediaStatus, setEditMediaStatus] = useState('pending')
const [editPriority, setEditPriority] = useState('normal')
const [editAssignee, setEditAssignee] = useState('')
@@ -312,6 +347,8 @@ export default function PortalPage() {
setEditYear(selectedItem.year == null ? '' : String(selectedItem.year))
setEditExternalRef(selectedItem.external_ref ?? '')
setEditStatus(selectedItem.status ?? 'new')
setEditRequestStatus(selectedItem.workflow?.request_status ?? 'pending')
setEditMediaStatus(selectedItem.workflow?.media_status ?? 'pending')
setEditPriority(selectedItem.priority ?? 'normal')
setEditAssignee(selectedItem.assignee_username ?? '')
}, [selectedItem])
@@ -382,7 +419,12 @@ export default function PortalPage() {
external_ref: editExternalRef || null,
}
if (selectedItem.permissions?.can_moderate) {
payload.status = editStatus
if (selectedItem.kind === 'request') {
payload.request_status = editRequestStatus
payload.media_status = editMediaStatus
} else {
payload.status = editStatus
}
payload.priority = editPriority
payload.assignee_username = editAssignee || null
}
@@ -661,7 +703,12 @@ export default function PortalPage() {
<p>{item.description}</p>
<div className="portal-item-row-meta">
<span>#{item.id}</span>
<span>Status: {item.status}</span>
<span>
Status:{' '}
{item.kind === 'request'
? item.workflow?.stage_label ?? item.status
: item.status}
</span>
<span>By: {item.created_by_username}</span>
<span>Updated: {formatDate(item.last_activity_at)}</span>
</div>
@@ -687,6 +734,16 @@ export default function PortalPage() {
<p className="lede">
Created by {selectedItem.created_by_username} on {formatDate(selectedItem.created_at)}
</p>
{selectedItem.kind === 'request' && (
<p className="lede">
Pipeline:{' '}
<strong>
{selectedItem.workflow?.request_status ?? 'pending'} /{' '}
{selectedItem.workflow?.media_status ?? 'pending'}
</strong>{' '}
({selectedItem.workflow?.stage_label ?? 'Pending'})
</p>
)}
</div>
</div>
@@ -741,16 +798,47 @@ export default function PortalPage() {
</label>
{selectedItem.permissions?.can_moderate && (
<>
<label>
<span>Status</span>
<select value={editStatus} onChange={(event) => setEditStatus(event.target.value)}>
{STATUS_OPTIONS.map((option) => (
<option key={option.value} value={option.value}>
{option.label}
</option>
))}
</select>
</label>
{selectedItem.kind === 'request' ? (
<>
<label>
<span>Request status</span>
<select
value={editRequestStatus}
onChange={(event) => setEditRequestStatus(event.target.value)}
>
{REQUEST_STATUS_OPTIONS.map((option) => (
<option key={option.value} value={option.value}>
{option.label}
</option>
))}
</select>
</label>
<label>
<span>Media status</span>
<select
value={editMediaStatus}
onChange={(event) => setEditMediaStatus(event.target.value)}
>
{MEDIA_STATUS_OPTIONS.map((option) => (
<option key={option.value} value={option.value}>
{option.label}
</option>
))}
</select>
</label>
</>
) : (
<label>
<span>Status</span>
<select value={editStatus} onChange={(event) => setEditStatus(event.target.value)}>
{STATUS_OPTIONS.map((option) => (
<option key={option.value} value={option.value}>
{option.label}
</option>
))}
</select>
</label>
)}
<label>
<span>Priority</span>
<select

View File

@@ -1,12 +1,12 @@
{
"name": "magent-frontend",
"version": "0703261729",
"version": "0803262038",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "magent-frontend",
"version": "0703261729",
"version": "0803262038",
"dependencies": {
"next": "16.1.6",
"react": "19.2.4",

View File

@@ -1,7 +1,7 @@
{
"name": "magent-frontend",
"private": true,
"version": "0703261729",
"version": "0803262038",
"scripts": {
"dev": "next dev",
"build": "next build",