unclean SPARC
This commit is contained in:
@@ -0,0 +1,220 @@
|
||||
class BypassTokenGrantProposalDialog extends EICDialogContent {
|
||||
|
||||
actions = [
|
||||
{
|
||||
label: 'Cancel',
|
||||
onclick: this.cancel.bind(this),
|
||||
severity: 'secondary',
|
||||
disabled: false,
|
||||
role: 'cancel'
|
||||
},
|
||||
{
|
||||
label: 'Assign token to this proposal',
|
||||
onclick: this.consume.bind(this),
|
||||
severity: 'primary',
|
||||
disabled: false,
|
||||
role: 'consume'
|
||||
}
|
||||
]
|
||||
|
||||
status = '';
|
||||
mode = 'edit';
|
||||
validationInterval = 1000;
|
||||
|
||||
DOMContentLoaded(options) {
|
||||
|
||||
console.log('==BypassTokenGrantProposalDialog==>', options)
|
||||
|
||||
this.models = options.models;
|
||||
this.mode = options.mode || this.mode;
|
||||
this.enableWizard = options.wizard;
|
||||
this.tokenId = options.tokenId;
|
||||
this.components = ui.eicfy(this.el);
|
||||
this.find('.fasttracks-propa').classList.add(this.mode)
|
||||
|
||||
this.tabs = new Tab();
|
||||
this.tabs.addTabs(this.findAll('.tabs-extended menu li'), this.findAll('.fields-group'))
|
||||
|
||||
let position = this.find('select[name="position"]');
|
||||
app.meta.toOptions('organisation-functions', null, true).forEach(item => position.append(item));
|
||||
|
||||
this.find('[name="pic"]').value = options.pic;
|
||||
|
||||
this.euid = this.components.find(component => component.el.name == 'euLoginId');
|
||||
this.firstname = this.components.find(component => component.el.name == 'firstname');
|
||||
this.lastname = this.components.find(component => component.el.name == 'lastname');
|
||||
this.email = this.components.find(component => component.el.name == 'email');
|
||||
this.userSearchButton = this.components.find(component => component.el.classList.contains('user-search'));
|
||||
this.cards = this.components.filter(component => component.el.classList.contains('fields-group'))
|
||||
|
||||
this.globalForm = new Form(this.el);
|
||||
this.miniForms = Array.from(this.cards.map(card=>card.el).map(el => new Form(el)))
|
||||
this.euid.onQuery = this.onUserSearch.bind(this)
|
||||
this.userSearchButton.el.addEventListener('click', this.onUserSearch.bind(this))
|
||||
|
||||
}
|
||||
|
||||
DOMContentFocused() {
|
||||
this.actions.forEach(o => o.button.disabled = true);
|
||||
this.models.token.viewToken(this.tokenId)
|
||||
.then(payload => { this.setMode(this.mode, payload) });
|
||||
}
|
||||
|
||||
setMode(mode, payload) {
|
||||
this.find('.fasttracks-propa').classList.remove('loading');
|
||||
// cleanup
|
||||
payload.token.granted = payload.token.granted ? ui.format.dateTime(payload.token.granted): ''
|
||||
payload.token.track = app.meta.toString('accelerator-tracks', payload.token.track)
|
||||
payload.token.domain = app.meta.toString('accelerator-tracks', payload.token.domain)
|
||||
payload.status = payload.token.history[0].status;
|
||||
if(!payload.token.project) payload.token.project = {}
|
||||
|
||||
payload.token.project.submissiondate = payload.token.project.submissiondate ? ui.format.dateTime(payload.token.project.submissiondate): ''
|
||||
|
||||
let fields = this.globalForm.scan();
|
||||
for(let field of fields) {
|
||||
let component = this.el2component(field.el.dataset.path, field.el.name);
|
||||
|
||||
if(component) component.disabled = this.mode == 'read' || field.el.hasAttribute('disabled');
|
||||
|
||||
let item = this.findField(payload, field.el.dataset.path, field.el.name)
|
||||
if(item) {
|
||||
if(component.el.type == 'checkbox'){
|
||||
component.el.checked = item == true;
|
||||
}
|
||||
else
|
||||
component.value = item;
|
||||
}
|
||||
}
|
||||
|
||||
switch(mode) {
|
||||
case 'read':
|
||||
ui.hide(this.find('.wizard-message'));
|
||||
ui.hide(this.find('.lookup'));
|
||||
ui.hide(this.find('.instructions'));
|
||||
ui.hide(this.actions.find(o => o.role == 'consume').button.el);
|
||||
this.actions.find(o => o.role == 'cancel').label = 'Close';
|
||||
|
||||
break;
|
||||
case 'edit':
|
||||
if(!this.enableWizard)
|
||||
ui.hide(this.find('.wizard-message'))
|
||||
else
|
||||
this.actions.find(o => o.role == 'cancel').label = 'Skip';
|
||||
|
||||
this.tabs.selectByIndex(1);
|
||||
|
||||
this.validationCheck = setInterval(this.validateTabs.bind(this), this.validationInterval);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
this.actions.forEach(o => o.button.disabled = false);
|
||||
|
||||
|
||||
}
|
||||
|
||||
el2component(path, name) {
|
||||
let item = this.components
|
||||
.find(o =>
|
||||
o.el.name == name &&
|
||||
( !path || (path && o.el.dataset.path == path))
|
||||
)
|
||||
return item;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a data field value based on path an name
|
||||
* @param {*} path
|
||||
* @param {*} name
|
||||
* @returns
|
||||
*/
|
||||
findField(payload, path, name) {
|
||||
let levels = path && path != '' && path !== undefined ? path.split('.'): [];
|
||||
let tree = payload;
|
||||
|
||||
for(let level of levels)
|
||||
if(tree.hasOwnProperty(level)) tree = tree[level];
|
||||
if(tree.hasOwnProperty(name)) return tree[name];
|
||||
}
|
||||
|
||||
onUserSearch(event) {
|
||||
this.userSearchButton.loading = true;
|
||||
this.models.users.search(this.euid.value).then(
|
||||
(userList => {
|
||||
this.userSearchButton.loading = false;
|
||||
if(userList.length==0) return
|
||||
// TODO better manage if several (take most complete?)
|
||||
|
||||
let user = userList[0];
|
||||
this.euid.value = user.uid;
|
||||
this.firstname.value = user.given_name;
|
||||
this.lastname.value = user.family_name;
|
||||
this.email.value = user.email;
|
||||
}),
|
||||
(err) => {
|
||||
this.userSearchButton.loading = false;
|
||||
}
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
validateTabs() {
|
||||
let valid = true;
|
||||
for(let form of this.miniForms) {
|
||||
|
||||
let report = form.validate(true)
|
||||
let badge = this.components.find(item => item.el.hasAttribute('eicbadge') && item.el.dataset.target == form.el.dataset.target)
|
||||
if(badge) {
|
||||
badge.value = report.issues;
|
||||
}
|
||||
valid = valid && report.valid;
|
||||
}
|
||||
|
||||
this.actions.find(o => o.role == 'consume').button.disabled = !valid;
|
||||
}
|
||||
|
||||
consume() {
|
||||
if(this.globalForm.validate()) {
|
||||
this.actions.find(o => o.role == 'consume').button.loading = true;
|
||||
this.actions.find(o => o.role == 'cancel').button.disabled = true;
|
||||
this.models.token.consumeToken(this.globalForm.value)
|
||||
.then( this.onConsumeSuccess.bind(this), this.onConsumeFailed.bind(this))
|
||||
}
|
||||
}
|
||||
|
||||
onConsumeSuccess() {
|
||||
this.actions.find(o => o.role == 'consume').button.loading = false;
|
||||
this.actions.find(o => o.role == 'cancel').button.disabled = false;
|
||||
this.commit(true);
|
||||
}
|
||||
|
||||
onConsumeFailed() {
|
||||
this.actions.find(o => o.role == 'consume').button.loading = false;
|
||||
this.actions.find(o => o.role == 'cancel').button.disabled = false;
|
||||
this.abort();
|
||||
}
|
||||
|
||||
DOMContentResized() {
|
||||
super.DOMContentResized();
|
||||
|
||||
let device = this.parentContainer.getAttribute('device');
|
||||
//let tabs = this.find('.tabs-extended');
|
||||
|
||||
switch(device) {
|
||||
case 'desktop':
|
||||
this.tabs.triggers.forEach(item => ui.show(item));
|
||||
let current = this.tabs.getSelected();
|
||||
let target = current.dataset.target;
|
||||
this.findAll('article.fields-group').forEach(content => { if(content.dataset.target != target) ui.hide(content) });
|
||||
break;
|
||||
default:
|
||||
this.tabs.triggers.forEach(item => ui.hide(item));
|
||||
|
||||
this.findAll('article.fields-group').forEach(content => { ui.show(content) })
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
app.registerClass('BypassTokenGrantProposalDialog',BypassTokenGrantProposalDialog);
|
||||
Reference in New Issue
Block a user