mirror of
https://github.com/formbricks/formbricks.git
synced 2025-12-26 08:20:29 -06:00
Compare commits
10 Commits
feat/proje
...
4.4.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7260a1a3a4 | ||
|
|
5b308d10dc | ||
|
|
68f1f42f81 | ||
|
|
086d8177dc | ||
|
|
efbe27fa95 | ||
|
|
ca1a0053b8 | ||
|
|
035093e702 | ||
|
|
75d33a1716 | ||
|
|
97ab194107 | ||
|
|
e9cc636510 |
31
.github/workflows/chromatic.yml
vendored
31
.github/workflows/chromatic.yml
vendored
@@ -13,12 +13,13 @@ jobs:
|
||||
chromatic:
|
||||
name: Run Chromatic
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
id-token: write
|
||||
actions: read
|
||||
steps:
|
||||
- name: Harden the runner (Audit all outbound calls)
|
||||
uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0
|
||||
uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0
|
||||
with:
|
||||
egress-policy: audit
|
||||
|
||||
@@ -26,34 +27,16 @@ jobs:
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||
- uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||
|
||||
- name: Get pnpm store directory
|
||||
shell: bash
|
||||
run: |
|
||||
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
|
||||
|
||||
- name: Setup pnpm cache
|
||||
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||
with:
|
||||
path: ${{ env.STORE_PATH }}
|
||||
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-pnpm-store-
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install --config.platform=linux --config.architecture=x64
|
||||
|
||||
- name: Run Chromatic
|
||||
uses: chromaui/action@4c20b95e9d3209ecfdf9cd6aace6bbde71ba1694 # v13.3.4
|
||||
uses: chromaui/action@c93e0bc3a63aa176e14a75b61a31847cbfdd341c # latest
|
||||
with:
|
||||
# ⚠️ Make sure to configure a `CHROMATIC_PROJECT_TOKEN` repository secret
|
||||
projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
|
||||
workingDir: apps/storybook
|
||||
zip: true
|
||||
|
||||
@@ -203,14 +203,6 @@ Here are a few options:
|
||||
|
||||
</a>
|
||||
|
||||
## Thanks
|
||||
|
||||
Formbricks is supported by the following companies who provide us with their tools for free as part of their open-source support:
|
||||
|
||||
<a href="https://www.chromatic.com/"><img src="https://user-images.githubusercontent.com/321738/84662277-e3db4f80-af1b-11ea-88f5-91d67a5e59f6.png" width="153" height="30" alt="Chromatic" /></a>
|
||||
|
||||
<a href="https://sentry.io/"><img src="https://github.com/user-attachments/assets/d743ffd4-b575-4802-a29a-10136be9227e" width="150" height="30" alt="Sentry" /></a>
|
||||
|
||||
<a id="contact-us"></a>
|
||||
|
||||
## 📆 Contact us
|
||||
|
||||
@@ -25,7 +25,7 @@ const Page = async (props: ConnectPageProps) => {
|
||||
|
||||
const project = await getProjectByEnvironmentId(environment.id);
|
||||
if (!project) {
|
||||
throw new Error(t("common.workspace_not_found"));
|
||||
throw new Error(t("common.project_not_found"));
|
||||
}
|
||||
|
||||
const channel = project.config.channel || null;
|
||||
@@ -46,7 +46,7 @@ const Page = async (props: ConnectPageProps) => {
|
||||
channel={channel}
|
||||
/>
|
||||
<Button
|
||||
className="absolute top-5 right-5 !mt-0 text-slate-500 hover:text-slate-700"
|
||||
className="absolute right-5 top-5 !mt-0 text-slate-500 hover:text-slate-700"
|
||||
variant="ghost"
|
||||
asChild>
|
||||
<Link href={`/environments/${environment.id}`}>
|
||||
|
||||
@@ -38,7 +38,7 @@ const Page = async (props: XMTemplatePageProps) => {
|
||||
|
||||
const project = await getProjectByEnvironmentId(environment.id);
|
||||
if (!project) {
|
||||
throw new Error(t("common.workspace_not_found"));
|
||||
throw new Error(t("common.project_not_found"));
|
||||
}
|
||||
|
||||
const projects = await getUserProjects(session.user.id, organizationId);
|
||||
@@ -49,7 +49,7 @@ const Page = async (props: XMTemplatePageProps) => {
|
||||
<XMTemplateList project={project} user={user} environmentId={environment.id} />
|
||||
{projects.length >= 2 && (
|
||||
<Button
|
||||
className="absolute top-5 right-5 !mt-0 text-slate-500 hover:text-slate-700"
|
||||
className="absolute right-5 top-5 !mt-0 text-slate-500 hover:text-slate-700"
|
||||
variant="ghost"
|
||||
asChild>
|
||||
<Link href={`/environments/${environment.id}/surveys`}>
|
||||
|
||||
@@ -50,8 +50,8 @@ const Page = async (props) => {
|
||||
</div>
|
||||
<div className="flex h-full flex-col items-center justify-center space-y-12">
|
||||
<Header
|
||||
title={t("organizations.landing.no_workspaces_warning_title")}
|
||||
subtitle={t("organizations.landing.no_workspaces_warning_subtitle")}
|
||||
title={t("organizations.landing.no_projects_warning_title")}
|
||||
subtitle={t("organizations.landing.no_projects_warning_subtitle")}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -26,16 +26,16 @@ const Page = async (props: ChannelPageProps) => {
|
||||
const t = await getTranslate();
|
||||
const channelOptions = [
|
||||
{
|
||||
title: t("organizations.workspaces.new.channel.link_and_email_surveys"),
|
||||
description: t("organizations.workspaces.new.channel.link_and_email_surveys_description"),
|
||||
title: t("organizations.projects.new.channel.link_and_email_surveys"),
|
||||
description: t("organizations.projects.new.channel.link_and_email_surveys_description"),
|
||||
icon: SendIcon,
|
||||
href: `/organizations/${params.organizationId}/workspaces/new/settings?channel=link`,
|
||||
href: `/organizations/${params.organizationId}/projects/new/settings?channel=link`,
|
||||
},
|
||||
{
|
||||
title: t("organizations.workspaces.new.channel.in_product_surveys"),
|
||||
description: t("organizations.workspaces.new.channel.in_product_surveys_description"),
|
||||
title: t("organizations.projects.new.channel.in_product_surveys"),
|
||||
description: t("organizations.projects.new.channel.in_product_surveys_description"),
|
||||
icon: PictureInPicture2Icon,
|
||||
href: `/organizations/${params.organizationId}/workspaces/new/settings?channel=app`,
|
||||
href: `/organizations/${params.organizationId}/projects/new/settings?channel=app`,
|
||||
},
|
||||
];
|
||||
|
||||
@@ -44,13 +44,13 @@ const Page = async (props: ChannelPageProps) => {
|
||||
return (
|
||||
<div className="flex min-h-full min-w-full flex-col items-center justify-center space-y-12">
|
||||
<Header
|
||||
title={t("organizations.workspaces.new.channel.channel_select_title")}
|
||||
subtitle={t("organizations.workspaces.new.channel.channel_select_subtitle")}
|
||||
title={t("organizations.projects.new.channel.channel_select_title")}
|
||||
subtitle={t("organizations.projects.new.channel.channel_select_subtitle")}
|
||||
/>
|
||||
<OnboardingOptionsContainer options={channelOptions} />
|
||||
{projects.length >= 1 && (
|
||||
<Button
|
||||
className="absolute top-5 right-5 !mt-0 text-slate-500 hover:text-slate-700"
|
||||
className="absolute right-5 top-5 !mt-0 text-slate-500 hover:text-slate-700"
|
||||
variant="ghost"
|
||||
asChild>
|
||||
<Link href={"/"}>
|
||||
@@ -26,16 +26,16 @@ const Page = async (props: ModePageProps) => {
|
||||
const t = await getTranslate();
|
||||
const channelOptions = [
|
||||
{
|
||||
title: t("organizations.workspaces.new.mode.formbricks_surveys"),
|
||||
description: t("organizations.workspaces.new.mode.formbricks_surveys_description"),
|
||||
title: t("organizations.projects.new.mode.formbricks_surveys"),
|
||||
description: t("organizations.projects.new.mode.formbricks_surveys_description"),
|
||||
icon: ListTodoIcon,
|
||||
href: `/organizations/${params.organizationId}/workspaces/new/channel`,
|
||||
href: `/organizations/${params.organizationId}/projects/new/channel`,
|
||||
},
|
||||
{
|
||||
title: t("organizations.workspaces.new.mode.formbricks_cx"),
|
||||
description: t("organizations.workspaces.new.mode.formbricks_cx_description"),
|
||||
title: t("organizations.projects.new.mode.formbricks_cx"),
|
||||
description: t("organizations.projects.new.mode.formbricks_cx_description"),
|
||||
icon: HeartIcon,
|
||||
href: `/organizations/${params.organizationId}/workspaces/new/settings?mode=cx`,
|
||||
href: `/organizations/${params.organizationId}/projects/new/settings?mode=cx`,
|
||||
},
|
||||
];
|
||||
|
||||
@@ -43,11 +43,11 @@ const Page = async (props: ModePageProps) => {
|
||||
|
||||
return (
|
||||
<div className="flex min-h-full min-w-full flex-col items-center justify-center space-y-12">
|
||||
<Header title={t("organizations.workspaces.new.mode.what_are_you_here_for")} />
|
||||
<Header title={t("organizations.projects.new.mode.what_are_you_here_for")} />
|
||||
<OnboardingOptionsContainer options={channelOptions} />
|
||||
{projects.length >= 1 && (
|
||||
<Button
|
||||
className="absolute top-5 right-5 !mt-0 text-slate-500 hover:text-slate-700"
|
||||
className="absolute right-5 top-5 !mt-0 text-slate-500 hover:text-slate-700"
|
||||
variant="ghost"
|
||||
asChild>
|
||||
<Link href={"/"}>
|
||||
@@ -79,7 +79,7 @@ export const ProjectSettings = ({
|
||||
(environment) => environment.type === "production"
|
||||
);
|
||||
if (productionEnvironment) {
|
||||
if (globalThis.window !== undefined) {
|
||||
if (typeof window !== "undefined") {
|
||||
// Rmove filters when creating a new project
|
||||
localStorage.removeItem(FORMBRICKS_SURVEYS_FILTERS_KEY_LS);
|
||||
}
|
||||
@@ -96,7 +96,7 @@ export const ProjectSettings = ({
|
||||
toast.error(errorMessage);
|
||||
}
|
||||
} catch (error) {
|
||||
toast.error(t("organizations.workspaces.new.settings.workspace_creation_failed"));
|
||||
toast.error(t("organizations.projects.new.settings.project_creation_failed"));
|
||||
console.error(error);
|
||||
}
|
||||
};
|
||||
@@ -131,9 +131,9 @@ export const ProjectSettings = ({
|
||||
render={({ field, fieldState: { error } }) => (
|
||||
<FormItem className="w-full space-y-4">
|
||||
<div>
|
||||
<FormLabel>{t("organizations.workspaces.new.settings.brand_color")}</FormLabel>
|
||||
<FormLabel>{t("organizations.projects.new.settings.brand_color")}</FormLabel>
|
||||
<FormDescription>
|
||||
{t("organizations.workspaces.new.settings.brand_color_description")}
|
||||
{t("organizations.projects.new.settings.brand_color_description")}
|
||||
</FormDescription>
|
||||
</div>
|
||||
<FormControl>
|
||||
@@ -155,9 +155,9 @@ export const ProjectSettings = ({
|
||||
render={({ field, fieldState: { error } }) => (
|
||||
<FormItem className="w-full space-y-4">
|
||||
<div>
|
||||
<FormLabel>{t("organizations.workspaces.new.settings.workspace_name")}</FormLabel>
|
||||
<FormLabel>{t("organizations.projects.new.settings.project_name")}</FormLabel>
|
||||
<FormDescription>
|
||||
{t("organizations.workspaces.new.settings.workspace_name_description")}
|
||||
{t("organizations.projects.new.settings.project_name_description")}
|
||||
</FormDescription>
|
||||
</div>
|
||||
<FormControl>
|
||||
@@ -186,7 +186,7 @@ export const ProjectSettings = ({
|
||||
<div>
|
||||
<FormLabel>{t("common.teams")}</FormLabel>
|
||||
<FormDescription>
|
||||
{t("organizations.workspaces.new.settings.team_description")}
|
||||
{t("organizations.projects.new.settings.team_description")}
|
||||
</FormDescription>
|
||||
</div>
|
||||
<Button
|
||||
@@ -194,7 +194,7 @@ export const ProjectSettings = ({
|
||||
size="sm"
|
||||
type="button"
|
||||
onClick={() => setCreateTeamModalOpen(true)}>
|
||||
{t("organizations.workspaces.new.settings.create_new_team")}
|
||||
{t("organizations.projects.new.settings.create_new_team")}
|
||||
</Button>
|
||||
</div>
|
||||
<FormControl>
|
||||
@@ -227,7 +227,7 @@ export const ProjectSettings = ({
|
||||
alt="Logo"
|
||||
width={256}
|
||||
height={56}
|
||||
className="absolute top-2 left-2 -mb-6 h-20 w-auto max-w-64 rounded-lg border object-contain p-1"
|
||||
className="absolute left-2 top-2 -mb-6 h-20 w-auto max-w-64 rounded-lg border object-contain p-1"
|
||||
/>
|
||||
)}
|
||||
<p className="text-sm text-slate-400">{t("common.preview")}</p>
|
||||
@@ -3,7 +3,7 @@ import Link from "next/link";
|
||||
import { redirect } from "next/navigation";
|
||||
import { TProjectConfigChannel, TProjectConfigIndustry, TProjectMode } from "@formbricks/types/project";
|
||||
import { getTeamsByOrganizationId } from "@/app/(app)/(onboarding)/lib/onboarding";
|
||||
import { ProjectSettings } from "@/app/(app)/(onboarding)/organizations/[organizationId]/workspaces/new/settings/components/ProjectSettings";
|
||||
import { ProjectSettings } from "@/app/(app)/(onboarding)/organizations/[organizationId]/projects/new/settings/components/ProjectSettings";
|
||||
import { DEFAULT_BRAND_COLOR } from "@/lib/constants";
|
||||
import { getPublicDomain } from "@/lib/getPublicUrl";
|
||||
import { getUserProjects } from "@/lib/project/service";
|
||||
@@ -53,8 +53,8 @@ const Page = async (props: ProjectSettingsPageProps) => {
|
||||
return (
|
||||
<div className="flex min-h-full min-w-full flex-col items-center justify-center space-y-12">
|
||||
<Header
|
||||
title={t("organizations.workspaces.new.settings.workspace_settings_title")}
|
||||
subtitle={t("organizations.workspaces.new.settings.workspace_settings_subtitle")}
|
||||
title={t("organizations.projects.new.settings.project_settings_title")}
|
||||
subtitle={t("organizations.projects.new.settings.project_settings_subtitle")}
|
||||
/>
|
||||
<ProjectSettings
|
||||
organizationId={params.organizationId}
|
||||
@@ -69,7 +69,7 @@ const Page = async (props: ProjectSettingsPageProps) => {
|
||||
/>
|
||||
{projects.length >= 1 && (
|
||||
<Button
|
||||
className="absolute top-5 right-5 !mt-0 text-slate-500 hover:text-slate-700"
|
||||
className="absolute right-5 top-5 !mt-0 text-slate-500 hover:text-slate-700"
|
||||
variant="ghost"
|
||||
asChild>
|
||||
<Link href={"/"}>
|
||||
@@ -43,7 +43,7 @@ export const EnvironmentLayout = async ({ layoutData, children }: EnvironmentLay
|
||||
|
||||
// Validate that project permission exists for members
|
||||
if (isMember && !projectPermission) {
|
||||
throw new Error(t("common.workspace_permission_not_found"));
|
||||
throw new Error(t("common.project_permission_not_found"));
|
||||
}
|
||||
|
||||
return (
|
||||
|
||||
@@ -113,7 +113,7 @@ export const MainNavigation = ({
|
||||
},
|
||||
{
|
||||
name: t("common.configuration"),
|
||||
href: `/environments/${environment.id}/workspace/general`,
|
||||
href: `/environments/${environment.id}/project/general`,
|
||||
icon: Cog,
|
||||
isActive: pathname?.includes("/project"),
|
||||
},
|
||||
@@ -164,7 +164,7 @@ export const MainNavigation = ({
|
||||
<aside
|
||||
className={cn(
|
||||
"z-40 flex flex-col justify-between rounded-r-xl border-r border-slate-200 bg-white pt-3 shadow-md transition-all duration-100",
|
||||
isCollapsed ? "w-sidebar-expanded" : "w-sidebar-collapsed"
|
||||
!isCollapsed ? "w-sidebar-collapsed" : "w-sidebar-expanded"
|
||||
)}>
|
||||
<div>
|
||||
{/* Logo and Toggle */}
|
||||
@@ -185,7 +185,7 @@ export const MainNavigation = ({
|
||||
size="icon"
|
||||
onClick={toggleSidebar}
|
||||
className={cn(
|
||||
"rounded-xl bg-slate-50 p-1 text-slate-600 transition-all hover:bg-slate-100 focus:ring-0 focus:ring-transparent focus:outline-none"
|
||||
"rounded-xl bg-slate-50 p-1 text-slate-600 transition-all hover:bg-slate-100 focus:outline-none focus:ring-0 focus:ring-transparent"
|
||||
)}>
|
||||
{isCollapsed ? (
|
||||
<PanelLeftOpenIcon strokeWidth={1.5} />
|
||||
|
||||
@@ -17,13 +17,13 @@ export const WidgetStatusIndicator = ({ environment }: WidgetStatusIndicatorProp
|
||||
const stati = {
|
||||
notImplemented: {
|
||||
icon: AlertTriangleIcon,
|
||||
title: t("environments.workspace.app-connection.formbricks_sdk_not_connected"),
|
||||
subtitle: t("environments.workspace.app-connection.formbricks_sdk_not_connected_description"),
|
||||
title: t("environments.project.app-connection.formbricks_sdk_not_connected"),
|
||||
subtitle: t("environments.project.app-connection.formbricks_sdk_not_connected_description"),
|
||||
},
|
||||
running: {
|
||||
icon: CheckIcon,
|
||||
title: t("environments.workspace.app-connection.receiving_data"),
|
||||
subtitle: t("environments.workspace.app-connection.formbricks_sdk_connected"),
|
||||
title: t("environments.project.app-connection.receiving_data"),
|
||||
subtitle: t("environments.project.app-connection.formbricks_sdk_connected"),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -53,11 +53,11 @@ export const WidgetStatusIndicator = ({ environment }: WidgetStatusIndicatorProp
|
||||
<currentStatus.icon />
|
||||
</div>
|
||||
<p className="text-md font-bold text-slate-800 md:text-xl">{currentStatus.title}</p>
|
||||
<p className="w-2/3 text-sm text-balance text-slate-600">{currentStatus.subtitle}</p>
|
||||
<p className="w-2/3 text-balance text-sm text-slate-600">{currentStatus.subtitle}</p>
|
||||
{status === "notImplemented" && (
|
||||
<Button variant="outline" size="sm" className="bg-white" onClick={() => router.refresh()}>
|
||||
<RotateCcwIcon />
|
||||
{t("environments.workspace.app-connection.recheck")}
|
||||
{t("environments.project.app-connection.recheck")}
|
||||
</Button>
|
||||
)}
|
||||
</div>
|
||||
|
||||
@@ -144,12 +144,6 @@ export const OrganizationBreadcrumb = ({
|
||||
href: `/environments/${currentEnvironmentId}/settings/api-keys`,
|
||||
hidden: !isOwnerOrManager,
|
||||
},
|
||||
{
|
||||
id: "domain",
|
||||
label: t("common.domain"),
|
||||
href: `/environments/${currentEnvironmentId}/settings/domain`,
|
||||
hidden: isFormbricksCloud,
|
||||
},
|
||||
{
|
||||
id: "billing",
|
||||
label: t("common.billing"),
|
||||
|
||||
@@ -36,12 +36,12 @@ interface ProjectBreadcrumbProps {
|
||||
}
|
||||
|
||||
const isActiveProjectSetting = (pathname: string, settingId: string): boolean => {
|
||||
// Match /workspace/{settingId} or /workspace/{settingId}/... but exclude settings paths
|
||||
// Match /project/{settingId} or /project/{settingId}/... but exclude settings paths
|
||||
if (pathname.includes("/settings/")) {
|
||||
return false;
|
||||
}
|
||||
// Check if path matches /workspace/{settingId} (with optional trailing path)
|
||||
const pattern = new RegExp(`/workspace/${settingId}(?:/|$)`);
|
||||
// Check if path matches /project/{settingId} (with optional trailing path)
|
||||
const pattern = new RegExp(`/project/${settingId}(?:/|$)`);
|
||||
return pattern.test(pathname);
|
||||
};
|
||||
|
||||
@@ -90,7 +90,7 @@ export const ProjectBreadcrumb = ({
|
||||
const error = new Error(errorMessage);
|
||||
logger.error(error, "Failed to load projects");
|
||||
Sentry.captureException(error);
|
||||
setLoadError(errorMessage || t("common.failed_to_load_workspaces"));
|
||||
setLoadError(errorMessage || t("common.failed_to_load_projects"));
|
||||
}
|
||||
setIsLoadingProjects(false);
|
||||
});
|
||||
@@ -101,37 +101,37 @@ export const ProjectBreadcrumb = ({
|
||||
{
|
||||
id: "general",
|
||||
label: t("common.general"),
|
||||
href: `/environments/${currentEnvironmentId}/workspace/general`,
|
||||
href: `/environments/${currentEnvironmentId}/project/general`,
|
||||
},
|
||||
{
|
||||
id: "look",
|
||||
label: t("common.look_and_feel"),
|
||||
href: `/environments/${currentEnvironmentId}/workspace/look`,
|
||||
href: `/environments/${currentEnvironmentId}/project/look`,
|
||||
},
|
||||
{
|
||||
id: "app-connection",
|
||||
label: t("common.website_and_app_connection"),
|
||||
href: `/environments/${currentEnvironmentId}/workspace/app-connection`,
|
||||
href: `/environments/${currentEnvironmentId}/project/app-connection`,
|
||||
},
|
||||
{
|
||||
id: "integrations",
|
||||
label: t("common.integrations"),
|
||||
href: `/environments/${currentEnvironmentId}/workspace/integrations`,
|
||||
href: `/environments/${currentEnvironmentId}/project/integrations`,
|
||||
},
|
||||
{
|
||||
id: "teams",
|
||||
label: t("common.team_access"),
|
||||
href: `/environments/${currentEnvironmentId}/workspace/teams`,
|
||||
href: `/environments/${currentEnvironmentId}/project/teams`,
|
||||
},
|
||||
{
|
||||
id: "languages",
|
||||
label: t("common.survey_languages"),
|
||||
href: `/environments/${currentEnvironmentId}/workspace/languages`,
|
||||
href: `/environments/${currentEnvironmentId}/project/languages`,
|
||||
},
|
||||
{
|
||||
id: "tags",
|
||||
label: t("common.tags"),
|
||||
href: `/environments/${currentEnvironmentId}/workspace/tags`,
|
||||
href: `/environments/${currentEnvironmentId}/project/tags`,
|
||||
},
|
||||
];
|
||||
|
||||
@@ -159,7 +159,7 @@ export const ProjectBreadcrumb = ({
|
||||
|
||||
const handleProjectSettingsNavigation = (settingId: string) => {
|
||||
startTransition(() => {
|
||||
router.push(`/environments/${currentEnvironmentId}/workspace/${settingId}`);
|
||||
router.push(`/environments/${currentEnvironmentId}/project/${settingId}`);
|
||||
});
|
||||
};
|
||||
|
||||
@@ -212,7 +212,7 @@ export const ProjectBreadcrumb = ({
|
||||
<DropdownMenuContent align="start" className="mt-2">
|
||||
<div className="px-2 py-1.5 text-sm font-medium text-slate-500">
|
||||
<FolderOpenIcon className="mr-2 inline h-4 w-4" strokeWidth={1.5} />
|
||||
{t("common.choose_workspace")}
|
||||
{t("common.choose_project")}
|
||||
</div>
|
||||
{isLoadingProjects && (
|
||||
<div className="flex items-center justify-center py-2">
|
||||
@@ -251,7 +251,7 @@ export const ProjectBreadcrumb = ({
|
||||
<DropdownMenuCheckboxItem
|
||||
onClick={handleAddProject}
|
||||
className="w-full cursor-pointer justify-between">
|
||||
<span>{t("common.add_new_workspace")}</span>
|
||||
<span>{t("common.add_new_project")}</span>
|
||||
<PlusIcon className="ml-2 h-4 w-4" strokeWidth={1.5} />
|
||||
</DropdownMenuCheckboxItem>
|
||||
)}
|
||||
@@ -261,7 +261,7 @@ export const ProjectBreadcrumb = ({
|
||||
<DropdownMenuSeparator />
|
||||
<div className="px-2 py-1.5 text-sm font-medium text-slate-500">
|
||||
<CogIcon className="mr-2 inline h-4 w-4" strokeWidth={1.5} />
|
||||
{t("common.workspace_configuration")}
|
||||
{t("common.project_configuration")}
|
||||
</div>
|
||||
{projectSettings.map((setting) => (
|
||||
<DropdownMenuCheckboxItem
|
||||
|
||||
@@ -17,9 +17,9 @@ import {
|
||||
import { TSurveyElement } from "@formbricks/types/surveys/elements";
|
||||
import { TSurvey } from "@formbricks/types/surveys/types";
|
||||
import { getTextContent } from "@formbricks/types/surveys/validation";
|
||||
import { createOrUpdateIntegrationAction } from "@/app/(app)/environments/[environmentId]/workspace/integrations/actions";
|
||||
import { BaseSelectDropdown } from "@/app/(app)/environments/[environmentId]/workspace/integrations/airtable/components/BaseSelectDropdown";
|
||||
import { fetchTables } from "@/app/(app)/environments/[environmentId]/workspace/integrations/airtable/lib/airtable";
|
||||
import { createOrUpdateIntegrationAction } from "@/app/(app)/environments/[environmentId]/project/integrations/actions";
|
||||
import { BaseSelectDropdown } from "@/app/(app)/environments/[environmentId]/project/integrations/airtable/components/BaseSelectDropdown";
|
||||
import { fetchTables } from "@/app/(app)/environments/[environmentId]/project/integrations/airtable/lib/airtable";
|
||||
import AirtableLogo from "@/images/airtableLogo.svg";
|
||||
import { recallToHeadline } from "@/lib/utils/recall";
|
||||
import { getElementsFromBlocks } from "@/modules/survey/lib/client-utils";
|
||||
@@ -5,8 +5,8 @@ import { TIntegrationItem } from "@formbricks/types/integration";
|
||||
import { TIntegrationAirtable } from "@formbricks/types/integration/airtable";
|
||||
import { TSurvey } from "@formbricks/types/surveys/types";
|
||||
import { TUserLocale } from "@formbricks/types/user";
|
||||
import { ManageIntegration } from "@/app/(app)/environments/[environmentId]/workspace/integrations/airtable/components/ManageIntegration";
|
||||
import { authorize } from "@/app/(app)/environments/[environmentId]/workspace/integrations/airtable/lib/airtable";
|
||||
import { ManageIntegration } from "@/app/(app)/environments/[environmentId]/project/integrations/airtable/components/ManageIntegration";
|
||||
import { authorize } from "@/app/(app)/environments/[environmentId]/project/integrations/airtable/lib/airtable";
|
||||
import airtableLogo from "@/images/airtableLogo.svg";
|
||||
import { ConnectIntegration } from "@/modules/ui/components/connect-integration";
|
||||
|
||||
@@ -8,8 +8,8 @@ import { TIntegrationItem } from "@formbricks/types/integration";
|
||||
import { TIntegrationAirtable } from "@formbricks/types/integration/airtable";
|
||||
import { TSurvey } from "@formbricks/types/surveys/types";
|
||||
import { TUserLocale } from "@formbricks/types/user";
|
||||
import { deleteIntegrationAction } from "@/app/(app)/environments/[environmentId]/workspace/integrations/actions";
|
||||
import { AddIntegrationModal } from "@/app/(app)/environments/[environmentId]/workspace/integrations/airtable/components/AddIntegrationModal";
|
||||
import { deleteIntegrationAction } from "@/app/(app)/environments/[environmentId]/project/integrations/actions";
|
||||
import { AddIntegrationModal } from "@/app/(app)/environments/[environmentId]/project/integrations/airtable/components/AddIntegrationModal";
|
||||
import { timeSince } from "@/lib/time";
|
||||
import { getFormattedErrorMessage } from "@/lib/utils/helper";
|
||||
import { Button } from "@/modules/ui/components/button";
|
||||
@@ -1,8 +1,8 @@
|
||||
import { redirect } from "next/navigation";
|
||||
import { TIntegrationItem } from "@formbricks/types/integration";
|
||||
import { TIntegrationAirtable } from "@formbricks/types/integration/airtable";
|
||||
import { AirtableWrapper } from "@/app/(app)/environments/[environmentId]/workspace/integrations/airtable/components/AirtableWrapper";
|
||||
import { getSurveys } from "@/app/(app)/environments/[environmentId]/workspace/integrations/lib/surveys";
|
||||
import { AirtableWrapper } from "@/app/(app)/environments/[environmentId]/project/integrations/airtable/components/AirtableWrapper";
|
||||
import { getSurveys } from "@/app/(app)/environments/[environmentId]/project/integrations/lib/surveys";
|
||||
import { getAirtableTables } from "@/lib/airtable/service";
|
||||
import { AIRTABLE_CLIENT_ID, WEBAPP_URL } from "@/lib/constants";
|
||||
import { getIntegrations } from "@/lib/integration/service";
|
||||
@@ -42,7 +42,7 @@ const Page = async (props) => {
|
||||
|
||||
return (
|
||||
<PageContentWrapper>
|
||||
<GoBackButton url={`${WEBAPP_URL}/environments/${params.environmentId}/workspace/integrations`} />
|
||||
<GoBackButton url={`${WEBAPP_URL}/environments/${params.environmentId}/project/integrations`} />
|
||||
<PageHeader pageTitle={t("environments.integrations.airtable.airtable_integration")} />
|
||||
<div className="h-[75vh] w-full">
|
||||
<AirtableWrapper
|
||||
@@ -12,13 +12,13 @@ import {
|
||||
} from "@formbricks/types/integration/google-sheet";
|
||||
import { TSurvey, TSurveyQuestionId } from "@formbricks/types/surveys/types";
|
||||
import { getTextContent } from "@formbricks/types/surveys/validation";
|
||||
import { createOrUpdateIntegrationAction } from "@/app/(app)/environments/[environmentId]/workspace/integrations/actions";
|
||||
import { getSpreadsheetNameByIdAction } from "@/app/(app)/environments/[environmentId]/workspace/integrations/google-sheets/actions";
|
||||
import { createOrUpdateIntegrationAction } from "@/app/(app)/environments/[environmentId]/project/integrations/actions";
|
||||
import { getSpreadsheetNameByIdAction } from "@/app/(app)/environments/[environmentId]/project/integrations/google-sheets/actions";
|
||||
import {
|
||||
constructGoogleSheetsUrl,
|
||||
extractSpreadsheetIdFromUrl,
|
||||
isValidGoogleSheetsUrl,
|
||||
} from "@/app/(app)/environments/[environmentId]/workspace/integrations/google-sheets/lib/util";
|
||||
} from "@/app/(app)/environments/[environmentId]/project/integrations/google-sheets/lib/util";
|
||||
import GoogleSheetLogo from "@/images/googleSheetsLogo.png";
|
||||
import { getFormattedErrorMessage } from "@/lib/utils/helper";
|
||||
import { recallToHeadline } from "@/lib/utils/recall";
|
||||
@@ -266,7 +266,7 @@ export const AddIntegrationModal = ({
|
||||
<div className="space-y-4">
|
||||
<div>
|
||||
<Label htmlFor="Surveys">{t("common.questions")}</Label>
|
||||
<div className="mt-1 max-h-[15vh] overflow-x-hidden overflow-y-auto rounded-lg border border-slate-200">
|
||||
<div className="mt-1 max-h-[15vh] overflow-y-auto overflow-x-hidden rounded-lg border border-slate-200">
|
||||
<div className="grid content-center rounded-lg bg-slate-50 p-3 text-left text-sm text-slate-900">
|
||||
{surveyElements.map((question) => (
|
||||
<div key={question.id} className="my-1 flex items-center space-x-2">
|
||||
@@ -8,8 +8,8 @@ import {
|
||||
} from "@formbricks/types/integration/google-sheet";
|
||||
import { TSurvey } from "@formbricks/types/surveys/types";
|
||||
import { TUserLocale } from "@formbricks/types/user";
|
||||
import { ManageIntegration } from "@/app/(app)/environments/[environmentId]/workspace/integrations/google-sheets/components/ManageIntegration";
|
||||
import { authorize } from "@/app/(app)/environments/[environmentId]/workspace/integrations/google-sheets/lib/google";
|
||||
import { ManageIntegration } from "@/app/(app)/environments/[environmentId]/project/integrations/google-sheets/components/ManageIntegration";
|
||||
import { authorize } from "@/app/(app)/environments/[environmentId]/project/integrations/google-sheets/lib/google";
|
||||
import googleSheetLogo from "@/images/googleSheetsLogo.png";
|
||||
import { ConnectIntegration } from "@/modules/ui/components/connect-integration";
|
||||
import { AddIntegrationModal } from "./AddIntegrationModal";
|
||||
@@ -9,7 +9,7 @@ import {
|
||||
TIntegrationGoogleSheetsConfigData,
|
||||
} from "@formbricks/types/integration/google-sheet";
|
||||
import { TUserLocale } from "@formbricks/types/user";
|
||||
import { deleteIntegrationAction } from "@/app/(app)/environments/[environmentId]/workspace/integrations/actions";
|
||||
import { deleteIntegrationAction } from "@/app/(app)/environments/[environmentId]/project/integrations/actions";
|
||||
import { timeSince } from "@/lib/time";
|
||||
import { getFormattedErrorMessage } from "@/lib/utils/helper";
|
||||
import { Button } from "@/modules/ui/components/button";
|
||||
@@ -10,7 +10,7 @@ const Loading = () => {
|
||||
<div className="mt-6 p-6">
|
||||
<GoBackButton />
|
||||
<div className="mb-6 text-right">
|
||||
<Button className="pointer-events-none animate-pulse cursor-not-allowed bg-slate-200 select-none">
|
||||
<Button className="pointer-events-none animate-pulse cursor-not-allowed select-none bg-slate-200">
|
||||
{t("environments.integrations.google_sheets.link_new_sheet")}
|
||||
</Button>
|
||||
</div>
|
||||
@@ -51,7 +51,7 @@ const Loading = () => {
|
||||
<div className="mt-0 h-4 w-24 animate-pulse rounded-full bg-slate-200"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-span-2 my-auto flex items-center justify-center text-center text-sm whitespace-nowrap text-slate-500">
|
||||
<div className="col-span-2 my-auto flex items-center justify-center whitespace-nowrap text-center text-sm text-slate-500">
|
||||
<div className="h-4 w-16 animate-pulse rounded-full bg-slate-200"></div>
|
||||
</div>
|
||||
<div className="text-center"></div>
|
||||
@@ -1,7 +1,7 @@
|
||||
import { redirect } from "next/navigation";
|
||||
import { TIntegrationGoogleSheets } from "@formbricks/types/integration/google-sheet";
|
||||
import { GoogleSheetWrapper } from "@/app/(app)/environments/[environmentId]/workspace/integrations/google-sheets/components/GoogleSheetWrapper";
|
||||
import { getSurveys } from "@/app/(app)/environments/[environmentId]/workspace/integrations/lib/surveys";
|
||||
import { GoogleSheetWrapper } from "@/app/(app)/environments/[environmentId]/project/integrations/google-sheets/components/GoogleSheetWrapper";
|
||||
import { getSurveys } from "@/app/(app)/environments/[environmentId]/project/integrations/lib/surveys";
|
||||
import {
|
||||
GOOGLE_SHEETS_CLIENT_ID,
|
||||
GOOGLE_SHEETS_CLIENT_SECRET,
|
||||
@@ -40,7 +40,7 @@ const Page = async (props) => {
|
||||
|
||||
return (
|
||||
<PageContentWrapper>
|
||||
<GoBackButton url={`${WEBAPP_URL}/environments/${params.environmentId}/workspace/integrations`} />
|
||||
<GoBackButton url={`${WEBAPP_URL}/environments/${params.environmentId}/project/integrations`} />
|
||||
<PageHeader pageTitle={t("environments.integrations.google_sheets.google_sheets_integration")} />
|
||||
<div className="h-[75vh] w-full">
|
||||
<GoogleSheetWrapper
|
||||
@@ -15,12 +15,12 @@ import {
|
||||
import { TSurveyElementTypeEnum } from "@formbricks/types/surveys/elements";
|
||||
import { TSurvey } from "@formbricks/types/surveys/types";
|
||||
import { getTextContent } from "@formbricks/types/surveys/validation";
|
||||
import { createOrUpdateIntegrationAction } from "@/app/(app)/environments/[environmentId]/workspace/integrations/actions";
|
||||
import { createOrUpdateIntegrationAction } from "@/app/(app)/environments/[environmentId]/project/integrations/actions";
|
||||
import {
|
||||
ERRORS,
|
||||
TYPE_MAPPING,
|
||||
UNSUPPORTED_TYPES_BY_NOTION,
|
||||
} from "@/app/(app)/environments/[environmentId]/workspace/integrations/notion/constants";
|
||||
} from "@/app/(app)/environments/[environmentId]/project/integrations/notion/constants";
|
||||
import NotionLogo from "@/images/notion.png";
|
||||
import { structuredClone } from "@/lib/pollyfills/structuredClone";
|
||||
import { recallToHeadline } from "@/lib/utils/recall";
|
||||
@@ -6,7 +6,7 @@ import toast from "react-hot-toast";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { TIntegrationNotion, TIntegrationNotionConfigData } from "@formbricks/types/integration/notion";
|
||||
import { TUserLocale } from "@formbricks/types/user";
|
||||
import { deleteIntegrationAction } from "@/app/(app)/environments/[environmentId]/workspace/integrations/actions";
|
||||
import { deleteIntegrationAction } from "@/app/(app)/environments/[environmentId]/project/integrations/actions";
|
||||
import { timeSince } from "@/lib/time";
|
||||
import { getFormattedErrorMessage } from "@/lib/utils/helper";
|
||||
import { Button } from "@/modules/ui/components/button";
|
||||
@@ -9,8 +9,8 @@ import {
|
||||
} from "@formbricks/types/integration/notion";
|
||||
import { TSurvey } from "@formbricks/types/surveys/types";
|
||||
import { TUserLocale } from "@formbricks/types/user";
|
||||
import { AddIntegrationModal } from "@/app/(app)/environments/[environmentId]/workspace/integrations/notion/components/AddIntegrationModal";
|
||||
import { ManageIntegration } from "@/app/(app)/environments/[environmentId]/workspace/integrations/notion/components/ManageIntegration";
|
||||
import { AddIntegrationModal } from "@/app/(app)/environments/[environmentId]/project/integrations/notion/components/AddIntegrationModal";
|
||||
import { ManageIntegration } from "@/app/(app)/environments/[environmentId]/project/integrations/notion/components/ManageIntegration";
|
||||
import notionLogo from "@/images/notion.png";
|
||||
import { ConnectIntegration } from "@/modules/ui/components/connect-integration";
|
||||
import { authorize } from "../lib/notion";
|
||||
@@ -10,7 +10,7 @@ const Loading = () => {
|
||||
<div className="mt-6 p-6">
|
||||
<GoBackButton />
|
||||
<div className="mb-6 text-right">
|
||||
<Button className="pointer-events-none animate-pulse cursor-not-allowed bg-slate-200 select-none">
|
||||
<Button className="pointer-events-none animate-pulse cursor-not-allowed select-none bg-slate-200">
|
||||
{t("environments.integrations.notion.link_database")}
|
||||
</Button>
|
||||
</div>
|
||||
@@ -48,7 +48,7 @@ const Loading = () => {
|
||||
<div className="mt-0 h-4 w-24 animate-pulse rounded-full bg-slate-200"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-span-2 my-auto flex items-center justify-center text-center text-sm whitespace-nowrap text-slate-500">
|
||||
<div className="col-span-2 my-auto flex items-center justify-center whitespace-nowrap text-center text-sm text-slate-500">
|
||||
<div className="h-4 w-16 animate-pulse rounded-full bg-slate-200"></div>
|
||||
</div>
|
||||
<div className="text-center"></div>
|
||||
@@ -1,7 +1,7 @@
|
||||
import { redirect } from "next/navigation";
|
||||
import { TIntegrationNotion, TIntegrationNotionDatabase } from "@formbricks/types/integration/notion";
|
||||
import { getSurveys } from "@/app/(app)/environments/[environmentId]/workspace/integrations/lib/surveys";
|
||||
import { NotionWrapper } from "@/app/(app)/environments/[environmentId]/workspace/integrations/notion/components/NotionWrapper";
|
||||
import { getSurveys } from "@/app/(app)/environments/[environmentId]/project/integrations/lib/surveys";
|
||||
import { NotionWrapper } from "@/app/(app)/environments/[environmentId]/project/integrations/notion/components/NotionWrapper";
|
||||
import {
|
||||
NOTION_AUTH_URL,
|
||||
NOTION_OAUTH_CLIENT_ID,
|
||||
@@ -2,7 +2,7 @@ import { TFunction } from "i18next";
|
||||
import Image from "next/image";
|
||||
import { redirect } from "next/navigation";
|
||||
import { TIntegrationType } from "@formbricks/types/integration";
|
||||
import { getWebhookCountBySource } from "@/app/(app)/environments/[environmentId]/workspace/integrations/lib/webhook";
|
||||
import { getWebhookCountBySource } from "@/app/(app)/environments/[environmentId]/project/integrations/lib/webhook";
|
||||
import ActivePiecesLogo from "@/images/activepieces.webp";
|
||||
import AirtableLogo from "@/images/airtableLogo.svg";
|
||||
import GoogleSheetsLogo from "@/images/googleSheetsLogo.png";
|
||||
@@ -79,7 +79,7 @@ const Page = async (props) => {
|
||||
disabled: isReadOnly,
|
||||
},
|
||||
{
|
||||
connectHref: `/environments/${params.environmentId}/workspace/integrations/webhooks`,
|
||||
connectHref: `/environments/${params.environmentId}/project/integrations/webhooks`,
|
||||
connectText: t("environments.integrations.manage_webhooks"),
|
||||
connectNewTab: false,
|
||||
docsHref: "https://formbricks.com/docs/xm-and-surveys/core-features/integrations/webhooks",
|
||||
@@ -93,7 +93,7 @@ const Page = async (props) => {
|
||||
disabled: false,
|
||||
},
|
||||
{
|
||||
connectHref: `/environments/${params.environmentId}/workspace/integrations/google-sheets`,
|
||||
connectHref: `/environments/${params.environmentId}/project/integrations/google-sheets`,
|
||||
connectText: `${isGoogleSheetsIntegrationConnected ? t("common.manage") : t("common.connect")}`,
|
||||
connectNewTab: false,
|
||||
docsHref: "https://formbricks.com/docs/xm-and-surveys/core-features/integrations/google-sheets",
|
||||
@@ -107,7 +107,7 @@ const Page = async (props) => {
|
||||
disabled: isReadOnly,
|
||||
},
|
||||
{
|
||||
connectHref: `/environments/${params.environmentId}/workspace/integrations/airtable`,
|
||||
connectHref: `/environments/${params.environmentId}/project/integrations/airtable`,
|
||||
connectText: `${isAirtableIntegrationConnected ? t("common.manage") : t("common.connect")}`,
|
||||
connectNewTab: false,
|
||||
docsHref: "https://formbricks.com/docs/xm-and-surveys/core-features/integrations/airtable",
|
||||
@@ -121,7 +121,7 @@ const Page = async (props) => {
|
||||
disabled: isReadOnly,
|
||||
},
|
||||
{
|
||||
connectHref: `/environments/${params.environmentId}/workspace/integrations/slack`,
|
||||
connectHref: `/environments/${params.environmentId}/project/integrations/slack`,
|
||||
connectText: `${isSlackIntegrationConnected ? t("common.manage") : t("common.connect")}`,
|
||||
connectNewTab: false,
|
||||
docsHref: "https://formbricks.com/docs/xm-and-surveys/core-features/integrations/slack",
|
||||
@@ -163,7 +163,7 @@ const Page = async (props) => {
|
||||
disabled: isReadOnly,
|
||||
},
|
||||
{
|
||||
connectHref: `/environments/${params.environmentId}/workspace/integrations/notion`,
|
||||
connectHref: `/environments/${params.environmentId}/project/integrations/notion`,
|
||||
connectText: `${isNotionIntegrationConnected ? t("common.manage") : t("common.connect")}`,
|
||||
connectNewTab: false,
|
||||
docsHref: "https://formbricks.com/docs/xm-and-surveys/core-features/integrations/notion",
|
||||
@@ -196,7 +196,7 @@ const Page = async (props) => {
|
||||
docsHref: "https://formbricks.com/docs/app-surveys/quickstart",
|
||||
docsText: t("common.docs"),
|
||||
docsNewTab: true,
|
||||
connectHref: `/environments/${params.environmentId}/workspace/app-connection`,
|
||||
connectHref: `/environments/${params.environmentId}/project/app-connection`,
|
||||
connectText: t("common.connect"),
|
||||
connectNewTab: false,
|
||||
label: "Javascript SDK",
|
||||
@@ -209,7 +209,7 @@ const Page = async (props) => {
|
||||
|
||||
return (
|
||||
<PageContentWrapper>
|
||||
<PageHeader pageTitle={t("common.workspace_configuration")}>
|
||||
<PageHeader pageTitle={t("common.project_configuration")}>
|
||||
<ProjectConfigNavigation environmentId={params.environmentId} activeId="integrations" />
|
||||
</PageHeader>
|
||||
<div className="grid grid-cols-3 place-content-stretch gap-4 lg:grid-cols-3">
|
||||
@@ -15,7 +15,7 @@ import {
|
||||
} from "@formbricks/types/integration/slack";
|
||||
import { TSurvey } from "@formbricks/types/surveys/types";
|
||||
import { getTextContent } from "@formbricks/types/surveys/validation";
|
||||
import { createOrUpdateIntegrationAction } from "@/app/(app)/environments/[environmentId]/workspace/integrations/actions";
|
||||
import { createOrUpdateIntegrationAction } from "@/app/(app)/environments/[environmentId]/project/integrations/actions";
|
||||
import SlackLogo from "@/images/slacklogo.png";
|
||||
import { recallToHeadline } from "@/lib/utils/recall";
|
||||
import { getElementsFromBlocks } from "@/modules/survey/lib/client-utils";
|
||||
@@ -6,7 +6,7 @@ import toast from "react-hot-toast";
|
||||
import { Trans, useTranslation } from "react-i18next";
|
||||
import { TIntegrationSlack, TIntegrationSlackConfigData } from "@formbricks/types/integration/slack";
|
||||
import { TUserLocale } from "@formbricks/types/user";
|
||||
import { deleteIntegrationAction } from "@/app/(app)/environments/[environmentId]/workspace/integrations/actions";
|
||||
import { deleteIntegrationAction } from "@/app/(app)/environments/[environmentId]/project/integrations/actions";
|
||||
import { timeSince } from "@/lib/time";
|
||||
import { getFormattedErrorMessage } from "@/lib/utils/helper";
|
||||
import { Button } from "@/modules/ui/components/button";
|
||||
@@ -6,10 +6,10 @@ import { TIntegrationItem } from "@formbricks/types/integration";
|
||||
import { TIntegrationSlack, TIntegrationSlackConfigData } from "@formbricks/types/integration/slack";
|
||||
import { TSurvey } from "@formbricks/types/surveys/types";
|
||||
import { TUserLocale } from "@formbricks/types/user";
|
||||
import { getSlackChannelsAction } from "@/app/(app)/environments/[environmentId]/workspace/integrations/slack/actions";
|
||||
import { AddChannelMappingModal } from "@/app/(app)/environments/[environmentId]/workspace/integrations/slack/components/AddChannelMappingModal";
|
||||
import { ManageIntegration } from "@/app/(app)/environments/[environmentId]/workspace/integrations/slack/components/ManageIntegration";
|
||||
import { authorize } from "@/app/(app)/environments/[environmentId]/workspace/integrations/slack/lib/slack";
|
||||
import { getSlackChannelsAction } from "@/app/(app)/environments/[environmentId]/project/integrations/slack/actions";
|
||||
import { AddChannelMappingModal } from "@/app/(app)/environments/[environmentId]/project/integrations/slack/components/AddChannelMappingModal";
|
||||
import { ManageIntegration } from "@/app/(app)/environments/[environmentId]/project/integrations/slack/components/ManageIntegration";
|
||||
import { authorize } from "@/app/(app)/environments/[environmentId]/project/integrations/slack/lib/slack";
|
||||
import slackLogo from "@/images/slacklogo.png";
|
||||
import { ConnectIntegration } from "@/modules/ui/components/connect-integration";
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { redirect } from "next/navigation";
|
||||
import { TIntegrationSlack } from "@formbricks/types/integration/slack";
|
||||
import { getSurveys } from "@/app/(app)/environments/[environmentId]/workspace/integrations/lib/surveys";
|
||||
import { SlackWrapper } from "@/app/(app)/environments/[environmentId]/workspace/integrations/slack/components/SlackWrapper";
|
||||
import { getSurveys } from "@/app/(app)/environments/[environmentId]/project/integrations/lib/surveys";
|
||||
import { SlackWrapper } from "@/app/(app)/environments/[environmentId]/project/integrations/slack/components/SlackWrapper";
|
||||
import { SLACK_CLIENT_ID, SLACK_CLIENT_SECRET, WEBAPP_URL } from "@/lib/constants";
|
||||
import { getIntegrationByType } from "@/lib/integration/service";
|
||||
import { findMatchingLocale } from "@/lib/utils/locale";
|
||||
@@ -32,7 +32,7 @@ const Page = async (props) => {
|
||||
|
||||
return (
|
||||
<PageContentWrapper>
|
||||
<GoBackButton url={`${WEBAPP_URL}/environments/${params.environmentId}/workspace/integrations`} />
|
||||
<GoBackButton url={`${WEBAPP_URL}/environments/${params.environmentId}/project/integrations`} />
|
||||
<PageHeader pageTitle={t("environments.integrations.slack.slack_integration")} />
|
||||
<div className="h-[75vh] w-full">
|
||||
<SlackWrapper
|
||||
@@ -21,7 +21,7 @@ const AccountSettingsLayout = async (props) => {
|
||||
}
|
||||
|
||||
if (!project) {
|
||||
throw new Error(t("common.workspace_not_found"));
|
||||
throw new Error(t("common.project_not_found"));
|
||||
}
|
||||
|
||||
if (!session) {
|
||||
|
||||
@@ -16,7 +16,7 @@ export const IntegrationsTip = ({ environmentId }: IntegrationsTipProps) => {
|
||||
<p className="text-sm">
|
||||
{t("environments.settings.notifications.need_slack_or_discord_notifications")}?
|
||||
<a
|
||||
href={`/environments/${environmentId}/workspace/integrations`}
|
||||
href={`/environments/${environmentId}/project/integrations`}
|
||||
className="ml-1 cursor-pointer text-sm underline">
|
||||
{t("environments.settings.notifications.use_the_integration")}
|
||||
</a>
|
||||
|
||||
@@ -47,13 +47,6 @@ export const OrganizationSettingsNavbar = ({
|
||||
current: pathname?.includes("/api-keys"),
|
||||
hidden: !isOwner,
|
||||
},
|
||||
{
|
||||
id: "domain",
|
||||
label: t("common.domain"),
|
||||
href: `/environments/${environmentId}/settings/domain`,
|
||||
current: pathname?.includes("/domain"),
|
||||
hidden: isFormbricksCloud,
|
||||
},
|
||||
{
|
||||
id: "billing",
|
||||
label: t("common.billing"),
|
||||
|
||||
@@ -1,102 +0,0 @@
|
||||
"use client";
|
||||
|
||||
import Link from "next/link";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { TSurveyStatus } from "@formbricks/types/surveys/types";
|
||||
import { IdBadge } from "@/modules/ui/components/id-badge";
|
||||
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/modules/ui/components/table";
|
||||
|
||||
interface SurveyWithSlug {
|
||||
id: string;
|
||||
name: string;
|
||||
slug: string | null;
|
||||
status: TSurveyStatus;
|
||||
environment: {
|
||||
id: string;
|
||||
type: "production" | "development";
|
||||
project: {
|
||||
id: string;
|
||||
name: string;
|
||||
};
|
||||
};
|
||||
createdAt: Date;
|
||||
}
|
||||
|
||||
interface PrettyUrlsTableProps {
|
||||
surveys: SurveyWithSlug[];
|
||||
}
|
||||
|
||||
export const PrettyUrlsTable = ({ surveys }: PrettyUrlsTableProps) => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
const getEnvironmentBadgeColor = (type: string) => {
|
||||
return type === "production" ? "bg-green-100 text-green-800" : "bg-blue-100 text-blue-800";
|
||||
};
|
||||
|
||||
const tableHeaders = [
|
||||
{
|
||||
label: t("environments.settings.domain.survey_name"),
|
||||
key: "name",
|
||||
},
|
||||
{
|
||||
label: t("environments.settings.domain.workspace"),
|
||||
key: "project",
|
||||
},
|
||||
{
|
||||
label: t("environments.settings.domain.pretty_url"),
|
||||
key: "slug",
|
||||
},
|
||||
{
|
||||
label: t("common.environment"),
|
||||
key: "environment",
|
||||
},
|
||||
];
|
||||
|
||||
return (
|
||||
<div className="overflow-hidden rounded-lg">
|
||||
<Table>
|
||||
<TableHeader>
|
||||
<TableRow className="bg-slate-100">
|
||||
{tableHeaders.map((header) => (
|
||||
<TableHead key={header.key} className="font-medium text-slate-500">
|
||||
{header.label}
|
||||
</TableHead>
|
||||
))}
|
||||
</TableRow>
|
||||
</TableHeader>
|
||||
<TableBody className="[&_tr:last-child]:border-b">
|
||||
{surveys.length === 0 && (
|
||||
<TableRow className="hover:bg-transparent">
|
||||
<TableCell colSpan={4} className="text-center text-slate-500">
|
||||
{t("environments.settings.domain.no_pretty_urls")}
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
)}
|
||||
{surveys.map((survey) => (
|
||||
<TableRow key={survey.id} className="border-slate-200 hover:bg-transparent">
|
||||
<TableCell className="font-medium">
|
||||
<Link
|
||||
href={`/environments/${survey.environment.id}/surveys/${survey.id}/summary`}
|
||||
className="text-slate-900 hover:text-slate-700 hover:underline">
|
||||
{survey.name}
|
||||
</Link>
|
||||
</TableCell>
|
||||
<TableCell>{survey.environment.project.name}</TableCell>
|
||||
<TableCell>
|
||||
<IdBadge id={survey.slug ?? ""} />
|
||||
</TableCell>
|
||||
<TableCell>
|
||||
<span
|
||||
className={`rounded px-2 py-1 text-xs font-medium ${getEnvironmentBadgeColor(survey.environment.type)}`}>
|
||||
{survey.environment.type === "production"
|
||||
? t("common.production")
|
||||
: t("common.development")}
|
||||
</span>
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
))}
|
||||
</TableBody>
|
||||
</Table>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
@@ -1,53 +0,0 @@
|
||||
import { notFound } from "next/navigation";
|
||||
import { IS_FORMBRICKS_CLOUD } from "@/lib/constants";
|
||||
import { getTranslate } from "@/lingodotdev/server";
|
||||
import { getEnvironmentAuth } from "@/modules/environments/lib/utils";
|
||||
import { getSurveysWithSlugsByOrganizationId } from "@/modules/survey/lib/slug";
|
||||
import { PageContentWrapper } from "@/modules/ui/components/page-content-wrapper";
|
||||
import { PageHeader } from "@/modules/ui/components/page-header";
|
||||
import { SettingsCard } from "../../components/SettingsCard";
|
||||
import { OrganizationSettingsNavbar } from "../components/OrganizationSettingsNavbar";
|
||||
import { PrettyUrlsTable } from "./components/pretty-urls-table";
|
||||
|
||||
const Page = async (props: { params: Promise<{ environmentId: string }> }) => {
|
||||
const params = await props.params;
|
||||
const t = await getTranslate();
|
||||
|
||||
if (IS_FORMBRICKS_CLOUD) {
|
||||
return notFound();
|
||||
}
|
||||
|
||||
const { session, currentUserMembership, organization } = await getEnvironmentAuth(params.environmentId);
|
||||
|
||||
if (!session) {
|
||||
throw new Error(t("common.session_not_found"));
|
||||
}
|
||||
|
||||
const result = await getSurveysWithSlugsByOrganizationId(organization.id);
|
||||
if (!result.ok) {
|
||||
throw new Error(t("common.something_went_wrong"));
|
||||
}
|
||||
|
||||
const surveys = result.data;
|
||||
|
||||
return (
|
||||
<PageContentWrapper>
|
||||
<PageHeader pageTitle={t("environments.settings.general.organization_settings")}>
|
||||
<OrganizationSettingsNavbar
|
||||
environmentId={params.environmentId}
|
||||
isFormbricksCloud={IS_FORMBRICKS_CLOUD}
|
||||
membershipRole={currentUserMembership?.role}
|
||||
activeId="domain"
|
||||
/>
|
||||
</PageHeader>
|
||||
|
||||
<SettingsCard
|
||||
title={t("environments.settings.domain.title")}
|
||||
description={t("environments.settings.domain.description")}>
|
||||
<PrettyUrlsTable surveys={surveys} />
|
||||
</SettingsCard>
|
||||
</PageContentWrapper>
|
||||
);
|
||||
};
|
||||
|
||||
export default Page;
|
||||
@@ -39,7 +39,7 @@ const Page = async (props) => {
|
||||
onRequest: false,
|
||||
},
|
||||
{
|
||||
title: t("environments.workspace.languages.multi_language_surveys"),
|
||||
title: t("environments.project.languages.multi_language_surveys"),
|
||||
comingSoon: false,
|
||||
onRequest: false,
|
||||
},
|
||||
@@ -118,7 +118,7 @@ const Page = async (props) => {
|
||||
<div className="relative isolate mt-8 overflow-hidden rounded-lg bg-slate-900 px-3 pt-8 shadow-2xl sm:px-8 md:pt-12 lg:flex lg:gap-x-10 lg:px-12 lg:pt-0">
|
||||
<svg
|
||||
viewBox="0 0 1024 1024"
|
||||
className="absolute top-1/2 left-1/2 -z-10 h-[64rem] w-[64rem] -translate-y-1/2 [mask-image:radial-gradient(closest-side,white,transparent)] sm:left-full sm:-ml-80 lg:left-1/2 lg:ml-0 lg:-translate-x-1/2 lg:translate-y-0"
|
||||
className="absolute left-1/2 top-1/2 -z-10 h-[64rem] w-[64rem] -translate-y-1/2 [mask-image:radial-gradient(closest-side,white,transparent)] sm:left-full sm:-ml-80 lg:left-1/2 lg:ml-0 lg:-translate-x-1/2 lg:translate-y-0"
|
||||
aria-hidden="true">
|
||||
<circle
|
||||
cx={512}
|
||||
|
||||
@@ -21,7 +21,7 @@ const Layout = async (props) => {
|
||||
}
|
||||
|
||||
if (!project) {
|
||||
throw new Error(t("common.workspace_not_found"));
|
||||
throw new Error(t("common.project_not_found"));
|
||||
}
|
||||
|
||||
if (!session) {
|
||||
|
||||
@@ -27,7 +27,7 @@ export const EmptyAppSurveys = ({ environment }: TEmptyAppSurveysProps) => {
|
||||
{t("environments.surveys.summary.connect_your_website_or_app_with_formbricks_to_get_started")}
|
||||
</p>
|
||||
|
||||
<Link className="mt-2" href={`/environments/${environment.id}/workspace/app-connection`}>
|
||||
<Link className="mt-2" href={`/environments/${environment.id}/project/app-connection`}>
|
||||
<Button size="sm" className="flex w-[120px] justify-center">
|
||||
{t("common.connect")}
|
||||
</Button>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
import { VisuallyHidden } from "@radix-ui/react-visually-hidden";
|
||||
import {
|
||||
Code2Icon,
|
||||
Link2Icon,
|
||||
LinkIcon,
|
||||
MailIcon,
|
||||
QrCodeIcon,
|
||||
Settings,
|
||||
@@ -22,7 +22,6 @@ import { DynamicPopupTab } from "@/app/(app)/environments/[environmentId]/survey
|
||||
import { EmailTab } from "@/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/shareEmbedModal/email-tab";
|
||||
import { LinkSettingsTab } from "@/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/shareEmbedModal/link-settings-tab";
|
||||
import { PersonalLinksTab } from "@/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/shareEmbedModal/personal-links-tab";
|
||||
import { PrettyUrlTab } from "@/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/shareEmbedModal/pretty-url-tab";
|
||||
import { QRCodeTab } from "@/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/shareEmbedModal/qr-code-tab";
|
||||
import { SocialMediaTab } from "@/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/shareEmbedModal/social-media-tab";
|
||||
import { TabContainer } from "@/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/shareEmbedModal/tab-container";
|
||||
@@ -81,13 +80,13 @@ export const ShareSurveyModal = ({
|
||||
componentType: React.ComponentType<unknown>;
|
||||
componentProps: unknown;
|
||||
disabled?: boolean;
|
||||
}[] = useMemo(() => {
|
||||
const tabs = [
|
||||
}[] = useMemo(
|
||||
() => [
|
||||
{
|
||||
id: ShareViaType.ANON_LINKS,
|
||||
type: LinkTabsType.SHARE_VIA,
|
||||
label: t("environments.surveys.share.anonymous_links.nav_title"),
|
||||
icon: Link2Icon,
|
||||
icon: LinkIcon,
|
||||
title: t("environments.surveys.share.anonymous_links.nav_title"),
|
||||
description: t("environments.surveys.share.anonymous_links.description"),
|
||||
componentType: AnonymousLinksTab,
|
||||
@@ -181,33 +180,22 @@ export const ShareSurveyModal = ({
|
||||
componentType: LinkSettingsTab,
|
||||
componentProps: { isReadOnly, locale: user.locale, isStorageConfigured },
|
||||
},
|
||||
{
|
||||
id: ShareSettingsType.PRETTY_URL,
|
||||
type: LinkTabsType.SHARE_SETTING,
|
||||
label: t("environments.surveys.share.pretty_url.title"),
|
||||
icon: Link2Icon,
|
||||
title: t("environments.surveys.share.pretty_url.title"),
|
||||
description: t("environments.surveys.share.pretty_url.description"),
|
||||
componentType: PrettyUrlTab,
|
||||
componentProps: { publicDomain, isReadOnly },
|
||||
},
|
||||
];
|
||||
|
||||
return isFormbricksCloud ? tabs.filter((tab) => tab.id !== ShareSettingsType.PRETTY_URL) : tabs;
|
||||
}, [
|
||||
t,
|
||||
survey,
|
||||
publicDomain,
|
||||
user.locale,
|
||||
surveyUrl,
|
||||
isReadOnly,
|
||||
environmentId,
|
||||
segments,
|
||||
isContactsEnabled,
|
||||
isFormbricksCloud,
|
||||
email,
|
||||
isStorageConfigured,
|
||||
]);
|
||||
],
|
||||
[
|
||||
t,
|
||||
survey,
|
||||
publicDomain,
|
||||
user.locale,
|
||||
surveyUrl,
|
||||
isReadOnly,
|
||||
environmentId,
|
||||
segments,
|
||||
isContactsEnabled,
|
||||
isFormbricksCloud,
|
||||
email,
|
||||
isStorageConfigured,
|
||||
]
|
||||
);
|
||||
|
||||
const getDefaultActiveId = useCallback(() => {
|
||||
if (survey.type !== "link") {
|
||||
|
||||
@@ -163,7 +163,7 @@ export const AppTab = () => {
|
||||
</AlertDescription>
|
||||
{!environment.appSetupCompleted && (
|
||||
<AlertButton asChild>
|
||||
<Link href={`/environments/${environment.id}/workspace/app-connection`}>
|
||||
<Link href={`/environments/${environment.id}/project/app-connection`}>
|
||||
{t("common.connect_formbricks")}
|
||||
</Link>
|
||||
</AlertButton>
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
"use client";
|
||||
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { Input } from "@/modules/ui/components/input";
|
||||
|
||||
interface PrettyUrlInputProps {
|
||||
value: string;
|
||||
onChange: (value: string) => void;
|
||||
publicDomain: string;
|
||||
disabled?: boolean;
|
||||
}
|
||||
|
||||
export const PrettyUrlInput = ({ value, onChange, publicDomain, disabled = false }: PrettyUrlInputProps) => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
return (
|
||||
<div className="flex items-center overflow-hidden rounded-md border border-slate-300 bg-white">
|
||||
<span className="flex-shrink-0 border-r border-slate-300 bg-slate-50 px-3 py-2 text-sm text-slate-600">
|
||||
{publicDomain}/p/
|
||||
</span>
|
||||
<Input
|
||||
type="text"
|
||||
value={value}
|
||||
onChange={(e) => onChange(e.target.value.toLowerCase().replaceAll(/[^a-z0-9-]/g, ""))}
|
||||
placeholder={t("environments.surveys.share.pretty_url.slug_placeholder")}
|
||||
disabled={disabled}
|
||||
className="border-0 bg-white focus-visible:ring-0 focus-visible:ring-offset-0"
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
@@ -1,194 +0,0 @@
|
||||
"use client";
|
||||
|
||||
import { Copy, Trash2 } from "lucide-react";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useEffect, useMemo, useState } from "react";
|
||||
import { useForm } from "react-hook-form";
|
||||
import toast from "react-hot-toast";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useSurvey } from "@/app/(app)/environments/[environmentId]/surveys/[surveyId]/context/survey-context";
|
||||
import { getFormattedErrorMessage } from "@/lib/utils/helper";
|
||||
import { removeSurveySlugAction, updateSurveySlugAction } from "@/modules/survey/slug/actions";
|
||||
import { Button } from "@/modules/ui/components/button";
|
||||
import { DeleteDialog } from "@/modules/ui/components/delete-dialog";
|
||||
import {
|
||||
FormControl,
|
||||
FormDescription,
|
||||
FormField,
|
||||
FormItem,
|
||||
FormLabel,
|
||||
FormProvider,
|
||||
} from "@/modules/ui/components/form";
|
||||
import { PrettyUrlInput } from "./pretty-url-input";
|
||||
|
||||
interface PrettyUrlTabProps {
|
||||
publicDomain: string;
|
||||
isReadOnly?: boolean;
|
||||
}
|
||||
|
||||
interface PrettyUrlFormData {
|
||||
slug: string;
|
||||
}
|
||||
|
||||
export const PrettyUrlTab = ({ publicDomain, isReadOnly = false }: PrettyUrlTabProps) => {
|
||||
const { t } = useTranslation();
|
||||
const router = useRouter();
|
||||
const { survey } = useSurvey();
|
||||
const [isEditing, setIsEditing] = useState(!survey.slug);
|
||||
const [showRemoveDialog, setShowRemoveDialog] = useState(false);
|
||||
const [isSubmitting, setIsSubmitting] = useState(false);
|
||||
|
||||
// Initialize form with current values - memoize to prevent re-initialization
|
||||
const initialFormData = useMemo(() => {
|
||||
return {
|
||||
slug: survey.slug || "",
|
||||
};
|
||||
}, [survey.slug]);
|
||||
|
||||
const form = useForm<PrettyUrlFormData>({
|
||||
defaultValues: initialFormData,
|
||||
});
|
||||
|
||||
const { handleSubmit, reset } = form;
|
||||
|
||||
// Sync isEditing state and form with survey.slug changes
|
||||
useEffect(() => {
|
||||
setIsEditing(!survey.slug);
|
||||
reset({ slug: survey.slug || "" });
|
||||
}, [survey.slug, reset]);
|
||||
|
||||
const onSubmit = async (data: PrettyUrlFormData) => {
|
||||
if (!data.slug.trim()) {
|
||||
toast.error(t("environments.surveys.share.pretty_url.slug_required"));
|
||||
return;
|
||||
}
|
||||
|
||||
setIsSubmitting(true);
|
||||
const result = await updateSurveySlugAction({
|
||||
surveyId: survey.id,
|
||||
slug: data.slug,
|
||||
});
|
||||
|
||||
if (result?.data) {
|
||||
if (result.data.ok) {
|
||||
toast.success(t("environments.surveys.share.pretty_url.save_success"));
|
||||
router.refresh();
|
||||
setIsEditing(false);
|
||||
} else {
|
||||
toast.error(result.data.error.message);
|
||||
}
|
||||
} else {
|
||||
const errorMessage = getFormattedErrorMessage(result);
|
||||
toast.error(errorMessage || "Failed to update slug");
|
||||
}
|
||||
setIsSubmitting(false);
|
||||
};
|
||||
|
||||
const handleEdit = () => {
|
||||
setIsEditing(true);
|
||||
};
|
||||
|
||||
const handleCancel = () => {
|
||||
reset({ slug: survey.slug || "" });
|
||||
setIsEditing(false);
|
||||
};
|
||||
|
||||
const handleRemove = async () => {
|
||||
setIsSubmitting(true);
|
||||
|
||||
const result = await removeSurveySlugAction({ surveyId: survey.id });
|
||||
|
||||
if (result?.data) {
|
||||
if (result.data.ok) {
|
||||
setShowRemoveDialog(false);
|
||||
reset({ slug: "" });
|
||||
router.refresh();
|
||||
setIsEditing(true);
|
||||
toast.success(t("environments.surveys.share.pretty_url.remove_success"));
|
||||
} else {
|
||||
toast.error(result.data.error.message);
|
||||
}
|
||||
} else {
|
||||
const errorMessage = getFormattedErrorMessage(result);
|
||||
toast.error(errorMessage || "Failed to remove slug");
|
||||
}
|
||||
setIsSubmitting(false);
|
||||
};
|
||||
|
||||
const handleCopyUrl = () => {
|
||||
if (!survey.slug) return;
|
||||
const prettyUrl = `${publicDomain}/p/${survey.slug}`;
|
||||
navigator.clipboard.writeText(prettyUrl);
|
||||
toast.success(t("common.copied_to_clipboard"));
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="px-1">
|
||||
<FormProvider {...form}>
|
||||
<form onSubmit={handleSubmit(onSubmit)} className="space-y-6">
|
||||
<FormField
|
||||
control={form.control}
|
||||
name="slug"
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>{t("environments.surveys.share.pretty_url.slug_label")}</FormLabel>
|
||||
<FormControl>
|
||||
<PrettyUrlInput
|
||||
value={field.value}
|
||||
onChange={field.onChange}
|
||||
publicDomain={publicDomain}
|
||||
disabled={isReadOnly || !isEditing}
|
||||
/>
|
||||
</FormControl>
|
||||
<FormDescription>{t("environments.surveys.share.pretty_url.slug_help")}</FormDescription>
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
|
||||
<div className="flex gap-2">
|
||||
{isEditing ? (
|
||||
<>
|
||||
<Button type="submit" disabled={isReadOnly || isSubmitting}>
|
||||
{t("common.save")}
|
||||
</Button>
|
||||
{survey.slug && (
|
||||
<Button type="button" variant="secondary" onClick={handleCancel} disabled={isSubmitting}>
|
||||
{t("common.cancel")}
|
||||
</Button>
|
||||
)}
|
||||
</>
|
||||
) : (
|
||||
<Button type="button" variant="secondary" onClick={handleEdit} disabled={isReadOnly}>
|
||||
{t("common.edit")}
|
||||
</Button>
|
||||
)}
|
||||
|
||||
{survey.slug && !isEditing && (
|
||||
<>
|
||||
<Button type="button" variant="default" onClick={handleCopyUrl} disabled={isReadOnly}>
|
||||
<Copy className="mr-2 h-4 w-4" />
|
||||
{t("common.copy")} URL
|
||||
</Button>
|
||||
<Button
|
||||
type="button"
|
||||
variant="destructive"
|
||||
onClick={() => setShowRemoveDialog(true)}
|
||||
disabled={isReadOnly}>
|
||||
<Trash2 className="mr-2 h-4 w-4" />
|
||||
{t("common.remove")}
|
||||
</Button>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
</form>
|
||||
</FormProvider>
|
||||
|
||||
<DeleteDialog
|
||||
open={showRemoveDialog}
|
||||
setOpen={setShowRemoveDialog}
|
||||
deleteWhat={t("environments.surveys.share.pretty_url.title")}
|
||||
onDelete={handleRemove}
|
||||
text={t("environments.surveys.share.pretty_url.remove_description")}></DeleteDialog>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
@@ -66,7 +66,7 @@ export const SuccessView: React.FC<SuccessViewProps> = ({
|
||||
className="relative flex flex-col items-center gap-3 rounded-lg border border-slate-100 bg-white p-4 text-center text-sm text-slate-900 hover:border-slate-200 md:p-8">
|
||||
<UserIcon className="h-8 w-8 stroke-1 text-slate-900" />
|
||||
{t("environments.surveys.summary.use_personal_links")}
|
||||
<Badge size="normal" type="success" className="absolute top-3 right-3" text={t("common.new")} />
|
||||
<Badge size="normal" type="success" className="absolute right-3 top-3" text={t("common.new")} />
|
||||
</button>
|
||||
<Link
|
||||
href={`/environments/${environmentId}/settings/notifications`}
|
||||
@@ -75,7 +75,7 @@ export const SuccessView: React.FC<SuccessViewProps> = ({
|
||||
{t("environments.surveys.summary.configure_alerts")}
|
||||
</Link>
|
||||
<Link
|
||||
href={`/environments/${environmentId}/workspace/integrations`}
|
||||
href={`/environments/${environmentId}/project/integrations`}
|
||||
className="flex flex-col items-center gap-3 rounded-lg border border-slate-100 bg-white p-4 text-center text-sm text-slate-900 hover:border-slate-200 md:p-8">
|
||||
<BlocksIcon className="h-8 w-8 stroke-1 text-slate-900" />
|
||||
{t("environments.surveys.summary.setup_integrations")}
|
||||
|
||||
@@ -12,7 +12,6 @@ export enum ShareViaType {
|
||||
|
||||
export enum ShareSettingsType {
|
||||
LINK_SETTINGS = "link-settings",
|
||||
PRETTY_URL = "pretty-url",
|
||||
}
|
||||
|
||||
export enum LinkTabsType {
|
||||
|
||||
@@ -64,7 +64,7 @@ export const GET = async (req: Request) => {
|
||||
const result = await createOrUpdateIntegration(environmentId, googleSheetIntegration);
|
||||
if (result) {
|
||||
return Response.redirect(
|
||||
`${WEBAPP_URL}/environments/${environmentId}/workspace/integrations/google-sheets`
|
||||
`${WEBAPP_URL}/environments/${environmentId}/project/integrations/google-sheets`
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ export const GET = withV1ApiWrapper({
|
||||
await createOrUpdateIntegration(environmentId, airtableIntegrationInput);
|
||||
return {
|
||||
response: Response.redirect(
|
||||
`${WEBAPP_URL}/environments/${environmentId}/workspace/integrations/airtable`
|
||||
`${WEBAPP_URL}/environments/${environmentId}/project/integrations/airtable`
|
||||
),
|
||||
};
|
||||
} catch (error) {
|
||||
|
||||
@@ -87,14 +87,14 @@ export const GET = withV1ApiWrapper({
|
||||
if (result) {
|
||||
return {
|
||||
response: Response.redirect(
|
||||
`${WEBAPP_URL}/environments/${environmentId}/workspace/integrations/notion`
|
||||
`${WEBAPP_URL}/environments/${environmentId}/project/integrations/notion`
|
||||
),
|
||||
};
|
||||
}
|
||||
} else if (error) {
|
||||
return {
|
||||
response: Response.redirect(
|
||||
`${WEBAPP_URL}/environments/${environmentId}/workspace/integrations/notion?error=${error}`
|
||||
`${WEBAPP_URL}/environments/${environmentId}/project/integrations/notion?error=${error}`
|
||||
),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -94,14 +94,14 @@ export const GET = withV1ApiWrapper({
|
||||
if (result) {
|
||||
return {
|
||||
response: Response.redirect(
|
||||
`${WEBAPP_URL}/environments/${environmentId}/workspace/integrations/slack`
|
||||
`${WEBAPP_URL}/environments/${environmentId}/project/integrations/slack`
|
||||
),
|
||||
};
|
||||
}
|
||||
} else if (error) {
|
||||
return {
|
||||
response: Response.redirect(
|
||||
`${WEBAPP_URL}/environments/${environmentId}/workspace/integrations/slack?error=${error}`
|
||||
`${WEBAPP_URL}/environments/${environmentId}/project/integrations/slack?error=${error}`
|
||||
),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -4915,6 +4915,5 @@ export const previewSurvey = (projectName: string, t: TFunction): TSurvey => {
|
||||
isBackButtonHidden: false,
|
||||
metadata: {},
|
||||
questions: [], // Required for build-time type checking (Zod defaults to [] at runtime)
|
||||
slug: null,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
import { LinkSurveyNotFound } from "@/modules/survey/link/not-found";
|
||||
|
||||
export default function NotFound() {
|
||||
return <LinkSurveyNotFound />;
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
import { notFound, redirect } from "next/navigation";
|
||||
import { IS_FORMBRICKS_CLOUD } from "@/lib/constants";
|
||||
import { getSurveyBySlug } from "@/modules/survey/lib/slug";
|
||||
|
||||
interface PrettyUrlPageProps {
|
||||
params: Promise<{ slug: string }>;
|
||||
searchParams: Promise<Record<string, string | string[] | undefined>>;
|
||||
}
|
||||
|
||||
export default async function PrettyUrlPage(props: PrettyUrlPageProps) {
|
||||
const { slug } = await props.params;
|
||||
const searchParams = await props.searchParams;
|
||||
|
||||
if (IS_FORMBRICKS_CLOUD) {
|
||||
return notFound();
|
||||
}
|
||||
|
||||
const result = await getSurveyBySlug(slug);
|
||||
if (!result.ok || !result.data) {
|
||||
return notFound();
|
||||
}
|
||||
|
||||
const survey = result.data;
|
||||
|
||||
// Preserve query params (suId, lang, etc.)
|
||||
const queryString = new URLSearchParams(
|
||||
Object.entries(searchParams).filter(([_, v]) => v !== undefined) as [string, string][]
|
||||
).toString();
|
||||
|
||||
const baseUrl = `/s/${survey.id}`;
|
||||
const redirectUrl = queryString ? `${baseUrl}?${queryString}` : baseUrl;
|
||||
|
||||
redirect(redirectUrl);
|
||||
}
|
||||
@@ -66,7 +66,7 @@ const Page = async () => {
|
||||
|
||||
if (!firstProductionEnvironmentId) {
|
||||
if (isOwner || isManager) {
|
||||
return redirect(`/organizations/${userOrganizations[0].id}/workspaces/new/mode`);
|
||||
return redirect(`/organizations/${userOrganizations[0].id}/projects/new/mode`);
|
||||
} else {
|
||||
return redirect(`/organizations/${userOrganizations[0].id}/landing`);
|
||||
}
|
||||
|
||||
@@ -18,8 +18,7 @@
|
||||
"zh-Hant-TW",
|
||||
"nl-NL",
|
||||
"es-ES",
|
||||
"sv-SE",
|
||||
"ru-RU"
|
||||
"sv-SE"
|
||||
]
|
||||
},
|
||||
"version": 1.8
|
||||
|
||||
@@ -94,9 +94,9 @@ checksums:
|
||||
common/add_filter: ed5d8e9bfcb05cd1e10e4c403befbae6
|
||||
common/add_logo: c8665aa9afd0d5a13528bdc96daefa53
|
||||
common/add_member: 11979625770516ca287e929381778e02
|
||||
common/add_new_workspace: 6571cc8952d3c9a017c51cb842965d57
|
||||
common/add_new_project: 80e83b2059d1f727d68919a93b55a397
|
||||
common/add_project: b9188094aece9060064ce9b03b393f74
|
||||
common/add_to_team: 81ea05d21e72679f58a5bc77f6077ba1
|
||||
common/add_workspace: 17b0856283b433b848ce9bf4c03c6ae5
|
||||
common/all: 5e2e93f8e2a5f315b6fecdd0a0e6f55f
|
||||
common/all_questions: e13634cf510cc6e89b65a6394ea96a21
|
||||
common/allow: 3e39cc5940255e6bff0fea95c817dd43
|
||||
@@ -121,7 +121,7 @@ checksums:
|
||||
common/choices: 8a7a77a71ec6eebc363c5dc0f8490a4d
|
||||
common/choose_environment: 5762cd499529815fc3e6a7feea39f90b
|
||||
common/choose_organization: a8f5db68012323bfbb1a0ad0fb194603
|
||||
common/choose_workspace: f9ed22d76c69cc75aa56cf3da3fa6320
|
||||
common/choose_project: e9db88b0ae67498478a1ecb523e50e71
|
||||
common/clear_all: 854be0c051e4a3491a2cdd9dd8c1b4d5
|
||||
common/clear_filters: 8f40ab5af527e4b190da94e7b6221379
|
||||
common/clear_selection: af5d720527735d4253e289400d29ec9e
|
||||
@@ -147,9 +147,9 @@ checksums:
|
||||
common/count_contacts: b1c413a4b06961b71b6aeee95d6775d7
|
||||
common/count_responses: 690118a456c01c5b4d437ae82b50b131
|
||||
common/create_new_organization: 51dae7b33143686ee218abf5bea764a5
|
||||
common/create_project: 606c39c41c8b42373ba02ddf2a928b6c
|
||||
common/create_segment: 9d8291cd4d778b53b73bbc84fd91c181
|
||||
common/create_survey: 1cfbba08d34876566d84b2960054a987
|
||||
common/create_workspace: 2e6718e79964ea5ce22d76c2189c77ca
|
||||
common/created: 6045b4ff97fb7dca19ebadfa2e34a700
|
||||
common/created_at: f98a3c3bc73494df9bbc14e4e47a018c
|
||||
common/created_by: 6775c2fa7d495fea48f1ad816daea93b
|
||||
@@ -160,7 +160,6 @@ checksums:
|
||||
common/delete: 8bcf303dd10a645b5baacb02b47d72c9
|
||||
common/description: e17686a22ffad04cc7bb70524ed4478b
|
||||
common/dev_env: e650911d5e19ba256358e0cda154c005
|
||||
common/development: 85211dbb918bda7a6e87649dcfc1b17a
|
||||
common/development_environment_banner: 90aa859c1f43a9c2d9fbc758853d0c20
|
||||
common/disable: 81b754fd7962e0bd9b6ba87f3972e7fc
|
||||
common/disallow: 144b91c92ed07f29ff362fa9edc2e4d0
|
||||
@@ -168,7 +167,6 @@ checksums:
|
||||
common/dismissed: f0e21b3fe28726c577a7238a63cc29c2
|
||||
common/docs: 1563fcb5ddb5037b0709ccd3dd384a92
|
||||
common/documentation: 1563fcb5ddb5037b0709ccd3dd384a92
|
||||
common/domain: 402d46965eacc3af4c5df92e53e95712
|
||||
common/download: 56b7d0834952b39ee394b44bd8179178
|
||||
common/draft: e8a92958ad300aacfe46c2bf6644927e
|
||||
common/duplicate: 27756566785c2b8463e21582c4bb619b
|
||||
@@ -178,7 +176,6 @@ checksums:
|
||||
common/ending_card: 16d30d3a36472159da8c2dbd374dfe22
|
||||
common/enter_url: 468c2276d0f2cb971ff5a47a20fa4b97
|
||||
common/enterprise_license: e81bf506f47968870c7bd07245648a0d
|
||||
common/environment: 0844e8dc1485339c8de066dc0a9bb6a1
|
||||
common/environment_not_found: 4d7610bdb55a8b5e6131bb5b08ce04c5
|
||||
common/environment_notice: 0a860e3fa89407726dd8a2083a6b7fd5
|
||||
common/error: 3c95bcb32c2104b99a46f5b3dd015248
|
||||
@@ -189,7 +186,7 @@ checksums:
|
||||
common/expand_rows: b6e06327cb8718dfd6651720843e4dad
|
||||
common/failed_to_copy_to_clipboard: de836a7d628d36c832809252f188f784
|
||||
common/failed_to_load_organizations: 512808a2b674c7c28bca73f8f91fd87e
|
||||
common/failed_to_load_workspaces: 6ee3448097394517dc605074cd4e6ea4
|
||||
common/failed_to_load_projects: 0bba9f9b2b38c189706a486a1bb134c3
|
||||
common/finish: ffa7a10f71182b48fefed7135bee24fa
|
||||
common/follow_these: 3a730b242bb17a3f95e01bf0dae86885
|
||||
common/formbricks_version: d9967c797f3e49ca0cae78bc0ebd19cb
|
||||
@@ -297,10 +294,17 @@ checksums:
|
||||
common/preview_survey: 7409e9c118e3e5d5f2a86201c2b354f2
|
||||
common/privacy: 7459744a63ef8af4e517a09024bd7c08
|
||||
common/product_manager: dfeadc96e6d3de22a884ee97974b505e
|
||||
common/production: 226e0ce83b49700bc1b1c08c4c3ed23a
|
||||
common/profile: d7878693f91303a438852d617f6d35df
|
||||
common/profile_id: 0ef1286cce9d47b148e9a09deccb6655
|
||||
common/progress: dd0200d5849ebb7d64c15098ae91d229
|
||||
common/project_configuration: 252b62ea7dbccf752837dcea3cc306c6
|
||||
common/project_creation_description: 2c488ade53bcd4f2bb68f4fd2479e135
|
||||
common/project_id: a61075236b7d84c0fd9ec257e93d193d
|
||||
common/project_name: dd546200ce6ed6eab0675a2324498b34
|
||||
common/project_name_placeholder: 8a9e30ab01666af13c44a73b82c37ec1
|
||||
common/project_not_found: be3b516c02b05553acb4ae338511f645
|
||||
common/project_permission_not_found: ace6b03f06bd14e884e4295c5022d61b
|
||||
common/projects: fe8af5cfb3c95cb35534872a325b225e
|
||||
common/question: 2a47e06b62410b16003c4979dee0099f
|
||||
common/question_id: d0c3672976c281411bdccf749faf5ffd
|
||||
common/questions: 38d08215fd7a8026077c7b64eea6bb59
|
||||
@@ -389,7 +393,7 @@ checksums:
|
||||
common/top_right: 241f95c923846911aaf13af6109333e5
|
||||
common/try_again: 33dd8820e743e35a66e6977f69e9d3b5
|
||||
common/type: f04471a7ddac844b9ad145eb9911ef75
|
||||
common/unlock_more_workspaces_with_a_higher_plan: fe1590075b855bb4306c9388b65143b0
|
||||
common/unlock_more_projects_with_a_higher_plan: 97975218b01024f3023f3f791fd11887
|
||||
common/update: 079fc039262fd31b10532929685c2d1b
|
||||
common/updated: 8aa8ff2dc2977ca4b269e80a513100b4
|
||||
common/updated_at: 8fdb85248e591254973403755dcc3724
|
||||
@@ -413,18 +417,10 @@ checksums:
|
||||
common/website_app_survey: 258579927ed3955dcc8e1cbd7f0df17f
|
||||
common/website_survey: 17513d25a07b6361768a15ec622b021b
|
||||
common/welcome_card: 76081ebd5b2e35da9b0f080323704ae7
|
||||
common/workspace_configuration: d0a5812d6a97d7724d565b1017c34387
|
||||
common/workspace_creation_description: aea2f480ba0c54c5cabac72c9c900ddf
|
||||
common/workspace_id: bafef925e1b57b52a69844fdf47aac3c
|
||||
common/workspace_name: 14c04a902a874ab5ddbe9cf369ef0414
|
||||
common/workspace_name_placeholder: 8a9e30ab01666af13c44a73b82c37ec1
|
||||
common/workspace_not_found: 038fb0aaf3570610f4377b9eaed13752
|
||||
common/workspace_permission_not_found: e94bdff8af51175c5767714f82bb4833
|
||||
common/workspaces: 8ba082a84aa35cf851af1cf874b853e2
|
||||
common/you: db2a4a796b70cc1430d1b21f6ffb6dcb
|
||||
common/you_are_downgraded_to_the_community_edition: e3ae56502ff787109cae0997519f628e
|
||||
common/you_are_not_authorised_to_perform_this_action: 49595693c5c119aa213bb7854ddac780
|
||||
common/you_have_reached_your_limit_of_workspace_limit: 54d754c3267036742f23fb05fd3fcc45
|
||||
common/you_have_reached_your_limit_of_project_limit: f0ee61ef349d94eeca4f1dd04d1db88d
|
||||
common/you_have_reached_your_monthly_miu_limit_of: ded62fc6842c707f62622386ca34f71a
|
||||
common/you_have_reached_your_monthly_response_limit_of: 3824db23ecc3dcd2b1787b98ccfdd5f9
|
||||
common/you_will_be_downgraded_to_the_community_edition_on_date: bff35b54c13e2c205dc4c19056261cc0
|
||||
@@ -450,12 +446,14 @@ checksums:
|
||||
emails/forgot_password_email_text: 5100fa2fe2180ded9cb2d89b4f77d2e0
|
||||
emails/hidden_field: 3ed5c58d0ed359e558cdf7bd33606d2d
|
||||
emails/imprint: c4e5f2a1994d3cc5896b200709cc499c
|
||||
emails/invite_accepted_email_heading: 80763c6e4585cd57fa58e4d2d82e6500
|
||||
emails/invite_accepted_email_heading: 6ff6dff269b0f1ac1b73912c9e344343
|
||||
emails/invite_accepted_email_subject: 4f5f2a68c98dd1dd01143fcae3be5562
|
||||
emails/invite_accepted_email_text: 48d792826ab9a97eed27599c17ec70d5
|
||||
emails/invite_accepted_email_text_par1: b27eadc4779c9fa477103d136a6acab9
|
||||
emails/invite_accepted_email_text_par2: c77209b510baf0415264fdb5ab8076a8
|
||||
emails/invite_email_button_label: 02099d40cd11e717c0431fa43e68272c
|
||||
emails/invite_email_heading: d9f9b18e4de575980de3cde3e4ed08bf
|
||||
emails/invite_email_text: 1499fa615105121a133440929b039a64
|
||||
emails/invite_email_heading: 6ff6dff269b0f1ac1b73912c9e344343
|
||||
emails/invite_email_text_par1: 70b976a3d4a5509f6d905f9f3f962ada
|
||||
emails/invite_email_text_par2: 14da6da9fdbc21a1cb38988abac7932d
|
||||
emails/invite_member_email_subject: 295e329b1642339dc7cc2b49a687e1f8
|
||||
emails/new_email_verification_text: b7f00f47d04afa9e872176d9933f2d93
|
||||
emails/number_variable: d4f2bbb1965c791cf9921a5112914f3f
|
||||
@@ -728,6 +726,130 @@ checksums:
|
||||
environments/integrations/webhooks/webhook_url_placeholder: 5f2f7c074f6797e1506e21ce865219c1
|
||||
environments/integrations/website_or_app_integration_description: d49af190ebc89de0d281bd1434bd4008
|
||||
environments/integrations/zapier_integration_description: b8304da62a2490eced5ae50038d34e39
|
||||
environments/project/api_keys/add_api_key: 3c7633bae18a6e19af7a5af12f9bc3da
|
||||
environments/project/api_keys/api_key: ce825fec5b3e1f8e27c45b1a63619985
|
||||
environments/project/api_keys/api_key_copied_to_clipboard: daeeac786ba09ffa650e206609b88f9c
|
||||
environments/project/api_keys/api_key_created: 8dbb2b60a719b0d120e774d6666c8c45
|
||||
environments/project/api_keys/api_key_deleted: 6b63d1a15bea4b41acdd8432e680751a
|
||||
environments/project/api_keys/api_key_label: 66e9effa26d3dccd76383eb858e18dd4
|
||||
environments/project/api_keys/api_key_security_warning: 8959f73972a79c27e4886c7a40e7842e
|
||||
environments/project/api_keys/api_key_updated: 0e03754eb33742b4ee8d5fdad64c9b3f
|
||||
environments/project/api_keys/delete_api_key_confirmation: b2f0342d4e55f0cb244fe121eeeb10a3
|
||||
environments/project/api_keys/duplicate_access: ca60857bc80758977bd9bb30e520f15c
|
||||
environments/project/api_keys/no_api_keys_yet: 829cc32ad4fb0bcafd67f07d50c5fba6
|
||||
environments/project/api_keys/no_env_permissions_found: 97ef49946f3ce15c2ad44dcfd2bce507
|
||||
environments/project/api_keys/organization_access: 96a92fa907b15e0c0e47e33cac15be88
|
||||
environments/project/api_keys/organization_access_description: 773dfeaf6ffbf34dd9a0a3d656a6d83c
|
||||
environments/project/api_keys/permissions: 2160be68b1d6b6577e64634e9feba2ed
|
||||
environments/project/api_keys/project_access: 2c9f8da3ee1ebc2a5fe45786097438ca
|
||||
environments/project/api_keys/secret: f041e5eb96121c8b4f2b8af7e0f83a9b
|
||||
environments/project/api_keys/unable_to_delete_api_key: 1fd76d9a22c5f5f8c241c4891fca8295
|
||||
environments/project/app-connection/app_connection: 778d2305e1a9c8efe91c2c7b4af37ae4
|
||||
environments/project/app-connection/app_connection_description: dde226414bd2265cbd0daf6635efcfdd
|
||||
environments/project/app-connection/cache_update_delay_description: 3368e4a8090b7684117a16c94f0c409c
|
||||
environments/project/app-connection/cache_update_delay_title: 60e4a0fcfbd8850bddf29b5c3f59550c
|
||||
environments/project/app-connection/environment_id: 3dba898b081c18cd4cae131765ef411f
|
||||
environments/project/app-connection/environment_id_description: 8b4a763d069b000cfa1a2025a13df80c
|
||||
environments/project/app-connection/formbricks_sdk_connected: 29e8a40ad6a7fdb5af5ee9451a70a9aa
|
||||
environments/project/app-connection/formbricks_sdk_not_connected: 557c534e665750978ba6edb0eacb428e
|
||||
environments/project/app-connection/formbricks_sdk_not_connected_description: 4ddbacae084238bd0cefeded0fe9dbb9
|
||||
environments/project/app-connection/how_to_setup: 3bad40037f280b47fe6418fcbeb4c717
|
||||
environments/project/app-connection/how_to_setup_description: 2ae5cd9456a8acd3986e3d3678e70ed2
|
||||
environments/project/app-connection/receiving_data: 9f2a48c0b0278861add70b526061264c
|
||||
environments/project/app-connection/recheck: f95f2bbe6990a123d60255c87bdd59f7
|
||||
environments/project/app-connection/sdk_connection_details: 89f2c169fd1604c1df5a834517f1eae1
|
||||
environments/project/app-connection/sdk_connection_details_description: d9b5d06776a139aef6fc8ed53d71bf0a
|
||||
environments/project/app-connection/setup_alert_description: 6d676044d01dc2147731ffab7df6c259
|
||||
environments/project/app-connection/setup_alert_title: 9561cca2b391e0df81e8a982921ff2bb
|
||||
environments/project/app-connection/webapp_url: d64d8cc3c4c4ecce780d94755f7e4de9
|
||||
environments/project/general/cannot_delete_only_project: 24751701a42d8b4d2ba6112a5f642bad
|
||||
environments/project/general/delete_project: e4a2a227105c4ec71e561ab1f140eb26
|
||||
environments/project/general/delete_project_confirmation: 54a4ee78867537e0244c7170453cdb3f
|
||||
environments/project/general/delete_project_name_includes_surveys_responses_people_and_more: 11e9ac5a799fbec22495f92f42c40d98
|
||||
environments/project/general/delete_project_settings_description: 74609281410279b8e0515c5649a3f616
|
||||
environments/project/general/error_saving_project_information: 0354e1db63bc495a3b03d1480618044c
|
||||
environments/project/general/only_owners_or_managers_can_delete_projects: fe5cc6941c53180b2938eaf2b1748e89
|
||||
environments/project/general/project_deleted_successfully: dbedf0f0739b822f3951de4aeb2fc26f
|
||||
environments/project/general/project_name_settings_description: 079c6380ad539543a9aa8772bc1b0fa2
|
||||
environments/project/general/project_name_updated_successfully: f95f70f4a49d451dc0441a51d05a3aa3
|
||||
environments/project/general/recontact_waiting_time: 0566dc710b4b9644e276e311b419c4c0
|
||||
environments/project/general/recontact_waiting_time_settings_description: 8922cde1f95777f9a2747fb4bed57ab5
|
||||
environments/project/general/this_action_cannot_be_undone: 3d8b13374ffd3cefc0f3f7ce077bd9c9
|
||||
environments/project/general/wait_x_days_before_showing_next_survey: d96228788d32ec23dc0d8c8ba77150a6
|
||||
environments/project/general/waiting_period_updated_successfully: fe21f3034e63ed079dc0f9b9b1dfdbdf
|
||||
environments/project/general/whats_your_project_called: 599816573dcb6e5042b69fb276ca942c
|
||||
environments/project/languages/add_language: bf0407850be7b8a56901533bceb4bc64
|
||||
environments/project/languages/alias: 87e592cc48d819d7fdcf4597c1c63e7a
|
||||
environments/project/languages/alias_tooltip: 0f681269a71d46a2d988eedaff31515a
|
||||
environments/project/languages/cannot_remove_language_warning: a21bb501338eacefb5cf013aa107f452
|
||||
environments/project/languages/conflict_between_identifier_and_alias: e1ebeb085c7f336bb17717765392cd9f
|
||||
environments/project/languages/conflict_between_selected_alias_and_another_language: 86aadd7491a620c979819be809a21fea
|
||||
environments/project/languages/delete_language_confirmation: 4f83321fed95d689f7ff3aa47a82ce68
|
||||
environments/project/languages/duplicate_language_or_language_id: 0e17e3794b24e2428ca6ffadae0d08f3
|
||||
environments/project/languages/edit_languages: c9d36f6b28557cc7d54e87c37dc18fdd
|
||||
environments/project/languages/identifier: 7d8ade6b85e96216bcd73adeeeeecd8c
|
||||
environments/project/languages/incomplete_translations: d82908b5725f18f5849c7876ad497ebc
|
||||
environments/project/languages/language: 277fd1a41cc237a437cd1d5e4a80463b
|
||||
environments/project/languages/language_deleted_successfully: 4a805d030491f3fe608d2371b0cfcd83
|
||||
environments/project/languages/languages_updated_successfully: 60de474c99c5059c0458cddd0b016c15
|
||||
environments/project/languages/multi_language_surveys: f4f98855fca2b6e9b72959247adb1bec
|
||||
environments/project/languages/multi_language_surveys_description: 58da8b76c9d0f4d39a315667113a40b9
|
||||
environments/project/languages/no_language_found: 8e3b7f1898d35075ba26f54c4cf9e7b8
|
||||
environments/project/languages/please_select_a_language: d1ed573816cea84641c55ef0d33652ff
|
||||
environments/project/languages/remove_language: 1a64563b0f37109f97b78eddd493e381
|
||||
environments/project/languages/remove_language_from_surveys_to_remove_it_from_project: 24770f0a77fdca2a2a79b3d1c7b36508
|
||||
environments/project/languages/search_items: b54b751c8b075200be579d6c8e58096b
|
||||
environments/project/languages/translate: 59f9803b27e2030ba7323ed239116cf7
|
||||
environments/project/look/add_background_color: 9be512ee1246e32d3958c56097d202d9
|
||||
environments/project/look/add_background_color_description: adb6fcb392862b3d0e9420d9b5405ddb
|
||||
environments/project/look/app_survey_placement: f09cddac6bbb77d4694df223c6edf6b6
|
||||
environments/project/look/app_survey_placement_settings_description: d81bcff7a866a2f83ff76936dbad4770
|
||||
environments/project/look/centered_modal_overlay_color: 1124ba61ee2ecb18a7175ff780dc3b60
|
||||
environments/project/look/email_customization: ae399f381183a4fe0ffd41ab496b5d8f
|
||||
environments/project/look/email_customization_description: 5ccaf1769b2c39d7e87f3a08d056a374
|
||||
environments/project/look/enable_custom_styling: 4774d8fb009c27044aa0191ebcccdcc2
|
||||
environments/project/look/enable_custom_styling_description: c640ce557046d87b2944118dbc7aaffe
|
||||
environments/project/look/failed_to_remove_logo: c3b5aa87d945f7ea83e029d1ee90d310
|
||||
environments/project/look/failed_to_update_logo: f8c9f8fe947f559dc698a3439d73f0c5
|
||||
environments/project/look/formbricks_branding: 98dad6e31b03d235725c4d95065e36ff
|
||||
environments/project/look/formbricks_branding_hidden: fda9ba81f8d7fdaacf8dc1642034e145
|
||||
environments/project/look/formbricks_branding_settings_description: 5bb39206c6412c703895593f465a01f9
|
||||
environments/project/look/formbricks_branding_shown: 6c9861cf8f95e8a68c5c64b2630d96cd
|
||||
environments/project/look/logo_removed_successfully: f3a7f9d226affa91121e90ff360553aa
|
||||
environments/project/look/logo_settings_description: da155953f55cb44d0e563d9e740241aa
|
||||
environments/project/look/logo_updated_successfully: 170250f18062b79be6ac0481ec9d4368
|
||||
environments/project/look/logo_upload_failed: 342624c84a04b891846a5d37e00d2c9f
|
||||
environments/project/look/placement_updated_successfully: 65bdf0cfbf4f7e2430b4e7f5d4d377b5
|
||||
environments/project/look/remove_branding_with_a_higher_plan: ee049340ea6fdc454edfdb0c29eb554b
|
||||
environments/project/look/remove_logo: 7f0eb5e99706a338f3040cae5d724346
|
||||
environments/project/look/remove_logo_confirmation: 386603e03a70672ae515fa6c9b8d6ab4
|
||||
environments/project/look/replace_logo: b69a290f789ae2dfeb067c463482c824
|
||||
environments/project/look/reset_styling: f25db45ece8637d660bd9d455c9b0265
|
||||
environments/project/look/reset_styling_confirmation: 9ebc0403ebb8a51ed93ec2711db85796
|
||||
environments/project/look/show_formbricks_branding_in: 80fabfec9b34a13c0445d02b923216ed
|
||||
environments/project/look/show_powered_by_formbricks: 02b84acc3156de24e1aff8321d77603f
|
||||
environments/project/look/styling_updated_successfully: b8b74b50dde95abcd498633e9d0c891f
|
||||
environments/project/look/theme: 21fe00b7a518089576fb83c08631107a
|
||||
environments/project/look/theme_settings_description: 9fc45322818c3774ab4a44ea14d7836e
|
||||
environments/project/tags/add: 87c4a663507f2bcbbf79934af8164e13
|
||||
environments/project/tags/add_tag: 2cfa04ceea966149f2b5d40d9c131141
|
||||
environments/project/tags/count: 9c5848662eb8024ddf360f7e4001a968
|
||||
environments/project/tags/delete_tag_confirmation: a9fb98064cd156242899643f3d2ef032
|
||||
environments/project/tags/manage_tags: 2761d558b82b6104befbc240ae2379c6
|
||||
environments/project/tags/manage_tags_description: ce7cc42da3646fba960502d7e4e49cd2
|
||||
environments/project/tags/merge: 95051c859b8778be51226b43be6f1075
|
||||
environments/project/tags/no_tag_found: 119c59a4367dfbd7f24a2f967d7f0f35
|
||||
environments/project/tags/search_tags: 35066dce3d12ce93705cb2f5c2ea317d
|
||||
environments/project/tags/tag: 924d12caa9981ef5859395382497d101
|
||||
environments/project/tags/tag_already_exists: 1337fd5cdd04311bfdca4e7538f0a4f3
|
||||
environments/project/tags/tag_deleted: 54fc251117cddad3ca42d10811ce0dde
|
||||
environments/project/tags/tag_updated: 6685fd5cc501b8fb2fb284aa22c2823e
|
||||
environments/project/tags/tags_merged: 544471de666f93fbb0ab600321d1e553
|
||||
environments/project/teams/manage_teams: d7b5f26335cea450c333832adbe0b6ad
|
||||
environments/project/teams/no_teams_found: fb6680d4b5b73731697b100713afb50d
|
||||
environments/project/teams/permission: cc2ed7274bd8267f9e0a10b079584d8b
|
||||
environments/project/teams/team_name: d1a5f99dbf503ca53f06b3a98b511d02
|
||||
environments/project/teams/team_settings_description: da32d77993f5c5c7547cdf3e1d3fc7d5
|
||||
environments/segments/add_filter_below: be9b9c51d4d61903e782fb37931d8905
|
||||
environments/segments/add_your_first_filter_to_get_started: 365f9fc1600e2e44e2502e9ad9fde46a
|
||||
environments/segments/cannot_delete_segment_used_in_surveys: 134200217852566d6743245006737093
|
||||
@@ -784,9 +906,9 @@ checksums:
|
||||
environments/settings/api_keys/add_permission: 4f0481d26a32aef6137ee6f18aaf8e89
|
||||
environments/settings/api_keys/api_keys_description: 42c2d587834d54f124b9541b32ff7133
|
||||
environments/settings/billing/1000_monthly_responses: e8625042bed54209770add138c27b3a5
|
||||
environments/settings/billing/1_workspace: 4528d3e5277b172ef7a42fee7e881781
|
||||
environments/settings/billing/1_project: 233cd44f2fe8aa28ef764b174494937e
|
||||
environments/settings/billing/2000_contacts: af340a4c9297a61b255af65c2a4ee688
|
||||
environments/settings/billing/3_workspaces: 3f76b2f62e426297db3c2942a10c22f8
|
||||
environments/settings/billing/3_projects: 45fc2a4b20b8b35db1bca34653553413
|
||||
environments/settings/billing/5000_monthly_responses: c2f4bf25658af916bbd8331d4bb045b3
|
||||
environments/settings/billing/7500_contacts: eb1344ca1ba3338101087deda33e3383
|
||||
environments/settings/billing/all_integrations: a607324ae2bd67640bf579f9e4092610
|
||||
@@ -799,8 +921,8 @@ checksums:
|
||||
environments/settings/billing/current_tier_limit: a6875905f376953b12fdf5ae8fc7e051
|
||||
environments/settings/billing/custom: fee41bfbe59e71721d8648e7a95ec9c5
|
||||
environments/settings/billing/custom_contacts_limit: 380f13656e3b9e1a6cb3fffd1a1cc263
|
||||
environments/settings/billing/custom_project_limit: 9b9cc824609c476947dfe5b2c39f99ca
|
||||
environments/settings/billing/custom_response_limit: 96ef34d587001a7b479f3f6f7c9e66dc
|
||||
environments/settings/billing/custom_workspace_limit: 3f6f7f901dfc245028ce938e3d9aa2c6
|
||||
environments/settings/billing/email_embedded_surveys: bb1f558f9061287666041c08384ad1d4
|
||||
environments/settings/billing/email_follow_ups: 0cc02dc14aa28ce94ca6153c306924e5
|
||||
environments/settings/billing/enterprise_description: 56832155245afde5f8366fbc97beefaa
|
||||
@@ -827,19 +949,13 @@ checksums:
|
||||
environments/settings/billing/team_access_roles: 1cc4af14e589f6c09ab92a4f21958049
|
||||
environments/settings/billing/unable_to_upgrade_plan: 50fc725609411d139e534c85eeb2879e
|
||||
environments/settings/billing/unlimited_miu: 29c3f5bd01c2a09fdf1d3601665ce90f
|
||||
environments/settings/billing/unlimited_projects: 830c43605aa450f5a412a8248830d95b
|
||||
environments/settings/billing/unlimited_responses: 25bd1cd99bc08c66b8d7d3380b2812e1
|
||||
environments/settings/billing/unlimited_surveys: 7d5766ee0b7ef632a8b36c90b121c0bd
|
||||
environments/settings/billing/unlimited_team_members: b73b1b6ec747f4c2f9cfcca9e883527d
|
||||
environments/settings/billing/unlimited_workspaces: f7433bc693ee6d177e76509277f5c173
|
||||
environments/settings/billing/upgrade: 63c3b52882e0d779859307d672c178c2
|
||||
environments/settings/billing/uptime_sla_99: 25ca4060e575e1a7eee47fceb5576d7c
|
||||
environments/settings/billing/website_surveys: f4d176cc66ffcc2abf44c0d5da1642e3
|
||||
environments/settings/domain/description: f0b4d8c96da816f793cf1f4fdfaade34
|
||||
environments/settings/domain/no_pretty_urls: 2a83d8e399d325fcd4e2db14e45b1a86
|
||||
environments/settings/domain/pretty_url: 10a4b387b6df844245fc842be29527e3
|
||||
environments/settings/domain/survey_name: 169f24df0e2f42254c5458f32eb7bf00
|
||||
environments/settings/domain/title: 2c3a2951a31218e8e73f07cda69ed5ff
|
||||
environments/settings/domain/workspace: b63ef0e99ee6f7fef6cbe4971ca6cf0f
|
||||
environments/settings/enterprise/audit_logs: c7efb33d09676938d07651774b067bf6
|
||||
environments/settings/enterprise/coming_soon: ee2b0671e00972773210c5be5a9ccb89
|
||||
environments/settings/enterprise/contacts_and_segments: 5795d9e89c0c10e1ddbbc6fc65b8d90f
|
||||
@@ -864,13 +980,13 @@ checksums:
|
||||
environments/settings/general/cannot_leave_only_organization: dd8463262e4299fef7ad73512225c55b
|
||||
environments/settings/general/copy_invite_link_to_clipboard: 7af7ad935428a3f9da6b96e2cd211af9
|
||||
environments/settings/general/create_new_organization: 51dae7b33143686ee218abf5bea764a5
|
||||
environments/settings/general/create_new_organization_description: 25d47fa089ae4ef3a963b46e903938c1
|
||||
environments/settings/general/create_new_organization_description: 6d84bf3eb69d09266e314caf75cb6e6c
|
||||
environments/settings/general/customize_email_with_a_higher_plan: 4a58f87cf38c821de2af140a6ad45e35
|
||||
environments/settings/general/delete_member_confirmation: a8ea6d216063fbbc8367ff428a5f2439
|
||||
environments/settings/general/delete_member_confirmation: d497f42203c1a77e99ccf805554e3ed7
|
||||
environments/settings/general/delete_organization: 9f4061cc92673693bb43bbae062051c9
|
||||
environments/settings/general/delete_organization_description: 578e51577840707a7845c9967d5d4010
|
||||
environments/settings/general/delete_organization_description: 8e4c8f44b192fd8cb370aadcad0f9c70
|
||||
environments/settings/general/delete_organization_warning: fcc75b900080d9700ad72ed985072711
|
||||
environments/settings/general/delete_organization_warning_1: ffa4e85d53abffc214c1dff559c0f605
|
||||
environments/settings/general/delete_organization_warning_1: e439bd92dcf74ea2c18f2bd9c599b3f4
|
||||
environments/settings/general/delete_organization_warning_2: 4983371688c70c711b9b04d1e92b9ea8
|
||||
environments/settings/general/delete_organization_warning_3: 2ddf440095276a33077c0dad5e0d8382
|
||||
environments/settings/general/eliminate_branding_with_whitelabel: 2c7c61df65af823fee73f7ae79817b0c
|
||||
@@ -956,10 +1072,10 @@ checksums:
|
||||
environments/settings/profile/warning_cannot_delete_account: 07c25c3829149cd7171e7ad88229deac
|
||||
environments/settings/profile/warning_cannot_undo: dd1b2a59ff244b362d1d0d4eb1dbf7c6
|
||||
environments/settings/teams/add_members_description: 96e1e7125a0dfeaecc2c238eda3a216f
|
||||
environments/settings/teams/add_workspaces_description: f0f0cdd4d1032fbcb83d34a780bdfa52
|
||||
environments/settings/teams/add_projects_description: 4cc88a869322af51c11deb3ef638cce1
|
||||
environments/settings/teams/all_members_added: 0541be1777b5c838f2e039035488506c
|
||||
environments/settings/teams/all_workspaces_added: 50855f316bd80223b638b3cdc0685822
|
||||
environments/settings/teams/are_you_sure_you_want_to_delete_this_team: 9cf027aeee8059e692948f2da4302163
|
||||
environments/settings/teams/all_projects_added: dc0701f74b51236b3ffbbfbb614581d7
|
||||
environments/settings/teams/are_you_sure_you_want_to_delete_this_team: 35c990fa4aecc1851ae7bb333f54529f
|
||||
environments/settings/teams/billing_role_description: dfcfc3730c3dff59b983c5d9c3d6df12
|
||||
environments/settings/teams/bulk_invite: 9c237edb8782df589c25ae1723942bf7
|
||||
environments/settings/teams/contributor: 84febfd6836ddde20b1bd7b0661cc848
|
||||
@@ -975,18 +1091,18 @@ checksums:
|
||||
environments/settings/teams/manage: a3d40c0267b81ae53c9598eaeb05087d
|
||||
environments/settings/teams/manage_team: 4c52e636cfd1451a08179fb7a68042ab
|
||||
environments/settings/teams/manage_team_disabled: 2aaa0557b403a5bc657ec9e8b19ac5ac
|
||||
environments/settings/teams/manager_role_description: 020b8674cc330536239dafe5db087de6
|
||||
environments/settings/teams/manager_role_description: 39846863fa85ff8b1c6e4f354eb5018f
|
||||
environments/settings/teams/member: 1606dc30b369856b9dba1fe9aec425d2
|
||||
environments/settings/teams/member_role_description: 8c2447cb929850b41619988be0b9b1ac
|
||||
environments/settings/teams/member_role_info_message: 511f3b954486f9c8a3b043e498f21c69
|
||||
environments/settings/teams/member_role_description: 1c5deaece65798b74cc0d34525506c18
|
||||
environments/settings/teams/member_role_info_message: 0a276eef3c3b907d6f396ebfdc693b12
|
||||
environments/settings/teams/organization_role: 979b75fcc3696952e5922d659c839c10
|
||||
environments/settings/teams/owner_role_description: 8f577e6f9d1368fed4eba5a91ffc8cbf
|
||||
environments/settings/teams/please_fill_all_member_fields: 60e38d9906ec9a02a44d16c736bd9fe9
|
||||
environments/settings/teams/please_fill_all_workspace_fields: 190fc5d3c63cc5ec49d77f587e619ed8
|
||||
environments/settings/teams/please_fill_all_project_fields: 6712059df63c432ecd31f3c52b8e4d87
|
||||
environments/settings/teams/read: 2494ca23d10e5b6381eb271aceeb5270
|
||||
environments/settings/teams/read_write: 278a90dade128198d4c93ac00c345320
|
||||
environments/settings/teams/select_member: 7f4a38312aabbbe3fe92756b57bd5d75
|
||||
environments/settings/teams/select_workspace: 0ad989c23616c6a04faf23d9e63ed3f3
|
||||
environments/settings/teams/select_project: 6e4f4a24178660851d9ae0874706be9f
|
||||
environments/settings/teams/team_admin: 5df68214685738029af678ae1d5912bb
|
||||
environments/settings/teams/team_created_successfully: 45f83048fcabf466551144858a761eca
|
||||
environments/settings/teams/team_deleted_successfully: 972c86b0abe87f229f7bf1a691c0a253
|
||||
@@ -997,8 +1113,8 @@ checksums:
|
||||
environments/settings/teams/team_settings_description: 686f772f08d864d28cde23b900c9facf
|
||||
environments/settings/teams/team_updated_successfully: 5f769a5073aa0fcaad76f8ba73e17e97
|
||||
environments/settings/teams/teams: b63448c05270497973ac4407047dae02
|
||||
environments/settings/teams/teams_description: b6f5bf0a6ff49f78bad84ad3f8a5a871
|
||||
environments/settings/teams/unlock_teams_description: 0e5de01e914c0919aff3df797f9f7437
|
||||
environments/settings/teams/teams_description: 2ffe6c26ab1d55bb738d89d719e32ed2
|
||||
environments/settings/teams/unlock_teams_description: d57c682c7735dc8a12bb72b2255d4c7a
|
||||
environments/settings/teams/unlock_teams_title: 45b2a27d29d706418fd62540d34a19f3
|
||||
environments/settings/teams/upgrade_plan_notice_message: 305d6f94381482a8df6e72b74b097e99
|
||||
environments/settings/teams/you_are_a_member: 0d13738accc3f85fa99add823a24c102
|
||||
@@ -1251,7 +1367,7 @@ checksums:
|
||||
environments/surveys/edit/how_funky_do_you_want_your_cards_in_survey_type_derived_surveys: 3cb16b37510c01af20a80f51b598346e
|
||||
environments/surveys/edit/if_you_need_more_please: a7d208c283caf6b93800b809fca80768
|
||||
environments/surveys/edit/if_you_really_want_that_answer_ask_until_you_get_it: 31c18a8c7c578db2ba49eed663d1739f
|
||||
environments/surveys/edit/ignore_global_waiting_time: ea58ae981c2d3345b5a4e49e64be19ed
|
||||
environments/surveys/edit/ignore_global_waiting_time: 1e7f1465aeb6d26c325ad7f135b207a8
|
||||
environments/surveys/edit/ignore_global_waiting_time_description: 37d173a4d537622de40677389238d859
|
||||
environments/surveys/edit/image: 048ba7a239de0fbd883ade8558415830
|
||||
environments/surveys/edit/includes_all_of: ec72f90c0839d4c3bb518deb03894031
|
||||
@@ -1325,7 +1441,7 @@ checksums:
|
||||
environments/surveys/edit/options_used_in_logic_bulk_error: 1720e7a01a0bcb67c152cfe6a68c5355
|
||||
environments/surveys/edit/override_theme_with_individual_styles_for_this_survey: edffc97f5d3372419fe0444de0a5aa3f
|
||||
environments/surveys/edit/overwrite_global_waiting_time: 7bc23bd502b6bd048356b67acd956d9d
|
||||
environments/surveys/edit/overwrite_global_waiting_time_description: c5ffe497e889e955f983bc82dbe2da3f
|
||||
environments/surveys/edit/overwrite_global_waiting_time_description: 795cf6e93d4c01d2e43aa0ebab601c6e
|
||||
environments/surveys/edit/overwrite_placement: d7278be243e52c5091974e0fc4a7c342
|
||||
environments/surveys/edit/overwrite_survey_logo: a89cb566dfcc1559446abd8b830c84ed
|
||||
environments/surveys/edit/overwrite_the_global_placement_of_the_survey: 874075712254b1ce92e099d89f675a48
|
||||
@@ -1395,8 +1511,8 @@ checksums:
|
||||
environments/surveys/edit/required: 04d7fb6f37ffe0a6ca97d49e2a8b6eb5
|
||||
environments/surveys/edit/reset_to_theme_styles: f9edc3970ec23d6c4d2d7accc292ef3a
|
||||
environments/surveys/edit/reset_to_theme_styles_main_text: d86fb2213d3b2efbd0361526dc6cb27b
|
||||
environments/surveys/edit/respect_global_waiting_time: e5d80593318c28a25147c2d52ac8e46d
|
||||
environments/surveys/edit/respect_global_waiting_time_description: 6fb317d929507487e76d9b536245c4e8
|
||||
environments/surveys/edit/respect_global_waiting_time: 850e7e64ec890c591b2d07741ef26e11
|
||||
environments/surveys/edit/respect_global_waiting_time_description: 5235fee102d619cb391c5aa2c75b61be
|
||||
environments/surveys/edit/response_limit_can_t_be_set_to_0: 278664873ee3b1046dbcb58848efc12a
|
||||
environments/surveys/edit/response_limit_needs_to_exceed_number_of_received_responses: 9a9c223c0918ded716ddfaa84fbaa8d9
|
||||
environments/surveys/edit/response_limits_redirections_and_more: e4f1cf94e56ad0e1b08701158d688802
|
||||
@@ -1491,12 +1607,12 @@ checksums:
|
||||
environments/surveys/edit/visibility_and_recontact_description: 2969ab679e1f6111dd96e95cee26e219
|
||||
environments/surveys/edit/wait: 014d18ade977bf08d75b995076596708
|
||||
environments/surveys/edit/wait_a_few_seconds_after_the_trigger_before_showing_the_survey: 13d5521cf73be5afeba71f5db5847919
|
||||
environments/surveys/edit/waiting_time_across_surveys: 7ddc00d5a500a646bf5a8adb462248bc
|
||||
environments/surveys/edit/waiting_time_across_surveys_description: 0082297c799b909564cecab095dd14e2
|
||||
environments/surveys/edit/waiting_time_across_surveys: 5c5a7653d797c86c4008f13a40434ad8
|
||||
environments/surveys/edit/waiting_time_across_surveys_description: 1bbee2fee49f842056547c336f8fd788
|
||||
environments/surveys/edit/welcome_message: 986a434e3895c8ee0b267df95cc40051
|
||||
environments/surveys/edit/without_a_filter_all_of_your_users_can_be_surveyed: 451990569c61f25d01044cc45b1ce122
|
||||
environments/surveys/edit/you_have_not_created_a_segment_yet: c6658bd1cee9c5c957c675db044708dd
|
||||
environments/surveys/edit/you_need_to_have_two_or_more_languages_set_up_in_your_workspace_to_work_with_translations: 04241177ba989ef4c1d8c01e1a7b8541
|
||||
environments/surveys/edit/you_need_to_have_two_or_more_languages_set_up_in_your_project_to_work_with_translations: b12b28699e02ff9ba69bcbae838ba5da
|
||||
environments/surveys/edit/your_description_here_recall_information_with: 60f73a3cc9bdb9afea2166a7db8fd618
|
||||
environments/surveys/edit/your_question_here_recall_information_with: 6395bd54f5167830c9d662ba403da167
|
||||
environments/surveys/edit/your_web_app: 07234bed03a33330dc50ae9fcf0174f3
|
||||
@@ -1608,15 +1724,6 @@ checksums:
|
||||
environments/surveys/share/personal_links/upgrade_prompt_description: 09f394f5adf2d5a47352ceb80b43598b
|
||||
environments/surveys/share/personal_links/upgrade_prompt_title: 8068b8c5b27268ec4d804a9c7d153a8f
|
||||
environments/surveys/share/personal_links/work_with_segments: 45030e61077c88ae60f011b40566d5d1
|
||||
environments/surveys/share/pretty_url/description: 67173cfc7010ab044428a22f5a4bdaa2
|
||||
environments/surveys/share/pretty_url/remove_description: 7fb0afcb17447101ed4aa6aaffc6e136
|
||||
environments/surveys/share/pretty_url/remove_success: a4a08113d3d4c53889da7c12a0674473
|
||||
environments/surveys/share/pretty_url/save_success: e73e6e0adc93e0db723c765fbef7d82a
|
||||
environments/surveys/share/pretty_url/slug_help: 3c81237bfb50f41b9e0525e9a2754b9d
|
||||
environments/surveys/share/pretty_url/slug_label: b1cc25b6bf5032c75420aa862362808c
|
||||
environments/surveys/share/pretty_url/slug_placeholder: e9266ae26c4993ef285a5b1a927e52a5
|
||||
environments/surveys/share/pretty_url/slug_required: 9f1c28ff24a3507588c7c3710ae0b073
|
||||
environments/surveys/share/pretty_url/title: 10a4b387b6df844245fc842be29527e3
|
||||
environments/surveys/share/send_email/copy_embed_code: 04833baca1ed64dee8fc230462965d2d
|
||||
environments/surveys/share/send_email/description: 875935d1d039fc5dd2de7b2a25008796
|
||||
environments/surveys/share/send_email/email_preview_tab: 84458b39d3fd3bebb92de0e81d41b7da
|
||||
@@ -1745,130 +1852,6 @@ checksums:
|
||||
environments/surveys/templates/multiple_industries: 7dcb6f6d87feb08f8004dfb5a91e711f
|
||||
environments/surveys/templates/use_this_template: 69020c8b5a521b8f027616bb5c4b64dd
|
||||
environments/surveys/templates/uses_branching_logic: 7ac087d7067d342c17809d4ce497dfe0
|
||||
environments/workspace/api_keys/add_api_key: 3c7633bae18a6e19af7a5af12f9bc3da
|
||||
environments/workspace/api_keys/api_key: ce825fec5b3e1f8e27c45b1a63619985
|
||||
environments/workspace/api_keys/api_key_copied_to_clipboard: daeeac786ba09ffa650e206609b88f9c
|
||||
environments/workspace/api_keys/api_key_created: 8dbb2b60a719b0d120e774d6666c8c45
|
||||
environments/workspace/api_keys/api_key_deleted: 6b63d1a15bea4b41acdd8432e680751a
|
||||
environments/workspace/api_keys/api_key_label: 66e9effa26d3dccd76383eb858e18dd4
|
||||
environments/workspace/api_keys/api_key_security_warning: 8959f73972a79c27e4886c7a40e7842e
|
||||
environments/workspace/api_keys/api_key_updated: 0e03754eb33742b4ee8d5fdad64c9b3f
|
||||
environments/workspace/api_keys/delete_api_key_confirmation: b2f0342d4e55f0cb244fe121eeeb10a3
|
||||
environments/workspace/api_keys/duplicate_access: 7ac7ac5ba755ce94e6fc81afa5a21997
|
||||
environments/workspace/api_keys/no_api_keys_yet: 829cc32ad4fb0bcafd67f07d50c5fba6
|
||||
environments/workspace/api_keys/no_env_permissions_found: 97ef49946f3ce15c2ad44dcfd2bce507
|
||||
environments/workspace/api_keys/organization_access: 96a92fa907b15e0c0e47e33cac15be88
|
||||
environments/workspace/api_keys/organization_access_description: 773dfeaf6ffbf34dd9a0a3d656a6d83c
|
||||
environments/workspace/api_keys/permissions: 2160be68b1d6b6577e64634e9feba2ed
|
||||
environments/workspace/api_keys/secret: f041e5eb96121c8b4f2b8af7e0f83a9b
|
||||
environments/workspace/api_keys/unable_to_delete_api_key: 1fd76d9a22c5f5f8c241c4891fca8295
|
||||
environments/workspace/api_keys/workspace_access: b38cb73197ef5f5fa6653b88c68aa0bd
|
||||
environments/workspace/app-connection/app_connection: 778d2305e1a9c8efe91c2c7b4af37ae4
|
||||
environments/workspace/app-connection/app_connection_description: dde226414bd2265cbd0daf6635efcfdd
|
||||
environments/workspace/app-connection/cache_update_delay_description: 3368e4a8090b7684117a16c94f0c409c
|
||||
environments/workspace/app-connection/cache_update_delay_title: 60e4a0fcfbd8850bddf29b5c3f59550c
|
||||
environments/workspace/app-connection/environment_id: 3dba898b081c18cd4cae131765ef411f
|
||||
environments/workspace/app-connection/environment_id_description: 8b4a763d069b000cfa1a2025a13df80c
|
||||
environments/workspace/app-connection/formbricks_sdk_connected: 29e8a40ad6a7fdb5af5ee9451a70a9aa
|
||||
environments/workspace/app-connection/formbricks_sdk_not_connected: 557c534e665750978ba6edb0eacb428e
|
||||
environments/workspace/app-connection/formbricks_sdk_not_connected_description: 4ddbacae084238bd0cefeded0fe9dbb9
|
||||
environments/workspace/app-connection/how_to_setup: 3bad40037f280b47fe6418fcbeb4c717
|
||||
environments/workspace/app-connection/how_to_setup_description: 2ae5cd9456a8acd3986e3d3678e70ed2
|
||||
environments/workspace/app-connection/receiving_data: 9f2a48c0b0278861add70b526061264c
|
||||
environments/workspace/app-connection/recheck: f95f2bbe6990a123d60255c87bdd59f7
|
||||
environments/workspace/app-connection/sdk_connection_details: 89f2c169fd1604c1df5a834517f1eae1
|
||||
environments/workspace/app-connection/sdk_connection_details_description: d9b5d06776a139aef6fc8ed53d71bf0a
|
||||
environments/workspace/app-connection/setup_alert_description: 6d676044d01dc2147731ffab7df6c259
|
||||
environments/workspace/app-connection/setup_alert_title: 9561cca2b391e0df81e8a982921ff2bb
|
||||
environments/workspace/app-connection/webapp_url: d64d8cc3c4c4ecce780d94755f7e4de9
|
||||
environments/workspace/general/cannot_delete_only_workspace: 853f32a75d92b06eaccc0d43d767c183
|
||||
environments/workspace/general/delete_workspace: 3badbc0f4b49644986fc19d8b2d8f317
|
||||
environments/workspace/general/delete_workspace_confirmation: 54a4ee78867537e0244c7170453cdb3f
|
||||
environments/workspace/general/delete_workspace_name_includes_surveys_responses_people_and_more: 11e9ac5a799fbec22495f92f42c40d98
|
||||
environments/workspace/general/delete_workspace_settings_description: 411ef100f167fc8fca64e833b6c0d030
|
||||
environments/workspace/general/error_saving_workspace_information: e7b8022785619ef34de1fb1630b3c476
|
||||
environments/workspace/general/only_owners_or_managers_can_delete_workspaces: 58da180cd2610210302d85a9896d80bd
|
||||
environments/workspace/general/recontact_waiting_time: eb6b91b5cc4eeb7213d991492372ee13
|
||||
environments/workspace/general/recontact_waiting_time_settings_description: 8922cde1f95777f9a2747fb4bed57ab5
|
||||
environments/workspace/general/this_action_cannot_be_undone: 3d8b13374ffd3cefc0f3f7ce077bd9c9
|
||||
environments/workspace/general/wait_x_days_before_showing_next_survey: d96228788d32ec23dc0d8c8ba77150a6
|
||||
environments/workspace/general/waiting_period_updated_successfully: fe21f3034e63ed079dc0f9b9b1dfdbdf
|
||||
environments/workspace/general/whats_your_workspace_called: bcc29ba97a90f656cf8f516d725ddc95
|
||||
environments/workspace/general/workspace_deleted_successfully: 5eb380fdb741034a479644b5e7547099
|
||||
environments/workspace/general/workspace_name_settings_description: d7fe4ab1709df12d540d7e57710fb4f0
|
||||
environments/workspace/general/workspace_name_updated_successfully: ea244cd17b6644e05dbc89374ad0687a
|
||||
environments/workspace/languages/add_language: bf0407850be7b8a56901533bceb4bc64
|
||||
environments/workspace/languages/alias: 87e592cc48d819d7fdcf4597c1c63e7a
|
||||
environments/workspace/languages/alias_tooltip: 0f681269a71d46a2d988eedaff31515a
|
||||
environments/workspace/languages/cannot_remove_language_warning: a21bb501338eacefb5cf013aa107f452
|
||||
environments/workspace/languages/conflict_between_identifier_and_alias: e1ebeb085c7f336bb17717765392cd9f
|
||||
environments/workspace/languages/conflict_between_selected_alias_and_another_language: 3df7377a54909e439e38ec76514e5439
|
||||
environments/workspace/languages/delete_language_confirmation: 4f83321fed95d689f7ff3aa47a82ce68
|
||||
environments/workspace/languages/duplicate_language_or_language_id: 0e17e3794b24e2428ca6ffadae0d08f3
|
||||
environments/workspace/languages/edit_languages: c9d36f6b28557cc7d54e87c37dc18fdd
|
||||
environments/workspace/languages/identifier: 7d8ade6b85e96216bcd73adeeeeecd8c
|
||||
environments/workspace/languages/incomplete_translations: d82908b5725f18f5849c7876ad497ebc
|
||||
environments/workspace/languages/language: 277fd1a41cc237a437cd1d5e4a80463b
|
||||
environments/workspace/languages/language_deleted_successfully: 4a805d030491f3fe608d2371b0cfcd83
|
||||
environments/workspace/languages/languages_updated_successfully: 60de474c99c5059c0458cddd0b016c15
|
||||
environments/workspace/languages/multi_language_surveys: f4f98855fca2b6e9b72959247adb1bec
|
||||
environments/workspace/languages/multi_language_surveys_description: 58da8b76c9d0f4d39a315667113a40b9
|
||||
environments/workspace/languages/no_language_found: 8e3b7f1898d35075ba26f54c4cf9e7b8
|
||||
environments/workspace/languages/please_select_a_language: d1ed573816cea84641c55ef0d33652ff
|
||||
environments/workspace/languages/remove_language: 1a64563b0f37109f97b78eddd493e381
|
||||
environments/workspace/languages/remove_language_from_surveys_to_remove_it_from_workspace: 61bc96f9db31a29a649cc9ecd684bc39
|
||||
environments/workspace/languages/search_items: b54b751c8b075200be579d6c8e58096b
|
||||
environments/workspace/languages/translate: 59f9803b27e2030ba7323ed239116cf7
|
||||
environments/workspace/look/add_background_color: 9be512ee1246e32d3958c56097d202d9
|
||||
environments/workspace/look/add_background_color_description: adb6fcb392862b3d0e9420d9b5405ddb
|
||||
environments/workspace/look/app_survey_placement: f09cddac6bbb77d4694df223c6edf6b6
|
||||
environments/workspace/look/app_survey_placement_settings_description: d81bcff7a866a2f83ff76936dbad4770
|
||||
environments/workspace/look/centered_modal_overlay_color: 1124ba61ee2ecb18a7175ff780dc3b60
|
||||
environments/workspace/look/email_customization: ae399f381183a4fe0ffd41ab496b5d8f
|
||||
environments/workspace/look/email_customization_description: 5ccaf1769b2c39d7e87f3a08d056a374
|
||||
environments/workspace/look/enable_custom_styling: 4774d8fb009c27044aa0191ebcccdcc2
|
||||
environments/workspace/look/enable_custom_styling_description: c640ce557046d87b2944118dbc7aaffe
|
||||
environments/workspace/look/failed_to_remove_logo: c3b5aa87d945f7ea83e029d1ee90d310
|
||||
environments/workspace/look/failed_to_update_logo: f8c9f8fe947f559dc698a3439d73f0c5
|
||||
environments/workspace/look/formbricks_branding: 98dad6e31b03d235725c4d95065e36ff
|
||||
environments/workspace/look/formbricks_branding_hidden: fda9ba81f8d7fdaacf8dc1642034e145
|
||||
environments/workspace/look/formbricks_branding_settings_description: 5bb39206c6412c703895593f465a01f9
|
||||
environments/workspace/look/formbricks_branding_shown: 6c9861cf8f95e8a68c5c64b2630d96cd
|
||||
environments/workspace/look/logo_removed_successfully: f3a7f9d226affa91121e90ff360553aa
|
||||
environments/workspace/look/logo_settings_description: da155953f55cb44d0e563d9e740241aa
|
||||
environments/workspace/look/logo_updated_successfully: 170250f18062b79be6ac0481ec9d4368
|
||||
environments/workspace/look/logo_upload_failed: 342624c84a04b891846a5d37e00d2c9f
|
||||
environments/workspace/look/placement_updated_successfully: 65bdf0cfbf4f7e2430b4e7f5d4d377b5
|
||||
environments/workspace/look/remove_branding_with_a_higher_plan: ee049340ea6fdc454edfdb0c29eb554b
|
||||
environments/workspace/look/remove_logo: 7f0eb5e99706a338f3040cae5d724346
|
||||
environments/workspace/look/remove_logo_confirmation: 386603e03a70672ae515fa6c9b8d6ab4
|
||||
environments/workspace/look/replace_logo: b69a290f789ae2dfeb067c463482c824
|
||||
environments/workspace/look/reset_styling: f25db45ece8637d660bd9d455c9b0265
|
||||
environments/workspace/look/reset_styling_confirmation: 9ebc0403ebb8a51ed93ec2711db85796
|
||||
environments/workspace/look/show_formbricks_branding_in: 80fabfec9b34a13c0445d02b923216ed
|
||||
environments/workspace/look/show_powered_by_formbricks: 02b84acc3156de24e1aff8321d77603f
|
||||
environments/workspace/look/styling_updated_successfully: b8b74b50dde95abcd498633e9d0c891f
|
||||
environments/workspace/look/theme: 21fe00b7a518089576fb83c08631107a
|
||||
environments/workspace/look/theme_settings_description: 9fc45322818c3774ab4a44ea14d7836e
|
||||
environments/workspace/tags/add: 87c4a663507f2bcbbf79934af8164e13
|
||||
environments/workspace/tags/add_tag: 2cfa04ceea966149f2b5d40d9c131141
|
||||
environments/workspace/tags/count: 9c5848662eb8024ddf360f7e4001a968
|
||||
environments/workspace/tags/delete_tag_confirmation: a9fb98064cd156242899643f3d2ef032
|
||||
environments/workspace/tags/manage_tags: 2761d558b82b6104befbc240ae2379c6
|
||||
environments/workspace/tags/manage_tags_description: ce7cc42da3646fba960502d7e4e49cd2
|
||||
environments/workspace/tags/merge: 95051c859b8778be51226b43be6f1075
|
||||
environments/workspace/tags/no_tag_found: 119c59a4367dfbd7f24a2f967d7f0f35
|
||||
environments/workspace/tags/search_tags: 35066dce3d12ce93705cb2f5c2ea317d
|
||||
environments/workspace/tags/tag: 924d12caa9981ef5859395382497d101
|
||||
environments/workspace/tags/tag_already_exists: 1337fd5cdd04311bfdca4e7538f0a4f3
|
||||
environments/workspace/tags/tag_deleted: 54fc251117cddad3ca42d10811ce0dde
|
||||
environments/workspace/tags/tag_updated: 6685fd5cc501b8fb2fb284aa22c2823e
|
||||
environments/workspace/tags/tags_merged: 544471de666f93fbb0ab600321d1e553
|
||||
environments/workspace/teams/manage_teams: d7b5f26335cea450c333832adbe0b6ad
|
||||
environments/workspace/teams/no_teams_found: fb6680d4b5b73731697b100713afb50d
|
||||
environments/workspace/teams/permission: cc2ed7274bd8267f9e0a10b079584d8b
|
||||
environments/workspace/teams/team_name: d1a5f99dbf503ca53f06b3a98b511d02
|
||||
environments/workspace/teams/team_settings_description: 52f91883b9ceb6de83efbf8efd4f11c0
|
||||
environments/xm-templates/ces: e2ea309b2f7f13257967b966c2fda1e9
|
||||
environments/xm-templates/ces_description: c8d9794dd17d5ab85a979f1b3e1bc935
|
||||
environments/xm-templates/csat: fdfc1dc6214cce661dcdc32a71d80337
|
||||
@@ -1882,28 +1865,28 @@ checksums:
|
||||
environments/xm-templates/nps_description: d116fc0e1e9f92f3d66cd83138254a84
|
||||
environments/xm-templates/smileys: 592b612bd314663f6f6f205886796706
|
||||
environments/xm-templates/smileys_description: 6670d8cd0d160c3456d2c27bcc3bf787
|
||||
organizations/landing/no_workspaces_warning_subtitle: 305578d27209f1c4f706fccd53559f52
|
||||
organizations/landing/no_workspaces_warning_title: c674555c5f11c93570b5d7f95a13b667
|
||||
organizations/workspaces/new/channel/channel_select_subtitle: debeb0acf03f9f7b8a6efee291a89dc6
|
||||
organizations/workspaces/new/channel/channel_select_title: a7f7e7f36b5fc36883111f5ad78417c4
|
||||
organizations/workspaces/new/channel/in_product_surveys: 4b9fc41da77c5e36437a0e30fa525de5
|
||||
organizations/workspaces/new/channel/in_product_surveys_description: 4e129633485ec5e07be88a897e7cab87
|
||||
organizations/workspaces/new/channel/link_and_email_surveys: a1136de7ba6ad6dd2d3c1cc4155332fe
|
||||
organizations/workspaces/new/channel/link_and_email_surveys_description: cac2165c355ae7cd69426f629cdbd75e
|
||||
organizations/workspaces/new/mode/formbricks_cx: 470561141475b57d371007842cc91d71
|
||||
organizations/workspaces/new/mode/formbricks_cx_description: 27fa1137df3551e5c054477db7263f54
|
||||
organizations/workspaces/new/mode/formbricks_surveys: eba2fce04ee68f02626e5509adf7d66a
|
||||
organizations/workspaces/new/mode/formbricks_surveys_description: 5d42ed40e5da85598a5ed80a724e2720
|
||||
organizations/workspaces/new/mode/what_are_you_here_for: 54f3c08ad6c63023288ee5d19cd8da3e
|
||||
organizations/workspaces/new/settings/brand_color: 84ddb5736deb9f5c081ffe4962a6c63e
|
||||
organizations/workspaces/new/settings/brand_color_description: 458aced4c827cacbb5c3d3fb091083ad
|
||||
organizations/workspaces/new/settings/create_new_team: 3f4d388a473f979d4bd366c3ef08e425
|
||||
organizations/workspaces/new/settings/team_description: 534ba98e256646074a03949daf85665d
|
||||
organizations/workspaces/new/settings/workspace_creation_failed: 5c6a0e087d481255a1b201c0287d0221
|
||||
organizations/workspaces/new/settings/workspace_name: 7002a32bc4ce3343ede2076b30649ff7
|
||||
organizations/workspaces/new/settings/workspace_name_description: 0885c4cd8cc8836e74b6ccdb5d25b43d
|
||||
organizations/workspaces/new/settings/workspace_settings_subtitle: 83a72b3e9c08f2936524fcd11b29421b
|
||||
organizations/workspaces/new/settings/workspace_settings_title: 00e42231ca647111d3288f57ad3ce53a
|
||||
organizations/landing/no_projects_warning_subtitle: cbfaf5c03dc2f66735379f1f3b72c313
|
||||
organizations/landing/no_projects_warning_title: 3e1a0b8b78dc4bc6ebbb3a2a94ffa4aa
|
||||
organizations/projects/new/channel/channel_select_subtitle: debeb0acf03f9f7b8a6efee291a89dc6
|
||||
organizations/projects/new/channel/channel_select_title: a7f7e7f36b5fc36883111f5ad78417c4
|
||||
organizations/projects/new/channel/in_product_surveys: 4b9fc41da77c5e36437a0e30fa525de5
|
||||
organizations/projects/new/channel/in_product_surveys_description: 4e129633485ec5e07be88a897e7cab87
|
||||
organizations/projects/new/channel/link_and_email_surveys: a1136de7ba6ad6dd2d3c1cc4155332fe
|
||||
organizations/projects/new/channel/link_and_email_surveys_description: cac2165c355ae7cd69426f629cdbd75e
|
||||
organizations/projects/new/mode/formbricks_cx: 470561141475b57d371007842cc91d71
|
||||
organizations/projects/new/mode/formbricks_cx_description: 27fa1137df3551e5c054477db7263f54
|
||||
organizations/projects/new/mode/formbricks_surveys: eba2fce04ee68f02626e5509adf7d66a
|
||||
organizations/projects/new/mode/formbricks_surveys_description: 5d42ed40e5da85598a5ed80a724e2720
|
||||
organizations/projects/new/mode/what_are_you_here_for: 54f3c08ad6c63023288ee5d19cd8da3e
|
||||
organizations/projects/new/settings/brand_color: 84ddb5736deb9f5c081ffe4962a6c63e
|
||||
organizations/projects/new/settings/brand_color_description: 458aced4c827cacbb5c3d3fb091083ad
|
||||
organizations/projects/new/settings/create_new_team: 3f4d388a473f979d4bd366c3ef08e425
|
||||
organizations/projects/new/settings/project_creation_failed: 493492e108675913b88c90b882b7401a
|
||||
organizations/projects/new/settings/project_name: 7002a32bc4ce3343ede2076b30649ff7
|
||||
organizations/projects/new/settings/project_name_description: 0885c4cd8cc8836e74b6ccdb5d25b43d
|
||||
organizations/projects/new/settings/project_settings_subtitle: 83a72b3e9c08f2936524fcd11b29421b
|
||||
organizations/projects/new/settings/project_settings_title: 00e42231ca647111d3288f57ad3ce53a
|
||||
organizations/projects/new/settings/team_description: 3e1ceed1fe4418f20c6090f2d610c8ee
|
||||
s/check_inbox_or_spam: dfaf193f2106045c1bd3f463984317a2
|
||||
s/completed: 98a9cd97b409933edf1991e7d022bea9
|
||||
s/create_your_own: 27976ec69029d6dd52d146a9b5765bc6
|
||||
@@ -1927,9 +1910,9 @@ checksums:
|
||||
s/want_to_respond: fbb26054f6af3b625cb569e19063302f
|
||||
setup/intro/get_started: 5c783951b0100a168bdd2161ff294833
|
||||
setup/intro/made_with_love_in_kiel: 1bbdd6e93bcdf7cbfbcac16db448a2e4
|
||||
setup/intro/paragraph_1: 41e6a1e7c9a4a1922c7064a89f6733fd
|
||||
setup/intro/paragraph_1: 360c902da0db044c6cc346ac18099902
|
||||
setup/intro/paragraph_2: 5b3cce4d8c75bab4d671e2af7fc7ee9f
|
||||
setup/intro/paragraph_3: 5bf4718d4c44ff27e55e0880331f293d
|
||||
setup/intro/paragraph_3: 0675e53f2f48e3a04db6e52698bdebae
|
||||
setup/intro/welcome_to_formbricks: 561427153e3effa108f54407dfc2126f
|
||||
setup/invite/add_another_member: 02947deaa4710893794f3cc6e160c2b4
|
||||
setup/invite/continue: 3cfba90b4600131e82fc4260c568d044
|
||||
|
||||
@@ -177,7 +177,6 @@ export const AVAILABLE_LOCALES: TUserLocale[] = [
|
||||
"zh-Hans-CN",
|
||||
"es-ES",
|
||||
"sv-SE",
|
||||
"ru-RU",
|
||||
];
|
||||
|
||||
// Billing constants
|
||||
|
||||
@@ -141,7 +141,6 @@ export const appLanguages = [
|
||||
"nl-NL": "Engels (VS)",
|
||||
"es-ES": "Inglés (EE.UU.)",
|
||||
"sv-SE": "Engelska (USA)",
|
||||
"ru-RU": "Английский (США)",
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -159,7 +158,6 @@ export const appLanguages = [
|
||||
"nl-NL": "Duits",
|
||||
"es-ES": "Alemán",
|
||||
"sv-SE": "Tyska",
|
||||
"ru-RU": "Немецкий",
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -177,7 +175,6 @@ export const appLanguages = [
|
||||
"nl-NL": "Portugees (Brazilië)",
|
||||
"es-ES": "Portugués (Brasil)",
|
||||
"sv-SE": "Portugisiska (Brasilien)",
|
||||
"ru-RU": "Португальский (Бразилия)",
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -195,7 +192,6 @@ export const appLanguages = [
|
||||
"nl-NL": "Frans",
|
||||
"es-ES": "Francés",
|
||||
"sv-SE": "Franska",
|
||||
"ru-RU": "Французский",
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -213,7 +209,6 @@ export const appLanguages = [
|
||||
"nl-NL": "Chinees (Traditioneel)",
|
||||
"es-ES": "Chino (Tradicional)",
|
||||
"sv-SE": "Kinesiska (traditionell)",
|
||||
"ru-RU": "Китайский (традиционный)",
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -231,7 +226,6 @@ export const appLanguages = [
|
||||
"nl-NL": "Portugees (Portugal)",
|
||||
"es-ES": "Portugués (Portugal)",
|
||||
"sv-SE": "Portugisiska (Portugal)",
|
||||
"ru-RU": "Португальский (Португалия)",
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -249,7 +243,6 @@ export const appLanguages = [
|
||||
"nl-NL": "Roemeens",
|
||||
"es-ES": "Rumano",
|
||||
"sv-SE": "Rumänska",
|
||||
"ru-RU": "Румынский",
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -267,7 +260,6 @@ export const appLanguages = [
|
||||
"nl-NL": "Japans",
|
||||
"es-ES": "Japonés",
|
||||
"sv-SE": "Japanska",
|
||||
"ru-RU": "Японский",
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -285,7 +277,6 @@ export const appLanguages = [
|
||||
"nl-NL": "Chinees (Vereenvoudigd)",
|
||||
"es-ES": "Chino (Simplificado)",
|
||||
"sv-SE": "Kinesiska (förenklad)",
|
||||
"ru-RU": "Китайский (упрощенный)",
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -303,7 +294,6 @@ export const appLanguages = [
|
||||
"nl-NL": "Nederlands",
|
||||
"es-ES": "Neerlandés",
|
||||
"sv-SE": "Nederländska",
|
||||
"ru-RU": "Голландский",
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -321,7 +311,6 @@ export const appLanguages = [
|
||||
"nl-NL": "Spaans",
|
||||
"es-ES": "Español",
|
||||
"sv-SE": "Spanska",
|
||||
"ru-RU": "Испанский",
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -339,7 +328,6 @@ export const appLanguages = [
|
||||
"nl-NL": "Zweeds",
|
||||
"es-ES": "Sueco",
|
||||
"sv-SE": "Svenska",
|
||||
"ru-RU": "Шведский",
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
@@ -267,7 +267,6 @@ export const mockSyncSurveyOutput: SurveyMock = {
|
||||
variables: [],
|
||||
showLanguageSwitch: null,
|
||||
metadata: {},
|
||||
slug: null,
|
||||
};
|
||||
|
||||
export const mockSurveyOutput: SurveyMock = {
|
||||
@@ -291,7 +290,6 @@ export const mockSurveyOutput: SurveyMock = {
|
||||
variables: [],
|
||||
showLanguageSwitch: null,
|
||||
...baseSurveyProperties,
|
||||
slug: null,
|
||||
};
|
||||
|
||||
export const createSurveyInput: TSurveyCreateInput = {
|
||||
@@ -321,7 +319,6 @@ export const updateSurveyInput: TSurvey = {
|
||||
followUps: [],
|
||||
...baseSurveyProperties,
|
||||
...commonMockProperties,
|
||||
slug: null,
|
||||
};
|
||||
|
||||
export const mockTransformedSurveyOutput = {
|
||||
|
||||
@@ -108,7 +108,6 @@ export const selectSurvey = {
|
||||
},
|
||||
},
|
||||
followUps: true,
|
||||
slug: true,
|
||||
} satisfies Prisma.SurveySelect;
|
||||
|
||||
export const checkTriggersValidity = (triggers: TSurvey["triggers"], actionClasses: ActionClass[]) => {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { formatDistance, intlFormat } from "date-fns";
|
||||
import { de, enUS, es, fr, ja, nl, pt, ptBR, ro, ru, sv, zhCN, zhTW } from "date-fns/locale";
|
||||
import { de, enUS, es, fr, ja, nl, pt, ptBR, ro, sv, zhCN, zhTW } from "date-fns/locale";
|
||||
import { TUserLocale } from "@formbricks/types/user";
|
||||
|
||||
export const convertDateString = (dateString: string | null) => {
|
||||
@@ -107,8 +107,6 @@ const getLocaleForTimeSince = (locale: TUserLocale) => {
|
||||
return zhCN;
|
||||
case "es-ES":
|
||||
return es;
|
||||
case "ru-RU":
|
||||
return ru;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -84,12 +84,9 @@ describe("Helper Utilities", () => {
|
||||
validationErrors: {
|
||||
name: { _errors: ["Name is required"] },
|
||||
email: { _errors: ["Email is invalid"] },
|
||||
password: { _errors: ["is too short"] },
|
||||
},
|
||||
};
|
||||
expect(getFormattedErrorMessage(result)).toBe(
|
||||
"Name is required\nEmail is invalid\npassword: is too short"
|
||||
);
|
||||
expect(getFormattedErrorMessage(result)).toBe("nameName is required\nemailEmail is invalid");
|
||||
});
|
||||
|
||||
test("returns empty string for undefined errors", () => {
|
||||
|
||||
@@ -27,12 +27,7 @@ export const getFormattedErrorMessage = (result): string => {
|
||||
message = Object.keys(errors || {})
|
||||
.map((key) => {
|
||||
if (key === "_errors") return errors[key].join(", ");
|
||||
const fieldError = errors?.[key]?._errors?.join(", ");
|
||||
if (key && fieldError?.toLowerCase().startsWith(key.toLowerCase())) {
|
||||
return fieldError;
|
||||
}
|
||||
const keyPrefix = key ? `${key}: ` : "";
|
||||
return `${keyPrefix}${fieldError}`;
|
||||
return `${key ? `${key}` : ""}${errors?.[key]?._errors?.join(", ")}`;
|
||||
})
|
||||
.join("\n");
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user