generator-folklore 3.0.6 → 3.0.7
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/generators/build/index.js +1 -1
- package/lib/generators/eslint/index.js +1 -1
- package/lib/generators/intl/index.js +1 -1
- package/lib/generators/laravel-mediatheque/index.js +18 -0
- package/lib/generators/laravel-mediatheque/instructions/ServiceProvider.php +26 -0
- package/lib/generators/laravel-panneau/index.js +45 -5
- package/lib/generators/laravel-panneau/instructions/ServiceProvider.php +21 -0
- package/lib/generators/laravel-panneau/instructions/config.php +13 -0
- package/lib/generators/laravel-panneau/templates/app/Contracts/Repositories/Pages.php +2 -2
- package/lib/generators/laravel-panneau/templates/app/Contracts/Resources/Blocks/Image.php +15 -0
- package/lib/generators/laravel-panneau/templates/app/Contracts/Resources/Blocks/Text.php +2 -0
- package/lib/generators/laravel-panneau/templates/app/Models/Block.php +1 -0
- package/lib/generators/laravel-panneau/templates/app/Panneau/Fields/.gitkeep +0 -0
- package/lib/generators/laravel-panneau/templates/app/Panneau/Http/Resources/BlocksCollection.php +2 -0
- package/lib/generators/laravel-panneau/templates/app/Panneau/Http/Resources/UsersCollection.php +10 -0
- package/lib/generators/laravel-panneau/templates/app/Panneau/PanneauServiceProvider.php +30 -4
- package/lib/generators/laravel-panneau/templates/app/Panneau/Resources/Blocks/ImageBlock.php +30 -0
- package/lib/generators/laravel-panneau/templates/app/Panneau/Resources/Blocks/TextBlock.php +3 -2
- package/lib/generators/laravel-panneau/templates/app/Panneau/Resources/Blocks.php +4 -1
- package/lib/generators/laravel-panneau/templates/app/Panneau/Resources/Pages/Page.php +2 -2
- package/lib/generators/laravel-panneau/templates/app/Panneau/Resources/Pages.php +2 -2
- package/lib/generators/laravel-panneau/templates/app/Repositories/Pages.php +2 -2
- package/lib/generators/laravel-panneau/templates/app/Resources/Blocks/ImageBlock.php +27 -0
- package/lib/generators/laravel-panneau/templates/app/Resources/Blocks/TextBlock.php +6 -1
- package/lib/generators/laravel-panneau/templates/config.php +29 -0
- package/lib/generators/laravel-panneau/templates/index.js +1 -1
- package/lib/generators/laravel-panneau/templates/lang/en/panneau.php +4 -0
- package/lib/generators/laravel-panneau/templates/lang/fr/panneau.php +4 -0
- package/lib/generators/laravel-panneau/templates/resources/assets/js/components/panneau/fields/PageSlug.jsx +68 -0
- package/lib/generators/laravel-project/index.js +27 -12
- package/lib/generators/laravel-project/templates/laravel/app/Contracts/Repositories/Users.php +17 -0
- package/lib/generators/laravel-project/templates/laravel/app/Models/User.php +0 -30
- package/lib/generators/laravel-project/templates/laravel/app/Providers/AppServiceProvider.php +90 -15
- package/lib/generators/laravel-project/templates/laravel/app/Repositories/Users.php +4 -3
- package/lib/generators/laravel-project/templates/laravel/config/app.php +2 -2
- package/lib/generators/laravel-project/templates/laravel/config/image.php +204 -0
- package/lib/generators/prettier/index.js +1 -1
- package/lib/generators/react-app/index.js +2 -2
- package/lib/generators/stylelint/index.js +1 -1
- package/package.json +5 -4
- package/lib/generators/laravel-panneau/templates/app/Panneau/Fields/Block.php +0 -22
- package/lib/generators/laravel-panneau/templates/app/Panneau/Fields/Blocks.php +0 -87
- package/lib/generators/laravel-panneau/templates/app/Panneau/Fields/Page.php +0 -51
- package/lib/generators/laravel-panneau/templates/app/Panneau/Fields/PageSlug.php +0 -34
- package/lib/generators/laravel-panneau/templates/app/Panneau/Fields/PageSlugLocalized.php +0 -18
- package/lib/generators/laravel-panneau/templates/app/Panneau/Resources/Blocks/BlockWithBlocks.php +0 -110
@@ -32,7 +32,7 @@ module.exports = class EslintGenerator extends _generator.default {
|
|
32
32
|
},
|
33
33
|
|
34
34
|
dependencies() {
|
35
|
-
this.addDevDependencies(['babel-preset-airbnb', '@babel/eslint-parser', 'eslint', 'eslint-config-airbnb', 'eslint-config-prettier', 'eslint-plugin-prettier', 'eslint-plugin-import', 'eslint-plugin-jsx-a11y', 'eslint-plugin-react', 'eslint-plugin-formatjs']);
|
35
|
+
this.addDevDependencies(['babel-preset-airbnb@^5.0.0', '@babel/eslint-parser@^7.0.0', 'eslint@^8.0.0', 'eslint-config-airbnb@^19.0.0', 'eslint-config-prettier@^8.0.0', 'eslint-plugin-prettier@^4.0.0', 'eslint-plugin-import@^2.0.0', 'eslint-plugin-jsx-a11y@^6.0.0', 'eslint-plugin-react@^7.0.0', 'eslint-plugin-formatjs@^4.0.0']);
|
36
36
|
}
|
37
37
|
|
38
38
|
};
|
@@ -130,4 +130,22 @@ module.exports = class LaravelMediathequeGenerator extends _generator.default {
|
|
130
130
|
};
|
131
131
|
}
|
132
132
|
|
133
|
+
end() {
|
134
|
+
if (this.options.quiet) {
|
135
|
+
return;
|
136
|
+
}
|
137
|
+
|
138
|
+
console.log('\n\n');
|
139
|
+
console.log(_chalk.default.yellow('\n----------------------'));
|
140
|
+
console.log(_chalk.default.bold('Instructions'));
|
141
|
+
console.log(_chalk.default.yellow('----------------------\n\n'));
|
142
|
+
console.log(`1. Add to ${_chalk.default.bold.yellow('app/Providers/AppServiceProvider.php')}:`);
|
143
|
+
const serviceProvider = fs.readFileSync(_path.default.join(__dirname, './instructions/ServiceProvider.php'));
|
144
|
+
console.log('---');
|
145
|
+
console.log(highlight(serviceProvider.toString('utf-8'), {
|
146
|
+
language: 'php',
|
147
|
+
ignoreIllegals: true
|
148
|
+
}));
|
149
|
+
}
|
150
|
+
|
133
151
|
};
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<?php
|
2
|
+
|
3
|
+
class AppServiceProvider extends ServiceProvider
|
4
|
+
{
|
5
|
+
//...
|
6
|
+
public function register()
|
7
|
+
{
|
8
|
+
// ...
|
9
|
+
|
10
|
+
$this->registerMediatheque();
|
11
|
+
}
|
12
|
+
|
13
|
+
protected function registerMediatheque()
|
14
|
+
{
|
15
|
+
$this->app->bind(
|
16
|
+
\Folklore\Mediatheque\Contracts\Models\Media::class,
|
17
|
+
\App\Models\Media::class
|
18
|
+
);
|
19
|
+
|
20
|
+
$this->app->bind(
|
21
|
+
\Folklore\Mediatheque\Contracts\Models\File::class,
|
22
|
+
\App\Models\MediaFile::class
|
23
|
+
);
|
24
|
+
}
|
25
|
+
//...
|
26
|
+
}
|
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
var _chalk = _interopRequireDefault(require("chalk"));
|
4
4
|
|
5
|
+
var _cliHighlight = require("cli-highlight");
|
6
|
+
|
7
|
+
var _fs = _interopRequireDefault(require("fs"));
|
8
|
+
|
5
9
|
var _glob = _interopRequireDefault(require("glob"));
|
6
10
|
|
7
11
|
var _lodash = _interopRequireDefault(require("lodash"));
|
@@ -65,7 +69,18 @@ module.exports = class LaravelPanneauGenerator extends _generator.default {
|
|
65
69
|
},
|
66
70
|
|
67
71
|
packageJSON() {
|
68
|
-
this.addDependencies(['@panneau/app@^1.0.
|
72
|
+
this.addDependencies(['@panneau/app@^1.0.3-alpha.1', '@panneau/core@^1.0.3-alpha.1', '@panneau/data@^1.0.3-alpha.1', '@panneau/field-text@^1.0.3-alpha.1', '@panneau/field-localized@^1.0.3-alpha.1']);
|
73
|
+
},
|
74
|
+
|
75
|
+
config() {
|
76
|
+
const source = this.templatePath('config.php');
|
77
|
+
const destination = this.destinationPath('config/panneau.php');
|
78
|
+
|
79
|
+
if (this.fs.exists(destination)) {
|
80
|
+
this.fs.delete(destination);
|
81
|
+
}
|
82
|
+
|
83
|
+
this.fs.copyTpl(source, destination, {});
|
69
84
|
},
|
70
85
|
|
71
86
|
routes() {
|
@@ -107,10 +122,6 @@ module.exports = class LaravelPanneauGenerator extends _generator.default {
|
|
107
122
|
this.fs.copyTpl(source, destination, {});
|
108
123
|
},
|
109
124
|
|
110
|
-
npmDependencies() {
|
111
|
-
this.addDependencies(['@panneau/app@^1.0.0-alpha.193', '@panneau/core@^1.0.0-alpha.193', '@panneau/data@^1.0.0-alpha.193', '@panneau/field-text@^1.0.0-alpha.193', '@panneau/field-localized@^1.0.0-alpha.193']);
|
112
|
-
},
|
113
|
-
|
114
125
|
files() {
|
115
126
|
const folders = ['app', 'resources', 'lang'];
|
116
127
|
folders.forEach(folder => {
|
@@ -169,4 +180,33 @@ module.exports = class LaravelPanneauGenerator extends _generator.default {
|
|
169
180
|
};
|
170
181
|
}
|
171
182
|
|
183
|
+
end() {
|
184
|
+
if (this.options.quiet) {
|
185
|
+
return;
|
186
|
+
}
|
187
|
+
|
188
|
+
console.log('\n\n');
|
189
|
+
console.log(_chalk.default.yellow('\n----------------------'));
|
190
|
+
console.log(_chalk.default.bold('Instructions'));
|
191
|
+
console.log(_chalk.default.yellow('----------------------\n\n'));
|
192
|
+
console.log(`1. Add to ${_chalk.default.bold.yellow('app/Providers/AppServiceProvider.php')}:`);
|
193
|
+
|
194
|
+
const serviceProvider = _fs.default.readFileSync(_path.default.join(__dirname, './instructions/ServiceProvider.php'));
|
195
|
+
|
196
|
+
console.log('---');
|
197
|
+
console.log((0, _cliHighlight.highlight)(serviceProvider.toString('utf-8'), {
|
198
|
+
language: 'php',
|
199
|
+
ignoreIllegals: true
|
200
|
+
}));
|
201
|
+
console.log(`\n2. Add to ${_chalk.default.bold.yellow('config/app.php')}:`);
|
202
|
+
|
203
|
+
const config = _fs.default.readFileSync(_path.default.join(__dirname, './instructions/config.php'));
|
204
|
+
|
205
|
+
console.log('---');
|
206
|
+
console.log((0, _cliHighlight.highlight)(config.toString('utf-8'), {
|
207
|
+
language: 'php',
|
208
|
+
ignoreIllegals: true
|
209
|
+
}));
|
210
|
+
}
|
211
|
+
|
172
212
|
};
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<?php
|
2
|
+
|
3
|
+
class AppServiceProvider extends ServiceProvider
|
4
|
+
{
|
5
|
+
//...
|
6
|
+
protected function registerRepositories()
|
7
|
+
{
|
8
|
+
//...
|
9
|
+
|
10
|
+
$this->app->bind(
|
11
|
+
\Folklore\Contracts\Repositories\Pages::class,
|
12
|
+
\App\Repositories\Pages::class
|
13
|
+
);
|
14
|
+
|
15
|
+
$this->app->bind(
|
16
|
+
\App\Contracts\Repositories\Pages::class,
|
17
|
+
\App\Repositories\Pages::class
|
18
|
+
);
|
19
|
+
}
|
20
|
+
//...
|
21
|
+
}
|
@@ -13,7 +13,7 @@ interface Pages extends BasePages
|
|
13
13
|
|
14
14
|
public function findBySlug(string $slug, string $locale = null): ?PageResource;
|
15
15
|
|
16
|
-
public function create(
|
16
|
+
public function create($data): PageResource;
|
17
17
|
|
18
|
-
public function update(string $id,
|
18
|
+
public function update(string $id, $data): ?PageResource;
|
19
19
|
}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<?php
|
2
|
+
|
3
|
+
namespace App\Contracts\Resources\Blocks;
|
4
|
+
|
5
|
+
use App\Contracts\Resources\Block as BaseBlock;
|
6
|
+
use Folklore\Contracts\Resources\Image as ImageContract;
|
7
|
+
|
8
|
+
interface Image extends BaseBlock
|
9
|
+
{
|
10
|
+
public function image(): ?ImageContract;
|
11
|
+
|
12
|
+
public function caption(string $locale): ?string;
|
13
|
+
|
14
|
+
public function credits(string $locale): ?string;
|
15
|
+
}
|
File without changes
|
@@ -5,7 +5,9 @@ namespace App\Panneau;
|
|
5
5
|
use Illuminate\Support\ServiceProvider as BaseServiceProvider;
|
6
6
|
use Illuminate\Contracts\View\Factory as ViewFactory;
|
7
7
|
use Illuminate\Support\Facades\Gate;
|
8
|
+
use Panneau\Fields\Upload as UploadField;
|
8
9
|
use Panneau\Support\LocalizedField;
|
10
|
+
use Folklore\Panneau\Fields\PageSlug as PageSlugField;
|
9
11
|
use Panneau\Support\Facade as Panneau;
|
10
12
|
|
11
13
|
class PanneauServiceProvider extends BaseServiceProvider
|
@@ -27,13 +29,35 @@ class PanneauServiceProvider extends BaseServiceProvider
|
|
27
29
|
*/
|
28
30
|
public function boot()
|
29
31
|
{
|
30
|
-
|
31
|
-
return config('locale.locales');
|
32
|
-
});
|
33
|
-
|
32
|
+
$this->bootFields();
|
34
33
|
$this->bootViews();
|
35
34
|
}
|
36
35
|
|
36
|
+
protected function bootFields()
|
37
|
+
{
|
38
|
+
$this->app->booted(function () {
|
39
|
+
LocalizedField::setLocalesResolver(function () {
|
40
|
+
return config('locale.locales');
|
41
|
+
});
|
42
|
+
|
43
|
+
UploadField::setEndpoint(route('panneau.upload'));
|
44
|
+
|
45
|
+
PageSlugField::setRoutesResolver(function ($locale) {
|
46
|
+
return [
|
47
|
+
'page' => url()->routeForReactRouter($locale . '.page', [
|
48
|
+
'withoutPatterns' => config('panneau.routes.without_patterns', true),
|
49
|
+
]),
|
50
|
+
'page_with_parent' => url()->routeForReactRouter(
|
51
|
+
$locale . '.page_with_parent',
|
52
|
+
[
|
53
|
+
'withoutPatterns' => config('panneau.routes.without_patterns', true),
|
54
|
+
]
|
55
|
+
),
|
56
|
+
];
|
57
|
+
});
|
58
|
+
});
|
59
|
+
}
|
60
|
+
|
37
61
|
protected function bootViews()
|
38
62
|
{
|
39
63
|
$view = $this->app[ViewFactory::class];
|
@@ -42,6 +66,8 @@ class PanneauServiceProvider extends BaseServiceProvider
|
|
42
66
|
$view->composer('panneau::app', \App\Panneau\Composers\AppComposer::class);
|
43
67
|
|
44
68
|
Panneau::serving(function () use ($view) {
|
69
|
+
$view->composer('errors::*', \Panneau\Composers\PanneauComposer::class);
|
70
|
+
$view->composer('errors::*', \Panneau\Composers\AppComposer::class);
|
45
71
|
$view->composer('errors::*', \App\Panneau\Composers\AppComposer::class);
|
46
72
|
});
|
47
73
|
}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<?php
|
2
|
+
|
3
|
+
namespace App\Panneau\Resources\Blocks;
|
4
|
+
|
5
|
+
use Panneau\Support\ResourceType;
|
6
|
+
use Panneau\Fields\Image;
|
7
|
+
use Panneau\Fields\HtmlLocalized;
|
8
|
+
use Panneau\Fields\TextLocalized;
|
9
|
+
|
10
|
+
class ImageBlock extends ResourceType
|
11
|
+
{
|
12
|
+
public function id(): string
|
13
|
+
{
|
14
|
+
return 'image';
|
15
|
+
}
|
16
|
+
|
17
|
+
public function name(): string
|
18
|
+
{
|
19
|
+
return trans('panneau.blocks_image');
|
20
|
+
}
|
21
|
+
|
22
|
+
public function fields(): array
|
23
|
+
{
|
24
|
+
return [
|
25
|
+
Image::make('image')->withTransLabel('panneau.fields.image'),
|
26
|
+
HtmlLocalized::make('caption')->withTransLabel('panneau.fields.caption'),
|
27
|
+
TextLocalized::make('credits')->withTransLabel('panneau.fields.credits'),
|
28
|
+
];
|
29
|
+
}
|
30
|
+
}
|
@@ -3,6 +3,7 @@
|
|
3
3
|
namespace App\Panneau\Resources\Blocks;
|
4
4
|
|
5
5
|
use Panneau\Support\ResourceType;
|
6
|
+
use Panneau\Fields\TextLocalized;
|
6
7
|
use Panneau\Fields\HtmlLocalized;
|
7
8
|
|
8
9
|
class TextBlock extends ResourceType
|
@@ -20,8 +21,8 @@ class TextBlock extends ResourceType
|
|
20
21
|
public function fields(): array
|
21
22
|
{
|
22
23
|
return [
|
23
|
-
|
24
|
-
|
24
|
+
TextLocalized::make('title')->withTransLabel('panneau.fields.title'),
|
25
|
+
HtmlLocalized::make('body')->withTransLabel('panneau.fields.body'),
|
25
26
|
];
|
26
27
|
}
|
27
28
|
}
|
@@ -16,7 +16,10 @@ class Blocks extends Resource
|
|
16
16
|
'hideInNavbar' => true,
|
17
17
|
];
|
18
18
|
|
19
|
-
public static $types = [
|
19
|
+
public static $types = [
|
20
|
+
\App\Panneau\Resources\Blocks\TextBlock::class,
|
21
|
+
\App\Panneau\Resources\Blocks\ImageBlock::class,
|
22
|
+
];
|
20
23
|
|
21
24
|
public function name(): string
|
22
25
|
{
|
@@ -3,8 +3,8 @@
|
|
3
3
|
namespace App\Panneau\Resources\Pages;
|
4
4
|
|
5
5
|
use Panneau\Support\ResourceType;
|
6
|
-
use
|
7
|
-
use
|
6
|
+
use Folklore\Panneau\Fields\Blocks;
|
7
|
+
use Folklore\Panneau\Fields\Page as PageField;
|
8
8
|
|
9
9
|
class Page extends ResourceType
|
10
10
|
{
|
@@ -1,9 +1,9 @@
|
|
1
1
|
<?php
|
2
2
|
namespace App\Panneau\Resources;
|
3
3
|
|
4
|
-
use
|
5
|
-
use App\Panneau\Fields\PageSlugLocalized;
|
4
|
+
use Folklore\Panneau\Fields\PageSlugLocalized;
|
6
5
|
use Panneau\Fields\TextLocalized;
|
6
|
+
use Panneau\Fields\ImageLocalized;
|
7
7
|
use Panneau\Fields\Toggle;
|
8
8
|
use Panneau\Support\Resource;
|
9
9
|
|
@@ -30,12 +30,12 @@ class Pages extends BasePages implements PagesContract
|
|
30
30
|
return parent::findBySlug($slug, $locale);
|
31
31
|
}
|
32
32
|
|
33
|
-
public function create(
|
33
|
+
public function create($data): PageContract
|
34
34
|
{
|
35
35
|
return parent::create($data);
|
36
36
|
}
|
37
37
|
|
38
|
-
public function update(string $id,
|
38
|
+
public function update(string $id, $data): ?PageContract
|
39
39
|
{
|
40
40
|
return parent::update($id, $data);
|
41
41
|
}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<?php
|
2
|
+
|
3
|
+
namespace App\Resources\Blocks;
|
4
|
+
|
5
|
+
use Folklore\Resources\Block;
|
6
|
+
use App\Contracts\Resources\Blocks\Text as TextBlockContract;
|
7
|
+
use Folklore\Contracts\Resources\Image as ImageContract;
|
8
|
+
use Folklore\Resources\Image;
|
9
|
+
|
10
|
+
class ImageBlock extends Block implements TextBlockContract
|
11
|
+
{
|
12
|
+
public function image(): ?ImageContract
|
13
|
+
{
|
14
|
+
$image = data_get($this->data, 'image');
|
15
|
+
return isset($image) ? new Image($image) : null;
|
16
|
+
}
|
17
|
+
|
18
|
+
public function caption(string $locale): ?string
|
19
|
+
{
|
20
|
+
return data_get($this->data, 'caption.' . $locale);
|
21
|
+
}
|
22
|
+
|
23
|
+
public function credits(string $locale): ?string
|
24
|
+
{
|
25
|
+
return data_get($this->data, 'credits.' . $locale);
|
26
|
+
}
|
27
|
+
}
|
@@ -1,12 +1,17 @@
|
|
1
1
|
<?php
|
2
2
|
|
3
|
-
namespace App\Resources\
|
3
|
+
namespace App\Resources\Blocks;
|
4
4
|
|
5
5
|
use Folklore\Resources\Block;
|
6
6
|
use App\Contracts\Resources\Blocks\Text as TextBlockContract;
|
7
7
|
|
8
8
|
class TextBlock extends Block implements TextBlockContract
|
9
9
|
{
|
10
|
+
public function title(string $locale): ?string
|
11
|
+
{
|
12
|
+
return data_get($this->data, 'title.' . $locale);
|
13
|
+
}
|
14
|
+
|
10
15
|
public function body(string $locale): ?string
|
11
16
|
{
|
12
17
|
return data_get($this->data, 'body.' . $locale);
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<?php
|
2
|
+
|
3
|
+
return [
|
4
|
+
'intl' => [
|
5
|
+
'locale' => 'fr',
|
6
|
+
'locales' => ['fr', 'en'],
|
7
|
+
'translations' => ['panneau::resources', 'panneau'],
|
8
|
+
],
|
9
|
+
|
10
|
+
'resources' => [
|
11
|
+
\App\Panneau\Resources\Blocks::class,
|
12
|
+
\App\Panneau\Resources\Pages::class,
|
13
|
+
\App\Panneau\Resources\Users::class,
|
14
|
+
],
|
15
|
+
|
16
|
+
'routes' => [
|
17
|
+
// Path to the routes file that will be automatically loaded. Set to null
|
18
|
+
// to prevent auto-loading of routes.
|
19
|
+
'map' => base_path('routes/panneau.php'),
|
20
|
+
|
21
|
+
'prefix' => 'panneau',
|
22
|
+
|
23
|
+
'middleware' => [\Panneau\Http\Middleware\DispatchHandlingRequestEvent::class],
|
24
|
+
|
25
|
+
'custom' => [],
|
26
|
+
|
27
|
+
'without_patterns' => true,
|
28
|
+
],
|
29
|
+
];
|
@@ -17,7 +17,7 @@ function renderApp(Container, props) {
|
|
17
17
|
|
18
18
|
function loadContainer({ isPanneau = false }) {
|
19
19
|
return isPanneau
|
20
|
-
? import('./components/Panneau')
|
20
|
+
? import('./components/Panneau').then(({ default: Container }) => Container)
|
21
21
|
: import('./components/Container').then(({ default: Container }) => Container);
|
22
22
|
}
|
23
23
|
|
@@ -6,6 +6,8 @@ return [
|
|
6
6
|
'url' => 'Address',
|
7
7
|
'published' => 'Published',
|
8
8
|
'description_short' => 'Short description',
|
9
|
+
'caption' => 'Caption',
|
10
|
+
'credits' => 'Credits',
|
9
11
|
'name' => 'Name',
|
10
12
|
'email' => 'Email',
|
11
13
|
'password' => 'Password',
|
@@ -13,6 +15,7 @@ return [
|
|
13
15
|
'body' => 'Text',
|
14
16
|
'parent' => 'Parent',
|
15
17
|
'blocks' => 'Blocks',
|
18
|
+
'role' => 'Role',
|
16
19
|
|
17
20
|
'page' => 'Page',
|
18
21
|
'pages' => 'Pages',
|
@@ -30,6 +33,7 @@ return [
|
|
30
33
|
'blocks' => 'Blocks',
|
31
34
|
'no_blocks' => 'No blocks',
|
32
35
|
'add_block' => 'Add a block',
|
36
|
+
'select_block' => 'Select a block...',
|
33
37
|
],
|
34
38
|
|
35
39
|
'filters' => [
|
@@ -6,6 +6,8 @@ return [
|
|
6
6
|
'url' => 'Adresse',
|
7
7
|
'published' => 'Publié',
|
8
8
|
'description_short' => 'Description courte',
|
9
|
+
'caption' => 'Libellé',
|
10
|
+
'credits' => 'Crédits',
|
9
11
|
'name' => 'Nom',
|
10
12
|
'email' => 'Courriel',
|
11
13
|
'password' => 'Mot de passe',
|
@@ -13,6 +15,7 @@ return [
|
|
13
15
|
'body' => 'Texte',
|
14
16
|
'parent' => 'Parent',
|
15
17
|
'blocks' => 'Blocs',
|
18
|
+
'role' => 'Rôle',
|
16
19
|
|
17
20
|
'page' => 'Page',
|
18
21
|
'pages' => 'Pages',
|
@@ -30,6 +33,7 @@ return [
|
|
30
33
|
'blocks' => 'Blocs',
|
31
34
|
'no_blocks' => 'Aucun bloc',
|
32
35
|
'add_block' => 'Ajouter un bloc',
|
36
|
+
'select_block' => 'Sélectionner un bloc...',
|
33
37
|
],
|
34
38
|
|
35
39
|
'filters' => [
|
@@ -0,0 +1,68 @@
|
|
1
|
+
/* eslint-disable react/jsx-props-no-spreading */
|
2
|
+
import { useFormValue } from '@panneau/core/contexts';
|
3
|
+
import TextField from '@panneau/field-text';
|
4
|
+
import classNames from 'classnames';
|
5
|
+
import PropTypes from 'prop-types';
|
6
|
+
import React from 'react';
|
7
|
+
import { generatePath } from 'react-router';
|
8
|
+
|
9
|
+
const propTypes = {
|
10
|
+
fieldLocale: PropTypes.string,
|
11
|
+
value: PropTypes.string,
|
12
|
+
className: PropTypes.string,
|
13
|
+
routes: PropTypes.objectOf(PropTypes.string).isRequired,
|
14
|
+
};
|
15
|
+
|
16
|
+
const defaultProps = {
|
17
|
+
fieldLocale: null,
|
18
|
+
value: null,
|
19
|
+
className: null,
|
20
|
+
};
|
21
|
+
|
22
|
+
const PageSlugField = ({ routes, fieldLocale, className, value, ...props }) => {
|
23
|
+
const page = useFormValue();
|
24
|
+
const { parent = null, handle = null } = page || {};
|
25
|
+
const { slug: parentSlug } = parent || {};
|
26
|
+
const { page: pageRoute = null, page_with_parent: pageWithParentRoute = null } = routes || {};
|
27
|
+
let url =
|
28
|
+
pageRoute !== null
|
29
|
+
? generatePath(pageRoute, {
|
30
|
+
page: 'REPLACE',
|
31
|
+
})
|
32
|
+
: null;
|
33
|
+
if (parent !== null && pageWithParentRoute !== null) {
|
34
|
+
url = generatePath(pageWithParentRoute, {
|
35
|
+
parent: parentSlug !== null ? parentSlug[fieldLocale] || null : null,
|
36
|
+
page: 'REPLACE',
|
37
|
+
});
|
38
|
+
}
|
39
|
+
if (handle === 'home') {
|
40
|
+
url = `/${fieldLocale}`;
|
41
|
+
}
|
42
|
+
|
43
|
+
return (
|
44
|
+
<TextField
|
45
|
+
prepend={
|
46
|
+
url !== null
|
47
|
+
? `${window.location.protocol}//${window.location.host}${url.replace(
|
48
|
+
'REPLACE',
|
49
|
+
'',
|
50
|
+
)}`
|
51
|
+
: null
|
52
|
+
}
|
53
|
+
className={classNames([
|
54
|
+
'flex-nowrap',
|
55
|
+
{
|
56
|
+
[className]: className !== null,
|
57
|
+
},
|
58
|
+
])}
|
59
|
+
value={handle === 'home' ? null : value}
|
60
|
+
{...props}
|
61
|
+
/>
|
62
|
+
);
|
63
|
+
};
|
64
|
+
|
65
|
+
PageSlugField.propTypes = propTypes;
|
66
|
+
PageSlugField.defaultProps = defaultProps;
|
67
|
+
|
68
|
+
export default PageSlugField;
|