javascript-state-machine
2024-08-26 19:00:13
import StateMachine from 'javascript-state-machine'
import EventEmitter from 'events' /**
* 上传的文档的状态管理
*/ const STATES = {
NOT_UPLOAD: 'notUpload',
FILE_TOO_LARGE: 'fileTooLarge',
UPLOADING: 'uploading',
UPLOAD_SUCCESS: 'uploadSuccess',
UPLOAD_ERROR: 'uploadError',
CONVERTING: 'converting',
CONVERT_SUCCESS: 'convertSuccess',
CONVERT_ERROR: 'convertError',
} const TRANSITIONS = {
NOT_UPLOAD_TO_FILE_TOO_LARGE: 'notUploadToFileTooLarge',
NOT_UPLOAD_TO_UPLOADING: 'notUploadToUploading',
UPLOADING_TO_UPLOAD_SUCCESS: 'uploadingToUploadSuccess',
UPLOADING_TO_UPLOAD_ERROR: 'uploadingToUploadError',
UPLOAD_SUCCESS_TO_CONVERTING: 'uploadSuccessToConverting',
CONVERTING_TO_CONVERT_SUCCESS: 'convertingToConvertSuccess',
CONVERTING_TO_CONVERT_ERROR: 'convertingToConvertError',
} class SlideStateManager extends EventEmitter {
constructor(initState = STATES.NOT_UPLOAD) {
super() this.stateMachine = new StateMachine({
init: initState,
transitions: [
{
name: TRANSITIONS.NOT_UPLOAD_TO_FILE_TOO_LARGE,
from: STATES.NOT_UPLOAD,
to: STATES.FILE_TOO_LARGE,
},
{
name: TRANSITIONS.NOT_UPLOAD_TO_UPLOADING,
from: STATES.NOT_UPLOAD,
to: STATES.UPLOADING,
},
{
name: TRANSITIONS.UPLOADING_TO_UPLOAD_SUCCESS,
from: STATES.UPLOADING,
to: STATES.UPLOAD_SUCCESS,
},
{
name: TRANSITIONS.UPLOADING_TO_UPLOAD_ERROR,
from: STATES.UPLOADING,
to: STATES.UPLOAD_ERROR,
},
{
name: TRANSITIONS.UPLOAD_SUCCESS_TO_CONVERTING,
from: STATES.UPLOAD_SUCCESS,
to: STATES.CONVERTING,
},
{
name: TRANSITIONS.CONVERTING_TO_CONVERT_SUCCESS,
from: STATES.CONVERTING,
to: STATES.CONVERT_SUCCESS,
},
{
name: TRANSITIONS.CONVERTING_TO_CONVERT_ERROR,
from: STATES.CONVERTING,
to: STATES.CONVERT_ERROR,
},
],
methods: {
onNotUploadToFileTooLarge: () => {
this.emit(TRANSITIONS.NOT_UPLOAD_TO_FILE_TOO_LARGE)
},
onNotUploadToUploading: () => {
this.emit(TRANSITIONS.NOT_UPLOAD_TO_UPLOADING)
},
onUploadingToUploadSuccess: () => {
this.emit(TRANSITIONS.UPLOADING_TO_UPLOAD_SUCCESS)
},
onUploadingToUploadError: () => {
this.emit(TRANSITIONS.UPLOADING_TO_UPLOAD_ERROR)
},
onUploadSuccessToConverting: () => {
this.emit(TRANSITIONS.UPLOAD_SUCCESS_TO_CONVERTING)
},
onConvertingToConvertSuccess: () => {
this.emit(TRANSITIONS.CONVERTING_TO_CONVERT_SUCCESS)
},
onConvertingToConvertError: () => {
this.emit(TRANSITIONS.CONVERTING_TO_CONVERT_ERROR)
},
},
})
} stateMachine onNotUploadToFileTooLarge = (cb) => {
this.on(TRANSITIONS.NOT_UPLOAD_TO_FILE_TOO_LARGE, cb)
} onNotUploadToUploading = (cb) => {
this.on(TRANSITIONS.NOT_UPLOAD_TO_UPLOADING, cb)
} onUploadingToUploadSuccess = (cb) => {
this.on(TRANSITIONS.UPLOADING_TO_UPLOAD_SUCCESS, cb)
} onUploadingToUploadError = (cb) => {
this.on(TRANSITIONS.UPLOADING_TO_UPLOAD_ERROR, cb)
} onUploadSuccessToConverting = (cb) => {
this.on(TRANSITIONS.UPLOAD_SUCCESS_TO_CONVERTING, cb)
} onConvertingToConvertSuccess = (cb) => {
this.on(TRANSITIONS.CONVERTING_TO_CONVERT_SUCCESS, cb)
} onConvertingToConvertError = (cb) => {
this.on(TRANSITIONS.CONVERTING_TO_CONVERT_ERROR, cb)
}
} export default SlideStateManager
export {
TRANSITIONS as MACHINE_TRANSITIONS,
STATES as MACHINE_STATE,
}
最新文章
- nginx安装waf防护
- cs程序添加初始化加载
- ABAP断点调试
- 搭建一个springmvc helloworld程序
- IIS HTTP文件服务器搭建步骤
- 记录一次Jmeter性能测试
- 第二个App“今日美文”上架【原】
- TDD中的单元测试
- Manacher 最长回文子串。
- AntData.ORM框架 之 读写分离
- Spring MVC 配置文件dispatcher-servlet.xml 文件详解(转自 学无止境-yj)
- python+opencv选出视频中一帧再利用鼠标回调实现图像上画矩形框
- 分布式系列五: RMI通信
- gradle ---->; 安装和使用
- LeetCode OJ 215. Kth Largest Element in an Array
- Delphi判断是否有全屏程序
- mySql索引优化分析
- xshell复制粘贴
- JQuery------jQuery.parseHTML()的使用方法
- 查看APK包签名的方法。
热门文章
- mysql查看数据库表数量
- Spark(四十八):Spark MetricsSystem信息收集过程分析
- 解决无法将java项目部署到tomcat中去
- 目标检测标注工具labelImg安装及使用
- linux内核的0号进程是在哪里创建的?
- Visual Studio 2019更新到16.2.1
- System.Net.WebRequest.cs
- Flutter BottomSheet底部弹窗效果
- linux删除用户报错:userdel: user prize is currently used by process 28021
- 修复gitlab服务器突然停电导致PostgreSQL损坏的数据库