2021-08-31 22:00:56 -07:00
|
|
|
import React, { useEffect } from 'react';
|
|
|
|
import { Tabs } from 'antd';
|
2022-12-07 16:21:55 -08:00
|
|
|
import styled from 'styled-components/macro';
|
2021-08-31 22:00:56 -07:00
|
|
|
|
|
|
|
import { EntityTab } from '../../../types';
|
|
|
|
import { useBaseEntity, useEntityData, useRouteToTab } from '../../../EntityContext';
|
|
|
|
|
|
|
|
type Props = {
|
|
|
|
tabs: EntityTab[];
|
|
|
|
selectedTab?: EntityTab;
|
|
|
|
};
|
|
|
|
|
|
|
|
const UnborderedTabs = styled(Tabs)`
|
|
|
|
&&& .ant-tabs-nav {
|
|
|
|
margin-bottom: 0;
|
|
|
|
&:before {
|
|
|
|
border-bottom: none;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
`;
|
|
|
|
|
|
|
|
const Tab = styled(Tabs.TabPane)`
|
|
|
|
font-size: 14px;
|
|
|
|
line-height: 22px;
|
|
|
|
`;
|
|
|
|
|
|
|
|
export const EntityTabs = <T,>({ tabs, selectedTab }: Props) => {
|
2023-01-25 02:38:07 +01:00
|
|
|
const { entityData, loading } = useEntityData();
|
2021-08-31 22:00:56 -07:00
|
|
|
const routeToTab = useRouteToTab();
|
|
|
|
const baseEntity = useBaseEntity<T>();
|
|
|
|
|
2023-01-25 02:38:07 +01:00
|
|
|
const enabledTabs = tabs.filter((tab) => tab.display?.enabled(entityData, baseEntity));
|
|
|
|
|
2021-08-31 22:00:56 -07:00
|
|
|
useEffect(() => {
|
2023-01-25 02:38:07 +01:00
|
|
|
if (!loading && !selectedTab && enabledTabs[0]) {
|
|
|
|
routeToTab({ tabName: enabledTabs[0].name, method: 'replace' });
|
2021-08-31 22:00:56 -07:00
|
|
|
}
|
2023-01-25 02:38:07 +01:00
|
|
|
}, [loading, enabledTabs, selectedTab, routeToTab]);
|
2021-10-12 15:47:29 -07:00
|
|
|
|
2021-08-31 22:00:56 -07:00
|
|
|
return (
|
|
|
|
<UnborderedTabs
|
2023-01-25 02:38:07 +01:00
|
|
|
activeKey={selectedTab?.name || ''}
|
2021-08-31 22:00:56 -07:00
|
|
|
size="large"
|
|
|
|
onTabClick={(tab: string) => routeToTab({ tabName: tab })}
|
|
|
|
>
|
2023-01-25 02:38:07 +01:00
|
|
|
{tabs.map((tab) => {
|
2021-10-12 15:47:29 -07:00
|
|
|
if (!tab.display?.enabled(entityData, baseEntity)) {
|
2021-08-31 22:00:56 -07:00
|
|
|
return <Tab tab={tab.name} key={tab.name} disabled />;
|
|
|
|
}
|
|
|
|
return <Tab tab={tab.name} key={tab.name} />;
|
|
|
|
})}
|
|
|
|
</UnborderedTabs>
|
|
|
|
);
|
|
|
|
};
|