115 lines
3.0 KiB
JavaScript
115 lines
3.0 KiB
JavaScript
import { graphql, get } from '../api';
|
|
import {
|
|
releasePosterFragment,
|
|
releaseActorsFragment,
|
|
releaseTagsFragment,
|
|
siteFragment,
|
|
} from '../fragments';
|
|
import { curateTag } from '../curate';
|
|
|
|
function initTagsActions(store, _router) {
|
|
async function fetchTagBySlug(tagSlug) {
|
|
const { tagBySlug } = await graphql(`
|
|
query Tag($tagSlug:String!) {
|
|
tagBySlug(slug:$tagSlug) {
|
|
id
|
|
name
|
|
slug
|
|
description
|
|
group {
|
|
name
|
|
slug
|
|
}
|
|
poster: tagsPosterByTagId {
|
|
media {
|
|
id
|
|
thumbnail
|
|
path
|
|
comment
|
|
}
|
|
}
|
|
photos: tagsPhotos {
|
|
media {
|
|
id
|
|
thumbnail
|
|
path
|
|
comment
|
|
}
|
|
}
|
|
releases: releasesTags {
|
|
release {
|
|
id
|
|
title
|
|
date
|
|
createdAt
|
|
url
|
|
${releaseActorsFragment}
|
|
${releaseTagsFragment}
|
|
${releasePosterFragment}
|
|
${siteFragment}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
`, {
|
|
tagSlug,
|
|
});
|
|
|
|
return curateTag(tagBySlug);
|
|
}
|
|
|
|
async function fetchTags({ _commit }, {
|
|
tagSlug,
|
|
limit = 100,
|
|
slugs = [],
|
|
_group,
|
|
_priority,
|
|
}) {
|
|
if (tagSlug) {
|
|
return fetchTagBySlug(tagSlug);
|
|
}
|
|
|
|
const { tags } = await graphql(`
|
|
query Tags($slugs: [String!] = [], $limit: Int = 100) {
|
|
tags(filter: {slug: {in: $slugs}}, first: $limit) {
|
|
id
|
|
name
|
|
slug
|
|
poster: tagsPosterByTagId {
|
|
media {
|
|
thumbnail
|
|
}
|
|
}
|
|
group {
|
|
name
|
|
slug
|
|
}
|
|
}
|
|
}
|
|
`, {
|
|
slugs,
|
|
limit,
|
|
});
|
|
|
|
return tags.map(tag => curateTag(tag));
|
|
}
|
|
|
|
async function fetchTagReleases({ _commit }, tagId) {
|
|
const releases = await get(`/tags/${tagId}/releases`, {
|
|
filter: store.state.ui.filter,
|
|
after: store.getters.after,
|
|
before: store.getters.before,
|
|
});
|
|
|
|
return releases;
|
|
}
|
|
|
|
return {
|
|
fetchTags,
|
|
fetchTagReleases,
|
|
fetchTagBySlug,
|
|
};
|
|
}
|
|
|
|
export default initTagsActions;
|