You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
195 lines
7.1 KiB
195 lines
7.1 KiB
<!-- Modal toggle -->
|
|
<button
|
|
class="p-1 text-blue-500 rounded hover:bg-blue-100 focus:outline-none flex items-center"
|
|
aria-label="Edit"
|
|
(click)="openPinModal()"
|
|
>
|
|
<svg
|
|
class="w-[1.125rem] h-[1.125rem] text-gray-800"
|
|
aria-hidden="true"
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
width="24"
|
|
height="24"
|
|
fill="none"
|
|
viewBox="0 0 24 24"
|
|
>
|
|
<path
|
|
stroke="currentColor"
|
|
stroke-linecap="round"
|
|
stroke-linejoin="round"
|
|
stroke-width="2"
|
|
d="m14.304 4.844 2.852 2.852M7 7H4a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h11a1 1 0 0 0 1-1v-4.5m2.409-9.91a2.017 2.017 0 0 1 0 2.853l-6.844 6.844L8 14l.713-3.565 6.844-6.844a2.015 2.015 0 0 1 2.852 0Z"
|
|
/>
|
|
</svg>
|
|
</button>
|
|
|
|
<!-- Fond assombri -->
|
|
<div
|
|
class="fixed inset-0 bg-gray-900 bg-opacity-50 w-full h-full transition-opacity duration-300 ease-in-out z-40"
|
|
[ngClass]="{
|
|
'opacity-0 pointer-events-none': !isPinModalOpen,
|
|
'opacity-100': isPinModalOpen
|
|
}"
|
|
(click)="closePinModal()"
|
|
id="pin-modal-background"
|
|
></div>
|
|
|
|
<!-- Main modal -->
|
|
<div
|
|
id="pin-modal"
|
|
tabindex="-1"
|
|
aria-hidden="true"
|
|
[ngClass]="{
|
|
'opacity-0 scale-50 pointer-events-none': !isPinModalOpen,
|
|
'opacity-100 scale-100': isPinModalOpen
|
|
}"
|
|
class="fixed top-0 right-0 left-0 z-50 flex justify-center items-center w-full h-full transition-transform duration-300 ease-in-out overflow-y-auto"
|
|
>
|
|
<div class="relative p-4 w-full max-w-xl max-h-full">
|
|
<!-- Modal content -->
|
|
<div
|
|
class="relative bg-white rounded-lg shadow dark:bg-gray-700 transition-transform duration-300 ease-in-out my-8"
|
|
>
|
|
<!-- Modal header -->
|
|
<div
|
|
class="flex items-center justify-between p-4 md:p-5 border-b rounded-t dark:border-gray-600"
|
|
>
|
|
<h3 class="text-xl font-semibold text-gray-900 dark:text-white">
|
|
Modifie ton souvenir
|
|
</h3>
|
|
<button
|
|
type="button"
|
|
(click)="closePinModal()"
|
|
class="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 dark:hover:bg-gray-600 dark:hover:text-white"
|
|
>
|
|
<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">Fermer la modal</span>
|
|
</button>
|
|
</div>
|
|
|
|
<!-- Modal body -->
|
|
<div class="p-4 md:p-5">
|
|
<form class="grid gap-6 mb-1 md:grid-cols-2" [formGroup]="form">
|
|
<div>
|
|
<label
|
|
for="title"
|
|
class="block mb-2 text-sm font-medium text-gray-900 dark:text-white"
|
|
>Titre</label
|
|
>
|
|
<input
|
|
type="text"
|
|
id="title"
|
|
formControlName="title"
|
|
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 dark:bg-gray-600 dark:border-gray-500 dark:placeholder-gray-400 dark:text-white"
|
|
placeholder="Mont Saint-Michel"
|
|
required
|
|
/>
|
|
</div>
|
|
|
|
<div>
|
|
<label
|
|
for="localisation"
|
|
class="block mb-2 text-sm font-medium text-gray-900 dark:text-white"
|
|
>Localisation</label
|
|
>
|
|
<input
|
|
type="text"
|
|
id="localisation"
|
|
formControlName="location"
|
|
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 dark:bg-gray-600 dark:border-gray-500 dark:placeholder-gray-400 dark:text-white"
|
|
placeholder="Saisir la localisation"
|
|
(focus)="onFocus()"
|
|
(blur)="onBlur()"
|
|
/>
|
|
<ul
|
|
*ngIf="suggestions.length > 0 && inputFocused"
|
|
class="bg-white dark:bg-gray-700 border border-gray-300 mt-2 rounded shadow absolute z-10 mr-5 max-h-60 overflow-auto"
|
|
>
|
|
<li
|
|
*ngFor="let suggestion of suggestions"
|
|
(click)="selectSuggestion(suggestion)"
|
|
class="p-2 block mb-2 text-sm font-medium text-gray-900 dark:text-white hover:bg-gray-500 cursor-pointer"
|
|
>
|
|
{{ suggestion.display_name }}
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div>
|
|
<label
|
|
for="files"
|
|
class="block mb-2 text-sm font-medium text-gray-900 dark:text-white"
|
|
>Images</label
|
|
>
|
|
<app-drag-drop
|
|
[initialFiles]="form.get('files')?.value"
|
|
(filesSelected)="onFilesReceived($event)"
|
|
(fileRemoved)="removeFile($event)"
|
|
></app-drag-drop>
|
|
</div>
|
|
|
|
<div>
|
|
<label
|
|
for="description"
|
|
class="block mb-2 text-sm font-medium text-gray-900 dark:text-white"
|
|
>Description</label
|
|
>
|
|
<textarea
|
|
id="description"
|
|
rows="4"
|
|
formControlName="description"
|
|
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 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
|
|
placeholder="Décrit ton souvenir..."
|
|
></textarea>
|
|
</div>
|
|
|
|
<div>
|
|
<label
|
|
for="date"
|
|
class="block mb-2 text-sm font-medium text-gray-900 dark:text-white"
|
|
>Date (optionnel)</label
|
|
>
|
|
<input
|
|
type="date"
|
|
id="date"
|
|
formControlName="date"
|
|
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 dark:bg-gray-600 dark:border-gray-500 dark:placeholder-gray-400 dark:text-white"
|
|
/>
|
|
</div>
|
|
</form>
|
|
<!-- Boutons alignés sous la grille -->
|
|
<div class="flex gap-4 mt-6">
|
|
<button
|
|
type="reset"
|
|
(click)="closePinModal()"
|
|
class="w-1/2 text-white bg-red-700 hover:bg-red-800 focus:ring-4 focus:outline-none focus:ring-red-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-red-600 dark:hover:bg-red-700 dark:focus:ring-red-800"
|
|
>
|
|
Annuler
|
|
</button>
|
|
<button
|
|
type="submit"
|
|
(click)="submitForm()"
|
|
class="w-1/2 text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800"
|
|
>
|
|
Valider
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|