=> {
const targetVersion = dropdown.value
if (!targetVersion || targetVersion === currentVersion) {
result.className = 'notice notice-warning'
result.innerHTML = `${getI18n('selectDifferent', 'Please select a different version to switch to.')}
`
result.style.display = ''
return
}
button.disabled = true
const originalText = button.textContent ?? ''
button.textContent = getI18n('switching', 'Switching...')
result.className = 'notice notice-info'
result.innerHTML = `${getI18n('processing', 'Processing version switch. Please wait...')}
`
result.style.display = ''
try {
const response = await postForm({
action: 'code_snippets_switch_version',
target_version: targetVersion,
nonce: cfg.nonce_switch ?? '',
}, cfg)
if (response.success) {
result.className = 'notice notice-success'
result.innerHTML = `${response.data?.message ?? ''}
`
setTimeout(() => window.location.reload(), SUCCESS_RELOAD_MS)
return
}
result.className = 'notice notice-error'
result.innerHTML = `${response.data?.message ?? getI18n('error', 'An error occurred.')}
`
button.disabled = false
button.textContent = originalText
} catch (_err) {
result.className = 'notice notice-error'
result.innerHTML = `${getI18n('errorSwitch', 'An error occurred while switching versions. Please try again.')}
`
button.disabled = false
button.textContent = originalText
}
})()
})
}
const REFRESH_RELOAD_MS = 1000
const bindRefresh = (
btn: HTMLButtonElement,
cfg: VersionConfig,
): void => {
btn.addEventListener('click', (): void => {
void (async (): Promise => {
const original = btn.textContent ?? ''
btn.disabled = true
btn.textContent = getI18n('refreshing', 'Refreshing...')
try {
await postForm({
action: 'code_snippets_refresh_versions',
nonce: cfg.nonce_refresh ?? '',
}, cfg)
btn.textContent = getI18n('refreshed', 'Refreshed!')
setTimeout(() => {
btn.disabled = false
btn.textContent = original
window.location.reload()
}, REFRESH_RELOAD_MS)
} catch {
btn.disabled = false
btn.textContent = original
}
})()
})
}
export const initVersionSwitch = (): void => {
const cfg = getConfig()
const currentVersion = getCurrentVersion()
const button = el('switch-version-btn')
const dropdown = el('target_version')
const result = el('version-switch-result')
const refreshBtn = el('refresh-versions-btn')
if (dropdown) {
bindDropdown(dropdown, button, currentVersion)
}
if (button && dropdown && result) {
bindSwitch(button, dropdown, result, cfg, currentVersion)
}
if (refreshBtn) {
bindRefresh(refreshBtn, cfg)
}
}