Update Settings to return resource data and meta
This commit is contained in:
parent
3e92a7c40a
commit
cbb45a0452
|
@ -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));
|
||||
}
|
||||
}
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,14 +18,6 @@ class MailgatewaySettings extends LocalSettings
|
|||
return 'E-Mail-Verbindungen';
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function meta(): array
|
||||
{
|
||||
return MailgatewayResource::meta();
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
|
|
|
@ -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(),
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,6 @@ class ViewAction
|
|||
return Inertia::render('setting/' . ucfirst($settingGroup::group()), [
|
||||
'data' => $settingGroup->data(),
|
||||
'settingMenu' => app(SettingFactory::class)->getShare(),
|
||||
'meta' => $settingGroup->meta(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
@ -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');
|
||||
});
|
||||
|
|
|
@ -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']);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue