Git Product home page Git Product logo

veinapp's People

Contributors

plastikaweb avatar zuzust avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

veinapp's Issues

Geocoding service

This is a subtaks of #4

To develop:

  • geocoding service
  • mapzen API geocoding service

Testing: Current Search State

  • Complete unit testing for actions, effects and reducers and increment coverage.

Statements | Branches | Functions | Lines
captura de pantalla 2017-03-29 a les 11 15 52

Routing study and implementation

  • Routing for searching (root). Params via query params
    (separated by "?" and "&" => www.web.com?lat=x.xxxxx&lon=y.yyyyy&r=1)
    or matrix sytax
    (separated by ";" => www.web.com;lat=x.xxxxx;lon=y.yyyyy;r=1).

  • Child routing for detail (from searching result). If we use query params for main search, make them persistent from root route.
    Detail component and template must be implemented at this point.

  • Implement ngrx/router-store (https://github.com/ngrx/router-store)

Angular router explained: https://vsavkin.com/angular-2-router-d9e30599f9ea#.dcijbf9fh

Geolocation control by state

When gelocation occurs, store the coordenates and address given by reverse geocoding to use later in case the user triggers a new search with this data preventing the geocoding as in usual searches and updating later the geocoding search state.

Buggy search input clear behaviour

After first tap, the clear button needs a second tap to hide. It should hide after first tap. Check if it is a Covalent component bug.

Some little styling details

  • - Branding component align to left
  • - Delete layers icon on Leaflet
  • - Detail component. Address in two lines when necessary
  • - db-populate script. Format names to capitalize before load data to firebase.
  • - Mobile view. Footer button of active view with a darker background using $accent palette colors.
  • - Loading html code on init similar to covalent index.html examples: veinapp icon svg 200px wide ( @laklau :) ) with text message
  • - Radius buttons: interchange colors between active and not active.
  • - Radius buttons: margin bottom of 5px on mobile view.
  • - Change change input search placeholder to 'Introdueix la teva adreça'.
  • - Selected place marker bigger (30px).

<div style="padding: 20%;text-align:center;"> <img src="assets/icons/veinapp.svg" width="200"> <div>Carregant Veinapp...</div> </div>

Review Geo-Header component

Reason about the component direct use of the service layer instead of dispatching geolocating action to the store.

Related: #25

Header and footer UI

  • Header branding component (desktop)
  • Header radius buttons component
  • Footer branding component (mobile)
  • Footer menu component (mobile)

List places component

  • The component should have a list of the places that match the current search by center coordenates and radius distance.
  1. Every place item must show name (h3), address and distance from center in kms.
  2. The list should be ordered by distance from less to more.
  3. The list must be paginated (5 items) or scrolled (?).

About point 2:

  1. Every time you create an event listener, we return a
    GeoCallbackRegistration
    https://github.com/firebase/geofire#geocallbackregistration which can
    be used to cancel the listener at any point. You could have a counter which
    increments every time the callback is fired and then turn it off by calling
    registration.cancel() once you've reached n items. This would not
    necessarily give you the five closest locations though, just the first five
    that GeoFire encounters.
    2. You could also just listen for all of the locations and store them in
    a list. You could then sort the list by distance (which is included in
    the event callbacks) and only display the first n items. The bad part
    about this plan is that you are downloading some unneeded data. But that's
    only an issue if you overestimate your query size by a lot and include a
    lot more than n items.
    3. Finally, you could start your query with a very small radius, and
    then gradually increase it's radius until you get n items. When you
    update the query criteria, we will not re-fire the events for items which
    were already in the query. So this is actually a viable option for you.
    However, if you update the query radius in super small increments resulting
    in hundreds of re-queries, perf may start to degrade. But I'm positive that
    you could use a technique like this to make something work with good perf.

Setup project pipelines

We need to choose our tools and integrations to build our development, build and deploy pipelines.

These are my preferences:

  • Project management: GitHub Projects
  • CI/CD: Travis CI

Feel free to share yours.

Depends: #15

Radius button review

Radius selection shouldn't trigger a search. The only events that can trigger a search are enter key pressed and search button click.

angular material color pallette

Implement $primary and $accent pallettes
$warm ? if not implemented defaults to red => $warn: mat-palette($mat-red, 600);.

Failing tests

There is something wrong with testing configuration. We must try to fix it as soon as possible. @sgimeno would you please check it out?

footer menu

changing view from map and list with buttons in mobile footer menu

Geolocation

Given a geolocation button, we need to ask user for geoloc permission. If he accepts, we must do inverse geocoding to get the corresponding address and populate the input search with it
while in the background we change the ICurrentSearch Store State

This is still unclear @zuzust
As we talked we can:

  • make the current user position as the new ICurrentSearch state and based on it change the list of near places.
  • just take the center of the map based on user coords without changing the ICurrentSearch state and wait until the user trigger a new search to change the list of near places.

TextSearchComponent + template + styles

This is a subtask of #4

  • - Create main header component.
  • - Create child component for search and geolocation components.
  • - Create child component for search component.
  • - Inject store when available.
  • - Dispatch event on search.

Places data for geosearching

We need the data from places that could appear in the app (name, address, coordenates, etc) in a JSON format in order to create the structure in firebase via a node script.

GeoSearch service

  • Angular service using geofire to send a query to firebase and get results of proximity given coords and radius.
  • Unit testing.

Map selected place behavior

  • On select a place in list items (change state for search.currentPlace), the marker in map is updated adding a new marker over the normal one if possible or changing the marker with a new one (that can emulate two icons in one).

  • On select a marker on map repeats the behavior adding a new marker, and changes state for search.selectedPlace and triggers the routing to the correspondent detail view.

  • The selectedPlace should re-center the map position to it.

  • add popup (http://leafletjs.com/reference-1.0.3.html#popup) (? @zuzust )

  • Update the markers on map both for center and near places. (pending @laklau )

  • Add title and alt attrs (http://leafletjs.com/reference-1.0.3.html#marker)


ICurrentSearch Store development

This is a subtask of #4

Development of the store from geocoding input.

The State: ICurrentSearch { name: string; lat: number; long: number; }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.