Browse Source

fix: user profile

Muhammad Iqbal Afandi 3 years ago
parent
commit
06d097f952

+ 2
- 2
app/Http/Controllers/UserController.php View File

@@ -218,11 +218,11 @@ class UserController extends Controller
218 218
      */
219 219
     public function changePassword(ChangePasswordRequest $request)
220 220
     {
221
-        if (!Hash::check($request->current_password, auth()->user()->password)) {
221
+        if (!Hash::check($request->old_password, auth()->user()->password)) {
222 222
             return back()->with('error', __('messages.error.store.change-password'));
223 223
         }
224 224
 
225
-        auth()->user()->update(['password' => bcrypt($request->password)]);
225
+        auth()->user()->update(['password' => bcrypt($request->new_password)]);
226 226
 
227 227
         return back()->with('success', __('messages.success.update.change-password'));
228 228
     }

+ 209
- 66
public/js/resources_js_pages_user_Show_vue.js View File

@@ -213,6 +213,65 @@ __webpack_require__.r(__webpack_exports__);
213 213
 
214 214
 /***/ }),
215 215
 
216
+/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/components/AppPassword.vue?vue&type=script&setup=true&lang=js":
217
+/*!****************************************************************************************************************************************************************************************************************!*\
218
+  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/components/AppPassword.vue?vue&type=script&setup=true&lang=js ***!
219
+  \****************************************************************************************************************************************************************************************************************/
220
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
221
+
222
+__webpack_require__.r(__webpack_exports__);
223
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
224
+/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
225
+/* harmony export */ });
226
+/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js");
227
+
228
+/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
229
+  props: {
230
+    label: {
231
+      type: String,
232
+      required: true
233
+    },
234
+    placeholder: {
235
+      type: String,
236
+      required: true
237
+    },
238
+    error: {
239
+      type: String,
240
+      "default": null
241
+    },
242
+    modelValue: null
243
+  },
244
+  emits: ['update:modelValue'],
245
+  setup: function setup(__props, _ref) {
246
+    var expose = _ref.expose;
247
+    expose();
248
+    var props = __props;
249
+    var isError = (0,vue__WEBPACK_IMPORTED_MODULE_0__.computed)(function () {
250
+      return props.error ? true : false;
251
+    });
252
+    var forLabel = (0,vue__WEBPACK_IMPORTED_MODULE_0__.computed)(function () {
253
+      return props.label.toLowerCase().replace(/\s+/g, '-');
254
+    });
255
+    var ariaDescribedbyLabel = (0,vue__WEBPACK_IMPORTED_MODULE_0__.computed)(function () {
256
+      return props.label.toLowerCase().replace(/\s+/g, '-') + '-help';
257
+    });
258
+    var __returned__ = {
259
+      props: props,
260
+      isError: isError,
261
+      forLabel: forLabel,
262
+      ariaDescribedbyLabel: ariaDescribedbyLabel,
263
+      computed: vue__WEBPACK_IMPORTED_MODULE_0__.computed
264
+    };
265
+    Object.defineProperty(__returned__, '__isScriptSetup', {
266
+      enumerable: false,
267
+      value: true
268
+    });
269
+    return __returned__;
270
+  }
271
+});
272
+
273
+/***/ }),
274
+
216 275
 /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/components/AppSidebar.vue?vue&type=script&setup=true&lang=js":
217 276
 /*!***************************************************************************************************************************************************************************************************************!*\
218 277
   !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/components/AppSidebar.vue?vue&type=script&setup=true&lang=js ***!
@@ -473,10 +532,14 @@ __webpack_require__.r(__webpack_exports__);
473 532
 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
474 533
 /* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
475 534
 /* harmony export */ });
