feat: remove OTP gate from transactions, fix categories auth, add implementation plan

- Remove OtpGateGuard from transactions controller (OTP verified at login)
- Fix categories controller to use authenticated user instead of TEMP_USER_ID
- Add comprehensive implementation plan document
- Update .env.example with WEB_APP_URL
- Prepare for admin dashboard development
This commit is contained in:
dwindown
2025-10-11 14:00:11 +07:00
parent 0da6071eb3
commit 249f3a9d7d
159 changed files with 13748 additions and 3369 deletions

View File

@@ -9,12 +9,17 @@ type ThemeProviderProps = {
export function ThemeProvider({
children,
defaultTheme = 'system',
defaultTheme = 'light',
storageKey = 'tabungin-ui-theme',
}: ThemeProviderProps) {
const [theme, setTheme] = useState<Theme>(
() => (localStorage.getItem(storageKey) as Theme) || defaultTheme
)
const [theme, setTheme] = useState<Theme>(() => {
const stored = localStorage.getItem(storageKey) as Theme
// If system theme is stored, convert to light
if (stored === 'system') {
return 'light'
}
return stored || defaultTheme
})
const [actualTheme, setActualTheme] = useState<'dark' | 'light'>('light')
@@ -23,19 +28,10 @@ export function ThemeProvider({
root.classList.remove('light', 'dark')
if (theme === 'system') {
const systemTheme = window.matchMedia('(prefers-color-scheme: dark)')
.matches
? 'dark'
: 'light'
root.classList.add(systemTheme)
setActualTheme(systemTheme)
return
}
root.classList.add(theme)
setActualTheme(theme)
// Only support light and dark, no system
const themeToApply = theme === 'system' ? 'light' : theme
root.classList.add(themeToApply)
setActualTheme(themeToApply)
}, [theme])
const value = {