Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 21 additions & 18 deletions packages/raystack/components/data-table/components/content.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ function Rows<TData>({
>
{cells.map(cell => {
const columnDef = cell.column.columnDef as DataTableColumnDef<
unknown,
TData,
unknown
>;
return (
Expand Down Expand Up @@ -184,36 +184,39 @@ export function Content({
const lastRowRef = useRef<HTMLTableRowElement | null>(null);
const observerRef = useRef<IntersectionObserver | null>(null);

const handleObserver = useCallback(
(entries: IntersectionObserverEntry[]) => {
const target = entries[0];
if (target.isIntersecting && !isLoading) {
loadMoreData();
}
},
[loadMoreData, isLoading]
);
/* Refs keep callback stable so observer is only recreated when mode/rows.length change; */
const loadMoreDataRef = useRef(loadMoreData);
const isLoadingRef = useRef(isLoading);
loadMoreDataRef.current = loadMoreData;
isLoadingRef.current = isLoading;

const handleObserver = useCallback((entries: IntersectionObserverEntry[]) => {
const target = entries[0];
if (!target?.isIntersecting) return;
if (isLoadingRef.current) return;
const loadMore = loadMoreDataRef.current;
if (loadMore) loadMore();
}, []);

useEffect(() => {
if (mode !== 'server') return;

if (observerRef.current) {
observerRef.current.disconnect();
observerRef.current = null;
}

const lastRow = lastRowRef.current;
if (!lastRow) return;

observerRef.current = new IntersectionObserver(handleObserver, {
threshold: 0.1
});
const lastRow = lastRowRef.current;
if (lastRow) {
observerRef.current.observe(lastRow);
}
observerRef.current.observe(lastRow);

return () => {
if (observerRef.current && lastRow) {
observerRef.current.unobserve(lastRow);
observerRef.current.disconnect();
}
observerRef.current?.disconnect();
observerRef.current = null;
};
}, [mode, rows.length, handleObserver]);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ function VirtualRows<TData>({
>
{cells.map(cell => {
const columnDef = cell.column.columnDef as DataTableColumnDef<
unknown,
TData,
unknown
>;
return (
Expand Down
8 changes: 4 additions & 4 deletions packages/raystack/components/data-table/data-table.module.css
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
.toolbar {
padding: var(--rs-space-3) var(--rs-space-7) var(--rs-space-3)
var(--rs-space-5);
padding: var(--rs-space-3) var(--rs-space-7) var(--rs-space-3) var(--rs-space-5);
align-self: stretch;

border-bottom: 0.5px solid var(--rs-color-border-base-primary);
Expand All @@ -21,12 +20,13 @@
.display-popover-properties-select {
width: var(--select-width);
}

.display-popover-properties-select[with-icon-button] {
/* Reduce Icon button with "--rs-space-7" and flex gap "--rs-space-2" */
width: calc(var(--select-width) - var(--rs-space-7) - var(--rs-space-2));
}

.display-popover-properties-select > span {
.display-popover-properties-select>span {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
Expand Down Expand Up @@ -154,4 +154,4 @@

.loaderRow {
position: relative;
}
}