Refactor feedback forms to include MAIL_REQUEST_FROM in API requests. Updated API utility to use mailApi for mail-related endpoints. Enhanced FeedbackFormModal and LeadForm components for improved data handling and user experience.
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import ky from "ky";
|
import ky from "ky";
|
||||||
|
import { MAIL_REQUEST_FROM } from "@/mailFrom";
|
||||||
import { ChangeEvent, FormEvent, useState } from "react";
|
import { ChangeEvent, FormEvent, useState } from "react";
|
||||||
import { Trans, useTranslation } from "react-i18next";
|
import { Trans, useTranslation } from "react-i18next";
|
||||||
import InputMask from "react-input-mask";
|
import InputMask from "react-input-mask";
|
||||||
@@ -29,6 +30,7 @@ function FeedbackForm() {
|
|||||||
phone,
|
phone,
|
||||||
email,
|
email,
|
||||||
request: description,
|
request: description,
|
||||||
|
from: MAIL_REQUEST_FROM,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
.json();
|
.json();
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
import { useMemo, useState } from "react";
|
import { useMemo, useState } from "react";
|
||||||
import { Trans, useTranslation } from "react-i18next";
|
import { Trans, useTranslation } from "react-i18next";
|
||||||
import { Button } from "@/landing/ui/Button";
|
import { Button } from "@/landing/ui/Button";
|
||||||
import { api } from "@/landing/lib/api";
|
import { MAIL_REQUEST_FROM } from "@/mailFrom";
|
||||||
|
import { mailApi } from "@/landing/lib/api";
|
||||||
import { useModalStore } from "@/landing/stores/useModalStore";
|
import { useModalStore } from "@/landing/stores/useModalStore";
|
||||||
import CustomCheckbox from "@/landing/ui/CustomCheckbox";
|
import CustomCheckbox from "@/landing/ui/CustomCheckbox";
|
||||||
import CheckIcon from "@/landing/components/icons/CheckIcon";
|
import CheckIcon from "@/landing/components/icons/CheckIcon";
|
||||||
@@ -17,7 +18,9 @@ function FeedbackModal({ id }: { id: string }) {
|
|||||||
);
|
);
|
||||||
|
|
||||||
async function sendSources() {
|
async function sendSources() {
|
||||||
await api.put(`mail/${id}`, { json: { source: selectedOptions } });
|
await mailApi.put(`mail/${id}`, {
|
||||||
|
json: { source: selectedOptions, from: MAIL_REQUEST_FROM },
|
||||||
|
});
|
||||||
setModal(null);
|
setModal(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -30,7 +33,7 @@ function FeedbackModal({ id }: { id: string }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="fixed top-[50%] translate-y-[-50%] flex md:flex-row flex-col md:max-w-[695px] max-w-[422px] max-[360px]:max-w-[340px] z-[15] md:p-[48px] p-[32px] max-[360px]:p-[24px] bg-[#37393B99] backdrop-blur-xl backdrop-opacity-60 rounded-2xl">
|
<div className="fixed top-[50%] translate-y-[-50%] flex md:flex-row flex-col md:max-w-[695px] max-w-[422px] max-[360px]:max-w-[340px] z-[15] md:p-[48px] p-[32px] max-[360px]:p-[24px] bg-[#37393B99] backdrop-blur-xl backdrop-opacity-60 rounded-2xl text-white">
|
||||||
<div className="flex md:flex-col flex-row md:justify-center items-center md:max-w-[200px] md:gap-y-[16px] gap-x-[24px]">
|
<div className="flex md:flex-col flex-row md:justify-center items-center md:max-w-[200px] md:gap-y-[16px] gap-x-[24px]">
|
||||||
<div className="p-3 rounded-full bg-gradient translate-x-[4px]">
|
<div className="p-3 rounded-full bg-gradient translate-x-[4px]">
|
||||||
<div className="z-10 absolute top-[-4px] left-[-4.3px] w-[56px] h-[56px] rounded-full bg-gradient-to-r from-[#6078F299] to-[#C868F599]" />
|
<div className="z-10 absolute top-[-4px] left-[-4.3px] w-[56px] h-[56px] rounded-full bg-gradient-to-r from-[#6078F299] to-[#C868F599]" />
|
||||||
@@ -61,7 +64,7 @@ function FeedbackModal({ id }: { id: string }) {
|
|||||||
|
|
||||||
<ul className="md:mb-[49px] mb-[58px] flex flex-col gap-y-[12px]">
|
<ul className="md:mb-[49px] mb-[58px] flex flex-col gap-y-[12px]">
|
||||||
{modalOptions.map((item) => (
|
{modalOptions.map((item) => (
|
||||||
<li key={item} className="flexfont-normal">
|
<li key={item} className="font-normal">
|
||||||
<CustomCheckbox value={item} onChange={onCheckboxChange} />
|
<CustomCheckbox value={item} onChange={onCheckboxChange} />
|
||||||
</li>
|
</li>
|
||||||
))}
|
))}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { useMemo, useState } from "react";
|
import { useMemo, useState } from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { api } from "@/landing/lib/api";
|
import { MAIL_REQUEST_FROM } from "@/mailFrom";
|
||||||
|
import { mailApi } from "@/landing/lib/api";
|
||||||
import { productOptionsFromT } from "@/landing/lib/productLabels";
|
import { productOptionsFromT } from "@/landing/lib/productLabels";
|
||||||
import type { Product } from "@/landing/types";
|
import type { Product } from "@/landing/types";
|
||||||
import { Button } from "@/landing/ui/Button";
|
import { Button } from "@/landing/ui/Button";
|
||||||
@@ -52,8 +53,10 @@ export function LeadForm({
|
|||||||
const onSubmit: SubmitHandler<LeadFormValues> = async (data) => {
|
const onSubmit: SubmitHandler<LeadFormValues> = async (data) => {
|
||||||
setSubmitError(null);
|
setSubmitError(null);
|
||||||
try {
|
try {
|
||||||
const { id } = await api
|
const { id } = await mailApi
|
||||||
.post("mail", { json: { ...data, referer } })
|
.post("mail", {
|
||||||
|
json: { ...data, referer, from: MAIL_REQUEST_FROM },
|
||||||
|
})
|
||||||
.json<{ id: string }>();
|
.json<{ id: string }>();
|
||||||
onSuccess(id);
|
onSuccess(id);
|
||||||
} catch {
|
} catch {
|
||||||
|
|||||||
@@ -13,3 +13,8 @@ export const api = ky.create({
|
|||||||
prefixUrl: base || undefined,
|
prefixUrl: base || undefined,
|
||||||
credentials: "include",
|
credentials: "include",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/** Lead/mail endpoints are served from graff.estate, not `VITE_API_URL`. */
|
||||||
|
export const mailApi = ky.create({
|
||||||
|
prefixUrl: "https://graff.estate/api/",
|
||||||
|
});
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
/** Sent with graff.estate mail API payloads to identify this client. */
|
||||||
|
export const MAIL_REQUEST_FROM = "stream.graff.tech";
|
||||||
Reference in New Issue
Block a user