Skip to content

Commit 5fda34c

Browse files
committed
Implement app.generate_name form toolbar action
1 parent 5abdbf9 commit 5fda34c

File tree

5 files changed

+67
-2
lines changed

5 files changed

+67
-2
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import {translate} from 'sulu-admin-bundle/utils';
2+
import {AbstractFormToolbarAction} from 'sulu-admin-bundle/views';
3+
4+
const FIRSTNAMES = ['James', 'Mary', 'John', 'Patricia', 'Robert', 'Jennifer', 'Michael', 'Linda']
5+
const LASTNAMES = ['Smith', 'Johnson', 'Williams', 'Brown', 'Jones', 'Miller', 'Davis', 'Garcia']
6+
7+
export default class GenerateNameToolbarAction extends AbstractFormToolbarAction {
8+
getToolbarItemConfig() {
9+
const {allow_overwrite: allowOverwrite = false} = this.options;
10+
const formData = this.resourceFormStore.data;
11+
const nameAlreadySet = !!formData.firstName || !!formData.lastName;
12+
13+
return {
14+
type: 'button',
15+
label: translate('app.generate_name'),
16+
icon: 'su-magic',
17+
disabled: !allowOverwrite && nameAlreadySet,
18+
onClick: this.handleClick,
19+
};
20+
}
21+
22+
handleClick = () => {
23+
const randomFirstName = FIRSTNAMES[Math.floor(Math.random() * FIRSTNAMES.length)];
24+
this.resourceFormStore.change('firstName', randomFirstName);
25+
26+
const randomLastName = LASTNAMES[Math.floor(Math.random() * LASTNAMES.length)];
27+
this.resourceFormStore.change('lastName', randomLastName);
28+
};
29+
}

assets/admin/index.js

+4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ import 'sulu-snippet-bundle';
1818
import 'sulu-website-bundle';
1919

2020
// Implement custom extensions here
21+
import {formToolbarActionRegistry} from 'sulu-admin-bundle/views';
22+
import GenerateNameToolbarAction from "./formToolbarActions/GenerateNameToolbarAction";
23+
24+
formToolbarActionRegistry.add('app.generate_name', GenerateNameToolbarAction);
2125

2226
// Start admin application
2327
startAdmin();

src/Admin/AppAdmin.php

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Admin;
6+
7+
use Sulu\Bundle\AdminBundle\Admin\Admin;
8+
use Sulu\Bundle\AdminBundle\Admin\View\FormViewBuilderInterface;
9+
use Sulu\Bundle\AdminBundle\Admin\View\ToolbarAction;
10+
use Sulu\Bundle\AdminBundle\Admin\View\ViewCollection;
11+
use Sulu\Bundle\ContactBundle\Admin\ContactAdmin;
12+
13+
class AppAdmin extends Admin
14+
{
15+
public function configureViews(ViewCollection $viewCollection): void
16+
{
17+
if ($viewCollection->has('sulu_contact.contact_add_form.details')) {
18+
/** @var FormViewBuilderInterface $contactAddFormViewBuilder */
19+
$contactAddFormViewBuilder = $viewCollection->get('sulu_contact.contact_add_form.details');
20+
$contactAddFormViewBuilder->addToolbarActions([
21+
new ToolbarAction('app.generate_name', ['allow_overwrite' => true]),
22+
]);
23+
}
24+
}
25+
26+
public static function getPriority(): int
27+
{
28+
return ContactAdmin::getPriority() - 1;
29+
}
30+
}

translations/admin.de.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@
99
"app.album_selection_label": "{count} {count, plural, =1 {Album} other {Alben}} ausgewählt",
1010
"app.select_albums": "Alben auswählen",
1111
"app.no_album_selected": "Kein Album ausgewählt",
12-
"app.select_album": "Album auswählen"
12+
"app.select_album": "Album auswählen",
13+
"app.generate_name": "Namen ausgeben"
1314
}

translations/admin.en.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@
99
"app.album_selection_label": "{count} {count, plural, =1 {album} other {albums}} selected",
1010
"app.select_albums": "Select albums",
1111
"app.no_album_selected": "No album selected",
12-
"app.select_album": "Select album"
12+
"app.select_album": "Select album",
13+
"app.generate_name": "Generate name"
1314
}

0 commit comments

Comments
 (0)