summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam T. Carpenter <atc@53hor.net>2020-09-12 14:10:57 -0400
committerAdam T. Carpenter <atc@53hor.net>2020-09-12 14:10:57 -0400
commit4dffff999d4025ddb593f5f44bf4ecccf577a0e5 (patch)
tree289a241347e24b0f0963e91256e2b44b70db3ee0
parent92b5b5cc69fdd3dfe67ea07a0fcf26bdd3c930f8 (diff)
downloadtheglassyladies-4dffff999d4025ddb593f5f44bf4ecccf577a0e5.tar.xz
theglassyladies-4dffff999d4025ddb593f5f44bf4ecccf577a0e5.zip
basic product editing view with renaming
-rw-r--r--iridescence/src/api/dichroism.js122
-rw-r--r--iridescence/src/components/admin/ProductEditCard.vue64
-rw-r--r--iridescence/src/components/admin/ProductEditList.vue36
-rw-r--r--iridescence/src/store/index.js11
-rw-r--r--iridescence/src/views/Admin.vue14
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>