import { useEffect, useContext, memo } from 'react';
// Context
import { AppContext } from '../App';
// Router
import { useLocation, useNavigate } from 'react-router-dom';
// App
import { useLocalStorage } from '../../hooks/useLocalStorage';
import CardHeader from './DatastoreCardHeader';
import TableEmptyState from '../../common/Table/TableEmptyState';
// Prefs
import {
cardDefinitions,
VISIBLE_CONTENT_OPTIONS,
PAGE_SIZE_OPTIONS,
DEFAULT_PREFERENCES,
} from './datastoreDefaultPrefs';
// Cloudscape
import { useCollection } from '@cloudscape-design/collection-hooks';
import { Button, Cards, CollectionPreferences, Pagination, TextFilter } from '@cloudscape-design/components';
function Datastores() {
const { buildCrumb, datastores, datastoreLoadStatus, getDatastores } = useContext(AppContext);
const [showDeleted, setShowDeleted] = useLocalStorage('Datastore-Show-Deleted', false); // show deleted datstores toggle
const [preferences, setPreferences] = useLocalStorage('Datastore-Cards-Preferences', DEFAULT_PREFERENCES);
// Router
const location = useLocation();
const navigate = useNavigate();
// Set crumbs
useEffect(() => {
buildCrumb(location.pathname, 'Data Stores');
}, [buildCrumb, location]);
const { items, actions, filteredItemsCount, collectionProps, filterProps, paginationProps } = useCollection(
showDeleted ? datastores : datastores.filter((d) => d.datastoreStatus !== 'DELETED'),
{
filtering: {
empty: ,
noMatch: (
actions.setFiltering('')}>Clear filter}
/>
),
},
pagination: { pageSize: preferences.pageSize },
sorting: {},
selection: {},
}
);
// if any of the datastores are creating or deleting, refresh every 15 seconds
useEffect(() => {
let refreshInterval;
if (['CREATING', 'DELETING'].some((s) => datastores.map((d) => d.datastoreStatus).includes(s))) {
refreshInterval = setInterval(function () {
getDatastores();
}, 10000);
return () => clearInterval(refreshInterval);
}
}, [datastores, getDatastores]);
return (
item.datastoreStatus !== 'ACTIVE'}
filter={
}
pagination={}
preferences={
setPreferences(detail)}
pageSizePreference={{
title: 'Page size',
options: PAGE_SIZE_OPTIONS,
}}
visibleContentPreference={{
title: 'Select visible columns',
options: VISIBLE_CONTENT_OPTIONS,
}}
/>
}
/>
);
}
export default memo(Datastores);