diff --git a/src/components/_shared/breadcrumb/Breadcrumb.tsx b/src/components/_shared/breadcrumb/Breadcrumb.tsx
index 07b812b8..fa040911 100644
--- a/src/components/_shared/breadcrumb/Breadcrumb.tsx
+++ b/src/components/_shared/breadcrumb/Breadcrumb.tsx
@@ -1,18 +1,11 @@
import { IconButton } from '@mui/material';
-import { memo, useEffect, useMemo, useState } from 'react';
-import { useTranslation } from 'react-i18next';
+import { memo, useMemo, useState } from 'react';
import { UIVariant, View } from '@/application/types';
import { ReactComponent as RightIcon } from '@/assets/icons/alt_arrow_right.svg';
import { ReactComponent as MoreIcon } from '@/assets/icons/more.svg';
-import { ReactComponent as PrivateSpaceIcon } from '@/assets/icons/private-space.svg';
-import { ReactComponent as ShareIcon } from '@/assets/icons/share-to.svg';
-import { ReactComponent as TeamIcon } from '@/assets/icons/team.svg';
import BreadcrumbItem from '@/components/_shared/breadcrumb/BreadcrumbItem';
import BreadcrumbMoreModal from '@/components/_shared/breadcrumb/BreadcrumbMoreModal';
-import { useCurrentWorkspaceId } from '@/components/app/app.hooks';
-import { useCurrentUser, useService } from '@/components/main/app.hooks';
-import { Progress } from '@/components/ui/progress';
import { getPlatform } from '@/utils/platform';
export interface BreadcrumbProps {
@@ -78,78 +71,30 @@ export function Breadcrumb({ crumbs, toView, variant }: BreadcrumbProps) {
return (
-
+
{!isLast && }
);
});
}, [crumbs, toView, variant]);
- const service = useService();
- const currentWorkspaceId = useCurrentWorkspaceId();
- const currentUser = useCurrentUser();
- const { t } = useTranslation();
- const [isShared, setIsShared] = useState(false);
- const [loading, setLoading] = useState(false);
-
- const isPrivate = crumbs.some((crumb) => crumb.is_private);
-
- useEffect(() => {
- if (!service || !currentWorkspaceId || !currentUser) return;
- const loadShareDetail = async () => {
- const viewId = crumbs[crumbs.length - 1].view_id;
- const ancestorViewIds = crumbs.map((crumb) => crumb.view_id);
-
- try {
- setLoading(true);
- const res = await service.getShareDetail(currentWorkspaceId, viewId, ancestorViewIds);
- const shared = res.shared_with.some((item) => item.email !== currentUser.email);
-
- setIsShared(shared);
- } catch (error) {
- setIsShared(false);
- } finally {
- setLoading(false);
- }
- };
-
- void loadShareDetail();
- }, [service, currentWorkspaceId, currentUser, crumbs]);
-
return (
{renderCrumb}
-
setOpenMore(false)} crumbs={crumbs} toView={toView} />
- {variant === UIVariant.App && !isPrivate && (
-
-
- {t('teamSpace')}
-
- )}
- {variant === UIVariant.App && isPrivate && (
-
- {loading &&
}
- {isShared ? (
- <>
-
- {t('share')}
- >
- ) : (
- <>
-
- {t('private')}
- >
- )}
-
- )}
+ setOpenMore(false)}
+ crumbs={crumbs}
+ toView={toView}
+ variant={variant}
+ />
);
}
diff --git a/src/components/_shared/breadcrumb/BreadcrumbMoreModal.tsx b/src/components/_shared/breadcrumb/BreadcrumbMoreModal.tsx
index 8c6eb955..94aae4f1 100644
--- a/src/components/_shared/breadcrumb/BreadcrumbMoreModal.tsx
+++ b/src/components/_shared/breadcrumb/BreadcrumbMoreModal.tsx
@@ -1,4 +1,4 @@
-import { View } from '@/application/types';
+import { UIVariant, View } from '@/application/types';
import BreadcrumbItem from '@/components/_shared/breadcrumb/BreadcrumbItem';
import { NormalModal } from '@/components/_shared/modal';
import { useMemo } from 'react';
@@ -9,11 +9,13 @@ function BreadcrumbMoreModal({
onClose,
crumbs,
toView,
+ variant,
}: {
open: boolean;
onClose: () => void;
crumbs: View[];
toView?: (viewId: string) => Promise;
+ variant?: UIVariant;
}) {
const { t } = useTranslation();
const title = useMemo(() => {
@@ -52,7 +54,7 @@ function BreadcrumbMoreModal({
}}
>
{index !== 0 && {'-'}
}
-
+
))}
diff --git a/src/components/_shared/breadcrumb/withAppBreadcrumb.tsx b/src/components/_shared/breadcrumb/withAppBreadcrumb.tsx
index 43f4ed13..4904a777 100644
--- a/src/components/_shared/breadcrumb/withAppBreadcrumb.tsx
+++ b/src/components/_shared/breadcrumb/withAppBreadcrumb.tsx
@@ -1,26 +1,87 @@
import { UIVariant } from '@/application/types';
import { BreadcrumbProps } from '@/components/_shared/breadcrumb/Breadcrumb';
import BreadcrumbSkeleton from '@/components/_shared/skeleton/BreadcrumbSkeleton';
-import { useAppHandlers, useBreadcrumb } from '@/components/app/app.hooks';
-import React from 'react';
+import { useAppHandlers, useBreadcrumb, useCurrentWorkspaceId } from '@/components/app/app.hooks';
+import { useCurrentUser, useService } from '@/components/main/app.hooks';
+import { Progress } from '@/components/ui/progress';
+import { ReactComponent as PrivateSpaceIcon } from '@/assets/icons/private-space.svg';
+import { ReactComponent as ShareIcon } from '@/assets/icons/share-to.svg';
+import { ReactComponent as TeamIcon } from '@/assets/icons/team.svg';
+import React, { useEffect, useState } from 'react';
+import { useTranslation } from 'react-i18next';
export function withAppBreadcrumb (Component: React.ComponentType) {
- return function PublishBreadcrumbComponent () {
+ return function AppBreadcrumbComponent () {
const isTrash = window.location.pathname === '/app/trash';
-
const crumbs = useBreadcrumb();
const toView = useAppHandlers().toView;
+ const service = useService();
+ const currentWorkspaceId = useCurrentWorkspaceId();
+ const currentUser = useCurrentUser();
+ const { t } = useTranslation();
+ const [isShared, setIsShared] = useState(false);
+ const [loading, setLoading] = useState(false);
+
+ const isPrivate = crumbs?.some((crumb) => crumb.is_private);
+
+ useEffect(() => {
+ if (!service || !currentWorkspaceId || !currentUser || !crumbs || isTrash) return;
+ const loadShareDetail = async () => {
+ const viewId = crumbs[crumbs.length - 1].view_id;
+ const ancestorViewIds = crumbs.map((crumb) => crumb.view_id);
+
+ try {
+ setLoading(true);
+ const res = await service.getShareDetail(currentWorkspaceId, viewId, ancestorViewIds);
+ const shared = res.shared_with.some((item) => item.email !== currentUser.email);
+
+ setIsShared(shared);
+ } catch (error) {
+ setIsShared(false);
+ } finally {
+ setLoading(false);
+ }
+ };
+
+ void loadShareDetail();
+ }, [service, currentWorkspaceId, currentUser, crumbs, isTrash]);
return (
{!crumbs ?
:
- !isTrash &&
+ !isTrash && (
+
+
+ {!isPrivate && (
+
+
+ {t('teamSpace')}
+
+ )}
+ {isPrivate && (
+
+ {loading &&
}
+ {isShared ? (
+ <>
+
+ {t('share')}
+ >
+ ) : (
+ <>
+
+ {t('private')}
+ >
+ )}
+
+ )}
+
+ )
}
);
};
-}
\ No newline at end of file
+}
diff --git a/src/components/_shared/breadcrumb/withPublishBreadcrumb.tsx b/src/components/_shared/breadcrumb/withPublishBreadcrumb.tsx
index dc2ec5d6..5de1a21e 100644
--- a/src/components/_shared/breadcrumb/withPublishBreadcrumb.tsx
+++ b/src/components/_shared/breadcrumb/withPublishBreadcrumb.tsx
@@ -21,4 +21,4 @@ export function withPublishBreadcrumb (Component: React.ComponentType
);
};
-}
\ No newline at end of file
+}