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 = `
${ params.primaryColor || params.rocketColor ? `
${setVersionTipTheme( params.primaryColor, params.rocketColor )}
` : `version` }
${params.title || defaultParams.title}
${ params.description || (params.newVersion ? `V ${params.newVersion} ${defaultParams.description}` : `A new version ${defaultParams.description}`) }
${params.buttonText || defaultParams.buttonText}
${ params.cancelButtonText ? `
${params.cancelButtonText}
` : '' }
` 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}) } }