Skip to content
This repository was archived by the owner on Sep 3, 2024. It is now read-only.

Commit c95f078

Browse files
links can be a single link or an array of links so just normalize to an array
1 parent 5a644de commit c95f078

File tree

6 files changed

+56
-31
lines changed

6 files changed

+56
-31
lines changed

src/SqlStreamStoreBrowser.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,19 @@ import { mediaTypes } from './utils';
1717

1818
const getSelfAlias = links =>
1919
Object.keys(links)
20-
.filter(rel => rel.indexOf('streamStore:') === 0)
21-
.filter(rel => links[rel].href === links.self.href)[0];
20+
.flatMap(rel => links[rel])
21+
.filter(({ rel }) => rel.indexOf('streamStore:') === 0)
22+
.filter(
23+
({ rel, href }) =>
24+
!!links.self.filter(link => link.href === href).length,
25+
)
26+
.map(({ rel }) => rel);
2227

2328
const self$ = store.links$
2429
.filter(links => links.self)
2530
.map(getSelfAlias)
26-
.filter(rel => !!rel);
31+
.filter(rel => !!rel)
32+
.map(([link]) => link);
2733

2834
const state$ = createState(
2935
obs.merge(

src/components/HyperMediaControls/index.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import FormButton from './FormButton';
77
import { rels } from '../../stream-store';
88

99
const isNotSelf = (rel, links) =>
10-
links[rels.self] && links[rel].href !== links[rels.self].href;
10+
links[rels.self] && links[rel][0].href !== links[rels.self][0].href;
1111

1212
const state$ = createState(store.url$.map(href => ['href', () => href]));
1313

@@ -22,10 +22,10 @@ const HyperMediaControls = ({ forms, href, actions, links, onNavigate }) => (
2222
<LinkButton
2323
key={rel}
2424
rel={rel}
25-
link={links[rel]}
25+
link={links[rel][0]}
2626
onNavigate={onNavigate}
2727
color={'active'}
28-
curies={[links[rels.curies]]}
28+
curies={links[rels.curies]}
2929
/>
3030
))}
3131
</div>
@@ -37,7 +37,7 @@ const HyperMediaControls = ({ forms, href, actions, links, onNavigate }) => (
3737
link={{ href }}
3838
actions={actions}
3939
schema={forms[rel]}
40-
curies={[links[rels.curies]]}
40+
curies={links[rels.curies]}
4141
/>
4242
))}
4343
</div>

src/components/NavigationLinks.js

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,50 @@
1-
import React from 'react';
1+
import React, { PureComponent } from 'react';
22
import { IconButton } from '@material-ui/core';
33
import RelIcon from './RelIcon';
44
import { withAuthorization } from './AuthorizationProvider';
55
import { navigation } from '../stream-store';
66
import { preventDefault } from '../utils';
77

8-
const FeedNavigationLink = ({ disabled, onClick, rel }) => (
9-
<IconButton
10-
variant={disabled ? 'disabled' : 'raised'}
11-
disabled={disabled}
12-
onClick={onClick}
13-
>
14-
<RelIcon rel={rel} />
15-
</IconButton>
8+
const FeedNavigationLink = withAuthorization()(
9+
class FeedNavigationLink extends PureComponent {
10+
_handleOnClick = e => {
11+
const { onNavigate, authorization, link } = this.props;
12+
13+
e.preventDefault();
14+
15+
if (!link) {
16+
return;
17+
}
18+
19+
return onNavigate(link, authorization);
20+
};
21+
22+
render() {
23+
const { rel, link } = this.props;
24+
return (
25+
<IconButton
26+
variant={!link ? 'disabled' : 'raised'}
27+
disabled={!link}
28+
onClick={this._handleOnClick}
29+
>
30+
<RelIcon rel={rel} />
31+
</IconButton>
32+
);
33+
}
34+
},
1635
);
1736

18-
const NavigationLinks = ({ onNavigate, links, authorization }) => (
37+
const NavigationLinks = ({ onNavigate, links }) => (
1938
<nav>
2039
{[...navigation].map(rel => (
2140
<FeedNavigationLink
22-
disabled={!links[rel]}
2341
key={rel}
24-
onClick={preventDefault(() =>
25-
onNavigate(links[rel], authorization),
26-
)}
27-
link={links[rel]}
42+
link={(links[rel] || [])[0]}
43+
onNavigate={onNavigate}
2844
rel={rel}
2945
/>
3046
))}
3147
</nav>
3248
);
3349

34-
export default withAuthorization()(NavigationLinks);
50+
export default NavigationLinks;

src/stream-store/Viewer/HalViewer/Stream.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,12 @@ const Message = ({
4444
<TableCell style={nowrap}>{createdUtc}</TableCell>
4545
<TableCell style={nowrap}>{type}</TableCell>
4646
<TableCell style={nowrap}>
47-
<Hyperlink link={links[rels.feed]} onNavigate={onNavigate}>
47+
<Hyperlink link={links[rels.feed][0]} onNavigate={onNavigate}>
4848
{streamId}
4949
</Hyperlink>
5050
</TableCell>
5151
<TableCell>
52-
<Hyperlink link={links.self} onNavigate={onNavigate}>
52+
<Hyperlink link={links.self[0]} onNavigate={onNavigate}>
5353
{streamId}
5454
{'@'}
5555
{streamVersion}

src/stream-store/Viewer/HalViewer/StreamMessage.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,15 +73,15 @@ const StreamMessageDetails = ({
7373
}) => (
7474
<TableRow>
7575
<TableCell style={nowrap}>
76-
<Hyperlink link={links[rels.feed]} onNavigate={onNavigate}>
76+
<Hyperlink link={links[rels.feed][0]} onNavigate={onNavigate}>
7777
{streamId}
7878
</Hyperlink>
7979
</TableCell>
8080
<TableCell style={nowrap}>{messageId}</TableCell>
8181
<TableCell style={nowrap}>{createdUtc}</TableCell>
8282
<TableCell style={nowrap}>{type}</TableCell>
8383
<TableCell style={{ width: '100%' }}>
84-
<Hyperlink link={links[rels.self]} onNavigate={onNavigate}>
84+
<Hyperlink link={links[rels.self][0]} onNavigate={onNavigate}>
8585
{streamId}
8686
{'@'}
8787
{streamVersion}

src/utils/index.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
import { resolve } from 'uri-js';
22

3+
const toArray = maybeArray =>
4+
!!maybeArray && Array.isArray(maybeArray) ? maybeArray : [maybeArray];
5+
36
export const resolveLinks = (url, links) =>
47
Object.keys(links).reduce(
58
(akk, rel) => ({
69
...akk,
7-
[rel]: {
8-
...links[rel],
10+
[rel]: toArray(links[rel]).map(({ href, ...link }) => ({
11+
...link,
912
rel,
10-
href: resolve(url, links[rel].href),
11-
},
13+
href: resolve(url, href || './', { tolerant: true }),
14+
})),
1215
}),
1316
{},
1417
);

0 commit comments

Comments
 (0)