mirror of
https://github.com/oceanprotocol/docs.git
synced 2024-11-26 19:49:26 +01:00
158 lines
3.8 KiB
JavaScript
158 lines
3.8 KiB
JavaScript
import React from 'react'
|
|
import PropTypes from 'prop-types'
|
|
import { StaticQuery, graphql } from 'gatsby'
|
|
import Numbers from './Numbers'
|
|
import Readme from './Readme'
|
|
import styles from './index.module.scss'
|
|
import Title from './Title'
|
|
import Links from './Links'
|
|
|
|
const queryGithub = graphql`
|
|
query GitHubReposInfo {
|
|
github {
|
|
organization(login: "oceanprotocol") {
|
|
repositories(first: 100, privacy: PUBLIC) {
|
|
edges {
|
|
node {
|
|
name
|
|
description
|
|
url
|
|
forkCount
|
|
isFork
|
|
parent {
|
|
nameWithOwner
|
|
}
|
|
stargazers {
|
|
totalCount
|
|
}
|
|
releases(
|
|
first: 2
|
|
orderBy: { field: CREATED_AT, direction: DESC }
|
|
) {
|
|
edges {
|
|
node {
|
|
isDraft
|
|
tag {
|
|
name
|
|
}
|
|
}
|
|
}
|
|
}
|
|
object(expression: "main:README.md") {
|
|
id
|
|
... on GitHub_Blob {
|
|
text
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
allRepositoriesYaml {
|
|
edges {
|
|
node {
|
|
items {
|
|
name
|
|
links {
|
|
name
|
|
url
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
`
|
|
|
|
const Repository = ({ name, links, readme }) => (
|
|
<StaticQuery
|
|
query={queryGithub}
|
|
render={(data) => {
|
|
const repositoriesGitHub = data.github.organization.repositories.edges
|
|
const repositoriesYaml = data.allRepositoriesYaml.edges
|
|
|
|
// just iterate over all repos until we have a name match,
|
|
// then return that repo, and then filter out all empty nodes
|
|
const repoFilteredArray = repositoriesGitHub
|
|
.map(({ node }) => {
|
|
if (node.name === name) return node
|
|
})
|
|
.filter((n) => n)
|
|
|
|
var repo = repoFilteredArray[0]
|
|
|
|
// safeguard against more empty items,
|
|
// e.g. when private repos are referenced in repositories.yml
|
|
if (repo === undefined) return null
|
|
const releasesFilteredArray = repo.releases.edges
|
|
.filter(({ node }) => {
|
|
return !node.isDraft
|
|
})
|
|
.splice(0, 1)
|
|
repo = {
|
|
...repo,
|
|
releases: { edges: releasesFilteredArray }
|
|
}
|
|
const {
|
|
url,
|
|
description,
|
|
forkCount,
|
|
isFork,
|
|
parent,
|
|
stargazers,
|
|
releases,
|
|
object
|
|
} = repo
|
|
|
|
// enhance passed links array with what's in repositories.yml,
|
|
// iterating over all repos until we have a name match
|
|
const linksFilteredArray = []
|
|
|
|
repositoriesYaml.map(({ node }) => {
|
|
node.items.forEach((item) => {
|
|
if (item.name === name) {
|
|
linksFilteredArray.push(item.links)
|
|
}
|
|
})
|
|
})
|
|
|
|
const moreLinks = links || linksFilteredArray.filter((n) => n)[0]
|
|
return (
|
|
<article className={styles.repository}>
|
|
<Title
|
|
name={name}
|
|
releases={releases}
|
|
url={url}
|
|
isFork={isFork}
|
|
parent={parent}
|
|
/>
|
|
|
|
<p>{!description ? '...' : description}</p>
|
|
|
|
<footer className={styles.repositoryMeta}>
|
|
<Links links={moreLinks} url={url} />
|
|
<Numbers
|
|
stargazers={stargazers}
|
|
forkCount={forkCount}
|
|
url={url}
|
|
name={name}
|
|
/>
|
|
</footer>
|
|
|
|
{readme && <Readme object={object} />}
|
|
</article>
|
|
)
|
|
}}
|
|
/>
|
|
)
|
|
|
|
Repository.propTypes = {
|
|
name: PropTypes.string.isRequired,
|
|
links: PropTypes.array,
|
|
readme: PropTypes.oneOfType([PropTypes.bool, PropTypes.string])
|
|
}
|
|
|
|
export default Repository
|