Update Settings to return resource data and meta

This commit is contained in:
philipp lang 2024-08-02 13:16:43 +02:00
parent 3e92a7c40a
commit cbb45a0452
11 changed files with 49 additions and 94 deletions

View File

@ -1,21 +0,0 @@
<?php
namespace App\Fileshare\Actions;
use App\Fileshare\Models\Fileshare;
use App\Fileshare\Resources\FileshareResource;
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
use Lorisleiva\Actions\Concerns\AsAction;
class FileshareApiIndexAction
{
use AsAction;
public function handle(): AnonymousResourceCollection
{
session()->put('menu', 'setting');
session()->put('title', 'Datei-Verbindungen');
return FileshareResource::collection(Fileshare::paginate(15));
}
}

View File

@ -21,10 +21,8 @@ class FileshareSettings extends LocalSettings
/**
* @inheritdoc
*/
public function viewData(): array
public function data()
{
return [
'data' => FileshareResource::collection(Fileshare::paginate(15))
];
return FileshareResource::collection(Fileshare::paginate(15));
}
}

View File

@ -18,14 +18,6 @@ class MailgatewaySettings extends LocalSettings
return 'E-Mail-Verbindungen';
}
/**
* @inheritdoc
*/
public function meta(): array
{
return MailgatewayResource::meta();
}
/**
* @inheritdoc
*/

View File

@ -41,11 +41,14 @@ class ModuleSettings extends LocalSettings implements Storeable
/**
* @inheritdoc
*/
public function meta(): array
public function data(): array
{
return [
...parent::meta(),
'modules' => Module::forSelect()
...parent::data(),
'meta' => [
...parent::data()['meta'],
'modules' => Module::forSelect(),
]
];
}
}

View File

@ -20,7 +20,6 @@ class ViewAction
return Inertia::render('setting/' . ucfirst($settingGroup::group()), [
'data' => $settingGroup->data(),
'settingMenu' => app(SettingFactory::class)->getShare(),
'meta' => $settingGroup->meta(),
]);
}
}

View File

@ -19,21 +19,19 @@ abstract class LocalSettings extends Settings
return $this->url();
}
public function meta(): array
{
return [
'links' => [
'store' => $this->storeUrl(),
]
];
}
/**
* @return mixed
*/
public function data()
{
return $this->toArray();
return [
'data' => $this->toArray(),
'meta' => [
'links' => [
'store' => $this->storeUrl(),
]
]
];
}
public function beforeSave(ActionRequest $request): void

View File

@ -66,9 +66,12 @@ class NamiSettings extends LocalSettings implements Storeable
public function data(): array
{
return [
'mglnr' => $this->mglnr,
'password' => '',
'default_group_id' => $this->default_group_id,
...parent::data(),
'data' => [
'mglnr' => $this->mglnr,
'password' => '',
'default_group_id' => $this->default_group_id,
],
];
}
}

View File

