in superset-frontend/src/features/home/ChartTable.tsx [64:251]
function ChartTable({
user,
addDangerToast,
addSuccessToast,
mine,
showThumbnails,
otherTabData,
otherTabFilters,
otherTabTitle,
}: ChartTableProps) {
const theme = useTheme();
const history = useHistory();
const initialTab = getItem(
LocalStorageKeys.HomepageChartFilter,
TableTab.Other,
);
const filteredOtherTabData = otherTabData?.filter(obj => 'viz_type' in obj);
const {
state: { loading, resourceCollection: charts, bulkSelectEnabled },
setResourceCollection: setCharts,
hasPerm,
refreshData,
fetchData,
} = useListViewResource<Chart>(
'chart',
t('chart'),
addDangerToast,
true,
initialTab === TableTab.Mine ? mine : filteredOtherTabData,
[],
false,
);
const chartIds = useMemo(() => charts.map(c => c.id), [charts]);
const [saveFavoriteStatus, favoriteStatus] = useFavoriteStatus(
'chart',
chartIds,
addDangerToast,
);
const {
sliceCurrentlyEditing,
openChartEditModal,
handleChartUpdated,
closeChartEditModal,
} = useChartEditModal(setCharts, charts);
const [activeTab, setActiveTab] = useState(initialTab);
const [preparingExport, setPreparingExport] = useState<boolean>(false);
const [loaded, setLoaded] = useState<boolean>(false);
const getData = (tab: TableTab) =>
fetchData({
pageIndex: 0,
pageSize: PAGE_SIZE,
sortBy: [
{
id: 'changed_on_delta_humanized',
desc: true,
},
],
filters: getFilterValues(tab, WelcomeTable.Charts, user, otherTabFilters),
});
useEffect(() => {
if (loaded || activeTab === TableTab.Favorite) {
getData(activeTab);
}
setLoaded(true);
}, [activeTab]);
const handleBulkChartExport = (chartsToExport: Chart[]) => {
const ids = chartsToExport.map(({ id }) => id);
handleResourceExport('chart', ids, () => {
setPreparingExport(false);
});
setPreparingExport(true);
};
const menuTabs = [
{
name: TableTab.Favorite,
label: t('Favorite'),
onClick: () => {
setActiveTab(TableTab.Favorite);
setItem(LocalStorageKeys.HomepageChartFilter, TableTab.Favorite);
},
},
{
name: TableTab.Mine,
label: t('Mine'),
onClick: () => {
setActiveTab(TableTab.Mine);
setItem(LocalStorageKeys.HomepageChartFilter, TableTab.Mine);
},
},
];
if (otherTabData) {
menuTabs.push({
name: TableTab.Other,
label: otherTabTitle,
onClick: () => {
setActiveTab(TableTab.Other);
setItem(LocalStorageKeys.HomepageChartFilter, TableTab.Other);
},
});
}
if (loading) return <LoadingCards cover={showThumbnails} />;
return (
<ErrorBoundary>
{sliceCurrentlyEditing && (
<PropertiesModal
onHide={closeChartEditModal}
onSave={handleChartUpdated}
show
slice={sliceCurrentlyEditing}
/>
)}
<SubMenu
activeChild={activeTab}
tabs={menuTabs}
buttons={[
{
name: (
<>
<Icons.PlusOutlined
iconColor={theme.colors.primary.dark1}
iconSize="m"
data-test="add-annotation-layer-button"
/>
{t('Chart')}
</>
),
buttonStyle: 'tertiary',
onClick: () => {
navigateTo('/chart/add', { assign: true });
},
},
{
name: t('View All »'),
buttonStyle: 'link',
onClick: () => {
const target =
activeTab === TableTab.Favorite
? `/chart/list/?filters=(favorite:(label:${t(
'Yes',
)},value:!t))`
: '/chart/list/';
history.push(target);
},
},
]}
/>
{charts?.length ? (
<CardContainer showThumbnails={showThumbnails}>
{charts.map(e => (
<ChartCard
key={`${e.id}`}
openChartEditModal={openChartEditModal}
chartFilter={activeTab}
chart={e}
userId={user?.userId}
hasPerm={hasPerm}
showThumbnails={showThumbnails}
bulkSelectEnabled={bulkSelectEnabled}
refreshData={refreshData}
addDangerToast={addDangerToast}
addSuccessToast={addSuccessToast}
favoriteStatus={favoriteStatus[e.id]}
saveFavoriteStatus={saveFavoriteStatus}
handleBulkChartExport={handleBulkChartExport}
/>
))}
</CardContainer>
) : (
<EmptyState
tableName={WelcomeTable.Charts}
tab={activeTab}
otherTabTitle={otherTabTitle}
/>
)}
{preparingExport && <Loading />}
</ErrorBoundary>
);
}