Skip to content

Commit 8bec6ff

Browse files
committed
feat: include the ability to remove users from a journey
1 parent 6b43819 commit 8bec6ff

File tree

4 files changed

+19
-3
lines changed

4 files changed

+19
-3
lines changed

apps/platform/src/journey/JourneyController.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -216,10 +216,9 @@ router.delete('/:journeyId/users/:userId', async ctx => {
216216
if (!user) return ctx.throw(404)
217217
const results = await JourneyUserStep.update(
218218
q => q.where('user_id', user.id)
219-
.whereNull('entrance_id')
220219
.whereNull('ended_at')
221220
.where('journey_id', ctx.state.journey!.id),
222-
{ ended_at: new Date() },
221+
{ ended_at: new Date(), type: 'completed' },
223222
)
224223
ctx.body = { exits: results }
225224
})

apps/ui/public/locales/en.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,7 @@
333333
"setup_integration_no_providers": "There are no providers configured for this channel. Please add a provider to continue.",
334334
"sign_out": "Sign Out",
335335
"skip_delay": "Skip Delay",
336+
"remove_from_journey": "Remove from journey",
336337
"sms_opt_out_message": "SMS Opt Out Message",
337338
"sms_opt_out_message_subtitle": "Instructions on how to opt out of SMS that will be appended to every text.",
338339
"sms_help_message": "SMS Help Message",

apps/ui/src/api.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,9 @@ const api = {
221221
skipDelay: async (projectId: number | string, journeyId: number | string, userId: number | string, stepId: number | string) => await client
222222
.post<JourneyEntranceDetail>(`${projectUrl(projectId)}/journeys/${journeyId}/users/${userId}/steps/${stepId}/resume`)
223223
.then(r => r.data),
224+
removeFromJourney: async (projectId: number | string, journeyId: number | string, userId: number | string) => await client
225+
.delete<number>(`${projectUrl(projectId)}/journeys/${journeyId}/users/${userId}`)
226+
.then(r => r.data),
224227
},
225228
},
226229

apps/ui/src/views/journey/JourneyStepUsers.tsx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { UserLookup } from '../users/UserLookup'
99
import { typeVariants } from './EntranceDetails'
1010
import { ModalProps } from '../../ui/Modal'
1111
import { JourneyUserStep, User } from '../../types'
12-
import { EditIcon } from '../../ui/icons'
12+
import { EditIcon, TrashIcon } from '../../ui/icons'
1313
import { DataTableCol } from '../../ui/DataTable'
1414

1515
interface StepUsersProps extends Omit<ModalProps, 'title'> {
@@ -35,6 +35,14 @@ export function JourneyStepUsers({ open, onClose, stepType, stepId }: StepUsersP
3535
<MenuItem onClick={async () => await handleSkipDelay(id, user)}>
3636
<EditIcon />{t('skip_delay')}
3737
</MenuItem>
38+
<MenuItem>
39+
<Button icon={<TrashIcon />}
40+
variant="destructive"
41+
onClick={async () => await handleRemoveFromJourney(id, user)}
42+
size="small">
43+
{t('remove_from_journey')}
44+
</Button>
45+
</MenuItem>
3846
</Menu>
3947
)
4048
}
@@ -59,6 +67,11 @@ export function JourneyStepUsers({ open, onClose, stepType, stepId }: StepUsersP
5967
await state.reload()
6068
}
6169

70+
const handleRemoveFromJourney = async (stepId: number, user: User) => {
71+
await api.journeys.users.removeFromJourney(projectId, journeyId, user.id)
72+
await state.reload()
73+
}
74+
6275
return <>
6376
<Modal
6477
open={open}

0 commit comments

Comments
 (0)