@join-x5/react-data-grid-settings 1.0.0-rc → 1.0.1
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/AreaItem/Content.es.js +14 -13
- package/dist/AreaItem/Content.es.js.map +1 -1
- package/dist/AreaItem/Handle.es.js +9 -9
- package/dist/AreaItem/Handle.es.js.map +1 -1
- package/dist/AreaItem/Visibility.es.js +2 -1
- package/dist/AreaItem/Visibility.es.js.map +1 -1
- package/dist/AreaItem/index.es.js +1 -0
- package/dist/AreaItem/index.es.js.map +1 -1
- package/dist/Columns/hook.es.js +1 -0
- package/dist/Columns/hook.es.js.map +1 -1
- package/dist/Columns/index.es.js +3 -2
- package/dist/Columns/index.es.js.map +1 -1
- package/dist/DataGridSettings.es.js +1 -0
- package/dist/DataGridSettings.es.js.map +1 -1
- package/dist/DataGridSettingsContext.es.js +1 -0
- package/dist/DataGridSettingsContext.es.js.map +1 -1
- package/dist/Footer/LeftButtons.es.js +37 -36
- package/dist/Footer/LeftButtons.es.js.map +1 -1
- package/dist/Footer/index.es.js +19 -18
- package/dist/Footer/index.es.js.map +1 -1
- package/dist/Search/index.es.js +21 -20
- package/dist/Search/index.es.js.map +1 -1
- package/dist/index.cjs +5 -5
- package/dist/index.cjs.map +1 -1
- package/package.json +21 -20
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/DataGridSettingsContext.ts","../src/types.ts","../src/AreaItem/Content.tsx","../src/AreaItem/Handle.tsx","../src/AreaItem/Visibility.tsx","../src/AreaItem/ItemContent.tsx","../src/AreaItem/AreaItem.tsx","../src/AreaItem/index.tsx","../src/Area/index.tsx","../src/Search/index.tsx","../src/Columns/utils.ts","../src/Columns/hook.ts","../src/Columns/index.tsx","../src/Footer/LeftButtons.tsx","../src/Footer/index.tsx","../src/utils.ts","../src/DataGridSettings.tsx"],"sourcesContent":["import {createContext} from 'react';\n\nimport type {ColumnArea, ColumnItem, ColumnData, DataGridSettingsProps, ItemsById, ColumnItemId} from './types';\nimport type {RequiredQA} from '@join-x5/react-theme';\n\ntype DataGridSettingsContextProps = {\n columns: ColumnData[];\n itemsById: ItemsById;\n areas: ColumnArea[];\n\n setItems: (newItems: ColumnItem[]) => void;\n\n searchItems: ColumnItemId[];\n setSearchItems: (newSearchItems: ColumnItemId[]) => void;\n} & Pick<DataGridSettingsProps, 'setIsOpen' | 'items' | 'defaultItems' | 'onSave'> &\n RequiredQA;\n\nexport const DataGridSettingsContext = createContext<DataGridSettingsContextProps>({\n items: [],\n defaultItems: [],\n areas: [],\n columns: [],\n itemsById: new Map(),\n searchItems: [],\n setSearchItems: () => {},\n\n setIsOpen: () => {},\n setItems: () => {},\n onSave: () => {},\n qa: '',\n});\n","import type {ReactNode} from 'react';\nimport type {QA} from '@join-x5/react-theme';\n\nexport enum ColumnArea {\n /** Не закреплен */\n Default = 'default',\n\n /** Закреплен слева */\n FixedLeft = 'fixedLeft',\n\n /** Закреплен справа */\n FixedRight = 'fixedRight',\n}\n\n/** Идентификатор колонки */\nexport type ColumnItemId = string | number;\n\nexport type ColumnItem = {\n /** Идентификатор */\n id: ColumnItemId;\n\n /** Название\n *\n * Используется при поиске\n */\n name: string;\n\n /** Контент\n *\n * Текстовый контент сокращается через text-overflow: ellipsis\n */\n title: ReactNode;\n\n /** Область элемента */\n area: ColumnArea;\n\n /** Расположение элемента */\n sort: number;\n\n /** Видимость */\n isVisible: boolean;\n\n /** Всегда видим */\n isAlwaysVisible: boolean;\n\n /** Закреплен\n *\n * Сохраняет свою позицию\n */\n isLocked: boolean;\n};\n\nexport type DataGridSettingsProps = {\n /** Раскрыта ли модалка */\n isOpen: boolean;\n\n /** Обработчик раскрытия модалки */\n setIsOpen: (newIsOpen: boolean) => void;\n\n /** Элементы списка */\n items: ColumnItem[];\n\n /** Элементы по умолчанию\n *\n * Используется при нажатии кнопки \"По умолчанию\"\n */\n defaultItems: ColumnItem[];\n\n /** Доступные области\n *\n * По умолчанию [ColumnArea.FixedLeft, ColumnArea.Default]\n */\n areas?: ColumnArea[];\n\n /** Обработчик сохранения изменений */\n onSave: (newItems: ColumnItem[]) => void;\n} & QA;\n\nexport type DataGridSettingsActiveItem = {\n overId?: ColumnItemId;\n isAbove?: boolean;\n} & ColumnItem;\n\nexport type ColumnData = Map<ColumnArea, ColumnItemId[]>;\nexport type ItemsById = Map<ColumnItemId, ColumnItem>;\n","import {useEffect, useRef, useState} from 'react';\nimport styled from '@emotion/styled';\n\nimport {Placement} from '@join-x5/react-theme';\nimport {Tooltip} from '@join-x5/react';\n\nimport type {ColumnItem} from '../types';\n\nconst Container = styled.div<Pick<ColumnItem, 'isVisible'>>`\n flex-grow: 1;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n user-select: none;\n color: ${props => props.theme.colors.grey[props.isVisible ? 100 : 40]};\n\n ${props => props.theme.typography.p1}\n`;\ntype ContentProps = {item: ColumnItem};\n\nexport const Content: React.FC<ContentProps> = ({item: {name, title, isVisible}}) => {\n const [isOverflown, setIsOverflown] = useState<boolean>(false);\n const ref = useRef<HTMLInputElement>(null);\n\n const noTooltip = !isOverflown ? false : undefined;\n\n useEffect(() => {\n if (!ref.current) {\n return;\n }\n\n setIsOverflown(ref.current.scrollWidth > ref.current.clientWidth);\n }, []);\n\n return (\n <Tooltip isPortal placement={Placement.Top} isOpen={noTooltip} content={name}>\n <Container ref={ref} isVisible={isVisible}>\n {title}\n </Container>\n </Tooltip>\n );\n};\n","import styled from '@emotion/styled';\n\nimport {Placement, SizeTokenValue} from '@join-x5/react-theme';\nimport {DragIndicatorIcon} from '@join-x5/react-icons';\nimport {Tooltip} from '@join-x5/react';\n\nimport type {ColumnItem} from '../types';\n\ntype HandleProps = Pick<ColumnItem, 'isLocked'>;\n\nconst HandleContainer = styled.div<HandleProps>`\n flex-grow: 0;\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n\n color: ${props => props.theme.colors.grey[props.isLocked ? 40 : 60]};\n`;\n\nexport const Handle: React.FC<HandleProps> = ({isLocked}) => {\n const child = (\n <HandleContainer isLocked={isLocked}>\n <DragIndicatorIcon size={SizeTokenValue.Small} />\n </HandleContainer>\n );\n\n if (!isLocked) {\n return child;\n }\n\n return (\n <Tooltip placement={Placement.Top} content=\"Нельзя открепить столбец\">\n {child}\n </Tooltip>\n );\n};\n","import {useContext} from 'react';\n\nimport {Placement, SizeTokenValue} from '@join-x5/react-theme';\nimport {VisibilityIcon, VisibilityOffIcon} from '@join-x5/react-icons';\nimport {ButtonVariant, IconButton} from '@join-x5/react';\n\nimport {DataGridSettingsContext} from '../DataGridSettingsContext';\n\nimport type {MouseEventHandler} from 'react';\nimport type {ColumnItem} from '../types';\n\nexport const Visibility: React.FC<{item: ColumnItem}> = props => {\n const {id, isVisible, isAlwaysVisible} = props.item;\n\n const {items, setItems} = useContext(DataGridSettingsContext);\n\n const toggleVisible: MouseEventHandler = () => {\n if (isAlwaysVisible) {\n return;\n }\n\n setItems(items.map(item => (item.id === id ? {...item, isVisible: !isVisible} : item)));\n };\n\n const Icon = isVisible ? VisibilityIcon : VisibilityOffIcon;\n\n const tooltip = {\n placement: Placement.Top,\n content: isAlwaysVisible ? 'Нельзя скрыть' : isVisible ? 'Скрыть столбец' : 'Показать столбец',\n };\n\n return (\n <IconButton\n tooltip={tooltip}\n size={SizeTokenValue.XSmall}\n variant={ButtonVariant.InnerInput}\n disabled={isAlwaysVisible}\n onClick={toggleVisible}\n >\n <Icon size={SizeTokenValue.Small} />\n </IconButton>\n );\n};\n","import {memo} from 'react';\nimport styled from '@emotion/styled';\n\nimport {Content} from './Content';\nimport {Handle} from './Handle';\nimport {Visibility} from './Visibility';\n\nimport type {RefCallback} from 'react';\nimport type {DraggableSyntheticListeners} from '@dnd-kit/core';\nimport type {ColumnItem} from '../types';\n\nconst Container = styled.div`\n display: flex;\n flex-grow: 1;\n overflow: hidden;\n align-items: center;\n justify-content: space-between;\n gap: 4px;\n`;\n\ntype ItemContentProps = {\n item: ColumnItem;\n listeners?: DraggableSyntheticListeners;\n handleRef?: RefCallback<HTMLDivElement>;\n};\n\nexport const ItemContent = memo<ItemContentProps>(({item, listeners, handleRef}) => {\n const handleProps = item.isLocked ? undefined : {...listeners, style: {cursor: 'pointer'}};\n\n return (\n <Container>\n <Visibility item={item} />\n <Container ref={handleRef} {...handleProps}>\n <Content item={item} />\n <Handle isLocked={item.isLocked} />\n </Container>\n </Container>\n );\n});\n","'use client';\n\nimport {useEffect} from 'react';\nimport styled from '@emotion/styled';\nimport {DragOverlay} from '@dnd-kit/core';\nimport {useSortable} from '@dnd-kit/sortable';\n\nimport baseTheme from '@join-x5/react-theme';\n\nimport {ColumnArea} from '../types';\n\nimport {ItemContent} from './ItemContent';\n\nimport type {CSSProperties} from 'react';\nimport type {ColumnItem, ColumnItemId} from '../types';\n\nconst BaseContainer = styled.div`\n position: relative;\n box-sizing: border-box;\n height: 32px;\n padding: 4px;\n border-radius: 4px;\n transform-origin: 0 0;\n touch-action: manipulation;\n`;\n\nconst Placeholder = styled(BaseContainer)`\n transform: translate3d(var(--tx, 0), var(--ty, 0), 0) scaleX(var(--sx, 1)) scaleY(var(--sy, 1));\n background-color: ${props => props.theme.colors.grey[10]};\n`;\n\nconst Dragging = styled(BaseContainer)`\n background-color: ${props => props.theme.colors.white};\n box-shadow: ${baseTheme.shadows.medium};\n pointer-events: none;\n`;\n\nconst Container = styled(BaseContainer)`\n transform: translate3d(var(--tx, 0), var(--ty, 0), 0) scaleX(var(--sx, 1)) scaleY(var(--sy, 1));\n\n :hover {\n background-color: ${props => props.theme.colors.grey[10]};\n }\n\n ::after {\n content: '';\n position: absolute;\n display: none;\n width: 100%;\n height: 2px;\n left: 0;\n background-color: ${props => props.theme.colors.accent[90]};\n }\n\n &[data-is-above]::after {\n display: block;\n top: 1px;\n }\n\n &[data-is-below]::after {\n display: block;\n bottom: 0;\n }\n\n &[data-is-fixed][data-is-above]:first-of-type::after {\n width: calc(100% - 10px);\n top: 2px;\n left: 5px;\n }\n\n &[data-is-fixed][data-is-below]:last-of-type::after {\n width: calc(100% - 10px);\n bottom: 1px;\n left: 5px;\n }\n\n &[data-is-search] {\n background-color: ${props => props.theme.colors.accent[10]};\n }\n`;\n\ntype AreaItemProps = {\n id: ColumnItemId;\n item: ColumnItem;\n isActive: boolean;\n isAbove: boolean;\n isBelow: boolean;\n isSearch: boolean;\n};\n\nexport const AreaItem: React.FC<AreaItemProps> = ({id, item, isActive, isAbove, isBelow, isSearch}) => {\n const {setNodeRef, setActivatorNodeRef, listeners, transform, transition} = useSortable({id});\n\n if (isActive) {\n return <Placeholder ref={setNodeRef} />;\n }\n\n const style: CSSProperties = {transition};\n\n if (transform) {\n style['--tx'] = `${Math.round(transform.x)}px`;\n style['--ty'] = `${Math.round(transform.y)}px`;\n style['--sx'] = `${transform.scaleX}`;\n style['--sy'] = `${transform.scaleY}`;\n }\n\n return (\n <Container\n ref={setNodeRef}\n style={style}\n data-is-fixed={item.area !== ColumnArea.Default || undefined}\n data-is-above={isAbove || undefined}\n data-is-below={isBelow || undefined}\n data-is-search={isSearch || undefined}\n >\n <ItemContent handleRef={setActivatorNodeRef} listeners={listeners} item={item} />\n </Container>\n );\n};\n\nexport const ActiveItemOverlay: React.FC<{item?: ColumnItem}> = ({item}) => {\n const child = !item ? null : (\n <Dragging>\n <ItemContent item={item} />\n </Dragging>\n );\n\n useEffect(() => {\n if (!item) {\n return;\n }\n\n window.document.body.style.cursor = 'grabbing';\n\n return () => {\n window.document.body.style.cursor = '';\n };\n }, [item]);\n\n return <DragOverlay>{child}</DragOverlay>;\n};\n","import {useContext} from 'react';\nimport {SortableContext} from '@dnd-kit/sortable';\n\nimport {DataGridSettingsContext} from '../DataGridSettingsContext';\n\nimport {AreaItem} from './AreaItem';\n\nimport type {ReactNode} from 'react';\nimport type {ColumnItem, ColumnItemId, DataGridSettingsActiveItem} from '../types';\n\ntype GetItem = {\n id: ColumnItemId;\n item: ColumnItem;\n activeItem: DataGridSettingsActiveItem | undefined;\n isSearch: boolean;\n};\n\nconst getItem = ({id, item, isSearch, activeItem}: GetItem) => {\n const props = {\n id,\n item,\n isSearch,\n isActive: false,\n isAbove: false,\n isBelow: false,\n };\n\n if (activeItem) {\n props.isActive = item.id === activeItem.id;\n\n if (item.id === activeItem.overId) {\n props.isAbove = !!activeItem.isAbove;\n props.isBelow = !activeItem.isAbove;\n }\n }\n\n return <AreaItem key={item.id} {...props} />;\n};\n\ntype ItemsProps = {\n itemIds: ColumnItemId[];\n activeItem?: DataGridSettingsActiveItem;\n};\n\nexport const Items: React.FC<ItemsProps> = ({itemIds, activeItem}) => {\n const {itemsById, searchItems} = useContext(DataGridSettingsContext);\n\n const child: ReactNode[] = [];\n const newItemIds: ColumnItemId[] = [];\n\n for (const itemId of itemIds) {\n const item = itemsById.get(itemId);\n if (!item) {\n continue;\n }\n\n const newId = itemId === activeItem?.id ? `${itemId}Placeholder` : itemId;\n const isSearch = searchItems.includes(itemId);\n\n newItemIds.push(newId);\n child.push(getItem({item, activeItem, isSearch, id: newId}));\n }\n\n return <SortableContext items={newItemIds}>{child}</SortableContext>;\n};\n\nexport {ActiveItemOverlay} from './AreaItem';\n","import styled from '@emotion/styled';\nimport {useDroppable} from '@dnd-kit/core';\n\nimport {Placement} from '@join-x5/react-theme';\nimport {Tooltip} from '@join-x5/react';\n\nimport {Items} from '../AreaItem';\nimport {ColumnArea} from '../types';\n\nimport type {ColumnItemId, DataGridSettingsActiveItem, ItemsById} from '../types';\n\nimport type {PropsWithChildren} from '@join-x5/react-theme';\n\nconst Container = styled.div`\n position: relative;\n min-height: 32px;\n`;\n\nconst Content = styled.div`\n min-height: 32px;\n`;\n\nconst Header = styled.div`\n position: relative;\n padding: 6px 8px;\n border-radius: 8px 8px 0 0;\n text-align: center;\n user-select: none;\n z-index: 1;\n\n ${({theme}) => ({\n ...theme.typography.p2,\n\n color: theme.colors.white,\n })}\n`;\n\nconst Placeholder = styled.div`\n padding: 8px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n user-select: none;\n\n ${({theme}) => ({\n ...theme.typography.p2,\n\n color: theme.colors.grey[60],\n })}\n`;\n\nconst FixedContainer = styled.div<{isOver: boolean}>`\n position: relative;\n\n ::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n border-radius: 8px;\n border-width: 2px;\n border-style: dashed;\n pointer-events: none;\n }\n\n ${({theme, isOver}) => {\n return `\n ::after {\n border-color: ${isOver ? theme.colors.accent[80] : theme.colors.grey[60]};\n }\n\n ${Header} {\n background-color: ${isOver ? theme.colors.accent[80] : theme.colors.grey[50]};\n }\n\n ${Placeholder} {\n background-color: ${isOver ? theme.colors.accent[10] : undefined};\n }\n `;\n }}\n`;\n\ntype AreaProps = {\n id: string;\n area: ColumnArea;\n isEmpty: boolean;\n isOverItems: boolean;\n isWithHeader: boolean;\n} & PropsWithChildren;\n\nconst DefaultArea: React.FC<AreaProps> = ({children, id, area}) => {\n const {setNodeRef} = useDroppable({id, data: {area}});\n\n return <Container ref={setNodeRef}>{children}</Container>;\n};\n\nconst FixedArea: React.FC<AreaProps> = ({children, id, area, isEmpty, isOverItems, isWithHeader}) => {\n const {isOver, setNodeRef} = useDroppable({id, data: {area}});\n\n if (isEmpty) {\n const placeholderText = `Перетащите столбец сюда, чтобы\n закрепить его ${area === ColumnArea.FixedLeft ? 'слева' : 'справа'} от таблицы`;\n\n return (\n <FixedContainer ref={setNodeRef} isOver={isOver || isOverItems}>\n <Header hidden={!isWithHeader}>Область для закрепления столбца</Header>\n <Content>\n <Tooltip placement={Placement.Right} content={placeholderText} whiteSpace=\"pre-line\">\n <Placeholder>{placeholderText}</Placeholder>\n </Tooltip>\n </Content>\n </FixedContainer>\n );\n }\n\n return (\n <FixedContainer ref={setNodeRef} isOver={isOver || isOverItems}>\n <Header hidden={!isWithHeader}>Область для закрепления столбца</Header>\n <Content>{children}</Content>\n </FixedContainer>\n );\n};\n\ntype GetArea = {\n columnIndex: number;\n area: ColumnArea;\n itemIds: ColumnItemId[];\n itemsById: ItemsById;\n activeItem: DataGridSettingsActiveItem | undefined;\n searchItems: ColumnItemId[];\n};\n\nexport const getArea = ({columnIndex, area, itemIds, itemsById, activeItem}: GetArea) => {\n const Component = area === ColumnArea.Default ? DefaultArea : FixedArea;\n\n const isWithHeader = area === ColumnArea.FixedLeft && columnIndex === 0;\n const isSingleItemActive = itemIds.length === 1 && itemIds[0] === activeItem?.id;\n const isFixedArea = area !== ColumnArea.Default;\n\n const isEmpty = itemIds.length === 0 || (isSingleItemActive && isFixedArea);\n const isOverItems = itemIds.findIndex(itemId => itemsById.get(itemId)?.id === activeItem?.overId) !== -1;\n\n const props: AreaProps = {\n area,\n isEmpty,\n isOverItems,\n isWithHeader,\n\n id: `${columnIndex}_${area}`,\n };\n\n return (\n <Component key={props.id} {...props}>\n <Items itemIds={itemIds} activeItem={activeItem} />\n </Component>\n );\n};\n","import {useContext, useRef, useState} from 'react';\nimport styled from '@emotion/styled';\n\nimport {SizeTokenValue} from '@join-x5/react-theme';\nimport {SearchInput} from '@join-x5/react';\n\nimport {DataGridSettingsContext} from '../DataGridSettingsContext';\n\nimport type {ChangeEventHandler} from 'react';\nimport type {ColumnItemId} from '../types';\n\nconst Container = styled.div`\n margin-bottom: 16px;\n`;\n\nexport const Search: React.FC = () => {\n const {items, setSearchItems, qa} = useContext(DataGridSettingsContext);\n const [value, setValue] = useState<string>('');\n const inputTimeout = useRef<ReturnType<typeof setTimeout>>();\n\n const onChange: ChangeEventHandler<HTMLInputElement> = e => {\n const newSearchValue = e.target.value.toLowerCase().trim();\n\n clearTimeout(inputTimeout.current);\n setValue(e.target.value);\n\n inputTimeout.current = setTimeout(() => {\n if (!newSearchValue) {\n setSearchItems([]);\n return;\n }\n\n const newSearchItems = items.reduce((acc, item) => {\n if (item.name.toLowerCase().includes(newSearchValue)) {\n acc.push(item.id);\n }\n\n return acc;\n }, [] as ColumnItemId[]);\n\n setSearchItems(newSearchItems);\n }, 100);\n };\n\n return (\n <Container>\n <SearchInput size={SizeTokenValue.Small} value={value} onChange={onChange} label=\"Поиск\" qa={`${qa}-search`} />\n </Container>\n );\n};\n","import {rectIntersection} from '@dnd-kit/core';\n\nimport {ColumnArea} from '../types';\n\nimport type {Active, CollisionDetection, Over} from '@dnd-kit/core';\nimport type {ColumnItem, DataGridSettingsActiveItem, ItemsById} from '../types';\n\nexport const moveItem = (items: ColumnItem[], active: DataGridSettingsActiveItem, over: Over): ColumnItem[] => {\n const areaFactor = {\n [ColumnArea.Default]: 0,\n [ColumnArea.FixedLeft]: -1,\n [ColumnArea.FixedRight]: 1,\n };\n\n let newItems = [...items]\n .sort((a, b) => {\n const aSort = a.sort + items.length * areaFactor[a.area];\n const bSort = b.sort + items.length * areaFactor[b.area];\n\n return aSort - bSort;\n })\n .map((item, sort) => ({...item, sort}));\n\n const overItem = newItems.find(item => item.id === over.id);\n\n if (!overItem) {\n const newArea: ColumnArea | undefined = over.data?.current?.area;\n if (newArea) {\n newItems = newItems.map(item => (item.id === active.id ? {...item, area: newArea} : item));\n }\n\n return newItems;\n }\n\n const newSort = overItem.sort + (active.isAbove ? 0 : 1);\n\n const [relativeItems, fixedItems] = newItems.reduce(\n (acc, item) => {\n acc[+item.isLocked].push(item);\n return acc;\n },\n [[], []] as [ColumnItem[], ColumnItem[]]\n );\n\n newItems = relativeItems.map(item => {\n if (item.id === active.id) {\n return {...item, sort: newSort, area: overItem.area};\n }\n\n if (item.sort >= newSort) {\n return {...item, sort: item.sort + 1};\n }\n\n return item;\n });\n\n newItems.sort((a, b) => a.sort - b.sort);\n\n for (const item of fixedItems) {\n newItems.splice(item.sort, 0, item);\n }\n\n return newItems.map((item, sort) => ({...item, sort}));\n};\n\nexport const moveOver = (itemsById: ItemsById, active: Active, over: Over) => {\n const overItem = itemsById.get(over.id);\n if (!overItem) {\n return {overId: undefined, isAbove: undefined};\n }\n\n const isFirst = over.data?.current?.sortable?.index === 0;\n const offsetTop = active.rect?.current?.translated?.top;\n\n const isAbove = isFirst && !!offsetTop && offsetTop < over.rect?.top;\n\n return {overId: overItem.id, isAbove};\n};\n\nexport const collisionDetection: CollisionDetection = args => {\n const rectResult = rectIntersection(args);\n\n if (rectResult.length === 2) {\n try {\n const sortables = rectResult.filter(item => !!item.data?.droppableContainer?.data?.current?.sortable);\n if (sortables.length === 1) {\n return sortables;\n }\n //eslint-disable-next-line no-empty\n } catch {}\n }\n\n return rectResult;\n};\n","import {MouseSensor, TouchSensor, useSensor, useSensors} from '@dnd-kit/core';\n\nimport {useContext, useState} from 'react';\n\nimport {useUpdateEffect} from '@join-x5/react-theme';\n\nimport {DataGridSettingsContext} from '../DataGridSettingsContext';\n\nimport {moveItem, moveOver, collisionDetection} from './utils';\n\nimport type {DndContextProps} from '@dnd-kit/core';\nimport type {DataGridSettingsActiveItem} from '../types';\n\nexport const useColumns = () => {\n const {columns, items, setItems, itemsById, searchItems} = useContext(DataGridSettingsContext);\n const [activeItem, setActiveItem] = useState<DataGridSettingsActiveItem>();\n const sensors = useSensors(useSensor(MouseSensor), useSensor(TouchSensor));\n\n const onDragCancel = () => {\n setActiveItem(undefined);\n };\n\n const onDragStart: DndContextProps['onDragStart'] = args => {\n const newActiveItem = itemsById.get(args.active.id);\n setActiveItem(newActiveItem);\n };\n\n const onDragMove: DndContextProps['onDragMove'] = ({over, active}) => {\n if (!activeItem || !over) {\n if (activeItem && activeItem.overId !== undefined) {\n setActiveItem({...activeItem, overId: undefined, isAbove: undefined});\n }\n\n return;\n }\n\n const {overId, isAbove} = moveOver(itemsById, active, over);\n\n if (activeItem.overId === overId && activeItem.isAbove === isAbove) {\n return;\n }\n\n setActiveItem({...activeItem, overId, isAbove});\n };\n\n const onDragEnd: DndContextProps['onDragEnd'] = ({over}) => {\n if (!activeItem || !over) {\n if (activeItem) {\n setActiveItem(undefined);\n }\n\n return;\n }\n\n setActiveItem(undefined);\n setItems(moveItem(items, activeItem, over));\n };\n\n useUpdateEffect(() => {\n setActiveItem(undefined);\n }, [items]);\n\n return {\n columns,\n itemsById,\n searchItems,\n activeItem,\n sensors,\n onDragStart,\n onDragMove,\n onDragEnd,\n onDragCancel,\n collisionDetection,\n };\n};\n","import styled from '@emotion/styled';\nimport {DndContext} from '@dnd-kit/core';\n\nimport {ModalContent as BaseModalContent} from '@join-x5/react';\n\nimport {getArea} from '../Area';\nimport {ActiveItemOverlay} from '../AreaItem';\nimport {Search} from '../Search';\n\nimport {useColumns} from './hook';\n\nimport type {ReactNode} from 'react';\n\nconst ModalContent = styled(BaseModalContent)`\n padding: 0 24px 16px;\n`;\n\nconst Container = styled.div`\n display: flex;\n margin-left: -32px;\n\n > div {\n display: flex;\n position: relative;\n flex-direction: column;\n gap: 4px;\n box-sizing: border-box;\n padding-left: 32px;\n\n ::after {\n content: '';\n position: absolute;\n width: 0;\n height: 100%;\n top: 0;\n left: 16px;\n border-left: 1px solid ${props => props.theme.colors.grey[10]};\n }\n\n :first-of-type::after {\n display: none;\n }\n }\n`;\n\nexport const Columns: React.FC = () => {\n const {columns, itemsById, searchItems, activeItem, ...rest} = useColumns();\n\n const child = columns.map((column, columnIndex) => {\n const areas: ReactNode[] = Array.from(column).map(([area, itemIds]) =>\n getArea({columnIndex, area, itemIds, itemsById, searchItems, activeItem})\n );\n\n const width = `calc(${100 / columns.length}%)`;\n\n return (\n <div key={columnIndex} style={{width}}>\n {areas}\n </div>\n );\n });\n\n return (\n <ModalContent noBorderScroll>\n <Search />\n <DndContext id=\"DataGridSettings\" {...rest}>\n <Container>{child}</Container>\n <ActiveItemOverlay item={activeItem} />\n </DndContext>\n </ModalContent>\n );\n};\n","import {useContext, useRef, useState} from 'react';\nimport styled from '@emotion/styled';\n\nimport {Placement, SizeTokenValue} from '@join-x5/react-theme';\nimport {\n Button,\n ButtonVariant,\n IconButton,\n ModalFooterContent,\n Dropdown,\n DropdownContent as BaseDropdownContent,\n} from '@join-x5/react';\n\nimport {MoreHorizontalIcon} from '@join-x5/react-icons';\n\nimport {DataGridSettingsContext} from '../DataGridSettingsContext';\n\nimport type {RequiredQA} from '@join-x5/react-theme';\n\nconst DropdownContent = styled(BaseDropdownContent)`\n overflow: hidden;\n`;\n\nconst DropdownButton = styled.button`\n width: 100%;\n padding: 6px 12px;\n border: 0;\n outline: none;\n background: none;\n text-align: left;\n cursor: pointer;\n\n ${props => props.theme.typography.p1compact}\n\n :hover {\n background-color: ${props => props.theme.colors.grey[10]};\n }\n`;\n\ntype DropdownButtonsProps = {\n isAllVisible: boolean;\n onReset: () => void;\n onToggleVisible: () => void;\n} & RequiredQA;\n\nconst DropdownButtons: React.FC<DropdownButtonsProps> = ({isAllVisible, qa, ...props}) => {\n const [isOpen, setIsOpen] = useState(false);\n const ref = useRef<HTMLButtonElement>(null);\n\n const onToggle = () => setIsOpen(!isOpen);\n\n const onReset = () => {\n setIsOpen(false);\n props.onReset();\n };\n\n const onToggleVisible = () => {\n setIsOpen(false);\n props.onToggleVisible();\n };\n\n return (\n <ModalFooterContent>\n <IconButton\n ref={ref}\n size={SizeTokenValue.Small}\n variant={ButtonVariant.InnerInput}\n onClick={onToggle}\n qa={`${qa}-footer-dropdown`}\n >\n <MoreHorizontalIcon size={SizeTokenValue.Small} />\n </IconButton>\n <Dropdown width=\"152px\" placement={Placement.TopStart} isOpen={isOpen} setIsOpen={setIsOpen} targetRef={ref}>\n <DropdownContent>\n <DropdownButton type=\"button\" onClick={onReset} data-qa={`${qa}-reset`}>\n По умолчанию\n </DropdownButton>\n <DropdownButton type=\"button\" onClick={onToggleVisible} data-qa={`${qa}-toggle-visible`}>\n {isAllVisible ? 'Скрыть все' : 'Показать все'}\n </DropdownButton>\n </DropdownContent>\n </Dropdown>\n </ModalFooterContent>\n );\n};\n\nexport const LeftButtons: React.FC = () => {\n const {items, defaultItems, setItems, columns, qa} = useContext(DataGridSettingsContext);\n\n const isAllVisible = items.findIndex(item => !item.isVisible) === -1;\n\n const onReset = () => setItems(defaultItems);\n\n const onToggleVisible = () => {\n const newItems = items.map(item => ({...item, isVisible: item.isAlwaysVisible || !isAllVisible}));\n\n setItems(newItems);\n };\n\n if (columns.length === 1) {\n return <DropdownButtons isAllVisible={isAllVisible} onReset={onReset} onToggleVisible={onToggleVisible} qa={qa} />;\n }\n\n return (\n <ModalFooterContent>\n <Button size={SizeTokenValue.Small} variant={ButtonVariant.Ghost} onClick={onReset} qa={`${qa}-reset`}>\n По умолчанию\n </Button>\n <Button\n size={SizeTokenValue.Small}\n variant={ButtonVariant.Ghost}\n onClick={onToggleVisible}\n qa={`${qa}-toggle-visible`}\n >\n {isAllVisible ? 'Скрыть все' : 'Показать все'}\n </Button>\n </ModalFooterContent>\n );\n};\n","import {useContext} from 'react';\nimport styled from '@emotion/styled';\n\nimport {SizeTokenValue} from '@join-x5/react-theme';\nimport {Button, ButtonVariant, ModalFooter as BaseModalFooter, ModalFooterContent} from '@join-x5/react';\n\nimport {DataGridSettingsContext} from '../DataGridSettingsContext';\n\nimport {LeftButtons} from './LeftButtons';\n\nconst ModalFooter = styled(BaseModalFooter)`\n padding: 20px 24px 20px 16px;\n border-top: 1px solid ${props => props.theme.colors.grey[20]};\n`;\n\nexport const Footer: React.FC = () => {\n const context = useContext(DataGridSettingsContext);\n const {items, setIsOpen, qa} = context;\n\n const onClose = () => setIsOpen(false);\n const onSave = () => context.onSave(items);\n\n return (\n <ModalFooter>\n <LeftButtons />\n <ModalFooterContent>\n <Button size={SizeTokenValue.Small} variant={ButtonVariant.Outlined} onClick={onClose} qa={`${qa}-cancel`}>\n Отменить\n </Button>\n <Button size={SizeTokenValue.Small} variant={ButtonVariant.Primary} onClick={onSave} qa={`${qa}-save`}>\n Применить\n </Button>\n </ModalFooterContent>\n </ModalFooter>\n );\n};\n","import {SizeTokenValue} from '@join-x5/react-theme';\n\nimport {ColumnArea} from './types';\n\nimport type {ColumnData, ColumnItem, ItemsById} from './types';\n\nexport const getColumnsData = (items: ColumnItem[], areas: ColumnArea[]) => {\n const columns: ColumnData[] = [];\n const itemsById: ItemsById = new Map();\n\n const areaFactor = {\n [ColumnArea.Default]: 0,\n [ColumnArea.FixedLeft]: -1,\n [ColumnArea.FixedRight]: 1,\n };\n\n const sortedItems = [...items].sort((a, b) => {\n const aSort = a.sort + items.length * areaFactor[a.area];\n const bSort = b.sort + items.length * areaFactor[b.area];\n\n return aSort - bSort;\n });\n\n const withFixedLeft = areas.includes(ColumnArea.FixedLeft);\n const withFixedRight = areas.includes(ColumnArea.FixedRight);\n\n const itemsInColumn = (() => {\n const ITEMS_IN_COLUMN = 15;\n const COLUMNS_MAX = 4;\n\n const rem = Math.ceil(items.length / ITEMS_IN_COLUMN);\n const columnsCount = rem > COLUMNS_MAX ? COLUMNS_MAX : rem;\n\n const result = Math.ceil(items.length / columnsCount);\n\n return (result > ITEMS_IN_COLUMN ? result : ITEMS_IN_COLUMN) + (withFixedLeft || withFixedRight ? 1 : 0);\n })();\n\n while (sortedItems.length > 0) {\n const isFirstColumn = columns.length === 0;\n\n const hasFixedLeftArea = isFirstColumn && withFixedLeft;\n const hasFixedLeftItems = sortedItems[0]?.area === ColumnArea.FixedLeft;\n\n const newItemsInColumn = itemsInColumn - (hasFixedLeftArea ? 2 - +hasFixedLeftItems : 0);\n const columnItems = sortedItems.splice(0, newItemsInColumn);\n\n const hasFixedRightArea = sortedItems.length === 0 && withFixedRight;\n const hasFixedRightItems = columnItems.findIndex(item => item.area === ColumnArea.FixedRight) !== -1;\n\n const column: ColumnData = new Map();\n\n if (hasFixedLeftArea || hasFixedLeftItems) {\n column.set(ColumnArea.FixedLeft, []);\n }\n\n column.set(ColumnArea.Default, []);\n\n if (hasFixedRightArea || hasFixedRightItems) {\n column.set(ColumnArea.FixedRight, []);\n }\n\n for (const columnItem of columnItems) {\n const area = column.get(columnItem.area);\n if (!area) {\n continue;\n }\n\n itemsById.set(columnItem.id, columnItem);\n area.push(columnItem.id);\n }\n\n const defaultAreaIsEmpty = column.get(ColumnArea.Default)?.length === 0;\n\n if (defaultAreaIsEmpty) {\n column.delete(ColumnArea.Default);\n }\n\n columns.push(column);\n }\n\n const noDefaultColumnAdded = columns.findIndex(column => column.has(ColumnArea.Default)) === -1;\n if (noDefaultColumnAdded && columns.length) {\n const fixedRightIndex = columns.findIndex(column => column.has(ColumnArea.FixedRight));\n\n if (fixedRightIndex !== -1) {\n const columnAreas = columns[fixedRightIndex];\n const rightItems = columnAreas.get(ColumnArea.FixedRight);\n\n if (rightItems) {\n columnAreas.delete(ColumnArea.FixedRight);\n columnAreas.set(ColumnArea.Default, []);\n columnAreas.set(ColumnArea.FixedRight, rightItems);\n } else {\n columnAreas.set(ColumnArea.Default, []);\n }\n } else {\n columns[columns.length - 1].set(ColumnArea.Default, []);\n }\n }\n\n const size = ((): SizeTokenValue => {\n switch (columns.length) {\n case 1:\n return SizeTokenValue.Small;\n case 2:\n return SizeTokenValue.Medium;\n case 3:\n return SizeTokenValue.Large;\n }\n\n return SizeTokenValue.XLarge;\n })();\n\n return {columns, itemsById, size};\n};\n","import {useMemo, useState} from 'react';\n\nimport {useUpdateEffect} from '@join-x5/react-theme';\nimport {Modal, ModalHeader} from '@join-x5/react';\n\nimport {Columns} from './Columns';\nimport {Footer} from './Footer';\nimport {DataGridSettingsContext} from './DataGridSettingsContext';\nimport {getColumnsData} from './utils';\nimport {ColumnArea} from './types';\n\nimport type {ColumnItem, ColumnItemId, DataGridSettingsProps} from './types';\n\nexport const DataGridSettings: React.FC<DataGridSettingsProps> = props => {\n const {\n isOpen,\n\n qa = 'datagridsettings',\n areas = [ColumnArea.FixedLeft, ColumnArea.Default],\n\n ...rest\n } = props;\n\n const [items, setItems] = useState<ColumnItem[]>(props.items);\n const [searchItems, setSearchItems] = useState<ColumnItemId[]>([]);\n\n const {columns, itemsById, size} = useMemo(() => getColumnsData(items, areas), [items, areas]);\n\n const context = {...rest, columns, itemsById, areas, items, setItems, searchItems, setSearchItems, qa};\n\n const onClose = () => props.setIsOpen(false);\n\n useUpdateEffect(() => {\n setItems(props.items);\n }, [props.items]);\n\n useUpdateEffect(() => {\n if (!isOpen) {\n setTimeout(() => setSearchItems([]));\n }\n }, [isOpen]);\n\n const modalProps = {isOpen, onClose, qa, size};\n\n return (\n <Modal {...modalProps}>\n <ModalHeader onClose={onClose}>Настройка таблицы</ModalHeader>\n <DataGridSettingsContext.Provider value={context}>\n <Columns />\n <Footer />\n </DataGridSettingsContext.Provider>\n </Modal>\n );\n};\n"],"names":["DataGridSettingsContext","createContext","items","defaultItems","areas","columns","itemsById","Map","searchItems","setSearchItems","setIsOpen","setItems","onSave","qa","ColumnArea","Default","FixedLeft","FixedRight","Container","_styled","process","env","NODE_ENV","target","label","props","theme","colors","grey","isVisible","typography","p1","Content","item","name","title","isOverflown","setIsOverflown","useState","ref","useRef","noTooltip","undefined","useEffect","current","scrollWidth","clientWidth","Tooltip","Placement","Top","jsx","HandleContainer","isLocked","Handle","child","DragIndicatorIcon","SizeTokenValue","Small","Visibility","id","isAlwaysVisible","useContext","toggleVisible","map","Icon","VisibilityIcon","VisibilityOffIcon","tooltip","placement","content","IconButton","XSmall","ButtonVariant","InnerInput","styles","toString","_EMOTION_STRINGIFIED_CSS_ERROR__","ItemContent","memo","listeners","handleRef","handleProps","style","cursor","jsxs","BaseContainer","Placeholder","Dragging","white","baseTheme","shadows","medium","accent","AreaItem","isActive","isAbove","isBelow","isSearch","setNodeRef","setActivatorNodeRef","transform","transition","useSortable","Math","round","x","y","scaleX","scaleY","area","ActiveItemOverlay","document","body","DragOverlay","getItem","activeItem","overId","Items","itemIds","newItemIds","itemId","get","newId","includes","push","SortableContext","Header","p2","color","FixedContainer","isOver","DefaultArea","children","useDroppable","data","FixedArea","isEmpty","isOverItems","isWithHeader","placeholderText","Right","getArea","columnIndex","Component","isSingleItemActive","length","isFixedArea","findIndex","Search","value","setValue","inputTimeout","onChange","e","newSearchValue","toLowerCase","trim","clearTimeout","setTimeout","newSearchItems","reduce","acc","SearchInput","moveItem","active","over","areaFactor","newItems","sort","a","b","aSort","bSort","overItem","find","newArea","newSort","relativeItems","fixedItems","splice","moveOver","isFirst","sortable","index","offsetTop","rect","translated","top","collisionDetection","args","rectResult","rectIntersection","sortables","filter","droppableContainer","useColumns","setActiveItem","sensors","useSensors","useSensor","MouseSensor","TouchSensor","onDragCancel","onDragStart","newActiveItem","onDragMove","onDragEnd","useUpdateEffect","ModalContent","BaseModalContent","Columns","rest","column","Array","from","width","DndContext","DropdownContent","BaseDropdownContent","DropdownButton","p1compact","DropdownButtons","isAllVisible","isOpen","onToggle","onReset","onToggleVisible","ModalFooterContent","MoreHorizontalIcon","Dropdown","TopStart","LeftButtons","Button","Ghost","ModalFooter","BaseModalFooter","Footer","context","onClose","Outlined","Primary","getColumnsData","sortedItems","withFixedLeft","withFixedRight","itemsInColumn","rem","ceil","ITEMS_IN_COLUMN","columnsCount","COLUMNS_MAX","result","hasFixedLeftArea","hasFixedLeftItems","newItemsInColumn","columnItems","hasFixedRightArea","hasFixedRightItems","set","columnItem","delete","noDefaultColumnAdded","has","fixedRightIndex","columnAreas","rightItems","size","Medium","Large","XLarge","DataGridSettings","useMemo","modalProps","Modal","ModalHeader"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/DataGridSettingsContext.ts","../src/types.ts","../src/AreaItem/Content.tsx","../src/AreaItem/Handle.tsx","../src/AreaItem/Visibility.tsx","../src/AreaItem/ItemContent.tsx","../src/AreaItem/AreaItem.tsx","../src/AreaItem/index.tsx","../src/Area/index.tsx","../src/Search/index.tsx","../src/Columns/utils.ts","../src/Columns/hook.ts","../src/Columns/index.tsx","../src/Footer/LeftButtons.tsx","../src/Footer/index.tsx","../src/utils.ts","../src/DataGridSettings.tsx"],"sourcesContent":["'use client';\n\nimport {createContext} from 'react';\n\nimport type {ColumnArea, ColumnItem, ColumnData, DataGridSettingsProps, ItemsById, ColumnItemId} from './types';\nimport type {RequiredQA} from '@join-x5/react-theme';\n\ntype DataGridSettingsContextProps = {\n columns: ColumnData[];\n itemsById: ItemsById;\n areas: ColumnArea[];\n\n setItems: (newItems: ColumnItem[]) => void;\n\n searchItems: ColumnItemId[];\n setSearchItems: (newSearchItems: ColumnItemId[]) => void;\n} & Pick<DataGridSettingsProps, 'setIsOpen' | 'items' | 'defaultItems' | 'onSave'> &\n RequiredQA;\n\nexport const DataGridSettingsContext = createContext<DataGridSettingsContextProps>({\n items: [],\n defaultItems: [],\n areas: [],\n columns: [],\n itemsById: new Map(),\n searchItems: [],\n setSearchItems: () => {},\n\n setIsOpen: () => {},\n setItems: () => {},\n onSave: () => {},\n qa: '',\n});\n","import type {ReactNode} from 'react';\nimport type {QA} from '@join-x5/react-theme';\n\nexport enum ColumnArea {\n /** Не закреплен */\n Default = 'default',\n\n /** Закреплен слева */\n FixedLeft = 'fixedLeft',\n\n /** Закреплен справа */\n FixedRight = 'fixedRight',\n}\n\n/** Идентификатор колонки */\nexport type ColumnItemId = string | number;\n\nexport type ColumnItem = {\n /** Идентификатор */\n id: ColumnItemId;\n\n /** Название\n *\n * Используется при поиске\n */\n name: string;\n\n /** Контент\n *\n * Текстовый контент сокращается через text-overflow: ellipsis\n */\n title: ReactNode;\n\n /** Область элемента */\n area: ColumnArea;\n\n /** Расположение элемента */\n sort: number;\n\n /** Видимость */\n isVisible: boolean;\n\n /** Всегда видим */\n isAlwaysVisible: boolean;\n\n /** Закреплен\n *\n * Сохраняет свою позицию\n */\n isLocked: boolean;\n};\n\nexport type DataGridSettingsProps = {\n /** Раскрыта ли модалка */\n isOpen: boolean;\n\n /** Обработчик раскрытия модалки */\n setIsOpen: (newIsOpen: boolean) => void;\n\n /** Элементы списка */\n items: ColumnItem[];\n\n /** Элементы по умолчанию\n *\n * Используется при нажатии кнопки \"По умолчанию\"\n */\n defaultItems: ColumnItem[];\n\n /** Доступные области\n *\n * По умолчанию [ColumnArea.FixedLeft, ColumnArea.Default]\n */\n areas?: ColumnArea[];\n\n /** Обработчик сохранения изменений */\n onSave: (newItems: ColumnItem[]) => void;\n} & QA;\n\nexport type DataGridSettingsActiveItem = {\n overId?: ColumnItemId;\n isAbove?: boolean;\n} & ColumnItem;\n\nexport type ColumnData = Map<ColumnArea, ColumnItemId[]>;\nexport type ItemsById = Map<ColumnItemId, ColumnItem>;\n","'use client';\n\nimport {useEffect, useRef, useState} from 'react';\nimport styled from '@emotion/styled';\n\nimport {Placement} from '@join-x5/react-theme';\nimport {Tooltip} from '@join-x5/react';\n\nimport type {ColumnItem} from '../types';\n\nconst Container = styled.div<Pick<ColumnItem, 'isVisible'>>`\n flex-grow: 1;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n user-select: none;\n color: ${props => props.theme.colors.grey[props.isVisible ? 100 : 40]};\n\n ${props => props.theme.typography.p1}\n`;\ntype ContentProps = {item: ColumnItem};\n\nexport const Content: React.FC<ContentProps> = ({item: {name, title, isVisible}}) => {\n const [isOverflown, setIsOverflown] = useState<boolean>(false);\n const ref = useRef<HTMLInputElement>(null);\n\n const noTooltip = !isOverflown ? false : undefined;\n\n useEffect(() => {\n if (!ref.current) {\n return;\n }\n\n setIsOverflown(ref.current.scrollWidth > ref.current.clientWidth);\n }, []);\n\n return (\n <Tooltip isPortal placement={Placement.Top} isOpen={noTooltip} content={name}>\n <Container ref={ref} isVisible={isVisible}>\n {title}\n </Container>\n </Tooltip>\n );\n};\n","import styled from '@emotion/styled';\n\nimport {Placement, SizeTokenValue} from '@join-x5/react-theme';\nimport {DragIndicatorVerticalIcon} from '@join-x5/react-icons';\nimport {Tooltip} from '@join-x5/react';\n\nimport type {ColumnItem} from '../types';\n\ntype HandleProps = Pick<ColumnItem, 'isLocked'>;\n\nconst HandleContainer = styled.div<HandleProps>`\n flex-grow: 0;\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n\n color: ${props => props.theme.colors.grey[props.isLocked ? 40 : 60]};\n`;\n\nexport const Handle: React.FC<HandleProps> = ({isLocked}) => {\n const child = (\n <HandleContainer isLocked={isLocked}>\n <DragIndicatorVerticalIcon size={SizeTokenValue.Small} />\n </HandleContainer>\n );\n\n if (!isLocked) {\n return child;\n }\n\n return (\n <Tooltip placement={Placement.Top} content=\"Нельзя открепить столбец\">\n {child}\n </Tooltip>\n );\n};\n","'use client';\n\nimport {useContext} from 'react';\n\nimport {Placement, SizeTokenValue} from '@join-x5/react-theme';\nimport {VisibilityOnIcon, VisibilityOffIcon} from '@join-x5/react-icons';\nimport {ButtonVariant, IconButton} from '@join-x5/react';\n\nimport {DataGridSettingsContext} from '../DataGridSettingsContext';\n\nimport type {MouseEventHandler} from 'react';\nimport type {ColumnItem} from '../types';\n\nexport const Visibility: React.FC<{item: ColumnItem}> = props => {\n const {id, isVisible, isAlwaysVisible} = props.item;\n\n const {items, setItems} = useContext(DataGridSettingsContext);\n\n const toggleVisible: MouseEventHandler = () => {\n if (isAlwaysVisible) {\n return;\n }\n\n setItems(items.map(item => (item.id === id ? {...item, isVisible: !isVisible} : item)));\n };\n\n const Icon = isVisible ? VisibilityOnIcon : VisibilityOffIcon;\n\n const tooltip = {\n placement: Placement.Top,\n content: isAlwaysVisible ? 'Нельзя скрыть' : isVisible ? 'Скрыть столбец' : 'Показать столбец',\n };\n\n return (\n <IconButton\n tooltip={tooltip}\n size={SizeTokenValue.XSmall}\n variant={ButtonVariant.InnerInput}\n disabled={isAlwaysVisible}\n onClick={toggleVisible}\n >\n <Icon size={SizeTokenValue.Small} />\n </IconButton>\n );\n};\n","import {memo} from 'react';\nimport styled from '@emotion/styled';\n\nimport {Content} from './Content';\nimport {Handle} from './Handle';\nimport {Visibility} from './Visibility';\n\nimport type {RefCallback} from 'react';\nimport type {DraggableSyntheticListeners} from '@dnd-kit/core';\nimport type {ColumnItem} from '../types';\n\nconst Container = styled.div`\n display: flex;\n flex-grow: 1;\n overflow: hidden;\n align-items: center;\n justify-content: space-between;\n gap: 4px;\n`;\n\ntype ItemContentProps = {\n item: ColumnItem;\n listeners?: DraggableSyntheticListeners;\n handleRef?: RefCallback<HTMLDivElement>;\n};\n\nexport const ItemContent = memo<ItemContentProps>(({item, listeners, handleRef}) => {\n const handleProps = item.isLocked ? undefined : {...listeners, style: {cursor: 'pointer'}};\n\n return (\n <Container>\n <Visibility item={item} />\n <Container ref={handleRef} {...handleProps}>\n <Content item={item} />\n <Handle isLocked={item.isLocked} />\n </Container>\n </Container>\n );\n});\n","'use client';\n\nimport {useEffect} from 'react';\nimport styled from '@emotion/styled';\nimport {DragOverlay} from '@dnd-kit/core';\nimport {useSortable} from '@dnd-kit/sortable';\n\nimport baseTheme from '@join-x5/react-theme';\n\nimport {ColumnArea} from '../types';\n\nimport {ItemContent} from './ItemContent';\n\nimport type {CSSProperties} from 'react';\nimport type {ColumnItem, ColumnItemId} from '../types';\n\nconst BaseContainer = styled.div`\n position: relative;\n box-sizing: border-box;\n height: 32px;\n padding: 4px;\n border-radius: 4px;\n transform-origin: 0 0;\n touch-action: manipulation;\n`;\n\nconst Placeholder = styled(BaseContainer)`\n transform: translate3d(var(--tx, 0), var(--ty, 0), 0) scaleX(var(--sx, 1)) scaleY(var(--sy, 1));\n background-color: ${props => props.theme.colors.grey[10]};\n`;\n\nconst Dragging = styled(BaseContainer)`\n background-color: ${props => props.theme.colors.white};\n box-shadow: ${baseTheme.shadows.medium};\n pointer-events: none;\n`;\n\nconst Container = styled(BaseContainer)`\n transform: translate3d(var(--tx, 0), var(--ty, 0), 0) scaleX(var(--sx, 1)) scaleY(var(--sy, 1));\n\n :hover {\n background-color: ${props => props.theme.colors.grey[10]};\n }\n\n ::after {\n content: '';\n position: absolute;\n display: none;\n width: 100%;\n height: 2px;\n left: 0;\n background-color: ${props => props.theme.colors.accent[90]};\n }\n\n &[data-is-above]::after {\n display: block;\n top: 1px;\n }\n\n &[data-is-below]::after {\n display: block;\n bottom: 0;\n }\n\n &[data-is-fixed][data-is-above]:first-of-type::after {\n width: calc(100% - 10px);\n top: 2px;\n left: 5px;\n }\n\n &[data-is-fixed][data-is-below]:last-of-type::after {\n width: calc(100% - 10px);\n bottom: 1px;\n left: 5px;\n }\n\n &[data-is-search] {\n background-color: ${props => props.theme.colors.accent[10]};\n }\n`;\n\ntype AreaItemProps = {\n id: ColumnItemId;\n item: ColumnItem;\n isActive: boolean;\n isAbove: boolean;\n isBelow: boolean;\n isSearch: boolean;\n};\n\nexport const AreaItem: React.FC<AreaItemProps> = ({id, item, isActive, isAbove, isBelow, isSearch}) => {\n const {setNodeRef, setActivatorNodeRef, listeners, transform, transition} = useSortable({id});\n\n if (isActive) {\n return <Placeholder ref={setNodeRef} />;\n }\n\n const style: CSSProperties = {transition};\n\n if (transform) {\n style['--tx'] = `${Math.round(transform.x)}px`;\n style['--ty'] = `${Math.round(transform.y)}px`;\n style['--sx'] = `${transform.scaleX}`;\n style['--sy'] = `${transform.scaleY}`;\n }\n\n return (\n <Container\n ref={setNodeRef}\n style={style}\n data-is-fixed={item.area !== ColumnArea.Default || undefined}\n data-is-above={isAbove || undefined}\n data-is-below={isBelow || undefined}\n data-is-search={isSearch || undefined}\n >\n <ItemContent handleRef={setActivatorNodeRef} listeners={listeners} item={item} />\n </Container>\n );\n};\n\nexport const ActiveItemOverlay: React.FC<{item?: ColumnItem}> = ({item}) => {\n const child = !item ? null : (\n <Dragging>\n <ItemContent item={item} />\n </Dragging>\n );\n\n useEffect(() => {\n if (!item) {\n return;\n }\n\n window.document.body.style.cursor = 'grabbing';\n\n return () => {\n window.document.body.style.cursor = '';\n };\n }, [item]);\n\n return <DragOverlay>{child}</DragOverlay>;\n};\n","'use client';\n\nimport {useContext} from 'react';\nimport {SortableContext} from '@dnd-kit/sortable';\n\nimport {DataGridSettingsContext} from '../DataGridSettingsContext';\n\nimport {AreaItem} from './AreaItem';\n\nimport type {ReactNode} from 'react';\nimport type {ColumnItem, ColumnItemId, DataGridSettingsActiveItem} from '../types';\n\ntype GetItem = {\n id: ColumnItemId;\n item: ColumnItem;\n activeItem: DataGridSettingsActiveItem | undefined;\n isSearch: boolean;\n};\n\nconst getItem = ({id, item, isSearch, activeItem}: GetItem) => {\n const props = {\n id,\n item,\n isSearch,\n isActive: false,\n isAbove: false,\n isBelow: false,\n };\n\n if (activeItem) {\n props.isActive = item.id === activeItem.id;\n\n if (item.id === activeItem.overId) {\n props.isAbove = !!activeItem.isAbove;\n props.isBelow = !activeItem.isAbove;\n }\n }\n\n return <AreaItem key={item.id} {...props} />;\n};\n\ntype ItemsProps = {\n itemIds: ColumnItemId[];\n activeItem?: DataGridSettingsActiveItem;\n};\n\nexport const Items: React.FC<ItemsProps> = ({itemIds, activeItem}) => {\n const {itemsById, searchItems} = useContext(DataGridSettingsContext);\n\n const child: ReactNode[] = [];\n const newItemIds: ColumnItemId[] = [];\n\n for (const itemId of itemIds) {\n const item = itemsById.get(itemId);\n if (!item) {\n continue;\n }\n\n const newId = itemId === activeItem?.id ? `${itemId}Placeholder` : itemId;\n const isSearch = searchItems.includes(itemId);\n\n newItemIds.push(newId);\n child.push(getItem({item, activeItem, isSearch, id: newId}));\n }\n\n return <SortableContext items={newItemIds}>{child}</SortableContext>;\n};\n\nexport {ActiveItemOverlay} from './AreaItem';\n","import styled from '@emotion/styled';\nimport {useDroppable} from '@dnd-kit/core';\n\nimport {Placement} from '@join-x5/react-theme';\nimport {Tooltip} from '@join-x5/react';\n\nimport {Items} from '../AreaItem';\nimport {ColumnArea} from '../types';\n\nimport type {ColumnItemId, DataGridSettingsActiveItem, ItemsById} from '../types';\n\nimport type {PropsWithChildren} from '@join-x5/react-theme';\n\nconst Container = styled.div`\n position: relative;\n min-height: 32px;\n`;\n\nconst Content = styled.div`\n min-height: 32px;\n`;\n\nconst Header = styled.div`\n position: relative;\n padding: 6px 8px;\n border-radius: 8px 8px 0 0;\n text-align: center;\n user-select: none;\n z-index: 1;\n\n ${({theme}) => ({\n ...theme.typography.p2,\n\n color: theme.colors.white,\n })}\n`;\n\nconst Placeholder = styled.div`\n padding: 8px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n user-select: none;\n\n ${({theme}) => ({\n ...theme.typography.p2,\n\n color: theme.colors.grey[60],\n })}\n`;\n\nconst FixedContainer = styled.div<{isOver: boolean}>`\n position: relative;\n\n ::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n border-radius: 8px;\n border-width: 2px;\n border-style: dashed;\n pointer-events: none;\n }\n\n ${({theme, isOver}) => {\n return `\n ::after {\n border-color: ${isOver ? theme.colors.accent[80] : theme.colors.grey[60]};\n }\n\n ${Header} {\n background-color: ${isOver ? theme.colors.accent[80] : theme.colors.grey[50]};\n }\n\n ${Placeholder} {\n background-color: ${isOver ? theme.colors.accent[10] : undefined};\n }\n `;\n }}\n`;\n\ntype AreaProps = {\n id: string;\n area: ColumnArea;\n isEmpty: boolean;\n isOverItems: boolean;\n isWithHeader: boolean;\n} & PropsWithChildren;\n\nconst DefaultArea: React.FC<AreaProps> = ({children, id, area}) => {\n const {setNodeRef} = useDroppable({id, data: {area}});\n\n return <Container ref={setNodeRef}>{children}</Container>;\n};\n\nconst FixedArea: React.FC<AreaProps> = ({children, id, area, isEmpty, isOverItems, isWithHeader}) => {\n const {isOver, setNodeRef} = useDroppable({id, data: {area}});\n\n if (isEmpty) {\n const placeholderText = `Перетащите столбец сюда, чтобы\n закрепить его ${area === ColumnArea.FixedLeft ? 'слева' : 'справа'} от таблицы`;\n\n return (\n <FixedContainer ref={setNodeRef} isOver={isOver || isOverItems}>\n <Header hidden={!isWithHeader}>Область для закрепления столбца</Header>\n <Content>\n <Tooltip placement={Placement.Right} content={placeholderText} whiteSpace=\"pre-line\">\n <Placeholder>{placeholderText}</Placeholder>\n </Tooltip>\n </Content>\n </FixedContainer>\n );\n }\n\n return (\n <FixedContainer ref={setNodeRef} isOver={isOver || isOverItems}>\n <Header hidden={!isWithHeader}>Область для закрепления столбца</Header>\n <Content>{children}</Content>\n </FixedContainer>\n );\n};\n\ntype GetArea = {\n columnIndex: number;\n area: ColumnArea;\n itemIds: ColumnItemId[];\n itemsById: ItemsById;\n activeItem: DataGridSettingsActiveItem | undefined;\n searchItems: ColumnItemId[];\n};\n\nexport const getArea = ({columnIndex, area, itemIds, itemsById, activeItem}: GetArea) => {\n const Component = area === ColumnArea.Default ? DefaultArea : FixedArea;\n\n const isWithHeader = area === ColumnArea.FixedLeft && columnIndex === 0;\n const isSingleItemActive = itemIds.length === 1 && itemIds[0] === activeItem?.id;\n const isFixedArea = area !== ColumnArea.Default;\n\n const isEmpty = itemIds.length === 0 || (isSingleItemActive && isFixedArea);\n const isOverItems = itemIds.findIndex(itemId => itemsById.get(itemId)?.id === activeItem?.overId) !== -1;\n\n const props: AreaProps = {\n area,\n isEmpty,\n isOverItems,\n isWithHeader,\n\n id: `${columnIndex}_${area}`,\n };\n\n return (\n <Component key={props.id} {...props}>\n <Items itemIds={itemIds} activeItem={activeItem} />\n </Component>\n );\n};\n","'use client';\n\nimport {useContext, useRef, useState} from 'react';\nimport styled from '@emotion/styled';\n\nimport {SizeTokenValue} from '@join-x5/react-theme';\nimport {SearchInput} from '@join-x5/react';\n\nimport {DataGridSettingsContext} from '../DataGridSettingsContext';\n\nimport type {ChangeEventHandler} from 'react';\nimport type {ColumnItemId} from '../types';\n\nconst Container = styled.div`\n margin-bottom: 16px;\n`;\n\nexport const Search: React.FC = () => {\n const {items, setSearchItems, qa} = useContext(DataGridSettingsContext);\n const [value, setValue] = useState<string>('');\n const inputTimeout = useRef<ReturnType<typeof setTimeout>>();\n\n const onChange: ChangeEventHandler<HTMLInputElement> = e => {\n const newSearchValue = e.target.value.toLowerCase().trim();\n\n clearTimeout(inputTimeout.current);\n setValue(e.target.value);\n\n inputTimeout.current = setTimeout(() => {\n if (!newSearchValue) {\n setSearchItems([]);\n return;\n }\n\n const newSearchItems = items.reduce((acc, item) => {\n if (item.name.toLowerCase().includes(newSearchValue)) {\n acc.push(item.id);\n }\n\n return acc;\n }, [] as ColumnItemId[]);\n\n setSearchItems(newSearchItems);\n }, 100);\n };\n\n return (\n <Container>\n <SearchInput size={SizeTokenValue.Small} value={value} onChange={onChange} label=\"Поиск\" qa={`${qa}-search`} />\n </Container>\n );\n};\n","import {rectIntersection} from '@dnd-kit/core';\n\nimport {ColumnArea} from '../types';\n\nimport type {Active, CollisionDetection, Over} from '@dnd-kit/core';\nimport type {ColumnItem, DataGridSettingsActiveItem, ItemsById} from '../types';\n\nexport const moveItem = (items: ColumnItem[], active: DataGridSettingsActiveItem, over: Over): ColumnItem[] => {\n const areaFactor = {\n [ColumnArea.Default]: 0,\n [ColumnArea.FixedLeft]: -1,\n [ColumnArea.FixedRight]: 1,\n };\n\n let newItems = [...items]\n .sort((a, b) => {\n const aSort = a.sort + items.length * areaFactor[a.area];\n const bSort = b.sort + items.length * areaFactor[b.area];\n\n return aSort - bSort;\n })\n .map((item, sort) => ({...item, sort}));\n\n const overItem = newItems.find(item => item.id === over.id);\n\n if (!overItem) {\n const newArea: ColumnArea | undefined = over.data?.current?.area;\n if (newArea) {\n newItems = newItems.map(item => (item.id === active.id ? {...item, area: newArea} : item));\n }\n\n return newItems;\n }\n\n const newSort = overItem.sort + (active.isAbove ? 0 : 1);\n\n const [relativeItems, fixedItems] = newItems.reduce(\n (acc, item) => {\n acc[+item.isLocked].push(item);\n return acc;\n },\n [[], []] as [ColumnItem[], ColumnItem[]]\n );\n\n newItems = relativeItems.map(item => {\n if (item.id === active.id) {\n return {...item, sort: newSort, area: overItem.area};\n }\n\n if (item.sort >= newSort) {\n return {...item, sort: item.sort + 1};\n }\n\n return item;\n });\n\n newItems.sort((a, b) => a.sort - b.sort);\n\n for (const item of fixedItems) {\n newItems.splice(item.sort, 0, item);\n }\n\n return newItems.map((item, sort) => ({...item, sort}));\n};\n\nexport const moveOver = (itemsById: ItemsById, active: Active, over: Over) => {\n const overItem = itemsById.get(over.id);\n if (!overItem) {\n return {overId: undefined, isAbove: undefined};\n }\n\n const isFirst = over.data?.current?.sortable?.index === 0;\n const offsetTop = active.rect?.current?.translated?.top;\n\n const isAbove = isFirst && !!offsetTop && offsetTop < over.rect?.top;\n\n return {overId: overItem.id, isAbove};\n};\n\nexport const collisionDetection: CollisionDetection = args => {\n const rectResult = rectIntersection(args);\n\n if (rectResult.length === 2) {\n try {\n const sortables = rectResult.filter(item => !!item.data?.droppableContainer?.data?.current?.sortable);\n if (sortables.length === 1) {\n return sortables;\n }\n //eslint-disable-next-line no-empty\n } catch {}\n }\n\n return rectResult;\n};\n","'use client';\n\nimport {MouseSensor, TouchSensor, useSensor, useSensors} from '@dnd-kit/core';\n\nimport {useContext, useState} from 'react';\n\nimport {useUpdateEffect} from '@join-x5/react-theme';\n\nimport {DataGridSettingsContext} from '../DataGridSettingsContext';\n\nimport {moveItem, moveOver, collisionDetection} from './utils';\n\nimport type {DndContextProps} from '@dnd-kit/core';\nimport type {DataGridSettingsActiveItem} from '../types';\n\nexport const useColumns = () => {\n const {columns, items, setItems, itemsById, searchItems} = useContext(DataGridSettingsContext);\n const [activeItem, setActiveItem] = useState<DataGridSettingsActiveItem>();\n const sensors = useSensors(useSensor(MouseSensor), useSensor(TouchSensor));\n\n const onDragCancel = () => {\n setActiveItem(undefined);\n };\n\n const onDragStart: DndContextProps['onDragStart'] = args => {\n const newActiveItem = itemsById.get(args.active.id);\n setActiveItem(newActiveItem);\n };\n\n const onDragMove: DndContextProps['onDragMove'] = ({over, active}) => {\n if (!activeItem || !over) {\n if (activeItem && activeItem.overId !== undefined) {\n setActiveItem({...activeItem, overId: undefined, isAbove: undefined});\n }\n\n return;\n }\n\n const {overId, isAbove} = moveOver(itemsById, active, over);\n\n if (activeItem.overId === overId && activeItem.isAbove === isAbove) {\n return;\n }\n\n setActiveItem({...activeItem, overId, isAbove});\n };\n\n const onDragEnd: DndContextProps['onDragEnd'] = ({over}) => {\n if (!activeItem || !over) {\n if (activeItem) {\n setActiveItem(undefined);\n }\n\n return;\n }\n\n setActiveItem(undefined);\n setItems(moveItem(items, activeItem, over));\n };\n\n useUpdateEffect(() => {\n setActiveItem(undefined);\n }, [items]);\n\n return {\n columns,\n itemsById,\n searchItems,\n activeItem,\n sensors,\n onDragStart,\n onDragMove,\n onDragEnd,\n onDragCancel,\n collisionDetection,\n };\n};\n","import styled from '@emotion/styled';\nimport {DndContext} from '@dnd-kit/core';\n\nimport {ModalContent as BaseModalContent} from '@join-x5/react';\n\nimport {getArea} from '../Area';\nimport {ActiveItemOverlay} from '../AreaItem';\nimport {Search} from '../Search';\n\nimport {useColumns} from './hook';\n\nimport type {ReactNode} from 'react';\n\nconst ModalContent = styled(BaseModalContent)`\n padding: 0 24px 16px;\n`;\n\nconst Container = styled.div`\n display: flex;\n margin-left: -32px;\n\n > div {\n display: flex;\n position: relative;\n flex-direction: column;\n gap: 4px;\n box-sizing: border-box;\n padding-left: 32px;\n\n ::after {\n content: '';\n position: absolute;\n width: 0;\n height: 100%;\n top: 0;\n left: 16px;\n border-left: 1px solid ${props => props.theme.colors.grey[10]};\n }\n\n :first-of-type::after {\n display: none;\n }\n }\n`;\n\nexport const Columns: React.FC = () => {\n const {columns, itemsById, searchItems, activeItem, ...rest} = useColumns();\n\n const child = columns.map((column, columnIndex) => {\n const areas: ReactNode[] = Array.from(column).map(([area, itemIds]) =>\n getArea({columnIndex, area, itemIds, itemsById, searchItems, activeItem})\n );\n\n const width = `calc(${100 / columns.length}%)`;\n\n return (\n <div key={columnIndex} style={{width}}>\n {areas}\n </div>\n );\n });\n\n return (\n <ModalContent noBorderScroll>\n <Search />\n <DndContext id=\"DataGridSettings\" {...rest}>\n <Container>{child}</Container>\n <ActiveItemOverlay item={activeItem} />\n </DndContext>\n </ModalContent>\n );\n};\n","'use client';\n\nimport {useContext, useRef, useState} from 'react';\nimport styled from '@emotion/styled';\n\nimport {Placement, SizeTokenValue} from '@join-x5/react-theme';\nimport {\n Button,\n ButtonVariant,\n IconButton,\n ModalFooterContent,\n Dropdown,\n DropdownContent as BaseDropdownContent,\n} from '@join-x5/react';\n\nimport {MoreHorizontalIcon} from '@join-x5/react-icons';\n\nimport {DataGridSettingsContext} from '../DataGridSettingsContext';\n\nimport type {RequiredQA} from '@join-x5/react-theme';\n\nconst DropdownContent = styled(BaseDropdownContent)`\n overflow: hidden;\n`;\n\nconst DropdownButton = styled.button`\n width: 100%;\n padding: 6px 12px;\n border: 0;\n outline: none;\n background: none;\n text-align: left;\n cursor: pointer;\n\n ${props => props.theme.typography.p1compact}\n\n :hover {\n background-color: ${props => props.theme.colors.grey[10]};\n }\n`;\n\ntype DropdownButtonsProps = {\n isAllVisible: boolean;\n onReset: () => void;\n onToggleVisible: () => void;\n} & RequiredQA;\n\nconst DropdownButtons: React.FC<DropdownButtonsProps> = ({isAllVisible, qa, ...props}) => {\n const [isOpen, setIsOpen] = useState(false);\n const ref = useRef<HTMLButtonElement>(null);\n\n const onToggle = () => setIsOpen(!isOpen);\n\n const onReset = () => {\n setIsOpen(false);\n props.onReset();\n };\n\n const onToggleVisible = () => {\n setIsOpen(false);\n props.onToggleVisible();\n };\n\n return (\n <ModalFooterContent>\n <IconButton\n ref={ref}\n size={SizeTokenValue.Small}\n variant={ButtonVariant.InnerInput}\n onClick={onToggle}\n qa={`${qa}-footer-dropdown`}\n >\n <MoreHorizontalIcon size={SizeTokenValue.Small} />\n </IconButton>\n <Dropdown width=\"152px\" placement={Placement.TopStart} isOpen={isOpen} setIsOpen={setIsOpen} targetRef={ref}>\n <DropdownContent>\n <DropdownButton type=\"button\" onClick={onReset} data-qa={`${qa}-reset`}>\n По умолчанию\n </DropdownButton>\n <DropdownButton type=\"button\" onClick={onToggleVisible} data-qa={`${qa}-toggle-visible`}>\n {isAllVisible ? 'Скрыть все' : 'Показать все'}\n </DropdownButton>\n </DropdownContent>\n </Dropdown>\n </ModalFooterContent>\n );\n};\n\nexport const LeftButtons: React.FC = () => {\n const {items, defaultItems, setItems, columns, qa} = useContext(DataGridSettingsContext);\n\n const isAllVisible = items.findIndex(item => !item.isVisible) === -1;\n\n const onReset = () => setItems(defaultItems);\n\n const onToggleVisible = () => {\n const newItems = items.map(item => ({...item, isVisible: item.isAlwaysVisible || !isAllVisible}));\n\n setItems(newItems);\n };\n\n if (columns.length === 1) {\n return <DropdownButtons isAllVisible={isAllVisible} onReset={onReset} onToggleVisible={onToggleVisible} qa={qa} />;\n }\n\n return (\n <ModalFooterContent>\n <Button size={SizeTokenValue.Small} variant={ButtonVariant.Ghost} onClick={onReset} qa={`${qa}-reset`}>\n По умолчанию\n </Button>\n <Button\n size={SizeTokenValue.Small}\n variant={ButtonVariant.Ghost}\n onClick={onToggleVisible}\n qa={`${qa}-toggle-visible`}\n >\n {isAllVisible ? 'Скрыть все' : 'Показать все'}\n </Button>\n </ModalFooterContent>\n );\n};\n","'use client';\n\nimport {useContext} from 'react';\nimport styled from '@emotion/styled';\n\nimport {SizeTokenValue} from '@join-x5/react-theme';\nimport {Button, ButtonVariant, ModalFooter as BaseModalFooter, ModalFooterContent} from '@join-x5/react';\n\nimport {DataGridSettingsContext} from '../DataGridSettingsContext';\n\nimport {LeftButtons} from './LeftButtons';\n\nconst ModalFooter = styled(BaseModalFooter)`\n padding: 20px 24px 20px 16px;\n border-top: 1px solid ${props => props.theme.colors.grey[20]};\n`;\n\nexport const Footer: React.FC = () => {\n const context = useContext(DataGridSettingsContext);\n const {items, setIsOpen, qa} = context;\n\n const onClose = () => setIsOpen(false);\n const onSave = () => context.onSave(items);\n\n return (\n <ModalFooter>\n <LeftButtons />\n <ModalFooterContent>\n <Button size={SizeTokenValue.Small} variant={ButtonVariant.Outlined} onClick={onClose} qa={`${qa}-cancel`}>\n Отменить\n </Button>\n <Button size={SizeTokenValue.Small} variant={ButtonVariant.Primary} onClick={onSave} qa={`${qa}-save`}>\n Применить\n </Button>\n </ModalFooterContent>\n </ModalFooter>\n );\n};\n","import {SizeTokenValue} from '@join-x5/react-theme';\n\nimport {ColumnArea} from './types';\n\nimport type {ColumnData, ColumnItem, ItemsById} from './types';\n\nexport const getColumnsData = (items: ColumnItem[], areas: ColumnArea[]) => {\n const columns: ColumnData[] = [];\n const itemsById: ItemsById = new Map();\n\n const areaFactor = {\n [ColumnArea.Default]: 0,\n [ColumnArea.FixedLeft]: -1,\n [ColumnArea.FixedRight]: 1,\n };\n\n const sortedItems = [...items].sort((a, b) => {\n const aSort = a.sort + items.length * areaFactor[a.area];\n const bSort = b.sort + items.length * areaFactor[b.area];\n\n return aSort - bSort;\n });\n\n const withFixedLeft = areas.includes(ColumnArea.FixedLeft);\n const withFixedRight = areas.includes(ColumnArea.FixedRight);\n\n const itemsInColumn = (() => {\n const ITEMS_IN_COLUMN = 15;\n const COLUMNS_MAX = 4;\n\n const rem = Math.ceil(items.length / ITEMS_IN_COLUMN);\n const columnsCount = rem > COLUMNS_MAX ? COLUMNS_MAX : rem;\n\n const result = Math.ceil(items.length / columnsCount);\n\n return (result > ITEMS_IN_COLUMN ? result : ITEMS_IN_COLUMN) + (withFixedLeft || withFixedRight ? 1 : 0);\n })();\n\n while (sortedItems.length > 0) {\n const isFirstColumn = columns.length === 0;\n\n const hasFixedLeftArea = isFirstColumn && withFixedLeft;\n const hasFixedLeftItems = sortedItems[0]?.area === ColumnArea.FixedLeft;\n\n const newItemsInColumn = itemsInColumn - (hasFixedLeftArea ? 2 - +hasFixedLeftItems : 0);\n const columnItems = sortedItems.splice(0, newItemsInColumn);\n\n const hasFixedRightArea = sortedItems.length === 0 && withFixedRight;\n const hasFixedRightItems = columnItems.findIndex(item => item.area === ColumnArea.FixedRight) !== -1;\n\n const column: ColumnData = new Map();\n\n if (hasFixedLeftArea || hasFixedLeftItems) {\n column.set(ColumnArea.FixedLeft, []);\n }\n\n column.set(ColumnArea.Default, []);\n\n if (hasFixedRightArea || hasFixedRightItems) {\n column.set(ColumnArea.FixedRight, []);\n }\n\n for (const columnItem of columnItems) {\n const area = column.get(columnItem.area);\n if (!area) {\n continue;\n }\n\n itemsById.set(columnItem.id, columnItem);\n area.push(columnItem.id);\n }\n\n const defaultAreaIsEmpty = column.get(ColumnArea.Default)?.length === 0;\n\n if (defaultAreaIsEmpty) {\n column.delete(ColumnArea.Default);\n }\n\n columns.push(column);\n }\n\n const noDefaultColumnAdded = columns.findIndex(column => column.has(ColumnArea.Default)) === -1;\n if (noDefaultColumnAdded && columns.length) {\n const fixedRightIndex = columns.findIndex(column => column.has(ColumnArea.FixedRight));\n\n if (fixedRightIndex !== -1) {\n const columnAreas = columns[fixedRightIndex];\n const rightItems = columnAreas.get(ColumnArea.FixedRight);\n\n if (rightItems) {\n columnAreas.delete(ColumnArea.FixedRight);\n columnAreas.set(ColumnArea.Default, []);\n columnAreas.set(ColumnArea.FixedRight, rightItems);\n } else {\n columnAreas.set(ColumnArea.Default, []);\n }\n } else {\n columns[columns.length - 1].set(ColumnArea.Default, []);\n }\n }\n\n const size = ((): SizeTokenValue => {\n switch (columns.length) {\n case 1:\n return SizeTokenValue.Small;\n case 2:\n return SizeTokenValue.Medium;\n case 3:\n return SizeTokenValue.Large;\n }\n\n return SizeTokenValue.XLarge;\n })();\n\n return {columns, itemsById, size};\n};\n","'use client';\n\nimport {useMemo, useState} from 'react';\n\nimport {useUpdateEffect} from '@join-x5/react-theme';\nimport {Modal, ModalHeader} from '@join-x5/react';\n\nimport {Columns} from './Columns';\nimport {Footer} from './Footer';\nimport {DataGridSettingsContext} from './DataGridSettingsContext';\nimport {getColumnsData} from './utils';\nimport {ColumnArea} from './types';\n\nimport type {ColumnItem, ColumnItemId, DataGridSettingsProps} from './types';\n\nexport const DataGridSettings: React.FC<DataGridSettingsProps> = props => {\n const {\n isOpen,\n\n qa = 'datagridsettings',\n areas = [ColumnArea.FixedLeft, ColumnArea.Default],\n\n ...rest\n } = props;\n\n const [items, setItems] = useState<ColumnItem[]>(props.items);\n const [searchItems, setSearchItems] = useState<ColumnItemId[]>([]);\n\n const {columns, itemsById, size} = useMemo(() => getColumnsData(items, areas), [items, areas]);\n\n const context = {...rest, columns, itemsById, areas, items, setItems, searchItems, setSearchItems, qa};\n\n const onClose = () => props.setIsOpen(false);\n\n useUpdateEffect(() => {\n setItems(props.items);\n }, [props.items]);\n\n useUpdateEffect(() => {\n if (!isOpen) {\n setTimeout(() => setSearchItems([]));\n }\n }, [isOpen]);\n\n const modalProps = {isOpen, onClose, qa, size};\n\n return (\n <Modal {...modalProps}>\n <ModalHeader onClose={onClose}>Настройка таблицы</ModalHeader>\n <DataGridSettingsContext.Provider value={context}>\n <Columns />\n <Footer />\n </DataGridSettingsContext.Provider>\n </Modal>\n );\n};\n"],"names":["DataGridSettingsContext","createContext","items","defaultItems","areas","columns","itemsById","Map","searchItems","setSearchItems","setIsOpen","setItems","onSave","qa","ColumnArea","Default","FixedLeft","FixedRight","Container","_styled","process","env","NODE_ENV","target","label","props","theme","colors","grey","isVisible","typography","p1","Content","item","name","title","isOverflown","setIsOverflown","useState","ref","useRef","noTooltip","undefined","useEffect","current","scrollWidth","clientWidth","Tooltip","Placement","Top","jsx","HandleContainer","isLocked","Handle","child","DragIndicatorVerticalIcon","SizeTokenValue","Small","Visibility","id","isAlwaysVisible","useContext","toggleVisible","map","Icon","VisibilityOnIcon","VisibilityOffIcon","tooltip","placement","content","IconButton","XSmall","ButtonVariant","InnerInput","styles","toString","_EMOTION_STRINGIFIED_CSS_ERROR__","ItemContent","memo","listeners","handleRef","handleProps","style","cursor","jsxs","BaseContainer","Placeholder","Dragging","white","baseTheme","shadows","medium","accent","AreaItem","isActive","isAbove","isBelow","isSearch","setNodeRef","setActivatorNodeRef","transform","transition","useSortable","Math","round","x","y","scaleX","scaleY","area","ActiveItemOverlay","document","body","DragOverlay","getItem","activeItem","overId","Items","itemIds","newItemIds","itemId","get","newId","includes","push","SortableContext","Header","p2","color","FixedContainer","isOver","DefaultArea","children","useDroppable","data","FixedArea","isEmpty","isOverItems","isWithHeader","placeholderText","Right","getArea","columnIndex","Component","isSingleItemActive","length","isFixedArea","findIndex","Search","value","setValue","inputTimeout","onChange","e","newSearchValue","toLowerCase","trim","clearTimeout","setTimeout","newSearchItems","reduce","acc","SearchInput","moveItem","active","over","areaFactor","newItems","sort","a","b","aSort","bSort","overItem","find","newArea","newSort","relativeItems","fixedItems","splice","moveOver","isFirst","sortable","index","offsetTop","rect","translated","top","collisionDetection","args","rectResult","rectIntersection","sortables","filter","droppableContainer","useColumns","setActiveItem","sensors","useSensors","useSensor","MouseSensor","TouchSensor","onDragCancel","onDragStart","newActiveItem","onDragMove","onDragEnd","useUpdateEffect","ModalContent","BaseModalContent","Columns","rest","column","Array","from","width","DndContext","DropdownContent","BaseDropdownContent","DropdownButton","p1compact","DropdownButtons","isAllVisible","isOpen","onToggle","onReset","onToggleVisible","ModalFooterContent","MoreHorizontalIcon","Dropdown","TopStart","LeftButtons","Button","Ghost","ModalFooter","BaseModalFooter","Footer","context","onClose","Outlined","Primary","getColumnsData","sortedItems","withFixedLeft","withFixedRight","itemsInColumn","rem","ceil","ITEMS_IN_COLUMN","columnsCount","COLUMNS_MAX","result","hasFixedLeftArea","hasFixedLeftItems","newItemsInColumn","columnItems","hasFixedRightArea","hasFixedRightItems","set","columnItem","delete","noDefaultColumnAdded","has","fixedRightIndex","columnAreas","rightItems","size","Medium","Large","XLarge","DataGridSettings","useMemo","modalProps","Modal","ModalHeader"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@join-x5/react-data-grid-settings",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"private": false,
|
|
5
|
-
"homepage": "
|
|
5
|
+
"homepage": "",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "dist/index.cjs",
|
|
8
8
|
"module": "dist/index.es.js",
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"files": [
|
|
11
11
|
"dist"
|
|
12
12
|
],
|
|
13
|
+
|
|
13
14
|
"scripts": {
|
|
14
15
|
"build": "tsc --noEmit && vite build",
|
|
15
16
|
"lint": "eslint src --ignore-pattern \"**/*.stories.tsx\""
|
|
@@ -17,18 +18,19 @@
|
|
|
17
18
|
"devDependencies": {
|
|
18
19
|
"@emotion/babel-plugin": "^11.13.5",
|
|
19
20
|
"@eslint/js": "^9.3.0",
|
|
20
|
-
"@laynezh/vite-plugin-lib-assets": "^0.
|
|
21
|
+
"@laynezh/vite-plugin-lib-assets": "^1.0.0",
|
|
22
|
+
"@stylistic/eslint-plugin": "^3.0.1",
|
|
21
23
|
"@types/react": "^18.3.11",
|
|
22
24
|
"@types/react-dom": "^18.3.0",
|
|
23
25
|
"@types/react-window": "^1.8.8",
|
|
24
26
|
"@vitejs/plugin-react": "^4.3.2",
|
|
25
|
-
"eslint": "^
|
|
26
|
-
"eslint-config-prettier": "^
|
|
27
|
+
"eslint": "^9.19.0",
|
|
28
|
+
"eslint-config-prettier": "^10.0.1",
|
|
27
29
|
"eslint-import-resolver-typescript": "^3.6.3",
|
|
28
30
|
"eslint-plugin-import": "^2.31.0",
|
|
29
31
|
"eslint-plugin-prettier": "^5.2.1",
|
|
30
32
|
"eslint-plugin-react": "^7.34.1",
|
|
31
|
-
"eslint-plugin-react-hooks": "^
|
|
33
|
+
"eslint-plugin-react-hooks": "^5.1.0",
|
|
32
34
|
"eslint-plugin-workspaces": "^0.10.1",
|
|
33
35
|
"jsdom": "^25.0.1",
|
|
34
36
|
"prettier": "3.3.3",
|
|
@@ -36,29 +38,28 @@
|
|
|
36
38
|
"react-dom": "^18.3.1",
|
|
37
39
|
"rollup-plugin-peer-deps-external": "^2.2.4",
|
|
38
40
|
"rollup-plugin-preserve-directives": "^0.4.0",
|
|
39
|
-
"typescript": "^5.
|
|
40
|
-
"typescript-eslint": "^
|
|
41
|
+
"typescript": "^5.7.3",
|
|
42
|
+
"typescript-eslint": "^8.23.0",
|
|
41
43
|
"vite": "^5.4.8",
|
|
42
44
|
"vite-plugin-dts": "^4.2.4",
|
|
43
45
|
"vite-tsconfig-paths": "^5.0.1"
|
|
44
46
|
},
|
|
45
47
|
"dependencies": {
|
|
46
|
-
"@join-x5/react": "1.0.0-rc",
|
|
47
|
-
"@join-x5/react-theme": "1.0.0-rc",
|
|
48
|
-
"@join-x5/react-icons": "1.0.0-rc",
|
|
49
|
-
"@emotion/react": "^11.11.4",
|
|
50
|
-
"@emotion/styled": "^11.11.5",
|
|
51
48
|
"@dnd-kit/core": "^6.2.0",
|
|
52
|
-
"@dnd-kit/sortable": "^
|
|
49
|
+
"@dnd-kit/sortable": "^10.0.0",
|
|
50
|
+
"@emotion/react": "^11.14.0",
|
|
51
|
+
"@emotion/styled": "^11.14.0",
|
|
52
|
+
"@join-x5/react": "1.0.1",
|
|
53
|
+
"@join-x5/react-icons": "1.0.1",
|
|
54
|
+
"@join-x5/react-theme": "1.0.1"
|
|
53
55
|
},
|
|
54
56
|
"peerDependencies": {
|
|
55
|
-
"@join-x5/react": "1.0.0-rc",
|
|
56
|
-
"@join-x5/react-theme": "1.0.0-rc",
|
|
57
|
-
"@join-x5/react-icons": "1.0.0-rc",
|
|
58
|
-
"@emotion/react": "^11.11.4",
|
|
59
|
-
"@emotion/styled": "^11.11.5",
|
|
60
57
|
"@dnd-kit/core": "^6.2.0",
|
|
61
|
-
"@
|
|
58
|
+
"@emotion/react": "^11.14.0",
|
|
59
|
+
"@emotion/styled": "^11.14.0",
|
|
60
|
+
"@join-x5/react": "1.0.1",
|
|
61
|
+
"@join-x5/react-icons": "1.0.1",
|
|
62
|
+
"@join-x5/react-theme": "1.0.1",
|
|
62
63
|
"react": ">=17.0.0",
|
|
63
64
|
"react-dom": ">=17.0.0"
|
|
64
65
|
}
|