Files
filament/packages/tables/resources/views/columns/text-input-column.blade.php
T

72 lines
2.4 KiB
PHP

@php
$alignClass = match ($getAlignment()) {
'center' => 'text-center',
'right' => 'text-right',
default => 'text-left',
};
$state = $getState();
@endphp
<div
x-data="{
error: undefined,
state: @js($state),
isLoading: false,
update: async function(value) {
this.isLoading = true
this.response = await $wire.updateTableColumnState(@js($getName()), @js($recordKey), value)
this.error = response?.error ?? undefined
if (! this.error) this.state = response
this.isLoading = false
}
}"
x-init="
Livewire.hook('message.processed', (component) => {
if (component.component.id !== @js($this->id)) {
return
}
let newState = $refs.newState.value
if (state === newState) {
return
}
state = newState
})
"
{{ $attributes->merge($getExtraAttributes())->class([
'filament-tables-text-input-column',
]) }}
>
<input
type="hidden"
value="{{ str($state)->replace('"', '\\"') }}"
x-ref="newState"
/>
<input
x-model="state"
type="{{ $getType() }}"
{!! $isDisabled() ? 'disabled' : null !!}
{!! ($inputMode = $getInputMode()) ? "inputmode=\"{$inputMode}\"" : null !!}
{!! ($placeholder = $getPlaceholder()) ? "placeholder=\"{$placeholder}\"" : null !!}
{!! ($interval = $getStep()) ? "step=\"{$interval}\"" : null !!}
x-on:change{{ $getType() === 'number' ? '.debounce.750ms' : null }}="update($event.target.value)"
x-on:keydown.enter="update($event.target.value)"
:readonly="isLoading"
x-tooltip="error"
{{ $attributes->merge($getExtraInputAttributes())->merge($getExtraAttributes())->class([
'ml-0.5 text-gray-900 inline-block transition duration-75 rounded-lg shadow-sm outline-none focus:ring-primary-500 focus:ring-1 focus:ring-inset focus:border-primary-500 disabled:opacity-70 read-only:opacity-50',
$alignClass,
'dark:bg-gray-700 dark:text-white dark:focus:border-primary-500' => config('forms.dark_mode'),
]) }}
x-bind:class="{
'border-gray-300': ! error,
'dark:border-gray-600': (! error) && @js(config('forms.dark_mode')),
'border-danger-600 ring-1 ring-inset ring-danger-600': error,
}"
/>
</div>