Moved networks to GraphQL.

This commit is contained in:
2020-01-03 00:59:02 +01:00
parent e77dbca954
commit 70e27a6cd9
14 changed files with 169 additions and 76 deletions

View File

@@ -254,8 +254,6 @@ function scrollPhotos(event) {
async function mounted() {
this.actor = await this.$store.dispatch('fetchActors', { actorSlug: this.$route.params.actorSlug });
console.log(this.actor.releases[0]);
if (this.actor) {
this.pageTitle = this.actor.name;
}

View File

@@ -3,7 +3,7 @@
v-if="network"
class="content network"
>
<FilterBar :fetch-releases="fetchReleases" />
<FilterBar :fetch-releases="fetchNetwork" />
<div class="content-inner">
<div class="header">
@@ -54,20 +54,18 @@ import FilterBar from '../header/filter-bar.vue';
import Releases from '../releases/releases.vue';
import SiteTile from '../tile/site.vue';
async function fetchReleases() {
this.releases = await this.$store.dispatch('fetchNetworkReleases', this.$route.params.networkSlug);
}
async function mounted() {
[[this.network]] = await Promise.all([
this.$store.dispatch('fetchNetworks', this.$route.params.networkSlug),
this.fetchReleases(),
]);
async function fetchNetwork() {
this.network = await this.$store.dispatch('fetchNetworks', this.$route.params.networkSlug);
this.sites = this.network.sites
.filter(site => !site.independent)
.sort(({ name: nameA }, { name: nameB }) => nameA.localeCompare(nameB));
this.releases = this.network.sites.map(site => site.releases).flat();
}
async function mounted() {
await this.fetchNetwork();
this.pageTitle = this.network.name;
}
@@ -81,13 +79,13 @@ export default {
return {
network: null,
sites: null,
releases: null,
releases: [],
pageTitle: null,
};
},
mounted,
methods: {
fetchReleases,
fetchNetwork,
},
};
</script>

View File

@@ -249,9 +249,8 @@ export default {
}
.tags {
max-height: 2.5rem;
max-height: .5rem;
padding: .25rem .5rem 1rem .5rem;
line-height: 1.5rem;
word-wrap: break-word;
overflow-y: hidden;
}

View File

@@ -12,8 +12,6 @@ function curateActor(actor) {
}
function curateRelease(release) {
console.log(release);
const curatedRelease = {
...release,
actors: release.actors ? release.actors.map(({ actor }) => curateActor(actor)) : [],
@@ -28,6 +26,35 @@ function curateRelease(release) {
return curatedRelease;
}
function curateSite(site, network) {
const curatedSite = {
id: site.id,
name: site.name,
slug: site.slug,
url: site.url,
};
if (site.releases) curatedSite.releases = site.releases.map(release => curateRelease(release));
if (site.network || network) curatedSite.network = site.network || network;
return curatedSite;
}
function curateNetwork(network) {
const curatedNetwork = {
id: network.id,
name: network.name,
slug: network.slug,
url: network.url,
};
if (network.sites) {
curatedNetwork.sites = network.sites.map(site => curateSite(site, curatedNetwork));
}
return curatedNetwork;
}
function curateTag(tag) {
const curatedTag = {
...tag,
@@ -43,5 +70,7 @@ function curateTag(tag) {
export {
curateActor,
curateRelease,
curateSite,
curateNetwork,
curateTag,
};

View File

@@ -13,6 +13,21 @@ const siteFragment = `
}
`;
const sitesFragment = `
sites {
id
name
slug
url
network {
id
name
slug
url
}
}
`;
const releaseActorsFragment = `
actors: releasesActorsSortables(orderBy: GENDER_ASC) {
actor {
@@ -36,7 +51,7 @@ const releaseActorsFragment = `
`;
const releaseTagsFragment = `
tags: releasesTags {
tags: releasesTagsSortables(orderBy: PRIORITY_DESC) {
tag {
name
priority
@@ -135,4 +150,5 @@ export {
releasesFragment,
releaseFragment,
siteFragment,
sitesFragment,
};

View File

@@ -1,27 +1,68 @@
import { get } from '../api';
import { graphql } from '../api';
import { sitesFragment, releasesFragment } from '../fragments';
import { curateNetwork } from '../curate';
function initNetworksActions(store, _router) {
async function fetchNetworks({ _commit }, networkId) {
const networks = await get(`/networks/${networkId || ''}`, {
});
return networks;
}
async function fetchNetworkReleases({ _commit }, networkId) {
const releases = await get(`/networks/${networkId}/releases`, {
filter: store.state.ui.filter,
async function fetchNetworkBySlug(networkSlug, limit = 100) {
const { network } = await graphql(`
query Network(
$networkSlug: String!
$limit:Int = 1000,
$after:Date = "1900-01-01",
$before:Date = "2100-01-01",
) {
network: networkBySlug(slug: $networkSlug) {
id
name
slug
url
sites {
id
name
slug
url
${releasesFragment}
network {
id
name
slug
url
}
}
}
}
`, {
networkSlug,
limit,
after: store.getters.after,
before: store.getters.before,
});
return releases;
return curateNetwork(network);
}
async function fetchNetworks({ _commit }, networkSlug) {
if (networkSlug) {
return fetchNetworkBySlug(networkSlug);
}
const { networks } = await graphql(`
query Networks {
networks {
id
name
slug
url
${sitesFragment}
}
}
`);
return networks.map(network => curateNetwork(network));
}
return {
fetchNetworks,
fetchNetworkReleases,
};
}