Skip to content

Commit ee0fb14

Browse files
committed
Refactor task handling to align with updated API; change task identifiers and update data structure in components
1 parent 425e7da commit ee0fb14

File tree

7 files changed

+32
-66
lines changed

7 files changed

+32
-66
lines changed

examples/msw-react-crud/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"dependencies": {
1313
"@objectstack/client": "workspace:*",
1414
"@objectstack/driver-memory": "workspace:*",
15+
"@objectstack/example-todo": "workspace:*",
1516
"@objectstack/plugin-msw": "^0.3.3",
1617
"@objectstack/runtime": "^0.3.3",
1718
"@objectstack/spec": "workspace:*",

examples/msw-react-crud/src/components/TaskForm.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export function TaskForm({ client, editingTask, onSuccess, onCancel }: TaskFormP
2828
if (editingTask) {
2929
setSubject(editingTask.subject);
3030
setPriority(editingTask.priority);
31-
setIsCompleted(editingTask.isCompleted);
31+
setIsCompleted(editingTask.is_completed);
3232
} else {
3333
resetForm();
3434
}
@@ -55,20 +55,20 @@ export function TaskForm({ client, editingTask, onSuccess, onCancel }: TaskFormP
5555
try {
5656
if (editingTask) {
5757
// UPDATE operation using ObjectStack Client
58-
await client.data.update('task', editingTask.id, {
58+
await client.data.update('todo_task', editingTask.id, {
5959
subject: subject.trim(),
6060
priority,
61-
isCompleted
61+
is_completed: isCompleted
6262
});
6363
} else {
6464
// CREATE operation using ObjectStack Client
6565
const taskData: CreateTaskInput = {
6666
subject: subject.trim(),
6767
priority,
68-
isCompleted
68+
is_completed: isCompleted
6969
};
7070

71-
await client.data.create('task', taskData);
71+
await client.data.create('todo_task', taskData);
7272
}
7373

7474
resetForm();

examples/msw-react-crud/src/components/TaskItem.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ export function TaskItem({ task, onEdit, onDelete, onToggleComplete }: TaskItemP
1818
const priorityClass = `priority-${task.priority}`;
1919

2020
return (
21-
<div className={`task-item ${task.isCompleted ? 'completed' : ''}`}>
21+
<div className={`task-item ${task.is_completed ? 'completed' : ''}`}>
2222
<div className="task-content">
2323
<input
2424
type="checkbox"
25-
checked={task.isCompleted}
25+
checked={task.is_completed}
2626
onChange={onToggleComplete}
2727
className="task-checkbox"
2828
/>
@@ -33,7 +33,7 @@ export function TaskItem({ task, onEdit, onDelete, onToggleComplete }: TaskItemP
3333
Priority: {priorityLabel} ({task.priority})
3434
</span>
3535
<span className="task-date">
36-
Created: {new Date(task.createdAt).toLocaleDateString()}
36+
Created: {task.created_at ? new Date(task.created_at).toLocaleDateString() : 'N/A'}
3737
</span>
3838
</div>
3939
</div>

examples/msw-react-crud/src/components/TaskList.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ export function TaskList({ client, onEdit, refreshTrigger }: TaskListProps) {
3131
setError(null);
3232

3333
// Use ObjectStack Client to fetch tasks
34-
const result = await client.data.find('task', {
34+
const result = await client.data.find('todo_task', {
3535
top: 100,
36-
sort: ['priority', '-createdAt']
36+
sort: ['priority', '-created_at']
3737
});
3838

3939
setTasks(result.value as Task[]);
@@ -48,7 +48,7 @@ export function TaskList({ client, onEdit, refreshTrigger }: TaskListProps) {
4848
async function handleDelete(id: string) {
4949
try {
5050
// Use ObjectStack Client to delete task
51-
await client.data.delete('task', id);
51+
await client.data.delete('todo_task', id);
5252

5353
// Refresh the list
5454
await loadTasks();
@@ -60,8 +60,8 @@ export function TaskList({ client, onEdit, refreshTrigger }: TaskListProps) {
6060
async function handleToggleComplete(task: Task) {
6161
try {
6262
// Use ObjectStack Client to update task
63-
await client.data.update('task', task.id, {
64-
isCompleted: !task.isCompleted
63+
await client.data.update('todo_task', task.id, {
64+
is_completed: !task.is_completed
6565
});
6666

6767
// Refresh the list

examples/msw-react-crud/src/mocks/browser.ts

Lines changed: 7 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
import { ObjectStackKernel } from '@objectstack/runtime';
99
import { InMemoryDriver } from '@objectstack/driver-memory';
1010
import { MSWPlugin } from '@objectstack/plugin-msw';
11-
import appConfig from '../../objectstack.config';
11+
// import appConfig from '../../objectstack.config';
12+
import todoConfig from '@objectstack/example-todo/objectstack.config';
1213

1314
let kernel: ObjectStackKernel | null = null;
1415

@@ -19,9 +20,12 @@ export async function startMockServer() {
1920

2021
const driver = new InMemoryDriver();
2122

23+
// Define Seed Data using the Dataset Protocol
24+
// We use the data defined in the Todo App config
25+
2226
kernel = new ObjectStackKernel([
23-
// App Config
24-
appConfig,
27+
// Todo App Config (contains objects and data)
28+
todoConfig,
2529

2630
// In-Memory Database (runs in browser)
2731
driver,
@@ -36,50 +40,6 @@ export async function startMockServer() {
3640

3741
await kernel.start();
3842

39-
// Seed Data: Use the driver directly
40-
if (driver) {
41-
const tasks = [
42-
{
43-
id: '1',
44-
subject: 'Complete MSW integration example',
45-
priority: 1,
46-
isCompleted: false,
47-
createdAt: new Date().toISOString()
48-
},
49-
{
50-
id: '2',
51-
subject: 'Test CRUD operations with React',
52-
priority: 2,
53-
isCompleted: false,
54-
createdAt: new Date().toISOString()
55-
},
56-
{
57-
id: '3',
58-
subject: 'Write documentation',
59-
priority: 3,
60-
isCompleted: true,
61-
createdAt: new Date().toISOString()
62-
}
63-
];
64-
65-
// Ensure schema exists (Driver internal API)
66-
if (driver.syncSchema) {
67-
await driver.syncSchema('task', {});
68-
}
69-
70-
// Insert Data
71-
if (driver.create) {
72-
for (const task of tasks) {
73-
try {
74-
await driver.create('task', task);
75-
} catch (e) {
76-
// Ignore key conflict if seeded
77-
}
78-
}
79-
console.log('[MSW] Seeded initial data.');
80-
}
81-
}
82-
8343
return kernel;
8444
}
8545

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
11
/**
2-
* Task type definition
2+
* Task type definition (todo_task)
33
*/
44
export interface Task {
5-
id: string;
5+
_id: string; // Internal ID
6+
id: string; // External ID usually, but here we might get _id or id depending on driver
67
subject: string;
78
priority: number;
8-
isCompleted: boolean;
9-
createdAt: string;
9+
is_completed: boolean;
10+
due_date?: string;
11+
created_at?: string;
1012
}
1113

1214
export interface CreateTaskInput {
1315
subject: string;
1416
priority?: number;
15-
isCompleted?: boolean;
17+
is_completed?: boolean;
1618
}
1719

1820
export interface UpdateTaskInput {
1921
subject?: string;
2022
priority?: number;
21-
isCompleted?: boolean;
23+
is_completed?: boolean;
2224
}

pnpm-lock.yaml

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)