diff --git a/apps/next/app/(generated)/page.tsx b/apps/next/app/(generated)/page.tsx
index 726b835e..d2da6ae5 100644
--- a/apps/next/app/(generated)/page.tsx
+++ b/apps/next/app/(generated)/page.tsx
@@ -1,2 +1 @@
-'use client'
export { default, dynamic } from 'app/routes/index'
diff --git a/features/app-core/routes/bio/index.tsx b/features/app-core/routes/bio/index.tsx
index 648ddbea..2aa3d432 100644
--- a/features/app-core/routes/bio/index.tsx
+++ b/features/app-core/routes/bio/index.tsx
@@ -5,8 +5,13 @@ import * as bioScreen from 'links-page/screens/BioScreen'
/* --- /bio ------------------------------------------------------------------------------------ */
-const PageScreen = (props: bioScreen.BioScreenProps) => (
-
+const PageScreen = async (props: bioScreen.BioScreenProps) => (
+
)
/* --- Exports --------------------------------------------------------------------------------- */
diff --git a/features/app-core/routes/index.tsx b/features/app-core/routes/index.tsx
index 76597f72..0ed6d1d3 100644
--- a/features/app-core/routes/index.tsx
+++ b/features/app-core/routes/index.tsx
@@ -5,11 +5,17 @@ import * as bioScreen from 'links-page/screens/BioScreen'
/* --- / --------------------------------------------------------------------------------------- */
-const PageScreen = (
+const PageScreen = async (
props: bioScreen.BioScreenProps & { searchParams: Record }
) => {
+ console.log('PageScreen', { props, ...bioScreen.screenConfig })
return (
-
+
)
}
diff --git a/features/links-page/screens/BioScreen.tsx b/features/links-page/screens/BioScreen.tsx
index f430f56e..84951773 100644
--- a/features/links-page/screens/BioScreen.tsx
+++ b/features/links-page/screens/BioScreen.tsx
@@ -1,3 +1,4 @@
+'use client'
import React from 'react'
// Navigation
import {
diff --git a/packages/@aetherspace/navigation/AetherLink/AetherLink.web.tsx b/packages/@aetherspace/navigation/AetherLink/AetherLink.web.tsx
index 972bf2c0..a70ba686 100644
--- a/packages/@aetherspace/navigation/AetherLink/AetherLink.web.tsx
+++ b/packages/@aetherspace/navigation/AetherLink/AetherLink.web.tsx
@@ -1,3 +1,4 @@
+'use client'
// @ts-ignore
import React, { useMemo, forwardRef } from 'react'
import { Platform, Text } from 'react-native'
diff --git a/packages/@aetherspace/navigation/AetherPage/AetherClientPage.web.tsx b/packages/@aetherspace/navigation/AetherPage/AetherClientPage.web.tsx
new file mode 100644
index 00000000..4fbdec62
--- /dev/null
+++ b/packages/@aetherspace/navigation/AetherPage/AetherClientPage.web.tsx
@@ -0,0 +1,77 @@
+'use client'
+import { SWRConfig } from 'swr'
+
+/* --- Helpers --------------------------------------------------------------------------------- */
+
+// const getSSRData = () => {
+// const $ssrData = document.getElementById('ssr-data')
+// const ssrDataText = $ssrData?.getAttribute('data-ssr')
+// const ssrData = ssrDataText ? (JSON.parse(ssrDataText) as Record) : null
+// return ssrData
+// }
+
+/* --- --------------------------------------------------------------------------- */
+
+export const AetherClientPage = (props: any) => {
+ // Props
+ const { fallbackKey, screen, ...ssrData } = props
+ const PageScreen = screen
+
+ // Render
+ return (
+
+ {!!ssrData && }
+
+
+ )
+}
+
+// export const AetherPage = (props: AetherPageProps) => {
+// // Props
+// const { params: routeParams, searchParams, screen, screenConfig, ...restProps } = props
+// const { query, getGraphqlVars, getGraphqlData } = screenConfig
+
+// // State
+// const [hydratedData, setHydratedData] = useState | null>(null)
+
+// // Screen
+// const PageScreen = screen
+
+// // Vars
+// const variables = getGraphqlVars({ ...searchParams, ...routeParams })
+// const fallbackKey = unstable_serialize([query, variables])
+// const isServer = typeof window === 'undefined'
+
+// // -- Effects --
+
+// useEffect(() => {
+// const ssrData = getSSRData()
+// if (ssrData) setHydratedData(ssrData) // Save the SSR data to state, removing the SSR data from the DOM
+// }, [])
+
+// // -- Browser --
+
+// if (!isServer) {
+// const hydrationData = hydratedData || getSSRData()
+// const fallback = hydrationData ? { [fallbackKey]: hydrationData } : {}
+// const renderHydrationData = !!hydrationData && !hydratedData // Only render the hydration data if it's not already in state
+
+// return (
+//
+// {renderHydrationData && }
+//
+//
+// )
+// }
+
+// // -- Server --
+
+// const ssrData = use(getGraphqlData(query, variables))
+
+// return (
+//
+// {!!ssrData && }
+//
+//
+// )
+// }
diff --git a/packages/@aetherspace/navigation/AetherPage/AetherPage.types.ts b/packages/@aetherspace/navigation/AetherPage/AetherPage.types.ts
index 2e877be3..d7c4ac37 100644
--- a/packages/@aetherspace/navigation/AetherPage/AetherPage.types.ts
+++ b/packages/@aetherspace/navigation/AetherPage/AetherPage.types.ts
@@ -13,7 +13,7 @@ export type AetherScreenConfig = {
backgroundColor?: string
}
-export type AetherPageProps = {
+export type AetherPageProps = SC & {
params?: Record
searchParams?: Record
screen: React.FC> | ((props: any) => JSX.Element | null)
diff --git a/packages/@aetherspace/navigation/AetherPage/AetherPage.web.tsx b/packages/@aetherspace/navigation/AetherPage/AetherPage.web.tsx
index 3db64c99..094ed178 100644
--- a/packages/@aetherspace/navigation/AetherPage/AetherPage.web.tsx
+++ b/packages/@aetherspace/navigation/AetherPage/AetherPage.web.tsx
@@ -2,64 +2,110 @@ import { use, useEffect, useState } from 'react'
import { SWRConfig, unstable_serialize } from 'swr'
// Types
import { AetherPageProps, AetherScreenConfig } from './AetherPage.types'
+// Components
+import { AetherClientPage } from './AetherClientPage.web'
/* --- Helpers --------------------------------------------------------------------------------- */
-const getSSRData = () => {
- const $ssrData = document.getElementById('ssr-data')
- const ssrDataText = $ssrData?.getAttribute('data-ssr')
- const ssrData = ssrDataText ? (JSON.parse(ssrDataText) as Record) : null
- return ssrData
-}
+// const getSSRData = () => {
+// const $ssrData = document.getElementById('ssr-data')
+// const ssrDataText = $ssrData?.getAttribute('data-ssr')
+// const ssrData = ssrDataText ? (JSON.parse(ssrDataText) as Record) : null
+// return ssrData
+// }
/* --- --------------------------------------------------------------------------- */
-export const AetherPage = (props: AetherPageProps) => {
+export const AetherServerPage = async (
+ props: AetherPageProps
+) => {
// Props
- const { params: routeParams, searchParams, screen, screenConfig, ...restProps } = props
- const { query, getGraphqlVars, getGraphqlData } = screenConfig
-
- // State
- const [hydratedData, setHydratedData] = useState | null>(null)
-
- // Screen
- const PageScreen = screen
+ const {
+ params: routeParams,
+ searchParams,
+ screen,
+ screenConfig,
+ query,
+ getGraphqlVars,
+ getGraphqlData,
+ ...restProps
+ } = props || {}
+ console.log('Server:', { props })
+ // const { query, getGraphqlVars, getGraphqlData } = screenConfig
// Vars
const variables = getGraphqlVars({ ...searchParams, ...routeParams })
const fallbackKey = unstable_serialize([query, variables])
- const isServer = typeof window === 'undefined'
+ console.log('Server:', { fallbackKey, variables })
+ const ssrData = await getGraphqlData(query, variables) // use(getGraphqlData(query, variables))
+ console.log('Server:', { ssrData })
- // -- Effects --
+ // Render
+ return
+}
- useEffect(() => {
- const ssrData = getSSRData()
- if (ssrData) setHydratedData(ssrData) // Save the SSR data to state, removing the SSR data from the DOM
- }, [])
+// export const AetherClientPage = (props: any) => {
+// // Props
+// const { fallbackKey, screen, ...ssrData } = props
+// const PageScreen = screen
- // -- Browser --
+// // Render
+// return (
+//
+// {!!ssrData && }
+//
+//
+// )
+// }
- if (!isServer) {
- const hydrationData = hydratedData || getSSRData()
- const fallback = hydrationData ? { [fallbackKey]: hydrationData } : {}
- const renderHydrationData = !!hydrationData && !hydratedData // Only render the hydration data if it's not already in state
+export const AetherPage = AetherServerPage
- return (
-
- {renderHydrationData && }
-
-
- )
- }
+// export const AetherPage = (props: AetherPageProps) => {
+// // Props
+// const { params: routeParams, searchParams, screen, screenConfig, ...restProps } = props
+// const { query, getGraphqlVars, getGraphqlData } = screenConfig
- // -- Server --
+// // State
+// const [hydratedData, setHydratedData] = useState | null>(null)
- const ssrData = use(getGraphqlData(query, variables))
+// // Screen
+// const PageScreen = screen
- return (
-
- {!!ssrData && }
-
-
- )
-}
+// // Vars
+// const variables = getGraphqlVars({ ...searchParams, ...routeParams })
+// const fallbackKey = unstable_serialize([query, variables])
+// const isServer = typeof window === 'undefined'
+
+// // -- Effects --
+
+// useEffect(() => {
+// const ssrData = getSSRData()
+// if (ssrData) setHydratedData(ssrData) // Save the SSR data to state, removing the SSR data from the DOM
+// }, [])
+
+// // -- Browser --
+
+// if (!isServer) {
+// const hydrationData = hydratedData || getSSRData()
+// const fallback = hydrationData ? { [fallbackKey]: hydrationData } : {}
+// const renderHydrationData = !!hydrationData && !hydratedData // Only render the hydration data if it's not already in state
+
+// return (
+//
+// {renderHydrationData && }
+//
+//
+// )
+// }
+
+// // -- Server --
+
+// const ssrData = use(getGraphqlData(query, variables))
+
+// return (
+//
+// {!!ssrData && }
+//
+//
+// )
+// }
diff --git a/packages/@aetherspace/primitives/AetherImage/AetherImage.tsx b/packages/@aetherspace/primitives/AetherImage/AetherImage.tsx
index b160775b..88d43171 100644
--- a/packages/@aetherspace/primitives/AetherImage/AetherImage.tsx
+++ b/packages/@aetherspace/primitives/AetherImage/AetherImage.tsx
@@ -1,3 +1,4 @@
+'use client'
import React, { useMemo, forwardRef } from 'react'
import { Image, ImageSource } from 'expo-image'
// Types
diff --git a/packages/@aetherspace/primitives/AetherImage/AetherImage.web.tsx b/packages/@aetherspace/primitives/AetherImage/AetherImage.web.tsx
index de172f21..29088c30 100644
--- a/packages/@aetherspace/primitives/AetherImage/AetherImage.web.tsx
+++ b/packages/@aetherspace/primitives/AetherImage/AetherImage.web.tsx
@@ -1,3 +1,4 @@
+'use client'
// -i- Based on / inspired by:
// - https://necolas.github.io/react-native-web/docs/image/
// - https://nextjs.org/docs/api-reference/next/image