forms broke somehow

This commit is contained in:
red 2025-12-04 19:48:18 +00:00
parent a930d0f972
commit b9400287ad
3 changed files with 113 additions and 18 deletions

View File

@ -0,0 +1,26 @@
<?php
namespace App\Services;
class PostService
{
public static function getPostData(string $url): mixed
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($response !== false && $httpCode === 200) {
return json_decode($response, true);
}
return false;
}
}

View File

@ -1,9 +1,11 @@
<?php <?php
use App\Models\Participant; use App\Models\Participant;
use App\Services\PostService;
use Illuminate\Support\Facades\Log;
use function Livewire\Volt\{state, mount, rules}; use function Livewire\Volt\{state, mount, rules};
state(['token'])->url(); state(['token']);
state([ state([
'participant' => null, 'participant' => null,
@ -11,41 +13,72 @@ state([
'receiverPrompt' => null, 'receiverPrompt' => null,
'receiverUserData' => null, 'receiverUserData' => null,
'prompt' => '', 'prompt' => '',
'isEditing' => false, 'submissionUrl' => '',
'isEditingPrompt' => false,
'isEditingSubmission' => false,
'submissionData' => null
]); ]);
#todo - check if the post is by them, if not - reject it
rules([ rules([
'prompt' => 'required|string|min:3', 'prompt' => 'required|string|min:3',
'submissionUrl' => [
'required',
'regex:/^https:\/\/sketchersunited\.org\/posts\/\d+$/',
'max:200',
],
]); ]);
mount(function () { mount(function ($token) {
$this->token = $token;
if ($this->token) { if ($this->token) {
$this->participant = Participant::findByToken($this->token); $this->participant = Participant::findByToken($this->token);
if ($this->participant) { if ($this->participant) {
$this->userData = $this->participant->getUserData(); $this->userData = $this->participant->getUserData();
$this->prompt = $this->participant->prompt ?? ''; $this->prompt = $this->participant->prompt ?? '';
if($this->participant->receiver) { $this->submissionUrl = $this->participant->submission_url ?? '';
if ($this->participant->receiver) {
$this->receiverPrompt = $this->participant->receiver->prompt; $this->receiverPrompt = $this->participant->receiver->prompt;
$this->receiverUserData = $this->participant->receiver->getUserData(); $this->receiverUserData = $this->participant->receiver->getUserData();
if ($this->participant->submission_url) {
$this->submissionData = PostService::getPostData($this->participant->submission_url);
if (!$this->submissionData) {
$this->submissionData = null;
}
}
} }
} }
} }
}); });
$save = function () { $saveEditingPrompt = function () {
if ($this->participant) { if ($this->participant) {
$this->validate(); $this->validate();
$this->participant->prompt = $this->prompt; $this->participant->prompt = $this->prompt;
$this->participant->save(); $this->participant->save();
$this->isEditing = false; $this->isEditingPrompt = false;
} }
}; };
$cancel = function () { $cancelEditingPrompt = function () {
$this->prompt = $this->participant->prompt ?? ''; $this->prompt = $this->participant->prompt ?? '';
$this->isEditing = false; $this->isEditingPrompt = false;
};
$saveEditingSubmission = function () {
if ($this->participant) {
$this->validate();
$this->participant->submission_url = $this->submissionUrl;
$this->participant->save();
$this->isEditingSubmission = false;
}
};
$cancelEditingSubmission = function () {
$this->submissionUrl = $this->participant->submission_url ?? '';
$this->isEditingSubmission = false;
}; };
?> ?>
@ -55,13 +88,13 @@ $cancel = function () {
You are... You are...
{{ $participant->id }} {{ $participant->id }}
@if($userData) @if($userData)
<img src ="{{ $userData['data']['profile_image_url'] ?? '' }}"> <img src="{{ $userData['data']['profile_image_url'] ?? '' }}">
<h1> {{ $userData['data']['username'] ?? 'Unknown' }}</h1> <h1> {{ $userData['data']['username'] ?? 'Unknown' }}</h1>
@endif @endif
<hr> <hr>
@if($isEditing) @if($isEditingPrompt)
<form wire:submit="save"> <form wire:submit="saveEditingPrompt">
<input type="text" id="prompt" wire:model="prompt"> <input type="text" id="prompt" wire:model="prompt">
@error('prompt') @error('prompt')
@ -70,7 +103,7 @@ $cancel = function () {
<button type="submit">Save</button> <button type="submit">Save</button>
<button type="button" wire:click="cancel">Cancel</button> <button type="button" wire:click="cancelEditingPrompt">Cancel</button>
</form> </form>
@else @else
<div class="prompt-display"> <div class="prompt-display">
@ -78,7 +111,7 @@ $cancel = function () {
Your prompt is: {{ $prompt ?: 'No prompt set yet.' }} Your prompt is: {{ $prompt ?: 'No prompt set yet.' }}
</p> </p>
<button wire:click="$set('isEditing', true)"> <button wire:click="$set('isEditingPrompt', true)">
{{ $prompt ? 'Edit Prompt' : 'Add Prompt' }} {{ $prompt ? 'Edit Prompt' : 'Add Prompt' }}
</button> </button>
</div> </div>
@ -89,10 +122,46 @@ $cancel = function () {
@if($participant->giving_id) @if($participant->giving_id)
You are giving to <p>{{ $participant->giving_id }}</p> You are giving to <p>{{ $participant->giving_id }}</p>
@if($receiverUserData) @if($receiverUserData)
<img src ="{{ $receiverUserData['data']['profile_image_url'] ?? '' }}"> <img src="{{ $receiverUserData['data']['profile_image_url'] ?? '' }}">
<h1> {{ $receiverUserData['data']['username'] ?? 'Unknown' }}</h1> <h1> {{ $receiverUserData['data']['username'] ?? 'Unknown' }}</h1>
@endif @endif
{{ "Their prompt is... {$receiverPrompt}" ?: 'No prompt set yet.' }} Their prompt is... {{$receiverPrompt}}
<p> Are you done? Link to your post below </p>
@if($isEditingSubmission)
<form wire:submit="saveEditingSubmission">
<input type="text" id="submissionUrl" wire:model="submissionUrl">
@error('submissionUrl')
<span class="error">{{ $message }}</span>
@enderror
<button type="submit">Save</button>
<button type="button" wire:click="cancelEditingSubmission">Cancel</button>
</form>
@else
<div class="submissionUrl-display">
<p>
Your submission URL is: <span
id="submissionUrl">{{ $submissionUrl ?: 'No submission sent yet.' }}</span>
</p>
<button wire:click="$set('isEditingSubmission', true)">
{{ $submissionUrl ? 'Edit Submission URL' : 'Add Submission URL' }}
</button>
</div>
@endif
<hr>
@if($submissionData)
<h1>Your submission:</h1>
<div id="postView">
<a href="{{$submissionUrl}}">
<h1>{{$submissionData['post']['title']}}</h1>
<img src="{{$submissionData['post']['resource_url']}}">
</a>
</div>
@endif
@elseif($participant->desperate) @elseif($participant->desperate)
<p>You're in a bind!</p> <p>You're in a bind!</p>
@else @else

View File

@ -94,7 +94,7 @@ $runMatch = function () {
</td> </td>
<td class="px-6 py-4 text-sm font-mono text-gray-500 truncate" title="{{ $participant->token }}"> <td class="px-6 py-4 text-sm font-mono text-gray-500 truncate" title="{{ $participant->token }}">
{{ Str::limit($participant->token, 15, '...') }} {{ $participant->token }}
</td> </td>
</tr> </tr>
@endforeach @endforeach