Website_SIG_Pare/resources/views/admin/tambahDataKursusAdmin.blade...

397 lines
24 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<x-adminlayout>
<div class="">
<div class="py-10 px-4">
<div class="pb-4 flex">
<a class="px-4 flex text-white text-lg justify-center shadow-md shadow-gray-600 items-center py-2 rounded-xl bg-[#4F7F81]"
href="{{ route('admin.dataKursus') }}"><svg class="w-5 h-5 text-white " aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 14 10">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M13 5H1m0 0 4 4M1 5l4-4" />
</svg></a>
</div>
<form id="my-form" action="{{ route('kursus.store') }}" method="POST" enctype="multipart/form-data">
@csrf
<div class="space-y-4">
<!-- Nama Kursus -->
<div class="grid gap-6 md:grid-cols-3">
<div>
<label for="nama_kursus" class="block mb-2 text-sm font-medium text-gray-900">Nama
Kursus</label>
<input type="text" id="nama_kursus" name="nama_kursus"
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
placeholder="Kampung Inggris LC - Language Center" value="{{ old('nama_kursus') }}"
required />
</div>
<div class="hidden">
<label for="popular" class="block mb-2 text-sm font-medium text-gray-900">Pilih
Popular</label>
<select id="popular" name="popular"
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5">
<option value="Tidak" {{ old('popular') == 'Tidak' ? 'selected' : '' }}>Tidak</option>
<option value="Popular" {{ old('popular') == 'Popular' ? 'selected' : '' }}>Popular
</option>
</select>
</div>
<div>
<label for="kategori" class="block mb-2 text-sm font-medium text-gray-900">Pilih
Kategori</label>
<select id="popular" name="kategori_id"
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5">
<option value="">Pilih Kategori</option> <!-- Tambahkan opsi default -->
@foreach ($kategori as $kategoris)
<option value="{{ $kategoris->id }}"
{{ old('kategori_id') == $kategoris->id ? 'selected' : '' }}>
{{ $kategoris->nama_kategori }}
</option>
@endforeach
</select>
</div>
</div>
<!-- Input File Single -->
<div>
<label for="deskripsi" class="block mb-2 text-sm font-medium text-gray-900 ">
Deskripsi
</label>
<textarea id="deskripsi" name="deskripsi" rows="4"
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 "
placeholder="KAMPUNG INGGRIS LC LANGUAGE CENTER Adalah . . . ." required>{{ old('deskripsi') }}</textarea>
</div>
<div class="flex justify-between w-full gap-4">
<div class="w-full">
<label for="latitude" class="block mb-2 text-sm font-medium text-gray-900">Latitude</label>
<input type="text" id="latitude" name="latitude" pattern="-?\d*\.?\d+"
title="Latitude can include numbers, a dot (.) for decimal, and a minus (-) for negative values."
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
placeholder="Latitude" value="{{ old('latitude') }}" required />
</div>
<!-- Longitude -->
<div class="w-full">
<label for="longitude"
class="block mb-2 text-sm font-medium text-gray-900">Longitude</label>
<input type="text" id="longitude" name="longitude" pattern="-?\d*\.?\d+"
title="Longitude can include numbers, a dot (.) for decimal, and a minus (-) for negative values."
class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
placeholder="Longitude" value="{{ old('longitude') }}" />
</div>
</div>
<!-- Latitude -->
<!-- Paket -->
<div>
<label for="paket" class="block mb-2 text-sm font-medium text-gray-900">Paket</label>
<input id="paket" name="paket" type="hidden" value="{{ old('paket') }}" />
<trix-editor input="paket"
class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500"
placeholder="Write your thoughts here..."></trix-editor>
</div>
<!-- Metode -->
<div>
<label for="metode" class="block mb-2 text-sm font-medium text-gray-900">Metode</label>
<input id="metode" name="metode" type="hidden" value="{{ old('metode') }}" />
<trix-editor input="metode"
class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500"
placeholder="Write your thoughts here..."></trix-editor>
</div>
<!-- Fasilitas -->
<!-- Lokasi -->
<div>
<label for="lokasi" class="block mb-2 text-sm font-medium text-gray-900">Lokasi</label>
<input id="lokasi" name="lokasi" type="hidden" value="{{ old('lokasi') }}" />
<trix-editor input="lokasi"
class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500"
placeholder="Write your thoughts here..."></trix-editor>
</div>
<div>
<label for="fasilitas" class="block mb-2 text-sm font-medium text-gray-900">Fasilitas</label>
<input id="fasilitas" name="fasilitas" type="hidden" value="{{ old('fasilitas') }}" />
<!-- Tombol tambah fasilitas -->
<div id="facility-inputs" class=" grid grid-cols-4 gap-4">
<!-- Input fasilitas akan ditambahkan di sini -->
</div>
<button id="add-facility-btn" type="button"
class="mt-3 px-4 py-2 text-xs bg-blue-500 text-white rounded-lg hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500">
Tambah Fasilitas
</button>
</div>
<!-- Script untuk menambah input fasilitas -->
<script>
let facilityIndex = 0; // Untuk memastikan setiap input memiliki ID unik
// Fungsi untuk menambahkan input fasilitas
function addFacilityInput() {
// Buat div baru untuk input fasilitas
const facilityDiv = document.createElement('div');
facilityDiv.classList.add('facility-input', 'bg-gray-100', 'rounded-lg');
// Buat label untuk input fasilitas
const label = document.createElement('label');
label.setAttribute('for', 'fasilitas_' + facilityIndex);
label.classList.add('block', 'text-sm', 'font-medium', 'text-gray-700');
// Buat input untuk fasilitas
const input = document.createElement('input');
input.id = 'fasilitas_' + facilityIndex;
input.name = 'fasilitas_' + facilityIndex;
input.type = 'text';
input.classList.add('block', 'w-full', 'px-3', 'py-2', 'border', 'border-gray-300', 'rounded-md',
'shadow-sm');
input.placeholder = 'Masukkan fasilitas';
// Buat tombol hapus untuk input fasilitas ini
const deleteButton = document.createElement('button');
deleteButton.type = 'button';
deleteButton.classList.add('ml-2', 'text-red-500', 'hover:text-red-700');
deleteButton.textContent = 'Hapus';
deleteButton.addEventListener('click', function() {
facilityDiv.remove();
updateFasilitasInput();
});
// Menambahkan elemen-elemen ke dalam div fasilitas
facilityDiv.appendChild(label);
facilityDiv.appendChild(input);
facilityDiv.appendChild(deleteButton);
// Menambahkan div fasilitas ke dalam kontainer
document.getElementById('facility-inputs').appendChild(facilityDiv);
// Update indeks fasilitas untuk input selanjutnya
facilityIndex++;
// Update input tersembunyi dengan nilai terbaru JSON
updateFasilitasInput();
}
// Tambahkan fasilitas pertama kali saat halaman dimuat
addFacilityInput();
// Event listener untuk tombol tambah fasilitas
document.getElementById('add-facility-btn').addEventListener('click', function() {
addFacilityInput();
});
// Fungsi untuk memperbarui nilai JSON di input tersembunyi
function updateFasilitasInput() {
const fasilitasArray = [];
const facilityInputs = document.querySelectorAll('.facility-input input');
// Ambil nilai dari semua input fasilitas
facilityInputs.forEach(input => {
if (input.value.trim() !== '') {
fasilitasArray.push(input.value.trim());
}
});
// Setel nilai JSON di input tersembunyi
document.getElementById('fasilitas').value = JSON.stringify(fasilitasArray);
}
</script>
<div>
<label for="latitude" class="block mb-2 text-sm font-medium text-gray-900">Uplaud
Gambar</label>
<div class="grid md:grid-cols-2 gap-4">
<div class="grid grid-cols-1 gap-4">
<div>
<label for="file_input"
class="flex flex-col items-center justify-center w-full h-64 border-2 border-gray-300 border-dashed rounded-lg cursor-pointer bg-gray-50 ">
<div class="flex flex-col items-center justify-center pt-5 pb-6">
<svg class="w-8 h-8 mb-4 text-gray-500 " aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" fill="none"
viewBox="0 0 20 16">
<path stroke="currentColor" stroke-linecap="round"
stroke-linejoin="round" stroke-width="2"
d="M13 13h3a3 3 0 0 0 0-6h-.025A5.56 5.56 0 0 0 16 6.5 5.5 5.5 0 0 0 5.207 5.021C5.137 5.017 5.071 5 5 5a4 4 0 0 0 0 8h2.167M10 15V6m0 0L8 8m2-2 2 2" />
</svg>
<p class="mb-2 text-sm text-gray-500 "><span class="font-semibold">Click
to upload Single</p>
<p class="text-xs text-gray-500 ">SVG, PNG, JPG or GIF
</p>
<input id="file_input" type="file" name="img" class="hidden"
onchange="previewImage(event)" />
</div>
</label>
</div>
<!-- Preview image -->
<div id="image_preview_single" class="hidden border p-4">
<div class="flex justify-center">
<img id="image_preview_single_img" src="" alt="Image Preview"
class="aspect-video h-40 object-contain" />
</div>
</div>
</div>
<!-- Input File Multiple -->
<div class="grid grid-cols-1 gap-4">
<div>
<label for="multiple_files"
class="flex flex-col items-center justify-center w-full h-64 border-2 border-gray-300 border-dashed rounded-lg cursor-pointer bg-gray-50 ">
<div class="flex flex-col items-center justify-center pt-5 pb-6">
<svg class="w-8 h-8 mb-4 text-gray-500 " aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" fill="none"
viewBox="0 0 20 16">
<path stroke="currentColor" stroke-linecap="round"
stroke-linejoin="round" stroke-width="2"
d="M13 13h3a3 3 0 0 0 0-6h-.025A5.56 5.56 0 0 0 16 6.5 5.5 5.5 0 0 0 5.207 5.021C5.137 5.017 5.071 5 5 5a4 4 0 0 0 0 8h2.167M10 15V6m0 0L8 8m2-2 2 2" />
</svg>
<p class="mb-2 text-sm text-gray-500 "><span class="font-semibold">Click
to upload Multi</p>
<p class="text-xs text-gray-500 ">SVG, PNG, JPG or GIF
</p>
<input id="multiple_files" type="file" name="img_konten[]" multiple
onchange="previewMultipleImages(event)" class="hidden" />
</div>
</label>
</div>
<!-- Multiple Images Preview -->
<div id="image_preview_multiple" class="hidden p-4 flex justify-center border">
<div id="multiple_images_preview"
class=" aspect-video h-40 object-contain overflow-x-auto flex gap-4">
</div>
</div>
</div>
</div>
<script>
// Preview single image
function previewImage(event) {
const file = event.target.files[0];
const reader = new FileReader();
reader.onload = function() {
const image = document.getElementById('image_preview_single_img');
image.src = reader.result;
document.getElementById('image_preview_single').classList.remove('hidden');
}
if (file) {
reader.readAsDataURL(file);
}
}
// Preview multiple images
function previewMultipleImages(event) {
const files = event.target.files;
const previewContainer = document.getElementById('multiple_images_preview');
previewContainer.innerHTML = ''; // Clear previous previews
Array.from(files).forEach(file => {
const reader = new FileReader();
reader.onload = function() {
const img = document.createElement('img');
img.src = reader.result;
previewContainer.appendChild(img);
}
if (file) {
reader.readAsDataURL(file);
}
});
document.getElementById('image_preview_multiple').classList.remove('hidden');
}
</script>
</div>
<div>
<button type="button" data-modal-target="popup-modal-tambah"
data-modal-toggle="popup-modal-tambah"
class="shadow-md shadow-gray-600 text-white bg-[#4F7F81] hover:bg-[#3F6A6B] focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm w-full sm:w-auto px-5 py-2.5 text-center">
Submit
</button>
</div>
@if ($errors->any())
<div class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded relative mb-4"
role="alert">
<strong class="font-bold">Error:</strong>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
</div>
</form>
<!-- Modal Konfirmasi -->
<div id="popup-modal-tambah" tabindex="-1"
class="hidden overflow-y-auto overflow-x-hidden fixed top-0 right-0 left-0 z-50 justify-center items-center w-full md:inset-0 h-[calc(100%-1rem)] max-h-full">
<div class="relative p-4 w-full max-w-md max-h-full">
<div class="relative bg-white rounded-lg shadow ">
<button type="button"
class="absolute top-3 end-2.5 text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm w-8 h-8 ms-auto inline-flex justify-center items-center "
data-modal-hide="popup-modal-tambah">
<svg class="w-3 h-3" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"
fill="none" viewBox="0 0 14 14">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"
stroke-width="2" d="m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6" />
</svg>
<span class="sr-only">Close modal</span>
</button>
<div class="p-4 md:p-5 text-center">
<svg class="mx-auto mb-4 text-[#3F6A6B] w-12 h-12 " aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 20 20">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"
stroke-width="2" d="M10 11V6m0 8h.01M19 10a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" />
</svg>
<h3 class="mb-5 text-lg font-normal text-black">
Apakah Anda yakin ingin menambah kursus?
</h3>
<button id="confirm-submit"
class="text-white bg-[#4F7F81] hover:bg-[#3F6A6B] focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm inline-flex items-center px-5 py-2.5 text-center">
Ya, Kirim
</button>
<button type="button"
class="py-2.5 px-5 ms-3 text-sm font-medium text-gray-900 focus:outline-none bg-white rounded-lg border border-gray-200 hover:bg-gray-100 hover:text-[#3F6A6B] focus:z-10 focus:ring-4 focus:ring-gray-100 "
data-modal-hide="popup-modal-tambah">Tidak, Batal</button>
</div>
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', () => {
// Show modal
document.querySelectorAll('[data-modal-toggle]').forEach(button => {
button.addEventListener('click', () => {
const targetId = button.getAttribute('data-modal-target');
document.getElementById(targetId).classList.remove('hidden');
});
});
// Hide modal
document.querySelectorAll('[data-modal-hide]').forEach(button => {
button.addEventListener('click', () => {
const targetId = button.getAttribute('data-modal-hide');
document.getElementById(targetId).classList.add('hidden');
});
});
// Handle form submission
document.getElementById('confirm-submit').addEventListener('click', () => {
document.getElementById('my-form').submit();
});
});
</script>
</div>
</div>
@push('script')
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/trix/1.3.1/trix.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/trix/1.3.1/trix.min.js"></script>
@endpush
</x-adminlayout>