UNPKG

@ai-stack/payloadcms

Version:

<p align="center"> <img alt="Payload AI Plugin" src="assets/payload-ai-intro.gif" width="100%" /> </p>

111 lines (110 loc) 3.99 kB
'use client'; import { jsx as _jsx } from "react/jsx-runtime"; import { useField } from '@payloadcms/ui'; import React, { useEffect, useMemo, useState } from 'react'; import { useFieldProps } from '../../../../providers/FieldProvider/useFieldProps.js'; import { Compose, Proofread, Rephrase } from './items.js'; import { menuItemsMap } from './itemsMap.js'; import styles from './menu.module.scss'; const getActiveComponent = (ac)=>{ switch(ac){ case 'Compose': return Compose; case 'Proofread': return Proofread; case 'Rephrase': return Rephrase; default: return Rephrase; } }; export const useMenu = (menuEvents, options)=>{ const { field: { type: fieldType } = {}, path: pathFromContext } = useFieldProps(); const field = useField({ path: pathFromContext ?? '' }); const [activeComponent, setActiveComponent] = useState('Rephrase'); const { initialValue, value } = field; useEffect(()=>{ if (!value) { setActiveComponent('Compose'); return; } if (menuItemsMap.some((i)=>i.excludedFor?.includes(fieldType ?? ''))) { setActiveComponent('Compose'); return; } if (typeof value === 'string' && value !== initialValue) { setActiveComponent('Proofread'); } else { setActiveComponent('Rephrase'); } }, [ initialValue, value, fieldType ]); const MemoizedActiveComponent = useMemo(()=>{ return ({ isLoading, stop })=>{ const ActiveComponent = getActiveComponent(activeComponent); const activeItem = menuItemsMap.find((i)=>i.name === activeComponent); return /*#__PURE__*/ _jsx(ActiveComponent, { hideIcon: true, onClick: (data)=>{ if (!isLoading) { const trigger = menuEvents[`on${activeComponent}`]; if (typeof trigger === 'function') { trigger(data); } else { console.error('No trigger found for', activeComponent); } } else { stop(); } }, title: isLoading ? 'Click to stop' : activeItem.name, children: isLoading && activeItem.loadingText }); }; }, [ activeComponent, menuEvents ]); const filteredMenuItems = useMemo(()=>menuItemsMap.filter((i)=>{ if (i.name === 'Settings' && !options.isConfigAllowed) { return false; } // Disable settings if a user role is not permitted return i.name !== activeComponent && !i.excludedFor?.includes(fieldType ?? ''); }), [ activeComponent, fieldType, options.isConfigAllowed ]); const MemoizedMenu = useMemo(()=>{ return ({ isLoading, onClose })=>/*#__PURE__*/ _jsx("div", { className: styles.menu, children: filteredMenuItems.map((i)=>{ const Action = i.component; return /*#__PURE__*/ _jsx(Action, { disabled: isLoading, onClick: (data)=>{ if (i.name !== 'Settings') { setActiveComponent(i.name); } menuEvents[`on${i.name}`]?.(data); onClose(); }, children: isLoading && i.loadingText }, i.name); }) }); }, [ filteredMenuItems, menuEvents ]); return { ActiveComponent: MemoizedActiveComponent, Menu: MemoizedMenu }; }; //# sourceMappingURL=useMenu.js.map