diff --git a/packages/lsd-react/src/components/Table/Table.stories.tsx b/packages/lsd-react/src/components/Table/Table.stories.tsx
index 867c020..ba20649 100644
--- a/packages/lsd-react/src/components/Table/Table.stories.tsx
+++ b/packages/lsd-react/src/components/Table/Table.stories.tsx
@@ -27,18 +27,16 @@ export default {
},
} as Meta
-const content = (
-
- Content 1
- Content 2
- Content 3
- Content 4
- Content 5
- Content 6
- Content 7
- Content 8
-
-)
+const itemContentArray = [
+ 'Content 1',
+ 'Content 2',
+ 'Content 3',
+ 'Content 4',
+ 'Content 5',
+ 'Content 6',
+ 'Content 7',
+ 'Content 8',
+]
const header = (
({
export const Root: Story
= ({ type, pages, ...args }) => {
const [rows, setRows] = useState(1)
const [footerContent, setFooterContent] = useState('Footer content goes here')
-
+ const [allChecked, setAllChecked] = useState(false)
+ const [rowsChecked, setRowsChecked] = useState(Array(rows).fill(false))
const onPageChange = (page: number) => {
setFooterContent(`Page ${page} of ${pages}`)
}
+ const handleHeaderCheckboxChange = () => {
+ const newAllChecked = !allChecked
+ setAllChecked(newAllChecked)
+ // Update all rows based on the header checkbox.
+ setRowsChecked(Array(rows).fill(newAllChecked))
+ }
+
+ const handleRowCheckboxChange = (index: number) => {
+ const updatedRowsChecked = [...rowsChecked]
+ updatedRowsChecked[index] = !updatedRowsChecked[index]
+ setRowsChecked(updatedRowsChecked)
+
+ // Check if all rows are selected or if any row is unchecked
+ if (updatedRowsChecked.every((val) => val)) {
+ setAllChecked(true)
+ } else {
+ setAllChecked(false)
+ }
+ }
+
const toolbar = (
<>
= ({ type, pages, ...args }) => {
{...args}
onPageChange={onPageChange}
>
-
- {headerOptions.map((item) => (
- {item.name}
+
+ {headerOptions.map((item, index) => (
+ {item.name}
))}
{Array(rows)
.fill(true)
- .map(() => content)}
+ .map((row, rowIndex) => (
+ handleRowCheckboxChange(rowIndex)}
+ key={rowIndex}
+ >
+ {itemContentArray.map((itemContent, itemIndex) => (
+
+ {itemContent}
+
+ ))}
+
+ ))}
)
diff --git a/packages/lsd-react/src/components/TableFooter/TableFooter.tsx b/packages/lsd-react/src/components/TableFooter/TableFooter.tsx
index e95fa53..e5f79f8 100644
--- a/packages/lsd-react/src/components/TableFooter/TableFooter.tsx
+++ b/packages/lsd-react/src/components/TableFooter/TableFooter.tsx
@@ -81,7 +81,7 @@ export const TableFooter: React.FC & {
size={size}
onClick={() => dispatch({ type: 'DECREMENT_PAGE' })}
>
-
+
& {
size={size}
onClick={() => dispatch({ type: 'INCREMENT_PAGE' })}
>
-
+
)}
diff --git a/packages/lsd-react/src/components/TableRow/TableRow.tsx b/packages/lsd-react/src/components/TableRow/TableRow.tsx
index e79ee9c..b714c2b 100644
--- a/packages/lsd-react/src/components/TableRow/TableRow.tsx
+++ b/packages/lsd-react/src/components/TableRow/TableRow.tsx
@@ -15,6 +15,9 @@ export type TableRowProps = CommonProps &
React.HTMLAttributes & {
size?: 'large' | 'medium' | 'small'
type?: 'default' | 'checkbox' | 'radio'
+ onSelectChange?: (rowId?: string) => void
+ rowId?: string
+ checked?: boolean
}
export const TableRow: React.FC & {
@@ -23,12 +26,31 @@ export const TableRow: React.FC & {
size: _size = 'large',
type: _type = 'default',
children,
+ onSelectChange,
+ rowId,
+ checked: isCheckedProp,
...props
}) => {
const commonProps = useCommonProps(props)
const table = useTableContext()
const type = table?.type ?? _type
+ // State for uncontrolled component behavior
+ const [isChecked, setIsChecked] = React.useState(false)
+ const isControlled = isCheckedProp !== undefined
+
+ // Set internal state here, if the component is controlled.
+ if (isControlled && isCheckedProp != isChecked) setIsChecked(isCheckedProp)
+
+ const handleCheckboxChange = () => {
+ if (!isControlled) {
+ // Only toggle the internal state if it's an uncontrolled component
+ setIsChecked(!isChecked)
+ }
+
+ onSelectChange && onSelectChange(rowId)
+ }
+
return (
& {
>
{type === 'checkbox' && (
-
+
|
)}
{type === 'radio' && (
-
+
|
)}
{children}