476
-/* harmony import */ var _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @inertiajs/inertia-vue3 */ "./node_modules/@inertiajs/inertia-vue3/dist/index.js");
477
-/* harmony import */ var _layouts_AppLayout_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/layouts/AppLayout.vue */ "./resources/js/layouts/AppLayout.vue");
478
-/* harmony import */ var _components_AppInputText_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/AppInputText.vue */ "./resources/js/components/AppInputText.vue");
479
-/* harmony import */ var _components_AppDropdown_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/AppDropdown.vue */ "./resources/js/components/AppDropdown.vue");
535
+/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js");
536
+/* harmony import */ var _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @inertiajs/inertia-vue3 */ "./node_modules/@inertiajs/inertia-vue3/dist/index.js");
537
+/* harmony import */ var _layouts_AppLayout_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/layouts/AppLayout.vue */ "./resources/js/layouts/AppLayout.vue");
538
+/* harmony import */ var _components_AppInputText_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/AppInputText.vue */ "./resources/js/components/AppInputText.vue");
539
+/* harmony import */ var _components_AppDropdown_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/AppDropdown.vue */ "./resources/js/components/AppDropdown.vue");
540
+/* harmony import */ var _components_AppPassword_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/AppPassword.vue */ "./resources/js/components/AppPassword.vue");
541
+
542
+
480 543
 
481 544
 
482 545
 
@@ -492,7 +555,14 @@ __webpack_require__.r(__webpack_exports__);
492 555
     var expose = _ref.expose;
493 556
     expose();
494 557
     var props = __props;
495
-    var form = (0,_inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_0__.useForm)({
558
+    var errors = (0,vue__WEBPACK_IMPORTED_MODULE_0__.computed)(function () {
559
+      return (0,_inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_1__.usePage)().props.value.errors;
560
+    });
561
+    (0,vue__WEBPACK_IMPORTED_MODULE_0__.watch)(errors, function () {
562
+      form.clearErrors();
563
+      formChangePassword.clearErrors();
564
+    });
565
+    var form = (0,_inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_1__.useForm)({
496 566
       name: props.user.name,
497 567
       phone: props.user.phone,
498 568
       email: props.user.email,
@@ -505,27 +575,36 @@ __webpack_require__.r(__webpack_exports__);
505 575
       form.put(route('users.update', props.user.id));
506 576
     };
507 577
 
508
-    var formChangePassword = (0,_inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_0__.useForm)({
578
+    var formChangePassword = (0,_inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_1__.useForm)({
509 579
       old_password: '',
510 580
       new_password: '',
511 581
       new_password_confirmation: ''
512 582
     });
513 583
 
514 584
     var changePassword = function changePassword() {
515
-      formChangePassword.post(route('users.change-password', props.user.id));
585
+      formChangePassword.post(route('users.change-password', props.user.id), {
586
+        onSuccess: function onSuccess() {
587
+          return formChangePassword.reset();
588
+        }
589
+      });
516 590
     };
517 591
 
518 592
     var __returned__ = {
519 593
       props: props,
594
+      errors: errors,
520 595
       form: form,
521 596
       submit: submit,
522 597
       formChangePassword: formChangePassword,
523 598
       changePassword: changePassword,
524
-      Head: _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_0__.Head,
525
-      useForm: _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_0__.useForm,
526
-      AppLayout: _layouts_AppLayout_vue__WEBPACK_IMPORTED_MODULE_1__["default"],
527
-      AppInputText: _components_AppInputText_vue__WEBPACK_IMPORTED_MODULE_2__["default"],
528
-      AppDropdown: _components_AppDropdown_vue__WEBPACK_IMPORTED_MODULE_3__["default"]
599
+      computed: vue__WEBPACK_IMPORTED_MODULE_0__.computed,
600
+      watch: vue__WEBPACK_IMPORTED_MODULE_0__.watch,
601
+      Head: _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_1__.Head,
602
+      useForm: _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_1__.useForm,
603
+      usePage: _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_1__.usePage,
604
+      AppLayout: _layouts_AppLayout_vue__WEBPACK_IMPORTED_MODULE_2__["default"],
605
+      AppInputText: _components_AppInputText_vue__WEBPACK_IMPORTED_MODULE_3__["default"],
606
+      AppDropdown: _components_AppDropdown_vue__WEBPACK_IMPORTED_MODULE_4__["default"],
607
+      AppPassword: _components_AppPassword_vue__WEBPACK_IMPORTED_MODULE_5__["default"]
529 608
     };
530 609
     Object.defineProperty(__returned__, '__isScriptSetup', {
531 610
       enumerable: false,
@@ -787,6 +866,57 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
787 866
 
788 867
 /***/ }),
789 868
 
869
+/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/components/AppPassword.vue?vue&type=template&id=4cb194c1":
870
+/*!*********************************************************************************************************************************************************************************************************************************************************************************!*\
871
+  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/components/AppPassword.vue?vue&type=template&id=4cb194c1 ***!
872
+  \*********************************************************************************************************************************************************************************************************************************************************************************/
873
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
874
+
875
+__webpack_require__.r(__webpack_exports__);
876
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
877
+/* harmony export */   "render": () => (/* binding */ render)
878
+/* harmony export */ });
879
+/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js");
880
+
881
+var _hoisted_1 = {
882
+  "class": "field"
883
+};
884
+var _hoisted_2 = ["for"];
885
+var _hoisted_3 = ["id"];
886
+function render(_ctx, _cache, $props, $setup, $data, $options) {
887
+  var _component_Password = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("Password");
888
+
889
+  return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("div", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("label", {
890
+    "for": $setup.forLabel
891
+  }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.label), 9
892
+  /* TEXT, PROPS */
893
+  , _hoisted_2), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_Password, {
894
+    "class": "w-full",
895
+    "input-class": "w-full",
896
+    id: $setup.forLabel,
897
+    placeholder: $props.placeholder,
898
+    "aria-describedby": $setup.ariaDescribedbyLabel,
899
+    toggleMask: true,
900
+    value: $props.modelValue,
901
+    "model-value": $props.modelValue,
902
+    onInput: _cache[0] || (_cache[0] = function ($event) {
903
+      return _ctx.$emit('update:modelValue', $event.target.value);
904
+    })
905
+  }, null, 8
906
+  /* PROPS */
907
+  , ["id", "placeholder", "aria-describedby", "value", "model-value"]), $props.error ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("small", {
908
+    key: 0,
909
+    id: $setup.ariaDescribedbyLabel,
910
+    "class": (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)({
911
+      'p-error': $setup.isError
912
+    })
913
+  }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.error), 11
914
+  /* TEXT, CLASS, PROPS */
915
+  , _hoisted_3)) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)]);
916
+}
917
+
918
+/***/ }),
919
+
790 920
 /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/components/AppSidebar.vue?vue&type=template&id=22a4e926":
