Phase 8 and 9 marketplace matching
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
$certsText = collect($profile?->certification_records ?? [])->map(fn ($row) => trim(($row['name'] ?? '').' | '.($row['issuer'] ?? ''), ' |'))->implode("\n");
|
||||
$visibility = $profile?->profile_visibility ?? [];
|
||||
$visible = fn (string $field): bool => (bool) ($visibility[$field] ?? true);
|
||||
$selectedTaxonomy = $profile?->taxonomyTerms?->pluck('id')->all() ?? [];
|
||||
@endphp
|
||||
|
||||
<x-app-layout>
|
||||
@@ -22,7 +23,28 @@
|
||||
<x-field name="headline" label="Headline" :value="$profile?->headline" />
|
||||
<x-field name="bio" label="Bio" :value="$profile?->bio" textarea />
|
||||
<x-field name="service_area" label="Service area" :value="$profile?->service_area" />
|
||||
<div>
|
||||
<label for="max_technician_level" class="block text-sm font-medium text-slate-800 dark:text-slate-200">Maximum technician level</label>
|
||||
<select id="max_technician_level" name="max_technician_level" class="mt-1 block w-full rounded-md border-slate-300 bg-white text-slate-950 shadow-sm focus:border-sky-500 focus:ring-sky-500 dark:border-slate-700 dark:bg-slate-950 dark:text-slate-100">
|
||||
@foreach ($technicianLevels as $level => $definition)
|
||||
<option value="{{ $level }}" @selected((int) ($profile?->max_technician_level ?? 1) === $level)>{{ $definition['name'] }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
<p class="mt-1 text-sm text-slate-500 dark:text-slate-400">This is self-declared until native work history, buyer endorsements, certifications, or admin verification support it.</p>
|
||||
</div>
|
||||
<x-field name="skills" label="Skills summary" :value="$profile?->skills" textarea />
|
||||
<div class="rounded-md border border-slate-200 p-4 dark:border-slate-800">
|
||||
<h3 class="font-semibold text-slate-950 dark:text-white">Self-declared tags and evidence</h3>
|
||||
<p class="mt-1 text-sm text-slate-600 dark:text-slate-400">Choose categories, specialties, skills, tools, and certifications that describe your work. Later passes can let buyers endorse or challenge these after completed work orders.</p>
|
||||
<div class="mt-3 grid gap-2 md:grid-cols-2">
|
||||
@foreach ($taxonomyTerms as $term)
|
||||
<label class="inline-flex items-center gap-2 rounded-md border border-slate-200 px-3 py-2 text-sm text-slate-700 dark:border-slate-800 dark:text-slate-300">
|
||||
<input type="checkbox" name="taxonomy_terms[]" value="{{ $term->id }}" @checked(in_array($term->id, $selectedTaxonomy, true)) class="rounded border-slate-300 text-sky-600 shadow-sm focus:ring-sky-500 dark:border-slate-700 dark:bg-slate-950">
|
||||
<span>{{ $term->name }} <span class="text-xs text-slate-500">({{ str_replace('_', ' ', $term->type) }})</span></span>
|
||||
</label>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
<x-field name="services_text" label="Structured services" :value="$servicesText" textarea help="One per line. Use: service name | level, for example POS install | experienced." />
|
||||
<x-field name="tools" label="Tools and equipment summary" :value="$profile?->tools" textarea />
|
||||
<x-field name="tool_inventory_text" label="Tool inventory" :value="$toolsText" textarea help="One per line. Use: tool name | category, for example Cable tester | network." />
|
||||
|
||||
@@ -27,6 +27,24 @@
|
||||
<label for="skill" class="block text-sm font-medium text-slate-800 dark:text-slate-200">Skill</label>
|
||||
<input id="skill" name="skill" value="{{ $filters['skill'] ?? '' }}" placeholder="POS, network, cabling" class="mt-1 block w-full rounded-md border-slate-300 bg-white text-slate-950 shadow-sm focus:border-sky-500 focus:ring-sky-500 dark:border-slate-700 dark:bg-slate-950 dark:text-slate-100">
|
||||
</div>
|
||||
<div>
|
||||
<label for="technician_level" class="block text-sm font-medium text-slate-800 dark:text-slate-200">Technician level</label>
|
||||
<select id="technician_level" name="technician_level" class="mt-1 block w-full rounded-md border-slate-300 bg-white text-slate-950 shadow-sm focus:border-sky-500 focus:ring-sky-500 dark:border-slate-700 dark:bg-slate-950 dark:text-slate-100">
|
||||
<option value="">Any level</option>
|
||||
@foreach ($technicianLevels as $level => $definition)
|
||||
<option value="{{ $level }}" @selected((int) ($filters['technician_level'] ?? 0) === $level)>{{ $definition['name'] }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<label for="taxonomy_term_id" class="block text-sm font-medium text-slate-800 dark:text-slate-200">Tag</label>
|
||||
<select id="taxonomy_term_id" name="taxonomy_term_id" class="mt-1 block w-full rounded-md border-slate-300 bg-white text-slate-950 shadow-sm focus:border-sky-500 focus:ring-sky-500 dark:border-slate-700 dark:bg-slate-950 dark:text-slate-100">
|
||||
<option value="">Any tag</option>
|
||||
@foreach ($taxonomyTerms as $term)
|
||||
<option value="{{ $term->id }}" @selected((int) ($filters['taxonomy_term_id'] ?? 0) === $term->id)>{{ $term->name }} ({{ str_replace('_', ' ', $term->type) }})</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<label for="insurance" class="block text-sm font-medium text-slate-800 dark:text-slate-200">Insurance</label>
|
||||
<input id="insurance" name="insurance" value="{{ $filters['insurance'] ?? '' }}" placeholder="Insured, COI available" class="mt-1 block w-full rounded-md border-slate-300 bg-white text-slate-950 shadow-sm focus:border-sky-500 focus:ring-sky-500 dark:border-slate-700 dark:bg-slate-950 dark:text-slate-100">
|
||||
@@ -65,6 +83,9 @@
|
||||
@if (request()->boolean('public_contact'))
|
||||
<x-badge tone="emerald">Public contact</x-badge>
|
||||
@endif
|
||||
@if (! empty($filters['technician_level']))
|
||||
<x-badge tone="sky">Level: {{ $technicianLevels[(int) $filters['technician_level']]['short_name'] ?? $filters['technician_level'] }}</x-badge>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -90,6 +111,7 @@
|
||||
@if ($profile->service_area)
|
||||
<x-badge tone="slate">{{ $profile->service_area }}</x-badge>
|
||||
@endif
|
||||
<x-badge tone="sky">{{ $profile->technicianLevel()['short_name'] }}</x-badge>
|
||||
@if ($profile->public_contact)
|
||||
<x-badge tone="emerald">Public contact</x-badge>
|
||||
@endif
|
||||
@@ -107,6 +129,13 @@
|
||||
@if ($profile->skills)
|
||||
<p class="mt-4 text-sm leading-6 text-slate-600 dark:text-slate-400">{{ \Illuminate\Support\Str::limit($profile->skills, 220) }}</p>
|
||||
@endif
|
||||
@if ($profile->taxonomyTerms->isNotEmpty())
|
||||
<div class="mt-3 flex flex-wrap gap-2">
|
||||
@foreach ($profile->taxonomyTerms->take(8) as $term)
|
||||
<x-badge tone="slate">{{ $term->name }}</x-badge>
|
||||
@endforeach
|
||||
</div>
|
||||
@endif
|
||||
</a>
|
||||
@empty
|
||||
<div class="tse-panel p-8 text-center lg:col-span-2">
|
||||
|
||||
@@ -18,6 +18,12 @@
|
||||
@if ($profile->insurance_status)
|
||||
<x-badge tone="sky">{{ $profile->insurance_status }}</x-badge>
|
||||
@endif
|
||||
<x-badge tone="sky">{{ $profile->technicianLevel()['name'] }}</x-badge>
|
||||
</div>
|
||||
<div class="mt-4 rounded-md border border-sky-200 bg-sky-50 p-4 text-sm text-sky-950 dark:border-sky-900 dark:bg-sky-950/40 dark:text-sky-100">
|
||||
<p class="font-semibold">{{ $profile->technicianLevel()['short_name'] }}</p>
|
||||
<p class="mt-1">{{ $profile->technicianLevel()['description'] }}</p>
|
||||
<p class="mt-2 text-xs">Level and tags are self-declared unless supported by buyer endorsements, completed TSE work, certification proof, or admin verification.</p>
|
||||
</div>
|
||||
|
||||
@if ($profile->visible('bio'))
|
||||
@@ -25,6 +31,16 @@
|
||||
@endif
|
||||
|
||||
<dl class="mt-6 grid gap-4 md:grid-cols-2">
|
||||
<div>
|
||||
<dt class="text-sm text-slate-500 dark:text-slate-400">Tags and evidence</dt>
|
||||
<dd class="mt-2 flex flex-wrap gap-2">
|
||||
@forelse ($profile->taxonomyTerms as $term)
|
||||
<x-badge tone="slate">{{ $term->name }}{{ $term->pivot?->evidence_source ? ' | '.str_replace('_', ' ', $term->pivot->evidence_source) : '' }}</x-badge>
|
||||
@empty
|
||||
<span class="text-sm text-slate-600 dark:text-slate-400">No taxonomy tags yet.</span>
|
||||
@endforelse
|
||||
</dd>
|
||||
</div>
|
||||
@if ($profile->visible('services'))
|
||||
<div>
|
||||
<dt class="text-sm text-slate-500 dark:text-slate-400">Services</dt>
|
||||
|
||||
Reference in New Issue
Block a user