Revamp scenic playback and operator workflow
This commit is contained in:
+1143
-675
File diff suppressed because it is too large
Load Diff
+713
-1289
File diff suppressed because it is too large
Load Diff
@@ -4,7 +4,9 @@ import type {
|
||||
CueMovePayload,
|
||||
CueUpsertPayload,
|
||||
ModerationActionPayload,
|
||||
RepositoryState
|
||||
RepositoryState,
|
||||
Submission,
|
||||
SubmissionUpdatePayload
|
||||
} from "@goodgrief/shared-types";
|
||||
|
||||
const postVoid = async (url: string, body?: unknown) => {
|
||||
@@ -102,6 +104,15 @@ export const createAdminUpload = async (payload: FormData) =>
|
||||
body: payload
|
||||
});
|
||||
|
||||
export const updateSubmissionMetadata = async (submissionId: string, payload: SubmissionUpdatePayload) =>
|
||||
requestJson<Submission>(`/api/submissions/${submissionId}`, {
|
||||
method: "PUT",
|
||||
headers: {
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
body: JSON.stringify(payload)
|
||||
});
|
||||
|
||||
export const deleteCue = async (cueId: string) => {
|
||||
const response = await fetch(`/api/cues/${cueId}`, {
|
||||
method: "DELETE"
|
||||
|
||||
@@ -6,9 +6,7 @@ export interface SubmissionFormState {
|
||||
caption: string;
|
||||
promptAnswer: string;
|
||||
allowArchive: boolean;
|
||||
hasRights: boolean;
|
||||
allowProjection: boolean;
|
||||
acknowledgePublicPerformance: boolean;
|
||||
consentAccepted: boolean;
|
||||
file: File | null;
|
||||
}
|
||||
|
||||
@@ -17,9 +15,7 @@ const initialState: SubmissionFormState = {
|
||||
caption: "",
|
||||
promptAnswer: "",
|
||||
allowArchive: false,
|
||||
hasRights: false,
|
||||
allowProjection: false,
|
||||
acknowledgePublicPerformance: false,
|
||||
consentAccepted: false,
|
||||
file: null
|
||||
};
|
||||
|
||||
@@ -46,9 +42,9 @@ export const useSubmissionForm = () => {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!state.hasRights || !state.allowProjection || !state.acknowledgePublicPerformance) {
|
||||
if (!state.consentAccepted) {
|
||||
setStatusTone("error");
|
||||
setStatus("Please review and accept the required consent items.");
|
||||
setStatus("Please review and accept the consent note.");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -60,7 +56,13 @@ export const useSubmissionForm = () => {
|
||||
try {
|
||||
await createSubmission(
|
||||
{
|
||||
...state,
|
||||
displayName: state.displayName,
|
||||
caption: state.caption,
|
||||
promptAnswer: state.promptAnswer,
|
||||
allowArchive: state.allowArchive,
|
||||
hasRights: true,
|
||||
allowProjection: true,
|
||||
acknowledgePublicPerformance: true,
|
||||
file
|
||||
},
|
||||
(nextProgress) => setProgress(nextProgress)
|
||||
|
||||
@@ -10,8 +10,7 @@ export const SubmissionRoute = () => {
|
||||
<p className="submission-kicker">Good Grief</p>
|
||||
<h1 className="submission-title">Offer a photo to tonight's memory field.</h1>
|
||||
<p className="submission-copy">
|
||||
Share one image that carries memory, witness, humor, or tenderness for you. The creative team will
|
||||
review each submission. Not every image will appear, and none will be shown without moderation.
|
||||
Share one image that carries memory, witness, humor, or tenderness for a loved one that has passed.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
@@ -23,11 +22,11 @@ export const SubmissionRoute = () => {
|
||||
<input
|
||||
id="file"
|
||||
type="file"
|
||||
accept="image/jpeg,image/png,image/heic,image/heif"
|
||||
accept="image/jpeg,image/png,image/webp,image/heic,image/heif,.jpg,.jpeg,.png,.webp,.heic,.heif"
|
||||
onChange={(event) => updateField("file", event.target.files?.[0] ?? null)}
|
||||
/>
|
||||
<p className="submission-status">
|
||||
One image only. Common phone photos work best. Unsupported files will be declined.
|
||||
One image only. Common phone photos work best. Unsupported files don't work in the system.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -72,26 +71,13 @@ export const SubmissionRoute = () => {
|
||||
<label className="submission-checkbox">
|
||||
<input
|
||||
type="checkbox"
|
||||
checked={state.hasRights}
|
||||
onChange={(event) => updateField("hasRights", event.target.checked)}
|
||||
checked={state.consentAccepted}
|
||||
onChange={(event) => updateField("consentAccepted", event.target.checked)}
|
||||
/>
|
||||
<span>I have the right to share this photo, and I understand it may be declined.</span>
|
||||
</label>
|
||||
<label className="submission-checkbox">
|
||||
<input
|
||||
type="checkbox"
|
||||
checked={state.allowProjection}
|
||||
onChange={(event) => updateField("allowProjection", event.target.checked)}
|
||||
/>
|
||||
<span>I consent to this image being used in a live theatrical performance.</span>
|
||||
</label>
|
||||
<label className="submission-checkbox">
|
||||
<input
|
||||
type="checkbox"
|
||||
checked={state.acknowledgePublicPerformance}
|
||||
onChange={(event) => updateField("acknowledgePublicPerformance", event.target.checked)}
|
||||
/>
|
||||
<span>I understand this is a public performance setting and projection is not guaranteed.</span>
|
||||
<span>
|
||||
I have permission to share this photo and understand it may be used in a live public performance,
|
||||
though projection is not guaranteed.
|
||||
</span>
|
||||
</label>
|
||||
<label className="submission-checkbox">
|
||||
<input
|
||||
|
||||
Reference in New Issue
Block a user