import React, { useState } from 'react' import { __ } from '@wordpress/i18n' import { Button, ButtonProps } from '../../common/Button' import { ConfirmDialog } from '../../common/ConfirmDialog' import { Snippet } from '../../types/Snippet' import { isNetworkAdmin } from '../../utils/general' import { useSnippetForm } from '../SnippetForm/context' const SaveChangesButton: React.FC = ({ ...props }) => interface ActivateButtonProps { snippet: Snippet disabled: boolean onActivate: VoidFunction onDeactivate: VoidFunction primaryActivate: boolean } const ActivateButton: React.FC = ({ snippet, disabled, onActivate, onDeactivate, primaryActivate }) => <> {'single-use' === snippet.scope ? : !snippet.shared_network || !isNetworkAdmin() ? snippet.active ? : : ''} const validateSnippet = (snippet: Snippet): undefined | string => { const missingCode = '' === snippet.code.trim() const missingTitle = '' === snippet.name.trim() switch (true) { case missingCode && missingTitle: return __('This snippet has no code or title.', 'code-snippets') case missingCode: return __('This snippet has no snippet code.', 'code-snippets') case missingTitle: return __('This snippet has no title.', 'code-snippets') default: return undefined } } export const SubmitButton: React.FC = () => { const { snippet, isWorking, submitSnippet, submitAndActivateSnippet, submitAndDeactivateSnippet } = useSnippetForm() const [isConfirmDialogOpen, setIsConfirmDialogOpen] = useState(false) const [submitAction, setSubmitAction] = useState() const validationWarning = validateSnippet(snippet) const activateByDefault = !!window.CODE_SNIPPETS_EDIT?.activateByDefault && !snippet.active && 'single-use' !== snippet.scope && (!snippet.shared_network || !isNetworkAdmin()) const onSubmit = (submitAction: VoidFunction) => { if (validationWarning) { setIsConfirmDialogOpen(true) setSubmitAction(() => submitAction) } else { submitAction() } } const closeDialog = () => { setIsConfirmDialogOpen(false) setSubmitAction(undefined) } const saveChangesButtonProps: ButtonProps = { disabled: isWorking, onClick: () => onSubmit(submitSnippet) } return <> {activateByDefault ? null : } onSubmit(submitAndActivateSnippet)} onDeactivate={() => onSubmit(submitAndDeactivateSnippet)} /> {activateByDefault ? : null} { submitAction?.() closeDialog() }} >

{`${validationWarning} ${__('Continue?', 'code-snippets')}`}

}