new forms added for courses

This commit is contained in:
HolgerHatGarKeineNode
2023-02-27 18:37:23 +01:00
parent d1d0d5ce3d
commit ce972e66c6
28 changed files with 612 additions and 49 deletions

View File

@@ -1,5 +1,5 @@
<div class="w-full mb-4 md:w-auto md:mb-0">
<x-button href="/nova/resources/course-events">
<x-button xs :href="route('course.form.courseEvent')">
<i class="fa fa-thin fa-plus"></i>
{{ __('Register course date') }}
</x-button>

View File

@@ -1,5 +1,23 @@
<div>
<x-button amber wire:click="courseSearch({{ $row->id }})">
{{ __('Show dates') }}
</x-button>
<div class="flex flex-col space-y-1">
@if($row->course_events_count > 0)
<div>
<x-button xs amber wire:click="courseSearch({{ $row->id }})">
{{ __('Show dates') }} [{{ $row->course_events_count }}]
</x-button>
</div>
@else
<div>
<x-button xs outline wire:click="courseSearch({{ $row->id }})">
{{ __('Show dates') }}
</x-button>
</div>
@endif
@can('update', $row)
<div>
<x-button amber xs :href="route('course.form.course', ['course' => $row])">
<i class="fa fa-thin fa-edit"></i>
{{ __('Edit') }}
</x-buttonamber>
</div>
@endcan
</div>

View File

@@ -1,5 +1,5 @@
<div class="w-full mb-4 md:w-auto md:mb-0">
<x-button href="/nova/resources/courses">
<x-button :href="route('course.form.course')">
<i class="fa fa-thin fa-plus"></i>
{{ __('Register course') }}
</x-button>

View File

@@ -1,3 +1,15 @@
<div>
<x-button class="whitespace-nowrap" amber wire:click="viewHistoryModal({{ $row->id }})">{{ __('Register') }}</x-button>
<div class="flex flex-col space-y-1">
<div>
<x-button xs class="whitespace-nowrap" amber
wire:click="viewHistoryModal({{ $row->id }})">{{ __('Register') }}</x-button>
</div>
@can('update', $row)
<div>
<x-button xs class="whitespace-nowrap" amber
:href="route('course.form.courseEvent', ['courseEvent' => $row])">
<i class="fa-thin fa-edit"></i>
{{ __('Edit') }}
</x-button>
</div>
@endcan
</div>

View File

@@ -98,13 +98,15 @@
</div>
@endif
@if(auth()->check() && auth()->user()->meetups->contains($row))
<x-button
:href="route('meetup.meetup.form', ['meetup' => $row->id, 'country' => $country])"
xs
amber
>
<i class="fa fa-thin fa-edit mr-2"></i>
{{ __('Edit') }}
</x-button>
<div>
<x-button
:href="route('meetup.meetup.form', ['meetup' => $row->id, 'country' => $country])"
xs
amber
>
<i class="fa fa-thin fa-edit mr-2"></i>
{{ __('Edit') }}
</x-button>
</div>
@endif
</div>

View File

@@ -77,13 +77,13 @@
{{ __('Create venue') }}
</a>
<a href="/nova/resources/courses"
<a href="{{ route('course.form.course') }}"
class="flex gap-x-4 py-2 text-sm font-semibold leading-6 text-gray-900">
<i class="fa-thin fa-plus flex-none text-gray-400"></i>
{{ __('Register course') }}
</a>
<a href="/nova/resources/course-events"
<a href="{{ route('course.form.courseEvent') }}"
class="flex gap-x-4 py-2 text-sm font-semibold leading-6 text-gray-900">
<i class="fa-thin fa-plus flex-none text-gray-400"></i>
{{ __('Register course date') }}

View File

@@ -16,7 +16,7 @@
@endif
</div>
<div>
<x-button :href="route('meetup.table.meetupEvent', ['country' => $country])">
<x-button :href="$fromUrl">
<i class="fa fa-thin fa-arrow-left"></i>
{{ __('Back') }}
</x-button>

View File

