Skip to content

Commit 6eccaf7

Browse files
feat: query parameter added for conditional display of header & footer (#53)
* query parameter added for conditional display of header & footer * include back button logic --------- Co-authored-by: darian <darian410@gmail.com>
1 parent bf457b8 commit 6eccaf7

File tree

3 files changed

+50
-14
lines changed

3 files changed

+50
-14
lines changed

frontend/app/root.tsx

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
import type { LinksFunction, MetaFunction } from '@remix-run/node'
1+
import type {
2+
LinksFunction,
3+
LoaderFunctionArgs,
4+
MetaFunction
5+
} from '@remix-run/node'
26
import {
37
Links,
48
Meta,
@@ -16,20 +20,25 @@ import stylesheet from '~/tailwind.css?url'
1620
import { Button, Footer, Header, Snackbar } from './components/index.js'
1721
import { XCircle } from './components/icons.js'
1822

19-
export const loader = async () => {
23+
export const loader = async ({ request }: LoaderFunctionArgs) => {
24+
const url = new URL(request.url)
25+
const contentOnlyParam = url.searchParams.get('contentOnly')
26+
2027
let message
2128

2229
if (!message) {
23-
return json({ message: null })
30+
return json({ message: null, contentOnlyParam })
2431
}
2532

26-
return json({ message })
33+
return json({ message, contentOnlyParam })
2734
}
2835

2936
export default function App() {
30-
const { message } = useLoaderData<typeof loader>()
37+
const { message, contentOnlyParam } = useLoaderData<typeof loader>()
3138
const [snackbarOpen, setSnackbarOpen] = useState(false)
3239

40+
const contentOnly = contentOnlyParam != null
41+
3342
useEffect(() => {
3443
if (!message) {
3544
return
@@ -48,10 +57,10 @@ export default function App() {
4857
<body className="h-screen">
4958
<main className="h-auto min-h-full flex flex-col justify-between">
5059
<div className="h-full flex flex-col bg-[url(/images/bg-tile.svg)] bg-[auto_25em]">
51-
<Header />
60+
{!contentOnly && <Header />}
5261
<Outlet />
5362
</div>
54-
<Footer />
63+
{!contentOnly && <Footer />}
5564
</main>
5665
<Snackbar
5766
id="snackbar"

frontend/app/routes/_index.tsx

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import type { MetaFunction } from '@remix-run/node'
1+
import type { LoaderFunctionArgs, MetaFunction } from '@remix-run/node'
2+
import { json, useLoaderData } from '@remix-run/react'
23
import { TypeCard } from '~/components/index.js'
34
import { availableTools } from '~/lib/presets.js'
45

@@ -9,13 +10,28 @@ export const meta: MetaFunction = () => {
910
]
1011
}
1112

13+
export const loader = async ({ request }: LoaderFunctionArgs) => {
14+
const url = new URL(request.url)
15+
const contentOnlyParam = url.searchParams.get('contentOnly')
16+
17+
return json({ contentOnlyParam })
18+
}
19+
1220
export default function Index() {
21+
const { contentOnlyParam } = useLoaderData<typeof loader>()
22+
const contentOnly = contentOnlyParam != null
23+
1324
return (
1425
<div className="h-full p-14">
1526
<div className="flex flex-wrap justify-center gap-6 max-w-prosex p-4 mx-auto">
16-
{availableTools.map((tool) => (
17-
<TypeCard key={tool.link} {...tool} />
18-
))}
27+
{availableTools.map((tool) => {
28+
const toolLink = `${tool.link}${contentOnly ? '?contentOnly' : ''}`
29+
const props = {
30+
...tool,
31+
link: toolLink
32+
}
33+
return <TypeCard key={toolLink} {...props} />
34+
})}
1935
</div>
2036
</div>
2137
)

frontend/app/routes/create.$type.tsx

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ import {
4444
export async function loader({ params, request }: LoaderFunctionArgs) {
4545
const elementType = params.type
4646

47+
const url = new URL(request.url)
48+
const contentOnlyParam = url.searchParams.get('contentOnly')
49+
4750
const cookies = request.headers.get('cookie')
4851

4952
const session = await messageStorage.getSession(cookies)
@@ -56,15 +59,23 @@ export async function loader({ params, request }: LoaderFunctionArgs) {
5659
const ilpayUrl = process.env.ILPAY_URL || ''
5760
const toolsUrl = process.env.FRONTEND_URL || ''
5861

59-
return { elementType, defaultConfig, message, ilpayUrl, toolsUrl }
62+
return {
63+
elementType,
64+
defaultConfig,
65+
message,
66+
ilpayUrl,
67+
toolsUrl,
68+
contentOnlyParam
69+
}
6070
}
6171

6272
export default function Create() {
63-
const { elementType, defaultConfig, ilpayUrl, toolsUrl } =
73+
const { elementType, defaultConfig, ilpayUrl, toolsUrl, contentOnlyParam } =
6474
useLoaderData<typeof loader>()
6575
const response = useActionData<typeof action>()
6676
const { state } = useNavigation()
6777
const isSubmitting = state === 'submitting'
78+
const contentOnly = contentOnlyParam != null
6879

6980
const [openWidget, setOpenWidget] = useState(false)
7081
const [toolConfig, setToolConfig] = useState<ElementConfigType>(defaultConfig)
@@ -179,10 +190,10 @@ export default function Create() {
179190
return (
180191
<div className="flex flex-col gap-6 min-w-128 max-w-prose mx-auto my-8">
181192
<PageHeader
182-
link="/"
183193
title={`Create ${elementType}`}
184194
elementType={elementType}
185195
setImportModalOpen={setImportModalOpen}
196+
link={`/${contentOnly ? '?contentOnly' : ''}`}
186197
setNewVersionModalOpen={setNewVersionModalOpen}
187198
setConfirmModalOpen={setConfirmModalOpen}
188199
versionOptions={versionOptions}

0 commit comments

Comments
 (0)