diff options
author | Michael Foiani <mfoiani2019@communityschoolnaples.org> | 2018-07-25 19:38:43 -0400 |
---|---|---|
committer | Michael Foiani <mfoiani2019@communityschoolnaples.org> | 2018-07-25 19:38:43 -0400 |
commit | 3c09a0a91488e182f521b0cd39017cb5bc781a83 (patch) | |
tree | bc26d401b97f13169f3becdfe03bba6fd0f34353 /src/components/my-view3.js |
Initial commit. Added pwa starter kit to project for the application.
Diffstat (limited to 'src/components/my-view3.js')
-rw-r--r-- | src/components/my-view3.js | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/src/components/my-view3.js b/src/components/my-view3.js new file mode 100644 index 0000000..e226eaa --- /dev/null +++ b/src/components/my-view3.js @@ -0,0 +1,111 @@ +/** +@license +Copyright (c) 2018 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt +The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt +The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt +Code distributed by Google as part of the polymer project is also +subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt +*/ + +import { html } from '@polymer/lit-element'; +import { PageViewElement } from './page-view-element.js'; +import { connect } from 'pwa-helpers/connect-mixin.js'; + +// This element is connected to the Redux store. +import { store } from '../store.js'; + +// These are the actions needed by this element. +import { checkout } from '../actions/shop.js'; + +// We are lazy loading its reducer. +import shop, { cartQuantitySelector } from '../reducers/shop.js'; +store.addReducers({ + shop +}); + +// These are the elements needed by this element. +import './shop-products.js'; +import './shop-cart.js'; + +// These are the shared styles needed by this element. +import { SharedStyles } from './shared-styles.js'; +import { ButtonSharedStyles } from './button-shared-styles.js'; +import { addToCartIcon } from './my-icons.js'; + +class MyView3 extends connect(store)(PageViewElement) { + _render({_quantity, _error}) { + return html` + ${SharedStyles} + ${ButtonSharedStyles} + <style> + /* Add more specificity (.checkout) to workaround an issue in lit-element: + https://github.com/PolymerLabs/lit-element/issues/34 */ + button.checkout { + border: 2px solid var(--app-dark-text-color); + border-radius: 3px; + padding: 8px 16px; + } + button.checkout:hover { + border-color: var(--app-primary-color); + color: var(--app-primary-color); + } + .cart, .cart svg { + fill: var(--app-primary-color); + width: 64px; + height: 64px; + } + .circle.small { + margin-top: -72px; + width: 28px; + height: 28px; + font-size: 16px; + font-weight: bold; + line-height: 30px; + } + </style> + + <section> + <h2>Redux example: shopping cart</h2> + <div class="cart">${addToCartIcon}<div class="circle small">${_quantity}</div></div> + <p>This is a slightly more advanced Redux example, that simulates a + shopping cart: getting the products, adding/removing items to the + cart, and a checkout action, that can sometimes randomly fail (to + simulate where you would add failure handling). </p> + <p>This view, as well as its 2 child elements, <code><shop-products></code> and + <code><shop-cart></code> are connected to the Redux store.</p> + </section> + <section> + <h3>Products</h3> + <shop-products></shop-products> + + <br> + <h3>Your Cart</h3> + <shop-cart></shop-cart> + + <div>${_error}</div> + <br> + <p> + <button class="checkout" hidden="${_quantity == 0}" + on-click="${() => store.dispatch(checkout())}"> + Checkout + </button> + </p> + </section> + `; + } + + static get properties() { return { + // This is the data from the store. + _quantity: Number, + _error: String + }} + + // This is called every time something is updated in the store. + _stateChanged(state) { + this._quantity = cartQuantitySelector(state); + this._error = state.shop.error; + } +} + +window.customElements.define('my-view3', MyView3); |