diff --git a/package-lock.json b/package-lock.json index 0459c1d..00d4865 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13108,10 +13108,15 @@ "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", "dev": true }, + "vue-json-pretty": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/vue-json-pretty/-/vue-json-pretty-1.6.3.tgz", + "integrity": "sha512-dgb04fT9PMndfCI4RiQcqaV5P0hSg97LObm15Mkzjl2hL+qWJd833tOd2RhK/yk8AieZt8eJUac5NTZb31O6Mg==" + }, "vue-loader": { - "version": "15.8.3", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.8.3.tgz", - "integrity": "sha512-yFksTFbhp+lxlm92DrKdpVIWMpranXnTEuGSc0oW+Gk43M9LWaAmBTnfj5+FCdve715mTHvo78IdaXf5TbiTJg==", + "version": "15.9.1", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.1.tgz", + "integrity": "sha512-IaPU2KOPjs/QjMlxFs/TiTtQUSbftQ7lsAvoxe21rtcQohsMhx+1AltXCNhZIpIn46PtODiAgz+o8RbMpKtmJw==", "dev": true, "requires": { "@vue/component-compiler-utils": "^3.1.0", diff --git a/package.json b/package.json index 4d9cb61..bd11cb1 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "ts-loader": "^6.2.1", "tslint": "^5.12.1", "typescript": "^3.2.4", - "vue-loader": "^15.2.4", + "vue-loader": "^15.9.1", "vue-resource": "^1.5.1", "vue-template-compiler": "^2.5.16", "webpack": "^4.16.1", @@ -74,6 +74,7 @@ "url-loader": "^1.0.1", "uuid": "^3.4.0", "vue": "^2.5.16", - "vue-clipboard2": "^0.3.1" + "vue-clipboard2": "^0.3.1", + "vue-json-pretty": "^1.6.3" } } diff --git a/src/app/.DS_Store b/src/app/.DS_Store index e2f9101..c0d4543 100644 Binary files a/src/app/.DS_Store and b/src/app/.DS_Store differ diff --git a/src/app/components/landingRight.ts b/src/app/components/landingRight.ts index c5763b3..62cf82a 100644 --- a/src/app/components/landingRight.ts +++ b/src/app/components/landingRight.ts @@ -1,5 +1,6 @@ -// External Libs +// External Files const axios = require('axios') +const jsonView = require('vue-json-pretty').default // Configs const configs = require('../config.ts') @@ -16,36 +17,74 @@ const API_PATH = configs.apiPath const landingRight = { props: ['view'], name: 'landingRight', + components: { + 'json-view': jsonView, + }, + template: landingRightTemplate, data() { return { - pantryId: 'Whoops! This was not supposed to happen.', apiPath: API_PATH, - signupEmail: null, + signup: { + email: null, + accountName: null, + }, + pantry: { + id: null, + data: null, + }, + basket: null, + activeBasket: null, + showNameField: false, copyPantryIdMessage: 'copy', } }, - template: landingRightTemplate, methods: { async createNewPantry() { + const { accountName, email } = this.signup const { data } = await axios({ method: 'POST', data: { - name: 'defaultName', + name: accountName, description: 'defaultDescription', - contactEmail: this.signupEmail, + contactEmail: email, }, url: `${API_PATH}/pantry/create`, }) - this.pantryId = data + this.pantry.id = data this.$emit('change-view', IView.created) }, + async fetchPantry(pantryId: string) { + const { data } = await axios({ + method: 'GET', + url: `${API_PATH}/pantry/${pantryId}`, + }) + this.pantry.id = pantryId + this.pantry.data = data + }, + async toggleBasket(name: string) { + if (this.activeBasket === name) { + this.basket = null + this.activeBasket = null + } else { + const { data } = await axios({ + method: 'GET', + url: `${API_PATH}/pantry/${this.pantry.id}/basket/${name}`, + }) + this.basket = data + this.activeBasket = name + } + }, signupValid() { const _emailRegix = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; - return _emailRegix.test(String(this.signupEmail).toLowerCase()); + return _emailRegix.test(String(this.signup.email).toLowerCase()); + }, + signupNameValid() { + return this.signup.accountName !== null }, getStarted() { - this.$emit('change-view', IView.getStarted) + this.fetchPantry(this.pantry.id) + this.$emit('change-view', IView.dashboard) }, goHome() { this.$emit('change-view', IView.home) @@ -54,9 +93,23 @@ const landingRight = { this.$emit('change-view', IView.docs) }, copyPantryId() { - this.$emit('copy-text', this.pantryId) + this.$emit('copy-text', this.pantry.id) this.copyPantryIdMessage = 'copied!' }, + enterPantryName() { + if (this.signupValid()) { + this.showNameField = true + } + }, + fetchURLParams() { + if (this.view === IView.dashboard) { + const _pantryId = decodeURIComponent(window.location.search.match(/(\?|&)pantryid\=([^&]*)/)[2]) + this.fetchPantry(_pantryId) + } + }, + }, + mounted() { + this.fetchURLParams() }, } diff --git a/src/app/scss/_app.scss b/src/app/scss/_app.scss index 15a2292..0421fe9 100644 --- a/src/app/scss/_app.scss +++ b/src/app/scss/_app.scss @@ -71,3 +71,23 @@ input { } } } + +ul { + list-style-type: none; + padding: 0; + width: 100%; +} + +li { + margin-bottom: 1em; +} + +.slide-fade-enter-active, .slide-fade-leave-active { + transition: all .5s cubic-bezier(1.0, 0.5, 0.8, 1.0); +} + +.slide-fade-enter, .slide-fade-leave-to { + opacity: 0; +} + + diff --git a/src/app/scss/_basket.scss b/src/app/scss/_basket.scss new file mode 100644 index 0000000..88c41c0 --- /dev/null +++ b/src/app/scss/_basket.scss @@ -0,0 +1,9 @@ +.basket { + &__container { + } + &__payload { + &-container { + padding: 1em; + } + } +} diff --git a/src/app/scss/_text.scss b/src/app/scss/_text.scss index 705ff14..5265d47 100644 --- a/src/app/scss/_text.scss +++ b/src/app/scss/_text.scss @@ -46,6 +46,7 @@ a:any-link { &__button { float: right; color: $secondary-color; + cursor: pointer; } &--light { color: $secondary-color; diff --git a/src/app/scss/main.scss b/src/app/scss/main.scss index 7eb22ec..e88a77c 100644 --- a/src/app/scss/main.scss +++ b/src/app/scss/main.scss @@ -5,3 +5,4 @@ @import 'images'; @import 'topbar'; @import 'bottomBar'; +@import 'basket'; diff --git a/src/app/templates/landingLeft.html b/src/app/templates/landingLeft.html index 0a80b51..44489a2 100644 --- a/src/app/templates/landingLeft.html +++ b/src/app/templates/landingLeft.html @@ -37,4 +37,7 @@ + diff --git a/src/app/templates/landingRight.html b/src/app/templates/landingRight.html index 20b3e41..274b67a 100644 --- a/src/app/templates/landingRight.html +++ b/src/app/templates/landingRight.html @@ -9,23 +9,35 @@