791 921
 /*!********************************************************************************************************************************************************************************************************************************************************************************!*\
792 922
   !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/components/AppSidebar.vue?vue&type=template&id=22a4e926 ***!
@@ -1194,45 +1324,15 @@ var _hoisted_10 = {
1194 1324
   "class": "grid"
1195 1325
 };
1196 1326
 var _hoisted_11 = {
1197
-  "class": "col-12 md:col-6"
1327
+  "class": "col-12"
1198 1328
 };
1199 1329
 var _hoisted_12 = {
1200
-  "class": "field"
1201
-};
1202
-
1203
-var _hoisted_13 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("label", {
1204
-  "for": "old_password"
1205
-}, "Password Lama", -1
1206
-/* HOISTED */
1207
-);
1208
-
1209
-var _hoisted_14 = {
1210
-  "class": "col-12 md:col-6"
1211
-};
1212
-var _hoisted_15 = {
1213
-  "class": "field"
1214
-};
1215
-
1216
-var _hoisted_16 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("label", {
1217
-  "for": "new_password"
1218
-}, "Password Baru", -1
1219
-/* HOISTED */
1220
-);
1221
-
1222
-var _hoisted_17 = {
1223
-  "class": "col-12 md:col-6"
1330
+  "class": "col-12"
1224 1331
 };
