UNPKG

bot-form

Version:

> Formularios con UX de chatbot

2 lines 13.9 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@ngrx/store"),require("@ngrx/effects"),require("rxjs"),require("rxjs/operators")):"function"==typeof define&&define.amd?define("bot-form",["exports","@ngrx/store","@ngrx/effects","rxjs","rxjs/operators"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["bot-form"]={},e.store,e.effects,e.rxjs,e.rxjs.operators)}(this,(function(e,t,n,s,r){"use strict";var i;e.BotFormSender=void 0,(i=e.BotFormSender||(e.BotFormSender={})).Bot="bot",i.User="user";function o(e,t,n,s){return new(n||(n=Promise))((function(r,i){function o(e){try{u(s.next(e))}catch(e){i(e)}}function c(e){try{u(s.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,c)}u((s=s.apply(e,t||[])).next())}))}function c(e,t){var n,s,r,i,o={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return i={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(i){return function(c){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;o;)try{if(n=1,s&&(r=2&i[0]?s.return:i[0]?s.throw||((r=s.return)&&r.call(s),0):s.next)&&!(r=r.call(s,i[1])).done)return r;switch(s=0,r&&(i=[2&i[0],r.value]),i[0]){case 0:case 1:r=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,s=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(r=o.trys,(r=r.length>0&&r[r.length-1])||6!==i[0]&&2!==i[0])){o=0;continue}if(3===i[0]&&(!r||i[1]>r[0]&&i[1]<r[3])){o.label=i[1];break}if(6===i[0]&&o.label<r[1]){o.label=r[1],r=i;break}if(r&&o.label<r[2]){o.label=r[2],o.ops.push(i);break}r[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],s=0}finally{n=r=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,c])}}}Object.create;function u(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var s,r,i=n.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(s=i.next()).done;)o.push(s.value)}catch(e){r={error:e}}finally{try{s&&!s.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return o}function a(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(u(arguments[t]));return e}Object.create;var l=function(){var t=function(e,t){var n=e.steps.findIndex((function(e){return t===e.key}));return{index:n,step:e.steps[n],isLastStep:n===e.steps.length-1}};return{addErrorMessageOnInvalidInput:function(t){return function(n){return Object.assign(Object.assign({},n),{isValidatingInput:!1,isPassingToNextStep:!1,messages:a(n.messages,[{sender:e.BotFormSender.Bot,text:null==t?void 0:t.error,key:null==t?void 0:t.key}])})}},addErrorMessageOnFetchFailure:function(t){return function(n){return Object.assign(Object.assign({},n),{isFetchingOptions:!1,messages:a(n.messages,[{sender:e.BotFormSender.Bot,text:null==t?void 0:t.error,key:n.activeKey}])})}},addExtraSteps:function(e){return function(n){var s=t(n,null==e?void 0:e.key).index,r=function(e,t,n){return a(e.slice(0,t+1),n,e.slice(t+1))}(n.steps,s,null==e?void 0:e.steps);return Object.assign(Object.assign({},n),{steps:r,isComplete:!1})}},addFulfillmentMessage:function(t){return function(n){return Object.assign(Object.assign({},n),{fulfillmentPayload:null==t?void 0:t.data,isFulfilling:!1,isFulfilled:!0,messages:a(n.messages,[{sender:e.BotFormSender.Bot,text:null==t?void 0:t.message,key:"fulfillmentSuccess"}])})}},addUserMessage:function(n){return function(s){var r,i=function(e){return t(e,e.activeKey)}(s).step,o=""+(null==n?void 0:n.input);return"select"===i.inputType&&i.selectOptions&&(o=null===(r=i.selectOptions.find((function(e){var t=e.value;return(null==n?void 0:n.input)===t})))||void 0===r?void 0:r.text),Object.assign(Object.assign({},s),{isValidatingInput:!0,isPassingToNextStep:!0,messages:a(s.messages,[{sender:e.BotFormSender.User,text:o,key:s.activeKey}])})}},addValidInputToDto:function(e){return function(t){var n;return Object.assign(Object.assign({},t),{dto:Object.assign(Object.assign({},t.dto),(n={},n[null==e?void 0:e.key]=null==e?void 0:e.input,n)),isValidatingInput:!1})}},initConversation:function(){return function(t){var n=[{sender:e.BotFormSender.Bot,key:t.steps[0].key,text:t.steps[0].prompt}];return t.welcomeMessage&&n.unshift({sender:e.BotFormSender.Bot,key:"welcome",text:t.welcomeMessage}),Object.assign(Object.assign({},t),{messages:n})}},promptNextStep:function(n){return function(s){var r=t(s,null==n?void 0:n.key).step,i=r.prompt,o=r.key;return Object.assign(Object.assign({},s),{isPassingToNextStep:!1,activeKey:o,messages:a(s.messages,[{sender:e.BotFormSender.Bot,text:i,key:null==n?void 0:n.key}])})}},setSelectOptions:function(e){return function(n){var s,r,i,o=t(n,null==e?void 0:e.key),c=o.step,u=o.index,l=Object.assign(Object.assign({},c),{selectOptions:null==e?void 0:e.options}),p=(s=n.steps,r=u,i=l,a(s.slice(0,r),[i],s.slice(r+1)));return Object.assign(Object.assign({},n),{steps:p,isFetchingOptions:!1})}},passToNextStep:function(){return function(e){var n=t(e,e.activeKey).index,s=e.steps[n+1];return s?Object.assign(Object.assign({},e),{activeKey:s.key}):Object.assign(Object.assign({},e),{isComplete:!0})}},undo:function(){return function(e){var n,s,r=e.activeKey,i=e.steps,o=e.messages,c=e.dto,u=e.isComplete,l=r,p=t(e,r).index;p>0&&(l=u?r:i[p-1].key);var f=o.findIndex((function(e){return e.key===l})),d=0===f&&e.welcomeMessage?1:0,v=o.slice(d,f+1),g=Object.assign(Object.assign({},c),((n={})[l]=void 0,n)),m=null===(s=e.conditionedSteps)||void 0===s?void 0:s.find((function(e){return 0===e.steps.findIndex((function(e){return e.key===r}))})),h=i;return m&&(h=a(i.slice(0,p),i.slice(p+m.steps.length))),Object.assign(Object.assign({},e),{activeKey:l,messages:v,dto:g,steps:h,isComplete:!1,isFulfilling:!1,isConfirmed:!1})}}}},p=function(e,t,i,a,l){var p=this;this.actions$=e,this.store=t,this.events=i,this.selectors=a,this.fulfillment=l,this.validateUserInput$=n.createEffect((function(){return p.actions$.pipe(n.ofType(p.events.userInput),r.withLatestFrom(p.store.select(p.selectors.selectActiveStep),p.store.select(p.selectors.selectBotFormState)),r.delay(700),r.tap((function(e){var t=u(e,3),n=t[0],s=t[1],r=t[2];return o(p,void 0,void 0,(function(){var e,t,i,o,u,a,l;return c(this,(function(c){switch(c.label){case 0:i=s.curator?s.curator(n.input):n.input,c.label=1;case 1:return c.trys.push([1,5,,6]),o=null===(e=s.validationSchema)||void 0===e?void 0:e.validate(i),u=!(null==o?void 0:o.error),s.asyncValidator&&u?[4,s.asyncValidator(i,r)]:[3,3];case 2:return l=c.sent(),[3,4];case 3:l=null,c.label=4;case 4:return a=l,!u||a&&!a.isValid?this.store.dispatch(this.events.failedUserInput({input:i,key:s.key,error:(null===(t=null==o?void 0:o.error)||void 0===t?void 0:t.message)||(null==a?void 0:a.error)||"Error"})):this.store.dispatch(this.events.successfulUserInput({input:i,key:s.key})),[3,6];case 5:return c.sent(),this.store.dispatch(this.events.failedUserInput({input:i,key:s.key,error:"Ocurrió un problema con nuestros servidores, intenta luego ¡Lo sentimos!"})),[3,6];case 6:return[2]}}))}))})))}),{dispatch:!1}),this.addExtraSteps$=n.createEffect((function(){return p.actions$.pipe(n.ofType(p.events.successfulUserInput),r.withLatestFrom(p.store.select(p.selectors.selectBotFormState)),r.map((function(e){var t,n,s=u(e,2),r=s[0],i=s[1];if(null===(t=i.conditionedSteps)||void 0===t?void 0:t.some((function(e){return e.condition(r,i)}))){var o=u(null===(n=i.conditionedSteps)||void 0===n?void 0:n.filter((function(e){return(0,e.condition)(r,i)})),1)[0].steps;return p.events.extraStepsConditionMet({steps:o,key:r.key})}return p.events.extraStepsConditionNotMet()})))})),this.isThereANextStep$=n.createEffect((function(){return p.actions$.pipe(n.ofType(p.events.extraStepsConditionNotMet,p.events.extraStepsConditionMet),r.withLatestFrom(p.store.select(p.selectors.selectSteps),p.store.select(p.selectors.selectActiveKey),p.store.select(p.selectors.selectWasLastStepReached)),r.map((function(e){var t=u(e,4),n=(t[0],t[1]),s=t[2];if(!t[3]){var r=n.findIndex((function(e){return e.key===s}));return p.events.thereIsANextStep({key:n[r+1].key})}return p.events.lastStepCompleted()})))})),this.fetchOptions$=n.createEffect((function(){return p.actions$.pipe(n.ofType(p.events.thereIsANextStep),r.withLatestFrom(p.store.select(p.selectors.selectActiveStep),p.store.select(p.selectors.selectBotFormState)),r.filter((function(e){var t=u(e,2);return t[0],!!t[1].optionsFetcher})),r.tap((function(e){var t=u(e,3),n=(t[0],t[1]),s=t[2];return o(p,void 0,void 0,(function(){var e;return c(this,(function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),this.store.dispatch(this.events.fetchOptionsStart()),[4,n.optionsFetcher(s)];case 1:return e=t.sent(),this.store.dispatch(this.events.fetchOptionsSuccess({options:e,key:n.key})),[3,3];case 2:return t.sent(),this.store.dispatch(this.events.fetchOptionsFailure({error:"Error de servidor"})),[3,3];case 3:return[2]}}))}))})))}),{dispatch:!1}),this.runFulfillment$=n.createEffect((function(){return p.actions$.pipe(n.ofType(p.events.confirmed),r.withLatestFrom(p.store.select(p.selectors.selectBotFormState)),r.filter((function(e){var t=u(e,2);return t[0],t[1].isComplete})),r.switchMap((function(e){var t=u(e,2),n=(t[0],t[1]);return p.fulfillment(n).pipe(r.map((function(e){return p.events.fulfillmentSuccess(e)})),r.catchError((function(e){return s.of(p.events.fulfillmentFailure({error:e.message}))})))})))}))};e.BotFormEffects=p,e.getBotFormKit=function(e){var n=e.name,s=e.steps,r=e.conditionedSteps,i=e.welcomeMessage;if(!s.length)throw Error('[Bot Form "getBotFormKit"] Steps must have at least 1 entry!');var o,c,u,a,p,f,d,v,g,m,h,S,y,O,F,b,x,I,j,k,C,A,B,w,M,T,E,N,U,K=l(),L=(o=n,c=t.createAction("["+o+"] User Input",t.props()),u=t.createAction("["+o+"] Successful User Input",t.props()),a=t.createAction("["+o+"] Failed User Input",t.props()),p=t.createAction("["+o+"] Last Step Completed"),f=t.createAction("["+o+"] There Is A Next Step",t.props()),d=t.createAction("["+o+"] Extra Steps Condition Met",t.props()),v=t.createAction("["+o+"] Extra Steps Condition Not Met"),g=t.createAction("["+o+"] Fetch Options Start"),m=t.createAction("["+o+"] Fetch Options Success",t.props()),h=t.createAction("["+o+"] Fetch Options Failure",t.props()),S=t.createAction("["+o+"] Fulfillment Success",t.props()),y=t.createAction("["+o+"] Fulfillment Failure",t.props()),O=t.createAction("["+o+"] Conversation Init"),F=t.createAction("["+o+"] Form Confirmed"),b=t.createAction("["+o+"] Cancel Confirmation"),{userInput:c,successfulUserInput:u,failedUserInput:a,lastStepCompleted:p,thereIsANextStep:f,extraStepsConditionMet:d,extraStepsConditionNotMet:v,fetchOptionsStart:g,fetchOptionsSuccess:m,fetchOptionsFailure:h,fulfillmentSuccess:S,fulfillmentFailure:y,conversationInit:O,undoClicked:t.createAction("["+o+"] Undo Clicked"),confirmed:F,cancelConfirmation:b}),V=(x=n,I=t.createFeatureSelector(x),j=t.createSelector(I,(function(e){return e.activeKey})),k=t.createSelector(I,(function(e){return e.isFetchingOptions})),C=t.createSelector(I,(function(e){return e.steps})),A=t.createSelector(I,(function(e){var t=e.isFetchingOptions,n=e.isPassingToNextStep,s=e.isValidatingInput,r=e.isFulfilling,i=e.isComplete;return t||n||s||r||i})),B=t.createSelector(I,(function(e){return e.messages})),w=t.createSelector(I,(function(e){return e.isComplete})),M=t.createSelector(I,(function(e){return e.isFulfilling})),T=t.createSelector(I,(function(e){var t=e.isFulfilling,n=e.isValidatingInput,s=e.isFetchingOptions;return t||n||s})),{selectBotFormState:I,selectSteps:C,selectActiveKey:j,selectActiveStep:t.createSelector(I,(function(e){var t=e.steps,n=e.activeKey;return t.find((function(e){return e.key===n}))})),selectStepsUpToCurrent:t.createSelector(I,(function(e){var t=e.steps,n=e.activeKey,s=t.findIndex((function(e){return e.key===n}));return t.slice(0,s+1)})),selectWasLastStepReached:t.createSelector(I,(function(e){var t=e.activeKey,n=e.steps;return n.findIndex((function(e){return e.key===t}))===n.length-1})),selectIsComplete:w,selectIsFetchingOptions:k,selectStepsDto:t.createSelector(I,(function(e){return e.dto})),selectIsFulfilling:M,selectMessages:B,selectIsLoading:T,selectShouldUserInputBeSupressed:A,selectIsFulfilled:t.createSelector(I,(function(e){return e.isFulfilled}))}),$={activeKey:s[0].key,steps:s,conditionedSteps:r,messages:[],welcomeMessage:i,dto:{},isComplete:!1,isFulfilled:!1,isFetchingOptions:!1,isFulfilling:!1,isValidatingInput:!1,isPassingToNextStep:!1,isConfirmed:!1};return{events:L,selectors:V,reducer:(E=$,N=L,U=K,t.createReducer(E,t.on(N.conversationInit,(function(e){return U.initConversation()(e)})),t.on(N.userInput,(function(e,t){return U.addUserMessage(t)(e)})),t.on(N.successfulUserInput,(function(e,t){return U.addValidInputToDto(t)(e)})),t.on(N.failedUserInput,(function(e,t){return U.addErrorMessageOnInvalidInput(t)(e)})),t.on(N.thereIsANextStep,(function(e,t){return U.promptNextStep(t)(e)})),t.on(N.extraStepsConditionMet,(function(e,t){return U.addExtraSteps(t)(e)})),t.on(N.fetchOptionsStart,(function(e){return Object.assign(Object.assign({},e),{isFetchingOptions:!0})})),t.on(N.fetchOptionsSuccess,(function(e,t){return U.setSelectOptions(t)(e)})),t.on(N.lastStepCompleted,(function(e){return Object.assign(Object.assign({},e),{isComplete:!0,isPassingToNextStep:!1})})),t.on(N.fetchOptionsFailure,(function(e,t){return U.addErrorMessageOnFetchFailure(t)(e)})),t.on(N.undoClicked,(function(e){return U.undo()(e)})),t.on(N.confirmed,(function(e){return Object.assign(Object.assign({},e),{isConfirmed:!0,isFulfilling:!0})})),t.on(N.cancelConfirmation,(function(e){return U.undo()(e)})),t.on(N.fulfillmentSuccess,(function(e,t){return U.addFulfillmentMessage(t)(e)})),t.on(N.fulfillmentFailure,(function(e){return U.undo()(e)}))))}},Object.defineProperty(e,"__esModule",{value:!0})})); //# sourceMappingURL=bot-form.umd.min.js.map