fix build

This commit is contained in:
KM Koushik
2026-03-08 00:15:34 +11:00
parent 62e0a1db88
commit 33acd09d77
5 changed files with 30 additions and 22 deletions
@@ -92,6 +92,10 @@ export const EditContact: React.FC<{
}); });
async function onContactUpdate(values: z.infer<typeof contactSchema>) { async function onContactUpdate(values: z.infer<typeof contactSchema>) {
const properties: Record<string, string> = Object.fromEntries(
Object.entries(variableValues).filter(([, value]) => value.trim()),
);
updateContactMutation.mutate( updateContactMutation.mutate(
{ {
contactId: contact.id, contactId: contact.id,
@@ -100,11 +104,9 @@ export const EditContact: React.FC<{
properties: replaceContactVariableValues( properties: replaceContactVariableValues(
(contact.properties as Record<string, unknown> | null | undefined) ?? (contact.properties as Record<string, unknown> | null | undefined) ??
{}, {},
Object.fromEntries( properties,
Object.entries(variableValues).filter(([, value]) => value.trim()),
),
contactBookVariables ?? [], contactBookVariables ?? [],
), ) as Record<string, string>,
}, },
{ {
onSuccess: async () => { onSuccess: async () => {
@@ -155,7 +157,7 @@ export const EditContact: React.FC<{
<FormField <FormField
control={contactForm.control} control={contactForm.control}
name="firstName" name="firstName"
render={({ field, formState }) => ( render={({ field }) => (
<FormItem> <FormItem>
<FormLabel>First Name</FormLabel> <FormLabel>First Name</FormLabel>
<FormControl> <FormControl>
@@ -167,7 +169,7 @@ export const EditContact: React.FC<{
<FormField <FormField
control={contactForm.control} control={contactForm.control}
name="lastName" name="lastName"
render={({ field, formState }) => ( render={({ field }) => (
<FormItem> <FormItem>
<FormLabel>Last Name</FormLabel> <FormLabel>Last Name</FormLabel>
<FormControl> <FormControl>
@@ -149,6 +149,7 @@ export async function updateContactBook(
emoji?: string; emoji?: string;
variables?: string[]; variables?: string[];
doubleOptInEnabled?: boolean; doubleOptInEnabled?: boolean;
doubleOptInFrom?: string | null;
doubleOptInSubject?: string; doubleOptInSubject?: string;
doubleOptInContent?: string; doubleOptInContent?: string;
} = { } = {
@@ -1,4 +1,4 @@
import { type Contact, UnsubscribeReason } from "@prisma/client"; import { Prisma, type Contact, UnsubscribeReason } from "@prisma/client";
import { import {
type ContactPayload, type ContactPayload,
type ContactWebhookEventType, type ContactWebhookEventType,
@@ -106,7 +106,7 @@ export async function addOrUpdateContact(
email: contact.email, email: contact.email,
firstName: contact.firstName, firstName: contact.firstName,
lastName: contact.lastName, lastName: contact.lastName,
properties: normalizedProperties ?? {}, properties: (normalizedProperties ?? {}) as Prisma.InputJsonObject,
subscribed: shouldCreatePendingContact subscribed: shouldCreatePendingContact
? false ? false
: (contact.subscribed ?? true), : (contact.subscribed ?? true),
@@ -120,7 +120,7 @@ export async function addOrUpdateContact(
firstName: contact.firstName, firstName: contact.firstName,
lastName: contact.lastName, lastName: contact.lastName,
...(mergedProperties !== undefined ...(mergedProperties !== undefined
? { properties: mergedProperties } ? { properties: mergedProperties as Prisma.InputJsonObject }
: {}), : {}),
...(subscribedValue !== undefined ...(subscribedValue !== undefined
? { ? {
@@ -210,7 +210,7 @@ export async function updateContactInContactBook(
data: { data: {
...contact, ...contact,
...(mergedProperties !== undefined ...(mergedProperties !== undefined
? { properties: mergedProperties } ? { properties: mergedProperties as Prisma.InputJsonObject }
: {}), : {}),
...(contact.subscribed !== undefined ...(contact.subscribed !== undefined
? { ? {
@@ -3,7 +3,7 @@ import { escapeHtml, toPlainHtml } from "~/server/utils/email-content";
describe("email-content utils", () => { describe("email-content utils", () => {
it("escapes unsafe HTML characters", () => { it("escapes unsafe HTML characters", () => {
const value = `<script>alert('x') & \"y\"</script>`; const value = `<script>alert('x') & "y"</script>`;
expect(escapeHtml(value)).toBe( expect(escapeHtml(value)).toBe(
"&lt;script&gt;alert(&#39;x&#39;) &amp; &quot;y&quot;&lt;/script&gt;", "&lt;script&gt;alert(&#39;x&#39;) &amp; &quot;y&quot;&lt;/script&gt;",
); );
+16 -11
View File
@@ -1,20 +1,25 @@
import { create } from "zustand"; import { create, type StateCreator } from "zustand";
import { LimitReason } from "~/lib/constants/plans"; import { LimitReason } from "~/lib/constants/plans";
const createUpgradeModalActions = (
set: Parameters<StateCreator<UpgradeModalStore>>[0],
) => ({
openModal: (reason?: LimitReason) => set({ isOpen: true, reason }),
closeModal: () => set({ isOpen: false, reason: undefined }),
});
interface UpgradeModalStore { interface UpgradeModalStore {
isOpen: boolean; isOpen: boolean;
reason?: LimitReason; reason?: LimitReason;
action: { action: ReturnType<typeof createUpgradeModalActions>;
openModal: (reason?: LimitReason) => void;
closeModal: () => void;
};
} }
export const useUpgradeModalStore = create<UpgradeModalStore>((set) => ({ const createUpgradeModalStore: StateCreator<UpgradeModalStore> = (set) => ({
isOpen: false, isOpen: false,
reason: undefined, reason: undefined,
action: { action: createUpgradeModalActions(set),
openModal: (reason?: LimitReason) => set({ isOpen: true, reason }), });
closeModal: () => set({ isOpen: false, reason: undefined }),
}, export const useUpgradeModalStore = create<UpgradeModalStore>(
})); createUpgradeModalStore,
);