mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-11-12 17:02:23 +00:00
added topic configuration on topic page (#439)
* added topic configuration on topic page * minor change
This commit is contained in:
parent
3f447dc19a
commit
e7433262c1
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1792 1792" fill="#76746F"><path d="M480 1408v128h-352v-128h352zm352-128q26 0 45 19t19 45v256q0 26-19 45t-45 19h-256q-26 0-45-19t-19-45v-256q0-26 19-45t45-19h256zm160-384v128h-864v-128h864zm-640-512v128h-224v-128h224zm1312 1024v128h-736v-128h736zm-960-1152q26 0 45 19t19 45v256q0 26-19 45t-45 19h-256q-26 0-45-19t-19-45v-256q0-26 19-45t45-19h256zm640 512q26 0 45 19t19 45v256q0 26-19 45t-45 19h-256q-26 0-45-19t-19-45v-256q0-26 19-45t45-19h256zm320 128v128h-224v-128h224zm0-512v128h-864v-128h864z"/></svg>
|
||||||
|
After Width: | Height: | Size: 557 B |
@ -39,6 +39,7 @@ const TabsPane = ({ activeTab, setActiveTab, tabs }: Props) => {
|
|||||||
alt={tab.icon.alt}
|
alt={tab.icon.alt}
|
||||||
icon={tab.icon.name}
|
icon={tab.icon.name}
|
||||||
title={tab.icon.title}
|
title={tab.icon.title}
|
||||||
|
width="16"
|
||||||
/>{' '}
|
/>{' '}
|
||||||
{tab.name}
|
{tab.name}
|
||||||
</button>
|
</button>
|
||||||
@ -53,6 +54,7 @@ const TabsPane = ({ activeTab, setActiveTab, tabs }: Props) => {
|
|||||||
alt={tab.icon.alt}
|
alt={tab.icon.alt}
|
||||||
icon={tab.icon.name}
|
icon={tab.icon.name}
|
||||||
title={tab.icon.title}
|
title={tab.icon.title}
|
||||||
|
width="16"
|
||||||
/>{' '}
|
/>{' '}
|
||||||
{tab.name}
|
{tab.name}
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@ -11,7 +11,7 @@ import { TitleBreadcrumbProps } from '../title-breadcrumb/title-breadcrumb.inter
|
|||||||
|
|
||||||
type ExtraInfo = {
|
type ExtraInfo = {
|
||||||
key: string;
|
key: string;
|
||||||
value: string;
|
value: string | number;
|
||||||
};
|
};
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
|
|||||||
@ -49,6 +49,11 @@ const MyTopicDetailPage = () => {
|
|||||||
const [tags, setTags] = useState<Array<ColumnTags>>([]);
|
const [tags, setTags] = useState<Array<ColumnTags>>([]);
|
||||||
const [activeTab, setActiveTab] = useState<number>(1);
|
const [activeTab, setActiveTab] = useState<number>(1);
|
||||||
const [partitions, setPartitions] = useState<number>(0);
|
const [partitions, setPartitions] = useState<number>(0);
|
||||||
|
const [cleanupPolicies, setCleanupPolicies] = useState<Array<string>>([]);
|
||||||
|
const [maximumMessageSize, setMaximumMessageSize] = useState<number>(0);
|
||||||
|
const [replicationFactor, setReplicationFactor] = useState<number>(0);
|
||||||
|
const [retentionSize, setRetentionSize] = useState<number>(0);
|
||||||
|
|
||||||
const [isEdit, setIsEdit] = useState<boolean>(false);
|
const [isEdit, setIsEdit] = useState<boolean>(false);
|
||||||
const [schemaText, setSchemaText] = useState<string>('{}');
|
const [schemaText, setSchemaText] = useState<string>('{}');
|
||||||
const [slashedTopicName, setSlashedTopicName] = useState<
|
const [slashedTopicName, setSlashedTopicName] = useState<
|
||||||
@ -84,6 +89,16 @@ const MyTopicDetailPage = () => {
|
|||||||
protectedState: !owner || hasEditAccess(),
|
protectedState: !owner || hasEditAccess(),
|
||||||
position: 2,
|
position: 2,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'Config',
|
||||||
|
icon: {
|
||||||
|
alt: 'config',
|
||||||
|
name: 'icon-config',
|
||||||
|
title: 'Config',
|
||||||
|
},
|
||||||
|
isProtected: false,
|
||||||
|
position: 3,
|
||||||
|
},
|
||||||
];
|
];
|
||||||
const fetchTags = () => {
|
const fetchTags = () => {
|
||||||
getTagCategories().then((res) => {
|
getTagCategories().then((res) => {
|
||||||
@ -102,23 +117,31 @@ const MyTopicDetailPage = () => {
|
|||||||
followers,
|
followers,
|
||||||
fullyQualifiedName,
|
fullyQualifiedName,
|
||||||
name,
|
name,
|
||||||
partitions,
|
|
||||||
schemaType,
|
schemaType,
|
||||||
schemaText,
|
schemaText,
|
||||||
service,
|
service,
|
||||||
tags,
|
tags,
|
||||||
owner,
|
owner,
|
||||||
|
partitions,
|
||||||
|
cleanupPolicies,
|
||||||
|
maximumMessageSize,
|
||||||
|
replicationFactor,
|
||||||
|
retentionSize,
|
||||||
} = res.data;
|
} = res.data;
|
||||||
setTopicDetails(res.data);
|
setTopicDetails(res.data);
|
||||||
setTopicId(id);
|
setTopicId(id);
|
||||||
setDescription(description ?? '');
|
setDescription(description ?? '');
|
||||||
setSchemaType(schemaType);
|
setSchemaType(schemaType);
|
||||||
setPartitions(partitions);
|
|
||||||
setFollowers(followers?.length);
|
setFollowers(followers?.length);
|
||||||
setOwner(getOwnerFromId(owner?.id));
|
setOwner(getOwnerFromId(owner?.id));
|
||||||
setTier(getTierFromTableTags(tags));
|
setTier(getTierFromTableTags(tags));
|
||||||
setTags(getTagsWithoutTier(tags));
|
setTags(getTagsWithoutTier(tags));
|
||||||
setSchemaText(schemaText);
|
setSchemaText(schemaText);
|
||||||
|
setPartitions(partitions);
|
||||||
|
setCleanupPolicies(cleanupPolicies);
|
||||||
|
setMaximumMessageSize(maximumMessageSize);
|
||||||
|
setReplicationFactor(replicationFactor);
|
||||||
|
setRetentionSize(retentionSize);
|
||||||
setIsFollowing(
|
setIsFollowing(
|
||||||
followers.some(({ id }: { id: string }) => id === USERId)
|
followers.some(({ id }: { id: string }) => id === USERId)
|
||||||
);
|
);
|
||||||
@ -265,6 +288,16 @@ const MyTopicDetailPage = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const getConfigDetails = () => {
|
||||||
|
return [
|
||||||
|
{ key: 'Partitions', value: partitions },
|
||||||
|
{ key: 'Replication Factor', value: replicationFactor },
|
||||||
|
{ key: 'Retention Size', value: retentionSize.toLocaleString() },
|
||||||
|
{ key: 'CleanUp Policies', value: cleanupPolicies.join() },
|
||||||
|
{ key: 'Max Message Size', value: maximumMessageSize },
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetchTopicDetail(topicFQN);
|
fetchTopicDetail(topicFQN);
|
||||||
}, [topicFQN]);
|
}, [topicFQN]);
|
||||||
@ -301,7 +334,7 @@ const MyTopicDetailPage = () => {
|
|||||||
tabs={tabs}
|
tabs={tabs}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div className="tw-bg-white tw--mx-4 tw-p-4">
|
<div className="tw-bg-white tw--mx-4 tw-p-4 tw-min-h-tab">
|
||||||
{activeTab === 1 && (
|
{activeTab === 1 && (
|
||||||
<>
|
<>
|
||||||
<div className="tw-grid tw-grid-cols-4 tw-gap-4 w-full">
|
<div className="tw-grid tw-grid-cols-4 tw-gap-4 w-full">
|
||||||
@ -317,10 +350,7 @@ const MyTopicDetailPage = () => {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{getInfoBadge([
|
{getInfoBadge([{ key: 'Schema', value: schemaType }])}
|
||||||
{ key: 'Schema', value: schemaType },
|
|
||||||
{ key: 'Partitions', value: partitions },
|
|
||||||
])}
|
|
||||||
<div className="tw-my-4 tw-border tw-border-main tw-rounded-md tw-py-4">
|
<div className="tw-my-4 tw-border tw-border-main tw-rounded-md tw-py-4">
|
||||||
<SchemaEditor value={schemaText} />
|
<SchemaEditor value={schemaText} />
|
||||||
</div>
|
</div>
|
||||||
@ -334,6 +364,18 @@ const MyTopicDetailPage = () => {
|
|||||||
onSave={onSettingsUpdate}
|
onSave={onSettingsUpdate}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
{activeTab === 3 && (
|
||||||
|
<div className="tw-grid tw-grid-cols-5 tw-gap-2 ">
|
||||||
|
{getConfigDetails().map((config, index) => (
|
||||||
|
<div
|
||||||
|
className="tw-card tw-py-2 tw-px-3 tw-group"
|
||||||
|
key={index}>
|
||||||
|
<p className="tw-text-grey-muted">{config.key}</p>
|
||||||
|
<p className="tw-text-lg">{config.value}</p>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -3,6 +3,7 @@ import IconGoogle from '../assets/img/google-icon.png';
|
|||||||
import IconWelcomePopper from '../assets/img/welcome-popper-icon.png';
|
import IconWelcomePopper from '../assets/img/welcome-popper-icon.png';
|
||||||
import IconAPI from '../assets/svg/api.svg';
|
import IconAPI from '../assets/svg/api.svg';
|
||||||
import IconSuccess from '../assets/svg/check.svg';
|
import IconSuccess from '../assets/svg/check.svg';
|
||||||
|
import IconConfig from '../assets/svg/config.svg';
|
||||||
import IconDashboardGrey from '../assets/svg/dashboard-grey.svg';
|
import IconDashboardGrey from '../assets/svg/dashboard-grey.svg';
|
||||||
import IconDashboard from '../assets/svg/dashboard.svg';
|
import IconDashboard from '../assets/svg/dashboard.svg';
|
||||||
import IconAsstest from '../assets/svg/data-assets.svg';
|
import IconAsstest from '../assets/svg/data-assets.svg';
|
||||||
@ -118,6 +119,7 @@ export const Icons = {
|
|||||||
TABLE_GREY: 'table-grey',
|
TABLE_GREY: 'table-grey',
|
||||||
TOPIC_GREY: 'topic-grey',
|
TOPIC_GREY: 'topic-grey',
|
||||||
DASHBOARD_GREY: 'dashboard-grey',
|
DASHBOARD_GREY: 'dashboard-grey',
|
||||||
|
CONFIG: 'icon-config',
|
||||||
};
|
};
|
||||||
|
|
||||||
const SVGIcons: FunctionComponent<Props> = ({
|
const SVGIcons: FunctionComponent<Props> = ({
|
||||||
@ -351,6 +353,10 @@ const SVGIcons: FunctionComponent<Props> = ({
|
|||||||
case Icons.DASHBOARD_GREY:
|
case Icons.DASHBOARD_GREY:
|
||||||
IconComponent = IconDashboardGrey;
|
IconComponent = IconDashboardGrey;
|
||||||
|
|
||||||
|
break;
|
||||||
|
case Icons.CONFIG:
|
||||||
|
IconComponent = IconConfig;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|||||||
@ -118,6 +118,7 @@ module.exports = {
|
|||||||
minHeight: {
|
minHeight: {
|
||||||
32: '8rem',
|
32: '8rem',
|
||||||
168: '10.5rem',
|
168: '10.5rem',
|
||||||
|
tab: '24rem',
|
||||||
},
|
},
|
||||||
padding: {
|
padding: {
|
||||||
'5px': '5px',
|
'5px': '5px',
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user