Skip to content

Commit

Permalink
add simple subpage sorting, pagination and markdown format
Browse files Browse the repository at this point in the history
  • Loading branch information
rallisf1 committed Jan 25, 2024
1 parent 0e8e44c commit 1d8a535
Showing 1 changed file with 46 additions and 8 deletions.
54 changes: 46 additions & 8 deletions src/routes/api/[site]/[...page]/+server.js
Original file line number Diff line number Diff line change
@@ -1,23 +1,38 @@
import { json } from '@sveltejs/kit';
import supabase_admin from '$lib/supabase/admin'
import {languages} from '@primocms/builder'
import { languages } from '@primocms/builder'

export async function GET({ params }) {
export async function GET({ url, params }) {

const pages = params.page?.split('/') || []
const lang = languages.some(lang => lang.key === pages[0]) ? pages.pop() : 'en'
const lang = languages.some(lang => lang.key === pages[0]) ? pages.pop() : 'en'
const page_url = pages.pop() || 'index'
const parent_url = pages.pop() || null

const [{ data: site_data }, { data: page_data }, { data: subpages_data, error: subpages_error }, { data: sections_data }] = await Promise.all([
let options = {
format: 'html', // html | markdown
range: '0,9', // from,to # https://supabase.com/docs/reference/javascript/range
sort: 'created_at,desc' // created_at | name, asc | desc # default returns latest
}

for (const p of url.searchParams) {
if (options.hasOwnProperty(p[0])) {
options[p[0]] = p[1]
}
}

const [{ data: site_data }, { data: page_data }, { data: subpages_data, error: subpages_error }, { count: subpages_total }, { data: sections_data }] = await Promise.all([
supabase_admin.from('sites').select().filter('url', 'eq', params.site).single(),
supabase_admin.from('pages').select('*, site!inner(url)').match({ url: page_url, 'site.url': params.site }).single(),
supabase_admin.from('pages').select('*, parent!inner(*), site!inner(url)').match({ 'site.url': params.site, 'parent.url': page_url }),
supabase_admin.from('pages').select('*, parent!inner(*), site!inner(url)').match({ 'site.url': params.site, 'parent.url': page_url })
.order(options.sort.split(',')[0], { ascending: options.sort.split(',')[0] === 'asc' })
.range(parseInt(options.range.split(',')[0]), parseInt(options.range.split(',')[1])),
supabase_admin.from('pages').select('*, parent!inner(url), site!inner(url)', { count: 'exact', head: true }).match({ 'site.url': params.site, 'parent.url': page_url }),
supabase_admin.from('sections').select('*, symbol!inner(name, content), page!inner( site!inner(url), parent!inner(url) )').match({
'page.site.url': params.site,
'page.parent.url': parent_url,
'page.parent.url': parent_url,
'page.url': page_url
})
}).order('index')
])

const site = {
Expand All @@ -39,6 +54,7 @@ export async function GET({ params }) {
name: page_data.name,
url: page_data.url,
created_at: page_data.created_at,
subpages_total,
subpages: subpages_data?.map(subpage => ({
id: subpage.id,
name: subpage.name,
Expand All @@ -48,7 +64,29 @@ export async function GET({ params }) {
},
}

const sections = sections_data?.sort((a, b) => a.index - b.index).map(section => ({
const formatContent = (sections) => {
if (Array.isArray(sections)) {
sections.forEach(item => formatContent(item))
} else if (typeof sections === 'object' && sections !== null) {
Object.keys(sections).forEach(key => {
if (typeof sections[key] === 'object' && sections[key] !== null && sections.hasOwnProperty(key)) {
if (sections[key].hasOwnProperty('html') && sections[key].hasOwnProperty('markdown') && Object.keys(sections[key]).length === 2) {
if (options.format === 'html') {
delete sections[key]['markdown']
} else {
delete sections[key]['html']
}
} else {
formatContent(sections[key])
}
}
})
}
}

formatContent(sections_data)

const sections = sections_data?.map(section => ({
// @ts-ignore
...section.symbol['content'][lang], // static field values
// @ts-ignore
Expand Down

0 comments on commit 1d8a535

Please sign in to comment.