Allow to join an open group

Also:

* Refactor interacting with a remote event so that you can interact with
  a remote group as well
* Add a setting for group admins to pick between an open and invite-only
  group
* Fix new groups without posts/todos/resources/events/conversations URL
  set
* Repair local groups that haven't got their
  posts/todos/resources/events/conversations URL set
* Add a scheduled job to refresh remote groups every hour
* Add a user setting to pick when to receive notifications when there's
  new members to approve (will be used when this feature is available)
* Fix pagination for members

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2020-11-06 11:34:32 +01:00
parent 7baad7cafc
commit 7c11807c14
74 changed files with 1174 additions and 626 deletions

View File

@@ -574,3 +574,35 @@ export const EVENT_PERSON_PARTICIPATION_SUBSCRIPTION_CHANGED = gql`
}
}
`;
export const GROUP_MEMBERSHIP_SUBSCRIPTION_CHANGED = gql`
subscription($actorId: ID!) {
groupMembershipChanged(personId: $actorId) {
id
memberships {
total
elements {
id
role
parent {
id
preferredUsername
name
domain
avatar {
id
url
}
}
invitedBy {
id
preferredUsername
name
}
insertedAt
updatedAt
}
}
}
}
`;

View File

@@ -63,6 +63,7 @@ export const GROUP_FIELDS_FRAGMENTS = gql`
preferredUsername
suspended
visibility
openness
physicalAddress {
description
street
@@ -262,6 +263,7 @@ export const UPDATE_GROUP = gql`
$avatar: PictureInput
$banner: PictureInput
$visibility: GroupVisibility
$openness: Openness
$physicalAddress: AddressInput
) {
updateGroup(
@@ -271,12 +273,15 @@ export const UPDATE_GROUP = gql`
banner: $banner
avatar: $avatar
visibility: $visibility
openness: $openness
physicalAddress: $physicalAddress
) {
id
preferredUsername
name
summary
visibility
openness
avatar {
id
url

View File

@@ -100,3 +100,12 @@ export const REMOVE_MEMBER = gql`
}
}
`;
export const JOIN_GROUP = gql`
mutation JoinGroup($groupId: ID!) {
joinGroup(groupId: $groupId) {
...MemberFragment
}
}
${MEMBER_FRAGMENT}
`;

View File

@@ -78,3 +78,36 @@ export const SEARCH_PERSONS = gql`
}
}
`;
export const INTERACT = gql`
query Interact($uri: String!) {
interact(uri: $uri) {
... on Event {
id
title
uuid
beginsOn
picture {
id
url
}
tags {
slug
title
}
__typename
}
... on Group {
id
avatar {
id
url
}
domain
preferredUsername
name
__typename
}
}
}
`;

View File

@@ -119,6 +119,7 @@ export const USER_SETTINGS_FRAGMENT = gql`
notificationEachWeek
notificationBeforeEvent
notificationPendingParticipation
notificationPendingMembership
}
`;
@@ -141,7 +142,8 @@ export const SET_USER_SETTINGS = gql`
$notificationOnDay: Boolean
$notificationEachWeek: Boolean
$notificationBeforeEvent: Boolean
$notificationPendingParticipation: NotificationPendingParticipationEnum
$notificationPendingParticipation: NotificationPendingEnum
$notificationPendingMembership: NotificationPendingEnum
) {
setUserSettings(
timezone: $timezone
@@ -149,6 +151,7 @@ export const SET_USER_SETTINGS = gql`
notificationEachWeek: $notificationEachWeek
notificationBeforeEvent: $notificationBeforeEvent
notificationPendingParticipation: $notificationPendingParticipation
notificationPendingMembership: $notificationPendingMembership
) {
...UserSettingFragment
}