123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398 |
- //all functions are based off of participantManager (print, config, etc.)
- var participantIdManager={};
- participantIdManager.set=
- function(parentClass){
- this.parent=parentClass;
- }
- participantIdManager.addSelectOptions=
- function(pM){
- if (pM.mode=="LOCAL") return;
-
- let input=this.getInputElement(pM);
- let config=this.parent.config;
- let fName='addParticipantSelectOptions';
- this.parent.print(fName+' input '+input);
- let opt=config.document.createElement("option");
- opt.value=-1;
- opt.text="<Select>";
- input.options[input.options.length]=opt;
- //here the lookup is being populated (registrationData)
- let demoRows=config.formConfig['registrationData'].rows;
- this.parent.print(fName+" demoRows: "+demoRows.length);
- for (let i=0;i<demoRows.length;i++){
- let opt2=config.document.createElement("option");
- opt2.value=i+1;
- let id=demoRows[i][this.getCrfEntryFieldName(pM)];
- let loc=demoRows[i][this.getCrfEntryFieldName(pM,'LOCAL')];
- opt2.text=id+' (Local: '+loc+')';
- input.options[input.options.length]=opt2;
- this.parent.print(fName+' '+pM.participantField+' '+demoRows[i][pM.participantField]);
- }
- input.selectedIndex=0;
- }
- participantIdManager.updateElements=
- function(pM){
- let fName='[updateElements]';
- //reset all values (some might be different depending on the call timing)
- //selector is with study
- pM.cellSelector=this.parent.getElement(pM.cellSelectorId);
- pM.inputSelector=this.parent.getElement(pM.inputSelectorId);
- pM.textStudy=this.parent.getElement(pM.textStudyId);
-
- this.parent.print(fName+' selector '+pM.inputSelector+' id '+pM.inputSelectorId);
- //value is with local
- pM.cellValue=this.parent.getElement(pM.cellValueId);
- pM.inputValue=this.parent.getElement(pM.inputValueId);
- pM.textLocal=this.parent.getElement(pM.textLocalId);
-
- //pM.inputManageLocal=this.parent.getElement(pM.inputManageLocalId);
- //pM.inputManageStudy=this.parent.getElement(pM.inputManageStudyId);
- }
- participantIdManager.generateEntryField=
- function(pM){
- let fName='[generateParticipantEntryField]:';
- this.parent.print(fName);
- //this is HTML designator of area on page
- let formName=this.parent.config.masterForm;
-
- pM.tb=this.parent.config.document.createElement('table');
- let tb=pM.tb;
- tb.className='t2';
- let row=tb.insertRow();
-
- //label for local ID
- let cell=this.parent.config.document.createElement('th');
- row.appendChild(cell);
- cell.setAttribute("colspan","1");
- cell.style.fontSize="20px";
- cell.style.textAlign="left";
- //Use study coding for participant field
- cell.innerText='Local ID';
- //cell.innerText=pM.participantField;
- //value
- let cellValue=row.insertCell();
- cellValue.id=pM.cellValueId;
- pM.cellManageLocal=row.insertCell();
-
- //second row for study id
- let rowStudy=tb.insertRow();
- //label for study ID
- let cellStudy=this.parent.config.document.createElement('th');
- rowStudy.appendChild(cellStudy);
- cellStudy.setAttribute("colspan","1");
- cellStudy.style.fontSize="20px";
- cellStudy.style.textAlign="left";
- //Use study coding for participant field
- cellStudy.innerText='Study ID';
- //selector for study id
- let cellSelector=rowStudy.insertCell();
- cellSelector.id=pM.cellSelectorId;
- //manage
- pM.cellManageStudy=rowStudy.insertCell();
- this.parent.getElement(formName).appendChild(tb);
- this.parent.print(fName+' done');
- }
- participantIdManager.getMode=
- function(pM,mode="NONE"){
- if (mode=="NONE") return pM.mode;
- return mode;
- }
- //reslovers which operate depending on mode
- participantIdManager.getInputId=
- function(pM,mode="NONE"){
- let fName='[getInputId]';
- this.parent.print(fName);
- if (this.getMode(pM,mode)=="LOCAL") return pM.inputValueId;
- return pM.inputSelectorId;
- }
- participantIdManager.getInputCell=
- function(pM,mode="NONE"){
- let fName='[getInputCell]';
- this.parent.print(fName+' mode '+mode+' getMode '+this.getMode(pM,mode));
- if (this.getMode(pM,mode)=="LOCAL") return pM.cellValue;
- return pM.cellSelector;
- }
- participantIdManager.getInputElement=
- function(pM,mode="NONE"){
- let fName='[getInputElement]';
- this.parent.print(fName);
- let elementType=this.getInputElementType(pM,mode);
- let id=this.getInputId(pM,mode);
- let cell=this.getInputCell(pM,mode);
- let el=this.parent.getElement(id);
- this.parent.print(fName+' mode '+this.getMode(pM,mode)+' type '+elementType+' id '+id+' cell '+cell+' el '+el);
- if (el) return el;
- el=this.parent.config.document.createElement(elementType);
- this.parent.print(fName+' input '+el);
- el.id=id;
- cell.replaceChildren(el);
- this.addSelectOptions(pM);
-
- return el;
- }
- participantIdManager.getInputElementType=
- function(pM,mode="NONE"){
- let fName='[getInputElementType]';
- this.parent.print(fName);
- if (this.getMode(pM,mode)=="LOCAL") return "input";
- return "select";
- }
- participantIdManager.getTextFieldId=
- function(pM,mode="NONE"){
- let fName='[getTextFieldId]';
- this.parent.print(fName);
- if (this.getMode(pM,mode)=="LOCAL") return pM.textLocalId;
- return pM.textStudyId;
- }
-
- participantIdManager.getTextElement=
- function(pM,mode="NONE"){
- let fName='[getTextElement]';
- this.parent.print(fName+' mode '+mode);
- let id=this.getTextFieldId(pM,mode);
- this.parent.print(fName+' id '+id);
- let el=this.parent.getElement(id);
- this.parent.print(fName+' el '+el);
- if (el) return el;
- el=this.parent.config.document.createElement("p");
- el.id=id;
- let cell=this.getInputCell(pM,mode);
- //let oldEl=pM.getInputElement(mode);
- cell.replaceChildren(el);
- return el;
- }
- //get the button, create if not there yet
- participantIdManager.getInputManage=
- function(pM,mode="NONE"){
- let fName='[getInputManage]';
- //this.parent.print(fName);
- //this prevents from having two inputs; it is either local or global from the outset
- if ("inputManage" in pM) return pM.inputManage;
- pM.inputManage=this.parent.config.document.createElement("input");
- let inputManage=pM.inputManage;
- inputManage.type="button";
- let that=this;
- inputManage.onclick=function(){that.manageId(pM);};
- //inputManageLocal.id=pM.inputManageLocalId;
- let cell=pM.cellManageStudy;
- if (this.getMode(pM,mode)=="LOCAL") cell=pM.cellManageLocal;
- //this.parent.print(fName+' inputManage '+pM.inputManage+' cell '+cell+' mode '+pM.mode);
- cell.appendChild(inputManage);
- return inputManage;
- }
- //callback that splits to edit or set/label mode
- participantIdManager.manageId=
- function(pM){
- let fName='[manageId]';
- this.parent.print(fName);
- //this can happen after object was created, so make sure current
- //elements are used
- this.updateElements(pM);
- let x=this.getInputManage(pM);
- if (x.value=="Set"){
- this.setId(pM);
- return;
- }
- if (x.value=="Edit"){
- this.editId(pM);
- return;
- }
- }
- //set mode
- participantIdManager.setId=
- function(pM){
- this.parent.print(fName);
- let el=this.getInputElement(pM);
- this.parent.print(fName+" value: "+el.value);
- let pId=el.value;
- let label=pId;
- if (pM.mode!="LOCAL"){
- if (el.value<0) return;
- let opt=el.options[el.selectedIndex];
- label=opt.text;
- pId=label.replace(/\(.*\)/,'');
- label=label.replace(/ \(Local: /,':');
- label=label.replace(/\)/,'');
- }
- this.setParticipantIdToCrfEntry(pM,pId);//no argument (should come from mode)
- this.parent.print(fName+" new value "+pId);
- this.setLabelMode(pM,label);
- pM.updateCrfEntry();
- }
- participantIdManager.setLabelMode=
- function(pM,pId){
- let fName='[setLabelMode1]';
- this.parent.print(fName+' id '+pId);
- ids=pId.split(':');
- let textValue=this.getTextElement(pM);
- this.parent.print(fName+' textElement '+textValue);
- textValue.innerText=ids[0];
- if (pM.mode=="STUDY"){
- let loc=ids[1];
- //pM.getParticipantIdFromCrfEntry('LOCAL');
- this.parent.print(fName+' setting local id '+loc);
- let tValLocal=this.getTextElement(pM,'LOCAL');
- tValLocal.innerText=loc;
- this.setParticipantIdToCrfEntry(pM,loc,'LOCAL');
- }
- let x=this.getInputManage(pM);//getInputManage
- if ("readOnly" in pM){
- x.style.display="none";
- }
- x.value="Edit";
-
- }
- //edit mode
- participantIdManager.editId=
- function(pM){
- this.setEditMode(pM);
- }
- participantIdManager.setEditMode=
- function(pM){
- let fName='[setEditMode1]';
- this.parent.print(fName+' pM '+pM+' mode '+pM.mode);
- //input
- let el=this.getInputElement(pM);
- let x=this.getInputManage(pM);
- x.value="Set";
- }
- //manage interaction to storage/CRF and study/LabKey
- participantIdManager.getParticipantField=
- function(){
- return this.parent.config.formConfig['studyDataAll'].rows[0]['SubjectColumnName'];
- }
- participantIdManager.getCrfEntryFieldName=
- function(pM,mode="NONE"){
- let variable="Study";
- if (mode=="NONE") mode=pM.mode;
- if (mode=="LOCAL") variable="Local";
- return 'participant'+variable+'Id';
- }
- participantIdManager.setParticipantIdToCrfEntry=
- function(pM,pId,mode="NONE"){
- this.parent.config.formConfig.crfEntry[this.getCrfEntryFieldName(pM,mode)]=pId;
- }
- participantIdManager.getParticipantIdFromCrfEntry=
- function(pM,mode="NONE"){
- return this.parent.config.formConfig.crfEntry[this.getCrfEntryFieldName(pM,mode)];
- }
- participantIdManager.verifyCrfStudyId=
- function(pM){
- //is studyId already set for the crf
- let studyId=this.getParticipantIdFromCrfEntry(pM,'STUDY');
- if (!studyId) return;
- pM.mode="STUDY";
- pM.readOnly="TRUE";
- }
- participantIdManager.verifyRegistration=
- function(pM, formConfig){
- //if registration is in,
- //then local id should not be changed any longer
- let idFieldName=this.getCrfEntryFieldName(pM,"STUDY");
- //let fQuery=config.formConfig.registrationData;
- let fQuery=formConfig.registrationData;
- if (fQuery.rows.length==0) return; //registration is empty
- let studyId=fQuery.rows[0][idFieldName];
- if (!studyId) return; //study id not set
- //set
- pM.mode="STUDY";
- pM.readOnly="TRUE";
- //set crf (this happens later, but probably before the form will be corrected)
- this.setParticipantIdToCrfEntry(pM,studyId,"STUDY");
- pM.updateCrfEntry();
- }
- //main interface. Use this to generate object and to refer to it later on
- participantIdManager.getObject=
- function(){
- let fName='[getParticipantManagerObject]';
- this.parent.print(fName);
- let pM=new Object();
- //this never change
- pM.participantField=this.getParticipantField();
- pM.cellSelectorId=pM.participantField+"_cellSelect";
- pM.inputSelectorId=pM.participantField+"_Select";
- pM.textStudyId=pM.participantField+"_textStudy";
- pM.cellValueId=pM.participantField+"_cellValue";
- pM.inputValueId=pM.participantField+"_Value";
- pM.textLocalId=pM.participantField+"_textLocal";
- pM.inputManageLocalId=pM.participantField+"_ManageLocal";
- pM.inputManageStudyId=pM.participantField+"_ManageStudy";
- pM.mode="LOCAL";//or "STUDY"
-
- //dummy function to be overloaded by calling class
- pM.updateCrfEntry=function(){;}
- //init
- this.generateEntryField(pM);
- this.updateElements(pM);
- return pM;
- }
|