Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions integrations/evaluations/app/actions/evaluate/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@
import { PubValues } from "@pubpub/sdk";
import { revalidatePath } from "next/cache";
import { expect } from "utils";
import { sendSubmittedNotificationEmail, unscheduleNoSubmitNotificationEmail } from "~/lib/emails";
import {
sendSubmittedNotificationEmail,
unscheduleAllDeadlineReminderEmails,
unscheduleNoSubmitNotificationEmail,
} from "~/lib/emails";
import { getInstanceConfig, getInstanceState, setInstanceState } from "~/lib/instance";
import { client } from "~/lib/pubpub";
import { cookie } from "~/lib/request";
Expand Down Expand Up @@ -37,8 +41,10 @@ export const submit = async (instanceId: string, pubId: string, values: PubValue
evaluationPubId: pub.id,
};
await setInstanceState(instanceId, pubId, instanceState);
// Unschedule no-submit notification email.
// Unschedule no-submit notification email for manager.
await unscheduleNoSubmitNotificationEmail(instanceId, pubId, evaluator);
// unschedule dealine reminder emails.
await unscheduleAllDeadlineReminderEmails(instanceId, pubId, evaluator);
// Immediately send submitted notification email.
await sendSubmittedNotificationEmail(instanceId, instanceConfig, pubId, evaluator);
revalidatePath("/");
Expand Down
10 changes: 1 addition & 9 deletions integrations/evaluations/app/actions/evaluate/evaluate.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -101,15 +101,7 @@ export function Evaluate(props: Props) {
const submissionUrl = pub.values["unjournal:url"] as string;
const submissionTitle = pub.values[props.instanceConfig.titleFieldSlug] as string;
const submissionAbstract = pub.values["unjournal:description"] as string;
const deadline = props.evaluator.deadline
? new Date(props.evaluator.deadline)
: calculateDeadline(
{
deadlineLength: props.instanceConfig.deadlineLength,
deadlineUnit: props.instanceConfig.deadlineUnit,
},
new Date(props.evaluator.acceptedAt)
);
const deadline = getDeadline(props.instanceConfig, props.evaluator);

return (
<>
Expand Down
27 changes: 21 additions & 6 deletions integrations/evaluations/app/actions/manage/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,20 @@ import { expect } from "utils";
import { getInstanceConfig, getInstanceState, setInstanceState } from "~/lib/instance";
import { client } from "~/lib/pubpub";
import { cookie } from "~/lib/request";
import { isInvited } from "~/lib/types";
import {
EvaluatorWhoAccepted,
EvaluatorWithInvite,
assertHasAccepted,
assertIsInvited,
isInvited,
} from "~/lib/types";
import {
scheduleInvitationReminderEmail,
scheduleNoReplyNotificationEmail,
scheduleReminderEmail,
sendInviteEmail,
} from "../../../lib/emails";
unscheduleAllDeadlineReminderEmails,
unscheduleAllManagerEmails,
} from "~/lib/emails";
import { InviteFormEvaluator } from "./types";

export const save = async (
Expand Down Expand Up @@ -71,7 +79,7 @@ export const save = async (
// Immediately send the invite email.
await sendInviteEmail(instanceId, pubId, evaluator);
// Scehdule a reminder email to person who was invited to evaluate.
await scheduleReminderEmail(instanceId, instanceConfig, pubId, evaluator);
await scheduleInvitationReminderEmail(instanceId, instanceConfig, pubId, evaluator);
// Schedule no-reply notification email to person who invited the
// evaluator.
await scheduleNoReplyNotificationEmail(
Expand Down Expand Up @@ -118,15 +126,22 @@ export const remove = async (instanceId: string, pubId: string, userId: string)
const evaluation = pub.children.find(
(child) => child.values[instanceConfig.evaluatorFieldSlug] === userId
);
// TODO: When an evaluator is removed, we should unschedule reminder
// email and notification email(s).

if (evaluation !== undefined) {
await client.deletePub(instanceId, evaluation.id);
}
if (instanceState !== undefined) {
let evaluator = expect(
instanceState[userId],
`User was not invited to evaluate pub ${pubId}`
);
assertHasAccepted(evaluator);
await unscheduleAllDeadlineReminderEmails(instanceId, pubId, evaluator);
await unscheduleAllManagerEmails(instanceId, pubId, evaluator);
delete instanceState[userId];
await setInstanceState(instanceId, pubId, instanceState);
}

return { success: true };
} catch (error) {
return { error: error.message };
Expand Down
45 changes: 37 additions & 8 deletions integrations/evaluations/app/actions/respond/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,14 @@ import {
sendDeclinedNotificationEmail,
sendRequestedInfoNotification,
unscheduleNoReplyNotificationEmail,
unscheduleReminderEmail,
unscheduleInvitationReminderEmail,
calculateDeadline,
schedulePromptEvalBonusReminderEmail,
scheduleFinalPromptEvalBonusReminderEmail,
scheduleEvaluationReminderEmail,
scheduleFinalEvaluationReminderEmail,
scheduleFollowUpToFinalEvaluationReminderEmail,
sendNoticeOfNoSubmitEmail,
} from "~/lib/emails";
import { getInstanceConfig, getInstanceState, setInstanceState } from "~/lib/instance";
import { cookie } from "~/lib/request";
Expand Down Expand Up @@ -39,7 +45,6 @@ export const accept = async (instanceId: string, pubId: string) => {
...evaluator,
status: "accepted",
acceptedAt: new Date().toString(),
deadline: new Date(Date.now()),
};
const deadline = calculateDeadline(
{
Expand All @@ -50,16 +55,40 @@ export const accept = async (instanceId: string, pubId: string) => {
);
evaluator.deadline = deadline;
await setInstanceState(instanceId, pubId, instanceState);
// Unschedule reminder email.
await unscheduleReminderEmail(instanceId, pubId, evaluator);
// Unschedule no-reply notification email.
// Unschedule reminder email to evaluator.
await unscheduleInvitationReminderEmail(instanceId, pubId, evaluator);
// Unschedule no-reply notification email to community manager.
await unscheduleNoReplyNotificationEmail(instanceId, pubId, evaluator);
// Immediately send accepted notification email.
// Immediately send accepted notification email to community manager.
await sendAcceptedNotificationEmail(instanceId, instanceConfig, pubId, evaluator);
// Immediately send accepted email to evaluator.
await sendAcceptedEmail(instanceId, instanceConfig, pubId, evaluator);
// Schedule no-submit notification email.
// Schedule no-submit notification email to community manager.
await scheduleNoSubmitNotificationEmail(instanceId, instanceConfig, pubId, evaluator);

// schedule prompt evaluation email to evaluator.
await schedulePromptEvalBonusReminderEmail(instanceId, instanceConfig, pubId, evaluator);
//schedule final prompt eval email to evaluator
await scheduleFinalPromptEvalBonusReminderEmail(
instanceId,
instanceConfig,
pubId,
evaluator
);
//schedule eval reminder email to evaluator
await scheduleEvaluationReminderEmail(instanceId, instanceConfig, pubId, evaluator);
//schedule final eval reminder email to evaluator
await scheduleFinalEvaluationReminderEmail(instanceId, instanceConfig, pubId, evaluator);
//schedule follow up to final eval reminder email to evaluator
await scheduleFollowUpToFinalEvaluationReminderEmail(
instanceId,
instanceConfig,
pubId,
evaluator
);
// schedule no-submit notification email to evalutaor
await sendNoticeOfNoSubmitEmail(instanceId, instanceConfig, pubId, evaluator);

return { success: true };
} catch (error) {
return { error: error.message };
Expand All @@ -85,7 +114,7 @@ export const decline = async (instanceId: string, pubId: string) => {
evaluator = instanceState[user.id] = { ...evaluator, status: "declined" };
await setInstanceState(instanceId, pubId, instanceState);
// Unschedule reminder email.
await unscheduleReminderEmail(instanceId, pubId, evaluator);
await unscheduleInvitationReminderEmail(instanceId, pubId, evaluator);
// Unschedule no-reply notification email.
await unscheduleNoReplyNotificationEmail(instanceId, pubId, evaluator);
// Immediately send declined notification email.
Expand Down
Loading