AnsweredAssumed Answered

Having an issue with javascript Search Widget

Question asked by deleted-user-T42XKeMY9oXS on Jul 29, 2015
Latest reply on Jan 16, 2017 by a.commeford

I am having an issue with the search widget. I have a web page that mixes the Editor widget and Search Widget. The symptom is that upon searching my feature layer, the map does zoom to the feature I was searching, but the infoWindow does not pop up upon clicking it. I can use the editor toolbar to add that (search result feature) to select it; but I want it to be preselected. I DO NOT WANT to use the search infowindow but the editor infowindow. I had thought this would be a very common requirement (so search a feature prior to editing it).

Here is my code:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <!--The viewport meta tag is used to improve the presentation and behavior of the samples
      on iOS devices-->
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
    <title>Edit Irrigation Data</title>
    <link rel="stylesheet" href="http://js.arcgis.com/3.14/dijit/themes/claro/claro.css">
    <link rel="stylesheet" href="http://js.arcgis.com/3.14/esri/css/esri.css" />
    <style>
        html, body {
            height: 100%;
            width: 100%;
            margin: 0;
            overflow: hidden;
        }
        #map {
            padding: 0;
        }
        #header {
            font-size: 1.1em;
            font-family: sans-serif;
            padding-left: 1em;
            padding-top: 4px;
            color: #660000;
        }
        .templatePicker {
            border: none;
        }
        .dj_ie .infowindow .window .top .right .user .content {
            position: relative;
        }
        .dj_ie .simpleInfoWindow .content {
            position: relative;
        }
        /*
        .dijitButton .dijitButtonNode, #drawingWrapper, #printButton {
            width: 160px;
        }*/
        .esriPrint {
            padding: 0;
        }
        /*
        label {
            display: inline-block;
            padding: 5px 5px 0 5px;
            font-weight: 400;
            font-size: 12pt;
        }*/
    </style>
    <script src="http://js.arcgis.com/3.14/"></script>
    <script>
        var map;
        var app = {};
        app.map = null; app.toolbar = null; app.tool = null; app.symbols = null; app.printer = null;
        require([
          "esri/map", "esri/toolbars/draw", "esri/dijit/Print",
          "esri/tasks/GeometryService",
          "esri/toolbars/edit",
          "esri/layers/ArcGISTiledMapServiceLayer",
          "esri/layers/FeatureLayer",
          "esri/layers/LayerDrawingOptions",
          "esri/Color",
          "esri/geometry/Extent",
          "esri/SpatialReference",
          "esri/symbols/SimpleMarkerSymbol",
          "esri/symbols/SimpleLineSymbol", "esri/graphic",
          "esri/symbols/SimpleFillSymbol",
          "esri/dijit/editing/Editor",
          "esri/dijit/editing/TemplatePicker",
          "esri/dijit/LayerList",
          "esri/dijit/Search",
          "esri/tasks/query",
          "esri/InfoTemplate",
          "esri/config",
          "dojo/i18n!esri/nls/jsapi",
          "dojo/_base/array", "dojo/parser", "dojo/keys",
          "dojo/query", "dojo/dom", "dojo/dom-construct",
          "dijit/form/CheckBox", "dijit/form/Button",
          "dijit/layout/BorderContainer", "dijit/layout/ContentPane",
          "dojo/domReady!"
        ], function (
          Map, Draw, Print, GeometryService, Edit,
          ArcGISTiledMapServiceLayer, FeatureLayer,LayerDrawingOptions,
          Color, Extent, SpatialReference, SimpleMarkerSymbol, SimpleLineSymbol, Graphic, SimpleFillSymbol,
          Editor, TemplatePicker,LayerList, Search, Query, InfoTemplate,
          esriConfig, jsapiBundle,
          arrayUtils, parser, keys,
          query, dom, domConstruct,
          CheckBox, Button
        ) {
            parser.parse();
            // snapping is enabled for this sample - change the tooltip to reflect this
            jsapiBundle.toolbars.draw.start = jsapiBundle.toolbars.draw.start + "<br>Press <b>ALT</b> to enable snapping";
            // refer to "Using the Proxy Page" for more information:  https://developers.arcgis.com/javascript/jshelp/ags_proxy.html
            //esriConfig.defaults.io.proxyUrl = "/proxy/";
            esriConfig.defaults.io.corsEnabledServers.push("static.arcgis.com");
            esriConfig.defaults.io.corsEnabledServers.push("services.arcgisonline.com");
            esriConfig.defaults.io.corsEnabledServers.push("gisweb");
            esriConfig.defaults.geometryService = new GeometryService("http://gisweb/arcgis/rest/services/Utilities/Geometry/GeometryServer");
            app.map = new Map("map", {
                basemap: "streets",
                center: [-120.84, 37.49],
                zoom: 14,
                slider: false
            });
            app.map.on("load", function () {
                app.toolbar = new Draw(app.map);
                app.toolbar.on("draw-end", addToMap);
            });
            app.printer = new Print({
                map: app.map,
                url: "http://gisweb/arcgis/rest/services/Utilities/PrintingTools/GPServer/Export%20Web%20Map%20Task"
            }, dom.byId("printButton"));
            app.printer.startup();

            app.symbols = {};
            app.symbols.point = new SimpleMarkerSymbol("square", 10, new SimpleLineSymbol(), new Color([0, 255, 0, 0.75]));
            app.symbols.polyline = new SimpleLineSymbol("solid", new Color([255, 128, 0]), 2);
            app.symbols.polygon = new SimpleFillSymbol().setColor(new Color([255, 255, 0, 0.25]));
            app.symbols.circle = new SimpleFillSymbol().setColor(new Color([0, 0, 180, 0.25]));
            query(".drawing").forEach(function (btn) {
                var button = new Button({
                    label: btn.innerHTML,
                    onClick: function () {
                        activateTool(this.id);
                    }
                }, btn);
            });
            function activateTool(type) {
                app.tool = type.replace("freehand", "");
                app.toolbar.activate(type);
                app.map.hideZoomSlider();
            }
            function addToMap(evt) {
                app.toolbar.deactivate();
                app.map.showZoomSlider();
                var graphic = new Graphic(evt.geometry, app.symbols[app.tool]);
                app.map.graphics.add(graphic);
            }
            app.map.on("layers-add-result", initEditor);
            /*
            var irrFieldsMSL = new ArcGISDynamicMapServiceLayer("http://gisweb1/arcgis/rest/services/Water/Irrigation_Mobile_one/MapServer");
            irrFieldsMSL.setDisableClientCaching(true);
            app.map.addLayer(irrFieldsMSL);
            */
            var pumps = new FeatureLayer("http://gisweb/arcgis/rest/services/Water/Irrigation_Mobile_one/FeatureServer/0", {
                mode: FeatureLayer.MODE_ONDEMAND,
                outFields: ['*']
            });
            pumps.name = "Pumps";
            var sideGate = new FeatureLayer("http://gisweb/arcgis/rest/services/Water/Irrigation_Mobile_one/FeatureServer/1", {
                mode: FeatureLayer.MODE_ONDEMAND,
                outFields: ['*']
            });
            var irrData = new FeatureLayer("http://gisweb/arcgis/rest/services/Water/Irrigation_Mobile_one/FeatureServer/2", {
                mode: FeatureLayer.MODE_ONDEMAND,
                outFields: ['*']
            });
            var canals = new FeatureLayer("http://gisweb/arcgis/rest/services/Water/Irrigation_Mobile_one/FeatureServer/5", {
                mode: FeatureLayer.MODE_ONDEMAND,
                outFields: ['*']
            });
            var idPipeLine = new FeatureLayer("http://gisweb/arcgis/rest/services/Water/Irrigation_Mobile_one/FeatureServer/4", {
                mode: FeatureLayer.MODE_ONDEMAND,
                outFields: ['*']
            });
            app.map.addLayers([pumps, sideGate, irrData,canals, idPipeLine]);
            var layerList = new LayerList({
                map: app.map,
                layers: [{ layer: pumps }, { layer: sideGate }, { layer: irrData }, { layer: canals }, { layer: idPipeLine }]
            },"layerList");
            layerList.startup();
            function initEditor(evt) {
                var templateLayers = arrayUtils.map(evt.layers, function (result) {
                    return result.layer;
                });
                var templatePicker = new TemplatePicker({
                    featureLayers: templateLayers,
                    grouping: true,
                    rows: "auto",
                    columns: 3
                }, "templateDiv");
                templatePicker.startup();
                var layers = arrayUtils.map(evt.layers, function (result) {
                    return { featureLayer: result.layer };
                });
                var settings = {
                    map: app.map,
                    templatePicker: templatePicker,
                    layerInfos: layers,
                    toolbarVisible: true,
                    createOptions: {
                        polylineDrawTools: [Editor.CREATE_TOOL_FREEHAND_POLYLINE],
                        polygonDrawTools: [Editor.CREATE_TOOL_FREEHAND_POLYGON,
                          Editor.CREATE_TOOL_CIRCLE,
                          Editor.CREATE_TOOL_TRIANGLE,
                          Editor.CREATE_TOOL_RECTANGLE
                        ]
                    },
                    toolbarOptions: {
                        reshapeVisible: true
                    }
                };
                var params = { settings: settings };
                var myEditor = new Editor(params, 'editorDiv');
                //define snapping options
                var symbol = new SimpleMarkerSymbol(
                  SimpleMarkerSymbol.STYLE_CROSS,
                  15,
                  new SimpleLineSymbol(
                    SimpleLineSymbol.STYLE_SOLID,
                    new Color([255, 0, 0, 0.5]),
                    5
                  ),
                  null
                );
                app.map.enableSnapping({
                    snapPointSymbol: symbol,
                    tolerance: 20,
                    snapKey: keys.ALT
                });
                myEditor.startup();
                var s = new Search({
                    enableButtonMode: false, //this enables the search widget to display as a single button
                    enableLabel: false,
                    enableInfoWindow: false,
                    showInfoWindowOnSelect: false,
                    map: app.map
                }, "search");
/*
                s.on("search-results", function (result) {
                    console.log(result);
                    console.log(result.results[1][1]);
                    s.select(result.results[1][1]);
                    
                    var selectQuery = new Query();
                    pumps.clearSelection();
                    var geom = result.results[1][1].feature.geometry;
                    console.log(geom);
                    var ex = new Extent(geom.x - 20, geom.y - 20, geom.x + 20, geom.y + 20, new SpatialReference(3857));
                    selectQuery.geometry = ex;
                    selectQuery.spatialRelationship = Query.SPATIAL_REL_CONTAINS;
                    pumps.selectFeatures(selectQuery, FeatureLayer.SELECTION_NEW, function (features) {
                        console.log(features);
                    });
                });
                s.on("select-result", function (result) {
                    console.log(result);
                });
                */
                var sources = s.get("sources");
                sources.push({
                    featureLayer: new FeatureLayer("http://gisweb/arcgis/rest/services/Water/Irrigation_Mobile_one/FeatureServer/0"),
                    searchFields: ["TIDNUMB"],
                    displayField: "CAT_2",
                    exactMatch: false,
                    outFields: ["CAT_2", "OBJECTID", "NUMB", "TYPE", "TIDNUMB", "Meter", "PUMP_NAME", "GPM", "EC", "Lateral"],
                    name: "Pumps",
                    placeholder: "3708",
                    maxResults: 6,
                    maxSuggestions: 6,
                    enableSuggestions: true,
                    minCharacters: 0
                });
                s.set("sources", sources);
                s.startup();
            }
        });
    </script>
</head>
<body class="claro">
    <div id="main" data-dojo-type="dijit/layout/BorderContainer" data-dojo-props="design:'headline'" style="width:100%;height:100%;">
        <div data-dojo-type="dijit/layout/ContentPane" id="header" data-dojo-props="region:'top'">
            Edit Irrigation Features
        </div>
        <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'left'" style="width: 350px;overflow:hidden;">
            <div id="search"></div>
            <hr />
            <div style="height:300px; overflow-y:scroll">
                <div id="templateDiv"></div>
            </div>
            <div id="editorDiv"></div>
            <hr/>
            <div id="printButton"></div>
            <hr />
            <div id="drawingWrapper">
                Add some graphics:
                <div id="point" class="drawing">Point</div>
                <div id="freehandpolyline" class="drawing">Freehand Polyline</div>
                <div id="freehandpolygon" class="drawing">Freehand Polygon</div>
                <div id="circle" class="drawing">Circle</div>
            </div>
            <hr />
            <div id="layerToggle">
                Toggle Layers: <br />
                <div id="layerList"></div>
            </div>
        </div>
        <div data-dojo-type="dijit/layout/ContentPane" id="map" data-dojo-props="region:'center'"></div>
    </div>
</body>
</html>

Outcomes