JiraFeedback/js/options.js
2025-01-23 23:04:49 +05:30

88 lines
2.5 KiB
JavaScript

class JiraSettings {
constructor() {
this.form = document.getElementById('settings-form');
this.notification = document.getElementById('notification');
this.domainInput = document.getElementById('jira-domain');
this.emailInput = document.getElementById('jira-email');
this.tokenInput = document.getElementById('jira-token');
this.loadSettings();
this.attachEventListeners();
}
attachEventListeners() {
this.form.addEventListener('submit', (e) => this.handleSubmit(e));
}
async loadSettings() {
const settings = await chrome.storage.local.get(['jiraDomain', 'jiraEmail', 'jiraToken']);
if (settings.jiraDomain) {
this.domainInput.value = settings.jiraDomain;
}
if (settings.jiraEmail) {
this.emailInput.value = settings.jiraEmail;
}
if (settings.jiraToken) {
this.tokenInput.value = settings.jiraToken;
}
}
async handleSubmit(event) {
event.preventDefault();
const domain = this.domainInput.value.trim();
const email = this.emailInput.value.trim();
const token = this.tokenInput.value.trim();
try {
// Validate the credentials
const isValid = await this.validateJiraCredentials(domain, email, token);
if (isValid) {
// Save settings
await chrome.storage.local.set({
jiraDomain: domain,
jiraEmail: email,
jiraToken: token
});
this.showNotification('Settings saved successfully!', 'success');
} else {
this.showNotification('Invalid Jira credentials. Please check and try again.', 'error');
}
} catch (error) {
console.error('Error saving settings:', error);
this.showNotification('Error saving settings. Please try again.', 'error');
}
}
async validateJiraCredentials(domain, email, token) {
try {
const response = await fetch(`https://${domain}/rest/api/3/myself`, {
headers: {
'Authorization': `Basic ${btoa(`${email}:${token}`)}`,
'Accept': 'application/json'
}
});
return response.ok;
} catch (error) {
console.error('Error validating Jira credentials:', error);
return false;
}
}
showNotification(message, type) {
this.notification.textContent = message;
this.notification.className = `notification ${type}`;
this.notification.style.display = 'block';
setTimeout(() => {
this.notification.style.display = 'none';
}, 5000);
}
}
// Initialize settings
new JiraSettings();