dinocollab-core 2.2.21 → 2.2.23

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.
Files changed (32) hide show
  1. package/dist/filter-bar/index.js +1 -1
  2. package/dist/src/data-surface/index.create.js.map +1 -1
  3. package/dist/src/data-surface/view-grid/styleds.js +1 -1
  4. package/dist/src/data-surface/view-grid/styleds.js.map +1 -1
  5. package/dist/src/data-surface/view-list/index.js +1 -1
  6. package/dist/src/data-surface/view-list/index.js.map +1 -1
  7. package/dist/src/data-surface/view-list/styled.js +1 -1
  8. package/dist/src/data-surface/view-list/styled.js.map +1 -1
  9. package/dist/src/filter-bar/components/chip-viewer.js +1 -1
  10. package/dist/src/filter-bar/components/chip-viewer.js.map +1 -1
  11. package/dist/src/filter-bar/components/filter-summary.js +1 -1
  12. package/dist/src/filter-bar/components/filter-summary.js.map +1 -1
  13. package/dist/src/filter-bar/convert-to-graphql.js +1 -1
  14. package/dist/src/filter-bar/convert-to-graphql.js.map +1 -1
  15. package/dist/src/filter-bar/hooks.js +1 -1
  16. package/dist/src/filter-bar/hooks.js.map +1 -1
  17. package/dist/src/filter-bar/index.create.js +1 -1
  18. package/dist/src/filter-bar/index.create.js.map +1 -1
  19. package/dist/src/filter-bar/menu/create-form-field-string.js +1 -1
  20. package/dist/src/filter-bar/menu/create-form-field-string.js.map +1 -1
  21. package/dist/src/filter-bar/menu/create.js +1 -1
  22. package/dist/src/filter-bar/menu/create.js.map +1 -1
  23. package/dist/src/http-service/graphql/request-param.js +1 -1
  24. package/dist/src/http-service/graphql/request-param.js.map +1 -1
  25. package/dist/types/filter-bar/components/chip-viewer.d.ts +1 -0
  26. package/dist/types/filter-bar/convert-to-graphql.d.ts +6 -5
  27. package/dist/types/filter-bar/hooks.d.ts +16 -0
  28. package/dist/types/filter-bar/index.create.d.ts +2 -1
  29. package/dist/types/filter-bar/index.d.ts +1 -0
  30. package/dist/types/filter-bar/menu/types.d.ts +9 -1
  31. package/dist/types/http-service/graphql/request-param.d.ts +3 -0
  32. package/package.json +1 -1
