traxxx/assets/js/sites/actions.js

176 lines
3.9 KiB
JavaScript

import { graphql } from '../api';
import { releaseFields } from '../fragments';
import { curateSite, curateRelease } from '../curate';
import getDateRange from '../get-date-range';
function initSitesActions(store, _router) {
async function fetchSiteBySlug({ _commit }, {
siteSlug,
limit = 10,
pageNumber = 1,
range = 'latest',
}) {
const { before, after, orderBy } = getDateRange(range);
const { site, connection: { releases, totalCount } } = await graphql(`
query Site(
$siteSlug: String!,
$limit:Int = 100,
$offset:Int = 0,
$after:Date = "1900-01-01",
$before:Date = "2100-01-01",
$orderBy:[ReleasesOrderBy!]
$exclude: [String!]
) {
site: siteBySlug(slug: $siteSlug) {
name
slug
url
tags: sitesTags {
tag {
id
slug
name
}
}
network {
id
name
slug
url
}
releasesConnection(
filter: {
date: {
lessThan: $before,
greaterThan: $after,
},
releasesTagsConnection: {
none: {
tag: {
slug: {
in: $exclude
}
}
}
}
}
first: $limit
offset: $offset
orderBy: $orderBy
) {
releases: nodes {
${releaseFields}
}
totalCount
}
}
connection: releasesConnection(
first: $limit
offset: $offset
orderBy: $orderBy
filter: {
site: {
slug: {
equalTo: $siteSlug
}
}
date: {
lessThan: $before,
greaterThan: $after
}
releasesTagsConnection: {
none: {
tag: {
slug: {
in: $exclude
}
}
}
}
}
) {
releases: nodes {
${releaseFields}
}
totalCount
}
}
`, {
siteSlug,
limit,
offset: Math.max(0, (pageNumber - 1)) * limit,
after,
before,
orderBy,
isNew: store.getters.isNew,
exclude: store.state.ui.filter,
});
return {
site: curateSite(site),
releases: releases.map(release => curateRelease(release)),
totalCount,
};
}
async function fetchSites({ _commit }, { limit = 100 }) {
const { sites } = await graphql(`
query Sites(
$actorSlug: String!
$limit:Int = 100,
$after:Date = "1900-01-01",
$before:Date = "2100-01-01",
) {
site {
name
slug
url
}
}
`, {
limit,
after: store.getters.after,
before: store.getters.before,
});
return sites;
}
async function searchSites({ _commit }, { query, limit = 20 }) {
const { sites } = await graphql(`
query SearchSites(
$query: String!
$limit:Int = 20,
) {
sites: searchSites(
search: $query,
first: $limit
) {
name
slug
url
network {
name
slug
url
}
}
}
`, {
query,
limit,
});
return sites;
}
return {
fetchSiteBySlug,
fetchSites,
searchSites,
};
}
export default initSitesActions;