111 lines
2.3 KiB
JavaScript
111 lines
2.3 KiB
JavaScript
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);
|