diff --git a/app/Http/Controllers/DynamicController.php b/app/Http/Controllers/DynamicController.php index b417841..998dc5e 100644 --- a/app/Http/Controllers/DynamicController.php +++ b/app/Http/Controllers/DynamicController.php @@ -3,13 +3,13 @@ namespace App\Http\Controllers; use App\Http\Requests\StoreDynamicRequest; +use App\Http\Requests\UpdateDynamicRequest; use App\Models\Dynamic; +use App\Services\ActivityService; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Http\Request; use Inertia\Inertia; -use App\Services\ActivityService; - class DynamicController extends Controller { use AuthorizesRequests; @@ -75,15 +75,21 @@ class DynamicController extends Controller */ public function edit(Dynamic $dynamic) { - // + $this->authorize('update', $dynamic); + + return Inertia::render('Dynamics/Settings', [ + 'dynamic' => $dynamic, + ]); } /** * Update the specified resource in storage. */ - public function update(Request $request, Dynamic $dynamic) + public function update(UpdateDynamicRequest $request, Dynamic $dynamic) { - // + $dynamic->update($request->validated()); + + return redirect()->route('dynamics.show', $dynamic); } /** diff --git a/app/Http/Requests/UpdateDynamicRequest.php b/app/Http/Requests/UpdateDynamicRequest.php new file mode 100644 index 0000000..2401284 --- /dev/null +++ b/app/Http/Requests/UpdateDynamicRequest.php @@ -0,0 +1,34 @@ +route('dynamic'); + + return $dynamic && $this->user()->can('update', $dynamic); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules(): array + { + return [ + 'name' => ['required', 'string', 'max:255'], + 'rules' => ['nullable', 'string'], + ]; + } +} diff --git a/app/Policies/DynamicPolicy.php b/app/Policies/DynamicPolicy.php index 8d9b39f..b4938bd 100644 --- a/app/Policies/DynamicPolicy.php +++ b/app/Policies/DynamicPolicy.php @@ -36,7 +36,7 @@ class DynamicPolicy */ public function update(User $user, Dynamic $dynamic): bool { - return false; + return $dynamic->participants()->where('user_id', $user->id)->where('role', 'owner')->exists(); } /** diff --git a/resources/js/pages/Dynamics/Settings.vue b/resources/js/pages/Dynamics/Settings.vue new file mode 100644 index 0000000..dfc3501 --- /dev/null +++ b/resources/js/pages/Dynamics/Settings.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/resources/js/pages/Dynamics/Show.vue b/resources/js/pages/Dynamics/Show.vue index 85dafb5..efbbb7d 100644 --- a/resources/js/pages/Dynamics/Show.vue +++ b/resources/js/pages/Dynamics/Show.vue @@ -54,10 +54,17 @@ function submitInvite() {
-

{{ dynamic.name }}

-

- {{ dynamic.rules }} -

+
+
+

{{ dynamic.name }}

+

+ {{ dynamic.rules }} +

+
+ + Settings + +
@@ -182,4 +189,8 @@ function submitInvite() { @apply mt-2 text-sm; color: var(--muted-foreground); } + +.c-dynamic-show__settings-btn { + @apply inline-flex items-center rounded-md border border-transparent bg-gray-800 px-4 py-2 text-xs font-semibold tracking-widest text-white uppercase transition duration-150 ease-in-out hover:bg-gray-700 focus:bg-gray-700 focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 focus:outline-none active:bg-gray-900 dark:bg-gray-200 dark:text-gray-800 dark:hover:bg-white dark:focus:bg-white dark:focus:ring-offset-gray-800 dark:active:bg-gray-300; +}