version-rocket
Version:
Tools to check version monitoring (updates) for web application. web 应用版本监测(更新)工具
129 lines (121 loc) • 3.84 kB
text/typescript
import versionBg from './../assets/version-bg.png'
import './version-tip-dialog.css'
import {setVersionTipTheme} from './versionTipTheme'
import {unCheckVersion} from '../index'
const defaultParams = {
title: 'Update',
description: 'is available',
buttonText: 'Refresh',
}
export const versionTipDialog = (params: {
title?: string
description?: string
buttonText?: string
cancelButtonText?: string
cancelMode?: string
imageUrl?: string
rocketColor?: string
primaryColor?: string
buttonStyle?: string
newVersion?: string
needRefresh?: boolean
onRefresh?: (event: any) => void
onCancel?: (event: any) => void
}) => {
const dialogElement = document.querySelector('#version-rocket')
if (dialogElement) return
const template = `
<div id="version-rocket">
<div class="version-area">
${
params.primaryColor || params.rocketColor
? `<div class="version-img">${setVersionTipTheme(
params.primaryColor,
params.rocketColor
)}</div>`
: `<img class="version-img" src="${
params.imageUrl || versionBg
}" alt="version" />`
}
<div class="version-content">
<div class="version-title">
${params.title || defaultParams.title}
</div>
<div class="version-subtitle">
${
params.description ||
(params.newVersion
? `V ${params.newVersion} ${defaultParams.description}`
: `A new version ${defaultParams.description}`)
}
</div>
<div style="${
params.primaryColor
? `background-color: ${params.primaryColor};`
: ''
} ${params.buttonStyle || ''}" class="refresh-button">
${params.buttonText || defaultParams.buttonText}
</div>
${
params.cancelButtonText
? `<div class="cancel-button">
${params.cancelButtonText}
</div>`
: ''
}
</div>
</div>
</div>`
let rootNode = document.createElement('div')
rootNode.innerHTML = template
document.body.appendChild(rootNode)
// refresh
const refreshBtnNode = document.querySelector(
'#version-rocket .refresh-button'
) as HTMLElement
refreshBtnNode.onclick = () => {
if (typeof params?.onRefresh === 'function') {
params.onRefresh({
newVersion: params.newVersion,
needRefresh: params.needRefresh || false,
})
} else {
window.location.reload()
}
}
// cancel
const cancelBtnNode = document.querySelector(
'#version-rocket .cancel-button'
) as HTMLElement
if (!cancelBtnNode) return
cancelBtnNode.onclick = () => {
if (typeof params?.onCancel === 'function') {
params.onCancel({
newVersion: params.newVersion,
needRefresh: params.needRefresh || false,
})
return
}
const cancelMode = params?.cancelMode || 'ignore-current-version'
switch (cancelMode) {
case 'ignore-current-version':
localStorage.setItem(
'version-rocket:cancelled',
params.newVersion || ''
)
break
case 'ignore-today':
localStorage.setItem(
'version-rocket:cancelled',
new Date().toLocaleDateString()
)
break
case 'ignore-current-window':
sessionStorage.setItem('version-rocket:cancelled', 'true')
break
default:
break
}
unCheckVersion({closeDialog: true, closeWorker: false})
}
}