Skip to content

Commit cf53d9b

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

File tree

4 files changed

+22
-5
lines changed

4 files changed

+22
-5
lines changed

apps/platform/src/journey/JourneyController.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -211,15 +211,15 @@ router.get('/:journeyId/steps/:stepId/users', async ctx => {
211211
ctx.body = await pagedUsersByStep(step.id, params)
212212
})
213213

214-
router.delete('/:journeyId/users/:userId', async ctx => {
214+
router.delete('/:journeyId/users/:userId/step/:stepId', async ctx => {
215215
const user = await getUserFromContext(ctx)
216216
if (!user) return ctx.throw(404)
217217
const results = await JourneyUserStep.update(
218-
q => q.where('user_id', user.id)
219-
.whereNull('entrance_id')
218+
q => q.where('id', parseInt(ctx.params.stepId))
219+
.where('user_id', user.id)
220220
.whereNull('ended_at')
221221
.where('journey_id', ctx.state.journey!.id),
222-
{ ended_at: new Date() },
222+
{ ended_at: new Date(), delay_until: undefined, type: 'completed' },
223223
)
224224
ctx.body = { exits: results }
225225
})

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, stepId: number | string) => await client
225+
.delete<number>(`${projectUrl(projectId)}/journeys/${journeyId}/users/${userId}/step/${stepId}`)
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, stepId, user.id)
72+
await state.reload()
73+
}
74+
6275
return <>
6376
<Modal
6477
open={open}

0 commit comments

Comments
 (0)