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: entityBySlugAndType(slug: $siteSlug, type: 2) { name slug url tags: entitiesTags { tag { id slug name } } network: parent { 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: { entity: { 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: entity { name slug url } } `, { limit, after: store.getters.after, before: store.getters.before, }); return sites; } return { fetchSiteBySlug, fetchSites, }; } export default initSitesActions;