Jelajahi Sumber

calendar_settings - completato

ferrari 1 bulan lalu
induk
melakukan
521325241d

+ 7 - 2
app/Http/Livewire/Calendar.php

@@ -40,6 +40,8 @@ class Calendar extends Component
 
     public $lastDate = null;
 
+    public $course_colors = [];
+
     public function mount()
     {
         $this->names = \App\Models\Calendar::orderBy('name')->groupBy('name')->pluck('name')->toArray();
@@ -50,6 +52,7 @@ class Calendar extends Component
         $this->courts = \App\Models\Court::select('*')->where('enabled', true)->get();
         $this->instructors = \App\Models\User::select('*')->where('level', 2)->where('enabled', true)->get();
         $this->motivations = \App\Models\Motivation::select('*')->where('enabled', true)->where('type', 'del')->get();
+        $this->course_colors = \App\Models\CourseColor::pluck('hex', 'name')->toArray();
 
         if (isset($_GET["name_filter"]))
             $this->name_filter = $_GET["name_filter"];
@@ -71,8 +74,10 @@ class Calendar extends Component
         {
             $s = $c->motivation ? $c->motivation->name : '';
             $data = array('id' => $c->id, 'title' => ($c->course ? $c->course->name : $c->name) . ($c->status == 99 ? ' (annullata - ' . $s . ')' : ''), 'start' => $c->from, 'end' => $c->to);
-            if ($c->course && $c->course->color != '')
-                $data['color'] = $c->course->color;
+            // if ($c->course && $c->course->color != '')
+            //     $data['color'] = $c->course->color;
+            if (isset($this->course_colors[$c->name]))
+                $data['color'] = $this->course_colors[$c->name];
             if ($c->status == 99)
                 $data['color'] = "#808080";
             $this->records[] = $data;

+ 41 - 3
app/Http/Livewire/CalendarSettings.php

@@ -6,12 +6,50 @@ use Livewire\Component;
 
 class CalendarSettings extends Component
 {
-    public $courses;
+    public $course_colors = [];
+    public $colors = [];
 
-    public function render()
+    public $changed = false;
+
+    public function mount()
     {
-        $this->courses = [];
+        $this->changed = false;
 
+        $courses = \App\Models\Course::select('name')->groupBy('name')->orderBy('name', 'asc')->get();
+        foreach ($courses as $course) {
+            $name = $course->name;
+            if (!\App\Models\CourseColor::where('name', $name)->exists()) {
+                \App\Models\CourseColor::create([
+                    'name' => $name,
+                    'hex' => '#0c6197',
+                ]);
+            }
+        }
+
+        $this->course_colors = \App\Models\CourseColor::get();
+        foreach ($this->course_colors as $color) {
+            $this->colors[$color->id] = $color->hex;
+        }
+    }
+
+    public function render()
+    {
         return view('livewire.calendar_settings');
     }
+
+    public function updatedColors() {
+        $this->changed = true;
+    }
+
+    public function store() {
+        foreach ($this->colors as $id => $hex) {
+            \App\Models\CourseColor::whereId($id)->update([
+                'hex' => $hex,
+            ]);
+        }
+
+        $this->changed = false;
+
+        $this->emit('success');
+    }
 }

+ 16 - 0
app/Models/CourseColor.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class CourseColor extends Model
+{
+    use HasFactory;
+
+    protected $fillable = [
+        'name',
+        'hex',
+    ];
+}

+ 33 - 0
database/migrations/2025_12_22_161635_create_course_colors_table.php

@@ -0,0 +1,33 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('course_colors', function (Blueprint $table) {
+            $table->id();
+            $table->string('name');
+            $table->string('hex');
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('course_colors');
+    }
+};

+ 33 - 0
public/css/style.css

@@ -16863,4 +16863,37 @@ button.download-png {
   display: grid;
   grid-template-columns: repeat(auto-fill, minmax(min(100px, 100%), 1fr));
   gap: 20px;
+}
+
+.course-color input[type="color"] {
+  width: 40px;
+  height: 40px;
+  border: none;
+  border-radius: 5px;
+  box-shadow: none;
+  outline: none;
+}
+
+.course-color input[type="color"]::-webkit-color-swatch-wrapper,
+.course-color input[type="color"]::-webkit-color-swatch {
+  border: none;
+  border-radius: 5px;
+  box-shadow: none;
+  outline: none;
+}
+
+.course-color {
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  justify-content: flex-start;
+  align-items: center;
+}
+
+.course-color span {
+  font-weight: bold;
+}
+
+.btn--ui[disabled] {
+  background-color: #aaa !important;
 }

+ 44 - 2
resources/views/livewire/calendar_settings.blade.php

@@ -13,13 +13,55 @@
         <div class="col-12 mb-3">
             <h3 class="primary">Corsi</h3>
         </div>
-        <div class="col-12">
-            courses
+        <div class="col-12 mb-3">
+            @foreach ($course_colors as $course)
+                <div class="course-color mb-4 gap-3">
+                    <input type='color' wire:model='colors.{{$course->id}}' />
+                    <span>{{$course->name}}</span>
+                </div>
+            @endforeach
+        </div>
+        <div class="col-12 mb-3 text-end">
+            <button wire:click='store()' class='btn--ui'@if (!$changed) disabled @endif>Salva modifiche</button>
+        </div>
+    </div>
+
+    
+    <div wire:ignore.self class="modal fade saved-modal" id="savedModal" tabindex="-1" role="dialog" aria-labelledby="savedModal" aria-hidden="true">
+        <div class="modal-dialog">
+            <div class="modal-content">
+                <div class="modal-header"></div>
+                <div class="modal-body pt-4 pb-4 text-center fw-bold">Modifiche salvate con successo</div>
+            </div>
         </div>
     </div>
 </div>
 
 
+@push('scripts')
+<style>
+.modal-backdrop.show{
+    opacity: 0.3
+}
+</style>
+@endpush
+
 @push('scripts')
 <script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
+
+<script>
+Livewire.on('success', () => {
+    isSaving = true;
+    showSavedAlert();
+});
+
+let saved_alert_timeout;
+function showSavedAlert() {
+    $('#savedModal').modal("show");
+    clearTimeout(saved_alert_timeout);
+    saved_alert_timeout = setTimeout(() => {
+        $('#savedModal').modal("hide");
+    }, 3000);
+}
+</script>
 @endpush