@ -76,10 +76,12 @@
</template>
<script lang="js" setup>
import { useApiIndex } from '../../composables/useApiIndex.js';
import { useIndex, indexProps } from '../../composables/useInertiaApiIndex.js';
import SettingLayout from '../setting/Layout.vue';
const { meta, data, reload, create, edit, cancel, single, submit } = useApiIndex('/api/fileshare', 'fileshare');
const props = defineProps(indexProps);
const { meta, data, reload, create, edit, cancel, single, submit } = useIndex(props.data, 'fileshare');
function getType(type) {
if (!type) {
@ -89,6 +91,4 @@ function getType(type) {
}
return meta.value.types.find((t) => t.id === type);
}
reload();
</script>

View File

@ -2,7 +2,7 @@ import {useIndex} from '../../composables/useInertiaApiIndex.js';
import SettingLayout from './Layout.vue';
export function useSettings(props) {
const {data, meta, router} = useIndex(props);
const {data, meta, router} = useIndex(props.data);
function submit() {
router.post(meta.value.links.store, {...data.value});
@ -19,19 +19,10 @@ export function useSettings(props) {
const props = {
data: {
type: Object,
required: true,
},
settingMenu: {
type: Object,
required: true,
},
meta: {
type: Object,
required: false,
default: () => {
return {};
return {data: [], meta: {}};
},
type: Object,
},
};

View File

@ -19,7 +19,6 @@ use App\Invoice\Actions\InvoiceStoreAction;
use App\Course\Actions\CourseUpdateAction;
use App\Dashboard\Actions\IndexAction as DashboardIndexAction;
use App\Efz\ShowEfzDocumentAction;
use App\Fileshare\Actions\FileshareApiIndexAction;
use App\Fileshare\Actions\FileshareStoreAction;
use App\Fileshare\Actions\FileshareUpdateAction;
use App\Fileshare\Actions\ListFilesAction;
@ -182,6 +181,5 @@ Route::group(['middleware' => 'auth:web'], function (): void {
// ------------------------------------ fileshare -----------------------------------
Route::post('/fileshare', FileshareStoreAction::class)->name('fileshare.store');
Route::patch('/fileshare/{fileshare}', FileshareUpdateAction::class)->name('fileshare.update');
Route::get('/api/fileshare', FileshareApiIndexAction::class)->name('api.fileshare.index');
Route::post('/api/fileshare/{fileshare}/files', ListFilesAction::class)->name('api.fileshare.files');
});

View File

@ -17,31 +17,25 @@ class FileshareIndexActionTest extends FileshareTestCase
->name('lokaler Server')
->create();
$this->get('/api/fileshare')
->assertJsonPath('data.0.name', 'lokaler Server')
->assertJsonPath('data.0.type', OwncloudConnection::class)
->assertJsonPath('data.0.config.user', 'badenpowell')
->assertJsonPath('data.0.config.password', 'secret')
->assertJsonPath('data.0.config.base_url', env('TEST_OWNCLOUD_DOMAIN'))
->assertJsonPath('data.0.id', $connection->id)
->assertJsonPath('data.0.is_active', true)
->assertJsonPath('data.0.type_human', 'Owncloud')
->assertJsonPath('data.0.links.update', route('fileshare.update', ['fileshare' => $connection]))
->assertJsonPath('meta.default.name', '')
->assertJsonPath('meta.links.store', route('fileshare.store'))
->assertJsonPath('meta.types.0.id', NextcloudConnection::class)
->assertJsonPath('meta.types.0.name', 'Nextcloud')
->assertJsonPath('meta.types.0.defaults.base_url', '')
->assertJsonPath('meta.types.1.id', OwncloudConnection::class)
->assertJsonPath('meta.types.1.name', 'Owncloud')
->assertJsonPath('meta.types.1.defaults.base_url', '')
->assertJsonPath('meta.types.0.fields.1', ['label' => 'Benutzer', 'key' => 'user', 'type' => 'text']);
}
public function testItRendersComponent(): void
{
$this->withoutExceptionHandling()->login()->loginNami();
$this->get('/setting/fileshare')->assertComponent('setting/Fileshare');
$this->get(route('setting.view', ['settingGroup' => 'fileshare']))
->assertComponent('setting/Fileshare')
->assertInertiaPath('data.data.0.name', 'lokaler Server')
->assertInertiaPath('data.data.0.type', OwncloudConnection::class)
->assertInertiaPath('data.data.0.config.user', 'badenpowell')
->assertInertiaPath('data.data.0.config.password', 'secret')
->assertInertiaPath('data.data.0.config.base_url', env('TEST_OWNCLOUD_DOMAIN'))
->assertInertiaPath('data.data.0.id', $connection->id)
->assertInertiaPath('data.data.0.is_active', true)
->assertInertiaPath('data.data.0.type_human', 'Owncloud')
->assertInertiaPath('data.data.0.links.update', route('fileshare.update', ['fileshare' => $connection]))
->assertInertiaPath('data.meta.default.name', '')
->assertInertiaPath('data.meta.links.store', route('fileshare.store'))
->assertInertiaPath('data.meta.types.0.id', NextcloudConnection::class)
->assertInertiaPath('data.meta.types.0.name', 'Nextcloud')
->assertInertiaPath('data.meta.types.0.defaults.base_url', '')
->assertInertiaPath('data.meta.types.1.id', OwncloudConnection::class)
->assertInertiaPath('data.meta.types.1.name', 'Owncloud')
->assertInertiaPath('data.meta.types.1.defaults.base_url', '')
->assertInertiaPath('data.meta.types.0.fields.1', ['label' => 'Benutzer', 'key' => 'user', 'type' => 'text']);
}
}