import classNames from 'clsx'; import React, { useEffect, useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import { fetchBackups, createBackup } from 'soapbox/actions/backups'; import ScrollableList from 'soapbox/components/scrollable-list'; import { Column } from 'soapbox/components/ui'; import { useAppDispatch, useAppSelector } from 'soapbox/hooks'; const messages = defineMessages({ heading: { id: 'column.backups', defaultMessage: 'Backups' }, create: { id: 'backups.actions.create', defaultMessage: 'Create backup' }, emptyMessage: { id: 'backups.empty_message', defaultMessage: 'No backups found. {action}' }, emptyMessageAction: { id: 'backups.empty_message.action', defaultMessage: 'Create one now?' }, pending: { id: 'backups.pending', defaultMessage: 'Pending' }, }); const Backups = () => { const intl = useIntl(); const dispatch = useAppDispatch(); const backups = useAppSelector((state) => state.backups.toList().sortBy((backup) => backup.inserted_at)); const [isLoading, setIsLoading] = useState(true); const handleCreateBackup: React.MouseEventHandler = e => { dispatch(createBackup()); e.preventDefault(); }; const makeColumnMenu = () => { return [{ text: intl.formatMessage(messages.create), action: handleCreateBackup, icon: require('@tabler/icons/plus.svg'), }]; }; useEffect(() => { dispatch(fetchBackups()).then(() => { setIsLoading(true); }).catch(() => {}); }, []); const showLoading = isLoading && backups.count() === 0; const emptyMessageAction = ( {intl.formatMessage(messages.emptyMessageAction)} ); return ( {backups.map((backup) => (
{backup.processed ? {backup.inserted_at} :
{intl.formatMessage(messages.pending)}: {backup.inserted_at}
}
))}
); }; export default Backups;