Quickly fill in the form field (form hints, random passwords, clear input, format values)
Sometimes, for frequently used forms, it is convenient to have a selection of some of the most commonly used options on hand.
An effect similar to the following:

...can be achieved as follows:
DatePicker::make('remind_at')    ->hint(function ($component) {        $hint = '<div class="flex flex-wrap space-x-2">';         $dates = [            [                'label' => 'Today',                'value' => now()->format('Y-m-d'),                'class' => 'bg-primary-500',            ],            [                'label' => 'Tomorrow',                'value' => now()->addDay()->format('Y-m-d'),                'class' => 'bg-primary-700',            ],            [                'label' => 'In a month',                'value' => now()->addMonth()->format('Y-m-d'),                'class' => 'bg-orange-600',            ],            [                'label' => 'In a year',                'value' => now()->addYear()->format('Y-m-d'),                'class' => 'bg-red-600',            ],        ];         foreach ($dates as $date) {            $hint .= '            <span wire:click="$set(\''.$component->getStatePath().'\', \'' . $date['value'] . '\')" class="font-medium h- px-2 py-0.5 rounded-xl ' . $date['class'] . ' text-white text-xs tracking-tight mt-[10px] cursor-pointer">                ' . $date['label'] . '            </span>            ';        }         $hint .= '</div>';         return new HtmlString($hint);    }),In case of field which accepts multiple values the second argument for $set should be passed as array, eg.:
Select::make('users')    ->label('Task for')    ->relationship('users', 'full_name')    ->multiple()    ->hint(function ($component) {        $hint = '<div class="flex flex-wrap space-x-2">';         $users = [            [                'label' => 'John',                'value' => User::JOHN,                'class' => 'bg-primary-500',            ],            [                'label' => 'Alice',                'value' => User::ALICE,                'class' => 'bg-sky-500',            ],            [                'label' => 'Team JA',                'value' => implode(', ', [User::JOHN, User::ALICE]),                'class' => 'bg-violet-700',            ],        ];         foreach ($users as $user) {            $hint .= '            <span wire:click="$set(\''.$component->getStatePath().'\', [' . $user['value'] . '])" class="font-medium h- px-2 py-0.5 rounded-xl ' . $user['class'] . ' text-white text-xs tracking-tight mt-[10px] cursor-pointer">                ' . $user['label'] . '            </span>            ';        }         $hint .= '</div>';         return new HtmlString($hint);    })it can be used also for generating random passwords:
TextInput::make('password')    ->hint(function () {        return new HtmlString('            <div class="flex flex-wrap space-x-2">                <span wire:click="$set(\'data.password\', \'' . Str::random(10) . '\')" class="font-medium h- px-2 py-0.5 rounded-xl bg-primary-500 text-white text-xs tracking-tight mt-[10px] cursor-pointer">                    Random                </span>            </div>        ');    })    ->maxLength(50)    ->columnSpan(['default' => 2, 'sm' => 1]),...clearing values:
TextInput::make('comment')    ->hint(function ($component) {        return new HtmlString('            <div class="space-x-2">                <span wire:click="$set(\''.$component->getStatePath().'\', null)" class="font-medium h- px-2 py-0.5 rounded-xl bg-primary-500 text-white text-xs tracking-tight mt-[10px] cursor-pointer">                    Clear                </span>            </div>        ');    })    ->maxLength(50)    ->columnSpan(['default' => 2, 'sm' => 1]),...formatting, copying, selecting and so on.
No comments yet…