Skip to content

Commit 9db39d1

Browse files
committed
Merge branch 'main' of github.com:seamapi/react into fake-thermostats
2 parents 2c26b3c + 3e4c116 commit 9db39d1

File tree

8 files changed

+45
-29
lines changed

8 files changed

+45
-29
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ export function App() {
7878
<seam-device-table publishable-key="your_publishable_key"></seam-device-table>
7979
<script
8080
type="module"
81-
src="https://react.seam.co/v/1.44.0/dist/elements.js"
81+
src="https://react.seam.co/v/1.45.2/dist/elements.js"
8282
></script>
8383
</body>
8484
```

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@seamapi/react",
3-
"version": "1.44.0",
3+
"version": "1.45.2",
44
"description": "Seam Components.",
55
"type": "module",
66
"main": "index.js",

src/lib/seam/components/SupportedDeviceTable/SupportedDeviceContent.tsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,22 @@ interface SupportedDeviceContentProps {
1414
resetFilterValue: () => void
1515
filters: DeviceModelFilters
1616
brands: string[] | null
17+
excludedBrands: string[]
1718
}
1819

1920
export function SupportedDeviceContent({
2021
resetFilterValue,
2122
filterValue,
2223
filters,
2324
brands,
25+
excludedBrands,
2426
}: SupportedDeviceContentProps): JSX.Element | null {
2527
const { deviceModels, isLoading, isError, refetch } = useFilteredDeviceModels(
2628
{
2729
filterValue,
2830
filters,
2931
brands,
32+
excludedBrands,
3033
}
3134
)
3235

@@ -129,13 +132,13 @@ function EmptyResult({
129132
)
130133

131134
return (
132-
<tr className='seam-supported-device-table-content-message-row'>
133-
<td colSpan={6}>
135+
<div className='seam-supported-device-table-content-message-row'>
136+
<div>
134137
<div className='seam-supported-device-table-content-message'>
135138
{filterValue.length === 0 ? <p>{t.noneFound}</p> : noMatchingRows}
136139
</div>
137-
</td>
138-
</tr>
140+
</div>
141+
</div>
139142
)
140143
}
141144

src/lib/seam/components/SupportedDeviceTable/SupportedDeviceFilterArea.tsx

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ interface SupportedDeviceFilterAreaProps {
1414
filters: DeviceModelFilters
1515
setFilters: Dispatch<SetStateAction<DeviceModelFilters>>
1616
brands: string[] | null
17+
excludedBrands: string[]
1718
}
1819

1920
export function SupportedDeviceFilterArea({
@@ -22,10 +23,11 @@ export function SupportedDeviceFilterArea({
2223
filters,
2324
setFilters,
2425
brands,
26+
excludedBrands,
2527
}: SupportedDeviceFilterAreaProps): JSX.Element {
2628
const appliedFiltersCount = getAppliedFilterCount(filters)
2729

28-
const availableBrands = useAvailableBrands(brands)
30+
const availableBrands = useAvailableBrands(brands, excludedBrands)
2931

3032
const resetFilter = (filterType: keyof DeviceModelFilters): void => {
3133
setFilters((filters) => ({
@@ -121,27 +123,30 @@ const getAppliedFilterCount = (filters: DeviceModelFilters): number => {
121123
return count
122124
}
123125

124-
const useAvailableBrands = (brands: string[] | null): string[] => {
126+
const useAvailableBrands = (
127+
brands: string[] | null,
128+
excludedBrands: string[]
129+
): string[] => {
125130
const { deviceModels } = useDeviceModels()
126131

127132
if (deviceModels == null) return []
128133

129-
const uniqueBrands = new Set<string>()
130-
for (const deviceModel of deviceModels) {
131-
const value = deviceModel.brand
132-
133-
// UPSTREAM: API can return an empty value for brand.
134-
if (value.trim() === '') continue
135-
136-
uniqueBrands.add(deviceModel.brand)
137-
}
138-
139-
return Array.from(uniqueBrands)
134+
const availableBrands = deviceModels
135+
.map(({ brand }) => brand.trim())
136+
.filter((brand) => {
137+
// UPSTREAM: API can return an empty value for brand.
138+
return brand !== ''
139+
})
140140
.filter((brand) => {
141141
if (brands === null) return true
142142
return brands.includes(brand)
143143
})
144+
.filter((brand) => {
145+
return !excludedBrands.includes(brand)
146+
})
144147
.map((brand) => capitalize(brand))
148+
149+
return Array.from(new Set(availableBrands))
145150
}
146151

147152
const t = {

src/lib/seam/components/SupportedDeviceTable/SupportedDeviceTable.element.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export const props: ElementProps<SupportedDeviceTableProps> = {
88
cannotFilter: 'boolean',
99
disableFilter: 'boolean',
1010
brands: 'array',
11+
excludedBrands: 'array',
1112
className: 'string',
1213
}
1314

src/lib/seam/components/SupportedDeviceTable/SupportedDeviceTable.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,15 @@ export interface SupportedDeviceTableProps {
1212
*/
1313
cannotFilter?: boolean
1414
brands?: string[] | null
15+
excludedBrands?: string[]
1516
className?: string
1617
}
1718

1819
export function SupportedDeviceTable({
1920
disableFilter = false,
2021
cannotFilter,
2122
brands = null,
23+
excludedBrands = [],
2224
className,
2325
}: SupportedDeviceTableProps = {}): JSX.Element {
2426
const [filterValue, setFilterValue] = useState('')
@@ -43,6 +45,7 @@ export function SupportedDeviceTable({
4345
filters={filters}
4446
setFilters={setFilters}
4547
brands={brands}
48+
excludedBrands={excludedBrands}
4649
/>
4750
)}
4851
<SupportedDeviceContent
@@ -52,6 +55,7 @@ export function SupportedDeviceTable({
5255
filterValue={filterValue}
5356
filters={filters}
5457
brands={brands}
58+
excludedBrands={excludedBrands}
5559
/>
5660
</div>
5761
)

src/lib/seam/components/SupportedDeviceTable/use-filtered-device-models.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@ export const useFilteredDeviceModels = ({
1212
filterValue,
1313
filters,
1414
brands,
15+
excludedBrands,
1516
}: {
1617
filterValue: string
1718
filters: DeviceModelFilters
1819
brands: string[] | null
20+
excludedBrands: string[]
1921
}): ReturnType<typeof useDeviceModels> => {
2022
const params: UseDeviceModelsParams = {}
2123

@@ -33,16 +35,17 @@ export const useFilteredDeviceModels = ({
3335

3436
const query = useDeviceModels(params)
3537

36-
if (brands === null) {
37-
return query
38-
}
39-
40-
// UPSTREAM: The API does not have a brands query parameter,
38+
// UPSTREAM: The API does not have a brands or excludedBrands query parameter,
4139
// so selected brands are filtered here.
4240
return {
4341
...query,
44-
deviceModels: query.deviceModels?.filter((deviceModel) =>
45-
brands.includes(deviceModel.brand)
46-
),
42+
deviceModels: query.deviceModels
43+
?.filter(({ brand }) => {
44+
if (brands === null) return true
45+
return brands.includes(brand)
46+
})
47+
.filter(({ brand }) => {
48+
return !excludedBrands.includes(brand)
49+
}),
4750
}
4851
}

0 commit comments

Comments
 (0)