芝麻web文件管理V1.00
编辑当前文件:/home/freeclou/optimyar/wp-content/plugins/code-snippets/js/hooks/useSubmitSnippet.ts
import { __ } from '@wordpress/i18n' import { addQueryArgs } from '@wordpress/url' import { isAxiosError } from 'axios' import { useCallback } from 'react' import { createSnippetObject, isCondition } from '../utils/snippets/snippets' import { useRestAPI } from './useRestAPI' import { useSnippetForm } from './useSnippetForm' import type { Snippet } from '../types/Snippet' const snippetMessages =
{ addNew: __('Add New Snippet', 'code-snippets'), edit: __('Edit Snippet', 'code-snippets'), created: __('Snippet
created
.', 'code-snippets'), updated: __('Snippet
updated
.', 'code-snippets'), createdActivated: __('Snippet
created
and
activated
.', 'code-snippets'), updatedActivated: __('Snippet
updated
and
activated
.', 'code-snippets'), updatedDeactivated: __('Snippet
updated
and
deactivated
'), updatedExecuted: __('Snippet
updated
and
executed
.', 'code-snippets'), failedCreate: __('Could not create snippet.', 'code-snippets'), failedUpdate: __('Could not update snippet.', 'code-snippets') } const conditionCreated = __('Condition
created
.', 'code-snippets') const conditionUpdated = __('Condition
updated
.', 'code-snippets') const conditionMessages: typeof snippetMessages = { addNew: __('Add New Condition', 'code-snippets'), edit: __('Edit Condition', 'code-snippets'), created: conditionCreated, updated: conditionUpdated, createdActivated: conditionCreated, updatedActivated: conditionUpdated, updatedDeactivated: conditionUpdated, updatedExecuted: conditionUpdated, failedCreate: __('Could not create condition.', 'code-snippets'), failedUpdate: __('Could not update condition.', 'code-snippets') } export enum SubmitSnippetAction { SAVE = 'save_snippet', SAVE_AND_ACTIVATE = 'save_snippet_activate', SAVE_AND_EXECUTE = 'save_snippet_execute', SAVE_AND_DEACTIVATE = 'save_snippet_deactivate' } const getSuccessNotice = (request: Snippet, response: Snippet, action: SubmitSnippetAction): string => { const messages = 'condition' === request.scope ? conditionMessages : snippetMessages const wasCreated = 0 === request.id switch (action) { case SubmitSnippetAction.SAVE: return wasCreated ? messages.created : messages.updated case SubmitSnippetAction.SAVE_AND_EXECUTE: return messages.updatedExecuted case SubmitSnippetAction.SAVE_AND_ACTIVATE: if ('single-use' === response.scope) { return messages.updatedExecuted } else { return wasCreated ? messages.createdActivated : messages.updatedActivated } case SubmitSnippetAction.SAVE_AND_DEACTIVATE: return messages.updatedDeactivated } } const SUBMIT_ACTION_DELTA: Record
> = { [SubmitSnippetAction.SAVE]: {}, [SubmitSnippetAction.SAVE_AND_ACTIVATE]: { active: true }, [SubmitSnippetAction.SAVE_AND_DEACTIVATE]: { active: false }, [SubmitSnippetAction.SAVE_AND_EXECUTE]: { active: true } } export interface UseSubmitSnippet { submitSnippet: (action?: SubmitSnippetAction) => Promise
} export const useSubmitSnippet = (): UseSubmitSnippet => { const { snippetsAPI } = useRestAPI() const { setIsWorking, setCurrentNotice, snippet, setSnippet } = useSnippetForm() const submitSnippet = useCallback(async (action: SubmitSnippetAction = SubmitSnippetAction.SAVE) => { setCurrentNotice(undefined) const result = await (async (): Promise
=> { try { const request: Snippet = { ...snippet, ...SUBMIT_ACTION_DELTA[action] } const response = await (0 === request.id ? snippetsAPI.create(request) : snippetsAPI.update(request)) setIsWorking(false) return response.id ? response : undefined } catch (error) { setIsWorking(false) return isAxiosError(error) ? error.message : undefined } })() const messages = isCondition(snippet) ? conditionMessages : snippetMessages if (undefined === result || 'string' === typeof result) { const message = [ snippet.id ? messages.failedUpdate : messages.failedCreate, result ?? __('The server did not send a valid response.', 'code-snippets') ] setCurrentNotice(['error', message.filter(Boolean).join(' ')]) return undefined } else { setSnippet(createSnippetObject(result)) setCurrentNotice(['updated', getSuccessNotice(snippet, result, action)]) if (snippet.id && result.id) { window.document.title = window.document.title.replace(snippetMessages.addNew, messages.edit) window.history.replaceState({}, '', addQueryArgs(window.CODE_SNIPPETS?.urls.edit, { id: result.id })) } return result } }, [snippetsAPI, setIsWorking, setCurrentNotice, snippet, setSnippet]) return { submitSnippet } }