Add form settings

This commit is contained in:
philipp lang 2024-12-20 00:04:39 +01:00
parent db8d117dcf
commit 291e69e68c
7 changed files with 151 additions and 866 deletions

View File

@ -35,7 +35,6 @@ class SettingServiceProvider extends ServiceProvider
app(SettingFactory::class)->register(ModuleSettings::class);
app(SettingFactory::class)->register(InvoiceSettings::class);
app(SettingFactory::class)->register(NamiSettings::class);
app(SettingFactory::class)->register(FormSettings::class);
app(SettingFactory::class)->register(FileshareSettings::class);
app(SettingFactory::class)->register(PreventionSettings::class);

View File

@ -184,6 +184,7 @@ return [
Modules\Mailgateway\MailgatewayServiceProvider::class,
Modules\Nami\NamiServiceProvider::class,
Modules\Auth\AuthServiceProvider::class,
Modules\Form\FormServiceProvider::class,
],
/*

View File

@ -0,0 +1,53 @@
<?php
namespace Modules\Form\Components;
use App\Form\FormSettings;
use Livewire\Component;
class SettingView extends Component
{
public string $clearCacheUrl;
public string $registerUrl;
public $settingClass = FormSettings::class;
public function rules(): array
{
return [
'clearCacheUrl' => '',
'registerUrl' => '',
];
}
public function mount(): void
{
$this->registerUrl = app(FormSettings::class)->registerUrl;
$this->clearCacheUrl = app(FormSettings::class)->clearCacheUrl;
}
public function save(): void
{
app(FormSettings::class)->fill($this->validate())->save();
$this->dispatch('success', 'Einstellungen gespeichert.');
}
public function render()
{
return <<<'HTML'
<x-page::setting-layout :active="$settingClass">
<x-slot:right>
<x-form::save-button form="formsettingform"></x-form::save-button>
</x-slot:right>
<form id="formsettingform" class="grow p-6 grid grid-cols-2 gap-3 items-start content-start"
wire:submit.prevent="save">
<x-ui::setting-intro class="col-span-full">
Hier kannst du Einstellungen für Anmeldeformulare setzen.
</x-ui::setting-intro>
<x-form::text name="register_url" wire:model="registerUrl" label="Formular-Link"></x-form::text>
<x-form::text name="clear_cache_url" wire:model="clearCacheUrl" label="Frontend-Cache-Url"></x-form::text>
</form>
</x-page::setting-layout>
HTML;
}
}

View File

@ -0,0 +1,42 @@
<?php
namespace Modules\Form\Components;
use App\Form\FormSettings;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Livewire\Livewire;
use Tests\TestCase;
uses(TestCase::class);
uses(DatabaseTransactions::class);
it('it renders page', function () {
test()->withoutExceptionHandling()->login()->loginNami();
test()->get('/setting/form')->assertSeeLivewire(SettingView::class);
});
it('it displays active modules', function () {
test()->withoutExceptionHandling()->login()->loginNami();
app(FormSettings::class)->fill(['registerUrl' => 'http://example.com/register', 'clearCacheUrl' => 'http://example.com/clear-cache'])->save();
Livewire::test(SettingView::class)
->assertSee('Einstellungen für Anmeldeformulare')
->assertSee('Formular-Link')
->assertSet('registerUrl', 'http://example.com/register')
->assertSet('clearCacheUrl', 'http://example.com/clear-cache')
->assertSeeHtml('data-active');
});
it('it saves settings', function () {
test()->withoutExceptionHandling()->login()->loginNami();
Livewire::test(SettingView::class)
->set('clearCacheUrl', 'http://example.com/clear')
->set('registerUrl', 'http://example.com/register')
->call('save')
->assertDispatched('success', 'Einstellungen gespeichert.');
test()->assertEquals('http://example.com/clear', app(FormSettings::class)->clearCacheUrl);
test()->assertEquals('http://example.com/register', app(FormSettings::class)->registerUrl);
});

View File

@ -0,0 +1,35 @@
<?php
namespace Modules\Form;
use Illuminate\Routing\Router;
use Illuminate\Support\ServiceProvider;
use Modules\Form\Components\SettingView;
use App\Setting\SettingFactory;
use App\Form\FormSettings;
class FormServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
app(SettingFactory::class)->register(FormSettings::class);
app(Router::class)->middleware(['web', 'auth:web'])->group(function ($router) {
$router->get('/setting/form', SettingView::class)->name('setting.form');
});
}
}

837
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,48 +0,0 @@
<template>
<page-layout>
<template #right>
<f-save-button form="formsettingsform"></f-save-button>
</template>
<setting-layout>
<form id="formsettingsform" class="grow p-6 grid grid-cols-2 gap-3 items-start content-start" @submit.prevent="submit">
<div class="col-span-full text-gray-100 mb-3">
<p class="text-sm">Hier kannst du Einstellungen für Anmeldeformulare setzen.</p>
</div>
<div class="grid grid-cols-2 gap-4">
<f-text id="register_url" v-model="inner.registerUrl" label="Formular-Link"></f-text>
<f-text id="clear_cache_url" v-model="inner.clearCacheUrl" label="Frontend-Cache-Url"></f-text>
</div>
</form>
</setting-layout>
</page-layout>
</template>
<script>
import SettingLayout from './Layout.vue';
export default {
components: {
SettingLayout,
},
props: {
data: {
type: Object,
default: () => {
return {};
},
},
},
data: function () {
return {
inner: {...this.data.data},
};
},
methods: {
submit() {
this.$inertia.post('/setting/form', this.inner, {
onSuccess: () => this.$success('Einstellungen gespeichert.'),
});
},
},
};
</script>