import React, { useState, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { Dropdown } from 'reactstrap'; import { useCreateTemplatePage } from '~/client/services/create-page'; import { toastError } from '~/client/util/toastr'; import { CreateButton } from './CreateButton'; import { DropendMenu } from './DropendMenu'; import { DropendToggle } from './DropendToggle'; import { useCreateNewPage, useCreateTodaysMemo } from './hooks'; const useToastrOnError = (method?: (param?: P) => Promise): (param?: P) => Promise => { const { t } = useTranslation('commons'); return useCallback(async(param) => { try { return await method?.(param); } catch (err) { toastError(t('toaster.create_failed', { target: 'a page' })); } }, [method, t]); }; export const PageCreateButton = React.memo((): JSX.Element => { const [isHovered, setIsHovered] = useState(false); const [dropdownOpen, setDropdownOpen] = useState(false); const { createNewPage, isCreating: isNewPageCreating } = useCreateNewPage(); // TODO: https://redmine.weseek.co.jp/issues/138806 const { createTodaysMemo, isCreating: isTodaysPageCreating, todaysPath } = useCreateTodaysMemo(); // TODO: https://redmine.weseek.co.jp/issues/138805 const { createTemplate, isCreating: isTemplatePageCreating, isCreatable: isTemplatePageCreatable, } = useCreateTemplatePage(); const createNewPageWithToastr = useToastrOnError(createNewPage); const createTodaysMemoWithToastr = useToastrOnError(createTodaysMemo); const createTemplateWithToastr = useToastrOnError(createTemplate); const onMouseEnterHandler = () => { setIsHovered(true); }; const onMouseLeaveHandler = () => { setIsHovered(false); setDropdownOpen(false); }; const toggle = () => setDropdownOpen(!dropdownOpen); return (
{ isHovered && ( )}
); });