mirror of
https://github.com/cheveguerra/bot-whatsapp.git
synced 2026-04-20 04:29:16 +00:00
refactor(bot): 🔥 refactor child nested cbs
refactor(bot): 🔥 refactor child nested cbs
This commit is contained in:
@@ -115,24 +115,16 @@ class CoreClass {
|
|||||||
|
|
||||||
// 📄 Se encarga de revisar si el contexto del mensaje tiene callback y ejecutarlo
|
// 📄 Se encarga de revisar si el contexto del mensaje tiene callback y ejecutarlo
|
||||||
const cbEveryCtx = (inRef) => {
|
const cbEveryCtx = (inRef) => {
|
||||||
const indexFlow = this.flowClass.findIndexByRef(inRef)
|
this.flowClass.allCallbacks[inRef](messageCtxInComming, {
|
||||||
this.flowClass.allCallbacks[indexFlow].callback(
|
fallBack,
|
||||||
messageCtxInComming,
|
flowDynamic,
|
||||||
{
|
})
|
||||||
fallBack,
|
|
||||||
flowDynamic,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 📄 [options: callback]: Si se tiene un callback se ejecuta
|
// 📄 [options: callback]: Si se tiene un callback se ejecuta
|
||||||
if (!fallBackFlag) {
|
if (!fallBackFlag) {
|
||||||
if (refToContinue && prevMsg?.options?.callback) {
|
for (const ite of this.flowClass.find(body)) {
|
||||||
cbEveryCtx(refToContinue?.ref)
|
cbEveryCtx(ite?.ref)
|
||||||
} else {
|
|
||||||
for (const ite of this.flowClass.find(body)) {
|
|
||||||
cbEveryCtx(ite?.ref)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -144,6 +136,11 @@ class CoreClass {
|
|||||||
}))
|
}))
|
||||||
|
|
||||||
msgToSend = this.flowClass.find(body, false, flowStandalone) || []
|
msgToSend = this.flowClass.find(body, false, flowStandalone) || []
|
||||||
|
|
||||||
|
for (const ite of msgToSend) {
|
||||||
|
cbEveryCtx(ite?.ref)
|
||||||
|
}
|
||||||
|
|
||||||
this.sendFlow(msgToSend, from)
|
this.sendFlow(msgToSend, from)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
const { toSerialize } = require('./methods/toSerialize')
|
const { toSerialize } = require('./methods/toSerialize')
|
||||||
|
const { flatObject } = require('../utils/flattener')
|
||||||
|
|
||||||
class FlowClass {
|
class FlowClass {
|
||||||
allCallbacks = []
|
allCallbacks = []
|
||||||
@@ -8,7 +9,8 @@ class FlowClass {
|
|||||||
if (!Array.isArray(_flow)) throw new Error('Esto debe ser un ARRAY')
|
if (!Array.isArray(_flow)) throw new Error('Esto debe ser un ARRAY')
|
||||||
this.flowRaw = _flow
|
this.flowRaw = _flow
|
||||||
|
|
||||||
this.getAllCb(this.flowRaw)
|
this.allCallbacks = flatObject(_flow)
|
||||||
|
console.log('[🙌🙌🙌]', this.allCallbacks)
|
||||||
|
|
||||||
const mergeToJsonSerialize = Object.keys(_flow)
|
const mergeToJsonSerialize = Object.keys(_flow)
|
||||||
.map((indexObjectFlow) => _flow[indexObjectFlow].toJson())
|
.map((indexObjectFlow) => _flow[indexObjectFlow].toJson())
|
||||||
@@ -17,17 +19,6 @@ class FlowClass {
|
|||||||
this.flowSerialize = toSerialize(mergeToJsonSerialize)
|
this.flowSerialize = toSerialize(mergeToJsonSerialize)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Buscar y aplanar todos los callbacks
|
|
||||||
* @param {*} inFlow
|
|
||||||
*/
|
|
||||||
getAllCb = (inFlow) => {
|
|
||||||
this.allCallbacks = inFlow
|
|
||||||
.map((cbIn) => cbIn.ctx.callbacks)
|
|
||||||
.flat(2)
|
|
||||||
.map((c, i) => ({ callback: c?.callback, index: i }))
|
|
||||||
}
|
|
||||||
|
|
||||||
find = (keyOrWord, symbol = false, overFlow = null) => {
|
find = (keyOrWord, symbol = false, overFlow = null) => {
|
||||||
keyOrWord = `${keyOrWord}`
|
keyOrWord = `${keyOrWord}`
|
||||||
let capture = false
|
let capture = false
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
|
const { flatObject } = require('../../utils/flattener')
|
||||||
const { generateRef } = require('../../utils/hash')
|
const { generateRef } = require('../../utils/hash')
|
||||||
|
const { addChild } = require('./addChild')
|
||||||
const { toJson } = require('./toJson')
|
const { toJson } = require('./toJson')
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -27,9 +29,27 @@ const addAnswer =
|
|||||||
delay: typeof options?.delay === 'number' ? options?.delay : 0,
|
delay: typeof options?.delay === 'number' ? options?.delay : 0,
|
||||||
})
|
})
|
||||||
|
|
||||||
const getNested = () => ({
|
const getNested = () => {
|
||||||
nested: Array.isArray(nested) ? nested : [],
|
let flatNested = []
|
||||||
})
|
if (Array.isArray(nested)) {
|
||||||
|
for (const iterator of nested) {
|
||||||
|
flatNested = [...flatNested, ...addChild(iterator)]
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
nested: flatNested,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
nested: addChild(nested),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Esta funcion aplana y busca los callback anidados de los hijos
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const getCbFromNested = () => flatObject(nested)
|
||||||
|
|
||||||
const callback = typeof cb === 'function' ? cb : () => null
|
const callback = typeof cb === 'function' ? cb : () => null
|
||||||
|
|
||||||
@@ -59,12 +79,12 @@ const addAnswer =
|
|||||||
},
|
},
|
||||||
])
|
])
|
||||||
|
|
||||||
const callbacks = [].concat(inCtx.callbacks).concat([
|
getCbFromNested()
|
||||||
{
|
const callbacks = {
|
||||||
ref: lastCtx.ref,
|
...inCtx.callbacks,
|
||||||
callback,
|
...getCbFromNested(),
|
||||||
},
|
[ref]: callback,
|
||||||
])
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...lastCtx,
|
...lastCtx,
|
||||||
|
|||||||
@@ -3,14 +3,23 @@ const commonjs = require('@rollup/plugin-commonjs')
|
|||||||
const { nodeResolve } = require('@rollup/plugin-node-resolve')
|
const { nodeResolve } = require('@rollup/plugin-node-resolve')
|
||||||
const { join } = require('path')
|
const { join } = require('path')
|
||||||
|
|
||||||
const PATH = join(__dirname, 'lib', 'bundle.bot.cjs')
|
module.exports = [
|
||||||
|
{
|
||||||
module.exports = {
|
input: join(__dirname, 'index.js'),
|
||||||
input: join(__dirname, 'index.js'),
|
output: {
|
||||||
output: {
|
banner: banner['banner.output'].join(''),
|
||||||
banner: banner['banner.output'].join(''),
|
file: join(__dirname, 'lib', 'bundle.bot.cjs'),
|
||||||
file: PATH,
|
format: 'cjs',
|
||||||
format: 'cjs',
|
},
|
||||||
|
plugins: [commonjs(), nodeResolve()],
|
||||||
},
|
},
|
||||||
plugins: [commonjs(), nodeResolve()],
|
{
|
||||||
}
|
input: join(__dirname, 'index.js'),
|
||||||
|
output: {
|
||||||
|
banner: banner['banner.output'].join(''),
|
||||||
|
file: join(__dirname, 'lib', 'bundle.bot.cjs'),
|
||||||
|
format: 'cjs',
|
||||||
|
},
|
||||||
|
plugins: [commonjs(), nodeResolve()],
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const {
|
|||||||
} = require('../index')
|
} = require('../index')
|
||||||
|
|
||||||
class MockFlow {
|
class MockFlow {
|
||||||
allCallbacks = [{ callback: () => console.log('') }]
|
allCallbacks = { ref: () => 1 }
|
||||||
flowSerialize = []
|
flowSerialize = []
|
||||||
flowRaw = []
|
flowRaw = []
|
||||||
find = (arg) => {
|
find = (arg) => {
|
||||||
|
|||||||
25
packages/bot/utils/flattener.js
Normal file
25
packages/bot/utils/flattener.js
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
const flatObject = (listArray = []) => {
|
||||||
|
const cbNestedList = Array.isArray(listArray) ? listArray : []
|
||||||
|
|
||||||
|
if (!listArray.length) return {}
|
||||||
|
|
||||||
|
const cbNestedObj = cbNestedList
|
||||||
|
.map(({ ctx }) => ctx?.callbacks)
|
||||||
|
.filter((i) => !!i)
|
||||||
|
const queueCb = cbNestedObj.reduce((acc, current) => {
|
||||||
|
const getKeys = Object.keys(current)
|
||||||
|
const parse = getKeys.map((icb, i) => ({
|
||||||
|
[icb]: Object.values(current)[i],
|
||||||
|
}))
|
||||||
|
return [...acc, ...parse]
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
const flatObj = {}
|
||||||
|
for (const iteration of queueCb) {
|
||||||
|
const [keyCb] = Object.keys(iteration)
|
||||||
|
flatObj[keyCb] = iteration[keyCb]
|
||||||
|
}
|
||||||
|
return flatObj
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { flatObject }
|
||||||
@@ -5,6 +5,7 @@
|
|||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-named-instance: 'Regular';
|
font-named-instance: 'Regular';
|
||||||
src: url('../fonts/Inter-roman-latin.var.woff2') format('woff2');
|
src: url('../fonts/Inter-roman-latin.var.woff2') format('woff2');
|
||||||
|
font-display: swap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
@@ -14,6 +15,7 @@
|
|||||||
font-style: italic;
|
font-style: italic;
|
||||||
font-named-instance: 'Italic';
|
font-named-instance: 'Italic';
|
||||||
src: url('../fonts/Inter-italic-latin.var.woff2') format('woff2');
|
src: url('../fonts/Inter-italic-latin.var.woff2') format('woff2');
|
||||||
|
font-display: swap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
@@ -22,6 +24,7 @@
|
|||||||
font-style: normal;
|
font-style: normal;
|
||||||
src: url('../fonts/FiraCode-VF.woff2') format('woff2-variations'),
|
src: url('../fonts/FiraCode-VF.woff2') format('woff2-variations'),
|
||||||
url('../fonts/FiraCode-VF.woff') format('woff-variations');
|
url('../fonts/FiraCode-VF.woff') format('woff-variations');
|
||||||
|
font-display: swap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.font-mono {
|
.font-mono {
|
||||||
@@ -34,6 +37,7 @@
|
|||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-display: swap;
|
font-display: swap;
|
||||||
src: url('../fonts/SourceSansPro-Regular.otf') format('opentype');
|
src: url('../fonts/SourceSansPro-Regular.otf') format('opentype');
|
||||||
|
font-display: swap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
@@ -41,4 +45,5 @@
|
|||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
src: url('../fonts/Ubuntu-Mono-bold.woff2') format('woff2');
|
src: url('../fonts/Ubuntu-Mono-bold.woff2') format('woff2');
|
||||||
|
font-display: swap;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user