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.