diff options
Diffstat (limited to 'iridescence/src')
-rw-r--r-- | iridescence/src/api/dichroism.js | 122 | ||||
-rw-r--r-- | iridescence/src/components/admin/ProductEditCard.vue | 64 | ||||
-rw-r--r-- | iridescence/src/components/admin/ProductEditList.vue | 36 | ||||
-rw-r--r-- | iridescence/src/store/index.js | 11 | ||||
-rw-r--r-- | iridescence/src/views/Admin.vue | 14 |
5 files changed, 189 insertions, 58 deletions
diff --git a/iridescence/src/api/dichroism.js b/iridescence/src/api/dichroism.js index 2bbad2b..ff64ced 100644 --- a/iridescence/src/api/dichroism.js +++ b/iridescence/src/api/dichroism.js @@ -1,58 +1,72 @@ -const _products = [ - { - id: 1, - name: "Beach Box", - quantity: 0, - cents: 1100, - imgPath: "/beach_box.jpg", - description: "This is a beach box.", - featured: false, - categories: ["Fused Glass", ["Beachy"]] - }, - { - id: 2, - name: "Wind Chime", - quantity: 0, - cents: 4500, - imgPath: "/wind-chime.jpg", - description: "Makes noise when the wind blows.", - featured: false, - categories: ["Fused Glass", ["Beachy"]] - }, - { - id: 3, - name: "Beach Box", - quantity: 5, - cents: 1100, - imgPath: "/beach_box.jpg", - description: "This is a beach box.", - featured: false, - categories: ["Stained Glass", ["Christmas"]] - }, - { - id: 4, - name: "Wind Chime", - quantity: 2, - cents: 4500, - imgPath: "/wind-chime.jpg", - description: "Makes noise when the wind blows.", - featured: false, - categories: ["Fused Glass", ["Kiln-y"]] - }, - { - id: 5, - name: "Beach Box (New!)", - quantity: 5, - cents: 1100, - imgPath: "/beach_box.jpg", - description: "This is a beach box.", - featured: true, - categories: ["Stained Glass", ["Christmas"]] +export default class Dichroism { + constructor() { + this.products = [ + { + id: 1, + name: "Beach Box", + quantity: 0, + cents: 1100, + imgPath: "/beach_box.jpg", + description: "This is a beach box.", + featured: false, + categories: ["Fused Glass", ["Beachy"]] + }, + { + id: 2, + name: "Wind Chime", + quantity: 0, + cents: 4500, + imgPath: "/wind-chime.jpg", + description: "Makes noise when the wind blows.", + featured: false, + categories: ["Fused Glass", ["Beachy"]] + }, + { + id: 3, + name: "Beach Box", + quantity: 5, + cents: 1100, + imgPath: "/beach_box.jpg", + description: "This is a beach box.", + featured: false, + categories: ["Stained Glass", ["Christmas"]] + }, + { + id: 4, + name: "Wind Chime", + quantity: 2, + cents: 4500, + imgPath: "/wind-chime.jpg", + description: "Makes noise when the wind blows.", + featured: false, + categories: ["Fused Glass", ["Kiln-y"]] + }, + { + id: 5, + name: "Beach Box (New!)", + quantity: 5, + cents: 1100, + imgPath: "/beach_box.jpg", + description: "This is a beach box.", + featured: true, + categories: ["Stained Glass", ["Christmas"]] + } + ]; } -]; -export default { getProducts() { - return _products; + return this.products; } -}; + + updateProduct(product) { + if (!product) { + return; + } + for (let i = 0; i < this.products.length; i++) { + if (product.id == this.products[i].id) { + this.products[i] = product; + return; + } + } + } +} diff --git a/iridescence/src/components/admin/ProductEditCard.vue b/iridescence/src/components/admin/ProductEditCard.vue new file mode 100644 index 0000000..db4ab77 --- /dev/null +++ b/iridescence/src/components/admin/ProductEditCard.vue @@ -0,0 +1,64 @@ +<template> + <div id="productEditCard"> + <nav class="panel"> + <p class="panel-heading">{{ oldProduct.id }}: {{ oldProduct.name }}</p> + <div class="panel-block"> + <input class="input" type="text" v-model="newProduct.name" /> + </div> + <a class="panel-block"> + mojs + </a> + <div class="panel-block" v-if="productChanged"> + <button + class="button is-link is-outlined is-fullwidth" + @click="saveProduct" + > + Save + </button> + </div> + </nav> + </div> +</template> + +<script> +export default { + name: "ProductEditCard", + data: function() { + return { + newProduct: { + id: this.oldProduct.id, + name: this.oldProduct.name, + quantity: this.oldProduct.quantity, + cents: this.oldProduct.cents, + imgPath: this.oldProduct.imgPath, + description: this.oldProduct.description, + categories: this.oldProduct.categories + } + }; + }, + props: { + oldProduct: { + type: Object, + required: true + } + }, + computed: { + productChanged() { + return ( + this.newProduct.id != this.oldProduct.id || + this.newProduct.name != this.oldProduct.name || + this.newProduct.quantity != this.oldProduct.quantity || + this.newProduct.cents != this.oldProduct.cents || + this.newProduct.imgPath != this.oldProduct.imgPath || + this.newProduct.description != this.oldProduct.description || + this.newProduct.categories != this.oldProduct.categories + ); + } + }, + methods: { + saveProduct() { + this.$store.dispatch("updateProduct", this.newProduct); + } + } +}; +</script> diff --git a/iridescence/src/components/admin/ProductEditList.vue b/iridescence/src/components/admin/ProductEditList.vue new file mode 100644 index 0000000..46016c2 --- /dev/null +++ b/iridescence/src/components/admin/ProductEditList.vue @@ -0,0 +1,36 @@ +<template> + <div id="productEditList"> + <div class="columns is-multiline is-variable is-7-desktop"> + <div + class="column is-one-quarter" + v-for="product in products" + :key="product.id" + > + <ProductEditCard v-bind:old-product="product"></ProductEditCard> + </div> + </div> + </div> +</template> + +<script> +import ProductEditCard from "@/components/admin/ProductEditCard.vue"; + +export default { + name: "ProductsList", + components: { + ProductEditCard + }, + data() { + return {}; + }, + computed: { + products() { + return this.$store.getters.products; + } + }, + methods: {}, + created() { + this.$store.dispatch("refreshProducts"); + } +}; +</script> diff --git a/iridescence/src/store/index.js b/iridescence/src/store/index.js index e2b40b4..5a5b5f7 100644 --- a/iridescence/src/store/index.js +++ b/iridescence/src/store/index.js @@ -4,6 +4,8 @@ import Dichroism from "@/api/dichroism.js"; Vue.use(Vuex); +let dichroismApi = new Dichroism(); + export default new Vuex.Store({ state: { searchTerm: "", @@ -30,8 +32,13 @@ export default new Vuex.Store({ } }, actions: { - refreshProducts({ commit }) { - commit("setProducts", Dichroism.getProducts()); + refreshProducts(context) { + context.commit("setProducts", []); + context.commit("setProducts", dichroismApi.getProducts()); + }, + updateProduct(context, product) { + dichroismApi.updateProduct(product); + context.dispatch("refreshProducts"); } }, modules: {} diff --git a/iridescence/src/views/Admin.vue b/iridescence/src/views/Admin.vue index 53c5417..85d6a14 100644 --- a/iridescence/src/views/Admin.vue +++ b/iridescence/src/views/Admin.vue @@ -1,10 +1,20 @@ <template> - <h1>this is an admin page</h1> + <div id="admin"> + <div class="container"> + <section class="section"> + <ProductEditList></ProductEditList> + </section> + </div> + </div> </template> <script> +import ProductEditList from "@/components/admin/ProductEditList.vue"; + export default { name: "Admin", - components: {} + components: { + ProductEditList + } }; </script> |