@@ -1,2 +1,2 @@
1
- export{KeySpecial}from"../src/filter-bar/types.js";export{createFilterBar}from"../src/filter-bar/index.create.js";export{HintIcon,HintList,createHintIcon}from"../src/filter-bar/components/hint-icon.js";export{TableFileterConverter,createConvertToGraphQL,mapLogic,mapSortDirection}from"../src/filter-bar/convert-to-graphql.js";export{LocalFilterBuilder,createLocalFilterBuilder}from"../src/filter-bar/local-filter-builder.js";export{DinoFilterBar,dinoFilterBar}from"../src/filter-bar/index.dino.js";export{createFormFieldDateTime,formatterDateTime}from"../src/filter-bar/menu/create-form-field-datetime.js";
1
+ export{KeySpecial}from"../src/filter-bar/types.js";export{createFilterBar}from"../src/filter-bar/index.create.js";export{HintIcon,HintList,createHintIcon}from"../src/filter-bar/components/hint-icon.js";export{TableFileterConverter,createConvertToGraphQL,mapLogic,mapSortDirection}from"../src/filter-bar/convert-to-graphql.js";export{LocalFilterBuilder,createLocalFilterBuilder}from"../src/filter-bar/local-filter-builder.js";export{DinoFilterBar,dinoFilterBar}from"../src/filter-bar/index.dino.js";export{createFormFieldDateTime,formatterDateTime}from"../src/filter-bar/menu/create-form-field-datetime.js";export{mergeSingleValueToStoreFilter,mergeValueToStoreFilter}from"../src/filter-bar/hooks.js";
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.create.js","sources":["../../../src/data-surface/index.create.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { Box, styled } from '@mui/material'\r\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\r\nimport { DataSurfaceViewMode, LoadingModeRule, DataSurfaceFeatureMode } from './types'\r\nimport { createViewList, createViewListLoading } from './view-list'\r\nimport { createViewGrid, createViewGridLoading } from './view-grid'\r\nimport { createViewSwitchTransition } from './view-switch-transition'\r\nimport { PanelInfiniteScrollFooter, PanelLoadMore, PanelLoading, PanelNoData, PanelPaginationFooter } from './ui.units'\r\n// types\r\nimport type { BoxProps } from '@mui/material'\r\nimport type { ComponentType, FC } from 'react'\r\nimport type { IViewGridLoadingProps } from './view-grid'\r\nimport type { IViewGridConfig, IViewGridProps } from './view-grid/types'\r\nimport type { TPagination, TDataSurfaceState, TRenderableNode } from './types'\r\nimport type { IViewListConfig, IViewListLoadingProps, IViewListProps } from './view-list'\r\n\r\nexport interface IDataSurfaceSlots<T> {\r\n listViewProps?: IViewListProps<T>\r\n gridViewProps?: IViewGridProps<T>\r\n /** Custom loading component. If not provided, a default loading component will be used. */\r\n PanelLoading?: ComponentType<{ viewMode: DataSurfaceViewMode }>\r\n /** Custom no data component. If not provided, a default no data component will be used. */\r\n PanelNoData?: ComponentType<{ viewMode: DataSurfaceViewMode }>\r\n /** Custom load more component for infinite scroll mode. If not provided, a default loading indicator will be shown when fetching the next page. */\r\n PanelLoadMore?: ComponentType\r\n footer?: {\r\n status?: TRenderableNode\r\n range?: TRenderableNode\r\n }\r\n}\r\n\r\nexport interface IDataSurfaceProps<T> {\r\n value?: T[]\r\n /**\r\n * @deprecated No longer used. Use `viewMode` and `loadMode` props directly instead.\r\n * Controlled state. When provided, DataSurface becomes fully controlled.\r\n */\r\n state?: TDataSurfaceState\r\n /**\r\n * @deprecated No longer used. Component now uses uncontrolled mode with props.\r\n * Called on any state change (viewMode, loadMode, page, pageSize).\r\n */\r\n onStateChange?: (state: TDataSurfaceState) => void\r\n viewMode?: DataSurfaceViewMode\r\n /** Pagination metadata shared by both modes. */\r\n pagination?: TPagination\r\n /** Default page size. @default 20 */\r\n defaultPageSize?: number\r\n /** True while a page fetch is in flight (shows loading indicator). */\r\n loading?: boolean\r\n /**\r\n * Called when the component needs a new page of data.\r\n * - pagination mode: triggered by user clicking page control\r\n * - infiniteScroll mode: triggered automatically when scrolling near the bottom\r\n * Supports async operations - return a Promise to indicate loading state.\r\n */\r\n onPageChange?: (page: number, pageSize: number) => void | Promise<void>\r\n /** Load orchestration mode. @default 'pagination' */\r\n loadMode?: LoadingModeRule\r\n sx?: BoxProps['sx']\r\n slots?: IDataSurfaceSlots<T>\r\n /** Enable row selection with checkboxes (List view only). */\r\n selectable?: boolean\r\n /** Array of selected row IDs (List view only). */\r\n selectedIds?: (string | number)[]\r\n /** Callback when selection changes (List view only). */\r\n onSelectionChange?: (selectedIds: (string | number)[]) => void\r\n}\r\n\r\nexport interface IDataSurfaceConfig<T> {\r\n /** Feature mode determines the internal optimizations and rendering strategies. @default 'client' */\r\n featureMode?: DataSurfaceFeatureMode\r\n /** Default view mode when not provided via props. @default 'grid' */\r\n defaultViewMode?: DataSurfaceViewMode\r\n /** Default load mode when not provided via props. @default 'pagination' */\r\n defaultLoadMode?: LoadingModeRule\r\n /** Default page size. @default 20 */\r\n defaultPageSize?: number\r\n /** Configuration for List view. If not provided, List view will use default settings. */\r\n listConfig?: IViewListConfig<T>\r\n /** Custom List component. If not provided, a default List component will be used. */\r\n ListComponent?: ComponentType<IViewListProps<T>>\r\n /** Configuration for Grid view. If not provided, Grid view will use default settings. */\r\n gridConfig?: IViewGridConfig<T>\r\n /** Custom Grid component. If not provided, a default Grid component will be used. */\r\n GridComponent?: ComponentType<IViewGridProps<T>>\r\n /** Custom loading component. If not provided, a default loading component will be used. */\r\n PanelLoading?: ComponentType<{ viewMode: DataSurfaceViewMode }>\r\n /** Custom no data component. If not provided, a default no data component will be used. */\r\n PanelNoData?: ComponentType<{ viewMode: DataSurfaceViewMode }>\r\n /** Custom load more component for infinite scroll mode. If not provided, a default loading indicator will be shown when fetching the next page. */\r\n PanelLoadMore?: ComponentType\r\n}\r\n\r\nexport function createDataSurface<T>(config: IDataSurfaceConfig<T>) {\r\n if (!config.GridComponent) {\r\n const configInput: IViewGridConfig<T> = config.gridConfig || { getterId: (item: T, index: number) => index }\r\n config.gridConfig = configInput\r\n config.GridComponent = createViewGrid<T>(configInput)\r\n }\r\n\r\n if (!config.ListComponent) {\r\n const configInput: IViewListConfig<T> = config.listConfig || { getterId: (item: T, index: number) => index }\r\n config.listConfig = configInput\r\n config.ListComponent = createViewList<T>(configInput)\r\n }\r\n\r\n const { defaultViewMode = 'grid', defaultLoadMode = 'pagination', featureMode = 'client' } = config\r\n const ViewSwitchTranstionInstance = createViewSwitchTransition<DataSurfaceViewMode>({})\r\n const GridLoadingComponent = createViewGridLoading<T>(config.GridComponent as ComponentType<IViewGridProps<T>>)\r\n const ListLoadingComponent = createViewListLoading<T>(config.ListComponent as ComponentType<IViewListProps<T>>)\r\n\r\n const DataSurface: FC<IDataSurfaceProps<T>> = (props) => {\r\n const slots = props.slots || {}\r\n const defaultPageSize = props.pagination?.pageSize ?? config.defaultPageSize ?? 20\r\n // separate pagination state\r\n const [internalPagination, setInternalPagination] = useState<TPagination>({ page: 0, pageSize: defaultPageSize })\r\n\r\n // resolved pagination: external takes priority over internal\r\n const paginationState = useMemo<TPagination>(() => {\r\n const p = props.pagination ?? internalPagination\r\n return {\r\n page: p.page ?? 0,\r\n pageSize: p.pageSize ?? defaultPageSize,\r\n hasNext: p.hasNext ?? false,\r\n hasPrev: p.hasPrev ?? false,\r\n total: p.total\r\n }\r\n }, [props.pagination, internalPagination])\r\n\r\n const viewMode = props.viewMode ?? defaultViewMode\r\n const loadMode = props.loadMode ?? defaultLoadMode\r\n\r\n // Determine renderStrategy based on current viewMode\r\n const renderStrategy = useMemo(() => {\r\n if (viewMode === 'grid') {\r\n return config.gridConfig?.renderStrategy ?? 'normal'\r\n }\r\n return config.listConfig?.renderStrategy ?? 'normal'\r\n }, [viewMode])\r\n\r\n const handlePrevPage = useCallback(async () => {\r\n const currentPage = paginationState.page ?? 0\r\n if (currentPage <= 0) return\r\n const prevPage = currentPage - 1\r\n if (!props.pagination) {\r\n setInternalPagination((prev) => ({ ...prev, page: prevPage }))\r\n }\r\n await props.onPageChange?.(prevPage, paginationState.pageSize ?? defaultPageSize)\r\n }, [paginationState.page, paginationState.pageSize, props.pagination, props.onPageChange])\r\n\r\n const handleNextPage = useCallback(async () => {\r\n if (!paginationState.hasNext) return\r\n const currentPage = paginationState.page ?? 0\r\n const nextPage = currentPage + 1\r\n if (!props.pagination) {\r\n setInternalPagination((prev) => ({ ...prev, page: nextPage }))\r\n }\r\n await props.onPageChange?.(nextPage, paginationState.pageSize ?? defaultPageSize)\r\n }, [paginationState.hasNext, paginationState.page, paginationState.pageSize, props.pagination, props.onPageChange])\r\n\r\n const handlePageJump = useCallback(\r\n async (targetPage: number) => {\r\n if (targetPage < 0) return\r\n if (!props.pagination) {\r\n setInternalPagination((prev) => ({ ...prev, page: targetPage }))\r\n }\r\n await props.onPageChange?.(targetPage, paginationState.pageSize ?? defaultPageSize)\r\n },\r\n [paginationState.pageSize, props.pagination, props.onPageChange]\r\n )\r\n\r\n const finalValue = props.value || []\r\n\r\n // Token changes whenever props.value reference changes — used to reset scroll in views (client mode only)\r\n const scrollResetToken = featureMode === 'client' ? props.value : undefined\r\n\r\n // Reset page to 0 when the data source changes (e.g. new filtered array passed in) — client mode only\r\n useEffect(() => {\r\n if (featureMode === 'client' && !props.pagination) {\r\n setInternalPagination((prev) => ({ ...prev, page: 0 }))\r\n }\r\n }, [props.value])\r\n\r\n // When running in client feature mode, derive pagination metadata from the full value\r\n const derivedPagination = useMemo<TPagination>(() => {\r\n const page = paginationState.page ?? 0\r\n const pageSize = paginationState.pageSize ?? defaultPageSize\r\n if (featureMode === 'client') {\r\n const total = finalValue.length\r\n const hasNext = pageSize * (page + 1) < total\r\n const hasPrev = page > 0\r\n return { page, pageSize, hasNext, hasPrev, total }\r\n }\r\n return paginationState\r\n }, [paginationState, finalValue.length, featureMode, defaultPageSize])\r\n\r\n // Slice the input value when client-side pagination is enabled\r\n const paginatedValue = useMemo(() => {\r\n if (featureMode === 'client') {\r\n const page = derivedPagination.page ?? 0\r\n const pageSize = derivedPagination.pageSize ?? defaultPageSize\r\n if (loadMode === 'infiniteScroll') {\r\n // accumulate all items from page 0 → current page\r\n return finalValue.slice(0, (page + 1) * pageSize)\r\n }\r\n const start = page * pageSize\r\n return finalValue.slice(start, start + pageSize)\r\n }\r\n return finalValue\r\n }, [finalValue, derivedPagination, featureMode, loadMode, defaultPageSize])\r\n\r\n const isEmptyData = finalValue.length === 0\r\n const isInitialLoading = Boolean(props.loading && isEmptyData)\r\n const isNoData = !props.loading && isEmptyData\r\n const showLoadingOverlay = Boolean(props.loading) && !isEmptyData\r\n\r\n const handleGridPageChange = useCallback(\r\n async (page: number, pageSize: number) => {\r\n if (!props.pagination) {\r\n setInternalPagination({ page, pageSize })\r\n }\r\n await props.onPageChange?.(page, pageSize)\r\n },\r\n [props.pagination, props.onPageChange]\r\n )\r\n\r\n const gridPayload = useMemo<IViewGridLoadingProps<T>>(\r\n () => ({\r\n value: paginatedValue,\r\n loadMode,\r\n loading: props.loading,\r\n pagination: derivedPagination,\r\n onPageChange: handleGridPageChange,\r\n scrollResetToken,\r\n ...slots.gridViewProps\r\n }),\r\n [paginatedValue, loadMode, props.loading, derivedPagination, handleGridPageChange, scrollResetToken, slots.gridViewProps]\r\n )\r\n\r\n const gridPayloadRef = useRef<IViewGridLoadingProps<T>>(gridPayload)\r\n gridPayloadRef.current = gridPayload\r\n\r\n const listPayload = useMemo<IViewListLoadingProps<T>>(\r\n () => ({\r\n value: paginatedValue,\r\n loadMode,\r\n loading: props.loading,\r\n pagination: derivedPagination,\r\n onPageChange: handleGridPageChange,\r\n renderStrategy: renderStrategy,\r\n selectable: props.selectable ?? config.listConfig?.selectable,\r\n selectedIds: props.selectedIds,\r\n onSelectionChange: props.onSelectionChange,\r\n scrollResetToken,\r\n ...slots.listViewProps\r\n }),\r\n [\r\n paginatedValue,\r\n loadMode,\r\n props.loading,\r\n derivedPagination,\r\n renderStrategy,\r\n handleGridPageChange,\r\n props.selectable,\r\n props.selectedIds,\r\n props.onSelectionChange,\r\n scrollResetToken,\r\n slots.listViewProps\r\n ]\r\n )\r\n\r\n const listPayloadRef = useRef<IViewListLoadingProps<T>>(listPayload)\r\n listPayloadRef.current = listPayload\r\n\r\n const ListViewContent = useMemo<ComponentType<{ value: DataSurfaceViewMode }>>(() => {\r\n const ViewListContent: FC<{ value: DataSurfaceViewMode }> = () => {\r\n return <ListLoadingComponent {...listPayloadRef.current} />\r\n }\r\n return ViewListContent\r\n }, [ListLoadingComponent])\r\n\r\n const GridViewContent = useMemo<ComponentType<{ value: DataSurfaceViewMode }>>(() => {\r\n const ViewGridContent: FC<{ value: DataSurfaceViewMode }> = () => {\r\n return <GridLoadingComponent {...gridPayloadRef.current} />\r\n }\r\n return ViewGridContent\r\n }, [GridLoadingComponent])\r\n\r\n const PanelLoadingComponent = useMemo(() => {\r\n return slots.PanelLoading || config?.PanelLoading || PanelLoading\r\n }, [slots.PanelLoading, config.PanelLoading, viewMode])\r\n\r\n const PanelNoDataComponent = useMemo(() => {\r\n return slots.PanelNoData || config?.PanelNoData || PanelNoData\r\n }, [slots.PanelNoData, config.PanelNoData, viewMode])\r\n\r\n const PanelLoadMoreComponent = useMemo(() => {\r\n return slots.PanelLoadMore || config?.PanelLoadMore || PanelLoadMore\r\n }, [slots.PanelLoadMore, config.PanelLoadMore])\r\n\r\n const renderFooter = () => {\r\n if (loadMode === LoadingModeRule.infiniteScroll) {\r\n const footerSlots = props.slots?.footer\r\n return (\r\n <PanelInfiniteScrollFooter\r\n loading={props.loading}\r\n hasNext={derivedPagination.hasNext}\r\n currentCount={paginatedValue.length}\r\n total={derivedPagination.total}\r\n slots={{\r\n statusText: footerSlots?.status,\r\n rangeText: footerSlots?.range\r\n }}\r\n />\r\n )\r\n }\r\n\r\n // pagination mode\r\n return (\r\n <PanelPaginationFooter\r\n page={derivedPagination.page ?? 0}\r\n pageSize={derivedPagination.pageSize ?? defaultPageSize}\r\n total={derivedPagination.total}\r\n hasNext={derivedPagination.hasNext}\r\n hasPrev={(derivedPagination.page ?? 0) > 0}\r\n loading={props.loading}\r\n onPrevPage={handlePrevPage}\r\n onNextPage={handleNextPage}\r\n onPageJump={handlePageJump}\r\n />\r\n )\r\n }\r\n\r\n return (\r\n <DataSurfaceStyled sx={props.sx}>\r\n <Box sx={{ flex: 1, minHeight: 0, position: 'relative' }}>\r\n {isInitialLoading && <PanelLoadingComponent viewMode={viewMode} />}\r\n {isNoData && <PanelNoDataComponent viewMode={viewMode} />}\r\n {!isInitialLoading && !isNoData && (\r\n <ViewSwitchTranstionInstance\r\n value={viewMode}\r\n viewA={{ value: 'list', Content: ListViewContent }}\r\n viewB={{ value: 'grid', Content: GridViewContent }}\r\n />\r\n )}\r\n {showLoadingOverlay && <PanelLoadMoreComponent />}\r\n </Box>\r\n {renderFooter()}\r\n </DataSurfaceStyled>\r\n )\r\n }\r\n return DataSurface\r\n}\r\n\r\nexport default createDataSurface\r\n\r\nconst DataSurfaceStyled = styled(Box)(({ theme }) => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%',\r\n height: '100%',\r\n position: 'relative',\r\n flex: 1,\r\n minHeight: 0,\r\n backgroundColor: theme.palette.background.default\r\n}))\r\n"],"names":["createDataSurface","config","GridComponent","configInput","gridConfig","getterId","item","index","createViewGrid","ListComponent","listConfig","createViewList","_config$defaultViewMo","defaultViewMode","_config$defaultLoadMo","defaultLoadMode","_config$featureMode","featureMode","ViewSwitchTranstionInstance","createViewSwitchTransition","GridLoadingComponent","createViewGridLoading","ListLoadingComponent","createViewListLoading","props","_ref","_props$pagination$pag","_props$pagination","_props$viewMode","_props$loadMode","slots","defaultPageSize","pagination","pageSize","_useState","useState","page","_useState2","_slicedToArray","internalPagination","setInternalPagination","paginationState","useMemo","_props$pagination2","_p$page","_p$pageSize","_p$hasNext","_p$hasPrev","p","hasNext","hasPrev","total","viewMode","loadMode","renderStrategy","_config$listConfig$re","_config$listConfig","_config$gridConfig$re","_config$gridConfig","handlePrevPage","useCallback","_asyncToGenerator","_regenerator","m","_callee","_paginationState$page","_props$onPageChange","_paginationState$page2","currentPage","prevPage","w","_context","n","a","prev","_objectSpread","onPageChange","call","handleNextPage","_callee2","_paginationState$page3","_props$onPageChange2","_paginationState$page4","nextPage","_context2","handlePageJump","_ref4","_callee3","targetPage","_props$onPageChange3","_paginationState$page5","_context3","_x","apply","this","arguments","finalValue","value","scrollResetToken","undefined","useEffect","derivedPagination","_paginationState$page6","_paginationState$page7","length","paginatedValue","_derivedPagination$pa","_derivedPagination$pa2","slice","start","isEmptyData","isInitialLoading","Boolean","loading","isNoData","showLoadingOverlay","handleGridPageChange","_ref5","_callee4","_props$onPageChange4","_context4","_x2","_x3","gridPayload","gridViewProps","gridPayloadRef","useRef","current","listPayload","_props$selectable","_config$listConfig2","selectable","selectedIds","onSelectionChange","listViewProps","listPayloadRef","ListViewContent","_jsx","GridViewContent","PanelLoadingComponent","PanelLoading","PanelNoDataComponent","PanelNoData","PanelLoadMoreComponent","PanelLoadMore","_jsxs","DataSurfaceStyled","sx","children","Box","flex","minHeight","position","viewA","Content","viewB","_derivedPagination$pa3","_derivedPagination$pa4","_derivedPagination$pa5","LoadingModeRule","infiniteScroll","_props$slots","footerSlots","footer","PanelInfiniteScrollFooter","currentCount","statusText","status","rangeText","range","PanelPaginationFooter","onPrevPage","onNextPage","onPageJump","renderFooter","styled","_ref6","display","flexDirection","width","height","backgroundColor","theme","palette","background"],"mappings":"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"}
1
+ {"version":3,"file":"index.create.js","sources":["../../../src/data-surface/index.create.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { Box, styled } from '@mui/material'\r\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\r\nimport { DataSurfaceViewMode, LoadingModeRule, DataSurfaceFeatureMode } from './types'\r\nimport { createViewList, createViewListLoading } from './view-list'\r\nimport { createViewGrid, createViewGridLoading } from './view-grid'\r\nimport { createViewSwitchTransition } from './view-switch-transition'\r\nimport { PanelInfiniteScrollFooter, PanelLoadMore, PanelLoading, PanelNoData, PanelPaginationFooter } from './ui.units'\r\n// types\r\nimport type { BoxProps } from '@mui/material'\r\nimport type { ComponentType, FC } from 'react'\r\nimport type { IViewGridLoadingProps } from './view-grid'\r\nimport type { IViewGridConfig, IViewGridProps } from './view-grid/types'\r\nimport type { TPagination, TDataSurfaceState, TRenderableNode } from './types'\r\nimport type { IViewListConfig, IViewListLoadingProps, IViewListProps } from './view-list'\r\n\r\nexport interface IDataSurfaceSlots<T> {\r\n listViewProps?: IViewListProps<T>\r\n gridViewProps?: IViewGridProps<T>\r\n /** Custom loading component. If not provided, a default loading component will be used. */\r\n PanelLoading?: ComponentType<{ viewMode: DataSurfaceViewMode }>\r\n /** Custom no data component. If not provided, a default no data component will be used. */\r\n PanelNoData?: ComponentType<{ viewMode: DataSurfaceViewMode }>\r\n /** Custom load more component for infinite scroll mode. If not provided, a default loading indicator will be shown when fetching the next page. */\r\n PanelLoadMore?: ComponentType\r\n footer?: {\r\n status?: TRenderableNode\r\n range?: TRenderableNode\r\n }\r\n}\r\n\r\nexport interface IDataSurfaceProps<T> {\r\n value?: T[]\r\n /**\r\n * @deprecated No longer used. Use `viewMode` and `loadMode` props directly instead.\r\n * Controlled state. When provided, DataSurface becomes fully controlled.\r\n */\r\n state?: TDataSurfaceState\r\n /**\r\n * @deprecated No longer used. Component now uses uncontrolled mode with props.\r\n * Called on any state change (viewMode, loadMode, page, pageSize).\r\n */\r\n onStateChange?: (state: TDataSurfaceState) => void\r\n viewMode?: DataSurfaceViewMode\r\n /** Pagination metadata shared by both modes. */\r\n pagination?: TPagination\r\n /** Default page size. @default 20 */\r\n defaultPageSize?: number\r\n /** True while a page fetch is in flight (shows loading indicator). */\r\n loading?: boolean\r\n /**\r\n * Called when the component needs a new page of data.\r\n * - pagination mode: triggered by user clicking page control\r\n * - infiniteScroll mode: triggered automatically when scrolling near the bottom\r\n * Supports async operations - return a Promise to indicate loading state.\r\n */\r\n onPageChange?: (page: number, pageSize: number) => void | Promise<void>\r\n /** Load orchestration mode. @default 'pagination' */\r\n loadMode?: LoadingModeRule\r\n sx?: BoxProps['sx']\r\n slots?: IDataSurfaceSlots<T>\r\n /** Enable row selection with checkboxes (List view only). */\r\n selectable?: boolean\r\n /** Array of selected row IDs (List view only). */\r\n selectedIds?: (string | number)[]\r\n /** Callback when selection changes (List view only). */\r\n onSelectionChange?: (selectedIds: (string | number)[]) => void\r\n}\r\n\r\nexport interface IDataSurfaceConfig<T> {\r\n /** Feature mode determines the internal optimizations and rendering strategies. @default 'client' */\r\n featureMode?: DataSurfaceFeatureMode\r\n /** Default view mode when not provided via props. @default 'grid' */\r\n defaultViewMode?: DataSurfaceViewMode\r\n /** Default load mode when not provided via props. @default 'pagination' */\r\n defaultLoadMode?: LoadingModeRule\r\n /** Default page size. @default 20 */\r\n defaultPageSize?: number\r\n /** Configuration for List view. If not provided, List view will use default settings. */\r\n listConfig?: IViewListConfig<T>\r\n /** Custom List component. If not provided, a default List component will be used. */\r\n ListComponent?: ComponentType<IViewListProps<T>>\r\n /** Configuration for Grid view. If not provided, Grid view will use default settings. */\r\n gridConfig?: IViewGridConfig<T>\r\n /** Custom Grid component. If not provided, a default Grid component will be used. */\r\n GridComponent?: ComponentType<IViewGridProps<T>>\r\n /** Custom loading component. If not provided, a default loading component will be used. */\r\n PanelLoading?: ComponentType<{ viewMode: DataSurfaceViewMode }>\r\n /** Custom no data component. If not provided, a default no data component will be used. */\r\n PanelNoData?: ComponentType<{ viewMode: DataSurfaceViewMode }>\r\n /** Custom load more component for infinite scroll mode. If not provided, a default loading indicator will be shown when fetching the next page. */\r\n PanelLoadMore?: ComponentType\r\n}\r\n\r\nexport function createDataSurface<T>(config: IDataSurfaceConfig<T>) {\r\n if (!config.GridComponent) {\r\n const configInput: IViewGridConfig<T> = config.gridConfig || { getterId: (item: T, index: number) => index }\r\n config.gridConfig = configInput\r\n config.GridComponent = createViewGrid<T>(configInput)\r\n }\r\n\r\n if (!config.ListComponent) {\r\n const configInput: IViewListConfig<T> = config.listConfig || { getterId: (item: T, index: number) => index }\r\n config.listConfig = configInput\r\n config.ListComponent = createViewList<T>(configInput)\r\n }\r\n\r\n const { defaultViewMode = 'grid', defaultLoadMode = 'pagination', featureMode = 'client' } = config\r\n const ViewSwitchTranstionInstance = createViewSwitchTransition<DataSurfaceViewMode>({})\r\n const GridLoadingComponent = createViewGridLoading<T>(config.GridComponent as ComponentType<IViewGridProps<T>>)\r\n const ListLoadingComponent = createViewListLoading<T>(config.ListComponent as ComponentType<IViewListProps<T>>)\r\n\r\n const DataSurface: FC<IDataSurfaceProps<T>> = (props) => {\r\n const slots = props.slots || {}\r\n const defaultPageSize = props.pagination?.pageSize ?? config.defaultPageSize ?? 20\r\n // separate pagination state\r\n const [internalPagination, setInternalPagination] = useState<TPagination>({ page: 0, pageSize: defaultPageSize })\r\n\r\n // resolved pagination: external takes priority over internal\r\n const paginationState = useMemo<TPagination>(() => {\r\n const p = props.pagination ?? internalPagination\r\n return {\r\n page: p.page ?? 0,\r\n pageSize: p.pageSize ?? defaultPageSize,\r\n hasNext: p.hasNext ?? false,\r\n hasPrev: p.hasPrev ?? false,\r\n total: p.total\r\n }\r\n }, [props.pagination, internalPagination])\r\n\r\n const viewMode = props.viewMode ?? defaultViewMode\r\n const loadMode = props.loadMode ?? defaultLoadMode\r\n\r\n // Determine renderStrategy based on current viewMode\r\n const renderStrategy = useMemo(() => {\r\n if (viewMode === 'grid') {\r\n return config.gridConfig?.renderStrategy ?? 'normal'\r\n }\r\n return config.listConfig?.renderStrategy ?? 'normal'\r\n }, [viewMode])\r\n\r\n const handlePrevPage = useCallback(async () => {\r\n const currentPage = paginationState.page ?? 0\r\n if (currentPage <= 0) return\r\n const prevPage = currentPage - 1\r\n if (!props.pagination) {\r\n setInternalPagination((prev) => ({ ...prev, page: prevPage }))\r\n }\r\n await props.onPageChange?.(prevPage, paginationState.pageSize ?? defaultPageSize)\r\n }, [paginationState.page, paginationState.pageSize, props.pagination, props.onPageChange])\r\n\r\n const handleNextPage = useCallback(async () => {\r\n if (!paginationState.hasNext) return\r\n const currentPage = paginationState.page ?? 0\r\n const nextPage = currentPage + 1\r\n if (!props.pagination) {\r\n setInternalPagination((prev) => ({ ...prev, page: nextPage }))\r\n }\r\n await props.onPageChange?.(nextPage, paginationState.pageSize ?? defaultPageSize)\r\n }, [paginationState.hasNext, paginationState.page, paginationState.pageSize, props.pagination, props.onPageChange])\r\n\r\n const handlePageJump = useCallback(\r\n async (targetPage: number) => {\r\n if (targetPage < 0) return\r\n if (!props.pagination) {\r\n setInternalPagination((prev) => ({ ...prev, page: targetPage }))\r\n }\r\n await props.onPageChange?.(targetPage, paginationState.pageSize ?? defaultPageSize)\r\n },\r\n [paginationState.pageSize, props.pagination, props.onPageChange]\r\n )\r\n\r\n const finalValue = props.value || []\r\n\r\n // Token changes whenever props.value reference changes — used to reset scroll in views (client mode only)\r\n const scrollResetToken = featureMode === 'client' ? props.value : undefined\r\n\r\n // Reset page to 0 when the data source changes (e.g. new filtered array passed in) — client mode only\r\n useEffect(() => {\r\n if (featureMode === 'client' && !props.pagination) {\r\n setInternalPagination((prev) => ({ ...prev, page: 0 }))\r\n }\r\n }, [props.value])\r\n\r\n // When running in client feature mode, derive pagination metadata from the full value\r\n const derivedPagination = useMemo<TPagination>(() => {\r\n const page = paginationState.page ?? 0\r\n const pageSize = paginationState.pageSize ?? defaultPageSize\r\n if (featureMode === 'client') {\r\n const total = finalValue.length\r\n const hasNext = pageSize * (page + 1) < total\r\n const hasPrev = page > 0\r\n return { page, pageSize, hasNext, hasPrev, total }\r\n }\r\n return paginationState\r\n }, [paginationState, finalValue.length, featureMode, defaultPageSize])\r\n\r\n // Slice the input value when client-side pagination is enabled\r\n const paginatedValue = useMemo(() => {\r\n if (featureMode === 'client') {\r\n const page = derivedPagination.page ?? 0\r\n const pageSize = derivedPagination.pageSize ?? defaultPageSize\r\n if (loadMode === 'infiniteScroll') {\r\n // accumulate all items from page 0 → current page\r\n return finalValue.slice(0, (page + 1) * pageSize)\r\n }\r\n const start = page * pageSize\r\n return finalValue.slice(start, start + pageSize)\r\n }\r\n return finalValue\r\n }, [finalValue, derivedPagination, featureMode, loadMode, defaultPageSize])\r\n\r\n const isEmptyData = finalValue.length === 0\r\n const isInitialLoading = Boolean(props.loading && isEmptyData)\r\n const isNoData = !props.loading && isEmptyData\r\n const showLoadingOverlay = Boolean(props.loading) && !isEmptyData\r\n\r\n const handleGridPageChange = useCallback(\r\n async (page: number, pageSize: number) => {\r\n if (!props.pagination) {\r\n setInternalPagination({ page, pageSize })\r\n }\r\n await props.onPageChange?.(page, pageSize)\r\n },\r\n [props.pagination, props.onPageChange]\r\n )\r\n\r\n const gridPayload = useMemo<IViewGridLoadingProps<T>>(\r\n () => ({\r\n value: paginatedValue,\r\n loadMode,\r\n loading: props.loading,\r\n pagination: derivedPagination,\r\n onPageChange: handleGridPageChange,\r\n scrollResetToken,\r\n ...slots.gridViewProps\r\n }),\r\n [paginatedValue, loadMode, props.loading, derivedPagination, handleGridPageChange, scrollResetToken, slots.gridViewProps]\r\n )\r\n\r\n const gridPayloadRef = useRef<IViewGridLoadingProps<T>>(gridPayload)\r\n gridPayloadRef.current = gridPayload\r\n\r\n const listPayload = useMemo<IViewListLoadingProps<T>>(\r\n () => ({\r\n value: paginatedValue,\r\n loadMode,\r\n loading: props.loading,\r\n pagination: derivedPagination,\r\n onPageChange: handleGridPageChange,\r\n renderStrategy: renderStrategy,\r\n selectable: props.selectable ?? config.listConfig?.selectable,\r\n selectedIds: props.selectedIds,\r\n onSelectionChange: props.onSelectionChange,\r\n scrollResetToken,\r\n ...slots.listViewProps\r\n }),\r\n [\r\n paginatedValue,\r\n loadMode,\r\n props.loading,\r\n derivedPagination,\r\n renderStrategy,\r\n handleGridPageChange,\r\n props.selectable,\r\n props.selectedIds,\r\n props.onSelectionChange,\r\n scrollResetToken,\r\n slots.listViewProps\r\n ]\r\n )\r\n\r\n const listPayloadRef = useRef<IViewListLoadingProps<T>>(listPayload)\r\n listPayloadRef.current = listPayload\r\n\r\n const ListViewContent = useMemo<ComponentType<{ value: DataSurfaceViewMode }>>(() => {\r\n const ViewListContent: FC<{ value: DataSurfaceViewMode }> = () => <ListLoadingComponent {...listPayloadRef.current} />\r\n return ViewListContent\r\n }, [ListLoadingComponent])\r\n\r\n const GridViewContent = useMemo<ComponentType<{ value: DataSurfaceViewMode }>>(() => {\r\n const ViewGridContent: FC<{ value: DataSurfaceViewMode }> = () => <GridLoadingComponent {...gridPayloadRef.current} />\r\n return ViewGridContent\r\n }, [GridLoadingComponent])\r\n\r\n const PanelLoadingComponent = useMemo(() => {\r\n return slots.PanelLoading || config?.PanelLoading || PanelLoading\r\n }, [slots.PanelLoading, config.PanelLoading, viewMode])\r\n\r\n const PanelNoDataComponent = useMemo(() => {\r\n return slots.PanelNoData || config?.PanelNoData || PanelNoData\r\n }, [slots.PanelNoData, config.PanelNoData, viewMode])\r\n\r\n const PanelLoadMoreComponent = useMemo(() => {\r\n return slots.PanelLoadMore || config?.PanelLoadMore || PanelLoadMore\r\n }, [slots.PanelLoadMore, config.PanelLoadMore])\r\n\r\n const renderFooter = () => {\r\n if (loadMode === LoadingModeRule.infiniteScroll) {\r\n const footerSlots = props.slots?.footer\r\n return (\r\n <PanelInfiniteScrollFooter\r\n loading={props.loading}\r\n hasNext={derivedPagination.hasNext}\r\n currentCount={paginatedValue.length}\r\n total={derivedPagination.total}\r\n slots={{\r\n statusText: footerSlots?.status,\r\n rangeText: footerSlots?.range\r\n }}\r\n />\r\n )\r\n }\r\n\r\n // pagination mode\r\n return (\r\n <PanelPaginationFooter\r\n page={derivedPagination.page ?? 0}\r\n pageSize={derivedPagination.pageSize ?? defaultPageSize}\r\n total={derivedPagination.total}\r\n hasNext={derivedPagination.hasNext}\r\n hasPrev={(derivedPagination.page ?? 0) > 0}\r\n loading={props.loading}\r\n onPrevPage={handlePrevPage}\r\n onNextPage={handleNextPage}\r\n onPageJump={handlePageJump}\r\n />\r\n )\r\n }\r\n\r\n return (\r\n <DataSurfaceStyled sx={props.sx}>\r\n <Box sx={{ flex: 1, minHeight: 0, position: 'relative' }}>\r\n {isInitialLoading && <PanelLoadingComponent viewMode={viewMode} />}\r\n {isNoData && <PanelNoDataComponent viewMode={viewMode} />}\r\n {!isInitialLoading && !isNoData && (\r\n <ViewSwitchTranstionInstance\r\n value={viewMode}\r\n viewA={{ value: 'list', Content: ListViewContent }}\r\n viewB={{ value: 'grid', Content: GridViewContent }}\r\n />\r\n )}\r\n {showLoadingOverlay && <PanelLoadMoreComponent />}\r\n </Box>\r\n {renderFooter()}\r\n </DataSurfaceStyled>\r\n )\r\n }\r\n return DataSurface\r\n}\r\n\r\nexport default createDataSurface\r\n\r\nconst DataSurfaceStyled = styled(Box)(({ theme }) => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%',\r\n height: '100%',\r\n position: 'relative',\r\n flex: 1,\r\n minHeight: 0,\r\n backgroundColor: theme.palette.background.default\r\n}))\r\n"],"names":["createDataSurface","config","GridComponent","configInput","gridConfig","getterId","item","index","createViewGrid","ListComponent","listConfig","createViewList","_config$defaultViewMo","defaultViewMode","_config$defaultLoadMo","defaultLoadMode","_config$featureMode","featureMode","ViewSwitchTranstionInstance","createViewSwitchTransition","GridLoadingComponent","createViewGridLoading","ListLoadingComponent","createViewListLoading","props","_ref","_props$pagination$pag","_props$pagination","_props$viewMode","_props$loadMode","slots","defaultPageSize","pagination","pageSize","_useState","useState","page","_useState2","_slicedToArray","internalPagination","setInternalPagination","paginationState","useMemo","_props$pagination2","_p$page","_p$pageSize","_p$hasNext","_p$hasPrev","p","hasNext","hasPrev","total","viewMode","loadMode","renderStrategy","_config$listConfig$re","_config$listConfig","_config$gridConfig$re","_config$gridConfig","handlePrevPage","useCallback","_asyncToGenerator","_regenerator","m","_callee","_paginationState$page","_props$onPageChange","_paginationState$page2","currentPage","prevPage","w","_context","n","a","prev","_objectSpread","onPageChange","call","handleNextPage","_callee2","_paginationState$page3","_props$onPageChange2","_paginationState$page4","nextPage","_context2","handlePageJump","_ref4","_callee3","targetPage","_props$onPageChange3","_paginationState$page5","_context3","_x","apply","this","arguments","finalValue","value","scrollResetToken","undefined","useEffect","derivedPagination","_paginationState$page6","_paginationState$page7","length","paginatedValue","_derivedPagination$pa","_derivedPagination$pa2","slice","start","isEmptyData","isInitialLoading","Boolean","loading","isNoData","showLoadingOverlay","handleGridPageChange","_ref5","_callee4","_props$onPageChange4","_context4","_x2","_x3","gridPayload","gridViewProps","gridPayloadRef","useRef","current","listPayload","_props$selectable","_config$listConfig2","selectable","selectedIds","onSelectionChange","listViewProps","listPayloadRef","ListViewContent","_jsx","GridViewContent","PanelLoadingComponent","PanelLoading","PanelNoDataComponent","PanelNoData","PanelLoadMoreComponent","PanelLoadMore","_jsxs","DataSurfaceStyled","sx","children","Box","flex","minHeight","position","viewA","Content","viewB","_derivedPagination$pa3","_derivedPagination$pa4","_derivedPagination$pa5","LoadingModeRule","infiniteScroll","_props$slots","footerSlots","footer","PanelInfiniteScrollFooter","currentCount","statusText","status","rangeText","range","PanelPaginationFooter","onPrevPage","onNextPage","onPageJump","renderFooter","styled","_ref6","display","flexDirection","width","height","backgroundColor","theme","palette","background"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{defineProperty as i}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{styled as o,Box as t,alpha as e}from"@mui/material";var r={root:"DinoViewGrid-root",normal:"DinoViewGrid-normal",autoHeight:"DinoViewGrid-autoHeight",virtualized:"DinoViewGrid-virtualized",scrollContainer:"DinoViewGrid-scrollContainer",grid:"DinoViewGrid-grid",gridItem:"DinoViewGrid-item",scrolling:"DinoViewGrid-scrolling"},n=r,a=o(t)(function(o){var t=o.theme;return i(i(i(i({display:"flex",flex:1,minHeight:0,minWidth:0,position:"relative",width:"100%",height:"100%",overflow:"hidden",boxSizing:"border-box"},".".concat(n.scrollContainer),{width:"100%",height:"100%",overflowY:"auto",padding:t.spacing(.5),"&::-webkit-scrollbar":{width:8,height:8},"&::-webkit-scrollbar-thumb":{backgroundColor:t.palette.grey[300],borderRadius:4},"&::-webkit-scrollbar-thumb:hover":{backgroundColor:t.palette.grey[500]}}),".".concat(n.scrollContainer,"::before"),{content:'""',position:"absolute",top:0,left:0,right:0,height:t.spacing(1.5),background:"linear-gradient(\n to bottom,\n ".concat(t.palette.background.paper," 0%,\n ").concat(e(t.palette.background.paper,.16)," 30%,\n transparent 100%\n )"),pointerEvents:"none",opacity:0,visibility:"hidden",transition:"all 0.3s ease-out",zIndex:t.zIndex.appBar-1}),"&.".concat(n.scrolling," .").concat(n.scrollContainer,"::before"),{opacity:1,visibility:"visible"}),"&.".concat(n.normal,".").concat(n.autoHeight),i({height:"auto",overflow:"visible"},".".concat(n.scrollContainer),{position:"static",inset:"auto",overflowY:"visible"}))});export{a as ViewGridStyled,r as viewGridClasses};
1
+ import{defineProperty as i}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{styled as o,Box as r,alpha as t}from"@mui/material";var e={root:"DinoViewGrid-root",normal:"DinoViewGrid-normal",autoHeight:"DinoViewGrid-autoHeight",virtualized:"DinoViewGrid-virtualized",scrollContainer:"DinoViewGrid-scrollContainer",grid:"DinoViewGrid-grid",gridItem:"DinoViewGrid-item",scrolling:"DinoViewGrid-scrolling"},n=e,a=o(r)(function(o){var r=o.theme;return i(i(i(i({display:"flex",flex:1,minHeight:0,minWidth:0,position:"relative",width:"100%",height:"100%",overflow:"hidden",boxSizing:"border-box"},".".concat(n.scrollContainer),{width:"100%",height:"100%",overflowY:"auto",padding:r.spacing(.5),"&::-webkit-scrollbar":{width:6,height:6},"&::-webkit-scrollbar-thumb":{backgroundColor:r.palette.grey[400]},"&::-webkit-scrollbar-thumb:hover":{backgroundColor:r.palette.grey[600]},"&::-webkit-scrollbar-track":{backgroundColor:r.palette.grey[200],borderRadius:4},"&::-webkit-scrollbar-track:hover":{backgroundColor:r.palette.grey[300]}}),".".concat(n.scrollContainer,"::before"),{content:'""',position:"absolute",top:0,left:0,right:0,height:r.spacing(1.5),background:"linear-gradient(\n to bottom,\n ".concat(r.palette.background.paper," 0%,\n ").concat(t(r.palette.background.paper,.16)," 30%,\n transparent 100%\n )"),pointerEvents:"none",opacity:0,visibility:"hidden",transition:"all 0.3s ease-out",zIndex:r.zIndex.appBar-1}),"&.".concat(n.scrolling," .").concat(n.scrollContainer,"::before"),{opacity:1,visibility:"visible"}),"&.".concat(n.normal,".").concat(n.autoHeight),i({height:"auto",overflow:"visible"},".".concat(n.scrollContainer),{position:"static",inset:"auto",overflowY:"visible"}))});export{a as ViewGridStyled,e as viewGridClasses};
2
2
  //# sourceMappingURL=styleds.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"styleds.js","sources":["../../../../src/data-surface/view-grid/styleds.tsx"],"sourcesContent":["import { alpha, Box, styled } from '@mui/material'\r\n\r\nexport const viewGridClasses = {\r\n root: 'DinoViewGrid-root',\r\n normal: 'DinoViewGrid-normal',\r\n autoHeight: 'DinoViewGrid-autoHeight',\r\n virtualized: 'DinoViewGrid-virtualized',\r\n scrollContainer: 'DinoViewGrid-scrollContainer',\r\n grid: 'DinoViewGrid-grid',\r\n gridItem: 'DinoViewGrid-item',\r\n // Statuses\r\n scrolling: 'DinoViewGrid-scrolling'\r\n}\r\nconst classes = viewGridClasses\r\n\r\nexport const ViewGridStyled = styled(Box)(({ theme }) => ({\r\n display: 'flex',\r\n flex: 1,\r\n minHeight: 0,\r\n minWidth: 0,\r\n position: 'relative',\r\n width: '100%',\r\n height: '100%',\r\n overflow: 'hidden',\r\n boxSizing: 'border-box',\r\n [`.${classes.scrollContainer}`]: {\r\n width: '100%',\r\n height: '100%',\r\n overflowY: 'auto',\r\n padding: theme.spacing(0.5),\r\n // Scrollbar styling\r\n '&::-webkit-scrollbar': { width: 8, height: 8 },\r\n '&::-webkit-scrollbar-thumb': { backgroundColor: theme.palette.grey[300], borderRadius: 4 },\r\n '&::-webkit-scrollbar-thumb:hover': { backgroundColor: theme.palette.grey[500] }\r\n },\r\n [`.${classes.scrollContainer}::before`]: {\r\n content: '\"\"',\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n height: theme.spacing(1.5),\r\n background: `linear-gradient(\r\n to bottom,\r\n ${theme.palette.background.paper} 0%,\r\n ${alpha(theme.palette.background.paper, 0.16)} 30%,\r\n transparent 100%\r\n )`,\r\n pointerEvents: 'none',\r\n // animation\r\n opacity: 0,\r\n visibility: 'hidden',\r\n transition: 'all 0.3s ease-out',\r\n zIndex: theme.zIndex.appBar - 1\r\n },\r\n [`&.${classes.scrolling} .${classes.scrollContainer}::before`]: {\r\n opacity: 1,\r\n visibility: 'visible'\r\n },\r\n // Auto-height variant: disable the internal scroll container and let the\r\n // component size expand with content. This makes the table render all\r\n // rows and removes the internal scrollbar used in 'normal' modes.\r\n [`&.${classes.normal}.${classes.autoHeight}`]: {\r\n height: 'auto',\r\n overflow: 'visible',\r\n [`.${classes.scrollContainer}`]: {\r\n position: 'static',\r\n inset: 'auto',\r\n overflowY: 'visible'\r\n }\r\n }\r\n}))\r\n"],"names":["viewGridClasses","root","normal","autoHeight","virtualized","scrollContainer","grid","gridItem","scrolling","classes","ViewGridStyled","styled","Box","_ref","theme","_defineProperty","display","flex","minHeight","minWidth","position","width","height","overflow","boxSizing","concat","overflowY","padding","spacing","backgroundColor","palette","grey","borderRadius","content","top","left","right","background","paper","alpha","pointerEvents","opacity","visibility","transition","zIndex","appBar","inset"],"mappings":"2IAEO,IAAMA,EAAkB,CAC7BC,KAAM,oBACNC,OAAQ,sBACRC,WAAY,0BACZC,YAAa,2BACbC,gBAAiB,+BACjBC,KAAM,oBACNC,SAAU,oBAEVC,UAAW,0BAEPC,EAAUT,EAEHU,EAAiBC,EAAOC,EAAPD,CAAY,SAAAE,GAAA,IAAGC,EAAKD,EAALC,MAAK,OAAAC,EAAAA,EAAAA,EAAAA,EAAA,CAChDC,QAAS,OACTC,KAAM,EACNC,UAAW,EACXC,SAAU,EACVC,SAAU,WACVC,MAAO,OACPC,OAAQ,OACRC,SAAU,SACVC,UAAW,cAAY,IAAAC,OAClBhB,EAAQJ,iBAAoB,CAC/BgB,MAAO,OACPC,OAAQ,OACRI,UAAW,OACXC,QAASb,EAAMc,QAAQ,IAEvB,uBAAwB,CAAEP,MAAO,EAAGC,OAAQ,GAC5C,6BAA8B,CAAEO,gBAAiBf,EAAMgB,QAAQC,KAAK,KAAMC,aAAc,GACxF,mCAAoC,CAAEH,gBAAiBf,EAAMgB,QAAQC,KAAK,YAC3EN,OACIhB,EAAQJ,gBAA4B,YAAA,CACvC4B,QAAS,KACTb,SAAU,WACVc,IAAK,EACLC,KAAM,EACNC,MAAO,EACPd,OAAQR,EAAMc,QAAQ,KACtBS,WAAU,6CAAAZ,OAENX,EAAMgB,QAAQO,WAAWC,MAAKb,gBAAAA,OAC9Bc,EAAMzB,EAAMgB,QAAQO,WAAWC,MAAO,KAExC,wCACFE,cAAe,OAEfC,QAAS,EACTC,WAAY,SACZC,WAAY,oBACZC,OAAQ9B,EAAM8B,OAAOC,OAAS,IAC/BpB,KAAAA,OACKhB,EAAQD,UAASiB,MAAAA,OAAKhB,EAAQJ,gBAA4B,YAAA,CAC9DoC,QAAS,EACTC,WAAY,YACbjB,KAAAA,OAIKhB,EAAQP,OAAMuB,KAAAA,OAAIhB,EAAQN,YAAUY,EAAA,CACxCO,OAAQ,OACRC,SAAU,WAAS,IAAAE,OACdhB,EAAQJ,iBAAoB,CAC/Be,SAAU,SACV0B,MAAO,OACPpB,UAAW,YACZ"}
1
+ {"version":3,"file":"styleds.js","sources":["../../../../src/data-surface/view-grid/styleds.tsx"],"sourcesContent":["import { alpha, Box, styled } from '@mui/material'\r\n\r\nexport const viewGridClasses = {\r\n root: 'DinoViewGrid-root',\r\n normal: 'DinoViewGrid-normal',\r\n autoHeight: 'DinoViewGrid-autoHeight',\r\n virtualized: 'DinoViewGrid-virtualized',\r\n scrollContainer: 'DinoViewGrid-scrollContainer',\r\n grid: 'DinoViewGrid-grid',\r\n gridItem: 'DinoViewGrid-item',\r\n // Statuses\r\n scrolling: 'DinoViewGrid-scrolling'\r\n}\r\nconst classes = viewGridClasses\r\n\r\nexport const ViewGridStyled = styled(Box)(({ theme }) => ({\r\n display: 'flex',\r\n flex: 1,\r\n minHeight: 0,\r\n minWidth: 0,\r\n position: 'relative',\r\n width: '100%',\r\n height: '100%',\r\n overflow: 'hidden',\r\n boxSizing: 'border-box',\r\n [`.${classes.scrollContainer}`]: {\r\n width: '100%',\r\n height: '100%',\r\n overflowY: 'auto',\r\n padding: theme.spacing(0.5),\r\n // Scrollbar styling\r\n '&::-webkit-scrollbar': { width: 6, height: 6 },\r\n '&::-webkit-scrollbar-thumb': { backgroundColor: theme.palette.grey[400] },\r\n '&::-webkit-scrollbar-thumb:hover': { backgroundColor: theme.palette.grey[600] },\r\n '&::-webkit-scrollbar-track': { backgroundColor: theme.palette.grey[200], borderRadius: 4 },\r\n '&::-webkit-scrollbar-track:hover': { backgroundColor: theme.palette.grey[300] }\r\n },\r\n [`.${classes.scrollContainer}::before`]: {\r\n content: '\"\"',\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n height: theme.spacing(1.5),\r\n background: `linear-gradient(\r\n to bottom,\r\n ${theme.palette.background.paper} 0%,\r\n ${alpha(theme.palette.background.paper, 0.16)} 30%,\r\n transparent 100%\r\n )`,\r\n pointerEvents: 'none',\r\n // animation\r\n opacity: 0,\r\n visibility: 'hidden',\r\n transition: 'all 0.3s ease-out',\r\n zIndex: theme.zIndex.appBar - 1\r\n },\r\n [`&.${classes.scrolling} .${classes.scrollContainer}::before`]: {\r\n opacity: 1,\r\n visibility: 'visible'\r\n },\r\n // Auto-height variant: disable the internal scroll container and let the\r\n // component size expand with content. This makes the table render all\r\n // rows and removes the internal scrollbar used in 'normal' modes.\r\n [`&.${classes.normal}.${classes.autoHeight}`]: {\r\n height: 'auto',\r\n overflow: 'visible',\r\n [`.${classes.scrollContainer}`]: {\r\n position: 'static',\r\n inset: 'auto',\r\n overflowY: 'visible'\r\n }\r\n }\r\n}))\r\n"],"names":["viewGridClasses","root","normal","autoHeight","virtualized","scrollContainer","grid","gridItem","scrolling","classes","ViewGridStyled","styled","Box","_ref","theme","_defineProperty","display","flex","minHeight","minWidth","position","width","height","overflow","boxSizing","concat","overflowY","padding","spacing","backgroundColor","palette","grey","borderRadius","content","top","left","right","background","paper","alpha","pointerEvents","opacity","visibility","transition","zIndex","appBar","inset"],"mappings":"2IAEO,IAAMA,EAAkB,CAC7BC,KAAM,oBACNC,OAAQ,sBACRC,WAAY,0BACZC,YAAa,2BACbC,gBAAiB,+BACjBC,KAAM,oBACNC,SAAU,oBAEVC,UAAW,0BAEPC,EAAUT,EAEHU,EAAiBC,EAAOC,EAAPD,CAAY,SAAAE,GAAA,IAAGC,EAAKD,EAALC,MAAK,OAAAC,EAAAA,EAAAA,EAAAA,EAAA,CAChDC,QAAS,OACTC,KAAM,EACNC,UAAW,EACXC,SAAU,EACVC,SAAU,WACVC,MAAO,OACPC,OAAQ,OACRC,SAAU,SACVC,UAAW,cAAY,IAAAC,OAClBhB,EAAQJ,iBAAoB,CAC/BgB,MAAO,OACPC,OAAQ,OACRI,UAAW,OACXC,QAASb,EAAMc,QAAQ,IAEvB,uBAAwB,CAAEP,MAAO,EAAGC,OAAQ,GAC5C,6BAA8B,CAAEO,gBAAiBf,EAAMgB,QAAQC,KAAK,MACpE,mCAAoC,CAAEF,gBAAiBf,EAAMgB,QAAQC,KAAK,MAC1E,6BAA8B,CAAEF,gBAAiBf,EAAMgB,QAAQC,KAAK,KAAMC,aAAc,GACxF,mCAAoC,CAAEH,gBAAiBf,EAAMgB,QAAQC,KAAK,YAC3EN,OACIhB,EAAQJ,gBAA4B,YAAA,CACvC4B,QAAS,KACTb,SAAU,WACVc,IAAK,EACLC,KAAM,EACNC,MAAO,EACPd,OAAQR,EAAMc,QAAQ,KACtBS,WAAU,6CAAAZ,OAENX,EAAMgB,QAAQO,WAAWC,MAAKb,gBAAAA,OAC9Bc,EAAMzB,EAAMgB,QAAQO,WAAWC,MAAO,KAExC,wCACFE,cAAe,OAEfC,QAAS,EACTC,WAAY,SACZC,WAAY,oBACZC,OAAQ9B,EAAM8B,OAAOC,OAAS,IAC/BpB,KAAAA,OACKhB,EAAQD,UAASiB,MAAAA,OAAKhB,EAAQJ,gBAA4B,YAAA,CAC9DoC,QAAS,EACTC,WAAY,YACbjB,KAAAA,OAIKhB,EAAQP,OAAMuB,KAAAA,OAAIhB,EAAQN,YAAUY,EAAA,CACxCO,OAAQ,OACRC,SAAU,WAAS,IAAAE,OACdhB,EAAQJ,iBAAoB,CAC/Be,SAAU,SACV0B,MAAO,OACPpB,UAAW,YACZ"}
@@ -1,2 +1,2 @@
1
- import{objectSpread2 as e,asyncToGenerator as l,regenerator as n,slicedToArray as t}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as r,jsxs as a}from"react/jsx-runtime";import{useCallback as i,useRef as o,useState as c,useEffect as d,useLayoutEffect as s,useMemo as u}from"react";import{TableContainer as h,Table as g,TableHead as v,TableRow as f,TableCell as m,Checkbox as p,TableBody as b,Box as S,Typography as x}from"@mui/material";import{useMergedConfig as C,useListSelection as N}from"./hooks.js";import{ViewListStyled as H,viewListClasses as T}from"./styled.js";import{LIST_HEADER_HEIGHT as k,resolveListSpacerHeight as y,mapSxTableCell as w}from"./helpers.js";function M(e,l,n){var t=l[e.field],a=e.valueGetter?e.valueGetter(t,l,n):t,i={value:a,row:l,index:n,field:e.field};if(e.renderCell)return e.renderCell(i);var o=String(null!=a?a:"");return r(x,{variant:"body2",noWrap:!0,title:o,children:o})}function R(l){var n=function(e){return function(l){var n=C(e,l),t=1==n.normalOptions.autoHeight,i=n.columns.reduce(function(e,l){return e+(l.flex&&l.flex>0?l.flex:0)},0),c=l.onSelectionChange,s=o(null);d(function(){"client"===l.featureMode&&!t&&void 0!==l.scrollResetToken&&s.current&&(s.current.scrollTop=0)},[l.featureMode,l.scrollResetToken]);var x=N(l.value,e.getterId,n.selectable,l.selectedIds,c),k=x.selectedIds,y=x.isAllSelected,R=x.isSomeSelected,z=x.handleToggleAll,I=x.handleToggleRow,j=u(function(){var e=[T.root,T.normal];return t&&e.push(T.autoHeight),e.join(" ")},[t]);return r(H,{className:j,style:n.rootStyle,children:r(h,{ref:s,className:T.scrollContainer,onScroll:function(e){if(!t){var r,a=e.currentTarget;a.scrollHeight-a.scrollTop-a.clientHeight<=n.nearEndThreshold&&(null===(r=l.onNearEnd)||void 0===r||r.call(l))}},children:a(g,{size:"small",className:T.table,children:[r(v,{className:T.tableHeader,children:a(f,{children:[n.selectable&&r(m,{padding:"checkbox",className:T.tableHeaderCell,sx:{width:48},children:r(p,{checked:y,indeterminate:R,onChange:z})}),n.columns.map(function(e){var l;return r(m,{className:T.tableHeaderCell,align:e.align,sx:w(e,i),children:null!==(l=e.label)&&void 0!==l?l:String(e.field)},String(e.field))})]})}),r(b,{children:l.value.map(function(l,t){var o,c=null!==(o=e.getterId(l,t))&&void 0!==o?o:t,d=k.includes(c),s=n.rowHeight,u=n.cellPadding;return a(f,{hover:!0,sx:{height:s},selected:d,children:[n.selectable&&r(m,{padding:"checkbox",className:T.tableBodyCell,sx:{height:s,padding:u},children:r(p,{checked:d,onChange:function(){return I(c)}})}),n.columns.map(function(e){return r(m,{className:T.tableBodyCell,align:e.align,sx:w(e,i,{height:s,padding:u}),children:r(S,{className:T.tableCellContent,children:M(e,l,t)})},"".concat(String(c),"-").concat(String(e.field)))})]},c)})})]})})})}}(l),i=function(e){return function(l){var n=C(e,l),i=n.columns.reduce(function(e,l){return e+(l.flex&&l.flex>0?l.flex:0)},0),x=l.onSelectionChange,R=N(l.value,e.getterId,n.selectable,l.selectedIds,x),z=R.selectedIds,I=R.isAllSelected,j=R.isSomeSelected,O=R.handleToggleAll,B=R.handleToggleRow,A=o(null),E=o(null),P=c(0),G=t(P,2),_=G[0],W=G[1],q=c(0),D=t(q,2),F=D[0],J=D[1],K=c(k),L=t(K,2),Q=L[0],U=L[1],V=Math.max(1,n.virtualizedOptions.overscan);d(function(){"client"===l.featureMode&&void 0!==l.scrollResetToken&&(A.current&&(A.current.scrollTop=0),J(0))},[l.featureMode,l.scrollResetToken]),s(function(){if(A.current){var e=function(){var e,l,n=null!==(e=null===(l=A.current)||void 0===l?void 0:l.clientHeight)&&void 0!==e?e:0;W(function(e){return e===n?e:n})};e();var l=new ResizeObserver(function(){return e()});return l.observe(A.current),function(){return l.disconnect()}}},[]),s(function(){var e,l,n=null!==(e=null===(l=E.current)||void 0===l?void 0:l.offsetHeight)&&void 0!==e?e:0;n>0&&n!==Q&&U(n)},[n.columns.length,Q]);var X=u(function(){var e=l.value.length;if(0===e)return{start:0,end:-1,topSpacerHeight:0,bottomSpacerHeight:0};var t=n.rowHeight,r=n.rowSpacing,a=t+r,i=F,o=Math.max(1,_-Q),c=Math.max(0,i-Q),d=Math.max(0,Math.floor(c/a)-V),s=Math.ceil(o/a),u=Math.min(e-1,d+s+2*V);return{start:d,end:u,topSpacerHeight:y(d,t,r),bottomSpacerHeight:y(e-u-1,t,r)}},[l.value.length,Q,V,n,F,_]),Y=X.end>=X.start?l.value.slice(X.start,X.end+1):[],Z=[T.root,T.virtualized].filter(Boolean).join(" ");return r(H,{className:Z,style:n.rootStyle,children:r(h,{ref:A,className:T.scrollContainer,onScroll:function(e){var t,r=e.currentTarget;J(r.scrollTop),r.scrollHeight-r.scrollTop-r.clientHeight<=n.nearEndThreshold&&(null===(t=l.onNearEnd)||void 0===t||t.call(l))},children:a(g,{size:"small",className:T.table,children:[r(v,{className:T.tableHeader,children:a(f,{ref:E,children:[n.selectable&&r(m,{padding:"checkbox",className:T.tableHeaderCell,sx:{width:48},children:r(p,{checked:I,indeterminate:j,onChange:O})}),n.columns.map(function(e){var l;return r(m,{className:T.tableHeaderCell,align:e.align,sx:w(e,i),children:null!==(l=e.label)&&void 0!==l?l:String(e.field)},String(e.field))})]})}),a(b,{children:[X.topSpacerHeight>0?r(f,{className:T.tableSpacerRow,children:r(m,{colSpan:n.columns.length+(n.selectable?1:0),className:T.tableSpacerCell,sx:{height:X.topSpacerHeight,padding:0,border:0}})}):null,Y.map(function(l,t){var o,c=X.start+t,d=null!==(o=e.getterId(l,c))&&void 0!==o?o:c,s=z.includes(d),u=n.rowHeight,h=n.cellPadding;return a(f,{hover:!0,sx:{height:u},selected:s,children:[n.selectable&&r(m,{padding:"checkbox",className:T.tableBodyCell,sx:{height:u,padding:h},children:r(p,{checked:s,onChange:function(){return B(d)}})}),n.columns.map(function(e){return r(m,{className:T.tableBodyCell,align:e.align,sx:w(e,i,{height:u,padding:h}),children:r(S,{className:T.tableCellContent,children:M(e,l,c)})},"".concat(String(d),"-").concat(String(e.field)))})]},d)}),X.bottomSpacerHeight>0?r(f,{className:T.tableSpacerRow,children:r(m,{colSpan:n.columns.length+(n.selectable?1:0),className:T.tableSpacerCell,sx:{height:X.bottomSpacerHeight,padding:0,border:0}})}):null]})]})})})}}(l);return function(t){var a,o,c=null!==(a=null!==(o=t.renderStrategy)&&void 0!==o?o:l.renderStrategy)&&void 0!==a?a:"normal";return r("virtualized"===c?i:n,e({},t))}}function z(e){return function(t){var a,o,c,d=i(l(n().m(function e(){var l,r,a,i,o,c,d,s,u;return n().w(function(e){for(;;)switch(e.n){case 0:if("infiniteScroll"===t.loadMode){e.n=1;break}return e.a(2);case 1:if(null!==(l=t.pagination)&&void 0!==l&&l.hasNext){e.n=2;break}return e.a(2);case 2:if(!t.loading){e.n=3;break}return e.a(2);case 3:return d=null!==(r=null===(a=t.pagination)||void 0===a?void 0:a.page)&&void 0!==r?r:0,s=null!==(i=null===(o=t.pagination)||void 0===o?void 0:o.pageSize)&&void 0!==i?i:20,u=d+1,e.n=4,null===(c=t.onPageChange)||void 0===c?void 0:c.call(t,u,s);case 4:return e.a(2)}},e)})),[t.loadMode,null===(a=t.pagination)||void 0===a?void 0:a.hasNext,null===(o=t.pagination)||void 0===o?void 0:o.page,null===(c=t.pagination)||void 0===c?void 0:c.pageSize,t.loading,t.onPageChange]);return r(e,{value:t.value,columns:t.columns,density:t.density,spacing:t.spacing,renderStrategy:t.renderStrategy,normalOptions:t.normalOptions,virtualizedOptions:t.virtualizedOptions,onNearEnd:"infiniteScroll"===t.loadMode?d:void 0,selectable:t.selectable,selectedIds:t.selectedIds,onSelectionChange:t.onSelectionChange,scrollResetToken:t.scrollResetToken})}}export{R as createViewList,z as createViewListLoading,R as default};
1
+ import{objectSpread2 as e,asyncToGenerator as l,regenerator as n,slicedToArray as r}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as t,jsxs as a}from"react/jsx-runtime";import{useCallback as i,useRef as o,useState as c,useEffect as d,useLayoutEffect as s,useMemo as u}from"react";import{TableContainer as h,Table as g,TableHead as f,TableRow as v,TableCell as m,Checkbox as p,TableBody as b,Box as S,Typography as x}from"@mui/material";import{useMergedConfig as C,useListSelection as N}from"./hooks.js";import{ViewListStyled as H,viewListClasses as T}from"./styled.js";import{LIST_HEADER_HEIGHT as k,resolveListSpacerHeight as y,mapSxTableCell as w}from"./helpers.js";function M(e,l,n){var r=l[e.field],a=e.valueGetter?e.valueGetter(r,l,n):r,i={value:a,row:l,index:n,field:e.field};if(e.renderCell)return e.renderCell(i);var o=String(null!=a?a:"");return t(x,{variant:"body2",noWrap:!0,title:o,children:o})}function R(l){var n=function(e){return function(l){var n=C(e,l),r=1==n.normalOptions.autoHeight,i=n.columns.reduce(function(e,l){return e+(l.flex&&l.flex>0?l.flex:0)},0),c=l.onSelectionChange,s=o(null);d(function(){"client"===l.featureMode&&!r&&void 0!==l.scrollResetToken&&s.current&&(s.current.scrollTop=0)},[l.featureMode,l.scrollResetToken]);var x=N(l.value,e.getterId,n.selectable,l.selectedIds,c),k=x.selectedIds,y=x.isAllSelected,R=x.isSomeSelected,z=x.handleToggleAll,I=x.handleToggleRow,j=u(function(){var e=[T.root,T.normal];return r&&e.push(T.autoHeight),e.join(" ")},[r]);return t(H,{className:j,style:n.rootStyle,children:t(h,{ref:s,className:T.scrollContainer,onScroll:function(e){if(!r){var t,a=e.currentTarget;a.scrollHeight-a.scrollTop-a.clientHeight<=n.nearEndThreshold&&(null===(t=l.onNearEnd)||void 0===t||t.call(l))}},children:a(g,{size:"small",className:T.table,children:[t(f,{className:T.tableHeader,children:a(v,{children:[n.selectable&&t(m,{padding:"checkbox",className:T.tableHeaderCell,sx:{width:48},children:t(p,{checked:y,indeterminate:R,onChange:z})}),n.columns.map(function(e){var l;return t(m,{className:T.tableHeaderCell,align:e.align,sx:w(e,i),children:null!==(l=e.label)&&void 0!==l?l:String(e.field)},String(e.field))})]})}),t(b,{children:l.value.map(function(l,r){var o,c=null!==(o=e.getterId(l,r))&&void 0!==o?o:r,d=k.includes(c),s=n.rowHeight,u=n.cellPadding;return a(v,{hover:!0,sx:{height:s},selected:d,children:[n.selectable&&t(m,{padding:"checkbox",className:T.tableBodyCell,sx:{height:s,padding:u},children:t(p,{checked:d,onChange:function(){return I(c)}})}),n.columns.map(function(e){return t(m,{className:T.tableBodyCell,align:e.align,sx:w(e,i,{height:s,padding:u}),children:t(S,{className:T.tableCellContent,children:M(e,l,r)})},"".concat(String(c),"-").concat(String(e.field)))})]},c)})})]})})})}}(l),i=function(e){return function(l){var n=C(e,l),i=n.columns.reduce(function(e,l){return e+(l.flex&&l.flex>0?l.flex:0)},0),x=l.onSelectionChange,R=N(l.value,e.getterId,n.selectable,l.selectedIds,x),z=R.selectedIds,I=R.isAllSelected,j=R.isSomeSelected,O=R.handleToggleAll,B=R.handleToggleRow,A=o(null),E=o(null),P=o(!1),G=c(0),_=r(G,2),W=_[0],q=_[1],D=c(0),F=r(D,2),J=F[0],K=F[1],L=c(k),Q=r(L,2),U=Q[0],V=Q[1],X=Math.max(1,n.virtualizedOptions.overscan);d(function(){"client"===l.featureMode&&void 0!==l.scrollResetToken&&(A.current&&(A.current.scrollTop=0),K(0))},[l.featureMode,l.scrollResetToken]),s(function(){if(A.current){var e=function(){var e,l,n=null!==(e=null===(l=A.current)||void 0===l?void 0:l.clientHeight)&&void 0!==e?e:0;q(function(e){return e===n?e:n})};e();var l=new ResizeObserver(function(){return e()});return l.observe(A.current),function(){return l.disconnect()}}},[]),s(function(){P.current=!1},[n.columns.length]),s(function(){var e,l;if(!P.current){var n=null!==(e=null===(l=E.current)||void 0===l?void 0:l.offsetHeight)&&void 0!==e?e:0;n>0&&(P.current=!0,V(n))}},[n.columns.length]);var Y=u(function(){var e=l.value.length;if(0===e)return{start:0,end:-1,topSpacerHeight:0,bottomSpacerHeight:0};var r=n.rowHeight,t=n.rowSpacing,a=r+t,i=J,o=Math.max(1,W-U),c=Math.max(0,i-U),d=Math.max(0,Math.floor(c/a)-X),s=Math.ceil(o/a),u=Math.min(e-1,d+s+2*X);return{start:d,end:u,topSpacerHeight:y(d,r,t),bottomSpacerHeight:y(e-u-1,r,t)}},[l.value.length,U,X,n,J,W]),Z=Y.end>=Y.start?l.value.slice(Y.start,Y.end+1):[],$=[T.root,T.virtualized].filter(Boolean).join(" ");return t(H,{className:$,style:n.rootStyle,children:t(h,{ref:A,className:T.scrollContainer,onScroll:function(e){var r,t=e.currentTarget;K(t.scrollTop),t.scrollHeight-t.scrollTop-t.clientHeight<=n.nearEndThreshold&&(null===(r=l.onNearEnd)||void 0===r||r.call(l))},children:a(g,{size:"small",className:T.table,children:[t(f,{className:T.tableHeader,children:a(v,{ref:E,children:[n.selectable&&t(m,{padding:"checkbox",className:T.tableHeaderCell,sx:{width:48},children:t(p,{checked:I,indeterminate:j,onChange:O})}),n.columns.map(function(e){var l;return t(m,{className:T.tableHeaderCell,align:e.align,sx:w(e,i),children:null!==(l=e.label)&&void 0!==l?l:String(e.field)},String(e.field))})]})}),a(b,{children:[Y.topSpacerHeight>0?t(v,{className:T.tableSpacerRow,children:t(m,{colSpan:n.columns.length+(n.selectable?1:0),className:T.tableSpacerCell,sx:{height:Y.topSpacerHeight,padding:0,border:0}})}):null,Z.map(function(l,r){var o,c=Y.start+r,d=null!==(o=e.getterId(l,c))&&void 0!==o?o:c,s=z.includes(d),u=n.rowHeight,h=n.cellPadding;return a(v,{hover:!0,sx:{height:u},selected:s,children:[n.selectable&&t(m,{padding:"checkbox",className:T.tableBodyCell,sx:{height:u,padding:h},children:t(p,{checked:s,onChange:function(){return B(d)}})}),n.columns.map(function(e){return t(m,{className:T.tableBodyCell,align:e.align,sx:w(e,i,{height:u,padding:h}),children:t(S,{className:T.tableCellContent,children:M(e,l,c)})},"".concat(String(d),"-").concat(String(e.field)))})]},d)}),Y.bottomSpacerHeight>0?t(v,{className:T.tableSpacerRow,children:t(m,{colSpan:n.columns.length+(n.selectable?1:0),className:T.tableSpacerCell,sx:{height:Y.bottomSpacerHeight,padding:0,border:0}})}):null]})]})})})}}(l);return function(r){var a,o,c=null!==(a=null!==(o=r.renderStrategy)&&void 0!==o?o:l.renderStrategy)&&void 0!==a?a:"normal";return t("virtualized"===c?i:n,e({},r))}}function z(e){return function(r){var a,o,c,d=i(l(n().m(function e(){var l,t,a,i,o,c,d,s,u;return n().w(function(e){for(;;)switch(e.n){case 0:if("infiniteScroll"===r.loadMode){e.n=1;break}return e.a(2);case 1:if(null!==(l=r.pagination)&&void 0!==l&&l.hasNext){e.n=2;break}return e.a(2);case 2:if(!r.loading){e.n=3;break}return e.a(2);case 3:return d=null!==(t=null===(a=r.pagination)||void 0===a?void 0:a.page)&&void 0!==t?t:0,s=null!==(i=null===(o=r.pagination)||void 0===o?void 0:o.pageSize)&&void 0!==i?i:20,u=d+1,e.n=4,null===(c=r.onPageChange)||void 0===c?void 0:c.call(r,u,s);case 4:return e.a(2)}},e)})),[r.loadMode,null===(a=r.pagination)||void 0===a?void 0:a.hasNext,null===(o=r.pagination)||void 0===o?void 0:o.page,null===(c=r.pagination)||void 0===c?void 0:c.pageSize,r.loading,r.onPageChange]);return t(e,{value:r.value,columns:r.columns,density:r.density,spacing:r.spacing,renderStrategy:r.renderStrategy,normalOptions:r.normalOptions,virtualizedOptions:r.virtualizedOptions,onNearEnd:"infiniteScroll"===r.loadMode?d:void 0,selectable:r.selectable,selectedIds:r.selectedIds,onSelectionChange:r.onSelectionChange,scrollResetToken:r.scrollResetToken})}}export{R as createViewList,z as createViewListLoading,R as default};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/data-surface/view-list/index.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\r\nimport { Box, Checkbox, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Typography } from '@mui/material'\r\nimport { useListSelection, useMergedConfig } from './hooks'\r\nimport { ViewListStyled, viewListClasses as classes } from './styled'\r\nimport { LIST_HEADER_HEIGHT, mapSxTableCell, resolveListSpacerHeight } from './helpers'\r\n// types\r\nimport type { TableContainerProps } from '@mui/material'\r\nimport type { ComponentType, FC, ReactNode } from 'react'\r\nimport type { LoadingModeRule, TPagination } from '../types'\r\nimport type { IListCellParams, IViewListConfig, IViewListProps, TListColumn } from './types'\r\n\r\nexport * from './types'\r\n\r\n//#region Helpers\r\nfunction renderCellValue<T>(column: TListColumn<T>, row: T, index: number): ReactNode {\r\n const currentValue = (row as any)[column.field]\r\n const value = column.valueGetter ? column.valueGetter(currentValue, row, index) : currentValue\r\n const params: IListCellParams<T> = { value, row, index, field: column.field }\r\n if (column.renderCell) return column.renderCell(params)\r\n const valueLabel = String(value ?? '')\r\n return (\r\n <Typography variant='body2' noWrap title={valueLabel}>\r\n {valueLabel}\r\n </Typography>\r\n )\r\n}\r\n\r\n//#endregion\r\n//#region Normal List\r\nfunction createViewListNormal<T>(config: IViewListConfig<T>) {\r\n const ViewListNormal: FC<IViewListProps<T>> = (props) => {\r\n const mergedConfig = useMergedConfig(config, props)\r\n const { normalOptions } = mergedConfig\r\n const isAutoHeight = normalOptions.autoHeight == true\r\n const totalFlex = mergedConfig.columns.reduce((sum, col) => sum + (col.flex && col.flex > 0 ? col.flex : 0), 0)\r\n\r\n const onSelectionChange = props.onSelectionChange\r\n const scrollContainerRef = useRef<HTMLDivElement | null>(null)\r\n\r\n // Reset scroll to top when token changes (client-side filter reset)\r\n useEffect(() => {\r\n const isClient = props.featureMode === 'client'\r\n if (!isClient || isAutoHeight || props.scrollResetToken === undefined) return\r\n if (scrollContainerRef.current) scrollContainerRef.current.scrollTop = 0\r\n }, [props.featureMode, props.scrollResetToken])\r\n\r\n const handleScroll: TableContainerProps['onScroll'] = (e) => {\r\n if (isAutoHeight) return\r\n const t = e.currentTarget\r\n if (t.scrollHeight - t.scrollTop - t.clientHeight <= mergedConfig.nearEndThreshold) {\r\n props.onNearEnd?.()\r\n }\r\n }\r\n\r\n // Use selection hook to manage checkbox state and handlers\r\n const selection = useListSelection(props.value, config.getterId, mergedConfig.selectable, props.selectedIds, onSelectionChange)\r\n const { selectedIds, isAllSelected, isSomeSelected, handleToggleAll, handleToggleRow } = selection\r\n\r\n const rootClasses = useMemo(() => {\r\n const l = [classes.root, classes.normal]\r\n if (isAutoHeight) l.push(classes.autoHeight)\r\n return l.join(' ')\r\n }, [isAutoHeight])\r\n\r\n return (\r\n <ViewListStyled className={rootClasses} style={mergedConfig.rootStyle}>\r\n <TableContainer ref={scrollContainerRef} className={classes.scrollContainer} onScroll={handleScroll}>\r\n <Table size='small' className={classes.table}>\r\n <TableHead className={classes.tableHeader}>\r\n <TableRow>\r\n {mergedConfig.selectable && (\r\n <TableCell padding='checkbox' className={classes.tableHeaderCell} sx={{ width: 48 }}>\r\n <Checkbox checked={isAllSelected} indeterminate={isSomeSelected} onChange={handleToggleAll} />\r\n </TableCell>\r\n )}\r\n {mergedConfig.columns.map((col) => (\r\n <TableCell key={String(col.field)} className={classes.tableHeaderCell} align={col.align} sx={mapSxTableCell(col, totalFlex)}>\r\n {col.label ?? String(col.field)}\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {props.value.map((row, index) => {\r\n const rowKey = config.getterId(row, index) ?? index\r\n const isSelected = selectedIds.includes(rowKey)\r\n const { rowHeight, cellPadding } = mergedConfig\r\n return (\r\n <TableRow key={rowKey} hover sx={{ height: rowHeight }} selected={isSelected}>\r\n {mergedConfig.selectable && (\r\n <TableCell padding='checkbox' className={classes.tableBodyCell} sx={{ height: rowHeight, padding: cellPadding }}>\r\n <Checkbox checked={isSelected} onChange={() => handleToggleRow(rowKey)} />\r\n </TableCell>\r\n )}\r\n {mergedConfig.columns.map((col) => (\r\n <TableCell\r\n key={`${String(rowKey)}-${String(col.field)}`}\r\n className={classes.tableBodyCell}\r\n align={col.align}\r\n sx={mapSxTableCell(col, totalFlex, { height: rowHeight, padding: cellPadding })}\r\n >\r\n <Box className={classes.tableCellContent}>{renderCellValue(col, row, index)}</Box>\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n )\r\n })}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n </ViewListStyled>\r\n )\r\n }\r\n return ViewListNormal\r\n}\r\n//#endregion\r\n//#region Virtualized List\r\nfunction createViewListVirtualized<T>(config: IViewListConfig<T>) {\r\n const ViewListVirtualized: FC<IViewListProps<T>> = (props) => {\r\n const mergedConfig = useMergedConfig(config, props)\r\n const totalFlex = mergedConfig.columns.reduce((sum, col) => sum + (col.flex && col.flex > 0 ? col.flex : 0), 0)\r\n\r\n const onSelectionChange = props.onSelectionChange\r\n\r\n // Use selection hook to manage checkbox state and handlers\r\n const selection = useListSelection(props.value, config.getterId, mergedConfig.selectable, props.selectedIds, onSelectionChange)\r\n const { selectedIds, isAllSelected, isSomeSelected, handleToggleAll, handleToggleRow } = selection\r\n\r\n const wrapRef = useRef<HTMLDivElement | null>(null)\r\n const headerRowRef = useRef<HTMLTableRowElement | null>(null)\r\n const [containerHeight, setContainerHeight] = useState(0)\r\n const [scrollTopState, setScrollTopState] = useState(0)\r\n const [headerHeight, setHeaderHeight] = useState(LIST_HEADER_HEIGHT)\r\n\r\n const overscan = Math.max(1, mergedConfig.virtualizedOptions.overscan)\r\n\r\n // Reset scroll to top when token changes (client-side filter reset)\r\n useEffect(() => {\r\n if (props.featureMode !== 'client' || props.scrollResetToken === undefined) return\r\n if (wrapRef.current) wrapRef.current.scrollTop = 0\r\n setScrollTopState(0)\r\n }, [props.featureMode, props.scrollResetToken])\r\n\r\n const handleScroll: TableContainerProps['onScroll'] = (e) => {\r\n const t = e.currentTarget\r\n setScrollTopState(t.scrollTop)\r\n if (t.scrollHeight - t.scrollTop - t.clientHeight <= mergedConfig.nearEndThreshold) {\r\n props.onNearEnd?.()\r\n }\r\n }\r\n\r\n useLayoutEffect(() => {\r\n if (!wrapRef.current) return\r\n\r\n const updateSize = () => {\r\n const nextHeight = wrapRef.current?.clientHeight ?? 0\r\n setContainerHeight((prev) => (prev === nextHeight ? prev : nextHeight))\r\n }\r\n\r\n updateSize()\r\n\r\n const observer = new ResizeObserver(() => updateSize())\r\n observer.observe(wrapRef.current)\r\n return () => observer.disconnect()\r\n }, [])\r\n\r\n useLayoutEffect(() => {\r\n const measured = headerRowRef.current?.offsetHeight ?? 0\r\n if (measured > 0 && measured !== headerHeight) {\r\n setHeaderHeight(measured)\r\n }\r\n }, [mergedConfig.columns.length, headerHeight])\r\n\r\n const windowed = useMemo(() => {\r\n const totalItems = props.value.length\r\n if (totalItems === 0) {\r\n return { start: 0, end: -1, topSpacerHeight: 0, bottomSpacerHeight: 0 }\r\n }\r\n const { rowHeight, rowSpacing } = mergedConfig\r\n const rowStride = rowHeight + rowSpacing\r\n const effectiveScrollTop = scrollTopState\r\n const safeViewportHeight = Math.max(1, containerHeight - headerHeight)\r\n const adjustedScrollTop = Math.max(0, effectiveScrollTop - headerHeight)\r\n const start = Math.max(0, Math.floor(adjustedScrollTop / rowStride) - overscan)\r\n const visibleCount = Math.ceil(safeViewportHeight / rowStride)\r\n const end = Math.min(totalItems - 1, start + visibleCount + overscan * 2)\r\n\r\n const topSpacerHeight = resolveListSpacerHeight(start, rowHeight, rowSpacing)\r\n const bottomSpacerHeight = resolveListSpacerHeight(totalItems - end - 1, rowHeight, rowSpacing)\r\n\r\n return { start, end, topSpacerHeight, bottomSpacerHeight }\r\n }, [props.value.length, headerHeight, overscan, mergedConfig, scrollTopState, containerHeight])\r\n\r\n const rowsToRender = windowed.end >= windowed.start ? props.value.slice(windowed.start, windowed.end + 1) : []\r\n const rootClasses = [classes.root, classes.virtualized].filter(Boolean).join(' ')\r\n return (\r\n <ViewListStyled className={rootClasses} style={mergedConfig.rootStyle}>\r\n <TableContainer ref={wrapRef} className={classes.scrollContainer} onScroll={handleScroll}>\r\n <Table size='small' className={classes.table}>\r\n <TableHead className={classes.tableHeader}>\r\n <TableRow ref={headerRowRef}>\r\n {mergedConfig.selectable && (\r\n <TableCell padding='checkbox' className={classes.tableHeaderCell} sx={{ width: 48 }}>\r\n <Checkbox checked={isAllSelected} indeterminate={isSomeSelected} onChange={handleToggleAll} />\r\n </TableCell>\r\n )}\r\n {mergedConfig.columns.map((col) => (\r\n <TableCell key={String(col.field)} className={classes.tableHeaderCell} align={col.align} sx={mapSxTableCell(col, totalFlex)}>\r\n {col.label ?? String(col.field)}\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {windowed.topSpacerHeight > 0 ? (\r\n <TableRow className={classes.tableSpacerRow}>\r\n <TableCell\r\n colSpan={mergedConfig.columns.length + (mergedConfig.selectable ? 1 : 0)}\r\n className={classes.tableSpacerCell}\r\n sx={{ height: windowed.topSpacerHeight, padding: 0, border: 0 }}\r\n />\r\n </TableRow>\r\n ) : null}\r\n\r\n {rowsToRender.map((row, offset) => {\r\n const index = windowed.start + offset\r\n const rowKey = config.getterId(row, index) ?? index\r\n const isSelected = selectedIds.includes(rowKey)\r\n const { rowHeight, cellPadding } = mergedConfig\r\n return (\r\n <TableRow key={rowKey} hover sx={{ height: rowHeight }} selected={isSelected}>\r\n {mergedConfig.selectable && (\r\n <TableCell padding='checkbox' className={classes.tableBodyCell} sx={{ height: rowHeight, padding: cellPadding }}>\r\n <Checkbox checked={isSelected} onChange={() => handleToggleRow(rowKey)} />\r\n </TableCell>\r\n )}\r\n {mergedConfig.columns.map((col) => (\r\n <TableCell\r\n key={`${String(rowKey)}-${String(col.field)}`}\r\n className={classes.tableBodyCell}\r\n align={col.align}\r\n sx={mapSxTableCell(col, totalFlex, { height: rowHeight, padding: cellPadding })}\r\n >\r\n <Box className={classes.tableCellContent}>{renderCellValue(col, row, index)}</Box>\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n )\r\n })}\r\n\r\n {windowed.bottomSpacerHeight > 0 ? (\r\n <TableRow className={classes.tableSpacerRow}>\r\n <TableCell\r\n colSpan={mergedConfig.columns.length + (mergedConfig.selectable ? 1 : 0)}\r\n className={classes.tableSpacerCell}\r\n sx={{ height: windowed.bottomSpacerHeight, padding: 0, border: 0 }}\r\n />\r\n </TableRow>\r\n ) : null}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n </ViewListStyled>\r\n )\r\n }\r\n return ViewListVirtualized\r\n}\r\n//#endregion\r\n//#region Main\r\nexport function createViewList<T>(config: IViewListConfig<T>) {\r\n const ViewListNormal = createViewListNormal<T>(config)\r\n const ViewListVirtualized = createViewListVirtualized<T>(config)\r\n\r\n const ViewList: FC<IViewListProps<T>> = (props) => {\r\n const renderStrategy = props.renderStrategy ?? config.renderStrategy ?? 'normal'\r\n if (renderStrategy === 'virtualized') {\r\n return <ViewListVirtualized {...props} />\r\n }\r\n return <ViewListNormal {...props} />\r\n }\r\n return ViewList\r\n}\r\n\r\nexport interface IViewListLoadingProps<T> extends IViewListProps<T> {\r\n loadMode: LoadingModeRule\r\n loading?: boolean\r\n pagination?: TPagination\r\n onPageChange?: (page: number, pageSize: number) => void | Promise<void>\r\n}\r\n\r\nexport function createViewListLoading<T>(ListComponent: ComponentType<IViewListProps<T>>) {\r\n const ViewListLoading: FC<IViewListLoadingProps<T>> = (props) => {\r\n const handleNearEnd = useCallback(async () => {\r\n if (props.loadMode !== 'infiniteScroll') return\r\n if (!props.pagination?.hasNext) return\r\n if (props.loading) return\r\n\r\n const currentPage = props.pagination?.page ?? 0\r\n const currentPageSize = props.pagination?.pageSize ?? 20\r\n const nextPage = currentPage + 1\r\n await props.onPageChange?.(nextPage, currentPageSize)\r\n }, [props.loadMode, props.pagination?.hasNext, props.pagination?.page, props.pagination?.pageSize, props.loading, props.onPageChange])\r\n\r\n return (\r\n <ListComponent\r\n value={props.value}\r\n columns={props.columns}\r\n density={props.density}\r\n spacing={props.spacing}\r\n renderStrategy={props.renderStrategy}\r\n normalOptions={props.normalOptions}\r\n virtualizedOptions={props.virtualizedOptions}\r\n onNearEnd={props.loadMode === 'infiniteScroll' ? handleNearEnd : undefined}\r\n selectable={props.selectable}\r\n selectedIds={props.selectedIds}\r\n onSelectionChange={props.onSelectionChange}\r\n scrollResetToken={props.scrollResetToken}\r\n />\r\n )\r\n }\r\n\r\n return ViewListLoading\r\n}\r\n\r\nexport default createViewList\r\n//#endregion\r\n"],"names":["renderCellValue","column","row","index","currentValue","field","value","valueGetter","params","renderCell","valueLabel","String","_jsx","Typography","variant","noWrap","title","createViewList","config","ViewListNormal","props","mergedConfig","useMergedConfig","isAutoHeight","normalOptions","autoHeight","totalFlex","columns","reduce","sum","col","flex","onSelectionChange","scrollContainerRef","useRef","useEffect","featureMode","undefined","scrollResetToken","current","scrollTop","selection","useListSelection","getterId","selectable","selectedIds","isAllSelected","isSomeSelected","handleToggleAll","handleToggleRow","rootClasses","useMemo","l","classes","root","normal","push","join","ViewListStyled","className","style","rootStyle","children","TableContainer","ref","scrollContainer","onScroll","e","_props$onNearEnd","t","currentTarget","scrollHeight","clientHeight","nearEndThreshold","onNearEnd","call","_jsxs","Table","size","table","TableHead","tableHeader","TableRow","TableCell","padding","tableHeaderCell","sx","width","Checkbox","checked","indeterminate","onChange","map","_col$label","align","mapSxTableCell","label","TableBody","_config$getterId","rowKey","isSelected","includes","rowHeight","cellPadding","hover","height","selected","tableBodyCell","Box","tableCellContent","concat","createViewListNormal","ViewListVirtualized","wrapRef","headerRowRef","_useState","useState","_useState2","_slicedToArray","containerHeight","setContainerHeight","_useState3","_useState4","scrollTopState","setScrollTopState","_useState5","LIST_HEADER_HEIGHT","_useState6","headerHeight","setHeaderHeight","overscan","Math","max","virtualizedOptions","useLayoutEffect","updateSize","_wrapRef$current$clie","_wrapRef$current","nextHeight","prev","observer","ResizeObserver","observe","disconnect","_headerRowRef$current","_headerRowRef$current2","measured","offsetHeight","length","windowed","totalItems","start","end","topSpacerHeight","bottomSpacerHeight","rowSpacing","rowStride","effectiveScrollTop","safeViewportHeight","adjustedScrollTop","floor","visibleCount","ceil","min","resolveListSpacerHeight","rowsToRender","slice","virtualized","filter","Boolean","_props$onNearEnd2","_col$label2","tableSpacerRow","colSpan","tableSpacerCell","border","offset","_config$getterId2","createViewListVirtualized","_ref","_props$renderStrategy","renderStrategy","_objectSpread","createViewListLoading","ListComponent","_props$pagination4","_props$pagination5","_props$pagination6","handleNearEnd","useCallback","_asyncToGenerator","_regenerator","m","_callee","_props$pagination","_props$pagination$pag","_props$pagination2","_props$pagination$pag2","_props$pagination3","_props$onPageChange","currentPage","currentPageSize","nextPage","w","_context","n","loadMode","a","pagination","hasNext","loading","page","pageSize","onPageChange","density","spacing"],"mappings":"8qBAiBA,SAASA,EAAmBC,EAAwBC,EAAQC,GAC1D,IAAMC,EAAgBF,EAAYD,EAAOI,OACnCC,EAAQL,EAAOM,YAAcN,EAAOM,YAAYH,EAAcF,EAAKC,GAASC,EAC5EI,EAA6B,CAAEF,MAAAA,EAAOJ,IAAAA,EAAKC,MAAAA,EAAOE,MAAOJ,EAAOI,OACtE,GAAIJ,EAAOQ,WAAY,OAAOR,EAAOQ,WAAWD,GAChD,IAAME,EAAaC,OAAOL,QAAAA,EAAS,IACnC,OACEM,EAACC,EAAW,CAAAC,QAAQ,QAAQC,QAAM,EAACC,MAAON,WACvCA,GAGP,CAoPM,SAAUO,EAAkBC,GAChC,IAAMC,EAjPR,SAAiCD,GAoF/B,OAnF8C,SAACE,GAC7C,IAAMC,EAAeC,EAAgBJ,EAAQE,GAEvCG,EAA2C,GADvBF,EAAlBG,cAC2BC,WAC7BC,EAAYL,EAAaM,QAAQC,OAAO,SAACC,EAAKC,GAAG,OAAKD,GAAOC,EAAIC,MAAQD,EAAIC,KAAO,EAAID,EAAIC,KAAO,EAAE,EAAE,GAEvGC,EAAoBZ,EAAMY,kBAC1BC,EAAqBC,EAA8B,MAGzDC,EAAU,WAC+B,WAAtBf,EAAMgB,cACNb,QAA2Cc,IAA3BjB,EAAMkB,kBACnCL,EAAmBM,UAASN,EAAmBM,QAAQC,UAAY,EACxE,EAAE,CAACpB,EAAMgB,YAAahB,EAAMkB,mBAE7B,IASMG,EAAYC,EAAiBtB,EAAMd,MAAOY,EAAOyB,SAAUtB,EAAauB,WAAYxB,EAAMyB,YAAab,GACrGa,EAAiFJ,EAAjFI,YAAaC,EAAoEL,EAApEK,cAAeC,EAAqDN,EAArDM,eAAgBC,EAAqCP,EAArCO,gBAAiBC,EAAoBR,EAApBQ,gBAE/DC,EAAcC,EAAQ,WAC1B,IAAMC,EAAI,CAACC,EAAQC,KAAMD,EAAQE,QAEjC,OADIhC,GAAc6B,EAAEI,KAAKH,EAAQ5B,YAC1B2B,EAAEK,KAAK,IAChB,EAAG,CAAClC,IAEJ,OACEX,EAAC8C,GAAeC,UAAWT,EAAaU,MAAOvC,EAAawC,UAASC,SACnElD,EAACmD,EAAc,CAACC,IAAK/B,EAAoB0B,UAAWN,EAAQY,gBAAiBC,SApB3B,SAACC,GACrD,IAAI5C,EAAJ,CACA,IACoF6C,EAD9EC,EAAIF,EAAEG,cACRD,EAAEE,aAAeF,EAAE7B,UAAY6B,EAAEG,cAAgBnD,EAAaoD,mBACjD,QAAfL,EAAAhD,EAAMsD,iBAAS,IAAAN,GAAfA,EAAAO,KAAAvD,GAHgB,CAKnB,EAcsG0C,SACjGc,EAACC,GAAMC,KAAK,QAAQnB,UAAWN,EAAQ0B,MAAKjB,SAAA,CAC1ClD,EAACoE,EAAS,CAACrB,UAAWN,EAAQ4B,YAAWnB,SACvCc,EAACM,aACE7D,EAAauB,YACZhC,EAACuE,EAAS,CAACC,QAAQ,WAAWzB,UAAWN,EAAQgC,gBAAiBC,GAAI,CAAEC,MAAO,IAC7EzB,SAAAlD,EAAC4E,EAAS,CAAAC,QAAS3C,EAAe4C,cAAe3C,EAAgB4C,SAAU3C,MAG9E3B,EAAaM,QAAQiE,IAAI,SAAC9D,GAAG,IAAA+D,EAAA,OAC5BjF,EAACuE,EAAkC,CAAAxB,UAAWN,EAAQgC,gBAAiBS,MAAOhE,EAAIgE,MAAOR,GAAIS,EAAejE,EAAKJ,YACrG,UAATI,EAAIkE,aAAK,IAAAH,EAAAA,EAAIlF,OAAOmB,EAAIzB,QADXM,OAAOmB,EAAIzB,OAEf,QAIlBO,EAACqF,EACE,CAAAnC,SAAA1C,EAAMd,MAAMsF,IAAI,SAAC1F,EAAKC,GAAS,IAAA+F,EACxBC,EAAoC,QAA9BD,EAAGhF,EAAOyB,SAASzC,EAAKC,UAAM+F,IAAAA,EAAAA,EAAI/F,EACxCiG,EAAavD,EAAYwD,SAASF,GAChCG,EAA2BjF,EAA3BiF,UAAWC,EAAgBlF,EAAhBkF,YACnB,OACE3B,EAACM,EAAQ,CAAcsB,OAAM,EAAAlB,GAAI,CAAEmB,OAAQH,GAAaI,SAAUN,EAC/DtC,SAAA,CAAAzC,EAAauB,YACZhC,EAACuE,EAAU,CAAAC,QAAQ,WAAWzB,UAAWN,EAAQsD,cAAerB,GAAI,CAAEmB,OAAQH,EAAWlB,QAASmB,GAAazC,SAC7GlD,EAAC4E,EAAQ,CAACC,QAASW,EAAYT,SAAU,WAAF,OAAQ1C,EAAgBkD,EAAO,MAGzE9E,EAAaM,QAAQiE,IAAI,SAAC9D,GAAG,OAC5BlB,EAACuE,GAECxB,UAAWN,EAAQsD,cACnBb,MAAOhE,EAAIgE,MACXR,GAAIS,EAAejE,EAAKJ,EAAW,CAAE+E,OAAQH,EAAWlB,QAASmB,IAEjEzC,SAAAlD,EAACgG,EAAG,CAACjD,UAAWN,EAAQwD,0BAAmB7G,EAAgB8B,EAAK5B,EAAKC,gBAL7DQ,OAAOwF,GAAO,KAAAW,OAAInG,OAAOmB,EAAIzB,QAM3B,KAdD8F,EAkBlB,WAMZ,CAEH,CA4JyBY,CAAwB7F,GACzC8F,EA1JR,SAAsC9F,GAoJpC,OAnJmD,SAACE,GAClD,IAAMC,EAAeC,EAAgBJ,EAAQE,GACvCM,EAAYL,EAAaM,QAAQC,OAAO,SAACC,EAAKC,GAAG,OAAKD,GAAOC,EAAIC,MAAQD,EAAIC,KAAO,EAAID,EAAIC,KAAO,EAAE,EAAE,GAEvGC,EAAoBZ,EAAMY,kBAG1BS,EAAYC,EAAiBtB,EAAMd,MAAOY,EAAOyB,SAAUtB,EAAauB,WAAYxB,EAAMyB,YAAab,GACrGa,EAAiFJ,EAAjFI,YAAaC,EAAoEL,EAApEK,cAAeC,EAAqDN,EAArDM,eAAgBC,EAAqCP,EAArCO,gBAAiBC,EAAoBR,EAApBQ,gBAE/DgE,EAAU/E,EAA8B,MACxCgF,EAAehF,EAAmC,MACxDiF,EAA8CC,EAAS,GAAEC,EAAAC,EAAAH,EAAA,GAAlDI,EAAeF,EAAA,GAAEG,EAAkBH,EAAA,GAC1CI,EAA4CL,EAAS,GAAEM,EAAAJ,EAAAG,EAAA,GAAhDE,EAAcD,EAAA,GAAEE,EAAiBF,EAAA,GACxCG,EAAwCT,EAASU,GAAmBC,EAAAT,EAAAO,EAAA,GAA7DG,EAAYD,EAAA,GAAEE,EAAeF,EAAA,GAE9BG,EAAWC,KAAKC,IAAI,EAAG/G,EAAagH,mBAAmBH,UAG7D/F,EAAU,WACkB,WAAtBf,EAAMgB,kBAAuDC,IAA3BjB,EAAMkB,mBACxC2E,EAAQ1E,UAAS0E,EAAQ1E,QAAQC,UAAY,GACjDoF,EAAkB,GACnB,EAAE,CAACxG,EAAMgB,YAAahB,EAAMkB,mBAU7BgG,EAAgB,WACd,GAAKrB,EAAQ1E,QAAb,CAEA,IAAMgG,EAAa,WAAK,IAAAC,EAAAC,EAChBC,EAA0C,QAAhCF,EAAkB,QAAlBC,EAAGxB,EAAQ1E,eAARkG,IAAeA,OAAfA,EAAAA,EAAiBjE,oBAAYgE,IAAAA,EAAAA,EAAI,EACpDhB,EAAmB,SAACmB,GAAI,OAAMA,IAASD,EAAaC,EAAOD,CAAU,EACtE,EAEDH,IAEA,IAAMK,EAAW,IAAIC,eAAe,WAAA,OAAMN,MAE1C,OADAK,EAASE,QAAQ7B,EAAQ1E,SAClB,WAAA,OAAMqG,EAASG,YAAY,CAXZ,CAYvB,EAAE,IAEHT,EAAgB,WAAK,IAAAU,EAAAC,EACbC,EAA6C,QAArCF,EAAuB,QAAvBC,EAAG/B,EAAa3E,eAAb0G,IAAoBA,OAApBA,EAAAA,EAAsBE,oBAAYH,IAAAA,EAAAA,EAAI,EACnDE,EAAW,GAAKA,IAAalB,GAC/BC,EAAgBiB,EAEnB,EAAE,CAAC7H,EAAaM,QAAQyH,OAAQpB,IAEjC,IAAMqB,EAAWlG,EAAQ,WACvB,IAAMmG,EAAalI,EAAMd,MAAM8I,OAC/B,GAAmB,IAAfE,EACF,MAAO,CAAEC,MAAO,EAAGC,KAAO,EAAEC,gBAAiB,EAAGC,mBAAoB,GAEtE,IAAQpD,EAA0BjF,EAA1BiF,UAAWqD,EAAetI,EAAfsI,WACbC,EAAYtD,EAAYqD,EACxBE,EAAqBlC,EACrBmC,EAAqB3B,KAAKC,IAAI,EAAGb,EAAkBS,GACnD+B,EAAoB5B,KAAKC,IAAI,EAAGyB,EAAqB7B,GACrDuB,EAAQpB,KAAKC,IAAI,EAAGD,KAAK6B,MAAMD,EAAoBH,GAAa1B,GAChE+B,EAAe9B,KAAK+B,KAAKJ,EAAqBF,GAC9CJ,EAAMrB,KAAKgC,IAAIb,EAAa,EAAGC,EAAQU,EAA0B,EAAX/B,GAK5D,MAAO,CAAEqB,MAAAA,EAAOC,IAAAA,EAAKC,gBAHGW,EAAwBb,EAAOjD,EAAWqD,GAG5BD,mBAFXU,EAAwBd,EAAaE,EAAM,EAAGlD,EAAWqD,GAGtF,EAAG,CAACvI,EAAMd,MAAM8I,OAAQpB,EAAcE,EAAU7G,EAAcsG,EAAgBJ,IAExE8C,EAAehB,EAASG,KAAOH,EAASE,MAAQnI,EAAMd,MAAMgK,MAAMjB,EAASE,MAAOF,EAASG,IAAM,GAAK,GACtGtG,EAAc,CAACG,EAAQC,KAAMD,EAAQkH,aAAaC,OAAOC,SAAShH,KAAK,KAC7E,OACE7C,EAAC8C,EAAe,CAAAC,UAAWT,EAAaU,MAAOvC,EAAawC,UAC1DC,SAAAlD,EAACmD,EAAc,CAACC,IAAKiD,EAAStD,UAAWN,EAAQY,gBAAiBC,SAtDhB,SAACC,GACrD,IAEoFuG,EAF9ErG,EAAIF,EAAEG,cACZsD,EAAkBvD,EAAE7B,WAChB6B,EAAEE,aAAeF,EAAE7B,UAAY6B,EAAEG,cAAgBnD,EAAaoD,mBACjD,QAAfiG,EAAAtJ,EAAMsD,iBAAS,IAAAgG,GAAfA,EAAA/F,KAAAvD,GAEH,EAgD2F0C,SACtFc,EAACC,EAAM,CAAAC,KAAK,QAAQnB,UAAWN,EAAQ0B,MACrCjB,SAAA,CAAAlD,EAACoE,EAAS,CAACrB,UAAWN,EAAQ4B,YAAWnB,SACvCc,EAACM,EAAS,CAAAlB,IAAKkD,EACZpD,SAAA,CAAAzC,EAAauB,YACZhC,EAACuE,EAAS,CAACC,QAAQ,WAAWzB,UAAWN,EAAQgC,gBAAiBC,GAAI,CAAEC,MAAO,IAAIzB,SACjFlD,EAAC4E,EAAS,CAAAC,QAAS3C,EAAe4C,cAAe3C,EAAgB4C,SAAU3C,MAG9E3B,EAAaM,QAAQiE,IAAI,SAAC9D,GAAG,IAAA6I,EAAA,OAC5B/J,EAACuE,EAAkC,CAAAxB,UAAWN,EAAQgC,gBAAiBS,MAAOhE,EAAIgE,MAAOR,GAAIS,EAAejE,EAAKJ,GAC9GoC,SAAS,QAAT6G,EAAA7I,EAAIkE,aAAK,IAAA2E,EAAAA,EAAIhK,OAAOmB,EAAIzB,QADXM,OAAOmB,EAAIzB,OAEf,QAIlBuE,EAACqB,EACE,CAAAnC,SAAA,CAAAuF,EAASI,gBAAkB,EAC1B7I,EAACsE,EAAS,CAAAvB,UAAWN,EAAQuH,eAC3B9G,SAAAlD,EAACuE,EAAS,CACR0F,QAASxJ,EAAaM,QAAQyH,QAAU/H,EAAauB,WAAa,EAAI,GACtEe,UAAWN,EAAQyH,gBACnBxF,GAAI,CAAEmB,OAAQ4C,EAASI,gBAAiBrE,QAAS,EAAG2F,OAAQ,OAG9D,KAEHV,EAAazE,IAAI,SAAC1F,EAAK8K,GAAU,IAAAC,EAC1B9K,EAAQkJ,EAASE,MAAQyB,EACzB7E,EAAoC,QAA9B8E,EAAG/J,EAAOyB,SAASzC,EAAKC,UAAM8K,IAAAA,EAAAA,EAAI9K,EACxCiG,EAAavD,EAAYwD,SAASF,GAChCG,EAA2BjF,EAA3BiF,UAAWC,EAAgBlF,EAAhBkF,YACnB,OACE3B,EAACM,EAAQ,CAAcsB,OAAM,EAAAlB,GAAI,CAAEmB,OAAQH,GAAaI,SAAUN,EAC/DtC,SAAA,CAAAzC,EAAauB,YACZhC,EAACuE,EAAU,CAAAC,QAAQ,WAAWzB,UAAWN,EAAQsD,cAAerB,GAAI,CAAEmB,OAAQH,EAAWlB,QAASmB,GAAazC,SAC7GlD,EAAC4E,EAAQ,CAACC,QAASW,EAAYT,SAAU,WAAF,OAAQ1C,EAAgBkD,EAAO,MAGzE9E,EAAaM,QAAQiE,IAAI,SAAC9D,GAAG,OAC5BlB,EAACuE,GAECxB,UAAWN,EAAQsD,cACnBb,MAAOhE,EAAIgE,MACXR,GAAIS,EAAejE,EAAKJ,EAAW,CAAE+E,OAAQH,EAAWlB,QAASmB,IAEjEzC,SAAAlD,EAACgG,EAAG,CAACjD,UAAWN,EAAQwD,0BAAmB7G,EAAgB8B,EAAK5B,EAAKC,gBAL7DQ,OAAOwF,GAAO,KAAAW,OAAInG,OAAOmB,EAAIzB,QAM3B,KAdD8F,EAkBlB,GAEAkD,EAASK,mBAAqB,EAC7B9I,EAACsE,GAASvB,UAAWN,EAAQuH,eAC3B9G,SAAAlD,EAACuE,EACC,CAAA0F,QAASxJ,EAAaM,QAAQyH,QAAU/H,EAAauB,WAAa,EAAI,GACtEe,UAAWN,EAAQyH,gBACnBxF,GAAI,CAAEmB,OAAQ4C,EAASK,mBAAoBtE,QAAS,EAAG2F,OAAQ,OAGjE,cAMf,CAEH,CAK8BG,CAA6BhK,GASzD,OAPwC,SAACE,GAAS,IAAA+J,EAAAC,EAC1CC,UAAcF,EAAuBC,QAAvBA,EAAGhK,EAAMiK,0BAAcD,EAAAA,EAAIlK,EAAOmK,sBAAc,IAAAF,EAAAA,EAAI,SACxE,OACSvK,EADc,gBAAnByK,EACMrE,EAEF7F,EAFqBmK,EAAKlK,CAAAA,EAAAA,GAGnC,CAEH,CASM,SAAUmK,EAAyBC,GA+BvC,OA9BsD,SAACpK,GAAS,IAAAqK,EAAAC,EAAAC,EACxDC,EAAgBC,EAAWC,EAAAC,IAAAC,EAAC,SAAAC,IAAA,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAX,IAAAY,EAAA,SAAAC,GAAA,cAAAA,EAAAC,GAAA,KAAA,EAAA,GACT,mBAAnBzL,EAAM0L,SAA6B,CAAAF,EAAAC,EAAA,EAAA,KAAA,CAAA,OAAAD,EAAAG,EAAA,GAAA,KAAA,EAAA,WAAAb,EAClC9K,EAAM4L,kBAAU,IAAAd,GAAhBA,EAAkBe,QAAO,CAAAL,EAAAC,EAAA,EAAA,KAAA,CAAA,OAAAD,EAAAG,EAAA,GAAA,KAAA,EAAA,IAC1B3L,EAAM8L,QAAO,CAAAN,EAAAC,EAAA,EAAA,KAAA,CAAA,OAAAD,EAAAG,EAAA,GAAA,KAAA,EAIe,OAF1BP,EAAoC,QAAzBL,EAAmB,QAAnBC,EAAGhL,EAAM4L,kBAANZ,IAAgBA,OAAhBA,EAAAA,EAAkBe,YAAIhB,IAAAA,EAAAA,EAAI,EACxCM,EAA4C,QAA7BJ,EAAmB,QAAnBC,EAAGlL,EAAM4L,kBAANV,IAAgBA,OAAhBA,EAAAA,EAAkBc,gBAAQf,IAAAA,EAAAA,EAAI,GAChDK,EAAWF,EAAc,EAACI,EAAAC,EAAA,UAAAN,EAC1BnL,EAAMiM,oBAAY,IAAAd,OAAA,EAAlBA,EAAA5H,KAAAvD,EAAqBsL,EAAUD,GAAgB,KAAA,EAAA,OAAAG,EAAAG,EAAA,GAAA,EAAAd,MACpD,CAAC7K,EAAM0L,iBAAQrB,EAAErK,EAAM4L,kBAAU,IAAAvB,OAAA,EAAhBA,EAAkBwB,QAAyBvB,QAAlBA,EAAEtK,EAAM4L,sBAAUtB,SAAhBA,EAAkByB,KAAsB,QAAlBxB,EAAEvK,EAAM4L,kBAAU,IAAArB,OAAA,EAAhBA,EAAkByB,SAAUhM,EAAM8L,QAAS9L,EAAMiM,eAExH,OACEzM,EAAC4K,GACClL,MAAOc,EAAMd,MACbqB,QAASP,EAAMO,QACf2L,QAASlM,EAAMkM,QACfC,QAASnM,EAAMmM,QACflC,eAAgBjK,EAAMiK,eACtB7J,cAAeJ,EAAMI,cACrB6G,mBAAoBjH,EAAMiH,mBAC1B3D,UAA8B,mBAAnBtD,EAAM0L,SAAgClB,OAAgBvJ,EACjEO,WAAYxB,EAAMwB,WAClBC,YAAazB,EAAMyB,YACnBb,kBAAmBZ,EAAMY,kBACzBM,iBAAkBlB,EAAMkB,kBAG7B,CAGH"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/data-surface/view-list/index.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\r\nimport { Box, Checkbox, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Typography } from '@mui/material'\r\nimport { useListSelection, useMergedConfig } from './hooks'\r\nimport { ViewListStyled, viewListClasses as classes } from './styled'\r\nimport { LIST_HEADER_HEIGHT, mapSxTableCell, resolveListSpacerHeight } from './helpers'\r\n// types\r\nimport type { TableContainerProps } from '@mui/material'\r\nimport type { ComponentType, FC, ReactNode } from 'react'\r\nimport type { LoadingModeRule, TPagination } from '../types'\r\nimport type { IListCellParams, IViewListConfig, IViewListProps, TListColumn } from './types'\r\n\r\nexport * from './types'\r\n\r\n//#region Helpers\r\nfunction renderCellValue<T>(column: TListColumn<T>, row: T, index: number): ReactNode {\r\n const currentValue = (row as any)[column.field]\r\n const value = column.valueGetter ? column.valueGetter(currentValue, row, index) : currentValue\r\n const params: IListCellParams<T> = { value, row, index, field: column.field }\r\n if (column.renderCell) return column.renderCell(params)\r\n const valueLabel = String(value ?? '')\r\n return (\r\n <Typography variant='body2' noWrap title={valueLabel}>\r\n {valueLabel}\r\n </Typography>\r\n )\r\n}\r\n\r\n//#endregion\r\n//#region Normal List\r\nfunction createViewListNormal<T>(config: IViewListConfig<T>) {\r\n const ViewListNormal: FC<IViewListProps<T>> = (props) => {\r\n const mergedConfig = useMergedConfig(config, props)\r\n const { normalOptions } = mergedConfig\r\n const isAutoHeight = normalOptions.autoHeight == true\r\n const totalFlex = mergedConfig.columns.reduce((sum, col) => sum + (col.flex && col.flex > 0 ? col.flex : 0), 0)\r\n\r\n const onSelectionChange = props.onSelectionChange\r\n const scrollContainerRef = useRef<HTMLDivElement | null>(null)\r\n\r\n // Reset scroll to top when token changes (client-side filter reset)\r\n useEffect(() => {\r\n const isClient = props.featureMode === 'client'\r\n if (!isClient || isAutoHeight || props.scrollResetToken === undefined) return\r\n if (scrollContainerRef.current) scrollContainerRef.current.scrollTop = 0\r\n }, [props.featureMode, props.scrollResetToken])\r\n\r\n const handleScroll: TableContainerProps['onScroll'] = (e) => {\r\n if (isAutoHeight) return\r\n const t = e.currentTarget\r\n if (t.scrollHeight - t.scrollTop - t.clientHeight <= mergedConfig.nearEndThreshold) {\r\n props.onNearEnd?.()\r\n }\r\n }\r\n\r\n // Use selection hook to manage checkbox state and handlers\r\n const selection = useListSelection(props.value, config.getterId, mergedConfig.selectable, props.selectedIds, onSelectionChange)\r\n const { selectedIds, isAllSelected, isSomeSelected, handleToggleAll, handleToggleRow } = selection\r\n\r\n const rootClasses = useMemo(() => {\r\n const l = [classes.root, classes.normal]\r\n if (isAutoHeight) l.push(classes.autoHeight)\r\n return l.join(' ')\r\n }, [isAutoHeight])\r\n\r\n return (\r\n <ViewListStyled className={rootClasses} style={mergedConfig.rootStyle}>\r\n <TableContainer ref={scrollContainerRef} className={classes.scrollContainer} onScroll={handleScroll}>\r\n <Table size='small' className={classes.table}>\r\n <TableHead className={classes.tableHeader}>\r\n <TableRow>\r\n {mergedConfig.selectable && (\r\n <TableCell padding='checkbox' className={classes.tableHeaderCell} sx={{ width: 48 }}>\r\n <Checkbox checked={isAllSelected} indeterminate={isSomeSelected} onChange={handleToggleAll} />\r\n </TableCell>\r\n )}\r\n {mergedConfig.columns.map((col) => (\r\n <TableCell key={String(col.field)} className={classes.tableHeaderCell} align={col.align} sx={mapSxTableCell(col, totalFlex)}>\r\n {col.label ?? String(col.field)}\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {props.value.map((row, index) => {\r\n const rowKey = config.getterId(row, index) ?? index\r\n const isSelected = selectedIds.includes(rowKey)\r\n const { rowHeight, cellPadding } = mergedConfig\r\n return (\r\n <TableRow key={rowKey} hover sx={{ height: rowHeight }} selected={isSelected}>\r\n {mergedConfig.selectable && (\r\n <TableCell padding='checkbox' className={classes.tableBodyCell} sx={{ height: rowHeight, padding: cellPadding }}>\r\n <Checkbox checked={isSelected} onChange={() => handleToggleRow(rowKey)} />\r\n </TableCell>\r\n )}\r\n {mergedConfig.columns.map((col) => (\r\n <TableCell\r\n key={`${String(rowKey)}-${String(col.field)}`}\r\n className={classes.tableBodyCell}\r\n align={col.align}\r\n sx={mapSxTableCell(col, totalFlex, { height: rowHeight, padding: cellPadding })}\r\n >\r\n <Box className={classes.tableCellContent}>{renderCellValue(col, row, index)}</Box>\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n )\r\n })}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n </ViewListStyled>\r\n )\r\n }\r\n return ViewListNormal\r\n}\r\n//#endregion\r\n//#region Virtualized List\r\nfunction createViewListVirtualized<T>(config: IViewListConfig<T>) {\r\n const ViewListVirtualized: FC<IViewListProps<T>> = (props) => {\r\n const mergedConfig = useMergedConfig(config, props)\r\n const totalFlex = mergedConfig.columns.reduce((sum, col) => sum + (col.flex && col.flex > 0 ? col.flex : 0), 0)\r\n\r\n const onSelectionChange = props.onSelectionChange\r\n\r\n // Use selection hook to manage checkbox state and handlers\r\n const selection = useListSelection(props.value, config.getterId, mergedConfig.selectable, props.selectedIds, onSelectionChange)\r\n const { selectedIds, isAllSelected, isSomeSelected, handleToggleAll, handleToggleRow } = selection\r\n\r\n const wrapRef = useRef<HTMLDivElement | null>(null)\r\n const headerRowRef = useRef<HTMLTableRowElement | null>(null)\r\n const hasHeaderMeasuredRef = useRef(false)\r\n const [containerHeight, setContainerHeight] = useState(0)\r\n const [scrollTopState, setScrollTopState] = useState(0)\r\n const [headerHeight, setHeaderHeight] = useState(LIST_HEADER_HEIGHT)\r\n\r\n const overscan = Math.max(1, mergedConfig.virtualizedOptions.overscan)\r\n\r\n // Reset scroll to top when token changes (client-side filter reset)\r\n useEffect(() => {\r\n if (props.featureMode !== 'client' || props.scrollResetToken === undefined) return\r\n if (wrapRef.current) wrapRef.current.scrollTop = 0\r\n setScrollTopState(0)\r\n }, [props.featureMode, props.scrollResetToken])\r\n\r\n const handleScroll: TableContainerProps['onScroll'] = (e) => {\r\n const t = e.currentTarget\r\n setScrollTopState(t.scrollTop)\r\n if (t.scrollHeight - t.scrollTop - t.clientHeight <= mergedConfig.nearEndThreshold) {\r\n props.onNearEnd?.()\r\n }\r\n }\r\n\r\n useLayoutEffect(() => {\r\n if (!wrapRef.current) return\r\n\r\n const updateSize = () => {\r\n const nextHeight = wrapRef.current?.clientHeight ?? 0\r\n setContainerHeight((prev) => (prev === nextHeight ? prev : nextHeight))\r\n }\r\n\r\n updateSize()\r\n\r\n const observer = new ResizeObserver(() => updateSize())\r\n observer.observe(wrapRef.current)\r\n return () => observer.disconnect()\r\n }, [])\r\n\r\n useLayoutEffect(() => {\r\n hasHeaderMeasuredRef.current = false\r\n }, [mergedConfig.columns.length])\r\n\r\n useLayoutEffect(() => {\r\n if (hasHeaderMeasuredRef.current) return\r\n const measured = headerRowRef.current?.offsetHeight ?? 0\r\n if (measured > 0) {\r\n hasHeaderMeasuredRef.current = true\r\n setHeaderHeight(measured)\r\n }\r\n }, [mergedConfig.columns.length])\r\n\r\n const windowed = useMemo(() => {\r\n const totalItems = props.value.length\r\n if (totalItems === 0) {\r\n return { start: 0, end: -1, topSpacerHeight: 0, bottomSpacerHeight: 0 }\r\n }\r\n const { rowHeight, rowSpacing } = mergedConfig\r\n const rowStride = rowHeight + rowSpacing\r\n const effectiveScrollTop = scrollTopState\r\n const safeViewportHeight = Math.max(1, containerHeight - headerHeight)\r\n const adjustedScrollTop = Math.max(0, effectiveScrollTop - headerHeight)\r\n const start = Math.max(0, Math.floor(adjustedScrollTop / rowStride) - overscan)\r\n const visibleCount = Math.ceil(safeViewportHeight / rowStride)\r\n const end = Math.min(totalItems - 1, start + visibleCount + overscan * 2)\r\n\r\n const topSpacerHeight = resolveListSpacerHeight(start, rowHeight, rowSpacing)\r\n const bottomSpacerHeight = resolveListSpacerHeight(totalItems - end - 1, rowHeight, rowSpacing)\r\n\r\n return { start, end, topSpacerHeight, bottomSpacerHeight }\r\n }, [props.value.length, headerHeight, overscan, mergedConfig, scrollTopState, containerHeight])\r\n\r\n const rowsToRender = windowed.end >= windowed.start ? props.value.slice(windowed.start, windowed.end + 1) : []\r\n const rootClasses = [classes.root, classes.virtualized].filter(Boolean).join(' ')\r\n return (\r\n <ViewListStyled className={rootClasses} style={mergedConfig.rootStyle}>\r\n <TableContainer ref={wrapRef} className={classes.scrollContainer} onScroll={handleScroll}>\r\n <Table size='small' className={classes.table}>\r\n <TableHead className={classes.tableHeader}>\r\n <TableRow ref={headerRowRef}>\r\n {mergedConfig.selectable && (\r\n <TableCell padding='checkbox' className={classes.tableHeaderCell} sx={{ width: 48 }}>\r\n <Checkbox checked={isAllSelected} indeterminate={isSomeSelected} onChange={handleToggleAll} />\r\n </TableCell>\r\n )}\r\n {mergedConfig.columns.map((col) => (\r\n <TableCell key={String(col.field)} className={classes.tableHeaderCell} align={col.align} sx={mapSxTableCell(col, totalFlex)}>\r\n {col.label ?? String(col.field)}\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {windowed.topSpacerHeight > 0 ? (\r\n <TableRow className={classes.tableSpacerRow}>\r\n <TableCell\r\n colSpan={mergedConfig.columns.length + (mergedConfig.selectable ? 1 : 0)}\r\n className={classes.tableSpacerCell}\r\n sx={{ height: windowed.topSpacerHeight, padding: 0, border: 0 }}\r\n />\r\n </TableRow>\r\n ) : null}\r\n\r\n {rowsToRender.map((row, offset) => {\r\n const index = windowed.start + offset\r\n const rowKey = config.getterId(row, index) ?? index\r\n const isSelected = selectedIds.includes(rowKey)\r\n const { rowHeight, cellPadding } = mergedConfig\r\n return (\r\n <TableRow key={rowKey} hover sx={{ height: rowHeight }} selected={isSelected}>\r\n {mergedConfig.selectable && (\r\n <TableCell padding='checkbox' className={classes.tableBodyCell} sx={{ height: rowHeight, padding: cellPadding }}>\r\n <Checkbox checked={isSelected} onChange={() => handleToggleRow(rowKey)} />\r\n </TableCell>\r\n )}\r\n {mergedConfig.columns.map((col) => (\r\n <TableCell\r\n key={`${String(rowKey)}-${String(col.field)}`}\r\n className={classes.tableBodyCell}\r\n align={col.align}\r\n sx={mapSxTableCell(col, totalFlex, { height: rowHeight, padding: cellPadding })}\r\n >\r\n <Box className={classes.tableCellContent}>{renderCellValue(col, row, index)}</Box>\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n )\r\n })}\r\n\r\n {windowed.bottomSpacerHeight > 0 ? (\r\n <TableRow className={classes.tableSpacerRow}>\r\n <TableCell\r\n colSpan={mergedConfig.columns.length + (mergedConfig.selectable ? 1 : 0)}\r\n className={classes.tableSpacerCell}\r\n sx={{ height: windowed.bottomSpacerHeight, padding: 0, border: 0 }}\r\n />\r\n </TableRow>\r\n ) : null}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n </ViewListStyled>\r\n )\r\n }\r\n return ViewListVirtualized\r\n}\r\n//#endregion\r\n//#region Main\r\nexport function createViewList<T>(config: IViewListConfig<T>) {\r\n const ViewListNormal = createViewListNormal<T>(config)\r\n const ViewListVirtualized = createViewListVirtualized<T>(config)\r\n\r\n const ViewList: FC<IViewListProps<T>> = (props) => {\r\n const renderStrategy = props.renderStrategy ?? config.renderStrategy ?? 'normal'\r\n if (renderStrategy === 'virtualized') {\r\n return <ViewListVirtualized {...props} />\r\n }\r\n return <ViewListNormal {...props} />\r\n }\r\n return ViewList\r\n}\r\n\r\nexport interface IViewListLoadingProps<T> extends IViewListProps<T> {\r\n loadMode: LoadingModeRule\r\n loading?: boolean\r\n pagination?: TPagination\r\n onPageChange?: (page: number, pageSize: number) => void | Promise<void>\r\n}\r\n\r\nexport function createViewListLoading<T>(ListComponent: ComponentType<IViewListProps<T>>) {\r\n const ViewListLoading: FC<IViewListLoadingProps<T>> = (props) => {\r\n const handleNearEnd = useCallback(async () => {\r\n if (props.loadMode !== 'infiniteScroll') return\r\n if (!props.pagination?.hasNext) return\r\n if (props.loading) return\r\n\r\n const currentPage = props.pagination?.page ?? 0\r\n const currentPageSize = props.pagination?.pageSize ?? 20\r\n const nextPage = currentPage + 1\r\n await props.onPageChange?.(nextPage, currentPageSize)\r\n }, [props.loadMode, props.pagination?.hasNext, props.pagination?.page, props.pagination?.pageSize, props.loading, props.onPageChange])\r\n\r\n return (\r\n <ListComponent\r\n value={props.value}\r\n columns={props.columns}\r\n density={props.density}\r\n spacing={props.spacing}\r\n renderStrategy={props.renderStrategy}\r\n normalOptions={props.normalOptions}\r\n virtualizedOptions={props.virtualizedOptions}\r\n onNearEnd={props.loadMode === 'infiniteScroll' ? handleNearEnd : undefined}\r\n selectable={props.selectable}\r\n selectedIds={props.selectedIds}\r\n onSelectionChange={props.onSelectionChange}\r\n scrollResetToken={props.scrollResetToken}\r\n />\r\n )\r\n }\r\n\r\n return ViewListLoading\r\n}\r\n\r\nexport default createViewList\r\n//#endregion\r\n"],"names":["renderCellValue","column","row","index","currentValue","field","value","valueGetter","params","renderCell","valueLabel","String","_jsx","Typography","variant","noWrap","title","createViewList","config","ViewListNormal","props","mergedConfig","useMergedConfig","isAutoHeight","normalOptions","autoHeight","totalFlex","columns","reduce","sum","col","flex","onSelectionChange","scrollContainerRef","useRef","useEffect","featureMode","undefined","scrollResetToken","current","scrollTop","selection","useListSelection","getterId","selectable","selectedIds","isAllSelected","isSomeSelected","handleToggleAll","handleToggleRow","rootClasses","useMemo","l","classes","root","normal","push","join","ViewListStyled","className","style","rootStyle","children","TableContainer","ref","scrollContainer","onScroll","e","_props$onNearEnd","t","currentTarget","scrollHeight","clientHeight","nearEndThreshold","onNearEnd","call","_jsxs","Table","size","table","TableHead","tableHeader","TableRow","TableCell","padding","tableHeaderCell","sx","width","Checkbox","checked","indeterminate","onChange","map","_col$label","align","mapSxTableCell","label","TableBody","_config$getterId","rowKey","isSelected","includes","rowHeight","cellPadding","hover","height","selected","tableBodyCell","Box","tableCellContent","concat","createViewListNormal","ViewListVirtualized","wrapRef","headerRowRef","hasHeaderMeasuredRef","_useState","useState","_useState2","_slicedToArray","containerHeight","setContainerHeight","_useState3","_useState4","scrollTopState","setScrollTopState","_useState5","LIST_HEADER_HEIGHT","_useState6","headerHeight","setHeaderHeight","overscan","Math","max","virtualizedOptions","useLayoutEffect","updateSize","_wrapRef$current$clie","_wrapRef$current","nextHeight","prev","observer","ResizeObserver","observe","disconnect","length","_headerRowRef$current","_headerRowRef$current2","measured","offsetHeight","windowed","totalItems","start","end","topSpacerHeight","bottomSpacerHeight","rowSpacing","rowStride","effectiveScrollTop","safeViewportHeight","adjustedScrollTop","floor","visibleCount","ceil","min","resolveListSpacerHeight","rowsToRender","slice","virtualized","filter","Boolean","_props$onNearEnd2","_col$label2","tableSpacerRow","colSpan","tableSpacerCell","border","offset","_config$getterId2","createViewListVirtualized","_ref","_props$renderStrategy","renderStrategy","_objectSpread","createViewListLoading","ListComponent","_props$pagination4","_props$pagination5","_props$pagination6","handleNearEnd","useCallback","_asyncToGenerator","_regenerator","m","_callee","_props$pagination","_props$pagination$pag","_props$pagination2","_props$pagination$pag2","_props$pagination3","_props$onPageChange","currentPage","currentPageSize","nextPage","w","_context","n","loadMode","a","pagination","hasNext","loading","page","pageSize","onPageChange","density","spacing"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{defineProperty as e}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{styled as t,Box as o,alpha as a}from"@mui/material";var i="--DinoViewList-rowSpacing",r={root:"DinoViewList-root",normal:"DinoViewList-normal",virtualized:"DinoViewList-virtualized",autoHeight:"DinoViewList-autoHeight",scrollContainer:"DinoViewList-scrollContainer",table:"DinoViewList-table",tableHeader:"DinoViewList-tableHeader",tableHeaderCell:"DinoViewList-tableHeaderCell",tableBodyCell:"DinoViewList-tableBodyCell",tableSpacerRow:"DinoViewList-tableSpacerRow",tableSpacerCell:"DinoViewList-tableSpacerCell",tableCellContent:"DinoViewList-tableCellContent"},l=r,n=t(o)(function(t){var o=t.theme,r=o.palette.mode,n=a(o.palette.common.black,"dark"===r?.24:.08),c="dark"===r?o.palette.grey[800]:o.palette.grey[50];return e(e(e(e(e(e(e(e(e({},"&.".concat(l.root),{position:"relative",width:"100%",height:"100%",overflow:"hidden"}),".".concat(l.scrollContainer),{position:"absolute",inset:0,overflowY:"auto",padding:o.spacing(0,.5),margin:o.spacing(0,-.5),"&::-webkit-scrollbar":{width:8,height:8},"&::-webkit-scrollbar-thumb":{backgroundColor:o.palette.grey[300],borderRadius:4},"&::-webkit-scrollbar-thumb:hover":{backgroundColor:o.palette.grey[500]}}),".".concat(l.table),{tableLayout:"auto",width:"100%",borderCollapse:"separate",borderSpacing:"0 var(".concat(i,", ").concat(o.spacing(.5),")"),marginTop:"calc(var(".concat(i,", ").concat(o.spacing(.5),") * -1)")}),".".concat(l.tableHeader),{position:"sticky",top:0,zIndex:2,backgroundColor:c}),".".concat(l.tableHeaderCell),{fontWeight:500,paddingTop:o.spacing(1.5),paddingBottom:o.spacing(1.5),overflow:"hidden",borderBottom:"unset"}),".".concat(l.tableBodyCell),{overflow:"hidden",borderTop:"0.5px dashed ".concat(n),borderBottom:"0.5px dashed ".concat(n),"&:first-of-type":{borderLeft:"0.5px dashed ".concat(n),borderRadius:o.spacing(.5,0,0,.5)},"&:last-of-type":{borderRight:"0.5px dashed ".concat(n),borderRadius:o.spacing(0,.5,.5,0)}}),".".concat(l.tableCellContent),{minWidth:0,width:"100%"}),"&.".concat(l.virtualized),{boxSizing:"border-box"}),"&.".concat(l.normal,".").concat(l.autoHeight),e({height:"auto",overflow:"visible"},".".concat(l.scrollContainer),{position:"static",inset:"auto",overflowY:"visible"}))});export{i as VIEW_LIST_ROW_SPACING_VAR,n as ViewListStyled,r as viewListClasses};
1
+ import{defineProperty as e}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{styled as t,Box as o,alpha as a}from"@mui/material";var i="--DinoViewList-rowSpacing",r={root:"DinoViewList-root",normal:"DinoViewList-normal",virtualized:"DinoViewList-virtualized",autoHeight:"DinoViewList-autoHeight",scrollContainer:"DinoViewList-scrollContainer",table:"DinoViewList-table",tableHeader:"DinoViewList-tableHeader",tableHeaderCell:"DinoViewList-tableHeaderCell",tableBodyCell:"DinoViewList-tableBodyCell",tableSpacerRow:"DinoViewList-tableSpacerRow",tableSpacerCell:"DinoViewList-tableSpacerCell",tableCellContent:"DinoViewList-tableCellContent"},l=r,n=t(o)(function(t){var o=t.theme,r=o.palette.mode,n=a(o.palette.common.black,"dark"===r?.24:.08),c="dark"===r?o.palette.grey[800]:o.palette.grey[50];return e(e(e(e(e(e(e(e(e({},"&.".concat(l.root),{position:"relative",width:"100%",height:"100%",overflow:"hidden"}),".".concat(l.scrollContainer),{position:"absolute",inset:0,overflowY:"auto",padding:o.spacing(0,.5),margin:o.spacing(0,-.5),"&::-webkit-scrollbar":{width:6,height:6},"&::-webkit-scrollbar-thumb":{backgroundColor:o.palette.grey[400]},"&::-webkit-scrollbar-thumb:hover":{backgroundColor:o.palette.grey[600]},"&::-webkit-scrollbar-track":{backgroundColor:o.palette.grey[200],borderRadius:4},"&::-webkit-scrollbar-track:hover":{backgroundColor:o.palette.grey[300]}}),".".concat(l.table),{tableLayout:"auto",width:"100%",borderCollapse:"separate",borderSpacing:"0 var(".concat(i,", ").concat(o.spacing(.5),")"),marginTop:"calc(var(".concat(i,", ").concat(o.spacing(.5),") * -1)")}),".".concat(l.tableHeader),{position:"sticky",top:0,zIndex:2,backgroundColor:c}),".".concat(l.tableHeaderCell),{fontWeight:500,paddingTop:o.spacing(1.5),paddingBottom:o.spacing(1.5),overflow:"hidden",borderBottom:"unset"}),".".concat(l.tableBodyCell),{overflow:"hidden",borderTop:"0.5px dashed ".concat(n),borderBottom:"0.5px dashed ".concat(n),"&:first-of-type":{borderLeft:"0.5px dashed ".concat(n),borderRadius:o.spacing(.5,0,0,.5)},"&:last-of-type":{borderRight:"0.5px dashed ".concat(n),borderRadius:o.spacing(0,.5,.5,0)}}),".".concat(l.tableCellContent),{minWidth:0,width:"100%"}),"&.".concat(l.virtualized),{boxSizing:"border-box"}),"&.".concat(l.normal,".").concat(l.autoHeight),e({height:"auto",overflow:"visible"},".".concat(l.scrollContainer),{position:"static",inset:"auto",overflowY:"visible"}))});export{i as VIEW_LIST_ROW_SPACING_VAR,n as ViewListStyled,r as viewListClasses};
2
2
  //# sourceMappingURL=styled.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"styled.js","sources":["../../../../src/data-surface/view-list/styled.tsx"],"sourcesContent":["import { alpha, Box, styled } from '@mui/material'\r\n\r\nexport const VIEW_LIST_ROW_SPACING_VAR = '--DinoViewList-rowSpacing'\r\n\r\nexport const viewListClasses = {\r\n root: 'DinoViewList-root',\r\n normal: 'DinoViewList-normal',\r\n virtualized: 'DinoViewList-virtualized',\r\n autoHeight: 'DinoViewList-autoHeight',\r\n scrollContainer: 'DinoViewList-scrollContainer',\r\n table: 'DinoViewList-table',\r\n tableHeader: 'DinoViewList-tableHeader',\r\n tableHeaderCell: 'DinoViewList-tableHeaderCell',\r\n tableBodyCell: 'DinoViewList-tableBodyCell',\r\n tableSpacerRow: 'DinoViewList-tableSpacerRow',\r\n tableSpacerCell: 'DinoViewList-tableSpacerCell',\r\n tableCellContent: 'DinoViewList-tableCellContent'\r\n}\r\nconst classes = viewListClasses\r\n\r\nexport const ViewListStyled = styled(Box)(({ theme }) => {\r\n const mode = theme.palette.mode\r\n const borderColor = alpha(theme.palette.common.black, mode === 'dark' ? 0.24 : 0.08)\r\n const bgHeader = mode === 'dark' ? theme.palette.grey[800] : theme.palette.grey[50]\r\n\r\n return {\r\n [`&.${classes.root}`]: {\r\n position: 'relative',\r\n width: '100%',\r\n height: '100%',\r\n overflow: 'hidden'\r\n },\r\n [`.${classes.scrollContainer}`]: {\r\n position: 'absolute',\r\n inset: 0, // top: 0, left: 0, right: 0, bottom: 0\r\n overflowY: 'auto',\r\n padding: theme.spacing(0, 0.5),\r\n margin: theme.spacing(0, -0.5),\r\n // Scrollbar styling\r\n '&::-webkit-scrollbar': { width: 8, height: 8 },\r\n '&::-webkit-scrollbar-thumb': { backgroundColor: theme.palette.grey[300], borderRadius: 4 },\r\n '&::-webkit-scrollbar-thumb:hover': { backgroundColor: theme.palette.grey[500] }\r\n },\r\n [`.${classes.table}`]: {\r\n tableLayout: 'auto',\r\n width: '100%',\r\n borderCollapse: 'separate',\r\n borderSpacing: `0 var(${VIEW_LIST_ROW_SPACING_VAR}, ${theme.spacing(0.5)})`,\r\n marginTop: `calc(var(${VIEW_LIST_ROW_SPACING_VAR}, ${theme.spacing(0.5)}) * -1)`\r\n },\r\n [`.${classes.tableHeader}`]: {\r\n position: 'sticky',\r\n top: 0,\r\n zIndex: 2,\r\n backgroundColor: bgHeader\r\n },\r\n [`.${classes.tableHeaderCell}`]: {\r\n fontWeight: 500,\r\n paddingTop: theme.spacing(1.5),\r\n paddingBottom: theme.spacing(1.5),\r\n overflow: 'hidden',\r\n borderBottom: 'unset'\r\n // borderTop: `1px dashed ${borderColor}`,\r\n // borderBottom: `1px dashed ${borderColor}`,\r\n // '&:first-of-type': { borderLeft: `1px dashed ${borderColor}` },\r\n // '&:last-of-type': { borderRight: `1px dashed ${borderColor}` }\r\n },\r\n [`.${classes.tableBodyCell}`]: {\r\n overflow: 'hidden',\r\n borderTop: `0.5px dashed ${borderColor}`,\r\n borderBottom: `0.5px dashed ${borderColor}`,\r\n '&:first-of-type': {\r\n borderLeft: `0.5px dashed ${borderColor}`,\r\n borderRadius: theme.spacing(0.5, 0, 0, 0.5)\r\n },\r\n '&:last-of-type': {\r\n borderRight: `0.5px dashed ${borderColor}`,\r\n borderRadius: theme.spacing(0, 0.5, 0.5, 0)\r\n }\r\n },\r\n [`.${classes.tableCellContent}`]: {\r\n minWidth: 0, // Allow shrinking below content size\r\n width: '100%' // Fill parent TableCell\r\n },\r\n // Virtualized styles\r\n [`&.${classes.virtualized}`]: {\r\n boxSizing: 'border-box'\r\n },\r\n // Auto-height variant: disable the internal scroll container and let the\r\n // component size expand with content. This makes the table render all\r\n // rows and removes the internal scrollbar used in 'normal' modes.\r\n [`&.${classes.normal}.${classes.autoHeight}`]: {\r\n height: 'auto',\r\n overflow: 'visible',\r\n [`.${classes.scrollContainer}`]: {\r\n position: 'static',\r\n inset: 'auto',\r\n overflowY: 'visible'\r\n }\r\n }\r\n }\r\n})\r\n"],"names":["VIEW_LIST_ROW_SPACING_VAR","viewListClasses","root","normal","virtualized","autoHeight","scrollContainer","table","tableHeader","tableHeaderCell","tableBodyCell","tableSpacerRow","tableSpacerCell","tableCellContent","classes","ViewListStyled","styled","Box","_ref","theme","mode","palette","borderColor","alpha","common","black","bgHeader","grey","_defineProperty","concat","position","width","height","overflow","inset","overflowY","padding","spacing","margin","backgroundColor","borderRadius","tableLayout","borderCollapse","borderSpacing","marginTop","top","zIndex","fontWeight","paddingTop","paddingBottom","borderBottom","borderTop","borderLeft","borderRight","minWidth","boxSizing"],"mappings":"2IAEO,IAAMA,EAA4B,4BAE5BC,EAAkB,CAC7BC,KAAM,oBACNC,OAAQ,sBACRC,YAAa,2BACbC,WAAY,0BACZC,gBAAiB,+BACjBC,MAAO,qBACPC,YAAa,2BACbC,gBAAiB,+BACjBC,cAAe,6BACfC,eAAgB,8BAChBC,gBAAiB,+BACjBC,iBAAkB,iCAEdC,EAAUb,EAEHc,EAAiBC,EAAOC,EAAPD,CAAY,SAAAE,GAAc,IAAXC,EAAKD,EAALC,MACrCC,EAAOD,EAAME,QAAQD,KACrBE,EAAcC,EAAMJ,EAAME,QAAQG,OAAOC,MAAgB,SAATL,EAAkB,IAAO,KACzEM,EAAoB,SAATN,EAAkBD,EAAME,QAAQM,KAAK,KAAOR,EAAME,QAAQM,KAAK,IAEhF,OAAAC,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAA,CAAA,EAAA,KAAAC,OACQf,EAAQZ,MAAS,CACrB4B,SAAU,WACVC,MAAO,OACPC,OAAQ,OACRC,SAAU,eACXJ,OACIf,EAAQR,iBAAoB,CAC/BwB,SAAU,WACVI,MAAO,EACPC,UAAW,OACXC,QAASjB,EAAMkB,QAAQ,EAAG,IAC1BC,OAAQnB,EAAMkB,QAAQ,GAAG,IAEzB,uBAAwB,CAAEN,MAAO,EAAGC,OAAQ,GAC5C,6BAA8B,CAAEO,gBAAiBpB,EAAME,QAAQM,KAAK,KAAMa,aAAc,GACxF,mCAAoC,CAAED,gBAAiBpB,EAAME,QAAQM,KAAK,YAC3EE,OACIf,EAAQP,OAAU,CACrBkC,YAAa,OACbV,MAAO,OACPW,eAAgB,WAChBC,cAAad,SAAAA,OAAW7B,EAAyB6B,MAAAA,OAAKV,EAAMkB,QAAQ,IAAO,KAC3EO,UAASf,YAAAA,OAAc7B,EAAyB6B,MAAAA,OAAKV,EAAMkB,QAAQ,IAAI,iBACxER,OACIf,EAAQN,aAAgB,CAC3BsB,SAAU,SACVe,IAAK,EACLC,OAAQ,EACRP,gBAAiBb,QAClBG,OACIf,EAAQL,iBAAoB,CAC/BsC,WAAY,IACZC,WAAY7B,EAAMkB,QAAQ,KAC1BY,cAAe9B,EAAMkB,QAAQ,KAC7BJ,SAAU,SACViB,aAAc,cAKfrB,OACIf,EAAQJ,eAAkB,CAC7BuB,SAAU,SACVkB,UAAStB,gBAAAA,OAAkBP,GAC3B4B,aAAYrB,gBAAAA,OAAkBP,GAC9B,kBAAmB,CACjB8B,WAAUvB,gBAAAA,OAAkBP,GAC5BkB,aAAcrB,EAAMkB,QAAQ,GAAK,EAAG,EAAG,KAEzC,iBAAkB,CAChBgB,YAAWxB,gBAAAA,OAAkBP,GAC7BkB,aAAcrB,EAAMkB,QAAQ,EAAG,GAAK,GAAK,UAE5CR,OACIf,EAAQD,kBAAqB,CAChCyC,SAAU,EACVvB,MAAO,cACRF,OAEKf,EAAQV,aAAgB,CAC5BmD,UAAW,eACZ1B,KAAAA,OAIKf,EAAQX,OAAM0B,KAAAA,OAAIf,EAAQT,YAAUuB,EAAA,CACxCI,OAAQ,OACRC,SAAU,WAAS,IAAAJ,OACdf,EAAQR,iBAAoB,CAC/BwB,SAAU,SACVI,MAAO,OACPC,UAAW,YAInB"}
