mirror of
https://github.com/formbricks/formbricks.git
synced 2025-12-30 10:19:51 -06:00
Compare commits
5 Commits
feature/re
...
4.1.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e61aef9873 | ||
|
|
ad59b69c12 | ||
|
|
40203d77ba | ||
|
|
44f5291e0e | ||
|
|
f9835dd5c1 |
6
.github/workflows/formbricks-release.yml
vendored
6
.github/workflows/formbricks-release.yml
vendored
@@ -89,7 +89,7 @@ jobs:
|
|||||||
- check-latest-release
|
- check-latest-release
|
||||||
with:
|
with:
|
||||||
IS_PRERELEASE: ${{ github.event.release.prerelease }}
|
IS_PRERELEASE: ${{ github.event.release.prerelease }}
|
||||||
MAKE_LATEST: ${{ needs.check-latest-release.outputs.is_latest }}
|
MAKE_LATEST: ${{ needs.check-latest-release.outputs.is_latest == 'true' }}
|
||||||
|
|
||||||
docker-build-cloud:
|
docker-build-cloud:
|
||||||
name: Build & push Formbricks Cloud to ECR
|
name: Build & push Formbricks Cloud to ECR
|
||||||
@@ -101,7 +101,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
image_tag: ${{ needs.docker-build-community.outputs.VERSION }}
|
image_tag: ${{ needs.docker-build-community.outputs.VERSION }}
|
||||||
IS_PRERELEASE: ${{ github.event.release.prerelease }}
|
IS_PRERELEASE: ${{ github.event.release.prerelease }}
|
||||||
MAKE_LATEST: ${{ needs.check-latest-release.outputs.is_latest }}
|
MAKE_LATEST: ${{ needs.check-latest-release.outputs.is_latest == 'true' }}
|
||||||
needs:
|
needs:
|
||||||
- check-latest-release
|
- check-latest-release
|
||||||
- docker-build-community
|
- docker-build-community
|
||||||
@@ -154,4 +154,4 @@ jobs:
|
|||||||
release_tag: ${{ github.event.release.tag_name }}
|
release_tag: ${{ github.event.release.tag_name }}
|
||||||
commit_sha: ${{ github.sha }}
|
commit_sha: ${{ github.sha }}
|
||||||
is_prerelease: ${{ github.event.release.prerelease }}
|
is_prerelease: ${{ github.event.release.prerelease }}
|
||||||
make_latest: ${{ needs.check-latest-release.outputs.is_latest }}
|
make_latest: ${{ needs.check-latest-release.outputs.is_latest == 'true' }}
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
import { LinkSurveyLoading } from "@/modules/survey/link/loading";
|
|
||||||
|
|
||||||
export default LinkSurveyLoading;
|
|
||||||
@@ -19,8 +19,7 @@ export const ENCRYPTION_KEY = env.ENCRYPTION_KEY;
|
|||||||
// Other
|
// Other
|
||||||
export const CRON_SECRET = env.CRON_SECRET;
|
export const CRON_SECRET = env.CRON_SECRET;
|
||||||
export const DEFAULT_BRAND_COLOR = "#64748b";
|
export const DEFAULT_BRAND_COLOR = "#64748b";
|
||||||
export const FB_LOGO_URL =
|
export const FB_LOGO_URL = `${WEBAPP_URL}/logo-transparent.png`;
|
||||||
"https://s3.eu-central-1.amazonaws.com/listmonk-formbricks/Formbricks-Light-transparent.png";
|
|
||||||
|
|
||||||
export const PRIVACY_URL = env.PRIVACY_URL;
|
export const PRIVACY_URL = env.PRIVACY_URL;
|
||||||
export const TERMS_URL = env.TERMS_URL;
|
export const TERMS_URL = env.TERMS_URL;
|
||||||
|
|||||||
@@ -53,9 +53,9 @@ export const I18nProvider = ({ children, language, defaultLanguage }: I18nProvid
|
|||||||
initializeI18n();
|
initializeI18n();
|
||||||
}, [locale, defaultLanguage]);
|
}, [locale, defaultLanguage]);
|
||||||
|
|
||||||
// Don't render children until i18n is ready to prevent hydration issues
|
// Don't render children until i18n is ready to prevent race conditions
|
||||||
if (!isReady) {
|
if (!isReady) {
|
||||||
return <div style={{ visibility: "hidden" }}>{children}</div>;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
import * as Collapsible from "@radix-ui/react-collapsible";
|
import * as Collapsible from "@radix-ui/react-collapsible";
|
||||||
import { Hand } from "lucide-react";
|
import { Hand } from "lucide-react";
|
||||||
import { usePathname } from "next/navigation";
|
import { usePathname } from "next/navigation";
|
||||||
import { useState } from "react";
|
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { TSurvey, TSurveyQuestionId, TSurveyWelcomeCard } from "@formbricks/types/surveys/types";
|
import { TSurvey, TSurveyQuestionId, TSurveyWelcomeCard } from "@formbricks/types/surveys/types";
|
||||||
import { TUserLocale } from "@formbricks/types/user";
|
import { TUserLocale } from "@formbricks/types/user";
|
||||||
@@ -38,8 +37,6 @@ export const EditWelcomeCard = ({
|
|||||||
}: EditWelcomeCardProps) => {
|
}: EditWelcomeCardProps) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
const [firstRender, setFirstRender] = useState(true);
|
|
||||||
|
|
||||||
const path = usePathname();
|
const path = usePathname();
|
||||||
const environmentId = path?.split("/environments/")[1]?.split("/")[0];
|
const environmentId = path?.split("/environments/")[1]?.split("/")[0];
|
||||||
|
|
||||||
@@ -138,8 +135,6 @@ export const EditWelcomeCard = ({
|
|||||||
setSelectedLanguageCode={setSelectedLanguageCode}
|
setSelectedLanguageCode={setSelectedLanguageCode}
|
||||||
locale={locale}
|
locale={locale}
|
||||||
isStorageConfigured={isStorageConfigured}
|
isStorageConfigured={isStorageConfigured}
|
||||||
firstRender={firstRender}
|
|
||||||
setFirstRender={setFirstRender}
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="mt-3">
|
<div className="mt-3">
|
||||||
@@ -155,8 +150,6 @@ export const EditWelcomeCard = ({
|
|||||||
setSelectedLanguageCode={setSelectedLanguageCode}
|
setSelectedLanguageCode={setSelectedLanguageCode}
|
||||||
locale={locale}
|
locale={locale}
|
||||||
isStorageConfigured={isStorageConfigured}
|
isStorageConfigured={isStorageConfigured}
|
||||||
firstRender={firstRender}
|
|
||||||
setFirstRender={setFirstRender}
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -177,8 +170,6 @@ export const EditWelcomeCard = ({
|
|||||||
label={t("environments.surveys.edit.next_button_label")}
|
label={t("environments.surveys.edit.next_button_label")}
|
||||||
locale={locale}
|
locale={locale}
|
||||||
isStorageConfigured={isStorageConfigured}
|
isStorageConfigured={isStorageConfigured}
|
||||||
firstRender={firstRender}
|
|
||||||
setFirstRender={setFirstRender}
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
import { Metadata } from "next";
|
import { Metadata } from "next";
|
||||||
|
import { getTextContent } from "@formbricks/types/surveys/validation";
|
||||||
import { IS_FORMBRICKS_CLOUD } from "@/lib/constants";
|
import { IS_FORMBRICKS_CLOUD } from "@/lib/constants";
|
||||||
import { getPublicDomain } from "@/lib/getPublicUrl";
|
import { getPublicDomain } from "@/lib/getPublicUrl";
|
||||||
import { getLocalizedValue } from "@/lib/i18n/utils";
|
import { getLocalizedValue } from "@/lib/i18n/utils";
|
||||||
import { COLOR_DEFAULTS } from "@/lib/styling/constants";
|
import { COLOR_DEFAULTS } from "@/lib/styling/constants";
|
||||||
|
import { recallToHeadline } from "@/lib/utils/recall";
|
||||||
import { getSurvey } from "@/modules/survey/lib/survey";
|
import { getSurvey } from "@/modules/survey/lib/survey";
|
||||||
|
|
||||||
type TBasicSurveyMetadata = {
|
type TBasicSurveyMetadata = {
|
||||||
@@ -48,7 +50,9 @@ export const getBasicSurveyMetadata = async (
|
|||||||
const titleFromMetadata = metadata?.title ? getLocalizedValue(metadata.title, langCode) || "" : undefined;
|
const titleFromMetadata = metadata?.title ? getLocalizedValue(metadata.title, langCode) || "" : undefined;
|
||||||
const titleFromWelcome =
|
const titleFromWelcome =
|
||||||
welcomeCard?.enabled && welcomeCard.headline
|
welcomeCard?.enabled && welcomeCard.headline
|
||||||
? getLocalizedValue(welcomeCard.headline, langCode) || ""
|
? getTextContent(
|
||||||
|
getLocalizedValue(recallToHeadline(welcomeCard.headline, survey, false, langCode), langCode)
|
||||||
|
) || ""
|
||||||
: undefined;
|
: undefined;
|
||||||
let title = titleFromMetadata || titleFromWelcome || survey.name;
|
let title = titleFromMetadata || titleFromWelcome || survey.name;
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
"use client";
|
|
||||||
export const LinkSurveyLoading = () => {
|
|
||||||
return (
|
|
||||||
<div className="flex h-full w-full items-center justify-center">
|
|
||||||
<div className="flex h-1/2 w-3/4 flex-col sm:w-1/2 lg:w-1/4">
|
|
||||||
<div className="ph-no-capture h-16 w-1/3 animate-pulse rounded-lg bg-slate-200 font-medium text-slate-900"></div>
|
|
||||||
<div className="ph-no-capture mt-4 h-full animate-pulse rounded-lg bg-slate-200 text-slate-900"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
@@ -262,22 +262,27 @@ export const ToolbarPlugin = (
|
|||||||
const root = $getRoot();
|
const root = $getRoot();
|
||||||
root.clear();
|
root.clear();
|
||||||
root.append(...nodes);
|
root.append(...nodes);
|
||||||
|
|
||||||
editor.registerUpdateListener(({ editorState }) => {
|
|
||||||
editorState.read(() => {
|
|
||||||
const textInHtml = $generateHtmlFromNodes(editor)
|
|
||||||
.replace(/</g, "<")
|
|
||||||
.replace(/>/g, ">")
|
|
||||||
.replace(/white-space:\s*pre-wrap;?/g, "");
|
|
||||||
setText.current(textInHtml);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
// Register text-saving update listener - always active for each editor instance
|
||||||
|
useEffect(() => {
|
||||||
|
const unregister = editor.registerUpdateListener(({ editorState }) => {
|
||||||
|
editorState.read(() => {
|
||||||
|
const textInHtml = $generateHtmlFromNodes(editor)
|
||||||
|
.replace(/</g, "<")
|
||||||
|
.replace(/>/g, ">")
|
||||||
|
.replace(/white-space:\s*pre-wrap;?/g, "");
|
||||||
|
setText.current(textInHtml);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
return unregister;
|
||||||
|
}, [editor]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
return mergeRegister(
|
return mergeRegister(
|
||||||
editor.registerUpdateListener(({ editorState }) => {
|
editor.registerUpdateListener(({ editorState }) => {
|
||||||
|
|||||||
BIN
apps/web/public/logo-transparent.png
Normal file
BIN
apps/web/public/logo-transparent.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 36 KiB |
Reference in New Issue
Block a user