@@ -9,7 +9,7 @@
<div class="flex flex-row space-x-2 items-center">
<div>
<x-button :href="route('meetup.table.meetup', ['country' => $country])">
<x-button :href="$fromUrl">
<i class="fa fa-thin fa-arrow-left"></i>
{{ __('Back') }}
</x-button>

View File

@@ -24,7 +24,7 @@
@endif
</div>
<div>
<x-button :href="route('article.overview', ['country' => null])">
<x-button :href="$fromUrl">
<i class="fa fa-thin fa-arrow-left"></i>
{{ __('Back') }}
</x-button>
@@ -53,14 +53,14 @@
wire:model="libraryItem.lecturer_id"
:searchable="true"
:async-data="[
'api' => route('api.lecturers.index'),
'method' => 'GET', // default is GET
'params' => ['user_id' => auth()->id()], // default is []
]"
'api' => route('api.lecturers.index'),
'method' => 'GET', // default is GET
'params' => ['user_id' => auth()->id()], // default is []
]"
:template="[
'name' => 'user-option',
'config' => ['src' => 'image']
]"
'name' => 'user-option',
'config' => ['src' => 'image']
]"
option-label="name"
option-value="id"
/>

View File

@@ -0,0 +1,127 @@
<div>
{{-- HEADER --}}
<livewire:frontend.header :country="null"/>
<div class="container p-4 mx-auto bg-21gray my-2">
<div class="pb-5 flex flex-row justify-between">
<h3 class="text-lg font-medium leading-6 text-gray-200">{{ __('Course Event') }}</h3>
<div class="flex flex-row space-x-2 items-center">
<div>
<x-button :href="$fromUrl">
<i class="fa fa-thin fa-arrow-left"></i>
{{ __('Back') }}
</x-button>
</div>
</div>
</div>
<form class="space-y-8 divide-y divide-gray-700 pb-24">
<div class="space-y-8 divide-y divide-gray-700 sm:space-y-5">
<div class="mt-6 sm:mt-5 space-y-6 sm:space-y-5">
<x-input.group :for="md5('course_id')" :label="__('Course')">
<x-slot name="label">
<div class="flex flex-row space-x-4 items-center">
<div>
{{ __('Course') }}
</div>
<x-button xs href="{{ route('course.form.course') }}">
<i class="fa fa-thin fa-plus"></i>
{{ __('Register course') }}
</x-button>
</div>
</x-slot>
<x-select
:clearable="false"
autocomplete="off"
wire:model.debounce="courseEvent.course_id"
:placeholder="__('Course')"
:async-data="[
'api' => route('api.courses.index'),
'method' => 'GET', // default is GET
'params' => ['user_id' => auth()->id()], // default is []
]"
:template="[
'name' => 'user-option',
'config' => ['src' => 'image']
]"
option-label="name"
option-value="id"
/>
</x-input.group>
<x-input.group :for="md5('venue_id')" :label="__('Venue')">
<x-slot name="label">
<div class="flex flex-row space-x-4 items-center">
<div>
{{ __('Venue') }}
</div>
<x-button xs href="{{ route('venue.form') }}">
<i class="fa fa-thin fa-plus"></i>
{{ __('Create venue') }}
</x-button>
</div>
</x-slot>
<x-select
:clearable="false"
autocomplete="off"
wire:model.debounce="courseEvent.venue_id"
:placeholder="__('Venue')"
:async-data="[
'api' => route('api.venues.index'),
'method' => 'GET', // default is GET
'params' => ['user_id' => auth()->id()], // default is []
]"
:template="[
'name' => 'user-option',
'config' => ['src' => 'flag']
]"
option-label="name"
option-value="id"
/>
</x-input.group>
<x-input.group :for="md5('courseEvent.from')" :label="__('From')">
<x-datetime-picker
:clearable="false"
time-format="24"
timezone="UTC"
user-timezone="{{ config('app.user-timezone') }}"
autocomplete="off"
wire:model.debounce="courseEvent.from"
display-format="DD-MM-YYYY HH:mm"
:placeholder="__('To')"/>
</x-input.group>
<x-input.group :for="md5('courseEvent.to')" :label="__('To')">
<x-datetime-picker
:clearable="false"
time-format="24"
timezone="UTC"
user-timezone="{{ config('app.user-timezone') }}"
autocomplete="off"
wire:model.debounce="courseEvent.to"
display-format="DD-MM-YYYY HH:mm"
:placeholder="__('To')"/>
</x-input.group>
<x-input.group :for="md5('courseEvent.link')" :label="__('Link')">
<x-input autocomplete="off" wire:model.debounce="courseEvent.link"
:placeholder="__('Link')"/>
</x-input.group>
<x-input.group :for="md5('save')" label="">
<x-button primary wire:click="submit">
<i class="fa fa-thin fa-save"></i>
{{ __('Save') }}
</x-button>
</x-input.group>
</div>
</div>
</form>
</div>
</div>

