Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 8 additions & 25 deletions resources/views/settings.blade.php
Original file line number Diff line number Diff line change
@@ -1,30 +1,13 @@
@extends(BaseHelper::getAdminMasterLayoutTemplate())

@section('content')
<x-core::form
:url="route('api.settings.update')"
method="post"
>
<x-core-setting::section
:title="trans('packages/api::api.setting_title')"
:description="trans('packages/api::api.setting_description')"
>
<x-core::form.on-off.checkbox
name="api_enabled"
:label="trans('packages/api::api.api_enabled')"
:checked="ApiHelper::enabled()"
:wrapper="false"
/>
</x-core-setting::section>
{!! $form->renderForm() !!}

<x-core-setting::section.action>
<x-core::button
type="submit"
color="primary"
icon="ti ti-device-floppy"
>
{{ trans('packages/api::api.save_settings') }}
</x-core::button>
</x-core-setting::section.action>
</x-core::form>
@if(ApiHelper::enabled())
<div class="mt-5">
<x-core-setting::section :card="false">
{!! $sanctumTokenTable->renderTable() !!}
</x-core-setting::section>
</div>
@endif
@endsection
112 changes: 107 additions & 5 deletions resources/views/table.blade.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
@extends(BaseHelper::getAdminMasterLayoutTemplate())

@section('content')
<div class="table-wrapper">
@if(session()->has('plainTextToken'))
<x-core::alert
type="success"
Expand All @@ -26,5 +24,109 @@ class="text-muted text-center text-decoration-none"
</x-core::alert>
@endif

@include('core/table::base-table')
@stop
<x-core::card>
<x-core::card.header>
<div class="w-100 gap-2 d-flex align-items-start justify-content-between flex-wrap">
<div class="d-flex gap-2 mb-1">
@if ($table->hasBulkActions())
<x-core::dropdown
type="button"
:label="trans('core/table::table.bulk_actions')"
>
@foreach ($table->getBulkActions() as $action)
{!! $action !!}
@endforeach
</x-core::dropdown>
@endif

@if ($table->hasFilters())
<x-core::button
type="button"
class="btn-show-table-options"
>
{{ trans('core/table::table.filters') }}
</x-core::button>
@endif

<div class="table-search-input">
<label><input type="search" class="form-control input-sm" placeholder="{{ trans('core/table::table.search') }}" style="min-width: 120px"></label>
</div>
</div>

<div class="d-flex gap-2 mb-1">
@foreach($table->getButtons() as $button)
@if (Arr::get($button, 'extend') === 'collection')
<div class="dropdown">
<button class="btn buttons-collection dropdown-toggle {{ $button['className'] }}" data-bs-toggle="dropdown" tabindex="0" aria-controls="{{ $table->getOption('id') }}" type="button" aria-haspopup="dialog" aria-expanded="false">
{!! $button['text'] !!}
</button>
<div class="dropdown-menu">
@foreach($button['buttons'] as $buttonItem)
<button class="dropdown-item {{ $buttonItem['className'] }}">
{!! $buttonItem['text'] !!}
</button>
@endforeach
</div>
</div>
@else
<button class="btn {{ $button['className'] }}" tabindex="0" aria-controls="{{ $table->getOption('id') }}" type="button" aria-haspopup="dialog" aria-expanded="false">
{!! $button['text'] !!}
</button>
@endif
@endforeach

@foreach($table->getDefaultButtons() as $defaultButton)
@if (is_string($defaultButton))
@switch($defaultButton)
@case('reload')
<button class="btn item-action" data-bb-toggle="dt-buttons" data-bb-target=".buttons-reload" tabindex="0" aria-controls="{{ $table->getOption('id') }}" type="button" aria-haspopup="dialog" aria-expanded="false">
<span>
<x-core::icon name="ti ti-refresh" /> {{ trans('core/base::tables.reload') }}
</span>
</button>
@break
@case('export')
<div class="dropdown">
<button class="btn buttons-collection dropdown-toggle buttons-export" data-bs-toggle="dropdown" tabindex="0" aria-controls="{{ $table->getOption('id') }}" type="button" aria-haspopup="dialog" aria-expanded="false">
<span>
<x-core::icon name="ti ti-download" /> {{ trans('core/base::tables.export') }}
</span>
</button>
<div class="dropdown-menu">
<button class="dropdown-item" data-bb-toggle="dt-exports" data-bb-target="csv" aria-controls="{{ $table->getOption('id') }}">
<span>
<x-core::icon name="ti ti-file-type-csv" /> {{ trans('core/base::tables.csv') }}
</span>
</button>
<button class="dropdown-item" data-bb-toggle="dt-exports" data-bb-target="excel" aria-controls="{{ $table->getOption('id') }}">
<span>
<x-core::icon name="ti ti-file-type-xls" /> {{ trans('core/base::tables.excel') }}
</span>
</button>
</div>
</div>
@break
@case('visibility')
@break
@endswitch
@else
@dd($defaultButton)
@endif
@endforeach
</div>
</div>
</x-core::card.header>

