@europeana/portal
Version:
Europeana Portal
459 lines (396 loc) • 17.9 kB
JavaScript
exports.ids = [94];
exports.modules = {
/***/ 345:
/***/ (function(module, exports, __webpack_require__) {
// style-loader: Adds some css to the DOM by adding a <style> tag
// load the styles
var content = __webpack_require__(449);
if(content.__esModule) content = content.default;
if(typeof content === 'string') content = [[module.i, content, '']];
if(content.locals) module.exports = content.locals;
// add CSS to SSR context
var add = __webpack_require__(13).default
module.exports.__inject__ = function (context) {
add("134220cc", content, true, context)
};
/***/ }),
/***/ 448:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _node_modules_vue_style_loader_index_js_ref_7_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_vue_loader_lib_index_js_vue_loader_options_FeedbackWidget_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(345);
/* harmony import */ var _node_modules_vue_style_loader_index_js_ref_7_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_vue_loader_lib_index_js_vue_loader_options_FeedbackWidget_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_ref_7_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_vue_loader_lib_index_js_vue_loader_options_FeedbackWidget_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__);
/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_index_js_ref_7_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_vue_loader_lib_index_js_vue_loader_options_FeedbackWidget_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__) if(["default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_vue_style_loader_index_js_ref_7_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_vue_loader_lib_index_js_vue_loader_options_FeedbackWidget_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
/***/ }),
/***/ 449:
/***/ (function(module, exports, __webpack_require__) {
// Imports
var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(12);
var ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(false);
// Module
___CSS_LOADER_EXPORT___.push([module.i, ".feedback-container{position:fixed;right:1rem;bottom:1rem;z-index:1050}@media(min-width: 576px){.feedback-container{left:auto}}.feedback-container .feedback-button{position:fixed;right:1rem;bottom:1rem;z-index:1000;text-transform:capitalize;padding:.875rem;line-height:1;white-space:nowrap;border-radius:50%;max-width:50px;transition:max-width .35s ease-out,border-radius .3s ease-out;box-shadow:0 2px 8px rgba(26,26,26,.25)}.feedback-container .feedback-button .icon-ic-feedback{padding-right:0;font-size:1.25rem;line-height:1}.feedback-container .feedback-button .feedback-button-text{transition:opacity .3s ease-out;opacity:0}.feedback-container .feedback-button.hide-button{display:none}.feedback-container .feedback-button.big{border-radius:.3rem;max-width:220px;transition:max-width .75s ease-out,border-radius .25s ease-out}.feedback-container .feedback-button.big .feedback-button-text{opacity:1;transition:opacity .3s ease-out}.feedback-container .feedback-button.big .icon-ic-feedback{padding-right:.25rem}@media(max-width: 576px){.feedback-container .feedback-button.big{max-width:50px;border-radius:50%}.feedback-container .feedback-button.big .feedback-button-text{opacity:0}.feedback-container .feedback-button.big .icon-ic-feedback{padding-right:0}}.feedback-widget{border-radius:.3rem;background-color:#fff;color:#4d4d4d;visibility:hidden;opacity:0;transform:translate(0, 50px);transition:opacity .15s linear,transform .3s ease-out;position:fixed;left:1rem;right:1rem;bottom:1rem;margin:0;overflow:hidden}@media(min-width: 576px){.feedback-widget{left:auto;min-width:360px}}.feedback-widget.show-feedback-widget{opacity:1;visibility:visible;transform:none}.feedback-widget .feedback-header{background-color:#0a72cc;padding:.75rem 1rem}.feedback-widget .feedback-header h5{color:#fff;font-size:1rem;line-height:1.5;font-weight:600;margin:0}.feedback-widget .feedback-form{padding:1rem}.feedback-widget .feedback-form .form-fields{flex:0 1 100%;width:0}.feedback-widget .feedback-form .form-buttons{flex:0 1 100%}@media(max-width: 576px){.feedback-widget .feedback-form .form-buttons{flex-wrap:wrap}.feedback-widget .feedback-form .form-buttons .button-group-right{width:100%}.feedback-widget .feedback-form .form-buttons button{width:100%;margin:.5rem 0 0 !important}}.feedback-widget .feedback-form .form-control{padding:.75rem;background:#fff;border:1px solid #4d4d4d;border-radius:.375rem;font-size:1rem;height:3rem;color:#1a1a1a}.feedback-widget .feedback-form .form-control:focus{border-color:#0a72cc}.feedback-widget .feedback-form .form-control.is-invalid{border-color:#e02020}.feedback-widget .feedback-form textarea.form-control{height:auto}.feedback-widget .feedback-form .form-group{margin-bottom:0}.feedback-widget .feedback-form .form-text{font-size:.875rem;margin:.75rem 0 0}.feedback-widget .feedback-form .form-text a{color:#4d4d4d}.feedback-widget .feedback-success{color:#1a1a1a}.feedback-widget .icon-check-circle::before{color:#0a72cc;font-size:2.0625rem}.feedback-widget .icon-cancel-circle::before{color:#e02020;font-size:2.0625rem}", ""]);
// Exports
module.exports = ___CSS_LOADER_EXPORT___;
/***/ }),
/***/ 564:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);
// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/components/feedback/FeedbackWidget.vue?vue&type=template&id=3964e0c4&
var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"feedback-container"},[_c('b-button',{ref:"button",staticClass:"feedback-button text-decoration-none",class:_vm.buttonClasses,attrs:{"variant":"primary","data-qa":"feedback button","size":"lg"},on:{"click":_vm.showFeedbackForm,"mouseover":function($event){_vm.bigButton = true},"mouseleave":function($event){_vm.bigButton = false}}},[_c('span',{staticClass:"icon-ic-feedback d-inline-flex"}),_vm._v(" "),_c('span',{staticClass:"feedback-button-text",attrs:{"data-qa":"feedback button text"}},[_vm._v(_vm._s(_vm.$t('actions.feedback')))])]),_vm._ssrNode(" "),_vm._ssrNode("<div role=\"dialog\" aria-labelledby=\"dialogHeader\" data-qa=\"feedback widget\" content-class=\"shadow\""+(_vm._ssrClass("feedback-widget shadow",_vm.showWidget ? 'show-feedback-widget' : null))+">","</div>",[_vm._ssrNode("<div id=\"dialogHeader\" class=\"feedback-header\"><h5>"+_vm._ssrEscape(_vm._s(_vm.$t('feedback.title')))+"</h5></div> "),_c('b-form',{staticClass:"feedback-form",attrs:{"data-qa":"feedback widget form"},on:{"submit":function($event){$event.preventDefault();return _vm.submitForm.apply(null, arguments)}}},[_c('b-form-group',[_c('div',{staticClass:"d-flex flex-wrap"},[_c('div',{staticClass:"form-fields"},[(_vm.currentStep === 1)?_c('div',[_c('b-form-textarea',{ref:"input",attrs:{"name":"feedback","required":"required","placeholder":_vm.$t('feedback.validFeedback'),"state":_vm.feedbackInputState,"rows":"5","data-qa":"feedback textarea","aria-describedby":"input-live-feedback"},on:{"invalid":_vm.flagInvalidFeedback},model:{value:(_vm.feedback),callback:function ($$v) {_vm.feedback=$$v},expression:"feedback"}}),_vm._v(" "),_c('b-form-invalid-feedback',{attrs:{"id":"input-live-feedback","data-qa":"feedback message invalid"}},[_vm._v("\n "+_vm._s(_vm.$t('feedback.validFeedback'))+"\n ")])],1):_vm._e(),_vm._v(" "),(_vm.currentStep === 2)?_c('div',{attrs:{"id":"step2"}},[_c('b-form-input',{attrs:{"autofocus":"","type":"email","name":"email","placeholder":_vm.$t('feedback.form.placeholders.email'),"state":_vm.emailInputState,"aria-describedby":"input-live-feedback","data-qa":"feedback email input"},on:{"invalid":_vm.flagInvalidEmail},model:{value:(_vm.email),callback:function ($$v) {_vm.email=$$v},expression:"email"}}),_vm._v(" "),_c('b-form-invalid-feedback',{attrs:{"id":"input-live-feedback","data-qa":"feedback email invalid"}},[_vm._v("\n "+_vm._s(_vm.$t('feedback.validEmail'))+"\n ")]),_vm._v(" "),_c('b-form-text',{attrs:{"id":"input-live-help"}},[_c('p',{staticClass:"mb-0"},[_vm._v("\n "+_vm._s(_vm.$t('feedback.emailOptional'))+"\n ")]),_vm._v(" "),_c('i18n',{attrs:{"path":"feedback.policies","tag":"span"}},[_c('b-link',{attrs:{"to":_vm.$path('/rights'),"target":"_blank"}},[_vm._v("\n "+_vm._s(_vm.$t('feedback.termsOfService'))+"\n ")]),_vm._v(" "),_c('b-link',{attrs:{"to":_vm.$path('/rights/privacy-policy'),"target":"_blank"}},[_vm._v("\n "+_vm._s(_vm.$t('feedback.privacyPolicy'))+"\n ")])],1)],1)],1):_vm._e(),_vm._v(" "),(_vm.currentStep == 3)?_c('div',{staticClass:"feedback-success d-flex align-items-center",attrs:{"id":"step3"}},[_c('span',{class:_vm.requestSuccess ? 'icon-check-circle pr-3' : 'icon-cancel-circle pr-3'}),_vm._v(" "),(_vm.requestSuccess)?_c('span',[_c('p',{staticClass:"mb-0"},[_vm._v(_vm._s(_vm.$t('feedback.success')))]),_vm._v(" "),_c('p',{staticClass:"mb-0"},[_vm._v(_vm._s(_vm.$t('feedback.thankYou')))])]):(_vm.requestSuccess === false)?_c('span',[_c('p',{staticClass:"mb-0"},[_vm._v(_vm._s(_vm.$t('feedback.failed')))])]):_vm._e()]):_vm._e()]),_vm._v(" "),_c('div',{staticClass:"form-buttons d-flex justify-content-between align-items-end"},[(_vm.showCancelButton)?_c('b-button',{staticClass:"mt-3",attrs:{"data-qa":"feedback cancel button","variant":"outline-primary"},on:{"click":function($event){$event.preventDefault();return _vm.hideFeedbackForm.apply(null, arguments)}}},[_vm._v("\n "+_vm._s(_vm.$t('actions.cancel'))+"\n ")]):_vm._e(),_vm._v(" "),_c('div',{staticClass:"button-group-right"},[(_vm.showSkipButton)?_c('b-button',{staticClass:"mt-3 ml-2",attrs:{"data-qa":"feedback skip button","variant":"outline-primary","disabled":_vm.disableSkipButton},on:{"click":_vm.skipEmail}},[_vm._v("\n "+_vm._s(_vm.$t('actions.skip'))+"\n ")]):_vm._e(),(_vm.showNextButton)?_c('b-button',{staticClass:"button-next-step mt-3 ml-2",attrs:{"data-qa":"feedback next button","variant":"primary","type":"submit","disabled":_vm.disableNextButton}},[_vm._v("\n "+_vm._s(_vm.$t('actions.next'))+"\n ")]):_vm._e(),_vm._v(" "),(_vm.showSendButton)?_c('b-button',{staticClass:"mt-3 ml-2",attrs:{"data-qa":"feedback send button","variant":"primary","type":"submit","disabled":_vm.disableSendButton}},[_vm._v("\n "+_vm._s(_vm.$t('actions.send'))+"\n ")]):_vm._e(),_vm._v(" "),(_vm.showCloseButton)?_c('b-button',{staticClass:"mt-3 ml-2",attrs:{"data-qa":"feedback close button","variant":"primary"},on:{"click":function($event){$event.preventDefault();return _vm.hideFeedbackForm.apply(null, arguments)}}},[_vm._v("\n "+_vm._s(_vm.$t('actions.close'))+"\n ")]):_vm._e()],1)],1)])])],1)],2)],2)}
var staticRenderFns = []
// CONCATENATED MODULE: ./src/components/feedback/FeedbackWidget.vue?vue&type=template&id=3964e0c4&
// EXTERNAL MODULE: external "axios"
var external_axios_ = __webpack_require__(7);
var external_axios_default = /*#__PURE__*/__webpack_require__.n(external_axios_);
// CONCATENATED MODULE: ./node_modules/babel-loader/lib??ref--2-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/feedback/FeedbackWidget.vue?vue&type=script&lang=js&
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
/* harmony default export */ var FeedbackWidgetvue_type_script_lang_js_ = ({
name: 'FeedbackWidget',
data() {
return {
showWidget: false,
currentStep: 1,
feedback: '',
feedbackInputState: true,
email: '',
emailInputState: true,
requestSuccess: null,
bigButton: true,
sending: false
};
},
computed: {
showCancelButton() {
return this.currentStep < 3 || !this.requestSuccess;
},
showNextButton() {
return this.currentStep < 3;
},
disableNextButton() {
return this.currentStep === 1 && this.feedback === '' || this.currentStep === 2 && this.email === '' || this.sending;
},
disableSendButton() {
return this.sending;
},
disableSkipButton() {
return this.sending;
},
showSkipButton() {
return this.currentStep === 2;
},
showSendButton() {
return this.currentStep === 3 && !this.requestSuccess;
},
showCloseButton() {
return !this.showCancelButton;
},
buttonClasses() {
return {
'hide-button': this.showWidget,
big: this.bigButton
};
}
},
mounted() {
window.addEventListener('scroll', () => this.bigButton = false, {
once: true
});
},
methods: {
resetForm() {
this.currentStep = 1;
this.feedback = '';
this.feedbackInputState = true;
this.email = '';
this.emailInputState = true;
this.requestSuccess = null;
},
showFeedbackForm() {
this.resetForm();
this.showWidget = true;
this.$nextTick(() => {
const textarea = this.$refs.input;
textarea.focus();
});
},
hideFeedbackForm() {
this.showWidget = false;
this.$nextTick(() => {
const button = this.$refs.button;
button.focus();
});
},
goToStep(step) {
this.currentStep = step;
},
flagInvalidEmail() {
this.emailInputState = false;
},
flagInvalidFeedback() {
this.feedbackInputState = false;
},
skipEmail() {
this.email = '';
this.submitForm();
},
validateFeedbackLength() {
return this.$options.filters.wordLength(this.feedback) >= 5;
},
async submitForm() {
// If this handler gets called, then the fields are valid
this.feedbackInputState = true;
this.emailInputState = true;
if (this.currentStep === 1 && !this.validateFeedbackLength()) {
this.feedbackInputState = false;
return;
}
if (this.currentStep > 1) {
await this.sendFeedback();
}
if (this.currentStep < 3) {
this.goToStep(this.currentStep + 1);
}
},
sendFeedback() {
this.sending = true;
return this.postFeedbackMessage().then(() => {
this.requestSuccess = true;
if (this.currentStep < 3) {
this.goToStep(this.currentStep + 1);
}
}).catch(() => {
this.requestSuccess = false;
}).finally(() => {
this.sending = false;
});
},
postFeedbackMessage() {
const postData = {
feedback: this.feedback,
pageUrl: window.location.href,
browser: navigator.userAgent,
screensize: `${window.innerWidth} x ${window.innerHeight}`
};
if (this.email && this.email !== '') {
postData.email = this.email;
} // For testing purposes, uncomment the following `if` block to cause the
// request always to fail on the first attempt, showing the error message,
// but then succeeding on subsequent attempts.
// if (this.requestSuccess === null) {
// delete postData.summary;
// }
return external_axios_default.a.create({
baseURL: this.$config.app.baseUrl
}).post('/_api/jira/service-desk', postData);
}
}
});
// CONCATENATED MODULE: ./src/components/feedback/FeedbackWidget.vue?vue&type=script&lang=js&
/* harmony default export */ var feedback_FeedbackWidgetvue_type_script_lang_js_ = (FeedbackWidgetvue_type_script_lang_js_);
// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(3);
// CONCATENATED MODULE: ./src/components/feedback/FeedbackWidget.vue
function injectStyles (context) {
var style0 = __webpack_require__(448)
if (style0.__inject__) style0.__inject__(context)
}
/* normalize component */
var component = Object(componentNormalizer["a" /* default */])(
feedback_FeedbackWidgetvue_type_script_lang_js_,
render,
staticRenderFns,
false,
injectStyles,
null,
"66a0346c"
)
/* harmony default export */ var FeedbackWidget = __webpack_exports__["default"] = (component.exports);
/***/ })
};;
//# sourceMappingURL=94.js.map