UNPKG

create-electron-foundation

Version:

An interactive CLI to bootstrap a modern, type-safe, and scalable Electron application.

146 lines (129 loc) 3.62 kB
// REACT QUERY import { useQuery } from '@tanstack/react-query' import { useMutation } from '@tanstack/react-query' // TYPES import type { APIResource, DBResource, NewDBResource, NewAPIResource, ElectronResponse, } from '../../types' // API ######################################################################## export const useGetAPIResource = ({ id }: { id: number }) => { return useQuery<DBResource>({ queryKey: ['resource', id], queryFn: async () => { const response: ElectronResponse<APIResource> = await window.api.getAPIResourceById(id) if ('error' in response) { throw new Error(response.error.msg) } return { ...response, user_id: response.userId, } }, enabled: !!id, }) } export const useGetAPIResourceList = ({ enabled = true, }: { enabled?: boolean }) => { return useQuery<DBResource[]>({ queryKey: ['resources'], queryFn: async () => { const response: ElectronResponse<APIResource[]> = await window.api.getAPIResourceList() if ('error' in response) { throw new Error(response.error.msg) } return response.map((resource) => ({ ...resource, user_id: resource.userId, })) }, enabled, }) } export const useInsertAPIResource = () => { return useMutation<DBResource, Error, NewAPIResource>({ mutationFn: async (resource: NewAPIResource) => { const response: ElectronResponse<DBResource> = await window.api.insertAPIResource(resource) if ('error' in response) { throw new Error(response.error.msg) } return response }, }) } export const useDeleteAPIResource = () => { return useMutation<DBResource, Error, number>({ mutationFn: async (id: number) => { const response: ElectronResponse<DBResource> = await window.api.deleteAPIResourceById(id) if ('error' in response) { throw new Error(response.error.msg) } return response }, }) } export const useGetDBResource = ({ id }: { id: number }) => { return useQuery<DBResource>({ queryKey: ['resource', id], queryFn: async () => { const response: ElectronResponse<{ data: DBResource }> = await window.db.getDBResourceById(String(id)) if ('error' in response) { throw new Error(response.error.msg) } return response.data }, enabled: !!id, }) } export const useGetDBResourceList = ({ enabled = true, }: { enabled?: boolean }) => { return useQuery<DBResource[]>({ queryKey: ['resources'], queryFn: async () => { const response: ElectronResponse<{ data: DBResource[] }> = await window.db.getDBResourceList() if ('error' in response) { throw new Error(response.error.msg) } return response.data }, enabled, }) } export const useInsertDBResource = () => { return useMutation<{ id: string }, Error, NewDBResource>({ mutationFn: async (resource: NewDBResource) => { const response: ElectronResponse<{ data: { id: string } }> = await window.db.insertDBResource(resource) if ('error' in response) { throw new Error(response.error.msg) } return response.data }, }) } export const useDeleteDBResource = () => { return useMutation<void, Error, string>({ mutationFn: async (id: string) => { const response: ElectronResponse<null> = await window.db.deleteDBResourceById(id) if (response && 'error' in response) { throw new Error(response.error.msg) } }, }) }