add 2 parts for claculation pp wip

This commit is contained in:
salam committed 2026-10-31 19:22:16 +01:00
1 parent 6d2f4c1052
commit ad45880506
19 files changed
+1403 -1049

No files matched your search

+146 -38
View File
@@ -15,14 +15,19 @@ use Filament\Actions\Action;
use Filament\Forms\Components\DatePicker;
use Filament\Forms\Components\Radio;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\Slider;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Contracts\HasForms;
use Filament\Navigation\NavigationItem;
use Filament\Pages\Page;
use Filament\Schemas\Components\Grid;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Schemas\Components\Utilities\Set;
use Filament\Schemas\Components\View;
use Filament\Schemas\Schema;
use Filament\Support\RawJs;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\HtmlString;
use Livewire\Attributes\On;
class PlayerProps extends Page implements HasForms
@@ -83,21 +88,28 @@ class PlayerProps extends Page implements HasForms
public function form(Schema $schema): Schema
{
return $schema
->columns(5)
->components([
$this->selectCountry(),
$this->selectLeague(),
$this->selectMatch(),
$this->selectTeam(),
$this->selectLineup(),
$this->radioSeasonOrDate(),
$this->datePickerStartDate(),
$this->datePickerEndDate(),
Grid::make(9)
->schema([
$this->selectCountry(),
$this->selectLeague(),
$this->selectMatch(),
$this->selectTeam(),
$this->selectLineup(),
$this->radioSeasonOrDate(),
$this->sliderValue(),
$this->selectSeason(),
$this->dateSplitter(),
View::make('components.form-lockout'),
])
->extraAttributes([
'wire:loading.class' => 'opacity-60 pointer-events-none transition-opacity',
]),
])->statePath('filterData');
}
#[On('team-update')]
public function syncData($team_id)
public function syncData(int $team_id)
{
if ($team_id) {
$this->team_id = $team_id;
@@ -191,6 +203,7 @@ class PlayerProps extends Page implements HasForms
private function selectTeam(): Select
{
return Select::make('tid')
->columnSpan(2)
->live()
->hiddenLabel()
->prefixIconColor(fn (Get $get): string => $get('tid') ? 'success' : 'danger')
@@ -211,8 +224,11 @@ class PlayerProps extends Page implements HasForms
->placeholder('Team')
->afterStateUpdated(function ($state, Set $set) {
if ($state) {
$this->dispatch('team-update', team_id: $state);
$tmp = SsLineupMemory::where('client_id', Auth::user()->client_id)->where('team_id', $state)->orderBy('created_at', 'desc')->first();
if ($tmp) {
$set('lineup', $tmp->lineup);
$this->dispatch('lineup-update', activeLineUp: $tmp->lineup);
@@ -224,6 +240,7 @@ class PlayerProps extends Page implements HasForms
private function selectLeague(): Select
{
return Select::make('lid')
->columnSpan(2)
->live()
->preload()
->prefixIconColor(fn (Get $get): string => $get('lid') ? 'success' : 'danger')
@@ -231,16 +248,18 @@ class PlayerProps extends Page implements HasForms
->hiddenLabel()
->options(fn (Get $get) => LoadStatisticFixturesLeaguesOptions::load($get('cid')))
->placeholder('League')
->afterStateUpdated(function (callable $set) {
->afterStateUpdated(function (callable $set, $state) {
$set('mid', null);
$set('tid', null);
$this->dispatch('clear-all');
$this->dispatch('liga_id-update', liga_id: $state);
});
}
private function selectMatch(): Select
{
return Select::make('mid')
->columnSpan(2)
->live()
->hiddenLabel()
->prefixIconColor(fn (Get $get): string => $get('mid') ? 'success' : 'danger')
@@ -289,6 +308,7 @@ class PlayerProps extends Page implements HasForms
private function selectCountry(): Select
{
return Select::make('cid')
->columnSpan(2)
->live()
->preload()
->searchable(false)
@@ -306,6 +326,9 @@ class PlayerProps extends Page implements HasForms
});
}
/**
* SECOND LINE
*/
private function radioSeasonOrDate(): Radio
{
return Radio::make('season_or_date')
@@ -318,52 +341,137 @@ class PlayerProps extends Page implements HasForms
->default('season')
->hiddenLabel()
->options([
'season' => 'Active Season',
'season' => 'Season',
'date' => 'Date',
])->afterStateUpdated(function ($state) {
$this->dispatch('season_or_date-update', season_or_date: $state);
});
}
private function datePickerStartDate(): DatePicker
private function sliderValue(): Slider
{
return DatePicker::make('start_date')
return Slider::make('part_1_value')
->columnSpan(2)
->live(debounce: 500)
->hiddenLabel()
->hidden(fn (Get $get) => $get('similar_past_matches') == 'none')
->fillTrack()
->minValue(0)
->maxValue(100)
->default(60)
->decimalPlaces(0)
->tooltips(RawJs::make(<<<'JS'
`${$value.toFixed()}%`
JS))
->pips()
->afterStateUpdated(function ($state) {
$this->dispatch('part_1_value-update', part_1_value: $state);
});
}
private function selectSeason(): Select
{
return Select::make('season_selected')
->live()
->columnSpan(2)
->hiddenLabel()
->multiple()
->placeholder('Current Season')
->disabled(fn (Get $get) => $get('cid') == null)
->hidden(fn (Get $get) => $get('season_or_date') == 'date')
->prefixIconColor(fn (Get $get): string => $get('cid') ? 'success' : 'danger')
->prefixIcon('phosphor-calendar-star')
->suffixAction(
Action::make('iconInfo')
->icon('phosphor-question')
->color('success')
->tooltip(function (Get $get) {
if ($get('cid') == null) {
return 'Select country first';
} else {
return new HtmlString('Splits data in 2 Parts<br/><span class="text-blue-500">A) Seasons selected, value is % from slider</span><br/><span class="text-green-500">B) Contains rest from DB, value is 100 - slider value</span>');
}
}))
->options(function (Get $get) {
if ($get('season_mode') == 'halfyear') {
return ['26/27' => '26/27', '25/26' => '25/26', '24/25' => '24/25'];
} else {
return ['2026' => '2026', '2025' => '2025', '2024' => '2024'];
}
})
->afterStateUpdated(function (callable $set, $state) {
$set('ss_player_id', null);
$this->dispatch('season_selected-update', season_selected: $state);
});
}
private function dateSplitter(): DatePicker
{
return DatePicker::make('date_spliter')
->columnSpan(2)
->live()
->hiddenLabel()
->hidden(fn (Get $get) => $get('season_or_date') == 'season')
->native(false)
->prefixAction(
Action::make('iconInfo')
->tooltip(fn () => new HtmlString('Splits data in 2 Parts<br/><span class="text-blue-500">A) Data before day selected, takes % from slider</span><br/><span class="text-green-500">B) Data after day selected takes rest, value is % 100 - slider value</span>'))
->icon('phosphor-question')
->color('success')
)
->prefixIconColor(fn (Get $get): string => $get('start_date') ? 'success' : 'primary')
->prefixIcon('phosphor-calendar')
->prefix('Start')
// ->prefixIcon('phosphor-calendar')
->prefix('Split')
->closeOnDateSelection()
->suffixAction(
Action::make('clear_start')
->icon('phosphor-x')
->color('gray')
->action(fn (Set $set) => $set('start_date', null))
->action(fn (Set $set) => $set('date_spliter', null))
)->afterStateUpdated(function ($state) {
$this->dispatch('start_date-update', start_date: $state);
$this->dispatch('date_spliter-update', $state);
});
}
private function datePickerEndDate(): DatePicker
{
return DatePicker::make('end_date')
->live()
->hiddenLabel()
->hidden(fn (Get $get) => $get('season_or_date') == 'season')
->native(false)
->prefixIconColor(fn (Get $get): string => $get('end_date') ? 'success' : 'primary')
->prefixIcon('phosphor-calendar')
->prefix('End')
->closeOnDateSelection()
->suffixAction(
Action::make('clear_end')
->icon('phosphor-x')
->color('gray')
->action(fn (Set $set) => $set('end_date', null))
)->afterStateUpdated(function ($state) {
$this->dispatch('end_date-update', end_date: $state);
});
}
// private function datePickerStartDate(): DatePicker
// {
// return DatePicker::make('start_date')
// ->live()
// ->hiddenLabel()
// ->hidden(fn (Get $get) => $get('season_or_date') == 'season')
// ->native(false)
// ->prefixIconColor(fn (Get $get): string => $get('start_date') ? 'success' : 'primary')
// ->prefixIcon('phosphor-calendar')
// ->prefix('Start')
// ->closeOnDateSelection()
// ->suffixAction(
// Action::make('clear_start')
// ->icon('phosphor-x')
// ->color('gray')
// ->action(fn (Set $set) => $set('start_date', null))
// )->afterStateUpdated(function ($state) {
// $this->dispatch('start_date-update', start_date: $state);
// });
// }
// private function datePickerEndDate(): DatePicker
// {
// return DatePicker::make('end_date')
// ->live()
// ->hiddenLabel()
// ->hidden(fn (Get $get) => $get('season_or_date') == 'season')
// ->native(false)
// ->prefixIconColor(fn (Get $get): string => $get('end_date') ? 'success' : 'primary')
// ->prefixIcon('phosphor-calendar')
// ->prefix('End')
// ->closeOnDateSelection()
// ->suffixAction(
// Action::make('clear_end')
// ->icon('phosphor-x')
// ->color('gray')
// ->action(fn (Set $set) => $set('end_date', null))
// )->afterStateUpdated(function ($state) {
// $this->dispatch('end_date-update', end_date: $state);
// });
// }
}