From cff124ceca07256929c96b3f2f6d049d4d72e959 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90?= Date: Sun, 19 Sep 2021 18:18:13 +0800 Subject: [PATCH] refactor(components): refactor breadcrumb (#3487) * refactor(components): refactor breadcrumb * fix * Revert "fix" This reverts commit 5e096c51065776c726a21a541813387d40723153. --- .../breadcrumb/__tests__/breadcrumb.spec.ts | 4 +- packages/components/breadcrumb/index.ts | 27 +++++------- .../breadcrumb/src/breadcrumb-item.ts | 16 +++++++ .../src/{item.vue => breadcrumb-item.vue} | 44 +++++++++---------- .../components/breadcrumb/src/breadcrumb.ts | 17 +++++-- .../src/{index.vue => breadcrumb.vue} | 24 ++++------ packages/tokens/breadcrumb.ts | 5 +++ packages/tokens/index.ts | 1 + 8 files changed, 77 insertions(+), 61 deletions(-) create mode 100644 packages/components/breadcrumb/src/breadcrumb-item.ts rename packages/components/breadcrumb/src/{item.vue => breadcrumb-item.vue} (60%) rename packages/components/breadcrumb/src/{index.vue => breadcrumb.vue} (58%) create mode 100644 packages/tokens/breadcrumb.ts diff --git a/packages/components/breadcrumb/__tests__/breadcrumb.spec.ts b/packages/components/breadcrumb/__tests__/breadcrumb.spec.ts index 4d40b22a5a..cde1f700b9 100644 --- a/packages/components/breadcrumb/__tests__/breadcrumb.spec.ts +++ b/packages/components/breadcrumb/__tests__/breadcrumb.spec.ts @@ -1,6 +1,6 @@ import { mount } from '@vue/test-utils' -import Breadcrumb from '../src/index.vue' -import BreadcrumbItem from '../src/item.vue' +import Breadcrumb from '../src/breadcrumb.vue' +import BreadcrumbItem from '../src/breadcrumb-item.vue' const _mount = (template: string) => mount( diff --git a/packages/components/breadcrumb/index.ts b/packages/components/breadcrumb/index.ts index 51c5346005..584ac03b0c 100644 --- a/packages/components/breadcrumb/index.ts +++ b/packages/components/breadcrumb/index.ts @@ -1,20 +1,13 @@ -import Breadcrumb from './src/index.vue' -import BreadcrumbItem from './src/item.vue' +import { withInstall } from '@element-plus/utils/with-install' -import type { App } from 'vue' -import type { SFCWithInstall } from '@element-plus/utils/types' +import Breadcrumb from './src/breadcrumb.vue' +import BreadcrumbItem from './src/breadcrumb-item.vue' -Breadcrumb.install = (app: App): void => { - app.component(Breadcrumb.name, Breadcrumb) - app.component(BreadcrumbItem.name, BreadcrumbItem) -} - -Breadcrumb.BreadcrumbItem = BreadcrumbItem - -const _Breadcrumb = Breadcrumb as any as SFCWithInstall & { - BreadcrumbItem: typeof BreadcrumbItem -} - -export default _Breadcrumb -export const ElBreadcrumb = _Breadcrumb +export const ElBreadcrumb = withInstall(Breadcrumb, { + BreadcrumbItem, +}) export const ElBreadcrumbItem = BreadcrumbItem +export default ElBreadcrumb + +export * from './src/breadcrumb' +export * from './src/breadcrumb-item' diff --git a/packages/components/breadcrumb/src/breadcrumb-item.ts b/packages/components/breadcrumb/src/breadcrumb-item.ts new file mode 100644 index 0000000000..3ba266b99e --- /dev/null +++ b/packages/components/breadcrumb/src/breadcrumb-item.ts @@ -0,0 +1,16 @@ +import { buildProp } from '@element-plus/utils/props' + +import type { ExtractPropTypes } from 'vue' +import type { RouteLocationRaw } from 'vue-router' + +export const breadcrumbItemProps = { + to: buildProp({ + type: [String, Object], + default: '', + }), + replace: { + type: Boolean, + default: false, + }, +} as const +export type BreadcrumbItemProps = ExtractPropTypes diff --git a/packages/components/breadcrumb/src/item.vue b/packages/components/breadcrumb/src/breadcrumb-item.vue similarity index 60% rename from packages/components/breadcrumb/src/item.vue rename to packages/components/breadcrumb/src/breadcrumb-item.vue index e4df36451e..46c6a91d16 100644 --- a/packages/components/breadcrumb/src/item.vue +++ b/packages/components/breadcrumb/src/breadcrumb-item.vue @@ -11,10 +11,10 @@ v-if="separatorClass" class="el-breadcrumb__separator" :class="separatorClass" - > - {{ - separator - }} + /> + + {{ separator }} + @@ -26,30 +26,28 @@ import { onMounted, getCurrentInstance, } from 'vue' -import type { PropType } from 'vue' -import type { IBreadcrumbProps } from './breadcrumb' +import { elBreadcrumbKey } from '@element-plus/tokens' +import { breadcrumbItemProps } from './breadcrumb-item' + +import type { Router } from 'vue-router' + +const COMPONENT_NAME = 'ElBreadcrumbItem' export default defineComponent({ - name: 'ElBreadcrumbItem', - props: { - to: { - type: [String, Object] as PropType>, - default: '', - }, - replace: { - type: Boolean, - default: false, - }, - }, + name: COMPONENT_NAME, + + props: breadcrumbItemProps, + setup(props) { - const link = ref(null) - const parent = inject('breadcrumb') - const instance = getCurrentInstance() - const router = instance.appContext.config.globalProperties.$router + const instance = getCurrentInstance()! + const router = instance.appContext.config.globalProperties.$router as Router + const parent = inject(elBreadcrumbKey, undefined) + + const link = ref() onMounted(() => { - link.value.setAttribute('role', 'link') - link.value.addEventListener('click', () => { + link.value!.setAttribute('role', 'link') + link.value!.addEventListener('click', () => { if (!props.to || !router) return props.replace ? router.replace(props.to) : router.push(props.to) }) diff --git a/packages/components/breadcrumb/src/breadcrumb.ts b/packages/components/breadcrumb/src/breadcrumb.ts index 0fba4ce259..a6795cccbc 100644 --- a/packages/components/breadcrumb/src/breadcrumb.ts +++ b/packages/components/breadcrumb/src/breadcrumb.ts @@ -1,4 +1,13 @@ -export interface IBreadcrumbProps { - separator: string - separatorClass: string -} +import type { ExtractPropTypes } from 'vue' + +export const breadcurmbProps = { + separator: { + type: String, + default: '/', + }, + separatorClass: { + type: String, + default: '', + }, +} as const +export type BreadcrumbProps = ExtractPropTypes diff --git a/packages/components/breadcrumb/src/index.vue b/packages/components/breadcrumb/src/breadcrumb.vue similarity index 58% rename from packages/components/breadcrumb/src/index.vue rename to packages/components/breadcrumb/src/breadcrumb.vue index ced7f0c970..385e936e38 100644 --- a/packages/components/breadcrumb/src/index.vue +++ b/packages/components/breadcrumb/src/breadcrumb.vue @@ -11,27 +11,21 @@