diff --git a/components/filters/filters.vue b/components/filters/filters.vue index 054424e..de05bb0 100644 --- a/components/filters/filters.vue +++ b/components/filters/filters.vue @@ -385,15 +385,15 @@ function toggleFilters(state) { } .filters-toggle { - min-width: 2rem; - height: 2.5rem; + min-width: 2.75rem; + height: 3rem; display: none; justify-content: center; align-items: center; padding: 0 .25rem; position: absolute; top: .35rem; - right: -2.5rem; + right: -3.25rem; border-radius: 0 .5rem .5rem 0; background: var(--background); color: var(--glass); diff --git a/components/header/header.vue b/components/header/header.vue index 1664623..c9008bb 100644 --- a/components/header/header.vue +++ b/components/header/header.vue @@ -21,6 +21,14 @@ --> + +
  • +
    + +
    + + + + + diff --git a/pages/scenes/+onBeforeRender.js b/pages/scenes/+onBeforeRender.js new file mode 100644 index 0000000..19dbb94 --- /dev/null +++ b/pages/scenes/+onBeforeRender.js @@ -0,0 +1,47 @@ +import { fetchScenes } from '#/src/scenes.js'; +import { curateScenesQuery } from '#/src/web/scenes.js'; +import { getRandomCampaigns, getCampaignIndex } from '#/src/campaigns.js'; + +export async function onBeforeRender(pageContext) { + const [ + sceneResults, + campaigns, + ] = await Promise.all([ + fetchScenes(await curateScenesQuery({ + ...pageContext.urlQuery, + scope: pageContext.routeParams.scope || 'latest', + isShowcased: null, + tagFilter: pageContext.tagFilter, + }), { + page: Number(pageContext.routeParams.page) || 1, + limit: Number(pageContext.urlParsed.search.limit) || 29, + aggregate: true, + dedupe: true, + }, pageContext.user), + getRandomCampaigns([ + { minRatio: 0.75, maxRatio: 1.25 }, + { minRatio: 1.5 }, + ], { tagFilter: pageContext.tagFilter }), + ]); + + const { + scenes, + } = sceneResults; + + const campaignIndex = getCampaignIndex(scenes.length); + const [sceneCampaign, paginationCampaign] = campaigns; + + return { + pageContext: { + title: pageContext.routeParams.scope, + pageProps: { + ...sceneResults, + }, + campaigns: { + index: campaignIndex, + scenes: scenes.length > 5 && sceneCampaign, + pagination: paginationCampaign, + }, + }, + }; +} diff --git a/pages/scenes/+route.js b/pages/scenes/+route.js new file mode 100644 index 0000000..44b3656 --- /dev/null +++ b/pages/scenes/+route.js @@ -0,0 +1,21 @@ +import { match } from 'path-to-regexp'; +// import { resolveRoute } from 'vike/routing'; // eslint-disable-line import/extensions + +const path = '/scenes/:scope?/:page?'; +const urlMatch = match(path, { decode: decodeURIComponent }); + +export default (pageContext) => { + const matched = urlMatch(pageContext.urlPathname); + + if (matched) { + return { + routeParams: { + scope: matched.params.scope || 'latest', + page: matched.params.page || '1', + path, + }, + }; + } + + return false; +}; diff --git a/pages/updates/+Page.vue b/pages/updates/+Page.vue index 3318a3c..1f615e3 100644 --- a/pages/updates/+Page.vue +++ b/pages/updates/+Page.vue @@ -1,20 +1,20 @@