fix: List item UI improvements
This commit is contained in:
@@ -109,7 +109,7 @@ const listsApiMocks = vi.hoisted(() => ({
|
||||
createListApi: vi.fn<() => Promise<unknown>>(),
|
||||
getListItemsApi: vi.fn<() => Promise<unknown>>(),
|
||||
createListItemApi: vi.fn<() => Promise<unknown>>(),
|
||||
updateListItemApi: vi.fn<() => Promise<unknown>>(),
|
||||
updateListItemTitleApi: vi.fn<() => Promise<unknown>>(),
|
||||
setListItemCompletedApi: vi.fn<() => Promise<unknown>>(),
|
||||
addUserToListApi: vi.fn<() => Promise<unknown>>(),
|
||||
removeUserFromListApi: vi.fn<() => Promise<unknown>>(),
|
||||
@@ -211,29 +211,28 @@ describe('useListsStore', () => {
|
||||
expect(store.error).toBe('Network error')
|
||||
})
|
||||
|
||||
it('updates a list item locally and pushes the change to the server', async () => {
|
||||
it('updates a list item title locally and pushes the change via the dedicated endpoint', async () => {
|
||||
listsApiMocks.createListItemApi.mockResolvedValueOnce({
|
||||
id: 'server-item-2',
|
||||
list_id: '',
|
||||
title: 'Eggs',
|
||||
is_completed: false,
|
||||
})
|
||||
listsApiMocks.updateListItemApi.mockResolvedValueOnce(undefined)
|
||||
listsApiMocks.updateListItemTitleApi.mockResolvedValueOnce(undefined)
|
||||
|
||||
const store = useListsStore()
|
||||
await store.createListItem('list-1', 'Eggs')
|
||||
await store.sync()
|
||||
const created = store.listItems.find((entry) => entry.title === 'Eggs')!
|
||||
|
||||
await store.updateListItem(created.id, { is_completed: true })
|
||||
await store.updateListItemTitle(created.id, 'Free-range eggs')
|
||||
await store.sync()
|
||||
|
||||
expect(listsApiMocks.updateListItemApi).toHaveBeenCalledWith({
|
||||
list_item_id: created.id,
|
||||
is_completed: true,
|
||||
expect(listsApiMocks.updateListItemTitleApi).toHaveBeenCalledWith(created.id, {
|
||||
title: 'Free-range eggs',
|
||||
})
|
||||
const updated = store.listItems.find((entry) => entry.id === created.id)
|
||||
expect(updated?.is_completed).toBe(true)
|
||||
expect(updated?.title).toBe('Free-range eggs')
|
||||
expect(updated?.pendingSync).toBe(false)
|
||||
})
|
||||
|
||||
|
||||
+10
-14
@@ -13,7 +13,7 @@ import {
|
||||
createListApi,
|
||||
getListItemsApi,
|
||||
createListItemApi,
|
||||
updateListItemApi,
|
||||
updateListItemTitleApi,
|
||||
setListItemCompletedApi,
|
||||
addUserToListApi,
|
||||
removeUserFromListApi,
|
||||
@@ -180,12 +180,9 @@ export const useListsStore = defineStore('lists', () => {
|
||||
return localItem
|
||||
}
|
||||
|
||||
async function updateListItem(
|
||||
itemId: string,
|
||||
changes: { title?: string; is_completed?: boolean },
|
||||
) {
|
||||
async function updateListItemTitle(itemId: string, title: string) {
|
||||
const patch = {
|
||||
...changes,
|
||||
title,
|
||||
modified_at: new Date().toISOString(),
|
||||
pendingSync: true,
|
||||
}
|
||||
@@ -193,8 +190,8 @@ export const useListsStore = defineStore('lists', () => {
|
||||
const existingItem = listItems.value.find((entry) => entry.id === itemId)
|
||||
if (existingItem) Object.assign(existingItem, patch)
|
||||
await enqueue({
|
||||
type: 'updateListItem',
|
||||
payload: { list_item_id: itemId, ...changes },
|
||||
type: 'updateListItemTitle',
|
||||
payload: { title },
|
||||
localListItemId: itemId,
|
||||
})
|
||||
scheduleSync()
|
||||
@@ -357,11 +354,10 @@ export const useListsStore = defineStore('lists', () => {
|
||||
}
|
||||
break
|
||||
}
|
||||
case 'updateListItem': {
|
||||
await updateListItemApi(entry.payload)
|
||||
if (entry.localListItemId) {
|
||||
await markListItemSynced(entry.localListItemId)
|
||||
}
|
||||
case 'updateListItemTitle': {
|
||||
if (!entry.localListItemId) break
|
||||
await updateListItemTitleApi(entry.localListItemId, entry.payload)
|
||||
await markListItemSynced(entry.localListItemId)
|
||||
break
|
||||
}
|
||||
case 'setListItemCompleted': {
|
||||
@@ -570,7 +566,7 @@ export const useListsStore = defineStore('lists', () => {
|
||||
refresh,
|
||||
createList,
|
||||
createListItem,
|
||||
updateListItem,
|
||||
updateListItemTitle,
|
||||
setListItemCompleted,
|
||||
addUserToList,
|
||||
removeUserFromList,
|
||||
|
||||
Reference in New Issue
Block a user