Skip to content

Commit e94ee7b

Browse files
committed
FIX - update Airtable field
1 parent eb1dc04 commit e94ee7b

4 files changed

Lines changed: 64 additions & 2 deletions

File tree

client/src/components/AdminReviewPage.css

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,24 @@
409409
overflow-wrap: anywhere;
410410
}
411411

412+
.admin-review-reship-update {
413+
border-color: rgba(255, 214, 120, 0.55);
414+
background: rgba(48, 36, 8, 0.35);
415+
}
416+
417+
.admin-review-reship-update h2 {
418+
color: #ffe4a3;
419+
}
420+
421+
.admin-review-reship-update-body {
422+
margin: 0;
423+
color: rgba(232, 244, 255, 0.95);
424+
font-size: 0.9rem;
425+
line-height: 1.5;
426+
white-space: pre-wrap;
427+
overflow-wrap: anywhere;
428+
}
429+
412430
@media (max-width: 760px) {
413431
.admin-review-time-row.has-history {
414432
flex-direction: column;

client/src/components/AdminReviewPage.jsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -508,6 +508,13 @@ function AdminReviewDetail({ projectId }) {
508508
)}
509509
</section>
510510

511+
{(project.shipKind === "reship" || project.status === "pending-reship") && project.reshipUpdate ? (
512+
<section className="admin-review-panel admin-review-reship-update" aria-label="Re-ship update">
513+
<h2>Re-ship update</h2>
514+
<p className="admin-review-reship-update-body">{project.reshipUpdate}</p>
515+
</section>
516+
) : null}
517+
511518
<label className="admin-review-fraud">
512519
<input
513520
type="checkbox"

server/airtableYsws.js

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,10 +190,18 @@ function buildSubmissionFromContext({ project, user, status }) {
190190
status,
191191
source_project_status: project.status || null,
192192
ship_kind: project.ship_kind || "initial",
193-
airtable_record_id: status === YSWS_STATUS.approved ? project.ysws_record_id || null : null,
193+
airtable_record_id: resolveAirtableRecordIdForSubmission(project, status),
194194
};
195195
}
196196

197+
function resolveAirtableRecordIdForSubmission(project, status) {
198+
const linkedRecordId = project.ysws_record_id || null;
199+
if (status === YSWS_STATUS.approved || status === YSWS_STATUS.pendingReship) {
200+
return linkedRecordId;
201+
}
202+
return null;
203+
}
204+
197205
function buildFieldsFromSubmission(submission) {
198206
const fields = {
199207
[F.codeUrl]: submission.code_url || undefined,
@@ -215,7 +223,9 @@ function buildFieldsFromSubmission(submission) {
215223
[F.status]: submission.status,
216224
};
217225

218-
if (submission.reship_update) {
226+
const isReshipSubmission =
227+
submission.ship_kind === "reship" || submission.status === YSWS_STATUS.pendingReship;
228+
if (isReshipSubmission && submission.reship_update) {
219229
fields[F.update] = submission.reship_update;
220230
}
221231

@@ -385,7 +395,33 @@ export async function deleteProjectSubmissionsFromYsws(projectId) {
385395
return { ok: true, deleted: result.rows.length };
386396
}
387397

398+
async function resolveSubmissionAirtableRecordId(submission) {
399+
if (submission.airtable_record_id) return submission.airtable_record_id;
400+
401+
const result = await pool.query(
402+
`
403+
SELECT airtable_record_id
404+
FROM ysws_project_submissions
405+
WHERE project_id = $1
406+
AND airtable_record_id IS NOT NULL
407+
AND status = ANY($2::text[])
408+
ORDER BY updated_at DESC
409+
LIMIT 1
410+
`,
411+
[submission.project_id, [YSWS_STATUS.approved, YSWS_STATUS.pending, YSWS_STATUS.pendingReship]]
412+
);
413+
414+
return result.rows[0]?.airtable_record_id || null;
415+
}
416+
388417
async function upsertLocalSubmission(submission) {
418+
if (
419+
(submission.status === YSWS_STATUS.pendingReship || submission.status === YSWS_STATUS.approved) &&
420+
!submission.airtable_record_id
421+
) {
422+
submission.airtable_record_id = await resolveSubmissionAirtableRecordId(submission);
423+
}
424+
389425
if (submission.status === YSWS_STATUS.approved) {
390426
const approvedResult = await pool.query(
391427
"SELECT * FROM ysws_project_submissions WHERE project_id = $1 AND status = $2",

server/projects.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1563,6 +1563,7 @@ function toPublicProject(row) {
15631563
fraudFlag: Boolean(row.fraud_flag),
15641564
blocked: Boolean(row.blocked),
15651565
shipKind: row.ship_kind || "initial",
1566+
reshipUpdate: textOrNull(row.reship_update),
15661567
parentProjectId: row.parent_project_id != null ? Number(row.parent_project_id) : null,
15671568
};
15681569
}

0 commit comments

Comments
 (0)