mirror of
https://github.com/filamentphp/filament.git
synced 2026-09-17 17:45:55 +08:00
72 lines
2.4 KiB
PHP
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>
|