{"version":3,"sources":["BusinessObjects/LoggedContext.js","BusinessObjects/cubeApiService.tsx","Models/EsaedroResourceFilter.tsx","Components/Home.tsx","Components/About.tsx","Components/Login.tsx","Components/Logout.tsx","Components/ChangeCompany.tsx","Components/EsaedroPager.tsx","Components/EsaedroFilterConfig.tsx","Components/EsaedroObjectsList.tsx","Utils/EsaedroHelper.tsx","Components/EsaedroMenu.tsx","Components/EsaedroMenuHistory.tsx","Components/EsaedroJumpMenu.tsx","Models/EsaedroHistoryItem.tsx","Components/EsaedroContentPage.tsx","Components/ChangeProduct.tsx","Components/ChangePassword.tsx","Routes.tsx","Components/EsaedroNavigationBar.tsx","App.tsx","serviceWorker.ts","index.tsx","Utils/EsaedroTheme.tsx","Models/EsaedroLookupItem.tsx","Components/EsaedroLookup.tsx","Components/EsaedroObjectDelete.tsx","Components/EsaedroPDF.tsx","Components/EsaedroAttachment.tsx","Components/EsaedroAttachmentsController.tsx","Models/EsaedroResourceAttachment.tsx","Components/EsaedroAttachmentLoader.tsx","Components/EsaedroJSONComponent.tsx","Components/EsaedroObjectEdit.tsx","../node_modules/pdfjs-dist/build sync","Models/UserProfile.tsx","Components/CustomComponents lazy /^/.*$/ groupOptions: {} namespace object"],"names":["LoggedContext","React","createContext","username","tokenAPI","userProfile","UserProfile","selectedItem","selectedMenuItem","setUserToken","UserName","TokenAPI","_this","setState","setUserProfile","user","setSelectedItem","item","setSelectedMenuItem","Provider","Consumer","cubeApiClient","Object","C_Users_matteou_Documents_ecube_Framework_CUBEPortal_CUBEAdmin_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_2__","this","apiUrl","window","location","origin","password","p","encodeURIComponent","fetch","method","headers","Accept","Content-Type","body","response","json","data","ok","error_description","newPassObj","Authorization","JSON","stringify","resourceURL","resourceViewBody","urlToUse","includes","replace","dataToRet","Results","objectList","alert","ExceptionMessage","_context3","t0","t1","objToDel","objUrl","_context4","agent","arrP","_context5","myObject","myResUrl","_context6","myObjects","bodyToSend","_context7","profile","customer_ID","UserId","AgenteID","CompanyName","CompanyAddress","ERPCompanyCode","ProtectionLevel","ProductCode","Roles","_context8","id","title","EsaedroResourceFilter","field","value","operator","description","filterType","C_Users_matteou_Documents_ecube_Framework_CUBEPortal_CUBEAdmin_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__","_FieldName","_Value","_Operator","_previousFilterOperator","_description","_filterType","FieldName","Value","Operator","newvalue","newoperator","newPreviousFilterOperator","newdescription","newfilterType","Home","react_default","a","createElement","reactstrap_es","className","src","Component","About","Login","props","classCallCheck","possibleConstructorReturn","getPrototypeOf","call","context","handleLogin","event","service","login","state","then","loading","access_token","userName","undefined","onLoggedIn","recsel","getItems","error","laoding","preventDefault","handleChange","target","type","checked","name","defineProperty","react_router","to","onSubmit","htmlFor","onChange","contextType","Logout","UserCompanyList","e","cmp","companies","max","up","changeUserProfile","companychanged","errorMessage","_this2","t","_this3","_this$state","ticketData","map","index","key","onClick","contents","colSpan","style","textAlign","EsaedroPager","pagenumbers","currentPage","totalPages","size","disabled","previous","active","next","EsaedroFilterConfig","filterTypes","filterOperators","filterConcat","disableAddFilterButton","tempFilter","myNewFilter","previousFilterOperator","updateFilter","prevState","myObjectFilters","concat","toConsumableArray","returnToList","onReturn","saveAndReturnToList","renderFilter","filter","renderField","color","themeGroup","themeCol9","themeSpinner","fieldsValues","i","myObjectFields","forEach","Field_Label","filtersToRender","savedFiltersLabel","length","valueField","TextField","themeFormInput","newFilterFields","themeCol6","required","EsaedroLookup","fatherObj","lookupName","lookupValues","displayName","themeSaveButton","themeCol6Right","themeBackButton","pageSize","EsaedroObjectsList","setItemToEdit","onObjectEdit","setItemToDelete","onObjectDelete","goToNewItem","onObjectCreate","expandObject","myObjectsToDisplay","newObjects","Expanded","getPageItems","page","onPageUpdate","filterString","navigationFilters","filtersToAppend","inputFilters","myObjectInputFilters","startingInputFilters","found","element","myObjectViewFilters","oldFiltersToAppend","requrl","myObjUrl","myRowObjType","myRowObjUrl","PageCount","reqFieldsurl","myObjType","createStartingInputFilters","filterObjects","updateList","Resource_ID","toString","toLowerCase","search","myFields","newFilters","push","myFilters","Field_Type","resetInputFilters","updateInputFilters","applyInputFilters","onInputFiltersUpdate","toggleFilterBtnPressed","toggleFilters","viewFiltersUpdated","viewFilters","startingPage","toggleFilterButton","filtersModal","isOpen","toggle","EsaedroFilterConfig_EsaedroFilterConfig","navigation","EsaedroPager_EsaedroPager","totalSize","Field_Size","objectsData","rowsFilters","myRowObjLinkFields","split","rows","hideButtons","hideFilters","buttons","disableEdit","canUpdate","editButton","themeEditButton","deleteButton","canDelete","themeDeleteButton","expandButton","themeExpandButton","background","totalFields","cellWidth","width","moment","format","renderGridObject","filterLookup","isSys","newItem","canCreate","themeNewButton","themeCol12xl","themeStripedTable","addonType","EsaedroMenu","toggleNavbar","collapsed","menuItemSelected","items","sottomenu","menuRisorse","menuVoice","sottomenuElements","block","Id","Description","sottomenuIntestazione","menuRisorseElements","risorseIntestazione","react","navbar","EsaedroMenuHistory","incrementalKey","historyMenuItemSelected","bind","assertThisInitialized","historyBar","voices","EsaedroJumpMenu","jumpMenuItemSelected","elements","outline","JumpName","JumpLabel","EsaedroHistoryItem","itemToEdit","itemToDel","itemToJump","menuItems","jumpMenuItems","selectedItemFilters","listInputFilters","customComponentName","_selectedItem","_itemToEdit","_itemToDel","_itemToJump","_newItem","_menuItems","_jumpMenuItems","_selectedItemFilters","_listInputFilters","_startingPage","_customComponentName","filters","Error","objToRet","assign","newMenuItems","newJumpMenuItems","newSelectedItemFilters","newListInputFilters","EsaedroContentPage","onMenuClick","selectedVoices","selectedHistoryItem","successMessage","voiceID","newSelectedItem","CustomEditComponent","menuHistory","onMenuHistoryClick","newHistory","onJumpMenuClick","jumpName","newHistoryItem","cloneSelf","itemFilters","ResourcesJumpFilters","DestinationFieldName","SourceFieldName","FilterOperator","DestinationCustomEditComponent","ResourceName","DestinationResourceName","EndPoint","DestinationEndPoint","OnEditClick","objToEdit","jumpItems","OnDeleteClick","objToDelete","OnReturnToList","returnMessage","popLastHistoryItemAndUpdateSelected","pop","OnNewItem","OnListFiltersUpdate","OnListPageUpdate","newPage","clearDetailState","clearJumpState","homeHistoryItem","objectSpread","successMessageAlert","pageContent","CustomComponent","lazy","__webpack_require__","Suspense","fallback","myObj","isNew","fixedFields","_CustomComponent","EsaedroObjectEdit","myObjResourceID","EsaedroObjectDelete","EsaedroObjectsList_EsaedroObjectsList","DestinationCanCreate","DestinationCanUpdate","DestinationCanDelete","ChildResourceName","ChildEndPoint","ChildLinkFields","CanCreate","CanUpdate","CanDelete","Fragment","EsaedroMenuHistory_EsaedroMenuHistory","EsaedroMenu_EsaedroMenu","EsaedroJumpMenu_EsaedroJumpMenu","UserProductList","products","productChanged","match","ProductDescription","ChangePassword","changePassword","pwdObj","oldPassword","newPassword","confirmPassword","token","returnHome","returnToHome","themeCol3","AppRoutes","exact","path","component","onEnter","reload","EsaedroNavigationBar","navInactiveStyle","navActiveStyle","subItem","subItemActive","linkLogin","menuImpostazioni","titoloPagina","productName","tag","RRNL","nav","inNavbar","caret","activeStyle","right","divider","dark","light","appInsights","ApplicationInsights","config","instrumentationKey","LoggedComponent","children","loadAppInsights","App","App_LoggedComponent","react_router_dom","basename","EsaedroNavigationBar_EsaedroNavigationBar","Boolean","hostname","ReactDOM","render","src_App_0","document","getElementById","navigator","serviceWorker","ready","registration","unregister","themeCol4","d","__webpack_exports__","EsaedroLookupItem","_value","filterFailed","fieldsToCheck","initialDisplayField","getLookupData","valuesToShow","newItems","newItemsToDisp","v","itemsToDisplay","resourceLookup","ResourcesLookupsFilters","ParentField_Name","sendFieldsToCheckToParent","ValueField_Name","lookupResource","LoadOnClick","LookupField_Name","Resource_Endpoint","elenco","descriptionField","idxFields","ResourcesLookupsDisplayFields","lookupResourceDisplayFilters","DisplayField_Name","DisplayField_Description","reloadResourceLookupFields","fieldName","onFieldsToCheckLoaded","toggleSearch","FixedValue","hasFilterDisplayFields","filterChange","toggleSearchBtnPressed","toggleButton","filterFields","lookupLabel","modalFilters","sele","selected","itemType","isDisabled","C_Users_matteou_Documents_ecube_Framework_CUBEPortal_CUBEAdmin_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__","C_Users_matteou_Documents_ecube_Framework_CUBEPortal_CUBEAdmin_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__","deleteObj","deleteObject","objToBeDeleted","stringError","react__WEBPACK_IMPORTED_MODULE_5___default","reactstrap__WEBPACK_IMPORTED_MODULE_8__","EsaedroPDF","pdfjs","GlobalWorkerOptions","workerSrc","version","_this$props","file","filename","href","rel","download","entry","pageNumber","EsaedroAttachment","removeImage","onDelete","resourceAttachment","customEvent","CustomEvent","detail","uploading","attachment","attachmentFieldName","newFileButton","canLoad","Image","alt","thumbnail","height","EsaedroAttachmentsController","getObjectAttachments","Item_ID","attachments","onDeleteButtonPressed","attachmentToRemove","attachmentToDelete","onAttachmentRemoved","errorMessageAlert","content","EsaedroAttachment_EsaedroAttachment","Content","EsaedroResourceAttachment","resource_ID","item_ID","attachmentType","AttachmentType","Buttons","multiple","EsaedroAttachmentLoader","attachmentsUrl","Array","from","files","readAndAdd","newImages","reader","FileReader","onload","imgUrl","result","newFile","readAsDataURL","indexOf","splice","returnToEdit","sendImages","updateObjects","contentButtons","EsaedroJSONComponent","isJSON","object","parse","addKey","componentFields","newKeyLabel","newKeyValue","newComp","addingField","toggleAddField","_this$state2","tempObj","handleRecursiveChange","renderJSONField","fieldKey","canEdit","isJson","jsonObject","keys","suggestedKeys","_this$state3","addFieldForm","addFieldButton","disableUpdateBtn","lookupFieldsWithFieldsToCheck","lookupFieldsToCheck","Map","lookupKeys","updateObject","objectToEdit","updating","onCustomHandleChange","get","newKey","set","onReturnFromAttachmentsController","toggleAddAttachments","addAttachments","toggleShowAttachments","showAttachments","lookupLoadedFieldsToCheck","Is_Visible","Is_Key","Is_Nullable","Readonly","Reffered_Resource_Type","Is_Decode","Is_Identity","Is_Syncronized","Required","onCustomRenderField","validationError","validateField","LookupName","LookupValues","ContentType","EsaedroPDF_EsaedroPDF","cod_nomefile","EsaedroJSONComponent_EsaedroJSONComponent","CustomProperty","valueToCheck","isNaN","createEmptyObject","hasFields","DefaultValue","hasGroups","myObjectGroups","newObject","EsaedroAttachmentLoader_EsaedroAttachmentLoader","addAttachmentsToggleButton","showAttachmentsToggleButton","AttachmentCount","EsaedroAttachmentsController_EsaedroAttachmentsController","updateButton","sticky","lib","_ref","fieldsToRender","attachmentContent","margin","display","webpackEmptyContext","req","code","resolve","module","exports","./JobsCustom","./JobsCustom.tsx","./LogisticaCartelleCustom","./LogisticaCartelleCustom.tsx","./LogisticaGenCodRCustom","./LogisticaGenCodRCustom.tsx","./LogisticaListeCustom","./LogisticaListeCustom.tsx","./NuoviClientiCustom","./NuoviClientiCustom.tsx","./ParametriPiazzistaCustom","./ParametriPiazzistaCustom.tsx","./ParametriPiazzistaCustomPaolo","./ParametriPiazzistaCustomPaolo.tsx","./ResourcesViewsCustom","./ResourcesViewsCustom.tsx","./RigheGiriVisitaCustom","./RigheGiriVisitaCustom.tsx","webpackAsyncContext","ids","Promise"],"mappings":"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","file":"static/js/main.4f7297d0.chunk.js","sourcesContent":["import React from 'react'\r\nimport UserProfile from '../Models/UserProfile'\r\n\r\nconst LoggedContext = React.createContext(\r\n {\r\n username : '',\r\n tokenAPI:'',\r\n userProfile: new UserProfile(),\r\n selectedItem:null,\r\n selectedMenuItem:null,\r\n setUserToken: (UserName,TokenAPI) => {\r\n this.setState({username: UserName, tokenAPI:TokenAPI})\r\n },\r\n setUserProfile:(user) => {\r\n this.setState({userProfile: user})\r\n },\r\n setSelectedItem:(item) => {\r\n this.setState({selectedItem: item})\r\n },\r\n setSelectedMenuItem:(item) => {\r\n this.setState({selectedMenuItem: item})\r\n }\r\n})\r\n\r\nexport const LoggedProvider = LoggedContext.Provider\r\nexport const LoggedConsumer = LoggedContext.Consumer\r\nexport default LoggedContext","import UserProfile from \"../Models/UserProfile\";\r\nimport { Companies_Agents } from \"../Models/Agents\";\r\nimport { EsaedroChangePasswordObject } from \"../Utils/EsaedroHelper\";\r\n\r\nexport default class cubeApiClient\r\n{\r\n //apiUrl:string = \"http://webcube.westeurope.cloudapp.azure.com/\";\r\n apiUrl:string = process.env.NODE_ENV === 'development' ? \"https://dev.e-cube.it/\": (window.location.origin + \"/\")\r\n //apiUrl:string = \"http://localhost/cubewebAPIService/\";\r\n //apiUrl:string = \"https://www.thinkweb.cloud/\"; \r\n //apiUrl:string = \"https://dev.e-cube.it/\";\r\n //apiUrl:string = \"https://api.e-cube.it/\";\r\n\r\n constructor()\r\n {\r\n //alert(window.location.origin);\r\n }\r\n async login(username:string,password:string)\r\n { \r\n var p:string;\r\n\r\n //alert(this.apiUrl);\r\n\r\n p=\"grant_type=password&username=\" + encodeURIComponent(username) + \"&password=\" + encodeURIComponent(password);\r\n\r\n const response = await fetch(this.apiUrl+'Token',\r\n {\r\n method:'POST', \r\n headers:{\r\n 'Accept':'application/json',\r\n 'Content-Type':'application/x-www-form-urlencoded'}, \r\n body:p});\r\n const data = await response.json();\r\n\r\n if (response.ok)\r\n {\r\n return data;\r\n }\r\n else {\r\n throw data.error_description\r\n }\r\n }\r\n \r\n async changePassword(newPassObj : EsaedroChangePasswordObject, tokenAPI:string)\r\n {\r\n const response = await fetch(this.apiUrl+'api/account/ChangePassword',\r\n {\r\n method:'POST', \r\n headers:{\r\n 'Authorization':'bearer ' + tokenAPI,\r\n 'Accept':'application/json',\r\n 'Content-Type':'application/json'\r\n }, \r\n body:JSON.stringify(newPassObj)\r\n });\r\n \r\n\r\n if (response.ok) {\r\n return true;\r\n }\r\n // Se response non è ok mando un alert con cosa è andato storto\r\n else \r\n {\r\n const errorData = 'Password sbagliata'\r\n throw errorData\r\n }\r\n\r\n }\r\n\r\n // Fa sempre una post all'url con l'aggiunta di /query. Opzionalmente passa la vista di filtraggio\r\n async getItems(resourceURL:string,tokenAPI:string,resourceViewBody?:string)\r\n {\r\n if (!resourceViewBody || resourceViewBody == \"\") resourceViewBody = \"[]\"\r\n var urlToUse = (resourceURL.includes(\"RecordSelection\")) ? \r\n this.apiUrl+resourceURL.replace(\"?RecordSelection\",\"/query?RecordSelection\") \r\n :(resourceURL.includes(\"?Page\")) ? \r\n this.apiUrl+resourceURL.replace(\"?Page\",\"/query?Page\") \r\n :this.apiUrl+resourceURL+\"/query\"\r\n try{\r\n const response = await fetch(urlToUse,\r\n {\r\n method:'POST',\r\n headers:\r\n {\r\n 'Authorization':'bearer ' + tokenAPI,\r\n 'Content-Type':'application/json'\r\n },\r\n body: resourceViewBody\r\n });\r\n\r\n try {\r\n \r\n const data = await response.json();\r\n\r\n if (response.ok) {\r\n \r\n var dataToRet = data[0]\r\n if (dataToRet.Results) {\r\n dataToRet = data[0].Results\r\n if (dataToRet.objectList) {\r\n return dataToRet.objectList\r\n }\r\n else return dataToRet\r\n }\r\n else return dataToRet\r\n }\r\n \r\n // Se response non è ok mando un alert con cosa è andato storto\r\n else \r\n {\r\n alert(resourceURL + ' ' + data.ExceptionMessage)\r\n throw data.ExceptionMessage\r\n }\r\n }\r\n catch(errResponseJSON) {\r\n //Al momento essendo che non mi dà un JSON in risposta andiamo sempre qui\r\n if (!response.ok) {\r\n alert('Errore nel JSON Response alla chiamata: ' + resourceURL + '. ' + errResponseJSON)\r\n throw errResponseJSON\r\n }\r\n }\r\n }\r\n catch(errFetch) {\r\n alert('Errore nel fetch alla chiamata: ' + resourceURL + '. ' + errFetch)\r\n throw errFetch\r\n }\r\n }\r\n\r\n async deleteObject(objToDel:any, objUrl: string, tokenAPI:string)\r\n {\r\n try{\r\n const response = await fetch(this.apiUrl+objUrl,\r\n {\r\n method:'DELETE',\r\n headers:\r\n {\r\n 'Authorization':'bearer ' + tokenAPI,\r\n 'Accept':'application/json',\r\n 'Content-Type':'application/json'\r\n },\r\n body:JSON.stringify(objToDel)\r\n });\r\n try {\r\n \r\n const data = await response.json();\r\n\r\n if (response.ok) return data\r\n // Se response non è ok mando un alert con cosa è andato storto\r\n else \r\n {\r\n alert(objUrl + ' ' + data.ExceptionMessage)\r\n throw data.ExceptionMessage\r\n }\r\n }\r\n catch(errResponseJSON) {\r\n //Al momento essendo che non mi dà un JSON in risposta andiamo sempre qui\r\n if (!response.ok) {\r\n alert('Errore nel JSON Response alla chiamata: ' + objUrl + '. ' + errResponseJSON)\r\n throw errResponseJSON\r\n }\r\n }\r\n }\r\n catch(errFetch) {\r\n alert('Errore nel fetch alla chiamata: ' + objUrl + '. ' + errFetch)\r\n throw errFetch\r\n }\r\n }\r\n\r\n // In teoria da eliminare, non dovrebbe servire. Tenuta in caso servisse per EO/eTeVe\r\n async updateCompanies_Agents(agent:Companies_Agents,tokenAPI:string)\r\n {\r\n try{\r\n const arrP=[agent]\r\n \r\n\r\n const response = await fetch(this.apiUrl+'api/sys/Companies_Agents',\r\n {\r\n method:'POST',\r\n headers:\r\n {\r\n 'Authorization':'bearer ' + tokenAPI,\r\n 'Accept':'application/json',\r\n 'Content-Type':'application/json'\r\n },\r\n body:JSON.stringify(arrP)\r\n });\r\n const data = await response.json();\r\n\r\n return data;\r\n\r\n }\r\n catch(err){\r\n alert(\"UpdateCompaniesAgents\" + err)\r\n return err;\r\n }\r\n\r\n }\r\n\r\n async updateObject(myObject: any, myResUrl: string, tokenAPI:string)\r\n {\r\n try{\r\n\r\n const arrP=[myObject]\r\n \r\n const response = await fetch(this.apiUrl+myResUrl,\r\n {\r\n method:'POST',\r\n headers:\r\n {\r\n 'Authorization':'bearer ' + tokenAPI,\r\n 'Accept':'application/json',\r\n 'Content-Type':'application/json'\r\n },\r\n body:JSON.stringify(arrP)\r\n });\r\n try {\r\n \r\n const data = await response.json();\r\n\r\n if (response.ok) return data\r\n // Se response non è ok mando un alert con cosa è andato storto\r\n else \r\n {\r\n alert(myResUrl + ' ' + data.ExceptionMessage)\r\n throw data.ExceptionMessage\r\n }\r\n }\r\n catch(errResponseJSON) {\r\n //Al momento essendo che non mi dà un JSON in risposta andiamo sempre qui\r\n if (!response.ok) {\r\n alert('Errore nel JSON Response alla chiamata: ' + myResUrl + '. ' + errResponseJSON)\r\n throw errResponseJSON\r\n }\r\n }\r\n }\r\n catch(errFetch) {\r\n alert('Errore nel fetch alla chiamata: ' + myResUrl + '. ' + errFetch)\r\n throw errFetch\r\n }\r\n }\r\n\r\n async updateObjects(myObjects: any[], myResUrl: string, tokenAPI:string)\r\n {\r\n try{\r\n\r\n const arrP=myObjects\r\n const bodyToSend=JSON.stringify(arrP)\r\n \r\n const response = await fetch(this.apiUrl+myResUrl,\r\n {\r\n method:'POST',\r\n headers:\r\n {\r\n 'Authorization':'bearer ' + tokenAPI,\r\n 'Accept':'application/json',\r\n 'Content-Type':'application/json'\r\n },\r\n body:bodyToSend\r\n });\r\n try {\r\n \r\n const data = await response.json();\r\n\r\n if (response.ok) return data\r\n // Se response non è ok mando un alert con cosa è andato storto\r\n else \r\n {\r\n alert(myResUrl + ' ' + data.ExceptionMessage)\r\n throw data.ExceptionMessage\r\n }\r\n }\r\n catch(errResponseJSON) {\r\n //Al momento essendo che non mi dà un JSON in risposta andiamo sempre qui\r\n if (!response.ok) {\r\n alert('Errore nel JSON Response alla chiamata: ' + myResUrl + '. ' + errResponseJSON)\r\n throw errResponseJSON\r\n }\r\n }\r\n }\r\n catch(errFetch) {\r\n alert('Errore nel fetch alla chiamata: ' + myResUrl + '. ' + errFetch)\r\n throw errFetch\r\n }\r\n }\r\n\r\n async changeUserProfile(profile:UserProfile,tokenAPI:string)\r\n {\r\n try{\r\n const arrP=[new UserProfile(\r\n profile.customer_ID,\r\n profile.UserId,\r\n profile.AgenteID,\r\n profile.UserName,\r\n profile.CompanyName,\r\n profile.CompanyAddress,\r\n profile.ERPCompanyCode,\r\n profile.ProtectionLevel,\r\n profile.ProductCode,\r\n profile.Roles)]\r\n \r\n\r\n const response = await fetch(this.apiUrl+'api/sys/UserProfile',\r\n {\r\n method:'POST',\r\n headers:\r\n {\r\n 'Authorization':'bearer ' + tokenAPI,\r\n 'Accept':'application/json',\r\n 'Content-Type':'application/json'\r\n },\r\n body:JSON.stringify(arrP)\r\n });\r\n const data = await response.json();\r\n\r\n return data;\r\n }\r\n catch(err){\r\n alert(\"changeUserProfile\" + err)\r\n return [{id:999,title:\"ERROREACCIO\"}];\r\n }\r\n }\r\n}","class EsaedroResourceFilter {\r\n \r\n private _FieldName: string = \"\";\r\n public get FieldName() : string { return this._FieldName } \r\n public set FieldName( newvalue: string ) { this._FieldName = newvalue }\r\n\r\n private _Value: any;\r\n public get Value() : any { return this._Value } \r\n public set Value(newvalue: any) { this._Value = newvalue }\r\n\r\n private _Operator: string = \"\";\r\n public get Operator() : any { return this._Operator } \r\n public set Operator(newoperator: any) { this._Operator = newoperator }\r\n\r\n private _previousFilterOperator: string = \"\";\r\n public get previousFilterOperator() : any { return this._previousFilterOperator } \r\n public set previousFilterOperator(newPreviousFilterOperator: any) { this._previousFilterOperator = newPreviousFilterOperator }\r\n\r\n private _description: string = \"\";\r\n public get description() : any { return this._description } \r\n public set description(newdescription: any) { this._description = newdescription}\r\n\r\n private _filterType: string = \"text\";\r\n public get filterType() : any { return this._filterType } \r\n public set filterType(newfilterType: any) { this._filterType = newfilterType }\r\n\r\n constructor(field:string, value:string, operator: string, description?: string, filterType?: string) {\r\n this.FieldName=field\r\n this.Value=value\r\n this.Operator=operator\r\n this.description=description?description:field\r\n this._filterType=filterType?filterType:\"text\"\r\n }\r\n\r\n}\r\n\r\nexport default EsaedroResourceFilter;","import React, { Component } from 'react'\r\nimport { Container, Row, Col } from 'reactstrap';\r\nimport '../App.css';\r\n\r\nexport default class Home extends Component {\r\n render() {\r\n return (\r\n \r\n \r\n \r\n \r\n

\r\n \r\n \r\n
\r\n \r\n
\r\n )\r\n }\r\n}\r\n","import React, { Component } from 'react'\r\nimport { Container, Col, Row } from 'reactstrap';\r\n\r\nexport default class About extends Component {\r\n render() {\r\n return (\r\n \r\n \r\n \r\n

About the application ...

\r\n \r\n
\r\n \r\n \r\n Powerede by \r\n \r\n \r\n
\r\n )\r\n }\r\n}\r\n","import React, { Component } from 'react'\r\nimport { Col, Row, Container } from 'reactstrap';\r\nimport cubeApiClient from '../BusinessObjects/cubeApiService'\r\nimport { Redirect } from 'react-router';\r\nimport LoggedContext from '../BusinessObjects/LoggedContext'\r\n\r\ninterface ILoggedParamsProps{\r\n onLoggedIn?(username:string,tokenAPI:string):void;\r\n}\r\n\r\n\r\nexport default class Login extends Component {\r\n static contextType = LoggedContext\r\n context!: React.ContextType\r\n\r\n constructor(props:ILoggedParamsProps)\r\n {\r\n super(props);\r\n this.state ={ username:'',password:'',tokenAPI:''};\r\n }\r\n\r\n handleLogin = (event: any) => {\r\n\r\n var bolLogged=false;\r\n\r\n const service = new cubeApiClient();\r\n service\r\n .login(this.state.username,this.state.password)\r\n .then((data: any) => {\r\n this.setState({\r\n loading: false,\r\n tokenAPI:data.access_token,\r\n username:data.userName\r\n });\r\n if(this.props.onLoggedIn !== undefined) this.props.onLoggedIn(\r\n this.state.username,\r\n this.state.tokenAPI\r\n )\r\n \r\n this.context.setUserToken(data.userName,data.access_token);\r\n bolLogged = true;\r\n //Cerco di ottenere i dati della ditta\r\n \r\n const recsel = '?RecordSelection=' + encodeURIComponent(\"UserName='\" + data.userName +\"'\");\r\n service\r\n .getItems('api/sys/UserProfile' + recsel,this.state.tokenAPI)\r\n .then(\r\n (data: any) =>{\r\n \r\n this.context.setUserProfile(data[0]);\r\n },\r\n (error:any) => {\r\n this.setState({laoding: false,error})\r\n }\r\n );\r\n },\r\n (error: any) => {\r\n this.setState({\r\n laoding: false,\r\n error: error\r\n })\r\n alert(error);\r\n }); \r\n\r\n \r\n event.preventDefault();\r\n }\r\n handleChange = (event: any) => {\r\n const target = event.target;\r\n const value = target.type === 'checkbox' ? target.checked : target.value;\r\n const name = target.name;\r\n \r\n // @ts-ignore : to avoid typescript to complain \r\n this.setState({\r\n [name]: value\r\n });\r\n }\r\n\r\n render() {\r\n var token = this.context.tokenAPI;\r\n if(token > '')\r\n { \r\n \r\n /*return(\r\n );\r\n }*/\r\n return(\r\n );\r\n }\r\n else\r\n {\r\n return (\r\n
\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n )\r\n }\r\n }\r\n}\r\n\r\n","import React, { Component } from 'react'\r\nimport { Col, Row, Container } from 'reactstrap';\r\nimport cubeApiClient from '../BusinessObjects/cubeApiService'\r\nimport { Redirect } from 'react-router';\r\nimport LoggedContext from '../BusinessObjects/LoggedContext'\r\nimport { Link } from 'react-router-dom';\r\n\r\nexport default class Logout extends Component {\r\n static contextType = LoggedContext\r\n\r\n render() {\r\n var token = this.context.tokenAPI;\r\n \r\n\r\n if(token > '')\r\n { \r\n this.context.setUserToken('','');\r\n this.context.setUserProfile(null);\r\n return(\r\n );\r\n }\r\n\r\n }\r\n}\r\n","import React, { Component } from 'react'\r\nimport cubeApiClient from '../BusinessObjects/cubeApiService';\r\nimport { RouteComponentProps, Route, Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport LoggedContext from '../BusinessObjects/LoggedContext'\r\nimport Companies from '../Models/Companies';\r\nimport UserProfile from '../Models/UserProfile';\r\n\r\ninterface UserCompanyListState {\r\n companies: Companies[];\r\n loading: boolean;\r\n errorMessage:string;\r\n companychanged: boolean;\r\n}\r\n\r\nexport default class UserCompanyList extends Component, UserCompanyListState> {\r\n static contextType = LoggedContext\r\n context!: React.ContextType\r\n\r\n constructor(props:RouteComponentProps<{}>) {\r\n super(props);\r\n\r\n this.state = {\r\n companies: [],\r\n loading: true,\r\n errorMessage: '',\r\n companychanged: false\r\n }\r\n }\r\n\r\n handleChange = (e:any) => {\r\n var cmp=this.state.companies[e.target.max];\r\n var up:UserProfile =this.context.userProfile;\r\n \r\n \r\n \r\n up.CompanyName = cmp.CompanyName;\r\n up.ERPCompanyCode=cmp.ERPCompanyCode\r\n up.customer_ID=cmp.customer_ID;\r\n\r\n /// Aggiorno il portale\r\n const service = new cubeApiClient();\r\n service\r\n .changeUserProfile(up,this.context.tokenAPI)\r\n .then((data: any) => {\r\n\r\n this.context.setUserProfile(up);\r\n this.setState({companychanged:true});\r\n \r\n },\r\n (error: any) => {\r\n alert('ERRORREEEE!!' + error);\r\n }); \r\n\r\n }\r\n \r\n componentDidMount() {\r\n const service = new cubeApiClient();\r\n const t = this.context.tokenAPI;\r\n \r\n service\r\n .getItems('api/sys/UserCompanies',t)\r\n .then((data: any) => {\r\n this.setState({ companies: data, loading: false });\r\n },\r\n (error: any) => {\r\n this.setState({ companies: [], loading: false, errorMessage: error });\r\n });\r\n }\r\n\r\n render() {\r\n const { companies, companychanged } = this.state;\r\n\r\n if(companychanged)\r\n return \r\n else\r\n {\r\n\r\n let ticketData = companies.map((item: Companies,index) => (\r\n \r\n {/* {new Date(item.issueDate).toISOString().slice(0,10)} */}\r\n \r\n \r\n \r\n {item.customer_ID}\r\n {item.CompanyName}\r\n \r\n ));\r\n\r\n let contents = this.state.loading\r\n ? Loading...\r\n : ticketData;\r\n\r\n return (\r\n
\r\n
\r\n
 
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {contents}\r\n \r\n
 IDName
\r\n
\r\n
\r\n
\r\n )\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react'\r\nimport { Pagination, PaginationItem, PaginationLink} from 'reactstrap';\r\nimport '../App.css';\r\nimport LoggedContext from '../BusinessObjects/LoggedContext'\r\n\r\n\r\ninterface IEsaedroPagerProps {\r\n currentPage:number;\r\n totalPages:number;\r\n onClick(page: number): void;\r\n}\r\n\r\n\r\nexport default class EsaedroPager extends Component {\r\n \r\n constructor(props: IEsaedroPagerProps){\r\n super(props);\r\n }\r\n\r\n render() {\r\n\r\n let pagenumbers = [\r\n this.props.currentPage<5?1:this.props.currentPage-2,\r\n this.props.currentPage<=5?2:this.props.currentPage-1,\r\n this.props.currentPage<5?3:this.props.currentPage,\r\n this.props.currentPage<5?4:this.props.currentPage+1,\r\n this.props.currentPage<5?5:this.props.currentPage+2\r\n ]\r\n let pager = this.props.totalPages == 1\r\n ? ''\r\n : \r\n \r\n this.props.onClick(1)}\r\n />\r\n \r\n \r\n this.props.onClick(this.props.currentPage-1)}\r\n />\r\n \r\n {pagenumbers[0]<=this.props.totalPages\r\n ?\r\n this.props.onClick(pagenumbers[0])}>\r\n {pagenumbers[0]}\r\n \r\n \r\n : undefined\r\n }\r\n {pagenumbers[1]<=this.props.totalPages\r\n ?\r\n this.props.onClick(pagenumbers[1])}>\r\n {pagenumbers[1]}\r\n \r\n \r\n : undefined\r\n }\r\n {pagenumbers[2]<=this.props.totalPages\r\n ?\r\n \r\n this.props.onClick(pagenumbers[2])}>\r\n {pagenumbers[2]}\r\n \r\n \r\n : undefined\r\n }\r\n {pagenumbers[3]<=this.props.totalPages\r\n ?\r\n \r\n this.props.onClick(pagenumbers[3])}>\r\n {pagenumbers[3]}\r\n \r\n \r\n : undefined\r\n }\r\n {pagenumbers[4]<=this.props.totalPages\r\n ?\r\n \r\n this.props.onClick(pagenumbers[4])}>\r\n {pagenumbers[4]}\r\n \r\n \r\n : undefined\r\n }\r\n \r\n this.props.onClick(this.props.currentPage+1)} \r\n />\r\n \r\n \r\n this.props.onClick(this.props.totalPages)}\r\n />\r\n \r\n \r\n\r\n return pager\r\n }\r\n}\r\n ","import React, { Component } from 'react'\r\nimport { Container, Row, Col, Alert, Button, Table } from 'reactstrap';\r\nimport LoggedContext from '../BusinessObjects/LoggedContext'\r\nimport ResourceField from '../Models/ResourceField';\r\n\r\nimport EsaedroLookup from './EsaedroLookup';\r\nimport EsaedroResourceFilter from '../Models/EsaedroResourceFilter';\r\nimport { themeCol3, themeCol4, themeCol9, themeGroup, themeSpinner, themeFormInput, themeBackButton, themeUpdateButton, themeCol6, themeCol6Right, themeSaveButton } from '../Utils/EsaedroTheme';\r\nimport { TableBody, TextField } from '@material-ui/core';\r\n\r\nexport interface EsaedroFilterConfigProps {\r\n myObjType: string\r\n myObjectFields: ResourceField[];\r\n onReturn?(objectFilters?: EsaedroResourceFilter[], ackMessage?: string): void\r\n}\r\n\r\ninterface EsaedroFilterConfigState {\r\n myObjectFilters: EsaedroResourceFilter[];\r\n myNewFilter: EsaedroResourceFilter;\r\n errorMessage: string;\r\n loading: boolean;\r\n}\r\n\r\nexport default class EsaedroFilterConfig extends Component {\r\n\r\n // Definisco i range delle mie lookup\r\n filterTypes = \"Text=Testo|Date=Data\"\r\n filterOperators = \"Uguale=Uguale|Maggiore=Maggiore|Minore=Minore\"\r\n filterConcat = \"AND=And|OR=Or\"\r\n\r\n // Bool per impedire l'add filter\r\n disableAddFilterButton = true\r\n\r\n constructor(props: any) {\r\n super(props);\r\n\r\n this.state = { \r\n myObjectFilters: [],\r\n myNewFilter: new EsaedroResourceFilter(\"\",\"\",\"\"),\r\n errorMessage:'',\r\n loading: false\r\n };\r\n }\r\n\r\n // Gestisce i cambiamenti in input e li salva nello stato dell'object, innescando il rendering\r\n handleChange = (event: any) => {\r\n\r\n const target = event.target;\r\n const value = target.type === 'checkbox' ? target.checked : target.value;\r\n var name = target.name;\r\n \r\n let tempFilter = this.state.myNewFilter;\r\n if (name == \"Campo\") tempFilter.FieldName = value\r\n if (name == \"Operatore\") tempFilter.Operator = value\r\n if (name == \"Valore\") tempFilter.Value = value\r\n if (name == \"Tipo\") tempFilter.filterType = value\r\n if (name == \"Concatenazione\") tempFilter.previousFilterOperator = value\r\n\r\n this.disableAddFilterButton = !(tempFilter.FieldName != \"\" && tempFilter.Operator != \"\" && tempFilter.Value != \"\" && tempFilter.filterType != \"\" && tempFilter.previousFilterOperator != \"\") \r\n \r\n this.setState({\r\n myNewFilter: tempFilter\r\n });\r\n }\r\n\r\n updateFilter = () => {\r\n this.setState(prevState => ({\r\n myObjectFilters: [...prevState.myObjectFilters, this.state.myNewFilter],\r\n myNewFilter: new EsaedroResourceFilter(\"\",\"\",\"\")\r\n }))\r\n }\r\n \r\n // Esce dai filtri e torna alla lista di oggetti (ObjectList)\r\n returnToList = () => {\r\n if (this.props.onReturn!=undefined) {\r\n this.props.onReturn()\r\n }\r\n }\r\n\r\n saveAndReturnToList = () => {\r\n if (this.props.onReturn!=undefined) {\r\n this.props.onReturn(this.state.myObjectFilters)\r\n }\r\n }\r\n\r\n render() {\r\n\r\n var errorMessage = (this.state.errorMessage>'')? \r\n ({this.state.errorMessage})\r\n : undefined\r\n\r\n if (this.state.loading)\r\n {\r\n return (\r\n \r\n \r\n Caricamento... \r\n \r\n \r\n )\r\n }\r\n\r\n else\r\n {\r\n let fieldsValues = \"\"\r\n let i = 0\r\n this.props.myObjectFields.forEach((field: ResourceField) => {\r\n if (i!=0) fieldsValues+=\"|\"\r\n fieldsValues+=field.FieldName+\"=\"+field.Field_Label\r\n i++\r\n })\r\n\r\n let filtersToRender = this.state.myObjectFilters.map((filter: EsaedroResourceFilter) => {\r\n return this.renderFilter(filter);\r\n })\r\n\r\n let savedFiltersLabel = this.state.myObjectFilters.length\r\n ?Filtri applicati\r\n : undefined \r\n\r\n let valueField = \r\n\r\n if (this.state.myNewFilter.filterType == \"Date\") \r\n valueField = \r\n\r\n\r\n let newFilterFields = \r\n \r\n Aggiungi Filtro:\r\n \r\n Campo: \r\n \r\n \r\n \r\n \r\n \r\n \r\n Tipo: \r\n \r\n \r\n \r\n \r\n \r\n \r\n Operatore: \r\n \r\n \r\n \r\n \r\n \r\n \r\n Tipo concatenazione: \r\n \r\n \r\n \r\n \r\n \r\n \r\n Valore: \r\n \r\n {valueField}\r\n \r\n \r\n \r\n \r\n \r\n\r\n return ( \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n  \r\n \r\n {errorMessage}\r\n {savedFiltersLabel}\r\n {filtersToRender}\r\n {newFilterFields}\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n } \r\n }\r\n\r\n renderFilter = (filter: EsaedroResourceFilter) => {\r\n \r\n return (\r\n \r\n Campo \r\n Operatore \r\n Tipo \r\n Valore \r\n \r\n {filter.FieldName}\r\n {filter.Operator}\r\n {filter.filterType}\r\n {filter.Value}\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n // Funzione che si occupa di renderizzare ogni singolo campo in base al tipo e ai suoi parametri\r\n renderField = (field: ResourceField) => {\r\n/*\r\n // Qui la lista è filtrata a monte in caso di update, va gestita in caso di insert - TODO capire come gestirla\r\n if (this.props.isNew && !field.Is_Visible && !field.Is_Key && !field.Is_Nullable) return\r\n\r\n // Questi campi non devono mai essere visibili\r\n if (field.FieldName == 'dat_obsoleto' || \r\n field.FieldName == 'cod_utente_cre' || \r\n field.FieldName == 'dat_utente_cre' || \r\n field.FieldName == 'cod_utente_mod' || \r\n field.FieldName == 'dat_utente_mod') return\r\n\r\n if (this.props.isNew && !field.Is_Visible && (field.Is_Key || field.Is_Nullable)) {\r\n field.Field_Label = \"ERRORE - Campo chiave o non nullabile\"\r\n field.Readonly = true\r\n }\r\n\r\n // Se è di tipo Object List non devo mostrarlo\r\n if (field.Reffered_Resource_Type == 1 || field.Is_Decode || field.Is_Identity) return\r\n\r\n // Questi campi vanno sempre ignorati e mai visualizzati\r\n if (field.FieldName == \"ts_update\" || field.FieldName == \"flg_isdeleted\" || field.FieldName == \"dat_ultvar\" || field.FieldName == \"customer_ID\") return\r\n \r\n // Qui scorro i fixed fields per trovare l'elenco dei campi non editabili\r\n if (this.props.fixedFields) {\r\n let i : number\r\n for (i=0; i\r\n \r\n \r\n \r\n \r\n \r\n \r\n {validationError}\r\n \r\n \r\n )\r\n }\r\n\r\n // Controllo se è un pdf e nel caso gli assegno il Field_Type 400\r\n if (field.Field_Type == 22 && field.ContentType == \"pdf\") field.Field_Type = 400 \r\n \r\n // Checkbox\r\n switch (field.Field_Type) {\r\n case 1:\r\n case 2:\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {validationError}\r\n \r\n \r\n )\r\n\r\n case 4:\r\n case 15:\r\n case 33:\r\n // Datetime\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {validationError}\r\n \r\n \r\n )\r\n case 31:\r\n // Date - Controllare MOMENT\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {validationError}\r\n \r\n \r\n )\r\n\r\n case 400:\r\n // PDF - Assegnato a monte\r\n // Creo il component per il PDF\r\n //return \r\n return ( \r\n \r\n \r\n \r\n \r\n \r\n \r\n {validationError}\r\n \r\n \r\n )\r\n \r\n default:\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {validationError}\r\n \r\n \r\n )\r\n }\r\n }\r\n\r\n // Valida i campi e genera i messaggi da mostrare in tempo reale sotto al campo stesso\r\n validateField = (field: ResourceField) => {\r\n // TODO Lookup\r\n // Ritorna null se il campo è valido -> governa il tasto update\r\n // Come gestire la stringa vuota???\r\n var valueToCheck = this.state.myObject[field.FieldName]\r\n \r\n if (field.Is_Key && valueToCheck!==0 && valueToCheck!==false && valueToCheck===undefined) return (\r\n \r\n Questo campo è chiave e dunque obbligatorio\r\n \r\n ) \r\n if (!field.Is_Nullable && valueToCheck!==false && valueToCheck!==0 && valueToCheck===undefined) return (\r\n \r\n Questo campo non può essere nullo\r\n \r\n )\r\n\r\n if (field.Required && valueToCheck!==false && valueToCheck!==0 && (valueToCheck===undefined || valueToCheck=='')) return (\r\n \r\n Questo campo è obbligatorio\r\n \r\n )\r\n\r\n if (valueToCheck) {\r\n // Controllo la lunghezza\r\n if (field.Field_Size > 0 && valueToCheck.length > field.Field_Size) return (\r\n \r\n Questo campo supera la lunghezza massima consentita\r\n \r\n )\r\n //Se è un numero controllo che ci siano solo cifre\r\n if ((field.Field_Type == 0 || field.Field_Type == 5 || field.Field_Type == 6 || field.Field_Type == 8 || field.Field_Type == 13 ) && isNaN(valueToCheck)) return (\r\n \r\n Questo campo deve essere numerico\r\n \r\n )\r\n }\r\n \r\n return null*/\r\n }\r\n}\r\n","import React, { Component } from 'react'\r\nimport cubeApiClient from '../BusinessObjects/cubeApiService';\r\n\r\nimport LoggedContext from '../BusinessObjects/LoggedContext';\r\nimport ResourceField from '../Models/ResourceField';\r\nimport EsaedroResourceFilter from '../Models/EsaedroResourceFilter';\r\nimport EsaedroLookup from './EsaedroLookup';\r\nimport { renderGridObject } from '../Utils/EsaedroHelper';\r\nimport { themeEditButton, themeDeleteButton, themeNewButton, themeCol12xl, themeStripedTable, themeExpandButton, themeGroup, themeCol9, themeSpinner, themeFormInput } from '../Utils/EsaedroTheme';\r\nimport { Row, Col, Button, InputGroup, InputGroupAddon, Input, ButtonGroup, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\r\nimport EsaedroPager from './EsaedroPager';\r\nimport EsaedroFilterConfig from './EsaedroFilterConfig';\r\n\r\ninterface EsaedroObjectListProps {\r\n myObjType: string;\r\n myObjUrl: string;\r\n myRowObjType?: string;\r\n myRowObjUrl?: string;\r\n myRowObjLinkFields?: string;\r\n onObjectEdit?(objectToEdit: any): void;\r\n onObjectDelete?(objectToDel: any): void;\r\n onObjectCreate?(): void;\r\n onInputFiltersUpdate?(filters: EsaedroResourceFilter[]): void\r\n onPageUpdate?(page: number): void\r\n navigationFilters?: EsaedroResourceFilter[];\r\n startingInputFilters?: EsaedroResourceFilter[];\r\n startingPage?: number;\r\n totalPages?: number;\r\n hideButtons?: boolean;\r\n hideFilters?: boolean;\r\n canCreate?: boolean;\r\n canUpdate?: boolean;\r\n canDelete?: boolean;\r\n}\r\n\r\ninterface EsaedroObjectsListState {\r\n myObjects: any[];\r\n myObjectsToDisplay: any[];\r\n myObjectFields: ResourceField[];\r\n myObjectInputFilters: EsaedroResourceFilter[];\r\n myObjectViewFilters: EsaedroResourceFilter[];\r\n toggleFilters: boolean;\r\n loading: boolean;\r\n errorMessage:string;\r\n}\r\n\r\nconst pageSize = 10\r\n\r\nexport default class EsaedroObjectsList extends Component {\r\n static contextType = LoggedContext\r\n context!: React.ContextType\r\n\r\n currentPage: number = 1\r\n totalPages: number = 1 \r\n\r\n constructor(props: EsaedroObjectListProps) {\r\n super(props);\r\n\r\n this.state = {\r\n myObjects: [],\r\n myObjectsToDisplay: [],\r\n myObjectFields: [],\r\n myObjectInputFilters: [],\r\n myObjectViewFilters: [],\r\n toggleFilters: false,\r\n loading: true,\r\n errorMessage: ''\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n\r\n // La prima cosa che faccio è recuperare gli item della pagina 1\r\n this.getPageItems(this.props.startingPage?this.props.startingPage:1)\r\n }\r\n\r\n // Callback alla funzione di EsaedroContentPage per andare nell'edit dell'oggetto\r\n setItemToEdit = (item: any) => {\r\n if (this.props.onObjectEdit!=undefined) {\r\n this.props.onObjectEdit(item)\r\n }\r\n }\r\n\r\n // Callback alla funzione di EsaedroContentPage per andare nel delete dell'oggetto\r\n setItemToDelete = (item: any) => {\r\n if (this.props.onObjectDelete!=undefined) {\r\n this.props.onObjectDelete(item)\r\n }\r\n }\r\n\r\n // Callback alla funzione di EsaedroContentPage per andare nella creazione di un oggetto\r\n goToNewItem = () => {\r\n if (this.props.onObjectCreate!=undefined) {\r\n this.props.onObjectCreate()\r\n }\r\n }\r\n \r\n // Espande una testata mostrando le sue righe\r\n expandObject = (index: number) => {\r\n if (this.state.myObjectsToDisplay.length > index) {\r\n let newObjects = this.state.myObjectsToDisplay\r\n newObjects[index].Expanded = !newObjects[index].Expanded\r\n this.setState({myObjectsToDisplay: newObjects})\r\n }\r\n }\r\n\r\n // Chiama il servizio per ottenere gli item da mostrare in una determinata pagina, tenendo conto dei filtri\r\n getPageItems = (page: number) => {\r\n\r\n this.currentPage = page\r\n this.setState({loading: true})\r\n\r\n if (this.props.onPageUpdate!=undefined) {\r\n this.props.onPageUpdate(page)\r\n }\r\n\r\n const service = new cubeApiClient();\r\n const t = this.context.tokenAPI;\r\n\r\n let filterString = \"\"\r\n // Applico eventuali filtri da jump o menu di navigazione\r\n if (this.props.navigationFilters)\r\n {\r\n for(var i=0;i< this.props.navigationFilters.length;i++)\r\n {\r\n filterString += (i?\" and \":\"\") \r\n + this.props.navigationFilters[i].FieldName \r\n + this.props.navigationFilters[i].Operator \r\n + \"'\" + this.props.navigationFilters[i].Value + \"'\"\r\n }\r\n }\r\n\r\n // Applico anche i filtri eventuali impostati dalla maschera\r\n let filtersToAppend = ''\r\n // Prendo gli input filters dalle props o dallo stato a seconda del caso in cui ci troviamo\r\n let inputFilters = this.state.myObjectInputFilters.length\r\n ?this.state.myObjectInputFilters\r\n :this.props.startingInputFilters\r\n ?this.props.startingInputFilters\r\n :undefined\r\n if (inputFilters) {\r\n\r\n if (filterString>'') filtersToAppend = \" and \"\r\n\r\n let found = false\r\n inputFilters.forEach(element => {\r\n if (element.Value!='') {\r\n filtersToAppend += (found?\" and \":\"\") \r\n + 'lower('\r\n + element.FieldName\r\n + ')'\r\n + element.Operator \r\n + 'lower('\r\n + \"'%\" + element.Value + \"%'\"\r\n + ')'\r\n found = true\r\n }\r\n });\r\n\r\n if (!found) filtersToAppend = ''\r\n }\r\n\r\n // Aggiungo eventuali filtri della vista\r\n // TODO qui utilizzare l'oggetto EsaedroResourcesView e aggiungerla come parametro alla richiesta\r\n if (this.state.myObjectViewFilters) {\r\n\r\n let oldFiltersToAppend = filtersToAppend\r\n\r\n if (filtersToAppend>'') filtersToAppend += \" and \"\r\n else if (filterString>'') filtersToAppend = \" and \"\r\n\r\n let found = false\r\n this.state.myObjectViewFilters.forEach(element => {\r\n if (element.Value!='') {\r\n filtersToAppend += (found?\" and \":\"\") \r\n + 'lower('\r\n + element.FieldName\r\n + ')'\r\n + element.Operator \r\n + 'lower('\r\n + \"'%\" + element.Value + \"%'\"\r\n + ')'\r\n found = true\r\n }\r\n });\r\n\r\n if (!found) filtersToAppend = oldFiltersToAppend\r\n }\r\n \r\n const requrl = this.props.myObjUrl + ((filterString+filtersToAppend)>\"\"?'?RecordSelection=':'') + encodeURIComponent(filterString + filtersToAppend) + ((filterString+filtersToAppend)>\"\"?\"&PageSize=\"+pageSize+\"&PageNumber=\"+page:\"?PageSize=\"+pageSize+\"&PageNumber=\"+page)\r\n \r\n // Per debug\r\n //alert(requrl)\r\n\r\n service\r\n .getItems(requrl,t)\r\n .then((data: any) => {\r\n\r\n if (this.props.myRowObjType != undefined && this.props.myRowObjUrl != undefined) {\r\n // Se è un oggetto HeaderRow setto Expanded a false per tutti gli elementi\r\n data.forEach((element: any) => {\r\n element.Expanded = false\r\n });\r\n }\r\n\r\n if (data[0]) \r\n {\r\n this.totalPages = data[0].PageCount\r\n }\r\n else this.totalPages = 1\r\n\r\n this.setState({ myObjects: data, myObjectsToDisplay: data });\r\n const reqFieldsurl ='api/sys/ResourcesFields?RecordSelection=' + encodeURIComponent(\"ResourceName='\" + this.props.myObjType + \"' and Referred_Resource_ID is null and Is_Grid=1\") \r\n\r\n service\r\n .getItems(reqFieldsurl,t)\r\n .then((data: any) => {\r\n // In caso fossero vuoti li creo a partire dai resourceFields, altrimenti dalle props\r\n if (!this.state.myObjectInputFilters.length) this.createStartingInputFilters(data)\r\n this.setState({ \r\n myObjectFields: data, \r\n loading: false \r\n });\r\n },\r\n (error: any) => {\r\n this.setState({ \r\n myObjects: [], \r\n myObjectsToDisplay: [], \r\n loading: false, \r\n errorMessage: error \r\n });\r\n });\r\n\r\n },\r\n (error: any) => {\r\n this.setState({ \r\n myObjects: [], \r\n myObjectsToDisplay: [], \r\n loading: false, \r\n errorMessage: error \r\n });\r\n });\r\n }\r\n\r\n // Filtra gli oggetti ma solo di una lookup HARDCODED\r\n filterObjects = (e: any) => {\r\n // TODO mettere controllo e cercare di fare dinamico, funziona solo per il filtro fatto a mano tramite lookup\r\n let updateList = this.state.myObjects;\r\n\r\n updateList = updateList.filter(item => {\r\n return item.Resource_ID.toString().toLowerCase().search(\r\n e.target.value.toLowerCase()\r\n ) !== -1;\r\n });\r\n\r\n this.setState({\r\n myObjectsToDisplay: updateList\r\n });\r\n }\r\n\r\n // Crea i filtri in input iniziali: possono essere impostati da chi crea il component o vuoti in base alle proprietà con isGrid = 1\r\n createStartingInputFilters = (myFields: ResourceField[]) => {\r\n // Creo i filtri dalla property se settata\r\n if (this.props.startingInputFilters && this.props.startingInputFilters.length) {\r\n let newFilters : EsaedroResourceFilter[] = []\r\n this.props.startingInputFilters.forEach(filter => {\r\n newFilters.push(new EsaedroResourceFilter(filter.FieldName, filter.Value, filter.Operator, filter.description))\r\n });\r\n this.setState({myObjectInputFilters: newFilters})\r\n }\r\n // Altrimenti li creo vuoti\r\n else if (myFields.length){\r\n let myFilters: EsaedroResourceFilter[] = []\r\n myFields.map((field: ResourceField) => {\r\n if (field.Field_Type == 4 || \r\n field.Field_Type == 15 || \r\n field.Field_Type == 33) { \r\n myFilters.push(new EsaedroResourceFilter(field.FieldName, '', ' like ', field.Field_Label, \"datetime-local\"))\r\n }\r\n else if (field.Field_Type == 31) { \r\n myFilters.push(new EsaedroResourceFilter(field.FieldName, '', ' like ', field.Field_Label, \"date\"))\r\n }\r\n else myFilters.push(new EsaedroResourceFilter(field.FieldName, '', ' like '))\r\n })\r\n this.setState({myObjectInputFilters: myFilters})\r\n }\r\n }\r\n\r\n // Svuota i filtri in input e ricarica la vista chiamando gli item di pagina 1\r\n resetInputFilters = () => {\r\n this.state.myObjectInputFilters.forEach(element => {\r\n element.Value = ''\r\n });\r\n this.getPageItems(1)\r\n }\r\n\r\n // Fa l'update dei filtri in input (alla digitazione) senza però far partire nessun procedimento di filtraggio \r\n updateInputFilters = (e: any) => {\r\n let newFilters = this.state.myObjectInputFilters\r\n newFilters[e.target.max].Value = e.target.value\r\n this.setState({myObjectInputFilters: newFilters})\r\n }\r\n\r\n // Applica i filtri in input e chiama la pagina 1. Con un callback manda i filtri all'HistoryItem della EsaedroContentPage\r\n applyInputFilters = () => {\r\n this.getPageItems(1)\r\n if (this.props.onInputFiltersUpdate!=undefined) {\r\n this.props.onInputFiltersUpdate(this.state.myObjectInputFilters)\r\n }\r\n }\r\n\r\n toggleFilterBtnPressed = () => {\r\n this.setState({toggleFilters: !this.state.toggleFilters})\r\n }\r\n\r\n viewFiltersUpdated = (viewFilters?: EsaedroResourceFilter[], errorMessage?: string) => {\r\n // Torno dalla vista che ha settato i filtri. TODO save. Per ora li mando come parametro e ricarico pagina 1\r\n if (viewFilters) {\r\n this.setState({ myObjectViewFilters: viewFilters,\r\n toggleFilters: !this.state.toggleFilters,\r\n errorMessage:errorMessage?errorMessage:\"\" })\r\n \r\n this.getPageItems(1)\r\n }\r\n else if (errorMessage && errorMessage>\"\") {\r\n this.setState({ toggleFilters: !this.state.toggleFilters, errorMessage: errorMessage})\r\n } \r\n }\r\n\r\n render() {\r\n\r\n const { myObjectsToDisplay } = this.state;\r\n\r\n let toggleFilterButton = \r\n\r\n // TODO CHANGE Applica button con il fare qualcosa :D\r\n let filtersModal = \r\n Filtri Ricerca\r\n \r\n \r\n \r\n \r\n\r\n // Creo il pager\r\n let navigation = \r\n\r\n if (this.state.loading)\r\n {\r\n return (\r\n \r\n \r\n Caricamento... \r\n \r\n \r\n )\r\n }\r\n\r\n // Il rendering si basa sempre sugli oggetti da mostrare\r\n if (myObjectsToDisplay && myObjectsToDisplay.length) {\r\n\r\n // Calcolo la size totale dei fields da mostrare\r\n var totalSize = 0\r\n this.state.myObjectFields.forEach((field: ResourceField) => {\r\n totalSize+=field.Field_Size\r\n })\r\n\r\n let objectsData = myObjectsToDisplay.map((item: any, index) => {\r\n\r\n // Splitto la stringa di campi su cui filtrare e creo gli EsaedroResourceFilter da mandare alla ObjectList delle rows\r\n var rowsFilters = undefined\r\n if (this.props.myRowObjLinkFields != undefined) {\r\n // Per ora metto uguale per tutti in questo caso. Capire se bisogna gestirla diversamente\r\n rowsFilters = []\r\n let rowsFiltersFields = this.props.myRowObjLinkFields.split(',')\r\n rowsFiltersFields.map(element => {\r\n rowsFilters.push(new EsaedroResourceFilter(element,item[element],\"=\"));\r\n });\r\n }\r\n // Per gli edit del detail, entrare in testata e poi fare edit da li\r\n let rows = (this.props.myRowObjType != undefined && this.props.myRowObjUrl != undefined) &&\r\n (item[this.props.myRowObjType] && item.Expanded) &&\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n // Creo i vari pulsanti in base ai parametri del component\r\n let buttons = undefined\r\n if (!this.props.hideButtons) {\r\n\r\n // Se l'oggetto non può essere modificato gli setto una property in più\r\n item.disableEdit = !this.props.canUpdate\r\n\r\n let editButton = this.props.canUpdate ?\r\n \r\n : \r\n \r\n let deleteButton = this.props.canDelete &&\r\n \r\n \r\n let expandButton = (this.props.myRowObjType && this.props.myRowObjUrl) &&\r\n \r\n \r\n buttons = \r\n \r\n {editButton}\r\n {deleteButton}\r\n {expandButton}\r\n \r\n \r\n }\r\n\r\n return (\r\n \r\n \r\n {buttons?buttons:''}\r\n {\r\n this.state.myObjectFields.map((field: ResourceField, index) => {\r\n return renderGridObject(field, item, index, totalSize, this.state.myObjectFields.length)\r\n })\r\n } \r\n \r\n {item.Expanded?rows:undefined}\r\n \r\n )});\r\n // Filtro per le maschere - HardCoded. Da mettere tramite struttura dei Menu\r\n let filterLookup = this.props.myObjType==\"ResourcesFields\"\r\n ? \r\n : ''\r\n\r\n let contents = this.state.loading\r\n ? Loading...\r\n : objectsData;\r\n\r\n let newItem = !this.props.hideButtons && this.props.canCreate\r\n ? \r\n : this.props.hideButtons\r\n ?undefined\r\n :\r\n\r\n return (\r\n
\r\n {filterLookup}\r\n {toggleFilterButton}\r\n {filtersModal}\r\n
\r\n
\r\n \r\n \r\n \r\n {newItem?newItem:''}\r\n {\r\n this.state.myObjectFields.map((field: ResourceField, index) => {\r\n return (\r\n \r\n )\r\n })\r\n }\r\n \r\n {!this.props.hideFilters\r\n ?\r\n : undefined\r\n }\r\n {!this.props.hideFilters\r\n ? this.state.myObjectInputFilters.map((filter: EsaedroResourceFilter, index) => {\r\n // Qui gestire filtri di altro tipo\r\n return (\r\n \r\n )\r\n })\r\n : undefined\r\n }\r\n \r\n \r\n {contents}\r\n {navigation}\r\n
{field.Field_Label}
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n )\r\n }\r\n else {\r\n return (\r\n
\r\n
\r\n Non ci sono dati da visualizzare\r\n
\r\n
\r\n )\r\n }\r\n }\r\n}\r\n\r\n\r\n","\r\nimport EsaedroResourceFilter from '../Models/EsaedroResourceFilter';\r\nimport ResourceField from '../Models/ResourceField';\r\nimport React from 'react'\r\nimport moment from 'moment'\r\n\r\nexport function isFilterable(objToFilter: any, filter: EsaedroResourceFilter): boolean {\r\n // Forse sto metodo non serve... \r\n if (filter.FieldName in objToFilter) return true\r\n\r\n return false\r\n}\r\n\r\nexport function renderGridObject(field: ResourceField, item: any, index: number, totalSize: number, totalFields: number): any {\r\n // Calcolo la percentuale sulla base di fieldSize e totalSize e poi la imposto come larghezza ai campi\r\n let margin = 50\r\n totalSize = totalSize+margin*totalFields\r\n var cellWidth: string = (field.Field_Size+margin)/totalSize*100 + '%'\r\n\r\n if (field.FieldName == \"num_giorno\" ) {\r\n switch(item[field.FieldName]) {\r\n case 1:\r\n return (\r\n Lunedi\r\n )\r\n case 2:\r\n return (\r\n Martedi\r\n )\r\n case 3:\r\n return (\r\n Mercoledi\r\n )\r\n case 4:\r\n return (\r\n Giovedi\r\n )\r\n case 5:\r\n return (\r\n Venerdi\r\n )\r\n case 6:\r\n return (\r\n Sabato\r\n )\r\n case 7:\r\n return (\r\n Domenica\r\n )\r\n }\r\n }\r\n\r\n switch (field.Field_Type) {\r\n case 1:\r\n if (item[field.FieldName])\r\n return (\r\n True\r\n )\r\n else return (\r\n False\r\n )\r\n case 2:\r\n if (item[field.FieldName])\r\n return (\r\n True\r\n )\r\n else return (\r\n False\r\n )\r\n // Gestisco i DateTime\r\n case 4:\r\n case 15:\r\n case 33:\r\n return (\r\n {moment(item[field.FieldName]).format(\"DD/MM/YYYY hh:mm\")}\r\n )\r\n // Gestisco i Date\r\n case 31:\r\n return (\r\n {moment(item[field.FieldName]).format(\"DD/MM/YYYY\")}\r\n )\r\n default:\r\n return (\r\n {item[field.FieldName]}\r\n )\r\n }\r\n}\r\n\r\nexport interface EsaedroChangePasswordObject {\r\n oldPassword: string,\r\n newPassword: string,\r\n confirmPassword: string \r\n}\r\n \r\n ","import React, { Component, Fragment } from 'react'\r\nimport { Button, ButtonGroup, ButtonToolbar, Navbar, Nav, NavItem, NavbarToggler, Collapse, Container, NavLink, NavbarBrand} from 'reactstrap';\r\nimport '../App.css';\r\nimport LoggedContext from '../BusinessObjects/LoggedContext'\r\n\r\n\r\ninterface IEsaedroMenuProps {\r\n name:string;\r\n className:string;\r\n onClick?(menuItemId: any): void;\r\n items: any[]\r\n}\r\n\r\n\r\nexport default class EsaedroMenu extends Component {\r\n \r\n constructor(props: IEsaedroMenuProps){\r\n super(props);\r\n\r\n this.state = {\r\n collapsed: true\r\n };\r\n }\r\n\r\n toggleNavbar = () => {\r\n this.setState({\r\n collapsed: !this.state.collapsed\r\n });\r\n }\r\n\r\n menuItemSelected = (e: any) => {\r\n if (this.props.onClick!=undefined) {\r\n this.props.onClick(e.target.value)\r\n }\r\n }\r\n\r\n render() {\r\n\r\n if (this.props.items.length) {\r\n\r\n // Divido i sottomenu dai menu \"Risorsa\" \r\n let sottomenu: any[] = []\r\n let menuRisorse: any[] = []\r\n if (this.props.items) {\r\n this.props.items.map((menuVoice: any) => {\r\n if (menuVoice.Resource_ID) menuRisorse.push(menuVoice)\r\n else sottomenu.push(menuVoice)\r\n })\r\n }\r\n const sottomenuElements = sottomenu.length\r\n ? sottomenu.map((menuVoice: any, i) => {\r\n return (\r\n \r\n )\r\n })\r\n : undefined\r\n\r\n const sottomenuIntestazione = sottomenuElements\r\n ? Seleziona un Sottomenu: \r\n : undefined\r\n\r\n const menuRisorseElements = menuRisorse.length\r\n ? menuRisorse.map((menuVoice: any, i) => {\r\n return (\r\n \r\n )\r\n })\r\n : undefined\r\n\r\n const risorseIntestazione = menuRisorseElements\r\n ? Seleziona una Risorsa: \r\n : undefined\r\n\r\n if (!sottomenuElements && !menuRisorseElements) return (\r\n
\r\n Errore: non ci sono elementi da visualizzare...\r\n
\r\n )\r\n\r\n return (\r\n \r\n {sottomenuIntestazione}\r\n \r\n \r\n \r\n \r\n
    \r\n {sottomenuElements}\r\n
\r\n
\r\n
\r\n
\r\n {risorseIntestazione}\r\n \r\n \r\n \r\n \r\n
    \r\n {menuRisorseElements}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n }\r\n else return (\r\n
\r\n
\r\n )\r\n }\r\n}\r\n ","import React, { Component } from 'react'\r\nimport { Button, NavItem, Nav, NavLink } from 'reactstrap';\r\n\r\nimport '../App.css';\r\nimport LoggedContext from '../BusinessObjects/LoggedContext'\r\nimport EsaedroHistoryItem from '../Models/EsaedroHistoryItem';\r\n\r\n\r\ninterface IEsaedroMenuHistoryProps {\r\n name:string;\r\n className:string;\r\n onClick?(menuItemId: any): void;\r\n items: EsaedroHistoryItem[]\r\n}\r\n\r\nexport default class EsaedroMenuHistory extends Component {\r\n static contextType = LoggedContext\r\n\r\n incrementalKey = 0\r\n \r\n constructor(props: IEsaedroMenuHistoryProps){\r\n super(props);\r\n\r\n this.historyMenuItemSelected = this.historyMenuItemSelected.bind(this)\r\n }\r\n\r\n historyMenuItemSelected(e: any) {\r\n if (this.props.onClick!=undefined) {\r\n this.props.onClick(e.target.value)\r\n }\r\n }\r\n\r\n render() {\r\n \r\n this.incrementalKey++\r\n if (!this.props.items.length)\r\n {\r\n return (\r\n \r\n \r\n )\r\n }\r\n else\r\n {\r\n const historyBar = (this.props.items!==undefined? this.props.items.map((menuVoice: any, i , voices) => {\r\n if (voices.length-1 === i)\r\n return (\r\n \r\n {menuVoice.selectedItem.Description}\r\n \r\n )\r\n else return (\r\n \r\n / \r\n \r\n ) \r\n }\r\n ):'Nessuno storico...');\r\n\r\n return (\r\n \r\n )\r\n }\r\n }\r\n}\r\n ","import React, { Component } from 'react'\r\nimport { Button } from 'reactstrap';\r\nimport '../App.css';\r\nimport LoggedContext from '../BusinessObjects/LoggedContext'\r\n\r\n\r\ninterface IEsaedroJumpMenuProps {\r\n name:string;\r\n className:string;\r\n onClick?(menuItemId: any): void;\r\n items: any[]\r\n}\r\n\r\nexport default class EsaedroJumpMenu extends Component {\r\n \r\n constructor(props: IEsaedroJumpMenuProps){\r\n super(props);\r\n\r\n }\r\n\r\n jumpMenuItemSelected = (e: any) => {\r\n if (this.props.onClick!=undefined) {\r\n this.props.onClick(e.target.value)\r\n }\r\n }\r\n\r\n render() {\r\n\r\n if (this.props.items.length) {\r\n const elements = (this.props.items!==undefined? this.props.items.map((menuVoice: any) => {\r\n return (\r\n \r\n )\r\n }\r\n ):'Errore: non ci sono elementi da visualizzare...');\r\n\r\n return (\r\n
\r\n {elements} \r\n
\r\n )\r\n }\r\n else return (\r\n
\r\n
\r\n )\r\n }\r\n}\r\n ","import EsaedroResourceFilter from \"./EsaedroResourceFilter\";\r\n\r\nclass EsaedroHistoryItem {\r\n setSelectedItemFilters(filters: EsaedroResourceFilter[]) {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n private _selectedItem: any;\r\n public get selectedItem() : any { return this._selectedItem } \r\n public set selectedItem(newvalue: any) { this._selectedItem = newvalue }\r\n\r\n private _itemToEdit: any;\r\n public get itemToEdit() : any { return this._itemToEdit } \r\n public set itemToEdit(newvalue: any) { this._itemToEdit = newvalue }\r\n\r\n private _itemToDel: any;\r\n public get itemToDel() : any { return this._itemToDel } \r\n public set itemToDel(newvalue: any) { this._itemToDel = newvalue }\r\n\r\n private _itemToJump: any;\r\n public get itemToJump() : any { return this._itemToJump } \r\n public set itemToJump(newvalue: any) { this._itemToJump = newvalue }\r\n\r\n private _newItem: boolean = false;\r\n public get newItem() : boolean { return this._newItem } \r\n public set newItem(newvalue: boolean) { this._newItem = newvalue }\r\n\r\n private _menuItems: any[] = [];\r\n public get menuItems() : any[] { return this._menuItems } \r\n public set menuItems(newvalue: any[]) { this._menuItems = newvalue }\r\n\r\n private _jumpMenuItems: any[] = [];\r\n public get jumpMenuItems() : any[] { return this._jumpMenuItems } \r\n public set jumpMenuItems(newvalue: any[]) { this._jumpMenuItems = newvalue }\r\n\r\n private _selectedItemFilters: EsaedroResourceFilter[] = [];\r\n public get selectedItemFilters() : EsaedroResourceFilter[] { return this._selectedItemFilters } \r\n public set selectedItemFilters(newvalue: EsaedroResourceFilter[]) { this._selectedItemFilters = newvalue }\r\n\r\n private _listInputFilters: EsaedroResourceFilter[] = [];\r\n public get listInputFilters() : EsaedroResourceFilter[] { return this._listInputFilters } \r\n public set listInputFilters(newvalue: EsaedroResourceFilter[]) { this._listInputFilters = newvalue }\r\n\r\n private _startingPage: number = 1;\r\n public get startingPage() : number { return this._startingPage } \r\n public set startingPage(newvalue: number) { this._startingPage = newvalue }\r\n\r\n private _customComponentName: string = '';\r\n public get customComponentName() : string { return this._customComponentName } \r\n public set customComponentName(newvalue: string) { this._customComponentName = newvalue }\r\n\r\n /**\r\n * clearDetailState\r\n */\r\n public clearDetailState() {\r\n this.itemToEdit= undefined, \r\n this.itemToDel= undefined, \r\n this.newItem=false\r\n }\r\n\r\n /**\r\n * clearJumpState\r\n */\r\n public clearJumpState() {\r\n this.itemToJump= undefined\r\n }\r\n\r\n /**\r\n * cloneSelf\r\n */\r\n public cloneSelf() : EsaedroHistoryItem {\r\n\r\n let objToRet = new EsaedroHistoryItem ({})\r\n\r\n objToRet.selectedItem = Object.assign({},this.selectedItem)\r\n objToRet.itemToEdit=Object.assign({},this.itemToEdit)\r\n objToRet.itemToDel=Object.assign({},this.itemToDel)\r\n objToRet.itemToJump=Object.assign({},this.itemToJump)\r\n objToRet.newItem=this.newItem\r\n objToRet.startingPage=this.startingPage\r\n objToRet.customComponentName=this.customComponentName\r\n \r\n if (this.menuItems.length) {\r\n let newMenuItems: any[] = []\r\n this.menuItems.forEach(element => {\r\n newMenuItems.push(Object.assign({},element))\r\n });\r\n objToRet.menuItems=newMenuItems\r\n }\r\n if (this.jumpMenuItems.length) {\r\n let newJumpMenuItems: any[] = []\r\n this.jumpMenuItems.forEach(element => {\r\n newJumpMenuItems.push(Object.assign({},element))\r\n });\r\n objToRet.jumpMenuItems=newJumpMenuItems\r\n }\r\n\r\n if (this.selectedItemFilters.length) {\r\n let newSelectedItemFilters: EsaedroResourceFilter[] = []\r\n this.selectedItemFilters.forEach(element => {\r\n newSelectedItemFilters.push(new EsaedroResourceFilter(element.FieldName, element.Value, element.Operator, element.description))\r\n });\r\n objToRet.selectedItemFilters=newSelectedItemFilters\r\n }\r\n\r\n if (this.listInputFilters.length) {\r\n let newListInputFilters: EsaedroResourceFilter[] = []\r\n this.listInputFilters.forEach(element => {\r\n newListInputFilters.push(new EsaedroResourceFilter(element.FieldName, element.Value, element.Operator, element.description))\r\n });\r\n objToRet.listInputFilters=newListInputFilters\r\n }\r\n\r\n return objToRet\r\n }\r\n\r\n constructor(selectedItem: any, \r\n itemToEdit?: any, \r\n itemToDel?: any, \r\n itemToJump?: any, \r\n newItem?: boolean, \r\n menuItems?: any[], \r\n jumpMenuItems?: any[], \r\n selectedItemFilters?: EsaedroResourceFilter[], \r\n listInputFilters?: EsaedroResourceFilter[], \r\n startingPage?: number,\r\n customComponentName?: string\r\n ) {\r\n\r\n this.selectedItem=selectedItem\r\n this.itemToEdit=itemToEdit\r\n this.itemToDel=itemToDel\r\n this.itemToJump=itemToJump\r\n this.newItem=newItem?newItem:false\r\n this.menuItems=menuItems?menuItems:[]\r\n this.jumpMenuItems=jumpMenuItems?jumpMenuItems:[]\r\n this.selectedItemFilters=selectedItemFilters?selectedItemFilters:[]\r\n this.listInputFilters=listInputFilters?listInputFilters:[]\r\n this.startingPage=startingPage?startingPage:1\r\n this.customComponentName=customComponentName?customComponentName:''\r\n }\r\n\r\n}\r\n\r\nexport default EsaedroHistoryItem;","import React, { Component } from 'react'\r\nimport { Row, Col, UncontrolledAlert } from 'reactstrap';\r\nimport '../App.css';\r\nimport LoggedContext from '../BusinessObjects/LoggedContext'\r\nimport cubeApiClient from '../BusinessObjects/cubeApiService';\r\nimport EsaedroMenu from './EsaedroMenu';\r\nimport EsaedroObjectsList from './EsaedroObjectsList';\r\nimport EsaedroObjectEdit from './EsaedroObjectEdit';\r\nimport EsaedroObjectDelete from './EsaedroObjectDelete';\r\nimport EsaedroMenuHistory from './EsaedroMenuHistory';\r\nimport EsaedroJumpMenu from './EsaedroJumpMenu';\r\nimport EsaedroResourceFilter from '../Models/EsaedroResourceFilter';\r\nimport { themeCol9, themeGroup, themeSpinner } from '../Utils/EsaedroTheme';\r\nimport EsaedroHistoryItem from '../Models/EsaedroHistoryItem';\r\n\r\n\r\ninterface IEsaedroContentPageProps {\r\n name?:string\r\n className?:string\r\n onChange?(event: any): void\r\n}\r\ninterface IEsaedroContentPageState\r\n{\r\n menuHistory: EsaedroHistoryItem[];\r\n selectedHistoryItem: EsaedroHistoryItem\r\n loading: boolean\r\n errorMessage: string\r\n successMessage: string\r\n}\r\n\r\nexport default class EsaedroContentPage extends Component {\r\n static contextType = LoggedContext\r\n context!: React.ContextType\r\n\r\n // Utilizzato per forzare il rendering quando si clicca su una menuHistory\r\n incrementalKey: number = 0\r\n\r\n constructor(props: IEsaedroContentPageProps){\r\n super(props);\r\n\r\n // Creo la home manualmente, un item fittizio con Id = 0\r\n let homeHistoryItem = new EsaedroHistoryItem({Description: \"Home\", Id: \"0\"})\r\n this.state={\r\n selectedHistoryItem: homeHistoryItem,\r\n menuHistory:[homeHistoryItem], \r\n loading:true,\r\n errorMessage:'',\r\n successMessage:''\r\n };\r\n }\r\n\r\n componentDidMount()\r\n {\r\n if (!this.state.selectedHistoryItem.menuItems.length)\r\n {\r\n const service = new cubeApiClient();\r\n const t = this.context.tokenAPI;\r\n var requrl =\"api/sys/MenuItems?RecordSelection=ParentMenuId is null\" \r\n\r\n // Controllo se ho un token di autorizzazione\r\n if (t != \"\")\r\n {\r\n service\r\n .getItems(requrl,t)\r\n .then((data: any) => {\r\n\r\n // Creo il Menu iniziale\r\n if (data)\r\n {\r\n this.setState(prevState => ({\r\n ...prevState.selectedHistoryItem.menuItems=data,\r\n loading:false\r\n })) \r\n }\r\n else this.setState({\r\n loading: false, \r\n errorMessage: \"Si è verificato un problema nello scaricare i dati.\"\r\n })\r\n },\r\n (error: any) => {\r\n this.setState({ \r\n loading: false, \r\n errorMessage: error \r\n });\r\n });\r\n }\r\n \r\n // Non ho un token valido quindi devo rifare il login\r\n else {\r\n this.setState({\r\n loading: false, \r\n errorMessage: \"Si prega di effettuare il login.\"\r\n })\r\n }\r\n \r\n }\r\n }\r\n\r\n onMenuClick = (id: any) => {\r\n // Recupero la voce di menu cliccata. Non è posizionale ma si basa sull'Id. Si può cambiare? Conviene?\r\n let selectedVoices : any = this.state.selectedHistoryItem.menuItems[0].Id\r\n ? this.state.selectedHistoryItem.menuItems.filter(item => (item.Id == id))\r\n : undefined\r\n if (selectedVoices!=undefined && selectedVoices.length > 0) {\r\n\r\n this.setState({\r\n loading: true,\r\n successMessage:'',\r\n errorMessage:''\r\n })\r\n const service = new cubeApiClient();\r\n const t = this.context.tokenAPI;\r\n let voiceID = selectedVoices[0].Id\r\n ? selectedVoices[0].Id.toString()\r\n : undefined\r\n\r\n if (voiceID) {\r\n\r\n var requrl =\"api/sys/MenuItems?RecordSelection=ParentMenuId=\" + voiceID ; \r\n \r\n service\r\n .getItems(requrl,t)\r\n .then((data: any) => {\r\n // Creo il nuovo HistoryItem, con relativo Menu, lo aggiungo allo storico e lo rendo attivo\r\n if (data)\r\n {\r\n let newSelectedItem = new EsaedroHistoryItem(selectedVoices[0])\r\n // gli setto il customComponent se presente\r\n newSelectedItem.customComponentName = newSelectedItem.selectedItem.CustomEditComponent\r\n newSelectedItem.menuItems=data\r\n this.setState(prevState => ({\r\n selectedHistoryItem: newSelectedItem,\r\n menuHistory: [...prevState.menuHistory, newSelectedItem],\r\n loading:false\r\n })) \r\n }\r\n \r\n else this.setState({\r\n loading: false, \r\n errorMessage: \"Si è verificato un problema nello scaricare i dati del Menu.\"\r\n })\r\n },\r\n (error: any) => {\r\n this.setState({ \r\n loading: false, \r\n errorMessage: error \r\n });\r\n });\r\n }\r\n else {\r\n this.setState({ \r\n loading: false, \r\n errorMessage: \"Si è verificato un errore nel recuperare le voci di menu\" \r\n });\r\n }\r\n \r\n }\r\n else \r\n {\r\n this.setState({ \r\n loading: false, \r\n errorMessage: \"Si è verificato un errore nel recuperare le voci di menu\" \r\n });\r\n }\r\n }\r\n\r\n onMenuHistoryClick = (id: any) => {\r\n\r\n /***********************************************************************\r\n Un piccolo passo per il codice, un grande passo per l'umanità\r\n Questo semplice incrementale, che va propagato su TUTTI gli \r\n oggetti figli della content page e passato alla loro property key,\r\n fa si che ogni volta che si clicchi su uno history il componente \r\n figlio faccia un'unmount e una mount, ricaricando \r\n tutti i dati in maniera corretta\r\n ***********************************************************************/\r\n this.incrementalKey++\r\n\r\n // Recupero la voce di menu history cliccata. Non è posizionale ma si basa sull'Id. Si può cambiare? Conviene?\r\n let selectedVoices : any = this.state.menuHistory[0].selectedItem.Id\r\n ? this.state.menuHistory.filter(item => (item.selectedItem.Id == id))\r\n : undefined\r\n \r\n if (selectedVoices!=undefined) {\r\n\r\n this.setState({\r\n loading: true,\r\n successMessage:'',\r\n errorMessage:''\r\n })\r\n // Creo un nuovo array come HisoryMenu, e gli aggiungo tutte le voci di history menu sino alla selezionata\r\n let i: number\r\n let newHistory: EsaedroHistoryItem[] = []\r\n for (i=0; i {\r\n\r\n // Recupero la voce di menu jump cliccata. Non è posizionale ma si basa sul JumpName. Si può cambiare? Conviene?\r\n let selectedVoices : any = this.state.selectedHistoryItem.jumpMenuItems.filter(item => (item.JumpName == jumpName))\r\n if (selectedVoices!=undefined) {\r\n \r\n // Clono l'HistoryItem in cui mi trovavo e aggiungo le informazioni relative al salto\r\n let newHistoryItem = this.state.selectedHistoryItem.cloneSelf()\r\n newHistoryItem.itemToJump=selectedVoices[0]\r\n //alert(JSON.stringify(selectedVoices[0]))\r\n newHistoryItem.jumpMenuItems=[]\r\n\r\n // Qui creo gli EsaedroResourceFilters da mettere come selectedItemFilters - Al momento non gestiamo la description\r\n let itemFilters: EsaedroResourceFilter[] = []\r\n if (selectedVoices[0].ResourcesJumpFilters) {\r\n selectedVoices[0].ResourcesJumpFilters.forEach((element: { DestinationFieldName: string, SourceFieldName: string; FilterOperator: string; }) => {\r\n itemFilters.push(new EsaedroResourceFilter(element.DestinationFieldName, newHistoryItem.itemToEdit[element.SourceFieldName] ,element.FilterOperator))\r\n });\r\n }\r\n newHistoryItem.selectedItemFilters=itemFilters\r\n\r\n // Resetto gli altri oggetti di stato\r\n newHistoryItem.itemToEdit=undefined\r\n newHistoryItem.itemToDel=undefined\r\n newHistoryItem.newItem=false\r\n\r\n // Metto la starting page a 1 per le liste successive che partiranno da questa\r\n newHistoryItem.startingPage=1\r\n\r\n // Salvo il customComponentName in caso ci sia\r\n newHistoryItem.customComponentName = newHistoryItem.itemToJump.DestinationCustomEditComponent\r\n\r\n // Setto correttamente le varie proprietà del nuovo SelectedItem\r\n newHistoryItem.selectedItem.Id=newHistoryItem.selectedItem.Id+\"_\"+jumpName\r\n newHistoryItem.selectedItem.Description=selectedVoices[0].JumpLabel\r\n newHistoryItem.selectedItem.ResourceName=selectedVoices[0].DestinationResourceName\r\n newHistoryItem.selectedItem.EndPoint=selectedVoices[0].DestinationEndPoint\r\n\r\n // Aggiungo il nuovo History Item alla menu history e imposto il nuovo Item come attivo\r\n this.setState(prevState => ({\r\n selectedHistoryItem: newHistoryItem,\r\n menuHistory: [...prevState.menuHistory, newHistoryItem],\r\n successMessage:'',\r\n errorMessage:''\r\n }))\r\n }\r\n }\r\n\r\n OnEditClick = (objToEdit: any) => {\r\n \r\n this.setState({\r\n loading: true,\r\n successMessage:'',\r\n errorMessage:''\r\n })\r\n const service = new cubeApiClient();\r\n const t = this.context.tokenAPI;\r\n var requrl =\"api/sys/ResourcesJumps?RecordSelection=SourceResourceName='\" + this.state.selectedHistoryItem.selectedItem.ResourceName +\"'\" ; \r\n\r\n let jumpItems: EsaedroResourceFilter[] = []\r\n service\r\n .getItems(requrl,t)\r\n .then((data: any) => {\r\n // Creo il nuovo HistoryItem, con relativo JumpMenu, lo aggiungo allo storico e lo rendo attivo\r\n if (data)\r\n {\r\n jumpItems = data\r\n }\r\n \r\n // Come prima cosa clono il mio selectedItem\r\n let newHistoryItem = this.state.selectedHistoryItem.cloneSelf()\r\n newHistoryItem.itemToEdit=objToEdit\r\n // Svuoto eventuali filtri in input che possono essere stati clonati\r\n newHistoryItem.listInputFilters=[]\r\n // Gli aggiungo eventuali jumpItems recuperati dal servizio\r\n newHistoryItem.jumpMenuItems=jumpItems\r\n // Metto la starting page a 1 per le liste successive che partiranno da questa\r\n newHistoryItem.startingPage=1\r\n \r\n // Aggiungo la voce all'history menu e poi setto questo item come selectedItem\r\n newHistoryItem.selectedItem.Id=newHistoryItem.selectedItem.Id+\"_\"+objToEdit.Id\r\n newHistoryItem.selectedItem.Description=newHistoryItem.selectedItem.Description+\" - Dettaglio\"\r\n this.setState(prevState => ({\r\n selectedHistoryItem: newHistoryItem,\r\n menuHistory: [...prevState.menuHistory, newHistoryItem],\r\n loading: false\r\n }))\r\n\r\n },\r\n (error: any) => {\r\n this.setState({ \r\n loading: false, \r\n errorMessage: error \r\n });\r\n }); \r\n }\r\n\r\n OnDeleteClick = (objToDelete: any) => {\r\n let newHistoryItem = this.state.selectedHistoryItem.cloneSelf()\r\n // Setto le nuove proprietà al mio history object\r\n newHistoryItem.itemToEdit=undefined\r\n newHistoryItem.itemToDel=objToDelete\r\n newHistoryItem.newItem=false\r\n // Aggiungo la voce all'history menu e poi setto questo item come selectedItem\r\n newHistoryItem.selectedItem.Id=newHistoryItem.selectedItem.Id+\"_DEL\"\r\n newHistoryItem.selectedItem.Description=\"Elimina \" + newHistoryItem.selectedItem.Description\r\n this.setState(prevState => ({\r\n selectedHistoryItem: newHistoryItem,\r\n menuHistory: [...prevState.menuHistory, newHistoryItem],\r\n successMessage:'',\r\n errorMessage:''\r\n }))\r\n }\r\n\r\n OnReturnToList = (returnMessage?: string) => {\r\n this.popLastHistoryItemAndUpdateSelected(returnMessage)\r\n }\r\n\r\n popLastHistoryItemAndUpdateSelected = (returnMessage?:string) => {\r\n let newHistory = this.state.menuHistory\r\n newHistory.pop()\r\n this.setState({\r\n menuHistory: newHistory, \r\n selectedHistoryItem: newHistory[newHistory.length-1],\r\n successMessage:returnMessage?returnMessage:'',\r\n errorMessage:''\r\n })\r\n }\r\n\r\n OnNewItem = () => {\r\n let newHistoryItem = this.state.selectedHistoryItem.cloneSelf()\r\n // Setto le nuove proprietà al mio history object\r\n newHistoryItem.itemToEdit=undefined\r\n newHistoryItem.itemToDel=undefined\r\n newHistoryItem.newItem=true\r\n // Metto la starting page a 1 per le liste successive che partiranno da questa\r\n newHistoryItem.startingPage=1\r\n // Aggiungo la voce all'history menu e poi setto questo item come selectedItem\r\n newHistoryItem.selectedItem.Id=newHistoryItem.selectedItem.Id+\"_NEW\"\r\n newHistoryItem.selectedItem.Description=\"Crea \" + newHistoryItem.selectedItem.Description\r\n this.setState(prevState => ({\r\n selectedHistoryItem: newHistoryItem,\r\n menuHistory: [...prevState.menuHistory, newHistoryItem],\r\n successMessage:'',\r\n errorMessage:''\r\n }))\r\n }\r\n\r\n OnListFiltersUpdate = (filters: EsaedroResourceFilter[]) => {\r\n let newFilters : EsaedroResourceFilter[] = []\r\n filters.forEach(filter => {\r\n newFilters.push(new EsaedroResourceFilter(filter.FieldName, filter.Value, filter.Operator, filter.description))\r\n });\r\n this.state.selectedHistoryItem.listInputFilters = newFilters\r\n }\r\n\r\n OnListPageUpdate = (newPage: number) => {\r\n this.state.selectedHistoryItem.startingPage = newPage\r\n }\r\n\r\n clearDetailState = () => {\r\n this.setState({\r\n loading: true,\r\n successMessage:'',\r\n errorMessage:''})\r\n this.state.selectedHistoryItem.clearDetailState()\r\n this.setState({loading: false})\r\n }\r\n\r\n clearJumpState = () => {\r\n this.setState({\r\n loading: true,\r\n successMessage:'',\r\n errorMessage:''\r\n })\r\n this.state.selectedHistoryItem.clearJumpState()\r\n this.setState({loading: false})\r\n }\r\n\r\n render() {\r\n\r\n if (this.state.loading)\r\n {\r\n return (\r\n \r\n \r\n Caricamento... \r\n \r\n \r\n )\r\n }\r\n\r\n else \r\n {\r\n var successMessageAlert = (\r\n (this.state.successMessage != '')?\r\n \r\n {this.state.successMessage}\r\n \r\n : undefined\r\n \r\n )\r\n var pageContent = undefined\r\n if (this.state.selectedHistoryItem.selectedItem.EndPoint!=undefined || this.state.selectedHistoryItem.itemToJump) {\r\n\r\n\r\n /*********ERRORE *******************/\r\n if (this.state.errorMessage!='') {\r\n pageContent = \r\n \r\n \r\n {this.state.errorMessage} \r\n {this.state.selectedHistoryItem.selectedItem.name}\r\n {this.state.selectedHistoryItem.selectedItem.DestinationResourceName}\r\n \r\n \r\n \r\n }\r\n\r\n /************** Edit componente con gestione custom (Lazy Loading) ***********/\r\n // TODO capire come gestire errore nel nome risorsa custom\r\n if (this.state.selectedHistoryItem.customComponentName && this.state.selectedHistoryItem.customComponentName != '' && this.state.selectedHistoryItem.itemToEdit) {\r\n const CustomComponent = React.lazy(() => import(\"./CustomComponents/\"+this.state.selectedHistoryItem.customComponentName))\r\n pageContent = \r\n \r\n \r\n \r\n }\r\n\r\n /************** New componente con gestione custom (Lazy Loading) ***********/\r\n // TODO capire come gestire errore nel nome risorsa custom\r\n else if (this.state.selectedHistoryItem.customComponentName && this.state.selectedHistoryItem.customComponentName != '' && this.state.selectedHistoryItem.newItem) {\r\n const CustomComponent = React.lazy(() => import(\"./CustomComponents/\"+this.state.selectedHistoryItem.customComponentName))\r\n pageContent = \r\n \r\n \r\n \r\n }\r\n\r\n /******** Dettaglio - Modifica *********/\r\n // TODO - Cambiare la gestione dei filtri? - Passare un elenco di campi vincolati? Ad esempio in caso di jump\r\n else if (this.state.selectedHistoryItem.itemToEdit) {\r\n pageContent = \r\n \r\n }\r\n /******** Dettaglio - Elimina *********/\r\n else if (this.state.selectedHistoryItem.itemToDel) {\r\n pageContent = \r\n \r\n }\r\n /******** Dettaglio - Crea *********/\r\n // TODO - Cambiare la gestione dei filtri? - Passare un elenco di campi vincolati? Ad esempio in caso di jump\r\n else if (this.state.selectedHistoryItem.newItem) {\r\n pageContent = \r\n \r\n }\r\n // Gestisco i vari casi di render per il content della pagina\r\n /******** Jump *********/\r\n else if (this.state.selectedHistoryItem.itemToJump) {\r\n pageContent = \r\n \r\n }\r\n /******** Lista - Testate-Righe *********/\r\n else if (this.state.selectedHistoryItem.selectedItem.ChildResourceName != undefined) {\r\n pageContent = \r\n \r\n }\r\n /******** Lista *********/\r\n else {\r\n pageContent = \r\n \r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {\r\n // Lo visualizzo solo in caso di Edit e solo se ci sono jump items\r\n this.state.selectedHistoryItem.itemToEdit && this.state.selectedHistoryItem.jumpMenuItems\r\n ? \r\n \r\n : undefined\r\n }\r\n {successMessageAlert}\r\n {pageContent}\r\n \r\n )\r\n }\r\n }\r\n}\r\n ","import React, { Component } from 'react'\r\nimport cubeApiClient from '../BusinessObjects/cubeApiService';\r\nimport { RouteComponentProps, Route, Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport LoggedContext from '../BusinessObjects/LoggedContext'\r\nimport UserProfile from '../Models/UserProfile';\r\nimport Products from '../Models/Products';\r\n\r\ninterface UserProductListState {\r\n products: Products[];\r\n loading: boolean;\r\n errorMessage:string;\r\n productChanged: boolean;\r\n}\r\n\r\nexport default class UserProductList extends Component, UserProductListState> {\r\n static contextType = LoggedContext\r\n\r\n constructor(props:RouteComponentProps<{}>) {\r\n super(props);\r\n\r\n this.state = {\r\n products: [],\r\n loading: true,\r\n errorMessage: '',\r\n productChanged: false\r\n }\r\n }\r\n \r\n handleChange = (e:any) => {\r\n var cmp=this.state.products[e.target.max];\r\n var up:UserProfile =this.context.userProfile;\r\n\r\n up.ProductCode = cmp.ProductCode;\r\n\r\n /// Aggiorno il portale\r\n const service = new cubeApiClient();\r\n service\r\n .changeUserProfile(up,this.context.tokenAPI)\r\n .then((data: any) => {\r\n\r\n this.context.setUserProfile(up);\r\n this.setState({productChanged:true});\r\n \r\n },\r\n (error: any) => {\r\n alert('ERRORREEEE!!' + error);\r\n }); \r\n\r\n }\r\n \r\n componentDidMount() {\r\n const service = new cubeApiClient();\r\n const t = this.context.tokenAPI;\r\n \r\n service\r\n .getItems('api/sys/UserProducts',t)\r\n .then((data: any) => {\r\n this.setState({ products: data, loading: false });\r\n },\r\n (error: any) => {\r\n this.setState({ products: [], loading: false, errorMessage: error });\r\n });\r\n }\r\n\r\n render() {\r\n const { match } = this.props;\r\n const { products, loading, productChanged } = this.state;\r\n\r\n if(productChanged)\r\n return \r\n else\r\n {\r\n\r\n let ticketData = products.map((item: Products,index) => (\r\n \r\n {/* {new Date(item.issueDate).toISOString().slice(0,10)} */}\r\n \r\n \r\n \r\n {item.ProductCode}\r\n {item.ProductDescription}\r\n \r\n ));\r\n\r\n let contents = this.state.loading\r\n ? Loading...\r\n : ticketData;\r\n\r\n return (\r\n
\r\n
\r\n
 
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {contents}\r\n \r\n
 CodiceDescrizione
\r\n
\r\n
\r\n
\r\n )\r\n }\r\n }\r\n}\r\n","import React, { Component, Fragment } from 'react'\r\nimport { Col, Row, Container, Modal, Button, ModalBody, ModalFooter, ModalHeader } from 'reactstrap';\r\nimport cubeApiClient from '../BusinessObjects/cubeApiService'\r\nimport { Redirect } from 'react-router';\r\nimport LoggedContext from '../BusinessObjects/LoggedContext'\r\nimport { EsaedroChangePasswordObject } from '../Utils/EsaedroHelper';\r\nimport { themeGroup, themeCol3, themeCol9, themeFormInput } from '../Utils/EsaedroTheme';\r\n\r\ninterface IChangePasswordState{\r\n oldPassword: string,\r\n newPassword: string,\r\n confirmPassword: string,\r\n returnHome: boolean\r\n}\r\n\r\nexport default class ChangePassword extends Component {\r\n static contextType = LoggedContext\r\n context!: React.ContextType\r\n\r\n constructor(props:Readonly)\r\n {\r\n super(props);\r\n this.state ={ oldPassword:'', newPassword:'', confirmPassword:'', returnHome: false};\r\n }\r\n\r\n handleChange = (event: any) => {\r\n const target = event.target;\r\n const value = target.type === 'checkbox' ? target.checked : target.value;\r\n const name = target.name;\r\n \r\n // @ts-ignore : to avoid typescript to complain \r\n this.setState({\r\n [name]: value\r\n });\r\n }\r\n\r\n changePassword = () => {\r\n let pwdObj: EsaedroChangePasswordObject = {\r\n oldPassword: this.state.oldPassword,\r\n newPassword: this.state.newPassword,\r\n confirmPassword: this.state.confirmPassword\r\n }\r\n \r\n var token = this.context.tokenAPI;\r\n\r\n const service = new cubeApiClient();\r\n service\r\n .changePassword(pwdObj,token)\r\n .then(\r\n (data: any) =>{\r\n \r\n //\r\n alert(\"Password cambiata correttamente\")\r\n this.setState({returnHome: true})\r\n },\r\n (error:any) => {\r\n //\r\n alert(\"Errore nel cambiare la password: \" + error)\r\n }\r\n );\r\n }\r\n\r\n returnToHome = () => {\r\n this.setState({returnHome: true})\r\n }\r\n \r\n render() {\r\n \r\n if (this.state.returnHome) {\r\n return (\r\n \r\n )\r\n }\r\n else return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {' '}\r\n \r\n \r\n )\r\n }\r\n}\r\n\r\n","// list of the main Routes\r\nimport * as React from 'react';\r\nimport { Route, Switch } from 'react-router-dom';\r\nimport Home from './Components/Home';\r\nimport About from './Components/About';\r\nimport Login from './Components/Login';\r\nimport Logout from './Components/Logout';\r\nimport UserCompanyList from './Components/ChangeCompany';\r\nimport EsaedroObjectEdit from './Components/EsaedroObjectEdit';\r\nimport EsaedroObjectsList from './Components/EsaedroObjectsList';\r\nimport EsaedroObjectDelete from './Components/EsaedroObjectDelete';\r\nimport EsaedroContentPage from './Components/EsaedroContentPage';\r\nimport UserProductList from './Components/ChangeProduct';\r\nimport ChangePassword from './Components/ChangePassword';\r\n\r\nconst reload = () => window.location.reload();\r\n\r\nexport const AppRoutes = \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ;\r\n","import React, { Component } from 'react';\r\nimport { Collapse, Container, Navbar, NavbarBrand, NavbarToggler, NavItem, NavLink, DropdownMenu, DropdownToggle, DropdownItem,UncontrolledDropdown, Row } from 'reactstrap';\r\nimport { NavLink as RRNL } from 'react-router-dom';\r\nimport LoggedContext from '../BusinessObjects/LoggedContext'\r\nimport UserProfile from '../Models/UserProfile';\r\n\r\nexport default class EsaedroNavigationBar extends Component {\r\n static contextType = LoggedContext\r\n context!: React.ContextType\r\n\r\n navInactiveStyle: any = { \"color\": \"white\" };\r\n navActiveStyle: any = { \"color\":\"steelblue\" };\r\n subItem: any = { \"color\":\"black\" };\r\n subItemActive: any = { \"color\":\"black\" };\r\n \r\n constructor (props: Readonly) {\r\n super(props);\r\n\r\n this.toggleNavbar = this.toggleNavbar.bind(this);\r\n\r\n this.state = {\r\n collapsed: true\r\n };\r\n }\r\n\r\n toggleNavbar () {\r\n this.setState({\r\n collapsed: !this.state.collapsed\r\n });\r\n }\r\n\r\n render() {\r\n var linkLogin;\r\n var menuImpostazioni;\r\n var titoloPagina;\r\n var productName;\r\n var changePassword = undefined;\r\n\r\n if (this.context.userProfile != undefined && this.context.userProfile != null) {\r\n \r\n titoloPagina = {this.context.userProfile.CompanyName}\r\n productName ={this.context.userProfile.ProductCode}\r\n }\r\n \r\n\r\n if(this.context.tokenAPI > '')\r\n {\r\n linkLogin= (\r\n \r\n  Esci {this.context.username} \r\n \r\n );\r\n\r\n changePassword = (\r\n \r\n  Cambia Password \r\n \r\n );\r\n\r\n if (this.context.userProfile) {\r\n if (this.context.userProfile.ProtectionLevel >= 99 || (this.context.userProfile.Roles && this.context.userProfile.Roles.includes(\"sysadmin\"))) {\r\n menuImpostazioni = (\r\n \r\n \r\n \r\n  Configurazione\r\n \r\n \r\n \r\n Risorse\r\n \r\n \r\n \r\n Jobs sincronizzazione\r\n \r\n \r\n \r\n Agenti\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n } \r\n }\r\n else\r\n {\r\n linkLogin =(\r\n  Login \r\n );\r\n\r\n changePassword = undefined;\r\n menuImpostazioni=\"\";\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n {titoloPagina?titoloPagina:undefined}\r\n {productName?productName:undefined}\r\n \r\n \r\n
    \r\n \r\n \r\n \r\n  Home\r\n \r\n \r\n {menuImpostazioni}\r\n \r\n \r\n  About\r\n \r\n \r\n \r\n {linkLogin}\r\n \r\n \r\n {changePassword}\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n )\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Container } from 'reactstrap';\r\nimport { AppRoutes } from './Routes';\r\nimport EsaedroNavigationBar from './Components/EsaedroNavigationBar'\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport { ApplicationInsights } from '@microsoft/applicationinsights-web'\r\nimport LoggedContext from './BusinessObjects/LoggedContext'\r\nimport UserProfile from './Models/UserProfile';\r\nconst appInsights = new ApplicationInsights({ config: {\r\n instrumentationKey: '3759d2b0-c01c-466d-85ed-82a223cbbb8a'\r\n /* ...Other Configuration Options... */\r\n} });\r\n\r\nclass LoggedComponent extends Component {\r\n state = {\r\n username : '',\r\n tokenAPI:'',\r\n userProfile:null,\r\n selectedItem:null,\r\n selectedMenuItem:null,\r\n setUserToken: (UserName:string,TokenAPI:string) => {\r\n this.setState({username: UserName, tokenAPI:TokenAPI})\r\n },\r\n setUserProfile:(user:UserProfile) => {\r\n this.setState({userProfile: user})\r\n },\r\n setSelectedItem:(item:any) => {\r\n this.setState({selectedItem: item})\r\n },\r\n setSelectedMenuItem:(item:any) => {\r\n this.setState({selectedMenuItem: item})\r\n }\r\n \r\n }\r\n \r\n render() {\r\n return \r\n {this.props.children}\r\n \r\n }\r\n}\r\nappInsights.loadAppInsights();\r\n\r\nclass App extends Component {\r\n constructor(props:any)\r\n {\r\n super(props);\r\n\r\n \r\n }\r\n\r\n render() {\r\n\r\n return ( \r\n \r\n \r\n \r\n \r\n {AppRoutes}\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default App;","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\ntype Config = {\r\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\r\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\r\n};\r\n\r\nexport function register(config?: Config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(\r\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\r\n window.location.href\r\n );\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string, config?: Config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport 'jquery';\r\nimport './index.css';\r\nimport 'bootstrap'\r\nimport 'bootstrap/dist/css/bootstrap.css';\r\nimport App from './App';\r\nimport * as serviceWorker from './serviceWorker';\r\n\r\n\r\nReactDOM.render(\r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n","\r\nexport function themeGroup () { return \"form-group\" }\r\nexport function themeEditButton() { return \"btn btn-info btn-sm\" }\r\nexport function themeBackButton() { return \"btn btn-info\" }\r\nexport function themeSaveButton() { return \"btn btn-success\" }\r\nexport function themeUpdateButton() { return \"btn btn-primary\" }\r\nexport function themeDeleteButton() { return \"btn btn-danger btn-sm\" }\r\nexport function themeNewButton() { return \"btn btn-info\" }\r\nexport function themeExpandButton() { return \"btn btn-success btn-sm\" }\r\nexport function themeStripedTable() {return \"table table-striped\"}\r\nexport function themeSpinner() {return \"fa fa-refresh fa-spin\"}\r\nexport function themeFormInput() {return \"form-control\"}\r\nexport function themeCol3() {return \"col-3\"}\r\nexport function themeCol4() {return \"col-4\"}\r\nexport function themeCol6() {return \"col-6\"}\r\nexport function themeCol6Right() {return \"col-6 text-right\"}\r\nexport function themeCol9() {return \"col-9\"}\r\nexport function themeCol12xl() { return \"col-xl-12\" }\r\n\r\n \r\n \r\n ","class EsaedroLookupItem {\r\n private _value: any;\r\n\r\n public get value() : any {\r\n return this._value\r\n } \r\n\r\n public set value(newvalue: any) {\r\n this._value = newvalue\r\n }\r\n\r\n private _description: string = \"\";\r\n\r\n public get description() : string {\r\n return this._description\r\n } \r\n\r\n public set description(newvalue: string) {\r\n this._description = newvalue\r\n }\r\n constructor(value:any,description:string) {\r\n this.value=value;\r\n this.description=description;\r\n }\r\n\r\n}\r\n\r\nexport default EsaedroLookupItem;","import React, { Component, Fragment } from 'react'\r\nimport { Row, Col, Container, Button, Modal, ModalHeader, ModalBody, ModalFooter, ButtonGroup } from 'reactstrap';\r\nimport '../App.css';\r\nimport LoggedContext from '../BusinessObjects/LoggedContext'\r\nimport EsaedroLookupItem from '../Models/EsaedroLookupItem';\r\nimport cubeApiClient from '../BusinessObjects/cubeApiService';\r\nimport ResourcesLookups from '../Models/ResourcesLookups';\r\nimport { themeCol9, themeSpinner, themeGroup, themeCol4, themeCol3, themeFormInput } from '../Utils/EsaedroTheme';\r\nimport EsaedroResourceFilter from '../Models/EsaedroResourceFilter';\r\n\r\n\r\ninterface IEsaedroLookupsProps {\r\n name:string;\r\n value:any;\r\n fatherObj:any;\r\n lookupName: string;\r\n lookupValues:string;\r\n className?:string;\r\n displayName?:string;\r\n onChange?(event: any): void;\r\n onFieldsToCheckLoaded?(lookupName: string, fieldsToCheck: any[]) : void;\r\n items?:EsaedroLookupItem[];\r\n isSys?:boolean;\r\n isDisabled?:boolean;\r\n}\r\ninterface IEsaedroLookupState\r\n{\r\n lookupResource?: ResourcesLookups;\r\n items:EsaedroLookupItem[];\r\n itemsToDisplay:EsaedroLookupItem[];\r\n toggleSearch: boolean\r\n loading:boolean;\r\n lookupResourceDisplayFilters: EsaedroResourceFilter[];\r\n errorMessage:string;\r\n}\r\n\r\nexport default class EsaedroLookup extends Component {\r\n static contextType = LoggedContext\r\n context!: React.ContextType\r\n \r\n // Campi che manipolano il rendering\r\n filterFailed: boolean = false\r\n fieldsToCheck: any[] = []\r\n initialDisplayField: string = ''\r\n \r\n constructor(props: IEsaedroLookupsProps){\r\n super(props);\r\n this.state={lookupResource: undefined, items:[],itemsToDisplay:[],toggleSearch:false, loading:true, lookupResourceDisplayFilters:[], errorMessage:''};\r\n }\r\n\r\n componentDidMount()\r\n {\r\n this.getLookupData()\r\n }\r\n \r\n getLookupData = () => {\r\n\r\n // Questo metodo viene chiamato solo alla DidMount, e popola la lookup\r\n this.setState({loading: true})\r\n\r\n //Elenco di valori fissi, li setto e mi fermo\r\n if (this.props.lookupValues)\r\n {\r\n let valuesToShow = this.props.lookupValues.split('|')\r\n\r\n let newItems: EsaedroLookupItem[] = []\r\n let newItemsToDisp: EsaedroLookupItem[] = []\r\n valuesToShow.map(element => {\r\n var v =element.split('=');\r\n newItems.push(new EsaedroLookupItem(v[0],v[1]));\r\n newItemsToDisp.push(new EsaedroLookupItem(v[0],v[1]));\r\n });\r\n\r\n this.setState({\r\n items: newItems,\r\n itemsToDisplay: newItemsToDisp,\r\n loading:false\r\n });\r\n }\r\n else\r\n //Elenco da lookup resource - Gestione complessa\r\n if(this.props.lookupName)\r\n {\r\n //Col lookupName vado a richiedere i dettagli della lookup\r\n const service = new cubeApiClient();\r\n const t = this.context.tokenAPI;\r\n var requrl =\"api/sys/ResourcesLookups?RecordSelection=\" + encodeURIComponent(\"LookupName='\" + this.props.lookupName + \"'\") ; \r\n \r\n service\r\n .getItems(requrl,t)\r\n .then((data: any) => {\r\n //Se li trovo procedo\r\n if (data)\r\n {\r\n var resourceLookup:ResourcesLookups=data[0];\r\n if (resourceLookup)\r\n {\r\n // Compilo i fieldsToCheck \r\n if (resourceLookup.ResourcesLookupsFilters) {\r\n for(var i=0;i< resourceLookup.ResourcesLookupsFilters.length;i++)\r\n {\r\n this.fieldsToCheck.push(resourceLookup.ResourcesLookupsFilters[i].ParentField_Name)\r\n }\r\n // Invoco il callback per salvare i fields to check della lookup\r\n this.sendFieldsToCheckToParent(resourceLookup.ValueField_Name, this.fieldsToCheck)\r\n \r\n }\r\n // Setto la resourceLookup\r\n this.setState({lookupResource: resourceLookup})\r\n // Se non ha LoadOnClick allora chiedo già i campi\r\n if (!resourceLookup.LoadOnClick) {\r\n this.reloadResourceLookupFields()\r\n }\r\n else {\r\n // Ottengo la descrizione del primo Item\r\n let filterString = '?RecordSelection=' + resourceLookup.ValueField_Name + \" = '\" + this.props.value + \"'\"\r\n // Applico i filtri in caso ce ne siano\r\n if (resourceLookup.ResourcesLookupsFilters && this.props.fatherObj) {\r\n this.fieldsToCheck = []\r\n for(var i=0;i< resourceLookup.ResourcesLookupsFilters.length;i++)\r\n {\r\n this.fieldsToCheck.push(resourceLookup.ResourcesLookupsFilters[i].ParentField_Name)\r\n if (this.props.fatherObj[resourceLookup.ResourcesLookupsFilters[i].ParentField_Name]) {\r\n filterString += \" and \"\r\n + resourceLookup.ResourcesLookupsFilters[i].LookupField_Name \r\n + resourceLookup.ResourcesLookupsFilters[i].FilterOperator \r\n + \"'\" + this.props.fatherObj[resourceLookup.ResourcesLookupsFilters[i].ParentField_Name] + \"'\"\r\n }\r\n else this.filterFailed = true\r\n }\r\n if (this.filterFailed) filterString = '?RecordSelection=1=0'\r\n }\r\n\r\n //var requrl ='api/Resources/' + resourceLookup.Resource_Name + filterString;\r\n //if (this.props.isSys) requrl ='api/sys/' + resourceLookup.Resource_Name + filterString;\r\n var requrl =resourceLookup.Resource_Endpoint + filterString;\r\n\r\n // Vado a chiedere al servizio il primo item per recuperarne la descrizione completa\r\n service\r\n .getItems(requrl,t)\r\n .then((elenco: any) => {\r\n // Se trovo l'oggetto, allora setto la descrizione completa\r\n if (elenco.length) {\r\n var element=elenco[0];\r\n if (element) {\r\n var descriptionField:string=\"\";\r\n // Salvo i campi su cui poi filtrerò e intanto mi ricreo la descrizione completa\r\n for(var idxFields=0;idxFields< resourceLookup.ResourcesLookupsDisplayFields.length;idxFields++)\r\n {\r\n this.state.lookupResourceDisplayFilters.push(new EsaedroResourceFilter(resourceLookup.ResourcesLookupsDisplayFields[idxFields].DisplayField_Name, '', ' like ', resourceLookup.ResourcesLookupsDisplayFields[idxFields].DisplayField_Description))\r\n descriptionField = descriptionField + (idxFields?\" | \":\"\") + element[resourceLookup.ResourcesLookupsDisplayFields[idxFields].DisplayField_Name];\r\n }\r\n // Mi salvo la descrizione completa a lookup non ancora caricata\r\n this.initialDisplayField = descriptionField\r\n this.setState({loading: false})\r\n }\r\n else {\r\n // Salvo comunque i campi su cui poi filtrerò e intanto mi ricreo la descrizione completa\r\n for(var idxFields=0;idxFields< resourceLookup.ResourcesLookupsDisplayFields.length;idxFields++)\r\n {\r\n this.state.lookupResourceDisplayFilters.push(new EsaedroResourceFilter(resourceLookup.ResourcesLookupsDisplayFields[idxFields].DisplayField_Name, '', ' like ', resourceLookup.ResourcesLookupsDisplayFields[idxFields].DisplayField_Description))\r\n }\r\n this.setState({loading: false})\r\n } \r\n }\r\n else {\r\n // Salvo comunque i campi su cui poi filtrerò e intanto mi ricreo la descrizione completa\r\n for(var idxFields=0;idxFields< resourceLookup.ResourcesLookupsDisplayFields.length;idxFields++)\r\n {\r\n this.state.lookupResourceDisplayFilters.push(new EsaedroResourceFilter(resourceLookup.ResourcesLookupsDisplayFields[idxFields].DisplayField_Name, '', ' like ', resourceLookup.ResourcesLookupsDisplayFields[idxFields].DisplayField_Description))\r\n }\r\n this.setState({loading: false})\r\n }\r\n },\r\n (error: any) => {this.setState({ loading: false, errorMessage: error });}); \r\n }\r\n }\r\n else this.setState({loading:false});\r\n } \r\n else this.setState({loading:false});\r\n },\r\n (error: any) => {\r\n // Non ho trovato i dettagli della Resource Lookup\r\n this.setState({ loading: false, errorMessage: error });\r\n });\r\n \r\n }\r\n else\r\n {\r\n //Ultima spiaggia...valori items presi dal padre\r\n if (this.props.items!==undefined) this.setState({items:this.props.items, itemsToDisplay:this.props.items, loading: false});\r\n else this.setState({loading:false});\r\n }\r\n }\r\n\r\n sendFieldsToCheckToParent = (fieldName: string, fieldsToCheck: any[]) => {\r\n // Tramite callback manda alla ObjectEdit i campi da controllare per scatenare il re-rendering della lookup\r\n if (this.props.onFieldsToCheckLoaded != undefined)\r\n this.props.onFieldsToCheckLoaded(fieldName, fieldsToCheck)\r\n }\r\n\r\n reloadResourceLookupFields = () => {\r\n\r\n // Ricarica i campi della lookup\r\n this.setState({loading: true, toggleSearch: false})\r\n\r\n //Elenco da lookup resource\r\n if(this.state.lookupResource)\r\n {\r\n let resourceLookup = this.state.lookupResource\r\n\r\n let recSelString = '?RecordSelection=' \r\n let filterString = \"\"\r\n // Applico i filtri in caso ce ne siano\r\n if (resourceLookup.ResourcesLookupsFilters && this.props.fatherObj)\r\n {\r\n this.fieldsToCheck = []\r\n this.filterFailed = false\r\n for(var i=0;i< resourceLookup.ResourcesLookupsFilters.length;i++)\r\n {\r\n if (resourceLookup.ResourcesLookupsFilters[i].ParentField_Name) {\r\n this.fieldsToCheck.push(resourceLookup.ResourcesLookupsFilters[i].ParentField_Name)\r\n if (this.props.fatherObj[resourceLookup.ResourcesLookupsFilters[i].ParentField_Name]) {\r\n filterString += (i?\" and \":\"\") \r\n + resourceLookup.ResourcesLookupsFilters[i].LookupField_Name \r\n + resourceLookup.ResourcesLookupsFilters[i].FilterOperator \r\n + \"'\" + this.props.fatherObj[resourceLookup.ResourcesLookupsFilters[i].ParentField_Name] + \"'\"\r\n }\r\n else this.filterFailed = true\r\n }\r\n else if (resourceLookup.ResourcesLookupsFilters[i].FixedValue) {\r\n filterString += (i?\" and \":\"\") \r\n + resourceLookup.ResourcesLookupsFilters[i].LookupField_Name \r\n + resourceLookup.ResourcesLookupsFilters[i].FilterOperator \r\n + \"'\" + resourceLookup.ResourcesLookupsFilters[i].FixedValue + \"'\"\r\n }\r\n }\r\n if (this.filterFailed) filterString = '1=0'\r\n }\r\n\r\n // Applico anche i filtri eventuali impostati dalla maschera\r\n let filtersToAppend = ''\r\n if (this.state.lookupResourceDisplayFilters.length && !this.filterFailed) {\r\n\r\n if (filterString>'') filtersToAppend = \" and \"\r\n\r\n let found = false\r\n this.state.lookupResourceDisplayFilters.forEach(element => {\r\n if (element.Value!='') {\r\n filtersToAppend += (found?\" and lower(\":\"lower(\") \r\n + element.FieldName\r\n + ')'\r\n + element.Operator\r\n + 'lower('\r\n + \"'%\" + element.Value + \"%'\"\r\n + ')'\r\n found = true\r\n }\r\n });\r\n\r\n if (!found) filtersToAppend = ''\r\n }\r\n\r\n const service = new cubeApiClient();\r\n const t = this.context.tokenAPI;\r\n\r\n // var requrl ='api/Resources/' + resourceLookup.Resource_Name + ((filterString>''||filtersToAppend>'')?recSelString + encodeURIComponent(filterString + filtersToAppend):'');\r\n\r\n // if (this.props.isSys) requrl ='api/sys/' + resourceLookup.Resource_Name + filterString + filtersToAppend;\r\n var requrl = resourceLookup.Resource_Endpoint + ((filterString>''||filtersToAppend>'')?recSelString + encodeURIComponent(filterString + filtersToAppend):'');\r\n\r\n service\r\n .getItems(requrl,t)\r\n .then((elenco: any) => {\r\n if (elenco) {\r\n let newItems: EsaedroLookupItem[] = []\r\n let newItemsToDisp: EsaedroLookupItem[] = []\r\n for (var i=0; i < elenco.length; i++) {\r\n var element=elenco[i];\r\n var descriptionField:string=\"\";\r\n\r\n var hasFilterDisplayFields = this.state.lookupResourceDisplayFilters.length? true: false\r\n for(var idxFields=0;idxFields< resourceLookup.ResourcesLookupsDisplayFields.length;idxFields++)\r\n {\r\n if (!hasFilterDisplayFields) this.state.lookupResourceDisplayFilters.push(new EsaedroResourceFilter(resourceLookup.ResourcesLookupsDisplayFields[idxFields].DisplayField_Name, '', ' like ', resourceLookup.ResourcesLookupsDisplayFields[idxFields].DisplayField_Description))\r\n descriptionField = descriptionField + (idxFields?\" | \":\"\") + element[resourceLookup.ResourcesLookupsDisplayFields[idxFields].DisplayField_Name];\r\n }\r\n newItems.push(new EsaedroLookupItem(element[resourceLookup.ValueField_Name],descriptionField));\r\n newItemsToDisp.push(new EsaedroLookupItem(element[resourceLookup.ValueField_Name],descriptionField)); \r\n }\r\n this.setState({\r\n items: newItems,\r\n itemsToDisplay: newItemsToDisp,\r\n loading:false\r\n });\r\n }\r\n else this.setState({loading:false})\r\n },\r\n (error: any) => {this.setState({ loading: false, errorMessage: error });}); \r\n }\r\n else this.setState({loading:false}); \r\n\r\n }\r\n\r\n filterObjects = (e: any) => {\r\n\r\n let updateList = this.state.items;\r\n\r\n updateList = updateList.filter(item => {\r\n return item.description.toLowerCase().search(\r\n e.target.value.toLowerCase()\r\n ) !== -1;\r\n });\r\n\r\n this.setState({\r\n itemsToDisplay: updateList\r\n });\r\n }\r\n\r\n filterChange = (e: any) => {\r\n let newFilters = this.state.lookupResourceDisplayFilters\r\n newFilters.forEach(element => {\r\n if (element.FieldName == e.target.name) {\r\n element.Value = e.target.value.toString()\r\n }\r\n });\r\n this.setState({lookupResourceDisplayFilters: newFilters})\r\n }\r\n\r\n toggleSearchBtnPressed = () => {\r\n this.setState({toggleSearch: !this.state.toggleSearch})\r\n }\r\n \r\n render() {\r\n // Come prima cosa renderizzo oggetti che mi serviranno in caso di lookupResource\r\n let toggleButton = undefined\r\n let filterFields = undefined\r\n let lookupLabel = undefined\r\n let modalFilters = undefined\r\n\r\n if (this.state.lookupResource /*&& this.state.lookupResource.LoadOnClick*/) {\r\n toggleButton = \r\n filterFields = this.state.lookupResourceDisplayFilters.map((filter: EsaedroResourceFilter) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n })\r\n lookupLabel = \r\n\r\n modalFilters = \r\n Filtri Ricerca\r\n \r\n {filterFields} \r\n \r\n \r\n {' '}\r\n \r\n \r\n \r\n }\r\n\r\n // Render in caso di loading\r\n if (this.state.loading)\r\n {\r\n return (\r\n \r\n \r\n Caricamento...\r\n \r\n \r\n )\r\n }\r\n\r\n // Se non ci sono itemsToDisplay gestisco i vari casi\r\n else if (!this.state.itemsToDisplay.length) {\r\n\r\n // Non ci sono perchè mancano dei campi richiesti - Metto una combo vuota in ogni caso\r\n if (this.filterFailed) {\r\n return (\r\n \r\n )\r\n }\r\n // Non ci sono perchè è una LoadOnClick - Metto il campo placeholder e renderizzo il tasto cerca\r\n else if (this.state.lookupResource && this.state.lookupResource.LoadOnClick){\r\n return (\r\n \r\n {toggleButton}\r\n {modalFilters} \r\n {lookupLabel}\r\n \r\n )\r\n }\r\n // Altrimenti presumo che non siano arrivati dati\r\n else {\r\n return (\r\n \r\n \r\n Nessun dato disponibile... \r\n \r\n \r\n )\r\n }\r\n }\r\n // Se invece ci sono items, renderizzo la lookup\r\n else\r\n {\r\n let emptyMessage = \"Nessuna selezione...\"\r\n /* Alternativa */\r\n //let emptyMessage = \"Seleziona \" + {this.props.displayName}\r\n \r\n const elements =(this.state.itemsToDisplay!==undefined? this.state.itemsToDisplay.map( \r\n (item: EsaedroLookupItem) => { \r\n const sele=(item.value === this.props.value?true:false);\r\n return \r\n }\r\n ):'Non ci sono elementi da visualizzare...');\r\n\r\n if (this.state.lookupResource && this.state.lookupResource.LoadOnClick) {\r\n return (\r\n \r\n {modalFilters} \r\n \r\n {toggleButton} \r\n \r\n \r\n \r\n )\r\n }\r\n else return (\r\n \r\n {modalFilters} \r\n \r\n {toggleButton} \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react'\r\nimport LoggedContext from '../BusinessObjects/LoggedContext'\r\nimport cubeApiClient from '../BusinessObjects/cubeApiService';\r\nimport { Container, Row, Col } from 'reactstrap';\r\nimport '../index.css';\r\n\r\ninterface EsaedroObjectDeleteProps {\r\n myObjType: string;\r\n myObjUrl: string;\r\n myObj: any;\r\n onReturn?(returnMsg?:string): void\r\n}\r\n\r\ninterface EsaedroObjectDeleteState {\r\n objToBeDeleted: any;\r\n errorMessage:string;\r\n}\r\n\r\nexport default class EsaedroObjectDelete extends Component {\r\n static contextType = LoggedContext\r\n context!: React.ContextType\r\n \r\n constructor(props: any) {\r\n super(props);\r\n\r\n this.state = {\r\n objToBeDeleted: '',\r\n errorMessage:'' \r\n };\r\n }\r\n\r\n componentDidMount() {\r\n\r\n this.setState({objToBeDeleted: this.props.myObj});\r\n \r\n if(this.context.userProfile == undefined) \r\n {\r\n this.setState({errorMessage:'utente non definito'});\r\n return;\r\n }\r\n \r\n if(this.context.userProfile.customer_ID == 0) \r\n {\r\n this.setState({errorMessage:'azienda non selezionata'});\r\n return;\r\n }\r\n \r\n }\r\n\r\n deleteObj = () => {\r\n\r\n const service = new cubeApiClient();\r\n const t = this.context.tokenAPI;\r\n\r\n service\r\n .deleteObject([this.state.objToBeDeleted] , this.props.myObjUrl, t)\r\n .then(() => {\r\n if (this.props.onReturn!=undefined) {\r\n let successMsg = \"Operazione avvenuta con successo!\"\r\n this.props.onReturn(successMsg)\r\n }\r\n },\r\n (error: any) => {\r\n let stringError = \"Errore nella cancellazione: \"+JSON.stringify(error)\r\n this.setState({errorMessage:stringError});;\r\n }); \r\n }\r\n\r\n returnToList = () => {\r\n if (this.props.onReturn!=undefined) {\r\n this.props.onReturn()\r\n }\r\n }\r\n\r\n render() {\r\n\r\n if(this.state.errorMessage!='')\r\n {\r\n return (\r\n \r\n \r\n \r\n

{this.state.errorMessage}

\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n )\r\n }\r\n \r\n return (\r\n \r\n \r\n \r\n

Sei sicuro di voler cancellare questo record?

\r\n \r\n
\r\n \r\n \r\n  \r\n \r\n \r\n \r\n \r\n

Record Id: { this.state.objToBeDeleted.Id }

\r\n \r\n
\r\n \r\n \r\n

{this.state.objToBeDeleted.Description}

\r\n \r\n
\r\n  \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n )\r\n }\r\n}\r\n","import React, { Component, Fragment } from 'react';\r\nimport { Document, Page, pdfjs } from 'react-pdf';\r\nimport { Button } from 'reactstrap';\r\nimport {themeSaveButton} from '../Utils/EsaedroTheme';\r\n\r\n\r\ninterface IEsaedroPDFProps {\r\n file: string\r\n filename: string\r\n }\r\nexport default class EsaedroPDF extends Component {\r\n\r\n\r\n componentDidMount() {\r\n pdfjs.GlobalWorkerOptions.workerSrc = `https://cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`;\r\n }\r\n\r\n /*onDocumentLoadSuccess = ( numPages: any ) => {\r\n this.setState({ numPages });\r\n }*/\r\n\r\n render() {\r\n const { file, filename } = this.props;\r\n\r\n return ( \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n // Alcune opzioni da tenere buone\r\n /*render() {\r\n const { file, numPages } = this.state;\r\n\r\n return (\r\n
\r\n
\r\n

react-pdf sample page

\r\n
\r\n
\r\n
\r\n \r\n {\r\n Array.from(\r\n new Array(numPages),\r\n (el, index) => (\r\n \r\n ),\r\n )\r\n }\r\n \r\n
\r\n
\r\n
\r\n );\r\n }*/\r\n}","import React, { Component, Fragment } from 'react';\r\nimport { Image } from 'react-bootstrap';\r\nimport { Button, Col, Container, Row } from 'reactstrap';\r\nimport LoggedContext from '../BusinessObjects/LoggedContext';\r\nimport EsaedroResourceAttachment from '../Models/EsaedroResourceAttachment';\r\nimport { themeBackButton, themeCol3, themeCol9, themeFormInput, themeGroup } from '../Utils/EsaedroTheme';\r\n\r\ninterface IEsaedroAttachmentProps {\r\n attachment: string,\r\n attachmentFieldName: string,\r\n name: string,\r\n canLoad: boolean,\r\n canDelete: boolean,\r\n resourceAttachment?: EsaedroResourceAttachment,\r\n onChange?(event: any) : void\r\n onDelete?(resourceAttachment: EsaedroResourceAttachment) : void\r\n}\r\n\r\nexport default class EsaedroAttachment extends Component {\r\n\r\n static contextType = LoggedContext\r\n context!: React.ContextType\r\n \r\n constructor(props: IEsaedroAttachmentProps){\r\n super(props);\r\n\r\n this.state = {\r\n uploading: false\r\n };\r\n }\r\n\r\n removeImage = () => {\r\n // Controllo se è impostato l'handler per la delete e se il componente è associato ad un ResourceAttachment \r\n if (this.props.onDelete && this.props.resourceAttachment) {\r\n this.props.onDelete(this.props.resourceAttachment)\r\n }\r\n else {\r\n // Altrimenti ritorna un evento custom alla callback onChange (Utilizzato dalla ObjectEdit)\r\n let customEvent = new CustomEvent(\"DeleteFile\", {detail: this.props.name})\r\n if (this.props.onChange) this.props.onChange(customEvent)\r\n }\r\n } \r\n \r\n render() {\r\n const {attachment, attachmentFieldName, name} = this.props\r\n\r\n var description = this.props.resourceAttachment? \r\n this.props.resourceAttachment.Description \r\n : attachmentFieldName\r\n\r\n var deleteButton = this.props.canDelete? \r\n : undefined\r\n\r\n var newFileButton = this.props.canLoad? \r\n : Non è possibile aggiungere allegati per questa risorsa\r\n\r\n if (attachment != undefined && attachment != \"\")\r\n return (\r\n // TODO Controllare il tipo di attachment prima di renderizzare Images\r\n \r\n \r\n \r\n \r\n \r\n {description}\r\n {deleteButton}\r\n \r\n \r\n )\r\n\r\n else \r\n return newFileButton\r\n }\r\n}","import React, { Component, Fragment } from 'react';\r\nimport { Button, Container, Row, UncontrolledAlert } from 'reactstrap';\r\nimport cubeApiClient from '../BusinessObjects/cubeApiService';\r\nimport LoggedContext from '../BusinessObjects/LoggedContext';\r\nimport EsaedroResourceAttachment from '../Models/EsaedroResourceAttachment';\r\nimport EsaedroAttachment from './EsaedroAttachment';\r\nimport EsaedroObjectDelete from './EsaedroObjectDelete';\r\n\r\n/************** COMPONENTE CHE MOSTRA GLI ALLEGATI DI UNA RISORSA *****************/\r\n/************** Da qui è solamente possibile visualizzarli ed eliminarli **********/\r\n\r\ninterface IEsaedroAttachmentsControllerProps {\r\n Resource_ID: number,\r\n Item_ID: number\r\n}\r\n\r\ninterface IEsaedroAttachmentsControllerState {\r\n loading: boolean,\r\n successMessage: string,\r\n errorMessage: string,\r\n attachments: EsaedroResourceAttachment[],\r\n attachmentToDelete: any\r\n}\r\n\r\nexport default class EsaedroAttachmentsController extends Component {\r\n\r\n static contextType = LoggedContext\r\n context!: React.ContextType\r\n \r\n constructor(props: IEsaedroAttachmentsControllerProps){\r\n super(props);\r\n\r\n this.state = {\r\n loading: false,\r\n successMessage: \"\",\r\n errorMessage: \"\",\r\n attachments: [],\r\n attachmentToDelete: null\r\n };\r\n}\r\n\r\n componentDidMount() {\r\n this.getObjectAttachments()\r\n }\r\n\r\n getObjectAttachments = () => {\r\n // Faccio una chiamata ai webservice con le immagini legate all'oggetto\r\n this.setState({loading: true})\r\n \r\n const service = new cubeApiClient();\r\n const t = this.context.tokenAPI;\r\n const requrl = 'api/sys/ResourcesAttachments?RecordSelection=' + \"Resource_ID=\" + this.props.Resource_ID + \"and Item_ID=\" + this.props.Item_ID\r\n\r\n service\r\n .getItems(requrl,t)\r\n .then((data: any) => {\r\n // Aggiorno i miei attachments\r\n if (data)\r\n {\r\n this.setState({\r\n attachments:data,\r\n loading:false\r\n })\r\n }\r\n else {\r\n this.setState({\r\n errorMessage:\"Errore nello scaricare gli allegati\",\r\n loading: false\r\n })\r\n }\r\n },\r\n (error: any) => {\r\n this.setState({ \r\n attachments:[],\r\n errorMessage: error,\r\n loading: false\r\n });\r\n });\r\n }\r\n\r\n onDeleteButtonPressed = (attachmentToRemove: EsaedroResourceAttachment) => {\r\n this.setState({attachmentToDelete: attachmentToRemove})\r\n }\r\n\r\n onAttachmentRemoved = (returnMessage: string) => {\r\n // Mostro il messaggio di successo e rendo nullo l'attachment da rimuovere\r\n this.setState({successMessage: returnMessage, attachmentToDelete: null})\r\n // Dopodichè ricarico gli allegati\r\n this.getObjectAttachments()\r\n }\r\n \r\n render() {\r\n const { loading, attachments, attachmentToDelete } = this.state\r\n\r\n const successMessageAlert = (\r\n (this.state.successMessage != '')?\r\n \r\n {this.state.successMessage}\r\n \r\n : undefined\r\n )\r\n\r\n const errorMessageAlert = (\r\n (this.state.errorMessage != '')?\r\n \r\n {this.state.errorMessage}\r\n \r\n : undefined\r\n \r\n )\r\n\r\n const content = (\r\n loading? \r\n
Caricamento...
\r\n :attachmentToDelete?\r\n \r\n \r\n :(attachments.length > 0)?\r\n attachments.map((attachment: EsaedroResourceAttachment, i: number) => \r\n \r\n \r\n \r\n  \r\n \r\n )\r\n :Nessun allegato da visualizzare \r\n )\r\n \r\n return (\r\n \r\n {successMessageAlert}\r\n \r\n  \r\n \r\n {errorMessageAlert}\r\n \r\n  \r\n \r\n {content}\r\n \r\n )\r\n }\r\n}","class EsaedroResourceAttachment {\r\n \r\n public Resource_ID: number = 0;\r\n public Item_ID: number = 0;\r\n public Id: number = 0;\r\n public Description: string = \"\";\r\n public AttachmentType: string = \"image\";\r\n public Content: any\r\n\r\n constructor(resource_ID:number, item_ID:number, id: number, content: any, description?: string, attachmentType?: string) {\r\n this.Resource_ID=resource_ID\r\n this.Item_ID=item_ID\r\n this.Id=id\r\n this.Description=description?description:this.Resource_ID.toString()\r\n this.AttachmentType=attachmentType?attachmentType:\"image\"\r\n this.Content = content\r\n }\r\n}\r\n\r\nexport default EsaedroResourceAttachment;","import React, { Component, Fragment } from 'react';\r\nimport { Image } from 'react-bootstrap';\r\nimport { Button, Col, Container, Row, UncontrolledAlert } from 'reactstrap';\r\nimport cubeApiClient from '../BusinessObjects/cubeApiService';\r\nimport LoggedContext from '../BusinessObjects/LoggedContext';\r\nimport EsaedroResourceAttachment from '../Models/EsaedroResourceAttachment';\r\nimport { themeBackButton } from '../Utils/EsaedroTheme';\r\nimport EsaedroAttachment from './EsaedroAttachment';\r\n\r\n/************** COMPONENTE PER AGGIUNGERE ALLEGATI AD UNA RISORSA ********************************************************************/\r\n/************** Gestisce l'upload di uno o più allegati in memoria e infine li invia al CUBE, che li assegna ad una risorsa **********/\r\n\r\ninterface IEsaedroAttachmentLoaderProps {\r\n Resource_ID: number,\r\n Item_ID: number,\r\n onReturn?(ackMessage?: string): void\r\n}\r\n\r\ninterface IEsaedroAttachmentLoaderState {\r\n uploading: boolean,\r\n successMessage: string,\r\n errorMessage: string,\r\n attachments: EsaedroResourceAttachment[],\r\n}\r\n\r\nfunction Buttons (props: any) {\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default class EsaedroAttachmentLoader extends Component {\r\n\r\n static contextType = LoggedContext\r\n context!: React.ContextType\r\n attachmentsUrl: string = \"api/sys/ResourcesAttachments\"\r\n \r\n constructor(props: IEsaedroAttachmentLoaderProps){\r\n super(props);\r\n\r\n this.state = {\r\n uploading: false,\r\n successMessage: \"\",\r\n errorMessage: \"\",\r\n attachments: [],\r\n };\r\n }\r\n\r\n onChange = (event: any) => {\r\n\r\n this.setState({ uploading: true })\r\n\r\n const files = Array.from(event.target.files)\r\n\r\n // Creo degli oggetti di tipo EsaedroImagesController e li aggiungo all'array di allegati\r\n files.forEach((file: any ) => {\r\n this.readAndAdd(file)\r\n })\r\n\r\n this.setState({ \r\n uploading: false\r\n })\r\n \r\n }\r\n\r\n readAndAdd = (file: File) => {\r\n var newImages = this.state.attachments\r\n var reader = new FileReader()\r\n\r\n reader.onload = () => {\r\n let imgUrl = reader.result\r\n let newFile = new EsaedroResourceAttachment(this.props.Resource_ID, this.props.Item_ID, 0, imgUrl)\r\n newImages.push(newFile)\r\n this.setState({ \r\n attachments: newImages\r\n })\r\n }\r\n reader.readAsDataURL(file)\r\n }\r\n\r\n removeImage = (attachment: EsaedroResourceAttachment) => {\r\n let i = this.state.attachments.indexOf(attachment)\r\n // Rimuove l'elemento i-esimo dall'array\r\n let newImages = this.state.attachments\r\n newImages.splice(i,1)\r\n this.setState({\r\n attachments: newImages\r\n })\r\n }\r\n\r\n returnToEdit = (event: any) => {\r\n // Per tornare alla Edit senza inviare le immagini\r\n if (this.props.onReturn!=undefined) {\r\n this.props.onReturn()\r\n }\r\n }\r\n\r\n sendImages = (event: any) => {\r\n // Qui mando le Risorse raccolte al cube. Capire se posso mandarle tutte insieme\r\n // Chiama il servizio di update\r\n\r\n const service = new cubeApiClient();\r\n event.preventDefault();\r\n\r\n this.setState({uploading:true})\r\n\r\n service\r\n .updateObjects(this.state.attachments, this.attachmentsUrl, this.context.tokenAPI)\r\n .then(() => {\r\n this.setState({ \r\n // Gestire il successo\r\n successMessage:' Allegati caricati con successo!',\r\n uploading: false\r\n });\r\n //alert(\"sto per tornare alla lista!\")\r\n if (this.props.onReturn!=undefined) {\r\n let successMsg = \"Allegati caricati con successo!\"\r\n this.props.onReturn(successMsg)\r\n }\r\n },\r\n (error: any) => {\r\n let stringError = \"Errore nel caricamento:\"+JSON.stringify(error)\r\n this.setState({ \r\n errorMessage: stringError,\r\n uploading: false \r\n });\r\n });\r\n \r\n }\r\n \r\n render() {\r\n const { uploading, attachments } = this.state\r\n\r\n const successMessageAlert = (\r\n (this.state.successMessage != '')?\r\n \r\n {this.state.successMessage}\r\n \r\n : undefined\r\n )\r\n\r\n const errorMessageAlert = (\r\n (this.state.errorMessage != '')?\r\n \r\n {this.state.errorMessage}\r\n \r\n : undefined\r\n )\r\n\r\n const content = (\r\n uploading? \r\n
Caricamento...
\r\n :(attachments.length > 0)?\r\n attachments.map((attachment: EsaedroResourceAttachment, i: number) => \r\n \r\n \r\n \r\n  \r\n \r\n )\r\n :Nessun allegato da visualizzare \r\n )\r\n\r\n const contentButtons = \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n return (\r\n \r\n {successMessageAlert}\r\n \r\n  \r\n \r\n {errorMessageAlert}\r\n \r\n  \r\n \r\n {content}\r\n \r\n  \r\n \r\n {contentButtons}\r\n \r\n )\r\n\r\n /*const content = () => {\r\n switch(true) {\r\n case uploading:\r\n return
Uploading...
\r\n case attachments.length > 0:\r\n return (\r\n // TODO Controllare il tipo di attachment prima di renderizzare Images\r\n \r\n \r\n \r\n \r\n \r\n )\r\n default:\r\n return \r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n {content()}\r\n
\r\n
\r\n )*/\r\n }\r\n}","import React, { Component, Fragment } from 'react';\r\nimport { Button, Col, Row } from 'reactstrap';\r\nimport LoggedContext from '../BusinessObjects/LoggedContext';\r\nimport { themeBackButton, themeCol3, themeCol9, themeFormInput, themeGroup, themeSaveButton } from '../Utils/EsaedroTheme';\r\n\r\ninterface IEsaedroJSONComponentProps {\r\n component: any\r\n fieldName: string\r\n canEdit: boolean\r\n suggestedKeys?: string\r\n onChange?(event: any) : void\r\n}\r\n\r\ninterface IEsaedroJSONComponentState {\r\n component: any\r\n componentFields: string[]\r\n newKeyLabel: string\r\n newKeyValue: string\r\n addingField: boolean\r\n}\r\n\r\nexport default class EsaedroJSONComponent extends Component {\r\n\r\n static contextType = LoggedContext\r\n context!: React.ContextType\r\n \r\n constructor(props: IEsaedroJSONComponentProps){\r\n super(props);\r\n\r\n this.state = {\r\n component: {},\r\n componentFields: [],\r\n newKeyLabel: \"\",\r\n newKeyValue: \"\",\r\n addingField: false\r\n };\r\n }\r\n\r\n componentDidMount(){\r\n const {component} = this.props\r\n\r\n // Già costruendo il component popolo le sue chiavi, ma controllo che sia effettivamente un JSON\r\n let isJson = this.isJSON(component)\r\n let jsonObject = isJson? JSON.parse(component) : component\r\n let keys = isJson? \r\n Object.keys(jsonObject)\r\n : []\r\n\r\n // Controllo se ha già tutte le chiavi che dovrebbe avere, altrimenti le aggiungo\r\n if (this.props.suggestedKeys) {\r\n // Se non ha chiavi allora aggiungo le chiavi proposte\r\n if (keys.length == 0) {\r\n keys = this.props.suggestedKeys.split(\"|\")\r\n }\r\n }\r\n\r\n this.setState({\r\n component: jsonObject,\r\n componentFields: keys,\r\n newKeyLabel: \"\",\r\n newKeyValue: \"\",\r\n addingField: false\r\n })\r\n }\r\n\r\n // Controlla che l'oggetto sia effettivamente un JSON\r\n isJSON = (object: any) : boolean => {\r\n try {\r\n JSON.parse(object)\r\n }\r\n catch (e)\r\n {\r\n return false\r\n }\r\n return true\r\n }\r\n\r\n addKey = () => {\r\n // Aggiunge una chiave all'oggetto\r\n const {component, componentFields, newKeyLabel, newKeyValue} = this.state\r\n let newKeys = componentFields\r\n let newComp = component\r\n newKeys.push(newKeyLabel)\r\n newComp[newKeyLabel] = newKeyValue\r\n\r\n this.setState({\r\n newKeyLabel: \"\",\r\n newKeyValue: \"\",\r\n addingField: false\r\n })\r\n\r\n if (this.props.onChange) {\r\n let customEvent = new CustomEvent(\"JSONObjectChanged\", {detail: {\"name\" : this.props.fieldName, \"value\" : JSON.stringify(newComp)}})\r\n this.props.onChange(customEvent)\r\n }\r\n }\r\n\r\n toggleAddField = () => {\r\n this.setState({addingField: !this.state.addingField})\r\n }\r\n\r\n handleChange = (event: any) => {\r\n const target = event.target\r\n const {component, componentFields} = this.state\r\n\r\n if (target.name == \"NewKey\") {\r\n this.setState({newKeyLabel: target.value})\r\n }\r\n \r\n else if (target.name == \"NewKeyValue\") {\r\n this.setState({newKeyValue: target.value})\r\n }\r\n\r\n else {\r\n let value = target.value\r\n var key = target.name;\r\n\r\n if (componentFields.length > 0) {\r\n let tempObj = component;\r\n tempObj[key] = value;\r\n\r\n if (this.props.onChange) {\r\n let customEvent = new CustomEvent(\"JSONObjectChanged\", {detail: {\"name\" : this.props.fieldName, \"value\" : JSON.stringify(tempObj)}})\r\n this.props.onChange(customEvent)\r\n }\r\n }\r\n else {\r\n let tempObj = component;\r\n tempObj = value; \r\n \r\n if (this.props.onChange) {\r\n let customEvent = new CustomEvent(\"JSONObjectChanged\", {detail: {\"name\" : this.props.fieldName, \"value\" : tempObj}})\r\n this.props.onChange(customEvent)\r\n }\r\n }\r\n }\r\n }\r\n\r\n handleRecursiveChange = (event: any) => {\r\n\r\n const {component} = this.state\r\n\r\n // Elabora il campo JSON, lo setta all'oggetto padre e poi manda il padre a chi ha renderizzato il component\r\n if (event.type == \"JSONObjectChanged\") {\r\n let value = event.detail[\"value\"]\r\n var name = event.detail[\"name\"]\r\n let tempObj = component;\r\n tempObj[name] = value;\r\n\r\n if (this.props.onChange) {\r\n let customEvent = new CustomEvent(\"JSONObjectChanged\", {detail: {\"name\" : this.props.fieldName, \"value\" : JSON.stringify(tempObj)}})\r\n this.props.onChange(customEvent)\r\n }\r\n }\r\n }\r\n\r\n renderJSONField = (fieldKey: string) : any => {\r\n\r\n const {component} = this.state\r\n return (\r\n this.isJSON(component[fieldKey]) ? \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n : \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n \r\n render() {\r\n const {component, componentFields} = this.state\r\n\r\n const content = componentFields.length > 0 ? \r\n componentFields.map( (key: string) => {\r\n return this.renderJSONField(key)\r\n })\r\n : \r\n \r\n \r\n \r\n \r\n\r\n const addFieldForm = (componentFields.length > 0 && this.props.canEdit) ?\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n : undefined\r\n\r\n const addFieldButton = this.state.addingField ? \r\n undefined\r\n : \r\n \r\n \r\n\r\n\r\n return (\r\n this.state.addingField ? {content}{addFieldForm} \r\n : {content}{addFieldButton}\r\n )\r\n }\r\n}","import React, { Component, Fragment } from 'react'\r\nimport { Container, Row, Col, Alert, Button } from 'reactstrap';\r\nimport LoggedContext from '../BusinessObjects/LoggedContext'\r\nimport cubeApiClient from '../BusinessObjects/cubeApiService';\r\nimport ResourceField from '../Models/ResourceField';\r\n\r\nimport EsaedroLookup from './EsaedroLookup';\r\nimport EsaedroResourceFilter from '../Models/EsaedroResourceFilter';\r\nimport { themeCol3, themeCol4, themeCol9, themeGroup, themeSpinner, themeFormInput, themeBackButton, themeUpdateButton, themeCol6, themeCol6Right, themeSaveButton } from '../Utils/EsaedroTheme';\r\nimport { StickyContainer, Sticky } from 'react-sticky';\r\n\r\nimport EsaedroPDF from './EsaedroPDF'\r\nimport EsaedroResourceAttachment from '../Models/EsaedroResourceAttachment';\r\nimport EsaedroAttachmentsController from './EsaedroAttachmentsController';\r\nimport { threadId } from 'worker_threads';\r\nimport EsaedroAttachmentLoader from './EsaedroAttachmentLoader';\r\nimport EsaedroAttachment from './EsaedroAttachment';\r\nimport EsaedroJSONComponent from './EsaedroJSONComponent';\r\n\r\nexport interface EsaedroObjectEditProps {\r\n myObjType: string\r\n myObjUrl: string\r\n myObj?: any\r\n myObjResourceID?: number,\r\n isNew: boolean\r\n filters: string\r\n fixedFields?: EsaedroResourceFilter[]\r\n onReturn?(ackMessage?: string): void\r\n onCustomHandleChange?( objChanged: any, fieldName: string): void\r\n onCustomRenderField?( editedObject: any, field: ResourceField): void\r\n}\r\n\r\ninterface EsaedroObjectEditState {\r\n myObject: any; \r\n myObjectFields: ResourceField[];\r\n myObjectFilters: EsaedroResourceFilter[];\r\n hasFields: boolean;\r\n hasGroups: boolean;\r\n myObjectGroups: any[];\r\n errorMessage: string;\r\n loading: boolean;\r\n updating: boolean;\r\n addAttachments: boolean;\r\n showAttachments: boolean;\r\n}\r\n\r\nexport default class EsaedroObjectEdit extends Component {\r\n\r\n static contextType = LoggedContext\r\n context!: React.ContextType\r\n\r\n disableUpdateBtn: boolean = false\r\n \r\n // Mi creo le mappe per gestire le lookup come variabili fuori dallo stato\r\n // Nomi dei campi delle lookup che hanno campi da controllare\r\n lookupFieldsWithFieldsToCheck : string[] = []\r\n // Campi da controllare per ogni lookup (nome campo in chiave)\r\n lookupFieldsToCheck: Map = new Map()\r\n // Key incrementali delle lookup (nome campo in chiave) - Se incrementate triggerano il render sulla relativa lookup\r\n lookupKeys: Map = new Map()\r\n\r\n constructor(props: any) {\r\n super(props);\r\n\r\n this.state = { \r\n myObject: {},\r\n myObjectFields: [],\r\n myObjectFilters: [],\r\n hasFields: false,\r\n hasGroups: false,\r\n myObjectGroups: [],\r\n errorMessage:'',\r\n loading: false,\r\n updating: false,\r\n addAttachments: false,\r\n showAttachments: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n\r\n this.setState({loading: true})\r\n\r\n if (this.props.filters)\r\n {\r\n let filtersList = this.props.filters.split('&')\r\n\r\n filtersList.map(element => {\r\n var v =element.split('=');\r\n this.state.myObjectFilters.push(new EsaedroResourceFilter(v[0],v[1],\"=\"));\r\n });\r\n }\r\n\r\n if (!this.props.isNew && this.props.myObj!=undefined) this.setState({myObject: this.props.myObj})\r\n \r\n if(this.context.userProfile == undefined) \r\n {\r\n this.setState({errorMessage:'utente non definito'});\r\n return;\r\n }\r\n\r\n if(this.context.userProfile.customer_ID == 0) \r\n {\r\n this.setState({errorMessage:'azienda non selezionata'});\r\n return;\r\n }\r\n\r\n const service = new cubeApiClient();\r\n \r\n const t = this.context.tokenAPI;\r\n\r\n // TODO fare funzione statica (in classe Utils?) che controlla se un oggetto è filtrabile dato un filtro o Array di filtri e poi filtrare eventualmente la richiesta\r\n\r\n // TODO check che se uno fa new e ci sono campi non visible non nullabili e senza default lui non potrà mai inserire il campo\r\n const requrl = this.props.isNew? 'api/sys/ResourcesFields?RecordSelection=' + encodeURIComponent(\"ResourceName='\" + this.props.myObjType + \"'\") : 'api/sys/ResourcesFields?RecordSelection=' + encodeURIComponent(\"ResourceName='\" + this.props.myObjType + \"' and Is_Visible=1\")\r\n \r\n //const groupsURL = 'api/sys/ResourcesFieldsGroups?RecordSelection=' + encodeURIComponent(\"ResourceName='\" + this.props.myObjType + \"'\") \r\n\r\n service\r\n .getItems(requrl,t)\r\n .then((data: any) => {\r\n // Chiedo di nuovo i campi\r\n if (data)\r\n {\r\n // Capire se mettere il resto qui dentro e se fare delle richieste parallele\r\n /*service\r\n .getItems(groupsURL,t)\r\n .then((groupsData: any) => {\r\n this.setState({\r\n myObjectGroups:groupsData,\r\n hasGroups: true\r\n })\r\n },\r\n (error: any) => {\r\n this.setState({ \r\n myObjectFields:[],\r\n errorMessage: error,\r\n loading: false\r\n });\r\n });*/\r\n\r\n // Devo fare due volte l'aggiornamento dello stato, perchè l'EmptyObject ha bisogno dei field aggiornati\r\n if (this.props.isNew) {\r\n\r\n // Creo le chiavi per le varie lookup\r\n data.forEach ((field :ResourceField) => {\r\n if (field.LookupName|| field.LookupValues) this.lookupKeys.set(field.FieldName, 0)\r\n })\r\n // Aggiorno lo stato due volte\r\n this.setState({ \r\n hasFields: true,\r\n myObjectFields: data\r\n })\r\n let newObject = this.createEmptyObject()\r\n this.setState({ \r\n myObject: newObject,\r\n loading: false\r\n })\r\n }\r\n else {\r\n // Creo le chiavi per le varie lookup\r\n data.forEach ((field :ResourceField) => {\r\n if (field.LookupName|| field.LookupValues) this.lookupKeys.set(field.FieldName, 0)\r\n })\r\n // Aggiorno lo stato\r\n this.setState({ \r\n hasFields: true,\r\n myObjectFields: data,\r\n loading: false\r\n }) \r\n }\r\n }\r\n else {\r\n this.setState({\r\n errorMessage:\"Errore nello scaricare i campi\",\r\n loading: false\r\n })\r\n }\r\n },\r\n (error: any) => {\r\n this.setState({ \r\n myObjectFields:[],\r\n errorMessage: error,\r\n loading: false\r\n });\r\n });\r\n }\r\n\r\n // Chiama il servizio di update\r\n updateObject = (event: any) => {\r\n\r\n const service = new cubeApiClient();\r\n event.preventDefault();\r\n\r\n const objectToEdit = this.state.myObject;\r\n\r\n this.setState({updating:true})\r\n\r\n service\r\n .updateObject(objectToEdit, this.props.myObjUrl, this.context.tokenAPI)\r\n .then(() => {\r\n this.setState({ \r\n // Gestire il successo?\r\n errorMessage:'',\r\n updating: false\r\n });\r\n //alert(\"sto per tornare alla lista!\")\r\n if (this.props.onReturn!=undefined) {\r\n let successMsg = \"Operazione avvenuta con successo!\"\r\n this.props.onReturn(successMsg)\r\n }\r\n },\r\n (error: any) => {\r\n // Rimane qui. Problema col timestamp?\r\n let stringError = \"Errore nel salvataggio:\"+JSON.stringify(error)\r\n //alert(stringError)\r\n this.setState({ \r\n errorMessage: stringError,\r\n updating: false \r\n });\r\n });\r\n }\r\n\r\n // Gestisce i cambiamenti in input e li salva nello stato dell'object, innescando il rendering\r\n handleChange = (event: any) => {\r\n\r\n // Controllo come prima cosa che non si tratti di un customEvent\r\n if (event.type == \"DeleteFile\") {\r\n \r\n value = undefined\r\n var name = event.detail;\r\n\r\n let tempObj = this.state.myObject;\r\n tempObj[name] = value;\r\n\r\n // Inserisco qui l'eventuale callback\r\n if (this.props.onCustomHandleChange) {\r\n this.props.onCustomHandleChange(tempObj, name)\r\n }\r\n this.setState({\r\n myObject: tempObj\r\n });\r\n }\r\n\r\n else if (event.type == \"JSONObjectChanged\") {\r\n \r\n value = event.detail[\"value\"]\r\n var name = event.detail[\"name\"]\r\n let tempObj = this.state.myObject;\r\n tempObj[name] = value;\r\n\r\n // Inserisco qui l'eventuale callback\r\n if (this.props.onCustomHandleChange) {\r\n this.props.onCustomHandleChange(tempObj, name)\r\n }\r\n this.setState({\r\n myObject: tempObj\r\n });\r\n }\r\n\r\n else {\r\n const target = event.target;\r\n \r\n var value = undefined\r\n \r\n \r\n // Se è un file mi comporto diversamente\r\n if (target.type == \"file\") {\r\n var reader = new FileReader()\r\n reader.onload = () => {\r\n let imgUrl = reader.result\r\n value = imgUrl\r\n var name = target.name;\r\n\r\n let tempObj = this.state.myObject;\r\n tempObj[name] = value;\r\n\r\n // Inserisco qui l'eventuale callback\r\n if (this.props.onCustomHandleChange) {\r\n this.props.onCustomHandleChange(tempObj, name)\r\n }\r\n this.setState({\r\n myObject: tempObj\r\n });\r\n }\r\n reader.readAsDataURL(event.target.files[0])\r\n }\r\n\r\n else {\r\n\r\n if (target.type == 'checkbox') {\r\n value = target.checked\r\n }\r\n\r\n else value = target.value\r\n\r\n var name = target.name;\r\n \r\n let tempObj = this.state.myObject;\r\n tempObj[name] = value;\r\n\r\n // Inserisco qui l'eventuale callback\r\n if (this.props.onCustomHandleChange) {\r\n this.props.onCustomHandleChange(tempObj, name)\r\n }\r\n\r\n // Se è una lookup faccio un controllo sui campi da controllare. Se sono cambiati cambio la chiave a quella lookup, incrementandola nella relativa mappa\r\n if (target.type === 'select-one') {\r\n this.lookupFieldsWithFieldsToCheck.forEach ((field: string) => {\r\n var fieldsToCheck = this.lookupFieldsToCheck.get(field)\r\n if (fieldsToCheck) {\r\n for(var i=0;i< fieldsToCheck.length;i++)\r\n {\r\n if (fieldsToCheck[i]==name) {\r\n let newKey = this.lookupKeys.get(field)\r\n if (newKey == undefined) newKey = 0\r\n this.lookupKeys.set(field, newKey+1)\r\n }\r\n }\r\n }\r\n })\r\n }\r\n\r\n this.setState({\r\n myObject: tempObj\r\n });\r\n }\r\n }\r\n }\r\n\r\n // Esce dall'edit e torna alla lista di oggetti (ObjectList)\r\n returnToList = () => {\r\n if (this.props.onReturn!=undefined) {\r\n this.props.onReturn()\r\n }\r\n }\r\n\r\n // Gestise il ritorno dal componente per inserire attachments\r\n // TODO modificare\r\n onReturnFromAttachmentsController = (returnMessage: string) => {\r\n //TODO capire se stampare il messaggio da qualche parte\r\n // Svuoto gli attachments in modo che se li riapro me li ricarica\r\n //this.setState({myObjectAttachments:[]})\r\n this.toggleAddAttachments()\r\n }\r\n\r\n // Mostra il component per aggiungere allegati\r\n toggleAddAttachments = () => {\r\n this.setState({addAttachments: !this.state.addAttachments})\r\n }\r\n\r\n // Mostra il component per aggiungere allegati\r\n toggleShowAttachments = () => {\r\n this.setState({showAttachments: !this.state.showAttachments})\r\n }\r\n\r\n lookupLoadedFieldsToCheck = (fieldName: string, fieldsToCheck: any[]) => {\r\n // Setto i fields to check nella mappa\r\n if (!this.lookupFieldsWithFieldsToCheck.includes(fieldName)) this.lookupFieldsWithFieldsToCheck.push(fieldName)\r\n this.lookupFieldsToCheck.set(fieldName, fieldsToCheck)\r\n }\r\n\r\n render() {\r\n\r\n var errorMessage = (this.state.errorMessage>'')? \r\n ({this.state.errorMessage})\r\n : undefined\r\n\r\n if (this.state.loading)\r\n {\r\n return (\r\n \r\n \r\n Caricamento... \r\n \r\n \r\n )\r\n }\r\n\r\n if (this.state.updating)\r\n {\r\n return (\r\n \r\n \r\n Aggiornamento in corso... \r\n \r\n \r\n )\r\n }\r\n\r\n else if (this.state.addAttachments) {\r\n return (\r\n \r\n \r\n )\r\n }\r\n\r\n else if (this.state.hasFields)\r\n {\r\n this.disableUpdateBtn = false\r\n\r\n // Bool per passaggio veloce da Sticky a no. Potrebbe essere in un parametro o essere tolto in futuro\r\n let isSticky = true\r\n\r\n let addAttachmentsToggleButton = this.state.addAttachments ? \r\n \r\n : \r\n\r\n let showAttachmentsToggleButton = this.state.myObject.AttachmentCount > 0? \r\n this.state.showAttachments ? \r\n \r\n : \r\n : undefined\r\n\r\n\r\n // Mostra gli allegati della risorsa\r\n let attachments = this.state.showAttachments ?\r\n \r\n \r\n : undefined\r\n\r\n let updateButton = this.state.myObject.disableEdit ?\r\n undefined\r\n : \r\n\r\n // Creo la barra di bottoni Sticky, ovvero che segue lo scroll della pagina\r\n let sticky = \r\n \r\n {({ style }) => (\r\n
\r\n \r\n \r\n {updateButton}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n )}\r\n
\r\n\r\n let fieldsToRender = this.state.myObjectFields.map((field: ResourceField) => {\r\n return this.renderField(field);\r\n })\r\n\r\n let attachmentContent = \r\n {showAttachmentsToggleButton}\r\n \r\n  \r\n \r\n \r\n {attachments}\r\n \r\n \r\n  \r\n \r\n {addAttachmentsToggleButton}\r\n \r\n\r\n if (!isSticky) return ( \r\n
\r\n \r\n \r\n \r\n  \r\n \r\n \r\n \r\n \r\n {updateButton}\r\n \r\n \r\n \r\n \r\n \r\n \r\n  \r\n \r\n {errorMessage}\r\n {fieldsToRender}\r\n {attachmentContent}\r\n \r\n
\r\n )\r\n else return (\r\n \r\n \r\n \r\n  \r\n \r\n \r\n \r\n {sticky}\r\n \r\n  \r\n \r\n
\r\n {errorMessage}\r\n {fieldsToRender}\r\n {attachmentContent}\r\n
\r\n
\r\n
\r\n )\r\n }\r\n // Serve davvero?\r\n else return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n  \r\n \r\n \r\n \r\n Caricamento...\r\n \r\n \r\n )\r\n \r\n }\r\n\r\n // Funzione che si occupa di renderizzare ogni singolo campo in base al tipo e ai suoi parametri\r\n renderField = (field: ResourceField) => {\r\n\r\n // Qui la lista è filtrata a monte in caso di update, va gestita in caso di insert - TODO capire come gestirla\r\n if (this.props.isNew && !field.Is_Visible && !field.Is_Key && !field.Is_Nullable) return\r\n\r\n // Questi campi non devono mai essere visibili\r\n if (field.FieldName == 'dat_obsoleto' || \r\n field.FieldName == 'cod_utente_cre' || \r\n field.FieldName == 'dat_utente_cre' || \r\n field.FieldName == 'cod_utente_mod' || \r\n field.FieldName == 'dat_utente_mod') return\r\n\r\n if (this.props.isNew && !field.Is_Visible && (field.Is_Key || field.Is_Nullable)) {\r\n field.Field_Label = \"ERRORE - Campo chiave o non nullabile\"\r\n field.Readonly = true\r\n }\r\n\r\n // Se è di tipo Object List non devo mostrarlo\r\n if (field.Reffered_Resource_Type == 1 || field.Is_Decode || field.Is_Identity) return\r\n\r\n // Questi campi vanno sempre ignorati e mai visualizzati\r\n if (field.FieldName == \"ts_update\" || field.FieldName == \"flg_isdeleted\" || field.FieldName == \"dat_ultvar\") return\r\n \r\n // Qui scorro i fixed fields per trovare l'elenco dei campi non editabili\r\n if (this.props.fixedFields) {\r\n let i : number\r\n for (i=0; i\r\n \r\n \r\n \r\n \r\n \r\n \r\n {validationError}\r\n \r\n \r\n )\r\n }\r\n\r\n // Controllo se è un pdf e nel caso gli assegno il Field_Type 400\r\n if (field.Field_Type == 200 && field.ContentType == \"pdf\") field.Field_Type = 400 \r\n \r\n // Checkbox\r\n switch (field.Field_Type) {\r\n case 1:\r\n case 2:\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {validationError}\r\n \r\n \r\n )\r\n\r\n case 4:\r\n case 15:\r\n case 33:\r\n // Datetime\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {validationError}\r\n \r\n \r\n )\r\n case 31:\r\n // Date - Controllare MOMENT\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {validationError}\r\n \r\n \r\n )\r\n case 32:\r\n // Time - Controllare MOMENT\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {validationError}\r\n \r\n \r\n )\r\n\r\n case 400:\r\n // PDF - Assegnato a monte\r\n // Creo il component per il PDF\r\n //return \r\n return ( \r\n \r\n \r\n \r\n \r\n \r\n \r\n {validationError}\r\n \r\n \r\n )\r\n\r\n case 201:\r\n // Allegato\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {validationError}\r\n \r\n \r\n )\r\n\r\n case 100:\r\n // JSON Generico\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {validationError}\r\n \r\n \r\n )\r\n\r\n case 98:\r\n // Array di dati\r\n /*if (field.FieldName == \"ResourcesViewsFilters\")\r\n {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {validationError}\r\n \r\n \r\n )\r\n }\r\n else if (field.FieldName == \"ResourcesViewsFilters\")\r\n {\r\n\r\n }\r\n else if (field.FieldName == \"ResourcesViewsFilters\")\r\n {}*/\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {validationError}\r\n \r\n \r\n )\r\n \r\n default:\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {validationError}\r\n \r\n \r\n )\r\n }\r\n }\r\n\r\n // Valida i campi e genera i messaggi da mostrare in tempo reale sotto al campo stesso\r\n validateField = (field: ResourceField) => {\r\n // TODO Lookup\r\n // Ritorna null se il campo è valido -> governa il tasto update\r\n // Come gestire la stringa vuota???\r\n var valueToCheck = this.state.myObject[field.FieldName]\r\n \r\n if (field.Is_Key && valueToCheck!==0 && valueToCheck!==false && valueToCheck===undefined) return (\r\n \r\n Questo campo è chiave e dunque obbligatorio\r\n \r\n ) \r\n if (!field.Is_Nullable && valueToCheck!==false && valueToCheck!==0 && valueToCheck===undefined) return (\r\n \r\n Questo campo non può essere nullo\r\n \r\n )\r\n\r\n if (field.Required && valueToCheck!==false && valueToCheck!==0 && (valueToCheck===undefined || valueToCheck=='')) return (\r\n \r\n Questo campo è obbligatorio\r\n \r\n )\r\n\r\n if (valueToCheck) {\r\n // Controllo la lunghezza\r\n if (field.Field_Size > 0 && valueToCheck.length > field.Field_Size) return (\r\n \r\n Questo campo supera la lunghezza massima consentita\r\n \r\n )\r\n //Se è un numero controllo che ci siano solo cifre\r\n if ((field.Field_Type == 0 || field.Field_Type == 5 || field.Field_Type == 6 || field.Field_Type == 8 || field.Field_Type == 13 ) && isNaN(valueToCheck)) return (\r\n \r\n Questo campo deve essere numerico\r\n \r\n )\r\n }\r\n \r\n return null\r\n }\r\n\r\n // In caso di New, crea un oggetto nuovo secondo la lista di proprietà (fields) ricevuta\r\n createEmptyObject = (): any => {\r\n\r\n // customer ID \r\n var objToRet: any = {}\r\n if (this.state.hasFields)\r\n {\r\n\r\n objToRet.customer_ID = this.context.userProfile.customer_ID\r\n\r\n this.state.myObjectFields.map((field: ResourceField) => {\r\n \r\n switch (field.Field_Type) {\r\n case 1:\r\n case 2:\r\n objToRet[field.FieldName] = field.DefaultValue\r\n ?field.DefaultValue==\"1\"\r\n ?true\r\n :field.DefaultValue==\"0\"\r\n ?false\r\n :field.DefaultValue\r\n :false\r\n break\r\n \r\n default:\r\n objToRet[field.FieldName] = field.DefaultValue?field.DefaultValue:undefined\r\n }\r\n\r\n // Qui scorro i fixed fields per trovare l'elenco dei campi fixed e settarli\r\n if (this.props.fixedFields) {\r\n let i : number\r\n for (i=0; i