generator-folklore 3.0.6 → 3.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/lib/generators/build/index.js +1 -1
  2. package/lib/generators/eslint/index.js +1 -1
  3. package/lib/generators/intl/index.js +1 -1
  4. package/lib/generators/laravel-mediatheque/index.js +18 -0
  5. package/lib/generators/laravel-mediatheque/instructions/ServiceProvider.php +26 -0
  6. package/lib/generators/laravel-panneau/index.js +45 -5
  7. package/lib/generators/laravel-panneau/instructions/ServiceProvider.php +21 -0
  8. package/lib/generators/laravel-panneau/instructions/config.php +13 -0
  9. package/lib/generators/laravel-panneau/templates/app/Contracts/Repositories/Pages.php +2 -2
  10. package/lib/generators/laravel-panneau/templates/app/Contracts/Resources/Blocks/Image.php +15 -0
  11. package/lib/generators/laravel-panneau/templates/app/Contracts/Resources/Blocks/Text.php +2 -0
  12. package/lib/generators/laravel-panneau/templates/app/Models/Block.php +1 -0
  13. package/lib/generators/laravel-panneau/templates/app/Panneau/Fields/.gitkeep +0 -0
  14. package/lib/generators/laravel-panneau/templates/app/Panneau/Http/Resources/BlocksCollection.php +2 -0
  15. package/lib/generators/laravel-panneau/templates/app/Panneau/Http/Resources/UsersCollection.php +10 -0
  16. package/lib/generators/laravel-panneau/templates/app/Panneau/PanneauServiceProvider.php +30 -4
  17. package/lib/generators/laravel-panneau/templates/app/Panneau/Resources/Blocks/ImageBlock.php +30 -0
  18. package/lib/generators/laravel-panneau/templates/app/Panneau/Resources/Blocks/TextBlock.php +3 -2
  19. package/lib/generators/laravel-panneau/templates/app/Panneau/Resources/Blocks.php +4 -1
  20. package/lib/generators/laravel-panneau/templates/app/Panneau/Resources/Pages/Page.php +2 -2
  21. package/lib/generators/laravel-panneau/templates/app/Panneau/Resources/Pages.php +2 -2
  22. package/lib/generators/laravel-panneau/templates/app/Repositories/Pages.php +2 -2
  23. package/lib/generators/laravel-panneau/templates/app/Resources/Blocks/ImageBlock.php +27 -0
  24. package/lib/generators/laravel-panneau/templates/app/Resources/Blocks/TextBlock.php +6 -1
  25. package/lib/generators/laravel-panneau/templates/config.php +29 -0
  26. package/lib/generators/laravel-panneau/templates/index.js +1 -1
  27. package/lib/generators/laravel-panneau/templates/lang/en/panneau.php +4 -0
  28. package/lib/generators/laravel-panneau/templates/lang/fr/panneau.php +4 -0
  29. package/lib/generators/laravel-panneau/templates/resources/assets/js/components/panneau/fields/PageSlug.jsx +68 -0
  30. package/lib/generators/laravel-project/index.js +27 -12
  31. package/lib/generators/laravel-project/templates/laravel/app/Contracts/Repositories/Users.php +17 -0
  32. package/lib/generators/laravel-project/templates/laravel/app/Models/User.php +0 -30
  33. package/lib/generators/laravel-project/templates/laravel/app/Providers/AppServiceProvider.php +90 -15
  34. package/lib/generators/laravel-project/templates/laravel/app/Repositories/Users.php +4 -3
  35. package/lib/generators/laravel-project/templates/laravel/config/app.php +2 -2
  36. package/lib/generators/laravel-project/templates/laravel/config/image.php +204 -0
  37. package/lib/generators/prettier/index.js +1 -1
  38. package/lib/generators/react-app/index.js +2 -2
  39. package/lib/generators/stylelint/index.js +1 -1
  40. package/package.json +5 -4
  41. package/lib/generators/laravel-panneau/templates/app/Panneau/Fields/Block.php +0 -22
  42. package/lib/generators/laravel-panneau/templates/app/Panneau/Fields/Blocks.php +0 -87
  43. package/lib/generators/laravel-panneau/templates/app/Panneau/Fields/Page.php +0 -51
  44. package/lib/generators/laravel-panneau/templates/app/Panneau/Fields/PageSlug.php +0 -34
  45. package/lib/generators/laravel-panneau/templates/app/Panneau/Fields/PageSlugLocalized.php +0 -18
  46. package/lib/generators/laravel-panneau/templates/app/Panneau/Resources/Blocks/BlockWithBlocks.php +0 -110