View File

@@ -0,0 +1,107 @@
<div>
{{-- HEADER --}}
<livewire:frontend.header :country="null"/>
<div class="container p-4 mx-auto bg-21gray my-2">
<div class="pb-5 flex flex-row justify-between">
<h3 class="text-lg font-medium leading-6 text-gray-200">{{ __('Course') }}</h3>
<div class="flex flex-row space-x-2 items-center">
<div>
<x-button :href="$fromUrl">
<i class="fa fa-thin fa-arrow-left"></i>
{{ __('Back') }}
</x-button>
</div>
</div>
</div>
<form class="space-y-8 divide-y divide-gray-700 pb-24">
<div class="space-y-8 divide-y divide-gray-700 sm:space-y-5">
<div class="mt-6 sm:mt-5 space-y-6 sm:space-y-5">
<x-input.group :for="md5('image')" :label="__('Logo')">
<div class="py-4">
@if ($image)
<div class="text-gray-200">{{ __('Preview') }}:</div>
<img class="h-48 object-contain" src="{{ $image->temporaryUrl() }}">
@endif
@if ($course->getFirstMediaUrl('logo'))
<div class="text-gray-200">{{ __('Current picture') }}:</div>
<img class="h-48 object-contain" src="{{ $course->getFirstMediaUrl('logo') }}">
@endif
</div>
<input class="text-gray-200" type="file" wire:model="image">
@error('image') <span class="text-red-500">{{ $message }}</span> @enderror
</x-input.group>
<x-input.group :for="md5('lecturer_id')" :label="__('Lecturer')">
<x-select
:clearable="false"
autocomplete="off"
wire:model.debounce="course.lecturer_id"
:placeholder="__('Lecturer')"
:async-data="[
'api' => route('api.lecturers.index'),
'method' => 'GET', // default is GET
'params' => ['user_id' => auth()->id()], // default is []
]"
:template="[
'name' => 'user-option',
'config' => ['src' => 'image']
]"
option-label="name"
option-value="id"
/>
</x-input.group>
<x-input.group :for="md5('course.name')" :label="__('Name')">
<x-input autocomplete="off" wire:model.debounce="course.name"
:placeholder="__('Name')"
/>
</x-input.group>
<x-input.group :for="md5('selectedTags')" :label="__('Tags')">
<div class="py-2 flex flex-wrap items-center space-x-1">
@foreach($tags as $tag)
<div class="cursor-pointer" wire:key="tag{{ $loop->index }}"
wire:click="selectTag('{{ $tag->name }}')">
@if(collect($selectedTags)->contains($tag->name))
<x-badge
amber>
{{ $tag->name }}
</x-badge>
@else
<x-badge
black>
{{ $tag->name }}
</x-badge>
@endif
</div>
@endforeach
</div>
</x-input.group>
<x-input.group :for="md5('course.description')" :label="__('Description')">
<div
class="text-amber-500 text-xs py-2">{{ __('For images in Markdown, please use eg. Imgur or another provider.') }}</div>
<x-input.simple-mde wire:model.defer="course.description"/>
@error('course.description') <span
class="text-red-500 py-2">{{ $message }}</span> @enderror
</x-input.group>
<x-input.group :for="md5('save')" label="">
<x-button primary wire:click="submit">
<i class="fa fa-thin fa-save"></i>
{{ __('Save') }}
</x-button>
</x-input.group>
</div>
</div>
</form>
</div>
<script src="https://cdn.jsdelivr.net/npm/easymde/dist/easymde.min.js"></script>
</div>