47 lines
No EOL
1.6 KiB
TypeScript
47 lines
No EOL
1.6 KiB
TypeScript
import { Entities } from 'soapbox/entity-store/entities';
|
|
import { useDismissEntity, useEntities } from 'soapbox/entity-store/hooks';
|
|
import { useApi } from 'soapbox/hooks/useApi';
|
|
import { accountSchema } from 'soapbox/schemas';
|
|
import { GroupRoles } from 'soapbox/schemas/group-member';
|
|
|
|
import { useGroupRelationship } from './useGroupRelationship';
|
|
|
|
import type { ExpandedEntitiesPath } from 'soapbox/entity-store/hooks/types';
|
|
|
|
function useGroupMembershipRequests(groupId: string) {
|
|
const api = useApi();
|
|
const path: ExpandedEntitiesPath = [Entities.ACCOUNTS, 'membership_requests', groupId];
|
|
|
|
const { groupRelationship: relationship } = useGroupRelationship(groupId);
|
|
|
|
const { entities, invalidate, fetchEntities, ...rest } = useEntities(
|
|
path,
|
|
() => api.get(`/api/v1/groups/${groupId}/membership_requests`),
|
|
{
|
|
schema: accountSchema,
|
|
enabled: relationship?.role === GroupRoles.OWNER || relationship?.role === GroupRoles.ADMIN,
|
|
},
|
|
);
|
|
|
|
const { dismissEntity: authorize } = useDismissEntity(path, async (accountId: string) => {
|
|
const response = await api.post(`/api/v1/groups/${groupId}/membership_requests/${accountId}/authorize`);
|
|
invalidate();
|
|
return response;
|
|
});
|
|
|
|
const { dismissEntity: reject } = useDismissEntity(path, async (accountId: string) => {
|
|
const response = await api.post(`/api/v1/groups/${groupId}/membership_requests/${accountId}/reject`);
|
|
invalidate();
|
|
return response;
|
|
});
|
|
|
|
return {
|
|
accounts: entities,
|
|
refetch: fetchEntities,
|
|
authorize,
|
|
reject,
|
|
...rest,
|
|
};
|
|
}
|
|
|
|
export { useGroupMembershipRequests }; |