diff --git a/back-office/app/models/link_banner.rb b/back-office/app/models/link_banner.rb index dc95b74..44a468a 100644 --- a/back-office/app/models/link_banner.rb +++ b/back-office/app/models/link_banner.rb @@ -3,7 +3,6 @@ class LinkBanner < ActiveRecord::Base belongs_to :category belongs_to :section belongs_to :sub_category - has_many :items validates_presence_of :beginning, :ending, :image_url validate :validate_beginning_before_ending diff --git a/front-api/controllers/link_banner.rb b/front-api/controllers/link_banner.rb new file mode 100644 index 0000000..96a5c4e --- /dev/null +++ b/front-api/controllers/link_banner.rb @@ -0,0 +1,6 @@ + + +get '/link_banner' do + LinkBanner.all.to_json +end + diff --git a/front-api/models/link_banner.rb b/front-api/models/link_banner.rb new file mode 100644 index 0000000..0da2c99 --- /dev/null +++ b/front-api/models/link_banner.rb @@ -0,0 +1,7 @@ +class LinkBanner < ActiveRecord::Base + belongs_to :category + belongs_to :section + belongs_to :sub_category + belongs_to :item + +end \ No newline at end of file diff --git a/front-ui/app/components/browsing/byCategory.js b/front-ui/app/components/browsing/byCategory.js index d6e646c..fa5541a 100644 --- a/front-ui/app/components/browsing/byCategory.js +++ b/front-ui/app/components/browsing/byCategory.js @@ -10,6 +10,7 @@ var React = require('react'), NavigationStore = require('../../stores/navigationStore'), ItemList = require('../items/itemList'), NavigationActions = require('../../actions/navigationActions'), + LinkBanner = require('../linkBanner/linkBanner'), Globals = require('../../globals'); var ByCategory = React.createClass({ @@ -50,6 +51,10 @@ var ByCategory = React.createClass({ render: function() { var self = this; + + + + return (
@@ -78,6 +83,8 @@ var ByCategory = React.createClass({
+ +

Kategorija - {this.state.category.get('name')}

Number of items in this category: {this.state.items.length}
diff --git a/front-ui/app/components/browsing/bySection.js b/front-ui/app/components/browsing/bySection.js index 401693c..bf88606 100644 --- a/front-ui/app/components/browsing/bySection.js +++ b/front-ui/app/components/browsing/bySection.js @@ -9,6 +9,7 @@ var React = require('react'), SectionActions = require('../../actions/sectionActions.js'), NavigationActions = require('../../actions/navigationActions'), Section = require('../../models/section'), + LinkBanner = require('../linkBanner/linkBanner'), Category = require('../../models/category'); var BySection = React.createClass({ @@ -28,6 +29,8 @@ var BySection = React.createClass({ Here goes section for refining search, by section
+ +
Najprodavanije u sekciji {this.state.section.get('name')}
diff --git a/front-ui/app/components/cart/cartPage.js b/front-ui/app/components/cart/cartPage.js index 7cd01cc..4a094b0 100644 --- a/front-ui/app/components/cart/cartPage.js +++ b/front-ui/app/components/cart/cartPage.js @@ -5,6 +5,7 @@ var React = require('react'), NavigationActions = require('../../actions/navigationActions'), SingleItem = require('../items/singleItem'), Globals = require('../../globals'), + LinkBanner = require('../linkBanner/linkBanner'), CartTotal = require('./cartTotal'); @@ -35,7 +36,8 @@ var CartPage = React.createClass({ console.log("bla :" , this.state.items.length); var cartTotal = ( -
+
+
@@ -56,6 +58,7 @@ var CartPage = React.createClass({ return (
+ {cartTotal} {displayedItems} {buySomethingMessage} diff --git a/front-ui/app/components/cart/checkoutPage.js b/front-ui/app/components/cart/checkoutPage.js index 394b7a0..4c7591e 100644 --- a/front-ui/app/components/cart/checkoutPage.js +++ b/front-ui/app/components/cart/checkoutPage.js @@ -6,6 +6,7 @@ var React = require('react'), SingleItem = require('../items/singleItem'), Globals = require('../../globals'), CartTotal = require('./cartTotal'), + LinkBanner = require('../linkBanner/linkBanner'), RibicaFormError = require('../shared/ribicaFormError'); diff --git a/front-ui/app/components/linkBanner/linkBanner.js b/front-ui/app/components/linkBanner/linkBanner.js new file mode 100644 index 0000000..a9c0e8f --- /dev/null +++ b/front-ui/app/components/linkBanner/linkBanner.js @@ -0,0 +1,51 @@ +var React = require('react'); +var ItemActions = require('../../actions/itemActions'); +var NavigationActions = require('../../actions/navigationActions'); +var InitializationStore = require('../../stores/initializationStore') + +var Router = require('react-router'); + +var LinkBanner = React.createClass({ + propTypes: { + locationName: React.PropTypes.string.isRequired, + locationId: React.PropTypes.number, + }, + + + render: function() { + + var banners = this.state.banners.map(function (banner) { + + return
+ + }); + + return (
{ banners }
); + + }, + getInitialState: function () { + + + var allBanners = InitializationStore.getBanners(); + var locationId = this.props.locationId; + var locationName = this.props.locationName; + var bannersToShow = []; + + if (locationId) { + bannersToShow = allBanners[locationName][locationId]; + + } else { + bannersToShow = allBanners[locationName]; + + } + + bannersToShow = bannersToShow || []; + + + return { banners: bannersToShow }; + } + +}); + + +module.exports = LinkBanner; diff --git a/front-ui/app/components/rootApp.js b/front-ui/app/components/rootApp.js index ad2dde0..f3d8ae2 100644 --- a/front-ui/app/components/rootApp.js +++ b/front-ui/app/components/rootApp.js @@ -48,7 +48,7 @@ var RootApp = React.createClass({ -
+
Završi narudžbu |  
diff --git a/front-ui/app/components/search/searchResultsPage.js b/front-ui/app/components/search/searchResultsPage.js index fc86fe9..245fdc4 100644 --- a/front-ui/app/components/search/searchResultsPage.js +++ b/front-ui/app/components/search/searchResultsPage.js @@ -2,6 +2,7 @@ var React = require('react'), NavigationActions = require('../../actions/navigationActions'), Globals = require('../../globals') Router = require("react-router"), + LinkBanner = require('../linkBanner/linkBanner'), Link = Router.Link; var SearchStore = require('../../stores/searchStore'); @@ -24,6 +25,8 @@ var SearchResultsPage = React.createClass({ } return (
+ +

Rezultati pretrage za '{this.state.q}'

{content} diff --git a/front-ui/app/components/startPage/startPage.js b/front-ui/app/components/startPage/startPage.js index 689a944..9b65de7 100644 --- a/front-ui/app/components/startPage/startPage.js +++ b/front-ui/app/components/startPage/startPage.js @@ -1,7 +1,8 @@ var React = require('react'), Router = require('react-router'), RouteHandler = Router.RouteHandler, - AllItems = require('../items/allItems'); + AllItems = require('../items/allItems'), + LinkBanner = require('../linkBanner/linkBanner'); var StartPage = React.createClass({ render : function() { @@ -13,6 +14,7 @@ var StartPage = React.createClass({

Ribica Start Page

+
diff --git a/front-ui/app/components/thankyou/thankYouPage.js b/front-ui/app/components/thankyou/thankYouPage.js index e1e35cd..e78dfa0 100644 --- a/front-ui/app/components/thankyou/thankYouPage.js +++ b/front-ui/app/components/thankyou/thankYouPage.js @@ -2,6 +2,7 @@ var React = require('react'), CartStore = require('../../stores/cartStore'), AddToCart = require('../cart/addToCart'), CartActions = require('../../actions/cartActions'), + LinkBanner = require('../linkBanner/linkBanner'), NavigationActions = require('../../actions/navigationActions'), Globals = require('../../globals') Router = require("react-router"), @@ -17,6 +18,8 @@ var ThankYouPage = React.createClass({

Roba je naručena!

Hvala na narudžbi. Naša zaposlenica će vas kontaktirati da ugovori detalje o preuzimanju.

+ +

Registrujte se kako biste dobili informaciju o popustima, imali pregled svih vaših narudžbi, koristili Baby Shower, Predlagač poklona te kalendar događaja.

@@ -28,31 +31,7 @@ var ThankYouPage = React.createClass({ ); - }, - - // Add change listeners to stores - /* - , - componentDidMount: function() { - CartStore.addChangeListener(this._onChange); - CartActions.load(); - }, - - componentWillUnmount: function () { - CartStore.removeChangeListener(this._onChange); - }, - - _onChange: function () { - if (this.isMounted()) { - this.setState(CartStore.getWholeCartState()); - } - - }, - - - getInitialState: function () { - return CartStore.getWholeCartState(); - }*/ + } }); diff --git a/front-ui/app/models/linkBanner.js b/front-ui/app/models/linkBanner.js new file mode 100644 index 0000000..ab453be --- /dev/null +++ b/front-ui/app/models/linkBanner.js @@ -0,0 +1,8 @@ +var Backbone = require('backbone'); +var Globals = require('../globals'); +var LinkBanner = Backbone.Model.extend({ + urlRoot : Globals.ApiUrl + '/link_banner' +}); + +module.exports = LinkBanner; + diff --git a/front-ui/app/models/linkBannerCollection.js b/front-ui/app/models/linkBannerCollection.js new file mode 100644 index 0000000..c425c86 --- /dev/null +++ b/front-ui/app/models/linkBannerCollection.js @@ -0,0 +1,10 @@ +var Backbone = require('backbone'), + LinkBanner = require('./linkBanner'), + Globals = require('../globals'); + +var LinkBannerCollection = Backbone.Collection.extend({ + model: LinkBanner, + url: Globals.ApiUrl + '/link_banner' +}); + +module.exports = LinkBannerCollection; diff --git a/front-ui/app/models/place.js b/front-ui/app/models/place.js index 0abd06b..dcc81b4 100644 --- a/front-ui/app/models/place.js +++ b/front-ui/app/models/place.js @@ -20,4 +20,4 @@ var Place = Backbone.Model.extend({ -module.exports = Place; +module.exports = Place; \ No newline at end of file diff --git a/front-ui/app/stores/initializationStore.js b/front-ui/app/stores/initializationStore.js index 3f54bad..0b688e2 100644 --- a/front-ui/app/stores/initializationStore.js +++ b/front-ui/app/stores/initializationStore.js @@ -1,25 +1,96 @@ var AppDispatcher = require('../dispatcher/appDispatcher'); var EventEmitter = require('events').EventEmitter; var Cart = require('../models/cart'); +var LinkBannerCollection = require('../models/linkBannerCollection'); var InitializationConstants = require('../constants/initializationConstants') var _ = require('underscore'); +var banners = {}; + var state = { isEverythingReadyToStartTheShow: false -} +}; var initializeTheShop = function () { // for now only guarantee that cart is created var cart = new Cart(); cart.save(null, { success: function () { + state.isEverythingReadyToStartTheShow = true; InitializationStore.emitChange(); + } }) -} + + initializeBanners(); + + +}; + + +var putBannerOnItsPlace = function(banners, lb) { + + + if(lb.get('start_page')) banners['startPage'].push(lb); + if(lb.get('thank_you_page')) banners['thankYouPage'].push(lb); + if(lb.get('search_result_page')) banners['searchResultPage'].push(lb); + if(lb.get('checkout_page')) banners['checkoutPage'].push(lb); + + var itemId = lb.get('item_id'); + if (itemId) { + banners['item'][itemId] = banners['item'][itemId] || []; + banners['item'][itemId].push(lb); + } + + var sectionId = lb.get('section_id'); + if (sectionId) { + banners['section'][sectionId] = banners['section'][sectionId] || []; + banners['section'][sectionId].push(lb); + } + + var categoryId = lb.get('category_id'); + if (categoryId) { + banners['category'][categoryId] = banners['category'][categoryId] || []; + banners['category'][categoryId].push(lb); + } + + var subCategoryId = lb.get('sub_category_id'); + if (subCategoryId) { + banners['subCategory'][subCategoryId] = banners['subCategory'][subCategoryId] || []; + banners['subCategory'][subCategoryId].push(lb); + } + +}; + +var initializeBanners = function() { + banners["startPage"] = []; + banners["searchResultPage"] = []; + banners["thankYouPage"] = []; + banners["checkoutPage"] = []; + banners["header"] = []; + banners["footer"] = []; + banners["section"] = {}; + banners["category"] = {}; + banners["subCategory"] = {}; + banners["item"] = {}; + + var lbc = new LinkBannerCollection(); + lbc.fetch({ + success: function() { + lbc.each(function(linkBanner) { + putBannerOnItsPlace( banners, linkBanner ); + } ); + + InitializationStore.emitChange(); + } + }); + +}; + + // Extend ItemStore with EventEmitter to add eventing capabilities var InitializationStore = _.extend({}, EventEmitter.prototype, { @@ -28,6 +99,11 @@ var InitializationStore = _.extend({}, EventEmitter.prototype, { return state; }, + + getBanners: function() { + return banners; + }, + // Emit Change event emitChange: function() { console.log("InitializationStore change!");