refactor: menu

feat-new-menu
tanjinzhou 2021-05-20 18:17:49 +08:00
parent 6bf3d283f6
commit 572ebc8f1a
2 changed files with 49 additions and 38 deletions

View File

@ -67,11 +67,11 @@ export default defineComponent({
computed(() => undefined), computed(() => undefined),
); );
const inlineCollapsed = computed(() => { const inlineCollapsed = computed(() => {
const { inlineCollapsed } = props; console.log('siderCollapsed.value', siderCollapsed.value);
if (siderCollapsed.value !== undefined) { if (siderCollapsed.value !== undefined) {
return siderCollapsed.value; return siderCollapsed.value;
} }
return inlineCollapsed; return props.inlineCollapsed;
}); });
const isMounted = ref(false); const isMounted = ref(false);
@ -164,7 +164,9 @@ export default defineComponent({
watch( watch(
() => props.openKeys, () => props.openKeys,
(openKeys = mergedOpenKeys.value) => { (openKeys = mergedOpenKeys.value) => {
if (!shallowEqual(mergedOpenKeys.value, openKeys)) {
mergedOpenKeys.value = openKeys; mergedOpenKeys.value = openKeys;
}
}, },
{ immediate: true }, { immediate: true },
); );
@ -177,22 +179,38 @@ export default defineComponent({
const mergedMode = ref<MenuMode>('vertical'); const mergedMode = ref<MenuMode>('vertical');
const mergedInlineCollapsed = ref(false); const mergedInlineCollapsed = ref(false);
const isInlineMode = computed(() => mergedMode.value === 'inline');
// >>>>> Cache & Reset open keys when inlineCollapsed changed
const inlineCacheOpenKeys = ref([]);
// Cache
watchEffect(() => { watchEffect(() => {
if (isInlineMode.value) { if (props.mode === 'inline' && inlineCollapsed.value) {
inlineCacheOpenKeys.value = mergedOpenKeys.value; mergedMode.value = 'vertical';
mergedInlineCollapsed.value = inlineCollapsed.value;
} else {
mergedMode.value = props.mode;
mergedInlineCollapsed.value = false;
} }
}); });
const isInlineMode = computed(() => mergedMode.value === 'inline');
// >>>>> Cache & Reset open keys when inlineCollapsed changed
const inlineCacheOpenKeys = ref(mergedOpenKeys.value);
const mountRef = ref(false); const mountRef = ref(false);
// Cache
watch(
mergedOpenKeys,
() => {
if (isInlineMode.value) {
inlineCacheOpenKeys.value = mergedOpenKeys.value;
}
},
{ immediate: true },
);
// Restore // Restore
watch(isInlineMode, () => { watch(
isInlineMode,
() => {
if (!mountRef.value) { if (!mountRef.value) {
mountRef.value = true; mountRef.value = true;
return; return;
@ -207,16 +225,9 @@ export default defineComponent({
emit('update:openKeys', empty); emit('update:openKeys', empty);
emit('openChange', empty); emit('openChange', empty);
} }
}); },
{ immediate: true },
watchEffect(() => { );
if (props.mode === 'inline' && inlineCollapsed.value) {
mergedMode.value = 'vertical';
mergedInlineCollapsed.value = inlineCollapsed.value;
}
mergedMode.value = props.mode;
mergedInlineCollapsed.value = false;
});
const className = computed(() => { const className = computed(() => {
return { return {

View File

@ -89,7 +89,7 @@ export default defineComponent({
); );
const toggleCollapsed = () => { const toggleCollapsed = () => {
state.collapsed = !state.collapsed; state.collapsed = !state.collapsed;
state.openKeys = state.collapsed ? [] : state.preOpenKeys; // state.openKeys = state.collapsed ? [] : state.preOpenKeys;
}; };
return { return {