@rcb-plugins/input-validator
Version:
A lightweight plugin to validate user input with visual feedbacks in React ChatBotify!
2 lines (1 loc) • 2.55 kB
JavaScript
;const b=require("react"),a=require("react-chatbotify"),m={autoConfig:!0,promptBaseColors:{info:"#007bff",warning:"#ffc107",error:"#dc3545",success:"#28a745"},promptHoveredColors:{info:"#0056b3",warning:"#d39e00",error:"#c82333",success:"#218838"},textAreaHighlightColors:{info:"#007bff",warning:"#ffc107",error:"#dc3545",success:"#28a745"}},R=t=>({...m,...t,promptBaseColors:{...m.promptBaseColors,...t==null?void 0:t.promptBaseColors},promptHoveredColors:{...m.promptHoveredColors,...t==null?void 0:t.promptHoveredColors},textAreaHighlightColors:{...m.textAreaHighlightColors,...t==null?void 0:t.textAreaHighlightColors}}),D=(t,e)=>{const r=t.promptType??"info";let o={};return e.advancedStyles&&(o=e.advancedStyles[r]),e.promptBaseColors&&(o.toastPromptStyle={color:e.promptBaseColors[r],borderColor:e.promptBaseColors[r]}),e.promptHoveredColors&&(o.toastPromptHoveredStyle={color:e.promptHoveredColors[r],borderColor:e.promptHoveredColors[r]}),e.textAreaHighlightColors&&(t.highlightTextArea??!0)&&(o.chatInputAreaStyle={boxShadow:`${e.textAreaHighlightColors[r]} 0px 0px 5px`}),o},x=(t,e,r="validateTextInput")=>{var n;if(!((n=t.detail)!=null&&n.currPath))return;const o=e[t.detail.currPath];if(!o)return;const i=o[r];return typeof i=="function"?i:void 0},A=t=>{const{showToast:e}=a.useToasts(),{getFlow:r}=a.useFlow(),{styles:o,updateStyles:i,replaceStyles:n}=a.useStyles(),v=R(t),[f,h]=b.useState(0),S=b.useRef({}),P=c=>{const u=c,p=x(u,r(),"validateTextInput");if(!p)return;const s=p(u.data.inputText);if(s!=null&&s.success||c.preventDefault(),!s.promptContent)return;f===0&&(S.current=structuredClone(o));const l=D(s,v);i(l),e(s.promptContent,s.promptDuration??3e3),h(d=>d+1)},H=c=>{var d,y;const u=c,p=(y=(d=u.data)==null?void 0:d.files)==null?void 0:y[0];if(!p){console.error("No file uploaded."),c.preventDefault();return}const s=x(u,r(),"validateFileInput");if(!s){console.error("Validator not found for file input.");return}const l=s(p);if(!l.success){console.error("Validation failed:",l),l.promptContent&&e(l.promptContent,l.promptDuration??3e3),c.preventDefault();return}console.log("Validation successful:",l)},E=()=>{h(c=>c-1)};a.useOnRcbEvent(a.RcbEvent.USER_SUBMIT_TEXT,P),a.useOnRcbEvent(a.RcbEvent.USER_UPLOAD_FILE,H),a.useOnRcbEvent(a.RcbEvent.DISMISS_TOAST,E),b.useEffect(()=>{f===0&&setTimeout(()=>{n(S.current)})},[f,n]);const T={name:"@rcb-plugins/input-validator"};return v.autoConfig&&(T.settings={event:{rcbUserSubmitText:!0,rcbUserUploadFile:!0,rcbDismissToast:!0}}),T},U=t=>()=>A(t);module.exports=U;