From 45680042acd94d8965b46bbe9b2ef1419733b45b Mon Sep 17 00:00:00 2001 From: qweliant Date: Wed, 8 Nov 2023 17:29:22 -0500 Subject: [PATCH 01/10] change name, add TODO --- core/lib/server/integrations.ts | 3 ++- core/pages/api/v0/[...ts-rest].ts | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/core/lib/server/integrations.ts b/core/lib/server/integrations.ts index ea74749072..1017b0c39d 100644 --- a/core/lib/server/integrations.ts +++ b/core/lib/server/integrations.ts @@ -1,6 +1,7 @@ import prisma from "~/prisma/db"; -export async function setIntegrationInstanceConfig(instanceId: string, config: object) { +// TODO: If its the case an integration instance can be attached to a stage without configuring it this should be an upsert +export async function updateIntegrationInstanceConfig(instanceId: string, config: object) { return await prisma.integrationInstance.update({ where: { id: instanceId, diff --git a/core/pages/api/v0/[...ts-rest].ts b/core/pages/api/v0/[...ts-rest].ts index e94cdc1c01..b788bd8b08 100644 --- a/core/pages/api/v0/[...ts-rest].ts +++ b/core/pages/api/v0/[...ts-rest].ts @@ -10,7 +10,7 @@ import { getPub, getPubType, getSuggestedMembers, - setIntegrationInstanceConfig, + updateIntegrationInstanceConfig, setIntegrationInstanceState, tsRestHandleErrors, updatePub, @@ -131,7 +131,7 @@ const integrationsRouter = createNextRoute(api.integrations, { }, setInstanceConfig: async ({ headers, params, body }) => { checkAuthentication(headers.authorization); - const config = await setIntegrationInstanceConfig(params.instanceId, { ...body }); + const config = await updateIntegrationInstanceConfig(params.instanceId, { ...body }); return { status: 200, body: config }; }, getInstanceConfig: async ({ headers, params }) => { From cf090e7f13e11a8329c623cf23b57b392f575093 Mon Sep 17 00:00:00 2001 From: qweliant Date: Thu, 9 Nov 2023 09:55:52 -0500 Subject: [PATCH 02/10] upsert --- core/lib/server/errors.ts | 19 ++++++++++--------- core/lib/server/integrations.ts | 21 +++++++++++++++++++-- core/lib/server/pub.ts | 3 +-- 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/core/lib/server/errors.ts b/core/lib/server/errors.ts index 9797676329..d049a95e5a 100644 --- a/core/lib/server/errors.ts +++ b/core/lib/server/errors.ts @@ -2,11 +2,11 @@ import { type NextApiRequest, type NextApiResponse } from "next/types"; import { ErrorHttpStatusCode } from "@ts-rest/core"; import { NextRequest, NextResponse } from "next/server"; -export class HTTPStatusError extends Error { +export class HTTPStatusError extends Error { readonly status: ErrorHttpStatusCode; constructor(status: Status, message?: string) { - super(`HTTP Error ${status}${message ? ': ' + message : ''}`); + super(`HTTP Error ${status}${message ? ": " + message : ""}`); this.status = status; } } @@ -38,18 +38,17 @@ export class NotFoundError extends HTTPStatusError<404> { // For use in app router API routes export const handleErrors = async (routeHandler) => { try { - return await routeHandler() - } catch(error) { + return await routeHandler(); + } catch (error) { if (error instanceof HTTPStatusError) { - return NextResponse.json({ message: error.message }, { status: error.status }) + return NextResponse.json({ message: error.message }, { status: error.status }); } if (error instanceof Error) { console.error(error.message); } - return NextResponse.json({ message: "Internal Server Error"}, { status: 500 }) + return NextResponse.json({ message: "Internal Server Error" }, { status: 500 }); } - -} +}; export const tsRestHandleErrors = (error: unknown, req: NextApiRequest, res: NextApiResponse) => { if (error instanceof HTTPStatusError) { @@ -59,4 +58,6 @@ export const tsRestHandleErrors = (error: unknown, req: NextApiRequest, res: Nex console.error(error.message); } return res.status(500).json({ message: "Internal Server Error" }); -}; \ No newline at end of file +}; + +export const InstanceNotFoundError = new NotFoundError("Integration instance not found"); diff --git a/core/lib/server/integrations.ts b/core/lib/server/integrations.ts index 1017b0c39d..599ec3fcd3 100644 --- a/core/lib/server/integrations.ts +++ b/core/lib/server/integrations.ts @@ -1,13 +1,30 @@ import prisma from "~/prisma/db"; +import { InstanceNotFoundError } from "./errors"; // TODO: If its the case an integration instance can be attached to a stage without configuring it this should be an upsert export async function updateIntegrationInstanceConfig(instanceId: string, config: object) { - return await prisma.integrationInstance.update({ + const instance = await prisma.integrationInstance.findUnique({ where: { id: instanceId, }, - data: { + }); + + if (!instance) { + throw InstanceNotFoundError; + } + return await prisma.integrationInstance.upsert({ + where: { + id: instanceId, + }, + update: { + config, + }, + create: { + id: instanceId, config, + integrationId: instance.integrationId, + communityId: instance.communityId, + name: instance.name, }, }); } diff --git a/core/lib/server/pub.ts b/core/lib/server/pub.ts index c8c434c12c..48b552dcb7 100644 --- a/core/lib/server/pub.ts +++ b/core/lib/server/pub.ts @@ -6,7 +6,7 @@ import { } from "contracts"; import prisma from "~/prisma/db"; import { RecursiveInclude, makeRecursiveInclude } from "../types"; -import { NotFoundError } from "./errors"; +import { InstanceNotFoundError, NotFoundError } from "./errors"; import { Prisma } from "@prisma/client"; import { expect } from "utils"; @@ -42,7 +42,6 @@ export const getPub = async (pubId: string, depth = 0): Promise Date: Thu, 9 Nov 2023 09:56:20 -0500 Subject: [PATCH 03/10] upsert --- core/lib/server/integrations.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/core/lib/server/integrations.ts b/core/lib/server/integrations.ts index 599ec3fcd3..99bc2399aa 100644 --- a/core/lib/server/integrations.ts +++ b/core/lib/server/integrations.ts @@ -1,7 +1,6 @@ import prisma from "~/prisma/db"; import { InstanceNotFoundError } from "./errors"; -// TODO: If its the case an integration instance can be attached to a stage without configuring it this should be an upsert export async function updateIntegrationInstanceConfig(instanceId: string, config: object) { const instance = await prisma.integrationInstance.findUnique({ where: { From d23840f41292eeba5a491c2fe2e378349ab6070a Mon Sep 17 00:00:00 2001 From: qweliant Date: Thu, 2 Nov 2023 18:52:06 -0400 Subject: [PATCH 04/10] start this --- integrations/evaluations/lib/instance.ts | 44 +++++++++++------------- 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/integrations/evaluations/lib/instance.ts b/integrations/evaluations/lib/instance.ts index 14418c80c2..0f68f54598 100644 --- a/integrations/evaluations/lib/instance.ts +++ b/integrations/evaluations/lib/instance.ts @@ -1,4 +1,5 @@ import * as redis from "redis"; +import { client } from "~/lib/pubpub"; export type EmailTemplate = { subject: string; message: string }; @@ -14,17 +15,17 @@ export type InstanceState = { }; }; -let client: redis.RedisClientType; -let clientConnect: Promise; +// let client: redis.RedisClientType; +// let clientConnect: Promise; -const db = async () => { - if (!client) { - client = redis.createClient({ url: process.env.REDIS_CONNECTION_STRING }); - clientConnect = client.connect(); - } - await clientConnect; - return client; -}; +// const db = async () => { +// if (!client) { +// client = redis.createClient({ url: process.env.REDIS_CONNECTION_STRING }); +// clientConnect = client.connect(); +// } +// await clientConnect; +// return client; +// }; export const makeInstanceConfig = (): InstanceConfig => ({ pubTypeId: "", @@ -32,28 +33,23 @@ export const makeInstanceConfig = (): InstanceConfig => ({ }); export const getInstanceConfig = async (instanceId: string) => { - const instance = await (await db()).get(instanceId); - return instance ? (JSON.parse(instance) as InstanceConfig) : undefined; + const instanceConfig = await client.getInstanceConfig(instanceId); + return instanceConfig ? (JSON.parse(instanceConfig) as any) : undefined; }; -export const setInstanceConfig = async ( - instanceId: string, - instance: InstanceConfig -): Promise => { - (await db()).set(instanceId, JSON.stringify(instance)); - return instance; +export const setInstanceConfig = async (instanceId: string, instance: any): Promise => { + return await client.setInstanceConfig(instanceId, JSON.stringify(instance)); }; export const getInstanceState = async (instanceId: string, pubId: string) => { - const state = await (await db()).get(`${instanceId}:${pubId}`); - return state ? (JSON.parse(state) as InstanceState) : undefined; + const instanceState = await client.getInstanceState(instanceId, pubId); + return instanceState ? (JSON.parse(instanceState) as any) : undefined; }; export const setInstanceState = async ( instanceId: string, pubId: string, - state: InstanceState -): Promise => { - (await db()).set(`${instanceId}:${pubId}`, JSON.stringify(state)); - return state; + state: any +): Promise => { + return await client.setInstanceState(instanceId, pubId, JSON.stringify(state)); }; From 41c3be28c017e720210a29dbef31660e794fb53c Mon Sep 17 00:00:00 2001 From: qweliant Date: Mon, 6 Nov 2023 15:57:44 -0500 Subject: [PATCH 05/10] smthn aint righ --- integrations/evaluations/lib/instance.ts | 45 +++++++++++++----------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/integrations/evaluations/lib/instance.ts b/integrations/evaluations/lib/instance.ts index 0f68f54598..2e44d36325 100644 --- a/integrations/evaluations/lib/instance.ts +++ b/integrations/evaluations/lib/instance.ts @@ -1,5 +1,5 @@ import * as redis from "redis"; -import { client } from "~/lib/pubpub"; +// import { client as pubpubClient} from "~/lib/pubpub"; export type EmailTemplate = { subject: string; message: string }; @@ -15,17 +15,17 @@ export type InstanceState = { }; }; -// let client: redis.RedisClientType; -// let clientConnect: Promise; +let client: redis.RedisClientType; +let clientConnect: Promise; -// const db = async () => { -// if (!client) { -// client = redis.createClient({ url: process.env.REDIS_CONNECTION_STRING }); -// clientConnect = client.connect(); -// } -// await clientConnect; -// return client; -// }; +const db = async () => { + if (!client) { + client = redis.createClient({ url: process.env.REDIS_CONNECTION_STRING }); + clientConnect = client.connect(); + } + await clientConnect; + return client; +}; export const makeInstanceConfig = (): InstanceConfig => ({ pubTypeId: "", @@ -33,23 +33,28 @@ export const makeInstanceConfig = (): InstanceConfig => ({ }); export const getInstanceConfig = async (instanceId: string) => { - const instanceConfig = await client.getInstanceConfig(instanceId); - return instanceConfig ? (JSON.parse(instanceConfig) as any) : undefined; + const instance = await (await db()).get(instanceId); + return instance ? (JSON.parse(instance) as InstanceConfig) : undefined; }; -export const setInstanceConfig = async (instanceId: string, instance: any): Promise => { - return await client.setInstanceConfig(instanceId, JSON.stringify(instance)); +export const setInstanceConfig = async ( + instanceId: string, + instance: InstanceConfig +): Promise => { + (await db()).set(instanceId, JSON.stringify(instance)); + return instance; }; export const getInstanceState = async (instanceId: string, pubId: string) => { - const instanceState = await client.getInstanceState(instanceId, pubId); - return instanceState ? (JSON.parse(instanceState) as any) : undefined; + const state = await (await db()).get(`${instanceId}:${pubId}`); + return state ? (JSON.parse(state) as InstanceState) : undefined; }; export const setInstanceState = async ( instanceId: string, pubId: string, - state: any -): Promise => { - return await client.setInstanceState(instanceId, pubId, JSON.stringify(state)); + state: InstanceState +): Promise => { + (await db()).set(`${instanceId}:${pubId}`, JSON.stringify(state)); + return state; }; From 8a45d3d19012316661b41b65bf4e067ef8f5da93 Mon Sep 17 00:00:00 2001 From: qweliant Date: Mon, 6 Nov 2023 17:40:46 -0500 Subject: [PATCH 06/10] getconfig done --- .../app/actions/evaluate/actions.ts | 2 +- .../evaluations/app/actions/evaluate/page.tsx | 2 +- .../evaluations/app/actions/manage/actions.ts | 4 +- .../evaluations/app/actions/manage/page.tsx | 2 +- .../evaluations/app/configure/page.tsx | 4 +- integrations/evaluations/lib/instance.ts | 38 +++++-------------- 6 files changed, 17 insertions(+), 35 deletions(-) diff --git a/integrations/evaluations/app/actions/evaluate/actions.ts b/integrations/evaluations/app/actions/evaluate/actions.ts index 7a7f1e28fa..e494e03848 100644 --- a/integrations/evaluations/app/actions/evaluate/actions.ts +++ b/integrations/evaluations/app/actions/evaluate/actions.ts @@ -11,7 +11,7 @@ export const evaluate = async (instanceId: string, pubId: string, values: PubVal } try { const pub = await client.createPub(instanceId, { - pubTypeId: instance.pubTypeId, + pubTypeId: instance.config.pubTypeId, parentId: pubId, values: values, }); diff --git a/integrations/evaluations/app/actions/evaluate/page.tsx b/integrations/evaluations/app/actions/evaluate/page.tsx index 383d7f25c3..48936ce83b 100644 --- a/integrations/evaluations/app/actions/evaluate/page.tsx +++ b/integrations/evaluations/app/actions/evaluate/page.tsx @@ -15,6 +15,6 @@ export default async function Page(props: Props) { const instance = await getInstanceConfig(instanceId); //dangerously assert instance exists - const pubType = await client.getPubType(instanceId, instance!.pubTypeId); + const pubType = await client.getPubType(instanceId, instance!.config.pubTypeId); return ; } diff --git a/integrations/evaluations/app/actions/manage/actions.ts b/integrations/evaluations/app/actions/manage/actions.ts index b22847a9df..e7ebfd0a82 100644 --- a/integrations/evaluations/app/actions/manage/actions.ts +++ b/integrations/evaluations/app/actions/manage/actions.ts @@ -23,7 +23,7 @@ export const save = async ( } const pub = await client.getPub(instanceId, pubId); const evaluations = pub.children.filter( - (child) => child.pubTypeId === instanceConfig.pubTypeId + (child) => child.pubTypeId === instanceConfig.config.pubTypeId ); const evaluationsByEvaluator = evaluations.reduce((acc, evaluation) => { acc[evaluation.values["unjournal:evaluator"] as string] = evaluation; @@ -45,7 +45,7 @@ export const save = async ( // New evaluator added. Make the corresponding evaluation pub. await client.createPub(instanceId, { parentId: pubId, - pubTypeId: instanceConfig.pubTypeId, + pubTypeId: instanceConfig.config.pubTypeId, values: { "unjournal:title": `Evaluation of ${pubTitle} by ${invite.firstName} ${invite.lastName}`, "unjournal:evaluator": invite.userId, diff --git a/integrations/evaluations/app/actions/manage/page.tsx b/integrations/evaluations/app/actions/manage/page.tsx index 48465f7d61..a4bd6953b4 100644 --- a/integrations/evaluations/app/actions/manage/page.tsx +++ b/integrations/evaluations/app/actions/manage/page.tsx @@ -23,7 +23,7 @@ export default async function Page(props: Props) { instanceId, pub.children // Only consider the children that are evaluations - .filter((child) => child.pubTypeId === instanceConfig.pubTypeId) + .filter((child) => child.pubTypeId === instanceConfig.config.pubTypeId) // Extract the evaluator user id .map((evaluation) => evaluation.values["unjournal:evaluator"] as string) ) diff --git a/integrations/evaluations/app/configure/page.tsx b/integrations/evaluations/app/configure/page.tsx index 67b28e4282..8d5cf3eec8 100644 --- a/integrations/evaluations/app/configure/page.tsx +++ b/integrations/evaluations/app/configure/page.tsx @@ -13,8 +13,8 @@ export default async function Page(props: Props) { return ( ); } diff --git a/integrations/evaluations/lib/instance.ts b/integrations/evaluations/lib/instance.ts index 2e44d36325..114726693b 100644 --- a/integrations/evaluations/lib/instance.ts +++ b/integrations/evaluations/lib/instance.ts @@ -1,5 +1,4 @@ -import * as redis from "redis"; -// import { client as pubpubClient} from "~/lib/pubpub"; +import { client } from "~/lib/pubpub"; export type EmailTemplate = { subject: string; message: string }; @@ -15,46 +14,29 @@ export type InstanceState = { }; }; -let client: redis.RedisClientType; -let clientConnect: Promise; - -const db = async () => { - if (!client) { - client = redis.createClient({ url: process.env.REDIS_CONNECTION_STRING }); - clientConnect = client.connect(); - } - await clientConnect; - return client; -}; - export const makeInstanceConfig = (): InstanceConfig => ({ pubTypeId: "", template: { subject: "", message: "" }, }); export const getInstanceConfig = async (instanceId: string) => { - const instance = await (await db()).get(instanceId); - return instance ? (JSON.parse(instance) as InstanceConfig) : undefined; + const instanceConfig = await client.getInstanceConfig(instanceId); + return instanceConfig ? instanceConfig as any : undefined; }; -export const setInstanceConfig = async ( - instanceId: string, - instance: InstanceConfig -): Promise => { - (await db()).set(instanceId, JSON.stringify(instance)); - return instance; +export const setInstanceConfig = async (instanceId: string, instance: any): Promise => { + return await client.setInstanceConfig(instanceId, instance); }; export const getInstanceState = async (instanceId: string, pubId: string) => { - const state = await (await db()).get(`${instanceId}:${pubId}`); - return state ? (JSON.parse(state) as InstanceState) : undefined; + const instanceState = await client.getInstanceState(instanceId, pubId); + return instanceState ? instanceState as any : undefined; }; export const setInstanceState = async ( instanceId: string, pubId: string, - state: InstanceState -): Promise => { - (await db()).set(`${instanceId}:${pubId}`, JSON.stringify(state)); - return state; + state: any +): Promise => { + return await client.setInstanceState(instanceId, pubId, state); }; From 483538cc1d705093f35ec1e05586f7f320cef4be Mon Sep 17 00:00:00 2001 From: qweliant Date: Mon, 6 Nov 2023 18:08:41 -0500 Subject: [PATCH 07/10] state done but check to be sure --- integrations/evaluations/app/actions/manage/actions.ts | 8 ++++---- integrations/evaluations/app/actions/manage/page.tsx | 7 ++++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/integrations/evaluations/app/actions/manage/actions.ts b/integrations/evaluations/app/actions/manage/actions.ts index e7ebfd0a82..69d3738a67 100644 --- a/integrations/evaluations/app/actions/manage/actions.ts +++ b/integrations/evaluations/app/actions/manage/actions.ts @@ -76,12 +76,12 @@ export const save = async ( } ); // Save updated email template and job run time - instanceState[invite.userId] = { + instanceState.value[invite.userId] = { inviteTemplate: invite.template, - inviteTime: instanceState[invite.userId]?.inviteTime ?? runAt.toString(), + inviteTime: instanceState.value[invite.userId]?.inviteTime ?? runAt.toString(), }; } - await setInstanceState(instanceId, pubId, instanceState); + await setInstanceState(instanceId, pubId, instanceState.value); revalidatePath("/"); return { success: true }; } catch (error) { @@ -109,7 +109,7 @@ export const remove = async (instanceId: string, pubId: string, userId: string) await client.deletePub(instanceId, evaluation.id); } if (instanceState !== undefined) { - const { [userId]: _, ...instanceStateWithoutEvaluator } = instanceState; + const { [userId]: _, ...instanceStateWithoutEvaluator } = instanceState.value; setInstanceState(instanceId, pubId, instanceStateWithoutEvaluator); } await client.unscheduleEmail(instanceId, makeInviteJobKey(instanceId, pubId, userId)); diff --git a/integrations/evaluations/app/actions/manage/page.tsx b/integrations/evaluations/app/actions/manage/page.tsx index a4bd6953b4..1296cf3b59 100644 --- a/integrations/evaluations/app/actions/manage/page.tsx +++ b/integrations/evaluations/app/actions/manage/page.tsx @@ -14,6 +14,7 @@ export default async function Page(props: Props) { const { instanceId, pubId } = props.searchParams; const instanceConfig = expect(await getInstanceConfig(instanceId)); const instanceState = (await getInstanceState(instanceId, pubId)) ?? {}; + console.log(instanceState); // Fetch the pub and its children const pub = await client.getPub(instanceId, pubId); // Load user info for each of the child evaluations @@ -31,8 +32,8 @@ export default async function Page(props: Props) { evaluators.sort( (a, b) => - new Date(instanceState[a.id]?.inviteTime).getTime() - - new Date(instanceState[b.id]?.inviteTime).getTime() + new Date(instanceState.value[a.id]?.inviteTime).getTime() - + new Date(instanceState.value[b.id]?.inviteTime).getTime() ); return ( @@ -41,7 +42,7 @@ export default async function Page(props: Props) { pub={pub} evaluators={evaluators} instanceConfig={instanceConfig} - instanceState={instanceState} + instanceState={instanceState.value} /> ); } From 79efc942576b2a7ed1a24ec7f54fafbff462fed9 Mon Sep 17 00:00:00 2001 From: qweliant Date: Thu, 9 Nov 2023 10:49:48 -0500 Subject: [PATCH 08/10] add config to seed --- core/prisma/exampleCommunitySeeds/unjournal.ts | 7 +++++++ integrations/evaluations/app/configure/page.tsx | 1 + 2 files changed, 8 insertions(+) diff --git a/core/prisma/exampleCommunitySeeds/unjournal.ts b/core/prisma/exampleCommunitySeeds/unjournal.ts index dffde8d07d..dc4636efce 100644 --- a/core/prisma/exampleCommunitySeeds/unjournal.ts +++ b/core/prisma/exampleCommunitySeeds/unjournal.ts @@ -779,6 +779,13 @@ export default async function main(prisma: PrismaClient, communityUUID: string) name: "Unjournal Evaluation Manager", integrationId: evaluationsIntegration.id, stageId: stageIds[3], + config: { + pubTypeId: submissionTypeId, + template: { + subject: "You've been invited to review a submission on PubPub", + message: `Please reach out if you have any questions.`, + }, + }, }, ]; diff --git a/integrations/evaluations/app/configure/page.tsx b/integrations/evaluations/app/configure/page.tsx index 8d5cf3eec8..66c460698e 100644 --- a/integrations/evaluations/app/configure/page.tsx +++ b/integrations/evaluations/app/configure/page.tsx @@ -10,6 +10,7 @@ type Props = { export default async function Page(props: Props) { const { instanceId } = props.searchParams; const instance = await getInstanceConfig(instanceId); + console.log("instance", instance); return ( Date: Thu, 9 Nov 2023 10:55:23 -0500 Subject: [PATCH 09/10] remv logs --- integrations/evaluations/app/actions/manage/page.tsx | 1 - integrations/evaluations/app/configure/page.tsx | 1 - 2 files changed, 2 deletions(-) diff --git a/integrations/evaluations/app/actions/manage/page.tsx b/integrations/evaluations/app/actions/manage/page.tsx index 1296cf3b59..36d7b5f26e 100644 --- a/integrations/evaluations/app/actions/manage/page.tsx +++ b/integrations/evaluations/app/actions/manage/page.tsx @@ -14,7 +14,6 @@ export default async function Page(props: Props) { const { instanceId, pubId } = props.searchParams; const instanceConfig = expect(await getInstanceConfig(instanceId)); const instanceState = (await getInstanceState(instanceId, pubId)) ?? {}; - console.log(instanceState); // Fetch the pub and its children const pub = await client.getPub(instanceId, pubId); // Load user info for each of the child evaluations diff --git a/integrations/evaluations/app/configure/page.tsx b/integrations/evaluations/app/configure/page.tsx index 66c460698e..8d5cf3eec8 100644 --- a/integrations/evaluations/app/configure/page.tsx +++ b/integrations/evaluations/app/configure/page.tsx @@ -10,7 +10,6 @@ type Props = { export default async function Page(props: Props) { const { instanceId } = props.searchParams; const instance = await getInstanceConfig(instanceId); - console.log("instance", instance); return ( Date: Thu, 9 Nov 2023 13:29:37 -0500 Subject: [PATCH 10/10] how to add state? --- integrations/evaluations/app/actions/manage/actions.ts | 8 ++++---- integrations/evaluations/app/actions/manage/page.tsx | 9 +++++---- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/integrations/evaluations/app/actions/manage/actions.ts b/integrations/evaluations/app/actions/manage/actions.ts index 69d3738a67..20f86e273c 100644 --- a/integrations/evaluations/app/actions/manage/actions.ts +++ b/integrations/evaluations/app/actions/manage/actions.ts @@ -76,12 +76,12 @@ export const save = async ( } ); // Save updated email template and job run time - instanceState.value[invite.userId] = { + instanceState.state[invite.userId] = { inviteTemplate: invite.template, - inviteTime: instanceState.value[invite.userId]?.inviteTime ?? runAt.toString(), + inviteTime: instanceState.state[invite.userId]?.inviteTime ?? runAt.toString(), }; } - await setInstanceState(instanceId, pubId, instanceState.value); + await setInstanceState(instanceId, pubId, instanceState.state); revalidatePath("/"); return { success: true }; } catch (error) { @@ -109,7 +109,7 @@ export const remove = async (instanceId: string, pubId: string, userId: string) await client.deletePub(instanceId, evaluation.id); } if (instanceState !== undefined) { - const { [userId]: _, ...instanceStateWithoutEvaluator } = instanceState.value; + const { [userId]: _, ...instanceStateWithoutEvaluator } = instanceState.state; setInstanceState(instanceId, pubId, instanceStateWithoutEvaluator); } await client.unscheduleEmail(instanceId, makeInviteJobKey(instanceId, pubId, userId)); diff --git a/integrations/evaluations/app/actions/manage/page.tsx b/integrations/evaluations/app/actions/manage/page.tsx index 36d7b5f26e..8d9ba65fc9 100644 --- a/integrations/evaluations/app/actions/manage/page.tsx +++ b/integrations/evaluations/app/actions/manage/page.tsx @@ -14,6 +14,7 @@ export default async function Page(props: Props) { const { instanceId, pubId } = props.searchParams; const instanceConfig = expect(await getInstanceConfig(instanceId)); const instanceState = (await getInstanceState(instanceId, pubId)) ?? {}; + console.log(instanceState); // Fetch the pub and its children const pub = await client.getPub(instanceId, pubId); // Load user info for each of the child evaluations @@ -31,8 +32,8 @@ export default async function Page(props: Props) { evaluators.sort( (a, b) => - new Date(instanceState.value[a.id]?.inviteTime).getTime() - - new Date(instanceState.value[b.id]?.inviteTime).getTime() + new Date(instanceState.state[a.id]?.inviteTime).getTime() - + new Date(instanceState.state[b.id]?.inviteTime).getTime() ); return ( @@ -40,8 +41,8 @@ export default async function Page(props: Props) { instanceId={instanceId} pub={pub} evaluators={evaluators} - instanceConfig={instanceConfig} - instanceState={instanceState.value} + instanceConfig={instanceConfig.config} + instanceState={instanceState.state} /> ); }