34 lines
929 B
TypeScript
34 lines
929 B
TypeScript
import {
|
|
BubbleStep,
|
|
BubbleStepType,
|
|
InputStep,
|
|
InputStepType,
|
|
Step,
|
|
TypingEmulation,
|
|
} from 'models'
|
|
import { isBubbleStep, isInputStep } from 'utils'
|
|
|
|
export const computeTypingTimeout = (
|
|
bubbleContent: string,
|
|
typingSettings: TypingEmulation
|
|
) => {
|
|
let wordCount = bubbleContent.match(/(\w+)/g)?.length ?? 0
|
|
if (wordCount === 0) wordCount = bubbleContent.length
|
|
const typedWordsPerMinute = typingSettings.speed
|
|
let typingTimeout = typingSettings.enabled
|
|
? (wordCount / typedWordsPerMinute) * 60000
|
|
: 0
|
|
if (typingTimeout > typingSettings.maxDelay * 1000)
|
|
typingTimeout = typingSettings.maxDelay * 1000
|
|
return typingTimeout
|
|
}
|
|
|
|
export const getLastChatStepType = (
|
|
steps: Step[]
|
|
): BubbleStepType | InputStepType | undefined => {
|
|
const displayedSteps = steps.filter(
|
|
(s) => isBubbleStep(s) || isInputStep(s)
|
|
) as (BubbleStep | InputStep)[]
|
|
return displayedSteps.pop()?.type
|
|
}
|