Add prominent watch button to ready requests
This commit is contained in:
@@ -2039,6 +2039,44 @@ button:disabled,
|
|||||||
border-bottom: 0;
|
border-bottom: 0;
|
||||||
background: linear-gradient(90deg, rgba(14, 165, 233, 0.08), rgba(79, 70, 229, 0.08));
|
background: linear-gradient(90deg, rgba(14, 165, 233, 0.08), rgba(79, 70, 229, 0.08));
|
||||||
}
|
}
|
||||||
|
.request-next-step-main {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
gap: 28px;
|
||||||
|
}
|
||||||
|
.request-next-step-copy {
|
||||||
|
display: grid;
|
||||||
|
gap: 7px;
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
.request-next-step-copy > strong { color: var(--ops-text); font-size: 1rem; line-height: 1.4; }
|
||||||
|
.request-next-step-copy > p { margin: 0; }
|
||||||
|
.request-watch-button {
|
||||||
|
flex: 0 0 auto;
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 10px;
|
||||||
|
min-width: 240px;
|
||||||
|
min-height: 48px;
|
||||||
|
padding: 12px 20px;
|
||||||
|
border: 1px solid rgba(72, 224, 178, 0.62);
|
||||||
|
border-radius: var(--ops-radius);
|
||||||
|
background: linear-gradient(115deg, rgba(16, 185, 129, 0.92), rgba(14, 165, 233, 0.9));
|
||||||
|
color: #fff;
|
||||||
|
box-shadow: 0 10px 28px rgba(14, 165, 233, 0.16);
|
||||||
|
font-size: 0.84rem;
|
||||||
|
font-weight: 800;
|
||||||
|
text-decoration: none;
|
||||||
|
transition: border-color 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease;
|
||||||
|
}
|
||||||
|
.request-watch-button:hover {
|
||||||
|
border-color: rgba(126, 255, 214, 0.9);
|
||||||
|
box-shadow: 0 12px 34px rgba(14, 165, 233, 0.24);
|
||||||
|
transform: translateY(-1px);
|
||||||
|
}
|
||||||
|
.request-watch-button > span { font-size: 1rem; }
|
||||||
|
|
||||||
.request-action-row,
|
.request-action-row,
|
||||||
.request-stage-actions { display: flex; flex-wrap: wrap; gap: 9px; margin-top: 6px; }
|
.request-stage-actions { display: flex; flex-wrap: wrap; gap: 9px; margin-top: 6px; }
|
||||||
@@ -2266,6 +2304,8 @@ button:disabled,
|
|||||||
.request-diagnostics-grid { grid-template-columns: 1fr; }
|
.request-diagnostics-grid { grid-template-columns: 1fr; }
|
||||||
.request-action-row,
|
.request-action-row,
|
||||||
.request-stage-actions { display: grid; }
|
.request-stage-actions { display: grid; }
|
||||||
|
.request-next-step-main { align-items: stretch; flex-direction: column; }
|
||||||
|
.request-watch-button { width: 100%; min-width: 0; }
|
||||||
.request-action-row button,
|
.request-action-row button,
|
||||||
.request-release button { width: 100%; }
|
.request-release button { width: 100%; }
|
||||||
.request-operation-heading { align-items: flex-start; flex-direction: column; }
|
.request-operation-heading { align-items: flex-start; flex-direction: column; }
|
||||||
|
|||||||
@@ -463,6 +463,10 @@ export default function RequestTimelinePage() {
|
|||||||
|
|
||||||
const presentation = snapshot.presentation ?? {}
|
const presentation = snapshot.presentation ?? {}
|
||||||
const pipeline = presentation.pipeline?.length ? presentation.pipeline : fallbackPipeline(snapshot)
|
const pipeline = presentation.pipeline?.length ? presentation.pipeline : fallbackPipeline(snapshot)
|
||||||
|
const availableStage = pipeline.find((stage) => stage.id === 'available')
|
||||||
|
const mediaServerLink = availableStage?.state === 'complete' && availableStage.link
|
||||||
|
? availableStage.link
|
||||||
|
: null
|
||||||
const statusLabel = presentation.status?.label ?? fallbackStatusLabel(snapshot.state)
|
const statusLabel = presentation.status?.label ?? fallbackStatusLabel(snapshot.state)
|
||||||
const statusMeaning = presentation.status?.meaning ?? snapshot.state_reason ?? 'Magent is checking this request.'
|
const statusMeaning = presentation.status?.meaning ?? snapshot.state_reason ?? 'Magent is checking this request.'
|
||||||
const download = presentation.download
|
const download = presentation.download
|
||||||
@@ -671,9 +675,23 @@ export default function RequestTimelinePage() {
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
<div className="request-overview-block request-next-step">
|
<div className="request-overview-block request-next-step">
|
||||||
|
<div className="request-next-step-main">
|
||||||
|
<div className="request-next-step-copy">
|
||||||
<span className="request-overview-label">Next step</span>
|
<span className="request-overview-label">Next step</span>
|
||||||
<strong>{nextStep.title}</strong>
|
<strong>{nextStep.title}</strong>
|
||||||
<p>{nextStep.description}</p>
|
<p>{nextStep.description}</p>
|
||||||
|
</div>
|
||||||
|
{mediaServerLink && (
|
||||||
|
<a
|
||||||
|
className="request-watch-button"
|
||||||
|
href={mediaServerLink}
|
||||||
|
target="_blank"
|
||||||
|
rel="noreferrer"
|
||||||
|
>
|
||||||
|
Watch on Grizzlyflix <span aria-hidden="true">→</span>
|
||||||
|
</a>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
<div className="request-action-row">
|
<div className="request-action-row">
|
||||||
{recommendedActions.map((action) => (
|
{recommendedActions.map((action) => (
|
||||||
<button key={action.id} type="button" disabled={Boolean(busyAction)} onClick={() => void runAction(action)}>
|
<button key={action.id} type="button" disabled={Boolean(busyAction)} onClick={() => void runAction(action)}>
|
||||||
|
|||||||
Reference in New Issue
Block a user