diff --git a/client/package.json b/client/package.json index 2f830f0..a3b11c0 100644 --- a/client/package.json +++ b/client/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "@oceanprotocol/art": "^2.2.0", - "@oceanprotocol/squid": "^0.5.0", + "@oceanprotocol/squid": "^0.5.1", "@oceanprotocol/typographies": "^0.1.0", "classnames": "^2.2.6", "filesize": "^4.1.2", diff --git a/client/src/App.tsx b/client/src/App.tsx index fc318f2..a6c0be0 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -40,6 +40,7 @@ interface AppState { web3: Web3 ocean: {} startLogin: () => void + message: string } class App extends Component<{}, AppState> { @@ -94,7 +95,8 @@ class App extends Component<{}, AppState> { account: '', ocean: {}, startLogin: this.startLogin, - requestFromFaucet: this.requestFromFaucet + requestFromFaucet: this.requestFromFaucet, + message: 'Connecting to Ocean...' } public async componentDidMount() { @@ -185,7 +187,7 @@ class App extends Component<{}, AppState> {
{this.state.isLoading ? (
- +
) : ( diff --git a/client/src/components/atoms/Button.module.scss b/client/src/components/atoms/Button.module.scss index 1726a92..1fb2f81 100644 --- a/client/src/components/atoms/Button.module.scss +++ b/client/src/components/atoms/Button.module.scss @@ -66,6 +66,7 @@ padding: 0; color: $brand-pink; font-size: $font-size-base; + font-weight: $font-weight-base; font-family: inherit; box-shadow: none; cursor: pointer; diff --git a/client/src/components/atoms/Button.tsx b/client/src/components/atoms/Button.tsx index 473db50..4beb571 100644 --- a/client/src/components/atoms/Button.tsx +++ b/client/src/components/atoms/Button.tsx @@ -1,4 +1,5 @@ import React, { PureComponent } from 'react' +import { Link } from 'react-router-dom' import cx from 'classnames' import styles from './Button.module.scss' @@ -10,6 +11,7 @@ interface ButtonProps { href?: string onClick?: any disabled?: boolean + to?: string } export default class Button extends PureComponent { @@ -21,6 +23,7 @@ export default class Button extends PureComponent { href, children, className, + to, ...props } = this.props @@ -32,11 +35,23 @@ export default class Button extends PureComponent { classes = styles.button } - return href ? ( - - {children} - - ) : ( + if (to) { + return ( + + {children} + + ) + } + + if (href) { + return ( + + {children} + + ) + } + + return ( diff --git a/client/src/components/molecules/Asset.tsx b/client/src/components/molecules/Asset.tsx index db1d048..8bd1296 100644 --- a/client/src/components/molecules/Asset.tsx +++ b/client/src/components/molecules/Asset.tsx @@ -12,8 +12,11 @@ const AssetLink = ({ asset, list }: { asset: any; list?: boolean }) => {

{base.name}

-
- {moment(base.dateCreated, 'YYYYMMDD').fromNow()} +
+ {moment(base.datePublished, 'YYYYMMDD').fromNow()}
diff --git a/client/src/components/organisms/AssetsUser.tsx b/client/src/components/organisms/AssetsUser.tsx index d7833d5..4089868 100644 --- a/client/src/components/organisms/AssetsUser.tsx +++ b/client/src/components/organisms/AssetsUser.tsx @@ -52,7 +52,7 @@ export default class AssetsUser extends PureComponent<
{this.props.recent && (

- Your Latest Data Sets + Your Latest Published Data Sets

)} diff --git a/client/src/components/organisms/Header.tsx b/client/src/components/organisms/Header.tsx index 36d133e..553c136 100644 --- a/client/src/components/organisms/Header.tsx +++ b/client/src/components/organisms/Header.tsx @@ -1,12 +1,28 @@ import React from 'react' import { NavLink } from 'react-router-dom' import { ReactComponent as Logo } from '@oceanprotocol/art/logo/logo.svg' +import { User } from '../../context/User' import AccountStatus from '../molecules/AccountStatus' import styles from './Header.module.scss' import menu from '../../data/menu.json' import meta from '../../data/meta.json' +const MenuItem = ({ item, isWeb3 }: { item: any; isWeb3: boolean }) => { + if (item.web3 && !isWeb3) return null + + return ( + + {item.title} + + ) +} + const Header = () => (
@@ -16,17 +32,17 @@ const Header = () => (
diff --git a/client/src/data/menu.json b/client/src/data/menu.json index 9f1f822..7f48dd7 100644 --- a/client/src/data/menu.json +++ b/client/src/data/menu.json @@ -1,22 +1,21 @@ [ { "title": "Publish", - "link": "/publish" + "link": "/publish", + "web3": true }, { "title": "History", - "link": "/history" + "link": "/history", + "web3": true }, { "title": "Faucet", - "link": "/faucet" + "link": "/faucet", + "web3": true }, { "title": "About", "link": "/about" - }, - { - "title": "Styleguide", - "link": "/styleguide" } ] diff --git a/client/src/routes/Details/AssetDetails.tsx b/client/src/routes/Details/AssetDetails.tsx index 5fbeffe..09add94 100644 --- a/client/src/routes/Details/AssetDetails.tsx +++ b/client/src/routes/Details/AssetDetails.tsx @@ -10,6 +10,13 @@ interface AssetDetailsProps { } export default class AssetDetails extends PureComponent { + private datafilesLine = (files: any) => { + if (files.length === 1) { + return {files.length} data file + } + return {files.length} data files + } + public render() { const { metadata, ddo } = this.props const { base } = metadata @@ -32,18 +39,14 @@ export default class AssetDetails extends PureComponent { /> - {base.categories ? ( + {base.categories && ( // TODO: Make this link to search for respective category {base.categories[0]} - ) : ( - Fake Category )} - {base.files && ( - {base.files.length} data files - )} + {base.files && this.datafilesLine(base.files)}
@@ -77,9 +80,9 @@ export default class AssetDetails extends PureComponent { ddo={ddo} /> -
+                {/* 
                     {JSON.stringify(metadata, null, 2)}
-                
+
*/} ) } diff --git a/client/src/routes/Details/AssetFile.module.scss b/client/src/routes/Details/AssetFile.module.scss new file mode 100644 index 0000000..6035417 --- /dev/null +++ b/client/src/routes/Details/AssetFile.module.scss @@ -0,0 +1,60 @@ +@import '../../styles/variables'; + +.buttonMain { + margin: auto; + margin-bottom: $spacer / 2; + display: block; +} + +.error { + text-align: center; + color: $red; + font-size: $font-size-small; +} + +.fileWrap { + margin-left: $spacer / 4; + margin-right: $spacer / 4; + margin-bottom: $spacer * $line-height; + flex: 1 1 100%; + + @media (min-width: $break-point--small) { + flex-basis: calc(100% / 3 - #{$spacer} / 2); + } +} + +.file { + display: inline-block; + background: $brand-grey; + padding: $spacer $spacer / 2; + margin-bottom: $spacer / 2; + text-align: left; + position: relative; + min-height: 100px; + + &:before { + content: ''; + position: absolute; + right: 0; + top: 0; + width: 0; + height: 0; + border-top: 1rem solid $body-background; + border-left: 1rem solid transparent; + } + + li { + font-size: $font-size-small; + font-weight: $font-weight-bold; + color: $brand-white; + + &:before { + display: none; + } + } + + // move spinner a bit up + + div { + margin-top: $spacer / 2; + } +} diff --git a/client/src/routes/Details/AssetFile.tsx b/client/src/routes/Details/AssetFile.tsx new file mode 100644 index 0000000..8652cfa --- /dev/null +++ b/client/src/routes/Details/AssetFile.tsx @@ -0,0 +1,99 @@ +import React, { PureComponent } from 'react' +import { Logger } from '@oceanprotocol/squid' +import filesize from 'filesize' +import { User } from '../../context/User' +import Button from '../../components/atoms/Button' +import Spinner from '../../components/atoms/Spinner' +import styles from './AssetFile.module.scss' + +interface AssetFileProps { + file: any + ddo: any +} + +interface AssetFileState { + isLoading: boolean + error: string + message: string +} + +export default class AssetFile extends PureComponent< + AssetFileProps, + AssetFileState +> { + public state = { + isLoading: false, + error: '', + message: 'Decrypting file, please sign...' + } + + private resetState = () => this.setState({ isLoading: true, error: '' }) + + private purchaseAsset = async (ddo: any, index: number) => { + this.resetState() + + const { ocean } = this.context + const accounts = await ocean.accounts.list() + + try { + const service = ddo.findServiceByType('Access') + const agreementId = await ocean.assets.order( + ddo.id, + service.serviceDefinitionId, + accounts[0] + ) + + const path = await ocean.assets.consume( + agreementId, + ddo.id, + service.serviceDefinitionId, + accounts[0], + '', + index + ) + Logger.log('path', path) + + this.setState({ isLoading: false }) + } catch (error) { + Logger.log('error', error) + this.setState({ isLoading: false, error: error.message }) + } + } + + public render() { + const { ddo, file } = this.props + + return ( +
+
    +
  • + {file.contentType && file.contentType.split('/')[1]} +
  • +
  • + {file.contentLength && filesize(file.contentLength)} +
  • + {/*
  • {file.encoding}
  • */} + {/*
  • {file.compression}
  • */} +
+ + {this.state.isLoading ? ( + + ) : ( + + )} + + {this.state.error !== '' && ( +
{this.state.error}
+ )} +
+ ) + } +} + +AssetFile.contextType = User diff --git a/client/src/routes/Details/AssetFilesDetails.module.scss b/client/src/routes/Details/AssetFilesDetails.module.scss index 9eb32b5..c52cfe6 100644 --- a/client/src/routes/Details/AssetFilesDetails.module.scss +++ b/client/src/routes/Details/AssetFilesDetails.module.scss @@ -1,36 +1,8 @@ @import '../../styles/variables'; -.buttonMain { - margin: auto; - margin-bottom: $spacer / 2; - display: block; -} - -.error { - text-align: center; - color: $red; - font-size: $font-size-small; -} - .files { text-align: center; -} - -.file { - display: inline-block; - border: .1rem solid $brand-grey-light; - padding: $spacer $spacer / 2; - text-align: left; - margin-left: $spacer / 4; - margin-right: $spacer / 4; - - li { - font-size: $font-size-small; - font-weight: $font-weight-bold; - color: $brand-grey-light; - - &:before { - display: none; - } - } + display: flex; + flex-wrap: wrap; + justify-content: center; } diff --git a/client/src/routes/Details/AssetFilesDetails.tsx b/client/src/routes/Details/AssetFilesDetails.tsx index a2fe3c2..1c7cfe0 100644 --- a/client/src/routes/Details/AssetFilesDetails.tsx +++ b/client/src/routes/Details/AssetFilesDetails.tsx @@ -1,51 +1,11 @@ import React, { PureComponent } from 'react' -import { Logger } from '@oceanprotocol/squid' -import filesize from 'filesize' -import { User } from '../../context/User' -import Button from '../../components/atoms/Button' -import Spinner from '../../components/atoms/Spinner' +import AssetFile from './AssetFile' import styles from './AssetFilesDetails.module.scss' -interface AssetFilesDetailsProps { +export default class AssetFilesDetails extends PureComponent<{ files: any[] ddo: any -} - -export default class AssetFilesDetails extends PureComponent< - AssetFilesDetailsProps -> { - public state = { isLoading: false, error: null } - - private purchaseAsset = async (ddo: any) => { - this.setState({ isLoading: true, error: null }) - - const { ocean } = this.context - const accounts = await ocean.accounts.list() - - try { - const service = ddo.findServiceByType('Access') - const agreementId = await ocean.assets.order( - ddo.id, - service.serviceDefinitionId, - accounts[0] - ) - - const path = await ocean.assets.consume( - agreementId, - ddo.id, - service.serviceDefinitionId, - accounts[0], - '' - ) - Logger.log('path', path) - - this.setState({ isLoading: false }) - } catch (error) { - Logger.log('error', error) - this.setState({ isLoading: false, error: error.message }) - } - } - +}> { public render() { const { files, ddo } = this.props @@ -53,41 +13,12 @@ export default class AssetFilesDetails extends PureComponent< <>
{files.map(file => ( -
    -
  • - {file.contentType && - file.contentType.split('/')[1]} -
  • -
  • - {file.contentLength && - filesize(file.contentLength)} -
  • - {/*
  • {file.encoding}
  • */} - {/*
  • {file.compression}
  • */} -
+ ))}
- - {this.state.isLoading ? ( - - ) : ( - - )} - - {this.state.error && ( -
{this.state.error}
- )} ) : (
No files attached.
) } } - -AssetFilesDetails.contextType = User diff --git a/client/src/routes/Publish/StepRegisterContent.module.scss b/client/src/routes/Publish/StepRegisterContent.module.scss index 60a5936..ce10169 100644 --- a/client/src/routes/Publish/StepRegisterContent.module.scss +++ b/client/src/routes/Publish/StepRegisterContent.module.scss @@ -3,3 +3,35 @@ .message { margin-bottom: $spacer; } + +.success { + composes: message; + background: $green; + padding: $spacer / 1.5; + border-radius: $border-radius; + color: $brand-white; + font-weight: $font-weight-bold; + text-align: center; + + &, + a, + button { + color: $brand-white; + } + + a, + button { + transition: color .2s ease-out; + + &:hover, + &:focus { + color: $brand-pink; + transform: none; + } + } + + a { + display: inline-block; + margin-right: $spacer; + } +} diff --git a/client/src/routes/Publish/StepRegisterContent.tsx b/client/src/routes/Publish/StepRegisterContent.tsx index 566f36a..982141f 100644 --- a/client/src/routes/Publish/StepRegisterContent.tsx +++ b/client/src/routes/Publish/StepRegisterContent.tsx @@ -1,6 +1,7 @@ import React, { PureComponent } from 'react' import Web3message from '../../components/organisms/Web3message' import Spinner from '../../components/atoms/Spinner' +import Button from '../../components/atoms/Button' import styles from './StepRegisterContent.module.scss' interface StepRegisterContentProps { @@ -26,11 +27,14 @@ export default class StepRegisterContent extends PureComponent< ) public publishedState = () => ( -
- Your asset is published! See it{' '} - here, submit - another asset by clicking{' '} - this.props.toStart()}>here +
+

Your asset is published!

+ +
) @@ -38,7 +42,6 @@ export default class StepRegisterContent extends PureComponent< return ( <> - {this.props.state.isPublishing ? ( this.publishingState() ) : this.props.state.publishingError ? ( diff --git a/client/src/styles/_variables.scss b/client/src/styles/_variables.scss index bd89d12..c645247 100644 --- a/client/src/styles/_variables.scss +++ b/client/src/styles/_variables.scss @@ -18,6 +18,8 @@ $yellow: #eac146; $brand-gradient: linear-gradient(to right bottom, $brand-purple, $brand-pink); +$body-background: darken($brand-white, 1%); + // Fonts $font-family-base: 'Sharp Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif; diff --git a/client/src/styles/global.scss b/client/src/styles/global.scss index 006cac5..f48f88d 100644 --- a/client/src/styles/global.scss +++ b/client/src/styles/global.scss @@ -29,7 +29,7 @@ body { font-family: $font-family-base; font-weight: $font-weight-base; line-height: $line-height; - background: darken($brand-white, 1%); + background: $body-background; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;