mirror of
https://github.com/oceanprotocol/commons.git
synced 2023-03-15 18:03:00 +01:00
search results grid & asset tile
This commit is contained in:
parent
9c5682afe3
commit
273025d8ef
36
src/components/molecules/Asset.module.scss
Normal file
36
src/components/molecules/Asset.module.scss
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
@import '../../styles/variables';
|
||||||
|
|
||||||
|
.asset {
|
||||||
|
> a {
|
||||||
|
display: block;
|
||||||
|
padding: $spacer;
|
||||||
|
border: 1px solid $brand-grey-lighter;
|
||||||
|
border-radius: $border-radius;
|
||||||
|
background: $brand-white;
|
||||||
|
color: inherit;
|
||||||
|
|
||||||
|
&:hover,
|
||||||
|
&:focus {
|
||||||
|
color: inherit;
|
||||||
|
border-color: $brand-pink;
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: $font-size-large;
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin-bottom: 0;
|
||||||
|
font-size: $font-size-small;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.assetFooter {
|
||||||
|
border-top: 1px solid $brand-grey-lighter;
|
||||||
|
padding-top: $spacer / 2;
|
||||||
|
margin-top: $spacer / 2;
|
||||||
|
font-size: $font-size-small;
|
||||||
|
}
|
22
src/components/molecules/Asset.tsx
Normal file
22
src/components/molecules/Asset.tsx
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import React from 'react'
|
||||||
|
import { Link } from 'react-router-dom'
|
||||||
|
import styles from './Asset.module.scss'
|
||||||
|
|
||||||
|
const AssetLink = ({ asset }: { asset: any }) => {
|
||||||
|
const { metadata } = asset.findServiceByType('Metadata')
|
||||||
|
|
||||||
|
return (
|
||||||
|
<article className={styles.asset}>
|
||||||
|
<Link to={`/asset/${asset.id}`}>
|
||||||
|
<h1>{metadata.base.name}</h1>
|
||||||
|
<p>{metadata.base.description.substring(0, 140)}</p>
|
||||||
|
|
||||||
|
<footer className={styles.assetFooter}>
|
||||||
|
<div>{metadata.base.category}</div>
|
||||||
|
</footer>
|
||||||
|
</Link>
|
||||||
|
</article>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default AssetLink
|
@ -26,7 +26,6 @@
|
|||||||
"type": {
|
"type": {
|
||||||
"label": "Type",
|
"label": "Type",
|
||||||
"type": "select",
|
"type": "select",
|
||||||
"required": true,
|
|
||||||
"options": ["Data set", "Algorithm", "Container", "Workflow", "Other"]
|
"options": ["Data set", "Algorithm", "Container", "Workflow", "Other"]
|
||||||
},
|
},
|
||||||
"author": {
|
"author": {
|
||||||
@ -58,7 +57,6 @@
|
|||||||
"categories": {
|
"categories": {
|
||||||
"label": "Categories",
|
"label": "Categories",
|
||||||
"type": "select",
|
"type": "select",
|
||||||
"required": true,
|
|
||||||
"options": [
|
"options": [
|
||||||
"Image Recognition",
|
"Image Recognition",
|
||||||
"Dataset Of Datasets",
|
"Dataset Of Datasets",
|
||||||
|
16
src/routes/Search.module.scss
Normal file
16
src/routes/Search.module.scss
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
@import '../styles/variables';
|
||||||
|
|
||||||
|
.results {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
grid-gap: $spacer * 2;
|
||||||
|
max-width: 100%;
|
||||||
|
|
||||||
|
@media (min-width: $break-point--small) {
|
||||||
|
grid-template-columns: 2fr 2fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: $break-point--medium) {
|
||||||
|
grid-template-columns: 2fr 2fr 2fr;
|
||||||
|
}
|
||||||
|
}
|
@ -1,8 +1,9 @@
|
|||||||
import queryString from 'query-string'
|
import queryString from 'query-string'
|
||||||
import React, { Component } from 'react'
|
import React, { Component } from 'react'
|
||||||
import { Link } from 'react-router-dom'
|
|
||||||
import Route from '../components/templates/Route'
|
import Route from '../components/templates/Route'
|
||||||
import { User } from '../context/User'
|
import { User } from '../context/User'
|
||||||
|
import Asset from '../components/molecules/Asset'
|
||||||
|
import styles from './Search.module.scss'
|
||||||
|
|
||||||
interface SearchState {
|
interface SearchState {
|
||||||
results: any[]
|
results: any[]
|
||||||
@ -31,25 +32,21 @@ export default class Search extends Component<SearchProps, SearchState> {
|
|||||||
this.setState({ results: assets })
|
this.setState({ results: assets })
|
||||||
}
|
}
|
||||||
|
|
||||||
private renderAssetBox = (asset: any) => {
|
public renderResults = () =>
|
||||||
const { metadata } = asset.findServiceByType('Metadata')
|
this.state.results.length ? (
|
||||||
return (
|
<div className={styles.results}>
|
||||||
<Link key={asset.id} to={`/asset/${asset.id}`}>
|
{this.state.results.map(asset => (
|
||||||
<div>{asset.id}</div>
|
<Asset key={asset} asset={asset} />
|
||||||
<div>{metadata.base.name}</div>
|
))}
|
||||||
<div>{metadata.base.description}</div>
|
</div>
|
||||||
</Link>
|
) : (
|
||||||
|
<div>No data sets yet</div>
|
||||||
)
|
)
|
||||||
}
|
|
||||||
|
|
||||||
public render() {
|
public render() {
|
||||||
return (
|
return (
|
||||||
<Route title="Search Results" wide>
|
<Route title="Search Results" wide>
|
||||||
{this.state.results.length ? (
|
{this.renderResults()}
|
||||||
this.state.results.map(asset => this.renderAssetBox(asset))
|
|
||||||
) : (
|
|
||||||
<div>No data sets yet</div>
|
|
||||||
)}
|
|
||||||
</Route>
|
</Route>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user