@@ -24,6 +24,7 @@ import { HttpError } from "@calcom/lib/http-error";
24
24
import { telemetryEventTypes , useTelemetry } from "@calcom/lib/telemetry" ;
25
25
import { validateBookerLayouts } from "@calcom/lib/validateBookerLayouts" ;
26
26
import type { Prisma } from "@calcom/prisma/client" ;
27
+ import { SchedulingType } from "@calcom/prisma/enums" ;
27
28
import type { customInputSchema , EventTypeMetaDataSchema } from "@calcom/prisma/zod-utils" ;
28
29
import { eventTypeBookingFields } from "@calcom/prisma/zod-utils" ;
29
30
import type { RouterOutputs } from "@calcom/trpc/react" ;
@@ -205,30 +206,6 @@ const EventTypePage = (props: EventTypeSetupProps) => {
205
206
206
207
const router = useRouter ( ) ;
207
208
208
- useEffect ( ( ) => {
209
- const handleRouteChange = ( url : string ) => {
210
- const paths = url . split ( "/" ) ;
211
- if (
212
- ! ! team &&
213
- eventType . hosts . length === 0 &&
214
- ! leaveWithoutAssigningHosts . current &&
215
- ( url === "/event-types" || paths [ 1 ] !== "event-types" )
216
- ) {
217
- setIsOpenAssignmentWarnDialog ( true ) ;
218
- setPendingRoute ( url ) ;
219
- router . events . emit (
220
- "routeChangeError" ,
221
- new Error ( `Aborted route change to ${ url } because none was assigned to team event` )
222
- ) ;
223
- throw "Aborted" ;
224
- }
225
- } ;
226
- router . events . on ( "routeChangeStart" , handleRouteChange ) ;
227
- return ( ) => {
228
- router . events . off ( "routeChangeStart" , handleRouteChange ) ;
229
- } ;
230
- } , [ router ] ) ;
231
-
232
209
const [ periodDates ] = useState < { startDate : Date ; endDate : Date } > ( {
233
210
startDate : new Date ( eventType . periodStartDate || Date . now ( ) ) ,
234
211
endDate : new Date ( eventType . periodEndDate || Date . now ( ) ) ,
@@ -420,6 +397,41 @@ const EventTypePage = (props: EventTypeSetupProps) => {
420
397
formState : { isDirty : isFormDirty , dirtyFields } ,
421
398
} = formMethods ;
422
399
400
+ useEffect ( ( ) => {
401
+ const handleRouteChange = ( url : string ) => {
402
+ const paths = url . split ( "/" ) ;
403
+
404
+ // Check if event is managed event type - skip if there is assigned users
405
+ const assignedUsers = eventType . children ;
406
+ const isManagedEventType = eventType . schedulingType === SchedulingType . MANAGED ;
407
+ if ( eventType . assignAllTeamMembers ) {
408
+ return ;
409
+ } else if ( isManagedEventType && assignedUsers . length > 0 ) {
410
+ return ;
411
+ }
412
+
413
+ const hosts = eventType . hosts ;
414
+ if (
415
+ ! leaveWithoutAssigningHosts . current &&
416
+ ! ! team &&
417
+ ( hosts . length === 0 || assignedUsers . length === 0 ) &&
418
+ ( url === "/event-types" || paths [ 1 ] !== "event-types" )
419
+ ) {
420
+ setIsOpenAssignmentWarnDialog ( true ) ;
421
+ setPendingRoute ( url ) ;
422
+ router . events . emit (
423
+ "routeChangeError" ,
424
+ new Error ( `Aborted route change to ${ url } because none was assigned to team event` )
425
+ ) ;
426
+ throw "Aborted" ;
427
+ }
428
+ } ;
429
+ router . events . on ( "routeChangeStart" , handleRouteChange ) ;
430
+ return ( ) => {
431
+ router . events . off ( "routeChangeStart" , handleRouteChange ) ;
432
+ } ;
433
+ } , [ router ] ) ;
434
+
423
435
const appsMetadata = formMethods . getValues ( "metadata" ) ?. apps ;
424
436
const availability = formMethods . watch ( "availability" ) ;
425
437
let numberOfActiveApps = 0 ;
0 commit comments