diff --git a/openmetadata-ui-core-components/src/main/resources/ui/src/components/application/breadcrumbs/breadcrumbs.tsx b/openmetadata-ui-core-components/src/main/resources/ui/src/components/application/breadcrumbs/breadcrumbs.tsx index 1d25b46ea9f7..ac701dfd320a 100644 --- a/openmetadata-ui-core-components/src/main/resources/ui/src/components/application/breadcrumbs/breadcrumbs.tsx +++ b/openmetadata-ui-core-components/src/main/resources/ui/src/components/application/breadcrumbs/breadcrumbs.tsx @@ -77,6 +77,11 @@ export interface BreadcrumbsProps extends HTMLAttributes { * `onAction` for a plain link. */ onAction?: (id: Key) => void; + /** + * Maximum width in pixels for each crumb's label text. Labels longer than + * this truncate with an ellipsis. Omit to never truncate. + */ + maxItemWidth?: number; } const ELLIPSIS_ID = '__breadcrumbs_ellipsis__'; @@ -177,20 +182,22 @@ const Divider = ({ const CrumbLabel = ({ item, size, + maxItemWidth, }: { item: BreadcrumbItemType; size: BreadcrumbsSize; + maxItemWidth?: number; }) => { const Icon = item.icon; return ( - + {Icon && } - {item.label} + + {item.label} + ); }; @@ -241,6 +248,7 @@ export const Breadcrumbs = ({ autoCollapse = false, className, onAction, + maxItemWidth, 'aria-label': ariaLabel = 'Breadcrumb', ...props }: BreadcrumbsProps) => { @@ -327,17 +335,25 @@ export const Breadcrumbs = ({ className={cx(linkClassName, styles[type].link, padding)} href={onAction ? undefined : item.href} onPress={() => onAction?.(item.id)}> - + ) : ( - + )} {!isCurrent && } diff --git a/openmetadata-ui-core-components/src/main/resources/ui/src/components/application/tabs/tabs.tsx b/openmetadata-ui-core-components/src/main/resources/ui/src/components/application/tabs/tabs.tsx index c145b9962fc5..c6edb7e9ac9c 100644 --- a/openmetadata-ui-core-components/src/main/resources/ui/src/components/application/tabs/tabs.tsx +++ b/openmetadata-ui-core-components/src/main/resources/ui/src/components/application/tabs/tabs.tsx @@ -44,24 +44,28 @@ const getTabStyles = ({ }: AriaTabRenderProps) => ({ 'button-brand': cx( 'tw:outline-focus-ring', + isSelected ? 'tw:font-semibold' : 'tw:font-medium', isFocusVisible && 'tw:outline-2 tw:-outline-offset-2', (isSelected || isHovered) && 'tw:bg-brand-primary_alt tw:text-brand-secondary' ), 'button-gray': cx( 'tw:outline-focus-ring', + isSelected ? 'tw:font-semibold' : 'tw:font-medium', isHovered && 'tw:bg-primary_hover tw:text-secondary', isFocusVisible && 'tw:outline-2 tw:-outline-offset-2', isSelected && 'tw:bg-active tw:text-secondary' ), 'button-border': cx( 'tw:outline-focus-ring', + isSelected ? 'tw:font-semibold' : 'tw:font-medium', (isSelected || isHovered) && 'tw:bg-primary_alt tw:text-secondary tw:shadow-sm', isFocusVisible && 'tw:outline-2 tw:-outline-offset-2' ), 'button-minimal': cx( 'tw:rounded-lg tw:outline-focus-ring', + isSelected ? 'tw:font-semibold' : 'tw:font-medium', isHovered && 'tw:text-secondary', isFocusVisible && 'tw:outline-2 tw:-outline-offset-2', isSelected && @@ -69,12 +73,14 @@ const getTabStyles = ({ ), underline: cx( 'tw:rounded-none tw:border-b-2 tw:border-transparent tw:outline-focus-ring', + isSelected ? 'tw:font-semibold' : 'tw:font-medium', (isSelected || isHovered) && 'tw:border-fg-brand-primary_alt tw:text-brand-secondary', isFocusVisible && 'tw:outline-2 tw:-outline-offset-2' ), line: cx( 'tw:rounded-none tw:border-l-2 tw:border-transparent tw:outline-focus-ring', + isSelected ? 'tw:font-semibold' : 'tw:font-medium', (isSelected || isHovered) && 'tw:border-fg-brand-primary_alt tw:text-brand-secondary', isFocusVisible && 'tw:outline-2 tw:-outline-offset-2' @@ -83,20 +89,20 @@ const getTabStyles = ({ const sizes = { sm: { - 'button-brand': 'tw:text-sm tw:font-semibold tw:py-2 tw:px-3', - 'button-gray': 'tw:text-sm tw:font-semibold tw:py-2 tw:px-3', - 'button-border': 'tw:text-sm tw:font-semibold tw:py-2 tw:px-3', - 'button-minimal': 'tw:text-sm tw:font-semibold tw:py-2 tw:px-3', - underline: 'tw:text-sm tw:font-semibold tw:px-1 tw:pb-2.5 tw:pt-0', - line: 'tw:text-sm tw:font-semibold tw:pl-2.5 tw:pr-3 tw:py-0.5', + 'button-brand': 'tw:text-sm tw:py-2 tw:px-3', + 'button-gray': 'tw:text-sm tw:py-2 tw:px-3', + 'button-border': 'tw:text-sm tw:py-2 tw:px-3', + 'button-minimal': 'tw:text-sm tw:py-2 tw:px-3', + underline: 'tw:text-sm tw:px-1 tw:pb-2.5 tw:pt-0', + line: 'tw:text-sm tw:pl-2.5 tw:pr-3 tw:py-0.5', }, md: { - 'button-brand': 'tw:text-md tw:font-semibold tw:py-2.5 tw:px-3', - 'button-gray': 'tw:text-md tw:font-semibold tw:py-2.5 tw:px-3', - 'button-border': 'tw:text-md tw:font-semibold tw:py-2.5 tw:px-3', - 'button-minimal': 'tw:text-md tw:font-semibold tw:py-2.5 tw:px-3', - underline: 'tw:text-md tw:font-semibold tw:px-1 tw:pb-2.5 tw:pt-0', - line: 'tw:text-md tw:font-semibold tw:pr-3.5 tw:pl-3 tw:py-1', + 'button-brand': 'tw:text-md tw:py-2.5 tw:px-3', + 'button-gray': 'tw:text-md tw:py-2.5 tw:px-3', + 'button-border': 'tw:text-md tw:py-2.5 tw:px-3', + 'button-minimal': 'tw:text-md tw:py-2.5 tw:px-3', + underline: 'tw:text-md tw:px-1 tw:pb-2.5 tw:pt-0', + line: 'tw:text-md tw:pr-3.5 tw:pl-3 tw:py-1', }, }; diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ContextCenter/ArchiveView/ArchiveView.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/ContextCenter/ArchiveView/ArchiveView.component.tsx index 3571ec4c1b7b..d67b7ba4a93a 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/ContextCenter/ArchiveView/ArchiveView.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/ContextCenter/ArchiveView/ArchiveView.component.tsx @@ -12,8 +12,10 @@ */ import { - Button, + Box, + ButtonUtility, Card, + Dot, Skeleton, Typography, } from '@openmetadata/ui-core-components'; @@ -28,7 +30,7 @@ import { getShortRelativeTime } from '../../../utils/date-time/DateTimeUtils'; import { ArchiveItem, ArchiveViewProps } from './ArchiveView.interface'; const ArchiveRowSkeleton: FC = () => ( -
+
= ({ item, onDelete, onRestore }) => { const Icon = item.type === 'article' ? File06 : FolderIcon; return ( -
-
+ = ({ item, onDelete, onRestore }) => { item.type === 'article' ? 'tw:text-brand-700' : 'tw:text-purple-500' )} /> -
+ -
- + + {item.name} - + {item.updatedBy && ( - <> + {t('label.archived-by', { name: item.updatedBy })} - {item.updatedAt && ( - <> · {getShortRelativeTime(item.updatedAt)} - )} + + )} + {item.updatedAt && ( + <> + + + {getShortRelativeTime(item.updatedAt)} + )} - {!item.updatedBy && - item.updatedAt && - getShortRelativeTime(item.updatedAt)} - -
+ +
- - + tooltip={t('label.delete')} + onClick={() => onDelete(item)} + />
-
+ ); }; @@ -123,7 +130,7 @@ const ArchiveView: FC = ({ }) => { if (isLoading) { return ( - + {Array.from({ length: 8 }).map((_, idx) => ( ))} @@ -140,9 +147,7 @@ const ArchiveView: FC = ({ } return ( -
+
{data.map((item) => ( = ({ @@ -100,10 +100,8 @@ const ArticleDetailHeader: FC = ({ const { entityRules } = useEntityRules(EntityType.KNOWLEDGE_PAGE); const { currentUser } = useApplicationStore(); const USERId = currentUser?.id ?? ''; - const [copyTooltip, setCopyTooltip] = useState(''); const [isFollowLoading, setIsFollowLoading] = useState(false); const [voteLoading, setVoteLoading] = useState(null); - const { onCopyToClipBoard } = useClipboard(window.location.href); const { preferences: { recentlyViewedQuickLinks }, } = useCurrentUserPreferences(); @@ -192,12 +190,6 @@ const ArticleDetailHeader: FC = ({ navigate(contextCenterClassBase.getArticleVersionPath(fqn, version)); }; - const handleShare = async () => { - await onCopyToClipBoard(); - setCopyTooltip(t('message.link-copy-to-clipboard')); - setTimeout(() => setCopyTooltip(''), 2000); - }; - const handleFollowClick = async () => { setIsFollowLoading(true); await onFollowChange(); @@ -349,7 +341,7 @@ const ArticleDetailHeader: FC = ({
= ({ = ({ @@ -440,7 +432,7 @@ const ArticleDetailHeader: FC = ({
) : ( {t('label.no-entity', { entity: t('label.owner') })} @@ -605,22 +597,13 @@ const ArticleDetailHeader: FC = ({ - - - } - onClick={handleShare} - /> - - + + + {permissions?.Delete && ( @@ -669,8 +652,8 @@ const ArticleDetailHeader: FC = ({ setIsDeleteModalOpen(false)} diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ContextCenter/ContextKnowledgePillarCard/ContextKnowledgePillarCard.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/ContextCenter/ContextKnowledgePillarCard/ContextKnowledgePillarCard.component.tsx index 01e7f341adb8..9ff88eab76d3 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/ContextCenter/ContextKnowledgePillarCard/ContextKnowledgePillarCard.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/ContextCenter/ContextKnowledgePillarCard/ContextKnowledgePillarCard.component.tsx @@ -46,7 +46,8 @@ function RecentItem({ ellipsis as="span" className="tw:min-w-0 tw:flex-1 tw:text-secondary" - size="text-xs"> + size="text-xs" + weight="medium"> {item.title} = ({ as="div" className="tw:text-primary" size="text-sm" - weight="medium"> + weight="semibold"> {title} diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ContextCenter/DocumentStatusBadge/DocumentStatusBadge.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/ContextCenter/DocumentStatusBadge/DocumentStatusBadge.component.tsx index 0b3b9631e37c..cc96ebd9ae82 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/ContextCenter/DocumentStatusBadge/DocumentStatusBadge.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/ContextCenter/DocumentStatusBadge/DocumentStatusBadge.component.tsx @@ -12,7 +12,7 @@ */ import { - Badge, + BadgeWithDot, Tooltip, TooltipTrigger, } from '@openmetadata/ui-core-components'; @@ -85,9 +85,9 @@ const DocumentStatusBadge: FC = ({ } const badge = ( - + {t(config.labelKey)} - + ); return ( diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ContextCenter/DocumentStatusBadge/DocumentStatusBadge.test.tsx b/openmetadata-ui/src/main/resources/ui/src/components/ContextCenter/DocumentStatusBadge/DocumentStatusBadge.test.tsx index a33cf4f04ec1..d9b0d4ab6c45 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/ContextCenter/DocumentStatusBadge/DocumentStatusBadge.test.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/ContextCenter/DocumentStatusBadge/DocumentStatusBadge.test.tsx @@ -16,7 +16,7 @@ import { ProcessingStatus } from '../../../generated/entity/data/contextFile'; import DocumentStatusBadge from './DocumentStatusBadge.component'; jest.mock('@openmetadata/ui-core-components', () => ({ - Badge: jest.fn( + BadgeWithDot: jest.fn( ({ children, color }: { children: React.ReactNode; color: string }) => ( {children} ) diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ContextCenter/DocumentsView/DocumentFolderView.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/ContextCenter/DocumentsView/DocumentFolderView.component.tsx index c909f8ad0dfb..51c5b8ac5bc7 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/ContextCenter/DocumentsView/DocumentFolderView.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/ContextCenter/DocumentsView/DocumentFolderView.component.tsx @@ -168,7 +168,7 @@ const DocumentFolderView = ({
+ + + + + + {stringToHTML(displayName || knowledgePage.name)} + + + + + + + + {formatDate(knowledgePage.updatedAt)} + + + + + + + + + + + diff --git a/openmetadata-ui/src/main/resources/ui/src/components/KnowledgeCenter/KnowledgePagesHierarchy/KnowledgePagesHierarchy.test.tsx b/openmetadata-ui/src/main/resources/ui/src/components/KnowledgeCenter/KnowledgePagesHierarchy/KnowledgePagesHierarchy.test.tsx index 6b033e24cf31..d2b9a3662c12 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/KnowledgeCenter/KnowledgePagesHierarchy/KnowledgePagesHierarchy.test.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/KnowledgeCenter/KnowledgePagesHierarchy/KnowledgePagesHierarchy.test.tsx @@ -191,6 +191,12 @@ jest.mock('rest/knowledgeCenterAPI', () => ({ paging: { limit: 100, offset: 0, total: PageHierarchy.length }, }) ), + getListKnowledgePages: jest.fn().mockImplementation(() => + Promise.resolve({ + data: [], + paging: { limit: 0, offset: 0, total: 42 }, + }) + ), postKnowledgePage: jest.fn().mockImplementation(() => Promise.resolve({ id: 'new-page-id', @@ -256,6 +262,26 @@ describe('KnowledgePagesHierarchy', () => { expect(screen.getAllByTestId('page-icon')).toHaveLength(3); }); + it('should render the total count from getListKnowledgePages, not the hierarchy paging', async () => { + await act(async () => { + render( + , + { wrapper: MemoryRouter } + ); + }); + + expect( + screen.getByText( + (_, element) => + element?.tagName.toLowerCase() === 'span' && + element?.textContent === '42 label.article-plural' + ) + ).toBeInTheDocument(); + }); + it('should render the active node', async () => { await act(async () => { render( diff --git a/openmetadata-ui/src/main/resources/ui/src/components/KnowledgeCenter/KnowledgePagesHierarchy/KnowledgePagesHierarchy.tsx b/openmetadata-ui/src/main/resources/ui/src/components/KnowledgeCenter/KnowledgePagesHierarchy/KnowledgePagesHierarchy.tsx index 0a914eebea59..987548a1df68 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/KnowledgeCenter/KnowledgePagesHierarchy/KnowledgePagesHierarchy.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/KnowledgeCenter/KnowledgePagesHierarchy/KnowledgePagesHierarchy.tsx @@ -62,10 +62,12 @@ import { KnowledgePagesHierarchyRef, MovedEntity, PageHierarchy, + PageType, RecentlyViewedQuickLinks, } from '../../../interface/knowledge-center.interface'; import { deleteKnowledgePage, + getListKnowledgePages, getPageHierarchyFromES, patchKnowledgePage, } from '../../../rest/knowledgeCenterAPI'; @@ -133,6 +135,8 @@ const KnowledgePagesHierarchy = forwardRef< const [deletePage, setDeletePage] = useState(); const [isDeleting, setIsDeleting] = useState(false); const [isExpandingAll, setIsExpandingAll] = useState(false); + const [knowledgePagesTotalCount, setKnowledgePagesTotalCount] = + useState(0); const [movedPage, setMovedPage] = useState(); const [isMovingPage, setIsMovingPage] = useState(false); @@ -232,6 +236,18 @@ const KnowledgePagesHierarchy = forwardRef< } }, [knowledgePageHierarchy]); + const fetchKnowledgePagesTotalCount = useCallback(async () => { + try { + const { paging } = await getListKnowledgePages({ + limit: 0, + pageType: PageType.ARTICLE, + }); + setKnowledgePagesTotalCount(paging.total); + } catch (error) { + showErrorToast(error as AxiosError); + } + }, []); + const fetchKnowledgePageHierarchy = async ( setLoading = true, isPaginationLoading = false, @@ -360,6 +376,7 @@ const KnowledgePagesHierarchy = forwardRef< onPageDelete?.(deletedPages); await getResourceLimit('knowledgeCenter', true, true); + await fetchKnowledgePagesTotalCount(); updateKnowledgeCenterRecentViewed( recentlyViewed.filter( @@ -381,7 +398,13 @@ const KnowledgePagesHierarchy = forwardRef< navigate(homeRoute ?? contextCenterClassBase.getArticlesListPath()); } }, - [knowledgePageHierarchy, onPageDelete, activeKey, activePage] + [ + knowledgePageHierarchy, + onPageDelete, + activeKey, + activePage, + fetchKnowledgePagesTotalCount, + ] ); const handleMovePage = async (movedPageData: MovedEntity) => { @@ -603,14 +626,18 @@ const KnowledgePagesHierarchy = forwardRef< ); useImperativeHandle(ref, () => ({ - fetchKnowledgePageHierarchy: (forceRefresh = false) => - fetchKnowledgePageHierarchy( + fetchKnowledgePageHierarchy: async (forceRefresh = false) => { + await fetchKnowledgePageHierarchy( true, false, 0, KNOWLEDGE_CENTER_PAGINATION_LIMIT, forceRefresh - ), + ); + if (forceRefresh) { + await fetchKnowledgePagesTotalCount(); + } + }, })); useEffect(() => { @@ -623,6 +650,10 @@ const KnowledgePagesHierarchy = forwardRef< } }, [hash, fqn]); + useEffect(() => { + fetchKnowledgePagesTotalCount(); + }, [fetchKnowledgePagesTotalCount]); + useEffect(() => { if (activeKey) { setExpandedKeys((prev) => @@ -691,7 +722,7 @@ const KnowledgePagesHierarchy = forwardRef< - {paginationState.paging.total ?? 0} {t('label.article-plural')} + {knowledgePagesTotalCount} {t('label.article-plural')}
@@ -772,9 +803,15 @@ const KnowledgePagesHierarchy = forwardRef< setDeletePage(undefined)} onDelete={async () => { @@ -783,7 +820,11 @@ const KnowledgePagesHierarchy = forwardRef< } setIsDeleting(true); try { - await deleteKnowledgePage(deletePage.id); + if (deletePage.pageType === PageType.QUICK_LINK) { + await deleteKnowledgePage(deletePage.id, false, true); + } else { + await deleteKnowledgePage(deletePage.id); + } await handleAfterDeletePage(deletePage); setDeletePage(undefined); } catch (error) { diff --git a/openmetadata-ui/src/main/resources/ui/src/components/KnowledgeCenter/TitleComponent/TitleComponent.tsx b/openmetadata-ui/src/main/resources/ui/src/components/KnowledgeCenter/TitleComponent/TitleComponent.tsx index 8d2e44a34c5a..c27f156046c8 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/KnowledgeCenter/TitleComponent/TitleComponent.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/KnowledgeCenter/TitleComponent/TitleComponent.tsx @@ -47,6 +47,15 @@ export const TitleComponent = forwardRef( const [titleValue, setTitleValue] = useState(value); const textAreaRef = useRef(null); + // Re-sync from the prop when it changes externally (e.g. after a save + // resolves or the page is refetched) so the input never drifts from the + // persisted displayName. Safe to do unconditionally because the parent + // only updates `value` once typing has settled (debounced save / fetch), + // never on every keystroke. + useEffect(() => { + setTitleValue(value); + }, [value]); + useAutoSizeTextArea('title-input', textAreaRef.current, titleValue); // Defer focus by 100ms to ensure TipTap/ProseMirror (sibling BlockEditor) has diff --git a/openmetadata-ui/src/main/resources/ui/src/components/common/DeleteModal/DeleteModal.tsx b/openmetadata-ui/src/main/resources/ui/src/components/common/DeleteModal/DeleteModal.tsx index 3859f9abb3a2..b1afc54d8623 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/common/DeleteModal/DeleteModal.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/common/DeleteModal/DeleteModal.tsx @@ -52,7 +52,7 @@ export const DeleteModal = ({
- + {t('label.delete')} {entityTitle} diff --git a/openmetadata-ui/src/main/resources/ui/src/components/common/HeaderBreadcrumb/HeaderBreadcrumb.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/common/HeaderBreadcrumb/HeaderBreadcrumb.component.tsx index 7057af69df03..fd3e2f338973 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/common/HeaderBreadcrumb/HeaderBreadcrumb.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/common/HeaderBreadcrumb/HeaderBreadcrumb.component.tsx @@ -74,6 +74,7 @@ const HeaderBreadcrumb: FC = ({ data-testid="breadcrumb" divider={divider} items={allItems} + maxItemWidth={256} size={size} type={type} onAction={handleAction} diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/ar-sa.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/ar-sa.json index b1949c089049..abae856669f9 100644 --- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/ar-sa.json +++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/ar-sa.json @@ -170,6 +170,7 @@ "arrow-symbol": "→", "article": "مقال", "article-amp-quick-link-plural": "المقالات والروابط السريعة", + "article-lowercase": "article", "article-plural": "المقالات", "as-lowercase": "كـ", "as-of-date": "اعتبارًا من {{date}}", @@ -695,6 +696,7 @@ "doc-plural-lowercase": "المستندات", "doc-store": "متجر المستندات", "document": "مستند", + "document-lowercase": "document", "document-plural": "المستندات", "documentation": "التوثيق", "documentation-lowercase": "التوثيق", @@ -3456,6 +3458,7 @@ "sinks": "المصارف", "size-evolution-description": "تطور حجم الأصول في المنظمة.", "smart-sampling-hint": "يُحسِّن الموارد بناءً على حجم البيانات", + "soft-delete-archive-message": "سيؤدي هذا الإجراء إلى تعطيل الوصول إلى {{entity}}. يمكنك استعادته لاحقًا من الأرشيف.", "soft-delete-message-for-entity": "سيؤدي الحذف الناعم (Soft deleting) إلى إلغاء تنشيط {{entity}}. سيؤدي هذا إلى تعطيل أي عمليات اكتشاف أو قراءة أو كتابة على {{entity}}.", "soft-delete-message-for-n-entities": "سيؤدي الحذف الناعم إلى إلغاء تنشيط {{count}} {{entity}}. سيؤدي هذا إلى تعطيل أي عمليات اكتشاف أو قراءة أو كتابة عليها.", "something-went-wrong": "حدث خطأ ما", diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/de-de.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/de-de.json index 93a9dc70f516..6d8ae93e0d49 100644 --- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/de-de.json +++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/de-de.json @@ -170,6 +170,7 @@ "arrow-symbol": "→", "article": "Artikel", "article-amp-quick-link-plural": "Artikel & Schnellzugriffe", + "article-lowercase": "article", "article-plural": "Artikel", "as-lowercase": "als", "as-of-date": "Stand {{date}}", @@ -695,6 +696,7 @@ "doc-plural-lowercase": "dokumente", "doc-store": "Dokumentenspeicher", "document": "Dokument", + "document-lowercase": "document", "document-plural": "Unterlagen", "documentation": "Dokumentation", "documentation-lowercase": "dokumentation", @@ -3456,6 +3458,7 @@ "sinks": "Senken", "size-evolution-description": "Größenentwicklung der Assets in der Organisation.", "smart-sampling-hint": "Optimiert Ressourcen basierend auf der Datengröße", + "soft-delete-archive-message": "Diese Aktion deaktiviert den Zugriff auf {{entity}}. Sie können es später aus dem Archiv wiederherstellen.", "soft-delete-message-for-entity": "Durch das Soft-Löschen wird {{entity}} deaktiviert. Dadurch werden alle Entdeckungs-, Lese- oder Schreibvorgänge auf {{entity}} deaktiviert.", "soft-delete-message-for-n-entities": "Das vorläufige Löschen deaktiviert diese {{count}} {{entity}}. Dadurch werden alle Erkennungs-, Lese- oder Schreibvorgänge für sie deaktiviert.", "something-went-wrong": "Etwas ist schiefgelaufen", diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/en-us.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/en-us.json index c916f82e45cb..eecb9b0ca5f4 100644 --- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/en-us.json +++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/en-us.json @@ -170,6 +170,7 @@ "arrow-symbol": "→", "article": "Article", "article-amp-quick-link-plural": "Articles & Quick Links", + "article-lowercase": "article", "article-plural": "Articles", "as-lowercase": "as", "as-of-date": "As of {{date}}", @@ -695,6 +696,7 @@ "doc-plural-lowercase": "docs", "doc-store": "Doc Store", "document": "Document", + "document-lowercase": "document", "document-plural": "Documents", "documentation": "Documentation", "documentation-lowercase": "documentation", @@ -3456,6 +3458,7 @@ "sinks": "Sinks", "size-evolution-description": "Size evolution of assets in organization.", "smart-sampling-hint": "Optimizes resources based on data size", + "soft-delete-archive-message": "This action will disable access to the {{entity}}. You can restore it later from Archives.", "soft-delete-message-for-entity": "Soft deleting will deactivate the {{entity}}. This will disable any discovery, read or write operations on {{entity}}.", "soft-delete-message-for-n-entities": "Soft deleting will deactivate these {{count}} {{entity}}. This will disable any discovery, read or write operations on them.", "something-went-wrong": "Something went wrong", diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/es-es.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/es-es.json index 043e27a35260..6f95472626aa 100644 --- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/es-es.json +++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/es-es.json @@ -170,6 +170,7 @@ "arrow-symbol": "→", "article": "Artículo", "article-amp-quick-link-plural": "Artículos y enlaces rápidos", + "article-lowercase": "article", "article-plural": "Artículos", "as-lowercase": "como", "as-of-date": "A fecha de {{date}}", @@ -695,6 +696,7 @@ "doc-plural-lowercase": "documentos", "doc-store": "Almacén de Documentos", "document": "Documento", + "document-lowercase": "document", "document-plural": "Documentos", "documentation": "Documentación", "documentation-lowercase": "documentación", @@ -3456,6 +3458,7 @@ "sinks": "Receptores", "size-evolution-description": "Evolución del tamaño de los activos en la organización.", "smart-sampling-hint": "Optimiza los recursos según el tamaño de los datos", + "soft-delete-archive-message": "Esta acción deshabilitará el acceso a {{entity}}. Podrás restaurarlo más tarde desde Archivos.", "soft-delete-message-for-entity": "La eliminación suave desactivará la {{entity}}. Esto deshabilitará cualquier operación de descubrimiento, lectura o escritura en {{entity}}.", "soft-delete-message-for-n-entities": "La eliminación temporal desactivará estos {{count}} {{entity}}. Esto deshabilitará cualquier operación de descubrimiento, lectura o escritura sobre ellos.", "something-went-wrong": "Algo salió mal", diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/fr-fr.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/fr-fr.json index bd594a5e8806..abd0c2cca3e0 100644 --- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/fr-fr.json +++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/fr-fr.json @@ -170,6 +170,7 @@ "arrow-symbol": "→", "article": "Article", "article-amp-quick-link-plural": "Articles et liens rapides", + "article-lowercase": "article", "article-plural": "Articles", "as-lowercase": "en tant que", "as-of-date": "Au {{date}}", @@ -695,6 +696,7 @@ "doc-plural-lowercase": "documents", "doc-store": "Stockage de Documents", "document": "Document", + "document-lowercase": "document", "document-plural": "Documents", "documentation": "Documentation", "documentation-lowercase": "documentation", @@ -3456,6 +3458,7 @@ "sinks": "Récepteurs", "size-evolution-description": "Evolution de la taille des actifs dans l'organisation.", "smart-sampling-hint": "Optimise les ressources en fonction de la taille des données", + "soft-delete-archive-message": "Cette action désactivera l'accès à {{entity}}. Vous pourrez le restaurer plus tard depuis les Archives.", "soft-delete-message-for-entity": "La suppression logique désactivera le {{entity}}. Cela désactivera toute découverte, lecture ou écriture sur le {{entity}}.", "soft-delete-message-for-n-entities": "La suppression logique désactivera ces {{count}} {{entity}}. Cela désactivera toutes les opérations de découverte, de lecture ou d'écriture sur eux.", "something-went-wrong": "Quelque chose s'est mal passé", diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/gl-es.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/gl-es.json index 38bc5c0d1a8b..2f275d73f4da 100644 --- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/gl-es.json +++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/gl-es.json @@ -170,6 +170,7 @@ "arrow-symbol": "→", "article": "Artigo", "article-amp-quick-link-plural": "Artigos e ligazóns rápidas", + "article-lowercase": "article", "article-plural": "Artigos", "as-lowercase": "como", "as-of-date": "A data de {{date}}", @@ -695,6 +696,7 @@ "doc-plural-lowercase": "documentos", "doc-store": "Almacén de Documentos", "document": "Documento", + "document-lowercase": "document", "document-plural": "Documentos", "documentation": "Documentación", "documentation-lowercase": "documentación", @@ -3456,6 +3458,7 @@ "sinks": "Sumidoiros", "size-evolution-description": "Evolución do tamaño dos activos na organización.", "smart-sampling-hint": "Optimiza os recursos segundo o tamaño dos datos", + "soft-delete-archive-message": "Esta acción desactivará o acceso a {{entity}}. Poderás restauralo máis tarde desde Arquivos.", "soft-delete-message-for-entity": "A eliminación suave desactivará {{entity}}. Isto desactivará calquera operación de descubrimento, lectura ou escritura en {{entity}}.", "soft-delete-message-for-n-entities": "A eliminación suave desactivará estes {{count}} {{entity}}. Isto desactivará calquera operación de descubrimento, lectura ou escritura sobre eles.", "something-went-wrong": "Algo saíu mal", diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/he-he.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/he-he.json index 5ee75a557a10..3d316a2bb3c7 100644 --- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/he-he.json +++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/he-he.json @@ -170,6 +170,7 @@ "arrow-symbol": "→", "article": "מאמר", "article-amp-quick-link-plural": "מאמרים וקישורים מהירים", + "article-lowercase": "article", "article-plural": "מאמרים", "as-lowercase": "כמו", "as-of-date": "נכון ל-{{date}}", @@ -695,6 +696,7 @@ "doc-plural-lowercase": "מסמכים", "doc-store": "מאגר מסמכים", "document": "מסמך", + "document-lowercase": "document", "document-plural": "מסמכים", "documentation": "תיעוד", "documentation-lowercase": "תיעוד", @@ -3456,6 +3458,7 @@ "sinks": "כיורים", "size-evolution-description": "אבולוציה של גודל הנכסים בארגון.", "smart-sampling-hint": "מייעל משאבים בהתאם לגודל הנתונים", + "soft-delete-archive-message": "פעולה זו תשבית את הגישה אל {{entity}}. תוכל לשחזר אותו מאוחר יותר מהארכיון.", "soft-delete-message-for-entity": "מחיקה רכה תשבית את {{entity}}. הפעולה תשבית כל קריאה או כתיבת הפעולות על {{entity}}.", "soft-delete-message-for-n-entities": "מחיקה רכה תשבית את {{count}} {{entity}} אלה. פעולה זו תשבית כל פעולות גילוי, קריאה או כתיבה עליהם.", "something-went-wrong": "משהו השתבש", diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/ja-jp.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/ja-jp.json index 7ac704cf349d..648102fdb90f 100644 --- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/ja-jp.json +++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/ja-jp.json @@ -170,6 +170,7 @@ "arrow-symbol": "→", "article": "記事", "article-amp-quick-link-plural": "記事とクイックリンク", + "article-lowercase": "article", "article-plural": "記事", "as-lowercase": "として", "as-of-date": "{{date}} 時点", @@ -695,6 +696,7 @@ "doc-plural-lowercase": "ドキュメント", "doc-store": "ドキュメントストア", "document": "ドキュメント", + "document-lowercase": "document", "document-plural": "書類", "documentation": "ドキュメント", "documentation-lowercase": "ドキュメント", @@ -3456,6 +3458,7 @@ "sinks": "シンク", "size-evolution-description": "組織内アセットのサイズの推移。", "smart-sampling-hint": "データサイズに基づいてリソースを最適化します", + "soft-delete-archive-message": "この操作により、{{entity}}へのアクセスが無効になります。後でアーカイブから復元できます。", "soft-delete-message-for-entity": "ソフトデリートは{{entity}}を非アクティブ化します。これにより、データの探索や{{entity}}に対する読み取りおよび書き込み操作が無効になります。", "soft-delete-message-for-n-entities": "ソフト削除すると、これらの {{count}} 件の{{entity}}が無効化されます。これにより、それらに対する検出、読み取り、書き込みの操作が無効になります。", "something-went-wrong": "問題が発生しました。", diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/ko-kr.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/ko-kr.json index 1920ca388796..c46f5472fe99 100644 --- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/ko-kr.json +++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/ko-kr.json @@ -170,6 +170,7 @@ "arrow-symbol": "→", "article": "기사", "article-amp-quick-link-plural": "문서 및 빠른 링크", + "article-lowercase": "article", "article-plural": "문서", "as-lowercase": "로서", "as-of-date": "{{date}} 기준", @@ -695,6 +696,7 @@ "doc-plural-lowercase": "문서들", "doc-store": "문서 저장소", "document": "문서", + "document-lowercase": "document", "document-plural": "서류", "documentation": "문서화", "documentation-lowercase": "문서화", @@ -3456,6 +3458,7 @@ "sinks": "싱크", "size-evolution-description": "조직의 자산 크기 변화.", "smart-sampling-hint": "데이터 크기에 따라 리소스를 최적화합니다", + "soft-delete-archive-message": "이 작업은 {{entity}}에 대한 액세스를 비활성화합니다. 나중에 보관함에서 복원할 수 있습니다.", "soft-delete-message-for-entity": "소프트 삭제는 {{entity}}를 비활성화합니다. 이는 {{entity}}에 대한 모든 검색, 읽기 또는 쓰기 작업을 비활성화합니다.", "soft-delete-message-for-n-entities": "소프트 삭제하면 {{count}}개의 {{entity}}이(가) 비활성화됩니다. 이렇게 하면 해당 항목에 대한 검색, 읽기 또는 쓰기 작업이 비활성화됩니다.", "something-went-wrong": "문제가 발생했습니다", diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/mr-in.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/mr-in.json index ddc04ca0309e..68a707c4331d 100644 --- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/mr-in.json +++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/mr-in.json @@ -170,6 +170,7 @@ "arrow-symbol": "→", "article": "लेख", "article-amp-quick-link-plural": "लेख आणि द्रुत दुवे", + "article-lowercase": "article", "article-plural": "लेख", "as-lowercase": "जसे", "as-of-date": "{{date}} पर्यंत", @@ -695,6 +696,7 @@ "doc-plural-lowercase": "दस्तऐवज", "doc-store": "दस्तावेज स्टोर", "document": "दस्तऐवज", + "document-lowercase": "document", "document-plural": "दस्तऐवज", "documentation": "दस्तऐवजीकरण", "documentation-lowercase": "दस्तऐवजीकरण", @@ -3456,6 +3458,7 @@ "sinks": "सिंक", "size-evolution-description": "संस्थेतील ॲसेट्सच्या आकाराची उत्क्रांती.", "smart-sampling-hint": "डेटाच्या आकारावर आधारित संसाधने अनुकूलित करते", + "soft-delete-archive-message": "या क्रियेमुळे {{entity}} वरील प्रवेश अक्षम होईल. आपण नंतर ते संग्रहणातून पुनर्संचयित करू शकता.", "soft-delete-message-for-entity": "सॉफ्ट डिलीट केल्याने {{entity}} निष्क्रिय होईल. हे {{entity}} वर कोणतीही शोध, वाचन किंवा लेखन ऑपरेशन्स अक्षम करेल.", "soft-delete-message-for-n-entities": "सॉफ्ट डिलीट केल्याने हे {{count}} {{entity}} निष्क्रिय होतील. यामुळे त्यांच्यावरील कोणतेही शोध, वाचन किंवा लेखन ऑपरेशन अक्षम होतील.", "something-went-wrong": "काहीतरी चुकले", diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/nl-nl.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/nl-nl.json index 9b40a413493d..52594dbd837f 100644 --- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/nl-nl.json +++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/nl-nl.json @@ -170,6 +170,7 @@ "arrow-symbol": "→", "article": "Artikel", "article-amp-quick-link-plural": "Artikelen en snelkoppelingen", + "article-lowercase": "article", "article-plural": "Artikelen", "as-lowercase": "als", "as-of-date": "Per {{date}}", @@ -695,6 +696,7 @@ "doc-plural-lowercase": "documentatie", "doc-store": "Doc Store", "document": "Document", + "document-lowercase": "document", "document-plural": "Documenten", "documentation": "Documentatie", "documentation-lowercase": "documentatie", @@ -3456,6 +3458,7 @@ "sinks": "Uitvoerkanalen", "size-evolution-description": "Ontwikkeling assethoeveelheid in de organisatie.", "smart-sampling-hint": "Optimaliseert resources op basis van gegevensgrootte", + "soft-delete-archive-message": "Deze actie schakelt de toegang tot {{entity}} uit. U kunt het later herstellen vanuit Archieven.", "soft-delete-message-for-entity": "Zacht verwijderen zal de {{entity}} deactiveren. Hierdoor worden alle ontdekkings-, lees- of schrijfoperaties op {{entity}} uitgeschakeld.", "soft-delete-message-for-n-entities": "Zacht verwijderen deactiveert deze {{count}} {{entity}}. Dit schakelt alle ontdekkings-, lees- of schrijfbewerkingen op hen uit.", "something-went-wrong": "Er is iets misgegaan", diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/pr-pr.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/pr-pr.json index 0ebd2fe6762a..bfb1850da1bb 100644 --- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/pr-pr.json +++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/pr-pr.json @@ -170,6 +170,7 @@ "arrow-symbol": "→", "article": "مقاله", "article-amp-quick-link-plural": "مقالات و پیوندهای سریع", + "article-lowercase": "article", "article-plural": "مقالات", "as-lowercase": "به عنوان", "as-of-date": "از تاریخ {{date}}", @@ -695,6 +696,7 @@ "doc-plural-lowercase": "مستندات", "doc-store": "ذخیره‌ساز اسناد", "document": "سند", + "document-lowercase": "document", "document-plural": "اسناد", "documentation": "مستندات", "documentation-lowercase": "مستندات", @@ -3456,6 +3458,7 @@ "sinks": "مقاصد", "size-evolution-description": "تحول اندازه دارایی‌ها در سازمان.", "smart-sampling-hint": "Optimizes yer resources based on the size o' yer data, arrr", + "soft-delete-archive-message": "Esta ação irá desativar o acesso a {{entity}}. Você poderá restaurá-lo mais tarde a partir de Arquivos.", "soft-delete-message-for-entity": "حذف نرم، {{entity}} را غیرفعال می‌کند. این اقدام هرگونه عملیات کشف، خواندن یا نوشتن روی {{entity}} را غیرفعال خواهد کرد.", "soft-delete-message-for-n-entities": "Soft deleting will deactivate these {{count}} {{entity}}. This will disable any discovery, read or write operations on them.", "something-went-wrong": "یک خطا رخ داده است.", diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-br.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-br.json index ecbe90691914..3ab7f6bd46f2 100644 --- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-br.json +++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-br.json @@ -170,6 +170,7 @@ "arrow-symbol": "→", "article": "Artigo", "article-amp-quick-link-plural": "Artigos e links rápidos", + "article-lowercase": "article", "article-plural": "Artigos", "as-lowercase": "como", "as-of-date": "Em {{date}}", @@ -695,6 +696,7 @@ "doc-plural-lowercase": "documentos", "doc-store": "Armazenamento de Documentos", "document": "Documento", + "document-lowercase": "document", "document-plural": "Documentos", "documentation": "Documentação", "documentation-lowercase": "documentação", @@ -3456,6 +3458,7 @@ "sinks": "Destinos", "size-evolution-description": "Evolução do tamanho dos ativos na organização.", "smart-sampling-hint": "Otimiza recursos com base no tamanho dos dados", + "soft-delete-archive-message": "Esta ação irá desativar o acesso a {{entity}}. Você poderá restaurá-lo mais tarde a partir de Arquivos.", "soft-delete-message-for-entity": "A exclusão suave desativará o {{entity}}. Isso desabilitará qualquer operação de descoberta, leitura ou gravação no {{entity}}.", "soft-delete-message-for-n-entities": "A exclusão suave desativará estes {{count}} {{entity}}. Isso desabilitará quaisquer operações de descoberta, leitura ou escrita sobre eles.", "something-went-wrong": "Algo deu errado", diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-pt.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-pt.json index ea6303702d31..1dec74fb3252 100644 --- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-pt.json +++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-pt.json @@ -170,6 +170,7 @@ "arrow-symbol": "→", "article": "Artigo", "article-amp-quick-link-plural": "Artigos e ligações rápidas", + "article-lowercase": "article", "article-plural": "Artigos", "as-lowercase": "como", "as-of-date": "Em {{date}}", @@ -695,6 +696,7 @@ "doc-plural-lowercase": "documentos", "doc-store": "Armazenamento de Documentos", "document": "Documento", + "document-lowercase": "document", "document-plural": "Documentos", "documentation": "Documentação", "documentation-lowercase": "documentação", @@ -3456,6 +3458,7 @@ "sinks": "Destinos", "size-evolution-description": "Evolução do tamanho dos ativos na organização.", "smart-sampling-hint": "Otimiza os recursos com base no tamanho dos dados", + "soft-delete-archive-message": "Esta ação irá desativar o acesso a {{entity}}. Pode restaurá-lo mais tarde a partir de Arquivos.", "soft-delete-message-for-entity": "A exclusão suave desativará o {{entity}}. Isso desabilitará qualquer operação de descoberta, leitura ou gravação no {{entity}}.", "soft-delete-message-for-n-entities": "A eliminação suave irá desativar estes {{count}} {{entity}}. Isto irá desativar quaisquer operações de descoberta, leitura ou escrita sobre eles.", "something-went-wrong": "Algo deu errado", diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/ru-ru.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/ru-ru.json index bb5afbb6e0fc..0e3b9ee6214b 100644 --- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/ru-ru.json +++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/ru-ru.json @@ -170,6 +170,7 @@ "arrow-symbol": "→", "article": "Статья", "article-amp-quick-link-plural": "Статьи и быстрые ссылки", + "article-lowercase": "article", "article-plural": "Статьи", "as-lowercase": "как", "as-of-date": "По состоянию на {{date}}", @@ -695,6 +696,7 @@ "doc-plural-lowercase": "документы", "doc-store": "Хранилище документов", "document": "Документ", + "document-lowercase": "document", "document-plural": "Документы", "documentation": "Документация", "documentation-lowercase": "документация", @@ -3456,6 +3458,7 @@ "sinks": "Приёмники", "size-evolution-description": "Размер эволюции объектов в организации.", "smart-sampling-hint": "Оптимизирует ресурсы в зависимости от объёма данных", + "soft-delete-archive-message": "Это действие отключит доступ к {{entity}}. Вы сможете восстановить его позже из Архива.", "soft-delete-message-for-entity": "Мягкое удаление деактивирует объект «{{entity}}». Обнаружение объекта, чтение или запись его данных отключатся.", "soft-delete-message-for-n-entities": "Мягкое удаление деактивирует {{count}} {{entity}}. Это отключит все операции обнаружения, чтения или записи для них.", "something-went-wrong": "Что-то пошло не так", diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/sv-se.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/sv-se.json index f76fb74a93df..81652827f995 100644 --- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/sv-se.json +++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/sv-se.json @@ -170,6 +170,7 @@ "arrow-symbol": "→", "article": "Artikel", "article-amp-quick-link-plural": "Artiklar och snabblänkar", + "article-lowercase": "article", "article-plural": "Artiklar", "as-lowercase": "som", "as-of-date": "As of {{date}}", @@ -695,6 +696,7 @@ "doc-plural-lowercase": "dokument", "doc-store": "Dokumentlager", "document": "Dokument", + "document-lowercase": "document", "document-plural": "Dokument", "documentation": "Dokumentation", "documentation-lowercase": "dokumentation", @@ -3456,6 +3458,7 @@ "sinks": "Sänkor", "size-evolution-description": "Storleksutveckling av tillgångar i organisationen.", "smart-sampling-hint": "Optimerar resurser baserat på datastorlek", + "soft-delete-archive-message": "Den här åtgärden inaktiverar åtkomsten till {{entity}}. Du kan återställa det senare från Arkiv.", "soft-delete-message-for-entity": "Mjuk borttagning inaktiverar {{entity}}. Detta inaktiverar all upptäckt, läs- eller skrivoperationer på {{entity}}.", "soft-delete-message-for-n-entities": "Mjuk radering inaktiverar dessa {{count}} {{entity}}. Det inaktiverar all sökning, läs- och skrivoperationer på dem.", "something-went-wrong": "Något gick fel", diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/th-th.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/th-th.json index 6e3a7e7912a6..0d046fb20b2f 100644 --- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/th-th.json +++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/th-th.json @@ -170,6 +170,7 @@ "arrow-symbol": "→", "article": "บทความ", "article-amp-quick-link-plural": "บทความและลิงก์ด่วน", + "article-lowercase": "article", "article-plural": "บทความ", "as-lowercase": "เป็น", "as-of-date": "ณ {{date}}", @@ -695,6 +696,7 @@ "doc-plural-lowercase": "เอกสาร", "doc-store": "ที่เก็บเอกสาร", "document": "เอกสาร", + "document-lowercase": "document", "document-plural": "เอกสาร", "documentation": "เอกสารคู่มือ", "documentation-lowercase": "เอกสารคู่มือ", @@ -3456,6 +3458,7 @@ "sinks": "ซิงค์", "size-evolution-description": "การพัฒนาขนาดของสินทรัพย์ในองค์กร", "smart-sampling-hint": "เพิ่มประสิทธิภาพทรัพยากรตามขนาดของข้อมูล", + "soft-delete-archive-message": "การดำเนินการนี้จะปิดการเข้าถึง {{entity}} คุณสามารถกู้คืนได้ภายหลังจากที่เก็บถาวร", "soft-delete-message-for-entity": "การลบแบบนุ่มนวลจะทำให้ {{entity}} ถูกปิดการใช้งาน ซึ่งจะปิดการค้นหา, อ่าน หรือการเขียนข้อมูลใน {{entity}}", "soft-delete-message-for-n-entities": "การลบแบบ Soft Delete จะปิดการใช้งาน {{count}} {{entity}} เหล่านี้ ซึ่งจะปิดการใช้งานการค้นหา การอ่าน หรือการเขียนทั้งหมดบนรายการเหล่านั้น", "something-went-wrong": "เกิดข้อผิดพลาดบางอย่าง", diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/tr-tr.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/tr-tr.json index 9b824138eea2..205817b5f77c 100644 --- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/tr-tr.json +++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/tr-tr.json @@ -170,6 +170,7 @@ "arrow-symbol": "→", "article": "Makale", "article-amp-quick-link-plural": "Makaleler ve Hızlı Bağlantılar", + "article-lowercase": "article", "article-plural": "Makaleler", "as-lowercase": "olarak", "as-of-date": "{{date}} itibarıyla", @@ -695,6 +696,7 @@ "doc-plural-lowercase": "belgeler", "doc-store": "Doküman Deposu", "document": "Belge", + "document-lowercase": "document", "document-plural": "Belgeler", "documentation": "Belgelendirme", "documentation-lowercase": "belgelendirme", @@ -3456,6 +3458,7 @@ "sinks": "Havuzlar", "size-evolution-description": "Kuruluştaki varlıkların boyut evrimi.", "smart-sampling-hint": "Kaynakları veri boyutuna göre optimize eder", + "soft-delete-archive-message": "Bu işlem {{entity}} öğesine erişimi devre dışı bırakacaktır. Daha sonra Arşivler'den geri yükleyebilirsiniz.", "soft-delete-message-for-entity": "Geçici silme işlemi, {{entity}} öğesini devre dışı bırakacaktır. Bu, {{entity}} üzerindeki tüm keşif, okuma veya yazma işlemlerini devre dışı bırakacaktır.", "soft-delete-message-for-n-entities": "Geçici silme, bu {{count}} {{entity}} öğesini devre dışı bırakacak. Bu, bunlar üzerindeki tüm keşif, okuma veya yazma işlemlerini devre dışı bırakacaktır.", "something-went-wrong": "Bir şeyler ters gitti", diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-cn.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-cn.json index f7bf8898f058..83a9c0320211 100644 --- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-cn.json +++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-cn.json @@ -170,6 +170,7 @@ "arrow-symbol": "→", "article": "文章", "article-amp-quick-link-plural": "文章和快捷链接", + "article-lowercase": "article", "article-plural": "文章", "as-lowercase": "作为", "as-of-date": "截至 {{date}}", @@ -695,6 +696,7 @@ "doc-plural-lowercase": "文档", "doc-store": "文档存储", "document": "文档", + "document-lowercase": "document", "document-plural": "文件", "documentation": "文档", "documentation-lowercase": "文档", @@ -3456,6 +3458,7 @@ "sinks": "接收器", "size-evolution-description": "组织中资产规模的变化", "smart-sampling-hint": "根据数据大小优化资源", + "soft-delete-archive-message": "此操作将禁用对 {{entity}} 的访问。您可以稍后从存档中将其恢复。", "soft-delete-message-for-entity": "软删除将停用{{entity}}, 这将禁用{{entity}}上的任何发现、读取或写入操作", "soft-delete-message-for-n-entities": "软删除将停用这 {{count}} 个{{entity}}。这将禁止对其进行任何发现、读取或写入操作。", "something-went-wrong": "出现了一些问题", diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-tw.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-tw.json index 8384202d1516..db0298235179 100644 --- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-tw.json +++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-tw.json @@ -170,6 +170,7 @@ "arrow-symbol": "→", "article": "文章", "article-amp-quick-link-plural": "文章與快速連結", + "article-lowercase": "article", "article-plural": "文章", "as-lowercase": "作為", "as-of-date": "截至 {{date}}", @@ -695,6 +696,7 @@ "doc-plural-lowercase": "文件", "doc-store": "文件儲存", "document": "文件", + "document-lowercase": "document", "document-plural": "文件", "documentation": "文件", "documentation-lowercase": "文件", @@ -3456,6 +3458,7 @@ "sinks": "接收器", "size-evolution-description": "組織中資產的大小演進。", "smart-sampling-hint": "根據資料大小最佳化資源", + "soft-delete-archive-message": "此操作將停用對 {{entity}} 的存取權限。您稍後可以從封存中還原它。", "soft-delete-message-for-entity": "軟刪除將停用 {{entity}}。這將停用對 {{entity}} 的任何探索、讀取或寫入操作。", "soft-delete-message-for-n-entities": "軟刪除將停用這 {{count}} 個{{entity}}。這將停用對其的任何探索、讀取或寫入操作。", "something-went-wrong": "發生錯誤", diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/ContextCenterPage/ContextCenterArchivePage/ContextCenterArchivePage.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/ContextCenterPage/ContextCenterArchivePage/ContextCenterArchivePage.tsx index 442524d6e4f1..583df5a84da9 100644 --- a/openmetadata-ui/src/main/resources/ui/src/pages/ContextCenterPage/ContextCenterArchivePage/ContextCenterArchivePage.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/pages/ContextCenterPage/ContextCenterArchivePage/ContextCenterArchivePage.tsx @@ -11,14 +11,10 @@ * limitations under the License. */ -import { - Badge, - Card, - Tabs, - Typography, -} from '@openmetadata/ui-core-components'; +import { Box, Card, Tabs } from '@openmetadata/ui-core-components'; import { File06 } from '@untitledui/icons'; import { AxiosError } from 'axios'; +import classNames from 'classnames'; import { FC, useCallback, useEffect, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { ReactComponent as FolderIcon } from '../../../assets/svg/ic-folder-new.svg'; @@ -64,6 +60,32 @@ const ContextCenterArchivePage: FC = () => { DEFAULT_ENTITY_PERMISSION ); + const filterTabItems = useMemo( + () => [ + { id: 'all', label: t('label.all') }, + { id: 'mine', label: t('label.created-by-me') }, + { + id: 'article', + label: ( + + + {t('label.article-plural')} + + ), + }, + { + id: 'document', + label: ( + + + {t('label.document-plural')} + + ), + }, + ], + [t] + ); + const fetchPermission = useCallback(async () => { try { const response = await getResourcePermission( @@ -188,7 +210,7 @@ const ContextCenterArchivePage: FC = () => { return (
{ subtitle={t('message.context-center-archive-subtitle')} title={t('label.archive-plural')} /> - -
- - {t('label.archive-file-plural')} - - - {filteredItems.length} - -
-
- setActiveFilter(key as FilterKey)}> - - - {t('label.article-plural')} -
- ), - }, - { - id: 'document', - label: ( -
- - {t('label.document-plural')} -
- ), - }, - ]} - type="button-brand"> - {(tab) => ( - - isSelected - ? 'tw:rounded-md tw:border tw:border-brand-100 tw:bg-brand-50 tw:px-3 tw:py-1.5 tw:text-sm tw:font-semibold tw:text-brand-700 tw:cursor-pointer' - : 'tw:rounded-md tw:border tw:border-gray-300 tw:bg-primary tw:px-3 tw:py-1.5 tw:text-sm tw:font-semibold tw:text-quaternary tw:cursor-pointer' - } - /> - )} - - -
- +
+ setActiveFilter(key as FilterKey)}> + + {(tab) => ( + + classNames( + 'tw:rounded-md tw:border tw:px-3 tw:py-2 tw:text-sm tw:font-medium tw:cursor-pointer', + { + 'tw:border-utility-brand-100 tw:bg-brand-primary_alt tw:text-brand-secondary': + isSelected, + 'tw:border-primary tw:bg-primary tw:text-secondary': + !isSelected, + } + ) + } + /> + )} + + +
+ { { { - const { t } = useTranslation(); - const navigate = useNavigate(); - const { getResourcePermission } = usePermissionProvider(); - const [permissions, setPermissions] = useState( - DEFAULT_ENTITY_PERMISSION - ); - - const hasCreatePermission = useMemo( - () => permissions.Create, - [permissions.Create] - ); - - const fetchPermission = useCallback(async () => { - try { - const response = await getResourcePermission( - ResourceEntity.KNOWLEDGE_PAGE - ); - setPermissions(response); - } catch (err) { - showErrorToast(err as AxiosError); - } - }, [getResourcePermission]); - - useEffect(() => { - fetchPermission(); - }, [fetchPermission]); - - return ( -
- navigate(ROUTES.CONTEXT_CENTER_ARTICLES)} - /> -
- ); -}; - -export default ContextCenterIntegrationsPage; diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/ContextCenterPage/ContextCenterMemoriesPage/ContextCenterMemoriesPage.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/ContextCenterPage/ContextCenterMemoriesPage/ContextCenterMemoriesPage.tsx index 55a56a03b6ea..0feec9ad166e 100644 --- a/openmetadata-ui/src/main/resources/ui/src/pages/ContextCenterPage/ContextCenterMemoriesPage/ContextCenterMemoriesPage.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/pages/ContextCenterPage/ContextCenterMemoriesPage/ContextCenterMemoriesPage.tsx @@ -23,9 +23,11 @@ import { import { ChevronDown, ChevronRight, + Database01, FilterFunnel02, Pin01, Plus, + User03, } from '@untitledui/icons'; import { AxiosError } from 'axios'; import classNames from 'classnames'; @@ -526,12 +528,12 @@ const ContextCenterMemoriesPage: FC = () => { id: tab.id, label: 'icon' in tab ? ( - + {t(tab.label)} ) : ( - t(tab.label) +
{t(tab.label)}
), }))} type="button-brand"> @@ -540,11 +542,11 @@ const ContextCenterMemoriesPage: FC = () => { {...tab} className={({ isSelected }) => classNames( - 'tw:rounded-full tw:border tw:px-3 tw:py-1.5 tw:text-sm tw:font-semibold tw:cursor-pointer', + 'tw:rounded-md tw:border tw:px-3 tw:py-2 tw:text-sm tw:font-medium tw:cursor-pointer', { - 'tw:border-brand-100 tw:bg-brand-50 tw:text-brand-700': + 'tw:border-utility-brand-100 tw:bg-brand-primary_alt tw:text-brand-secondary': isSelected, - 'tw:border-gray-300 tw:bg-primary tw:text-secondary': + 'tw:border-primary tw:bg-primary tw:text-secondary': !isSelected, } ) @@ -560,14 +562,26 @@ const ContextCenterMemoriesPage: FC = () => { className={ selectedAsset ? FILTER_BUTTON_ACTIVE_CLS : FILTER_BUTTON_CLS }> - - {assetOptions.find((o) => o.id === selectedAsset)?.label ?? - t('label.all-entity', { entity: t('label.asset-plural') })} - + +
+ + {assetOptions.find((o) => o.id === selectedAsset)?.label ?? + t('label.all-entity', { entity: t('label.asset-plural') })} + +
{ className={ selectedAuthor ? FILTER_BUTTON_ACTIVE_CLS : FILTER_BUTTON_CLS }> - - {authorOptions.find((o) => o.id === selectedAuthor)?.label ?? - t('label.all-entity', { entity: t('label.author') })} - + +
+ + {authorOptions.find((o) => o.id === selectedAuthor)?.label ?? + t('label.all-entity', { entity: t('label.author') })} + +
({ })); import { + decodeHtmlEntities, formatJsonString, getDecodedFqn, getEncodedFqn, @@ -37,6 +38,7 @@ import { removeAttachmentsWithoutUrl, replaceCallback, slugify, + stripMarkdown, } from './StringUtils'; describe('StringUtils', () => { @@ -351,4 +353,36 @@ describe('StringUtils', () => { expect(result).toBe('
Keep this
'); }); }); + + describe('decodeHtmlEntities', () => { + it('should decode numeric HTML entities', () => { + expect(decodeHtmlEntities('This is bold text')).toBe( + 'This is bold text' + ); + }); + + it('should decode named HTML entities', () => { + expect(decodeHtmlEntities('Tom & Jerry')).toBe('Tom & Jerry'); + }); + + it('should leave plain text unaffected', () => { + expect(decodeHtmlEntities('plain text')).toBe('plain text'); + }); + }); + + describe('stripMarkdown', () => { + it('should strip markdown syntax', () => { + expect(stripMarkdown('**bold** and `code`')).toBe('bold and code'); + }); + + it('should decode HTML entities left over from markdown stripping', () => { + expect(stripMarkdown('This is bold and & italic')).toBe( + 'This is bold and & italic' + ); + }); + + it('should trim surrounding whitespace', () => { + expect(stripMarkdown(' **hello world** ')).toBe('hello world'); + }); + }); }); diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/StringUtils.ts b/openmetadata-ui/src/main/resources/ui/src/utils/StringUtils.ts index 3267403275ca..4e1235ae074e 100644 --- a/openmetadata-ui/src/main/resources/ui/src/utils/StringUtils.ts +++ b/openmetadata-ui/src/main/resources/ui/src/utils/StringUtils.ts @@ -399,8 +399,19 @@ export const jsonToCSV = ( * @param htmlString - HTML content as a string * @returns A cleaned HTML string with invalid file-attachment divs removed */ +/** + * Decode HTML entities (e.g. "&", "b") into their literal characters. + * Uses DOMParser in text mode so embedded markup is never executed, only + * read back as plain text. + */ +export function decodeHtmlEntities(text: string): string { + const doc = new DOMParser().parseFromString(text, 'text/html'); + + return doc.documentElement.textContent ?? text; +} + export function stripMarkdown(text: string): string { - return removeMarkdown(text).trim(); + return decodeHtmlEntities(removeMarkdown(text)).trim(); } export function removeAttachmentsWithoutUrl(htmlString: string): string {