1
+ {"version":3,"file":"styled.js","sources":["../../../../src/data-surface/view-list/styled.tsx"],"sourcesContent":["import { alpha, Box, styled } from '@mui/material'\r\n\r\nexport const VIEW_LIST_ROW_SPACING_VAR = '--DinoViewList-rowSpacing'\r\n\r\nexport const viewListClasses = {\r\n root: 'DinoViewList-root',\r\n normal: 'DinoViewList-normal',\r\n virtualized: 'DinoViewList-virtualized',\r\n autoHeight: 'DinoViewList-autoHeight',\r\n scrollContainer: 'DinoViewList-scrollContainer',\r\n table: 'DinoViewList-table',\r\n tableHeader: 'DinoViewList-tableHeader',\r\n tableHeaderCell: 'DinoViewList-tableHeaderCell',\r\n tableBodyCell: 'DinoViewList-tableBodyCell',\r\n tableSpacerRow: 'DinoViewList-tableSpacerRow',\r\n tableSpacerCell: 'DinoViewList-tableSpacerCell',\r\n tableCellContent: 'DinoViewList-tableCellContent'\r\n}\r\nconst classes = viewListClasses\r\n\r\nexport const ViewListStyled = styled(Box)(({ theme }) => {\r\n const mode = theme.palette.mode\r\n const borderColor = alpha(theme.palette.common.black, mode === 'dark' ? 0.24 : 0.08)\r\n const bgHeader = mode === 'dark' ? theme.palette.grey[800] : theme.palette.grey[50]\r\n\r\n return {\r\n [`&.${classes.root}`]: {\r\n position: 'relative',\r\n width: '100%',\r\n height: '100%',\r\n overflow: 'hidden'\r\n },\r\n [`.${classes.scrollContainer}`]: {\r\n position: 'absolute',\r\n inset: 0, // top: 0, left: 0, right: 0, bottom: 0\r\n overflowY: 'auto',\r\n padding: theme.spacing(0, 0.5),\r\n margin: theme.spacing(0, -0.5),\r\n // Scrollbar styling\r\n '&::-webkit-scrollbar': { width: 6, height: 6 },\r\n '&::-webkit-scrollbar-thumb': { backgroundColor: theme.palette.grey[400] },\r\n '&::-webkit-scrollbar-thumb:hover': { backgroundColor: theme.palette.grey[600] },\r\n '&::-webkit-scrollbar-track': { backgroundColor: theme.palette.grey[200], borderRadius: 4 },\r\n '&::-webkit-scrollbar-track:hover': { backgroundColor: theme.palette.grey[300] }\r\n },\r\n [`.${classes.table}`]: {\r\n tableLayout: 'auto',\r\n width: '100%',\r\n borderCollapse: 'separate',\r\n borderSpacing: `0 var(${VIEW_LIST_ROW_SPACING_VAR}, ${theme.spacing(0.5)})`,\r\n marginTop: `calc(var(${VIEW_LIST_ROW_SPACING_VAR}, ${theme.spacing(0.5)}) * -1)`\r\n },\r\n [`.${classes.tableHeader}`]: {\r\n position: 'sticky',\r\n top: 0,\r\n zIndex: 2,\r\n backgroundColor: bgHeader\r\n },\r\n [`.${classes.tableHeaderCell}`]: {\r\n fontWeight: 500,\r\n paddingTop: theme.spacing(1.5),\r\n paddingBottom: theme.spacing(1.5),\r\n overflow: 'hidden',\r\n borderBottom: 'unset'\r\n // borderTop: `1px dashed ${borderColor}`,\r\n // borderBottom: `1px dashed ${borderColor}`,\r\n // '&:first-of-type': { borderLeft: `1px dashed ${borderColor}` },\r\n // '&:last-of-type': { borderRight: `1px dashed ${borderColor}` }\r\n },\r\n [`.${classes.tableBodyCell}`]: {\r\n overflow: 'hidden',\r\n borderTop: `0.5px dashed ${borderColor}`,\r\n borderBottom: `0.5px dashed ${borderColor}`,\r\n '&:first-of-type': {\r\n borderLeft: `0.5px dashed ${borderColor}`,\r\n borderRadius: theme.spacing(0.5, 0, 0, 0.5)\r\n },\r\n '&:last-of-type': {\r\n borderRight: `0.5px dashed ${borderColor}`,\r\n borderRadius: theme.spacing(0, 0.5, 0.5, 0)\r\n }\r\n },\r\n [`.${classes.tableCellContent}`]: {\r\n minWidth: 0, // Allow shrinking below content size\r\n width: '100%' // Fill parent TableCell\r\n },\r\n // Virtualized styles\r\n [`&.${classes.virtualized}`]: {\r\n boxSizing: 'border-box'\r\n },\r\n // Auto-height variant: disable the internal scroll container and let the\r\n // component size expand with content. This makes the table render all\r\n // rows and removes the internal scrollbar used in 'normal' modes.\r\n [`&.${classes.normal}.${classes.autoHeight}`]: {\r\n height: 'auto',\r\n overflow: 'visible',\r\n [`.${classes.scrollContainer}`]: {\r\n position: 'static',\r\n inset: 'auto',\r\n overflowY: 'visible'\r\n }\r\n }\r\n }\r\n})\r\n"],"names":["VIEW_LIST_ROW_SPACING_VAR","viewListClasses","root","normal","virtualized","autoHeight","scrollContainer","table","tableHeader","tableHeaderCell","tableBodyCell","tableSpacerRow","tableSpacerCell","tableCellContent","classes","ViewListStyled","styled","Box","_ref","theme","mode","palette","borderColor","alpha","common","black","bgHeader","grey","_defineProperty","concat","position","width","height","overflow","inset","overflowY","padding","spacing","margin","backgroundColor","borderRadius","tableLayout","borderCollapse","borderSpacing","marginTop","top","zIndex","fontWeight","paddingTop","paddingBottom","borderBottom","borderTop","borderLeft","borderRight","minWidth","boxSizing"],"mappings":"2IAEO,IAAMA,EAA4B,4BAE5BC,EAAkB,CAC7BC,KAAM,oBACNC,OAAQ,sBACRC,YAAa,2BACbC,WAAY,0BACZC,gBAAiB,+BACjBC,MAAO,qBACPC,YAAa,2BACbC,gBAAiB,+BACjBC,cAAe,6BACfC,eAAgB,8BAChBC,gBAAiB,+BACjBC,iBAAkB,iCAEdC,EAAUb,EAEHc,EAAiBC,EAAOC,EAAPD,CAAY,SAAAE,GAAc,IAAXC,EAAKD,EAALC,MACrCC,EAAOD,EAAME,QAAQD,KACrBE,EAAcC,EAAMJ,EAAME,QAAQG,OAAOC,MAAgB,SAATL,EAAkB,IAAO,KACzEM,EAAoB,SAATN,EAAkBD,EAAME,QAAQM,KAAK,KAAOR,EAAME,QAAQM,KAAK,IAEhF,OAAAC,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAA,CAAA,EAAA,KAAAC,OACQf,EAAQZ,MAAS,CACrB4B,SAAU,WACVC,MAAO,OACPC,OAAQ,OACRC,SAAU,eACXJ,OACIf,EAAQR,iBAAoB,CAC/BwB,SAAU,WACVI,MAAO,EACPC,UAAW,OACXC,QAASjB,EAAMkB,QAAQ,EAAG,IAC1BC,OAAQnB,EAAMkB,QAAQ,GAAG,IAEzB,uBAAwB,CAAEN,MAAO,EAAGC,OAAQ,GAC5C,6BAA8B,CAAEO,gBAAiBpB,EAAME,QAAQM,KAAK,MACpE,mCAAoC,CAAEY,gBAAiBpB,EAAME,QAAQM,KAAK,MAC1E,6BAA8B,CAAEY,gBAAiBpB,EAAME,QAAQM,KAAK,KAAMa,aAAc,GACxF,mCAAoC,CAAED,gBAAiBpB,EAAME,QAAQM,KAAK,YAC3EE,OACIf,EAAQP,OAAU,CACrBkC,YAAa,OACbV,MAAO,OACPW,eAAgB,WAChBC,cAAad,SAAAA,OAAW7B,EAAyB6B,MAAAA,OAAKV,EAAMkB,QAAQ,IAAO,KAC3EO,UAASf,YAAAA,OAAc7B,EAAyB6B,MAAAA,OAAKV,EAAMkB,QAAQ,IAAI,iBACxER,OACIf,EAAQN,aAAgB,CAC3BsB,SAAU,SACVe,IAAK,EACLC,OAAQ,EACRP,gBAAiBb,QAClBG,OACIf,EAAQL,iBAAoB,CAC/BsC,WAAY,IACZC,WAAY7B,EAAMkB,QAAQ,KAC1BY,cAAe9B,EAAMkB,QAAQ,KAC7BJ,SAAU,SACViB,aAAc,cAKfrB,OACIf,EAAQJ,eAAkB,CAC7BuB,SAAU,SACVkB,UAAStB,gBAAAA,OAAkBP,GAC3B4B,aAAYrB,gBAAAA,OAAkBP,GAC9B,kBAAmB,CACjB8B,WAAUvB,gBAAAA,OAAkBP,GAC5BkB,aAAcrB,EAAMkB,QAAQ,GAAK,EAAG,EAAG,KAEzC,iBAAkB,CAChBgB,YAAWxB,gBAAAA,OAAkBP,GAC7BkB,aAAcrB,EAAMkB,QAAQ,EAAG,GAAK,GAAK,UAE5CR,OACIf,EAAQD,kBAAqB,CAChCyC,SAAU,EACVvB,MAAO,cACRF,OAEKf,EAAQV,aAAgB,CAC5BmD,UAAW,eACZ1B,KAAAA,OAIKf,EAAQX,OAAM0B,KAAAA,OAAIf,EAAQT,YAAUuB,EAAA,CACxCI,OAAQ,OACRC,SAAU,WAAS,IAAAJ,OACdf,EAAQR,iBAAoB,CAC/BwB,SAAU,SACVI,MAAO,OACPC,UAAW,YAInB"}
@@ -1,2 +1,2 @@
1
- import{defineProperty as e,slicedToArray as i}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as t,jsx as n,Fragment as o}from"react/jsx-runtime";import{useMemo as a,useState as r}from"react";import{styled as l,Box as c,Typography as m,Tooltip as p,Chip as s}from"@mui/material";import u from"@mui/icons-material/MoreHoriz";function h(){var e=function(e){var i=e.item,t=e.group,o=e.onRemove,a=t.field,r=t.label,l=t.chipMinWidth,c=i.label||i.value.toString();return n(s,{size:"small",title:c,label:c,className:d.itemChip,sx:l?{minWidth:l}:void 0,onDelete:o?function(){return o(a,i.value)}:void 0},"".concat(r,"-").concat(i.value))},l=function(a){var l=r(!1),c=i(l,2),m=c[0],h=c[1],f=a.group,g=a.onRemove,v=a.enableMinimalesticView,w=a.forceShowAll,b=f.items;if(v&&b.length>1&&!m&&!w)return t(o,{children:[n(p,{title:"".concat(b.length-1," more, click to expand"),placement:"top",arrow:!0,children:n(s,{icon:n(u,{fontSize:"small"}),label:"".concat(b.length-1,"+"),size:"small",className:d.itemChip,style:{opacity:.7},onClick:function(){return h(!0)}})}),n(e,{item:b[b.length-1],group:f,onRemove:g})]});var C=m&&b.length>1;return t(o,{children:[C&&n(p,{title:"Show less",placement:"top",arrow:!0,children:n(s,{icon:n(u,{fontSize:"small"}),size:"small",className:d.itemChip,sx:{opacity:.7,".MuiChip-label":{pl:0}},onClick:function(){return h(!1)}})}),b.map(function(i){return n(e,{item:i,group:f,onRemove:g},i.value.toString())})]})};return function(e){var i=e.value,o=void 0===i?[]:i,r=e.onRemove,c=e.placement,p=e.label,s=e.enableMinimalesticView,u=e.forceShowAll,h=[d.item];"vertical"===c?h.push(d.itemVertical):"horizontal"===c&&h.push(d.itemHorizontal);var g=a(function(){return o?(Array.isArray(o)?o:[o]).filter(function(e){return e.items&&e.items.length>0}):[]},[o]);return 0===g.length?null:t(f,{sx:e.sx,className:h.filter(Boolean).join(" "),children:[Boolean(p)&&t(m,{variant:"caption",className:d.itemLabel,children:[p||"ChipViewer",":"]}),n("div",{className:d.itemContent,children:g.map(function(e){var i=e.field,o=e.label;return t("div",{className:d.itemGroup,children:[o&&t(m,{variant:"caption",className:d.itemLabel,children:[o,":"]}),n(l,{group:e,onRemove:r,enableMinimalesticView:s,forceShowAll:u})]},i.toString())})})]})}}var d={item:"DinoChipViewer-item",itemLabel:"DinoChipViewer-itemLabel",itemChip:"DinoChipViewer-itemChip",itemGroup:"DinoChipViewer-itemGroup",itemContent:"DinoChipViewer-itemContent",sort:"DinoChipViewer-sort",itemVertical:"DinoChipViewer-itemVertical",itemHorizontal:"DinoChipViewer-itemHorizontal"},f=l(c)(function(i){var t=i.theme;return e(e(e(e(e({},".".concat(d.itemLabel),{fontWeight:700,marginLeft:t.spacing(.5),lineHeight:1}),".".concat(d.itemChip),{borderRadius:"4px",maxWidth:"100px","& .MuiChip-label":{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}}),".".concat(d.itemGroup),{display:"flex",flexWrap:"wrap",border:"dashed 1px ".concat(t.palette.divider),borderRadius:t.shape.borderRadius,alignItems:"center",padding:t.spacing(.25),gap:t.spacing(.5)}),".".concat(d.itemContent),e({display:"flex",flexWrap:"wrap",gap:t.spacing(.5)},".".concat(d.itemLabel),{fontWeight:500,color:t.palette.text.secondary})),"&.".concat(d.item),e(e({display:"flex",flexDirection:"row",alignItems:"center",gap:t.spacing(1),padding:t.spacing(.25,.5),"&:last-child":{marginBottom:0,borderBottom:"none",paddingBottom:0}},"&.".concat(d.sort),{".MuiChip-label > div":{display:"flex",alignItems:"center",gap:4},".MuiSvgIcon-root":{fontSize:12}}),"&.".concat(d.itemVertical),{flexDirection:"column",alignItems:"flex-start"}))});export{h as createChipViewers};
1
+ import{defineProperty as e,slicedToArray as i}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as t,jsx as a,Fragment as n}from"react/jsx-runtime";import{useMemo as l,useState as o}from"react";import{styled as r,Box as c,Typography as m,Tooltip as s,Chip as p}from"@mui/material";import d from"@mui/icons-material/MoreHoriz";function u(){var e=function(e){var i=e.item,t=e.group,n=e.onRemove,l=e.disabled,o=t.field,r=t.label,c=t.chipMinWidth,m=i.label||i.value.toString();return a(p,{size:"small",title:m,label:m,disabled:l,className:h.itemChip,sx:c?{minWidth:c}:void 0,onDelete:n?function(){return n(o,i.value)}:void 0},"".concat(r,"-").concat(i.value))},r=function(l){var r=o(!1),c=i(r,2),m=c[0],u=c[1],f=l.group,g=l.onRemove,b=l.enableMinimalesticView,v=l.forceShowAll,w=f.items;if(b&&w.length>1&&!m&&!v)return t(n,{children:[a(s,{title:"".concat(w.length-1," more, click to expand"),placement:"top",arrow:!0,children:a(p,{icon:a(d,{fontSize:"small"}),label:"".concat(w.length-1,"+"),size:"small",disabled:l.disabled,className:h.itemChip,style:{opacity:.7},onClick:function(){return u(!0)}})}),a(e,{item:w[w.length-1],group:f,onRemove:g,disabled:l.disabled})]});var C=m&&w.length>1;return t(n,{children:[C&&a(s,{title:"Show less",placement:"top",arrow:!0,children:a(p,{icon:a(d,{fontSize:"small"}),size:"small",className:h.itemChip,sx:{opacity:.7,".MuiChip-label":{pl:0}},onClick:function(){return u(!1)},disabled:l.disabled})}),w.map(function(i){return a(e,{item:i,group:f,onRemove:g,disabled:l.disabled},i.value.toString())})]})};return function(e){var i=e.value,n=void 0===i?[]:i,o=e.onRemove,c=e.placement,s=e.label,p=e.enableMinimalesticView,d=e.forceShowAll,u=e.disabled,g=[h.item];"vertical"===c?g.push(h.itemVertical):"horizontal"===c&&g.push(h.itemHorizontal);var b=l(function(){return n?(Array.isArray(n)?n:[n]).filter(function(e){return e.items&&e.items.length>0}):[]},[n]);return 0===b.length?null:t(f,{sx:e.sx,className:g.filter(Boolean).join(" "),children:[Boolean(s)&&t(m,{variant:"caption",className:h.itemLabel,children:[s||"ChipViewer",":"]}),a("div",{className:h.itemContent,children:b.map(function(e){var i=e.field,n=e.label;return t("div",{className:h.itemGroup,children:[n&&t(m,{variant:"caption",className:h.itemLabel,children:[n,":"]}),a(r,{group:e,onRemove:o,enableMinimalesticView:p,forceShowAll:d,disabled:u})]},i.toString())})})]})}}var h={item:"DinoChipViewer-item",itemLabel:"DinoChipViewer-itemLabel",itemChip:"DinoChipViewer-itemChip",itemGroup:"DinoChipViewer-itemGroup",itemContent:"DinoChipViewer-itemContent",sort:"DinoChipViewer-sort",itemVertical:"DinoChipViewer-itemVertical",itemHorizontal:"DinoChipViewer-itemHorizontal"},f=r(c)(function(i){var t=i.theme;return e(e(e(e(e({},".".concat(h.itemLabel),{fontWeight:700,marginLeft:t.spacing(.5),lineHeight:1}),".".concat(h.itemChip),{borderRadius:"4px",maxWidth:"100px","& .MuiChip-label":{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}}),".".concat(h.itemGroup),{display:"flex",flexWrap:"wrap",border:"dashed 1px ".concat(t.palette.divider),borderRadius:t.shape.borderRadius,alignItems:"center",padding:t.spacing(.25),gap:t.spacing(.5)}),".".concat(h.itemContent),e({display:"flex",flexWrap:"wrap",gap:t.spacing(.5)},".".concat(h.itemLabel),{fontWeight:500,color:t.palette.text.secondary})),"&.".concat(h.item),e(e({display:"flex",flexDirection:"row",alignItems:"center",gap:t.spacing(1),padding:t.spacing(.25,.5),"&:last-child":{marginBottom:0,borderBottom:"none",paddingBottom:0}},"&.".concat(h.sort),{".MuiChip-label > div":{display:"flex",alignItems:"center",gap:4},".MuiSvgIcon-root":{fontSize:12}}),"&.".concat(h.itemVertical),{flexDirection:"column",alignItems:"flex-start"}))});export{u as createChipViewers};
2
2
  //# sourceMappingURL=chip-viewer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chip-viewer.js","sources":["../../../../src/filter-bar/components/chip-viewer.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { useMemo, useState } from 'react'\r\nimport { Box, Chip, styled, Tooltip, Typography } from '@mui/material'\r\nimport MoreHorizIcon from '@mui/icons-material/MoreHoriz'\r\n// types\r\nimport type { FC } from 'react'\r\nimport type { SxProps, Theme } from '@mui/material'\r\nimport type { TFieldType, TFieldValid } from '../types'\r\n\r\nexport interface IChipViewerItem<O = any> {\r\n value: TFieldValid\r\n label?: string\r\n other?: O\r\n}\r\n\r\nexport interface TChipViewerGroup<T, O = any> {\r\n field: TFieldType<T>\r\n label?: string\r\n items: IChipViewerItem<O>[]\r\n chipMinWidth?: number | string\r\n}\r\n\r\nexport type TOnRemoveFilterFunc<T> = (field: TFieldType<T>, value: TFieldValid) => void\r\n\r\ninterface IChipViewerProps<T> {\r\n value?: TChipViewerGroup<T> | TChipViewerGroup<T>[]\r\n onRemove?: TOnRemoveFilterFunc<T>\r\n placement?: 'vertical' | 'horizontal'\r\n /** Option to set a custom label for the group. */\r\n label?: string | boolean\r\n /** Enable minimalistic view: only show the last item, hide the rest as an icon at the start */\r\n enableMinimalesticView?: boolean\r\n sx?: SxProps<Theme>\r\n forceShowAll?: boolean\r\n}\r\n\r\ninterface IChipItemProps<T> extends Pick<IChipViewerProps<T>, 'onRemove'> {\r\n item: IChipViewerItem\r\n group: TChipViewerGroup<T>\r\n}\r\n\r\ninterface IChipListProps<T> extends Pick<IChipViewerProps<T>, 'onRemove' | 'enableMinimalesticView' | 'forceShowAll'> {\r\n group: TChipViewerGroup<T>\r\n}\r\n\r\nexport function createChipViewers<T>() {\r\n const ChipItem: FC<IChipItemProps<T>> = (props) => {\r\n const { item, group, onRemove } = props\r\n const { field, label, chipMinWidth } = group\r\n const itemLabel = item.label || item.value.toString()\r\n return (\r\n <Chip\r\n key={`${label}-${item.value}`}\r\n size='small'\r\n title={itemLabel}\r\n label={itemLabel}\r\n className={classes.itemChip}\r\n sx={chipMinWidth ? { minWidth: chipMinWidth } : undefined}\r\n onDelete={onRemove ? () => onRemove(field, item.value) : undefined}\r\n />\r\n )\r\n }\r\n\r\n const ChipList: FC<IChipListProps<T>> = (props) => {\r\n const [expanded, setExpanded] = useState<boolean>(false)\r\n const { group, onRemove, enableMinimalesticView, forceShowAll } = props\r\n const { items } = group\r\n const isMinimalistic = enableMinimalesticView && items.length > 1 && !expanded && !forceShowAll\r\n if (isMinimalistic) {\r\n return (\r\n <>\r\n <Tooltip title={`${items.length - 1} more, click to expand`} placement='top' arrow>\r\n <Chip\r\n icon={<MoreHorizIcon fontSize='small' />}\r\n label={`${items.length - 1}+`}\r\n size='small'\r\n className={classes.itemChip}\r\n style={{ opacity: 0.7 }}\r\n onClick={() => setExpanded(true)}\r\n />\r\n </Tooltip>\r\n <ChipItem item={items[items.length - 1]} group={group} onRemove={onRemove} />\r\n </>\r\n )\r\n }\r\n const isBtnShowLess = expanded && items.length > 1\r\n return (\r\n <>\r\n {isBtnShowLess && (\r\n <Tooltip title='Show less' placement='top' arrow>\r\n <Chip\r\n icon={<MoreHorizIcon fontSize='small' />}\r\n // label={false}\r\n size='small'\r\n className={classes.itemChip}\r\n sx={{ opacity: 0.7, '.MuiChip-label': { pl: 0 } }}\r\n onClick={() => setExpanded(false)}\r\n />\r\n </Tooltip>\r\n )}\r\n {items.map((item) => (\r\n <ChipItem key={item.value.toString()} item={item} group={group} onRemove={onRemove} />\r\n ))}\r\n </>\r\n )\r\n }\r\n\r\n const ChipViewer: FC<IChipViewerProps<T>> = (props) => {\r\n const { value = [], onRemove, placement, label, enableMinimalesticView, forceShowAll } = props\r\n\r\n const rootClasses = [classes.item]\r\n if (placement === 'vertical') rootClasses.push(classes.itemVertical)\r\n else if (placement === 'horizontal') rootClasses.push(classes.itemHorizontal)\r\n\r\n const data = useMemo(() => {\r\n if (!value) return []\r\n const valueArray = Array.isArray(value) ? value : [value]\r\n return valueArray.filter((group) => group.items && group.items.length > 0)\r\n }, [value])\r\n\r\n if (data.length === 0) return null\r\n\r\n return (\r\n <ItemStyled sx={props.sx} className={rootClasses.filter(Boolean).join(' ')}>\r\n {Boolean(label) && (\r\n <Typography variant='caption' className={classes.itemLabel}>\r\n {label || 'ChipViewer'}:\r\n </Typography>\r\n )}\r\n <div className={classes.itemContent}>\r\n {data.map((group) => {\r\n const { field, label } = group\r\n return (\r\n <div key={field.toString()} className={classes.itemGroup}>\r\n {label && (\r\n <Typography variant='caption' className={classes.itemLabel}>\r\n {label}:\r\n </Typography>\r\n )}\r\n <ChipList group={group} onRemove={onRemove} enableMinimalesticView={enableMinimalesticView} forceShowAll={forceShowAll} />\r\n </div>\r\n )\r\n })}\r\n </div>\r\n </ItemStyled>\r\n )\r\n }\r\n\r\n return ChipViewer\r\n}\r\n\r\n//#region styles\r\nconst chipViewerClasses = {\r\n root: 'DinoChipViewer-root',\r\n item: 'DinoChipViewer-item',\r\n itemLabel: 'DinoChipViewer-itemLabel',\r\n itemChip: 'DinoChipViewer-itemChip',\r\n itemGroup: 'DinoChipViewer-itemGroup',\r\n itemContent: 'DinoChipViewer-itemContent',\r\n sort: 'DinoChipViewer-sort',\r\n itemVertical: 'DinoChipViewer-itemVertical',\r\n itemHorizontal: 'DinoChipViewer-itemHorizontal'\r\n}\r\n\r\nconst classes = chipViewerClasses\r\n\r\nconst ItemStyled = styled(Box)(({ theme }) => ({\r\n [`.${classes.itemLabel}`]: {\r\n fontWeight: 700,\r\n marginLeft: theme.spacing(0.5),\r\n lineHeight: 1\r\n },\r\n [`.${classes.itemChip}`]: {\r\n borderRadius: '4px',\r\n maxWidth: '100px',\r\n '& .MuiChip-label': { whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }\r\n },\r\n [`.${classes.itemGroup}`]: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n border: `dashed 1px ${theme.palette.divider}`,\r\n borderRadius: theme.shape.borderRadius,\r\n alignItems: 'center',\r\n padding: theme.spacing(0.25),\r\n gap: theme.spacing(0.5)\r\n },\r\n [`.${classes.itemContent}`]: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n gap: theme.spacing(0.5),\r\n [`.${classes.itemLabel}`]: {\r\n fontWeight: 500,\r\n color: theme.palette.text.secondary\r\n }\r\n },\r\n [`&.${classes.item}`]: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n gap: theme.spacing(1),\r\n padding: theme.spacing(0.25, 0.5),\r\n // borderBottom: `1px solid ${theme.palette.grey[100]}`,\r\n '&:last-child': { marginBottom: 0, borderBottom: 'none', paddingBottom: 0 },\r\n [`&.${classes.sort}`]: {\r\n '.MuiChip-label > div': { display: 'flex', alignItems: 'center', gap: 4 },\r\n '.MuiSvgIcon-root': { fontSize: 12 }\r\n },\r\n [`&.${classes.itemVertical}`]: { flexDirection: 'column', alignItems: 'flex-start' }\r\n // [`&.${classes.itemHorizontal}`]: { flexDirection: 'row', alignItems: 'center' }\r\n }\r\n}))\r\n//#endregion\r\n"],"names":["createChipViewers","ChipItem","props","item","group","onRemove","field","label","chipMinWidth","itemLabel","value","toString","_jsx","Chip","size","title","className","classes","itemChip","sx","minWidth","undefined","onDelete","concat","ChipList","_useState","useState","_useState2","_slicedToArray","expanded","setExpanded","enableMinimalesticView","forceShowAll","items","length","_jsxs","Tooltip","placement","arrow","children","icon","MoreHorizIcon","fontSize","style","opacity","onClick","isBtnShowLess","_Fragment","pl","map","_props$value","rootClasses","push","itemVertical","itemHorizontal","data","useMemo","Array","isArray","filter","ItemStyled","Boolean","join","Typography","variant","itemContent","itemGroup","sort","styled","Box","_ref","theme","_defineProperty","fontWeight","marginLeft","spacing","lineHeight","borderRadius","maxWidth","whiteSpace","overflow","textOverflow","display","flexWrap","border","palette","divider","shape","alignItems","padding","gap","color","text","secondary","flexDirection","marginBottom","borderBottom","paddingBottom"],"mappings":"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"}
