diff --git a/apps/storybook/package.json b/apps/storybook/package.json index 32e7c21d08..99142d16af 100644 --- a/apps/storybook/package.json +++ b/apps/storybook/package.json @@ -2,7 +2,6 @@ "name": "storybook", "private": true, "version": "0.0.0", - "type": "module", "scripts": { "dev": "storybook dev -p 6006", "build": "tsup", diff --git a/apps/web/app/api/cron/weekly_summary/types.ts b/apps/web/app/api/cron/weekly_summary/types.ts index d4fc9b5e53..faa6313d77 100644 --- a/apps/web/app/api/cron/weekly_summary/types.ts +++ b/apps/web/app/api/cron/weekly_summary/types.ts @@ -1,7 +1,6 @@ import { TResponseData } from "@formbricks/types/v1/responses"; -import { TSurveyQuestion } from "@formbricks/types/v1/surveys"; +import { TSurveyQuestion, TSurveyStatus } from "@formbricks/types/v1/surveys"; import { TUserNotificationSettings } from "@formbricks/types/v1/users"; -import { SurveyStatus } from "@prisma/client"; export interface Insights { totalCompletedResponses: number; @@ -50,7 +49,7 @@ type SurveyData = { id: string; name: string; questions: TSurveyQuestion[]; - status: SurveyStatus; + status: TSurveyStatus; responses: ResponseData[]; displays: DisplayData[]; }; diff --git a/apps/web/pages/api/v1/client/environments/[environmentId]/events/index.ts b/apps/web/pages/api/v1/client/environments/[environmentId]/events/index.ts index a4b0e029b1..8055dab5f0 100644 --- a/apps/web/pages/api/v1/client/environments/[environmentId]/events/index.ts +++ b/apps/web/pages/api/v1/client/environments/[environmentId]/events/index.ts @@ -1,6 +1,6 @@ import { prisma } from "@formbricks/database"; +import { TActionClassType } from "@formbricks/types/v1/actionClasses"; import type { NextApiRequest, NextApiResponse } from "next"; -import { EventType } from "@prisma/client"; export default async function handle(req: NextApiRequest, res: NextApiResponse) { const environmentId = req.query.environmentId?.toString(); @@ -24,9 +24,9 @@ export default async function handle(req: NextApiRequest, res: NextApiResponse) return res.status(400).json({ message: "Missing eventName" }); } - let eventType: EventType = EventType.code; + let eventType: TActionClassType = "code"; if (eventName === "Exit Intent (Desktop)" || eventName === "50% Scroll") { - eventType = EventType.automatic; + eventType = "automatic"; } const eventData = await prisma.event.create({ diff --git a/packages/lib/action/service.ts b/packages/lib/action/service.ts index a17e98d9b4..f2761ba6cc 100644 --- a/packages/lib/action/service.ts +++ b/packages/lib/action/service.ts @@ -1,17 +1,17 @@ import "server-only"; import { prisma } from "@formbricks/database"; -import { TAction } from "@formbricks/types/v1/actions"; +import { TActionClassType } from "@formbricks/types/v1/actionClasses"; +import { TAction, TActionInput, ZActionInput } from "@formbricks/types/v1/actions"; +import { ZOptionalNumber } from "@formbricks/types/v1/common"; import { ZId } from "@formbricks/types/v1/environment"; import { DatabaseError, ResourceNotFoundError } from "@formbricks/types/v1/errors"; -import { EventType, Prisma } from "@prisma/client"; +import { Prisma } from "@prisma/client"; import { revalidateTag, unstable_cache } from "next/cache"; import { getActionClassCacheTag } from "../actionClass/service"; -import { SERVICES_REVALIDATION_INTERVAL, ITEMS_PER_PAGE } from "../constants"; +import { ITEMS_PER_PAGE, SERVICES_REVALIDATION_INTERVAL } from "../constants"; import { getSessionCached } from "../session/service"; import { validateInputs } from "../utils/validate"; -import { TActionInput, ZActionInput } from "@formbricks/types/v1/actions"; -import { ZOptionalNumber } from "@formbricks/types/v1/common"; export const getActionsCacheTag = (environmentId: string): string => `environments-${environmentId}-actions`; @@ -78,9 +78,9 @@ export const createAction = async (data: TActionInput): Promise => { validateInputs([data, ZActionInput]); const { environmentId, name, properties, sessionId } = data; - let eventType: EventType = EventType.code; + let eventType: TActionClassType = "code"; if (name === "Exit Intent (Desktop)" || name === "50% Scroll") { - eventType = EventType.automatic; + eventType = "automatic"; } const session = await getSessionCached(sessionId); diff --git a/packages/lib/profile/service.ts b/packages/lib/profile/service.ts index f196971896..5bdb77823c 100644 --- a/packages/lib/profile/service.ts +++ b/packages/lib/profile/service.ts @@ -10,12 +10,12 @@ import { TProfileUpdateInput, ZProfileUpdateInput, } from "@formbricks/types/v1/profile"; -import { MembershipRole, Prisma } from "@prisma/client"; -import { unstable_cache, revalidateTag } from "next/cache"; -import { validateInputs } from "../utils/validate"; -import { deleteTeam } from "../team/service"; +import { Prisma } from "@prisma/client"; +import { revalidateTag, unstable_cache } from "next/cache"; import { z } from "zod"; import { SERVICES_REVALIDATION_INTERVAL } from "../constants"; +import { deleteTeam } from "../team/service"; +import { validateInputs } from "../utils/validate"; const responseSelection = { id: true, @@ -112,7 +112,7 @@ const updateUserMembership = async (teamId: string, userId: string, role: TMembe }; const getAdminMemberships = (memberships: TMembership[]): TMembership[] => - memberships.filter((membership) => membership.role === MembershipRole.admin); + memberships.filter((membership) => membership.role === "admin"); // function to update a user's profile export const updateProfile = async ( @@ -196,13 +196,13 @@ export const deleteProfile = async (userId: string): Promise => { const teamAdminMemberships = getAdminMemberships(teamMemberships); const teamHasAtLeastOneAdmin = teamAdminMemberships.length > 0; const teamHasOnlyOneMember = teamMemberships.length === 1; - const currentUserIsTeamOwner = role === MembershipRole.owner; + const currentUserIsTeamOwner = role === "owner"; if (teamHasOnlyOneMember) { await deleteTeam(teamId); } else if (currentUserIsTeamOwner && teamHasAtLeastOneAdmin) { const firstAdmin = teamAdminMemberships[0]; - await updateUserMembership(teamId, firstAdmin.userId, MembershipRole.owner); + await updateUserMembership(teamId, firstAdmin.userId, "owner"); } else if (currentUserIsTeamOwner) { await deleteTeam(teamId); } diff --git a/packages/types/v1/actionClasses.ts b/packages/types/v1/actionClasses.ts index fd407bac26..f2d75acf95 100644 --- a/packages/types/v1/actionClasses.ts +++ b/packages/types/v1/actionClasses.ts @@ -27,11 +27,15 @@ export const ZActionClassNoCodeConfig = z.object({ export type TActionClassNoCodeConfig = z.infer; +export const ZActionClassType = z.enum(["code", "noCode", "automatic"]); + +export type TActionClassType = z.infer; + export const ZActionClass = z.object({ id: z.string().cuid2(), name: z.string(), description: z.string().nullable(), - type: z.enum(["code", "noCode", "automatic"]), + type: ZActionClassType, noCodeConfig: z.union([ZActionClassNoCodeConfig, z.null()]), environmentId: z.string(), createdAt: z.date(), diff --git a/packages/types/v1/surveys.ts b/packages/types/v1/surveys.ts index 3e6cc284c6..e7f4c3ca8a 100644 --- a/packages/types/v1/surveys.ts +++ b/packages/types/v1/surveys.ts @@ -267,10 +267,16 @@ export type TSurveyAttributeFilter = z.infer; const ZSurveyDisplayOption = z.enum(["displayOnce", "displayMultiple", "respondMultiple"]); +export type TSurveyDisplayOption = z.infer; + const ZSurveyType = z.enum(["web", "email", "link", "mobile"]); +export type TSurveyType = z.infer; + const ZSurveyStatus = z.enum(["draft", "inProgress", "paused", "completed"]); +export type TSurveyStatus = z.infer; + export const ZSurvey = z.object({ id: z.string().cuid2(), createdAt: z.date(),