PageSourceSearch

https://navpro.truckerpath.com/assets/terminals-detail-H8z25OHW.js

js truckerpath.com collected 2026-09-24 09:45:26 UTC 28,502 bytes, 848 lines download raw bytes

1import { a as __toESM } from "./rolldown-runtime-Cql5ZV07.js";
2import { p as require_react } from "./vendor-charts-D81iZKCV.js";
3import { g as require_compiler_runtime, p as useParams, t as require_jsx_runtime } from "./vendor-react-HZz3WA9p.js";
4import "./vendor-dnd-D_JGdZnv.js";
5import "./vendor-mixpanel-Dh8wsiZW.js";
6import "./device-CBwMusKw.js";
7import "./vendor-redux-CLEI5hTp.js";
8import "./vendor-pdf-DksyQ9Qr.js";
9import { D as useSize_default, I as useDebounceEffect_default } from "./vendor-utils-DiM3BD4o.js";
10import "./vendor-ui-G6aSO5L-.js";
11import { n as toast } from "./dist-Bh07-69G.js";
12import { G as Plus, I as Search, Zt as Ellipsis, b as Trash2, z as RotateCw } from "./vendor-lucide-EY3Z5fcy.js";
13import { a as cn, t as Button } from "./button-BWyXpawe.js";
14import "./vendor-twilio-BWAG7uEQ.js";
15import { t as BizIcon } from "./biz-icon-BHlHk8WD.js";
16import "./ping-one-CpLVEVLd.js";
17import "./vendor-tiptap-_i5A4X7p.js";
18import "./app-storage-slice-mFVFfzPf.js";
19import { o as getInitials } from "./strings-dAFeDkjR.js";
20import { i as createColumnHelper, t as useVirtualizer } from "./vendor-tanstack-N3AJtZOe.js";
21import { t as Spin } from "./spin-Bjb5hq6_.js";
22import { b as useForm, d as numberType, f as objectType, i as arrayType, t, x as useFormContext, y as useFieldArray } from "./vendor-form-DCqShb_y.js";
23import "./label-BU8XDazs.js";
24import { a as AlertDialogDescription, c as AlertDialogTitle, i as AlertDialogContent, n as AlertDialogAction, o as AlertDialogFooter, r as AlertDialogCancel, s as AlertDialogHeader, t as AlertDialog } from "./alert-dialog-DqgZ-9QP.js";
25import { F as DEFAULT_PAGINATION_SHOW_ITEMS_INFO, Gn as DropdownMenuTrigger, I as DEFAULT_PAGINATION_SHOW_PAGE_SIZE_SELECTOR, Kn as Avatar, L as DEFAULT_PAGINATION_SIZE_OPTIONS, Ln as DropdownMenu, P as DEFAULT_PAGE_SIZE, Rn as DropdownMenuContent, St as Checkbox, Yn as trackMethodCall, cn as DialogFooter, ct as Empty, dn as DialogTitle, dt as EmptyHeader, ft as EmptyMedia, hn as Badge, in as Dialog, k as data_table_default, ln as DialogHeader, mr as Input, nt as FormItem, on as DialogContent, pr as Separator, pt as EmptyTitle, qn as AvatarFallback, rt as FormWrapper, sn as DialogDescription, un as DialogInner, ut as EmptyDescription, zn as DropdownMenuItem } from "./main-DDHJZG-i.js";
26import "./breadcrumb-DaQ4spt4.js";
27import { t as AppBreadcrumb } from "./app-breadcrumb-C_0-hj4G.js";
28import { a as useGetTerminalMembersQuery, i as useGetCompanyMembersQuery, s as useRemoveMemberFromTerminalMutation, t as useAddMembersToTerminalMutation } from "./terminals-service-C5yhnzod.js";
29var import_compiler_runtime$2 = /* @__PURE__ */ __toESM(require_compiler_runtime());
30var import_react = /* @__PURE__ */ __toESM(require_react());
31var import_jsx_runtime = /* @__PURE__ */ __toESM(require_jsx_runtime());
32var columnHelper = createColumnHelper();
33var STATUS_BADGE_VARIANT_MAP = {
34	active: "success",
35	inactive: "neutral-subtle",
36	pending: "default"
37};
38var TerminalsMemberTable = ({ data, loading, groupId, page, pageSize, total, onPageChange, onPageSizeChange }) => {
39	const [deleteDialogOpen, setDeleteDialogOpen] = (0, import_react.useState)(false);
40	const [memberToDelete, setMemberToDelete] = (0, import_react.useState)(null);
41	const [removeMember, { isLoading: isRemoving }] = useRemoveMemberFromTerminalMutation();
42	const handleDeleteConfirm = async () => {
43		trackMethodCall("handleDeleteConfirm", []);
44		if (!memberToDelete || !groupId) return;
45		try {
46			const result = await removeMember({
47				groupId,
48				userId: memberToDelete.id,
49				type: memberToDelete.status.toLowerCase(),
50				email: memberToDelete.email
51			}).unwrap();
52			if (result.code === 200) {
53				toast.success("Member removed successfully");
54				setDeleteDialogOpen(false);
55				setMemberToDelete(null);
56			} else throw new Error(result.message);
57		} catch (error) {
58			toast.error(error instanceof Error ? error.message : "Failed to remove member");
59		}
60	};
61	const handleDeleteCancel = () => {
62		trackMethodCall("handleDeleteCancel", []);
63		setDeleteDialogOpen(false);
64		setMemberToDelete(null);
65	};
66	const columns = [
67		columnHelper.accessor("email", {
68			id: "email",
69			header: "EMAIL",
70			size: 200,
71			cell: (info) => {
72				return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
73					className: "truncate font-medium text-foreground",
74					children: info.getValue()
75				});
76			}
77		}),
78		columnHelper.accessor("phone", {
79			id: "phone",
80			header: "CONTACT NUMBER",
81			size: 180,
82			cell: (info_0) => {
83				return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
84					className: "font-medium text-foreground",
85					children: info_0.getValue()
86				});
87			}
88		}),
89		columnHelper.accessor("firstName", {
90			id: "firstName",
91			header: "FIRST NAME",
92			size: 150,
93			cell: (info_1) => {
94				return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
95					className: "font-medium text-foreground",
96					children: info_1.getValue()
97				});
98			}
99		}),
100		columnHelper.accessor("lastName", {
101			id: "lastName",
102			header: "LAST NAME",
103			size: 150,
104			cell: (info_2) => {
105				return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
106					className: "font-medium text-foreground",
107					children: info_2.getValue()
108				});
109			}
110		}),
111		columnHelper.accessor("role", {
112			id: "role",
113			header: "ROLE",
114			size: 140,
115			cell: (info_3) => {
116				return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
117					className: "font-medium text-foreground",
118					children: info_3.getValue()
119				});
120			}
121		}),
122		columnHelper.accessor("status", {
123			id: "status",
124			header: "STATUS",
125			size: 120,
126			cell: (info_4) => {
127				const status = info_4.getValue();
128				const variant = STATUS_BADGE_VARIANT_MAP[status] ?? "default";
129				return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Badge, {
130					variant,
131					size: "lg",
132					className: "min-w-[90px] uppercase",
133					children: status
134				});
135			}
136		}),
137		columnHelper.display({
138			id: "actions",
139			header: "ACTIONS",
140			size: 70,
141			cell: (info_5) => {
142				const member = info_5.row.original;
143				return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(DropdownMenu, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(DropdownMenuTrigger, {
144					asChild: true,
145					children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Button, {
146						variant: "ghost",
147						size: "icon-sm",
148						className: "cursor-pointer",
149						children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Ellipsis, { className: "size-4" })
150					})
151				}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DropdownMenuContent, {
152					align: "end",
153					className: "min-w-[130px]",
154					children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(DropdownMenuItem, {
155						onClick: () => {
156							setMemberToDelete(member);
157							setDeleteDialogOpen(true);
158						},
159						className: "cursor-pointer text-destructive focus:text-destructive",
160						children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Trash2, { className: "size-4" }), "Delete"]
161					})
162				})] });
163			}
164		})
165	];
166	return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(data_table_default, {
167		data,
168		columns,
169		loading,
170		pagination: {
171			page: page + 1,
172			pageSize,
173			total,
174			onPageChange: (newPage) => {
175				return onPageChange(newPage - 1);
176			},
177			onPageSizeChange,
178			pageSizeOptions: DEFAULT_PAGINATION_SIZE_OPTIONS,
179			showPageSizeSelector: true,
180			showItemsInfo: true
181		},
182		columnPinning: { right: ["actions"] },
183		columnPinningMode: "autoDetect"
184	}
184), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AlertDialog, {
185		open: deleteDialogOpen,
186		onOpenChange: setDeleteDialogOpen,
187		children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(AlertDialogContent, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(AlertDialogHeader, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(AlertDialogTitle, { children: "Delete Confirmation" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AlertDialogDescription, { children: "Are you sure you want to delete selected item?" })] }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(AlertDialogFooter, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(AlertDialogCancel, {
188			onClick: handleDeleteCancel,
189			disabled: isRemoving,
190			children: "Cancel"
191		}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AlertDialogAction, {
192			onClick: handleDeleteConfirm,
193			disabled: isRemoving,
194			className: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
195			children: "Delete"
196		})] })] })
197	})] });
198};
199var DEBOUNCE_SEARCH_DELAY = 500;
200var TerminalsMemberFilters = (t0) => {
201	const $ = (0, import_compiler_runtime$2.c)(22);
202	const { filters, onChangeFilters, onReset } = t0;
203	const [localSearchValue, setLocalSearchValue] = (0, import_react.useState)(filters.searchValue);
204	const lastEmittedValueRef = (0, import_react.useRef)(filters.searchValue);
205	let t1;
206	let t2;
207	if ($[0] !== filters.searchValue) {
208		t1 = () => {
209			setLocalSearchValue(filters.searchValue);
210		};
211		t2 = [filters.searchValue];
212		$[0] = filters.searchValue;
213		$[1] = t1;
214		$[2] = t2;
215	} else {
216		t1 = $[1];
217		t2 = $[2];
218	}
219	(0, import_react.useEffect)(t1, t2);
220	let t3;
221	let t4;
222	if ($[3] !== filters || $[4] !== localSearchValue || $[5] !== onChangeFilters) {
223		t3 = () => {
224			if (localSearchValue !== lastEmittedValueRef.current) {
225				onChangeFilters({
226					...filters,
227					searchValue: localSearchValue
228				});
229				lastEmittedValueRef.current = localSearchValue;
230			}
231		};
232		t4 = [
233			localSearchValue,
234			filters,
235			onChangeFilters
236		];
237		$[3] = filters;
238		$[4] = localSearchValue;
239		$[5] = onChangeFilters;
240		$[6] = t3;
241		$[7] = t4;
242	} else {
243		t3 = $[6];
244		t4 = $[7];
245	}
246	let t5;
247	if ($[8] === Symbol.for("react.memo_cache_sentinel")) {
248		t5 = { wait: DEBOUNCE_SEARCH_DELAY };
249		$[8] = t5;
250	} else t5 = $[8];
251	useDebounceEffect_default(t3, t4, t5);
252	let t6;
253	if ($[9] !== localSearchValue) {
254		t6 = localSearchValue.trim();
255		$[9] = localSearchValue;
256		$[10] = t6;
257	} else t6 = $[10];
258	const hasFiltered = !!t6;
259	let t7;
260	if ($[11] === Symbol.for("react.memo_cache_sentinel")) {
261		t7 = (event) => {
262			trackMethodCall("handleSearchChange", [event]);
263			setLocalSearchValue(event.target.value);
264		};
265		$[11] = t7;
266	} else t7 = $[11];
267	const handleSearchChange = t7;
268	let t8;
269	if ($[12] === Symbol.for("react.memo_cache_sentinel")) {
270		t8 = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Search, { className: "size-4" });
271		$[12] = t8;
272	} else t8 = $[12];
273	let t9;
274	if ($[13] !== localSearchValue) {
275		t9 = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Input, {
276			className: "w-[350px]",
277			value: localSearchValue,
278			onChange: handleSearchChange,
279			placeholder: "Search",
280			prefixIcon: t8
281		});
282		$[13] = localSearchValue;
283		$[14] = t9;
284	} else t9 = $[14];
285	const t10 = !hasFiltered;
286	let t11;
287	if ($[15] === Symbol.for("react.memo_cache_sentinel")) {
288		t11 = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(RotateCw, { className: "size-4" });
289		$[15] = t11;
290	} else t11 = $[15];
291	let t12;
292	if ($[16] !== onReset || $[17] !== t10) {
293		t12 = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Button, {
294			variant: "ghost",
295			disabled: t10,
296			onClick: onReset,
297			children: [t11, "Clear All"]
298		});
299		$[16] = onReset;
300		$[17] = t10;
301		$[18] = t12;
302	} else t12 = $[18];
303	let t13;
304	if ($[19] !== t12 || $[20] !== t9) {
305		t13 = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
306			className: "flex items-center gap-2",
307			children: [t9, t12]
308		});
309		$[19] = t12;
310		$[20] = t9;
311		$[21] = t13;
312	} else t13 = $[21];
313	return t13;
314};
315var import_compiler_runtime$1 = /* @__PURE__ */ __toESM(require_compiler_runtime());
316var VIRTUALIZER_DEFAULT_ITEM_HEIGHT = 64;
317var VIRTUALIZER_OVERSCAN_ITEMS = 5;
318var addMembersFormSchema = objectType({ selectedUsers: arrayType(objectType({ userId: numberType() })).min(1, "Please select at least one member") });
319var MemberRow = (t0) => {
320	const $ = (0, import_compiler_runtime$1.c)(40);
321	const { user, isSelected, onToggle, checkboxId, measureRef, style, index } = t0;
322	const fieldName = `selectedUsers.${index}`;
323	const { getFieldState } = useFormContext();
324	let t1;
325	if ($[0] !== fieldName || $[1] !== getFieldState) {
326		t1 = getFieldState(fieldName);
327		$[0] = fieldName;
328		$[1] = getFieldState;
329		$[2] = t1;
330	} else t1 = $[2];
331	const fieldState = t1;
332	let t2;
333	if ($[3] !== user.fistName || $[4] !== user.lastName) {
334		t2 = [user.fistName, user.lastName].filter(Boolean);
335		$[3] = user.fistName;
336		$[4] = user.lastName;
337		$[5] = t2;
338	} else t2 = $[5];
339	const fullName = t2.join(" ");
340	let t3;
341	if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
342		t3 = cn([
343			"absolute top-0 left-0 w-full cursor-pointer",
344			"flex items-center gap-3 px-2 py-3",
345			"rounded-md transition-colors duration-100 hover:bg-accent/50"
346		]);
347		$[6] = t3;
348	} else t3 = $[6];
349	let t4;
350	if ($[7] !== checkboxId || $[8] !== fieldName || $[9] !== fieldState.invalid || $[10] !== isSelected || $[11] !== onToggle) {
351		t4 = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Checkbox, {
352			id: checkboxId,
353			checked: isSelected,
354			onCheckedChange: onToggle,
355			"aria-invalid": fieldState.invalid,
356			"data-invalid": fieldState.invalid,
357			className: "shrink-0 cursor-pointer",
358			name: fieldName
359		});
360		$[7] = checkboxId;
361		$[8] = fieldName;
362		$[9] = fieldState.invalid;
363		$[10] = isSelected;
364		$[11] = onToggle;
365		$[12] = t4;
366	} else t4 = $[12];
367	let t5;
368	if ($[13] !== fullName) {
369		t5 = getInitials(fullName);
370		$[13] = fullName;
371		$[14] = t5;
372	} else t5 = $[14];
373	let t6;
374	if ($[15] !== fullName || $[16] !== t5) {
375		t6 = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Avatar, {
376			className: "size-8 shrink-0",
377			children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AvatarFallback, {
378				className: "text-sm text-primary-foreground",
379				colorSeed: fullName,
380				children: t5
381			})
382		});
383		$[15] = fullName;
384		$[16] = t5;
385		$[17] = t6;
386	} else t6 = $[17];
387	let t7;
388	if ($[18] !== user.fistName || $[19] !== user.lastName) {
389		t7 = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", {
390			className: "w-full truncate text-left text-sm leading-5 font-semibold text-foreground",
391			children: [
392				user.fistName,
393				" ",
394				user.lastName
395			]
396		});
397		$[18] = user.fistName;
398		$[19] = user.lastName;
399		$[20] = t7;
400	} else t7 = $[20];
401	let t8;
402	if ($[21] !== user.rank) {
403		t8 = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
404			className: "text-accent-foreground",
405			children: user.rank
406		});
407		$[21] = user.rank;
408		$[22] = t8;
409	} else t8 = $[22];
410	let t9;
411	if ($[23] === Symbol.for("react.memo_cache_sentinel")) {
412		t9 = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-3 w-px bg-sidebar-border" });
413		$[23] = t9;
414	} else t9 = $[23];
415	const t10 = user.phone ?? "--";
416	let t11;
417	if ($[24] !== t10) {
418		t11 = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
419			className: "text-muted-foreground",
420			children: t10
421		});
422		$[24] = t10;
423		$[25] = t11;
424	} else t11 = $[25];
425	let t12;
426	if ($[26] !== t11 || $[27] !== t8) {
427		t12 = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
428			className: "flex items-center gap-1 text-sm leading-5",
429			children: [
430				t8,
431				t9,
432				t11
433			]
434		});
435		$[26] = t11;
436		$[27] = t8;
437		$[28] = t12;
438	} else t12 = $[28];
439	let t13;
440	if ($[29] !== t12 || $[30] !== t7) {
441		t13 = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
442			className: "flex min-w-0 flex-1 flex-col overflow-hidden",
443			children: [t7, t12]
444		});
445		$[29] = t12;
446		$[30] = t7;
447		$[31] = t13;
448	} else t13 = $[31];
449	let t14;
450	if ($[32] !== checkboxId || $[33] !== index || $[34] !== measureRef || $[35] !== style || $[36] !== t13 || $[37] !== t4 || $[38] !== t6) {
451		t14 = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", {
452			ref: measureRef,
453			htmlFor: checkboxId,
454			className: t3,
455			style,
456			"data-index": index,
457			children: [
458				t4,
459				t6,
460				t13
461			]
462		});
463		$[32] = checkboxId;
464		$[33] = index;
465		$[34] = measureRef;
466		$[35] = style;
467		$[36] = t13;
468		$[37] = t4;
469		$[38] = t6;
470		$[39] = t14;
471	} else t14 = $[39];
472	return t14;
473};
474const AddMembersDialog = ({ open, onOpenChange, groupId, existingMemberIds }) => {
475	const { data: companyMembersResponse, isLoading, isFetching } = useGetCompanyMembersQuery({ groupId }, { skip: !open || !groupId });
476	const [addMembers, { isLoading: isAdding }] = useAddMembersToTerminalMutation();
477	const form = useForm({
478		resolver: t(addMembersFormSchema),
479		defaultValues: { selectedUsers: [] },
480		mode: "onChange"
481	});
482	const { handleSubmit, reset, control } = form;
483	const { fields, append, remove } = useFieldArray({
484		control,
485		name: "selectedUsers"
486	});
487	const availableUsers = (companyMembersResponse?.data ?? []).filter((member) => {
488		return !existingMemberIds.has(member.id);
489	});
490	const parentRef = (0, import_react.useRef)(null);
491	const measureRef = (0, import_react.useRef)(null);
492	const measuredSize = useSize_default(measureRef);
493	const itemHeight = measuredSize?.height ?? VIRTUALIZER_DEFAULT_ITEM_HEIGHT;
494	const virtualizer = useVirtualizer({
495		count: availableUsers.length,
496		getScrollElement: () => {
497			return parentRef.current;
498		},
499		estimateSize: () => {
500			return itemHeight;
501		},
502		overscan: VIRTUALIZER_OVERSCAN_ITEMS
503	});
504	const isBusy = isLoading || isFetching;
505	(0, import_react.useEffect)(() => {
506		if (!open) reset({ selectedUsers: [] });
507	}, [open, reset]);
508	(0, import_react.useEffect)(() => {
509		if (open && !isBusy) virtualizer.scrollToOffset(0);
510	}, [
511		open,
512		virtualizer,
513		isBusy
514	]);
515	(0, import_react.useEffect)(() => {
516		if (measuredSize?.height) virtualizer.measure();
517	}, [measuredSize?.height, virtualizer]);
518	const handleCancelInAddMembersDialog = () => {
519		trackMethodCall("handleCancelInAddMembersDialog", []);
520		onOpenChange(false);
521	};
522	const handleSaveInAddMembersDialog = handleSubmit(async (data) => {
523		trackMethodCall("handleSaveInAddMembersDialog", [data]);
524		if (data.selectedUsers.length === 0) return;
525		try {
526			const userIds = data.selectedUsers.map((user) => {
527				return user.userId;
528			});
529			const response = await addMembers({
530				groupId,
531				userIds
532			}).unwrap();
533			if (response.code === 200) {
534				toast.success("Members added successfully");
535				onOpenChange(false);
536			} else throw new Error(response.message);
537		} catch (error) {
538			toast.error(error instanceof Error ? error.message : "Failed to add members");
539		}
540	});
541	const selectedUserIndexMap = new Map(fields.map((field, index) => {
542		return [field.userId, index];
543	}));
544	const isEmpty = availableUsers.length === 0;
545	return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Dialog, {
546		open,
547		onOpenChange,
548		children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(DialogContent, {
549			className: "max-w-[460px]",
550			children: [
551				/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(DialogHeader, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(DialogTitle, { children: "Add Members" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DialogDescription, {
552					className: "sr-only",
553					children: "Select members to add to the terminal."
554				})] }),
555				/* @__PURE__ */ (0, import_jsx_runtime.jsx)(DialogInner, {
556					ref: parentRef,
557					className: "h-[416px] overflow-y-auto",
558					children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FormWrapper, {
559						form,
560						onSubmit: handleSaveInAddMembersDialog,
561						className: "flex h-full flex-col",
562						id: "rhf-terminal-add-members-form",
563						children: isBusy ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
564							className: "flex size-full items-center justify-center",
565							children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Spin, {})
566						}) : isEmpty ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
567							className: "flex size-full items-center justify-center",
568							children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Empty, {
569								className: "border-0 p-0",
570								children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EmptyMedia, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BizIcon, {
571									name: "no-result-muted",
572									className: "size-25"
573								}) }
573), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(EmptyHeader, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(EmptyTitle, { children: "No Results" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EmptyDescription, { children: "No available users to add" })] })]
574							})
575						}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FormItem, {
576							name: "selectedUsers",
577							render: () => {
578								return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
579									className: "flex flex-1 flex-col",
580									children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
581										className: "relative w-full",
582										style: { height: `${virtualizer.getTotalSize()}px` },
583										children: virtualizer.getVirtualItems().map((virtualItem, index_0) => {
584											const user_0 = availableUsers[virtualItem.index];
585											const selectedIndex = selectedUserIndexMap.get(user_0.id);
586											const isSelected = selectedIndex !== void 0;
587											const handleToggleInAddMembersDialog = () => {
588												trackMethodCall("handleToggleInAddMembersDialog", []);
589												if (isSelected) remove(selectedIndex);
590												else append({ userId: user_0.id });
591											};
592											const checkboxId = `selectedUsers.${user_0.id}`;
593											return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MemberRow, {
594												user: user_0,
595												isSelected,
596												onToggle: handleToggleInAddMembersDialog,
597												checkboxId,
598												measureRef: index_0 === 0 ? measureRef : void 0,
599												style: { transform: `translateY(${virtualItem.start}px)` },
600												index: virtualItem.index
601											}, user_0.id);
602										})
603									})
604								});
605							}
606						})
607					})
608				}),
609				/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(DialogFooter, {
610					className: "mt-auto border-t pt-4",
611					children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Button, {
612						type: "button",
613						variant: "outline",
614						onClick: handleCancelInAddMembersDialog,
615						disabled: isAdding,
616						children: "Cancel"
617					}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Button, {
618						type: "submit",
619						form: "rhf-terminal-add-members-form",
620						disabled: fields.length === 0 || isAdding,
621						loading: isAdding,
622						children: "Save"
623					})]
624				})
625			]
626		})
627	});
628};
629var import_compiler_runtime = /* @__PURE__ */ __toESM(require_compiler_runtime());
630var INITIAL_FILTERS = { searchValue: "" };
631var TerminalsDetail = () => {
632	const $ = (0, import_compiler_runtime.c)(45);
633	const { id } = useParams();
634	const [filters, setFilters] = (0, import_react.useState)(INITIAL_FILTERS);
635	const [page, setPage] = (0, import_react.useState)(0);
636	const [pageSize, setPageSize] = (0, import_react.useState)(20);
637	const [addMembersDialogOpen, setAddMembersDialogOpen] = (0, import_react.useState)(false);
638	const t0 = id ?? "";
639	const t1 = filters.searchValue || void 0;
640	let t2;
641	if ($[0] !== page || $[1] !== pageSize || $[2] !== t0 || $[3] !== t1) {
642		t2 = {
643			groupId: t0,
644			searchValue: t1,
645			page,
646			size: pageSize
647		};
648		$[0] = page;
649		$[1] = pageSize;
650		$[2] = t0;
651		$[3] = t1;
652		$[4] = t2;
653	} else t2 = $[4];
654	const t3 = !id;
655	let t4;
656	if ($[5] !== t3) {
657		t4 = { skip: t3 };
658		$[5] = t3;
659		$[6] = t4;
660	} else t4 = $[6];
661	const { data: membersResponse, isLoading, isFetching } = useGetTerminalMembersQuery(t2, t4);
662	const terminalName = membersResponse?.data?.name ?? "Terminal";
663	let t5;
664	if ($[7] !== membersResponse?.data?.result) {
665		t5 = membersResponse?.data?.result ?? [];
666		$[7] = membersResponse?.data?.result;
667		$[8] = t5;
668	} else t5 = $[8];
669	const members = t5;
670	const total = membersResponse?.data?.total ?? 0;
671	let t6;
672	if ($[9] !== membersResponse?.data?.result) {
673		t6 = new Set((membersResponse?.data?.result ?? []).map(_temp));
674		$[9] = membersResponse?.data?.result;
675		$[10] = t6;
676	} else t6 = $[10];
677	const existingMemberIds = t6;
678	let t7;
679	if ($[11] === Symbol.for("react.memo_cache_sentinel")) {
680		t7 = () => {
681			trackMethodCall("handleResetFilters", []);
682			setFilters(INITIAL_FILTERS);
683			setPage(0);
684		};
685		$[11] = t7;
686	} else t7 = $[11];
687	const handleResetFilters = t7;
688	let t8;
689	if ($[12] === Symbol.for("react.memo_cache_sentinel")) {
690		t8 = (newFilters) => {
691			trackMethodCall("handleFiltersChange", [newFilters]);
692			setFilters(newFilters);
693			setPage(0);
694		};
695		$[12] = t8;
696	} else t8 = $[12];
697	const handleFiltersChange = t8;
698	let t9;
699	if ($[13] === Symbol.for("react.memo_cache_sentinel")) {
700		t9 = (newPage) => {
701			trackMethodCall("handlePageChange", [newPage]);
702			setPage(newPage);
703		};
704		$[13] = t9;
705	} else t9 = $[13];
706	const handlePageChange = t9;
707	let t10;
708	if ($[14] === Symbol.for("react.memo_cache_sentinel")) {
709		t10 = (newPageSize) => {
710			trackMethodCall("handlePageSizeChange", [newPageSize]);
711			setPageSize(newPageSize);
712			setPage(0);
713		};
714		$[14] = t10;
715	} else t10 = $[14];
716	const handlePageSizeChange = t10;
717	let t11;
718	if ($[15] === Symbol.for("react.memo_cache_sentinel")) {
719		t11 = () => {
720			trackMethodCall("handleOpenAddMembersDialog", []);
721			setAddMembersDialogOpen(true);
722		};
723		$[15] = t11;
724	} else t11 = $[15];
725	const handleOpenAddMembersDialog = t11;
726	let t12;
727	if ($[16] !== terminalName) {
728		t12 = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AppBreadcrumb, { lastTitle: terminalName });
729		$[16] = terminalName;
730		$[17] = t12;
731	} else t12 = $[17];
732	let t13;
733	if ($[18] !== terminalName) {
734		t13 = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h1", {
735			className: "text-2xl font-semibold text-foreground",
736			children: terminalName
737		});
738		$[18] = terminalName;
739		$[19] = t13;
740	} else t13 = $[19];
741	let t14;
742	if ($[20] === Symbol.for("react.memo_cache_sentinel")) {
743		t14 = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Button, {
744			onClick: handleOpenAddMembersDialog,
745			children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Plus, { className: "size-4" }), "Add Members"]
746		});
747		$[20] = t14;
748	} else t14 = $[20];
749	let t15;
750	if ($[21] !== t13) {
751		t15 = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
752			className: "mt-4 flex items-center justify-between",
753			children: [t13, t14]
754		});
755		$[21] = t13;
756		$[22] = t15;
757	} else t15 = $[22];
758	let t16;
759	if ($[23] !== t12 || $[24] !== t15) {
760		t16 = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("header", {
761			className: "pt-8 pb-6",
762			children: [t12, t15]
763		});
764		$[23] = t12;
765		$[24] = t15;
766		$[25] = t16;
767	} else t16 = $[25];
768	let t17;
769	if ($[26] !== filters) {
770		t17 = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
771			className: "pb-6",
772			children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TerminalsMemberFilters, {
773				filters,
774				onChangeFilters: handleFiltersChange,
775				onReset: handleResetFilters
776			})
777		});
778		$[26] = filters;
779		$[27] = t17;
780	} else t17 = $[27];
781	let t18;
782	if ($[28] === Symbol.for("react.memo_cache_sentinel")) {
783		t18 = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Separator, {});
784		$[28] = t18;
785	} else t18 = $[28];
786	const t19 = isLoading || isFetching;
787	let t20;
788	if ($[29] !== id || $[30] !== members || $[31] !== page || $[32] !== pageSize || $[33] !== t19 || $[34] !== total) {
789		t20 = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
790			className: "min-h-0 flex-1",
791			children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TerminalsMemberTable, {
792				data: members,
793				loading: t19,
794				groupId: id,
795				page,
796				pageSize,
797				total,
798				onPageChange: handlePageChange,
799				onPageSizeChange: handlePageSizeChange
800			})
801		});
802		$[29] = id;
803		$[30] = members;
804		$[31] = page;
805		$[32] = pageSize;
806		$[33] = t19;
807		$[34] = total;
808		$[35] = t20;
809	} else t20 = $[35];
810	const t21 = id ?? "";
811	let t22;
812	if ($[36] !== addMembersDialogOpen || $[37] !== existingMemberIds || $[38] !== t21) {
813		t22 = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AddMembersDialog, {
814			open: addMembersDialogOpen,
815			onOpenChange: setAddMembersDialogOpen,
816			groupId: t21,
817			existingMemberIds
818		});
819		$[36] = addMembersDialogOpen;
820		$[37] = existingMemberIds;
821		$[38] = t21;
822		$[39] = t22;
823	} else t22 = $[39];
824	let t23;
825	if ($[40] !== t16 || $[41] !== t17 || $[42] !== t20 || $[43] !== t22) {
826		t23 = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
827			className: "flex h-full flex-col overflow-auto px-5",
828			children: [
829				t16,
830				t17,
831				t18,
832				t20,
833				t22
834			]
835		});
836		$[40] = t16;
837		$[41] = t17;
838		$[42] = t20;
839		$[43] = t22;
840		$[44] = t23;
841	} else t23 = $[44];
842	return t23;
843};
844var terminals_detail_default = TerminalsDetail;
845function _temp(member) {
846	return member.id;
847}
848export { terminals_detail_default as default };

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.