import { useApi } from 'soapbox/hooks'; import { useCreateEntity } from './useCreateEntity'; import { useDeleteEntity } from './useDeleteEntity'; import { parseEntitiesPath } from './utils'; import type { Entity } from '../types'; import type { EntitySchema, ExpandedEntitiesPath } from './types'; interface UseEntityActionsOpts { schema?: EntitySchema } interface EntityActionEndpoints { delete?: string patch?: string post?: string } function useEntityActions( expandedPath: ExpandedEntitiesPath, endpoints: EntityActionEndpoints, opts: UseEntityActionsOpts = {}, ) { const api = useApi(); const { entityType, path } = parseEntitiesPath(expandedPath); const { deleteEntity, isSubmitting: deleteSubmitting } = useDeleteEntity(entityType, (entityId) => api.delete(endpoints.delete!.replace(/:id/g, entityId))); const { createEntity, isSubmitting: createSubmitting } = useCreateEntity(path, (data) => api.post(endpoints.post!, data), opts); const { createEntity: updateEntity, isSubmitting: updateSubmitting } = useCreateEntity(path, (data) => api.patch(endpoints.patch!, data), opts); return { createEntity, deleteEntity, updateEntity, isSubmitting: createSubmitting || deleteSubmitting || updateSubmitting, }; } export { useEntityActions };