How to connect EditorJS in admiral
10 minutes
Tools
Admiral
Frontend
Backend
Jun 5, 2025
10 minutes
$menu->addItem(MenuItem::make(MenuKey::SETTINGS, 'Settings', 'FiSettings', '/settings'));
import React, {useCallback} from 'react'
import {Form, Page} from '@devfamily/admiral'
import api from '../../config/api'
const settingsUri = 'settings'
export default function Settings() {
const fetchInitialData = useCallback(() => {
return api.get(settingsUri)
}, [])
const _onSubmit = useCallback(async (values) => {
return api.post(settingsUri, values)
}, [])
return (
<Page title="Settings">
<Form submitData={_onSubmit} fetchInitialData={fetchInitialData}>
// Here will be our inputs
<Form.Footer>
<Form.Submit>Save</Form.Submit>
</Form.Footer>
</Form>
</Page>
)
}
import Settings from '@/src/components/Settings/Settings'
export default Settings
import React, {useCallback} from 'react'
import {Form, Page, SelectInput, TextInput} from '@devfamily/admiral'
import api from '../../config/api'
const settingsUri = 'settings'
export default function Settings() {
const fetchInitialData = useCallback(() => {
return api.get(settingsUri)
}, [])
const _onSubmit = useCallback(async (values) => {
return api.post(settingsUri, values)
}, [])
return (
<Page title="Settings">
<Form submitData={_onSubmit} fetchInitialData={fetchInitialData}>
<TextInput name='min_version' label='Minimum App Version'/>
<SelectInput name='default_currency' label='Default currency'/>
<Form.Footer>
<Form.Submit>Save</Form.Submit>
</Form.Footer>
</Form>
</Page>
)
}
import {GetFormDataResult, UpdateResult} from '@devfamily/admiral'
import _ from './request'
import {Any} from '@react-spring/types'
const apiUrl = import.meta.env.VITE_API_URL || '/api'
type apiType = {
get: (uri: string) => Promise<GetFormDataResult>
post: (uri: string, data: Any) => Promise<UpdateResult>
}
const api: apiType = {
get: (uri) => {
const url = `${apiUrl}/${uri}`
return _.get(url)({})
},
post: (uri, data) => {
const url = `${apiUrl}/${uri}`
return _.post(url)({ data })
},
}
export default api
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('settings', function (Blueprint $table) {
$table->string('key')->unique();
$table->text('value')->nullable();
$table->timestamps();
});
DB::table('settings')->insert([
[
'key' => 'min_version',
'value' => '3.0.0',
],
[
'key' => 'default_currency',
'value' => 'RUB',
],
]);
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('settings');
}
};
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Setting extends Model
{
protected $fillable = [
'key',
'value',
];
}
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Setting;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class SettingsController extends Controller
{
public function get(): JsonResponse
{
$settings = Setting::query()
->whereIn('key', ['min_version', 'default_currency'])
->get()
->keyBy('key');
return response()->json([
'data' => [
'min_version' => $settings->get('min_version')->value,
'default_currency' => $settings->get('default_currency')->value,
],
'values' => [
'default_currency' => [
[
'label' => 'Dollar',
'value' => 'USD',
],
[
'label' => 'Euro',
'value' => 'EUR',
],
[
'label' => 'Russian ruble',
'value' => 'RUB',
],
],
]
]);
}
public function store(Request $request): JsonResponse
{
Setting::query()->where('key', 'min_version')->update(['value' => $request->input('min_version')]);
Setting::query()->where('key', 'default_currency')->update(['value' => $request->input('default_currency')]);
return response()->json();
}
}
Route::prefix('settings')->as('settings.')->group(function () {
Route::get('',[SettingsController::class,'get'])->name('get');
Route::post('',[SettingsController::class,'store'])->name('store');
});