Home Reference Source Test Repository

src/components/map/actions.js

import Arkham from "../../core/arkham";
import times from "lodash/utility/times";
import assign from "lodash/object/assign";
import filter from "lodash/collection/filter";
import each from "lodash/collection/each";
import uniq from "lodash/array/uniq";
import MapApi from "./map_api";

const generatePlacements = () => {
  let placement = {
    divName: "sponsored",
    networkId: 9807,
    siteId: 316543,
    adTypes: [ 43 ],
    eventIds: [31, 32],
    properties: {
      "place": window.lp.place.name.toLowerCase()
    }
  };

  const placements = [];

  times(20, (i) => {
    placements.push(assign({}, placement, {
      divName: `sponsored${i + 1}`
    }));
  });

  return placements;
};

let MapActions = {

  viewChange: (data) => {
    Arkham.trigger("view.changed", data);
  },

  gotoPlace: ({ placeTitle, place, breadcrumb, topic="" }) => {
    let query = topic ? `?topic=${topic.toLowerCase()}` : "",
        url = `/${place}/map.json${query}`;

    Arkham.trigger("place.fetching", { placeTitle, breadcrumb, topic });

    // TODO: JC, maybe this is cool, maybe not?
    // let mapData = window.localStorage.getItem(url);

    // if (mapData) {
    //   return Arkham.trigger("place.fetched", JSON.parse(mapData));
    // }

    MapApi.fetch(url).done((results) => {
      // window.localStorage.setItem(url, JSON.stringify(results));
      Arkham.trigger("place.fetched", results);
    });
  },

  poiOpen: (data) => {
    Arkham.trigger("poi.opened", data);
  },

  poiClose: () => {
    Arkham.trigger("poi.closed");
  },

  pinHover: (data) => {
    Arkham.trigger("map.poihover", data);
  },

  itemHighlight: (data) => {
    Arkham.trigger("item.hovered", data);
  },

  mapOpen: () => {
    Arkham.trigger("map.opened");
  },

  mapClose: () => {
    Arkham.trigger("map.closed");
  },

  setState: (state) => {
    Arkham.trigger("state.setinitial", state);
  },

  initMap: () => {
    Arkham.trigger("map.init");
  },

  customPanel: (data) => {
    Arkham.trigger("custompanel.opened", data);
  },

  fetchSponsors: () => {
    let x = JSON.stringify({
      placements: generatePlacements()
    });

    $.ajax({
      url: "http://engine.adzerk.net/api/v2",
      method: "POST",
      contentType: "application/json",
      data: x,
      success: function(response) {
        let set = { title: "Sponsored", items: [] },
            decisions = uniq(filter(response.decisions, d => d), "creativeId");

        each(decisions, decision => {
          let poi = JSON.parse(decision.contents[0].body);
              set.items.push(poi);
        });

        if (set.items.length) {
          Arkham.trigger("sponsor.fetched", set);
        }
      },
      error: function() {
        console.log("fail");
      }
    });
  }

};

export default MapActions;