1225
-var _hoisted_18 = {
1226
-  "class": "field"
1332
+var _hoisted_13 = {
1333
+  "class": "col-12"
1227 1334
 };
1228
-
1229
-var _hoisted_19 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("label", {
1230
-  "for": "new_password_confirmation"
1231
-}, "Konfirmasi Password", -1
1232
-/* HOISTED */
1233
-);
1234
-
1235
-var _hoisted_20 = {
1335
+var _hoisted_14 = {
1236 1336
   "class": "col-12 flex justify-content-end"
1237 1337
 };
1238 1338
 function render(_ctx, _cache, $props, $setup, $data, $options) {
@@ -1240,8 +1340,6 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
1240 1340
 
1241 1341
   var _component_TabPanel = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("TabPanel");
1242 1342
 
1243
-  var _component_Password = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("Password");
1244
-
1245 1343
   var _component_TabView = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("TabView");
1246 1344
 
1247 1345
   var _component_Card = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("Card");
@@ -1321,27 +1419,19 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
1321 1419
                 header: "Ubah Password"
1322 1420
               }, {
1323 1421
                 "default": (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
1324
-                  return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_10, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_11, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_12, [_hoisted_13, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_Password, {
1325
-                    id: "old_password",
1422
+                  return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_10, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_11, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup["AppPassword"], {
1326 1423
                     label: "Password Lama",
1327 1424
                     placeholder: "password lama",
1328
-                    "class": "w-full",
1329
-                    inputClass: "w-full",
1330
-                    toggleMask: true,
1331
-                    error: $setup.form.errors.old_password,
1425
+                    error: $setup.formChangePassword.errors.old_password,
1332 1426
                     modelValue: $setup.formChangePassword.old_password,
1333 1427
                     "onUpdate:modelValue": _cache[4] || (_cache[4] = function ($event) {
1334 1428
                       return $setup.formChangePassword.old_password = $event;
1335 1429
                     })
1336 1430
                   }, null, 8
1337 1431
                   /* PROPS */
1338
-                  , ["error", "modelValue"])])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_14, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_15, [_hoisted_16, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_Password, {
1339
-                    id: "new_password",
1432
+                  , ["error", "modelValue"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_12, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup["AppPassword"], {
1340 1433
                     label: "Password Baru",
1341 1434
                     placeholder: "password baru",
1342
-                    "class": "w-full",
1343
-                    inputClass: "w-full",
1344
-                    toggleMask: true,
1345 1435
                     error: $setup.formChangePassword.errors.new_password,
1346 1436
                     modelValue: $setup.formChangePassword.new_password,
1347 1437
                     "onUpdate:modelValue": _cache[5] || (_cache[5] = function ($event) {
@@ -1349,20 +1439,16 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
1349 1439
                     })
1350 1440
                   }, null, 8
1351 1441
                   /* PROPS */
1352
-                  , ["error", "modelValue"])])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_17, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_18, [_hoisted_19, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_Password, {
1353
-                    id: "new_password_confirmation",
1442
+                  , ["error", "modelValue"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_13, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup["AppPassword"], {
1354 1443
                     label: "Konfirmasi Password",
1355 1444
                     placeholder: "konfirmasi password",
1356
-                    "class": "w-full",
1357
-                    inputClass: "w-full",
1358
-                    toggleMask: true,
1359 1445
                     modelValue: $setup.formChangePassword.new_password_confirmation,
1360 1446
                     "onUpdate:modelValue": _cache[6] || (_cache[6] = function ($event) {
1361 1447
                       return $setup.formChangePassword.new_password_confirmation = $event;
1362 1448
                     })
1363 1449
                   }, null, 8
1364 1450
                   /* PROPS */
1365
-                  , ["modelValue"])])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_20, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_Button, {
1451
+                  , ["modelValue"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_14, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_Button, {
1366 1452
                     label: "Simpan",
1367 1453
                     icon: "pi pi-check",
1368 1454
                     "class": "p-button-text",
@@ -1656,6 +1742,33 @@ const __exports__ = /*#__PURE__*/(0,_home_dijitalcode_Projects_bamslaundry_node_
1656 1742
 if (false) {}
1657 1743
 
1658 1744
 
1745
+/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__exports__);
1746
+
1747
+/***/ }),
1748
+
1749
+/***/ "./resources/js/components/AppPassword.vue":
1750
+/*!*************************************************!*\
1751
+  !*** ./resources/js/components/AppPassword.vue ***!
1752
+  \*************************************************/
1753
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1754
+
1755
+__webpack_require__.r(__webpack_exports__);
1756
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1757
+/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
1758
+/* harmony export */ });
1759
+/* harmony import */ var _AppPassword_vue_vue_type_template_id_4cb194c1__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AppPassword.vue?vue&type=template&id=4cb194c1 */ "./resources/js/components/AppPassword.vue?vue&type=template&id=4cb194c1");
1760
+/* harmony import */ var _AppPassword_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AppPassword.vue?vue&type=script&setup=true&lang=js */ "./resources/js/components/AppPassword.vue?vue&type=script&setup=true&lang=js");
1761
+/* harmony import */ var _home_dijitalcode_Projects_bamslaundry_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/vue-loader/dist/exportHelper.js */ "./node_modules/vue-loader/dist/exportHelper.js");
1762
+
1763
+
1764
+
1765
+
1766
+;
1767
+const __exports__ = /*#__PURE__*/(0,_home_dijitalcode_Projects_bamslaundry_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_2__["default"])(_AppPassword_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"], [['render',_AppPassword_vue_vue_type_template_id_4cb194c1__WEBPACK_IMPORTED_MODULE_0__.render],['__file',"resources/js/components/AppPassword.vue"]])
1768
+/* hot reload */
1769
+if (false) {}
1770
+
1771
+
1659 1772
 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__exports__);
