{"version":3,"file":"MultiSelectField.mjs","sources":["../../../../src/lib/nextGenComponents/components/MultiSelectField/MultiSelectField.tsx"],"sourcesContent":["import { useState } from 'react'\n\nimport { Checkbox } from '@/components/ui/checkbox'\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuTrigger\n} from '@/components/ui/dropdown-menu'\nimport type { DraftValues } from '@/stores/tableStore'\nimport type { FilterFieldDef } from '@/types/table/filter'\n\n// ── Constants ─────────────────────────────────────────────────────────────────\n\nconst MAX_INLINE_LABELS = 2\n\n// ── SelectArrow ───────────────────────────────────────────────────────────────\n\n/**\n * Downward-pointing triangle that matches the icon used by TimeFilterDropdown\n * (mirrors select.svg from assets).\n */\nexport const SelectArrow = () => (\n  <svg\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"13\"\n    height=\"6\"\n    viewBox=\"0 0 13 6\"\n    fill=\"none\"\n    aria-hidden=\"true\"\n  >\n    <path\n      d=\"M6.0625 6L0.000322908 -1.05734e-06L12.1247 -7.59139e-08L6.0625 6Z\"\n      fill=\"var(--igz-secondary, #7F7989)\"\n    />\n  </svg>\n)\n\nexport type MultiSelectFieldProps = {\n  filterField: FilterFieldDef\n  value: DraftValues[string]\n  setFilterDraft: (draft: DraftValues | ((prev: DraftValues) => DraftValues)) => void\n}\nconst MultiSelectField = ({ filterField, value, setFilterDraft }: MultiSelectFieldProps) => {\n  const [isOpen, setIsOpen] = useState(false)\n\n  const currentValues: string[] = Array.isArray(value) ? value : []\n  const options = filterField.options ?? []\n\n  const selectedLabels = options.filter(o => currentValues.includes(o.value)).map(o => o.label)\n\n  const triggerText =\n    currentValues.length === 0\n      ? (filterField.placeholder ?? 'Select...')\n      : selectedLabels.length <= MAX_INLINE_LABELS\n        ? selectedLabels.join(', ')\n        : `${selectedLabels.length} items selected`\n\n  const handleToggle = (optValue: string) => {\n    setFilterDraft(prev => {\n      const prevValues = Array.isArray(prev[filterField.key])\n        ? (prev[filterField.key] as string[])\n        : []\n      const toggled = prevValues.includes(optValue)\n        ? prevValues.filter(v => v !== optValue)\n        : [...prevValues, optValue]\n      const next = filterField.resolveValue\n        ? filterField.resolveValue(toggled, prevValues)\n        : toggled\n      return { ...prev, [filterField.key]: next }\n    })\n  }\n\n  return (\n    <DropdownMenu open={isOpen} onOpenChange={setIsOpen}>\n      <DropdownMenuTrigger\n        style={{\n          height: 40,\n          width: '100%',\n          display: 'flex',\n          alignItems: 'center',\n          justifyContent: 'space-between',\n          gap: 8,\n          paddingLeft: 12,\n          paddingRight: 12,\n          borderRadius: 6,\n          border: '1px solid var(--igz-gray, #C4C2C8)',\n          background: 'white',\n          fontSize: 15,\n          color:\n            currentValues.length === 0 ? 'var(--igz-gray, #C4C2C8)' : 'var(--igz-primary, #4B4760)',\n          cursor: 'pointer',\n          outline: 'none'\n        }}\n        data-testid={`filter-popover-multiselect-${filterField.key}`}\n      >\n        <span style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n          {triggerText}\n        </span>\n        <SelectArrow />\n      </DropdownMenuTrigger>\n\n      <DropdownMenuContent\n        align=\"start\"\n        sideOffset={4}\n        style={{\n          width: 'var(--radix-dropdown-menu-trigger-width)',\n          color: 'var(--igz-primary, #4B4760)'\n        }}\n        data-testid={`filter-popover-multiselect-content-${filterField.key}`}\n      >\n        {options.map(option => {\n          const isChecked = currentValues.includes(option.value)\n          const color = option.meta?.color as string | undefined\n          const isDisabled =\n            Boolean((option.meta as Record<string, unknown>)?.disabled) ||\n            Boolean(filterField.computeDisabled?.(option.value, currentValues))\n\n          return (\n            <DropdownMenuItem\n              key={option.value || 'empty'}\n              disabled={isDisabled}\n              className=\"flex items-center gap-3 text-[15px] h-[42px] px-4 data-[highlighted]:bg-igz-accent-hover cursor-pointer data-[disabled]:pointer-events-none data-[disabled]:opacity-40\"\n              onSelect={e => {\n                e.preventDefault()\n                if (!isDisabled) handleToggle(option.value)\n              }}\n              data-testid={`filter-popover-multiselect-${filterField.key}-${option.value}`}\n            >\n              <Checkbox\n                checked={isChecked}\n                disabled={isDisabled}\n                className=\"shrink-0\"\n                onClick={e => e.stopPropagation()}\n                onCheckedChange={() => !isDisabled && handleToggle(option.value)}\n              />\n              {/* Label + dot grouped together so the dot sits right after the text */}\n              <span className=\"flex items-center gap-1.5\">\n                <span>{option.label}</span>\n                {color && (\n                  <span\n                    className=\"w-2 h-2 rounded-full shrink-0\"\n                    style={{ backgroundColor: color }}\n                  />\n                )}\n              </span>\n            </DropdownMenuItem>\n          )\n        })}\n      </DropdownMenuContent>\n    </DropdownMenu>\n  )\n}\n\nexport default MultiSelectField\n"],"names":["MAX_INLINE_LABELS","SelectArrow","jsx","MultiSelectField","filterField","value","setFilterDraft","isOpen","setIsOpen","useState","currentValues","options","selectedLabels","o","triggerText","handleToggle","optValue","prev","prevValues","toggled","v","next","jsxs","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","option","isChecked","color","_a","isDisabled","_b","_c","DropdownMenuItem","e","Checkbox"],"mappings":"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"}