Skip to content

Commit 6e7c1e2

Browse files
committed
refactor(ui-table): allow falsy children for Table.Row, sort docs params and theme variables
Also do not render the 'default' column in docs if nothing has a defult value
1 parent 90747ec commit 6e7c1e2

File tree

5 files changed

+59
-25
lines changed

5 files changed

+59
-25
lines changed

packages/__docs__/src/ComponentTheme/index.tsx

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -71,18 +71,20 @@ class ComponentTheme extends Component<ComponentThemeProps> {
7171
const { componentTheme, themeVariables } = this.props
7272
const colorPrimitives = themeVariables.colors.primitives
7373

74-
return Object.keys(componentTheme).map((name) => {
75-
return (
76-
<Table.Row key={name}>
77-
<Table.Cell>
78-
<code>{name}</code>
79-
</Table.Cell>
80-
<Table.Cell>
81-
{this.renderValueCell(componentTheme[name], colorPrimitives)}
82-
</Table.Cell>
83-
</Table.Row>
84-
)
85-
})
74+
return Object.keys(componentTheme)
75+
.sort((a, b) => a.localeCompare(b))
76+
.map((name) => {
77+
return (
78+
<Table.Row key={name}>
79+
<Table.Cell>
80+
<code>{name}</code>
81+
</Table.Cell>
82+
<Table.Cell>
83+
{this.renderValueCell(componentTheme[name], colorPrimitives)}
84+
</Table.Cell>
85+
</Table.Row>
86+
)
87+
})
8688
}
8789

8890
render() {

packages/__docs__/src/Params/index.tsx

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class Params extends Component<ParamsProps> {
3636
layout: 'small'
3737
}
3838

39-
renderRows() {
39+
renderRows(hasDefault: boolean) {
4040
return this.props.params?.map((param) => {
4141
return (
4242
<Table.Row key={param.name}>
@@ -46,9 +46,11 @@ class Params extends Component<ParamsProps> {
4646
<Table.Cell>
4747
<code>{param?.type}</code>
4848
</Table.Cell>
49-
<Table.Cell>
50-
<code>{param?.defaultValue}</code>
51-
</Table.Cell>
49+
{hasDefault && (
50+
<Table.Cell>
51+
<code>{param?.defaultValue}</code>
52+
</Table.Cell>
53+
)}
5254
<Table.Cell>{this.renderDescription(param.description)}</Table.Cell>
5355
</Table.Row>
5456
)
@@ -108,6 +110,15 @@ class Params extends Component<ParamsProps> {
108110
</>
109111
)
110112
}
113+
let hasDefault = false
114+
if (this.props.params) {
115+
for (const param of this.props.params) {
116+
if (param.defaultValue) {
117+
hasDefault = true
118+
break
119+
}
120+
}
121+
}
111122
return (
112123
<>
113124
<Table
@@ -119,11 +130,13 @@ class Params extends Component<ParamsProps> {
119130
<Table.Row>
120131
<Table.ColHeader id="Param">Param</Table.ColHeader>
121132
<Table.ColHeader id="Type">Type</Table.ColHeader>
122-
<Table.ColHeader id="Default">Default</Table.ColHeader>
133+
{hasDefault && (
134+
<Table.ColHeader id="Default">Default</Table.ColHeader>
135+
)}
123136
<Table.ColHeader id="Description">Description</Table.ColHeader>
124137
</Table.Row>
125138
</Table.Head>
126-
<Table.Body>{this.renderRows()}</Table.Body>
139+
<Table.Body>{this.renderRows(hasDefault)}</Table.Body>
127140
</Table>
128141
{genericParamsTable}
129142
</>

packages/__docs__/src/Properties/index.tsx

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ class Properties extends Component<PropertiesProps> {
6262
return string.includes('(...args: any[]) => any')
6363
}
6464

65-
renderRows() {
65+
renderRows(hasDefaultOrRequired: boolean) {
6666
const { props } = this.props
6767
const propsToIgnore = ['styles', 'makeStyles', 'dir']
6868

@@ -81,6 +81,7 @@ class Properties extends Component<PropertiesProps> {
8181
!propsToIgnore.includes(name)
8282
)
8383
})
84+
.sort((a, b) => a.localeCompare(b))
8485
.map((name, idx) => {
8586
const prop = props[name]
8687
return (
@@ -91,7 +92,9 @@ class Properties extends Component<PropertiesProps> {
9192
<Table.Cell>
9293
{prop.tsType && <code>{this.renderTSType(prop.tsType)}</code>}
9394
</Table.Cell>
94-
<Table.Cell>{this.renderDefault(prop)}</Table.Cell>
95+
{hasDefaultOrRequired && (
96+
<Table.Cell>{this.renderDefault(prop)}</Table.Cell>
97+
)}
9598
<Table.Cell>{this.renderDescription(prop)}</Table.Cell>
9699
</Table.Row>
97100
)
@@ -263,6 +266,13 @@ class Properties extends Component<PropertiesProps> {
263266
render() {
264267
const { styles } = this.props
265268
const { layout } = this.props
269+
let hasDefaultOrRequired = false
270+
for (const i in this.props.props) {
271+
if (this.props.props[i].required || this.props.props[i].defaultValue) {
272+
hasDefaultOrRequired = true
273+
break
274+
}
275+
}
266276
return (
267277
<div css={styles?.properties}>
268278
<Table
@@ -273,11 +283,13 @@ class Properties extends Component<PropertiesProps> {
273283
<Table.Row>
274284
<Table.ColHeader id="Prop">Prop</Table.ColHeader>
275285
<Table.ColHeader id="Type">Type</Table.ColHeader>
276-
<Table.ColHeader id="Default">Default</Table.ColHeader>
286+
{hasDefaultOrRequired && (
287+
<Table.ColHeader id="Default">Default</Table.ColHeader>
288+
)}
277289
<Table.ColHeader id="Description">Description</Table.ColHeader>
278290
</Table.Row>
279291
</Table.Head>
280-
<Table.Body>{this.renderRows()}</Table.Body>
292+
<Table.Body>{this.renderRows(hasDefaultOrRequired)}</Table.Body>
281293
</Table>
282294
</div>
283295
)

packages/ui-table/src/Table/Row/props.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,17 @@ type TableRowOwnProps = {
3737
* A row's children should be table cells. Its children should have the
3838
* `header` prop to render the column header in `stacked` layout
3939
*
40-
* By default `Table.ColHeader` or `Table.RowHeader` or `Table.Cell`
40+
* By default, `Table.ColHeader` or `Table.RowHeader` or `Table.Cell`.
41+
*
42+
* Falsy values are also allowed to be able to use syntax like
43+
* `{condition && <Table.Cell>bla<Table.Cell>}`
4144
*/
42-
children?: React.ReactElement | React.ReactElement[]
45+
children?:
46+
| React.ReactElement
47+
| null
48+
| undefined
49+
| boolean
50+
| (React.ReactElement | null | undefined | boolean)[]
4351

4452
/**
4553
* Controls the hover state of the row.

packages/ui-table/src/Table/__tests__/Table.test.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,6 @@ describe('<Table />', async () => {
155155
render(
156156
<Table caption="Test table" layout="stacked">
157157
<Table.Head>
158-
{/* @ts-expect-error error is normal here */}
159158
<Table.Row>
160159
<Table.Cell>Foo</Table.Cell>
161160
{}

0 commit comments

Comments
 (0)