From 66445d5c6c998e3e9d9c75b49d30b8ed6ac29922 Mon Sep 17 00:00:00 2001
From: Gasper Grom
Date: Wed, 15 Feb 2023 10:14:28 +0100
Subject: [PATCH 1/5] Fix update button disable & select style
---
frontend/src/assets/scss/form/select.scss | 5 +-
.../list/eagle-eye-email-digest-drawer.vue | 76 ++++++++++++-------
.../list/eagle-eye-settings-drawer.vue | 15 +++-
3 files changed, 60 insertions(+), 36 deletions(-)
diff --git a/frontend/src/assets/scss/form/select.scss b/frontend/src/assets/scss/form/select.scss
index ae28831194..92f6a185dd 100644
--- a/frontend/src/assets/scss/form/select.scss
+++ b/frontend/src/assets/scss/form/select.scss
@@ -69,8 +69,7 @@
}
// Selected icon for single selection
-.el-select-dropdown
- .el-select-dropdown__item.selected::after {
+.el-select-dropdown .el-select-dropdown__item:not(.no-checkmark).selected::after {
content: '';
position: absolute;
top: 50%;
@@ -117,7 +116,7 @@
}
// Select dropdown item selected
- &.selected {
+ &.selected, &.selected.hover {
@apply font-medium bg-brand-50 text-gray-900;
}
diff --git a/frontend/src/premium/eagle-eye/components/list/eagle-eye-email-digest-drawer.vue b/frontend/src/premium/eagle-eye/components/list/eagle-eye-email-digest-drawer.vue
index 7836f32a1b..b12fecef21 100644
--- a/frontend/src/premium/eagle-eye/components/list/eagle-eye-email-digest-drawer.vue
+++ b/frontend/src/premium/eagle-eye/components/list/eagle-eye-email-digest-drawer.vue
@@ -29,10 +29,11 @@
label-position="top"
class="form pt-6 pb-10"
:rules="rules"
- :model="model"
+ :model="form"
@submit.prevent="doSubmit"
>
@@ -43,7 +44,7 @@
>
@@ -54,7 +55,7 @@
>Frequency
Time (UTC)
@@ -222,6 +223,7 @@
type="primary"
class="btn btn--md btn--primary"
:loading="loadingUpdateSettings"
+ :disabled="!isFormValid || !hasFormChanged"
@click="doSubmit(formRef)"
>Update
@@ -248,6 +250,7 @@ import {
} from '@/shared/vuex/vuex.helpers'
import Message from '@/shared/message/message'
import platformOptions from '@/premium/eagle-eye/constants/eagle-eye-platforms.json'
+import Schema from 'async-validator'
const props = defineProps({
modelValue: {
@@ -268,25 +271,16 @@ const rules = {
required: true,
message: 'This field is required',
trigger: 'blur'
- }
- ],
- frequency: [
+ },
{
- required: true,
- message: 'This field is required',
- trigger: 'blur'
- }
- ],
- time: [
- {
- required: true,
- message: 'This field is required',
+ type: 'email',
+ message: 'Enter valid email',
trigger: 'blur'
}
]
}
-const model = reactive({
+const form = reactive({
frequency: 'daily',
time: '09:00',
updateResults: true
@@ -294,6 +288,10 @@ const model = reactive({
const active = ref(false)
const formRef = ref()
+const emailRef = ref()
+
+const tempForm = ref('')
+const tempActive = ref(false)
const drawerModel = computed({
get() {
@@ -304,10 +302,25 @@ const drawerModel = computed({
}
})
+const isFormValid = computed(() => {
+ const emailRegex =
+ /^(([^<>()\\[\].,;:\s@"]+(\.[^<>()\\[\].,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+\.)+[a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}))$/
+ return (
+ form.email.length > 0 && form.email.match(emailRegex)
+ )
+})
+
+const hasFormChanged = computed(() => {
+ return (
+ tempForm.value !== JSON.stringify(form) ||
+ active.value !== tempActive.value
+ )
+})
+
const feed = ref(null)
const results = computed(() => {
- if (!model.updateResults) {
+ if (!form.updateResults) {
if (currentUser.value && feed.value) {
return feed.value
}
@@ -316,7 +329,7 @@ const results = computed(() => {
})
const displayFeedWarning = computed(() => {
- if (model.updateResults) {
+ if (form.updateResults) {
return false
}
if (
@@ -349,26 +362,30 @@ const updateFeed = () => {
const fillForm = (user) => {
const { eagleEyeSettings } = user
active.value = eagleEyeSettings.emailDigestActive || false
- model.email =
+ form.email =
eagleEyeSettings.emailDigest?.email || user.email
- model.frequency =
+ form.frequency =
eagleEyeSettings.emailDigest?.frequency || 'daily'
- model.time = eagleEyeSettings.emailDigest?.time || '09:00'
- model.updateResults = !eagleEyeSettings.emailDigest
+ form.time = eagleEyeSettings.emailDigest?.time || '09:00'
+ form.updateResults = !eagleEyeSettings.emailDigest
? true
: eagleEyeSettings.emailDigest?.matchFeedSettings
feed.value = user.eagleEyeSettings.emailDigest.feed
+
+ tempForm.value = JSON.stringify(form)
+ tempActive.value =
+ eagleEyeSettings.emailDigestActive || false
}
const doSubmit = async (formEl) => {
if (!formEl) return
await formEl.validate((valid) => {
if (valid) {
const data = {
- email: model.email,
- frequency: model.frequency,
- time: model.time,
- matchFeedSettings: model.updateResults,
- feed: !model.updateResults ? feed.value : undefined
+ email: form.email,
+ frequency: form.frequency,
+ time: form.time,
+ matchFeedSettings: form.updateResults,
+ feed: !form.updateResults ? feed.value : undefined
}
doUpdateSettings({
...currentUser.value.eagleEyeSettings,
@@ -389,6 +406,7 @@ const handleCancel = () => {
}
onMounted(() => {
+ console.log(Schema)
fillForm(currentUser.value)
})
diff --git a/frontend/src/premium/eagle-eye/components/list/eagle-eye-settings-drawer.vue b/frontend/src/premium/eagle-eye/components/list/eagle-eye-settings-drawer.vue
index 83db052560..e7fd1db789 100644
--- a/frontend/src/premium/eagle-eye/components/list/eagle-eye-settings-drawer.vue
+++ b/frontend/src/premium/eagle-eye/components/list/eagle-eye-settings-drawer.vue
@@ -46,7 +46,7 @@
Cancel
-
Update
@@ -268,6 +267,8 @@ const rules = reactive({
]
})
+const tempForm = ref('')
+
const form = reactive({
include: [],
exclude: [],
@@ -286,6 +287,10 @@ const isFormValid = computed(() => {
return includeValid && platformsValid
})
+const hasFormChanged = computed(() => {
+ return tempForm.value !== JSON.stringify(form)
+})
+
const drawerModel = computed({
get() {
return props.modelValue
@@ -331,6 +336,7 @@ const fillForm = (user) => {
}
const { eagleEyeSettings } = user
const { feed } = eagleEyeSettings
+
form.include = [
...feed.keywords.map((keyword) => ({
keyword,
@@ -350,6 +356,7 @@ const fillForm = (user) => {
})
form.datePublished = feed.publishedDate
+ tempForm.value = JSON.stringify(form)
}
const onSubmit = async (formEl) => {
From c3858cd05a77297d9c4171978047d8bf9bb22d46 Mon Sep 17 00:00:00 2001
From: Gasper Grom
Date: Wed, 15 Feb 2023 10:18:12 +0100
Subject: [PATCH 2/5] Remove async validator import
---
.../eagle-eye/components/list/eagle-eye-email-digest-drawer.vue | 2 --
1 file changed, 2 deletions(-)
diff --git a/frontend/src/premium/eagle-eye/components/list/eagle-eye-email-digest-drawer.vue b/frontend/src/premium/eagle-eye/components/list/eagle-eye-email-digest-drawer.vue
index b12fecef21..67d6391dba 100644
--- a/frontend/src/premium/eagle-eye/components/list/eagle-eye-email-digest-drawer.vue
+++ b/frontend/src/premium/eagle-eye/components/list/eagle-eye-email-digest-drawer.vue
@@ -250,7 +250,6 @@ import {
} from '@/shared/vuex/vuex.helpers'
import Message from '@/shared/message/message'
import platformOptions from '@/premium/eagle-eye/constants/eagle-eye-platforms.json'
-import Schema from 'async-validator'
const props = defineProps({
modelValue: {
@@ -406,7 +405,6 @@ const handleCancel = () => {
}
onMounted(() => {
- console.log(Schema)
fillForm(currentUser.value)
})
From 9f3595e6fe3bd3b749096f6f3dbad886bdbfc4d1 Mon Sep 17 00:00:00 2001
From: Gasper Grom
Date: Wed, 15 Feb 2023 14:38:31 +0100
Subject: [PATCH 3/5] Migrate to new validation model
---
frontend/package-lock.json | 118 ++++++++++
frontend/package.json | 2 +
.../eagle-eye-platforms-drawers.vue | 80 +++++++
.../form/eagle-eye-settings-include.vue | 94 ++++++++
.../list/eagle-eye-email-digest-drawer.vue | 218 ++++++++----------
.../list/eagle-eye-settings-drawer.vue | 174 +++-----------
.../components/list/eagle-eye-settings.vue | 6 +
frontend/src/shared/form/form-change.js | 19 ++
frontend/src/shared/form/form-item.vue | 84 +++++++
9 files changed, 528 insertions(+), 267 deletions(-)
create mode 100644 frontend/src/premium/eagle-eye/components/eagle-eye-platforms-drawers.vue
create mode 100644 frontend/src/premium/eagle-eye/components/form/eagle-eye-settings-include.vue
create mode 100644 frontend/src/shared/form/form-change.js
create mode 100644 frontend/src/shared/form/form-item.vue
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 2c2861b579..5bda31163a 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -15,6 +15,8 @@
"@tiptap/extension-placeholder": "^2.0.0-beta.199",
"@tiptap/starter-kit": "^2.0.0-beta.199",
"@tiptap/vue-3": "^2.0.0-beta.199",
+ "@vuelidate/core": "^2.0.0",
+ "@vuelidate/validators": "^2.0.0",
"@vueuse/core": "^9.7.0",
"apollo-boost": "^0.4.9",
"axios": "^0.22.0",
@@ -4055,6 +4057,90 @@
"integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==",
"dev": true
},
+ "node_modules/@vuelidate/core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@vuelidate/core/-/core-2.0.0.tgz",
+ "integrity": "sha512-xIFgdQlScO0aaSZ0wTGPJh8YcTMNAj5veI8yPgiAyxOT+GV7vNQFiU1vpYWCL4cklkkhYvRRSC2OEX7YOZNmPQ==",
+ "dependencies": {
+ "vue-demi": "^0.13.11"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^2.0.0 || >=3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vuelidate/core/node_modules/vue-demi": {
+ "version": "0.13.11",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz",
+ "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==",
+ "hasInstallScript": true,
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vuelidate/validators": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@vuelidate/validators/-/validators-2.0.0.tgz",
+ "integrity": "sha512-fQQcmDWfz7pyH5/JPi0Ng2GEgNK1pUHn/Z/j5rG/Q+HwhgIXvJblTPcZwKOj1ABL7V4UVuGKECvZCDHNGOwdrg==",
+ "dependencies": {
+ "vue-demi": "^0.13.11"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^2.0.0 || >=3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vuelidate/validators/node_modules/vue-demi": {
+ "version": "0.13.11",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz",
+ "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==",
+ "hasInstallScript": true,
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@vueuse/core": {
"version": "9.7.0",
"resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.7.0.tgz",
@@ -18790,6 +18876,38 @@
"integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==",
"dev": true
},
+ "@vuelidate/core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@vuelidate/core/-/core-2.0.0.tgz",
+ "integrity": "sha512-xIFgdQlScO0aaSZ0wTGPJh8YcTMNAj5veI8yPgiAyxOT+GV7vNQFiU1vpYWCL4cklkkhYvRRSC2OEX7YOZNmPQ==",
+ "requires": {
+ "vue-demi": "^0.13.11"
+ },
+ "dependencies": {
+ "vue-demi": {
+ "version": "0.13.11",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz",
+ "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==",
+ "requires": {}
+ }
+ }
+ },
+ "@vuelidate/validators": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@vuelidate/validators/-/validators-2.0.0.tgz",
+ "integrity": "sha512-fQQcmDWfz7pyH5/JPi0Ng2GEgNK1pUHn/Z/j5rG/Q+HwhgIXvJblTPcZwKOj1ABL7V4UVuGKECvZCDHNGOwdrg==",
+ "requires": {
+ "vue-demi": "^0.13.11"
+ },
+ "dependencies": {
+ "vue-demi": {
+ "version": "0.13.11",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz",
+ "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==",
+ "requires": {}
+ }
+ }
+ },
"@vueuse/core": {
"version": "9.7.0",
"resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.7.0.tgz",
diff --git a/frontend/package.json b/frontend/package.json
index afcb4f6ee6..a795fbbfd1 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -25,6 +25,8 @@
"@tiptap/extension-placeholder": "^2.0.0-beta.199",
"@tiptap/starter-kit": "^2.0.0-beta.199",
"@tiptap/vue-3": "^2.0.0-beta.199",
+ "@vuelidate/core": "^2.0.0",
+ "@vuelidate/validators": "^2.0.0",
"@vueuse/core": "^9.7.0",
"apollo-boost": "^0.4.9",
"axios": "^0.22.0",
diff --git a/frontend/src/premium/eagle-eye/components/eagle-eye-platforms-drawers.vue b/frontend/src/premium/eagle-eye/components/eagle-eye-platforms-drawers.vue
new file mode 100644
index 0000000000..379a25d679
--- /dev/null
+++ b/frontend/src/premium/eagle-eye/components/eagle-eye-platforms-drawers.vue
@@ -0,0 +1,80 @@
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
diff --git a/frontend/src/premium/eagle-eye/components/form/eagle-eye-settings-include.vue b/frontend/src/premium/eagle-eye/components/form/eagle-eye-settings-include.vue
new file mode 100644
index 0000000000..b89ac5b8a4
--- /dev/null
+++ b/frontend/src/premium/eagle-eye/components/form/eagle-eye-settings-include.vue
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+ Semantic match
+
+
+ Results semantically related
+
+
+
+
+ Exact match
+
+
+ Results containing the keyword
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/src/premium/eagle-eye/components/list/eagle-eye-email-digest-drawer.vue b/frontend/src/premium/eagle-eye/components/list/eagle-eye-email-digest-drawer.vue
index 67d6391dba..ed539ebf87 100644
--- a/frontend/src/premium/eagle-eye/components/list/eagle-eye-email-digest-drawer.vue
+++ b/frontend/src/premium/eagle-eye/components/list/eagle-eye-email-digest-drawer.vue
@@ -20,87 +20,77 @@
-
+
-
+
-
-
-
-
-
-
+
+
+
-
+ Daily
+
+
+ From Monday to Friday (results from
+ previous day)
+
+
+
-
-
- Daily
-
-
- From Monday to Friday (results from
- previous day)
-
-
-
+
-
- Weekly
-
-
- Every Monday (results from previous
- week)
-
-
-
-
-
-
+ Every Monday (results from previous
+ week)
+
+
+
+
+
-
-
+
Update email results based on your current
@@ -223,8 +213,8 @@
type="primary"
class="btn btn--md btn--primary"
:loading="loadingUpdateSettings"
- :disabled="!isFormValid || !hasFormChanged"
- @click="doSubmit(formRef)"
+ :disabled="$v.$invalid || !hasFormChanged"
+ @click="doSubmit()"
>Update
@@ -250,6 +240,10 @@ import {
} from '@/shared/vuex/vuex.helpers'
import Message from '@/shared/message/message'
import platformOptions from '@/premium/eagle-eye/constants/eagle-eye-platforms.json'
+import { email, required } from '@vuelidate/validators'
+import useVuelidate from '@vuelidate/core'
+import AppFormItem from '@/shared/form/form-item.vue'
+import formChangeDetector from '@/shared/form/form-change'
const props = defineProps({
modelValue: {
@@ -265,32 +259,25 @@ const { loadingUpdateSettings } = mapState('eagleEye')
const emit = defineEmits(['update:modelValue'])
const rules = {
- email: [
- {
- required: true,
- message: 'This field is required',
- trigger: 'blur'
- },
- {
- type: 'email',
- message: 'Enter valid email',
- trigger: 'blur'
- }
- ]
+ email: {
+ required,
+ email
+ }
}
const form = reactive({
+ active: false,
+ email: '',
frequency: 'daily',
time: '09:00',
updateResults: true
})
+const { hasFormChanged, formSnapshot } =
+ formChangeDetector(form)
-const active = ref(false)
-const formRef = ref()
-const emailRef = ref()
+const $v = useVuelidate(rules, form)
-const tempForm = ref('')
-const tempActive = ref(false)
+const formRef = ref()
const drawerModel = computed({
get() {
@@ -301,21 +288,6 @@ const drawerModel = computed({
}
})
-const isFormValid = computed(() => {
- const emailRegex =
- /^(([^<>()\\[\].,;:\s@"]+(\.[^<>()\\[\].,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+\.)+[a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}))$/
- return (
- form.email.length > 0 && form.email.match(emailRegex)
- )
-})
-
-const hasFormChanged = computed(() => {
- return (
- tempForm.value !== JSON.stringify(form) ||
- active.value !== tempActive.value
- )
-})
-
const feed = ref(null)
const results = computed(() => {
@@ -360,7 +332,7 @@ const updateFeed = () => {
const fillForm = (user) => {
const { eagleEyeSettings } = user
- active.value = eagleEyeSettings.emailDigestActive || false
+ form.active = eagleEyeSettings.emailDigestActive || false
form.email =
eagleEyeSettings.emailDigest?.email || user.email
form.frequency =
@@ -371,33 +343,29 @@ const fillForm = (user) => {
: eagleEyeSettings.emailDigest?.matchFeedSettings
feed.value = user.eagleEyeSettings.emailDigest.feed
- tempForm.value = JSON.stringify(form)
- tempActive.value =
- eagleEyeSettings.emailDigestActive || false
+ formSnapshot()
}
-const doSubmit = async (formEl) => {
- if (!formEl) return
- await formEl.validate((valid) => {
- if (valid) {
- const data = {
- email: form.email,
- frequency: form.frequency,
- time: form.time,
- matchFeedSettings: form.updateResults,
- feed: !form.updateResults ? feed.value : undefined
- }
- doUpdateSettings({
- ...currentUser.value.eagleEyeSettings,
- emailDigestActive: active.value,
- emailDigest: data
- }).then(() => {
- Message.success(
- 'Email Digest settings successfully updated'
- )
- emit('update:modelValue', false)
- })
+const doSubmit = async () => {
+ $v.value.$touch()
+ if (!$v.value.$invalid) {
+ const data = {
+ email: form.email,
+ frequency: form.frequency,
+ time: form.time,
+ matchFeedSettings: form.updateResults,
+ feed: !form.updateResults ? feed.value : undefined
}
- })
+ doUpdateSettings({
+ ...currentUser.value.eagleEyeSettings,
+ emailDigestActive: form.active,
+ emailDigest: data
+ }).then(() => {
+ Message.success(
+ 'Email Digest settings successfully updated'
+ )
+ emit('update:modelValue', false)
+ })
+ }
}
const handleCancel = () => {
diff --git a/frontend/src/premium/eagle-eye/components/list/eagle-eye-settings-drawer.vue b/frontend/src/premium/eagle-eye/components/list/eagle-eye-settings-drawer.vue
index e7fd1db789..68fffda173 100644
--- a/frontend/src/premium/eagle-eye/components/list/eagle-eye-settings-drawer.vue
+++ b/frontend/src/premium/eagle-eye/components/list/eagle-eye-settings-drawer.vue
@@ -6,7 +6,7 @@
Keywords
-
+
*
-
-
-
-
-
-
+
-
-
-
- Semantic match
-
-
- Results semantically related
-
-
-
-
- Exact match
-
-
- Results containing the keyword
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
+
@@ -176,7 +120,7 @@
type="primary"
class="btn btn--md btn--primary"
:loading="loadingUpdateSettings"
- :disabled="!isFormValid || !hasFormChanged"
+ :disabled="$v.$invalid || !hasFormChanged"
@click="onSubmit(formRef)"
>Update
@@ -186,7 +130,6 @@
diff --git a/frontend/src/premium/eagle-eye/components/list/eagle-eye-settings.vue b/frontend/src/premium/eagle-eye/components/list/eagle-eye-settings.vue
index 749a514908..a8728f8276 100644
--- a/frontend/src/premium/eagle-eye/components/list/eagle-eye-settings.vue
+++ b/frontend/src/premium/eagle-eye/components/list/eagle-eye-settings.vue
@@ -72,6 +72,12 @@
+
+
+
+
From 6c134cf86bdb340b9bb48f6153c6acb813b1188e Mon Sep 17 00:00:00 2001
From: Gasper Grom
Date: Wed, 15 Feb 2023 16:33:39 +0100
Subject: [PATCH 4/5] Add default values and platform message
---
.../components/list/eagle-eye-settings-drawer.vue | 6 +++++-
.../components/onboard/eagle-eye-platforms-step.vue | 6 +++++-
frontend/src/premium/eagle-eye/eagle-eye-routes.js | 6 ++++++
.../premium/eagle-eye/pages/eagle-eye-onboard-page.vue | 9 +++++++--
4 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/frontend/src/premium/eagle-eye/components/list/eagle-eye-settings-drawer.vue b/frontend/src/premium/eagle-eye/components/list/eagle-eye-settings-drawer.vue
index 68fffda173..a44b7dd21d 100644
--- a/frontend/src/premium/eagle-eye/components/list/eagle-eye-settings-drawer.vue
+++ b/frontend/src/premium/eagle-eye/components/list/eagle-eye-settings-drawer.vue
@@ -92,7 +92,7 @@
>
Date published
-
+
@@ -101,6 +101,10 @@
+
+ For better results, we recommend choosing at
+ least 3 platforms.
+
diff --git a/frontend/src/premium/eagle-eye/components/onboard/eagle-eye-platforms-step.vue b/frontend/src/premium/eagle-eye/components/onboard/eagle-eye-platforms-step.vue
index b06138f996..e7e08b4fbb 100644
--- a/frontend/src/premium/eagle-eye/components/onboard/eagle-eye-platforms-step.vue
+++ b/frontend/src/premium/eagle-eye/components/onboard/eagle-eye-platforms-step.vue
@@ -20,12 +20,16 @@
-
+
Platforms
*
+
+ For better results, we recommend choosing at least 3
+ platforms.
+
{
+ console.log('/eagle-eye')
// Redirect to onboard page if user is not onboarded
if (await isEagleEyeFeatureEnabled()) {
const currentUser =
store.getters['auth/currentUser']
+ console.log(
+ !currentUser.eagleEyeSettings?.onboarded
+ )
if (!currentUser.eagleEyeSettings?.onboarded) {
next('/eagle-eye/onboard')
+ return
}
}
@@ -92,6 +97,7 @@ export default [
// Redirect to onboard page if user is not onboarded
if (currentUser.eagleEyeSettings?.onboarded) {
next('/eagle-eye')
+ return
}
next()
diff --git a/frontend/src/premium/eagle-eye/pages/eagle-eye-onboard-page.vue b/frontend/src/premium/eagle-eye/pages/eagle-eye-onboard-page.vue
index c2a478230c..29bc5b3093 100644
--- a/frontend/src/premium/eagle-eye/pages/eagle-eye-onboard-page.vue
+++ b/frontend/src/premium/eagle-eye/pages/eagle-eye-onboard-page.vue
@@ -51,6 +51,7 @@ import EagleEyeKeywords from '@/premium/eagle-eye/components/onboard/eagle-eye-k
import EagleEyePlatforms from '@/premium/eagle-eye/components/onboard/eagle-eye-platforms-step.vue'
import EagleEyeSummary from '@/premium/eagle-eye/components/onboard/eagle-eye-summary-step.vue'
import publishedDateOptions from '@/premium/eagle-eye/constants/eagle-eye-date-published.json'
+import platformOptions from '@/premium/eagle-eye/constants/eagle-eye-platforms.json'
import ConfirmDialog from '@/shared/dialog/confirm-dialog.js'
import { mapActions } from '@/shared/vuex/vuex.helpers'
import { useStore } from 'vuex'
@@ -61,14 +62,18 @@ const router = useRouter()
const { doUpdateSettings } = mapActions('eagleEye')
const step = ref(1)
+
const form = reactive({
keywords: [
{
value: null
}
],
- datePublished: publishedDateOptions[0].label,
- platforms: {}
+ datePublished: publishedDateOptions[1].label,
+ platforms: Object.keys(platformOptions).reduce((a, b) => {
+ a[b] = true
+ return a
+ }, {})
})
const headerContent = computed(() => {
From 14298bdaa902602cfa569aa97db620267e3b1e5b Mon Sep 17 00:00:00 2001
From: Gasper Grom
Date: Wed, 15 Feb 2023 16:45:32 +0100
Subject: [PATCH 5/5] Remove console logs & naming
---
.../eagle-eye/components/list/eagle-eye-settings.vue | 6 ------
frontend/src/premium/eagle-eye/eagle-eye-routes.js | 4 ----
2 files changed, 10 deletions(-)
diff --git a/frontend/src/premium/eagle-eye/components/list/eagle-eye-settings.vue b/frontend/src/premium/eagle-eye/components/list/eagle-eye-settings.vue
index a8728f8276..749a514908 100644
--- a/frontend/src/premium/eagle-eye/components/list/eagle-eye-settings.vue
+++ b/frontend/src/premium/eagle-eye/components/list/eagle-eye-settings.vue
@@ -72,12 +72,6 @@
-
-