fix: ajax form submit, alert render on mobile

This commit is contained in:
2025-07-23 22:48:36 -05:00
parent 75e9c1e8c3
commit d1ae26db45
4 changed files with 9 additions and 42 deletions

View File

@@ -45,7 +45,7 @@ class PreferencesController extends AbstractController
); );
} }
#[Route('/user/preferences', 'app_user_preferences_submit', methods: ['POST'])] #[Route('/user/preferences/media', 'app_user_media_preferences_submit', methods: ['POST'])]
public function mediaPreferencesSubmit( public function mediaPreferencesSubmit(
Request $request, Request $request,
SaveUserMediaPreferencesHandler $saveUserMediaPreferencesHandler SaveUserMediaPreferencesHandler $saveUserMediaPreferencesHandler
@@ -56,14 +56,12 @@ class PreferencesController extends AbstractController
$form = $this->createForm(UserMediaPreferencesForm::class, $formData); $form = $this->createForm(UserMediaPreferencesForm::class, $formData);
$form->handleRequest($request); $form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) { if ($form->isSubmitted() && $form->isValid()) {
$saveUserMediaPreferencesHandler->handle( $saveUserMediaPreferencesHandler->handle(
SaveUserMediaPreferencesCommand::fromUserMediaPreferencesForm($form) SaveUserMediaPreferencesCommand::fromUserMediaPreferencesForm($form)
); );
$this->broadcaster->alert( $this->broadcaster->alert('Success', 'Your media preferences have been saved.');
title: 'Success',
message: 'Your media preferences have been saved.'
);
} }
return $this->render( return $this->render(
@@ -75,38 +73,6 @@ class PreferencesController extends AbstractController
); );
} }
#[Route('/user/preferences/media', 'app_save_media_preferences', methods: ['POST'])]
public function saveMediaPreferences(
SaveUserMediaPreferencesInput $input,
SaveUserMediaPreferencesHandler $saveUserMediaPreferencesHandler,
): Response
{
$saveUserMediaPreferencesHandler->handle($input->toCommand());
$mediaPreferences = $this->getUser()->getMediaPreferences();
$downloadPreferences = $this->getUser()->getDownloadPreferences();
$languages = CountryLanguages::$languages;
sort($languages);
$this->broadcaster->alert(
title: 'Success',
message: 'Your media preferences have been saved.'
);
return $this->render(
'user/preferences.html.twig',
[
'preferences' => $this->preferencesRepository->findEnabled(),
'languages' => $languages,
'providers' => ProviderList::$providers,
'qualities' => QualityList::getBaseQualities(),
'mediaPreferences' => $mediaPreferences,
'downloadPreferences' => $downloadPreferences,
'filterForm' => $this->createForm(GettingStartedFilterForm::class ?? null),
]
);
}
#[Route('/user/preferences/download', 'app_save_download_preferences', methods: ['POST'])] #[Route('/user/preferences/download', 'app_save_download_preferences', methods: ['POST'])]
public function saveDownloadPreferences( public function saveDownloadPreferences(
SaveUserDownloadPreferencesInput $input, SaveUserDownloadPreferencesInput $input,

View File

@@ -33,7 +33,6 @@ class UserMediaPreferencesForm extends AbstractType
private function addChoiceField(FormBuilderInterface $builder, string $fieldName, array $choices): void private function addChoiceField(FormBuilderInterface $builder, string $fieldName, array $choices): void
{ {
$question = [ $question = [
'action' => $this->urlGenerator->generate('app_user_preferences_submit'),
'attr' => ['class' => 'w-64 text-input mb-4'], 'attr' => ['class' => 'w-64 text-input mb-4'],
'label_attr' => ['class' => 'w-64 text-white block font-semibold mb-2'], 'label_attr' => ['class' => 'w-64 text-white block font-semibold mb-2'],
'choices' => $this->addDefaultChoice($choices), 'choices' => $this->addDefaultChoice($choices),
@@ -44,7 +43,9 @@ class UserMediaPreferencesForm extends AbstractType
public function configureOptions(OptionsResolver $resolver): void public function configureOptions(OptionsResolver $resolver): void
{ {
$resolver->setDefaults([]); $resolver->setDefaults([
'action' => $this->urlGenerator->generate('app_user_media_preferences_submit'),
]);
} }
private function getPreferenceChoices(string $preference): array private function getPreferenceChoices(string $preference): array

View File

@@ -9,7 +9,7 @@
<span class="sr-only">Info</span> <span class="sr-only">Info</span>
<h3 class="text-lg font-medium font-bold">{{ title|default('') }}</h3> <h3 class="text-lg font-medium font-bold">{{ title|default('') }}</h3>
</div> </div>
<div class="mt-2 text-sm w-[350px] font-bold"> <div class="mt-2 text-sm w-[300px] font-bold overflow-hidden text-wrap">
{{ message }} {{ message }}
</div> </div>
</li> </li>

View File

@@ -26,7 +26,7 @@
</div> </div>
</div> </div>
</div> </div>
<div {{ turbo_stream_listen(app.session.get('mercure_alert_topic')) }} class="fixed z-40 top-10 right-10"> <div {{ turbo_stream_listen(app.session.get('mercure_alert_topic')) }} class="fixed z-40 top-4 right-3 md:top-10 md:right-10">
<div class="z-40"> <div class="z-40">
<ul id="alert_list" class="flex flex-col gap-2"> <ul id="alert_list" class="flex flex-col gap-2">
{% for message in app.flashes('warning') %} {% for message in app.flashes('warning') %}