Merge pull request #145 from Crossbell-Box/feat/url-composer

This commit is contained in:
DIYgod 2023-01-19 18:57:21 +00:00 committed by GitHub
commit e9a0c3f555
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 54 additions and 55 deletions

View File

@ -1,3 +1,5 @@
import { NoteEntity } from "crossbell.js"
import { IS_PROD } from "./constants"
import { OUR_DOMAIN } from "./env"
@ -18,3 +20,13 @@ export const getSiteLink = ({
}
return `${IS_PROD ? "https" : "http"}://${subdomain}.${OUR_DOMAIN}`
}
export const getNoteSlug = (note: NoteEntity) => {
return (
note.metadata?.content?.attributes?.find(
(a) => a?.trait_type === "xlog_slug",
)?.value ||
(note.metadata?.content as any)?._xlog_slug ||
(note.metadata?.content as any)?._crosslog_slug
)?.toLowerCase?.()
}

34
src/lib/url-composer.ts Normal file
View File

@ -0,0 +1,34 @@
import { UrlComposer } from "@crossbell/ui"
import { getNoteSlug, getSiteLink } from "~/lib/helpers"
import { CSB_IO } from "~/lib/env"
export const urlComposer: Partial<UrlComposer> = {
characterUrl: ({ handle }) => getSiteLink({ subdomain: handle }),
noteUrl: (note) => {
let originalNote = note
while (originalNote?.toNote) {
originalNote = originalNote.toNote
}
if (originalNote.metadata?.content?.sources?.includes("xlog")) {
const { character } = originalNote
if (character) {
return (
getSiteLink({
subdomain: character.handle,
}) +
"/" +
getNoteSlug(originalNote) +
(originalNote !== note ? `#comments` : "")
)
} else {
return ""
}
} else {
return `${CSB_IO}/notes/${note.characterId}-${note.noteId}`
}
},
}

View File

@ -12,21 +12,17 @@ import {
useConnectModal,
useUpgradeAccountModal,
} from "@crossbell/connect-kit"
import { UrlComposer } from "@crossbell/ui"
import { NotificationModal } from "@crossbell/notification"
import { InitContractProvider } from "@crossbell/contract"
import { useRefCallback } from "@crossbell/util-hooks"
import NextNProgress from "nextjs-progressbar"
import { CharacterEntity, Network } from "crossbell.js"
import { Network } from "crossbell.js"
import { IPFS_GATEWAY, CSB_IO } from "~/lib/env"
import { IPFS_GATEWAY } from "~/lib/env"
import { toGateway } from "~/lib/ipfs-parser"
import { connectors, provider } from "~/lib/wallet-config"
import { createIDBPersister } from "~/lib/persister.client"
import { NotificationModal } from "@crossbell/notification"
import { getSiteLink } from "~/lib/helpers"
import type { NoteEntity } from "crossbell.js"
import { urlComposer } from "~/lib/url-composer"
Network.setIpfsGateway(IPFS_GATEWAY)
@ -58,41 +54,6 @@ try {
console.warn(error)
}
const urlComposer: Partial<UrlComposer> = {
characterUrl: ({ handle }) => getSiteLink({ subdomain: handle }),
noteUrl: (note) => {
let originalNote = note
while (originalNote?.toNote) {
originalNote = originalNote.toNote
}
if (originalNote.metadata?.content?.sources?.includes("xlog")) {
const { character } = originalNote
if (character) {
return (
getSiteLink({
subdomain: character.handle,
}) +
"/" +
(
originalNote.metadata?.content?.attributes?.find(
(a: any) => a?.trait_type === "xlog_slug",
)?.value ||
(originalNote as any).metadata?.content?._xlog_slug ||
(originalNote as any).metadata?.content?._crosslog_slug
)?.toLowerCase?.() +
(originalNote !== note ? `#comments` : "")
)
} else {
return ""
}
} else {
return `${CSB_IO}/notes/${note.characterId}-${note.noteId}`
}
},
}
function MyApp({ Component, pageProps }: any) {
const getLayout = Component.getLayout ?? ((page: any) => page)
const connectModal = useConnectModal()

View File

@ -1,15 +1,7 @@
import { NextApiRequest, NextApiResponse } from "next"
import { cacheGet, cacheDelete } from "~/lib/redis.server"
const getSlug = (note: any) => {
return (
note.metadata?.content?.attributes?.find(
(a: any) => a?.trait_type === "xlog_slug",
)?.value ||
note.metadata?.content?._xlog_slug ||
note.metadata?.content?._crosslog_slug
)?.toLowerCase?.()
}
import { cacheGet, cacheDelete } from "~/lib/redis.server"
import { getNoteSlug } from "~/lib/helpers"
export async function getIdBySlug(slug: string, handle: string) {
slug = (slug as string)?.toLowerCase?.()
@ -44,7 +36,7 @@ export async function getIdBySlug(slug: string, handle: string) {
cursor = response.cursor
note = response?.list?.find(
(item: any) =>
slug === getSlug(item) || slug === `${cid}-${item.noteId}`,
slug === getNoteSlug(item) || slug === `${cid}-${item.noteId}`,
)
} while (!note && cursor)
@ -67,7 +59,7 @@ export async function getIdBySlug(slug: string, handle: string) {
)
.then((res) => res.json())
.then((note) => {
if ((note && getSlug(note) !== slug) || note.deleted) {
if ((note && getNoteSlug(note) !== slug) || note.deleted) {
cacheDelete(["slug2id", handle, slug])
}
})