1.1.5 • Published 3 years ago
decor-core v1.1.5
decor
decorator
npm i decor-core -Sor
yarn add decor-core -Sget prompt operation
import { wrapperGet } from '@/js/http'
import { getPromptDecorator } from 'decor-core'
import { Modal } from 'view-design'
const handlePrompt = (args) => new Promise((resolve, reject) => {
  let value = ''
  Modal.confirm({
    ...args,
    onOk() { resolve({ value }) },
    onCancel() { reject(null) },
    render: (h) => h('Input', {
      props: { value, autofocus: true, placeholder: 'Please enter the reason' },
      on: { input: (val) => value = val }
    })
  })
})
const setConfirmRefusePromptDecorator = getPromptDecorator({ title: 'Determine refused to!' })
export default new class Api {
  @setConfirmRefusePromptDecorator(handlePrompt, 'reject')
  reject = wrapperGet('api/reject')
}()set confirm operation
import { wrapperGet } from '@/js/http'
import { getConfirmDecorator } from 'decor-core'
import { Modal } from 'view-design'
const handleConfirmation = (args) => new Promise((resolve, reject) => {
  Modal.confirm({ 
    ...args,
    onOk() { resolve('resolve') },
    onCancel() { reject(null) }
  })
})
const setConfirmDeleteDecorator = getConfirmDecorator({ title: 'hint', content: 'Are you sure?' })
export default new class Api {
  @setConfirmDeleteDecorator(handleConfirmation)
  getList = wrapperGet('api/list')
}()set and get cache data
import { wrapperGet } from '@/js/http'
import { getCacheDataDecorator } from 'decor-core'
import { setCache, getCache } from 'decor-core/handle'
const setSessStorage = setCache('sessionStorage')
const getSessStorage = getCache('sessionStorage')
const setCacheDecorator = getCacheDataDecorator(setSessStorage, getSessStorage)
export default new class Api {
  @setCacheDecorator('uniqueKey')
  getList = wrapperGet('api/list')
}()set delay
import { wrapperGet } from '@/js/http'
import { setDelayDecorator } from 'decor-core'
export default new class Api {
  @setDelayDecorator(3000)
  getList = wrapperGet('api/list')
}()set extra extension params
import { wrapperGet } from '@/js/http'
import { setExtraExtensionParameterDecorator } from 'decor-core'
export default new class Api {
  @setExtraExtensionParameterDecorator({ extra: 'text' })
  getList = wrapperGet('api/list')
}()set response data transforms or filter
import { wrapperGet } from '@/js/http'
import { setResponseDataDecorator, setResponsePipeDecorator, setResponseComposeDecorator } from 'decor-core'
import { handleResponseDataToMap, handleResponseDataToList } from 'decor-core/handle'
const getTargetList = handleResponseDataToList('data')
const getTargetMap = handleResponseDataToMap({ labelKey: 'label', valueKey: 'value' })
export default new class Api {
  @setResponseDataDecorator(getTargetList)
  getList = wrapperGet('api/list')
  @setResponseComposeDecorator(getTargetMap, getTargetList)
  getRecord = wrapperGet('api/record')
  @setResponsePipeDecorator(getTargetList, getTargetMap)
  getRow = wrapperGet('api/row')
}()set request headers
import { wrapperGet } from '@/js/http'
import { setRequestHeaderDecorator } from 'decor-core'
export default new class Api {
  @setRequestHeaderDecorator({ referer: 'test.com' })
  getList = wrapperGet('api/list')
}()api mock function
import { wrapperGet } from '@/js/http'
import { getMockDecorator } from 'decor-core'
const setMockDecorator = getMockDecorator((...arg) => {
  console.log(arg)
  return Promise.resolve({
    data: [
      { labels: 'NO START', values: 0 },
      { labels: 'PENDING', values: 1 },
      { labels: 'END TIME', values: 2 },
    ]
  })
})
export default new class Api {
  @setMockDecorator('development')
  getList = wrapperGet('api/list')
  
  @setMockDecorator('test')
  getList = wrapperGet('api/list1')
}()set response message tips
import { wrapperGet } from '@/js/http'
import { getMessageDecorator } from 'decor-core'
import { Message } from 'view-design'
const setMessageDecorator = getMessageDecorator({ success: Message.success, error: Message.error })
export default new class Api {
  @setMessageDecorator({ msgKey: 'errorMsg' })
  getList = wrapperGet('api/list')
  @setMessageDecorator({ successMsg: 'success!', errorMsg: 'error!' })
  getRecord = wrapperGet('api/record')
}()set request loading
import { wrapperGet } from '@/js/http'
import { getLoadingDecorator } from 'decor-core'
import { LoadingBar } from 'view-design'
const setLoadingDecorator = getLoadingDecorator(LoadingBar.start, LoadingBar.finish)
export default new class Api {
  @setLoadingDecorator
  getList = wrapperGet('api/list')
}()set request config
import { wrapperGet } from '@/js/http'
import { setRequestConfigDecorator } from 'decor-core'
const config = {
  url: '/user',
  baseURL: 'https://some-domain.com/api/',
  headers: {'X-Requested-With': 'XMLHttpRequest'},
}
export default new class ActivityApi{
  @setRequestConfigDecorator(config)
  get = wrapperGet('/api/list')
}()set request cancel
import axios from 'axios'
import { wrapperGet } from '@/js/http'
import { setRequestConfigDecorator } from 'decor-core'
const CancelToken = axios.CancelToken
export default new class CouponApi {
  cancelExector = () => {}
  cancelToken = null
  constructor() {
    this.generateCancelToken()
  }
  generateCancelToken() {
    this.cancelToken = new CancelToken((c) => this.cancelExecutor = c)
  }
  get = () => {
    this.generateCancelToken()
    const handleSetConfig = setRequestConfigDecorator({ cancelToken: this.cancelToken })
    return handleSetConfig(wrapperPost('/api/list'))
  }
}()