<div class="card-table">
<div class="table-responsive">
{!! $dataTable->table(compact('id', 'class'), false) !!}
</div>
</div>
</x-core::card>
</div>

@push('footer')
@include('core/table::modal')

{!! $dataTable->scripts() !!}
@endpush
2 changes: 1 addition & 1 deletion routes/web.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

Route::group(['prefix' => 'settings/api', 'permission' => 'api.settings'], function () {
Route::get('/', [ApiController::class, 'edit'])->name('settings');
Route::post('/', [ApiController::class, 'update'])->name('settings.update');
Route::put('/', [ApiController::class, 'update'])->name('settings.update');
});
});
});
31 changes: 31 additions & 0 deletions src/Forms/Settings/ApiSettingForm.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

namespace Botble\Api\Forms\Settings;

use Botble\Api\Facades\ApiHelper;
use Botble\Api\Http\Requests\ApiSettingRequest;
use Botble\Base\Forms\FieldOptions\OnOffFieldOption;
use Botble\Base\Forms\Fields\OnOffCheckboxField;
use Botble\Setting\Forms\SettingForm;

class ApiSettingForm extends SettingForm
{
public function setup(): void
{
parent::setup();

$this
->setValidatorClass(ApiSettingRequest::class)
->setSectionTitle(trans('packages/api::api.setting_title'))
->setSectionDescription(trans('packages/api::api.setting_description'))
->contentOnly()
->add(
'api_enabled',
OnOffCheckboxField::class,
OnOffFieldOption::make()
->label(trans('packages/api::api.api_enabled'))
->value(ApiHelper::enabled())
->toArray()
);
}
}
14 changes: 8 additions & 6 deletions src/Http/Controllers/ApiController.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,26 @@

namespace Botble\Api\Http\Controllers;

use Botble\Api\Forms\Settings\ApiSettingForm;
use Botble\Api\Http\Requests\ApiSettingRequest;
use Botble\Base\Facades\Assets;
use Botble\Api\Tables\SanctumTokenTable;
use Botble\Setting\Http\Controllers\SettingController;

class ApiController extends SettingController
{
public function edit()
public function edit(SanctumTokenTable $sanctumTokenTable)
{
$this->pageTitle(trans('packages/api::api.settings'));

Assets::addScriptsDirectly('vendor/core/core/setting/js/setting.js')
->addStylesDirectly('vendor/core/core/setting/css/setting.css');

$this->breadcrumb()
->add(trans('core/setting::setting.title'), route('settings.index'))
->add(trans('packages/api::api.settings'));

return view('packages/api::settings');
$form = ApiSettingForm::create();

$sanctumTokenTable->setAjaxUrl(route('api.sanctum-token.index'));

return view('packages/api::settings', compact('form', 'sanctumTokenTable'));
}

public function update(ApiSettingRequest $request)
Expand Down
10 changes: 8 additions & 2 deletions src/Http/Controllers/SanctumTokenController.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,13 @@

class SanctumTokenController extends BaseController
{
public function __construct()
{
$this->breadcrumb()
->add(trans('core/setting::setting.title'), route('settings.index'))
->add(trans('packages/api::api.settings'), route('api.settings'));
}

public function index(SanctumTokenTable $sanctumTokenTable): JsonResponse|View
{
$this->pageTitle(trans('packages/api::sanctum-token.name'));
Expand All @@ -36,8 +43,7 @@ public function store(StoreSanctumTokenRequest $request): BaseHttpResponse

return $this
->httpResponse()
->setPreviousUrl(route('api.sanctum-token.index'))
->setNextUrl(route('api.sanctum-token.index'))
->setNextUrl(route('api.settings'))
->withCreatedSuccessMessage();
}

Expand Down
12 changes: 0 additions & 12 deletions src/Providers/ApiServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
use Botble\Api\Facades\ApiHelper;
use Botble\Api\Http\Middleware\ForceJsonResponseMiddleware;
use Botble\Api\Models\PersonalAccessToken;
use Botble\Base\Facades\DashboardMenu;
use Botble\Base\Facades\PanelSectionManager;
use Botble\Base\PanelSections\PanelSectionItem;
use Botble\Base\Supports\ServiceProvider;
Expand Down Expand Up @@ -54,17 +53,6 @@ public function boot(): void

Sanctum::usePersonalAccessTokenModel(PersonalAccessToken::class);

DashboardMenu::default()->beforeRetrieving(function () {
DashboardMenu::make()
->registerItem([
'id' => 'cms-packages-api-sanctum-token',
'name' => trans('packages/api::sanctum-token.name'),
'icon' => 'ti ti-key',
'url' => route('api.sanctum-token.index'),
'permissions' => ['api.sanctum-token.index'],
]);
});

$this->app['events']->listen(RouteMatched::class, function () {
if (ApiHelper::enabled()) {
$this->app['router']->pushMiddlewareToGroup('api', ForceJsonResponseMiddleware::class);
Expand Down