• javascript-state-machine


    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,
    }
  • 相关阅读:
    .net 加伪静态的方法
    前台调用后台事件的方法
    关于一个网站的源码问题
    div里面有ul li时 让高度自适应的方法
    用insert语句写入汉字变成问号的解决
    .net 4.0 ValidateRequest="false" 无效
    修复 VS2008 asp.net 设计视图 失效/工具选项[Html设计视图]出现"加载此属性页时出错" 方案
    绑定数据时,时间格式的转换
    IE下CSS属性float:right下移换行或不显示的问题原因及解决
    珍惜生命,远离培训 《如何选择好的培训机构》读后感 JavaEye技术网站
  • 原文地址:https://www.cnblogs.com/chenbeibei520/p/11417329.html
Copyright © 2020-2023  润新知