From ef76fc25963d57e7fcd0cb0264f1159eb6826202 Mon Sep 17 00:00:00 2001 From: Bachir Soussi Chiadmi Date: Thu, 11 Apr 2019 00:12:23 +0200 Subject: [PATCH] tested shared Vuex store, created d8 userblock, enabled JSONAPI module --- composer.json | 1 + composer.lock | 70 +++++++++++- config/sync/block.block.userblock.yml | 20 ++++ ....entity_form_display.user.user.default.yml | 16 ++- ....entity_view_display.user.user.default.yml | 16 ++- config/sync/core.extension.yml | 2 + config/sync/jsonapi.settings.yml | 4 + .../user_block/src/Plugin/Block/UserBlock.php | 83 ++++++++++++++ .../custom/user_block/user_block.info.yml | 5 + .../custom/user_block/user_block.module | 24 ++++ .../custom/materiotheme/assets/dist/main.js | 104 +++++++++++++++--- .../materiotheme/assets/scripts/main.js | 59 +++++++--- .../materiotheme/vuejs/api/json-axios.js | 14 +++ .../{rest/http-axios.js => api/rest-axios.js} | 2 +- .../vuejs/components/Content/Test.vue | 22 ++++ .../vuejs/components/User/UserBlock.vue | 4 +- .../materiotheme/vuejs/store/modules/user.js | 56 ++++++++-- 17 files changed, 442 insertions(+), 60 deletions(-) create mode 100644 config/sync/block.block.userblock.yml create mode 100644 config/sync/jsonapi.settings.yml create mode 100644 web/modules/custom/user_block/src/Plugin/Block/UserBlock.php create mode 100644 web/modules/custom/user_block/user_block.info.yml create mode 100644 web/modules/custom/user_block/user_block.module create mode 100644 web/themes/custom/materiotheme/vuejs/api/json-axios.js rename web/themes/custom/materiotheme/vuejs/{rest/http-axios.js => api/rest-axios.js} (90%) create mode 100644 web/themes/custom/materiotheme/vuejs/components/Content/Test.vue diff --git a/composer.json b/composer.json index 890188be..2a22b1b4 100644 --- a/composer.json +++ b/composer.json @@ -33,6 +33,7 @@ "drupal/console": "^1.0.2", "drupal/core": "^8.6.0", "drupal/entity_clone": "^1.0", + "drupal/jsonapi": "^2.4", "drupal/login_history": "1.x-dev", "drupal/mailgun": "1.x-dev", "drupal/mailsystem": "^4.1", diff --git a/composer.lock b/composer.lock index aa1dec7f..11150b59 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "493ce32d7cd55035c10e59679a42f6da", + "content-hash": "4d94cbba5e34b10c72cf4a4fe45ca88f", "packages": [ { "name": "alchemy/zippy", @@ -6435,6 +6435,70 @@ "source": "http://cgit.drupalcode.org/interval" } }, + { + "name": "drupal/jsonapi", + "version": "2.4.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/jsonapi.git", + "reference": "8.x-2.4" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/jsonapi-8.x-2.4.zip", + "reference": "8.x-2.4", + "shasum": "5f710c1c602378748fa3b21ceec0977de62359ed" + }, + "require": { + "drupal/core": "^8.5.11" + }, + "require-dev": { + "drupal/schemata": "1.x-dev#8325d172e1d6880aa24073f8f751ef089282cf9a", + "drupal/schemata_json_schema": "*", + "justinrainbow/json-schema": "^5.2" + }, + "type": "drupal-module", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + }, + "drupal": { + "version": "8.x-2.4", + "datestamp": "1553554702", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Wim Leers", + "homepage": "https://www.drupal.org/user/99777" + }, + { + "name": "dawehner", + "homepage": "https://www.drupal.org/user/99340" + }, + { + "name": "e0ipso", + "homepage": "https://www.drupal.org/user/550110" + }, + { + "name": "gabesullice", + "homepage": "https://www.drupal.org/user/2287430" + } + ], + "description": "Provides a JSON API standards-compliant API for accessing and manipulating Drupal content and configuration entities.", + "homepage": "https://www.drupal.org/project/jsonapi", + "support": { + "source": "https://git.drupalcode.org/project/jsonapi" + } + }, { "name": "drupal/kint", "version": "2.0.0", @@ -14061,12 +14125,12 @@ "version": "v1.6.5", "source": { "type": "git", - "url": "https://github.com/mikey179/vfsStream.git", + "url": "https://github.com/bovigo/vfsStream.git", "reference": "d5fec95f541d4d71c4823bb5e30cf9b9e5b96145" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mikey179/vfsStream/zipball/d5fec95f541d4d71c4823bb5e30cf9b9e5b96145", + "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/d5fec95f541d4d71c4823bb5e30cf9b9e5b96145", "reference": "d5fec95f541d4d71c4823bb5e30cf9b9e5b96145", "shasum": "" }, diff --git a/config/sync/block.block.userblock.yml b/config/sync/block.block.userblock.yml new file mode 100644 index 00000000..14b0a308 --- /dev/null +++ b/config/sync/block.block.userblock.yml @@ -0,0 +1,20 @@ +uuid: f6ac7bc7-be23-4375-a237-1d9a36edb17e +langcode: en +status: true +dependencies: + module: + - user_block + theme: + - materiotheme +id: userblock +theme: materiotheme +region: header_right +weight: 0 +provider: null +plugin: user_block +settings: + id: user_block + label: 'User block' + provider: user_block + label_display: visible +visibility: { } diff --git a/config/sync/core.entity_form_display.user.user.default.yml b/config/sync/core.entity_form_display.user.user.default.yml index 317a0fe1..1654bd2d 100644 --- a/config/sync/core.entity_form_display.user.user.default.yml +++ b/config/sync/core.entity_form_display.user.user.default.yml @@ -3,12 +3,12 @@ langcode: en status: true dependencies: config: + - field.field.user.user.commerce_remote_id - field.field.user.user.field_company - field.field.user.user.field_member_type - field.field.user.user.field_memo - field.field.user.user.field_showroom module: - - path - user id: user.user.default targetEntityType: user @@ -21,7 +21,7 @@ content: settings: { } third_party_settings: { } contact: - weight: 6 + weight: 8 region: content settings: { } third_party_settings: { } @@ -35,7 +35,7 @@ content: type: entity_reference_autocomplete region: content field_member_type: - weight: 8 + weight: 4 settings: { } third_party_settings: { } type: options_select @@ -58,12 +58,12 @@ content: type: entity_reference_autocomplete region: content language: - weight: 4 + weight: 5 region: content settings: { } third_party_settings: { } matomo: - weight: 5 + weight: 6 region: content settings: { } third_party_settings: { } @@ -73,5 +73,11 @@ content: region: content settings: { } third_party_settings: { } + simplenews: + weight: 7 + region: content + settings: { } + third_party_settings: { } hidden: + commerce_remote_id: true langcode: true diff --git a/config/sync/core.entity_view_display.user.user.default.yml b/config/sync/core.entity_view_display.user.user.default.yml index 09be0274..5ce6b80c 100644 --- a/config/sync/core.entity_view_display.user.user.default.yml +++ b/config/sync/core.entity_view_display.user.user.default.yml @@ -3,6 +3,7 @@ langcode: en status: true dependencies: config: + - field.field.user.user.commerce_remote_id - field.field.user.user.field_company - field.field.user.user.field_member_type - field.field.user.user.field_memo @@ -16,7 +17,7 @@ bundle: user mode: default content: field_company: - weight: 6 + weight: 3 label: above settings: link: true @@ -24,21 +25,21 @@ content: type: entity_reference_label region: content field_member_type: - weight: 9 + weight: 1 label: above settings: { } third_party_settings: { } type: list_default region: content field_memo: - weight: 8 + weight: 4 label: above settings: { } third_party_settings: { } type: basic_string region: content field_showroom: - weight: 7 + weight: 2 label: above settings: link: true @@ -46,11 +47,14 @@ content: type: entity_reference_label region: content member_for: - weight: 5 + weight: 0 + region: content settings: { } third_party_settings: { } - region: content hidden: + commerce_remote_id: true langcode: true profile_contact_company: true + profile_customer: true profile_member: true + simplenews: true diff --git a/config/sync/core.extension.yml b/config/sync/core.extension.yml index e0b95e4f..bc7def32 100644 --- a/config/sync/core.extension.yml +++ b/config/sync/core.extension.yml @@ -72,6 +72,7 @@ module: image: 0 inline_entity_form: 0 interval: 0 + jsonapi: 0 kint: 0 language: 0 link: 0 @@ -134,6 +135,7 @@ module: update: 0 url_to_video_filter: 0 user: 0 + user_block: 0 video_embed_field: 0 video_embed_wysiwyg: 0 views_bulk_edit: 0 diff --git a/config/sync/jsonapi.settings.yml b/config/sync/jsonapi.settings.yml new file mode 100644 index 00000000..88280541 --- /dev/null +++ b/config/sync/jsonapi.settings.yml @@ -0,0 +1,4 @@ +langcode: en +read_only: true +_core: + default_config_hash: p_qzzTwtOMiIPE7CyG0wD6M-UCpBp6Y5E4LhNCnCRpY diff --git a/web/modules/custom/user_block/src/Plugin/Block/UserBlock.php b/web/modules/custom/user_block/src/Plugin/Block/UserBlock.php new file mode 100644 index 00000000..f1574eeb --- /dev/null +++ b/web/modules/custom/user_block/src/Plugin/Block/UserBlock.php @@ -0,0 +1,83 @@ +get('current_user') + ); + } + + /** + * @param array $configuration + * @param string $plugin_id + * @param mixed $plugin_definition + * @param \Drupal\Core\Session\AccountProxyInterface $account + */ + public function __construct(array $configuration, $plugin_id, $plugin_definition, AccountProxyInterface $account) { + parent::__construct($configuration, $plugin_id, $plugin_definition); + $this->user = $account; + } + + /** + * {@inheritdoc} + */ + public function build() { + $build = []; + // dpm($this->user); + if($this->user->id()){ + $user_url = Url::fromRoute('entity.user.canonical', ['user' => $this->user->id()]); + $build['user-link'] = array( + '#title' => $this->user->getEmail(), + '#type' => 'link', + '#url' => $user_url, + '#options'=>array( + 'attributes' => array( + 'data-drupal-link-system-path' => $user_url->getInternalPath(), + 'alt' => t('User account'), + ) + ) + ); + $logout_url = Url::fromRoute('user.logout'); + $build['user-logout'] = array( + '#title' => t('Logout'), + '#type' => 'link', + '#url' => $logout_url, + '#options'=>array( + 'attributes' => array( + 'data-drupal-link-system-path' => $logout_url->getInternalPath(), + 'alt' => t('Logout'), + ) + ) + ); + } + return $build; + } + +} diff --git a/web/modules/custom/user_block/user_block.info.yml b/web/modules/custom/user_block/user_block.info.yml new file mode 100644 index 00000000..9e0208e5 --- /dev/null +++ b/web/modules/custom/user_block/user_block.info.yml @@ -0,0 +1,5 @@ +name: 'user_block' +type: module +description: 'Provide a block with user name/email and logout link' +core: 8.x +package: 'Custom' diff --git a/web/modules/custom/user_block/user_block.module b/web/modules/custom/user_block/user_block.module new file mode 100644 index 00000000..e3d45320 --- /dev/null +++ b/web/modules/custom/user_block/user_block.module @@ -0,0 +1,24 @@ +' . t('About') . ''; +// $output .= '

' . t('Provide a block with user name/email and logout link') . '

'; +// return $output; +// +// default: +// } +// } diff --git a/web/themes/custom/materiotheme/assets/dist/main.js b/web/themes/custom/materiotheme/assets/dist/main.js index aed99745..1b0a2f64 100644 --- a/web/themes/custom/materiotheme/assets/dist/main.js +++ b/web/themes/custom/materiotheme/assets/dist/main.js @@ -385,6 +385,18 @@ eval("\n\nvar bind = __webpack_require__(/*! ./helpers/bind */ \"./node_modules/ /***/ }), +/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./web/themes/custom/materiotheme/vuejs/components/Content/Test.vue?vue&type=script&lang=js&": +/*!*************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./web/themes/custom/materiotheme/vuejs/components/Content/Test.vue?vue&type=script&lang=js& ***! + \*************************************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n computed: { ...Object(vuex__WEBPACK_IMPORTED_MODULE_0__[\"mapState\"])({\n token: state => state.User.token,\n isloggedin: state => state.User.isloggedin\n })\n }\n});\n\n//# sourceURL=webpack:///./web/themes/custom/materiotheme/vuejs/components/Content/Test.vue?./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options"); + +/***/ }), + /***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js?!./web/themes/custom/materiotheme/vuejs/components/User/Login.vue?vue&type=script&lang=js&": /*!***********************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./web/themes/custom/materiotheme/vuejs/components/User/Login.vue?vue&type=script&lang=js& ***! @@ -405,7 +417,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vuex /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var vuejs_components_User_Login__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vuejs/components/User/Login */ \"./web/themes/custom/materiotheme/vuejs/components/User/Login.vue\");\n/* harmony import */ var vuejs_components_User_UserTools__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vuejs/components/User/UserTools */ \"./web/themes/custom/materiotheme/vuejs/components/User/UserTools.vue\");\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n // data () {\n // return {}\n // },\n computed: { ...Object(vuex__WEBPACK_IMPORTED_MODULE_0__[\"mapState\"])({\n token: state => state.User.token\n })\n },\n components: {\n Login: vuejs_components_User_Login__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n UserTools: vuejs_components_User_UserTools__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n }\n});\n\n//# sourceURL=webpack:///./web/themes/custom/materiotheme/vuejs/components/User/UserBlock.vue?./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var vuejs_components_User_Login__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vuejs/components/User/Login */ \"./web/themes/custom/materiotheme/vuejs/components/User/Login.vue\");\n/* harmony import */ var vuejs_components_User_UserTools__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vuejs/components/User/UserTools */ \"./web/themes/custom/materiotheme/vuejs/components/User/UserTools.vue\");\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n // data () {\n // return {}\n // },\n computed: { ...Object(vuex__WEBPACK_IMPORTED_MODULE_0__[\"mapState\"])({\n isloggedin: state => state.User.isloggedin\n })\n },\n components: {\n Login: vuejs_components_User_Login__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n UserTools: vuejs_components_User_UserTools__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n }\n});\n\n//# sourceURL=webpack:///./web/themes/custom/materiotheme/vuejs/components/User/UserBlock.vue?./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options"); /***/ }), @@ -524,6 +536,18 @@ eval("/* WEBPACK VAR INJECTION */(function(global) {var scope = typeof global != /***/ }), +/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./web/themes/custom/materiotheme/vuejs/components/Content/Test.vue?vue&type=template&id=8187962c&scoped=true&lang=html&": +/*!*************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./web/themes/custom/materiotheme/vuejs/components/Content/Test.vue?vue&type=template&id=8187962c&scoped=true&lang=html& ***! + \*************************************************************************************************************************************************************************************************************************************************************/ +/*! exports provided: render, staticRenderFns */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { attrs: { id: \"block-pagetitle\" } }, [\n _c(\"h1\", [\n _vm._v(\"Test Shared Store ( logged in: \" + _vm._s(_vm.isloggedin) + \" )\")\n ]),\n _vm._v(\" \"),\n _vm.isloggedin ? _c(\"h2\", [_vm._v(\"Shared store is working\")]) : _vm._e()\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./web/themes/custom/materiotheme/vuejs/components/Content/Test.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options"); + +/***/ }), + /***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./web/themes/custom/materiotheme/vuejs/components/User/Login.vue?vue&type=template&id=0419cc67&scoped=true&lang=html&": /*!***********************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./web/themes/custom/materiotheme/vuejs/components/User/Login.vue?vue&type=template&id=0419cc67&scoped=true&lang=html& ***! @@ -544,7 +568,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.token ? _c(\"UserTools\") : _c(\"Login\")\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./web/themes/custom/materiotheme/vuejs/components/User/UserBlock.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.isloggedin ? _c(\"UserTools\") : _c(\"Login\")\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./web/themes/custom/materiotheme/vuejs/components/User/UserBlock.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options"); /***/ }), @@ -639,7 +663,7 @@ eval("var g; // This works in non-strict mode\n\ng = function () {\n return thi /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm.js\");\n/* harmony import */ var vuejs_store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vuejs/store */ \"./web/themes/custom/materiotheme/vuejs/store/index.js\");\n/* harmony import */ var vuejs_components_User_UserBlock__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vuejs/components/User/UserBlock */ \"./web/themes/custom/materiotheme/vuejs/components/User/UserBlock.vue\");\n/* harmony import */ var theme_assets_styles_main_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! theme/assets/styles/main.scss */ \"./web/themes/custom/materiotheme/assets/styles/main.scss\");\n/* harmony import */ var theme_assets_styles_main_scss__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(theme_assets_styles_main_scss__WEBPACK_IMPORTED_MODULE_3__);\n\n\n // require('theme/assets/styles/main.scss');\n\n\n\n(function (Drupal, drupalSettings) {\n var v_user_block = new vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"]({\n store: vuejs_store__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n render: h => h(vuejs_components_User_UserBlock__WEBPACK_IMPORTED_MODULE_2__[\"default\"])\n }).$mount('#block-userlogin');\n\n var MaterioTheme = function () {\n // var _is_front = drupalSettings.path.isFront;\n // ___ _ _\n // |_ _|_ _ (_) |_\n // | || ' \\| | _|\n // |___|_||_|_|\\__|\n function init() {\n console.log(\"MaterioTheme init()\");\n }\n\n ;\n init();\n }; // end MaterioTheme()\n // $(document).ready(function($) {\n // if(drupalSettings.path.isFront){\n\n\n var materiotheme = new MaterioTheme(); // }else{\n // $('body').attr('booted', 'booted');\n // }\n // });\n})(Drupal, drupalSettings);\n\n//# sourceURL=webpack:///./web/themes/custom/materiotheme/assets/scripts/main.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm.js\");\n/* harmony import */ var vuejs_store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vuejs/store */ \"./web/themes/custom/materiotheme/vuejs/store/index.js\");\n/* harmony import */ var vuejs_components_User_UserBlock__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vuejs/components/User/UserBlock */ \"./web/themes/custom/materiotheme/vuejs/components/User/UserBlock.vue\");\n/* harmony import */ var vuejs_components_Content_Test__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vuejs/components/Content/Test */ \"./web/themes/custom/materiotheme/vuejs/components/Content/Test.vue\");\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var theme_assets_styles_main_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! theme/assets/styles/main.scss */ \"./web/themes/custom/materiotheme/assets/styles/main.scss\");\n/* harmony import */ var theme_assets_styles_main_scss__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(theme_assets_styles_main_scss__WEBPACK_IMPORTED_MODULE_5__);\n\n\n\n\n // require('theme/assets/styles/main.scss');\n\n\n\n(function (Drupal, drupalSettings) {\n var MaterioTheme = function () {\n var v_user_block, v_test_content; // var _is_front = drupalSettings.path.isFront;\n\n console.log('drupalSettings', drupalSettings); // ___ _ _\n // |_ _|_ _ (_) |_\n // | || ' \\| | _|\n // |___|_||_|_|\\__|\n\n function init() {\n console.log(\"MaterioTheme init()\");\n initVues();\n }\n\n function initVues() {\n initUserVBlock();\n initTestVContent();\n }\n\n function initUserVBlock() {\n let mount_point = drupalSettings.user.uid !== 0 ? '#block-userblock' : '#block-userlogin';\n v_user_block = new vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"]({\n store: vuejs_store__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n computed: { ...Object(vuex__WEBPACK_IMPORTED_MODULE_4__[\"mapState\"])({\n isloggedin: state => state.User.isloggedin\n })\n },\n\n created() {\n if (drupalSettings.user.uid !== 0) {\n this.$store.commit('User/setUid', drupalSettings.user.uid);\n this.$store.dispatch('User/getUser');\n }\n },\n\n render: h => h(vuejs_components_User_UserBlock__WEBPACK_IMPORTED_MODULE_2__[\"default\"])\n }).$mount(mount_point);\n }\n\n function initTestVContent() {\n v_test_content = new vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"]({\n store: vuejs_store__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n render: h => h(vuejs_components_Content_Test__WEBPACK_IMPORTED_MODULE_3__[\"default\"])\n }).$mount('#block-pagetitle');\n console.log('initTestVContent', v_test_content);\n }\n\n init();\n }; // end MaterioTheme()\n\n\n var materiotheme = new MaterioTheme();\n})(Drupal, drupalSettings);\n\n//# sourceURL=webpack:///./web/themes/custom/materiotheme/assets/scripts/main.js?"); /***/ }), @@ -654,6 +678,66 @@ eval("// style-loader: Adds some css to the DOM by adding a diff --git a/web/themes/custom/materiotheme/vuejs/components/User/UserBlock.vue b/web/themes/custom/materiotheme/vuejs/components/User/UserBlock.vue index e56fed27..1387ffa7 100644 --- a/web/themes/custom/materiotheme/vuejs/components/User/UserBlock.vue +++ b/web/themes/custom/materiotheme/vuejs/components/User/UserBlock.vue @@ -1,5 +1,5 @@ @@ -15,7 +15,7 @@ export default { // }, computed: { ...mapState({ - token: state => state.User.token + isloggedin: state => state.User.isloggedin }) }, components: { diff --git a/web/themes/custom/materiotheme/vuejs/store/modules/user.js b/web/themes/custom/materiotheme/vuejs/store/modules/user.js index 2d945128..79e7d290 100644 --- a/web/themes/custom/materiotheme/vuejs/store/modules/user.js +++ b/web/themes/custom/materiotheme/vuejs/store/modules/user.js @@ -1,4 +1,5 @@ -import { HTTP } from 'vuejs/rest/http-axios' +import { REST } from 'vuejs/api/rest-axios' +import { JSONAPI } from 'vuejs/api/json-axios' import qs from 'querystring' export default { @@ -10,8 +11,8 @@ export default { // username: '', mail:'', token: null, - logout_token: null - // isloggedin: false + logout_token: null, + isloggedin: false }, // getters @@ -19,31 +20,64 @@ export default { // mutations mutations : { - setUser (state, data) { + setToken (state, data) { state.uid = data.current_user.uid // state.username = data.username state.mail = data.current_user.mail state.token = data.csrf_token + state.isloggedin = true state.logout_token = data.logout_token }, + setUid (state, uid) { + state.uid = uid + state.isloggedin = true + }, + setUser (state, data) { + state.mail = data.mail[0].value + state.uuid = data.uuid[0].value + }, setLoggedOut (state) { state.uid= null state.mail = '' state.token = null + state.isloggedin = false state.logout_token = null } }, // actions actions : { - getToken ({ commit, state }, credentials) { - HTTP.post('/user/login?_format=json', credentials) + getToken ({ dispatch, commit, state }, credentials) { + REST.post('/user/login?_format=json', credentials) .then(({ data }) => { - console.log('data', data) - commit('setUser', data) + console.log('user getToken data', data) + commit('setToken', data) + dispatch('getUser') }) .catch(( error ) => { - console.log('Issue with login', error) + console.warn('Issue with login', error) + Promise.reject(error) + }) + }, + getUser ({ commit, state }) { + let params = { + token: state.token + } + REST.get(`/user/${state.uid}?_format=json`, params) + .then(({ data }) => { + console.log('user REST getUser data', data) + commit('setUser', data) + JSONAPI.get(`/user/user/${state.uuid}`) + .then(({ data }) => { + console.log('user JSONAPI getUser data', data) + }) + .catch(( error ) => { + console.warn('Issue with getUser', error) + Promise.reject(error) + }) + }) + .catch(( error ) => { + console.warn('Issue with getUser', error) Promise.reject(error) }) }, @@ -51,13 +85,13 @@ export default { let credentials = qs.stringify({ token: state.token }) - HTTP.post('/user/logout', credentials) + REST.post('/user/logout', credentials) .then((resp) => { console.log('resp', resp) commit('setLoggedOut') }) .catch(( error ) => { - console.log('Issue with logout', error) + console.warn('Issue with logout', error) Promise.reject(error) }) }