-
Notifications
You must be signed in to change notification settings - Fork 474
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fixed scroll issue in shifting in facilities. #9268
base: develop
Are you sure you want to change the base?
Changes from 1 commit
fcaf7f5
9a6a1d9
4dd6525
60ba91e
25bed76
e22701b
e949a5f
02ccceb
69d5519
c7ef408
f555c30
1cb7131
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
// src/CAREUI/display/ScrollableColumn.tsx | ||
import React from "react"; | ||
|
||
interface ScrollableColumnProps { | ||
title: string; | ||
children: React.ReactNode; | ||
} | ||
|
||
const ScrollableColumn: React.FC<ScrollableColumnProps> = ({ | ||
title, | ||
children, | ||
}) => { | ||
return ( | ||
<div | ||
style={{ | ||
height: "400px", | ||
overflowY: "auto", | ||
border: "1px solid #ccc", | ||
margin: "10px", | ||
}} | ||
> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Make the component more flexible and accessible The component could benefit from the following improvements:
<div
+ role="region"
+ aria-label={title}
style={{
- height: "400px",
+ height: props.height || "400px",
overflowY: "auto",
border: "1px solid #ccc",
margin: "10px",
+ ...props.style,
}}
+ className={props.className}
> Update the props interface accordingly: interface ScrollableColumnProps {
title: string;
children: React.ReactNode;
height?: string;
style?: React.CSSProperties;
className?: string;
} There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
<h3>{title}</h3> | ||
{children} | ||
</div> | ||
); | ||
}; | ||
|
||
export default ScrollableColumn; |
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this file seems unnecessary |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -29,15 +29,14 @@ interface KanbanBoardProps<T extends { id: string }> { | |||||||||||||||||||||||
}[]; | ||||||||||||||||||||||||
itemRender: (item: T) => ReactNode; | ||||||||||||||||||||||||
} | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
export default function KanbanBoard<T extends { id: string }>( | ||||||||||||||||||||||||
props: KanbanBoardProps<T>, | ||||||||||||||||||||||||
) { | ||||||||||||||||||||||||
const board = useRef<HTMLDivElement>(null); | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
return ( | ||||||||||||||||||||||||
<div className="h-[calc(100vh-114px)] md:h-[calc(100vh-50px)]"> | ||||||||||||||||||||||||
<div className="flex flex-col items-end justify-between md:flex-row"> | ||||||||||||||||||||||||
<div className="flex flex-col items-center justify-between md:flex-row"> | ||||||||||||||||||||||||
<div>{props.title}</div> | ||||||||||||||||||||||||
<div className="flex items-center gap-2 py-2"> | ||||||||||||||||||||||||
{[0, 1].map((button, i) => ( | ||||||||||||||||||||||||
|
@@ -56,8 +55,15 @@ export default function KanbanBoard<T extends { id: string }>( | |||||||||||||||||||||||
))} | ||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
<DragDropContext onDragEnd={props.onDragEnd}> | ||||||||||||||||||||||||
<div className="h-full overflow-scroll" ref={board}> | ||||||||||||||||||||||||
<div | ||||||||||||||||||||||||
className="h-full overflow-scroll" | ||||||||||||||||||||||||
ref={board} | ||||||||||||||||||||||||
style={{ | ||||||||||||||||||||||||
overflow: "hidden", | ||||||||||||||||||||||||
}} | ||||||||||||||||||||||||
> | ||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Resolve conflicting overflow styles There's a potential issue with conflicting overflow styles:
This might affect the intended scrolling behavior. <div
- className="h-full overflow-scroll"
+ className="h-full overflow-x-auto overflow-y-hidden"
ref={board}
- style={{
- overflow: "hidden",
- }}
> 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||
<div className="flex items-stretch px-0 pb-2"> | ||||||||||||||||||||||||
{props.sections.map((section, i) => ( | ||||||||||||||||||||||||
<KanbanSection<T> | ||||||||||||||||||||||||
|
@@ -73,7 +79,6 @@ export default function KanbanBoard<T extends { id: string }>( | |||||||||||||||||||||||
</div> | ||||||||||||||||||||||||
); | ||||||||||||||||||||||||
} | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
export function KanbanSection<T extends { id: string }>( | ||||||||||||||||||||||||
props: Omit<KanbanBoardProps<T>, "sections" | "onDragEnd"> & { | ||||||||||||||||||||||||
section: KanbanBoardProps<T>["sections"][number]; | ||||||||||||||||||||||||
|
@@ -92,8 +97,6 @@ export function KanbanSection<T extends { id: string }>( | |||||||||||||||||||||||
const defaultLimit = 14; | ||||||||||||||||||||||||
const { t } = useTranslation(); | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
// should be replaced with useInfiniteQuery when we move over to react query | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
const fetchNextPage = async (refresh: boolean = false) => { | ||||||||||||||||||||||||
if (!refresh && (fetchingNextPage || !hasMore)) return; | ||||||||||||||||||||||||
if (refresh) setPages([]); | ||||||||||||||||||||||||
|
@@ -121,7 +124,6 @@ export function KanbanSection<T extends { id: string }>( | |||||||||||||||||||||||
const sectionElementHeight = | ||||||||||||||||||||||||
sectionRef.current?.getBoundingClientRect().height; | ||||||||||||||||||||||||
const scrolled = props.boardRef.current?.scrollTop; | ||||||||||||||||||||||||
// if user has scrolled 3/4th of the current items | ||||||||||||||||||||||||
if ( | ||||||||||||||||||||||||
scrolled && | ||||||||||||||||||||||||
sectionElementHeight && | ||||||||||||||||||||||||
|
@@ -130,7 +132,6 @@ export function KanbanSection<T extends { id: string }>( | |||||||||||||||||||||||
fetchNextPage(); | ||||||||||||||||||||||||
} | ||||||||||||||||||||||||
}; | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
props.boardRef.current?.addEventListener("scroll", onBoardReachEnd); | ||||||||||||||||||||||||
return () => | ||||||||||||||||||||||||
props.boardRef.current?.removeEventListener("scroll", onBoardReachEnd); | ||||||||||||||||||||||||
|
@@ -139,15 +140,12 @@ export function KanbanSection<T extends { id: string }>( | |||||||||||||||||||||||
useEffect(() => { | ||||||||||||||||||||||||
fetchNextPage(true); | ||||||||||||||||||||||||
}, [props.section]); | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
return ( | ||||||||||||||||||||||||
<Droppable droppableId={section.id}> | ||||||||||||||||||||||||
{(provided) => ( | ||||||||||||||||||||||||
<div | ||||||||||||||||||||||||
ref={provided.innerRef} | ||||||||||||||||||||||||
className={ | ||||||||||||||||||||||||
"relative mr-2 w-[300px] shrink-0 rounded-xl bg-secondary-200" | ||||||||||||||||||||||||
} | ||||||||||||||||||||||||
className="relative mr-2 w-[300px] shrink-0 rounded-xl bg-secondary-200" | ||||||||||||||||||||||||
> | ||||||||||||||||||||||||
<div className="sticky top-0 rounded-xl bg-secondary-200 pt-2"> | ||||||||||||||||||||||||
<div className="mx-2 flex items-center justify-between rounded-lg border border-secondary-300 bg-white p-4"> | ||||||||||||||||||||||||
|
@@ -159,7 +157,10 @@ export function KanbanSection<T extends { id: string }>( | |||||||||||||||||||||||
</div> | ||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||
<div ref={sectionRef}> | ||||||||||||||||||||||||
<div | ||||||||||||||||||||||||
ref={sectionRef} | ||||||||||||||||||||||||
className="h-[calc(100vh-180px)] overflow-y-auto" | ||||||||||||||||||||||||
> | ||||||||||||||||||||||||
{!fetchingNextPage && totalCount === 0 && ( | ||||||||||||||||||||||||
<div className="flex items-center justify-center py-10 text-secondary-500"> | ||||||||||||||||||||||||
{t("no_results_found")} | ||||||||||||||||||||||||
|
@@ -190,5 +191,4 @@ export function KanbanSection<T extends { id: string }>( | |||||||||||||||||||||||
</Droppable> | ||||||||||||||||||||||||
); | ||||||||||||||||||||||||
} | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
export type KanbanBoardType = typeof KanbanBoard; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
#9223 has solved issues with line endings on windows. Ensure proper line endings by using latest develop branch.