1660 1773
 
1661 1774
 /***/ }),
@@ -1838,6 +1951,21 @@ __webpack_require__.r(__webpack_exports__);
1838 1951
 /* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_AppMessage_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./AppMessage.vue?vue&type=script&setup=true&lang=js */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/components/AppMessage.vue?vue&type=script&setup=true&lang=js");
1839 1952
  
1840 1953
 
1954
+/***/ }),
1955
+
1956
+/***/ "./resources/js/components/AppPassword.vue?vue&type=script&setup=true&lang=js":
1957
+/*!************************************************************************************!*\
1958
+  !*** ./resources/js/components/AppPassword.vue?vue&type=script&setup=true&lang=js ***!
1959
+  \************************************************************************************/
1960
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1961
+
1962
+__webpack_require__.r(__webpack_exports__);
1963
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1964
+/* harmony export */   "default": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_AppPassword_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"])
1965
+/* harmony export */ });
1966
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_AppPassword_vue_vue_type_script_setup_true_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./AppPassword.vue?vue&type=script&setup=true&lang=js */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/components/AppPassword.vue?vue&type=script&setup=true&lang=js");
1967
+ 
1968
+
1841 1969
 /***/ }),
1842 1970
 
1843 1971
 /***/ "./resources/js/components/AppSidebar.vue?vue&type=script&setup=true&lang=js":
@@ -1973,6 +2101,21 @@ __webpack_require__.r(__webpack_exports__);
1973 2101
 /* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_AppMessage_vue_vue_type_template_id_07159051__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./AppMessage.vue?vue&type=template&id=07159051 */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/components/AppMessage.vue?vue&type=template&id=07159051");
1974 2102
 
1975 2103
 
2104
+/***/ }),
2105
+
2106
+/***/ "./resources/js/components/AppPassword.vue?vue&type=template&id=4cb194c1":
2107
+/*!*******************************************************************************!*\
2108
+  !*** ./resources/js/components/AppPassword.vue?vue&type=template&id=4cb194c1 ***!
2109
+  \*******************************************************************************/
2110
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2111
+
2112
+__webpack_require__.r(__webpack_exports__);
2113
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2114
+/* harmony export */   "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_AppPassword_vue_vue_type_template_id_4cb194c1__WEBPACK_IMPORTED_MODULE_0__.render)
2115
+/* harmony export */ });
2116
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_AppPassword_vue_vue_type_template_id_4cb194c1__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./AppPassword.vue?vue&type=template&id=4cb194c1 */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/components/AppPassword.vue?vue&type=template&id=4cb194c1");
2117
+
2118
+
1976 2119
 /***/ }),
1977 2120
 
1978 2121
 /***/ "./resources/js/components/AppSidebar.vue?vue&type=template&id=22a4e926":

+ 1
- 1
public/js/vue.js View File

