Created some more input components and added all attributes to game news entry.

Also added Route and function for accepting post in GameNewsController
This commit is contained in:
Vari
2024-03-19 01:00:27 +01:00
parent 01b1fefc72
commit 90fbc458db
10 changed files with 139 additions and 70 deletions

View File

@@ -23,4 +23,8 @@ public function index()
return view('admin.tools.game-news', ['newsList' => $news]);
}
public function put() {
}
}

View File

@@ -9,6 +9,7 @@
use Illuminate\Database\Eloquent\Concerns\HasUuids;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Carbon;
/**
* @mixin IdeHelperNews
@@ -21,5 +22,7 @@ class News extends Model
'message_type' => MessageType::class,
'redirect_mode' => GameNewsRedirectMode::class,
'faction' => Faction::class,
'from_date' => 'datetime:Y-m-d H:i:s',
'to_date' => 'datetime:Y-m-d H:i:s',
];
}

View File

@@ -9,13 +9,18 @@
class GameNewsListEntry extends Component
{
public string $idPrefix;
/**
* Create a new component instance.
*/
public function __construct(
public News $news
public News $news,
?string $idPrefix = null,
)
{}
{
$this->idPrefix = $idPrefix === null ? '' : $idPrefix.'_';
}
/**
* Get the view / contents that represent the component.

View File

@@ -1,5 +1,9 @@
[class^='input-global-'] {
@apply transition-colors rounded-md border bg-gray-800 border-gray-600;
}
.input-global-text {
@apply rounded-md border border-gray-600 bg-gray-800 px-4 py-2 text-base outline-none focus-within:border-indigo-600 whitespace-nowrap;
@apply px-4 py-2 text-base outline-none focus-within:border-indigo-600 whitespace-nowrap;
flex-grow: 1;
input {
@@ -23,7 +27,7 @@
}
.input-global-textarea {
@apply px-4 py-2 rounded-md bg-gray-800 border-gray-600 border w-auto outline-none focus-within:border-indigo-600 resize-y text-nowrap;
@apply px-4 py-2 w-auto outline-none focus-within:border-indigo-600 resize-y text-nowrap;
flex-grow: 1;
}
@@ -32,9 +36,33 @@
}
.input-global-dropdown {
@apply rounded-md border border-gray-600 bg-gray-800 px-4 py-2 text-base outline-none focus:border-indigo-600;
@apply px-4 py-2 text-base outline-none focus:border-indigo-600;
option {
@apply bg-gray-800 px-4 py-2 rounded-sm;
@apply px-4 py-2 rounded-sm;
}
}
.input-global-date {
@apply px-4 py-2 text-base outline-none focus:border-indigo-600;
}
.input-global-number {
@apply px-4 py-2 text-base outline-none focus:border-indigo-600;
}
.input-global-submit {
@apply px-4 py-2 text-base outline-none focus:border-indigo-600 hover:bg-gray-600;
&.save {
@apply bg-blue-800 border-blue-600 hover:bg-blue-600;
}
&.delete {
@apply bg-rose-800 border-rose-600 hover:bg-rose-600;
}
&.create {
@apply bg-green-800 border-green-600 hover:bg-green-600;
}
}

View File

@@ -3,7 +3,7 @@
])
<x-layouts.admin>
<div class="h-full w-full p-1 md:p-16">
<div class="h-full w-full p-2 md:p-16">
@foreach($newsList as $news)
<x-admin.tools.game-news-list-entry :$news />
@endforeach

View File

@@ -4,75 +4,101 @@
use App\Enums\Game\Faction;
use App\Enums\Game\Message\GameNewsRedirectMode;
/** @var News $news */
/** @var string $idPrefix */
@endphp
@pushonce('head')
@vite(['resources/css/components/admin/tools/game-news-list-entry.scss'])
@endpushonce
<div class="container mx-auto bg-slate-800 border border-slate-500 rounded-xl my-2 p-2 shadow-glow shadow-gray-400/30">
<div class="game-news-entry-attributes">
<div>
<label for="title">Title</label>
<x-inputs.text value="{{ $news->title }}" />
<div class="container mx-auto bg-slate-800 border border-slate-500 rounded-xl my-6 p-2 shadow-glow shadow-gray-400/30">
<form action="{{ route('gamenews.post', ['newsId' => $news->uuid]) }}" method="post">
@csrf
<div class="game-news-entry-attributes">
<div>
<label for="title">Title</label>
<x-inputs.text value="{{ $news->title }}"/>
</div>
<div>
<label for="description">Description</label>
<x-inputs.text-area id="{{ $idPrefix }}description">{{ $news->body }}</x-inputs.text-area>
</div>
<div>
<label for="messageType">Message Type</label>
<x-inputs.dropdown
id="messageType"
:cases="MessageType::cases()"
:selected="$news->message_type"/>
</div>
<div>
<label for="faction">Faction</label>
<x-inputs.dropdown
id="faction"
:cases="Faction::cases()"
:selected="$news->faction"/>
</div>
<div>
<label for="oneTime">One Time News</label>
<x-inputs.checkbox :checked="$news->one_time_news"/>
</div>
<div>
<label for="oneTime">Should Quit Game</label>
<x-inputs.checkbox id="oneTime" :checked="$news->should_quit_game"/>
</div>
<div>
<label for="oneMatch">Complete One Match</label>
<x-inputs.checkbox id="oneMatch" :checked="$news->one_match"/>
</div>
<div>
<label for="redirectMode">Redirect Mode</label>
<x-inputs.dropdown
id="faction"
:cases="GameNewsRedirectMode::cases()"
:selected="$news->redirect_mode"/>
</div>
<div>
<label for="redirectItem">Redirect Item</label>
<x-inputs.text id="redirectItem" value="{{ $news->redirect_item }}"/>
</div>
<div>
<label for="redirectUrl">Redirect Url</label>
<x-inputs.text id="redirectUrl" value="{{ $news->redirect_url }}"/>
</div>
<div>
<label for="PopUpBG">Pop-Up News Background</label>
<x-inputs.text id="PopUpBG" value="{{ $news->background_image }}"/>
</div>
<div>
<label for="inGameNewsBG">In Game News Background</label>
<x-inputs.text id="inGameNewsBG" value="{{ $news->background_image }}"/>
</div>
<div>
<label for="inGameNewsThumbnail">In Game News Thumbnail</label>
<x-inputs.text id="inGameNewsThumbnail" value="{{ $news->background_image }}"/>
</div>
<div>
<label for="fromDate">From Date</label>
<x-inputs.date id="fromDate" value="{{ $news->from_date->toDateString() }}"/>
</div>
<div>
<label for="toDate">To Date</label>
<x-inputs.date id="toDate" value="{{ $news->to_date->toDateString() }}"/>
</div>
<div>
<label for="displayXTimes">Display X Times</label>
<x-inputs.number id="displayXTimes" min="0" value="{{ $news->display_x_times }}"/>
</div>
<div>
<label for="maxPlayerLevel">Max Player Level</label>
<x-inputs.number id="maxPlayerLevel" min="1" value="{{ $news->max_player_level }}"/>
</div>
</div>
<div>
<label for="description">Description</label>
<x-inputs.text-area id="description">{{ $news->body }}</x-inputs.text-area>
<div class="flex justify-start gap-6 mt-2">
<x-inputs.submit>Stuff</x-inputs.submit>
<x-inputs.submit class="save">Save</x-inputs.submit>
<x-inputs.submit class="delete">Delete</x-inputs.submit>
<x-inputs.submit class="create">Create</x-inputs.submit>
</div>
<div>
<label for="messageType">Message Type</label>
<x-inputs.dropdown
id="messageType"
:cases="MessageType::cases()"
:selected="$news->message_type"/>
</div>
<div>
<label for="faction">Faction</label>
<x-inputs.dropdown
id="faction"
:cases="Faction::cases()"
:selected="$news->faction"/>
</div>
<div>
<label for="oneTime">One Time News</label>
<x-inputs.checkbox :checked="$news->one_time_news" />
</div>
<div>
<label for="oneTime">Should Quit Game</label>
<x-inputs.checkbox id="oneTime" :checked="$news->should_quit_game" />
</div>
<div>
<label for="oneMatch">Complete One Match</label>
<x-inputs.checkbox id="oneMatch" :checked="$news->one_match" />
</div>
<div>
<label for="redirectMode">Redirect Mode</label>
<x-inputs.dropdown
id="faction"
:cases="GameNewsRedirectMode::cases()"
:selected="$news->redirect_mode"/>
</div>
<div>
<label for="redirectItem">Redirect Item</label>
<x-inputs.text id="redirectItem" value="{{ $news->redirect_item }}" />
</div>
<div>
<label for="redirectUrl">Redirect Url</label>
<x-inputs.text id="redirectUrl" value="{{ $news->redirect_url }}"/>
</div>
<div>
<label for="PopUpBG">Pop-Up News Background</label>
<x-inputs.text id="PopUpBG" value="{{ $news->background_image }}" />
</div>
<div>
<label for="inGameNewsBG">In Game News Background</label>
<x-inputs.text id="inGameNewsBG" value="{{ $news->background_image }}" />
</div>
<div>
<label for="inGameNewsThumbnail">In Game News Thumbnail</label>
<x-inputs.text id="inGameNewsThumbnail" value="{{ $news->background_image }}" />
</div>
</div>
</form>
</div>

View File

@@ -0,0 +1 @@
<input type="date" {{ $attributes->merge(['class' => 'input-global-date']) }}>

View File

@@ -0,0 +1 @@
<input type="number" {{ $attributes->merge(['class' => 'input-global-number']) }}>

View File

@@ -0,0 +1 @@
<button type="submit" {{ $attributes->merge(['class' => 'input-global-submit']) }}><span>{{ $slot }}</span></button>

View File

@@ -15,7 +15,7 @@
Route::post('file-manager', [GameFileController::class, 'store'])->name('file.store');
Route::get('gamenews', [GameNewsController::class, 'index'])->name(GameNewsController::class);
Route::post('gamenews/{newsId}', [GameNewsController::class, 'put'])->name('gamenews.post');
Route::fallback(function () {