stormy-gold
stormy-gold3mo ago

ThemedLayoutV2

hey, everyone. Does anyone have any code examples on ThemedLayoutV2 styling in Nextjs 14+? All examples I see are for NextJS 12 and refine 3x. Sider is now deprecated; if I try to do something similar, I get 2 sidebars, custom, and default. It looks like Refine does not want to stop generating the default ThemedLayoutV2. I've spent all day trying to fix it.
3 Replies
kapa.ai
kapa.ai3mo ago
Hi @yurkomik. I'm kapa.ai, your friendly support bot. I will try to answer your question by searching through the knowledge base. :wave: ---------------------- It sounds like you're having trouble with customizing the ThemedLayoutV2 component in refine, specifically with the Sider prop. Based on the knowledge sources provided, here are some examples and instructions on how to customize the ThemedLayoutV2 component, including the Sider component, in a refine application. Customizing ThemedLayoutV2 with a Custom Sider To replace the default ThemedSiderV2 with a custom component, you can pass your custom component to the Sider prop of ThemedLayoutV2. Here is an example:
import { Refine } from "@refinedev/core";
import { ThemedLayoutV2 } from "@refinedev/antd"; // or "@refinedev/mui" or "@refinedev/mantine" depending on your UI framework

import { CustomSider } from "./CustomSider";

const App: React.FC = () => {
return (
<Refine
// ...
>
<ThemedLayoutV2
Sider={() => <CustomSider />}
>
{/* ... */}
</ThemedLayoutV2>
</Refine>
);
};
import { Refine } from "@refinedev/core";
import { ThemedLayoutV2 } from "@refinedev/antd"; // or "@refinedev/mui" or "@refinedev/mantine" depending on your UI framework

import { CustomSider } from "./CustomSider";

const App: React.FC = () => {
return (
<Refine
// ...
>
<ThemedLayoutV2
Sider={() => <CustomSider />}
>
{/* ... */}
</ThemedLayoutV2>
</Refine>
);
};
Source (https://refine.dev/docs/ui-integrations/ant-design/components/themed-layout/#sider) Customizing the Default ThemedSiderV2 If you want to customize the default ThemedSiderV2 component instead of replacing it entirely, you can use its props or the swizzle feature. Here is an example of how to customize the ThemedSiderV2 using the render and Title props:
import { Refine } from "@refinedev/core";
import { ThemedLayoutV2, ThemedSiderV2 } from "@refinedev/antd"; // or "@refinedev/mui" or "@refinedev/mantine" depending on your UI framework

import { CustomTitle } from "./CustomTitle";

const App: React.FC = () => {
return (
<Refine
// ...
>
<ThemedLayoutV2
Sider={() => (
<ThemedSiderV2
Title={({ collapsed }) => <CustomTitle collapsed={collapsed} />}
render={({ items, logout, collapsed }) => {
return (
<>
<div>My Custom Element</div>
{items}
{logout}
</>
);
}}
/>
)}
>
{/* ... */}
</ThemedLayoutV2>
</Refine>
);
};
import { Refine } from "@refinedev/core";
import { ThemedLayoutV2, ThemedSiderV2 } from "@refinedev/antd"; // or "@refinedev/mui" or "@refinedev/mantine" depending on your UI framework

import { CustomTitle } from "./CustomTitle";

const App: React.FC = () => {
return (
<Refine
// ...
>
<ThemedLayoutV2
Sider={() => (
<ThemedSiderV2
Title={({ collapsed }) => <CustomTitle collapsed={collapsed} />}
render={({ items, logout, collapsed }) => {
return (
<>
<div>My Custom Element</div>
{items}
{logout}
</>
);
}}
/>
)}
>
{/* ... */}
</ThemedLayoutV2>
</Refine>
);
};
Source (https://refine.dev/docs/ui-integrations/ant-design/components/themed-layout/#sider) Making the Sidebar Fixed You can also make the sidebar fixed by passing the fixed property to the ThemedSiderV2 component: ```javascript import { Refine } from "@refinedev/core";
import { ThemedLayoutV2, ThemedSiderV2 } from "@refinedev/antd"; // or "@refinedev/mui" or "@refinedev/mantine" depending on your UI framework
const App: React.FC = () => {
return (
<Refine
// ...
<ThemedLayoutV2
Sider={() => <ThemedSiderV2 fixed />} ---------------------- Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: ----------------------
kapa.ai
kapa.ai3mo ago
<@915269044687474718> kapa.ai is still learning and improving, please let us know how it did by reacting below
stormy-gold
stormy-gold3mo ago
Found the fix. child component was using <ThemedLayoutV2 Header> It looks like somehow it was also importing the sidebar, not sure why.