From d069b02931ed2758f2d0359cda13bea57f009fef Mon Sep 17 00:00:00 2001 From: Bohdan Triapitsyn Date: Tue, 14 Jul 2026 14:29:23 +0300 Subject: [PATCH] chore: remove share opinion sidebar prompt Delete the share opinion dialog and its sidebar trigger. Remove the related toast and footer action wiring. Clean up unused i18n entries in all supported languages. --- .../feedback/ShareOpinionDialog.tsx | 65 ------------------- .../src/components/session/SessionSidebar.tsx | 39 ----------- .../session/sidebar/SidebarFooter.tsx | 18 ++--- packages/ui/src/lib/i18n/messages/en.ts | 7 -- packages/ui/src/lib/i18n/messages/es.ts | 7 -- packages/ui/src/lib/i18n/messages/fr.ts | 7 -- packages/ui/src/lib/i18n/messages/ja.ts | 7 -- packages/ui/src/lib/i18n/messages/ko.ts | 7 -- packages/ui/src/lib/i18n/messages/pl.ts | 7 -- packages/ui/src/lib/i18n/messages/pt-BR.ts | 7 -- packages/ui/src/lib/i18n/messages/uk.ts | 7 -- packages/ui/src/lib/i18n/messages/zh-CN.ts | 7 -- packages/ui/src/lib/i18n/messages/zh-TW.ts | 7 -- 13 files changed, 5 insertions(+), 187 deletions(-) delete mode 100644 packages/ui/src/components/feedback/ShareOpinionDialog.tsx diff --git a/packages/ui/src/components/feedback/ShareOpinionDialog.tsx b/packages/ui/src/components/feedback/ShareOpinionDialog.tsx deleted file mode 100644 index b3609c63..00000000 --- a/packages/ui/src/components/feedback/ShareOpinionDialog.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import React from 'react'; -import { Icon } from '@/components/icon/Icon'; -import { SimpleMarkdownRenderer } from '@/components/chat/MarkdownRenderer'; -import { Dialog, DialogContent, DialogTitle } from '@/components/ui/dialog'; -import { useI18n } from '@/lib/i18n'; -import { openExternalUrl } from '@/lib/url'; - -type ShareOpinionDialogProps = { - open: boolean; - onOpenChange: (open: boolean) => void; -}; - -const SHARE_OPINION_MARKDOWN = `**Help shape what OpenChamber becomes next!** - -Hey 👋, - -OpenChamber has grown mostly through word of mouth, GitHub issues, Discord feedback, and people telling me what is broken, confusing, or surprisingly useful. - -I'm planning the next chapter now - mobile, better remote access, a tighter VS Code ↔ desktop/web/mobile flow, and more, but before building too much, I want to hear from the people actually using it. - -I'm doing a round of short 1-on-1 calls. No sales pitch, no formal script - just a real conversation about how you use OpenChamber, what you love, what frustrates you, and what would make it much more valuable. - -You can book a call or use the short survey below. - -What you get: - -- A direct chance to influence the roadmap -- Your pain points and feature requests prioritized with more context -- A Power User role in Discord for people helping shape the product -- My genuine thanks for helping make OpenChamber better - -**This project is what it is because of your feedback. Thank you, genuinely.** - -I'll remove this button in 10 days 🙂`; - -export function ShareOpinionDialog({ open, onOpenChange }: ShareOpinionDialogProps): React.ReactNode { - const { t } = useI18n(); - - return ( - - - {t('shareOpinion.dialog.title')} - -
- - -
-
-
- ); -} diff --git a/packages/ui/src/components/session/SessionSidebar.tsx b/packages/ui/src/components/session/SessionSidebar.tsx index 85e58718..5a0213e2 100644 --- a/packages/ui/src/components/session/SessionSidebar.tsx +++ b/packages/ui/src/components/session/SessionSidebar.tsx @@ -36,7 +36,6 @@ import { useStickyProjectHeaders } from './sidebar/hooks/useStickyProjectHeaders import { getGitHubPrStatusKey, usePrVisualSummaryByKeys, useGitHubPrStatusStore } from '@/stores/useGitHubPrStatusStore'; import { ProjectEditDialog } from '@/components/layout/ProjectEditDialog'; import { UpdateDialog } from '@/components/ui/UpdateDialog'; -import { ShareOpinionDialog } from '@/components/feedback/ShareOpinionDialog'; import { SessionGroupSection } from './sidebar/SessionGroupSection'; import { SidebarHeader } from './sidebar/SidebarHeader'; import { SidebarActivitySections } from './sidebar/SidebarActivitySections'; @@ -82,7 +81,6 @@ import { useRuntimeAPIs } from '@/hooks/useRuntimeAPIs'; import { useGitHubAuthStore } from '@/stores/useGitHubAuthStore'; import { subscribeOpenchamberEvents } from '@/lib/openchamberEvents'; -const SHARE_OPINION_TOAST_STORAGE_KEY = 'openchamber.shareOpinionToast.dismissed.v2'; const PROJECT_COLLAPSE_STORAGE_KEY = 'oc.sessions.projectCollapse'; const GROUP_ORDER_STORAGE_KEY = 'oc.sessions.groupOrder'; const GROUP_COLLAPSE_STORAGE_KEY = 'oc.sessions.groupCollapse'; @@ -199,7 +197,6 @@ export const SessionSidebar: React.FC = ({ const newWorktreeDialogOpen = useUIStore((state) => state.isNewWorktreeDialogOpen); const setNewWorktreeDialogOpen = useUIStore((state) => state.setNewWorktreeDialogOpen); const [updateDialogOpen, setUpdateDialogOpen] = React.useState(false); - const [shareOpinionDialogOpen, setShareOpinionDialogOpen] = React.useState(false); const [openSidebarMenuKey, setOpenSidebarMenuKey] = React.useState(null); const [renamingFolderId, setRenamingFolderId] = React.useState(null); const [renameFolderDraft, setRenameFolderDraft] = React.useState(''); @@ -678,36 +675,6 @@ export const SessionSidebar: React.FC = ({ }); }, [t, updateStore]); - const handleOpenShareOpinionDialog = React.useCallback(() => { - setShareOpinionDialogOpen(true); - }, []); - - React.useEffect(() => { - if (typeof window === 'undefined') { - return; - } - try { - if (window.localStorage.getItem(SHARE_OPINION_TOAST_STORAGE_KEY) === 'true') { - return; - } - window.localStorage.setItem(SHARE_OPINION_TOAST_STORAGE_KEY, 'true'); - } catch { - // If storage is unavailable, still show once for this sidebar mount. - } - const timeoutId = window.setTimeout(() => { - toast.info(t('shareOpinion.toast.title'), { - description: t('shareOpinion.toast.description'), - action: { - label: t('shareOpinion.actions.shareOpinion'), - onClick: () => setShareOpinionDialogOpen(true), - }, - duration: 12_000, - }); - }, 1_000); - - return () => window.clearTimeout(timeoutId); - }, [t]); - const handleOpenSettings = React.useCallback(() => { if (mobileVariant) { setSessionSwitcherOpen(false); @@ -1733,16 +1700,10 @@ export const SessionSidebar: React.FC = ({ onOpenShortcuts={toggleHelpDialog} onOpenAbout={() => setAboutDialogOpen(true)} onOpenUpdate={handleOpenUpdateDialog} - onOpenShareOpinion={handleOpenShareOpinionDialog} showRuntimeButtons={!isVSCode} showUpdateButton={showSidebarUpdateButton} /> - - void; onOpenAbout: () => void; onOpenUpdate: () => void; - onOpenShareOpinion: () => void; showRuntimeButtons?: boolean; showUpdateButton?: boolean; }; @@ -21,12 +20,15 @@ export function SidebarFooter({ onOpenShortcuts, onOpenAbout, onOpenUpdate, - onOpenShareOpinion, showRuntimeButtons = true, showUpdateButton = true, }: Props): React.ReactNode { const { t } = useI18n(); + if (!showRuntimeButtons && !showUpdateButton) { + return null; + } + return (
{showRuntimeButtons ? ( @@ -67,17 +69,7 @@ export function SidebarFooter({ > {t('sessions.sidebar.footer.actions.update')} - ) : ( - - )} + ) : null}
); } diff --git a/packages/ui/src/lib/i18n/messages/en.ts b/packages/ui/src/lib/i18n/messages/en.ts index a083acaa..cd8f10d6 100644 --- a/packages/ui/src/lib/i18n/messages/en.ts +++ b/packages/ui/src/lib/i18n/messages/en.ts @@ -22,13 +22,6 @@ export const dict = { 'pwa.installPrompt.dismiss': 'Dismiss', 'pwa.installPrompt.started': 'Install started', 'pwa.installPrompt.installed': 'OpenChamber installed', - 'shareOpinion.actions.shareOpinion': 'Share opinion', - 'shareOpinion.actions.bookCall': 'Book a call', - 'shareOpinion.actions.shortSurvey': 'Short survey', - 'shareOpinion.dialog.title': 'Share your opinion', - 'shareOpinion.toast.title': 'Help shape OpenChamber', - 'shareOpinion.toast.description': 'Share what is useful, confusing, or missing to help shape what comes next.', - 'sessions.sidebar.footer.actions.shareOpinion': 'Share opinion', 'layout.mainTab.chat': 'Chat', 'layout.mainTab.plan': 'Plan', 'layout.mainTab.diff': 'Diff', diff --git a/packages/ui/src/lib/i18n/messages/es.ts b/packages/ui/src/lib/i18n/messages/es.ts index 661350b9..00c4d74c 100644 --- a/packages/ui/src/lib/i18n/messages/es.ts +++ b/packages/ui/src/lib/i18n/messages/es.ts @@ -23,13 +23,6 @@ export const dict: Record = { "pwa.installPrompt.dismiss": "Descartar", "pwa.installPrompt.started": "Instalación iniciada", "pwa.installPrompt.installed": "OpenChamber se instaló", - "shareOpinion.actions.shareOpinion": "Compartir opinión", - "shareOpinion.actions.bookCall": "Reservar llamada", - "shareOpinion.actions.shortSurvey": "Encuesta breve", - "shareOpinion.dialog.title": "Comparte tu opinión", - "shareOpinion.toast.title": "Ayuda a dar forma a OpenChamber", - "shareOpinion.toast.description": "Cuenta qué es útil, confuso o falta para ayudar a definir lo que viene después.", - "sessions.sidebar.footer.actions.shareOpinion": "Compartir opinión", "layout.mainTab.chat": "Chat", "layout.mainTab.plan": "Plan", "layout.mainTab.diff": "Diff", diff --git a/packages/ui/src/lib/i18n/messages/fr.ts b/packages/ui/src/lib/i18n/messages/fr.ts index 99c95112..1fbd1da7 100644 --- a/packages/ui/src/lib/i18n/messages/fr.ts +++ b/packages/ui/src/lib/i18n/messages/fr.ts @@ -22,13 +22,6 @@ export const dict = { 'pwa.installPrompt.dismiss': 'Ignorer', 'pwa.installPrompt.started': 'Installation démarrée', 'pwa.installPrompt.installed': 'OpenChamber installé', - 'shareOpinion.actions.shareOpinion': 'Donner son avis', - 'shareOpinion.actions.bookCall': 'Réserver un appel', - 'shareOpinion.actions.shortSurvey': 'Court sondage', - 'shareOpinion.dialog.title': 'Donnez votre avis', - 'shareOpinion.toast.title': 'Aidez à façonner OpenChamber', - 'shareOpinion.toast.description': 'Dites ce qui est utile, confus ou manquant pour aider à définir la suite.', - 'sessions.sidebar.footer.actions.shareOpinion': 'Donner son avis', 'layout.mainTab.chat': 'Chat', 'layout.mainTab.plan': 'Plan', 'layout.mainTab.diff': 'Diff', diff --git a/packages/ui/src/lib/i18n/messages/ja.ts b/packages/ui/src/lib/i18n/messages/ja.ts index 00c504e5..98c7addf 100644 --- a/packages/ui/src/lib/i18n/messages/ja.ts +++ b/packages/ui/src/lib/i18n/messages/ja.ts @@ -23,13 +23,6 @@ export const dict: Record = { 'pwa.installPrompt.dismiss': '閉じる', 'pwa.installPrompt.started': 'インストールを開始しました', 'pwa.installPrompt.installed': 'OpenChamberをインストールしました', - 'shareOpinion.actions.shareOpinion': '意見を共有', - 'shareOpinion.actions.bookCall': '通話を予約', - 'shareOpinion.actions.shortSurvey': '短いアンケート', - 'shareOpinion.dialog.title': 'ご意見をお聞かせください', - 'shareOpinion.toast.title': 'OpenChamber の次を一緒に作る', - 'shareOpinion.toast.description': '便利な点、分かりにくい点、足りない点を教えて、次の方向づくりに参加してください。', - 'sessions.sidebar.footer.actions.shareOpinion': '意見を共有', 'layout.mainTab.chat': 'チャット', 'layout.mainTab.plan': '計画', 'layout.mainTab.diff': '差分', diff --git a/packages/ui/src/lib/i18n/messages/ko.ts b/packages/ui/src/lib/i18n/messages/ko.ts index 9839fd92..9fd2883c 100644 --- a/packages/ui/src/lib/i18n/messages/ko.ts +++ b/packages/ui/src/lib/i18n/messages/ko.ts @@ -23,13 +23,6 @@ export const dict: Record = { 'pwa.installPrompt.dismiss': '닫기', 'pwa.installPrompt.started': '설치가 시작되었습니다', 'pwa.installPrompt.installed': 'OpenChamber가 설치되었습니다', - 'shareOpinion.actions.shareOpinion': '의견 공유', - 'shareOpinion.actions.bookCall': '통화 예약', - 'shareOpinion.actions.shortSurvey': '짧은 설문', - 'shareOpinion.dialog.title': '의견을 공유해 주세요', - 'shareOpinion.toast.title': 'OpenChamber의 방향을 함께 만들어 주세요', - 'shareOpinion.toast.description': '유용한 점, 혼란스러운 점, 부족한 점을 알려 주셔서 다음 방향을 함께 만들어 주세요.', - 'sessions.sidebar.footer.actions.shareOpinion': '의견 공유', 'layout.mainTab.chat': '채팅', 'layout.mainTab.plan': '계획', 'layout.mainTab.diff': '변경사항', diff --git a/packages/ui/src/lib/i18n/messages/pl.ts b/packages/ui/src/lib/i18n/messages/pl.ts index adbadd61..ce5a3be9 100644 --- a/packages/ui/src/lib/i18n/messages/pl.ts +++ b/packages/ui/src/lib/i18n/messages/pl.ts @@ -24,13 +24,6 @@ export const dict: Record = { 'pwa.installPrompt.dismiss': 'Odrzuć', 'pwa.installPrompt.started': 'Instalacja rozpoczęta', 'pwa.installPrompt.installed': 'OpenChamber został zainstalowany', - 'shareOpinion.actions.shareOpinion': 'Podziel się opinią', - 'shareOpinion.actions.bookCall': 'Umów rozmowę', - 'shareOpinion.actions.shortSurvey': 'Krótka ankieta', - 'shareOpinion.dialog.title': 'Podziel się opinią', - 'shareOpinion.toast.title': 'Pomóż kształtować OpenChamber', - 'shareOpinion.toast.description': 'Powiedz, co jest przydatne, mylące albo czego brakuje, aby pomóc kształtować kolejne kroki.', - 'sessions.sidebar.footer.actions.shareOpinion': 'Podziel się opinią', 'layout.mainTab.chat': 'Czat', 'layout.mainTab.plan': 'Plan', 'layout.mainTab.diff': 'Różnice', diff --git a/packages/ui/src/lib/i18n/messages/pt-BR.ts b/packages/ui/src/lib/i18n/messages/pt-BR.ts index 92ede170..c0554bdf 100644 --- a/packages/ui/src/lib/i18n/messages/pt-BR.ts +++ b/packages/ui/src/lib/i18n/messages/pt-BR.ts @@ -23,13 +23,6 @@ export const dict: Record = { "pwa.installPrompt.dismiss": "Dispensar", "pwa.installPrompt.started": "Instalação iniciada", "pwa.installPrompt.installed": "OpenChamber instalado", - "shareOpinion.actions.shareOpinion": "Compartilhar opinião", - "shareOpinion.actions.bookCall": "Agendar chamada", - "shareOpinion.actions.shortSurvey": "Pesquisa breve", - "shareOpinion.dialog.title": "Compartilhe sua opinião", - "shareOpinion.toast.title": "Ajude a moldar o OpenChamber", - "shareOpinion.toast.description": "Conte o que é útil, confuso ou está faltando para ajudar a definir os próximos passos.", - "sessions.sidebar.footer.actions.shareOpinion": "Compartilhar opinião", "layout.mainTab.chat": "Chat", "layout.mainTab.plan": "Plano", "layout.mainTab.diff": "Diff", diff --git a/packages/ui/src/lib/i18n/messages/uk.ts b/packages/ui/src/lib/i18n/messages/uk.ts index 9e32a5a4..6d9f9432 100644 --- a/packages/ui/src/lib/i18n/messages/uk.ts +++ b/packages/ui/src/lib/i18n/messages/uk.ts @@ -23,13 +23,6 @@ export const dict: Record = { "pwa.installPrompt.dismiss": "Сховати", "pwa.installPrompt.started": "Установлення розпочато", "pwa.installPrompt.installed": "OpenChamber встановлено", - "shareOpinion.actions.shareOpinion": "Поділитися думкою", - "shareOpinion.actions.bookCall": "Забронювати дзвінок", - "shareOpinion.actions.shortSurvey": "Коротке опитування", - "shareOpinion.dialog.title": "Поділіться своєю думкою", - "shareOpinion.toast.title": "Допоможіть сформувати OpenChamber", - "shareOpinion.toast.description": "Розкажіть, що корисне, незрозуміле чи відсутнє, щоб допомогти сформувати наступні кроки.", - "sessions.sidebar.footer.actions.shareOpinion": "Поділитися думкою", "layout.mainTab.chat": "Чат", "layout.mainTab.plan": "План", "layout.mainTab.diff": "Diff", diff --git a/packages/ui/src/lib/i18n/messages/zh-CN.ts b/packages/ui/src/lib/i18n/messages/zh-CN.ts index d8f16f54..f13a037c 100644 --- a/packages/ui/src/lib/i18n/messages/zh-CN.ts +++ b/packages/ui/src/lib/i18n/messages/zh-CN.ts @@ -23,13 +23,6 @@ export const dict: Record = { 'pwa.installPrompt.dismiss': '忽略', 'pwa.installPrompt.started': '已开始安装', 'pwa.installPrompt.installed': 'OpenChamber 已安装', - 'shareOpinion.actions.shareOpinion': '分享意见', - 'shareOpinion.actions.bookCall': '预约通话', - 'shareOpinion.actions.shortSurvey': '简短问卷', - 'shareOpinion.dialog.title': '分享你的意见', - 'shareOpinion.toast.title': '帮助塑造 OpenChamber', - 'shareOpinion.toast.description': '告诉我们哪些有用、令人困惑或缺失,帮助塑造下一步。', - 'sessions.sidebar.footer.actions.shareOpinion': '分享意见', 'layout.mainTab.chat': '聊天', 'layout.mainTab.plan': '计划', 'layout.mainTab.diff': '差异', diff --git a/packages/ui/src/lib/i18n/messages/zh-TW.ts b/packages/ui/src/lib/i18n/messages/zh-TW.ts index be795a2d..1451a6c8 100644 --- a/packages/ui/src/lib/i18n/messages/zh-TW.ts +++ b/packages/ui/src/lib/i18n/messages/zh-TW.ts @@ -23,13 +23,6 @@ export const dict: Record = { 'pwa.installPrompt.dismiss': '忽略', 'pwa.installPrompt.started': '已開始安裝', 'pwa.installPrompt.installed': 'OpenChamber 已安裝', - 'shareOpinion.actions.shareOpinion': '分享意見', - 'shareOpinion.actions.bookCall': '預約通話', - 'shareOpinion.actions.shortSurvey': '簡短問卷', - 'shareOpinion.dialog.title': '分享你的意見', - 'shareOpinion.toast.title': '協助塑造 OpenChamber', - 'shareOpinion.toast.description': '告訴我們哪些有用、令人困惑或缺少什麼,協助塑造下一步。', - 'sessions.sidebar.footer.actions.shareOpinion': '分享意見', 'layout.mainTab.chat': '聊天', 'layout.mainTab.plan': '計畫', 'layout.mainTab.diff': '差異',