From ae57129f98432a405ecbc35b1ff16981c81a144a Mon Sep 17 00:00:00 2001 From: mayakokits Date: Fri, 24 Nov 2017 19:10:11 +0100 Subject: [PATCH] [wizard] Redirect app: add filters. --- campaignion_wizard/redirects_app/README.md | 35 +++++ .../src/components/FilterEditor.vue | 140 ++++++++++++++++++ .../src/components/RedirectDialog.vue | 14 +- .../redirects_app/src/store/state.js | 16 +- .../redirects_app/src/utils/defaults.js | 12 ++ 5 files changed, 210 insertions(+), 7 deletions(-) create mode 100644 campaignion_wizard/redirects_app/src/components/FilterEditor.vue diff --git a/campaignion_wizard/redirects_app/README.md b/campaignion_wizard/redirects_app/README.md index cf3637635..7546df6a7 100644 --- a/campaignion_wizard/redirects_app/README.md +++ b/campaignion_wizard/redirects_app/README.md @@ -22,6 +22,41 @@ JSON Response: ### Persist data on form submit +``` json +{ + "redirects": [ + { + "id": null, + "label": "My internal label", + "destination": "node/20", + "prettyDestination": "Pretty title of my node (20)", + "filters": [ + { + "id": null, + "type": "opt-in", + "value": true + }, + { + "id": null, + "type": "submission-field", + "field": "f_name", + "operator": "contains", + "value": "foo" + } + ] + } + ] +} +``` + +Operators: + +* `==` is +* `!=` is not +* `contains` contains +* `!contains` does not contain +* `regexp` matches regular expression +* `!regexp` doesn’t match regular expression ## Build Setup diff --git a/campaignion_wizard/redirects_app/src/components/FilterEditor.vue b/campaignion_wizard/redirects_app/src/components/FilterEditor.vue new file mode 100644 index 000000000..1ca5e78b1 --- /dev/null +++ b/campaignion_wizard/redirects_app/src/components/FilterEditor.vue @@ -0,0 +1,140 @@ + + + + + diff --git a/campaignion_wizard/redirects_app/src/components/RedirectDialog.vue b/campaignion_wizard/redirects_app/src/components/RedirectDialog.vue index cea1fa14b..21da75663 100644 --- a/campaignion_wizard/redirects_app/src/components/RedirectDialog.vue +++ b/campaignion_wizard/redirects_app/src/components/RedirectDialog.vue @@ -27,14 +27,13 @@ />
{{ text('destination error') }}
- + {{ text('unsaved changes') }} {{ text('Cancel') }} @@ -50,10 +49,12 @@ import {OPERATORS, emptyRedirect} from '@/utils/defaults' import {mapState} from 'vuex' import {isEqual, omit} from 'lodash' import DestinationField from './DestinationField' +import FilterEditor from './FilterEditor' export default { components: { - DestinationField + DestinationField, + FilterEditor }, data () { @@ -102,7 +103,8 @@ export default { }, ...mapState([ 'redirects', - 'currentRedirectIndex' + 'currentRedirectIndex', + 'filterFields' ]) }, diff --git a/campaignion_wizard/redirects_app/src/store/state.js b/campaignion_wizard/redirects_app/src/store/state.js index 10613999e..d825c3ed6 100644 --- a/campaignion_wizard/redirects_app/src/store/state.js +++ b/campaignion_wizard/redirects_app/src/store/state.js @@ -5,6 +5,20 @@ export function createState () { redirects: [], defaultRedirect: emptyRedirect(), currentRedirectIndex: null, // the item in the redirects array that is currently edited or -1 for a new item - initialData: {} + initialData: {}, + filterFields: [ + { + id: 'f_name', + label: 'First name' + }, + { + id: 'l_name', + label: 'Last name' + }, + { + id: 'email', + label: 'Email address' + } + ] } } diff --git a/campaignion_wizard/redirects_app/src/utils/defaults.js b/campaignion_wizard/redirects_app/src/utils/defaults.js index 1d7719e76..2c1a2057e 100644 --- a/campaignion_wizard/redirects_app/src/utils/defaults.js +++ b/campaignion_wizard/redirects_app/src/utils/defaults.js @@ -7,9 +7,21 @@ export const OPERATORS = { label: Drupal.t('is not'), phrase: Drupal.t('@attribute is not @value') }, + 'contains': { + label: Drupal.t('contains'), + phrase: Drupal.t('@attribute contains @value') + }, + '!contains': { + label: Drupal.t('does not contain'), + phrase: Drupal.t('@attribute doesn’t contain @value') + }, 'regexp': { label: Drupal.t('matches'), phrase: Drupal.t('@attribute matches @value') + }, + '!regexp': { + label: Drupal.t('does not match'), + phrase: Drupal.t('@attribute doesn’t match @value') } }