import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { createSelector } from 'reselect'; import { useSelect } from 'App/SelectContext'; import SpinnerButton from 'Components/Link/SpinnerButton'; import PageContentFooter from 'Components/Page/PageContentFooter'; import usePrevious from 'Helpers/Hooks/usePrevious'; import { kinds } from 'Helpers/Props'; import { saveIndexerEditor } from 'Store/Actions/indexerIndexActions'; import translate from 'Utilities/String/translate'; import getSelectedIds from 'Utilities/Table/getSelectedIds'; import DeleteIndexerModal from './Delete/DeleteIndexerModal'; import EditIndexerModal from './Edit/EditIndexerModal'; import TagsModal from './Tags/TagsModal'; import styles from './IndexerIndexSelectFooter.css'; const indexersEditorSelector = createSelector( (state) => state.indexers, (indexers) => { const { isSaving, isDeleting, deleteError } = indexers; return { isSaving, isDeleting, deleteError, }; } ); function IndexerIndexSelectFooter() { const { isSaving, isDeleting, deleteError } = useSelector( indexersEditorSelector ); const dispatch = useDispatch(); const [isEditModalOpen, setIsEditModalOpen] = useState(false); const [isTagsModalOpen, setIsTagsModalOpen] = useState(false); const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); const [isSavingIndexer, setIsSavingIndexer] = useState(false); const [isSavingTags, setIsSavingTags] = useState(false); const previousIsDeleting = usePrevious(isDeleting); const [selectState, selectDispatch] = useSelect(); const { selectedState } = selectState; const indexerIds = useMemo(() => { return getSelectedIds(selectedState); }, [selectedState]); const selectedCount = indexerIds.length; const onEditPress = useCallback(() => { setIsEditModalOpen(true); }, [setIsEditModalOpen]); const onEditModalClose = useCallback(() => { setIsEditModalOpen(false); }, [setIsEditModalOpen]); const onSavePress = useCallback( (payload) => { setIsSavingIndexer(true); setIsEditModalOpen(false); dispatch( saveIndexerEditor({ ...payload, indexerIds, }) ); }, [indexerIds, dispatch] ); const onTagsPress = useCallback(() => { setIsTagsModalOpen(true); }, [setIsTagsModalOpen]); const onTagsModalClose = useCallback(() => { setIsTagsModalOpen(false); }, [setIsTagsModalOpen]); const onApplyTagsPress = useCallback( (tags, applyTags) => { setIsSavingTags(true); setIsTagsModalOpen(false); dispatch( saveIndexerEditor({ indexerIds, tags, applyTags, }) ); }, [indexerIds, dispatch] ); const onDeletePress = useCallback(() => { setIsDeleteModalOpen(true); }, [setIsDeleteModalOpen]); const onDeleteModalClose = useCallback(() => { setIsDeleteModalOpen(false); }, []); useEffect(() => { if (!isSaving) { setIsSavingIndexer(false); setIsSavingTags(false); } }, [isSaving]); useEffect(() => { if (previousIsDeleting && !isDeleting && !deleteError) { selectDispatch({ type: 'unselectAll' }); } }, [previousIsDeleting, isDeleting, deleteError, selectDispatch]); const anySelected = selectedCount > 0; return (
{translate('Edit')} {translate('SetTags')}
{translate('Delete')}
{translate('CountIndexersSelected', [selectedCount])}
); } export default IndexerIndexSelectFooter;