Commit 90ebb9c2 authored by Sendya's avatar Sendya

fix: collapsedButtonRender not reactive

parent 08fbc9b6
...@@ -13,6 +13,11 @@ ...@@ -13,6 +13,11 @@
<h1>Pro Layout</h1> <h1>Pro Layout</h1>
</a> </a>
</template> </template>
<!-- custom collapsed button -->
<template #collapsedButtonRender="collapsed">
<HeartOutlined v-if="collapsed" />
<SmileOutlined v-else />
</template>
<!-- custom right-content --> <!-- custom right-content -->
<template #rightContentRender> <template #rightContentRender>
<div style="margin-right: 12px"> <div style="margin-right: 12px">
...@@ -133,7 +138,7 @@ export default defineComponent({ ...@@ -133,7 +138,7 @@ export default defineComponent({
// title: 'ProLayout', // title: 'ProLayout',
// logo: 'https://alicdn.antdv.com/v2/assets/logo.1ef800a8.svg', // logo: 'https://alicdn.antdv.com/v2/assets/logo.1ef800a8.svg',
navTheme: 'dark', navTheme: 'dark',
layout: 'side', layout: 'top',
fixSiderbar: true, fixSiderbar: true,
}); });
const breadcrumb = computed(() => const breadcrumb = computed(() =>
......
...@@ -170,7 +170,6 @@ const ProLayout = defineComponent({ ...@@ -170,7 +170,6 @@ const ProLayout = defineComponent({
}); });
provideRouteContext(routeContext); provideRouteContext(routeContext);
return () => { return () => {
// const { onCollapse, onOpenKeys, onSelect, onMenuClick, menuHeaderRender, ...restProps } = props;
const { const {
pure, pure,
...@@ -181,10 +180,7 @@ const ProLayout = defineComponent({ ...@@ -181,10 +180,7 @@ const ProLayout = defineComponent({
...restProps ...restProps
} = props; } = props;
const collapsedButtonRender = const collapsedButtonRender = getPropsSlotfn(slots, props, 'collapsedButtonRender');
props.collapsedButtonRender === false
? false
: getPropsSlot(slots, props, 'collapsedButtonRender');
const headerContentRender = getPropsSlot(slots, props, 'headerContentRender'); const headerContentRender = getPropsSlot(slots, props, 'headerContentRender');
const rightContentRender = getPropsSlot(slots, props, 'rightContentRender'); const rightContentRender = getPropsSlot(slots, props, 'rightContentRender');
const customHeaderRender = getPropsSlot(slots, props, 'headerRender'); const customHeaderRender = getPropsSlot(slots, props, 'headerRender');
...@@ -213,6 +209,7 @@ const ProLayout = defineComponent({ ...@@ -213,6 +209,7 @@ const ProLayout = defineComponent({
onSelect, onSelect,
onMenuHeaderClick, onMenuHeaderClick,
rightContentRender, rightContentRender,
collapsedButtonRender,
headerTitleRender: menuHeaderRender, headerTitleRender: menuHeaderRender,
headerContentRender, headerContentRender,
headerRender: customHeaderRender, headerRender: customHeaderRender,
...@@ -231,7 +228,7 @@ const ProLayout = defineComponent({ ...@@ -231,7 +228,7 @@ const ProLayout = defineComponent({
) : ( ) : (
<div class={className.value}> <div class={className.value}>
<Layout class={baseClassName.value}> <Layout class={baseClassName.value}>
{!isTop.value && ( {(!isTop.value || isMobile.value) && (
<SiderMenuWrapper <SiderMenuWrapper
{...restProps} {...restProps}
{...menuRenders} {...menuRenders}
......
...@@ -30,17 +30,15 @@ const renderLogo = ( ...@@ -30,17 +30,15 @@ const renderLogo = (
return logoDom; return logoDom;
}; };
export const GlobalHeader: FunctionalComponent<GlobalHeaderProps> = (props, { slots }) => { export const GlobalHeader: FunctionalComponent<GlobalHeaderProps> = (props, { slots, emit }) => {
const { const {
isMobile, isMobile,
logo, logo,
collapsed, collapsed,
onCollapse,
collapsedButtonRender = defaultRenderCollapsedButton, collapsedButtonRender = defaultRenderCollapsedButton,
rightContentRender, rightContentRender,
menuHeaderRender, menuHeaderRender,
onMenuHeaderClick, onMenuHeaderClick,
// className: propClassName,
layout, layout,
headerTheme = 'dark', headerTheme = 'dark',
splitMenus, splitMenus,
...@@ -78,6 +76,9 @@ export const GlobalHeader: FunctionalComponent<GlobalHeaderProps> = (props, { sl ...@@ -78,6 +76,9 @@ export const GlobalHeader: FunctionalComponent<GlobalHeaderProps> = (props, { sl
<a>{defaultRenderLogo(logo)}</a> <a>{defaultRenderLogo(logo)}</a>
</span> </span>
); );
const onCollapse = () => {
emit('collapse', !props.collapsed)
}
return ( return (
<div class={className.value}> <div class={className.value}>
...@@ -85,11 +86,7 @@ export const GlobalHeader: FunctionalComponent<GlobalHeaderProps> = (props, { sl ...@@ -85,11 +86,7 @@ export const GlobalHeader: FunctionalComponent<GlobalHeaderProps> = (props, { sl
{isMobile && collapsedButtonRender && ( {isMobile && collapsedButtonRender && (
<span <span
class={`${baseClassName.value}-collapsed-button`} class={`${baseClassName.value}-collapsed-button`}
onClick={() => { onClick={onCollapse}
if (onCollapse) {
onCollapse(!collapsed);
}
}}
> >
{collapsedButtonRender(collapsed)} {collapsedButtonRender(collapsed)}
</span> </span>
...@@ -108,4 +105,5 @@ export const GlobalHeader: FunctionalComponent<GlobalHeaderProps> = (props, { sl ...@@ -108,4 +105,5 @@ export const GlobalHeader: FunctionalComponent<GlobalHeaderProps> = (props, { sl
</div> </div>
); );
}; };
GlobalHeader.inheritAttrs = false
GlobalHeader.emits = ['menuHeaderClick', 'collapse', 'openKeys', 'select']; GlobalHeader.emits = ['menuHeaderClick', 'collapse', 'openKeys', 'select'];
...@@ -196,7 +196,6 @@ const SiderMenu: FC<SiderMenuProps> = (props: SiderMenuProps) => { ...@@ -196,7 +196,6 @@ const SiderMenu: FC<SiderMenuProps> = (props: SiderMenuProps) => {
// call menuHeaderRender // call menuHeaderRender
const headerDom = defaultRenderLogoAndTitle(props); const headerDom = defaultRenderLogoAndTitle(props);
const extraDom = menuExtraRender && menuExtraRender(props); const extraDom = menuExtraRender && menuExtraRender(props);
if (hasSplitMenu.value && flatMenuData.value.length === 0) { if (hasSplitMenu.value && flatMenuData.value.length === 0) {
return null; return null;
} }
......
...@@ -61,6 +61,10 @@ export function getPropsSlot(slots: Slots, props: Record<string, any>, prop = 'd ...@@ -61,6 +61,10 @@ export function getPropsSlot(slots: Slots, props: Record<string, any>, prop = 'd
} }
export function getPropsSlotfn(slots: Slots, props: Record<string, any>, prop = 'default') { export function getPropsSlotfn(slots: Slots, props: Record<string, any>, prop = 'default') {
if (props[prop] === false) {
// force not render
return false;
}
return props[prop] || slots[prop]; return props[prop] || slots[prop];
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment