diff --git a/apps/web/app/(app)/workspaces/[workspaceId]/actions.ts b/apps/web/app/(app)/workspaces/[workspaceId]/actions.ts index 13953f6b51..64bfdb8013 100644 --- a/apps/web/app/(app)/workspaces/[workspaceId]/actions.ts +++ b/apps/web/app/(app)/workspaces/[workspaceId]/actions.ts @@ -23,9 +23,13 @@ import { createWorkspace } from "@/modules/workspaces/settings/lib/workspace"; import { getOrganizationsByUserId } from "./lib/organization"; import { getWorkspacesByUserId } from "./lib/workspace"; +const ZCreateWorkspaceInput = ZWorkspaceUpdateInput.extend({ + feedbackRecordDirectoryId: ZId.optional(), +}); + const ZCreateWorkspaceAction = z.object({ organizationId: ZId, - data: ZWorkspaceUpdateInput, + data: ZCreateWorkspaceInput, }); export const createWorkspaceAction = authenticatedActionClient.inputSchema(ZCreateWorkspaceAction).action( @@ -40,7 +44,7 @@ export const createWorkspaceAction = authenticatedActionClient.inputSchema(ZCrea access: [ { data: parsedInput.data, - schema: ZWorkspaceUpdateInput, + schema: ZCreateWorkspaceInput, type: "organization", roles: ["owner", "manager"], }, diff --git a/apps/web/app/(app)/workspaces/[workspaceId]/components/MainNavigation.tsx b/apps/web/app/(app)/workspaces/[workspaceId]/components/MainNavigation.tsx index 42ec0be9be..f7c2e14169 100644 --- a/apps/web/app/(app)/workspaces/[workspaceId]/components/MainNavigation.tsx +++ b/apps/web/app/(app)/workspaces/[workspaceId]/components/MainNavigation.tsx @@ -10,12 +10,12 @@ import { Loader2, LogOutIcon, MessageCircle, + MessageSquareTextIcon, PanelLeftCloseIcon, PanelLeftOpenIcon, PlusIcon, RocketIcon, SettingsIcon, - Shapes, UserCircleIcon, UserIcon, } from "lucide-react"; @@ -146,58 +146,77 @@ export const MainNavigation = ({ } }, [pathname]); - const mainNavigation = useMemo( + const mainNavigationSections = useMemo( () => [ { - name: t("common.surveys"), - href: `/workspaces/${workspace.id}/surveys`, - icon: MessageCircle, - isActive: pathname?.includes("/surveys"), - isHidden: false, - disabled: isMembershipPending || isBilling, - }, - { - href: `/workspaces/${workspace.id}/contacts`, - name: t("common.contacts"), - icon: UserIcon, - isActive: - pathname?.includes("/contacts") || - pathname?.includes("/segments") || - pathname?.includes("/attributes"), - disabled: isMembershipPending || isBilling, - }, - { - name: t("common.analysis"), - href: `/workspaces/${workspace.id}/dashboards`, - icon: BarChart3Icon, - isActive: pathname?.includes("/dashboards") || pathname?.includes("/charts"), - isHidden: false, - disabled: isMembershipPending || isBilling, + id: "ask", + name: "Ask", + items: [ + { + name: t("common.surveys"), + href: `/workspaces/${workspace.id}/surveys`, + icon: MessageCircle, + isActive: pathname?.includes("/surveys"), + isHidden: false, + disabled: isMembershipPending || isBilling, + }, + { + href: `/workspaces/${workspace.id}/contacts`, + name: t("common.contacts"), + icon: UserIcon, + isActive: + pathname?.includes("/contacts") || + pathname?.includes("/segments") || + pathname?.includes("/attributes"), + disabled: isMembershipPending || isBilling, + }, + ], }, { + id: "unify-feedback", name: t("workspace.unify.unify_feedback"), - href: `/workspaces/${workspace.id}/unify/sources`, - icon: Shapes, - isActive: pathname?.includes("/unify"), - }, - { - name: t("common.configuration"), - href: `/workspaces/${workspace.id}/general`, - icon: Cog, - isActive: - pathname?.includes("/general") || - pathname?.includes("/look") || - pathname?.includes("/app-connection") || - pathname?.includes("/integrations") || - pathname?.includes("/teams") || - pathname?.includes("/languages") || - pathname?.includes("/tags"), - disabled: isMembershipPending || isBilling, + items: [ + { + name: t("workspace.unify.feedback_records"), + href: `/workspaces/${workspace.id}/unify/feedback-records`, + icon: MessageSquareTextIcon, + isActive: pathname?.includes("/unify/feedback-records"), + isHidden: false, + disabled: isMembershipPending || isBilling, + }, + { + name: t("common.dashboards"), + href: `/workspaces/${workspace.id}/dashboards`, + icon: BarChart3Icon, + isActive: pathname?.includes("/dashboards") || pathname?.includes("/charts"), + isHidden: false, + disabled: isMembershipPending || isBilling, + }, + ], }, ], [t, workspace.id, pathname, isMembershipPending, isBilling] ); + const configurationNavigationItem = useMemo( + () => ({ + name: t("common.configuration"), + href: `/workspaces/${workspace.id}/general`, + icon: Cog, + isActive: + pathname?.includes("/general") || + pathname?.includes("/look") || + pathname?.includes("/app-connection") || + pathname?.includes("/feedback-sources") || + pathname?.includes("/integrations") || + pathname?.includes("/teams") || + pathname?.includes("/languages") || + pathname?.includes("/tags"), + disabled: isMembershipPending || isBilling, + }), + [t, workspace.id, pathname, isMembershipPending, isBilling] + ); + const dropdownNavigation = [ { label: t("common.account"), @@ -256,6 +275,11 @@ export const MainNavigation = ({ label: t("common.website_and_app_connection"), href: `/workspaces/${workspace.id}/app-connection`, }, + { + id: "feedback-sources", + label: t("workspace.unify.feedback_sources"), + href: `/workspaces/${workspace.id}/feedback-sources`, + }, { id: "integrations", label: t("common.integrations"), @@ -552,23 +576,50 @@ export const MainNavigation = ({ {/* Main Nav Switch */} -