diff --git a/src/assets/less/variables.less b/src/assets/less/variables.less index c9e19bb..9c2ef87 100644 --- a/src/assets/less/variables.less +++ b/src/assets/less/variables.less @@ -2,6 +2,7 @@ @color-2: #ffffff; @color-3: #ff9700; @text-color: #333; +@text-error: #d63031; @headerHeight: 58px; @footerHeight: 58px; diff --git a/src/components/Form/ImageUnsplash/ImageUnsplash.vue b/src/components/Form/ImageUnsplash/ImageUnsplash.vue index daedb33..66c7645 100644 --- a/src/components/Form/ImageUnsplash/ImageUnsplash.vue +++ b/src/components/Form/ImageUnsplash/ImageUnsplash.vue @@ -87,7 +87,7 @@ export default { } .error { - color: #d63031; + color: @text-error; text-align: center; } diff --git a/src/components/Grid/GridItem.vue b/src/components/Grid/GridItem.vue index f5ae988..0abc170 100644 --- a/src/components/Grid/GridItem.vue +++ b/src/components/Grid/GridItem.vue @@ -1,6 +1,6 @@ @@ -50,19 +65,35 @@ header { } } - .action-btn { - width: 42px; - height: 42px; - border: none; - border-radius: 50%; - color: @color-2; - font-size: 28px; - font-weight: lighter; - text-align: center; - background: linear-gradient(112.4deg, #1c9797 11.05%, #147171 89.93%); + .actions { + display: flex; + align-items: center; - &:hover { - background: linear-gradient(0deg, #1c9797 11.05%, #147171 89.93%); + .action-btn { + width: 42px; + height: 42px; + border: none; + border-radius: 50%; + color: @color-2; + font-size: 28px; + font-weight: lighter; + text-align: center; + margin-left: 1rem; + + &--delete { + border: 1px solid @text-error; + background: lighten(#cecece, 10%); + font-size: 24px; + padding-top: 2px; + } + + &--add { + background: linear-gradient(112.4deg, #1c9797 11.05%, #147171 89.93%); + + &:hover { + background: linear-gradient(0deg, #1c9797 11.05%, #147171 89.93%); + } + } } } } diff --git a/src/store/actions.js b/src/store/actions.js index 489861a..2f03c09 100644 --- a/src/store/actions.js +++ b/src/store/actions.js @@ -18,7 +18,10 @@ export default { removeFruit: async ({ commit }, id) => { await axios .delete(`http://localhost:3000/fruit/${id}`) - .then(() => commit("removeFruit", id)) + .then(() => { + commit("removeFruit", id); + commit("toggleDeleteMode"); + }) .catch(err => console.log(err)); }, getImageFromUnsplash: async ({ commit }, keyword) => { diff --git a/src/store/index.js b/src/store/index.js index a451fa7..013a300 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -8,7 +8,8 @@ export const state = { fruits: [], fruit: {}, modalIsOpen: false, - loading: true + loading: true, + deleteMode: false }; Vue.use(Vuex); diff --git a/src/store/mutations.js b/src/store/mutations.js index e917e73..007b98c 100644 --- a/src/store/mutations.js +++ b/src/store/mutations.js @@ -18,5 +18,8 @@ export default { }, setLoading: (state, loading) => { state.loading = loading; + }, + toggleDeleteMode: state => { + state.deleteMode = !state.deleteMode; } }; diff --git a/src/views/Fruit.vue b/src/views/Fruit.vue index 199b5fa..d2b04c2 100644 --- a/src/views/Fruit.vue +++ b/src/views/Fruit.vue @@ -5,7 +5,7 @@
- +

{{ fruit.name }} {{ fruit.taste }} @@ -42,7 +42,7 @@ export default { } }, computed: { - ...mapState(["fruit"]), + ...mapState(["fruit", "deleteMode"]), expirationState() { return new Date(this.fruit.expires) < new Date() ? "expired" : "expires"; } diff --git a/src/views/Fruits.vue b/src/views/Fruits.vue index 3e13ecf..767fe79 100644 --- a/src/views/Fruits.vue +++ b/src/views/Fruits.vue @@ -40,7 +40,7 @@ export default { box-sizing: border-box; margin: 0 auto; width: 80%; - background-color: #d63031; + background-color: @text-error; color: @color-2; padding: 1rem 1.5rem; border-radius: 4px; diff --git a/tests/unit/fruits.spec.js b/tests/unit/fruits.spec.js deleted file mode 100644 index 29077e9..0000000 --- a/tests/unit/fruits.spec.js +++ /dev/null @@ -1,18 +0,0 @@ -import { mount, RouterLinkStub } from "@vue/test-utils"; -// import axios from "axios"; -import store from "@/store/index.js"; -import Fruits from "@/views/Fruits.vue"; - -// jest.mock("axios", () => ({ -// get: jest.fn(() => Promise.resolve({ data: {} })) -// })); - -describe("Test Fruits page.", () => { - it("dispatches getFruits on mounted", async () => { - // axios.get.mockImplementationOnce(() => Promise.resolve({ data: { data: "value" } })); - mount(Fruits, { store, stubs: { RouterLink: RouterLinkStub } }); - - await store.dispatch("getFruits"); - expect(store.state.fruits.length).toBe(7); - }); -});