{"version":3,"sources":["../node_modules/@arcgis/core/core/workers lazy groupOptions: {} namespace object","AppContext.js","ApplicationHeader.js","QueryFeatures.js","MainMap.js","FilterDialog.js","ReactTable.js","MainTable.js","Notify.js","UpdateFeatureAttr.js","DeleteRecord.js","AddPlanRelated.js","UpdateDetailRecords.js","ModalDialog.js","MessageBox.js","EditPlanGegevens.js","EditDetailEigendom.js","GetDetailRecords.js","EditDetailGegevens.js","EditMap.js","Edit.js","MainTableAppBar.js","GetPlan.js","AddPlanDialog.js","Auth.js","SearchWebmap.js","DeletePlan.js","LayerRefresh.js","App.js","reportWebVitals.js","index.js"],"names":["webpackEmptyAsyncContext","req","Promise","resolve","then","e","Error","code","keys","module","exports","id","AppContext","createContext","AppContextProvider","children","useState","ctxSelectedPlan","ctxSetSelectedPlan","ctxFeaturelayerUrl","ctxSetFeaturelayerUrl","ctxFeaturelayer","ctxSetFeaturelayer","ctxDetailTableUrl","ctxSetDetailTableUrl","ctxPlannen","ctxSetPlannen","ctxPlannenFields","ctxSetPlannenFields","ctxCredentials","ctxSetCredentials","ctxDetailRecordsValid","ctxSetDetailRecordsValid","ctxWebMapId","ctxSetWebMapId","ctxUserSession","ctxSetUserSession","ctxGemeentenaam","ctxSetGemeentenaam","ctxPlaatsnamen","ctxSetPlaatsnamen","ctxGemeenteExtent","ctxSetGemeenteExtent","defaultContext","ctxTableFilter","ctxSetTableFilter","Provider","value","useStyles","makeStyles","theme","menuButton","marginRight","spacing","title","flexGrow","ApplicationHeader","props","classes","useContext","useEffect","AppBar","position","style","backgroundColor","window","Color","Toolbar","IconButton","edge","className","color","aria-label","onClick","buttonexitclicked","visibility","viewmode","cursor","width","src","alt","Typography","variant","undefined","userId","Button","buttonlogoutclicked","disabled","open","HandleidingUrl","url","usersession","where","start","console","log","queryFeatures","resultOffset","authentication","MainMap","mapRef","useRef","mapview","setMapView","mapviewRef","lyrRef","OphalenWoonplaatsenBijGemeente","layer","gemeente","queryFeaturesUrl","result","plaatsnamen","index","features","length","cv","attributes","woonplaats","plaatsnaam","push","catch","PortalUrl","includes","esriConfig","portalUrl","map","WebMap","portalItem","view","MapView","container","current","center","zoom","when","layerList","LayerList","codeExpand","Expand","expandIconClass","expandTooltip","content","expanded","ui","add","handleReady","watch","newValue","oldValue","propertyName","target","i","lyr","layers","items","type","FeaturelayerTitle","parsedUrl","path","templates","prototype","alert","GemeentenTabelUrl","UitlezenGemeentenaam","queryExtent","response","goTo","extent","tables","DetailtableTitle","destroy","remove","handle","on","evt","query","createQuery","geometry","mapPoint","spatialRelationship","results","filter","Objectid","forEach","element","Globalid","tmp","clone","expand","height","ref","FilterDialog","filterFieldnames","filterComparison","filterwaardeInput","isfilterdialogopen","Dialog","onClose","closefilterdialog","aria-labelledby","aria-describedby","DialogTitle","DialogContent","DialogContentText","onChange","vergelijkingDOM","selectedoption","selectedOptions","planfield","JSON","parse","innerHTML","PlantableFields","item","fieldname","name","getField","field","stringify","alias","placeholder","DialogActions","saveFilter","autoFocus","ReactTable","selectedRow","setSelectedRow","columns","setAllFilters","filterTypes","React","useMemo","text","rows","filterValue","row","rowValue","values","String","toLowerCase","startsWith","DefaultColumnFilter","column","setFilter","border","bottom","verticalAlign","defaultColumn","Filter","data","hidden","useTable","initialState","hiddenColumns","useFilters","useSortBy","getTableProps","getTableBodyProps","headerGroups","prepareRow","onclickrow","parentNode","plan","toString","padding","overflow","headerGroup","getHeaderGroupProps","headers","getHeaderProps","getSortByToggleProps","background","fontWeight","whiteSpace","render","fontSize","canFilter","getRowProps","cells","cell","getCellProps","borderBottom","MainTable","kolommen","setKolommen","rijen","setRijen","hiddenkolommen","setHiddenkolommen","HaalAllePlannen","allFeatures","callback","num","fields","exceededTransferLimit","concat","OphalenPlannenGereed","VulRijen","tmprows","rij","kolom","dataValid","tmpcolumns","newcolumn","getAlias","d","date","Date","getDate","getMonth","getFullYear","formatDate","show","overflowX","margin","buttontableclicked","opacity","NotifySuccess","message","NotifyFailure","store","addNotification","insert","animationIn","animationOut","dismiss","duration","onScreen","updateFeatureAttr","featurelayerurl","objid","newvalue","attr","updateFeatures","updateResults","success","error","description","deleteRecord","parentglobalId","jaartal","urlrelated","deleteFeatures","selectedPlanAttr","plancapaciteit","callbackOnError","parent_globalid","jaarstart","jaareind","duur","div","Math","ceil","mod","jaren","aantal","jaar","onbekend_onbekend","vertrouwelijkheid","regio","addFeatures","addPlanRelatedJaar","parentGlobalid","urltable","jaareerste","jaarlaatste","k","globalid","params","f","orderByFields","outFields","token","paramVals","val","encodeURIComponent","join","fetch","json","jaren_in_db","jaren_volgens_eerstelaatste","parseInt","db_not_in_el","this","indexOf","el_not_in_db","jarenToShift","ft","objectid","updatedFeatures","ModalDialog","handleClose_false","handleClose","question","MessageBox","TabPanel","other","role","Box","p","component","a11yProps","registerLocale","nl","root","palette","paper","EditPlanGegevens","viewMode","setValue","totalen","infoTotaal","refOnFocus","openModal","setOpenModal","openMessageBox","setOpenMessageBox","openMessageBoxTekst","setOpenMessageBoxTekst","openMessageBoxTitel","setOpenMessageBoxTitel","dateFields","setDateFields","RegExp","pattern","test","onBlur","isNaN","addRemoveDetailRecords","callbackSetInvalid","onFocus","handleChangeSelect","UpdateVertrouwelijkheidDetailRecords","callbackUpdated","Domain","domein","domain","slice","codedValue","selected","DropDown","editable","float","clear","display","textAlign","tooltip","onMouseEnter","tooltipEnter","onMouseLeave","tooltipLeave","DatumVeld","dateFormat","readOnly","locale","handleDateChange","veldnaam","document","getElementById","removeChild","tekst","createElement","left","clientX","top","clientY","getElementsByTagName","appendChild","TekstVeldMetLabel","multiline","fontFamily","autoComplete","defaultValue","waarde","getType","getPattern","PlanAttributen","propsdetail","categorie","split","veld_in_config","trim","codedValues","getTooltip","veldIsMultiline","multiline_fields","controleerGegevens","VerplichteVelden","verplichtevelden","tooltiptext","Tooltips","tooltipitem","Tabs","event","Tab","data-tabstatus","label","Tabname_Extra","tableLayout","Tabblad_basis_column1","Tabblad_basis_column2","Tabblad_basis_column3","Link","marginLeft","textDecoration","href","eerste","laatste","Tabblad_status_column1","Tabblad_status_column2","Tabblad_status_column3","Tabblad_kwalitatief_column1","Tabblad_kwalitatief_column2","Tabblad_kwalitatief_column3","selectedplan","Tabblad_extra_column1","Tabblad_extra_column2","Tabblad_extra_column3","shiftDetailRecords","tabs","borderRight","divider","EditDetailEigendom","verticaltabindex","valueTabIndex","setValueTabIndex","detailrecords","detailfields","optellingen","refObjIDOnFocus","onChangeDropdown","TekstVeld","inputMode","CustomDropdown","TableRows","jaarrecord","JSONDetailvelden","veld","getFieldAlias","TableHeader","wordBreak","reCalculate","orientation","verticaltabindexchange","wrapped","selectedPlan","EditDetailGegevens","detailRecords","setDetailRecords","detailFields","setDetailFields","verticalTabIndex","setVerticalTabIndex","refPlancapaciteit","refButton","handleVerticalTabIndex","getDetailInfo","getDetailRecords","onError","onClickGenereer","addPlanRelated","calcTotalen","setOptellingen","newOptellingen","eengezins","eengezins_k","eengezins_h","eengezins_o","meergezins","meergezins_k","meergezins_h","meergezins_o","onbekend","onbekend_k","onbekend_h","onbekend_o","sloop_eengezins","sloop_eengezins_k","sloop_eengezins_h","sloop_eengezins_o","sloop_meergezins","sloop_meergezins_k","sloop_meergezins_h","sloop_meergezins_o","sloop_onbekend","sloop_onbekend_k","sloop_onbekend_h","sloop_onbekend_o","gerealiseerd_bouw","gerealiseerd_sloop","resterend_bouw","resterend_sloop","record","Object","entries","key","parsedvalue","settotaleninfo","marginTop","TextField","size","EditMap","mode","editing","addEventListener","switch","definitionExpression","adds","addedFeatures","objectId","addedplan","editConfigLayer","fieldConfig","deleteEnabled","editor","Editor","allowedWorkflows","layerInfos","codeExpand2","group","Edit","editMode","setEditMode","setInfoTotaal","TotalenInfo","jaarvalue","TotalenInfoJaren","gerealiseerdbouw","resterendbouw","gerealiseerdsloop","resterendsloop","minHeight","MainTableAppBar","openfilterdialog","titleAccess","getPlanQuery","appBar","flex","Transition","forwardRef","Slide","direction","AddPlanDialog","closedialog","fullScreen","TransitionComponent","credential","oauthInfo","initialize","appId","OAuthInfo","popup","IdentityManager","registerOAuthInfos","checkCurrentStatus","checkSignInStatus","signIn","a","fetchCredentials","signOut","destroyCredentials","getCredential","oAuthPopupConfirmation","searchWebmap","onlineurl","callbackfunc","WebmapTagId","q","searchFields","request","responseType","aantalgevonden","webmap","confirm","objectIds","refresh","App","assetsPath","setViewMode","addPlanDialog","setAddPlanDialog","setDataValid","isFilterDialogOpen","setIsFilterDialogOpen","init","AppID","cred","UserSession","fromCredential","SharingUrl","Versie","buttonTableClicked","currentTarget","plannen","layerRefresh","buttonExitEditScherm","logOut","Plantable_width","Map_width","deletePlan","feature","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","StrictMode"],"mappings":"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","file":"static/js/main.c22a1143.chunk.js","sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 644;","import React, { createContext, useState } from \"react\";\r\n\r\nconst AppContext = createContext();\r\n\r\nfunction AppContextProvider({ children }) {\r\n const [ctxSelectedPlan, ctxSetSelectedPlan] = useState(null); ////het geselecteerde plan als feature\r\n const [ctxFeaturelayerUrl, ctxSetFeaturelayerUrl] = useState(null); //de url naar de featurelayer, gehaald uit de webmap\r\n const [ctxFeaturelayer, ctxSetFeaturelayer] = useState(null); //de featurelayer, gehaald uit de webmap\r\n const [ctxDetailTableUrl, ctxSetDetailTableUrl] = useState(null); //de url naar de detailtable, gehaald uit de webmap\r\n const [ctxPlannen, ctxSetPlannen] = useState([]); //alle plannen in de view van de webmap\r\n const [ctxPlannenFields, ctxSetPlannenFields] = useState([]); //alle velden van de plannen in de view van de webmap\r\n const [ctxCredentials, ctxSetCredentials] = useState(null);\r\n const [ctxDetailRecordsValid, ctxSetDetailRecordsValid] = useState(true);\r\n const [ctxWebMapId, ctxSetWebMapId] = useState(null);\r\n const [ctxUserSession, ctxSetUserSession] = useState(null);\r\n const [ctxGemeentenaam, ctxSetGemeentenaam] = useState(\"\");\r\n const [ctxPlaatsnamen, ctxSetPlaatsnamen] = useState(null);\r\n const [ctxGemeenteExtent, ctxSetGemeenteExtent] = useState(null);\r\n const [ctxTableFilter, ctxSetTableFilter] = useState([]);\r\n\r\n // function eenofanderefunctie(value) {\r\n // setDatamodel(value);\r\n // }\r\n\r\n const defaultContext = {\r\n ctxSelectedPlan,\r\n ctxSetSelectedPlan,\r\n ctxFeaturelayerUrl,\r\n ctxSetFeaturelayerUrl,\r\n ctxFeaturelayer,\r\n ctxSetFeaturelayer,\r\n ctxDetailTableUrl,\r\n ctxSetDetailTableUrl,\r\n ctxPlannen,\r\n ctxSetPlannen,\r\n ctxCredentials,\r\n ctxSetCredentials,\r\n ctxWebMapId,\r\n ctxSetWebMapId,\r\n ctxUserSession,\r\n ctxSetUserSession,\r\n ctxTableFilter,\r\n ctxSetTableFilter,\r\n ctxPlannenFields,\r\n ctxSetPlannenFields,\r\n ctxDetailRecordsValid,\r\n ctxSetDetailRecordsValid,\r\n ctxPlaatsnamen,\r\n ctxSetPlaatsnamen,\r\n ctxGemeentenaam,\r\n ctxSetGemeentenaam,\r\n ctxGemeenteExtent,\r\n ctxSetGemeenteExtent,\r\n // eenofanderefunctie,\r\n };\r\n\r\n return (\r\n {children} \r\n );\r\n}\r\n\r\nexport { AppContext, AppContextProvider };\r\n","import React, { useContext, useEffect } from \"react\";\r\n\r\nimport AppBar from \"@material-ui/core/AppBar\";\r\nimport Toolbar from \"@material-ui/core/Toolbar\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { AppContext } from \"./AppContext\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n menuButton: {\r\n marginRight: theme.spacing(2),\r\n },\r\n title: {\r\n flexGrow: 1,\r\n },\r\n}));\r\n\r\nexport default function ApplicationHeader(props) {\r\n const classes = useStyles();\r\n const { ctxCredentials, ctxGemeentenaam } = useContext(AppContext);\r\n useEffect(() => {}, [ctxGemeentenaam]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n Gemeente {ctxGemeentenaam} \r\n\r\n \r\n {props.title}\r\n \r\n \r\n {ctxCredentials !== undefined ? (\r\n \r\n {ctxCredentials.userId}{\" \"}\r\n \r\n Logout\r\n \r\n
\r\n ) : (\r\n \"Not logged in\"\r\n )}\r\n \r\n {\r\n window.open(window.HandleidingUrl);\r\n }}\r\n disabled={window.HandleidingUrl === \"\"}\r\n >\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import { queryFeatures } from \"@esri/arcgis-rest-feature-layer\";\r\n\r\nexport async function queryFeaturesUrl(url, usersession, where, start) {\r\n console.log(\"where: \", where);\r\n return queryFeatures({\r\n url: url,\r\n where: where,\r\n resultOffset: start,\r\n authentication: usersession,\r\n });\r\n}\r\n","import React, { useRef, useEffect, useState, useContext } from \"react\";\r\nimport WebMap from \"@arcgis/core/WebMap\";\r\nimport MapView from \"@arcgis/core/views/MapView\";\r\nimport LayerList from \"@arcgis/core/widgets/LayerList\";\r\nimport Expand from \"@arcgis/core/widgets/Expand\";\r\nimport { AppContext } from \"./AppContext\";\r\nimport \"./App.css\";\r\nimport { queryFeaturesUrl } from \"./QueryFeatures\";\r\nimport esriConfig from \"@arcgis/core/config.js\";\r\n\r\nexport function MainMap() {\r\n const mapRef = useRef();\r\n const [mapview, setMapView] = useState(null);\r\n const mapviewRef = useRef(null);\r\n const lyrRef = useRef(null);\r\n\r\n const {\r\n ctxSetFeaturelayerUrl,\r\n ctxSetFeaturelayer,\r\n ctxSetDetailTableUrl,\r\n ctxPlannen,\r\n ctxSelectedPlan,\r\n ctxWebMapId,\r\n ctxUserSession,\r\n ctxSetTableFilter,\r\n ctxSetPlaatsnamen,\r\n ctxSetGemeentenaam,\r\n ctxSetGemeenteExtent,\r\n } = useContext(AppContext);\r\n\r\n const UitlezenGemeentenaam = () => {\r\n console.log(\"UitlezenGemeentenaam\");\r\n //template uitlezen en zoeken naar gemeentenaam\r\n let gemeente = \"\";\r\n if (lyrRef.current.templates.length > 0) {\r\n gemeente = lyrRef.current.templates[0].prototype.attributes.gemeente;\r\n ctxSetGemeentenaam(gemeente);\r\n }\r\n\r\n if (gemeente === \"\" || gemeente === undefined || gemeente === null) {\r\n alert(\"Gemeentenaam onbekend\");\r\n console.log(\"Gemeentenaam onbekend\");\r\n return;\r\n } else {\r\n OphalenWoonplaatsenBijGemeente(window.GemeentenTabelUrl, gemeente);\r\n console.log(\"Gemeentenaam: \" + gemeente);\r\n }\r\n };\r\n\r\n const OphalenWoonplaatsenBijGemeente = (layer, gemeente) => {\r\n // query uitvoeren op de featurelayer om de lijst plaatsnamen op te halen\r\n let where = \"gemeentenaam='\" + gemeente + \"'\";\r\n queryFeaturesUrl(layer, ctxUserSession, where, 0)\r\n .then((result) => {\r\n console.log(\"Plaatsnamen: \", result);\r\n let plaatsnamen = [];\r\n for (let index = 0; index < result.features.length; index++) {\r\n let cv = {};\r\n cv[\"code\"] =\r\n result.features[index].attributes.woonplaats == undefined\r\n ? result.features[index].attributes.plaatsnaam\r\n : result.features[index].attributes.woonplaats;\r\n cv[\"name\"] =\r\n result.features[index].attributes.woonplaats == undefined\r\n ? result.features[index].attributes.plaatsnaam\r\n : result.features[index].attributes.woonplaats;\r\n plaatsnamen.push(cv);\r\n }\r\n ctxSetPlaatsnamen(plaatsnamen);\r\n })\r\n .catch((e) => {\r\n console.log(\"Plaatsnamen failed: \", e);\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n console.log(\"useeffect mainmap\");\r\n //https://developers.arcgis.com/javascript/latest/api-reference/esri-WebMap.html\r\n //To load a Webmap from an on-premise portal, set the portal url in esriConfig.portalurl.\r\n if (window.PortalUrl.includes(\"portal\")) {\r\n esriConfig.portalUrl = window.PortalUrl;\r\n }\r\n if (ctxWebMapId == null) return;\r\n const map = new WebMap({\r\n portalItem: {\r\n id: ctxWebMapId,\r\n },\r\n });\r\n const view = new MapView({\r\n container: mapRef.current,\r\n map: map,\r\n center: [-118, 34],\r\n zoom: 8,\r\n });\r\n\r\n setMapView(view);\r\n mapviewRef.current = view;\r\n\r\n //LayerList-widget toevoegen aan de kaart\r\n view.when(function () {\r\n var layerList = new LayerList({\r\n view: view,\r\n });\r\n\r\n var codeExpand = new Expand({\r\n expandIconClass: \"esri-icon-layer-list\",\r\n expandTooltip: \"Toon lijst met lagen\",\r\n view: view,\r\n content: layerList,\r\n expanded: false,\r\n });\r\n //add the panel to the UI\r\n view.ui.add(codeExpand, \"top-right\");\r\n });\r\n\r\n //https://developers.arcgis.com/javascript/latest/api-reference/esri-views-View.html#properties-summary\r\n var handleReady = view.watch(\r\n \"ready\",\r\n function (newValue, oldValue, propertyName, target) {\r\n //loop over featurelayers and search configured layer\r\n for (let i = 0; i < mapviewRef.current.map.layers.items.length; i++) {\r\n let lyr = mapviewRef.current.map.layers.items[i];\r\n if (\r\n lyr.type === \"feature\" &&\r\n lyr.title.includes(window.FeaturelayerTitle)\r\n ) {\r\n console.log(\"Featurelayer found: \", lyr.parsedUrl.path);\r\n ctxSetFeaturelayerUrl(lyr.parsedUrl.path);\r\n ctxSetFeaturelayer(lyr);\r\n lyrRef.current = lyr;\r\n\r\n lyr.watch(\"loaded\", (newValue) => {\r\n if (newValue) {\r\n //als de layer geladen is, dan kunnen we uit de featuretemplate de gemeentenaam halen\r\n //die gemeentenaam hebben we weer nodig om de juiste plaatsnamen op te halen\r\n UitlezenGemeentenaam();\r\n }\r\n });\r\n\r\n //https://developers.arcgis.com/javascript/latest/sample-code/featurelayer-queryextent/\r\n //zoom to extent of all features as soon as the layer is loaded\r\n lyr\r\n .when(() => {\r\n return lyr.queryExtent();\r\n })\r\n .then((response) => {\r\n view.goTo(response.extent);\r\n ctxSetGemeenteExtent(response.extent);\r\n });\r\n\r\n break;\r\n }\r\n }\r\n\r\n //loop over featuretables and search configured table\r\n for (let i = 0; i < mapviewRef.current.map.tables.items.length; i++) {\r\n let lyr = mapviewRef.current.map.tables.items[i];\r\n console.log(window.DetailtableTitle);\r\n if (lyr.title.includes(window.DetailtableTitle)) {\r\n console.log(\"Featuretable found: \", lyr.parsedUrl.path);\r\n ctxSetDetailTableUrl(lyr.parsedUrl.path);\r\n break;\r\n }\r\n }\r\n }\r\n );\r\n\r\n // clean up\r\n return () => {\r\n mapview && mapview.destroy();\r\n handleReady.remove();\r\n };\r\n }, [ctxWebMapId]); // only after initial render\r\n\r\n useEffect(() => {\r\n if (!mapview) {\r\n return;\r\n }\r\n const handle = mapview.on(\"click\", onClick);\r\n return function removeHandle() {\r\n handle && handle.remove();\r\n };\r\n\r\n function onClick(evt) {\r\n ctxSetTableFilter([]);\r\n\r\n var query = lyrRef.current.createQuery();\r\n query.geometry = evt.mapPoint; // obtained from a view click event\r\n query.spatialRelationship = \"intersects\";\r\n lyrRef.current.queryFeatures(query).then(function (results) {\r\n console.log(results.features);\r\n if (results.features.length > 0) {\r\n var filter = [\r\n {\r\n id: \"id\",\r\n value: results.features[0].attributes[window.Objectid],\r\n },\r\n ];\r\n ctxSetTableFilter(filter);\r\n }\r\n });\r\n }\r\n }, [mapview]);\r\n\r\n useEffect(() => {\r\n if (mapview !== null && ctxPlannen !== null) {\r\n if (ctxSelectedPlan !== null) {\r\n //geometrie opzoeken in de lijst van plannen en zoomen\r\n ctxPlannen.forEach((element) => {\r\n if (\r\n element.attributes[window.Globalid] ===\r\n ctxSelectedPlan.attributes[window.Globalid]\r\n ) {\r\n if (element.geometry === null) {\r\n alert(\"Dit element heeft geen geometrie!\");\r\n } else {\r\n var tmp = element.geometry.extent.clone();\r\n mapview.extent = tmp.expand(2);\r\n }\r\n }\r\n });\r\n } else {\r\n let zoom = mapview.zoom;\r\n mapview.zoom = zoom - 1;\r\n }\r\n }\r\n }, [ctxSelectedPlan]);\r\n\r\n return
;\r\n}\r\n\r\nexport default MainMap;\r\n","import React, { useContext, useRef } from \"react\";\r\nimport { AppContext } from \"./AppContext\";\r\n\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport DialogActions from \"@material-ui/core/DialogActions\";\r\nimport DialogContent from \"@material-ui/core/DialogContent\";\r\nimport DialogContentText from \"@material-ui/core/DialogContentText\";\r\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\r\nimport Button from \"@material-ui/core/Button\";\r\n\r\nfunction FilterDialog(props) {\r\n const { ctxPlannenFields, ctxSetTableFilter } = useContext(AppContext);\r\n\r\n const filterFieldnames = useRef(null);\r\n const filterComparison = useRef(null);\r\n const filterwaardeInput = useRef(null);\r\n\r\n function getField(fieldname) {\r\n for (var i = 0; i < ctxPlannenFields.length; i++) {\r\n if (ctxPlannenFields[i].name === fieldname) return ctxPlannenFields[i];\r\n }\r\n return null;\r\n }\r\n if (!props.isfilterdialogopen) return null;\r\n\r\n function saveFilter() {\r\n let fieldnamesList = filterFieldnames.current;\r\n let selectedoption = fieldnamesList.selectedOptions[0]; //get the first of selected items\r\n let planfield = JSON.parse(selectedoption.id); //id contains jsonobject\r\n\r\n var filter = [\r\n {\r\n id: planfield.name,\r\n value: filterwaardeInput.current.value,\r\n },\r\n ];\r\n ctxSetTableFilter(filter);\r\n props.closefilterdialog(true);\r\n }\r\n\r\n const onSelectChange = (evt) => {\r\n let vergelijkingDOM = filterComparison.current;\r\n let fieldnamesList = filterFieldnames.current;\r\n let selectedoption = fieldnamesList.selectedOptions[0]; //get the first of selected items\r\n let planfield = JSON.parse(selectedoption.id); //id contains jsonobject\r\n console.log(planfield.type);\r\n switch (planfield.type) {\r\n case \"esriFieldTypeString\":\r\n vergelijkingDOM.innerHTML = \" bevat \";\r\n break;\r\n case \"esriFieldTypeSmallInteger\":\r\n vergelijkingDOM.innerHTML = \" is gelijk aan \";\r\n break;\r\n case \"esriFieldTypeDouble\":\r\n vergelijkingDOM.innerHTML = \" is gelijk aan \";\r\n break;\r\n case \"esriFieldTypeDate\":\r\n vergelijkingDOM.innerHTML = \" is gelijk aan (dd-mm-jjjj)\";\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n return (\r\n \r\n props.closefilterdialog(false)}\r\n aria-labelledby=\"alert-dialog-title\"\r\n aria-describedby=\"alert-dialog-description\"\r\n width=\"100%\"\r\n >\r\n Filter \r\n \r\n \r\n \r\n {window.PlantableFields.map((item, index) => {\r\n {\r\n let planfield = getField(item.field);\r\n if (planfield)\r\n return (\r\n \r\n {planfield.alias}\r\n \r\n );\r\n else return null;\r\n }\r\n })}\r\n \r\n bevat \r\n \r\n \r\n \r\n \r\n saveFilter()} color=\"primary\" autoFocus>\r\n Toepassen\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default FilterDialog;\r\n","import { useTable, useFilters, useSortBy } from \"react-table\";\r\nimport React, { useContext, useState, useEffect } from \"react\";\r\nimport { AppContext } from \"./AppContext\";\r\nimport ImportExportIcon from \"@material-ui/icons/ImportExport\";\r\nimport FilterDialog from \"./FilterDialog\";\r\n\r\nexport function ReactTable(props) {\r\n const { ctxPlannen, ctxSetSelectedPlan, ctxTableFilter } =\r\n useContext(AppContext);\r\n\r\n const [selectedRow, setSelectedRow] = useState(null);\r\n\r\n //filter van de tabel is gewijzigd (omdat een feature op de map is aangeklikt bv)\r\n useEffect(() => {\r\n if (props.columns.length > 0) {\r\n if (ctxTableFilter.length === 0) {\r\n setAllFilters([]);\r\n } else {\r\n setAllFilters(ctxTableFilter);\r\n }\r\n }\r\n }, [ctxTableFilter]);\r\n\r\n const filterTypes = React.useMemo(\r\n () => ({\r\n // Or, override the default text filter to use\r\n // \"startWith\"\r\n text: (rows, id, filterValue) => {\r\n return rows.filter((row) => {\r\n const rowValue = row.values[id];\r\n return rowValue !== undefined\r\n ? String(rowValue)\r\n .toLowerCase()\r\n .startsWith(String(filterValue).toLowerCase())\r\n : true;\r\n });\r\n },\r\n }),\r\n []\r\n );\r\n\r\n function DefaultColumnFilter({ column: { filterValue, setFilter } }) {\r\n return (\r\n \r\n {\r\n setSelectedRow(null);\r\n setFilter(e.target.value || undefined); // Set undefined to remove the filter entirely\r\n }}\r\n placeholder={`Filter...`}\r\n style={{ width: \"75%\", verticalAlign: \"top\" }}\r\n />\r\n
\r\n );\r\n }\r\n const defaultColumn = React.useMemo(\r\n () => ({\r\n // Let's set up our default Filter UI\r\n Filter: DefaultColumnFilter,\r\n }),\r\n []\r\n );\r\n\r\n const columns = props.columns;\r\n const data = props.rows;\r\n const hidden = props.hidden;\r\n const {\r\n getTableProps,\r\n getTableBodyProps,\r\n headerGroups,\r\n rows,\r\n setAllFilters,\r\n prepareRow,\r\n } = useTable(\r\n {\r\n columns,\r\n data,\r\n defaultColumn, // Be sure to pass the defaultColumn option\r\n filterTypes,\r\n initialState: {\r\n hiddenColumns: hidden,\r\n },\r\n },\r\n useFilters,\r\n useSortBy\r\n );\r\n\r\n const onclickrow = (evt) => {\r\n if (selectedRow === evt.target.parentNode.id) {\r\n setSelectedRow(null);\r\n ctxSetSelectedPlan(null);\r\n console.log(\"SelectedPlan: none\");\r\n } else {\r\n setSelectedRow(evt.target.parentNode.id);\r\n var plan = ctxPlannen.filter((plan) => {\r\n return (\r\n plan.attributes[window.Objectid].toString() ===\r\n evt.target.parentNode.id\r\n );\r\n });\r\n ctxSetSelectedPlan(plan[0]);\r\n console.log(\"SelectedPlan: \", plan[0]);\r\n }\r\n };\r\n\r\n return (\r\n \r\n
\r\n \r\n {headerGroups.map((headerGroup) => (\r\n \r\n {headerGroup.headers.map((column) => (\r\n \r\n {column.render(\"Header\")}\r\n \r\n \r\n {column.canFilter ? column.render(\"Filter\") : null}\r\n \r\n ))}\r\n \r\n ))}\r\n \r\n \r\n {rows.map((row) => {\r\n prepareRow(row);\r\n return (\r\n \r\n {row.cells.map((cell) => {\r\n return (\r\n \r\n {cell.render(\"Cell\")}\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, { useContext, useEffect, useState } from \"react\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport \"./App.css\";\r\nimport { AppContext } from \"./AppContext\";\r\nimport { ReactTable } from \"./ReactTable\";\r\nimport { formatDateToLocalInputDate } from \"@material-ui/data-grid\";\r\n\r\n//Alternatief: https://codesandbox.io/s/23jy4py5yr?file=/Utils.js\r\n\r\nexport default function MainTable(props) {\r\n const {\r\n ctxPlannen,\r\n ctxSetPlannen,\r\n ctxFeaturelayer,\r\n ctxUserSession,\r\n ctxTableFilter,\r\n ctxPlannenFields,\r\n ctxSetPlannenFields,\r\n ctxSelectedPlan,\r\n } = useContext(AppContext);\r\n\r\n const [kolommen, setKolommen] = useState([]);\r\n const [rijen, setRijen] = useState([]);\r\n const [hiddenkolommen, setHiddenkolommen] = useState([]);\r\n\r\n //Recursive\r\n const HaalAllePlannen = (allFeatures, callback) => {\r\n var query = ctxFeaturelayer.createQuery();\r\n query.start = allFeatures.length;\r\n query.num = 1000;\r\n //query.where = \"woonplaats like 'Cr%'\";\r\n ctxFeaturelayer.queryFeatures(query).then(function (response) {\r\n if (allFeatures.length === 0) {\r\n ctxSetPlannenFields(response.fields);\r\n }\r\n if (response.exceededTransferLimit) {\r\n allFeatures = allFeatures.concat(response.features);\r\n HaalAllePlannen(allFeatures, callback);\r\n } else {\r\n allFeatures = allFeatures.concat(response.features);\r\n callback(allFeatures);\r\n }\r\n });\r\n };\r\n\r\n const OphalenPlannenGereed = (allFeatures) => {\r\n console.log(\"Aantal plannen gevonden: \", allFeatures.length);\r\n ctxSetPlannen(allFeatures);\r\n VulRijen(allFeatures);\r\n };\r\n\r\n const VulRijen = (allFeatures, kolommen) => {\r\n if (allFeatures.length > 0) {\r\n var tmprows = [];\r\n allFeatures.forEach((plan) => {\r\n var rij = {};\r\n //er moet verplicht een id-kolom zijn. Deze vullen we met OBJECTID\r\n rij[\"id\"] = plan.attributes[window.Objectid];\r\n if (kolommen) {\r\n kolommen.forEach((kolom) => {\r\n console.log(kolom);\r\n });\r\n } else {\r\n window.PlantableFields.forEach((column) => {\r\n rij[column.field] = plan.attributes[column.field];\r\n });\r\n }\r\n tmprows.push(rij);\r\n });\r\n setRijen(tmprows);\r\n }\r\n };\r\n\r\n //featurelayer-state is gewijzigd: door het laden van de map(view)\r\n //Plannen uit de featurelayer lezen en de rijen van de tabel vullen\r\n useEffect(() => {\r\n if (ctxFeaturelayer != null && ctxUserSession != null) {\r\n //featurelayer is gewijzigd: ophalen plannen en in tabel zetten\r\n let allFeatures = [];\r\n //Deze functie is recursive met daarbinnen async calls. Wanneer ie helemaal gereed is, roept ie 'OphalenPlannenGereed' aan\r\n HaalAllePlannen(allFeatures, OphalenPlannenGereed);\r\n }\r\n }, [ctxFeaturelayer, props.dataValid]);\r\n\r\n //filter van de tabel is gewijzigd (omdat een feature op de map is aangeklikt bv)\r\n useEffect(() => {}, [ctxTableFilter]);\r\n\r\n //de attribuutvelden van de plannen uitlezen, bewaren en kolommen van tabel maken\r\n useEffect(() => {\r\n if (ctxPlannenFields != null && ctxPlannenFields.length > 0) {\r\n //er moet verplicht een id-kolom zijn. Deze vullen we met OBJECTID\r\n var tmpcolumns = [];\r\n var newcolumn = {};\r\n newcolumn[\"Header\"] = \"id\";\r\n newcolumn[\"accessor\"] = \"id\";\r\n newcolumn[\"defaultCanSort\"] = true;\r\n newcolumn[\"width\"] = 50;\r\n tmpcolumns.push(newcolumn);\r\n\r\n //overige kolommen voor de plannen-tabel uit de config lezen\r\n //apart lijstje voor hiddencolumns maken (worden niet getoond, maar kan wel op gefilterd worden)\r\n var hidden = [];\r\n window.PlantableFields.forEach((column) => {\r\n newcolumn = {};\r\n newcolumn[\"Header\"] = getAlias(column.field);\r\n newcolumn[\"accessor\"] =\r\n column.field == \"ph_date1\"\r\n ? (row) => formatDate(row[column.field])\r\n : column.field;\r\n newcolumn[\"defaultCanSort\"] = true;\r\n tmpcolumns.push(newcolumn);\r\n if (!column.show) {\r\n hidden.push(column.field);\r\n }\r\n });\r\n setKolommen(tmpcolumns);\r\n //hidden.push(\"id\");\r\n setHiddenkolommen(hidden);\r\n }\r\n }, [ctxPlannenFields]);\r\n\r\n function formatDate(d) {\r\n if (d) {\r\n var date = new Date(d);\r\n return (\r\n date.getDate() + \"-\" + (date.getMonth() + 1) + \"-\" + date.getFullYear()\r\n );\r\n } else {\r\n return d;\r\n }\r\n }\r\n\r\n function getAlias(fieldname) {\r\n for (var i = 0; i < ctxPlannenFields.length; i++) {\r\n if (ctxPlannenFields[i].name === fieldname)\r\n return ctxPlannenFields[i].alias;\r\n }\r\n return fieldname;\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n Toevoegen\r\n \r\n \r\n Bekijken\r\n \r\n \r\n Wijzigen\r\n \r\n \r\n Verwijderen\r\n \r\n
\r\n
\r\n );\r\n}\r\n","import { store } from \"react-notifications-component\";\r\n\r\nexport async function NotifySuccess(title, message) {\r\n // store.addNotification({\r\n // title: title,\r\n // message: message,\r\n // type: \"success\",\r\n // insert: \"top\",\r\n // container: \"bottom-full\",\r\n // animationIn: [\"animate__animated\", \"animate__fadeIn\"],\r\n // animationOut: [\"animate__animated\", \"animate__fadeOut\"],\r\n // dismiss: {\r\n // duration: 500,\r\n // onScreen: false,\r\n // },\r\n // });\r\n}\r\nexport async function NotifyFailure(title, message) {\r\n store.addNotification({\r\n title: title,\r\n message: message,\r\n type: \"danger\",\r\n insert: \"top\",\r\n container: \"bottom-full\",\r\n animationIn: [\"animate__animated\", \"animate__fadeIn\"],\r\n animationOut: [\"animate__animated\", \"animate__fadeOut\"],\r\n dismiss: {\r\n duration: 3000,\r\n onScreen: false,\r\n },\r\n });\r\n}\r\n","import { updateFeatures } from \"@esri/arcgis-rest-feature-layer\";\r\nimport { NotifyFailure } from \"./Notify\";\r\n\r\nexport async function updateFeatureAttr(\r\n featurelayerurl,\r\n objid,\r\n fieldname,\r\n newvalue,\r\n usersession,\r\n callback\r\n) {\r\n var attr = {};\r\n attr[window.Objectid] = objid;\r\n attr[fieldname] = newvalue;\r\n\r\n updateFeatures({\r\n url: featurelayerurl,\r\n authentication: usersession,\r\n features: [\r\n {\r\n attributes: attr,\r\n },\r\n ],\r\n })\r\n .then((response) => {\r\n console.log(\"Updated feature: \", response);\r\n if (response.updateResults[0].success) {\r\n if (callback) callback(objid, fieldname, newvalue);\r\n } else {\r\n NotifyFailure(\r\n \"Wijziging\",\r\n \"Opslaan mislukt: \" + response.updateResults[0].error.description\r\n );\r\n }\r\n })\r\n .catch((e) => {\r\n NotifyFailure(\"Wijziging\", \"Opslaan mislukt: \" + e.message);\r\n });\r\n}\r\n","import { deleteFeatures } from \"@esri/arcgis-rest-feature-layer\";\r\nimport { NotifySuccess, NotifyFailure } from \"./Notify\";\r\n\r\nexport async function deleteRecord(\r\n parentglobalId,\r\n jaartal,\r\n urlrelated,\r\n usersession,\r\n callback\r\n) {\r\n //related record verwijderen\r\n deleteFeatures({\r\n url: urlrelated,\r\n authentication: usersession,\r\n where: \"parent_globalid='\" + parentglobalId + \"' AND jaartal=\" + jaartal,\r\n })\r\n .then((response) => {\r\n console.log(\"DeleteJaartal gelukt: \" + jaartal);\r\n NotifySuccess(\"Verwijderen \" + jaartal, \"Gereed\");\r\n callback();\r\n })\r\n .catch((e) => {\r\n NotifyFailure(\"Verwijderen \" + jaartal, \"Mislukt: \" + e.message);\r\n });\r\n}\r\n","import { addFeatures } from \"@esri/arcgis-rest-feature-layer\";\r\nimport { NotifyFailure, NotifySuccess } from \"./Notify\";\r\n\r\nexport async function addPlanRelated(\r\n usersession,\r\n selectedPlanAttr,\r\n urlrelated,\r\n plancapaciteit,\r\n callback,\r\n callbackOnError\r\n) {\r\n let parent_globalid = selectedPlanAttr[window.Globalid];\r\n let jaarstart = selectedPlanAttr[\"oplevering_eerste\"];\r\n let jaareind = selectedPlanAttr[\"oplevering_laatste\"];\r\n if (\r\n plancapaciteit === undefined ||\r\n plancapaciteit === 0 ||\r\n jaarstart === undefined ||\r\n jaarstart === 0 ||\r\n jaareind === undefined ||\r\n jaareind === 0\r\n ) {\r\n NotifyFailure(\r\n \"\",\r\n \"Plancapaciteit, jaartal eerste en laatste oplevering moeten ingevuld zijn.\"\r\n );\r\n callbackOnError();\r\n return;\r\n }\r\n\r\n if (jaarstart > jaareind) {\r\n NotifyFailure(\r\n \"\",\r\n \"Jaartal laatste moet groter of gelijk jaartal eerste zijn.\"\r\n );\r\n callbackOnError();\r\n return;\r\n }\r\n\r\n //dus stel oplevering 1e = 2022 en oplevering laatste = 2026\r\n //dan 2022, 2023, 2024, 2025, 2026 -> 5 jaar oftwel laatste minus eerste plus 1\r\n let duur = jaareind - jaarstart + 1;\r\n if (duur <= 0) {\r\n NotifyFailure(\"\", \"Duur moet groter zijn dan nul.\");\r\n callbackOnError();\r\n return;\r\n }\r\n\r\n //de plancapaciteit zo gelijkmatig mogelijk verdelen over de jaren\r\n var div = Math.ceil(plancapaciteit / duur); //levert een div welke groter of precies goed is\r\n var mod = div * duur - plancapaciteit; //het overschot uitrekenen. Kan ook 0 zijn.\r\n let jaren = [];\r\n console.log(\"Div:\", div);\r\n console.log(\"Mod:\", mod);\r\n for (let jaartal = jaarstart; jaartal <= jaareind; jaartal++) {\r\n let aantal = div;\r\n if (mod !== 0 && jaartal === jaareind) {\r\n aantal = div - mod; //bij het laatste jaar het overschot(mod) aftrekken van de div\r\n }\r\n\r\n let jaar = {\r\n attributes: {\r\n parent_globalid: parent_globalid,\r\n jaartal: jaartal,\r\n onbekend_onbekend: aantal,\r\n //uitbreiding met deze drie velden vanaf 1.09\r\n vertrouwelijkheid: selectedPlanAttr[\"vertrouwelijkheid\"],\r\n gemeente: selectedPlanAttr[\"gemeente\"],\r\n regio: selectedPlanAttr[\"regio\"],\r\n },\r\n };\r\n jaren.push(jaar);\r\n console.log(\"Jaar: \" + jaartal + \" ->\" + aantal);\r\n }\r\n\r\n addFeatures({\r\n url: urlrelated,\r\n authentication: usersession,\r\n features: jaren,\r\n })\r\n .then((response) => {\r\n console.log(\"AddRelated succes: \", response);\r\n NotifySuccess(\"Detailplanning\", \"Aangemaakt\");\r\n callback();\r\n })\r\n .catch((e) => {\r\n console.log(\"AddRelated failed: \", e);\r\n NotifyFailure(\"Detailplanning\", \"Aanmaken mislukt: \" + e.message);\r\n callbackOnError();\r\n });\r\n}\r\n\r\nexport async function addPlanRelatedJaar(\r\n selectedPlanAttr,\r\n parentGlobalid,\r\n urlrelated,\r\n jaartal,\r\n usersession,\r\n callback\r\n) {\r\n let jaren = [];\r\n let jaar = {\r\n attributes: {\r\n parent_globalid: parentGlobalid,\r\n jaartal: jaartal,\r\n //uitbreiding met deze drie velden vanaf 1.09\r\n vertrouwelijkheid: selectedPlanAttr[\"vertrouwelijkheid\"],\r\n gemeente: selectedPlanAttr[\"gemeente\"],\r\n regio: selectedPlanAttr[\"regio\"],\r\n },\r\n };\r\n jaren.push(jaar);\r\n\r\n addFeatures({\r\n url: urlrelated,\r\n authentication: usersession,\r\n features: jaren,\r\n })\r\n .then((response) => {\r\n console.log(\"AddRelatedJaar succes: \", response);\r\n NotifySuccess(\"Jaar \" + jaartal, \"Toegevoegd\");\r\n callback();\r\n })\r\n .catch((e) => {\r\n console.log(\"AddRelatedJaar failed: \", e);\r\n NotifyFailure(\"Toevoegen jaar \" + jaartal, \"Mislukt: \" + e.message);\r\n });\r\n}\r\n","import { deleteRecord } from \"./DeleteRecord\";\r\nimport { updateFeatures } from \"@esri/arcgis-rest-feature-layer\";\r\nimport { addPlanRelatedJaar } from \"./AddPlanRelated\";\r\nimport { NotifySuccess, NotifyFailure } from \"./Notify\";\r\n\r\nexport async function addRemoveDetailRecords(\r\n selectedPlanAttr,\r\n urltable,\r\n usersession,\r\n jaareerste,\r\n jaarlaatste,\r\n callback\r\n) {\r\n let globalid = selectedPlanAttr[window.Globalid];\r\n const params = {\r\n where: \"parent_globalid='\" + globalid + \"'\",\r\n f: \"json\",\r\n orderByFields: \"jaartal\",\r\n outFields: [\"*\"],\r\n token: usersession.token,\r\n };\r\n const paramVals = [];\r\n for (const k in params) {\r\n const val = encodeURIComponent(k) + \"=\" + encodeURIComponent(params[k]);\r\n paramVals.push(val);\r\n }\r\n const url = `${urltable}/query?${paramVals.join(\"&\")}`;\r\n const data = await fetch(url);\r\n const { features } = await data.json();\r\n\r\n //Alleen maar iets doen als er al records zijn. Het initieel aanmaken verloopt via AddPlanRelated\r\n if (features?.length > 0) {\r\n let jaren_in_db = [];\r\n for (let index = 0; index < features.length; index++) {\r\n jaren_in_db.push(features[index].attributes[\"jaartal\"]);\r\n }\r\n let jaren_volgens_eerstelaatste = [];\r\n for (let jaar = jaareerste; jaar <= jaarlaatste; jaar++) {\r\n jaren_volgens_eerstelaatste.push(parseInt(jaar));\r\n }\r\n\r\n console.log(\"JAREN IN DB: \", jaren_in_db);\r\n console.log(\"JAREN EERSTELAATSTE: \", jaren_volgens_eerstelaatste);\r\n\r\n var db_not_in_el = jaren_in_db.filter(function (i) {\r\n return this.indexOf(i) < 0;\r\n }, jaren_volgens_eerstelaatste);\r\n var el_not_in_db = jaren_volgens_eerstelaatste.filter(function (i) {\r\n return this.indexOf(i) < 0;\r\n }, jaren_in_db);\r\n\r\n //records in de database welke niet meer in de range eerste-laatste zitten (moeten worden verwijderd uit de database)\r\n console.log(\"DB not in EL (verwijderen): \", db_not_in_el);\r\n db_not_in_el.forEach((jaartal) => {\r\n deleteRecord(globalid, jaartal, urltable, usersession, callback);\r\n });\r\n\r\n //records in de range eerste-laatste welke nog niet in de database zitten (moeten worden toegevoegd in de database)\r\n console.log(\"EL not in DB (toevoegen): \", el_not_in_db);\r\n el_not_in_db.forEach((jaartal) => {\r\n addPlanRelatedJaar(\r\n selectedPlanAttr,\r\n globalid,\r\n urltable,\r\n jaartal,\r\n usersession,\r\n callback\r\n );\r\n });\r\n }\r\n}\r\n\r\nexport async function shiftDetailRecords(\r\n selectedPlanAttr,\r\n urltable,\r\n usersession,\r\n callback\r\n) {\r\n let globalid = selectedPlanAttr[window.Globalid];\r\n const params = {\r\n where: \"parent_globalid='\" + globalid + \"'\",\r\n f: \"json\",\r\n orderByFields: \"jaartal\",\r\n outFields: [\"*\"],\r\n token: usersession.token,\r\n };\r\n const paramVals = [];\r\n for (const k in params) {\r\n const val = encodeURIComponent(k) + \"=\" + encodeURIComponent(params[k]);\r\n paramVals.push(val);\r\n }\r\n const url = `${urltable}/query?${paramVals.join(\"&\")}`;\r\n const data = await fetch(url);\r\n const { features } = await data.json();\r\n\r\n //Alleen maar iets doen als er al records zijn. Het initieel aanmaken verloopt via AddPlanRelated\r\n if (features?.length > 0) {\r\n //maak een array van de records met opgehoogd jaartal\r\n let jarenToShift = [];\r\n for (let index = 0; index < features.length; index++) {\r\n var ft = {};\r\n ft = {\r\n attributes: {\r\n objectid: features[index].attributes[window.Objectid],\r\n jaartal: features[index].attributes[\"jaartal\"] + 1,\r\n },\r\n };\r\n jarenToShift.push(ft);\r\n }\r\n\r\n //stuur in 1 array alle updates door\r\n updateFeatures({\r\n url: urltable,\r\n authentication: usersession,\r\n features: jarenToShift,\r\n })\r\n .then((response) => {\r\n console.log(\"Updated feature: \", response);\r\n if (response.updateResults[0].success) {\r\n NotifySuccess(\"Wijziging\", \"Opgeslagen\");\r\n if (callback) callback();\r\n } else {\r\n NotifyFailure(\r\n \"Wijziging\",\r\n \"Opslaan mislukt: \" + response.updateResults[0].error.description\r\n );\r\n }\r\n })\r\n .catch((e) => {\r\n NotifyFailure(\"Wijziging\", \"Opslaan mislukt: \" + e.message);\r\n });\r\n }\r\n}\r\n\r\nexport async function UpdateVertrouwelijkheidDetailRecords(\r\n selectedPlanAttr,\r\n urltable,\r\n usersession\r\n) {\r\n console.log(\r\n \"Update vertrouwelijkheid detailrecords naar: \" +\r\n selectedPlanAttr[\"vertrouwelijkheid\"]\r\n );\r\n\r\n let globalid = selectedPlanAttr[window.Globalid];\r\n const params = {\r\n where: \"parent_globalid='\" + globalid + \"'\",\r\n f: \"json\",\r\n outFields: [\"*\"],\r\n token: usersession.token,\r\n };\r\n const paramVals = [];\r\n for (const k in params) {\r\n const val = encodeURIComponent(k) + \"=\" + encodeURIComponent(params[k]);\r\n paramVals.push(val);\r\n }\r\n const url = `${urltable}/query?${paramVals.join(\"&\")}`;\r\n const data = await fetch(url);\r\n const { features } = await data.json();\r\n\r\n //Alleen maar iets doen als er records zijn uiteraard.\r\n if (features?.length > 0) {\r\n //maak een array van de records met aangepaste vertrouwelijkheid\r\n let updatedFeatures = [];\r\n for (let index = 0; index < features.length; index++) {\r\n var ft = {};\r\n ft = {\r\n attributes: {\r\n objectid: features[index].attributes[window.Objectid],\r\n vertrouwelijkheid: selectedPlanAttr[\"vertrouwelijkheid\"],\r\n },\r\n };\r\n updatedFeatures.push(ft);\r\n }\r\n\r\n //stuur in 1 array alle updates door\r\n updateFeatures({\r\n url: urltable,\r\n authentication: usersession,\r\n features: updatedFeatures,\r\n })\r\n .then((response) => {\r\n if (response.updateResults[0].success) {\r\n NotifySuccess(\"Wijziging\", \"Opgeslagen\");\r\n } else {\r\n NotifyFailure(\r\n \"Wijziging\",\r\n \"Opslaan mislukt: \" + response.updateResults[0].error.description\r\n );\r\n }\r\n })\r\n .catch((e) => {\r\n NotifyFailure(\"Wijziging\", \"Opslaan mislukt: \" + e.message);\r\n });\r\n }\r\n}\r\n","import React from \"react\";\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport DialogActions from \"@material-ui/core/DialogActions\";\r\nimport DialogContent from \"@material-ui/core/DialogContent\";\r\nimport DialogContentText from \"@material-ui/core/DialogContentText\";\r\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\r\nimport Button from \"@material-ui/core/Button\";\r\n\r\nfunction ModalDialog(props) {\r\n const handleClose_true = () => {\r\n props.handleClose(true);\r\n };\r\n const handleClose_false = () => {\r\n props.handleClose(false);\r\n };\r\n\r\n return (\r\n \r\n \r\n {props.title} \r\n \r\n \r\n {props.question}\r\n \r\n \r\n \r\n \r\n Nee\r\n \r\n \r\n Ja\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default ModalDialog;\r\n","import React from \"react\";\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport DialogActions from \"@material-ui/core/DialogActions\";\r\nimport DialogContent from \"@material-ui/core/DialogContent\";\r\nimport DialogContentText from \"@material-ui/core/DialogContentText\";\r\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\r\nimport Button from \"@material-ui/core/Button\";\r\n\r\nfunction MessageBox(props) {\r\n const handleClose_true = () => {\r\n props.handleClose(true);\r\n };\r\n\r\n return (\r\n \r\n \r\n {props.title} \r\n \r\n \r\n {props.question}\r\n \r\n \r\n \r\n \r\n Sluit\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default MessageBox;\r\n","import React, { useRef, useContext, useState, useEffect } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport AppBar from \"@material-ui/core/AppBar\";\r\nimport Tabs from \"@material-ui/core/Tabs\";\r\nimport Tab from \"@material-ui/core/Tab\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport { AppContext } from \"./AppContext\";\r\nimport { updateFeatureAttr } from \"./UpdateFeatureAttr\";\r\nimport { NotifyFailure } from \"./Notify\";\r\nimport {\r\n addRemoveDetailRecords,\r\n shiftDetailRecords,\r\n UpdateVertrouwelijkheidDetailRecords,\r\n} from \"./UpdateDetailRecords\";\r\nimport HelpOutlineIcon from \"@material-ui/icons/HelpOutline\";\r\nimport ModalDialog from \"./ModalDialog\";\r\nimport Link from \"@material-ui/core/Link\";\r\nimport MessageBox from \"./MessageBox\";\r\nimport DatePicker from \"react-datepicker\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { registerLocale, setDefaultLocale } from \"react-datepicker\";\r\nimport nl from \"date-fns/locale/nl\";\r\nregisterLocale(\"nl\", nl);\r\n\r\nfunction TabPanel(props) {\r\n const { children, value, index, ...other } = props;\r\n\r\n return (\r\n \r\n {value === index && (\r\n \r\n {children} \r\n \r\n )}\r\n
\r\n );\r\n}\r\n\r\nTabPanel.propTypes = {\r\n children: PropTypes.node,\r\n index: PropTypes.any.isRequired,\r\n value: PropTypes.any.isRequired,\r\n};\r\n\r\nfunction a11yProps(index) {\r\n return {\r\n id: `simple-tab-${index}`,\r\n \"aria-controls\": `simple-tabpanel-${index}`,\r\n };\r\n}\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n backgroundColor: theme.palette.background.paper,\r\n },\r\n}));\r\n\r\nexport default function EditPlanGegevens(props) {\r\n const {\r\n ctxSelectedPlan,\r\n ctxSetSelectedPlan,\r\n ctxFeaturelayerUrl,\r\n ctxDetailTableUrl,\r\n ctxUserSession,\r\n ctxPlannenFields,\r\n ctxSetDetailRecordsValid,\r\n ctxPlaatsnamen,\r\n } = useContext(AppContext);\r\n\r\n const viewMode = useRef(props.viewmode);\r\n const classes = useStyles();\r\n const [value, setValue] = useState(0);\r\n const [infoTotaal, setInfoTotaal] = useState(props.totalen);\r\n const refOnFocus = useRef([]);\r\n const [openModal, setOpenModal] = React.useState(false);\r\n const [openMessageBox, setOpenMessageBox] = React.useState(false);\r\n const [openMessageBoxTekst, setOpenMessageBoxTekst] = React.useState(\"\");\r\n const [openMessageBoxTitel, setOpenMessageBoxTitel] = React.useState(\"\");\r\n const [dateFields, setDateFields] = React.useState(null);\r\n\r\n useEffect(() => {\r\n console.log(\"EditPlanGegevens: infoTotaal gewijzigd \", infoTotaal);\r\n }, [infoTotaal]);\r\n\r\n const handleChange = (event, newValue) => {\r\n setValue(newValue);\r\n };\r\n\r\n const onChange = (evt) => {\r\n var pattern = new RegExp(evt.target.pattern);\r\n if (!pattern.test(evt.target.value)) {\r\n evt.target.style.backgroundColor = \"#ff000036\";\r\n } else {\r\n evt.target.style.backgroundColor = \"\";\r\n }\r\n };\r\n\r\n const onBlur = (evt) => {\r\n var pattern = new RegExp(evt.target.pattern);\r\n if (!pattern.test(evt.target.value)) {\r\n // NotifyFailure(\"Ongeldige invoer\", \"evt.target.title\");\r\n NotifyFailure(\"Ongeldige invoer\", \"Ongeldige invoer\");\r\n return;\r\n }\r\n\r\n if (\r\n evt.target.id == refOnFocus.current[0] &&\r\n evt.target.value != refOnFocus.current[1]\r\n ) {\r\n console.log(\r\n \"Value changed: \" + evt.target.id + \" Value: \" + evt.target.value\r\n );\r\n\r\n //Controles\r\n if (evt.target.id == \"oplevering_eerste\") {\r\n if (\r\n isNaN(parseInt(evt.target.value)) ||\r\n evt.target.value < 1950 ||\r\n evt.target.value > 2100\r\n ) {\r\n NotifyFailure(\"\", \"Ongeldig jaartal ingevoerd\");\r\n evt.target.value = refOnFocus.current[1];\r\n return;\r\n }\r\n if (\r\n evt.target.value > ctxSelectedPlan.attributes[\"oplevering_laatste\"] &&\r\n ctxSelectedPlan.attributes[\"oplevering_laatste\"] != undefined &&\r\n ctxSelectedPlan.attributes[\"oplevering_laatste\"] != \"\"\r\n ) {\r\n NotifyFailure(\r\n \"\",\r\n \"Jaartal laatste moet groter of gelijk jaartal eerste zijn.\"\r\n );\r\n evt.target.value = refOnFocus.current[1];\r\n return;\r\n }\r\n }\r\n if (evt.target.id == \"oplevering_laatste\") {\r\n if (\r\n isNaN(parseInt(evt.target.value)) ||\r\n evt.target.value < 1950 ||\r\n evt.target.value > 2100\r\n ) {\r\n NotifyFailure(\"\", \"Ongeldig jaartal ingevoerd\");\r\n evt.target.value = refOnFocus.current[1];\r\n return;\r\n }\r\n if (\r\n ctxSelectedPlan.attributes[\"oplevering_eerste\"] > evt.target.value &&\r\n ctxSelectedPlan.attributes[\"oplevering_eerste\"] != undefined &&\r\n ctxSelectedPlan.attributes[\"oplevering_eerste\"] != \"\"\r\n ) {\r\n NotifyFailure(\r\n \"\",\r\n \"Jaartal laatste moet groter of gelijk jaartal eerste zijn.\"\r\n );\r\n evt.target.value = refOnFocus.current[1];\r\n return;\r\n }\r\n }\r\n\r\n if (viewMode.current === \"View\") {\r\n alert(\"Viewmode\");\r\n return;\r\n }\r\n\r\n //Update de waarde in de database\r\n updateFeatureAttr(\r\n ctxFeaturelayerUrl,\r\n ctxSelectedPlan.attributes[window.Objectid],\r\n evt.target.id,\r\n evt.target.value,\r\n ctxUserSession\r\n );\r\n ctxSelectedPlan.attributes[evt.target.id] = evt.target.value;\r\n ctxSetSelectedPlan(ctxSelectedPlan);\r\n\r\n //Controleren of de looptijd van het plan veranderd is\r\n if (\r\n evt.target.id == \"oplevering_eerste\" ||\r\n evt.target.id == \"oplevering_laatste\"\r\n ) {\r\n //in dit geval veranderd dus de looptijd van het plan.\r\n //Er moeten jaren bij, of jaren af\r\n addRemoveDetailRecords(\r\n ctxSelectedPlan.attributes,\r\n ctxDetailTableUrl,\r\n ctxUserSession,\r\n ctxSelectedPlan.attributes[\"oplevering_eerste\"],\r\n ctxSelectedPlan.attributes[\"oplevering_laatste\"],\r\n callbackSetInvalid\r\n );\r\n } //else ctxSetDetailRecordsValid(false);\r\n }\r\n };\r\n\r\n //om te zorgen dat de detailrecords vernieuwd worden omdat oplevering_eerste of laatste veranderd is\r\n const callbackSetInvalid = () => {\r\n console.log(\"Callback ctxSetDetailRecordsValid\");\r\n ctxSetDetailRecordsValid(false);\r\n };\r\n\r\n const onFocus = (evt) => {\r\n refOnFocus.current = [evt.target.id, evt.target.value];\r\n };\r\n\r\n const handleChangeSelect = (evt) => {\r\n if (viewMode.current === \"View\") {\r\n return;\r\n }\r\n console.log(\r\n \"Value changed: \" + evt.target.id + \" Value: \" + evt.target.value\r\n );\r\n updateFeatureAttr(\r\n ctxFeaturelayerUrl,\r\n ctxSelectedPlan.attributes[window.Objectid],\r\n evt.target.id,\r\n evt.target.value,\r\n ctxUserSession\r\n );\r\n ctxSelectedPlan.attributes[evt.target.id] = evt.target.value;\r\n ctxSetSelectedPlan(ctxSelectedPlan);\r\n\r\n //indien de vertrouwelijkeheid veranderd, dan moet ook de vertrouwelijkheid van de detailrecords aangepast worden\r\n if (evt.target.id === \"vertrouwelijkheid\") {\r\n UpdateVertrouwelijkheidDetailRecords(\r\n ctxSelectedPlan.attributes,\r\n ctxDetailTableUrl,\r\n ctxUserSession\r\n );\r\n }\r\n };\r\n\r\n const callbackUpdated = (objid, fieldname, value) => {\r\n ctxSelectedPlan.attributes[fieldname] = value;\r\n ctxSetSelectedPlan(ctxSelectedPlan);\r\n setDateFields(value);\r\n };\r\n\r\n const handleDateChange = (date, id) => {\r\n if (viewMode.current === \"View\") {\r\n return;\r\n }\r\n updateFeatureAttr(\r\n ctxFeaturelayerUrl,\r\n ctxSelectedPlan.attributes[window.Objectid],\r\n id,\r\n date,\r\n ctxUserSession,\r\n callbackUpdated\r\n );\r\n };\r\n\r\n function getField(fieldname) {\r\n for (var i = 0; i < ctxPlannenFields.length; i++) {\r\n if (ctxPlannenFields[i].name === fieldname) return ctxPlannenFields[i];\r\n }\r\n return null;\r\n }\r\n\r\n const Domain = (props) => {\r\n var domein = props.domain.slice();\r\n\r\n //Als het veld 'woonplaats' is, dan krijgt wordt de dropdown gevuld met woonplaatsen\r\n //Op basis van de Gemeentenaam zijn die woonplaatsen al eerder opgehaald\r\n if (props.id === \"woonplaats\") {\r\n console.log(ctxPlaatsnamen);\r\n if (ctxPlaatsnamen === null) domein = [];\r\n else domein = [...ctxPlaatsnamen];\r\n }\r\n\r\n //lege waarde aan de array toekennen zodat die gekozen kan worden als de value==\"\"\r\n let cv = {};\r\n cv[\"code\"] = \"\";\r\n cv[\"name\"] = \"\";\r\n domein.push(cv);\r\n\r\n //use == instead of ===\r\n //otherwise null is not the same as undefined\r\n let value = props.value == undefined ? \"\" : props.value;\r\n return domein.map((codedValue) => {\r\n return (\r\n \r\n {codedValue.name}\r\n \r\n );\r\n });\r\n };\r\n\r\n const DropDown = (props) => {\r\n var editable = props.editable;\r\n if (viewMode.current === \"View\") {\r\n editable = false;\r\n }\r\n return (\r\n \r\n
\r\n {props.alias}\r\n \r\n {props.tooltip !== undefined && props.tooltip !== \"\" ? (\r\n
\r\n tooltipEnter(e, props.tooltip, props.field)\r\n }\r\n onMouseLeave={(e) => tooltipLeave(e, props.field)}\r\n fontSize=\"small\"\r\n color=\"primary\"\r\n style={{ fontSize: \"0.75rem\" }}\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 const DatumVeld = (props) => {\r\n var editable = props.editable;\r\n if (viewMode.current === \"View\") {\r\n editable = false;\r\n }\r\n return (\r\n \r\n
\r\n {props.alias}\r\n \r\n {props.tooltip !== undefined && props.tooltip !== \"\" ? (\r\n
\r\n tooltipEnter(e, props.tooltip, props.field)\r\n }\r\n onMouseLeave={(e) => tooltipLeave(e, props.field)}\r\n fontSize=\"small\"\r\n color=\"primary\"\r\n style={{ fontSize: \"0.75rem\" }}\r\n > \r\n ) : (\r\n
\r\n )}\r\n
\r\n \r\n
\r\n handleDateChange(date, props.id)}\r\n />\r\n
\r\n
\r\n );\r\n };\r\n\r\n function tooltipLeave(e, veldnaam) {\r\n if (document.getElementById(\"tooltip_\" + veldnaam)) {\r\n var div = document.getElementById(\"tooltip_\" + veldnaam);\r\n div.parentNode.removeChild(div);\r\n }\r\n return false;\r\n }\r\n function tooltipEnter(e, tekst, veldnaam) {\r\n var div = document.createElement(\"div\");\r\n div.className = \"customtooltipdiv\";\r\n div.style.backgroundColor = window.Color;\r\n div.style.left = e.clientX + \"px\";\r\n div.style.top = e.clientY + \"px\";\r\n div.innerHTML = tekst;\r\n div.id = \"tooltip_\" + veldnaam;\r\n document.getElementsByTagName(\"body\")[0].appendChild(div);\r\n return false;\r\n }\r\n\r\n const TekstVeldMetLabel = (props) => {\r\n var editable = props.editable;\r\n if (viewMode.current === \"View\") {\r\n editable = false;\r\n }\r\n if (props.multiline) {\r\n return (\r\n \r\n
\r\n {props.alias}\r\n \r\n {props.tooltip != undefined && props.tooltip != \"\" ? (\r\n
\r\n tooltipEnter(e, props.tooltip, props.field)\r\n }\r\n onMouseLeave={(e) => tooltipLeave(e, props.field)}\r\n fontSize=\"small\"\r\n color=\"primary\"\r\n style={{ fontSize: \"0.75rem\" }}\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 {props.alias}\r\n \r\n {props.tooltip != undefined && props.tooltip != \"\" ? (\r\n
\r\n tooltipEnter(e, props.tooltip, props.field)\r\n }\r\n onMouseLeave={(e) => tooltipLeave(e, props.field)}\r\n fontSize=\"small\"\r\n color=\"primary\"\r\n style={{ fontSize: \"0.75rem\" }}\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 const getPattern = (type) => {\r\n switch (type) {\r\n case \"small-integer\":\r\n return \"^[0-9]*$|^$\";\r\n case \"string\":\r\n return \"\";\r\n case \"double\":\r\n return \"^[0-9]+([.,][0-9]{1,3})?$|^$\";\r\n default:\r\n return \"\";\r\n }\r\n };\r\n const getType = (type) => {\r\n switch (type) {\r\n case \"small-integer\":\r\n return \"number\";\r\n case \"string\":\r\n return \"text\";\r\n case \"double\":\r\n return \"number\";\r\n default:\r\n return \"text\";\r\n }\r\n };\r\n const getErrorMessage = (type) => {\r\n switch (type) {\r\n case \"small-integer\":\r\n return \"Vul hier een heel getal in\";\r\n case \"string\":\r\n return \"Vul hier een tekst in\";\r\n case \"double\":\r\n return \"Vul hier een getal in, evt. met decimalen\";\r\n case \"date\":\r\n return \"Vul hier een datum in\";\r\n default:\r\n return \"\";\r\n }\r\n };\r\n\r\n const PlanAttributen = (propsdetail) => {\r\n if (propsdetail.categorie == \"\") return
;\r\n\r\n let velden = propsdetail.categorie.split(\",\");\r\n return velden.map((veld_in_config) => {\r\n veld_in_config = veld_in_config.trim();\r\n if (veld_in_config == \"\") return
;\r\n\r\n var waarde = \"\";\r\n if (\r\n ctxSelectedPlan !== null &&\r\n ctxSelectedPlan.attributes[veld_in_config] !== undefined &&\r\n veld_in_config != \"\"\r\n ) {\r\n waarde = ctxSelectedPlan.attributes[veld_in_config];\r\n }\r\n var field = getField(veld_in_config);\r\n if (field === null) {\r\n //Veld komt blijkbaar niet voor in het view, melden, want foute configuratie\r\n //alert(\"EditPlangegevens-field not found in view: \" + veld_in_config);\r\n return
;\r\n }\r\n if (field.type == \"date\") {\r\n setDateFields(waarde);\r\n }\r\n //gemeente, regio en provincie zijn domainvelden, maar de inhoud ligt vast, dus geen dropdown van maken\r\n //daarnaast worden ze ook readonly gezet.\r\n if (\r\n veld_in_config !== \"gemeente\" &&\r\n veld_in_config !== \"regio\" &&\r\n veld_in_config !== \"provincie\" &&\r\n field.domain !== null\r\n ) {\r\n return (\r\n \r\n );\r\n } else if (field.type == \"date\") {\r\n return (\r\n \r\n );\r\n } else {\r\n return (\r\n \r\n );\r\n }\r\n });\r\n };\r\n\r\n const veldIsMultiline = (veld_in_config) => {\r\n if (window.multiline_fields.includes(veld_in_config)) return true;\r\n return false;\r\n };\r\n\r\n const controleerGegevens = () => {\r\n console.log(\"Controleer gegevens: \", window.VerplichteVelden);\r\n var verplichtevelden = window.VerplichteVelden.split(\",\");\r\n if (verplichtevelden.length === 0) return;\r\n var tekst = \"De volgende velden moeten nog gevuld worden: \";\r\n for (let index = 0; index < verplichtevelden.length; index++) {\r\n const veldnaam = verplichtevelden[index].trim();\r\n if (\r\n ctxSelectedPlan.attributes[veldnaam] === \"\" ||\r\n ctxSelectedPlan.attributes[veldnaam] === undefined ||\r\n ctxSelectedPlan.attributes[veldnaam] === null\r\n ) {\r\n //alias ophalen om te tonen aan gebruiker\r\n var field = getField(veldnaam);\r\n if (field === null) tekst = tekst + \" \" + veldnaam;\r\n else tekst = tekst + \" \" + field.alias + \" , \";\r\n }\r\n }\r\n setOpenMessageBoxTitel(\"Verplichte velden\");\r\n setOpenMessageBoxTekst(tekst);\r\n setOpenMessageBox(true);\r\n };\r\n\r\n const getTooltip = (fieldname) => {\r\n // console.log(\"GET TOOLTIP: \" + fieldname);\r\n let tooltiptext = \"\";\r\n window.Tooltips.forEach((tooltipitem) => {\r\n if (fieldname == tooltipitem.field) {\r\n tooltiptext = tooltipitem.text;\r\n }\r\n });\r\n return tooltiptext;\r\n };\r\n\r\n const responseMessageBox = (value) => {\r\n setOpenMessageBox(false);\r\n };\r\n\r\n const responseModalDialog = (value) => {\r\n console.log(\"Planning doorschuiven: \", value);\r\n setOpenModal(false);\r\n if (value) {\r\n var eerste = parseInt(ctxSelectedPlan.attributes[\"oplevering_eerste\"]);\r\n var laatste = parseInt(ctxSelectedPlan.attributes[\"oplevering_laatste\"]);\r\n if (isNaN(eerste) || isNaN(laatste)) {\r\n setOpenMessageBoxTitel(\"Planning doorschuiven\");\r\n setOpenMessageBoxTekst(\r\n \"Het doorschuiven van de planning is niet mogelijk.\"\r\n );\r\n setOpenMessageBox(true);\r\n return;\r\n } else {\r\n ctxSelectedPlan.attributes[\"oplevering_eerste\"] = eerste + 1;\r\n ctxSelectedPlan.attributes[\"oplevering_laatste\"] = laatste + 1;\r\n //Update de eerste en laatste oplevering in de database\r\n updateFeatureAttr(\r\n ctxFeaturelayerUrl,\r\n ctxSelectedPlan.attributes[window.Objectid],\r\n \"oplevering_eerste\",\r\n eerste + 1,\r\n ctxUserSession\r\n );\r\n updateFeatureAttr(\r\n ctxFeaturelayerUrl,\r\n ctxSelectedPlan.attributes[window.Objectid],\r\n \"oplevering_laatste\",\r\n laatste + 1,\r\n ctxUserSession\r\n );\r\n\r\n shiftDetailRecords(\r\n ctxSelectedPlan.attributes,\r\n ctxDetailTableUrl,\r\n ctxUserSession,\r\n callbackSetInvalid\r\n );\r\n }\r\n }\r\n };\r\n\r\n const PlanningDoorschuiven = () => {\r\n var eerste = parseInt(ctxSelectedPlan.attributes[\"oplevering_eerste\"]);\r\n var laatste = parseInt(ctxSelectedPlan.attributes[\"oplevering_laatste\"]);\r\n if (isNaN(eerste) || isNaN(laatste)) {\r\n setOpenMessageBoxTitel(\"Planning doorschuiven\");\r\n setOpenMessageBoxTekst(\r\n \"Het doorschuiven van de planning is niet mogelijk.\"\r\n );\r\n setOpenMessageBox(true);\r\n return;\r\n } else setOpenModal(true);\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 \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 Verschuif planning 1 jaar vooruit\r\n \r\n \r\n Controleer gegevens\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 Controleer gegevens\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 Controleer gegevens\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 Controleer gegevens\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n","import React, { useState, useEffect, useRef, useContext } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Tabs from \"@material-ui/core/Tabs\";\r\nimport Tab from \"@material-ui/core/Tab\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport JSONDetailvelden from \"./config/config_detail.json\";\r\nimport \"./App.css\";\r\nimport { AppContext } from \"./AppContext\";\r\nimport { updateFeatureAttr } from \"./UpdateFeatureAttr\";\r\nimport { NotifyFailure } from \"./Notify\";\r\n\r\nfunction TabPanel(props) {\r\n const { children, value, index, ...other } = props;\r\n\r\n return (\r\n \r\n {value === index && (\r\n \r\n {children} \r\n \r\n )}\r\n
\r\n );\r\n}\r\n\r\nTabPanel.propTypes = {\r\n children: PropTypes.node,\r\n index: PropTypes.any.isRequired,\r\n value: PropTypes.any.isRequired,\r\n};\r\n\r\nfunction a11yProps(index) {\r\n return {\r\n id: `vertical-tab-${index}`,\r\n \"aria-controls\": `vertical-tabpanel-${index}`,\r\n };\r\n}\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n backgroundColor: theme.palette.background.paper,\r\n display: \"flex\",\r\n height: 224,\r\n },\r\n tabs: {\r\n borderRight: `1px solid ${theme.palette.divider}`,\r\n },\r\n}));\r\n\r\n//Categorie kan zijn: Eengezins, Meergezins, Onbekend, Sloop-Eengezins, Sloop-Meergezins, Sloop-Onbekend\r\n//Binnen iedere categorie zijn er 3 types: Koop, Huur, Onbekend\r\n//EditDetailEigendom is op het niveau Categorie-Type. Dus bv Meergezins-Koop\r\n//JSONDetailVelden is een array met objecten waarin alle velden per Categorie en Type opgenomen zijn\r\n//Omdat we de Categorie en het Type weten, krijgen we een array met velden die getoond moeten worden\r\n//In geval van Meergezins-Koop zou dat deze 5 velden zijn: \"meergezins_koop1\", \"meergezins_koop2\", ... , \"meergezins_koop_onb\"\r\n//De detailplanning van een plan kan 0, 1 of meer jaren bevatten. Voor ieder jaar tonen we de velden met de waarde\r\n\r\nexport default function EditDetailEigendom(props) {\r\n const classes = useStyles();\r\n const [valueTabIndex, setValueTabIndex] = useState(props.verticaltabindex);\r\n const { detailrecords, categorie, detailfields, optellingen } = props;\r\n const refOnFocus = useRef([]);\r\n const refObjIDOnFocus = useRef(0);\r\n\r\n const viewMode = useRef(props.viewmode);\r\n\r\n const { ctxUserSession, ctxDetailTableUrl, ctxSetDetailRecordsValid } =\r\n useContext(AppContext);\r\n\r\n useEffect(() => {\r\n console.log(\"USEEFFECT: categorie\");\r\n }, [categorie, detailrecords]);\r\n\r\n const handleChange = (event, newValue) => {\r\n setValueTabIndex(newValue);\r\n props.verticaltabindexchange(newValue);\r\n };\r\n\r\n const callbackUpdated = (objid, fieldname, value) => {\r\n console.log(\"Callback updateFeatureAttr: \", objid);\r\n for (let index = 0; index < detailrecords.length; index++) {\r\n //zoek de juiste row op\r\n //let op:geen === gebruiken hier (of conversie naar gelijke types eerst)\r\n if (detailrecords[index].attributes[window.Objectid] == objid) {\r\n //juiste row gevonden: pas nu het gewijzigde veld aan\r\n detailrecords[index].attributes[fieldname] = value;\r\n break;\r\n }\r\n }\r\n };\r\n\r\n const onChange = (evt) => {\r\n var pattern = new RegExp(evt.target.pattern);\r\n if (!pattern.test(evt.target.value)) {\r\n evt.target.style.backgroundColor = \"#ff000036\";\r\n } else {\r\n evt.target.style.backgroundColor = \"\";\r\n }\r\n };\r\n\r\n const onBlur = (evt) => {\r\n var pattern = new RegExp(evt.target.pattern);\r\n if (!pattern.test(evt.target.value)) {\r\n NotifyFailure(\r\n \"\",\r\n \"Ongeldig getal ingevoerd (alleen hele getallen toegestaan)\"\r\n );\r\n evt.target.value = refOnFocus.current[1];\r\n evt.target.style.backgroundColor = \"\";\r\n return;\r\n } else {\r\n evt.target.style.backgroundColor = \"\";\r\n }\r\n\r\n if (\r\n evt.target.id === refOnFocus.current[0] &&\r\n evt.target.value !== refOnFocus.current[1]\r\n ) {\r\n if (evt.target.value !== \"\" && isNaN(parseInt(evt.target.value))) {\r\n NotifyFailure(\r\n \"\",\r\n \"Ongeldig getal ingevoerd (alleen hele getallen toegestaan)\"\r\n );\r\n evt.target.value = refOnFocus.current[1];\r\n return;\r\n }\r\n\r\n console.log(\r\n \"OBJECTID:\" +\r\n refObjIDOnFocus.current +\r\n \" Value changed: \" +\r\n evt.target.id +\r\n \" Value: \" +\r\n evt.target.value\r\n );\r\n if (evt.target.id.toLowerCase().includes(\"sloop\")) {\r\n if (evt.target.value > 0) {\r\n evt.target.value = evt.target.value * -1;\r\n }\r\n }\r\n if (viewMode.current === \"View\") {\r\n alert(\"Viewmode\");\r\n return;\r\n }\r\n updateFeatureAttr(\r\n ctxDetailTableUrl,\r\n refObjIDOnFocus.current,\r\n evt.target.id,\r\n evt.target.value,\r\n ctxUserSession,\r\n callbackUpdated\r\n );\r\n }\r\n };\r\n\r\n const onFocus = (evt) => {\r\n refOnFocus.current = [evt.target.id, evt.target.value];\r\n console.log(evt.target.parentNode.parentNode.id);\r\n //Hier als extra het objectid van de huidige row ophalen en bewaren\r\n //Die gebruiken we later om een evt. update te doen\r\n refObjIDOnFocus.current = evt.target.parentNode.parentNode.id;\r\n };\r\n\r\n const onChangeDropdown = (evt) => {\r\n if (viewMode.current === \"View\") {\r\n return;\r\n }\r\n console.log(evt.target.parentNode.parentNode.id);\r\n refObjIDOnFocus.current = evt.target.parentNode.parentNode.id;\r\n updateFeatureAttr(\r\n ctxDetailTableUrl,\r\n refObjIDOnFocus.current,\r\n evt.target.id,\r\n evt.target.value,\r\n ctxUserSession,\r\n callbackUpdated\r\n );\r\n };\r\n\r\n const TekstVeld = (props) => {\r\n var editable = true;\r\n if (viewMode.current === \"View\") editable = false;\r\n return (\r\n \r\n );\r\n };\r\n\r\n const CustomDropdown = (props) => {\r\n var editable = true;\r\n if (viewMode.current === \"View\") editable = false;\r\n return (\r\n \r\n {/*using \"selected\" creates a warning, but only then this works properly*/}\r\n \r\n Nee\r\n \r\n \r\n Ja\r\n \r\n \r\n );\r\n };\r\n\r\n const TableRows = (props) => {\r\n return detailrecords.map((jaarrecord, index) => {\r\n return (\r\n \r\n \r\n {jaarrecord.attributes[\"jaartal\"]}\r\n \r\n \r\n {categorie.includes(\"Sloop\") ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n {JSONDetailvelden[0][categorie][props.type].map((veld, index) => {\r\n const alias = getFieldAlias(veld);\r\n if (alias !== null) {\r\n return (\r\n \r\n \r\n \r\n );\r\n } else {\r\n return ;\r\n }\r\n })}\r\n \r\n );\r\n });\r\n };\r\n\r\n function getFieldAlias(fieldname) {\r\n if (\r\n detailfields === null ||\r\n detailfields === undefined ||\r\n detailfields.length === 0\r\n ) {\r\n return fieldname;\r\n }\r\n\r\n for (var i = 0; i < detailfields[0].length; i++) {\r\n if (detailfields[0][i].name === fieldname) {\r\n return detailfields[0][i].alias;\r\n }\r\n }\r\n\r\n // Retrun null, no alias found, this means the field isn't available in the view.\r\n return null;\r\n }\r\n\r\n const TableHeader = (props) => {\r\n return (\r\n \r\n \r\n Jaar\r\n \r\n \r\n Gerealiseerd\r\n \r\n {JSONDetailvelden[0][categorie][props.type].map((veld, index) => {\r\n const alias = getFieldAlias(veld);\r\n if (alias != null) {\r\n return (\r\n \r\n {alias}\r\n \r\n );\r\n } else {\r\n return ;\r\n }\r\n })}\r\n \r\n );\r\n };\r\n\r\n const reCalculate = () => {\r\n ctxSetDetailRecordsValid(false);\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
reCalculate()}\r\n alt=\"calculator\"\r\n />\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
{\" \"}\r\n
\r\n
reCalculate()}\r\n alt=\"calculator\"\r\n />\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
{\" \"}\r\n
\r\n
reCalculate()}\r\n alt=\"calculator\"\r\n />\r\n
\r\n
\r\n
\r\n \r\n
\r\n );\r\n}\r\n","export async function getDetailRecords(selectedPlan, urltable, token) {\r\n let globalid = selectedPlan[window.Globalid];\r\n const params = {\r\n where: \"parent_globalid='\" + globalid + \"'\",\r\n f: \"json\",\r\n orderByFields: \"jaartal\",\r\n outFields: [\"*\"],\r\n token: token,\r\n };\r\n const paramVals = [];\r\n for (const k in params) {\r\n const val = encodeURIComponent(k) + \"=\" + encodeURIComponent(params[k]);\r\n paramVals.push(val);\r\n }\r\n const url = `${urltable}/query?${paramVals.join(\"&\")}`;\r\n const data = await fetch(url);\r\n const { fields, features } = await data.json();\r\n return [fields, features];\r\n}\r\n","import React, { useEffect, useContext, useRef, useState } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport AppBar from \"@material-ui/core/AppBar\";\r\nimport Tabs from \"@material-ui/core/Tabs\";\r\nimport Tab from \"@material-ui/core/Tab\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport EditDetailEigendom from \"./EditDetailEigendom\";\r\nimport { getDetailRecords } from \"./GetDetailRecords\";\r\nimport { AppContext } from \"./AppContext\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport { addPlanRelated } from \"./AddPlanRelated\";\r\n\r\nfunction TabPanel(props) {\r\n const { children, value, index, ...other } = props;\r\n\r\n return (\r\n \r\n {value === index && (\r\n \r\n {children} \r\n \r\n )}\r\n
\r\n );\r\n}\r\n\r\nTabPanel.propTypes = {\r\n children: PropTypes.node,\r\n index: PropTypes.any.isRequired,\r\n value: PropTypes.any.isRequired,\r\n};\r\n\r\nfunction a11yProps(index) {\r\n return {\r\n id: `simple-tab-${index}`,\r\n \"aria-controls\": `simple-tabpanel-${index}`,\r\n };\r\n}\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n backgroundColor: theme.palette.background.paper,\r\n },\r\n}));\r\n\r\nexport default function EditDetailGegevens(props) {\r\n const {\r\n ctxSelectedPlan,\r\n ctxDetailTableUrl,\r\n ctxUserSession,\r\n ctxDetailRecordsValid,\r\n ctxSetDetailRecordsValid,\r\n } = useContext(AppContext);\r\n\r\n const viewMode = useRef(props.viewmode);\r\n\r\n const classes = useStyles();\r\n const [value, setValue] = React.useState(0);\r\n const [detailRecords, setDetailRecords] = React.useState(null);\r\n const [detailFields, setDetailFields] = React.useState(null);\r\n //voor te onthouden welke verticale tab geselecteerd is zodat bij wisselen Categorie, dezelfde verticale tab geselecteerd blijft\r\n const [verticalTabIndex, setVerticalTabIndex] = React.useState(0);\r\n\r\n const refPlancapaciteit = useRef(0);\r\n const refButton = useRef(0);\r\n\r\n const handleChangeTab = (event, newValue) => {\r\n setValue(newValue);\r\n };\r\n\r\n const handleVerticalTabIndex = (index) => {\r\n setVerticalTabIndex(index);\r\n };\r\n\r\n const getDetailInfo = () => {\r\n console.log(\"getDetailInfo\");\r\n getDetailRecords(\r\n ctxSelectedPlan.attributes,\r\n ctxDetailTableUrl,\r\n ctxUserSession.token\r\n ).then(([fields, features]) => {\r\n console.log(\"[EditDetailGegevens]-Detailrecords opnieuw opgehaald\");\r\n setDetailRecords(features);\r\n if (fields !== undefined) setDetailFields([fields]);\r\n ctxSetDetailRecordsValid(true);\r\n });\r\n };\r\n\r\n const onError = () => {\r\n refButton.current.style.display = \"inline-flex\";\r\n };\r\n\r\n const onClickGenereer = () => {\r\n refButton.current.style.display = \"none\";\r\n addPlanRelated(\r\n ctxUserSession,\r\n ctxSelectedPlan.attributes,\r\n ctxDetailTableUrl,\r\n refPlancapaciteit.current,\r\n getDetailInfo,\r\n onError\r\n );\r\n };\r\n\r\n useEffect(() => {\r\n calcTotalen();\r\n }, [detailRecords]);\r\n\r\n useEffect(() => {\r\n console.log(\"USEEFFECT: ctxDetailTableUrl,ctxSelectedPlan\");\r\n getDetailInfo();\r\n }, [ctxDetailTableUrl, ctxSelectedPlan]);\r\n\r\n useEffect(() => {\r\n console.log(\"USEEFFECT: ctxDetailRecordsValid\");\r\n if (!ctxDetailRecordsValid) {\r\n console.log(\"Detailrecords not valid\");\r\n getDetailInfo();\r\n }\r\n }, [ctxDetailRecordsValid]);\r\n\r\n //Optellingen\r\n const [optellingen, setOptellingen] = useState([]);\r\n useEffect(() => {\r\n let newOptellingen = [];\r\n newOptellingen[\"Eengezins\"] = [0, 0, 0, 0];\r\n newOptellingen[\"Meergezins\"] = [0, 0, 0, 0];\r\n newOptellingen[\"Onbekend\"] = [0, 0, 0, 0];\r\n newOptellingen[\"Sloop-Eengezins\"] = [0, 0, 0, 0];\r\n newOptellingen[\"Sloop-Meergezins\"] = [0, 0, 0, 0];\r\n newOptellingen[\"Sloop-Onbekend\"] = [0, 0, 0, 0];\r\n setOptellingen(newOptellingen);\r\n }, []);\r\n\r\n const calcTotalen = () => {\r\n if (detailRecords) {\r\n console.log(\"Totalen Berekening\");\r\n let eengezins = 0;\r\n let eengezins_k = 0;\r\n let eengezins_h = 0;\r\n let eengezins_o = 0;\r\n let meergezins = 0;\r\n let meergezins_k = 0;\r\n let meergezins_h = 0;\r\n let meergezins_o = 0;\r\n let onbekend = 0;\r\n let onbekend_k = 0;\r\n let onbekend_h = 0;\r\n let onbekend_o = 0;\r\n let sloop_eengezins = 0;\r\n let sloop_eengezins_k = 0;\r\n let sloop_eengezins_h = 0;\r\n let sloop_eengezins_o = 0;\r\n let sloop_meergezins = 0;\r\n let sloop_meergezins_k = 0;\r\n let sloop_meergezins_h = 0;\r\n let sloop_meergezins_o = 0;\r\n let sloop_onbekend = 0;\r\n let sloop_onbekend_k = 0;\r\n let sloop_onbekend_h = 0;\r\n let sloop_onbekend_o = 0;\r\n\r\n let gerealiseerd_bouw = {};\r\n let gerealiseerd_sloop = {};\r\n let resterend_bouw = {};\r\n let resterend_sloop = {};\r\n\r\n detailRecords.forEach((record) => {\r\n console.log(record);\r\n //Initialiseren voor ieder jaar\r\n if (!(record.attributes[\"jaartal\"] in gerealiseerd_bouw))\r\n gerealiseerd_bouw[record.attributes[\"jaartal\"]] = 0;\r\n if (!(record.attributes[\"jaartal\"] in gerealiseerd_sloop))\r\n gerealiseerd_sloop[record.attributes[\"jaartal\"]] = 0;\r\n if (!(record.attributes[\"jaartal\"] in resterend_bouw))\r\n resterend_bouw[record.attributes[\"jaartal\"]] = 0;\r\n if (!(record.attributes[\"jaartal\"] in resterend_sloop))\r\n resterend_sloop[record.attributes[\"jaartal\"]] = 0;\r\n\r\n for (const [key, value] of Object.entries(record.attributes)) {\r\n //Eengezins\r\n if (key.toLowerCase().startsWith(\"eengezins\")) {\r\n let parsedvalue = parseInt(value);\r\n if (isNaN(parsedvalue)) continue;\r\n eengezins += parsedvalue;\r\n\r\n if (record.attributes[\"bouw_gerealiseerd\"] === \"Ja\")\r\n gerealiseerd_bouw[record.attributes[\"jaartal\"]] += parsedvalue;\r\n else resterend_bouw[record.attributes[\"jaartal\"]] += parsedvalue;\r\n if (key.toLowerCase().startsWith(\"eengezins_koop\")) {\r\n eengezins_k += parsedvalue;\r\n }\r\n if (key.toLowerCase().startsWith(\"eengezins_huur\")) {\r\n eengezins_h += parsedvalue;\r\n }\r\n if (key.toLowerCase().startsWith(\"eengezins_onbekend\")) {\r\n eengezins_o += parsedvalue;\r\n }\r\n }\r\n\r\n //Meergezins\r\n if (key.toLowerCase().startsWith(\"meergezins\")) {\r\n let parsedvalue = parseInt(value);\r\n if (isNaN(parsedvalue)) continue;\r\n meergezins += parsedvalue;\r\n if (record.attributes[\"bouw_gerealiseerd\"] === \"Ja\")\r\n gerealiseerd_bouw[record.attributes[\"jaartal\"]] += parsedvalue;\r\n else resterend_bouw[record.attributes[\"jaartal\"]] += parsedvalue;\r\n if (key.toLowerCase().startsWith(\"meergezins_koop\")) {\r\n meergezins_k += parsedvalue;\r\n }\r\n if (key.toLowerCase().startsWith(\"meergezins_huur\")) {\r\n meergezins_h += parsedvalue;\r\n }\r\n if (key.toLowerCase().startsWith(\"meergezins_onbekend\")) {\r\n meergezins_o += parsedvalue;\r\n }\r\n }\r\n\r\n //Onbekend\r\n if (key.toLowerCase().startsWith(\"onbekend\")) {\r\n let parsedvalue = parseInt(value);\r\n if (isNaN(parsedvalue)) continue;\r\n onbekend += parsedvalue;\r\n if (record.attributes[\"bouw_gerealiseerd\"] === \"Ja\")\r\n gerealiseerd_bouw[record.attributes[\"jaartal\"]] += parsedvalue;\r\n else resterend_bouw[record.attributes[\"jaartal\"]] += parsedvalue;\r\n if (key.toLowerCase().startsWith(\"onbekend_koop\")) {\r\n onbekend_k += parsedvalue;\r\n }\r\n if (key.toLowerCase().startsWith(\"onbekend_huur\")) {\r\n onbekend_h += parsedvalue;\r\n }\r\n if (key.toLowerCase().startsWith(\"onbekend_onbekend\")) {\r\n onbekend_o += parsedvalue;\r\n }\r\n }\r\n\r\n //Sloop-Eengezins\r\n if (key.toLowerCase().startsWith(\"sloop_eengezins\")) {\r\n let parsedvalue = parseInt(value);\r\n if (isNaN(parsedvalue)) continue;\r\n sloop_eengezins += parsedvalue;\r\n if (record.attributes[\"sloop_gerealiseerd\"] === \"Ja\")\r\n gerealiseerd_sloop[record.attributes[\"jaartal\"]] += parsedvalue;\r\n else resterend_sloop[record.attributes[\"jaartal\"]] += parsedvalue;\r\n if (key.toLowerCase().startsWith(\"sloop_eengezins_koop\")) {\r\n sloop_eengezins_k += parsedvalue;\r\n }\r\n if (key.toLowerCase().startsWith(\"sloop_eengezins_huur\")) {\r\n sloop_eengezins_h += parsedvalue;\r\n }\r\n if (key.toLowerCase().startsWith(\"sloop_eengezins_onbekend\")) {\r\n sloop_eengezins_o += parsedvalue;\r\n }\r\n }\r\n\r\n //Sloop-Meergezins\r\n if (key.toLowerCase().startsWith(\"sloop_meergezins\")) {\r\n let parsedvalue = parseInt(value);\r\n if (isNaN(parsedvalue)) continue;\r\n sloop_meergezins += parsedvalue;\r\n if (record.attributes[\"sloop_gerealiseerd\"] === \"Ja\")\r\n gerealiseerd_sloop[record.attributes[\"jaartal\"]] += parsedvalue;\r\n else resterend_sloop[record.attributes[\"jaartal\"]] += parsedvalue;\r\n if (key.toLowerCase().startsWith(\"sloop_meergezins_koop\")) {\r\n sloop_meergezins_k += parsedvalue;\r\n }\r\n if (key.toLowerCase().startsWith(\"sloop_meergezins_huur\")) {\r\n sloop_meergezins_h += parsedvalue;\r\n }\r\n if (key.toLowerCase().startsWith(\"sloop_meergezins_onbekend\")) {\r\n sloop_meergezins_o += parsedvalue;\r\n }\r\n }\r\n\r\n //Sloop-Onbekend\r\n if (key.toLowerCase().startsWith(\"sloop_onbekend\")) {\r\n let parsedvalue = parseInt(value);\r\n if (isNaN(parsedvalue)) continue;\r\n sloop_onbekend += parsedvalue;\r\n if (record.attributes[\"sloop_gerealiseerd\"] === \"Ja\")\r\n gerealiseerd_sloop[record.attributes[\"jaartal\"]] += parsedvalue;\r\n else resterend_sloop[record.attributes[\"jaartal\"]] += parsedvalue;\r\n if (key.toLowerCase().startsWith(\"sloop_onbekend_koop\")) {\r\n sloop_onbekend_k += parsedvalue;\r\n }\r\n if (key.toLowerCase().startsWith(\"sloop_onbekend_huur\")) {\r\n sloop_onbekend_h += parsedvalue;\r\n }\r\n if (key.toLowerCase().startsWith(\"sloop_onbekend_onbekend\")) {\r\n sloop_onbekend_o += parsedvalue;\r\n }\r\n }\r\n }\r\n });\r\n\r\n let newOptellingen = [];\r\n newOptellingen[\"Eengezins\"] = [\r\n eengezins,\r\n eengezins_k,\r\n eengezins_h,\r\n eengezins_o,\r\n ];\r\n newOptellingen[\"Meergezins\"] = [\r\n meergezins,\r\n meergezins_k,\r\n meergezins_h,\r\n meergezins_o,\r\n ];\r\n newOptellingen[\"Onbekend\"] = [\r\n onbekend,\r\n onbekend_k,\r\n onbekend_h,\r\n onbekend_o,\r\n ];\r\n newOptellingen[\"Sloop-Eengezins\"] = [\r\n sloop_eengezins,\r\n sloop_eengezins_k,\r\n sloop_eengezins_h,\r\n sloop_eengezins_o,\r\n ];\r\n newOptellingen[\"Sloop-Meergezins\"] = [\r\n sloop_meergezins,\r\n sloop_meergezins_k,\r\n sloop_meergezins_h,\r\n sloop_meergezins_o,\r\n ];\r\n newOptellingen[\"Sloop-Onbekend\"] = [\r\n sloop_onbekend,\r\n sloop_onbekend_k,\r\n sloop_onbekend_h,\r\n sloop_onbekend_o,\r\n ];\r\n\r\n console.log(\"Optellingen:\", newOptellingen);\r\n console.log(\"GerealiseerdBouw: \", gerealiseerd_bouw);\r\n console.log(\"GerealiseerdSloop: \", gerealiseerd_sloop);\r\n console.log(\"ResterendBouw: \", resterend_bouw);\r\n console.log(\"ResterendSloop: \", resterend_sloop);\r\n setOptellingen(newOptellingen);\r\n props.settotaleninfo([\r\n gerealiseerd_bouw,\r\n gerealiseerd_sloop,\r\n resterend_bouw,\r\n resterend_sloop,\r\n ]);\r\n }\r\n };\r\n\r\n return (\r\n \r\n {detailRecords === undefined ||\r\n detailRecords === null ||\r\n detailRecords.length === 0 ? (\r\n
\r\n {detailRecords === undefined ? (\r\n
Planning ophalen...
\r\n ) : (\r\n
\r\n
\r\n
\r\n \r\n De detailplanning kan aangemaakt worden door allereerst\r\n hierboven de jaartallen voor 'Eerste oplevering' en 'Laatste\r\n oplevering' in te vullen.\r\n \r\n \r\n Vul vervolgens hieronder het aantal woningen in bij\r\n 'Plancapaciteit'.\r\n \r\n
\r\n
\r\n
{\r\n refPlancapaciteit.current = e.target.value;\r\n }}\r\n style={{ margin: \"5px\" }}\r\n size=\"small\"\r\n id=\"Plancapaciteit\"\r\n label=\"Plancapaciteit\"\r\n variant=\"outlined\"\r\n autoComplete=\"off\"\r\n disabled={viewMode.current === \"View\"}\r\n />\r\n {\r\n onClickGenereer();\r\n }}\r\n >\r\n Genereer\r\n \r\n \r\n \r\n
\r\n Klik op de knop GENEREER om een detailplanning over de jaren\r\n aan te maken. \r\n \r\n LET OP \r\n Bij het aanmaken wordt het aantal woningen automatisch\r\n verdeeld over de jaren met woningtype en prijsklasse\r\n 'onbekend'. Deze verdeling kan vervolgens aangepast worden\r\n waarbij het totaal aantal woningen rechtsonder wordt\r\n weergegeven; klik in het volgende scherm op de bereken-knop\r\n (\r\n \r\n ) om dit totaal telkens bij te werken.\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 \r\n \r\n
\r\n \r\n \r\n
\r\n )}\r\n
\r\n );\r\n}\r\n","import React, { useRef, useEffect, useState, useContext } from \"react\";\r\nimport \"./App.css\";\r\nimport WebMap from \"@arcgis/core/WebMap\";\r\nimport MapView from \"@arcgis/core/views/MapView\";\r\nimport Editor from \"@arcgis/core/widgets/Editor\";\r\nimport LayerList from \"@arcgis/core/widgets/LayerList\";\r\nimport Expand from \"@arcgis/core/widgets/Expand\";\r\nimport { AppContext } from \"./AppContext\";\r\n\r\nexport function EditMap(props) {\r\n console.log(\"Editmap\");\r\n const mapRef = useRef();\r\n const [mapview, setMapView] = useState(null);\r\n const mapviewRef = useRef(null);\r\n const { ctxWebMapId, ctxSelectedPlan, ctxGemeenteExtent } =\r\n useContext(AppContext);\r\n\r\n useEffect(() => {\r\n const map = new WebMap({\r\n portalItem: {\r\n id: ctxWebMapId,\r\n },\r\n });\r\n const view = new MapView({\r\n container: mapRef.current,\r\n map: map,\r\n extent: ctxGemeenteExtent,\r\n });\r\n\r\n setMapView(view);\r\n mapviewRef.current = view;\r\n\r\n if (props.mode === \"update\" && props.viewmode !== \"View\") {\r\n ////Custom Button\r\n var element = document.createElement(\"div\");\r\n if (props.editing) element.innerHTML = \"Afsluiten Bewerken\";\r\n else element.innerHTML = \"Bewerken Plangebied\";\r\n element.className = \"custombutton\";\r\n element.style.backgroundColor = window.Color;\r\n // element.style.width = \"200px\";\r\n // element.style.height = \"30px\";\r\n element.addEventListener(\"click\", function (evt) {\r\n props.switch();\r\n });\r\n\r\n if (props.editing) view.ui.add(element, \"top-left\");\r\n else view.ui.add(element, \"bottom-right\");\r\n\r\n ///End Custom Button\r\n }\r\n\r\n view.when(function () {\r\n if (props.mode === \"update\") {\r\n //Filter op feature/geometrie van het plan\r\n view.map.layers.forEach((layer) => {\r\n if (layer.title.includes(window.FeaturelayerTitle)) {\r\n //als definitionexpression niet leeg is, dan eraan plakken met AND\r\n if (\r\n layer.definitionExpression !== undefined &&\r\n layer.definitionExpression !== null &&\r\n layer.definitionExpression !== \"\"\r\n ) {\r\n layer.definitionExpression = layer.definitionExpression + \" AND \";\r\n\r\n layer.definitionExpression =\r\n layer.definitionExpression +\r\n \" OBJECTID = \" +\r\n ctxSelectedPlan.attributes[window.Objectid];\r\n } else {\r\n layer.definitionExpression =\r\n \" OBJECTID = \" + ctxSelectedPlan.attributes[window.Objectid];\r\n }\r\n\r\n if (ctxSelectedPlan.geometry.extent)\r\n view.extent = ctxSelectedPlan.geometry.extent; //is empty with new geometry\r\n\r\n console.log(\"LayerDef: \", layer.definitionExpression);\r\n }\r\n });\r\n }\r\n\r\n if (props.editing) {\r\n var layerList = new LayerList({\r\n view: view,\r\n });\r\n //view.ui.add(layerList, \"bottom-left\");\r\n\r\n view.map.layers.forEach((layer) => {\r\n if (layer.title.includes(window.FeaturelayerTitle)) {\r\n //event koppelen op add feature\r\n layer.on(\"edits\", function (event) {\r\n const extractObjectId = function (result) {\r\n return result.objectId;\r\n };\r\n const adds = event.addedFeatures.map(extractObjectId);\r\n console.log(\"addedFeatures: \", adds.length, adds);\r\n if (adds.length > 0) {\r\n props.addedplan(adds[0]);\r\n }\r\n });\r\n\r\n //fields which are shown in the Editor\r\n const editConfigLayer = {\r\n layer: layer,\r\n fieldConfig: [\r\n {\r\n name: \"plannaam\",\r\n label: \"Plannaam\",\r\n },\r\n {\r\n name: \"status_planologisch\",\r\n label: \"Status planologisch\",\r\n },\r\n ],\r\n deleteEnabled: false,\r\n };\r\n\r\n const editor = new Editor({\r\n view: view,\r\n allowedWorkflows: [props.mode], // create or update\r\n layerInfos: [editConfigLayer],\r\n });\r\n //view.ui.add(editor, \"top-left\");\r\n var codeExpand2 = new Expand({\r\n expandIconClass: \"esri-icon-edit\",\r\n expandTooltip: \"Toon editor\",\r\n view: view,\r\n content: editor,\r\n expanded: true,\r\n group: \"groepje\",\r\n });\r\n //add the panel to the UI\r\n view.ui.add(codeExpand2, \"top-left\");\r\n\r\n var codeExpand = new Expand({\r\n expandIconClass: \"esri-icon-layer-list\",\r\n expandTooltip: \"Toon lijst met lagen\",\r\n view: view,\r\n content: layerList,\r\n expanded: false,\r\n group: \"groepje\",\r\n });\r\n //add the panel to the UI\r\n view.ui.add(codeExpand, \"top-left\");\r\n }\r\n });\r\n }\r\n });\r\n\r\n // clean up\r\n return () => {\r\n mapview && mapview.destroy();\r\n };\r\n }, []); // only after initial render\r\n\r\n return
;\r\n}\r\n\r\nexport default EditMap;\r\n","import React, { useState } from \"react\";\r\nimport EditPlanGegevens from \"./EditPlanGegevens\";\r\nimport EditDetailGegevens from \"./EditDetailGegevens\";\r\nimport EditMap from \"./EditMap\";\r\nimport \"./App.css\";\r\nimport AppBar from \"@material-ui/core/AppBar\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\n\r\nconst Edit = (props) => {\r\n const [editMode, setEditMode] = useState(\"Default\");\r\n const [infoTotaal, setInfoTotaal] = useState([]);\r\n\r\n const TotalenInfo = () => {\r\n if (infoTotaal.length === 0) return
;\r\n //infoTotaal is een array van 4 stuks: gerealiseerd_bouw, gerealiseerd_sloop, resterend_bouw, resterend_sloop\r\n //ieder onderdeel bevat een array van jaren met daarin aantallen\r\n //dus bv gerealiseerd_bouw={2021: 64, 2022: 0, 2023: 0}\r\n //en bv resterend_bouw={2021: 0, 2022: 35, 2023: 35}\r\n\r\n //We willen:\r\n //-alle jaren gerealiseerd_bouw opgeteld hebben\r\n //-alle jaren gerealiseerd_sloop opgeteld hebben\r\n //-alle jaren resterend_bouw opgeteld hebben\r\n //-alle jaren resterend_sloop opgeteld hebben\r\n let gerealiseerd_bouw = 0;\r\n let gerealiseerd_sloop = 0;\r\n let resterend_bouw = 0;\r\n let resterend_sloop = 0;\r\n Object.values(infoTotaal[0]).forEach((jaarvalue) => {\r\n gerealiseerd_bouw += jaarvalue;\r\n });\r\n Object.values(infoTotaal[1]).forEach((jaarvalue) => {\r\n gerealiseerd_sloop += jaarvalue;\r\n });\r\n Object.values(infoTotaal[2]).forEach((jaarvalue) => {\r\n resterend_bouw += jaarvalue;\r\n });\r\n Object.values(infoTotaal[3]).forEach((jaarvalue) => {\r\n resterend_sloop += jaarvalue;\r\n });\r\n return (\r\n \r\n \r\n \r\n \r\n Bouw \r\n Sloop \r\n \r\n \r\n Gerealiseerd \r\n {gerealiseerd_bouw} \r\n {gerealiseerd_sloop} \r\n \r\n \r\n Resterend \r\n {resterend_bouw} \r\n {resterend_sloop} \r\n \r\n \r\n Totaal \r\n {gerealiseerd_bouw + resterend_bouw} \r\n {gerealiseerd_sloop + resterend_sloop} \r\n \r\n \r\n
\r\n );\r\n };\r\n\r\n const TotalenInfoJaren = () => {\r\n if (infoTotaal.length === 0) return ;\r\n //infoTotaal is een array van 4 stuks: gerealiseerd_bouw, gerealiseerd_sloop, resterend_bouw, resterend_sloop\r\n //ieder onderdeel bevat een array van jaren met daarin aantallen\r\n //dus bv gerealiseerd_bouw={2021: 64, 2022: 0, 2023: 0}\r\n\r\n //eerst bepalen welke jaren er zijn\r\n let jaren = Object.keys(infoTotaal[0]);\r\n //dan loop over de jaren\r\n return jaren.map((jaar, index) => {\r\n var gerealiseerdbouw = parseInt(infoTotaal[0][jaar]);\r\n var resterendbouw = parseInt(infoTotaal[2][jaar]);\r\n var gerealiseerdsloop = parseInt(infoTotaal[1][jaar]);\r\n var resterendsloop = parseInt(infoTotaal[3][jaar]);\r\n return (\r\n \r\n {jaar} \r\n {gerealiseerdbouw + resterendbouw} \r\n {gerealiseerdsloop + resterendsloop} \r\n \r\n );\r\n });\r\n };\r\n\r\n //deze wordt aangeroepen vanuit EditDetailgegevens, nadat de totalen berekend zijn\r\n const setTotalenInfo = (props) => {\r\n console.log(\"SetTotalenInfo: \", props);\r\n setInfoTotaal(props);\r\n };\r\n\r\n return (\r\n \r\n {editMode === \"Default\" ? (\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n setEditMode(\"FullScreenEdit\")}\r\n > \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n {\"Totalen\"}\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n Jaar \r\n Bouw \r\n Sloop \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 setEditMode(\"Default\")}\r\n > \r\n
\r\n
\r\n
\r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default Edit;\r\n","import AppBar from \"@material-ui/core/AppBar\";\r\nimport Toolbar from \"@material-ui/core/Toolbar\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport React, { useContext } from \"react\";\r\nimport { AppContext } from \"./AppContext\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport AutorenewIcon from \"@material-ui/icons/Autorenew\";\r\nimport FilterListIcon from \"@material-ui/icons/FilterList\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n },\r\n menuButton: {\r\n marginRight: theme.spacing(2),\r\n },\r\n title: {\r\n flexGrow: 1,\r\n },\r\n}));\r\n\r\nconst MainTableAppBar = (props) => {\r\n const classes = useStyles();\r\n const { ctxPlannen, ctxSetTableFilter, ctxTableFilter } =\r\n useContext(AppContext);\r\n\r\n const resetTableFilter = () => {\r\n ctxSetTableFilter([]);\r\n };\r\n const openFilterDialog = () => {\r\n props.openfilterdialog();\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n {/* Aantal plannen: {ctxTableFilter.length == 0 ? ctxPlannen.length : \"filter actief\"} */}\r\n Totaal aantal plannen: {ctxPlannen.length}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default MainTableAppBar;\r\n","export async function getPlanQuery(lyr, objid) {\r\n var query = lyr.createQuery();\r\n query.where = \"OBJECTID=\" + objid;\r\n return lyr.queryFeatures(query);\r\n}\r\n","import React, { useContext } from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport AppBar from \"@material-ui/core/AppBar\";\r\nimport Toolbar from \"@material-ui/core/Toolbar\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\nimport Slide from \"@material-ui/core/Slide\";\r\nimport EditMap from \"./EditMap\";\r\nimport { AppContext } from \"./AppContext\";\r\nimport { getPlanQuery } from \"./GetPlan\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n appBar: {\r\n position: \"relative\",\r\n },\r\n title: {\r\n marginLeft: theme.spacing(2),\r\n flex: 1,\r\n },\r\n}));\r\n\r\nconst Transition = React.forwardRef(function Transition(props, ref) {\r\n return ;\r\n});\r\n\r\nexport default function AddPlanDialog(props) {\r\n const classes = useStyles();\r\n\r\n const { ctxFeaturelayer } = useContext(AppContext);\r\n\r\n const handleClose = () => {\r\n props.closedialog(null);\r\n };\r\n\r\n async function getAddedPlan(objid) {\r\n getPlanQuery(ctxFeaturelayer, objid).then((result) => {\r\n if (result.features?.length > 0) {\r\n console.log(\"GETPLANQUERY: \", result.features[0]);\r\n props.closedialog(result.features[0]);\r\n } else {\r\n console.log(\"GETPLANQUERY: no result\");\r\n props.closedialog(null);\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 Aanmaken nieuw plan\r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n","import IdentityManager from \"@arcgis/core/identity/IdentityManager\"; //\"esri/identity/IdentityManager\";\r\nimport OAuthInfo from \"@arcgis/core/identity/OAuthInfo\"; //\"esri/identity/OAuthInfo\";\r\n\r\nexport let credential;\r\nlet oauthInfo;\r\n\r\n/**\r\n * Register application ID and Portal URL\r\n * with the IdentityManager\r\n * @param appId\r\n * @param portalUrl\r\n */\r\nexport const initialize = (appId, portalUrl) => {\r\n if (!oauthInfo) {\r\n oauthInfo = new OAuthInfo({\r\n appId,\r\n portalUrl,\r\n popup: true,\r\n });\r\n IdentityManager.registerOAuthInfos([oauthInfo]);\r\n }\r\n};\r\n\r\n/**\r\n * Check current logged in status for current portal\r\n */\r\nexport const checkCurrentStatus = () =>\r\n IdentityManager.checkSignInStatus(`${oauthInfo.portalUrl}/sharing`);\r\n\r\n/**\r\n * Attempt to sign in,\r\n * first check current status\r\n * if not sighned in, then go through\r\n * steps to get credentials\r\n */\r\nexport const signIn = async () => {\r\n if (!credential) {\r\n try {\r\n credential = await checkCurrentStatus();\r\n } catch (error) {\r\n credential = await fetchCredentials();\r\n }\r\n }\r\n return credential;\r\n};\r\n\r\n/**\r\n * Sign the user out, but if we checked credentials\r\n * manually, make sure they are registered with\r\n * IdentityManager, so it can destroy them properly\r\n */\r\nexport const signOut = async () => {\r\n // make sure the identitymanager has\r\n // the credential so it can destroy it\r\n await signIn();\r\n IdentityManager.destroyCredentials();\r\n};\r\n\r\n/**\r\n * Get the credentials for the provided portal\r\n */\r\nexport const fetchCredentials = async () => {\r\n credential = await IdentityManager.getCredential(\r\n `${oauthInfo.portalUrl}/sharing`,\r\n {\r\n error: null,\r\n oAuthPopupConfirmation: false,\r\n token: null,\r\n }\r\n );\r\n return credential;\r\n};\r\n","//https://www.npmjs.com/package/@esri/arcgis-rest-request\r\nimport { request } from \"@esri/arcgis-rest-request\";\r\n\r\nexport async function searchWebmap(onlineurl, callbackfunc, token) {\r\n //https://developers.arcgis.com/rest/users-groups-and-items/search.htm\r\n //TODO: replace by ??: https://esri.github.io/arcgis-rest-js/api/feature-layer/queryFeatures/\r\n //Portal voorbeeld: https://machine.domain.com/webadaptor/sharing/rest/search?q=park&f=pjson\r\n const filter = \"tags:\" + window.WebmapTagId;\r\n const params = {\r\n q: \"invoer\",\r\n f: \"json\",\r\n filter: filter,\r\n token: token,\r\n searchFields: \"title,tags\",\r\n };\r\n const paramVals = [];\r\n for (const k in params) {\r\n const val = encodeURIComponent(k) + \"=\" + encodeURIComponent(params[k]);\r\n paramVals.push(val);\r\n }\r\n const url = `${onlineurl}/search/suggest=${\r\n window.WebmapTagId\r\n }?${paramVals.join(\"&\")}`;\r\n console.log(\"SearchWebMap start\");\r\n // const url = `${onlineurl}/search?${paramVals.join(\"&\")}`;\r\n request(url, {\r\n responseType: \"json\",\r\n }).then(function (response) {\r\n if (response.results.length > 0) {\r\n var aantalgevonden = 0;\r\n for (let index = 0; index < response.results.length; index++) {\r\n const webmap = response.results[index];\r\n if (webmap.type === \"Web Map\") {\r\n console.log(\"WebmapId: \", webmap.id);\r\n aantalgevonden++;\r\n }\r\n }\r\n if (aantalgevonden > 1) {\r\n alert(\"Meer dan 1 webmap gevonden! Zie console.\");\r\n }\r\n if (aantalgevonden === 0) {\r\n alert(\"Geen webmap gevonden!\");\r\n }\r\n for (let index = 0; index < response.results.length; index++) {\r\n const webmap = response.results[index];\r\n if (webmap.type === \"Web Map\") {\r\n if (aantalgevonden > 1) {\r\n if (window.confirm(webmap.title)) {\r\n console.log(\"WebmapId: \", webmap.id);\r\n callbackfunc(webmap.id);\r\n break;\r\n }\r\n } else {\r\n console.log(\"WebmapId: \", webmap.id);\r\n callbackfunc(webmap.id);\r\n break;\r\n }\r\n }\r\n }\r\n } else {\r\n alert(`Webmap niet gevonden (${filter})`);\r\n }\r\n });\r\n}\r\n","import { deleteFeatures } from \"@esri/arcgis-rest-feature-layer\";\r\nimport { NotifySuccess, NotifyFailure } from \"./Notify\";\r\n\r\nexport async function deletePlan(\r\n selectedPlan,\r\n url,\r\n urlrelated,\r\n usersession,\r\n callback\r\n) {\r\n let objectid = selectedPlan[window.Objectid];\r\n let globalid = selectedPlan[window.Globalid];\r\n\r\n //eerst related table verwijderen\r\n deleteFeatures({\r\n url: urlrelated,\r\n authentication: usersession,\r\n where: \"parent_globalid='\" + globalid + \"'\",\r\n })\r\n .then((response) => {\r\n console.log(\"DeleteRelated: \", response);\r\n NotifySuccess(\"Verwijderen Detailplanning\", \"Gereed\");\r\n })\r\n .catch((e) => {\r\n NotifyFailure(\"Verwijderen Detailplanning\", \"Mislukt: \" + e.message);\r\n });\r\n\r\n //daarna het plan\r\n deleteFeatures({\r\n url: url,\r\n authentication: usersession,\r\n objectIds: objectid,\r\n })\r\n .then((response) => {\r\n console.log(\"DeletePlan: \", response);\r\n NotifySuccess(\"Verwijderen Plan\", \"Gereed\");\r\n callback();\r\n })\r\n .catch((e) => {\r\n NotifyFailure(\"Verwijderen Plan\", \"Mislukt: \" + e.message);\r\n });\r\n}\r\n","export async function layerRefresh(lyr) {\r\n lyr.refresh();\r\n}\r\n","import React, { useState, useEffect, useContext } from \"react\";\r\nimport \"./App.css\";\r\nimport esriConfig from \"@arcgis/core/config.js\";\r\nimport \"@arcgis/core/assets/esri/themes/light/main.css\";\r\nimport ApplicationHeader from \"./ApplicationHeader\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport MainMap from \"./MainMap.js\";\r\nimport MainTable from \"./MainTable\";\r\nimport Edit from \"./Edit\";\r\nimport MainTableAppBar from \"./MainTableAppBar\";\r\nimport AddPlanDialog from \"./AddPlanDialog\";\r\nimport { AppContext } from \"./AppContext\";\r\nimport { checkCurrentStatus, initialize, signIn, signOut } from \"./Auth\";\r\nimport { searchWebmap } from \"./SearchWebmap\";\r\nimport { deletePlan } from \"./DeletePlan\";\r\nimport { layerRefresh } from \"./LayerRefresh\";\r\nimport ModalDialog from \"./ModalDialog\";\r\nimport { UserSession } from \"@esri/arcgis-rest-auth\";\r\nimport MessageBox from \"./MessageBox\";\r\n\r\nfunction App() {\r\n esriConfig.assetsPath = \"./assets\";\r\n\r\n const [viewMode, setViewMode] = useState(\"Main\"); //de state waarin het scherm verkeert: hoofdscherm, editscherm, nieuw\r\n const [addPlanDialog, setAddPlanDialog] = useState(false);\r\n const [openModal, setOpenModal] = useState(false);\r\n const [dataValid, setDataValid] = useState(false);\r\n const [openMessageBox, setOpenMessageBox] = React.useState(false);\r\n const [isFilterDialogOpen, setIsFilterDialogOpen] = React.useState(false);\r\n\r\n const {\r\n ctxCredentials,\r\n ctxSetCredentials,\r\n ctxPlannen,\r\n ctxSetPlannen,\r\n ctxSelectedPlan,\r\n ctxSetSelectedPlan,\r\n ctxWebMapId,\r\n ctxSetWebMapId,\r\n ctxFeaturelayerUrl,\r\n ctxFeaturelayer,\r\n ctxDetailTableUrl,\r\n ctxUserSession,\r\n ctxSetUserSession,\r\n ctxSetTableFilter,\r\n } = useContext(AppContext);\r\n\r\n useEffect(() => {\r\n console.log(\"Versie: \" + window.Versie);\r\n init();\r\n }, []);\r\n\r\n async function init() {\r\n await initialize(window.AppID, window.PortalUrl);\r\n\r\n try {\r\n const cred = await checkCurrentStatus();\r\n if (cred) {\r\n ctxSetCredentials(cred);\r\n\r\n // //voor de ArcGIS REST JS hebben we een usersession nodig\r\n const usersession = new UserSession.fromCredential(cred);\r\n ctxSetUserSession(usersession);\r\n\r\n //vanaf 1.10 gebruiken een OrganisationID uit de config\r\n //search the one webmap for the loggedin user\r\n searchWebmap(window.SharingUrl, ctxSetWebMapId, cred.token);\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n try {\r\n const cred = await signIn();\r\n ctxSetCredentials(cred);\r\n\r\n //voor de ArcGIS REST JS hebben we een usersession nodig\r\n const usersession = new UserSession.fromCredential(cred);\r\n ctxSetUserSession(usersession);\r\n\r\n //vanaf 1.10 gebruiken een OrganisationID uit de config\r\n //search the one webmap for the loggedin user\r\n searchWebmap(window.SharingUrl, ctxSetWebMapId, cred.token);\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n }\r\n\r\n async function logOut() {\r\n await signOut();\r\n ctxSetCredentials(null);\r\n }\r\n\r\n const buttonTableClicked = (evt) => {\r\n switch (evt.currentTarget.id) {\r\n case \"view\":\r\n if (ctxSelectedPlan) {\r\n setViewMode(\"View\");\r\n }\r\n break;\r\n case \"add\":\r\n ctxSetSelectedPlan(null);\r\n setAddPlanDialog(true);\r\n break;\r\n case \"modify\":\r\n if (ctxSelectedPlan) {\r\n setViewMode(\"Modify\");\r\n }\r\n break;\r\n case \"delete\":\r\n if (ctxSelectedPlan) {\r\n setOpenModal(true);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n const closeAddPlanDialog = (feature) => {\r\n setAddPlanDialog(false);\r\n if (feature != null) {\r\n ctxSetSelectedPlan(feature);\r\n setOpenMessageBox(true);\r\n setViewMode(\"Modify\");\r\n }\r\n };\r\n\r\n const responseModalDialog = (value) => {\r\n console.log(\"Plan verwijderen: \", value);\r\n setOpenModal(false);\r\n if (value && ctxSelectedPlan) {\r\n deletePlan(\r\n ctxSelectedPlan.attributes,\r\n ctxFeaturelayerUrl,\r\n ctxDetailTableUrl,\r\n ctxUserSession,\r\n callback\r\n );\r\n }\r\n };\r\n const callback = () => {\r\n //Plan uit tabel verwijderen\r\n var plannen = ctxPlannen.filter((plan) => {\r\n return (\r\n plan.attributes[window.Objectid] !==\r\n ctxSelectedPlan.attributes[window.Objectid]\r\n );\r\n });\r\n ctxSetPlannen(plannen);\r\n ctxSetSelectedPlan(null);\r\n ctxSetTableFilter([]);\r\n layerRefresh(ctxFeaturelayer);\r\n setDataValid(false);\r\n setDataValid(true);\r\n };\r\n const buttonExitEditScherm = () => {\r\n ctxSetSelectedPlan(null);\r\n setViewMode(\"Main\");\r\n };\r\n\r\n useEffect(() => {}, [\r\n ctxPlannen,\r\n ctxSelectedPlan,\r\n ctxWebMapId,\r\n ctxFeaturelayerUrl,\r\n ]);\r\n\r\n const buttonsignin = () => {\r\n init();\r\n };\r\n\r\n const responseMessageBox = (value) => {\r\n setOpenMessageBox(false);\r\n };\r\n\r\n const closeFilterDialog = (value) => {\r\n setIsFilterDialogOpen(false);\r\n };\r\n const openFilterDialog = () => {\r\n setIsFilterDialogOpen(true);\r\n };\r\n\r\n return (\r\n \r\n {ctxCredentials !== null ? (\r\n
\r\n {viewMode === \"Main\" ? (\r\n
\r\n
logOut()}\r\n />\r\n \r\n
\r\n \r\n buttonTableClicked}\r\n dataValid={dataValid}\r\n closefilterdialog={closeFilterDialog}\r\n isfilterdialogopen={isFilterDialogOpen}\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 Planregistratie Wonen{\" \"}\r\n \r\n Inloggen\r\n \r\n \r\n )}\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default App;\r\n","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"./index.css\";\nimport App from \"./App\";\nimport reportWebVitals from \"./reportWebVitals\";\nimport { AppContextProvider } from \"./AppContext\";\nimport ReactNotification from \"react-notifications-component\";\nimport \"react-notifications-component/dist/theme.css\";\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById(\"root\")\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}