Skip to content

Commit

Permalink
chore(release): release v8.23.8 (#10792)
Browse files Browse the repository at this point in the history
Co-authored-by: parabol-release-bot[bot] <150284312+parabol-release-bot[bot]@users.noreply.github.com>
  • Loading branch information
parabol-release-bot[bot] authored and tianrunhe committed Feb 6, 2025
1 parent 968c4fd commit 42056e7
Show file tree
Hide file tree
Showing 11 changed files with 308 additions and 14 deletions.
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "8.23.7"
".": "8.23.8"
}
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,13 @@ This project adheres to [Semantic Versioning](http://semver.org/).

This CHANGELOG follows conventions [outlined here](http://keepachangelog.com/).

## [8.23.8](https://github.com/ParabolInc/parabol/compare/v8.23.7...v8.23.8) (2025-02-04)


### Fixed

* Allow navigation in meetings with invalid facilitator stage ([#10791](https://github.com/ParabolInc/parabol/issues/10791)) ([968c4fd](https://github.com/ParabolInc/parabol/commit/968c4fd35eacecd71b4492810e55dd4ead68ec08))

## [8.23.7](https://github.com/ParabolInc/parabol/compare/v8.23.6...v8.23.7) (2025-02-04)


Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"description": "An open-source app for building smarter, more agile teams.",
"author": "Parabol Inc. <[email protected]> (http://github.com/ParabolInc)",
"license": "AGPL-3.0",
"version": "8.23.7",
"version": "8.23.8",
"repository": {
"type": "git",
"url": "https://github.com/ParabolInc/parabol"
Expand Down
4 changes: 2 additions & 2 deletions packages/chronos/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "chronos",
"version": "8.23.7",
"version": "8.23.8",
"description": "A cron job scheduler",
"author": "Matt Krick <[email protected]>",
"homepage": "https://github.com/ParabolInc/parabol/tree/master/packages/chronos#readme",
Expand All @@ -25,6 +25,6 @@
},
"dependencies": {
"cron": "^2.3.1",
"parabol-server": "8.23.7"
"parabol-server": "8.23.8"
}
}
287 changes: 287 additions & 0 deletions packages/client/mutations/RemoveMultipleOrgUsersMutation.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,287 @@
import graphql from 'babel-plugin-relay/macro'
import {commitLocalUpdate, commitMutation} from 'react-relay'
import {RecordProxy} from 'relay-runtime'
import {RemoveMultipleOrgUsersMutation as TRemoveMultipleOrgUsersMutation} from '~/__generated__/RemoveMultipleOrgUsersMutation.graphql'
import {RemoveMultipleOrgUsersMutation_organization$data} from '~/__generated__/RemoveMultipleOrgUsersMutation_organization.graphql'
import {RemoveMultipleOrgUsersMutation_notification$data} from '../__generated__/RemoveMultipleOrgUsersMutation_notification.graphql'
import {RemoveMultipleOrgUsersMutation_task$data} from '../__generated__/RemoveMultipleOrgUsersMutation_task.graphql'
import {RemoveMultipleOrgUsersMutation_team$data} from '../__generated__/RemoveMultipleOrgUsersMutation_team.graphql'
import {
HistoryLocalHandler,
OnNextHandler,
OnNextHistoryContext,
SharedUpdater,
StandardMutation
} from '../types/relayMutations'
import findStageById from '../utils/meetings/findStageById'
import onExOrgRoute from '../utils/onExOrgRoute'
import onMeetingRoute from '../utils/onMeetingRoute'
import onTeamRoute from '../utils/onTeamRoute'
import {setLocalStageAndPhase} from '../utils/relay/updateLocalStage'
import handleAddNotifications from './handlers/handleAddNotifications'
import handleRemoveOrgMembers from './handlers/handleRemoveOrgMembers'
import handleRemoveOrganization from './handlers/handleRemoveOrganization'
import handleRemoveTasks from './handlers/handleRemoveTasks'
import handleRemoveTeamMembers from './handlers/handleRemoveTeamMembers'
import handleRemoveTeams from './handlers/handleRemoveTeams'
import handleUpsertTasks from './handlers/handleUpsertTasks'

graphql`
fragment RemoveMultipleOrgUsersMutation_organization on RemoveMultipleOrgUsersSuccess {
organization {
id
}
users {
id
}
removedOrgMembers {
id
}
}
`

graphql`
fragment RemoveMultipleOrgUsersMutation_notification on RemoveMultipleOrgUsersSuccess {
organization {
id
name
}
kickOutNotifications {
id
type
team {
id
name
activeMeetings {
id
}
}
...KickedOut_notification
}
}
`

graphql`
fragment RemoveMultipleOrgUsersMutation_team on RemoveMultipleOrgUsersSuccess {
teamMembers {
id
}
users {
id
}
teams {
...RemoveTeamMemberMutation_teamTeam @relay(mask: false)
activeMeetings {
id
}
}
}
`

graphql`
fragment RemoveMultipleOrgUsersMutation_task on RemoveMultipleOrgUsersSuccess {
updatedTasks {
...CompleteTaskFrag @relay(mask: false)
}
users {
id
}
}
`

const mutation = graphql`
mutation RemoveMultipleOrgUsersMutation($userIds: [ID!]!, $orgId: ID!) {
removeMultipleOrgUsers(userIds: $userIds, orgId: $orgId) {
... on ErrorPayload {
error {
message
}
}
... on RemoveMultipleOrgUsersSuccess {
...RemoveMultipleOrgUsersMutation_organization @relay(mask: false)
...RemoveMultipleOrgUsersMutation_team @relay(mask: false)
...RemoveMultipleOrgUsersMutation_task @relay(mask: false)
...RemoveMultipleOrgUsersMutation_notification @relay(mask: false)
}
}
}
`

export const removeMultipleOrgUsersOrganizationUpdater: SharedUpdater<
RemoveMultipleOrgUsersMutation_organization$data
> = (payload, {atmosphere, store}) => {
const {viewerId} = atmosphere
const users = payload.getLinkedRecords('users')
const removedOrgMembers = payload.getLinkedRecords('removedOrgMembers')
const orgId = payload.getLinkedRecord('organization').getValue('id')

if (users.some((user) => user.getValue('id') === viewerId)) {
handleRemoveOrganization(orgId, store)
} else {
removedOrgMembers.forEach((member) => {
handleRemoveOrgMembers(orgId, member.getValue('id'), store)
})
}
}

export const removeMultipleOrgUsersNotificationUpdater: SharedUpdater<
RemoveMultipleOrgUsersMutation_notification$data
> = (payload, {store}) => {
const kickOutNotifications = payload.getLinkedRecords('kickOutNotifications')
handleAddNotifications(kickOutNotifications, store)
}

export const removeMultipleOrgUsersTeamUpdater: SharedUpdater<
RemoveMultipleOrgUsersMutation_team$data
> = (payload, {atmosphere, store}) => {
const users = payload.getLinkedRecords('users')
const {viewerId} = atmosphere

if (users.some((user) => user.getValue('id') === viewerId)) {
const teams = payload.getLinkedRecords('teams')
const teamIds = teams.map((team) => team.getValue('id'))
handleRemoveTeams(teamIds, store)
} else {
const teamMembers = payload.getLinkedRecords('teamMembers')
const teamMemberIds = teamMembers?.map((teamMember) => teamMember.getValue('id'))
handleRemoveTeamMembers(teamMemberIds, store)
}
}

export const removeMultipleOrgUsersTaskUpdater: SharedUpdater<
RemoveMultipleOrgUsersMutation_task$data
> = (payload, {atmosphere, store}) => {
const users = payload.getLinkedRecords('users')
const tasks = payload.getLinkedRecords('updatedTasks')
if (!tasks) return

if (users.some((user) => user.getValue('id') === atmosphere.viewerId)) {
const taskIds = tasks.map((task) => task.getValue('id'))
handleRemoveTasks(taskIds, store)
} else {
handleUpsertTasks(tasks, store)
}
}

export const removeMultipleOrgUsersTeamOnNext: OnNextHandler<
RemoveMultipleOrgUsersMutation_team$data
> = (payload, context) => {
const {atmosphere} = context
const {teams} = payload
if (!teams) return
teams.forEach((team) => {
const {activeMeetings} = team
activeMeetings.forEach((newMeeting) => {
const {id: meetingId, facilitatorStageId, phases} = newMeeting
commitLocalUpdate(atmosphere, (store) => {
const meetingProxy = store.get(meetingId)
if (!meetingProxy) return
const localStage = meetingProxy.getLinkedRecord('localStage')
if (!localStage) return
const viewerStageId = localStage.getValue('id') as string
const stageRes = findStageById(phases, viewerStageId)
if (!stageRes) {
setLocalStageAndPhase(store, meetingId, facilitatorStageId)
}
})
})
})
}

export const removeMultipleOrgUsersOrganizationOnNext: OnNextHandler<
RemoveMultipleOrgUsersMutation_organization$data,
OnNextHistoryContext
> = (payload, context) => {
const {
atmosphere: {viewerId},
history
} = context
const {pathname} = history.location
const {users, organization} = payload
const orgId = organization?.id ?? ''
if (users.some((user) => user.id === viewerId) && onExOrgRoute(pathname, orgId)) {
history.push('/meetings')
}
}

export const removeMultipleOrgUsersNotificationOnNext: OnNextHandler<
RemoveMultipleOrgUsersMutation_notification$data,
OnNextHistoryContext
> = (payload, {atmosphere, history}) => {
if (!payload) return
const {organization, kickOutNotifications} = payload
if (!organization || !kickOutNotifications) return
const {name: orgName, id: orgId} = organization
const teams = kickOutNotifications.map((notification) => notification && notification.team)
atmosphere.eventEmitter.emit('addSnackbar', {
key: `removedFromOrg:${orgId}`,
autoDismiss: 10,
message: `You have been removed from ${orgName} and all its teams`
})

for (let ii = 0; ii < teams.length; ii++) {
const team = teams[ii]
if (!team) continue
const {activeMeetings, id: teamId} = team
const meetingIds = activeMeetings.map(({id}) => id)
if (
onTeamRoute(window.location.pathname, teamId) ||
onMeetingRoute(window.location.pathname, meetingIds)
) {
history.push('/meetings')
return
}
}
}

const RemoveMultipleOrgUsersMutation: StandardMutation<
TRemoveMultipleOrgUsersMutation,
HistoryLocalHandler
> = (atmosphere, variables, {history, onError, onCompleted}) => {
return commitMutation<TRemoveMultipleOrgUsersMutation>(atmosphere, {
mutation,
variables,
updater: (store) => {
const payload = store.getRootField('removeMultipleOrgUsers')
if (!payload) return
if (payload.getValue('error')) return
const success = payload.getLinkedRecord('RemoveMultipleOrgUsersSuccess')
if (!success) return

const organizationSuccess =
success as RecordProxy<RemoveMultipleOrgUsersMutation_organization$data>
const teamSuccess = success as RecordProxy<RemoveMultipleOrgUsersMutation_team$data>
const taskSuccess = success as RecordProxy<RemoveMultipleOrgUsersMutation_task$data>
const notificationSuccess =
success as RecordProxy<RemoveMultipleOrgUsersMutation_notification$data>

removeMultipleOrgUsersOrganizationUpdater(organizationSuccess, {atmosphere, store})
removeMultipleOrgUsersTeamUpdater(teamSuccess, {atmosphere, store})
removeMultipleOrgUsersTaskUpdater(taskSuccess, {atmosphere, store})
removeMultipleOrgUsersNotificationUpdater(notificationSuccess, {atmosphere, store})
},
onCompleted: (res, errors) => {
if (onCompleted) {
onCompleted(res, errors)
}
const payload = res.removeMultipleOrgUsers
if (!payload || !('success' in payload)) return
const {success} = payload
if (!success) return

const organizationSuccess = success as RemoveMultipleOrgUsersMutation_organization$data
const teamSuccess = success as RemoveMultipleOrgUsersMutation_team$data
const notificationSuccess = success as RemoveMultipleOrgUsersMutation_notification$data

removeMultipleOrgUsersOrganizationOnNext(organizationSuccess, {
history,
atmosphere
})
removeMultipleOrgUsersTeamOnNext(teamSuccess, {atmosphere})
removeMultipleOrgUsersNotificationOnNext(notificationSuccess, {atmosphere, history})
},
onError
})
}

export default RemoveMultipleOrgUsersMutation
2 changes: 1 addition & 1 deletion packages/client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"description": "An open-source app for building smarter, more agile teams.",
"author": "Parabol Inc. <[email protected]> (http://github.com/ParabolInc)",
"license": "AGPL-3.0",
"version": "8.23.7",
"version": "8.23.8",
"repository": {
"type": "git",
"url": "https://github.com/ParabolInc/parabol"
Expand Down
2 changes: 1 addition & 1 deletion packages/embedder/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "parabol-embedder",
"version": "8.23.7",
"version": "8.23.8",
"description": "A service that computes embedding vectors from Parabol objects",
"author": "Jordan Husney <[email protected]>",
"homepage": "https://github.com/ParabolInc/parabol/tree/master/packages/embedder#readme",
Expand Down
6 changes: 3 additions & 3 deletions packages/gql-executor/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "gql-executor",
"version": "8.23.7",
"version": "8.23.8",
"description": "A Stateless GraphQL Executor",
"author": "Matt Krick <[email protected]>",
"homepage": "https://github.com/ParabolInc/parabol/tree/master/packages/gqlExecutor#readme",
Expand All @@ -25,8 +25,8 @@
},
"dependencies": {
"dd-trace": "^5.0.0",
"parabol-client": "8.23.7",
"parabol-server": "8.23.7",
"parabol-client": "8.23.8",
"parabol-server": "8.23.8",
"undici": "^5.26.2"
}
}
2 changes: 1 addition & 1 deletion packages/integration-tests/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "integration-tests",
"author": "Parabol Inc. <[email protected]> (http://github.com/ParabolInc)",
"license": "AGPL-3.0",
"version": "8.23.7",
"version": "8.23.8",
"description": "",
"main": "index.js",
"scripts": {
Expand Down
4 changes: 2 additions & 2 deletions packages/mattermost-plugin/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "parabol-mattermost-plugin",
"version": "8.23.7",
"version": "8.23.8",
"description": "A service that computes embedding vectors from Parabol objects",
"author": "Georg Bremer <[email protected]>",
"homepage": "https://github.com/ParabolInc/parabol/tree/master/packages/mattermost-plugin#readme",
Expand Down Expand Up @@ -48,7 +48,7 @@
"ts-node-dev": "^1.0.0-pre.44"
},
"dependencies": {
"parabol-client": "8.23.7",
"parabol-client": "8.23.8",
"@mattermost/compass-icons": "0.1.47",
"@reduxjs/toolkit": "1.9.7",
"@tiptap/core": "^2.9.1",
Expand Down
Loading

0 comments on commit 42056e7

Please sign in to comment.