your users, Pantry speeds up development time letting you build awesome things - fast!

-
- - -
- - + +
+
+ + +
+

+ Sorry, but that email is invalid. +

+

+ Don't worry, we'll only contact you if its important. +

+
+
+
+ + +
+

+ Give your Pantry a creative name +

+
+
+ - + + + + diff --git a/src/interfaces/view.ts b/src/interfaces/view.ts index cf93049..5004f13 100644 --- a/src/interfaces/view.ts +++ b/src/interfaces/view.ts @@ -1,7 +1,7 @@ export enum IView { home = 'home', created = 'created', - getStarted = 'getStarted', docs = 'docs', about = 'about', + dashboard = 'dashboard', } diff --git a/yarn.lock b/yarn.lock index 9aca9e0..8cfc103 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7569,10 +7569,15 @@ vue-hot-reload-api@^2.3.0: resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2" integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog== -vue-loader@^15.2.4: - version "15.8.3" - resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.8.3.tgz#857cb9e30eb5fc25e66db48dce7e4f768602a23c" - integrity sha512-yFksTFbhp+lxlm92DrKdpVIWMpranXnTEuGSc0oW+Gk43M9LWaAmBTnfj5+FCdve715mTHvo78IdaXf5TbiTJg== +vue-json-pretty@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/vue-json-pretty/-/vue-json-pretty-1.6.3.tgz#c7f378f3c9f68977047de28197735bc2cf81b15b" + integrity sha512-dgb04fT9PMndfCI4RiQcqaV5P0hSg97LObm15Mkzjl2hL+qWJd833tOd2RhK/yk8AieZt8eJUac5NTZb31O6Mg== + +vue-loader@^15.9.1: + version "15.9.1" + resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.9.1.tgz#bd2ab8f3d281e51d7b81d15390a58424d142243e" + integrity sha512-IaPU2KOPjs/QjMlxFs/TiTtQUSbftQ7lsAvoxe21rtcQohsMhx+1AltXCNhZIpIn46PtODiAgz+o8RbMpKtmJw== dependencies: "@vue/component-compiler-utils" "^3.1.0" hash-sum "^1.0.2"