@@ -57778,7 +57778,7 @@ module.exports = JSON.parse('{"name":"axios","version":"0.21.4","description":"P
57778 57778
 /******/ 		// This function allow to reference async chunks
57779 57779
 /******/ 		__webpack_require__.u = (chunkId) => {
57780 57780
 /******/ 			// return url for filenames based on template
57781
-/******/ 			return "js/" + chunkId + ".js?id=" + {"resources_js_pages_Access_vue":"a18ed856923fae52","resources_js_pages_auth_ForgotPassword_vue":"c9f401672b6f2423","resources_js_pages_auth_Login_vue":"cb0cb153b976d2c1","resources_js_pages_auth_ResetPassword_vue":"1078df5cebf2e3c6","resources_js_pages_auth_VerifyEmail_vue":"2c5cb3cdec6b103a","resources_js_pages_customer_Create_vue":"43d285d678ba8793","resources_js_pages_customer_Edit_vue":"01d10f0dd19b734c","resources_js_pages_customer_Index_vue":"0ca5a813eacb510a","resources_js_pages_customer_TableHeader_js":"71be5afdca048a9c","resources_js_pages_discount_Index_vue":"92526f49d3e0a66d","resources_js_pages_expense_Create_vue":"18c4b47fcb9e103a","resources_js_pages_expense_Index_vue":"d195311d84b82d44","resources_js_pages_expense_Show_vue":"4801bedc7912088f","resources_js_pages_expense_TableHeader_js":"72e3dee74175b1c0","resources_js_pages_laundry_Create_vue":"aae1027a621900d5","resources_js_pages_laundry_Edit_vue":"160898ea138ee162","resources_js_pages_laundry_Index_vue":"29e5e4317fa0862d","resources_js_pages_laundry_TableHeader_js":"494e577855bbcaf6","resources_js_pages_mutation_Report_vue":"d74f6004bddcfdc6","resources_js_pages_mutation_TableHeader_js":"82c2999bd7d098a1","resources_js_pages_outlet_Create_vue":"48bdc532cf3f8c62","resources_js_pages_outlet_Edit_vue":"32338ffd7c28e656","resources_js_pages_outlet_Index_vue":"e1f9a19ae0ffa3df","resources_js_pages_outlet_TableHeader_js":"498bf7e64bc0d0c4","resources_js_pages_product_Create_vue":"4e737e98d38eca28","resources_js_pages_product_Edit_vue":"ddac8c4ce1363cc3","resources_js_pages_product_Index_vue":"ff1e209ae8b6ebbd","resources_js_pages_product_TableHeader_js":"b8eaaa9de25a2322","resources_js_pages_transaction_Create_vue":"bc8669735a72a0ec","resources_js_pages_transaction_Index_vue":"6da809da30371f6f","resources_js_pages_transaction_Report_vue":"eeca91c15c146171","resources_js_pages_transaction_Show_vue":"2087aac76bbbf7f1","resources_js_pages_transaction_TableHeader_js":"ba35ab28bb4ac891","resources_js_pages_user_Create_vue":"1f5759b89d51290b","resources_js_pages_user_Edit_vue":"8e9cac16a201e333","resources_js_pages_user_Index_vue":"e798523892e8e90c","resources_js_pages_user_Show_vue":"ec4048350fb26f43","resources_js_pages_user_TableHeader_js":"5653ecbcd70fd235"}[chunkId] + "";
57781
+/******/ 			return "js/" + chunkId + ".js?id=" + {"resources_js_pages_Access_vue":"a18ed856923fae52","resources_js_pages_auth_ForgotPassword_vue":"c9f401672b6f2423","resources_js_pages_auth_Login_vue":"cb0cb153b976d2c1","resources_js_pages_auth_ResetPassword_vue":"1078df5cebf2e3c6","resources_js_pages_auth_VerifyEmail_vue":"2c5cb3cdec6b103a","resources_js_pages_customer_Create_vue":"43d285d678ba8793","resources_js_pages_customer_Edit_vue":"01d10f0dd19b734c","resources_js_pages_customer_Index_vue":"0ca5a813eacb510a","resources_js_pages_customer_TableHeader_js":"71be5afdca048a9c","resources_js_pages_discount_Index_vue":"92526f49d3e0a66d","resources_js_pages_expense_Create_vue":"18c4b47fcb9e103a","resources_js_pages_expense_Index_vue":"d195311d84b82d44","resources_js_pages_expense_Show_vue":"4801bedc7912088f","resources_js_pages_expense_TableHeader_js":"72e3dee74175b1c0","resources_js_pages_laundry_Create_vue":"aae1027a621900d5","resources_js_pages_laundry_Edit_vue":"160898ea138ee162","resources_js_pages_laundry_Index_vue":"29e5e4317fa0862d","resources_js_pages_laundry_TableHeader_js":"494e577855bbcaf6","resources_js_pages_mutation_Report_vue":"d74f6004bddcfdc6","resources_js_pages_mutation_TableHeader_js":"82c2999bd7d098a1","resources_js_pages_outlet_Create_vue":"48bdc532cf3f8c62","resources_js_pages_outlet_Edit_vue":"32338ffd7c28e656","resources_js_pages_outlet_Index_vue":"e1f9a19ae0ffa3df","resources_js_pages_outlet_TableHeader_js":"498bf7e64bc0d0c4","resources_js_pages_product_Create_vue":"4e737e98d38eca28","resources_js_pages_product_Edit_vue":"ddac8c4ce1363cc3","resources_js_pages_product_Index_vue":"ff1e209ae8b6ebbd","resources_js_pages_product_TableHeader_js":"b8eaaa9de25a2322","resources_js_pages_transaction_Create_vue":"bc8669735a72a0ec","resources_js_pages_transaction_Index_vue":"6da809da30371f6f","resources_js_pages_transaction_Report_vue":"eeca91c15c146171","resources_js_pages_transaction_Show_vue":"2087aac76bbbf7f1","resources_js_pages_transaction_TableHeader_js":"ba35ab28bb4ac891","resources_js_pages_user_Create_vue":"1f5759b89d51290b","resources_js_pages_user_Edit_vue":"8e9cac16a201e333","resources_js_pages_user_Index_vue":"e798523892e8e90c","resources_js_pages_user_Show_vue":"e674f453c14893b2","resources_js_pages_user_TableHeader_js":"5653ecbcd70fd235"}[chunkId] + "";
57782 57782
 /******/ 		};
57783 57783
 /******/ 	})();