1
+ {"version":3,"file":"chip-viewer.js","sources":["../../../../src/filter-bar/components/chip-viewer.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { useMemo, useState } from 'react'\r\nimport { Box, Chip, styled, Tooltip, Typography } from '@mui/material'\r\nimport MoreHorizIcon from '@mui/icons-material/MoreHoriz'\r\n// types\r\nimport type { FC } from 'react'\r\nimport type { SxProps, Theme } from '@mui/material'\r\nimport type { TFieldType, TFieldValid } from '../types'\r\n\r\nexport interface IChipViewerItem<O = any> {\r\n value: TFieldValid\r\n label?: string\r\n other?: O\r\n}\r\n\r\nexport interface TChipViewerGroup<T, O = any> {\r\n field: TFieldType<T>\r\n label?: string\r\n items: IChipViewerItem<O>[]\r\n chipMinWidth?: number | string\r\n}\r\n\r\nexport type TOnRemoveFilterFunc<T> = (field: TFieldType<T>, value: TFieldValid) => void\r\n\r\ninterface IChipViewerProps<T> {\r\n value?: TChipViewerGroup<T> | TChipViewerGroup<T>[]\r\n onRemove?: TOnRemoveFilterFunc<T>\r\n placement?: 'vertical' | 'horizontal'\r\n /** Option to set a custom label for the group. */\r\n label?: string | boolean\r\n /** Enable minimalistic view: only show the last item, hide the rest as an icon at the start */\r\n enableMinimalesticView?: boolean\r\n sx?: SxProps<Theme>\r\n forceShowAll?: boolean\r\n disabled?: boolean\r\n}\r\n\r\ninterface IChipItemProps<T> extends Pick<IChipViewerProps<T>, 'onRemove' | 'disabled'> {\r\n item: IChipViewerItem\r\n group: TChipViewerGroup<T>\r\n}\r\n\r\ninterface IChipListProps<T> extends Pick<IChipViewerProps<T>, 'onRemove' | 'enableMinimalesticView' | 'forceShowAll' | 'disabled'> {\r\n group: TChipViewerGroup<T>\r\n}\r\n\r\nexport function createChipViewers<T>() {\r\n const ChipItem: FC<IChipItemProps<T>> = (props) => {\r\n const { item, group, onRemove, disabled } = props\r\n const { field, label, chipMinWidth } = group\r\n const itemLabel = item.label || item.value.toString()\r\n return (\r\n <Chip\r\n key={`${label}-${item.value}`}\r\n size='small'\r\n title={itemLabel}\r\n label={itemLabel}\r\n disabled={disabled}\r\n className={classes.itemChip}\r\n sx={chipMinWidth ? { minWidth: chipMinWidth } : undefined}\r\n onDelete={onRemove ? () => onRemove(field, item.value) : undefined}\r\n />\r\n )\r\n }\r\n\r\n const ChipList: FC<IChipListProps<T>> = (props) => {\r\n const [expanded, setExpanded] = useState<boolean>(false)\r\n const { group, onRemove, enableMinimalesticView, forceShowAll } = props\r\n const { items } = group\r\n const isMinimalistic = enableMinimalesticView && items.length > 1 && !expanded && !forceShowAll\r\n if (isMinimalistic) {\r\n return (\r\n <>\r\n <Tooltip title={`${items.length - 1} more, click to expand`} placement='top' arrow>\r\n <Chip\r\n icon={<MoreHorizIcon fontSize='small' />}\r\n label={`${items.length - 1}+`}\r\n size='small'\r\n disabled={props.disabled}\r\n className={classes.itemChip}\r\n style={{ opacity: 0.7 }}\r\n onClick={() => setExpanded(true)}\r\n />\r\n </Tooltip>\r\n <ChipItem item={items[items.length - 1]} group={group} onRemove={onRemove} disabled={props.disabled} />\r\n </>\r\n )\r\n }\r\n const isBtnShowLess = expanded && items.length > 1\r\n return (\r\n <>\r\n {isBtnShowLess && (\r\n <Tooltip title='Show less' placement='top' arrow>\r\n <Chip\r\n icon={<MoreHorizIcon fontSize='small' />}\r\n size='small'\r\n className={classes.itemChip}\r\n sx={{ opacity: 0.7, '.MuiChip-label': { pl: 0 } }}\r\n onClick={() => setExpanded(false)}\r\n disabled={props.disabled}\r\n />\r\n </Tooltip>\r\n )}\r\n {items.map((item) => (\r\n <ChipItem key={item.value.toString()} item={item} group={group} onRemove={onRemove} disabled={props.disabled} />\r\n ))}\r\n </>\r\n )\r\n }\r\n\r\n const ChipViewer: FC<IChipViewerProps<T>> = (props) => {\r\n const { value = [], onRemove, placement, label, enableMinimalesticView, forceShowAll, disabled } = props\r\n\r\n const rootClasses = [classes.item]\r\n if (placement === 'vertical') rootClasses.push(classes.itemVertical)\r\n else if (placement === 'horizontal') rootClasses.push(classes.itemHorizontal)\r\n\r\n const data = useMemo(() => {\r\n if (!value) return []\r\n const valueArray = Array.isArray(value) ? value : [value]\r\n return valueArray.filter((group) => group.items && group.items.length > 0)\r\n }, [value])\r\n\r\n if (data.length === 0) return null\r\n\r\n return (\r\n <ItemStyled sx={props.sx} className={rootClasses.filter(Boolean).join(' ')}>\r\n {Boolean(label) && (\r\n <Typography variant='caption' className={classes.itemLabel}>\r\n {label || 'ChipViewer'}:\r\n </Typography>\r\n )}\r\n <div className={classes.itemContent}>\r\n {data.map((group) => {\r\n const { field, label } = group\r\n return (\r\n <div key={field.toString()} className={classes.itemGroup}>\r\n {label && (\r\n <Typography variant='caption' className={classes.itemLabel}>\r\n {label}:\r\n </Typography>\r\n )}\r\n <ChipList\r\n group={group}\r\n onRemove={onRemove}\r\n enableMinimalesticView={enableMinimalesticView}\r\n forceShowAll={forceShowAll}\r\n disabled={disabled}\r\n />\r\n </div>\r\n )\r\n })}\r\n </div>\r\n </ItemStyled>\r\n )\r\n }\r\n\r\n return ChipViewer\r\n}\r\n\r\n//#region styles\r\nconst chipViewerClasses = {\r\n root: 'DinoChipViewer-root',\r\n item: 'DinoChipViewer-item',\r\n itemLabel: 'DinoChipViewer-itemLabel',\r\n itemChip: 'DinoChipViewer-itemChip',\r\n itemGroup: 'DinoChipViewer-itemGroup',\r\n itemContent: 'DinoChipViewer-itemContent',\r\n sort: 'DinoChipViewer-sort',\r\n itemVertical: 'DinoChipViewer-itemVertical',\r\n itemHorizontal: 'DinoChipViewer-itemHorizontal'\r\n}\r\n\r\nconst classes = chipViewerClasses\r\n\r\nconst ItemStyled = styled(Box)(({ theme }) => ({\r\n [`.${classes.itemLabel}`]: {\r\n fontWeight: 700,\r\n marginLeft: theme.spacing(0.5),\r\n lineHeight: 1\r\n },\r\n [`.${classes.itemChip}`]: {\r\n borderRadius: '4px',\r\n maxWidth: '100px',\r\n '& .MuiChip-label': { whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }\r\n },\r\n [`.${classes.itemGroup}`]: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n border: `dashed 1px ${theme.palette.divider}`,\r\n borderRadius: theme.shape.borderRadius,\r\n alignItems: 'center',\r\n padding: theme.spacing(0.25),\r\n gap: theme.spacing(0.5)\r\n },\r\n [`.${classes.itemContent}`]: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n gap: theme.spacing(0.5),\r\n [`.${classes.itemLabel}`]: {\r\n fontWeight: 500,\r\n color: theme.palette.text.secondary\r\n }\r\n },\r\n [`&.${classes.item}`]: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n gap: theme.spacing(1),\r\n padding: theme.spacing(0.25, 0.5),\r\n // borderBottom: `1px solid ${theme.palette.grey[100]}`,\r\n '&:last-child': { marginBottom: 0, borderBottom: 'none', paddingBottom: 0 },\r\n [`&.${classes.sort}`]: {\r\n '.MuiChip-label > div': { display: 'flex', alignItems: 'center', gap: 4 },\r\n '.MuiSvgIcon-root': { fontSize: 12 }\r\n },\r\n [`&.${classes.itemVertical}`]: { flexDirection: 'column', alignItems: 'flex-start' }\r\n // [`&.${classes.itemHorizontal}`]: { flexDirection: 'row', alignItems: 'center' }\r\n }\r\n}))\r\n//#endregion\r\n"],"names":["createChipViewers","ChipItem","props","item","group","onRemove","disabled","field","label","chipMinWidth","itemLabel","value","toString","_jsx","Chip","size","title","className","classes","itemChip","sx","minWidth","undefined","onDelete","concat","ChipList","_useState","useState","_useState2","_slicedToArray","expanded","setExpanded","enableMinimalesticView","forceShowAll","items","length","_jsxs","_Fragment","children","Tooltip","placement","arrow","icon","MoreHorizIcon","fontSize","style","opacity","onClick","isBtnShowLess","pl","map","_props$value","rootClasses","push","itemVertical","itemHorizontal","data","useMemo","Array","isArray","filter","ItemStyled","Boolean","join","Typography","variant","itemContent","itemGroup","sort","styled","Box","_ref","theme","_defineProperty","fontWeight","marginLeft","spacing","lineHeight","borderRadius","maxWidth","whiteSpace","overflow","textOverflow","display","flexWrap","border","palette","divider","shape","alignItems","padding","gap","color","text","secondary","flexDirection","marginBottom","borderBottom","paddingBottom"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{defineProperty as l,objectSpread2 as r}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as e,jsxs as t}from"react/jsx-runtime";import{useContext as o,useMemo as i}from"react";import{styled as a,iconButtonClasses as n,buttonClasses as c,Collapse as s,Box as u,Button as d,IconButton as m}from"@mui/material";import p from"@mui/icons-material/ClearAll";import{KeySpecial as f}from"../types.js";import{useFilterActions as h}from"../hooks.js";import{mapSpecialLabel as b}from"../helpers.js";import{createChipViewers as v}from"./chip-viewer.js";import{FilterBarContext as g}from"../index.context.js";var x="__field__";function k(l){var a=y,n=v();return function(c){var v=o(g),k=v.filterState,y=h(v),S=i(function(){return function(l,e){var t,o=l.fields,i=l.enableQuickSearch,a=void 0===i||i,n=r({},o),c=f.quickSearch;return a?n[c]?null!==(t=n[c])&&void 0!==t&&t.label||(n[c]=r(r({},n[c]),{},{label:b[c]})):n[c]={label:b[c]}:delete n[c],Object.keys(e||{}).reduce(function(l,r){var t,o=null==n?void 0:n[r],i=(null==o?void 0:o.label)||r.toString(),a=null==e||null===(t=e[r])||void 0===t?void 0:t.values,c=(Array.isArray(a)?a:[]).filter(Boolean).map(function(l,t){var i;return{value:l.toString(),label:null==o||null===(i=o.labelFormatter)||void 0===i?void 0:i.call(o,l,t,null==e?void 0:e[r])}});if(c.length>0)if(null!=o&&o.singleChip){var s,u=null!==(s=o.singleChipSeparator)&&void 0!==s?s:", ",d=c.map(function(l){var r;return null!==(r=l.label)&&void 0!==r?r:l.value.toString()}).join(u);l.push({field:r,label:i,items:[{value:x,label:d}],chipMinWidth:o.chipMinWidth})}else l.push({field:r,label:i,items:c,chipMinWidth:null==o?void 0:o.chipMinWidth});return l},[]).sort(function(l,r){return l.field===c?-1:r.field===c?1:0})}(l,k.storeFilter)},[k,l]);return e(s,{in:S.length>0,timeout:"auto",unmountOnExit:!0,children:t(C,{className:a.root,sx:c.sx,children:[e("div",{className:a.scrollHorizontal,children:e(n,{label:"Filters",value:S,placement:"horizontal",onRemove:function(l,r){return r===x?y.removeFilter(l):y.removeFilterByFieldValue(l,r)}})}),t(u,{children:[e(d,{size:"small",color:"error",variant:"text",onClick:y.clearAllFilters,className:a.buttonClearAll,startIcon:e(p,{}),"aria-label":"Clear all filters",children:"Clear All"}),e(m,{size:"small",color:"error",onClick:y.clearAllFilters,className:a.buttonClearAll,"aria-label":"Clear all filters",children:e(p,{})})]})]})})}}var y={root:"DinoFilterSummary-root",scrollHorizontal:"DinoFilterSummary-scrollHorizontal",buttonClearAll:"DinoFilterSummary-buttonClearAll"},C=a("div")(function(r){var e=r.theme;return l(l(l({},"&.".concat(y.root),{display:"flex",alignItems:"center",padding:e.spacing(0,1.5)}),".".concat(y.scrollHorizontal),{overflowX:"auto",overflowY:"hidden",WebkitOverflowScrolling:"touch",scrollbarHeight:"thin",display:"flex",flexWrap:"nowrap",minWidth:0,flex:1,"& > *":{minWidth:"max-content",flexShrink:0},"&::-webkit-scrollbar":{height:"8px",background:"transparent"},"&::-webkit-scrollbar-thumb":{background:e.palette.grey[300],borderRadius:"8px",minHeight:"8px",transition:"background 0.2s"},"&::-webkit-scrollbar-thumb:hover":{background:e.palette.primary.light},"&::-webkit-scrollbar-track":{background:e.palette.grey[100],borderRadius:"8px"},scrollbarColor:"".concat(e.palette.grey[300]," ").concat(e.palette.grey[100]),scrollbarWidth:"thin"}),".".concat(y.buttonClearAll),l(l(l({marginLeft:e.spacing(1)},"&:not(.".concat(n.root,")"),{textTransform:"none",fontWeight:500,lineHeight:2,padding:e.spacing(0,1)}),"&.".concat(n.root),{display:"none"}),e.breakpoints.down("md"),l(l({},"&.".concat(c.root),{display:"none"}),"&.".concat(n.root),{display:"flex"})))});export{k as createFilterSummary};
1
+ import{defineProperty as l,objectSpread2 as r}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as e,jsxs as i}from"react/jsx-runtime";import{useContext as t,useMemo as o}from"react";import{styled as a,iconButtonClasses as n,buttonClasses as c,Collapse as s,Box as u,Button as d,IconButton as m}from"@mui/material";import p from"@mui/icons-material/ClearAll";import{KeySpecial as b}from"../types.js";import{useFilterActions as f}from"../hooks.js";import{mapSpecialLabel as h}from"../helpers.js";import{createChipViewers as v}from"./chip-viewer.js";import{FilterBarContext as g}from"../index.context.js";var x="__field__";function k(l){var a=y,n=v();return function(c){var v=t(g),k=v.filterState,y=f(v),S=o(function(){return function(l,e){var i,t=l.fields,o=l.enableQuickSearch,a=void 0===o||o,n=r({},t),c=b.quickSearch;return a?n[c]?null!==(i=n[c])&&void 0!==i&&i.label||(n[c]=r(r({},n[c]),{},{label:h[c]})):n[c]={label:h[c]}:delete n[c],Object.keys(e||{}).reduce(function(l,r){var i,t=null==n?void 0:n[r],o=(null==t?void 0:t.label)||r.toString(),a=null==e||null===(i=e[r])||void 0===i?void 0:i.values,c=(Array.isArray(a)?a:[]).filter(Boolean).map(function(l,i){var o;return{value:l.toString(),label:null==t||null===(o=t.labelFormatter)||void 0===o?void 0:o.call(t,l,i,null==e?void 0:e[r])}});if(c.length>0)if(null!=t&&t.singleChip){var s,u=null!==(s=t.singleChipSeparator)&&void 0!==s?s:", ",d=c.map(function(l){var r;return null!==(r=l.label)&&void 0!==r?r:l.value.toString()}).join(u);l.push({field:r,label:o,items:[{value:x,label:d}],chipMinWidth:t.chipMinWidth})}else l.push({field:r,label:o,items:c,chipMinWidth:null==t?void 0:t.chipMinWidth});return l},[]).sort(function(l,r){return l.field===c?-1:r.field===c?1:0})}(l,k.storeFilter)},[k,l]);return e(s,{in:S.length>0,timeout:"auto",unmountOnExit:!0,children:i(C,{className:a.root,sx:c.sx,children:[e("div",{className:a.scrollHorizontal,children:e(n,{label:"Filters",value:S,disabled:v.isLoading,placement:"horizontal",onRemove:function(l,r){return r===x?y.removeFilter(l):y.removeFilterByFieldValue(l,r)}})}),i(u,{children:[e(d,{size:"small",color:"error",variant:"text",onClick:y.clearAllFilters,className:a.buttonClearAll,startIcon:e(p,{}),"aria-label":"Clear all filters",disabled:v.isLoading,children:"Clear All"}),e(m,{size:"small",color:"error",onClick:y.clearAllFilters,className:a.buttonClearAll,"aria-label":"Clear all filters",disabled:v.isLoading,children:e(p,{})})]})]})})}}var y={root:"DinoFilterSummary-root",scrollHorizontal:"DinoFilterSummary-scrollHorizontal",buttonClearAll:"DinoFilterSummary-buttonClearAll"},C=a("div")(function(r){var e=r.theme;return l(l(l({},"&.".concat(y.root),{display:"flex",alignItems:"center",padding:e.spacing(0,1.5)}),".".concat(y.scrollHorizontal),{overflowX:"auto",overflowY:"hidden",WebkitOverflowScrolling:"touch",scrollbarHeight:"thin",display:"flex",flexWrap:"nowrap",minWidth:0,flex:1,"& > *":{minWidth:"max-content",flexShrink:0},"&::-webkit-scrollbar":{height:"8px",background:"transparent"},"&::-webkit-scrollbar-thumb":{background:e.palette.grey[300],borderRadius:"8px",minHeight:"8px",transition:"background 0.2s"},"&::-webkit-scrollbar-thumb:hover":{background:e.palette.primary.light},"&::-webkit-scrollbar-track":{background:e.palette.grey[100],borderRadius:"8px"},scrollbarColor:"".concat(e.palette.grey[300]," ").concat(e.palette.grey[100]),scrollbarWidth:"thin"}),".".concat(y.buttonClearAll),l(l(l({marginLeft:e.spacing(1)},"&:not(.".concat(n.root,")"),{textTransform:"none",fontWeight:500,lineHeight:2,padding:e.spacing(0,1)}),"&.".concat(n.root),{display:"none"}),e.breakpoints.down("md"),l(l({},"&.".concat(c.root),{display:"none"}),"&.".concat(n.root),{display:"flex"})))});export{k as createFilterSummary};
2
2
  //# sourceMappingURL=filter-summary.js.map