diff --git a/assets/components/home/home.vue b/assets/components/home/home.vue index a0e16ab4..43d9feec 100644 --- a/assets/components/home/home.vue +++ b/assets/components/home/home.vue @@ -1,59 +1,76 @@ diff --git a/assets/components/pagination/pagination.vue b/assets/components/pagination/pagination.vue new file mode 100644 index 00000000..0069e4b0 --- /dev/null +++ b/assets/components/pagination/pagination.vue @@ -0,0 +1,112 @@ + + + + + diff --git a/assets/components/releases/release.vue b/assets/components/releases/release.vue index 5785000f..010f0903 100644 --- a/assets/components/releases/release.vue +++ b/assets/components/releases/release.vue @@ -3,6 +3,8 @@ v-if="release" class="content" > + +
- -

{{ release.title }}

diff --git a/assets/components/tags/tag.vue b/assets/components/tags/tag.vue index a940127e..a364151c 100644 --- a/assets/components/tags/tag.vue +++ b/assets/components/tags/tag.vue @@ -172,6 +172,7 @@ export default { color: var(--text-light); display: flex; flex-direction: column; + flex-shrink: 0; width: 25rem; box-sizing: border-box; overflow: hidden; diff --git a/assets/js/actors/actions.js b/assets/js/actors/actions.js index 9992d71b..4c1bf88b 100644 --- a/assets/js/actors/actions.js +++ b/assets/js/actors/actions.js @@ -136,7 +136,7 @@ function initActorActions(store, _router) { lessThan: $before, greaterThan: $after, }, - releasesTags: { + releasesTagsConnection: { none: { tag: { slug: { diff --git a/assets/js/fragments.js b/assets/js/fragments.js index a8bb6e78..ce98de95 100644 --- a/assets/js/fragments.js +++ b/assets/js/fragments.js @@ -176,13 +176,13 @@ const releaseFields = ` `; const releasesFragment = ` - releases( + connection: releasesConnection( filter: { date: { lessThan: $before, greaterThan: $after, } - releasesTags: { + releasesTagsConnection: { none: { tag: { slug: { @@ -193,21 +193,25 @@ const releasesFragment = ` } }, first: $limit, + offset: $offset, orderBy: $orderBy, ) { - ${releaseFields} - movieActors: movieActorsByMovieId(orderBy: ACTOR_BY_ACTOR_ID__GENDER_ASC) { - actor { - ${actorFields} - } - } - movieTags: movieTagsByMovieId(orderBy: TAG_BY_TAG_ID__PRIORITY_DESC) { - tag { - id - name - slug - } - } + releases: nodes { + ${releaseFields} + movieActors: movieActorsByMovieId(orderBy: ACTOR_BY_ACTOR_ID__GENDER_ASC) { + actor { + ${actorFields} + } + } + movieTags: movieTagsByMovieId(orderBy: TAG_BY_TAG_ID__PRIORITY_DESC) { + tag { + id + name + slug + } + } + } + totalCount } `; diff --git a/assets/js/networks/actions.js b/assets/js/networks/actions.js index 758c9f92..69c40f37 100644 --- a/assets/js/networks/actions.js +++ b/assets/js/networks/actions.js @@ -92,7 +92,7 @@ function initNetworksActions(store, _router) { } } ] - releasesTags: { + releasesTagsConnection: { none: { tag: { slug: { diff --git a/assets/js/releases/actions.js b/assets/js/releases/actions.js index 9ea26acd..83a78ca3 100644 --- a/assets/js/releases/actions.js +++ b/assets/js/releases/actions.js @@ -4,12 +4,13 @@ import { curateRelease } from '../curate'; import getDateRange from '../get-date-range'; function initReleasesActions(store, _router) { - async function fetchReleases({ _commit }, { limit = 100, range = 'latest' }) { + async function fetchReleases({ _commit }, { limit = 10, pageNumber = 1, range = 'latest' }) { const { before, after, orderBy } = getDateRange(range); - const { releases } = await graphql(` + const { connection: { releases, totalCount } } = await graphql(` query Releases( $limit:Int = 1000, + $offset:Int = 0, $after:Date = "1900-01-01", $before:Date = "2100-01-01", $orderBy:[ReleasesOrderBy!], @@ -19,13 +20,17 @@ function initReleasesActions(store, _router) { } `, { limit, + offset: Math.max(0, (pageNumber - 1)) * limit, after, before, orderBy, exclude: store.state.ui.filter, }); - return releases.map(release => curateRelease(release)); + return { + releases: releases.map(release => curateRelease(release)), + totalCount, + }; } async function fetchReleaseById({ _commit }, releaseId) { diff --git a/assets/js/router.js b/assets/js/router.js index aebece79..f1b2bb59 100644 --- a/assets/js/router.js +++ b/assets/js/router.js @@ -20,26 +20,32 @@ const routes = [ path: '/', redirect: { name: 'latest', + params: { + page: 1, + }, }, }, { path: '/home', redirect: { name: 'latest', + params: { + page: 1, + }, }, }, { - path: '/latest', + path: '/latest/:pageNumber', component: Home, name: 'latest', }, { - path: '/upcoming', + path: '/upcoming/:pageNumber', component: Home, name: 'upcoming', }, { - path: '/new', + path: '/new/:pageNumber', component: Home, name: 'new', }, diff --git a/assets/js/tags/actions.js b/assets/js/tags/actions.js index 8a435907..e79ebc15 100644 --- a/assets/js/tags/actions.js +++ b/assets/js/tags/actions.js @@ -64,7 +64,7 @@ function initTagsActions(store, _router) { lessThan: $before, greaterThan: $after, }, - releasesTags: { + releasesTagsConnection: { none: { tag: { slug: { diff --git a/migrations/20190325001339_releases.js b/migrations/20190325001339_releases.js index 38836a36..8c36cd49 100644 --- a/migrations/20190325001339_releases.js +++ b/migrations/20190325001339_releases.js @@ -644,7 +644,10 @@ exports.up = knex => Promise.resolve() table.string('url', 1000); table.string('title'); table.string('slug'); + table.date('date'); + table.index('date'); + table.text('description'); table.integer('duration') diff --git a/src/scrapers/julesjordan.js b/src/scrapers/julesjordan.js index 3008dbdc..a9e465f5 100644 --- a/src/scrapers/julesjordan.js +++ b/src/scrapers/julesjordan.js @@ -7,7 +7,6 @@ const cheerio = require('cheerio'); const { JSDOM } = require('jsdom'); const moment = require('moment'); -const logger = require('../logger')(__filename); const { get, geta, ctxa, parseDate } = require('../utils/q'); const { heightToCm } = require('../utils/convert'); const slugify = require('../utils/slugify'); diff --git a/src/web/server.js b/src/web/server.js index d672abb3..5bcd6362 100644 --- a/src/web/server.js +++ b/src/web/server.js @@ -41,7 +41,8 @@ function initServer() { graphiql: true, enhanceGraphiql: true, allowExplain: () => true, - simpleCollections: 'only', + // simpleCollections: 'only', + simpleCollections: 'both', graphileBuildOptions: { pgOmitListSuffix: true, connectionFilterRelations: true,