@@ -289,19 +289,18 @@ module.exports = class LaravelProjectGenerator extends _generator.default {
289
289
  if (this.options.mediatheque) {
290
290
  this.composeWith('folklore:laravel-mediatheque', {
291
291
  'project-name': this.options['project-name'],
292
- 'skip-install': true
292
+ 'skip-install': true,
293
+ quiet: true
293
294
  });
294
- } // if (this.options.panneau) {
295
- // this.composeWith('folklore:laravel-panneau', {
296
- // 'project-name': this.options['project-name'],
297
- // 'js-path': jsSrcPath,
298
- // 'styles-path': stylesSrcPath,
299
- // 'skip-install': skipInstall,
300
- // 'install-npm': true,
301
- // quiet: true,
302
- // });
303
- // }
304
- // if (this.options.auth) {
295
+ }
296
+
297
+ if (this.options.panneau) {
298
+ this.composeWith('folklore:laravel-panneau', {
299
+ 'project-name': this.options['project-name'],
300
+ 'skip-install': skipInstall,
301
+ quiet: true
302
+ });
303
+ } // if (this.options.auth) {
305
304
  // this.composeWith('folklore:laravel-auth', {
306
305
  // 'project-name': this.options['project-name'],
307
306
  // 'js-path': jsSrcPath,
@@ -368,6 +367,14 @@ module.exports = class LaravelProjectGenerator extends _generator.default {
368
367
  'folklore/laravel-folklore': 'v1.x-dev',
369
368
  'folklore/laravel-locale': 'v8.x-dev',
370
369
  'folklore/laravel-image': 'v1.x-dev'
370
+ },
371
+ 'require-dev': {
372
+ 'laravel/telescope': '^4.0.0'
373
+ },
374
+ extra: {
375
+ laravel: {
376
+ 'dont-discover': ['laravel/telescope']
377
+ }
371
378
  }
372
379
  });
373
380
  },
@@ -490,6 +497,14 @@ module.exports = class LaravelProjectGenerator extends _generator.default {
490
497
  await this.spawnCommand('php', ['artisan', 'vendor:publish', '--provider=Folklore\\Image\\ServiceProvider']);
491
498
  },
492
499
 
