import React, { useCallback, useEffect, useState } from 'react'; import { setQueueOptions } from 'Activity/Queue/queueOptionsStore'; import { SelectProvider, useSelect } from 'App/Select/SelectContext'; import CommandNames from 'Commands/CommandNames'; import { useCommandExecuting, useExecuteCommand } from 'Commands/useCommands'; import Alert from 'Components/Alert'; import LoadingIndicator from 'Components/Loading/LoadingIndicator'; import FilterMenu from 'Components/Menu/FilterMenu'; import ConfirmModal from 'Components/Modal/ConfirmModal'; import PageContent from 'Components/Page/PageContent'; import PageContentBody from 'Components/Page/PageContentBody'; import PageToolbar from 'Components/Page/Toolbar/PageToolbar'; import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton'; import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection'; import Table from 'Components/Table/Table'; import TableBody from 'Components/Table/TableBody'; import TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper'; import TablePager from 'Components/Table/TablePager'; import { useCustomFiltersList } from 'Filters/useCustomFilters'; import { align, icons, kinds } from 'Helpers/Props'; import { SortDirection } from 'Helpers/Props/sortDirections'; import BlockListModel from 'typings/Blocklist'; import { CheckInputChanged } from 'typings/inputs'; import { TableOptionsChangePayload } from 'typings/Table'; import { registerPagePopulator, unregisterPagePopulator, } from 'Utilities/pagePopulator'; import translate from 'Utilities/String/translate'; import BlocklistFilterModal from './BlocklistFilterModal'; import { setBlocklistOption, setBlocklistSort, useBlocklistOptions, } from './blocklistOptionsStore'; import BlocklistRow from './BlocklistRow'; import useBlocklist, { useFilters, useRemoveBlocklistItems, } from './useBlocklist'; function BlocklistContent() { const { records, totalPages, totalRecords, isFetching, isFetched, isLoading, error, page, goToPage, refetch, } = useBlocklist(); const { columns, pageSize, sortKey, sortDirection, selectedFilterKey } = useBlocklistOptions(); const filters = useFilters(); const { isRemoving, removeBlocklistItems } = useRemoveBlocklistItems(); const customFilters = useCustomFiltersList('blocklist'); const executeCommand = useExecuteCommand(); const isClearingBlocklistExecuting = useCommandExecuting( CommandNames.ClearBlocklist ); const [isConfirmRemoveModalOpen, setIsConfirmRemoveModalOpen] = useState(false); const [isConfirmClearModalOpen, setIsConfirmClearModalOpen] = useState(false); const { allSelected, allUnselected, anySelected, getSelectedIds, selectAll, unselectAll, } = useSelect(); const handleSelectAllChange = useCallback( ({ value }: CheckInputChanged) => { if (value) { selectAll(); } else { unselectAll(); } }, [selectAll, unselectAll] ); const handleRemoveSelectedPress = useCallback(() => { setIsConfirmRemoveModalOpen(true); }, [setIsConfirmRemoveModalOpen]); const handleRemoveSelectedConfirmed = useCallback(() => { removeBlocklistItems({ ids: getSelectedIds() }); setIsConfirmRemoveModalOpen(false); }, [getSelectedIds, setIsConfirmRemoveModalOpen, removeBlocklistItems]); const handleConfirmRemoveModalClose = useCallback(() => { setIsConfirmRemoveModalOpen(false); }, [setIsConfirmRemoveModalOpen]); const handleClearBlocklistPress = useCallback(() => { setIsConfirmClearModalOpen(true); }, [setIsConfirmClearModalOpen]); const handleClearBlocklistConfirmed = useCallback(() => { executeCommand({ name: CommandNames.ClearBlocklist }, () => { goToPage(1); refetch(); }); setIsConfirmClearModalOpen(false); }, [setIsConfirmClearModalOpen, executeCommand, goToPage, refetch]); const handleConfirmClearModalClose = useCallback(() => { setIsConfirmClearModalOpen(false); }, [setIsConfirmClearModalOpen]); const handleFilterSelect = useCallback( (selectedFilterKey: string | number) => { setBlocklistOption('selectedFilterKey', selectedFilterKey); }, [] ); const handleSortPress = useCallback( (sortKey: string, sortDirection?: SortDirection) => { setBlocklistSort({ sortKey, sortDirection, }); }, [] ); const handleTableOptionChange = useCallback( (payload: TableOptionsChangePayload) => { setQueueOptions(payload); if (payload.pageSize) { goToPage(1); } }, [goToPage] ); useEffect(() => { const repopulate = () => { refetch(); }; registerPagePopulator(repopulate); return () => { unregisterPagePopulator(repopulate); }; }, [refetch]); return ( {isLoading && !isFetched ? : null} {!isLoading && !!error ? ( {translate('BlocklistLoadError')} ) : null} {isFetched && !error && !records.length ? ( {selectedFilterKey === 'all' ? translate('NoBlocklistItems') : translate('BlocklistFilterHasNoItems')} ) : null} {isFetched && !error && !!records.length ? (
{records.map((item) => { return ( ); })}
) : null}
); } function Blocklist() { const { records } = useBlocklist(); return ( items={records}> ); } export default Blocklist;