diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/SurveyDropDownMenu.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/SurveyDropDownMenu.tsx index 047317a96a..0e711af727 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/SurveyDropDownMenu.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/SurveyDropDownMenu.tsx @@ -14,7 +14,6 @@ import { DropdownMenuTrigger, } from "@/components/shared/DropdownMenu"; import LoadingSpinner from "@/components/shared/LoadingSpinner"; -import { SURVEY_BASE_URL } from "@formbricks/lib/constants"; import type { TEnvironment } from "@formbricks/types/v1/environment"; import type { TSurveyWithAnalytics } from "@formbricks/types/v1/surveys"; import { @@ -36,6 +35,7 @@ interface SurveyDropDownMenuProps { survey: TSurveyWithAnalytics; environment: TEnvironment; otherEnvironment: TEnvironment; + surveyBaseUrl: string; } export default function SurveyDropDownMenu({ @@ -43,12 +43,13 @@ export default function SurveyDropDownMenu({ survey, environment, otherEnvironment, + surveyBaseUrl, }: SurveyDropDownMenuProps) { const [isDeleteDialogOpen, setDeleteDialogOpen] = useState(false); const [loading, setLoading] = useState(false); const router = useRouter(); - const surveyUrl = useMemo(() => SURVEY_BASE_URL + survey.id, [survey]); + const surveyUrl = useMemo(() => surveyBaseUrl + survey.id, [survey]); const handleDeleteSurvey = async (survey) => { setLoading(true); diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/SurveyList.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/SurveyList.tsx index 4f639f627d..f82db0b540 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/SurveyList.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/SurveyList.tsx @@ -10,6 +10,7 @@ import type { TSurveyWithAnalytics } from "@formbricks/types/v1/surveys"; import { Badge } from "@formbricks/ui"; import { ComputerDesktopIcon, LinkIcon, PlusIcon } from "@heroicons/react/24/solid"; import Link from "next/link"; +import { SURVEY_BASE_URL } from "@formbricks/lib/constants"; export default async function SurveysList({ environmentId }: { environmentId: string }) { const product = await getProductByEnvironmentId(environmentId); @@ -89,6 +90,7 @@ export default async function SurveysList({ environmentId }: { environmentId: st environmentId={environmentId} environment={environment} otherEnvironment={otherEnvironment!} + surveyBaseUrl={SURVEY_BASE_URL} /> diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/ResponsePage.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/ResponsePage.tsx index 05f5bf14be..2f69fc9954 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/ResponsePage.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/ResponsePage.tsx @@ -16,9 +16,10 @@ interface ResponsePageProps { survey: TSurvey; surveyId: string; responses: TResponse[]; + surveyBaseUrl: string; } -const ResponsePage = ({ environmentId, survey, surveyId, responses }: ResponsePageProps) => { +const ResponsePage = ({ environmentId, survey, surveyId, responses, surveyBaseUrl }: ResponsePageProps) => { const { selectedFilter, dateRange, resetState } = useResponseFilter(); const searchParams = useSearchParams(); @@ -35,7 +36,12 @@ const ResponsePage = ({ environmentId, survey, surveyId, responses }: ResponsePa }, [selectedFilter, responses, survey, dateRange]); return ( - + ); diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/LinkModalButton.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/LinkModalButton.tsx index 2fd1d56059..dcea847888 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/LinkModalButton.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/LinkModalButton.tsx @@ -10,9 +10,14 @@ import clsx from "clsx"; interface LinkSurveyShareButtonProps { survey: TSurvey; className?: string; + surveyBaseUrl: string; } -export default function LinkSurveyShareButton({ survey, className }: LinkSurveyShareButtonProps) { +export default function LinkSurveyShareButton({ + survey, + className, + surveyBaseUrl, +}: LinkSurveyShareButtonProps) { const [showLinkModal, setShowLinkModal] = useState(false); return ( @@ -26,7 +31,14 @@ export default function LinkSurveyShareButton({ survey, className }: LinkSurveyS onClick={() => setShowLinkModal(true)}> - {showLinkModal && } + {showLinkModal && ( + + )} ); } diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/LinkSurveyModal.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/LinkSurveyModal.tsx index 14a55a0bca..3a2fbc9302 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/LinkSurveyModal.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/LinkSurveyModal.tsx @@ -1,7 +1,6 @@ "use client"; import CodeBlock from "@/components/shared/CodeBlock"; -import { SURVEY_BASE_URL } from "@formbricks/lib/constants"; import { TSurvey } from "@formbricks/types/v1/surveys"; import { Button, Dialog, DialogContent } from "@formbricks/ui"; import { CheckIcon } from "@heroicons/react/24/outline"; @@ -13,13 +12,14 @@ interface LinkSurveyModalProps { survey: TSurvey; open: boolean; setOpen: (open: boolean) => void; + surveyBaseUrl: string; } -export default function LinkSurveyModal({ survey, open, setOpen }: LinkSurveyModalProps) { +export default function LinkSurveyModal({ survey, open, setOpen, surveyBaseUrl }: LinkSurveyModalProps) { const linkTextRef = useRef(null); const [showEmbed, setShowEmbed] = useState(false); - const surveyUrl = useMemo(() => SURVEY_BASE_URL + survey.id, [survey]); + const surveyUrl = useMemo(() => surveyBaseUrl + survey.id, [survey]); const iframeCode = `
diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/SuccessMessage.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/SuccessMessage.tsx index 948cd0f7b7..7667e0f2d1 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/SuccessMessage.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/SuccessMessage.tsx @@ -11,9 +11,10 @@ import LinkSurveyModal from "./LinkSurveyModal"; interface SummaryMetadataProps { environmentId: string; survey: TSurvey; + surveyBaseUrl: string; } -export default function SuccessMessage({ environmentId, survey }: SummaryMetadataProps) { +export default function SuccessMessage({ environmentId, survey, surveyBaseUrl }: SummaryMetadataProps) { const { environment } = useEnvironment(environmentId); const searchParams = useSearchParams(); const [showLinkModal, setShowLinkModal] = useState(false); @@ -46,7 +47,14 @@ export default function SuccessMessage({ environmentId, survey }: SummaryMetadat return ( <> - {showLinkModal && } + {showLinkModal && ( + + )} {confetti && } ); diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/SummaryPage.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/SummaryPage.tsx index 3aca884217..d232a71134 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/SummaryPage.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/SummaryPage.tsx @@ -18,9 +18,10 @@ interface SummaryPageProps { survey: TSurveyWithAnalytics; surveyId: string; responses: TResponse[]; + surveyBaseUrl: string; } -const SummaryPage = ({ environmentId, survey, surveyId, responses }: SummaryPageProps) => { +const SummaryPage = ({ environmentId, survey, surveyId, responses, surveyBaseUrl }: SummaryPageProps) => { const { selectedFilter, dateRange, resetState } = useResponseFilter(); const searchParams = useSearchParams(); @@ -36,7 +37,12 @@ const SummaryPage = ({ environmentId, survey, surveyId, responses }: SummaryPage return ( - + ); diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/SummaryHeader.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/SummaryHeader.tsx index 50200bae19..223bc16866 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/SummaryHeader.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/SummaryHeader.tsx @@ -31,8 +31,9 @@ interface SummaryHeaderProps { surveyId: string; environmentId: string; survey: TSurvey; + surveyBaseUrl: string; } -const SummaryHeader = ({ surveyId, environmentId, survey }: SummaryHeaderProps) => { +const SummaryHeader = ({ surveyId, environmentId, survey, surveyBaseUrl }: SummaryHeaderProps) => { const router = useRouter(); const { product, isLoadingProduct, isErrorProduct } = useProduct(environmentId); const { environment, isLoadingEnvironment, isErrorEnvironment } = useEnvironment(environmentId); @@ -56,7 +57,7 @@ const SummaryHeader = ({ surveyId, environmentId, survey }: SummaryHeaderProps) {product.name}
- {survey.type === "link" && } + {survey.type === "link" && } {(environment?.widgetSetupCompleted || survey.type === "link") && survey?.status !== "draft" ? ( ) : null} @@ -78,7 +79,11 @@ const SummaryHeader = ({ surveyId, environmentId, survey }: SummaryHeaderProps) {survey.type === "link" && ( <> - + )} @@ -155,7 +160,7 @@ const SummaryHeader = ({ surveyId, environmentId, survey }: SummaryHeaderProps)
- + ); }; diff --git a/apps/web/env.mjs b/apps/web/env.mjs index 4722b0fdf4..d9dd88f2a3 100644 --- a/apps/web/env.mjs +++ b/apps/web/env.mjs @@ -7,6 +7,7 @@ export const env = createEnv({ * Will throw if you access these variables on the client. */ server: { + WEBAPP_URL: z.string().url(), DATABASE_URL: z.string().url(), PRISMA_GENERATE_DATAPROXY: z.enum(["true", ""]).optional(), NEXTAUTH_SECRET: z.string().min(1), @@ -73,6 +74,7 @@ export const env = createEnv({ * 💡 You'll get type errors if not all variables from `server` & `client` are included here. */ runtimeEnv: { + WEBAPP_URL: process.env.WEBAPP_URL, DATABASE_URL: process.env.DATABASE_URL, PRISMA_GENERATE_DATAPROXY: process.env.PRISMA_GENERATE_DATAPROXY, NEXTAUTH_SECRET: process.env.NEXTAUTH_SECRET,