feat: post-PR-159 UI cleanup — sidebar IA + account redesign #160
File diff suppressed because it is too large
Load Diff
@@ -3,6 +3,7 @@ import { Link } from 'react-router-dom'
|
|||||||
import { User as UserIcon, Loader2, AlertCircle, Check } from 'lucide-react'
|
import { User as UserIcon, Loader2, AlertCircle, Check } from 'lucide-react'
|
||||||
import { authApi } from '@/api/auth'
|
import { authApi } from '@/api/auth'
|
||||||
import { useAuthStore } from '@/store/authStore'
|
import { useAuthStore } from '@/store/authStore'
|
||||||
|
import { useUserPreferencesStore } from '@/store/userPreferencesStore'
|
||||||
import { cn } from '@/lib/utils'
|
import { cn } from '@/lib/utils'
|
||||||
import { toast } from '@/lib/toast'
|
import { toast } from '@/lib/toast'
|
||||||
import type { UserUpdate } from '@/types'
|
import type { UserUpdate } from '@/types'
|
||||||
@@ -16,6 +17,7 @@ const inputClass = cn(
|
|||||||
export function ProfileSettingsPage() {
|
export function ProfileSettingsPage() {
|
||||||
const user = useAuthStore((s) => s.user)
|
const user = useAuthStore((s) => s.user)
|
||||||
const fetchUser = useAuthStore((s) => s.fetchUser)
|
const fetchUser = useAuthStore((s) => s.fetchUser)
|
||||||
|
const { defaultExportFormat, setDefaultExportFormat } = useUserPreferencesStore()
|
||||||
|
|
||||||
const [name, setName] = useState(user?.name ?? '')
|
const [name, setName] = useState(user?.name ?? '')
|
||||||
const [email, setEmail] = useState(user?.email ?? '')
|
const [email, setEmail] = useState(user?.email ?? '')
|
||||||
@@ -120,6 +122,27 @@ export function ProfileSettingsPage() {
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{/* Default export format — saved on change, not via Save Changes */}
|
||||||
|
<div>
|
||||||
|
<label htmlFor="profile-export-format" className="block text-sm font-medium text-foreground">
|
||||||
|
Default export format
|
||||||
|
</label>
|
||||||
|
<p className="text-xs text-muted-foreground">Pre-selected when exporting sessions.</p>
|
||||||
|
<select
|
||||||
|
id="profile-export-format"
|
||||||
|
value={defaultExportFormat}
|
||||||
|
onChange={(e) => {
|
||||||
|
setDefaultExportFormat(e.target.value as 'markdown' | 'text' | 'html')
|
||||||
|
toast.success('Preference saved')
|
||||||
|
}}
|
||||||
|
className={inputClass}
|
||||||
|
>
|
||||||
|
<option value="markdown">Markdown (.md)</option>
|
||||||
|
<option value="text">Plain text (.txt)</option>
|
||||||
|
<option value="html">HTML (.html)</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
{error && (
|
{error && (
|
||||||
<div className="flex items-center gap-2 text-sm text-rose-500">
|
<div className="flex items-center gap-2 text-sm text-rose-500">
|
||||||
<AlertCircle className="h-4 w-4 shrink-0" />
|
<AlertCircle className="h-4 w-4 shrink-0" />
|
||||||
|
|||||||
Reference in New Issue
Block a user