dinocollab-core 2.2.20 → 2.2.21
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.
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{slicedToArray as n,asyncToGenerator as e,regenerator as i,objectSpread2 as a}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as
|
|
1
|
+
import{slicedToArray as n,asyncToGenerator as e,regenerator as i,objectSpread2 as a}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as o,jsx as t}from"react/jsx-runtime";import{styled as r,Box as l}from"@mui/material";import{useState as u,useMemo as g,useCallback as d,useEffect as v,useRef as s}from"react";import{LoadingModeRule as c}from"./types.js";import{createViewList as p,createViewListLoading as f}from"./view-list/index.js";import{createViewGrid as h,createViewGridLoading as m}from"./view-grid/index.js";import{createViewSwitchTransition as P}from"./view-switch-transition.js";import{PanelLoading as C,PanelNoData as S,PanelLoadMore as w,PanelInfiniteScrollFooter as x,PanelPaginationFooter as z}from"./ui.units.js";function N(r){if(!r.GridComponent){var N=r.gridConfig||{getterId:function(n,e){return e}};r.gridConfig=N,r.GridComponent=h(N)}if(!r.ListComponent){var L=r.listConfig||{getterId:function(n,e){return e}};r.listConfig=L,r.ListComponent=p(L)}var b=r.defaultViewMode,y=void 0===b?"grid":b,j=r.defaultLoadMode,k=void 0===j?"pagination":j,T=r.featureMode,D=void 0===T?"client":T,I=P({}),V=m(r.GridComponent),B=f(r.ListComponent);return function(p){var f,h,m,P,N,L=p.slots||{},b=null!==(f=null!==(h=null===(m=p.pagination)||void 0===m?void 0:m.pageSize)&&void 0!==h?h:r.defaultPageSize)&&void 0!==f?f:20,j=u({page:0,pageSize:b}),T=n(j,2),G=T[0],H=T[1],A=g(function(){var n,e,i,a,o,t=null!==(n=p.pagination)&&void 0!==n?n:G;return{page:null!==(e=t.page)&&void 0!==e?e:0,pageSize:null!==(i=t.pageSize)&&void 0!==i?i:b,hasNext:null!==(a=t.hasNext)&&void 0!==a&&a,hasPrev:null!==(o=t.hasPrev)&&void 0!==o&&o,total:t.total}},[p.pagination,G]),R=null!==(P=p.viewMode)&&void 0!==P?P:y,_=null!==(N=p.loadMode)&&void 0!==N?N:k,J=g(function(){var n,e,i,a;return"grid"===R?null!==(i=null===(a=r.gridConfig)||void 0===a?void 0:a.renderStrategy)&&void 0!==i?i:"normal":null!==(n=null===(e=r.listConfig)||void 0===e?void 0:e.renderStrategy)&&void 0!==n?n:"normal"},[R]),q=d(e(i().m(function n(){var e,o,t,r,l;return i().w(function(n){for(;;)switch(n.n){case 0:if(!((r=null!==(e=A.page)&&void 0!==e?e:0)<=0)){n.n=1;break}return n.a(2);case 1:return l=r-1,p.pagination||H(function(n){return a(a({},n),{},{page:l})}),n.n=2,null===(o=p.onPageChange)||void 0===o?void 0:o.call(p,l,null!==(t=A.pageSize)&&void 0!==t?t:b);case 2:return n.a(2)}},n)})),[A.page,A.pageSize,p.pagination,p.onPageChange]),E=d(e(i().m(function n(){var e,o,t,r,l;return i().w(function(n){for(;;)switch(n.n){case 0:if(A.hasNext){n.n=1;break}return n.a(2);case 1:return r=null!==(e=A.page)&&void 0!==e?e:0,l=r+1,p.pagination||H(function(n){return a(a({},n),{},{page:l})}),n.n=2,null===(o=p.onPageChange)||void 0===o?void 0:o.call(p,l,null!==(t=A.pageSize)&&void 0!==t?t:b);case 2:return n.a(2)}},n)})),[A.hasNext,A.page,A.pageSize,p.pagination,p.onPageChange]),F=d(function(){var n=e(i().m(function n(e){var o,t;return i().w(function(n){for(;;)switch(n.n){case 0:if(!(e<0)){n.n=1;break}return n.a(2);case 1:return p.pagination||H(function(n){return a(a({},n),{},{page:e})}),n.n=2,null===(o=p.onPageChange)||void 0===o?void 0:o.call(p,e,null!==(t=A.pageSize)&&void 0!==t?t:b);case 2:return n.a(2)}},n)}));return function(e){return n.apply(this,arguments)}}(),[A.pageSize,p.pagination,p.onPageChange]),K=p.value||[],O="client"===D?p.value:void 0;v(function(){"client"!==D||p.pagination||H(function(n){return a(a({},n),{},{page:0})})},[p.value]);var Q=g(function(){var n,e,i=null!==(n=A.page)&&void 0!==n?n:0,a=null!==(e=A.pageSize)&&void 0!==e?e:b;if("client"===D){var o=K.length;return{page:i,pageSize:a,hasNext:a*(i+1)<o,hasPrev:i>0,total:o}}return A},[A,K.length,D,b]),U=g(function(){if("client"===D){var n,e,i=null!==(n=Q.page)&&void 0!==n?n:0,a=null!==(e=Q.pageSize)&&void 0!==e?e:b;if("infiniteScroll"===_)return K.slice(0,(i+1)*a);var o=i*a;return K.slice(o,o+a)}return K},[K,Q,D,_,b]),W=0===K.length,X=Boolean(p.loading&&W),Y=!p.loading&&W,Z=Boolean(p.loading)&&!W,$=d(function(){var n=e(i().m(function n(e,a){var o;return i().w(function(n){for(;;)switch(n.n){case 0:return p.pagination||H({page:e,pageSize:a}),n.n=1,null===(o=p.onPageChange)||void 0===o?void 0:o.call(p,e,a);case 1:return n.a(2)}},n)}));return function(e,i){return n.apply(this,arguments)}}(),[p.pagination,p.onPageChange]),nn=g(function(){return a({value:U,loadMode:_,loading:p.loading,pagination:Q,onPageChange:$,scrollResetToken:O},L.gridViewProps)},[U,_,p.loading,Q,$,O,L.gridViewProps]),en=s(nn);en.current=nn;var an=g(function(){var n,e;return a({value:U,loadMode:_,loading:p.loading,pagination:Q,onPageChange:$,renderStrategy:J,selectable:null!==(n=p.selectable)&&void 0!==n?n:null===(e=r.listConfig)||void 0===e?void 0:e.selectable,selectedIds:p.selectedIds,onSelectionChange:p.onSelectionChange,scrollResetToken:O},L.listViewProps)},[U,_,p.loading,Q,J,$,p.selectable,p.selectedIds,p.onSelectionChange,O,L.listViewProps]),on=s(an);on.current=an;var tn=g(function(){return function(){return t(B,a({},on.current))}},[B]),rn=g(function(){return function(){return t(V,a({},en.current))}},[V]),ln=g(function(){return L.PanelLoading||(null==r?void 0:r.PanelLoading)||C},[L.PanelLoading,r.PanelLoading,R]),un=g(function(){return L.PanelNoData||(null==r?void 0:r.PanelNoData)||S},[L.PanelNoData,r.PanelNoData,R]),gn=g(function(){return L.PanelLoadMore||(null==r?void 0:r.PanelLoadMore)||w},[L.PanelLoadMore,r.PanelLoadMore]);return o(M,{sx:p.sx,children:[o(l,{sx:{flex:1,minHeight:0,position:"relative"},children:[X&&t(ln,{viewMode:R}),Y&&t(un,{viewMode:R}),!X&&!Y&&t(I,{value:R,viewA:{value:"list",Content:tn},viewB:{value:"grid",Content:rn}}),Z&&t(gn,{})]}),function(){var n,e,i;if(_===c.infiniteScroll){var a,o=null===(a=p.slots)||void 0===a?void 0:a.footer;return t(x,{loading:p.loading,hasNext:Q.hasNext,currentCount:U.length,total:Q.total,slots:{statusText:null==o?void 0:o.status,rangeText:null==o?void 0:o.range}})}return t(z,{page:null!==(n=Q.page)&&void 0!==n?n:0,pageSize:null!==(e=Q.pageSize)&&void 0!==e?e:b,total:Q.total,hasNext:Q.hasNext,hasPrev:(null!==(i=Q.page)&&void 0!==i?i:0)>0,loading:p.loading,onPrevPage:q,onNextPage:E,onPageJump:F})}()]})}}var M=r(l)(function(n){return{display:"flex",flexDirection:"column",width:"100%",height:"100%",position:"relative",flex:1,minHeight:0,backgroundColor:n.theme.palette.background.default}});export{N as createDataSurface,N as default};
|
|
2
2
|
//# sourceMappingURL=index.create.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 PanelLoading?: ComponentType<{ viewMode: DataSurfaceViewMode }>\r\n PanelNoData?: ComponentType<{ viewMode: DataSurfaceViewMode }>\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}\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 || PanelLoading\r\n }, [slots.PanelLoading, viewMode])\r\n\r\n const PanelNoDataComponent = useMemo(() => {\r\n return slots.PanelNoData || PanelNoData\r\n }, [slots.PanelNoData, viewMode])\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 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 && <PanelLoadMore />}\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","_jsxs","DataSurfaceStyled","sx","children","Box","flex","minHeight","position","viewA","Content","viewB","PanelLoadMore","_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 }> = () => {\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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"}
|
|
@@ -7,12 +7,16 @@ import type { IViewListConfig, IViewListProps } from './view-list';
|
|
|
7
7
|
export interface IDataSurfaceSlots<T> {
|
|
8
8
|
listViewProps?: IViewListProps<T>;
|
|
9
9
|
gridViewProps?: IViewGridProps<T>;
|
|
10
|
+
/** Custom loading component. If not provided, a default loading component will be used. */
|
|
10
11
|
PanelLoading?: ComponentType<{
|
|
11
12
|
viewMode: DataSurfaceViewMode;
|
|
12
13
|
}>;
|
|
14
|
+
/** Custom no data component. If not provided, a default no data component will be used. */
|
|
13
15
|
PanelNoData?: ComponentType<{
|
|
14
16
|
viewMode: DataSurfaceViewMode;
|
|
15
17
|
}>;
|
|
18
|
+
/** Custom load more component for infinite scroll mode. If not provided, a default loading indicator will be shown when fetching the next page. */
|
|
19
|
+
PanelLoadMore?: ComponentType;
|
|
16
20
|
footer?: {
|
|
17
21
|
status?: TRenderableNode;
|
|
18
22
|
range?: TRenderableNode;
|
|
@@ -72,6 +76,16 @@ export interface IDataSurfaceConfig<T> {
|
|
|
72
76
|
gridConfig?: IViewGridConfig<T>;
|
|
73
77
|
/** Custom Grid component. If not provided, a default Grid component will be used. */
|
|
74
78
|
GridComponent?: ComponentType<IViewGridProps<T>>;
|
|
79
|
+
/** Custom loading component. If not provided, a default loading component will be used. */
|
|
80
|
+
PanelLoading?: ComponentType<{
|
|
81
|
+
viewMode: DataSurfaceViewMode;
|
|
82
|
+
}>;
|
|
83
|
+
/** Custom no data component. If not provided, a default no data component will be used. */
|
|
84
|
+
PanelNoData?: ComponentType<{
|
|
85
|
+
viewMode: DataSurfaceViewMode;
|
|
86
|
+
}>;
|
|
87
|
+
/** Custom load more component for infinite scroll mode. If not provided, a default loading indicator will be shown when fetching the next page. */
|
|
88
|
+
PanelLoadMore?: ComponentType;
|
|
75
89
|
}
|
|
76
90
|
export declare function createDataSurface<T>(config: IDataSurfaceConfig<T>): FC<IDataSurfaceProps<T>>;
|
|
77
91
|
export default createDataSurface;
|