managarten/apps-archived/maerchenzauber/apps/mobile/hooks/useStories.ts
Till-JS 61d181fbc2 chore: archive inactive projects to apps-archived/
Move inactive projects out of active workspace:
- bauntown (community website)
- maerchenzauber (AI story generation)
- memoro (voice memo app)
- news (news aggregation)
- nutriphi (nutrition tracking)
- reader (reading app)
- uload (URL shortener)
- wisekeep (AI wisdom extraction)

Update CLAUDE.md documentation:
- Add presi to active projects
- Document archived projects section
- Update workspace configuration

Archived apps can be re-activated by moving back to apps/

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 07:03:59 +01:00

44 lines
1.3 KiB
TypeScript

import { useState, useEffect, useCallback } from 'react';
import { Story } from '../types/Story';
import { useAuth } from '../src/contexts/AuthContext';
import { dataService } from '../src/utils/dataService';
export function useStories() {
const [allStories, setAllStories] = useState<Story[]>([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
const { user, isAuthenticated } = useAuth();
const fetchStories = useCallback(async () => {
setLoading(true);
setError(null);
if (!isAuthenticated || !user) {
setLoading(false);
setError('User not authenticated');
return;
}
try {
const stories = await dataService.getStories(true); // Include archived stories
setAllStories(stories);
setLoading(false);
} catch (error) {
console.error('Error fetching stories:', error);
setError(error instanceof Error ? error.message : 'Unknown error');
setLoading(false);
}
}, [isAuthenticated, user]);
useEffect(() => {
fetchStories();
}, [fetchStories]);
const getStoryById = (id: string) => allStories.find((story) => story.id === id);
const refreshStories = useCallback(async () => {
await fetchStories();
}, [fetchStories]);
return { allStories, getStoryById, loading, error, refreshStories };
}