57784 57784
 /******/ 	

+ 49
- 0
resources/js/components/AppPassword.vue View File

@@ -0,0 +1,49 @@
1
+<script setup>
2
+import { computed } from 'vue'
3
+
4
+const props = defineProps({
5
+  label: {
6
+    type: String,
7
+    required: true,
8
+  },
9
+  placeholder: {
10
+    type: String,
11
+    required: true,
12
+  },
13
+  error: {
14
+    type: String,
15
+    default: null,
16
+  },
17
+  modelValue: null,
18
+})
19
+
20
+defineEmits(['update:modelValue'])
21
+
22
+const isError = computed(() => (props.error ? true : false))
23
+
24
+const forLabel = computed(() => props.label.toLowerCase().replace(/\s+/g, '-'))
25
+
26
+const ariaDescribedbyLabel = computed(() => props.label.toLowerCase().replace(/\s+/g, '-') + '-help')
27
+</script>
28
+
29
+<template>
30
+  <div class="field">
31
+    <label :for="forLabel">{{ label }}</label>
32
+
33
+    <Password
34
+      class="w-full"
35
+      input-class="w-full"
36
+      :id="forLabel"
37
+      :placeholder="placeholder"
38
+      :aria-describedby="ariaDescribedbyLabel"
39
+      :toggleMask="true"
40
+      :value="modelValue"
41
+      :model-value="modelValue"
42
+      @input="$emit('update:modelValue', $event.target.value)"
43
+    />
44
+
45
+    <small v-if="error" :id="ariaDescribedbyLabel" :class="{ 'p-error': isError }">
46
+      {{ error }}
47
+    </small>
48
+  </div>
49
+</template>

+ 33
- 43
resources/js/pages/user/Show.vue View File

@@ -1,8 +1,10 @@
1 1
 <script setup>
