implement frontend skeleton with tab navigation and service layer

- Add tab-based navigation (Chat, Calendar) using Expo-Router
- Create auth screens (login, register) as skeletons
- Add dynamic routes for event detail and note editing
- Implement service layer (ApiClient, AuthService, EventService, ChatService)
- Add Zustand stores (AuthStore, EventsStore) for state management
- Create EventCard and EventConfirmDialog components
- Update CLAUDE.md with new frontend architecture documentation
- Add Zustand and FlashList to technology stack
This commit is contained in:
2026-01-03 10:47:12 +01:00
parent 5cc1ce7f1c
commit 9cc6d17607
24 changed files with 537 additions and 75 deletions

View File

@@ -0,0 +1,26 @@
import { create } from 'zustand';
import { User } from '@caldav/shared';
interface AuthState {
user: User | null;
token: string | null;
isAuthenticated: boolean;
login: (user: User, token: string) => void;
logout: () => void;
setToken: (token: string) => void;
}
export const useAuthStore = create<AuthState>((set) => ({
user: null,
token: null,
isAuthenticated: false,
login: (_user: User, _token: string) => {
throw new Error('Not implemented');
},
logout: () => {
throw new Error('Not implemented');
},
setToken: (_token: string) => {
throw new Error('Not implemented');
},
}));

View File

@@ -0,0 +1,26 @@
import { create } from 'zustand';
import { CalendarEvent } from '@caldav/shared';
interface EventsState {
events: CalendarEvent[];
setEvents: (events: CalendarEvent[]) => void;
addEvent: (event: CalendarEvent) => void;
updateEvent: (id: string, event: Partial<CalendarEvent>) => void;
deleteEvent: (id: string) => void;
}
export const useEventsStore = create<EventsState>((set) => ({
events: [],
setEvents: (_events: CalendarEvent[]) => {
throw new Error('Not implemented');
},
addEvent: (_event: CalendarEvent) => {
throw new Error('Not implemented');
},
updateEvent: (_id: string, _event: Partial<CalendarEvent>) => {
throw new Error('Not implemented');
},
deleteEvent: (_id: string) => {
throw new Error('Not implemented');
},
}));

View File

@@ -0,0 +1,2 @@
export { useAuthStore } from './AuthStore';
export { useEventsStore } from './EventsStore';