Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add user search #91

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 17 additions & 6 deletions graphite-demo/frontend.jsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import React, { useEffect, useState } from 'react';

const TaskSearch = () => {
const TaskAndUserSearch = () => {
const [tasks, setTasks] = useState([]);
const [users, setUsers] = useState([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
const [searchQuery, setSearchQuery] = useState('');
Expand All @@ -16,14 +17,15 @@ const TaskSearch = () => {
return response.json();
})
.then(data => {
setTasks(data);
setTasks(data.tasks);
setUsers(data.users);
setLoading(false);
})
.catch(error => {
setError(error.message);
setLoading(false);
});
}, [searchQuery]); // Depend on searchQuery
}, [searchQuery]);

if (loading) {
return <div>Loading...</div>;
Expand All @@ -35,22 +37,31 @@ const TaskSearch = () => {

return (
<div>
<h2>Task Search</h2>
<h2>Search Tasks and Users</h2>
<input
type="text"
placeholder="Search tasks..."
placeholder="Search tasks and users..."
value={searchQuery}
onChange={(e) => setSearchQuery(e.target.value)}
/>
<h3>Tasks</h3>
<ul>
{tasks.map(task => (
<li key={task.id}>
<p>{task.description}</p>
</li>
))}
</ul>
<h3>Users</h3>
<ul>
{users.map(user => (
<li key={user.id}>
<p>{user.name}</p>
</li>
))}
</ul>
</div>
);
};

export default TaskSearch;
export default TaskAndUserSearch;
29 changes: 25 additions & 4 deletions graphite-demo/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,38 @@ const tasks = [
}
];

// Fake data for users
const users = [
{
id: 101,
name: 'Alice Smith'
},
{
id: 102,
name: 'Bob Johnson'
},
{
id: 103,
name: 'Charlie Brown'
}
];

app.get('/search', (req, res) => {
// Retrieve the query parameter
const query = req.query.query?.toLowerCase() || '';

// Filter tasks based on the query
const filteredTasks = tasks.filter(task => task.description.toLowerCase().includes(query));
const filteredTasks = tasks.filter(task =>
task.description.toLowerCase().includes(query)
).sort((a, b) => a.description.localeCompare(b.description));

// Sort the filtered tasks alphabetically by description
const sortedTasks = filteredTasks.sort((a, b) => a.description.localeCompare(b.description));
// Filter users based on the query
const filteredUsers = users.filter(user =>
user.name.toLowerCase().includes(query)
).sort((a, b) => a.name.localeCompare(b.name));

res.json(sortedTasks);
// Return both sets of results
res.json({ tasks: filteredTasks, users: filteredUsers });
});

app.listen(port, () => {
Expand Down
Loading