500
+ async telescope() {
501
+ if (this.options['skip-install']) {
502
+ return;
503
+ }
504
+
505
+ await this.spawnCommand('php', ['artisan', 'telescope:install']);
506
+ },
507
+
493
508
  async valet() {
494
509
  if (this.options['skip-install']) {
495
510
  return;
@@ -0,0 +1,17 @@
1
+ <?php
2
+
3
+ namespace App\Contracts\Repositories;
4
+
5
+ use Folklore\Contracts\Repositories\Users as BaseUsers;
6
+ use App\Contracts\Resources\User as UserResource;
7
+
8
+ interface Users extends BaseUsers
9
+ {
10
+ public function findById(string $id): ?UserResource;
11
+
12
+ public function findByEmail(string $email): ?UserResource;
13
+
14
+ public function create($data): UserResource;
15
+
16
+ public function update(string $id, $data): ?UserResource;
17
+ }
@@ -13,36 +13,6 @@ class User extends BaseUser
13
13
  {
14
14
  use HasApiTokens, HasFactory;
15
15
 
16
- /**
17
- * The attributes that are mass assignable.
18
- *
19
- * @var array<int, string>
20
- */
21
- protected $fillable = [
22
- 'name',
23
- 'email',
24
- 'password',
25
- ];
26
-
27
- /**
28
- * The attributes that should be hidden for serialization.
29
- *
30
- * @var array<int, string>
31
- */
32
- protected $hidden = [
33
- 'password',
34
- 'remember_token',
35
- ];
36
-
37
- /**
38
- * The attributes that should be cast.
39
- *
40
- * @var array<string, string>
41
- */
42
- protected $casts = [
43
- 'email_verified_at' => 'datetime',
44
- ];
45
-
46
16
  public function toResource(): UserContract
47
17
  {
48
18
  return new UserResource($this);
@@ -6,9 +6,66 @@ use Illuminate\Support\ServiceProvider;
6
6
  use Illuminate\Support\Facades\Schema;
7
7
  use Illuminate\Http\Resources\Json\JsonResource;
8
8
  use Illuminate\Http\Request;
9
+ use Illuminate\Support\Arr;
9
10
 
10
11
  class AppServiceProvider extends ServiceProvider
11
12
  {
13
+ /**
14
+ * Register any application services.
15
+ *
16
+ * @return void
17
+ */
18
+ public function register()
19
+ {
20
+ $this->registerRepositories();<% if (options.mediatheque) { %>
21
+ $this->registerMediatheque();<% } %>
22
+ $this->registerTelescope();
23
+ }
24
+
25
+ protected function registerRepositories()
26
+ {
27
+ $this->app->bind(
28
+ \Folklore\Contracts\Repositories\Users::class,
29
+ \App\Repositories\Users::class
30
+ );
31
+
32
+ $this->app->bind(
33
+ \App\Contracts\Repositories\Users::class,
34
+ \App\Repositories\Users::class
35
+ );<% if (options.panneau) { %>
36
+
37
+ $this->app->bind(
38
+ \Folklore\Contracts\Repositories\Pages::class,
39
+ \App\Repositories\Pages::class
40
+ );
41
+
42
+ $this->app->bind(
43
+ \App\Contracts\Repositories\Pages::class,
44
+ \App\Repositories\Pages::class
45
+ );<% } %>
46
+ }<% if (options.mediatheque) { %>
47
+
48
+ protected function registerMediatheque()
49
+ {
50
+ $this->app->bind(
51
+ \Folklore\Mediatheque\Contracts\Models\Media::class,
52
+ \App\Models\Media::class
53
+ );
54
+
55
+ $this->app->bind(
56
+ \Folklore\Mediatheque\Contracts\Models\File::class,
57
+ \App\Models\MediaFile::class
58
+ );
59
+ }<% } %>
60
+
61
+ protected function registerTelescope()
62
+ {
63
+ if ($this->app->environment('local')) {
64
+ $this->app->register(\Laravel\Telescope\TelescopeServiceProvider::class);
65
+ $this->app->register(TelescopeServiceProvider::class);
66
+ }
67
+ }
68
+
12
69
  /**
13
70
  * Bootstrap any application services.
14
71
  *
@@ -16,30 +73,48 @@ class AppServiceProvider extends ServiceProvider
16
73
  */
17
74
  public function boot()
18
75
  {
76
+ // Some defaults
19
77
  Schema::defaultStringLength(191);
20
78
  JsonResource::withoutWrapping();
21
79
 
80
+ $this->bootRequest();
81
+
82
+ $this->bootImage();
83
+ }
84
+
85
+ protected function bootRequest()
86
+ {
22
87
  // Determine site from request
23
88
  Request::macro('site', function () {
24
89
  return null;
25
90
  });
26
91
  }
27
92
 
28
- /**
29
- * Register any application services.
30
- *
31
- * @return void
32
- */
33
- public function register()
34
- {
35
- $this->registerRepositories();
36
- }
37
-
38
- protected function registerRepositories()
93
+ protected function bootImage()
39
94
  {
40
- $this->app->bind(
41
- \Folklore\Contracts\Repositories\Users::class,
42
- \App\Repositories\Users::class
43
- );
95
+ foreach (config('image.sizes') as $filter) {
96
+ $id = $filter['id'];
97
+ $data = Arr::except($filter, ['id']);
98
+ if (sizeof($data) === 0) {
99
+ continue;
100
+ }
101
+ $newFilter = [];
102
+ if (isset($filter['maxWidth'])) {
103
+ $newFilter['width'] = $filter['maxWidth'];
104
+ }
105
+ if (isset($filter['maxHeight'])) {
106
+ $newFilter['height'] = $filter['maxHeight'];
107
+ }
108
+ if (isset($filter['width'])) {
109
+ $newFilter['width'] = $filter['width'];
110
+ }
111
+ if (isset($filter['height'])) {
112
+ $newFilter['height'] = $filter['height'];
113
+ }
114
+ if (isset($filter['width']) && isset($filter['height'])) {
115
+ $newFilter['crop'] = true;
116
+ }
117
+ $this->app['image']->filter($id, $newFilter);
118
+ }
44
119
  }
45
120
  }
@@ -3,11 +3,12 @@
3
3
  namespace App\Repositories;
4
4
 
5
5
  use Folklore\Repositories\Users as BaseUsers;
6
+ use App\Contracts\Repositories\Users as UsersContract;
6
7
  use Illuminate\Database\Eloquent\Model;
7
8
  use App\Models\User as UserModel;
8
9
  use App\Contracts\Resources\User as UserContract;
9
10
 
10
- class Users extends BaseUsers
11
+ class Users extends BaseUsers implements UsersContract
11
12
  {
12
13
  protected function newModel(): Model
13
14
  {
@@ -24,12 +25,12 @@ class Users extends BaseUsers
24
25
  return parent::findByEmail($email);
25
26
  }
26
27
 
27
- public function create(array $data): UserContract
28
+ public function create($data): UserContract
28
29
  {
29
30
  return parent::create($data);
30
31
  }
31
32
 
32
- public function update(string $id, array $data): ?UserContract
33
+ public function update(string $id, $data): ?UserContract
33
34
  {
34
35
  return parent::update($id, $data);
35
36
  }
@@ -194,8 +194,8 @@ return [
194
194
  // App\Providers\BroadcastServiceProvider::class,
195
195
  App\Providers\EventServiceProvider::class,
196
196
  App\Providers\RouteServiceProvider::class,
197
- App\Providers\ViewServiceProvider::class,
198
-
197
+ App\Providers\ViewServiceProvider::class,<% if (options.panneau) { %>
198
+ App\Panneau\PanneauServiceProvider::class,<% } %>
199
199
  ],
200
200
 
201
201
  /*
@@ -0,0 +1,204 @@
1
+ <?php
2
+
3
+ return [
4
+
5
+ /*
6
+ |--------------------------------------------------------------------------
7
+ | Image sizes
8
+ |--------------------------------------------------------------------------
9
+ */
10
+ 'sizes' => [
11
+ [
12
+ 'id' => 'original',
13
+ ],
14
+ [
15
+ 'id' => 'thumbnail',
16
+ 'width' => 200,
17
+ 'height' => 200,
18
+ ],
19
+ [
20
+ 'id' => 'small',
21
+ 'maxWidth' => 500,
22
+ 'maxHeight' => 500,
23
+ ],
24
+ [
25
+ 'id' => 'medium',
26
+ 'maxWidth' => 800,
27
+ 'maxHeight' => 800,
28
+ ],
29
+ [
30
+ 'id' => 'large',
31
+ 'maxWidth' => 1600,
32
+ 'maxHeight' => 1600,
33
+ ],
34
+ ],
35
+
36
+ /*
37
+ |--------------------------------------------------------------------------
38
+ | Image Filters
39
+ |--------------------------------------------------------------------------
40
+ |
41
+ | The list of filters you can use when making an image or generating an url.
42
+ | There is some built-in filters, and you can add or replace any. It is also
43
+ | possible to declare a filter with an array or a closure instead of a Filter
44
+ | Class.
45
+ |
46
+ */
47
+ 'filters' => [
48
+ 'blur' => \Folklore\Image\Filters\Blur::class,
49
+ 'colorize' => \Folklore\Image\Filters\Colorize::class,
50
+ 'gamma' => \Folklore\Image\Filters\Gamma::class,
51
+ 'grayscale' => \Folklore\Image\Filters\Grayscale::class,
52
+ 'interlace' => \Folklore\Image\Filters\Interlace::class,
53
+ 'negative' => \Folklore\Image\Filters\Negative::class,
54
+ 'rotate' => \Folklore\Image\Filters\Rotate::class,
55
+ 'resize' => \Folklore\Image\Filters\Resize::class
56
+ ],
57
+
58
+ /*
59
+ |--------------------------------------------------------------------------
60
+ | Default Source
61
+ |--------------------------------------------------------------------------
62
+ |
63
+ | This option define the default source to be used by the Image facade. The
64
+ | source determine where the image files are read and saved.
65
+ |
66
+ */
67
+ 'source' => 'public',
68
+
69
+ /*
70
+ |--------------------------------------------------------------------------
71
+ | Sources
72
+ |--------------------------------------------------------------------------
73
+ |
74
+ | The list of sources where you store images.
75
+ |
76
+ | Supported driver: "local", "filesystem"
77
+ |
78
+ */
79
+ 'sources' => [
80
+
81
+ 'public' => [
82
+ // The local driver use a local path on the machine.
83
+ 'driver' => 'local',
84
+
85
+ // The path where the images are stored.
86
+ 'path' => public_path()
87
+ ],
88
+
89
+ 'cloud' => [
90
+ // The filesystem driver lets you use the filesystem from laravel.
91
+ 'driver' => 'filesystem',
92
+
93
+ // The filesystem disk where the images are stored.
94
+ 'disk' => 'public',
95
+
96
+ // The path on the disk where the images are stored. If set to null,
97
+ // it will start from the root.
98
+ 'path' => null,
99
+
100
+ // Cache the file on local machine. It can be useful for remote files.
101
+ 'cache' => true,
102
+
103
+ // The path where you want to put cached files
104
+ 'cache_path' => storage_path('image/cache')
105
+ ]
106
+
107
+ ],
108
+
109
+ /*
110
+ |--------------------------------------------------------------------------
111
+ | URL Generator
112
+ |--------------------------------------------------------------------------
113
+ |
114
+ | The URL Generator configuration is used when generating an image url
115
+ | and by the router to generate a pattern for catching image requests.
116
+ | These are the defaults values and you can overide it in each routes or
117
+ | when generating an url using the `pattern` parameter.
118
+ |
119
+ */
120
+ 'url' => [
121
+ // The format of the url that will be generated. The `{filters}` placeholder
122
+ // will be replaced by the filters according to the `filters_format`.
123
+ 'format' => '{dirname}/{basename}{filters}.{extension}',
124
+
125
+ // The format of the filters that will replace `{filters}` in the
126
+ // url `format` above. The `{filter}` placeholder will be replaced by
127
+ // each filter according to the `filter_format` and joined
128
+ // by the `filter_separator`.
129
+ 'filters_format' => '-filters({filter})',
130
+
131
+ // The format of a filter.
132
+ 'filter_format' => '{key}({value})',
133
+
134
+ // The separator for each filter
135
+ 'filter_separator' => '-',
136
+
137
+ // This is the regex that will replace any placeholders in the option 'format'.
138
+ // They are used when the route pattern is generated and added to the
139
+ // Laravel Router to match image request.
140
+ 'placeholders_patterns' => [
141
+ 'host' => '(.*?)?',
142
+ 'dirname' => '(.*?)?',
143
+ 'basename' => '([^\/\.]+?)',
144
+ 'filename' => '([^\/]+)',
145
+ 'extension' => '(jpeg|jpg|gif|png)',
146
+ ]
147
+ ],
148
+
149
+ /*
150
+ |--------------------------------------------------------------------------
151
+ | Routes
152
+ |--------------------------------------------------------------------------
153
+ |
154
+ | Default configuration for image routes. See routes/image.php
155
+ |
156
+ */
157
+ 'routes' => [
158
+ // Path to the routes file that will be automatically loaded. Set to null
159
+ // to prevent auto-loading of routes.
160
+ 'map' => base_path('routes/images.php'),
161
+
162
+ // Default domain for routes
163
+ 'domain' => null,
164
+
165
+ // Default namespace for controller
166
+ 'namespace' => null,
167
+
168
+ // Default middlewares for routes
169
+ 'middleware' => [],
170
+
171
+ // The controller serving the images
172
+ 'controller' => '\Folklore\Image\Http\ImageController@serve',
173
+
174
+ // The name of the pattern that will be added to the Laravel Router.
175
+ 'pattern_name' => 'image_pattern',
176
+
177
+ // The middleware used when a route as `cache` enabled
178
+ 'cache_middleware' => 'image.middleware.cache'
179
+ ],
180
+
181
+ /*
182
+ |--------------------------------------------------------------------------
183
+ | Image Driver
184
+ |--------------------------------------------------------------------------
185
+ |
186
+ | This option controls the default image "driver" used by Imagine library
187
+ | to manipulate images.
188
+ |
189
+ | Supported: "gd", "imagick", "gmagick"
190
+ |
191
+ */
192
+ 'driver' => 'gd',
193
+
194
+ /*
195
+ |--------------------------------------------------------------------------
196
+ | Memory limit
197
+ |--------------------------------------------------------------------------
198
+ |
199
+ | When manipulating an image, the memory limit is increased to this value
200
+ |
201
+ */
202
+ 'memory_limit' => '128M',
203
+
204
+ ];
@@ -31,7 +31,7 @@ module.exports = class PrettierGenerator extends _generator.default {
31
31
  },
32
32
 
33
33
  dependencies() {
34
- this.addDevDependencies(['prettier', '@prettier/plugin-php', '@trivago/prettier-plugin-sort-imports']);
34
+ this.addDevDependencies(['prettier@^2.0.0', '@prettier/plugin-php@^0.18.0', '@trivago/prettier-plugin-sort-imports@^3.0.0']);
35
35
  }
36
36
 
37
37
  };
@@ -108,8 +108,8 @@ module.exports = class ReactAppGenerator extends _generator.default {
108
108
  },
109
109
 
110
110
  dependencies() {
111
- this.addDependencies(['react', 'react-dom', 'prop-types', 'react-intl', 'react-router', 'react-router-dom', 'react-helmet', 'classnames', '@folklore/routes', '@folklore/fonts', '@folklore/forms', '@folklore/fetch', '@folklore/hooks', '@folklore/tracking', // Polyfills
112
- 'intl', '@formatjs/intl-locale', '@formatjs/intl-pluralrules', 'intersection-observer', 'resize-observer-polyfill']);
111
+ this.addDependencies(['react@^18.0.0', 'react-dom@^18.0.0', 'prop-types@^15.0.0', 'react-intl@^6.0.0', 'react-router@^6.0.0', 'react-router-dom@^6.0.0', 'react-helmet@^6.0.0', 'classnames@^2.0.0', '@folklore/routes@^0.1.0', '@folklore/fonts@^0.0.1', '@folklore/forms@^0.0.1', '@folklore/fetch@^0.1.0', '@folklore/hooks@^0.0.1', '@folklore/tracking@^0.0.1', // Polyfills
112
+ 'intl@^1.0.0', '@formatjs/intl-locale@^3.0.0', '@formatjs/intl-pluralrules@^5.0.0', 'intersection-observer@^0.12.0', 'resize-observer-polyfill@1.0.0']);
113
113
  }
114
114
 
115
115
  };
@@ -37,7 +37,7 @@ module.exports = class StylelintGenerator extends _generator.default {
37
37
  },
38
38
 
39
39
  dependencies() {
40
- this.addDevDependencies(['stylelint', 'stylelint-config-standard-scss', 'stylelint-config-idiomatic-order', 'stylelint-config-prettier']);
40
+ this.addDevDependencies(['stylelint@^14.0.0', 'stylelint-config-standard-scss@^5.0.0', 'stylelint-config-idiomatic-order@^8.0.0', 'stylelint-config-prettier@^9.0.0']);
41
41
  }
42
42
 
43
43
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "generator-folklore",
3
- "version": "3.0.6",
3
+ "version": "3.0.7",
4
4
  "description": "Yeoman generator for projects at Folklore",
5
5
  "keywords": [
6
6
  "yeoman-generator"
@@ -9,9 +9,9 @@
9
9
  "scripts": {
10
10
  "clean:lib": "rm -rf lib/*",
11
11
  "clean": "npm run clean:lib",
12
- "copy:templates": "find src/ -type d | grep -i /templates$ | sed 's/src\\/\\///g' | xargs -I{} cp -r \"src/{}\" \"lib/{}\"",
12
+ "copy:dirs": "find src/ -type d | grep -E '(/templates|/instructions)$' | sed 's/src\\/\\///g' | xargs -I{} cp -r \"src/{}\" \"lib/{}\"",
13
13
  "compile": "../../node_modules/.bin/babel -d lib/ src/",
14
- "build": "npm run compile && npm run copy:templates",
14
+ "build": "npm run compile && npm run copy:dirs",
15
15
  "test": "echo \"Error: no test specified\" && exit 1",
16
16
  "prepare": "npm run clean && npm run build"
17
17
  },
@@ -31,6 +31,7 @@
31
31
  "dependencies": {
32
32
  "chalk": "^4.0.0",
33
33
  "change-case": "^4.1.2",
34
+ "cli-highlight": "^2.1.11",
34
35
  "glob": "^7.2.0",
35
36
  "immutable": "^4.0.0",
36
37
  "is-utf8": "^0.2.1",
@@ -39,5 +40,5 @@
39
40
  "yeoman-generator": "^5.6.1",
40
41
  "yeoman-remote": "^1.0.1"
41
42
  },
42
- "gitHead": "8331a20ddf7647db4895648efb495ce23d070fb3"
43
+ "gitHead": "bc3878a65d256dd8742a6deea2699252d4a4dfb0"
43
44
  }
@@ -1,22 +0,0 @@
1
- <?php
2
-
3
- namespace App\Panneau\Fields;
4
-
5
- use Panneau\Fields\ResourceItem;
6
-
7
- class Block extends ResourceItem
8
- {
9
- public function resource(): string
10
- {
11
- return 'blocks';
12
- }
13
-
14
- public function attributes(): ?array
15
- {
16
- return array_merge(parent::attributes(), [
17
- 'placeholder' => trans('panneau.fields.blocks_placeholder'),
18
- 'itemLabelPath' => 'title',
19
- 'itemDescriptionPath' => null,
20
- ]);
21
- }
22
- }
@@ -1,87 +0,0 @@
1
- <?php
2
-
3
- namespace App\Panneau\Fields;
4
-
5
- use Panneau\Fields\Items;
6
- use Panneau\Fields\ResourceItem;
7
- use App\Panneau\Resources\Blocks\BlockWithBlocks;
8
-
9
- class Blocks extends Items
10
- {
11
- protected $currentDepth = 0;
12
-
13
- protected $maxDepth = null;
14
-
15
- protected $excludeTypes = [];
16
-
17
- public function itemField(): ?string
18
- {
19
- return Block::class;
20
- }
21
-
22
- public function attributes(): ?array
23
- {
24
- // With types
25
- $itemField = $this->itemField();
26
- $itemField = !is_null($itemField) ? resolve($itemField) : null;
27
- $itemResource =
28
- !is_null($itemField) && $itemField instanceof ResourceItem
29
- ? $itemField->makeResource()
30
- : null;
31
- $resourceTypes =
32
- !is_null($itemResource) && $itemResource->hasTypes() ? $itemResource->getTypes() : null;
33
-
34
- $attributes = [
35
- 'withoutFormGroup' => true,
36
- 'addItemLabel' => trans('panneau.fields.add_block'),
37
- 'noItemLabel' => trans('panneau.fields.no_blocks'),
38
- 'itemLabel' => trans('panneau.fields.block'),
39
- 'withoutSort' => false,
40
- ];
41
-
42
- if (!is_null($resourceTypes)) {
43
- $attributes['types'] = $resourceTypes
44
- ->filter(function ($type) {
45
- $key = get_class($type);
46
- return !in_array($key, $this->excludeTypes);
47
- })
48
- ->map(function ($type) {
49
- $hasBlocks = collect($type->fields())->contains(function ($field) {
50
- return $field instanceof self;
51
- });
52
- if (isset($this->maxDepth) && $hasBlocks) {
53
- return new BlockWithBlocks($type, $this->currentDepth + 1);
54
- }
55
- return $type;
56
- })
57
- ->filter(function ($type) {
58
- if (isset($this->maxDepth) && $type instanceof BlockWithBlocks) {
59
- return $type->currentDepth() < $this->maxDepth;
60
- }
61
- return true;
62
- })
63
- ->values()
64
- ->toArray();
65
- }
66
-
67
- return $attributes;
68
- }
69
-
70
- public function maxDepth($depth)
71
- {
72
- $this->maxDepth = $depth;
73
- return $this;
74
- }
75
-
76
- public function currentDepth($depth)
77
- {
78
- $this->currentDepth = $depth;
79
- return $this;
80
- }
81
-
82
- public function withoutType($type)
83
- {
84
- $this->excludeTypes[] = is_object($type) ? get_class($type) : $type;
85
- return $this;
86
- }
87
- }