mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-07-25 18:30:00 +00:00
fix(ui): encoding issue in entity pages (#12955)
* fix encoding issue in entity pages * fix double encoding while redirecting from task page
This commit is contained in:
parent
817b9853df
commit
ae99ace22b
@ -111,16 +111,14 @@ const DashboardDetails = ({
|
|||||||
deleted,
|
deleted,
|
||||||
dashboardTags,
|
dashboardTags,
|
||||||
tier,
|
tier,
|
||||||
entityFqn,
|
|
||||||
} = useMemo(() => {
|
} = useMemo(() => {
|
||||||
const { tags = [], fullyQualifiedName } = dashboardDetails;
|
const { tags = [] } = dashboardDetails;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...dashboardDetails,
|
...dashboardDetails,
|
||||||
tier: getTierTags(tags),
|
tier: getTierTags(tags),
|
||||||
dashboardTags: getTagsWithoutTier(tags),
|
dashboardTags: getTagsWithoutTier(tags),
|
||||||
entityName: getEntityName(dashboardDetails),
|
entityName: getEntityName(dashboardDetails),
|
||||||
entityFqn: fullyQualifiedName ?? '',
|
|
||||||
};
|
};
|
||||||
}, [dashboardDetails]);
|
}, [dashboardDetails]);
|
||||||
|
|
||||||
@ -459,7 +457,7 @@ const DashboardDetails = ({
|
|||||||
fqn: record.fullyQualifiedName ?? '',
|
fqn: record.fullyQualifiedName ?? '',
|
||||||
field: record.description,
|
field: record.description,
|
||||||
}}
|
}}
|
||||||
entityFqn={entityFqn}
|
entityFqn={dashboardFQN}
|
||||||
entityType={EntityType.DASHBOARD}
|
entityType={EntityType.DASHBOARD}
|
||||||
hasEditPermission={editDescriptionPermissions}
|
hasEditPermission={editDescriptionPermissions}
|
||||||
index={index}
|
index={index}
|
||||||
@ -479,7 +477,7 @@ const DashboardDetails = ({
|
|||||||
render: (tags: TagLabel[], record: ChartType, index: number) => {
|
render: (tags: TagLabel[], record: ChartType, index: number) => {
|
||||||
return (
|
return (
|
||||||
<TableTags<ChartType>
|
<TableTags<ChartType>
|
||||||
entityFqn={entityFqn}
|
entityFqn={dashboardFQN}
|
||||||
entityType={EntityType.DASHBOARD}
|
entityType={EntityType.DASHBOARD}
|
||||||
handleTagSelection={handleChartTagSelection}
|
handleTagSelection={handleChartTagSelection}
|
||||||
hasTagEditAccess={hasEditTagAccess(record)}
|
hasTagEditAccess={hasEditTagAccess(record)}
|
||||||
@ -501,7 +499,7 @@ const DashboardDetails = ({
|
|||||||
width: 300,
|
width: 300,
|
||||||
render: (tags: TagLabel[], record: ChartType, index: number) => (
|
render: (tags: TagLabel[], record: ChartType, index: number) => (
|
||||||
<TableTags<ChartType>
|
<TableTags<ChartType>
|
||||||
entityFqn={entityFqn}
|
entityFqn={dashboardFQN}
|
||||||
entityType={EntityType.DASHBOARD}
|
entityType={EntityType.DASHBOARD}
|
||||||
handleTagSelection={handleChartTagSelection}
|
handleTagSelection={handleChartTagSelection}
|
||||||
hasTagEditAccess={hasEditTagAccess(record)}
|
hasTagEditAccess={hasEditTagAccess(record)}
|
||||||
@ -517,7 +515,6 @@ const DashboardDetails = ({
|
|||||||
],
|
],
|
||||||
[
|
[
|
||||||
deleted,
|
deleted,
|
||||||
entityFqn,
|
|
||||||
chartsPermissionsArray,
|
chartsPermissionsArray,
|
||||||
onThreadLinkSelect,
|
onThreadLinkSelect,
|
||||||
hasEditTagAccess,
|
hasEditTagAccess,
|
||||||
@ -540,7 +537,7 @@ const DashboardDetails = ({
|
|||||||
<div className="d-flex flex-col gap-4">
|
<div className="d-flex flex-col gap-4">
|
||||||
<DescriptionV1
|
<DescriptionV1
|
||||||
description={dashboardDetails.description}
|
description={dashboardDetails.description}
|
||||||
entityFqn={dashboardDetails.fullyQualifiedName}
|
entityFqn={dashboardFQN}
|
||||||
entityName={entityName}
|
entityName={entityName}
|
||||||
entityType={EntityType.DASHBOARD}
|
entityType={EntityType.DASHBOARD}
|
||||||
hasEditAccess={
|
hasEditAccess={
|
||||||
@ -579,7 +576,7 @@ const DashboardDetails = ({
|
|||||||
<Space className="w-full" direction="vertical" size="large">
|
<Space className="w-full" direction="vertical" size="large">
|
||||||
<TagsContainerV2
|
<TagsContainerV2
|
||||||
displayType={DisplayType.READ_MORE}
|
displayType={DisplayType.READ_MORE}
|
||||||
entityFqn={dashboardDetails.fullyQualifiedName}
|
entityFqn={dashboardFQN}
|
||||||
entityType={EntityType.DASHBOARD}
|
entityType={EntityType.DASHBOARD}
|
||||||
permission={
|
permission={
|
||||||
(dashboardPermissions.EditAll ||
|
(dashboardPermissions.EditAll ||
|
||||||
@ -594,7 +591,7 @@ const DashboardDetails = ({
|
|||||||
|
|
||||||
<TagsContainerV2
|
<TagsContainerV2
|
||||||
displayType={DisplayType.READ_MORE}
|
displayType={DisplayType.READ_MORE}
|
||||||
entityFqn={dashboardDetails.fullyQualifiedName}
|
entityFqn={dashboardFQN}
|
||||||
entityType={EntityType.DASHBOARD}
|
entityType={EntityType.DASHBOARD}
|
||||||
permission={
|
permission={
|
||||||
(dashboardPermissions.EditAll ||
|
(dashboardPermissions.EditAll ||
|
||||||
|
@ -121,7 +121,7 @@ const MlModelDetail: FC<MlModelDetailProp> = ({
|
|||||||
[AppState.nonSecureUserDetails, AppState.userDetails]
|
[AppState.nonSecureUserDetails, AppState.userDetails]
|
||||||
);
|
);
|
||||||
|
|
||||||
const { mlModelTags, isFollowing, tier, entityFqn } = useMemo(() => {
|
const { mlModelTags, isFollowing, tier } = useMemo(() => {
|
||||||
return {
|
return {
|
||||||
...mlModelDetail,
|
...mlModelDetail,
|
||||||
tier: getTierTags(mlModelDetail.tags ?? []),
|
tier: getTierTags(mlModelDetail.tags ?? []),
|
||||||
@ -130,7 +130,6 @@ const MlModelDetail: FC<MlModelDetailProp> = ({
|
|||||||
isFollowing: mlModelDetail.followers?.some(
|
isFollowing: mlModelDetail.followers?.some(
|
||||||
({ id }: { id: string }) => id === currentUser?.id
|
({ id }: { id: string }) => id === currentUser?.id
|
||||||
),
|
),
|
||||||
entityFqn: mlModelDetail.fullyQualifiedName ?? '',
|
|
||||||
};
|
};
|
||||||
}, [mlModelDetail]);
|
}, [mlModelDetail]);
|
||||||
|
|
||||||
@ -378,7 +377,7 @@ const MlModelDetail: FC<MlModelDetailProp> = ({
|
|||||||
<div className="d-flex flex-col gap-4">
|
<div className="d-flex flex-col gap-4">
|
||||||
<DescriptionV1
|
<DescriptionV1
|
||||||
description={mlModelDetail.description}
|
description={mlModelDetail.description}
|
||||||
entityFqn={mlModelDetail.fullyQualifiedName}
|
entityFqn={mlModelFqn}
|
||||||
entityName={mlModelDetail.name}
|
entityName={mlModelDetail.name}
|
||||||
entityType={EntityType.MLMODEL}
|
entityType={EntityType.MLMODEL}
|
||||||
hasEditAccess={
|
hasEditAccess={
|
||||||
@ -394,7 +393,7 @@ const MlModelDetail: FC<MlModelDetailProp> = ({
|
|||||||
onThreadLinkSelect={handleThreadLinkSelect}
|
onThreadLinkSelect={handleThreadLinkSelect}
|
||||||
/>
|
/>
|
||||||
<MlModelFeaturesList
|
<MlModelFeaturesList
|
||||||
entityFqn={entityFqn}
|
entityFqn={mlModelFqn}
|
||||||
handleFeaturesUpdate={onFeaturesUpdate}
|
handleFeaturesUpdate={onFeaturesUpdate}
|
||||||
isDeleted={mlModelDetail.deleted}
|
isDeleted={mlModelDetail.deleted}
|
||||||
mlFeatures={mlModelDetail.mlFeatures}
|
mlFeatures={mlModelDetail.mlFeatures}
|
||||||
@ -410,7 +409,7 @@ const MlModelDetail: FC<MlModelDetailProp> = ({
|
|||||||
<Space className="w-full" direction="vertical" size="large">
|
<Space className="w-full" direction="vertical" size="large">
|
||||||
<TagsContainerV2
|
<TagsContainerV2
|
||||||
displayType={DisplayType.READ_MORE}
|
displayType={DisplayType.READ_MORE}
|
||||||
entityFqn={mlModelDetail.fullyQualifiedName}
|
entityFqn={mlModelFqn}
|
||||||
entityType={EntityType.MLMODEL}
|
entityType={EntityType.MLMODEL}
|
||||||
permission={
|
permission={
|
||||||
(mlModelPermissions.EditAll ||
|
(mlModelPermissions.EditAll ||
|
||||||
@ -425,7 +424,7 @@ const MlModelDetail: FC<MlModelDetailProp> = ({
|
|||||||
|
|
||||||
<TagsContainerV2
|
<TagsContainerV2
|
||||||
displayType={DisplayType.READ_MORE}
|
displayType={DisplayType.READ_MORE}
|
||||||
entityFqn={mlModelDetail.fullyQualifiedName}
|
entityFqn={mlModelFqn}
|
||||||
entityType={EntityType.MLMODEL}
|
entityType={EntityType.MLMODEL}
|
||||||
permission={
|
permission={
|
||||||
(mlModelPermissions.EditAll ||
|
(mlModelPermissions.EditAll ||
|
||||||
|
@ -101,7 +101,6 @@ const PipelineDetails = ({
|
|||||||
entityName,
|
entityName,
|
||||||
tier,
|
tier,
|
||||||
tags,
|
tags,
|
||||||
entityFqn,
|
|
||||||
followers,
|
followers,
|
||||||
} = useMemo(() => {
|
} = useMemo(() => {
|
||||||
return {
|
return {
|
||||||
@ -114,7 +113,6 @@ const PipelineDetails = ({
|
|||||||
tier: getTierTags(pipelineDetails.tags ?? []),
|
tier: getTierTags(pipelineDetails.tags ?? []),
|
||||||
tags: getTagsWithoutTier(pipelineDetails.tags ?? []),
|
tags: getTagsWithoutTier(pipelineDetails.tags ?? []),
|
||||||
entityName: getEntityName(pipelineDetails),
|
entityName: getEntityName(pipelineDetails),
|
||||||
entityFqn: pipelineDetails.fullyQualifiedName ?? '',
|
|
||||||
followers: pipelineDetails.followers ?? [],
|
followers: pipelineDetails.followers ?? [],
|
||||||
};
|
};
|
||||||
}, [pipelineDetails]);
|
}, [pipelineDetails]);
|
||||||
@ -390,7 +388,7 @@ const PipelineDetails = ({
|
|||||||
fqn: record.fullyQualifiedName ?? '',
|
fqn: record.fullyQualifiedName ?? '',
|
||||||
field: record.description,
|
field: record.description,
|
||||||
}}
|
}}
|
||||||
entityFqn={entityFqn}
|
entityFqn={pipelineFQN}
|
||||||
entityType={EntityType.PIPELINE}
|
entityType={EntityType.PIPELINE}
|
||||||
hasEditPermission={
|
hasEditPermission={
|
||||||
pipelinePermissions.EditDescription || pipelinePermissions.EditAll
|
pipelinePermissions.EditDescription || pipelinePermissions.EditAll
|
||||||
@ -410,7 +408,7 @@ const PipelineDetails = ({
|
|||||||
width: 300,
|
width: 300,
|
||||||
render: (tags, record, index) => (
|
render: (tags, record, index) => (
|
||||||
<TableTags<Task>
|
<TableTags<Task>
|
||||||
entityFqn={entityFqn}
|
entityFqn={pipelineFQN}
|
||||||
entityType={EntityType.PIPELINE}
|
entityType={EntityType.PIPELINE}
|
||||||
handleTagSelection={handleTableTagSelection}
|
handleTagSelection={handleTableTagSelection}
|
||||||
hasTagEditAccess={hasTagEditAccess}
|
hasTagEditAccess={hasTagEditAccess}
|
||||||
@ -431,7 +429,7 @@ const PipelineDetails = ({
|
|||||||
width: 300,
|
width: 300,
|
||||||
render: (tags, record, index) => (
|
render: (tags, record, index) => (
|
||||||
<TableTags<Task>
|
<TableTags<Task>
|
||||||
entityFqn={entityFqn}
|
entityFqn={pipelineFQN}
|
||||||
entityType={EntityType.PIPELINE}
|
entityType={EntityType.PIPELINE}
|
||||||
handleTagSelection={handleTableTagSelection}
|
handleTagSelection={handleTableTagSelection}
|
||||||
hasTagEditAccess={hasTagEditAccess}
|
hasTagEditAccess={hasTagEditAccess}
|
||||||
@ -448,7 +446,6 @@ const PipelineDetails = ({
|
|||||||
[
|
[
|
||||||
deleted,
|
deleted,
|
||||||
editTask,
|
editTask,
|
||||||
entityFqn,
|
|
||||||
hasTagEditAccess,
|
hasTagEditAccess,
|
||||||
pipelinePermissions,
|
pipelinePermissions,
|
||||||
getEntityName,
|
getEntityName,
|
||||||
|
@ -263,7 +263,7 @@ const TopicDetails: React.FC<TopicDetailsProps> = ({
|
|||||||
<div className="d-flex flex-col gap-4">
|
<div className="d-flex flex-col gap-4">
|
||||||
<DescriptionV1
|
<DescriptionV1
|
||||||
description={topicDetails.description}
|
description={topicDetails.description}
|
||||||
entityFqn={topicDetails.fullyQualifiedName}
|
entityFqn={topicFQN}
|
||||||
entityName={entityName}
|
entityName={entityName}
|
||||||
entityType={EntityType.TOPIC}
|
entityType={EntityType.TOPIC}
|
||||||
hasEditAccess={
|
hasEditAccess={
|
||||||
@ -278,7 +278,7 @@ const TopicDetails: React.FC<TopicDetailsProps> = ({
|
|||||||
onThreadLinkSelect={onThreadLinkSelect}
|
onThreadLinkSelect={onThreadLinkSelect}
|
||||||
/>
|
/>
|
||||||
<TopicSchemaFields
|
<TopicSchemaFields
|
||||||
entityFqn={topicDetails.fullyQualifiedName ?? ''}
|
entityFqn={topicFQN}
|
||||||
hasDescriptionEditAccess={
|
hasDescriptionEditAccess={
|
||||||
topicPermissions.EditAll || topicPermissions.EditDescription
|
topicPermissions.EditAll || topicPermissions.EditDescription
|
||||||
}
|
}
|
||||||
@ -299,7 +299,7 @@ const TopicDetails: React.FC<TopicDetailsProps> = ({
|
|||||||
<Space className="w-full" direction="vertical" size="large">
|
<Space className="w-full" direction="vertical" size="large">
|
||||||
<TagsContainerV2
|
<TagsContainerV2
|
||||||
displayType={DisplayType.READ_MORE}
|
displayType={DisplayType.READ_MORE}
|
||||||
entityFqn={topicDetails.fullyQualifiedName}
|
entityFqn={topicFQN}
|
||||||
entityType={EntityType.TOPIC}
|
entityType={EntityType.TOPIC}
|
||||||
permission={
|
permission={
|
||||||
(topicPermissions.EditAll || topicPermissions.EditTags) &&
|
(topicPermissions.EditAll || topicPermissions.EditTags) &&
|
||||||
@ -313,7 +313,7 @@ const TopicDetails: React.FC<TopicDetailsProps> = ({
|
|||||||
|
|
||||||
<TagsContainerV2
|
<TagsContainerV2
|
||||||
displayType={DisplayType.READ_MORE}
|
displayType={DisplayType.READ_MORE}
|
||||||
entityFqn={topicDetails.fullyQualifiedName}
|
entityFqn={topicFQN}
|
||||||
entityType={EntityType.TOPIC}
|
entityType={EntityType.TOPIC}
|
||||||
permission={
|
permission={
|
||||||
(topicPermissions.EditAll || topicPermissions.EditTags) &&
|
(topicPermissions.EditAll || topicPermissions.EditTags) &&
|
||||||
|
@ -191,7 +191,6 @@ const ContainerPage = () => {
|
|||||||
isUserFollowing,
|
isUserFollowing,
|
||||||
tags,
|
tags,
|
||||||
tier,
|
tier,
|
||||||
entityFqn,
|
|
||||||
} = useMemo(() => {
|
} = useMemo(() => {
|
||||||
return {
|
return {
|
||||||
deleted: containerData?.deleted,
|
deleted: containerData?.deleted,
|
||||||
@ -492,7 +491,7 @@ const ContainerPage = () => {
|
|||||||
|
|
||||||
<ContainerDataModel
|
<ContainerDataModel
|
||||||
dataModel={containerData?.dataModel}
|
dataModel={containerData?.dataModel}
|
||||||
entityFqn={entityFqn}
|
entityFqn={containerName}
|
||||||
hasDescriptionEditAccess={hasEditDescriptionPermission}
|
hasDescriptionEditAccess={hasEditDescriptionPermission}
|
||||||
hasTagEditAccess={hasEditTagsPermission}
|
hasTagEditAccess={hasEditTagsPermission}
|
||||||
isReadOnly={Boolean(deleted)}
|
isReadOnly={Boolean(deleted)}
|
||||||
|
@ -27,6 +27,7 @@ import { useTranslation } from 'react-i18next';
|
|||||||
import { useHistory, useLocation, useParams } from 'react-router-dom';
|
import { useHistory, useLocation, useParams } from 'react-router-dom';
|
||||||
import { postThread } from 'rest/feedsAPI';
|
import { postThread } from 'rest/feedsAPI';
|
||||||
import { getEntityDetailLink } from 'utils/CommonUtils';
|
import { getEntityDetailLink } from 'utils/CommonUtils';
|
||||||
|
import { getDecodedFqn } from 'utils/StringsUtils';
|
||||||
import AppState from '../../../AppState';
|
import AppState from '../../../AppState';
|
||||||
import { EntityField } from '../../../constants/Feeds.constants';
|
import { EntityField } from '../../../constants/Feeds.constants';
|
||||||
import { EntityTabs, EntityType } from '../../../enums/entity.enum';
|
import { EntityTabs, EntityType } from '../../../enums/entity.enum';
|
||||||
@ -125,7 +126,9 @@ const RequestDescription = () => {
|
|||||||
history.push(
|
history.push(
|
||||||
getEntityDetailLink(
|
getEntityDetailLink(
|
||||||
entityType as EntityType,
|
entityType as EntityType,
|
||||||
entityFQN,
|
entityType === EntityType.TABLE
|
||||||
|
? entityFQN
|
||||||
|
: getDecodedFqn(entityFQN),
|
||||||
EntityTabs.ACTIVITY_FEED,
|
EntityTabs.ACTIVITY_FEED,
|
||||||
ActivityFeedTabs.TASKS
|
ActivityFeedTabs.TASKS
|
||||||
)
|
)
|
||||||
|
@ -25,6 +25,7 @@ import { useTranslation } from 'react-i18next';
|
|||||||
import { useHistory, useLocation, useParams } from 'react-router-dom';
|
import { useHistory, useLocation, useParams } from 'react-router-dom';
|
||||||
import { postThread } from 'rest/feedsAPI';
|
import { postThread } from 'rest/feedsAPI';
|
||||||
import { getEntityDetailLink } from 'utils/CommonUtils';
|
import { getEntityDetailLink } from 'utils/CommonUtils';
|
||||||
|
import { getDecodedFqn } from 'utils/StringsUtils';
|
||||||
import AppState from '../../../AppState';
|
import AppState from '../../../AppState';
|
||||||
import { EntityField } from '../../../constants/Feeds.constants';
|
import { EntityField } from '../../../constants/Feeds.constants';
|
||||||
import { EntityTabs, EntityType } from '../../../enums/entity.enum';
|
import { EntityTabs, EntityType } from '../../../enums/entity.enum';
|
||||||
@ -118,7 +119,9 @@ const RequestTag = () => {
|
|||||||
history.push(
|
history.push(
|
||||||
getEntityDetailLink(
|
getEntityDetailLink(
|
||||||
entityType as EntityType,
|
entityType as EntityType,
|
||||||
entityFQN,
|
entityType === EntityType.TABLE
|
||||||
|
? entityFQN
|
||||||
|
: getDecodedFqn(entityFQN),
|
||||||
EntityTabs.ACTIVITY_FEED,
|
EntityTabs.ACTIVITY_FEED,
|
||||||
ActivityFeedTabs.TASKS
|
ActivityFeedTabs.TASKS
|
||||||
)
|
)
|
||||||
|
@ -25,6 +25,7 @@ import { useTranslation } from 'react-i18next';
|
|||||||
import { useHistory, useLocation, useParams } from 'react-router-dom';
|
import { useHistory, useLocation, useParams } from 'react-router-dom';
|
||||||
import { postThread } from 'rest/feedsAPI';
|
import { postThread } from 'rest/feedsAPI';
|
||||||
import { getEntityDetailLink } from 'utils/CommonUtils';
|
import { getEntityDetailLink } from 'utils/CommonUtils';
|
||||||
|
import { getDecodedFqn } from 'utils/StringsUtils';
|
||||||
import AppState from '../../../AppState';
|
import AppState from '../../../AppState';
|
||||||
import { FQN_SEPARATOR_CHAR } from '../../../constants/char.constants';
|
import { FQN_SEPARATOR_CHAR } from '../../../constants/char.constants';
|
||||||
import { EntityField } from '../../../constants/Feeds.constants';
|
import { EntityField } from '../../../constants/Feeds.constants';
|
||||||
@ -139,7 +140,9 @@ const UpdateDescription = () => {
|
|||||||
history.push(
|
history.push(
|
||||||
getEntityDetailLink(
|
getEntityDetailLink(
|
||||||
entityType as EntityType,
|
entityType as EntityType,
|
||||||
entityFQN,
|
entityType === EntityType.TABLE
|
||||||
|
? entityFQN
|
||||||
|
: getDecodedFqn(entityFQN),
|
||||||
EntityTabs.ACTIVITY_FEED,
|
EntityTabs.ACTIVITY_FEED,
|
||||||
ActivityFeedTabs.TASKS
|
ActivityFeedTabs.TASKS
|
||||||
)
|
)
|
||||||
|
@ -27,6 +27,7 @@ import { useTranslation } from 'react-i18next';
|
|||||||
import { useHistory, useLocation, useParams } from 'react-router-dom';
|
import { useHistory, useLocation, useParams } from 'react-router-dom';
|
||||||
import { postThread } from 'rest/feedsAPI';
|
import { postThread } from 'rest/feedsAPI';
|
||||||
import { getEntityDetailLink } from 'utils/CommonUtils';
|
import { getEntityDetailLink } from 'utils/CommonUtils';
|
||||||
|
import { getDecodedFqn } from 'utils/StringsUtils';
|
||||||
import AppState from '../../../AppState';
|
import AppState from '../../../AppState';
|
||||||
import { FQN_SEPARATOR_CHAR } from '../../../constants/char.constants';
|
import { FQN_SEPARATOR_CHAR } from '../../../constants/char.constants';
|
||||||
import { EntityField } from '../../../constants/Feeds.constants';
|
import { EntityField } from '../../../constants/Feeds.constants';
|
||||||
@ -146,7 +147,9 @@ const UpdateTag = () => {
|
|||||||
history.push(
|
history.push(
|
||||||
getEntityDetailLink(
|
getEntityDetailLink(
|
||||||
entityType as EntityType,
|
entityType as EntityType,
|
||||||
entityFQN,
|
entityType === EntityType.TABLE
|
||||||
|
? entityFQN
|
||||||
|
: getDecodedFqn(entityFQN),
|
||||||
EntityTabs.ACTIVITY_FEED,
|
EntityTabs.ACTIVITY_FEED,
|
||||||
ActivityFeedTabs.TASKS
|
ActivityFeedTabs.TASKS
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user