import React, { useState, useEffect, useCallback } from 'react';
import axios from 'axios';
import * as utils from './utils';
import './styles.css';
export const API_URL = 'https://api.example.com';
const TIMEOUT_MS = 5000;
let requestCount = 0;
var legacyFlag = true;
class BaseService {
baseUrl = '';
headers = {};
requestCount = 0;
static instance = null;
constructor(baseUrl) {
this.baseUrl = baseUrl;
this.headers = {
'Content-Type': 'application/json'
};
}
async request(endpoint, options = {}) {
const url = `${this.baseUrl}${endpoint}`;
const response = await axios({
url,
headers: this.headers,
timeout: TIMEOUT_MS,
...options
});
requestCount++;
return response.data;
}
}
export class UserService extends BaseService {
constructor() {
super(API_URL);
}
async getUser(id) {
return this.request(`/users/${id}`);
}
async updateUser(id, data) {
return this.request(`/users/${id}`, {
method: 'PUT',
data
});
}
deleteUser(id) {
return this.request(`/users/${id}`, { method: 'DELETE' });
}
}
export function formatDate(date) {
return date.toLocaleDateString('en-US', {
year: 'numeric',
month: 'long',
day: 'numeric'
});
}
function debounce(fn, delay) {
let timeoutId;
return function (...args) {
clearTimeout(timeoutId);
timeoutId = setTimeout(() => fn.apply(this, args), delay);
};
}
const double = (x) => x * 2;
const fetchData = async (url) => {
const response = await axios.get(url);
return response.data;
};
function* idGenerator() {
let id = 0;
while (true) {
yield id++;
}
}
async function* asyncDataStream(urls) {
for (const url of urls) {
yield await fetchData(url);
}
}
export function Button({ label, onClick, disabled = false }) {
return (
<button
className="btn"
onClick={onClick}
disabled={disabled}
>
{label}
</button>
);
}
export function UserProfile({ userId }) {
const [user, setUser] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
const userService = new UserService();
useEffect(() => {
let mounted = true;
async function loadUser() {
try {
const data = await userService.getUser(userId);
if (mounted) {
setUser(data);
setLoading(false);
}
} catch (err) {
if (mounted) {
setError(err.message);
setLoading(false);
}
}
}
loadUser();
return () => {
mounted = false;
};
}, [userId]);
const handleRefresh = useCallback(() => {
setLoading(true);
userService.getUser(userId)
.then(setUser)
.catch(err => setError(err.message))
.finally(() => setLoading(false));
}, [userId]);
if (loading) return <div>Loading...</div>;
if (error) return <div>Error: {error}</div>;
if (!user) return <div>No user found</div>;
return (
<div className="user-profile">
<h1>{user.name}</h1>
<p>{user.email}</p>
<Button label="Refresh" onClick={handleRefresh} />
</div>
);
}
export function ItemList({ items }) {
return (
<>
<h2>Items</h2>
<ul>
{items.map((item, index) => (
<li key={index}>{item.name}</li>
))}
</ul>
</>
);
}
/**
* Main App component
*/
export default function App() {
const [selectedUserId, setSelectedUserId] = useState(1);
return (
<div className="app">
<header>
<h1>User Management</h1>
</header>
<main>
<UserProfile userId={selectedUserId} />
</main>
</div>
);
}
function processItems(items, mode) {
const results = [];
for (let i = 0; i < items.length; i++) {
const item = items[i];
const processed = item.active ? item.value * 2 : item.value;
switch (mode) {
case 'double':
results.push(processed * 2);
break;
case 'half':
results.push(processed / 2);
break;
case 'skip':
continue;
default:
results.push(processed);
}
}
return results;
}
function validateInput(value) {
if (value === null || value === undefined) {
throw new Error('Value cannot be null or undefined');
}
if (typeof value !== 'object') {
throw new TypeError('Value must be an object');
}
return true;
}
const getStatus = (code) => code === 200 ? 'success' : code >= 400 ? 'error' : 'pending';
function hoistedFunction() {
return 'I am hoisted';
}
console.log(hoistedVar); var hoistedVar = 'hoisted';
export { debounce, double, fetchData };
export { idGenerator as createIdGenerator };