2
-import { Head, useForm } from '@inertiajs/inertia-vue3'
2
+import { computed, watch } from 'vue'
3
+import { Head, useForm, usePage } from '@inertiajs/inertia-vue3'
3 4
 import AppLayout from '@/layouts/AppLayout.vue'
4 5
 import AppInputText from '@/components/AppInputText.vue'
5 6
 import AppDropdown from '@/components/AppDropdown.vue'
7
+import AppPassword from '@/components/AppPassword.vue'
6 8
 
7 9
 const props = defineProps({
8 10
   user: Object,
@@ -11,6 +13,13 @@ const props = defineProps({
11 13
   genders: Array,
12 14
 })
13 15
 
16
+const errors = computed(() => usePage().props.value.errors)
17
+
18
+watch(errors, () => {
19
+  form.clearErrors()
20
+  formChangePassword.clearErrors()
21
+})
22
+
14 23
 const form = useForm({
15 24
   name: props.user.name,
16 25
   phone: props.user.phone,
@@ -31,7 +40,9 @@ const formChangePassword = useForm({
31 40
 })
32 41
 
33 42
 const changePassword = () => {
34
-  formChangePassword.post(route('users.change-password', props.user.id))
43
+  formChangePassword.post(route('users.change-password', props.user.id), {
44
+    onSuccess: () => formChangePassword.reset(),
45
+  })
35 46
 }
36 47
 </script>
37 48
 
@@ -88,51 +99,30 @@ const changePassword = () => {
88 99
               </TabPanel>
89 100
               <TabPanel header="Ubah Password">
90 101
                 <div class="grid">
91
-                  <div class="col-12 md:col-6">
92
-                    <div class="field">
93
-                      <label for="old_password">Password Lama</label>
94
-                      <Password
95
-                        id="old_password"
96
-                        label="Password Lama"
97
-                        placeholder="password lama"
98
-                        class="w-full"
99
-                        inputClass="w-full"
100
-                        :toggleMask="true"
101
-                        :error="form.errors.old_password"
102
-                        v-model="formChangePassword.old_password"
103
-                      />
104
-                    </div>
102
+                  <div class="col-12">
103
+                    <AppPassword
104
+                      label="Password Lama"
105
+                      placeholder="password lama"
106
+                      :error="formChangePassword.errors.old_password"
107
+                      v-model="formChangePassword.old_password"
108
+                    />
105 109
                   </div>
106 110
 
107
-                  <div class="col-12 md:col-6">
108
-                    <div class="field">
109
-                      <label for="new_password">Password Baru</label>
110
-                      <Password
111
-                        id="new_password"
112
-                        label="Password Baru"
113
-                        placeholder="password baru"
114
-                        class="w-full"
115
-                        inputClass="w-full"
116
-                        :toggleMask="true"
117
-                        :error="formChangePassword.errors.new_password"
118
-                        v-model="formChangePassword.new_password"
119
-                      />
120
-                    </div>
111
+                  <div class="col-12">
112
+                    <AppPassword
113
+                      label="Password Baru"
114
+                      placeholder="password baru"
115
+                      :error="formChangePassword.errors.new_password"
116
+                      v-model="formChangePassword.new_password"
117
+                    />
121 118
                   </div>
122 119
 
123
-                  <div class="col-12 md:col-6">
124
-                    <div class="field">
125
-                      <label for="new_password_confirmation">Konfirmasi Password</label>
126
-                      <Password
127
-                        id="new_password_confirmation"
128
-                        label="Konfirmasi Password"
129
-                        placeholder="konfirmasi password"
130
-                        class="w-full"
131
-                        inputClass="w-full"
132
-                        :toggleMask="true"
133
-                        v-model="formChangePassword.new_password_confirmation"
134
-                      />
135
-                    </div>
120
+                  <div class="col-12">
121
+                    <AppPassword
122
+                      label="Konfirmasi Password"
123
+                      placeholder="konfirmasi password"
124
+                      v-model="formChangePassword.new_password_confirmation"
125
+                    />
136 126
                   </div>
137 127
 
138 128
                   <div class="col-12 flex justify-content-end">