Working options page
This commit is contained in:
110
options.js
Normal file
110
options.js
Normal file
@@ -0,0 +1,110 @@
|
||||
async function onLoad() {
|
||||
const cfg = await browser.storage.sync.get();
|
||||
|
||||
const token = document.getElementById('token');
|
||||
token.value = cfg.token || '';
|
||||
token.addEventListener('input', async () => {
|
||||
set('token', token.value);
|
||||
await populateWorkspaces();
|
||||
await populateAssignees();
|
||||
});
|
||||
|
||||
await populateWorkspaces();
|
||||
await populateAssignees();
|
||||
|
||||
const workspace = document.getElementById('workspace');
|
||||
workspace.addEventListener('change', async () => {
|
||||
await set('workspace', workspace.value);
|
||||
});
|
||||
|
||||
const assignee = document.getElementById('assignee');
|
||||
assignee.addEventListener('change', async () => {
|
||||
await set('assignee', assignee.value);
|
||||
});
|
||||
}
|
||||
|
||||
async function populateWorkspaces() {
|
||||
const cfg = await browser.storage.sync.get();
|
||||
|
||||
if (!cfg.token) {
|
||||
return;
|
||||
}
|
||||
|
||||
const workspacesResp = await fetch(
|
||||
'https://app.asana.com/api/1.0/workspaces',
|
||||
{
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Authorization': `Bearer ${cfg.token}`,
|
||||
'Accept': 'application/json',
|
||||
},
|
||||
credentials: 'omit',
|
||||
},
|
||||
);
|
||||
|
||||
const workspaces = await workspacesResp.json();
|
||||
|
||||
const select = document.getElementById('workspace');
|
||||
select.innerHTML = '';
|
||||
|
||||
for (const workspace of workspaces.data) {
|
||||
const option = document.createElement('option');
|
||||
option.innerText = workspace.name;
|
||||
option.value = workspace.gid;
|
||||
select.appendChild(option);
|
||||
|
||||
if (option.value == cfg.workspace) {
|
||||
option.selected = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!cfg.workspace) {
|
||||
await set('workspace', select.value);
|
||||
}
|
||||
}
|
||||
|
||||
async function populateAssignees() {
|
||||
const cfg = await browser.storage.sync.get();
|
||||
|
||||
if (!cfg.token) {
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: Support other assignees
|
||||
|
||||
const meResp = await fetch(
|
||||
'https://app.asana.com/api/1.0/users/me',
|
||||
{
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Authorization': `Bearer ${cfg.token}`,
|
||||
'Accept': 'application/json',
|
||||
},
|
||||
credentials: 'omit',
|
||||
},
|
||||
);
|
||||
|
||||
const me = await meResp.json();
|
||||
|
||||
const select = document.getElementById('assignee');
|
||||
select.innerHTML = '';
|
||||
|
||||
const option = document.createElement('option');
|
||||
option.innerText = `${me.data.name} <${me.data.email}>`;
|
||||
option.value = me.data.gid;
|
||||
select.appendChild(option);
|
||||
|
||||
option.selected = true;
|
||||
|
||||
if (!cfg.assignee) {
|
||||
await set('assignee', select.value);
|
||||
}
|
||||
}
|
||||
|
||||
async function set(key, val) {
|
||||
const store = {};
|
||||
store[key] = val;
|
||||
await browser.storage.sync.set(store);
|
||||
}
|
||||
|
||||
addEventListener('DOMContentLoaded', onLoad);
|
||||
Reference in New Issue
Block a user