Skip to content

Commit 8f2a18c

Browse files
committed
5.4.2
1 parent 05c5655 commit 8f2a18c

File tree

10 files changed

+173
-84
lines changed

10 files changed

+173
-84
lines changed

composer.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -169,5 +169,5 @@
169169
},
170170
"minimum-stability": "dev",
171171
"prefer-stable": true,
172-
"version": "5.4.1"
172+
"version": "5.4.2"
173173
}

package-lock.json

+26-26
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/app.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/mix-manifest.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"/app.js": "/app.js?id=3ddbff62c536804bfe9fb3e0a0157759",
2+
"/app.js": "/app.js?id=a96a6e9f8ac73b0780f4a029bc70fb0f",
33
"/ui.js": "/ui.js?id=592866a715b1c20b43fff6ca7980b279",
44
"/manifest.js": "/manifest.js?id=3267e5c99fd7b729e2f38ec55b50397d",
55
"/app.css": "/app.css?id=4ac240e9b4c482451bf95d4161751414",

resources/js/components/DefaultField.vue

+36-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
<template>
22
<div v-if="field.visible" :class="fieldWrapperClasses">
33
<div v-if="field.withLabel" :class="labelClasses">
4-
<slot>
4+
<slot
5+
name="default"
6+
:for="fieldLabelFor"
7+
:label="fieldLabel"
8+
:required="field.required"
9+
:hasHelpText="shouldShowHelpText"
10+
>
511
<FormLabel
6-
:label-for="labelFor || field.uniqueKey"
12+
:label-for="fieldLabelFor"
713
class="space-x-1"
814
:class="{ 'mb-2': shouldShowHelpText }"
915
>
@@ -49,6 +55,11 @@ export default {
4955
},
5056
5157
computed: {
58+
/**
59+
* HTML classes for field wrapper.
60+
*
61+
* @returns {string[]}
62+
*/
5263
fieldWrapperClasses() {
5364
// prettier-ignore
5465
return [
@@ -61,6 +72,11 @@ export default {
6172
]
6273
},
6374
75+
/**
76+
* HTML classes for label.
77+
*
78+
* @returns {string[]}
79+
*/
6480
labelClasses() {
6581
// prettier-ignore
6682
return [
@@ -74,6 +90,11 @@ export default {
7490
]
7591
},
7692
93+
/**
94+
* HTML classes for control wrapper.
95+
*
96+
* @returns {string[]}
97+
*/
7798
controlWrapperClasses() {
7899
// prettier-ignore
79100
return [
@@ -90,6 +111,8 @@ export default {
90111
91112
/**
92113
* Return the label that should be used for the field.
114+
*
115+
* @returns {string}
93116
*/
94117
fieldLabel() {
95118
// If the field name is purposefully an empty string, then let's show it as such
@@ -100,8 +123,19 @@ export default {
100123
return this.fieldName || this.field.name || this.field.singularLabel
101124
},
102125
126+
/**
127+
* Return the label target for the field.
128+
*
129+
* @returns {string}
130+
*/
131+
fieldLabelFor() {
132+
return this.labelFor || this.field.uniqueKey
133+
},
134+
103135
/**
104136
* Determine help text should be shown.
137+
*
138+
* @returns {boolean}
105139
*/
106140
shouldShowHelpText() {
107141
return this.showHelpText && this.field.helpText?.length > 0

resources/js/composables/useActions.js

+1
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ export function useActions(props, emitter, store) {
139139
}
140140

141141
function openConfirmationModal() {
142+
state.errors = new Errors()
142143
state.actionModalVisible = true
143144
}
144145

resources/js/fields/Form/BooleanField.vue

+14
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,20 @@
55
:show-help-text="showHelpText"
66
:full-width-content="fullWidthContent"
77
>
8+
<template #default="defaultSlotProps">
9+
<FormLabel
10+
class="space-x-1"
11+
:class="{ 'mb-2': defaultSlotProps.hasHelpText }"
12+
@click.prevent.stop="toggle"
13+
>
14+
<span>
15+
{{ defaultSlotProps.label }}
16+
</span>
17+
<span v-if="defaultSlotProps.required" class="text-red-500 text-sm">
18+
{{ __('*') }}
19+
</span>
20+
</FormLabel>
21+
</template>
822
<template #field>
923
<Checkbox
1024
:disabled="currentlyIsReadonly"

src/Fields/Repeater/Repeatable.php

+20-3
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,6 @@ public function resolveFields(NovaRequest $request)
100100
->each(function (Field $field) use ($request) {
101101
$field
102102
->compact()
103-
// ->fullWidth()
104103
->resolve($this->data, $field->attribute);
105104

106105
if (\is_null($field->value) && empty($this->data)) {
@@ -109,6 +108,20 @@ public function resolveFields(NovaRequest $request)
109108
});
110109
}
111110

111+
/**
112+
* Resolve the values of the fields in the Repeatable.
113+
*
114+
* @return \Laravel\Nova\Fields\FieldCollection
115+
*/
116+
public function resolveFieldsForDisplay(NovaRequest $request)
117+
{
118+
return FieldCollection::make($this->fields($request))
119+
->withoutMissingValues()
120+
->each(function (Field $field) {
121+
$field->compact()->resolveForDisplay($this->data, $field->attribute);
122+
});
123+
}
124+
112125
/**
113126
* Get the fields displayed by the block.
114127
*
@@ -151,14 +164,18 @@ public function setData($data): Repeatable
151164
#[\ReturnTypeWillChange]
152165
public function jsonSerialize()
153166
{
154-
$request = app(NovaRequest::class);
167+
$fields = with(app(NovaRequest::class), function ($request) {
168+
return $request->isFormRequest()
169+
? $this->resolveFields($request)
170+
: $this->resolveFieldsForDisplay($request);
171+
});
155172

156173
return [
157174
'icon' => static::$icon,
158175
'label' => static::label(),
159176
'singularLabel' => static::singularLabel(),
160177
'type' => static::key(),
161-
'fields' => $this->resolveFields($request),
178+
'fields' => $fields,
162179
'confirmBeforeRemoval' => $this->confirmRemoval,
163180
];
164181
}

src/PendingFortifyConfiguration.php

+13-8
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@ public function __construct()
140140
{
141141
$this->username = Fortify::username();
142142
$this->email = Fortify::email();
143+
144+
$this->cachedConfig = config('fortify', []);
145+
$this->cachedOptionsConfig = config('fortify-options', []);
143146
}
144147

145148
/**
@@ -150,13 +153,8 @@ public function __construct()
150153
*/
151154
public function features(Closure|array|null $features = null)
152155
{
153-
$this->cachedConfig = config('fortify', []);
154-
$this->cachedOptionsConfig = config('fortify-options', []);
155-
156156
if (! \is_null($features)) {
157-
$this->features = collect(Arr::wrap(value($features)))->merge(array_filter([
158-
Nova::routes()->withPasswordReset ? Features::resetPasswords() : null,
159-
]))->unique()->all();
157+
$this->features = Arr::wrap(value($features));
160158

161159
$this->options = config('fortify-options');
162160
}
@@ -328,10 +326,12 @@ public function flush(): void
328326
public function register(?bool $routes = null): void
329327
{
330328
if (\is_null($routes)) {
331-
$routes = Util::isFortifyRoutesRegisteredForFrontend();
329+
$routes = Fortify::$registersRoutes === true
330+
? Util::isFortifyRoutesRegisteredForFrontend()
331+
: false;
332332
}
333333

334-
if ($routes === false) {
334+
if ($routes === false && Fortify::$registersRoutes === true) {
335335
Fortify::ignoreRoutes();
336336
}
337337

@@ -346,6 +346,11 @@ public function bootstrap(): void
346346
/** @var \Laravel\Nova\PendingRouteRegistration $routes */
347347
$routes = Nova::routes();
348348

349+
$this->features = collect($this->features ?? [])->merge(array_filter([
350+
$routes->withPasswordReset ? Features::resetPasswords() : null,
351+
$routes->withEmailVerification ? Features::emailVerification() : null,
352+
]))->unique()->all();
353+
349354
Nova::serving(function (ServingNova $event) use ($routes) {
350355
$this->sync();
351356

0 commit comments

Comments
 (0)