@nexttylabs/echo 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +31 -0
- package/app/(auth)/login/page.tsx +1 -1
- package/app/(auth)/register/page.tsx +1 -1
- package/app/(auth)/sign-in/page.tsx +1 -1
- package/app/(dashboard)/admin/feedback/[id]/edit/page.tsx +1 -1
- package/app/(dashboard)/admin/feedback/[id]/page.tsx +1 -1
- package/app/(dashboard)/admin/feedback/new/page.tsx +1 -1
- package/app/(dashboard)/admin/feedback/page.tsx +1 -1
- package/app/(dashboard)/admin/layout.tsx +1 -1
- package/app/(dashboard)/analytics/portal/page.tsx +1 -1
- package/app/(dashboard)/dashboard/page.tsx +49 -21
- package/app/(dashboard)/layout.tsx +1 -1
- package/app/(dashboard)/no-access/page.tsx +1 -1
- package/app/(dashboard)/settings/access/page.tsx +1 -1
- package/app/(dashboard)/settings/api-keys/page.tsx +1 -1
- package/app/(dashboard)/settings/appearance/page.tsx +1 -1
- package/app/(dashboard)/settings/branding/page.tsx +1 -1
- package/app/(dashboard)/settings/changelog/page.tsx +1 -1
- package/app/(dashboard)/settings/danger-zone/page.tsx +1 -1
- package/app/(dashboard)/settings/feedback/page.tsx +1 -1
- package/app/(dashboard)/settings/integrations/page.tsx +1 -1
- package/app/(dashboard)/settings/layout.tsx +1 -1
- package/app/(dashboard)/settings/modules/page.tsx +1 -1
- package/app/(dashboard)/settings/notifications/page.tsx +1 -1
- package/app/(dashboard)/settings/organization/page.tsx +1 -1
- package/app/(dashboard)/settings/organization/portal/access/page.tsx +1 -1
- package/app/(dashboard)/settings/organization/portal/experience/page.tsx +1 -1
- package/app/(dashboard)/settings/organization/portal/growth/page.tsx +1 -1
- package/app/(dashboard)/settings/organization/portal/layout.tsx +1 -1
- package/app/(dashboard)/settings/organization/portal/page.tsx +1 -1
- package/app/(dashboard)/settings/organizations/[orgId]/members/page.tsx +1 -1
- package/app/(dashboard)/settings/organizations/new/page.tsx +1 -1
- package/app/(dashboard)/settings/page.tsx +1 -1
- package/app/(dashboard)/settings/portal-access/page.tsx +1 -1
- package/app/(dashboard)/settings/portal-branding/page.tsx +1 -1
- package/app/(dashboard)/settings/portal-growth/page.tsx +1 -1
- package/app/(dashboard)/settings/portal-modules/page.tsx +1 -1
- package/app/(dashboard)/settings/portal-resources/page.tsx +1 -1
- package/app/(dashboard)/settings/profile/page.tsx +1 -1
- package/app/(dashboard)/settings/widgets/page.tsx +1 -1
- package/app/(public)/[organizationSlug]/changelog/page.tsx +1 -1
- package/app/(public)/[organizationSlug]/feedback/[id]/page.tsx +1 -1
- package/app/(public)/[organizationSlug]/page.tsx +1 -1
- package/app/(public)/[organizationSlug]/roadmap/page.tsx +1 -1
- package/app/(public)/docs/page.tsx +1 -1
- package/app/(public)/feedback/[id]/not-found.tsx +1 -1
- package/app/(public)/feedback/[id]/page.tsx +1 -1
- package/app/(public)/invite/[token]/page.tsx +1 -1
- package/app/(public)/page.tsx +1 -1
- package/app/(public)/widget/[organizationId]/page.tsx +1 -1
- package/app/api/_utils.ts +1 -1
- package/app/api/admin/backup/route.ts +1 -1
- package/app/api/api-keys/[keyId]/route.ts +1 -1
- package/app/api/api-keys/route.ts +1 -1
- package/app/api/auth/[...all]/route.ts +1 -1
- package/app/api/auth/clear-session/route.ts +1 -1
- package/app/api/auth/register/handler.ts +1 -1
- package/app/api/auth/register/route.ts +1 -1
- package/app/api/docs/route.ts +1 -1
- package/app/api/feedback/[id]/comments/[commentId]/route.ts +1 -1
- package/app/api/feedback/[id]/comments/route.ts +1 -1
- package/app/api/feedback/[id]/duplicates/route.ts +1 -1
- package/app/api/feedback/[id]/handler.ts +1 -1
- package/app/api/feedback/[id]/processing-status/route.ts +1 -1
- package/app/api/feedback/[id]/reclassify/route.ts +1 -1
- package/app/api/feedback/[id]/route.ts +1 -1
- package/app/api/feedback/[id]/suggest-tags/route.ts +1 -1
- package/app/api/feedback/[id]/sync-github/route.ts +1 -1
- package/app/api/feedback/[id]/vote/route.ts +1 -1
- package/app/api/feedback/bulk/route.ts +1 -1
- package/app/api/feedback/handler.ts +1 -1
- package/app/api/feedback/route.ts +1 -1
- package/app/api/feedback/similar/route.ts +1 -1
- package/app/api/health/route.test.ts +1 -1
- package/app/api/health/route.ts +1 -1
- package/app/api/identify/jwt/route.ts +1 -1
- package/app/api/integrations/github/route.ts +1 -1
- package/app/api/invitations/accept/handler.ts +1 -1
- package/app/api/invitations/accept/route.ts +1 -1
- package/app/api/notifications/preferences/route.ts +1 -1
- package/app/api/organizations/[orgId]/handler.ts +1 -1
- package/app/api/organizations/[orgId]/invitations/handler.ts +1 -1
- package/app/api/organizations/[orgId]/invitations/route.ts +1 -1
- package/app/api/organizations/[orgId]/members/[memberId]/handler.ts +1 -1
- package/app/api/organizations/[orgId]/members/[memberId]/route.ts +1 -1
- package/app/api/organizations/[orgId]/members/handler.ts +1 -1
- package/app/api/organizations/[orgId]/members/route.ts +1 -1
- package/app/api/organizations/[orgId]/route.ts +1 -1
- package/app/api/organizations/handler.ts +1 -1
- package/app/api/organizations/route.ts +1 -1
- package/app/api/tags/sync/route.ts +1 -1
- package/app/api/upload/handler.ts +1 -1
- package/app/api/upload/route.ts +1 -1
- package/app/api/v1/feedback/[id]/route.ts +1 -1
- package/app/api/v1/feedback/route.ts +1 -1
- package/app/api/v1/spec/route.ts +1 -1
- package/app/api/webhooks/[webhookId]/route.ts +1 -1
- package/app/api/webhooks/github/route.ts +1 -1
- package/app/api/webhooks/route.ts +1 -1
- package/app/health/route.ts +1 -1
- package/app/layout.tsx +11 -3
- package/components/api/rate-limit-info.tsx +1 -1
- package/components/api-keys/api-key-manager.tsx +1 -1
- package/components/auth/login-form.tsx +1 -1
- package/components/auth/register-form.tsx +1 -1
- package/components/comment/comment-form.tsx +1 -1
- package/components/comment/internal-notes.tsx +1 -1
- package/components/comment/public-comments.tsx +1 -1
- package/components/component-example-client-only.tsx +1 -1
- package/components/component-example.tsx +1 -1
- package/components/dashboard/index.ts +1 -1
- package/components/dashboard/organization-switcher.tsx +1 -1
- package/components/dashboard/quick-actions.tsx +1 -1
- package/components/dashboard/recent-feedback-list.tsx +1 -1
- package/components/dashboard/stats-cards.tsx +1 -1
- package/components/dashboard/status-chart.tsx +1 -1
- package/components/example.tsx +1 -1
- package/components/feedback/attachment-list.tsx +1 -1
- package/components/feedback/auto-classification-badge.tsx +1 -1
- package/components/feedback/classification-override.tsx +1 -1
- package/components/feedback/duplicate-suggestions-inline.tsx +1 -1
- package/components/feedback/duplicate-suggestions.tsx +1 -1
- package/components/feedback/embedded-feedback-form.tsx +1 -1
- package/components/feedback/feedback-actions.tsx +1 -1
- package/components/feedback/feedback-bulk-actions.tsx +1 -1
- package/components/feedback/feedback-detail-view.tsx +1 -1
- package/components/feedback/feedback-detail.tsx +1 -1
- package/components/feedback/feedback-edit-form.tsx +1 -1
- package/components/feedback/feedback-filters.tsx +1 -1
- package/components/feedback/feedback-list-controls.tsx +1 -1
- package/components/feedback/feedback-list-item.tsx +1 -1
- package/components/feedback/feedback-list-skeleton.tsx +1 -1
- package/components/feedback/feedback-list.tsx +1 -1
- package/components/feedback/feedback-sorter.tsx +1 -1
- package/components/feedback/feedback-stats.tsx +1 -1
- package/components/feedback/file-upload.tsx +1 -1
- package/components/feedback/processing-status.tsx +1 -1
- package/components/feedback/status-history.tsx +1 -1
- package/components/feedback/status-selector.tsx +1 -1
- package/components/feedback/submit-on-behalf-form.tsx +1 -1
- package/components/feedback/tag-suggestions.tsx +1 -1
- package/components/feedback/vote-button.tsx +1 -1
- package/components/feedback/vote-list.tsx +1 -1
- package/components/integrations/github-config.tsx +1 -1
- package/components/landing/hero.tsx +1 -1
- package/components/layout/dashboard-layout.tsx +1 -1
- package/components/layout/index.ts +1 -1
- package/components/layout/language-switcher.tsx +1 -1
- package/components/layout/mobile-sidebar.tsx +1 -1
- package/components/layout/sidebar.tsx +1 -1
- package/components/portal/changelog-entry.tsx +1 -1
- package/components/portal/changelog-list.tsx +1 -1
- package/components/portal/contributor-badge.tsx +1 -1
- package/components/portal/contributors-sidebar.tsx +1 -1
- package/components/portal/create-post-dialog.tsx +1 -1
- package/components/portal/feedback-board.tsx +1 -1
- package/components/portal/feedback-post-card.tsx +1 -1
- package/components/portal/help-center.tsx +1 -1
- package/components/portal/leaderboard.tsx +1 -1
- package/components/portal/portal-header.tsx +1 -1
- package/components/portal/portal-layout.tsx +1 -1
- package/components/portal/portal-modules-panel.tsx +1 -1
- package/components/portal/portal-nav.tsx +1 -1
- package/components/portal/portal-overview.tsx +1 -1
- package/components/portal/portal-settings-nav.tsx +1 -1
- package/components/portal/portal-settings-shell.tsx +1 -1
- package/components/portal/portal-shell.tsx +1 -1
- package/components/portal/portal-tab-nav.tsx +1 -1
- package/components/portal/roadmap-board.tsx +1 -1
- package/components/portal/roadmap-card.tsx +1 -1
- package/components/portal/roadmap-column.tsx +1 -1
- package/components/portal/settings-forms/access-form.tsx +1 -1
- package/components/portal/settings-forms/copy-form.tsx +1 -1
- package/components/portal/settings-forms/index.ts +1 -1
- package/components/portal/settings-forms/languages-form.tsx +1 -1
- package/components/portal/settings-forms/seo-form.tsx +1 -1
- package/components/portal/settings-forms/sharing-form.tsx +1 -1
- package/components/portal/settings-forms/theme-form.tsx +1 -1
- package/components/settings/api-keys-list.tsx +1 -1
- package/components/settings/appearance-form.tsx +4 -6
- package/components/settings/index.ts +1 -1
- package/components/settings/invite-member-form.tsx +1 -1
- package/components/settings/notification-preferences.tsx +1 -1
- package/components/settings/organization-form.tsx +1 -1
- package/components/settings/organization-members-list.tsx +1 -1
- package/components/settings/profile-form.tsx +1 -1
- package/components/settings/role-selector.tsx +1 -1
- package/components/settings/settings-sidebar.tsx +1 -1
- package/components/shared/pagination.tsx +1 -1
- package/components/theme-provider.tsx +28 -0
- package/components/ui/alert-dialog.tsx +1 -1
- package/components/ui/alert.tsx +1 -1
- package/components/ui/avatar.tsx +1 -1
- package/components/ui/badge.tsx +1 -1
- package/components/ui/button.tsx +1 -1
- package/components/ui/card.tsx +1 -1
- package/components/ui/combobox.tsx +1 -1
- package/components/ui/dialog.tsx +1 -1
- package/components/ui/dropdown-menu.tsx +1 -1
- package/components/ui/field.tsx +1 -1
- package/components/ui/input-group.tsx +1 -1
- package/components/ui/input.tsx +1 -1
- package/components/ui/label.tsx +1 -1
- package/components/ui/pagination.tsx +1 -1
- package/components/ui/select.tsx +1 -1
- package/components/ui/separator.tsx +1 -1
- package/components/ui/sheet.tsx +1 -1
- package/components/ui/skeleton.tsx +1 -1
- package/components/ui/switch.tsx +1 -1
- package/components/ui/table.tsx +1 -1
- package/components/ui/tabs.tsx +1 -1
- package/components/ui/textarea.tsx +1 -1
- package/components/ui/tooltip.tsx +1 -1
- package/components/widget/widget-form.tsx +1 -1
- package/drizzle.config.ts +1 -1
- package/hooks/use-organization.tsx +1 -1
- package/hooks/use-permissions.ts +1 -1
- package/i18n/config.ts +1 -1
- package/i18n/request.ts +1 -1
- package/i18n/resolve-locale.ts +1 -1
- package/lib/api/errors.ts +1 -1
- package/lib/auth/cli-config.ts +1 -1
- package/lib/auth/client.ts +1 -1
- package/lib/auth/config.ts +1 -1
- package/lib/auth/jwt-identity.ts +1 -1
- package/lib/auth/org-context.ts +1 -1
- package/lib/auth/organization.ts +1 -1
- package/lib/auth/permissions.ts +1 -1
- package/lib/auth/session.ts +1 -1
- package/lib/config/rate-limits.ts +1 -1
- package/lib/dashboard/get-dashboard-stats.ts +1 -1
- package/lib/db/index.ts +1 -1
- package/lib/db/migrate.test.ts +1 -1
- package/lib/db/migrate.ts +1 -1
- package/lib/db/schema/ai-processing.ts +1 -1
- package/lib/db/schema/api-keys.ts +1 -1
- package/lib/db/schema/attachments.ts +1 -1
- package/lib/db/schema/auth.ts +1 -1
- package/lib/db/schema/comments.ts +1 -1
- package/lib/db/schema/duplicates.ts +1 -1
- package/lib/db/schema/feedback.ts +1 -1
- package/lib/db/schema/github-integrations.ts +1 -1
- package/lib/db/schema/index.ts +1 -1
- package/lib/db/schema/invitations.ts +1 -1
- package/lib/db/schema/notifications.ts +1 -1
- package/lib/db/schema/organization-members.ts +1 -1
- package/lib/db/schema/organization-settings.ts +1 -1
- package/lib/db/schema/organizations.ts +1 -1
- package/lib/db/schema/status-history.ts +1 -1
- package/lib/db/schema/tags.ts +1 -1
- package/lib/db/schema/votes.ts +1 -1
- package/lib/db/schema/webhooks.ts +1 -1
- package/lib/feedback/filters.ts +1 -1
- package/lib/feedback/find-similar.ts +1 -1
- package/lib/feedback/get-feedback-by-id.ts +1 -1
- package/lib/feedback/prefill.ts +1 -1
- package/lib/http/get-request-url.ts +1 -1
- package/lib/integrations/github.ts +1 -1
- package/lib/invitations.ts +1 -1
- package/lib/logger.test.ts +1 -1
- package/lib/logger.ts +1 -1
- package/lib/middleware/api-key.ts +1 -1
- package/lib/middleware/rate-limit-keys.ts +1 -1
- package/lib/middleware/rate-limit.ts +1 -1
- package/lib/middleware/rbac.ts +1 -1
- package/lib/middleware/request-id.test.ts +1 -1
- package/lib/middleware/request-id.ts +1 -1
- package/lib/middleware/request-logger.test.ts +1 -1
- package/lib/middleware/request-logger.ts +1 -1
- package/lib/middleware/with-rate-limit.ts +1 -1
- package/lib/portal/analytics.ts +1 -1
- package/lib/portal/contributors.ts +1 -1
- package/lib/portal/i18n.ts +1 -1
- package/lib/portal/leaderboard-settings.ts +1 -1
- package/lib/portal/modules.ts +1 -1
- package/lib/portal/portal-copy.ts +1 -1
- package/lib/portal/public-context.tsx +1 -1
- package/lib/portal/seo.ts +1 -1
- package/lib/portal/settings-context.ts +1 -1
- package/lib/portal/sharing.ts +1 -1
- package/lib/portal/sorting.ts +1 -1
- package/lib/portal/theme.ts +1 -1
- package/lib/services/ai/classifier.ts +1 -1
- package/lib/services/ai/duplicate-detector.ts +1 -1
- package/lib/services/ai/tag-suggester.ts +1 -1
- package/lib/services/api-keys.ts +1 -1
- package/lib/services/backup.ts +1 -1
- package/lib/services/email/templates.ts +1 -1
- package/lib/services/email.ts +1 -1
- package/lib/services/github-sync.ts +1 -1
- package/lib/services/notifications/index.ts +1 -1
- package/lib/services/portal-settings.ts +1 -1
- package/lib/swagger/config.ts +1 -1
- package/lib/swagger/generate.ts +1 -1
- package/lib/upload/file-validator.ts +1 -1
- package/lib/upload/storage.ts +1 -1
- package/lib/utils/format.ts +1 -1
- package/lib/utils/slug.ts +1 -1
- package/lib/utils.ts +1 -1
- package/lib/validations/auth.ts +1 -1
- package/lib/validations/comment.ts +1 -1
- package/lib/validations/feedback.ts +1 -1
- package/lib/validations/invitations.ts +1 -1
- package/lib/validations/organizations.ts +1 -1
- package/lib/validators/feedback.ts +1 -1
- package/lib/validators/index.ts +1 -1
- package/lib/webhooks/events.ts +1 -1
- package/lib/webhooks/index.ts +1 -1
- package/lib/webhooks/retry.ts +1 -1
- package/lib/webhooks/sender.ts +1 -1
- package/lib/webhooks/verify.ts +1 -1
- package/lib/workers/feedback-processor.ts +1 -1
- package/messages/en.json +2 -0
- package/messages/jp.json +2 -0
- package/messages/zh-CN.json +2 -0
- package/next.config.ts +1 -1
- package/package.json +2 -1
- package/types/bun-test.d.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,36 @@
|
|
|
1
1
|
# @nexttylabs/echo
|
|
2
2
|
|
|
3
|
+
## 0.8.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- fc3d8f1: support light/dark theme
|
|
8
|
+
- cc04d9f: Use the organization member role uniformly.
|
|
9
|
+
- 5cfdeb7: feat: support editing user profile
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 7dba561: remove legacy changeset files
|
|
14
|
+
- 158b254: show current orgnization
|
|
15
|
+
- 1e798f1: remove unuse tables and published files
|
|
16
|
+
- e3c4e1c: fix workflow errors
|
|
17
|
+
- daf9abb: first release
|
|
18
|
+
|
|
19
|
+
## 0.7.0
|
|
20
|
+
|
|
21
|
+
### Minor Changes
|
|
22
|
+
|
|
23
|
+
- fc3d8f1: support light/dark theme
|
|
24
|
+
- cc04d9f: Use the organization member role uniformly.
|
|
25
|
+
- 5cfdeb7: feat: support editing user profile
|
|
26
|
+
|
|
27
|
+
### Patch Changes
|
|
28
|
+
|
|
29
|
+
- 7dba561: remove legacy changeset files
|
|
30
|
+
- 1e798f1: remove unuse tables and published files
|
|
31
|
+
- e3c4e1c: fix workflow errors
|
|
32
|
+
- daf9abb: first release
|
|
33
|
+
|
|
3
34
|
## 0.6.0
|
|
4
35
|
|
|
5
36
|
### Minor Changes
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2026
|
|
2
|
+
* Copyright (c) 2026 Nexttylabs Team
|
|
3
3
|
*
|
|
4
4
|
* This program is free software: you can redistribute it and/or modify
|
|
5
5
|
* it under the terms of the GNU Affero General Public License as published by
|
|
@@ -18,14 +18,16 @@
|
|
|
18
18
|
import { cookies, headers } from "next/headers";
|
|
19
19
|
import { getTranslations } from "next-intl/server";
|
|
20
20
|
import Link from "next/link";
|
|
21
|
-
import { ExternalLink } from "lucide-react";
|
|
21
|
+
import { ExternalLink, Building2 } from "lucide-react";
|
|
22
22
|
import { auth } from "@/lib/auth/config";
|
|
23
23
|
import { db } from "@/lib/db";
|
|
24
24
|
import { getDashboardStats, type DashboardStats } from "@/lib/dashboard/get-dashboard-stats";
|
|
25
|
-
import { getUserOrganizations } from "@/lib/auth/organization";
|
|
25
|
+
import { getUserOrganizations, type UserOrganization } from "@/lib/auth/organization";
|
|
26
26
|
import { getOrgContext } from "@/lib/auth/org-context";
|
|
27
27
|
import { StatsCards, RecentFeedbackList, StatusChart } from "@/components/dashboard";
|
|
28
28
|
import { Button } from "@/components/ui/button";
|
|
29
|
+
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
|
|
30
|
+
import { Badge } from "@/components/ui/badge";
|
|
29
31
|
import type { UserRole } from "@/lib/auth/permissions";
|
|
30
32
|
|
|
31
33
|
interface PageProps {
|
|
@@ -49,8 +51,8 @@ export default async function DashboardPage({ searchParams }: PageProps) {
|
|
|
49
51
|
recentFeedback: [],
|
|
50
52
|
};
|
|
51
53
|
|
|
52
|
-
let
|
|
53
|
-
let organizations:
|
|
54
|
+
let currentOrganization: UserOrganization | null = null;
|
|
55
|
+
let organizations: UserOrganization[] = [];
|
|
54
56
|
let shouldPersistDefaultOrg = false;
|
|
55
57
|
|
|
56
58
|
if (db && session?.user) {
|
|
@@ -81,7 +83,7 @@ export default async function DashboardPage({ searchParams }: PageProps) {
|
|
|
81
83
|
requireMembership: true,
|
|
82
84
|
});
|
|
83
85
|
|
|
84
|
-
|
|
86
|
+
currentOrganization = organizations.find((org) => org.id === context.organizationId) ?? null;
|
|
85
87
|
|
|
86
88
|
stats = await getDashboardStats(db, {
|
|
87
89
|
userId: session.user.id,
|
|
@@ -96,23 +98,49 @@ export default async function DashboardPage({ searchParams }: PageProps) {
|
|
|
96
98
|
|
|
97
99
|
return (
|
|
98
100
|
<div className="p-6 space-y-6">
|
|
99
|
-
<div
|
|
100
|
-
<
|
|
101
|
-
|
|
102
|
-
<p className="text-muted-foreground">{t("pageDescription")}</p>
|
|
103
|
-
</div>
|
|
104
|
-
<div className="flex items-center gap-3">
|
|
105
|
-
{organizationSlug && (
|
|
106
|
-
<Button asChild variant="outline">
|
|
107
|
-
<Link href={`/${organizationSlug}`} target="_blank">
|
|
108
|
-
<ExternalLink className="mr-2 h-4 w-4" />
|
|
109
|
-
{t("visitPortal")}
|
|
110
|
-
</Link>
|
|
111
|
-
</Button>
|
|
112
|
-
)}
|
|
113
|
-
</div>
|
|
101
|
+
<div>
|
|
102
|
+
<h1 className="text-2xl font-bold">{t("pageTitle")}</h1>
|
|
103
|
+
<p className="text-muted-foreground">{t("pageDescription")}</p>
|
|
114
104
|
</div>
|
|
115
105
|
|
|
106
|
+
{/* Current Organization Info Card */}
|
|
107
|
+
{currentOrganization && (
|
|
108
|
+
<Card>
|
|
109
|
+
<CardHeader className="pb-3">
|
|
110
|
+
<CardTitle className="flex items-center gap-2 text-lg">
|
|
111
|
+
<Building2 className="h-5 w-5" />
|
|
112
|
+
{t("currentOrganization")}
|
|
113
|
+
</CardTitle>
|
|
114
|
+
</CardHeader>
|
|
115
|
+
<CardContent>
|
|
116
|
+
<div className="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between">
|
|
117
|
+
<div className="space-y-1">
|
|
118
|
+
<div className="flex items-center gap-2">
|
|
119
|
+
<span className="font-semibold">{currentOrganization.name}</span>
|
|
120
|
+
<Badge variant="secondary">{currentOrganization.role}</Badge>
|
|
121
|
+
</div>
|
|
122
|
+
{currentOrganization.slug && (
|
|
123
|
+
<p className="text-sm text-muted-foreground">
|
|
124
|
+
{t("slug")}: <code className="rounded bg-muted px-1 py-0.5">{currentOrganization.slug}</code>
|
|
125
|
+
</p>
|
|
126
|
+
)}
|
|
127
|
+
{currentOrganization.description && (
|
|
128
|
+
<p className="text-sm text-muted-foreground">{currentOrganization.description}</p>
|
|
129
|
+
)}
|
|
130
|
+
</div>
|
|
131
|
+
{currentOrganization.slug && (
|
|
132
|
+
<Button asChild variant="outline" size="sm">
|
|
133
|
+
<Link href={`/${currentOrganization.slug}`} target="_blank">
|
|
134
|
+
<ExternalLink className="mr-2 h-4 w-4" />
|
|
135
|
+
{t("visitPortal")}
|
|
136
|
+
</Link>
|
|
137
|
+
</Button>
|
|
138
|
+
)}
|
|
139
|
+
</div>
|
|
140
|
+
</CardContent>
|
|
141
|
+
</Card>
|
|
142
|
+
)}
|
|
143
|
+
|
|
116
144
|
<StatsCards
|
|
117
145
|
totalFeedback={stats.totalFeedback}
|
|
118
146
|
pendingFeedback={stats.pendingFeedback}
|
package/app/(public)/page.tsx
CHANGED
package/app/api/_utils.ts
CHANGED
package/app/api/docs/route.ts
CHANGED