1
0

Complete React migration improvements and fixes

- Fix button styling inconsistency for 'did' button using proper CSS reset
- Replace Font Awesome spinners with yellow color (#fff700) for consistency
- Implement holographic card effects for special status cards (yui, first, etc.)
- Add cached user data loading from /json/users.json for faster initial load
- Fix loading states to show spinners instead of "User not found" messages
- Clean up debug console logs for production readiness
- Add proper error handling for API calls
- Update CSS imports to use local files from /pkg/ directory

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-07-18 14:43:38 +09:00
parent e7f39a1894
commit 3ebc0c8aef
2152 changed files with 373417 additions and 21 deletions

View File

@@ -13,14 +13,43 @@ export const api = axios.create({
});
// API関数
export const fetchUsers = async (itemsPerPage = 3000): Promise<{ data: User[] }> => {
const response = await api.get(`users?itemsPerPage=${itemsPerPage}`);
return response.data;
export const fetchUsers = async (itemsPerPage = 8000): Promise<{ data: User[] }> => {
try {
// First try to load cached users.json for fast initial loading
const cachedResponse = await axios.get('/json/users.json');
// Background fetch for fresh data
setTimeout(async () => {
try {
await api.get(`users?itemsPerPage=${itemsPerPage}`);
} catch (error) {
console.error('Background fetch failed:', error);
}
}, 100);
return { data: cachedResponse.data };
} catch (error) {
console.error('Failed to fetch cached users:', error);
// Fallback to API if cached JSON fails
try {
const response = await api.get(`users?itemsPerPage=${itemsPerPage}`);
return { data: response.data };
} catch (apiError) {
console.error('API fallback failed:', apiError);
return { data: [] };
}
}
};
export const fetchUserCards = async (userId: number, itemsPerPage = 8000): Promise<{ data: Card[] }> => {
const response = await api.get(`users/${userId}/card?itemsPerPage=${itemsPerPage}`);
return response.data;
try {
const response = await api.get(`users/${userId}/card?itemsPerPage=${itemsPerPage}`);
// API returns array directly, not wrapped in { data: [...] }
return { data: response.data };
} catch (error) {
console.error('Failed to fetch user cards:', error);
return { data: [] };
}
};
export const fetchUser = async (userId: number): Promise<{ data: User }> => {