Call bulk actions API

This commit is contained in:
Jackson Harper
2023-06-08 14:56:56 +08:00
parent 7e5e7c4c5f
commit 17735744f8
2 changed files with 45 additions and 16 deletions

View File

@ -44,6 +44,7 @@ import { LibraryHeader, MultiSelectMode } from './LibraryHeader'
import { UploadModal } from '../UploadModal'
import { BulkAction } from '../../../lib/networking/mutations/bulkActionMutation'
import { bulkActionMutation } from '../../../lib/networking/mutations/bulkActionMutation'
import { showErrorToast, showSuccessToast } from '../../../lib/toastHelpers'
export type LayoutType = 'LIST_LAYOUT' | 'GRID_LAYOUT'
export type LibraryMode = 'reads' | 'highlights'
@ -349,7 +350,7 @@ export function HomeFeedContainer(): JSX.Element {
if (activeItem) {
if (multiSelectMode === 'off') {
console.log('setting ')
setMultiSelectMode('none')
setMultiSelectMode('some')
}
const itemId = activeItem.node.id
const isChecked = itemIsChecked(itemId)
@ -608,6 +609,12 @@ export function HomeFeedContainer(): JSX.Element {
const performMultiSelectAction = useCallback(
(action: BulkAction) => {
if (multiSelectMode === 'off') {
return
}
if (multiSelectMode !== 'search' && checkedItems.length < 1) {
return
}
console.log(
'performing bulk action: ',
action,
@ -615,12 +622,31 @@ export function HomeFeedContainer(): JSX.Element {
multiSelectMode,
checkedItems
)
try {
// const query = multiSelectMode === 'some' ?
// const res = await bulkActionMutation(action, query)
} catch (err) {}
;(async () => {
const query =
multiSelectMode === 'some'
? `includes:${checkedItems.join(',')}`
: queryInputs.searchQuery || 'in:inbox'
try {
const res = await bulkActionMutation(action, query)
if (res) {
switch (action) {
case BulkAction.ARCHIVE:
showSuccessToast('Items archived')
break
case BulkAction.DELETE:
showSuccessToast('Items deleted')
break
}
} else {
showErrorToast('Error performing bulk action')
}
} catch (err) {
showErrorToast('Error performing bulk action')
}
})()
},
[checkedItems]
[multiSelectMode, checkedItems]
)
return (

View File

@ -15,24 +15,27 @@ type BulkActionResponse = {
bulkAction?: BulkActionResponseData
}
export async function bulkActionMutation(action: BulkAction): Promise<boolean> {
export async function bulkActionMutation(
action: BulkAction,
query: string
): Promise<boolean> {
const mutation = gql`
mutation {
bulkAction (action: ${action}) {
... on BulkActionSuccess {
success
}
... on BulkActionError {
errorCodes
mutation {
bulkAction(action: $action, query: $query) {
... on BulkActionSuccess {
success
}
... on BulkActionError {
errorCodes
}
}
}
}
`
console.log('bulkActionbulkActionMutation', mutation)
try {
const response = await gqlFetcher(mutation, { action })
const response = await gqlFetcher(mutation, { action, query })
console.log('response', response)
const data = response as BulkActionResponse | undefined
return data?.bulkAction?.success ?? false