@lax-wp/design-system 0.14.38 → 0.14.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/data-display/infinite-table/CellContextMenuPortal.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/CellContextMenuPortal.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/CellContextMenuPortal.d.ts +3 -1
- package/dist/components/data-display/infinite-table/CellContextMenuPortal.es.js +137 -115
- package/dist/components/data-display/infinite-table/CellContextMenuPortal.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/index.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/index.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/index.es.js +171 -170
- package/dist/components/data-display/infinite-table/index.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/types.d.ts +8 -4
- package/dist/components/forms/master-data-input/MasterDataInputField.cjs.js +1 -1
- package/dist/components/forms/master-data-input/MasterDataInputField.cjs.js.map +1 -1
- package/dist/components/forms/master-data-input/MasterDataInputField.es.js +2 -2
- package/dist/components/forms/master-data-input/MasterDataInputField.es.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CellContextMenuPortal.es.js","sources":["../../../../src/components/data-display/infinite-table/CellContextMenuPortal.tsx"],"sourcesContent":["import { useTableConfig } from '../../../providers/design-system-provider/hooks';\nimport { CheckIcon, ContentCopyIcon } from '../../icon';\nimport type {\n ICellContextMenuConfig,\n ICellContextMenuContext,\n ICellContextMenuItem,\n ICellContextMenuState,\n IColumn,\n} from './types';\nimport { getRowJson, getSelectedRowsJson } from './copy-text';\nimport cn from 'classnames';\nimport React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport {\n CELL_CONTEXT_MENU_CURSOR_OFFSET,\n COPY_FEEDBACK_DURATION,\n CELL_CONTEXT_MENU_VIEWPORT_MARGIN,\n CELL_CONTEXT_MENU_Z_INDEX,\n} from './constants';\n\ntype TRowOption = { key: string; label: React.ReactNode; isVisible?: boolean };\n\n/** Result of the per-row availability check for row actions. */\ntype TRowOptionsFilter =\n | { status: 'off' }\n | { status: 'loading' }\n | { status: 'ready'; available: Record<string, boolean> }\n | { status: 'failed' };\n\n/** One rendered menu line: a declared item, a row-action node supplied by the table, or the row-action placeholder. */\ntype TMenuRow =\n | { kind: 'item'; key: string; item: ICellContextMenuItem }\n | { kind: 'node'; key: string; node: React.ReactNode; withDividerBefore?: boolean }\n | { kind: 'skeleton'; key: string; withDividerBefore?: boolean };\n\ninterface CellContextMenuPortalProps {\n state: ICellContextMenuState | null;\n config?: ICellContextMenuConfig | null;\n /** The table's row actions, appended to the menu — same list the three-dot cell renders. */\n rowOptions?: TRowOption[] | ((rowData: Record<string, unknown>) => TRowOption[] | null) | null;\n /** Per-row availability check for `rowOptions`, mirroring the three-dot cell so both menus agree. */\n asyncRowOptionsFilter?: ((rowId: string) => Promise<Record<string, boolean>>) | null;\n /** Checked row ids, enabling the \"Copy selected rows\" item. */\n checkedIds?: (string | number)[];\n /** Table rows, used to build the text for selected rows that are scrolled out of view. */\n rows?: Record<string, unknown>[];\n /** Visible columns in display order, used to order the copied values. */\n columns?: IColumn[];\n onClose: () => void;\n}\n\n/** Clipboard write with a fallback for browsers / insecure contexts without the async clipboard API. */\nconst writeToClipboard = async (text: string): Promise<boolean> => {\n try {\n if (navigator?.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n return true;\n }\n } catch {\n // fall through to the textarea fallback\n }\n\n try {\n const textarea = document.createElement('textarea');\n textarea.value = text;\n textarea.setAttribute('readonly', '');\n textarea.style.position = 'fixed';\n textarea.style.opacity = '0';\n document.body.appendChild(textarea);\n textarea.select();\n const copied = document.execCommand('copy');\n document.body.removeChild(textarea);\n return copied;\n } catch {\n return false;\n }\n};\n\nconst resolveFlag = (\n flag: boolean | ((context: ICellContextMenuContext) => boolean) | undefined,\n context: ICellContextMenuContext,\n fallback: boolean,\n): boolean => {\n if (flag === undefined) return fallback;\n return typeof flag === 'function' ? flag(context) : flag;\n};\n\nconst MenuItemButton: React.FC<{\n item: ICellContextMenuItem;\n isDisabled: boolean;\n isActive: boolean;\n onSelect: () => void;\n onHover: () => void;\n}> = ({ item, isDisabled, isActive, onSelect, onHover }) => (\n <button\n type='button'\n role='menuitem'\n data-menu-item\n disabled={isDisabled}\n aria-disabled={isDisabled}\n tabIndex={isActive ? 0 : -1}\n className={cn(\n 'flex w-full items-center gap-3 px-3 py-2 text-sm font-medium text-left outline-none',\n isDisabled\n ? 'opacity-50 cursor-not-allowed'\n : cn(\n 'cursor-pointer',\n item.isDanger\n ? 'text-error-600 dark:text-error-400 hover:bg-error-50 dark:hover:bg-error-950 focus-visible:bg-error-50 dark:focus-visible:bg-error-950'\n : 'text-neutral-900 dark:text-white hover:bg-neutral-100 dark:hover:bg-black-600 focus-visible:bg-neutral-100 dark:focus-visible:bg-black-600',\n ),\n )}\n onClick={onSelect}\n onMouseEnter={() => !isDisabled && onHover()}\n >\n {item.icon ? (\n <span className={cn('flex shrink-0 items-center', item.isDanger ? 'text-error-600 dark:text-error-400' : 'text-neutral-500 dark:text-black-300')}>\n {item.icon}\n </span>\n ) : null}\n <span className='flex-1 truncate'>{item.label}</span>\n {item.shortcut ? <span className='shrink-0 text-xs text-neutral-400 dark:text-black-300'>{item.shortcut}</span> : null}\n </button>\n);\n\n/**\n * Right-click menu for data cells. Rendered once per table and positioned at the\n * cursor; `DataCell` opens it through `openCellContextMenu` on the table context.\n */\nexport const CellContextMenuPortal: React.FC<CellContextMenuPortalProps> = ({\n state, config, rowOptions, asyncRowOptionsFilter, checkedIds, rows, columns, onClose,\n}) => {\n const tableConfig = useTableConfig();\n const t = useMemo(() => tableConfig?.t ?? ((key: string) => key), [tableConfig]);\n const menuRef = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState<{ left: number; top: number } | null>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [copyState, setCopyState] = useState<{ key: string; isCopied: boolean } | null>(null);\n const [rowOptionsFilter, setRowOptionsFilter] = useState<TRowOptionsFilter>({ status: 'off' });\n const closeTimer = useRef<ReturnType<typeof setTimeout>>();\n\n const context = useMemo<ICellContextMenuContext | null>(\n () => (state ? { ...state.target, close: onClose } : null),\n [state, onClose],\n );\n\n const handleCopy = useCallback(\n async (key: string, text: string, menuContext: ICellContextMenuContext) => {\n if (copyState) return;\n\n const isCopied = await writeToClipboard(text);\n\n if (isCopied) {\n config?.onCopy?.(text, menuContext);\n tableConfig?.showNotification?.('success', t('Copied to clipboard'));\n } else {\n tableConfig?.showNotification?.('error', t('Could not copy to clipboard'));\n }\n\n // Confirmed inline instead of with a toast, so the menu owns its own feedback.\n setCopyState({ key, isCopied });\n closeTimer.current = setTimeout(() => onClose(), COPY_FEEDBACK_DURATION);\n },\n [config, tableConfig, t, onClose, copyState],\n );\n\n const buildCopyItem = useCallback(\n (key: string, label: string, text: string): ICellContextMenuItem => {\n const isDone = copyState?.key === key;\n\n return {\n key,\n label: !isDone ? label : copyState?.isCopied ? t('Copied') : t('Copy failed'),\n icon:\n isDone && copyState?.isCopied ? (\n <CheckIcon size={16} className='text-success-600 dark:text-success-400' />\n ) : (\n <ContentCopyIcon size={16} />\n ),\n isDisabled: !text,\n keepOpenOnClick: true,\n onClick: (menuContext) => handleCopy(key, text, menuContext),\n };\n },\n [copyState, handleCopy, t],\n );\n\n const rowJson = useMemo(() => getRowJson(state?.target.rowData, columns), [state?.target.rowData, columns]);\n // Only while the menu is open — otherwise every checkbox tick would serialize the selection.\n const selectedRowsJson = useMemo(() => (state ? getSelectedRowsJson(rows, columns, checkedIds) : ''), [state, rows, columns, checkedIds]);\n const selectedCount = checkedIds?.length ?? 0;\n\n const items = useMemo<ICellContextMenuItem[]>(() => {\n if (!context) return [];\n\n const defaultItems: ICellContextMenuItem[] = config?.hideDefaultItems\n ? []\n : [\n buildCopyItem('copy-cell', config?.copyLabel ?? t('Copy Cell'), context.text),\n buildCopyItem('copy-row', t('Copy Row'), rowJson),\n ...(selectedCount > 0\n ? [\n buildCopyItem(\n 'copy-selected-rows',\n selectedCount === 1 ? t('Copy Selected Row') : `${t('Copy Selected Rows')} (${selectedCount})`,\n selectedRowsJson,\n ),\n ]\n : []),\n ];\n\n const extraItems = typeof config?.items === 'function' ? config.items(context) : config?.items ?? [];\n\n return [...defaultItems, ...extraItems].filter((item) => resolveFlag(item.isVisible, context, true));\n }, [config, context, buildCopyItem, selectedCount, rowJson, selectedRowsJson, t]);\n\n /** The table's own row actions, resolved for the right-clicked row. */\n const resolvedRowOptions = useMemo<TRowOption[]>(() => {\n if (!state || config?.includeRowOptions === false || !rowOptions) return [];\n\n const list = typeof rowOptions === 'function' ? rowOptions(state.target.rowData) : rowOptions;\n\n return (list ?? []).filter((option) => option.isVisible !== false);\n }, [state, rowOptions, config?.includeRowOptions]);\n\n const hasRowOptions = resolvedRowOptions.length > 0;\n\n /** Row actions can be gated per row by the API — ask before showing them, exactly as the three-dot cell does. */\n useEffect(() => {\n if (!state || !hasRowOptions || !asyncRowOptionsFilter) {\n setRowOptionsFilter({ status: 'off' });\n return;\n }\n\n let isCancelled = false;\n setRowOptionsFilter({ status: 'loading' });\n\n asyncRowOptionsFilter(String(state.target.rowId))\n .then((available) => !isCancelled && setRowOptionsFilter({ status: 'ready', available }))\n .catch(() => !isCancelled && setRowOptionsFilter({ status: 'failed' }));\n\n return () => {\n isCancelled = true;\n };\n }, [state, hasRowOptions, asyncRowOptionsFilter]);\n\n const allowedRowOptions = useMemo<TRowOption[]>(() => {\n if (rowOptionsFilter.status === 'off') return resolvedRowOptions;\n if (rowOptionsFilter.status !== 'ready') return [];\n\n const { available } = rowOptionsFilter;\n\n return resolvedRowOptions.filter((option) => available[option.key] ?? true);\n }, [resolvedRowOptions, rowOptionsFilter]);\n\n const menuRows = useMemo<TMenuRow[]>(() => {\n const itemRows: TMenuRow[] = items.map((item) => ({ kind: 'item', key: item.key, item }));\n const needsDivider = itemRows.length > 0;\n\n if (rowOptionsFilter.status === 'loading') {\n return [...itemRows, { kind: 'skeleton', key: 'row-options-loading', withDividerBefore: needsDivider }];\n }\n\n return [\n ...itemRows,\n ...allowedRowOptions.map<TMenuRow>((option, index) => ({\n kind: 'node',\n key: `row-option-${option.key}`,\n node: option.label,\n withDividerBefore: needsDivider && index === 0,\n })),\n ];\n }, [items, allowedRowOptions, rowOptionsFilter.status]);\n\n const isRowNavigable = useCallback(\n (row: TMenuRow): boolean => (row.kind === 'item' ? !(context && resolveFlag(row.item.isDisabled, context, false)) : row.kind === 'node'),\n [context],\n );\n\n const firstNavigableIndex = useMemo(() => menuRows.findIndex(isRowNavigable), [menuRows, isRowNavigable]);\n\n /** Clamp into the viewport once the menu has been measured; row actions can arrive after the first paint. */\n useLayoutEffect(() => {\n if (!state || !menuRef.current) {\n setPosition(null);\n return;\n }\n\n const { width, height } = menuRef.current.getBoundingClientRect();\n const margin = CELL_CONTEXT_MENU_VIEWPORT_MARGIN;\n const offset = CELL_CONTEXT_MENU_CURSOR_OFFSET;\n\n // Flip to the other side of the cursor when there is no room, then clamp.\n const left = state.x + width + margin > window.innerWidth ? state.x - width - offset : state.x + offset;\n const top = state.y + height + margin > window.innerHeight ? state.y - height - offset : state.y + offset;\n\n setPosition({\n left: Math.max(margin, Math.min(left, window.innerWidth - width - margin)),\n top: Math.max(margin, Math.min(top, window.innerHeight - height - margin)),\n });\n }, [state, menuRows.length]);\n\n useEffect(() => {\n setCopyState(null);\n return () => clearTimeout(closeTimer.current);\n }, [state]);\n\n useEffect(() => {\n if (!state) {\n setActiveIndex(-1);\n return;\n }\n setActiveIndex(firstNavigableIndex);\n }, [state, firstNavigableIndex]);\n\n /** Focus follows the active row so the menu is keyboard operable; row actions bring their own button. */\n useEffect(() => {\n if (!state || activeIndex < 0) return;\n\n const row = menuRef.current?.querySelectorAll<HTMLElement>('[data-menu-item]')[activeIndex];\n const focusTarget = row?.matches('button') ? row : row?.querySelector('button') ?? row;\n\n // preventScroll: a focus-driven scroll would immediately close the menu.\n focusTarget?.focus({ preventScroll: true });\n }, [state, activeIndex]);\n\n const moveActiveIndex = useCallback(\n (direction: 1 | -1) => {\n if (menuRows.length === 0) return;\n setActiveIndex((current) => {\n let next = current;\n for (let step = 0; step < menuRows.length; step += 1) {\n next = (next + direction + menuRows.length) % menuRows.length;\n if (isRowNavigable(menuRows[next])) return next;\n }\n return current;\n });\n },\n [menuRows, isRowNavigable],\n );\n\n useEffect(() => {\n if (!state) return;\n\n const handlePointerDown = (event: MouseEvent | TouchEvent) => {\n if (menuRef.current && !menuRef.current.contains(event.target as Node)) onClose();\n };\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.stopPropagation();\n onClose();\n return;\n }\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n moveActiveIndex(event.key === 'ArrowDown' ? 1 : -1);\n }\n };\n // Any scroll (table viewport included) detaches the menu from its cell, so close it.\n const handleScroll = () => onClose();\n\n // Deferred so the right click that opened the menu does not immediately close it.\n const timeoutId = setTimeout(() => {\n document.addEventListener('mousedown', handlePointerDown);\n document.addEventListener('touchstart', handlePointerDown);\n document.addEventListener('keydown', handleKeyDown);\n document.addEventListener('scroll', handleScroll, true);\n window.addEventListener('resize', handleScroll);\n }, 0);\n\n return () => {\n clearTimeout(timeoutId);\n document.removeEventListener('mousedown', handlePointerDown);\n document.removeEventListener('touchstart', handlePointerDown);\n document.removeEventListener('keydown', handleKeyDown);\n document.removeEventListener('scroll', handleScroll, true);\n window.removeEventListener('resize', handleScroll);\n };\n }, [state, onClose, moveActiveIndex]);\n\n if (!state || !context || menuRows.length === 0) return null;\n\n if (tableConfig?.renderCellContextMenu) {\n return tableConfig.renderCellContextMenu({ state, context, items, rowOptions: allowedRowOptions, onClose }) as JSX.Element;\n }\n\n const handleItemClick = async (item: ICellContextMenuItem): Promise<void> => {\n if (resolveFlag(item.isDisabled, context, false)) return;\n if (!item.keepOpenOnClick) onClose();\n await item.onClick?.(context);\n };\n\n return createPortal(\n <div\n ref={menuRef}\n role='menu'\n aria-label={t('Cell actions')}\n data-testid='cell-context-menu'\n className={cn(\n 'fixed min-w-[180px] max-w-[280px] py-1 rounded-lg font-inter',\n 'bg-white dark:bg-black-700',\n 'border border-neutral-200 dark:border-black-600',\n 'shadow-lg dark:shadow-black/40',\n config?.className,\n )}\n style={{\n left: position?.left ?? state.x,\n top: position?.top ?? state.y,\n zIndex: CELL_CONTEXT_MENU_Z_INDEX,\n // Hidden until measured so the flip/clamp never flashes at the wrong spot.\n visibility: position ? 'visible' : 'hidden',\n }}\n onContextMenu={(event) => event.preventDefault()}\n >\n {menuRows.map((row, index) => (\n <React.Fragment key={row.key}>\n {(row.kind === 'item' ? row.item.withDividerBefore && index > 0 : row.withDividerBefore) ? (\n <div className='my-1 h-px bg-neutral-200 dark:bg-black-600' />\n ) : null}\n {row.kind === 'item' ? (\n <MenuItemButton\n item={row.item}\n isDisabled={resolveFlag(row.item.isDisabled, context, false)}\n isActive={index === activeIndex}\n onSelect={() => void handleItemClick(row.item)}\n onHover={() => setActiveIndex(index)}\n />\n ) : row.kind === 'skeleton' ? (\n <div className='px-3 py-2' data-testid='cell-context-menu-loading'>\n <div className='h-3.5 w-full animate-pulse rounded bg-neutral-200 dark:bg-black-600' />\n </div>\n ) : (\n /* Row actions are rendered as the table supplied them — they carry their own button and handler. */\n <div data-menu-item tabIndex={-1} className='outline-none [&_button]:w-full' onClick={onClose} onMouseEnter={() => setActiveIndex(index)}>\n {row.node}\n </div>\n )}\n </React.Fragment>\n ))}\n </div>,\n document.body,\n );\n};\n"],"names":["writeToClipboard","text","textarea","copied","resolveFlag","flag","context","fallback","MenuItemButton","item","isDisabled","isActive","onSelect","onHover","jsxs","cn","jsx","CellContextMenuPortal","state","config","rowOptions","asyncRowOptionsFilter","checkedIds","rows","columns","onClose","tableConfig","useTableConfig","t","useMemo","key","menuRef","useRef","position","setPosition","useState","activeIndex","setActiveIndex","copyState","setCopyState","rowOptionsFilter","setRowOptionsFilter","closeTimer","handleCopy","useCallback","menuContext","isCopied","COPY_FEEDBACK_DURATION","buildCopyItem","label","isDone","CheckIcon","ContentCopyIcon","rowJson","getRowJson","selectedRowsJson","getSelectedRowsJson","selectedCount","items","defaultItems","extraItems","resolvedRowOptions","option","hasRowOptions","useEffect","isCancelled","available","allowedRowOptions","menuRows","itemRows","needsDivider","index","isRowNavigable","row","firstNavigableIndex","useLayoutEffect","width","height","margin","CELL_CONTEXT_MENU_VIEWPORT_MARGIN","offset","CELL_CONTEXT_MENU_CURSOR_OFFSET","left","top","moveActiveIndex","direction","current","next","step","handlePointerDown","event","handleKeyDown","handleScroll","timeoutId","handleItemClick","createPortal","CELL_CONTEXT_MENU_Z_INDEX","React"],"mappings":";;;;;;;;AAqDA,MAAMA,KAAmB,OAAOC,MAAmC;AACjE,MAAI;AACF,QAAI,WAAW,WAAW;AACxB,mBAAM,UAAU,UAAU,UAAUA,CAAI,GACjC;AAAA,EAEX,QAAQ;AAAA,EAER;AAEA,MAAI;AACF,UAAMC,IAAW,SAAS,cAAc,UAAU;AAClD,IAAAA,EAAS,QAAQD,GACjBC,EAAS,aAAa,YAAY,EAAE,GACpCA,EAAS,MAAM,WAAW,SAC1BA,EAAS,MAAM,UAAU,KACzB,SAAS,KAAK,YAAYA,CAAQ,GAClCA,EAAS,OAAA;AACT,UAAMC,IAAS,SAAS,YAAY,MAAM;AAC1C,oBAAS,KAAK,YAAYD,CAAQ,GAC3BC;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF,GAEMC,IAAc,CAClBC,GACAC,GACAC,MAEIF,MAAS,SAAkBE,IACxB,OAAOF,KAAS,aAAaA,EAAKC,CAAO,IAAID,GAGhDG,KAMD,CAAC,EAAE,MAAAC,GAAM,YAAAC,GAAY,UAAAC,GAAU,UAAAC,GAAU,SAAAC,QAC5C,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL,MAAK;AAAA,IACL,kBAAc;AAAA,IACd,UAAUJ;AAAA,IACV,iBAAeA;AAAA,IACf,UAAUC,IAAW,IAAI;AAAA,IACzB,WAAWI;AAAA,MACT;AAAA,MACAL,IACI,kCACAK;AAAA,QACE;AAAA,QACAN,EAAK,WACD,2IACA;AAAA,MAAA;AAAA,IACN;AAAA,IAEN,SAASG;AAAA,IACT,cAAc,MAAM,CAACF,KAAcG,EAAA;AAAA,IAElC,UAAA;AAAA,MAAAJ,EAAK,OACJ,gBAAAO,EAAC,QAAA,EAAK,WAAWD,EAAG,8BAA8BN,EAAK,WAAW,uCAAuC,sCAAsC,GAC5I,UAAAA,EAAK,MACR,IACE;AAAA,MACJ,gBAAAO,EAAC,QAAA,EAAK,WAAU,mBAAmB,YAAK,OAAM;AAAA,MAC7CP,EAAK,WAAW,gBAAAO,EAAC,QAAA,EAAK,WAAU,yDAAyD,UAAAP,EAAK,UAAS,IAAU;AAAA,IAAA;AAAA,EAAA;AACpH,GAOWQ,KAA8D,CAAC;AAAA,EAC1E,OAAAC;AAAA,EAAO,QAAAC;AAAA,EAAQ,YAAAC;AAAA,EAAY,uBAAAC;AAAA,EAAuB,YAAAC;AAAA,EAAY,MAAAC;AAAA,EAAM,SAAAC;AAAA,EAAS,SAAAC;AAC/E,MAAM;AACJ,QAAMC,IAAcC,EAAA,GACdC,IAAIC,EAAQ,MAAMH,GAAa,MAAM,CAACI,MAAgBA,IAAM,CAACJ,CAAW,CAAC,GACzEK,IAAUC,EAAuB,IAAI,GACrC,CAACC,GAAUC,CAAW,IAAIC,EAA+C,IAAI,GAC7E,CAACC,GAAaC,CAAc,IAAIF,EAAS,EAAE,GAC3C,CAACG,GAAWC,CAAY,IAAIJ,EAAoD,IAAI,GACpF,CAACK,GAAkBC,CAAmB,IAAIN,EAA4B,EAAE,QAAQ,OAAO,GACvFO,IAAaV,EAAA,GAEb1B,IAAUuB;AAAA,IACd,MAAOX,IAAQ,EAAE,GAAGA,EAAM,QAAQ,OAAOO,MAAY;AAAA,IACrD,CAACP,GAAOO,CAAO;AAAA,EAAA,GAGXkB,IAAaC;AAAA,IACjB,OAAOd,GAAa7B,GAAc4C,MAAyC;AACzE,UAAIP,EAAW;AAEf,YAAMQ,IAAW,MAAM9C,GAAiBC,CAAI;AAE5C,MAAI6C,KACF3B,GAAQ,SAASlB,GAAM4C,CAAW,GAClCnB,GAAa,mBAAmB,WAAWE,EAAE,qBAAqB,CAAC,KAEnEF,GAAa,mBAAmB,SAASE,EAAE,6BAA6B,CAAC,GAI3EW,EAAa,EAAE,KAAAT,GAAK,UAAAgB,GAAU,GAC9BJ,EAAW,UAAU,WAAW,MAAMjB,EAAA,GAAWsB,EAAsB;AAAA,IACzE;AAAA,IACA,CAAC5B,GAAQO,GAAaE,GAAGH,GAASa,CAAS;AAAA,EAAA,GAGvCU,IAAgBJ;AAAA,IACpB,CAACd,GAAamB,GAAehD,MAAuC;AAClE,YAAMiD,IAASZ,GAAW,QAAQR;AAElC,aAAO;AAAA,QACL,KAAAA;AAAA,QACA,OAAQoB,IAAiBZ,GAAW,WAAWV,EAAE,QAAQ,IAAIA,EAAE,aAAa,IAA3DqB;AAAA,QACjB,MACEC,KAAUZ,GAAW,6BAClBa,IAAA,EAAU,MAAM,IAAI,WAAU,yCAAA,CAAyC,IAExE,gBAAAnC,EAACoC,IAAA,EAAgB,MAAM,IAAI;AAAA,QAE/B,YAAY,CAACnD;AAAA,QACb,iBAAiB;AAAA,QACjB,SAAS,CAAC4C,MAAgBF,EAAWb,GAAK7B,GAAM4C,CAAW;AAAA,MAAA;AAAA,IAE/D;AAAA,IACA,CAACP,GAAWK,GAAYf,CAAC;AAAA,EAAA,GAGrByB,IAAUxB,EAAQ,MAAMyB,EAAWpC,GAAO,OAAO,SAASM,CAAO,GAAG,CAACN,GAAO,OAAO,SAASM,CAAO,CAAC,GAEpG+B,IAAmB1B,EAAQ,MAAOX,IAAQsC,EAAoBjC,GAAMC,GAASF,CAAU,IAAI,IAAK,CAACJ,GAAOK,GAAMC,GAASF,CAAU,CAAC,GAClImC,IAAgBnC,GAAY,UAAU,GAEtCoC,IAAQ7B,EAAgC,MAAM;AAClD,QAAI,CAACvB,EAAS,QAAO,CAAA;AAErB,UAAMqD,IAAuCxC,GAAQ,mBACjD,KACA;AAAA,MACE6B,EAAc,aAAa7B,GAAQ,aAAaS,EAAE,WAAW,GAAGtB,EAAQ,IAAI;AAAA,MAC5E0C,EAAc,YAAYpB,EAAE,UAAU,GAAGyB,CAAO;AAAA,MAChD,GAAII,IAAgB,IAChB;AAAA,QACET;AAAA,UACE;AAAA,UACAS,MAAkB,IAAI7B,EAAE,mBAAmB,IAAI,GAAGA,EAAE,oBAAoB,CAAC,KAAK6B,CAAa;AAAA,UAC3FF;AAAA,QAAA;AAAA,MACF,IAEF,CAAA;AAAA,IAAC,GAGLK,IAAa,OAAOzC,GAAQ,SAAU,aAAaA,EAAO,MAAMb,CAAO,IAAIa,GAAQ,SAAS,CAAA;AAElG,WAAO,CAAC,GAAGwC,GAAc,GAAGC,CAAU,EAAE,OAAO,CAACnD,MAASL,EAAYK,EAAK,WAAWH,GAAS,EAAI,CAAC;AAAA,EACrG,GAAG,CAACa,GAAQb,GAAS0C,GAAeS,GAAeJ,GAASE,GAAkB3B,CAAC,CAAC,GAG1EiC,IAAqBhC,EAAsB,MAC3C,CAACX,KAASC,GAAQ,sBAAsB,MAAS,CAACC,IAAmB,CAAA,MAE5D,OAAOA,KAAe,aAAaA,EAAWF,EAAM,OAAO,OAAO,IAAIE,MAEnE,CAAA,GAAI,OAAO,CAAC0C,MAAWA,EAAO,cAAc,EAAK,GAChE,CAAC5C,GAAOE,GAAYD,GAAQ,iBAAiB,CAAC,GAE3C4C,IAAgBF,EAAmB,SAAS;AAGlD,EAAAG,EAAU,MAAM;AACd,QAAI,CAAC9C,KAAS,CAAC6C,KAAiB,CAAC1C,GAAuB;AACtD,MAAAoB,EAAoB,EAAE,QAAQ,OAAO;AACrC;AAAA,IACF;AAEA,QAAIwB,IAAc;AAClB,WAAAxB,EAAoB,EAAE,QAAQ,WAAW,GAEzCpB,EAAsB,OAAOH,EAAM,OAAO,KAAK,CAAC,EAC7C,KAAK,CAACgD,MAAc,CAACD,KAAexB,EAAoB,EAAE,QAAQ,SAAS,WAAAyB,EAAA,CAAW,CAAC,EACvF,MAAM,MAAM,CAACD,KAAexB,EAAoB,EAAE,QAAQ,SAAA,CAAU,CAAC,GAEjE,MAAM;AACX,MAAAwB,IAAc;AAAA,IAChB;AAAA,EACF,GAAG,CAAC/C,GAAO6C,GAAe1C,CAAqB,CAAC;AAEhD,QAAM8C,IAAoBtC,EAAsB,MAAM;AACpD,QAAIW,EAAiB,WAAW,MAAO,QAAOqB;AAC9C,QAAIrB,EAAiB,WAAW,QAAS,QAAO,CAAA;AAEhD,UAAM,EAAE,WAAA0B,MAAc1B;AAEtB,WAAOqB,EAAmB,OAAO,CAACC,MAAWI,EAAUJ,EAAO,GAAG,KAAK,EAAI;AAAA,EAC5E,GAAG,CAACD,GAAoBrB,CAAgB,CAAC,GAEnC4B,IAAWvC,EAAoB,MAAM;AACzC,UAAMwC,IAAuBX,EAAM,IAAI,CAACjD,OAAU,EAAE,MAAM,QAAQ,KAAKA,EAAK,KAAK,MAAAA,EAAA,EAAO,GAClF6D,IAAeD,EAAS,SAAS;AAEvC,WAAI7B,EAAiB,WAAW,YACvB,CAAC,GAAG6B,GAAU,EAAE,MAAM,YAAY,KAAK,uBAAuB,mBAAmBC,GAAc,IAGjG;AAAA,MACL,GAAGD;AAAA,MACH,GAAGF,EAAkB,IAAc,CAACL,GAAQS,OAAW;AAAA,QACrD,MAAM;AAAA,QACN,KAAK,cAAcT,EAAO,GAAG;AAAA,QAC7B,MAAMA,EAAO;AAAA,QACb,mBAAmBQ,KAAgBC,MAAU;AAAA,MAAA,EAC7C;AAAA,IAAA;AAAA,EAEN,GAAG,CAACb,GAAOS,GAAmB3B,EAAiB,MAAM,CAAC,GAEhDgC,IAAiB5B;AAAA,IACrB,CAAC6B,MAA4BA,EAAI,SAAS,SAAS,EAAEnE,KAAWF,EAAYqE,EAAI,KAAK,YAAYnE,GAAS,EAAK,KAAKmE,EAAI,SAAS;AAAA,IACjI,CAACnE,CAAO;AAAA,EAAA,GAGJoE,IAAsB7C,EAAQ,MAAMuC,EAAS,UAAUI,CAAc,GAAG,CAACJ,GAAUI,CAAc,CAAC;AAGxG,EAAAG,GAAgB,MAAM;AACpB,QAAI,CAACzD,KAAS,CAACa,EAAQ,SAAS;AAC9B,MAAAG,EAAY,IAAI;AAChB;AAAA,IACF;AAEA,UAAM,EAAE,OAAA0C,GAAO,QAAAC,EAAA,IAAW9C,EAAQ,QAAQ,sBAAA,GACpC+C,IAASC,IACTC,IAASC,IAGTC,IAAOhE,EAAM,IAAI0D,IAAQE,IAAS,OAAO,aAAa5D,EAAM,IAAI0D,IAAQI,IAAS9D,EAAM,IAAI8D,GAC3FG,IAAMjE,EAAM,IAAI2D,IAASC,IAAS,OAAO,cAAc5D,EAAM,IAAI2D,IAASG,IAAS9D,EAAM,IAAI8D;AAEnG,IAAA9C,EAAY;AAAA,MACV,MAAM,KAAK,IAAI4C,GAAQ,KAAK,IAAII,GAAM,OAAO,aAAaN,IAAQE,CAAM,CAAC;AAAA,MACzE,KAAK,KAAK,IAAIA,GAAQ,KAAK,IAAIK,GAAK,OAAO,cAAcN,IAASC,CAAM,CAAC;AAAA,IAAA,CAC1E;AAAA,EACH,GAAG,CAAC5D,GAAOkD,EAAS,MAAM,CAAC,GAE3BJ,EAAU,OACRzB,EAAa,IAAI,GACV,MAAM,aAAaG,EAAW,OAAO,IAC3C,CAACxB,CAAK,CAAC,GAEV8C,EAAU,MAAM;AACd,QAAI,CAAC9C,GAAO;AACV,MAAAmB,EAAe,EAAE;AACjB;AAAA,IACF;AACA,IAAAA,EAAeqC,CAAmB;AAAA,EACpC,GAAG,CAACxD,GAAOwD,CAAmB,CAAC,GAG/BV,EAAU,MAAM;AACd,QAAI,CAAC9C,KAASkB,IAAc,EAAG;AAE/B,UAAMqC,IAAM1C,EAAQ,SAAS,iBAA8B,kBAAkB,EAAEK,CAAW;AAI1F,KAHoBqC,GAAK,QAAQ,QAAQ,IAAIA,IAAMA,GAAK,cAAc,QAAQ,KAAKA,IAGtE,MAAM,EAAE,eAAe,GAAA,CAAM;AAAA,EAC5C,GAAG,CAACvD,GAAOkB,CAAW,CAAC;AAEvB,QAAMgD,IAAkBxC;AAAA,IACtB,CAACyC,MAAsB;AACrB,MAAIjB,EAAS,WAAW,KACxB/B,EAAe,CAACiD,MAAY;AAC1B,YAAIC,IAAOD;AACX,iBAASE,IAAO,GAAGA,IAAOpB,EAAS,QAAQoB,KAAQ;AAEjD,cADAD,KAAQA,IAAOF,IAAYjB,EAAS,UAAUA,EAAS,QACnDI,EAAeJ,EAASmB,CAAI,CAAC,EAAG,QAAOA;AAE7C,eAAOD;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IACA,CAAClB,GAAUI,CAAc;AAAA,EAAA;AA0C3B,MAvCAR,EAAU,MAAM;AACd,QAAI,CAAC9C,EAAO;AAEZ,UAAMuE,IAAoB,CAACC,MAAmC;AAC5D,MAAI3D,EAAQ,WAAW,CAACA,EAAQ,QAAQ,SAAS2D,EAAM,MAAc,KAAGjE,EAAA;AAAA,IAC1E,GACMkE,IAAgB,CAACD,MAAyB;AAC9C,UAAIA,EAAM,QAAQ,UAAU;AAC1B,QAAAA,EAAM,gBAAA,GACNjE,EAAA;AACA;AAAA,MACF;AACA,OAAIiE,EAAM,QAAQ,eAAeA,EAAM,QAAQ,eAC7CA,EAAM,eAAA,GACNN,EAAgBM,EAAM,QAAQ,cAAc,IAAI,EAAE;AAAA,IAEtD,GAEME,IAAe,MAAMnE,EAAA,GAGrBoE,IAAY,WAAW,MAAM;AACjC,eAAS,iBAAiB,aAAaJ,CAAiB,GACxD,SAAS,iBAAiB,cAAcA,CAAiB,GACzD,SAAS,iBAAiB,WAAWE,CAAa,GAClD,SAAS,iBAAiB,UAAUC,GAAc,EAAI,GACtD,OAAO,iBAAiB,UAAUA,CAAY;AAAA,IAChD,GAAG,CAAC;AAEJ,WAAO,MAAM;AACX,mBAAaC,CAAS,GACtB,SAAS,oBAAoB,aAAaJ,CAAiB,GAC3D,SAAS,oBAAoB,cAAcA,CAAiB,GAC5D,SAAS,oBAAoB,WAAWE,CAAa,GACrD,SAAS,oBAAoB,UAAUC,GAAc,EAAI,GACzD,OAAO,oBAAoB,UAAUA,CAAY;AAAA,IACnD;AAAA,EACF,GAAG,CAAC1E,GAAOO,GAAS2D,CAAe,CAAC,GAEhC,CAAClE,KAAS,CAACZ,KAAW8D,EAAS,WAAW,EAAG,QAAO;AAExD,MAAI1C,GAAa;AACf,WAAOA,EAAY,sBAAsB,EAAE,OAAAR,GAAO,SAAAZ,GAAS,OAAAoD,GAAO,YAAYS,GAAmB,SAAA1C,GAAS;AAG5G,QAAMqE,IAAkB,OAAOrF,MAA8C;AAC3E,IAAIL,EAAYK,EAAK,YAAYH,GAAS,EAAK,MAC1CG,EAAK,mBAAiBgB,EAAA,GAC3B,MAAMhB,EAAK,UAAUH,CAAO;AAAA,EAC9B;AAEA,SAAOyF;AAAA,IACL,gBAAA/E;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKe;AAAA,QACL,MAAK;AAAA,QACL,cAAYH,EAAE,cAAc;AAAA,QAC5B,eAAY;AAAA,QACZ,WAAWb;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACAI,GAAQ;AAAA,QAAA;AAAA,QAEV,OAAO;AAAA,UACL,MAAMc,GAAU,QAAQf,EAAM;AAAA,UAC9B,KAAKe,GAAU,OAAOf,EAAM;AAAA,UAC5B,QAAQ8E;AAAA;AAAA,UAER,YAAY/D,IAAW,YAAY;AAAA,QAAA;AAAA,QAErC,eAAe,CAACyD,MAAUA,EAAM,eAAA;AAAA,QAE/B,UAAAtB,EAAS,IAAI,CAACK,GAAKF,MAClB,gBAAAzD,EAACmF,EAAM,UAAN,EACG,UAAA;AAAA,WAAAxB,EAAI,SAAS,SAASA,EAAI,KAAK,qBAAqBF,IAAQ,IAAIE,EAAI,qBACpE,gBAAAzD,EAAC,OAAA,EAAI,WAAU,8CAA6C,IAC1D;AAAA,UACHyD,EAAI,SAAS,SACZ,gBAAAzD;AAAA,YAACR;AAAA,YAAA;AAAA,cACC,MAAMiE,EAAI;AAAA,cACV,YAAYrE,EAAYqE,EAAI,KAAK,YAAYnE,GAAS,EAAK;AAAA,cAC3D,UAAUiE,MAAUnC;AAAA,cACpB,UAAU,MAAM,KAAK0D,EAAgBrB,EAAI,IAAI;AAAA,cAC7C,SAAS,MAAMpC,EAAekC,CAAK;AAAA,YAAA;AAAA,UAAA,IAEnCE,EAAI,SAAS,+BACd,OAAA,EAAI,WAAU,aAAY,eAAY,6BACrC,UAAA,gBAAAzD,EAAC,OAAA,EAAI,WAAU,uEAAsE,GACvF;AAAA;AAAA,8BAGC,OAAA,EAAI,kBAAc,IAAC,UAAU,IAAI,WAAU,kCAAiC,SAASS,GAAS,cAAc,MAAMY,EAAekC,CAAK,GACpI,YAAI,KAAA,CACP;AAAA;AAAA,QAAA,EAAA,GApBiBE,EAAI,GAsBzB,CACD;AAAA,MAAA;AAAA,IAAA;AAAA,IAEH,SAAS;AAAA,EAAA;AAEb;"}
|
|
1
|
+
{"version":3,"file":"CellContextMenuPortal.es.js","sources":["../../../../src/components/data-display/infinite-table/CellContextMenuPortal.tsx"],"sourcesContent":["import { useTableConfig } from '../../../providers/design-system-provider/hooks';\nimport { CheckIcon, ContentCopyIcon, LinkIcon, OpenInNewIcon } from '../../icon';\nimport type {\n ICellContextMenuConfig,\n ICellContextMenuContext,\n ICellContextMenuItem,\n ICellContextMenuState,\n IColumn,\n IRowLinkConfig,\n} from './types';\nimport { getRowJson, getSelectedRowsJson } from './copy-text';\nimport cn from 'classnames';\nimport React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport {\n CELL_CONTEXT_MENU_CURSOR_OFFSET,\n COPY_FEEDBACK_DURATION,\n CELL_CONTEXT_MENU_VIEWPORT_MARGIN,\n CELL_CONTEXT_MENU_Z_INDEX,\n} from './constants';\n\ntype TRowOption = { key: string; label: React.ReactNode; isVisible?: boolean };\n\n/** Result of the per-row availability check for row actions. */\ntype TRowOptionsFilter =\n | { status: 'off' }\n | { status: 'loading' }\n | { status: 'ready'; available: Record<string, boolean> }\n | { status: 'failed' };\n\n/** One rendered menu line: a declared item, a row-action node supplied by the table, or the row-action placeholder. */\ntype TMenuRow =\n | { kind: 'item'; key: string; item: ICellContextMenuItem }\n | { kind: 'node'; key: string; node: React.ReactNode; withDividerBefore?: boolean }\n | { kind: 'skeleton'; key: string; withDividerBefore?: boolean };\n\ninterface CellContextMenuPortalProps {\n state: ICellContextMenuState | null;\n config?: ICellContextMenuConfig | null;\n /** The table's row actions, appended to the menu — same list the three-dot cell renders. */\n rowOptions?: TRowOption[] | ((rowData: Record<string, unknown>) => TRowOption[] | null) | null;\n /** Per-row availability check for `rowOptions`, mirroring the three-dot cell so both menus agree. */\n asyncRowOptionsFilter?: ((rowId: string) => Promise<Record<string, boolean>>) | null;\n /** Checked row ids, enabling the \"Copy selected rows\" item. */\n checkedIds?: (string | number)[];\n /** Table rows, used to build the text for selected rows that are scrolled out of view. */\n rows?: Record<string, unknown>[];\n /** Visible columns in display order, used to order the copied values. */\n columns?: IColumn[];\n /** The table's row link, enabling the \"Copy Link\" / \"Open in New Tab\" items. */\n rowLinkConfig?: IRowLinkConfig | null;\n onClose: () => void;\n}\n\n/** Clipboard write with a fallback for browsers / insecure contexts without the async clipboard API. */\nconst writeToClipboard = async (text: string): Promise<boolean> => {\n try {\n if (navigator?.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n return true;\n }\n } catch {\n // fall through to the textarea fallback\n }\n\n try {\n const textarea = document.createElement('textarea');\n textarea.value = text;\n textarea.setAttribute('readonly', '');\n textarea.style.position = 'fixed';\n textarea.style.opacity = '0';\n document.body.appendChild(textarea);\n textarea.select();\n const copied = document.execCommand('copy');\n document.body.removeChild(textarea);\n return copied;\n } catch {\n return false;\n }\n};\n\n/** `linkTo` returns a router path; the clipboard and a new tab both need a full URL. */\nconst toAbsoluteUrl = (path: string): string => {\n if (!path) return '';\n\n try {\n return new URL(path, window.location.href).href;\n } catch {\n return '';\n }\n};\n\nconst resolveFlag = (\n flag: boolean | ((context: ICellContextMenuContext) => boolean) | undefined,\n context: ICellContextMenuContext,\n fallback: boolean,\n): boolean => {\n if (flag === undefined) return fallback;\n return typeof flag === 'function' ? flag(context) : flag;\n};\n\nconst MenuItemButton: React.FC<{\n item: ICellContextMenuItem;\n isDisabled: boolean;\n isActive: boolean;\n onSelect: () => void;\n onHover: () => void;\n}> = ({ item, isDisabled, isActive, onSelect, onHover }) => (\n <button\n type='button'\n role='menuitem'\n data-menu-item\n disabled={isDisabled}\n aria-disabled={isDisabled}\n tabIndex={isActive ? 0 : -1}\n className={cn(\n 'flex w-full items-center gap-3 px-3 py-2 text-sm font-medium text-left outline-none',\n isDisabled\n ? 'opacity-50 cursor-not-allowed'\n : cn(\n 'cursor-pointer',\n item.isDanger\n ? 'text-error-600 dark:text-error-400 hover:bg-error-50 dark:hover:bg-error-950 focus-visible:bg-error-50 dark:focus-visible:bg-error-950'\n : 'text-neutral-900 dark:text-white hover:bg-neutral-100 dark:hover:bg-black-600 focus-visible:bg-neutral-100 dark:focus-visible:bg-black-600',\n ),\n )}\n onClick={onSelect}\n onMouseEnter={() => !isDisabled && onHover()}\n >\n {item.icon ? (\n <span className={cn('flex shrink-0 items-center', item.isDanger ? 'text-error-600 dark:text-error-400' : 'text-neutral-500 dark:text-black-300')}>\n {item.icon}\n </span>\n ) : null}\n <span className='flex-1 truncate'>{item.label}</span>\n {item.shortcut ? <span className='shrink-0 text-xs text-neutral-400 dark:text-black-300'>{item.shortcut}</span> : null}\n </button>\n);\n\n/**\n * Right-click menu for data cells. Rendered once per table and positioned at the\n * cursor; `DataCell` opens it through `openCellContextMenu` on the table context.\n */\nexport const CellContextMenuPortal: React.FC<CellContextMenuPortalProps> = ({\n state, config, rowOptions, asyncRowOptionsFilter, checkedIds, rows, columns, rowLinkConfig, onClose,\n}) => {\n const tableConfig = useTableConfig();\n const t = useMemo(() => tableConfig?.t ?? ((key: string) => key), [tableConfig]);\n const menuRef = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState<{ left: number; top: number } | null>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [copyState, setCopyState] = useState<{ key: string; isCopied: boolean } | null>(null);\n const [rowOptionsFilter, setRowOptionsFilter] = useState<TRowOptionsFilter>({ status: 'off' });\n const closeTimer = useRef<ReturnType<typeof setTimeout>>();\n\n const context = useMemo<ICellContextMenuContext | null>(\n () => (state ? { ...state.target, close: onClose } : null),\n [state, onClose],\n );\n\n const handleCopy = useCallback(\n async (key: string, text: string, menuContext: ICellContextMenuContext) => {\n if (copyState) return;\n\n const isCopied = await writeToClipboard(text);\n\n if (isCopied) {\n config?.onCopy?.(text, menuContext);\n tableConfig?.showNotification?.('success', t('Copied to clipboard'));\n } else {\n tableConfig?.showNotification?.('error', t('Could not copy to clipboard'));\n }\n\n // Confirmed inline instead of with a toast, so the menu owns its own feedback.\n setCopyState({ key, isCopied });\n closeTimer.current = setTimeout(() => onClose(), COPY_FEEDBACK_DURATION);\n },\n [config, tableConfig, t, onClose, copyState],\n );\n\n const buildCopyItem = useCallback(\n (key: string, label: string, text: string, icon?: React.ReactNode): ICellContextMenuItem => {\n const isDone = copyState?.key === key;\n\n return {\n key,\n label: !isDone ? label : copyState?.isCopied ? t('Copied') : t('Copy failed'),\n icon:\n isDone && copyState?.isCopied ? (\n <CheckIcon size={16} className='text-success-600 dark:text-success-400' />\n ) : (\n icon ?? <ContentCopyIcon size={16} />\n ),\n isDisabled: !text,\n keepOpenOnClick: true,\n onClick: (menuContext) => handleCopy(key, text, menuContext),\n };\n },\n [copyState, handleCopy, t],\n );\n\n const rowJson = useMemo(() => getRowJson(state?.target.rowData, columns), [state?.target.rowData, columns]);\n // Only while the menu is open — otherwise every checkbox tick would serialize the selection.\n const selectedRowsJson = useMemo(() => (state ? getSelectedRowsJson(rows, columns, checkedIds) : ''), [state, rows, columns, checkedIds]);\n const selectedCount = checkedIds?.length ?? 0;\n\n /** The row link as an absolute URL — empty unless the table opted in, and never on a cell that opts out of the row link. */\n const rowLinkHref = useMemo(() => {\n if (!state || !rowLinkConfig?.isEnabled || !rowLinkConfig.linkTo || state.target.column?.disableRowClick) return '';\n\n return toAbsoluteUrl(rowLinkConfig.linkTo(String(state.target.rowId), state.target.rowData));\n }, [state, rowLinkConfig]);\n\n const openInNewTab = useCallback(() => {\n if (rowLinkHref) window.open(rowLinkHref, '_blank', 'noopener,noreferrer');\n }, [rowLinkHref]);\n\n const items = useMemo<ICellContextMenuItem[]>(() => {\n if (!context) return [];\n\n const defaultItems: ICellContextMenuItem[] = config?.hideDefaultItems\n ? []\n : [\n buildCopyItem('copy-cell', config?.copyLabel ?? t('Copy Cell'), context.text),\n buildCopyItem('copy-row', t('Copy Row'), rowJson),\n ...(selectedCount > 0\n ? [\n buildCopyItem(\n 'copy-selected-rows',\n selectedCount === 1 ? t('Copy Selected Row') : `${t('Copy Selected Rows')} (${selectedCount})`,\n selectedRowsJson,\n ),\n ]\n : []),\n ...(rowLinkHref && !config?.hideLinkItems\n ? [\n {\n ...buildCopyItem('copy-link', t('Copy Link'), rowLinkHref, <LinkIcon size={16} />),\n withDividerBefore: true,\n },\n {\n key: 'open-in-new-tab',\n label: t('Open in New Tab'),\n icon: <OpenInNewIcon size={16} />,\n onClick: openInNewTab,\n },\n ]\n : []),\n ];\n\n const extraItems = typeof config?.items === 'function' ? config.items(context) : config?.items ?? [];\n\n return [...defaultItems, ...extraItems].filter((item) => resolveFlag(item.isVisible, context, true));\n }, [config, context, buildCopyItem, selectedCount, rowJson, selectedRowsJson, rowLinkHref, openInNewTab, t]);\n\n /** The table's own row actions, resolved for the right-clicked row. */\n const resolvedRowOptions = useMemo<TRowOption[]>(() => {\n if (!state || config?.includeRowOptions === false || !rowOptions) return [];\n\n const list = typeof rowOptions === 'function' ? rowOptions(state.target.rowData) : rowOptions;\n\n return (list ?? []).filter((option) => option.isVisible !== false);\n }, [state, rowOptions, config?.includeRowOptions]);\n\n const hasRowOptions = resolvedRowOptions.length > 0;\n\n /** Row actions can be gated per row by the API — ask before showing them, exactly as the three-dot cell does. */\n useEffect(() => {\n if (!state || !hasRowOptions || !asyncRowOptionsFilter) {\n setRowOptionsFilter({ status: 'off' });\n return;\n }\n\n let isCancelled = false;\n setRowOptionsFilter({ status: 'loading' });\n\n asyncRowOptionsFilter(String(state.target.rowId))\n .then((available) => !isCancelled && setRowOptionsFilter({ status: 'ready', available }))\n .catch(() => !isCancelled && setRowOptionsFilter({ status: 'failed' }));\n\n return () => {\n isCancelled = true;\n };\n }, [state, hasRowOptions, asyncRowOptionsFilter]);\n\n const allowedRowOptions = useMemo<TRowOption[]>(() => {\n if (rowOptionsFilter.status === 'off') return resolvedRowOptions;\n if (rowOptionsFilter.status !== 'ready') return [];\n\n const { available } = rowOptionsFilter;\n\n return resolvedRowOptions.filter((option) => available[option.key] ?? true);\n }, [resolvedRowOptions, rowOptionsFilter]);\n\n const menuRows = useMemo<TMenuRow[]>(() => {\n const itemRows: TMenuRow[] = items.map((item) => ({ kind: 'item', key: item.key, item }));\n const needsDivider = itemRows.length > 0;\n\n if (rowOptionsFilter.status === 'loading') {\n return [...itemRows, { kind: 'skeleton', key: 'row-options-loading', withDividerBefore: needsDivider }];\n }\n\n return [\n ...itemRows,\n ...allowedRowOptions.map<TMenuRow>((option, index) => ({\n kind: 'node',\n key: `row-option-${option.key}`,\n node: option.label,\n withDividerBefore: needsDivider && index === 0,\n })),\n ];\n }, [items, allowedRowOptions, rowOptionsFilter.status]);\n\n const isRowNavigable = useCallback(\n (row: TMenuRow): boolean => (row.kind === 'item' ? !(context && resolveFlag(row.item.isDisabled, context, false)) : row.kind === 'node'),\n [context],\n );\n\n const firstNavigableIndex = useMemo(() => menuRows.findIndex(isRowNavigable), [menuRows, isRowNavigable]);\n\n /** Clamp into the viewport once the menu has been measured; row actions can arrive after the first paint. */\n useLayoutEffect(() => {\n if (!state || !menuRef.current) {\n setPosition(null);\n return;\n }\n\n const { width, height } = menuRef.current.getBoundingClientRect();\n const margin = CELL_CONTEXT_MENU_VIEWPORT_MARGIN;\n const offset = CELL_CONTEXT_MENU_CURSOR_OFFSET;\n\n // Flip to the other side of the cursor when there is no room, then clamp.\n const left = state.x + width + margin > window.innerWidth ? state.x - width - offset : state.x + offset;\n const top = state.y + height + margin > window.innerHeight ? state.y - height - offset : state.y + offset;\n\n setPosition({\n left: Math.max(margin, Math.min(left, window.innerWidth - width - margin)),\n top: Math.max(margin, Math.min(top, window.innerHeight - height - margin)),\n });\n }, [state, menuRows.length]);\n\n useEffect(() => {\n setCopyState(null);\n return () => clearTimeout(closeTimer.current);\n }, [state]);\n\n useEffect(() => {\n if (!state) {\n setActiveIndex(-1);\n return;\n }\n setActiveIndex(firstNavigableIndex);\n }, [state, firstNavigableIndex]);\n\n /** Focus follows the active row so the menu is keyboard operable; row actions bring their own button. */\n useEffect(() => {\n if (!state || activeIndex < 0) return;\n\n const row = menuRef.current?.querySelectorAll<HTMLElement>('[data-menu-item]')[activeIndex];\n const focusTarget = row?.matches('button') ? row : row?.querySelector('button') ?? row;\n\n // preventScroll: a focus-driven scroll would immediately close the menu.\n focusTarget?.focus({ preventScroll: true });\n }, [state, activeIndex]);\n\n const moveActiveIndex = useCallback(\n (direction: 1 | -1) => {\n if (menuRows.length === 0) return;\n setActiveIndex((current) => {\n let next = current;\n for (let step = 0; step < menuRows.length; step += 1) {\n next = (next + direction + menuRows.length) % menuRows.length;\n if (isRowNavigable(menuRows[next])) return next;\n }\n return current;\n });\n },\n [menuRows, isRowNavigable],\n );\n\n useEffect(() => {\n if (!state) return;\n\n const handlePointerDown = (event: MouseEvent | TouchEvent) => {\n if (menuRef.current && !menuRef.current.contains(event.target as Node)) onClose();\n };\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.stopPropagation();\n onClose();\n return;\n }\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n moveActiveIndex(event.key === 'ArrowDown' ? 1 : -1);\n }\n };\n // Any scroll (table viewport included) detaches the menu from its cell, so close it.\n const handleScroll = () => onClose();\n\n // Deferred so the right click that opened the menu does not immediately close it.\n const timeoutId = setTimeout(() => {\n document.addEventListener('mousedown', handlePointerDown);\n document.addEventListener('touchstart', handlePointerDown);\n document.addEventListener('keydown', handleKeyDown);\n document.addEventListener('scroll', handleScroll, true);\n window.addEventListener('resize', handleScroll);\n }, 0);\n\n return () => {\n clearTimeout(timeoutId);\n document.removeEventListener('mousedown', handlePointerDown);\n document.removeEventListener('touchstart', handlePointerDown);\n document.removeEventListener('keydown', handleKeyDown);\n document.removeEventListener('scroll', handleScroll, true);\n window.removeEventListener('resize', handleScroll);\n };\n }, [state, onClose, moveActiveIndex]);\n\n if (!state || !context || menuRows.length === 0) return null;\n\n if (tableConfig?.renderCellContextMenu) {\n return tableConfig.renderCellContextMenu({ state, context, items, rowOptions: allowedRowOptions, onClose }) as JSX.Element;\n }\n\n const handleItemClick = async (item: ICellContextMenuItem): Promise<void> => {\n if (resolveFlag(item.isDisabled, context, false)) return;\n if (!item.keepOpenOnClick) onClose();\n await item.onClick?.(context);\n };\n\n return createPortal(\n <div\n ref={menuRef}\n role='menu'\n aria-label={t('Cell actions')}\n data-testid='cell-context-menu'\n className={cn(\n 'fixed min-w-[180px] max-w-[280px] py-1 rounded-lg font-inter',\n 'bg-white dark:bg-black-700',\n 'border border-neutral-200 dark:border-black-600',\n 'shadow-lg dark:shadow-black/40',\n config?.className,\n )}\n style={{\n left: position?.left ?? state.x,\n top: position?.top ?? state.y,\n zIndex: CELL_CONTEXT_MENU_Z_INDEX,\n // Hidden until measured so the flip/clamp never flashes at the wrong spot.\n visibility: position ? 'visible' : 'hidden',\n }}\n onContextMenu={(event) => event.preventDefault()}\n >\n {menuRows.map((row, index) => (\n <React.Fragment key={row.key}>\n {(row.kind === 'item' ? row.item.withDividerBefore && index > 0 : row.withDividerBefore) ? (\n <div className='my-1 h-px bg-neutral-200 dark:bg-black-600' />\n ) : null}\n {row.kind === 'item' ? (\n <MenuItemButton\n item={row.item}\n isDisabled={resolveFlag(row.item.isDisabled, context, false)}\n isActive={index === activeIndex}\n onSelect={() => void handleItemClick(row.item)}\n onHover={() => setActiveIndex(index)}\n />\n ) : row.kind === 'skeleton' ? (\n <div className='px-3 py-2' data-testid='cell-context-menu-loading'>\n <div className='h-3.5 w-full animate-pulse rounded bg-neutral-200 dark:bg-black-600' />\n </div>\n ) : (\n /* Row actions are rendered as the table supplied them — they carry their own button and handler. */\n <div data-menu-item tabIndex={-1} className='outline-none [&_button]:w-full' onClick={onClose} onMouseEnter={() => setActiveIndex(index)}>\n {row.node}\n </div>\n )}\n </React.Fragment>\n ))}\n </div>,\n document.body,\n );\n};\n"],"names":["writeToClipboard","text","textarea","copied","toAbsoluteUrl","path","resolveFlag","flag","context","fallback","MenuItemButton","item","isDisabled","isActive","onSelect","onHover","jsxs","cn","jsx","CellContextMenuPortal","state","config","rowOptions","asyncRowOptionsFilter","checkedIds","rows","columns","rowLinkConfig","onClose","tableConfig","useTableConfig","t","useMemo","key","menuRef","useRef","position","setPosition","useState","activeIndex","setActiveIndex","copyState","setCopyState","rowOptionsFilter","setRowOptionsFilter","closeTimer","handleCopy","useCallback","menuContext","isCopied","COPY_FEEDBACK_DURATION","buildCopyItem","label","icon","isDone","CheckIcon","ContentCopyIcon","rowJson","getRowJson","selectedRowsJson","getSelectedRowsJson","selectedCount","rowLinkHref","openInNewTab","items","defaultItems","LinkIcon","OpenInNewIcon","extraItems","resolvedRowOptions","option","hasRowOptions","useEffect","isCancelled","available","allowedRowOptions","menuRows","itemRows","needsDivider","index","isRowNavigable","row","firstNavigableIndex","useLayoutEffect","width","height","margin","CELL_CONTEXT_MENU_VIEWPORT_MARGIN","offset","CELL_CONTEXT_MENU_CURSOR_OFFSET","left","top","moveActiveIndex","direction","current","next","step","handlePointerDown","event","handleKeyDown","handleScroll","timeoutId","handleItemClick","createPortal","CELL_CONTEXT_MENU_Z_INDEX","React"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),Ts=require("../../../hooks/useCheckbox.cjs.js"),ys=require("../../../providers/design-system-provider/hooks.cjs.js"),Pe=require("../../../utils/table.cjs.js"),Nt=require("../../button/Button.cjs.js"),Rs=require("../../floating-bar/FloatingBar.cjs.js"),ve=require("../typography/Typography.cjs.js"),E=require("@dnd-kit/core"),l=require("react"),Os=require("react-virtualized-auto-sizer"),js=require("react-dom"),At=require("react-table"),ks=require("./body/index.cjs.js"),_t=require("./validateCell.cjs.js"),Es=require("./body/rows/row.cjs.js"),Ds=require("./context.cjs.js"),Ns=require("./CellContextMenuPortal.cjs.js"),As=require("./CurrencyDropdownPortal.cjs.js"),_s=require("./head/index.cjs.js"),Is=require("./PendingEditsFloatingBar.cjs.js"),m=require("./constants.cjs.js"),It=require("./useRowHeight.cjs.js"),Ms=require("../empty-state/NoDataFoundWidgets.cjs.js"),Ls=require("../empty-state/NoDataFound.cjs.js"),gs=require("../../icon/icons.generated.cjs.js"),Cs=Os.AutoSizer,Mt="Create Column",Vs=(I,T)=>`button-admin-${I.toLowerCase().trim().replace(/\s+/g,"-").replace(/[^a-z0-9-_]/g,"")||T}`,Bs=l.memo(({tableKey:I,searchConfig:T={search:"",handleSearch:()=>null,allowAStarSearch:!1},filterConfig:a={columnFilters:[],onFilter:()=>null,onRemoveFilter:()=>null,onClearFilter:()=>null,onResetFilter:()=>Promise.resolve({}),asyncRowOptionsFilter:()=>Promise.resolve({})},sortConfig:f={onSort:()=>null,columnSort:{field:"",order:""},onRemoveSort:()=>null},headerConfig:i={showExportButton:null,showFilters:!0,showSorts:!0,showSearch:!0,showTableView:!0,showTableViewAsModal:!1,content:null,postContent:null,preContent:null,isLoading:!1,showDivider:!1},hoverConfig:Lt=null,columns:R,modelName:G,enableMasterDataEnumSuggestions:X=!1,agreementId:Y,enumSuggestionsExtraParams:Z,enumSuggestionsData:Q,data:d=[],onRowClick:gt,showHeader:we,showSubHeader:Ct=!0,tableActions:qe,rowOptions:M,hideRowOptionWidth:We,checkboxUtilities:L,isLoading:K=!1,onScroll:Vt,onScrolling:Bt,isColumnConfigurable:ee,onAddColumnClick:te,emptyMessage:He,noDataWidget:$e,buttons:ze,onEditColumnClick:Ue,onDeleteColumnClick:Je,onRowTooltipClick:Pt,tooltiptext:qt,cascadingTableConfig:Wt,originalsOnly:Ht,disableOptionsForRowIndex:$t,tableHeightClass:le="h-[calc(100vh-220px)]",getFullRowDataOnClick:zt,selectedRowId:Ut=null,onRowEdit:D,onBulkRowEdit:g,inlineEditColumns:Jt,isResizable:Gt=!0,paginationConfig:se,dndSortableUtils:re,multipleContexts:Ge,withSortable:Se,withDraggable:Xt,enableRootDrag:Yt,pageSize:Zt=m.DEFAULT_PAGE_SIZE,onCascadingRowExpand:Qt,totalItems:Xe,showRecordCount:be=!1,getInnerRowData:Kt,maxLevel:el,expandedRows:tl={},setExpandedRows:ll,showNewItem:sl,rawData:Ye,dragConfig:rl,isOverlayLoading:nl,style:al={},floatingBarConfig:pe,rowWrapper:ol,rowLinkConfig:cl,isCellClickDisabled:il,setHeaderOnParent:Fe,optimizeTable:ul=!1,multiSelectConfig:dl,cellContextMenuConfig:Ze,headerContextOptions:hl,showHeaderContextOptions:ml,setShowHeaderContextOptions:fl,showDataTypeIcon:xl=!1,rowAdditionalActions:ne,rowAdditionalActionsWidth:Te,setVisibleHeaders:ye,cellEditing:vl=null,cellEditingValue:wl=null,allowInlineEdit:Sl=!1,onFieldOperationFlow:bl,fieldOperationLoading:C=null,onTableActionsReady:Re,onPendingEditsChange:Qe,onCancelPendingEdits:V})=>{const c=ys.useTableConfig(),pl=It.getRowSlotHeight(It.useRowHeight()),Fl=!!T?.search,Ke=a?.columnFilters?.length>0,W=Fl||Ke,Tl=!!L,y=c?.getTableView?.(I)??null,[p,H]=l.useState(y||null),N=!Pe.canEditTableView(p,c?.getUserId?.()),[Oe,je]=l.useState(!1),[ke,et]=l.useState(!1),[yl,tt]=l.useState(null),[v,Ee]=l.useState(R),lt=(d.length===0||!v.length)&&!K,[st,ae]=l.useState(null),[Rl,Ol]=l.useState(!1),[jl,kl]=l.useState(null),[El,Dl]=l.useState(!1),[Nl,oe]=l.useState(null),[Al,ce]=l.useState(null),[_l,rt]=l.useState({}),[$,De]=l.useState(null),[Il,nt]=l.useState(!1),[O,Ml]=l.useState(0),Ne=l.useRef(null),Ae=l.useRef(null),[at,Ll]=l.useState({width:0,height:0}),[gl,B]=l.useState(null),[j,ot]=l.useState(null),[Cl,ct]=l.useState(null),[it,ut]=l.useState(null),[Vl,dt]=l.useState(null),[_e,z]=l.useState({}),Ie=l.useRef(!1),ie=l.useRef(!1),Me=l.useRef(p);Me.current=p;const ht=l.useRef(c);ht.current=c;const mt=l.useRef(R);mt.current=R;const ue=l.useRef(a);ue.current=a;const ft=l.useRef(null),xt=l.useRef(()=>({})),vt=l.useRef(()=>({})),[h,k]=l.useState({}),Le=l.useCallback((e,t,r)=>{k(n=>{const o=n[e]?.[t];let u=r.validationError;if(u===void 0){const S=v.find(x=>x.key===t);if(S){const x=_t.validateCellValue(r.value,S);u=x.isValid?null:x.error||"Invalid"}else u=o?.validationError??null}return{...n,[e]:{...n[e]||{},[t]:{...r,validationError:u??null}}}})},[v]),wt=l.useCallback(()=>Object.values(h).some(e=>Object.keys(e).length>0),[h]);l.useEffect(()=>{Re&&Re({addPendingEdit:Le,hasPendingEdits:wt})},[Re,Le,wt]);const Bl=l.useCallback((e,t)=>{k(r=>{const n={...r};if(n[e]){const{[t]:o,...u}=n[e];Object.keys(u).length===0?delete n[e]:n[e]=u}return n})},[]),Pl=l.useCallback((e,t)=>h[e]?.[t],[h]),ql=l.useCallback((e,t)=>!!h[e]?.[t],[h]),St=l.useCallback(()=>{C||(V&&Object.keys(h).length>0&&V(h),k({}),z({}),B(null))},[C,V,h]),P=l.useCallback((e,t,r)=>{setTimeout(()=>{c?.dispatchEvent?.("SCROLL_TO_TABLE_ROW",{rowIndex:r});const n=v.findIndex(o=>o.key===t);setTimeout(()=>{const o=document.querySelector(`[${m.DATA_ROW_ID_ATTR}="${e}"] [${m.DATA_COLUMN_KEY_ATTR}="${t}"]`);if(o)o.scrollIntoView({behavior:"smooth",block:"center",inline:"center"});else if(n>0){const u=document.querySelector(m.OS_VIEWPORT_SELECTOR);if(u){let S=0;for(let x=0;x<n;x++){const F=v[x];F?.sticky||(S+=F?.width||m.SCROLL_TO_CELL_COLUMN_WIDTH_FALLBACK)}S=Math.max(0,S-m.SCROLL_TO_CELL_LEFT_OFFSET),u.scrollTo({left:S,behavior:"smooth"})}}B({rowId:e,columnKey:t})},350)},100)},[v,c]),U=l.useCallback(e=>{let t=!1,r=null;const n={},o=new Set;return Object.entries(e).forEach(([u,S])=>{n[u]={},Object.entries(S).forEach(([x,F])=>{const _=v.find(b=>b.key===x),w=_t.validateCellValue(F.value,_);w.isValid?n[u][x]={...F,validationError:null}:(t=!0,w.error&&o.add(w.error),r||(r={rowId:u,columnKey:x}),n[u][x]={...F,validationError:w.error})})}),{hasErrors:t,updatedEdits:n,firstError:r,errorTypes:o}},[v]),de=l.useCallback(e=>{const t=e.has("Field required"),r=e.size>(t?1:0);return t&&r?"Missing required field(s) and invalid format detected. Please review highlighted field(s).":t?"Missing required field(s). Please review highlighted field(s).":"Invalid field value(s). Please review highlighted field(s)."},[]),bt=l.useCallback(()=>{const{hasErrors:e,updatedEdits:t,firstError:r,errorTypes:n}=U(h);if(e){if(k(t),c?.showNotification?.("error",de(n)),r){const u=d.findIndex(S=>S.id===r.rowId);P(r.rowId,r.columnKey,u)}return}const o=[];Object.entries(h).forEach(([u,S])=>{const x=d.find(F=>F.id===u);if(x){const F={...x},_={};Object.entries(S).forEach(([w,b])=>{F[w]=b.value,_[w]={value:b.value,meta:b.meta}}),o.push({...F,__editedFields:_})}}),o.length>0&&(g?g(o):D&&D(null,null,null,null,null,{isBulk:!0,rows:o})),k({}),z({}),B(null)},[h,d,D,g,U,de,P,c]),Wl=l.useCallback(e=>{if(C)return;const t=h[e];t&&V&&V({[e]:t}),k(r=>{const n={...r};return delete n[e],n}),z(r=>{const n={...r};return Object.keys(n).forEach(o=>{o.startsWith(`${e}-`)&&delete n[o]}),n}),B(null)},[C,V,h]),Hl=l.useCallback(e=>{const t=h[e];if(!t||Object.keys(t).length===0)return;const{hasErrors:r,updatedEdits:n,firstError:o,errorTypes:u}=U({[e]:t});if(r){if(k(w=>({...w,[e]:n[e]})),c?.showNotification?.("error",de(u)),o){const w=d.findIndex(b=>b.id===o.rowId);P(o.rowId,o.columnKey,w)}return}const S=d.find(w=>w.id===e);if(!S)return;const x={...S},F={};Object.entries(t).forEach(([w,b])=>{x[w]=b.value,F[w]={value:b.value,meta:b.meta}});const _={...x,__editedFields:F};g?g([_]):D&&D(null,null,null,null,null,{isBulk:!0,rows:[_]}),k(w=>{const b={...w};return delete b[e],b}),z(w=>{const b={...w};return Object.keys(b).forEach(Dt=>{Dt.startsWith(`${e}-`)&&delete b[Dt]}),b}),B(null)},[h,d,D,g,U,de,P,c]),q=l.useMemo(()=>Object.values(h).reduce((e,t)=>e+Object.keys(t).length,0),[h]);l.useEffect(()=>{Qe?.(q>0,q)},[q,Qe]);const $l=l.useMemo(()=>{const e=[];return Object.entries(h).forEach(([t,r])=>{const n=d.findIndex(o=>o.id===t);Object.entries(r).forEach(([o,u])=>{const S=v.find(x=>x.key===o);e.push({rowId:t,columnKey:o,fieldName:S?.Header||S?.display_name||o,value:u.value,originalValue:u.originalValue,meta:u.meta,originalMeta:u.originalMeta,rowIndex:n})})}),e},[h,v,d]),zl=l.useMemo(()=>{const e=new Map;return Object.entries(h).forEach(([t,r])=>{const n=d.findIndex(o=>o.id===t);e.set(t,{rowId:t,rowIndex:n,editCount:Object.keys(r).length})}),Array.from(e.values()).sort((t,r)=>t.rowIndex-r.rowIndex)},[h,d]),Ul=l.useCallback(e=>ot(e),[]),he=l.useCallback(()=>ot(null),[]),Jl=l.useCallback((e,t)=>{ct({value:e,reference:t}),j?.onSelected&&j.onSelected(e,t),he()},[j,he]),Gl=l.useCallback(()=>ct(null),[]),Xl=l.useCallback(e=>ut(e),[]),pt=l.useCallback(()=>ut(null),[]),Yl=l.useCallback(e=>dt(e),[]),Ft=l.useCallback(()=>dt(null),[]),Zl=l.useCallback((e,t)=>{z(r=>({...r,[e]:t}))},[]),Ql=l.useCallback(e=>_e[e],[_e]),Kl=l.useMemo(()=>{const e=le.match(/h-\[(\d+px)\]/);if(e)return e[1];const t=le.match(/h-\[(calc\(.+\))\]/);if(t)return t[1].replace(/([+-])/g," $1 ").replace(/\s+/g," ")},[le]),es={isEmpty:lt,isFilters:W,isColumnConfigurable:ee,handleOnClick:te,emptyMessage:He,buttons:ze,noDataWidget:$e},ts=c?.t?.(Mt)??Mt,me=W?"No Results Found":He||"No Data Found",ls=typeof me=="string"?c?.t?.(me)??me:me,Tt={__isLoading:!0},ss=new Array(1).fill(Tt),rs=new Array(Zt).fill(Tt),J=l.useMemo(()=>v.filter(e=>!!e?.visible),[v]),ns=At.useTable({columns:ul?J:v,data:[...d,...K?d?.length?ss:rs:[]],defaultColumn:{minWidth:m.DEFAULT_COLUMN_MIN_WIDTH,width:m.DEFAULT_COLUMN_WIDTH,maxWidth:m.DEFAULT_COLUMN_MAX_WIDTH}},At.useResizeColumns),{getTableProps:yt,getTableBodyProps:Rt,headerGroups:fe,prepareRow:Ot,rows:A}=ns;ft.current=fe;const as=JSON.stringify(fe[0]?.headers?.map(e=>e?.Header));l.useEffect(()=>{if(ye){const e=ft.current;ye?.(e?.[0]?.headers?.map(t=>t?.Header)??[])}},[as,ye]);const{checkboxConfig:ge}=Ts.useCheckbox({rows:A,checkedIds:L?.checkedIds,isCheckAllDisabled:L?.isCheckAllDisabled,selectionDisabledRowIds:L?.selectionDisabledRowIds,rawData:Ye,onAllChecked:Dl,setCheckedIds:L?.setCheckedIds,checkboxMetadata:L?.checkboxMetadata}),os=E.useSensors(E.useSensor(E.MouseSensor,{activationConstraint:{distance:m.DND_ACTIVATION_DISTANCE}}),E.useSensor(E.TouchSensor,{activationConstraint:{distance:m.DND_ACTIVATION_DISTANCE}})),cs={easing:m.DROP_ANIMATION_EASING,duration:m.DROP_ANIMATION_DURATION};function is(){return!Ge?.length||!Se?A:Ge.reduce((e,t)=>(e[t]=A.filter(r=>r.original?.type===t),e),{})}vt.current=is;const us=e=>{const{active:t}=e;De(A.find(r=>r.original?.id===t?.id)??null)},ds=e=>{const{active:t,over:r}=e;r&&(re?.checkDndDragEnd&&re.checkDndDragEnd(t,r,_l,n=>{rt(n),nt(!0),re.onDragSuccess?.({draggedId:t.id,droppedId:r.id,draggedType:t.data.current?.type,droppedType:r.data.current?.type,updatedList:n,cb:()=>nt(!1)})}),De(null))},hs=()=>De(null),ms=e=>{!f?.onSort&&!a?.onFilter||ae(st===e?null:e)},fs=e=>{kl(e),Ol(!Rl),ae(null)},Ce=l.useCallback(()=>{f?.onRemoveSort?f.onRemoveSort():f?.onSort&&f.onSort("","")},[f]),xe=l.useCallback((e=null)=>{tt(e),je(t=>e?!0:!t)},[]),Ve=l.useCallback(()=>et(e=>!e),[]),xs=()=>{const e=fe[0]?.headers?.filter(t=>t?.visible!==!1);for(let t=0;t<e.length;t++)if(e[t].sticky)return t-1;return e.length-1},vs=l.useCallback(e=>{let t=0;for(let r=e+1;r<J.length;r++)J[r].visible!==!1&&(t+=J[r].width??0);return ne&&(t+=Te||m.ROW_ADDITIONAL_ACTIONS_DEFAULT_WIDTH),M&&(t+=We?0:m.ROW_OPTIONS_COLUMN_WIDTH),t},[J,Te,We,ne,M]),jt=()=>{const e=c?.getUserId?.();return{...p||{},name:p?.name||"Untitled View",created_by:p?.created_by||e,filters:p?.filters||a?.columnFilters,id:p?.id||"untitled-view",table_key:p?.table_key||I,columns:p?.columns||R?.map((t,r)=>({name:t.Header,width:t.width,visible:t.visible,sticky:t.sticky,order:r+1,display_name:t.Header,sequence:r+1,Header:t.Header}))}};xt.current=jt;const ws=(e,t)=>{const r=jt();H({...r,columns:r?.columns?.map(n=>n.name===e?{...n,width:t}:n),unsaved:N?r?.unsaved:!0})};l.useEffect(()=>{if(a?.columnFilters?.length>0&&je(!0),N)return;const e=Me.current;if(JSON.stringify(e?.filters||[])!==JSON.stringify(a?.columnFilters||[])){const t=(e?.filters?.length??0)>0,r=a?.columnFilters?.length>0;if(!(t&&!r&&!ie.current)){const o=xt.current();H({...o,filters:JSON.parse(JSON.stringify(a?.columnFilters||[])),unsaved:!0})}ie.current=!1}},[a?.columnFilters,N]);const Ss=l.useCallback(e=>{ie.current=!0,a?.onRemoveFilter?.(e)},[a?.onRemoveFilter]),bs=l.useCallback(()=>{ie.current=!0,a?.onClearFilter?.()},[a?.onClearFilter]);l.useEffect(()=>{f?.columnSort?.field?(et(!0),f.columnSort.order==="asc"?(oe(f.columnSort.field),ce(null)):f.columnSort.order==="desc"&&(ce(f.columnSort.field),oe(null))):(oe(null),ce(null))},[f?.columnSort?.field,f?.columnSort?.order]),l.useEffect(()=>{Ee(Pe.mergeViewColumnsWithTableColumns(Me.current?.columns||[],R))},[R]),l.useEffect(()=>{p?.unsaved&&ht.current?.persistTableView?.(p)},[p]),l.useEffect(()=>{rt(vt.current())},[A.length]),l.useEffect(()=>{H(y||null),y?.columns&&Ee(Pe.mergeViewColumnsWithTableColumns(y?.columns||[],mt.current)),y?.filters&&y.filters.length>0&&!Ie.current?(requestAnimationFrame(()=>{ue.current?.onFilter?.(y.filters)}),Ie.current=!0):y?.filters&&Ie.current&&JSON.stringify(y.filters)!==JSON.stringify(ue.current?.columnFilters)&&ue.current?.onFilter?.(y.filters)},[y]),l.useEffect(()=>{if(Ne.current){const e=new ResizeObserver(t=>Ml(t[0].contentRect.width));return e.observe(Ne.current),()=>e.disconnect()}},[]),l.useEffect(()=>{if(!Ae.current)return;const e=new ResizeObserver(t=>{const{width:r,height:n}=t[0].contentRect;Ll({width:r,height:n})});return e.observe(Ae.current),()=>e.disconnect()},[]);const kt=s.jsx(_s.Head,{isResizable:Gt,headerGroups:fe,isCheckbox:Tl,checkboxConfig:ge,isAllChecked:El,showHeaderOptions:st??"",setShowHeaderOptions:ae,isShowSortArrowAsc:Nl,isShowSortArrowDesc:Al,onSort:f?.onSort,onFilter:a?.onFilter,toggleHeaderOption:ms,setIsShowSortArrowAsc:oe,setIsShowSortArrowDesc:ce,toggleDataFilterModal:xe,rowOptions:Array.isArray(M)?M:[],isColumnConfigurable:ee??!1,onAddColumnClick:te,onEditColumnClick:Ue,onDeleteColumnClick:Je,tableActions:qe||null,isLoading:K,rowAdditionalActions:ne??null,showPendingEditsColumn:q>0}),Et=s.jsxs(s.Fragment,{children:[Il||nl?s.jsx("div",{className:"absolute left-0 top-0 w-full h-full z-40 flex items-center justify-center bg-neutral-100 dark:bg-black-700"}):null,s.jsx("div",{...yt(),className:"w-full text-sm text-left text-neutral-500 dark:text-neutral-200 h-full bg-white dark:bg-black-800",children:lt?s.jsxs("div",{className:"z-10",children:[kt,s.jsx("div",{className:"absolute w-full",children:c?.renderEmpty?c.renderEmpty(es):s.jsxs("div",{className:"flex flex-col items-center justify-center w-full h-[12rem] text-neutral-900 dark:text-neutral-200 mt-8",children:[$e&&!W?s.jsx(Ms.NoDataFoundWidgets,{widgetType:"TABLE"}):s.jsx(Ls.NoDataFound,{text:ls}),ee&&!W?s.jsx("div",{className:"my-4",children:s.jsxs(Nt,{id:"btn-table-shell-create-column",status:"primary",appearance:"ghost",onClick:te,children:[s.jsx(gs.Add2Icon,{className:"text-white dark:text-white"})," ",ts]})}):null,!W&&ze?.map((e,t)=>s.jsx(Nt,{status:"secondary",id:Vs(e.label,t),onClick:e.onClick,children:c?.t?.(e.label)??e.label},`${e.label}-${t}`))]})})]}):s.jsx(Cs,{style:{width:"100%",height:"100%"},renderProp:({width:e,height:t})=>{const r=e>0?e:at.width,n=t>0?t:at.height;return r>0&&n>0?s.jsx(ks.Body,{getTableBodyProps:Rt,rows:A,prepareRow:Ot,isLoading:K,onScroll:Vt,onScrolling:Bt,columns:R,width:r,height:n,withSortable:Se,allowAstarSearch:T?.allowAStarSearch||!1}):null}})})]}),ps=l.forwardRef((e,t)=>s.jsxs("div",{className:"h-full w-full",...e,ref:t,children:[kt,s.jsx("div",{className:"relative w-full h-full",children:e?.children})]})),Fs=l.forwardRef((e,t)=>s.jsx("div",{className:"h-full w-full",...e,ref:t,children:s.jsx("div",{className:"relative w-full h-full",children:e?.children})})),Be=l.useMemo(()=>c?.renderTableHeader?c.renderTableHeader({tableKey:I,search:T?.search,handleSearch:T?.handleSearch,toggleShowFilters:xe,toggleShowSorts:Ve,filterCounts:a?.columnFilters?.length,columns:R,columnFilters:a?.columnFilters,setSelectedTableView:H,selectedTableView:p,enableTableView:i?.showTableView,modelName:G,enableMasterDataEnumSuggestions:X,onRemoveFilter:a?.onRemoveFilter,onClearFilter:a?.onClearFilter,onFilter:a?.onFilter,data:Q??d,tableHeaders:v,showTableViewAsModal:i?.showTableViewAsModal,additionalOptions:i?.additionalOptions,inlineActions:i?.inlineActions,showFilters:i?.showFilters,showSorts:i?.showSorts,showSearch:i?.showSearch,isLoading:!!i?.isLoading,setTableHeaders:Ee,allowAStarSearch:!!T?.allowAStarSearch,withContent:!!i?.content,setShowFilters:je,sort:f?.columnSort,onSort:f?.onSort,onRemoveSort:Ce,showExportButton:i?.showExportButton,onExportClick:i?.onExportClick,agreementId:Y,enumSuggestionsExtraParams:Z}):null,[I,T?.search,T?.handleSearch,xe,Ve,a?.columnFilters,R,H,p,i,G,a?.onRemoveFilter,a?.onClearFilter,a?.onFilter,d,Q,v,f?.columnSort,f?.onSort,Ce,c,T?.allowAStarSearch,X,Y,Z]);return l.useEffect(()=>{Fe&&Fe(Be)},[Be,Fe]),s.jsxs(Ds.TableContext.Provider,{value:{tableWrapper:ps,tableBodyWrapper:Fs,lastNonStickyColumnIndex:xs,search:T?.search,columnFilters:a?.columnFilters,onRowClick:gt,onSort:f?.onSort,onFilter:a?.onFilter,toggleShowFilters:xe,toggleShowSorts:Ve,onRemoveFilter:a?.onRemoveFilter,onClearFilter:a?.onClearFilter,rowOptions:M,checkboxConfig:ge,onResetFilter:a?.onResetFilter,isColumnConfigurable:ee,onAddColumnClick:te,onEditColumnClick:Ue,onDeleteColumnClick:Je,onRowTooltipClick:Pt,tooltiptext:qt,cascadingTableConfig:Wt,activeInlineEdit:gl,setActiveInlineEdit:B,originalsOnly:Ht,disableOptionsForRowIndex:$t,getFullRowDataOnClick:zt,selectedRowId:Ut,getSumOfNextVisibleColumnWidth:vs,onRowEdit:D,inlineEditColumns:Jt,tableActions:qe,dndSortableUtils:re,withSortable:Se,withDraggable:Xt,onCascadingRowExpand:Qt,getInnerRowData:Kt,tableHeaders:v,maxLevel:el,expandedRows:tl,setExpandedRows:ll,showNewItem:sl,rawData:Ye,dragConfig:rl,rowWrapper:ol,rowLinkConfig:cl,isCellClickDisabled:il,asyncRowOptionsFilter:a?.asyncRowOptionsFilter,handleUpdateColumnWidth:ws,isTableViewReadOnly:N,multiSelectConfig:dl,cellContextMenuConfig:Ze,openCellContextMenu:Yl,closeCellContextMenu:Ft,headerContextOptions:hl,showHeaderContextOptions:ml,setShowHeaderContextOptions:fl,headerDivWidth:O,showDataTypeIcon:xl,rowAdditionalActions:ne,hoverConfig:Lt,rowAdditionalActionsWidth:Te,cellEditing:vl,cellEditingValue:wl,openMasterDataModal:Ul,closeMasterDataModal:he,selectedMasterData:Cl,clearSelectedMasterData:Gl,allowInlineEdit:Sl,openCurrencyDropdown:Xl,closeCurrencyDropdown:pt,currencyDropdownConfig:it,selectedCurrenciesMap:_e,setCurrencyForCell:Zl,getCurrencyForCell:Ql,pendingEdits:h,addPendingEdit:Le,removePendingEdit:Bl,getPendingEdit:Pl,hasPendingEdit:ql,clearAllPendingEdits:St,saveAllPendingEdits:bt,clearRowPendingEdits:Wl,saveRowPendingEdits:Hl,pendingEditsCount:q,scrollToCell:P,onFieldOperationFlow:bl,fieldOperationLoading:C,validateAllPendingEdits:U},children:[we?s.jsxs("div",{ref:Ne,className:`mb-2 flex w-full min-w-0 gap-2 justify-end dark:bg-black-800 ${O<m.TOOLBAR_FIRST_BREAKPOINT?"flex-col items-stretch":"flex-row flex-wrap items-center"}`,children:[s.jsxs("div",{className:`flex items-center gap-x-2 gap-y-1 ${O<m.TOOLBAR_FIRST_BREAKPOINT?"w-full flex-wrap":""} ${i?.content?"min-w-0 flex-1":"shrink-0"}`,children:[i?.content?s.jsx("div",{className:`min-w-0 ${O<m.TOOLBAR_FIRST_BREAKPOINT?"w-full":"flex-1"}`,children:i.content}):null,be?s.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[s.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral-500 dark:text-neutral-400 flex-shrink-0","aria-hidden":!0,children:[s.jsx("ellipse",{cx:"12",cy:"5",rx:"9",ry:"3"}),s.jsx("path",{d:"M3 5v4c0 1.66 4.03 3 9 3s9-1.34 9-3V5"}),s.jsx("path",{d:"M3 9v4c0 1.66 4.03 3 9 3s9-1.34 9-3V9"}),s.jsx("path",{d:"M3 13v4c0 1.66 4.03 3 9 3s9-1.34 9-3v-4"})]}),s.jsx(ve.Typography,{size:"small",variant:"semibold",appearance:"title",children:(Xe??d.length).toLocaleString()}),s.jsx(ve.Typography,{size:"small",variant:"regular",appearance:"subtitle",children:"total records"})]}):i?.preContent?s.jsx("div",{className:"flex min-w-0 shrink-0 justify-start items-center",children:i.preContent}):null]}),s.jsxs("div",{className:`flex min-w-0 items-center justify-end ${O<m.TOOLBAR_FIRST_BREAKPOINT?"w-full":i?.content?"shrink-0":"flex-1"} ${O<m.TOOLBAR_SECOND_BREAKPOINT?"flex-col":"flex-row flex-wrap"} ${i?.postContent?"gap-2":""}`,children:[be&&i?.preContent?s.jsx("div",{className:"flex w-full justify-start items-center",children:i.preContent}):null,s.jsx("div",{className:`flex justify-end items-center min-w-0 ${O<m.TOOLBAR_SECOND_BREAKPOINT||O<m.TOOLBAR_FIRST_BREAKPOINT?"w-full":""}`,children:Be}),i?.postContent?s.jsx("div",{className:`flex justify-end items-center ${O<m.TOOLBAR_SECOND_BREAKPOINT?"w-full":""}`,children:i.postContent}):null]})]}):null,i?.showDivider?s.jsx("div",{className:"border-b pb-2 w-full dark:bg-black-800"}):null,Ct&&(Oe||ke)?s.jsx("div",{className:"flex justify-between items-center pb-4 dark:bg-black-800",children:s.jsxs("div",{className:"flex gap-2 items-center",children:[ke&&c?.renderSortItem?c.renderSortItem({sort:f?.columnSort,onRemoveSort:Ce,onSort:f?.onSort,tableHeaders:v,data:d,disabled:N}):null,Oe&&ke&&f?.columnSort?.field!==""?s.jsx("div",{className:"h-8 w-[1px] flex-shrink-0 bg-neutral-200"}):null,Oe?s.jsxs("div",{className:"flex gap-2 items-center",children:[(Ke||a?.onResetFilter)&&c?.renderActiveFilters&&c.renderActiveFilters({filters:a?.columnFilters,onRemoveFilter:Ss,onClearFilter:bs,onResetFilter:a?.onResetFilter,onFilter:a?.onFilter,tableHeaders:v,columnFilters:a?.columnFilters,modelName:G,enableMasterDataEnumSuggestions:X,noSpacing:!0,notionStyle:a?.notionStyle,context:a?.context,data:Q??d,agreementId:Y,enumSuggestionsExtraParams:Z,disabled:N}),c?.renderFilterButtons&&c.renderFilterButtons({onClearFilter:a?.onClearFilter,onClose:fs,modelName:G,enableMasterDataEnumSuggestions:X,defaultFilterColumn:yl,resetDefaultFilterColumn:()=>tt(null),column:jl,onFilter:a?.onFilter,tableHeaders:v,columnFilters:a?.columnFilters,data:Q??d,notionStyle:a?.notionStyle,context:a?.context,agreementId:Y,enumSuggestionsExtraParams:Z,disabled:N})]}):null]})}):null,pe&&Object.keys(pe).length?s.jsx(Rs.FloatingBar,{...pe}):null,!we&&be?s.jsxs("div",{className:"flex items-center gap-1.5 mb-2",children:[s.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral-500 dark:text-neutral-400 flex-shrink-0","aria-hidden":!0,children:[s.jsx("ellipse",{cx:"12",cy:"5",rx:"9",ry:"3"}),s.jsx("path",{d:"M3 5v4c0 1.66 4.03 3 9 3s9-1.34 9-3V5"}),s.jsx("path",{d:"M3 9v4c0 1.66 4.03 3 9 3s9-1.34 9-3V9"}),s.jsx("path",{d:"M3 13v4c0 1.66 4.03 3 9 3s9-1.34 9-3v-4"})]}),s.jsx(ve.Typography,{size:"small",variant:"semibold",appearance:"title",children:(Xe??d.length).toLocaleString()}),s.jsx(ve.Typography,{size:"small",variant:"regular",appearance:"subtitle",children:"total records"})]}):!we&&i?.preContent?s.jsx("div",{className:"flex items-center mb-2",children:i.preContent}):null,s.jsx("div",{ref:Ae,className:`w-full ${se?"h-auto":le} rounded-lg relative border overflow-x-hidden`,style:{...se?{height:d?.length>0?`${(d?.length+1)*pl+4}px`:"350px"}:{height:Kl},...al},children:Yt?Et:s.jsxs(E.DndContext,{sensors:os,onDragEnd:ds,onDragStart:us,onDragCancel:hs,collisionDetection:E.closestCorners,children:[Et,$?js.createPortal(s.jsx(E.DragOverlay,{adjustScale:!0,dropAnimation:cs,children:s.jsx("table",{...yt(),className:"w-full text-sm text-left text-neutral-500 dark:text-neutral-200 bg-white dark:bg-black-700 table-auto border-collapse",children:s.jsxs("tbody",{...Rt(),className:"bg-transparent divide-y divide-neutral-200",children:[void Ot($),s.jsx(Es.Row,{row:$,index:A?.findIndex(e=>e.id===$.original.id)},$.original.id)]})})}),document.getElementById("full-screen-container")||document.body):null]})}),se&&c?.renderPagination?c.renderPagination(se):null,c?.renderMasterDataModal&&c.renderMasterDataModal({isVisible:!!j,onSelected:Jl,onClose:he,masterDataColumnName:j?.masterDataColumnName,masterDataFormula:j?.masterDataFormula,masterDataFilters:j?.masterDataFilters,masterDataName:j?.masterDataName,masterDataId:j?.masterDataName,showFilters:!0}),s.jsx(As.CurrencyDropdownPortal,{config:it,onClose:pt}),s.jsx(Ns.CellContextMenuPortal,{state:Vl,config:Ze,rowOptions:M,asyncRowOptionsFilter:a?.asyncRowOptionsFilter,checkedIds:ge?.checkedIds,rows:d,columns:v,onClose:Ft}),s.jsx(Is.PendingEditsFloatingBar,{pendingEditsCount:q,pendingEditsList:$l,rowsWithPendingEdits:zl,fieldOperationLoading:C,onClearAll:St,onSaveAll:bt,onScrollToCell:P})]})});exports.InfiniteTable=Bs;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),Ts=require("../../../hooks/useCheckbox.cjs.js"),ys=require("../../../providers/design-system-provider/hooks.cjs.js"),Pe=require("../../../utils/table.cjs.js"),At=require("../../button/Button.cjs.js"),Rs=require("../../floating-bar/FloatingBar.cjs.js"),ve=require("../typography/Typography.cjs.js"),E=require("@dnd-kit/core"),l=require("react"),Os=require("react-virtualized-auto-sizer"),js=require("react-dom"),_t=require("react-table"),ks=require("./body/index.cjs.js"),It=require("./validateCell.cjs.js"),Es=require("./body/rows/row.cjs.js"),Ds=require("./context.cjs.js"),Ns=require("./CellContextMenuPortal.cjs.js"),As=require("./CurrencyDropdownPortal.cjs.js"),_s=require("./head/index.cjs.js"),Is=require("./PendingEditsFloatingBar.cjs.js"),m=require("./constants.cjs.js"),Mt=require("./useRowHeight.cjs.js"),Ms=require("../empty-state/NoDataFoundWidgets.cjs.js"),Ls=require("../empty-state/NoDataFound.cjs.js"),gs=require("../../icon/icons.generated.cjs.js"),Cs=Os.AutoSizer,Lt="Create Column",Vs=(I,T)=>`button-admin-${I.toLowerCase().trim().replace(/\s+/g,"-").replace(/[^a-z0-9-_]/g,"")||T}`,Bs=l.memo(({tableKey:I,searchConfig:T={search:"",handleSearch:()=>null,allowAStarSearch:!1},filterConfig:a={columnFilters:[],onFilter:()=>null,onRemoveFilter:()=>null,onClearFilter:()=>null,onResetFilter:()=>Promise.resolve({}),asyncRowOptionsFilter:()=>Promise.resolve({})},sortConfig:f={onSort:()=>null,columnSort:{field:"",order:""},onRemoveSort:()=>null},headerConfig:i={showExportButton:null,showFilters:!0,showSorts:!0,showSearch:!0,showTableView:!0,showTableViewAsModal:!1,content:null,postContent:null,preContent:null,isLoading:!1,showDivider:!1},hoverConfig:gt=null,columns:R,modelName:G,enableMasterDataEnumSuggestions:X=!1,agreementId:Y,enumSuggestionsExtraParams:Z,enumSuggestionsData:Q,data:d=[],onRowClick:Ct,showHeader:Se,showSubHeader:Vt=!0,tableActions:qe,rowOptions:M,hideRowOptionWidth:We,checkboxUtilities:L,isLoading:K=!1,onScroll:Bt,onScrolling:Pt,isColumnConfigurable:ee,onAddColumnClick:te,emptyMessage:He,noDataWidget:$e,buttons:ze,onEditColumnClick:Ue,onDeleteColumnClick:Je,onRowTooltipClick:qt,tooltiptext:Wt,cascadingTableConfig:Ht,originalsOnly:$t,disableOptionsForRowIndex:zt,tableHeightClass:le="h-[calc(100vh-220px)]",getFullRowDataOnClick:Ut,selectedRowId:Jt=null,onRowEdit:D,onBulkRowEdit:g,inlineEditColumns:Gt,isResizable:Xt=!0,paginationConfig:se,dndSortableUtils:re,multipleContexts:Ge,withSortable:be,withDraggable:Yt,enableRootDrag:Zt,pageSize:Qt=m.DEFAULT_PAGE_SIZE,onCascadingRowExpand:Kt,totalItems:Xe,showRecordCount:we=!1,getInnerRowData:el,maxLevel:tl,expandedRows:ll={},setExpandedRows:sl,showNewItem:rl,rawData:Ye,dragConfig:nl,isOverlayLoading:al,style:ol={},floatingBarConfig:pe,rowWrapper:cl,rowLinkConfig:Ze,isCellClickDisabled:il,setHeaderOnParent:Fe,optimizeTable:ul=!1,multiSelectConfig:dl,cellContextMenuConfig:Qe,headerContextOptions:hl,showHeaderContextOptions:ml,setShowHeaderContextOptions:fl,showDataTypeIcon:xl=!1,rowAdditionalActions:ne,rowAdditionalActionsWidth:Te,setVisibleHeaders:ye,cellEditing:vl=null,cellEditingValue:Sl=null,allowInlineEdit:bl=!1,onFieldOperationFlow:wl,fieldOperationLoading:C=null,onTableActionsReady:Re,onPendingEditsChange:Ke,onCancelPendingEdits:V})=>{const c=ys.useTableConfig(),pl=Mt.getRowSlotHeight(Mt.useRowHeight()),Fl=!!T?.search,et=a?.columnFilters?.length>0,W=Fl||et,Tl=!!L,y=c?.getTableView?.(I)??null,[p,H]=l.useState(y||null),N=!Pe.canEditTableView(p,c?.getUserId?.()),[Oe,je]=l.useState(!1),[ke,tt]=l.useState(!1),[yl,lt]=l.useState(null),[v,Ee]=l.useState(R),st=(d.length===0||!v.length)&&!K,[rt,ae]=l.useState(null),[Rl,Ol]=l.useState(!1),[jl,kl]=l.useState(null),[El,Dl]=l.useState(!1),[Nl,oe]=l.useState(null),[Al,ce]=l.useState(null),[_l,nt]=l.useState({}),[$,De]=l.useState(null),[Il,at]=l.useState(!1),[O,Ml]=l.useState(0),Ne=l.useRef(null),Ae=l.useRef(null),[ot,Ll]=l.useState({width:0,height:0}),[gl,B]=l.useState(null),[j,ct]=l.useState(null),[Cl,it]=l.useState(null),[ut,dt]=l.useState(null),[Vl,ht]=l.useState(null),[_e,z]=l.useState({}),Ie=l.useRef(!1),ie=l.useRef(!1),Me=l.useRef(p);Me.current=p;const mt=l.useRef(c);mt.current=c;const ft=l.useRef(R);ft.current=R;const ue=l.useRef(a);ue.current=a;const xt=l.useRef(null),vt=l.useRef(()=>({})),St=l.useRef(()=>({})),[h,k]=l.useState({}),Le=l.useCallback((e,t,r)=>{k(n=>{const o=n[e]?.[t];let u=r.validationError;if(u===void 0){const b=v.find(x=>x.key===t);if(b){const x=It.validateCellValue(r.value,b);u=x.isValid?null:x.error||"Invalid"}else u=o?.validationError??null}return{...n,[e]:{...n[e]||{},[t]:{...r,validationError:u??null}}}})},[v]),bt=l.useCallback(()=>Object.values(h).some(e=>Object.keys(e).length>0),[h]);l.useEffect(()=>{Re&&Re({addPendingEdit:Le,hasPendingEdits:bt})},[Re,Le,bt]);const Bl=l.useCallback((e,t)=>{k(r=>{const n={...r};if(n[e]){const{[t]:o,...u}=n[e];Object.keys(u).length===0?delete n[e]:n[e]=u}return n})},[]),Pl=l.useCallback((e,t)=>h[e]?.[t],[h]),ql=l.useCallback((e,t)=>!!h[e]?.[t],[h]),wt=l.useCallback(()=>{C||(V&&Object.keys(h).length>0&&V(h),k({}),z({}),B(null))},[C,V,h]),P=l.useCallback((e,t,r)=>{setTimeout(()=>{c?.dispatchEvent?.("SCROLL_TO_TABLE_ROW",{rowIndex:r});const n=v.findIndex(o=>o.key===t);setTimeout(()=>{const o=document.querySelector(`[${m.DATA_ROW_ID_ATTR}="${e}"] [${m.DATA_COLUMN_KEY_ATTR}="${t}"]`);if(o)o.scrollIntoView({behavior:"smooth",block:"center",inline:"center"});else if(n>0){const u=document.querySelector(m.OS_VIEWPORT_SELECTOR);if(u){let b=0;for(let x=0;x<n;x++){const F=v[x];F?.sticky||(b+=F?.width||m.SCROLL_TO_CELL_COLUMN_WIDTH_FALLBACK)}b=Math.max(0,b-m.SCROLL_TO_CELL_LEFT_OFFSET),u.scrollTo({left:b,behavior:"smooth"})}}B({rowId:e,columnKey:t})},350)},100)},[v,c]),U=l.useCallback(e=>{let t=!1,r=null;const n={},o=new Set;return Object.entries(e).forEach(([u,b])=>{n[u]={},Object.entries(b).forEach(([x,F])=>{const _=v.find(w=>w.key===x),S=It.validateCellValue(F.value,_);S.isValid?n[u][x]={...F,validationError:null}:(t=!0,S.error&&o.add(S.error),r||(r={rowId:u,columnKey:x}),n[u][x]={...F,validationError:S.error})})}),{hasErrors:t,updatedEdits:n,firstError:r,errorTypes:o}},[v]),de=l.useCallback(e=>{const t=e.has("Field required"),r=e.size>(t?1:0);return t&&r?"Missing required field(s) and invalid format detected. Please review highlighted field(s).":t?"Missing required field(s). Please review highlighted field(s).":"Invalid field value(s). Please review highlighted field(s)."},[]),pt=l.useCallback(()=>{const{hasErrors:e,updatedEdits:t,firstError:r,errorTypes:n}=U(h);if(e){if(k(t),c?.showNotification?.("error",de(n)),r){const u=d.findIndex(b=>b.id===r.rowId);P(r.rowId,r.columnKey,u)}return}const o=[];Object.entries(h).forEach(([u,b])=>{const x=d.find(F=>F.id===u);if(x){const F={...x},_={};Object.entries(b).forEach(([S,w])=>{F[S]=w.value,_[S]={value:w.value,meta:w.meta}}),o.push({...F,__editedFields:_})}}),o.length>0&&(g?g(o):D&&D(null,null,null,null,null,{isBulk:!0,rows:o})),k({}),z({}),B(null)},[h,d,D,g,U,de,P,c]),Wl=l.useCallback(e=>{if(C)return;const t=h[e];t&&V&&V({[e]:t}),k(r=>{const n={...r};return delete n[e],n}),z(r=>{const n={...r};return Object.keys(n).forEach(o=>{o.startsWith(`${e}-`)&&delete n[o]}),n}),B(null)},[C,V,h]),Hl=l.useCallback(e=>{const t=h[e];if(!t||Object.keys(t).length===0)return;const{hasErrors:r,updatedEdits:n,firstError:o,errorTypes:u}=U({[e]:t});if(r){if(k(S=>({...S,[e]:n[e]})),c?.showNotification?.("error",de(u)),o){const S=d.findIndex(w=>w.id===o.rowId);P(o.rowId,o.columnKey,S)}return}const b=d.find(S=>S.id===e);if(!b)return;const x={...b},F={};Object.entries(t).forEach(([S,w])=>{x[S]=w.value,F[S]={value:w.value,meta:w.meta}});const _={...x,__editedFields:F};g?g([_]):D&&D(null,null,null,null,null,{isBulk:!0,rows:[_]}),k(S=>{const w={...S};return delete w[e],w}),z(S=>{const w={...S};return Object.keys(w).forEach(Nt=>{Nt.startsWith(`${e}-`)&&delete w[Nt]}),w}),B(null)},[h,d,D,g,U,de,P,c]),q=l.useMemo(()=>Object.values(h).reduce((e,t)=>e+Object.keys(t).length,0),[h]);l.useEffect(()=>{Ke?.(q>0,q)},[q,Ke]);const $l=l.useMemo(()=>{const e=[];return Object.entries(h).forEach(([t,r])=>{const n=d.findIndex(o=>o.id===t);Object.entries(r).forEach(([o,u])=>{const b=v.find(x=>x.key===o);e.push({rowId:t,columnKey:o,fieldName:b?.Header||b?.display_name||o,value:u.value,originalValue:u.originalValue,meta:u.meta,originalMeta:u.originalMeta,rowIndex:n})})}),e},[h,v,d]),zl=l.useMemo(()=>{const e=new Map;return Object.entries(h).forEach(([t,r])=>{const n=d.findIndex(o=>o.id===t);e.set(t,{rowId:t,rowIndex:n,editCount:Object.keys(r).length})}),Array.from(e.values()).sort((t,r)=>t.rowIndex-r.rowIndex)},[h,d]),Ul=l.useCallback(e=>ct(e),[]),he=l.useCallback(()=>ct(null),[]),Jl=l.useCallback((e,t)=>{it({value:e,reference:t}),j?.onSelected&&j.onSelected(e,t),he()},[j,he]),Gl=l.useCallback(()=>it(null),[]),Xl=l.useCallback(e=>dt(e),[]),Ft=l.useCallback(()=>dt(null),[]),Yl=l.useCallback(e=>ht(e),[]),Tt=l.useCallback(()=>ht(null),[]),Zl=l.useCallback((e,t)=>{z(r=>({...r,[e]:t}))},[]),Ql=l.useCallback(e=>_e[e],[_e]),Kl=l.useMemo(()=>{const e=le.match(/h-\[(\d+px)\]/);if(e)return e[1];const t=le.match(/h-\[(calc\(.+\))\]/);if(t)return t[1].replace(/([+-])/g," $1 ").replace(/\s+/g," ")},[le]),es={isEmpty:st,isFilters:W,isColumnConfigurable:ee,handleOnClick:te,emptyMessage:He,buttons:ze,noDataWidget:$e},ts=c?.t?.(Lt)??Lt,me=W?"No Results Found":He||"No Data Found",ls=typeof me=="string"?c?.t?.(me)??me:me,yt={__isLoading:!0},ss=new Array(1).fill(yt),rs=new Array(Qt).fill(yt),J=l.useMemo(()=>v.filter(e=>!!e?.visible),[v]),ns=_t.useTable({columns:ul?J:v,data:[...d,...K?d?.length?ss:rs:[]],defaultColumn:{minWidth:m.DEFAULT_COLUMN_MIN_WIDTH,width:m.DEFAULT_COLUMN_WIDTH,maxWidth:m.DEFAULT_COLUMN_MAX_WIDTH}},_t.useResizeColumns),{getTableProps:Rt,getTableBodyProps:Ot,headerGroups:fe,prepareRow:jt,rows:A}=ns;xt.current=fe;const as=JSON.stringify(fe[0]?.headers?.map(e=>e?.Header));l.useEffect(()=>{if(ye){const e=xt.current;ye?.(e?.[0]?.headers?.map(t=>t?.Header)??[])}},[as,ye]);const{checkboxConfig:ge}=Ts.useCheckbox({rows:A,checkedIds:L?.checkedIds,isCheckAllDisabled:L?.isCheckAllDisabled,selectionDisabledRowIds:L?.selectionDisabledRowIds,rawData:Ye,onAllChecked:Dl,setCheckedIds:L?.setCheckedIds,checkboxMetadata:L?.checkboxMetadata}),os=E.useSensors(E.useSensor(E.MouseSensor,{activationConstraint:{distance:m.DND_ACTIVATION_DISTANCE}}),E.useSensor(E.TouchSensor,{activationConstraint:{distance:m.DND_ACTIVATION_DISTANCE}})),cs={easing:m.DROP_ANIMATION_EASING,duration:m.DROP_ANIMATION_DURATION};function is(){return!Ge?.length||!be?A:Ge.reduce((e,t)=>(e[t]=A.filter(r=>r.original?.type===t),e),{})}St.current=is;const us=e=>{const{active:t}=e;De(A.find(r=>r.original?.id===t?.id)??null)},ds=e=>{const{active:t,over:r}=e;r&&(re?.checkDndDragEnd&&re.checkDndDragEnd(t,r,_l,n=>{nt(n),at(!0),re.onDragSuccess?.({draggedId:t.id,droppedId:r.id,draggedType:t.data.current?.type,droppedType:r.data.current?.type,updatedList:n,cb:()=>at(!1)})}),De(null))},hs=()=>De(null),ms=e=>{!f?.onSort&&!a?.onFilter||ae(rt===e?null:e)},fs=e=>{kl(e),Ol(!Rl),ae(null)},Ce=l.useCallback(()=>{f?.onRemoveSort?f.onRemoveSort():f?.onSort&&f.onSort("","")},[f]),xe=l.useCallback((e=null)=>{lt(e),je(t=>e?!0:!t)},[]),Ve=l.useCallback(()=>tt(e=>!e),[]),xs=()=>{const e=fe[0]?.headers?.filter(t=>t?.visible!==!1);for(let t=0;t<e.length;t++)if(e[t].sticky)return t-1;return e.length-1},vs=l.useCallback(e=>{let t=0;for(let r=e+1;r<J.length;r++)J[r].visible!==!1&&(t+=J[r].width??0);return ne&&(t+=Te||m.ROW_ADDITIONAL_ACTIONS_DEFAULT_WIDTH),M&&(t+=We?0:m.ROW_OPTIONS_COLUMN_WIDTH),t},[J,Te,We,ne,M]),kt=()=>{const e=c?.getUserId?.();return{...p||{},name:p?.name||"Untitled View",created_by:p?.created_by||e,filters:p?.filters||a?.columnFilters,id:p?.id||"untitled-view",table_key:p?.table_key||I,columns:p?.columns||R?.map((t,r)=>({name:t.Header,width:t.width,visible:t.visible,sticky:t.sticky,order:r+1,display_name:t.Header,sequence:r+1,Header:t.Header}))}};vt.current=kt;const Ss=(e,t)=>{const r=kt();H({...r,columns:r?.columns?.map(n=>n.name===e?{...n,width:t}:n),unsaved:N?r?.unsaved:!0})};l.useEffect(()=>{if(a?.columnFilters?.length>0&&je(!0),N)return;const e=Me.current;if(JSON.stringify(e?.filters||[])!==JSON.stringify(a?.columnFilters||[])){const t=(e?.filters?.length??0)>0,r=a?.columnFilters?.length>0;if(!(t&&!r&&!ie.current)){const o=vt.current();H({...o,filters:JSON.parse(JSON.stringify(a?.columnFilters||[])),unsaved:!0})}ie.current=!1}},[a?.columnFilters,N]);const bs=l.useCallback(e=>{ie.current=!0,a?.onRemoveFilter?.(e)},[a?.onRemoveFilter]),ws=l.useCallback(()=>{ie.current=!0,a?.onClearFilter?.()},[a?.onClearFilter]);l.useEffect(()=>{f?.columnSort?.field?(tt(!0),f.columnSort.order==="asc"?(oe(f.columnSort.field),ce(null)):f.columnSort.order==="desc"&&(ce(f.columnSort.field),oe(null))):(oe(null),ce(null))},[f?.columnSort?.field,f?.columnSort?.order]),l.useEffect(()=>{Ee(Pe.mergeViewColumnsWithTableColumns(Me.current?.columns||[],R))},[R]),l.useEffect(()=>{p?.unsaved&&mt.current?.persistTableView?.(p)},[p]),l.useEffect(()=>{nt(St.current())},[A.length]),l.useEffect(()=>{H(y||null),y?.columns&&Ee(Pe.mergeViewColumnsWithTableColumns(y?.columns||[],ft.current)),y?.filters&&y.filters.length>0&&!Ie.current?(requestAnimationFrame(()=>{ue.current?.onFilter?.(y.filters)}),Ie.current=!0):y?.filters&&Ie.current&&JSON.stringify(y.filters)!==JSON.stringify(ue.current?.columnFilters)&&ue.current?.onFilter?.(y.filters)},[y]),l.useEffect(()=>{if(Ne.current){const e=new ResizeObserver(t=>Ml(t[0].contentRect.width));return e.observe(Ne.current),()=>e.disconnect()}},[]),l.useEffect(()=>{if(!Ae.current)return;const e=new ResizeObserver(t=>{const{width:r,height:n}=t[0].contentRect;Ll({width:r,height:n})});return e.observe(Ae.current),()=>e.disconnect()},[]);const Et=s.jsx(_s.Head,{isResizable:Xt,headerGroups:fe,isCheckbox:Tl,checkboxConfig:ge,isAllChecked:El,showHeaderOptions:rt??"",setShowHeaderOptions:ae,isShowSortArrowAsc:Nl,isShowSortArrowDesc:Al,onSort:f?.onSort,onFilter:a?.onFilter,toggleHeaderOption:ms,setIsShowSortArrowAsc:oe,setIsShowSortArrowDesc:ce,toggleDataFilterModal:xe,rowOptions:Array.isArray(M)?M:[],isColumnConfigurable:ee??!1,onAddColumnClick:te,onEditColumnClick:Ue,onDeleteColumnClick:Je,tableActions:qe||null,isLoading:K,rowAdditionalActions:ne??null,showPendingEditsColumn:q>0}),Dt=s.jsxs(s.Fragment,{children:[Il||al?s.jsx("div",{className:"absolute left-0 top-0 w-full h-full z-40 flex items-center justify-center bg-neutral-100 dark:bg-black-700"}):null,s.jsx("div",{...Rt(),className:"w-full text-sm text-left text-neutral-500 dark:text-neutral-200 h-full bg-white dark:bg-black-800",children:st?s.jsxs("div",{className:"z-10",children:[Et,s.jsx("div",{className:"absolute w-full",children:c?.renderEmpty?c.renderEmpty(es):s.jsxs("div",{className:"flex flex-col items-center justify-center w-full h-[12rem] text-neutral-900 dark:text-neutral-200 mt-8",children:[$e&&!W?s.jsx(Ms.NoDataFoundWidgets,{widgetType:"TABLE"}):s.jsx(Ls.NoDataFound,{text:ls}),ee&&!W?s.jsx("div",{className:"my-4",children:s.jsxs(At,{id:"btn-table-shell-create-column",status:"primary",appearance:"ghost",onClick:te,children:[s.jsx(gs.Add2Icon,{className:"text-white dark:text-white"})," ",ts]})}):null,!W&&ze?.map((e,t)=>s.jsx(At,{status:"secondary",id:Vs(e.label,t),onClick:e.onClick,children:c?.t?.(e.label)??e.label},`${e.label}-${t}`))]})})]}):s.jsx(Cs,{style:{width:"100%",height:"100%"},renderProp:({width:e,height:t})=>{const r=e>0?e:ot.width,n=t>0?t:ot.height;return r>0&&n>0?s.jsx(ks.Body,{getTableBodyProps:Ot,rows:A,prepareRow:jt,isLoading:K,onScroll:Bt,onScrolling:Pt,columns:R,width:r,height:n,withSortable:be,allowAstarSearch:T?.allowAStarSearch||!1}):null}})})]}),ps=l.forwardRef((e,t)=>s.jsxs("div",{className:"h-full w-full",...e,ref:t,children:[Et,s.jsx("div",{className:"relative w-full h-full",children:e?.children})]})),Fs=l.forwardRef((e,t)=>s.jsx("div",{className:"h-full w-full",...e,ref:t,children:s.jsx("div",{className:"relative w-full h-full",children:e?.children})})),Be=l.useMemo(()=>c?.renderTableHeader?c.renderTableHeader({tableKey:I,search:T?.search,handleSearch:T?.handleSearch,toggleShowFilters:xe,toggleShowSorts:Ve,filterCounts:a?.columnFilters?.length,columns:R,columnFilters:a?.columnFilters,setSelectedTableView:H,selectedTableView:p,enableTableView:i?.showTableView,modelName:G,enableMasterDataEnumSuggestions:X,onRemoveFilter:a?.onRemoveFilter,onClearFilter:a?.onClearFilter,onFilter:a?.onFilter,data:Q??d,tableHeaders:v,showTableViewAsModal:i?.showTableViewAsModal,additionalOptions:i?.additionalOptions,inlineActions:i?.inlineActions,showFilters:i?.showFilters,showSorts:i?.showSorts,showSearch:i?.showSearch,isLoading:!!i?.isLoading,setTableHeaders:Ee,allowAStarSearch:!!T?.allowAStarSearch,withContent:!!i?.content,setShowFilters:je,sort:f?.columnSort,onSort:f?.onSort,onRemoveSort:Ce,showExportButton:i?.showExportButton,onExportClick:i?.onExportClick,agreementId:Y,enumSuggestionsExtraParams:Z}):null,[I,T?.search,T?.handleSearch,xe,Ve,a?.columnFilters,R,H,p,i,G,a?.onRemoveFilter,a?.onClearFilter,a?.onFilter,d,Q,v,f?.columnSort,f?.onSort,Ce,c,T?.allowAStarSearch,X,Y,Z]);return l.useEffect(()=>{Fe&&Fe(Be)},[Be,Fe]),s.jsxs(Ds.TableContext.Provider,{value:{tableWrapper:ps,tableBodyWrapper:Fs,lastNonStickyColumnIndex:xs,search:T?.search,columnFilters:a?.columnFilters,onRowClick:Ct,onSort:f?.onSort,onFilter:a?.onFilter,toggleShowFilters:xe,toggleShowSorts:Ve,onRemoveFilter:a?.onRemoveFilter,onClearFilter:a?.onClearFilter,rowOptions:M,checkboxConfig:ge,onResetFilter:a?.onResetFilter,isColumnConfigurable:ee,onAddColumnClick:te,onEditColumnClick:Ue,onDeleteColumnClick:Je,onRowTooltipClick:qt,tooltiptext:Wt,cascadingTableConfig:Ht,activeInlineEdit:gl,setActiveInlineEdit:B,originalsOnly:$t,disableOptionsForRowIndex:zt,getFullRowDataOnClick:Ut,selectedRowId:Jt,getSumOfNextVisibleColumnWidth:vs,onRowEdit:D,inlineEditColumns:Gt,tableActions:qe,dndSortableUtils:re,withSortable:be,withDraggable:Yt,onCascadingRowExpand:Kt,getInnerRowData:el,tableHeaders:v,maxLevel:tl,expandedRows:ll,setExpandedRows:sl,showNewItem:rl,rawData:Ye,dragConfig:nl,rowWrapper:cl,rowLinkConfig:Ze,isCellClickDisabled:il,asyncRowOptionsFilter:a?.asyncRowOptionsFilter,handleUpdateColumnWidth:Ss,isTableViewReadOnly:N,multiSelectConfig:dl,cellContextMenuConfig:Qe,openCellContextMenu:Yl,closeCellContextMenu:Tt,headerContextOptions:hl,showHeaderContextOptions:ml,setShowHeaderContextOptions:fl,headerDivWidth:O,showDataTypeIcon:xl,rowAdditionalActions:ne,hoverConfig:gt,rowAdditionalActionsWidth:Te,cellEditing:vl,cellEditingValue:Sl,openMasterDataModal:Ul,closeMasterDataModal:he,selectedMasterData:Cl,clearSelectedMasterData:Gl,allowInlineEdit:bl,openCurrencyDropdown:Xl,closeCurrencyDropdown:Ft,currencyDropdownConfig:ut,selectedCurrenciesMap:_e,setCurrencyForCell:Zl,getCurrencyForCell:Ql,pendingEdits:h,addPendingEdit:Le,removePendingEdit:Bl,getPendingEdit:Pl,hasPendingEdit:ql,clearAllPendingEdits:wt,saveAllPendingEdits:pt,clearRowPendingEdits:Wl,saveRowPendingEdits:Hl,pendingEditsCount:q,scrollToCell:P,onFieldOperationFlow:wl,fieldOperationLoading:C,validateAllPendingEdits:U},children:[Se?s.jsxs("div",{ref:Ne,className:`mb-2 flex w-full min-w-0 gap-2 justify-end dark:bg-black-800 ${O<m.TOOLBAR_FIRST_BREAKPOINT?"flex-col items-stretch":"flex-row flex-wrap items-center"}`,children:[s.jsxs("div",{className:`flex items-center gap-x-2 gap-y-1 ${O<m.TOOLBAR_FIRST_BREAKPOINT?"w-full flex-wrap":""} ${i?.content?"min-w-0 flex-1":"shrink-0"}`,children:[i?.content?s.jsx("div",{className:`min-w-0 ${O<m.TOOLBAR_FIRST_BREAKPOINT?"w-full":"flex-1"}`,children:i.content}):null,we?s.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[s.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral-500 dark:text-neutral-400 flex-shrink-0","aria-hidden":!0,children:[s.jsx("ellipse",{cx:"12",cy:"5",rx:"9",ry:"3"}),s.jsx("path",{d:"M3 5v4c0 1.66 4.03 3 9 3s9-1.34 9-3V5"}),s.jsx("path",{d:"M3 9v4c0 1.66 4.03 3 9 3s9-1.34 9-3V9"}),s.jsx("path",{d:"M3 13v4c0 1.66 4.03 3 9 3s9-1.34 9-3v-4"})]}),s.jsx(ve.Typography,{size:"small",variant:"semibold",appearance:"title",children:(Xe??d.length).toLocaleString()}),s.jsx(ve.Typography,{size:"small",variant:"regular",appearance:"subtitle",children:"total records"})]}):i?.preContent?s.jsx("div",{className:"flex min-w-0 shrink-0 justify-start items-center",children:i.preContent}):null]}),s.jsxs("div",{className:`flex min-w-0 items-center justify-end ${O<m.TOOLBAR_FIRST_BREAKPOINT?"w-full":i?.content?"shrink-0":"flex-1"} ${O<m.TOOLBAR_SECOND_BREAKPOINT?"flex-col":"flex-row flex-wrap"} ${i?.postContent?"gap-2":""}`,children:[we&&i?.preContent?s.jsx("div",{className:"flex w-full justify-start items-center",children:i.preContent}):null,s.jsx("div",{className:`flex justify-end items-center min-w-0 ${O<m.TOOLBAR_SECOND_BREAKPOINT||O<m.TOOLBAR_FIRST_BREAKPOINT?"w-full":""}`,children:Be}),i?.postContent?s.jsx("div",{className:`flex justify-end items-center ${O<m.TOOLBAR_SECOND_BREAKPOINT?"w-full":""}`,children:i.postContent}):null]})]}):null,i?.showDivider?s.jsx("div",{className:"border-b pb-2 w-full dark:bg-black-800"}):null,Vt&&(Oe||ke)?s.jsx("div",{className:"flex justify-between items-center pb-4 dark:bg-black-800",children:s.jsxs("div",{className:"flex gap-2 items-center",children:[ke&&c?.renderSortItem?c.renderSortItem({sort:f?.columnSort,onRemoveSort:Ce,onSort:f?.onSort,tableHeaders:v,data:d,disabled:N}):null,Oe&&ke&&f?.columnSort?.field!==""?s.jsx("div",{className:"h-8 w-[1px] flex-shrink-0 bg-neutral-200"}):null,Oe?s.jsxs("div",{className:"flex gap-2 items-center",children:[(et||a?.onResetFilter)&&c?.renderActiveFilters&&c.renderActiveFilters({filters:a?.columnFilters,onRemoveFilter:bs,onClearFilter:ws,onResetFilter:a?.onResetFilter,onFilter:a?.onFilter,tableHeaders:v,columnFilters:a?.columnFilters,modelName:G,enableMasterDataEnumSuggestions:X,noSpacing:!0,notionStyle:a?.notionStyle,context:a?.context,data:Q??d,agreementId:Y,enumSuggestionsExtraParams:Z,disabled:N}),c?.renderFilterButtons&&c.renderFilterButtons({onClearFilter:a?.onClearFilter,onClose:fs,modelName:G,enableMasterDataEnumSuggestions:X,defaultFilterColumn:yl,resetDefaultFilterColumn:()=>lt(null),column:jl,onFilter:a?.onFilter,tableHeaders:v,columnFilters:a?.columnFilters,data:Q??d,notionStyle:a?.notionStyle,context:a?.context,agreementId:Y,enumSuggestionsExtraParams:Z,disabled:N})]}):null]})}):null,pe&&Object.keys(pe).length?s.jsx(Rs.FloatingBar,{...pe}):null,!Se&&we?s.jsxs("div",{className:"flex items-center gap-1.5 mb-2",children:[s.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"text-neutral-500 dark:text-neutral-400 flex-shrink-0","aria-hidden":!0,children:[s.jsx("ellipse",{cx:"12",cy:"5",rx:"9",ry:"3"}),s.jsx("path",{d:"M3 5v4c0 1.66 4.03 3 9 3s9-1.34 9-3V5"}),s.jsx("path",{d:"M3 9v4c0 1.66 4.03 3 9 3s9-1.34 9-3V9"}),s.jsx("path",{d:"M3 13v4c0 1.66 4.03 3 9 3s9-1.34 9-3v-4"})]}),s.jsx(ve.Typography,{size:"small",variant:"semibold",appearance:"title",children:(Xe??d.length).toLocaleString()}),s.jsx(ve.Typography,{size:"small",variant:"regular",appearance:"subtitle",children:"total records"})]}):!Se&&i?.preContent?s.jsx("div",{className:"flex items-center mb-2",children:i.preContent}):null,s.jsx("div",{ref:Ae,className:`w-full ${se?"h-auto":le} rounded-lg relative border overflow-x-hidden`,style:{...se?{height:d?.length>0?`${(d?.length+1)*pl+4}px`:"350px"}:{height:Kl},...ol},children:Zt?Dt:s.jsxs(E.DndContext,{sensors:os,onDragEnd:ds,onDragStart:us,onDragCancel:hs,collisionDetection:E.closestCorners,children:[Dt,$?js.createPortal(s.jsx(E.DragOverlay,{adjustScale:!0,dropAnimation:cs,children:s.jsx("table",{...Rt(),className:"w-full text-sm text-left text-neutral-500 dark:text-neutral-200 bg-white dark:bg-black-700 table-auto border-collapse",children:s.jsxs("tbody",{...Ot(),className:"bg-transparent divide-y divide-neutral-200",children:[void jt($),s.jsx(Es.Row,{row:$,index:A?.findIndex(e=>e.id===$.original.id)},$.original.id)]})})}),document.getElementById("full-screen-container")||document.body):null]})}),se&&c?.renderPagination?c.renderPagination(se):null,c?.renderMasterDataModal&&c.renderMasterDataModal({isVisible:!!j,onSelected:Jl,onClose:he,masterDataColumnName:j?.masterDataColumnName,masterDataFormula:j?.masterDataFormula,masterDataFilters:j?.masterDataFilters,masterDataName:j?.masterDataName,masterDataId:j?.masterDataName,showFilters:!0}),s.jsx(As.CurrencyDropdownPortal,{config:ut,onClose:Ft}),s.jsx(Ns.CellContextMenuPortal,{state:Vl,config:Qe,rowOptions:M,asyncRowOptionsFilter:a?.asyncRowOptionsFilter,checkedIds:ge?.checkedIds,rows:d,columns:v,rowLinkConfig:Ze,onClose:Tt}),s.jsx(Is.PendingEditsFloatingBar,{pendingEditsCount:q,pendingEditsList:$l,rowsWithPendingEdits:zl,fieldOperationLoading:C,onClearAll:wt,onSaveAll:pt,onScrollToCell:P})]})});exports.InfiniteTable=Bs;
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|