diff --git a/src/pages/ContentScripts/features/repo-pr-tooltip/gitee-index.tsx b/src/pages/ContentScripts/features/repo-pr-tooltip/gitee-index.tsx new file mode 100644 index 00000000..e79fef5d --- /dev/null +++ b/src/pages/ContentScripts/features/repo-pr-tooltip/gitee-index.tsx @@ -0,0 +1,70 @@ +import features from '../../../../feature-manager'; +import View, { PRDetail } from './view'; +import elementReady from 'element-ready'; +import { getRepoName, isPublicRepoWithMeta } from '../../../../helpers/get-gitee-repo-info'; +import { createRoot } from 'react-dom/client'; +import { + getPROpened, + getPRMerged, + getPRReviews, + getMergedCodeAddition, + getMergedCodeDeletion, +} from '../../../../api/repo'; +import { RepoMeta, metaStore } from '../../../../api/common'; + +import React from 'react'; +import $ from 'jquery'; +import { getPlatform } from '../../../../helpers/get-platform'; +import isGitee from '../../../../helpers/is-gitee'; +import { GiteeNativePopover } from '../../components/GiteeNativePopover'; + +const featureId = features.getFeatureID(import.meta.url); +let repoName: string; +let PRDetail: PRDetail = { + PROpened: null, + PRMerged: null, + PRReviews: null, + mergedCodeAddition: null, + mergedCodeDeletion: null, +}; +let meta: RepoMeta; +let platform: string; +const getData = async () => { + PRDetail.PROpened = await getPROpened(platform, repoName); + PRDetail.PRMerged = await getPRMerged(platform, repoName); + PRDetail.PRReviews = await getPRReviews(platform, repoName); + PRDetail.mergedCodeAddition = await getMergedCodeAddition(platform, repoName); + PRDetail.mergedCodeDeletion = await getMergedCodeDeletion(platform, repoName); + meta = (await metaStore.get(platform, repoName)) as RepoMeta; +}; + +const init = async (): Promise => { + platform = getPlatform(); + repoName = getRepoName(); + await getData(); + + if (Object.keys(PRDetail.mergedCodeAddition || {}).length === 0) { + PRDetail.mergedCodeAddition = null; + } + if (Object.keys(PRDetail.mergedCodeDeletion || {}).length === 0) { + PRDetail.mergedCodeDeletion = null; + } + + await elementReady('a.item[href*="/pulls"]'); + const $prTab = $('a.item[href*="/pulls"]'); + const placeholderElement = $('
').appendTo('body')[0]; + createRoot(placeholderElement).render( + + + + ); +}; + +const restore = async () => {}; + +features.add(featureId, { + asLongAs: [isGitee, isPublicRepoWithMeta], + awaitDomReady: false, + init, + restore, +}); diff --git a/src/pages/ContentScripts/features/repo-pr-tooltip/index.tsx b/src/pages/ContentScripts/features/repo-pr-tooltip/index.tsx index 9a70e61d..c9b8e123 100644 --- a/src/pages/ContentScripts/features/repo-pr-tooltip/index.tsx +++ b/src/pages/ContentScripts/features/repo-pr-tooltip/index.tsx @@ -42,7 +42,6 @@ const init = async (): Promise => { platform = getPlatform(); repoName = getRepoName(); await getData(); - await elementReady('#pull-requests-tab'); const $prTab = $('#pull-requests-tab'); const placeholderElement = $('
').appendTo('body')[0]; diff --git a/src/pages/ContentScripts/features/repo-pr-tooltip/view.tsx b/src/pages/ContentScripts/features/repo-pr-tooltip/view.tsx index 772d7959..4cc0e762 100644 --- a/src/pages/ContentScripts/features/repo-pr-tooltip/view.tsx +++ b/src/pages/ContentScripts/features/repo-pr-tooltip/view.tsx @@ -9,7 +9,8 @@ import { RepoMeta } from '../../../../api/common'; import TooltipTrigger from '../../../../components/TooltipTrigger'; import { useTranslation } from 'react-i18next'; import '../../../../helpers/i18n'; -const githubTheme = getGithubTheme(); +import isGithub from '../../../../helpers/is-github'; +const theme = isGithub() ? getGithubTheme() : 'light'; export interface PRDetail { PROpened: any; PRMerged: any; @@ -56,6 +57,7 @@ const View = ({ currentRepo, PRDetail, meta }: Props): JSX.Element | null => { if (isNull(PRDetail) || isAllNull(PRDetail)) return null; const onClick = (curMonth: string, params: any) => { + if (!isGithub()) return; const seriesIndex = params.seriesIndex; let type; if (seriesIndex === 0) { @@ -87,31 +89,39 @@ const View = ({ currentRepo, PRDetail, meta }: Props): JSX.Element | null => {
-
-
{t('merged_lines_popup_title')}
- -
+ {PRDetail.mergedCodeAddition && PRDetail.mergedCodeDeletion && ( + <> +
+
{t('merged_lines_popup_title')}
+ +
- + + + )} ); }; diff --git a/src/pages/ContentScripts/index.ts b/src/pages/ContentScripts/index.ts index 6e1d94a2..9038eda0 100644 --- a/src/pages/ContentScripts/index.ts +++ b/src/pages/ContentScripts/index.ts @@ -7,6 +7,7 @@ import './features/repo-header-labels/gitee-index.tsx'; import './features/repo-fork-tooltip'; import './features/repo-star-tooltip'; import './features/repo-pr-tooltip'; +import './features/repo-pr-tooltip/gitee-index.tsx'; import './features/repo-issue-tooltip'; import './features/perceptor-tab'; import './features/perceptor-layout';