Compare commits
5 commits
d2919758f5
...
4b0d17e2ae
| Author | SHA1 | Date | |
|---|---|---|---|
| 4b0d17e2ae | |||
| ff855facda | |||
| a7317e376f | |||
| 3d58baf156 | |||
| 268bbfd05a |
10 changed files with 31 additions and 48 deletions
|
|
@ -20,7 +20,7 @@ public function definition(): array
|
|||
{
|
||||
return [
|
||||
'feed_id' => Feed::factory(),
|
||||
'url' => $this->faker->url(),
|
||||
'url' => $this->faker->unique()->url(),
|
||||
'title' => $this->faker->sentence(),
|
||||
'description' => $this->faker->paragraph(),
|
||||
'content' => $this->faker->paragraphs(3, true),
|
||||
|
|
|
|||
16
resources/views/components/page-header.blade.php
Normal file
16
resources/views/components/page-header.blade.php
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
@props(['title', 'subtitle' => null])
|
||||
|
||||
<div class="mb-8 flex items-start justify-between">
|
||||
<div>
|
||||
<h1 class="text-2xl font-bold text-gray-900">{{ $title }}</h1>
|
||||
@if ($subtitle)
|
||||
<p class="mt-1 text-sm text-gray-500">{{ $subtitle }}</p>
|
||||
@endif
|
||||
</div>
|
||||
<div class="flex items-center space-x-3">
|
||||
{{ $slot }}
|
||||
<div class="hidden lg:block">
|
||||
<livewire:notification-bell />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -66,9 +66,6 @@ class="p-2 rounded-md text-gray-400 hover:text-gray-600 hover:bg-gray-100"
|
|||
<nav class="mt-5 flex-1 px-2 bg-white">
|
||||
@include('layouts.navigation-items')
|
||||
</nav>
|
||||
<div class="flex-shrink-0 px-4 py-3 border-t border-gray-200">
|
||||
<livewire:notification-bell />
|
||||
</div>
|
||||
<div class="flex-shrink-0 p-4 border-t border-gray-200">
|
||||
<div class="flex items-center">
|
||||
<div class="flex-1 min-w-0">
|
||||
|
|
|
|||
|
|
@ -1,11 +1,5 @@
|
|||
<div class="p-6">
|
||||
<div class="mb-6 flex items-start justify-between">
|
||||
<div>
|
||||
<h1 class="text-2xl font-bold text-gray-900">Articles</h1>
|
||||
<p class="mt-1 text-sm text-gray-500">
|
||||
Review and manage article routing
|
||||
</p>
|
||||
</div>
|
||||
<x-page-header title="Articles" subtitle="Review and manage article routing">
|
||||
<button
|
||||
wire:click="refresh"
|
||||
wire:loading.attr="disabled"
|
||||
|
|
@ -19,7 +13,7 @@ class="inline-flex items-center px-4 py-2 border border-transparent text-sm font
|
|||
<span wire:loading.remove wire:target="refresh">{{ $isRefreshing ? 'Refreshing...' : 'Refresh' }}</span>
|
||||
<span wire:loading wire:target="refresh">Refreshing...</span>
|
||||
</button>
|
||||
</div>
|
||||
</x-page-header>
|
||||
|
||||
{{-- Tab bar --}}
|
||||
<div class="mb-6 border-b border-gray-200">
|
||||
|
|
|
|||
|
|
@ -1,10 +1,5 @@
|
|||
<div class="p-6">
|
||||
<div class="mb-8">
|
||||
<h1 class="text-2xl font-bold text-gray-900">Channels</h1>
|
||||
<p class="mt-1 text-sm text-gray-500">
|
||||
Manage your platform channels and linked accounts
|
||||
</p>
|
||||
</div>
|
||||
<x-page-header title="Channels" subtitle="Manage your platform channels and linked accounts" />
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
|
||||
@forelse ($channels as $channel)
|
||||
|
|
|
|||
|
|
@ -1,10 +1,5 @@
|
|||
<div class="p-6">
|
||||
<div class="mb-8">
|
||||
<h1 class="text-2xl font-bold text-gray-900">Dashboard</h1>
|
||||
<p class="mt-1 text-sm text-gray-500">
|
||||
Overview of your feed management system
|
||||
</p>
|
||||
</div>
|
||||
<x-page-header title="Dashboard" subtitle="Overview of your feed management system" />
|
||||
|
||||
<!-- System Statistics -->
|
||||
<div class="mb-8">
|
||||
|
|
|
|||
|
|
@ -1,10 +1,5 @@
|
|||
<div class="p-6">
|
||||
<div class="mb-8">
|
||||
<h1 class="text-2xl font-bold text-gray-900">Feeds</h1>
|
||||
<p class="mt-1 text-sm text-gray-500">
|
||||
Manage your news feed sources
|
||||
</p>
|
||||
</div>
|
||||
<x-page-header title="Feeds" subtitle="Manage your news feed sources" />
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
|
||||
@forelse ($feeds as $feed)
|
||||
|
|
|
|||
|
|
@ -1,11 +1,5 @@
|
|||
<div class="p-6">
|
||||
<div class="mb-8 flex items-center justify-between">
|
||||
<div>
|
||||
<h1 class="text-2xl font-bold text-gray-900">Routes</h1>
|
||||
<p class="mt-1 text-sm text-gray-500">
|
||||
Manage connections between your feeds and channels
|
||||
</p>
|
||||
</div>
|
||||
<x-page-header title="Routes" subtitle="Manage connections between your feeds and channels">
|
||||
<button
|
||||
wire:click="openCreateModal"
|
||||
class="inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500"
|
||||
|
|
@ -15,7 +9,7 @@ class="inline-flex items-center px-4 py-2 border border-transparent text-sm font
|
|||
</svg>
|
||||
Create Route
|
||||
</button>
|
||||
</div>
|
||||
</x-page-header>
|
||||
|
||||
<div class="space-y-6">
|
||||
@forelse ($routes as $route)
|
||||
|
|
@ -156,7 +150,7 @@ class="inline-flex items-center px-4 py-2 border border-transparent text-sm font
|
|||
|
||||
<span class="hidden sm:inline-block sm:align-middle sm:h-screen" aria-hidden="true">​</span>
|
||||
|
||||
<div class="inline-block align-bottom bg-white rounded-lg px-4 pt-5 pb-4 text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full sm:p-6">
|
||||
<div class="relative z-10 inline-block align-bottom bg-white rounded-lg px-4 pt-5 pb-4 text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full sm:p-6">
|
||||
<h3 class="text-lg font-medium text-gray-900 mb-4">Create New Route</h3>
|
||||
<form wire:submit="createRoute" class="space-y-4">
|
||||
<div>
|
||||
|
|
@ -238,7 +232,7 @@ class="px-4 py-2 text-sm font-medium text-white bg-blue-600 border border-transp
|
|||
|
||||
<span class="hidden sm:inline-block sm:align-middle sm:h-screen" aria-hidden="true">​</span>
|
||||
|
||||
<div class="inline-block align-bottom bg-white rounded-lg px-4 pt-5 pb-4 text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full sm:p-6">
|
||||
<div class="relative z-10 inline-block align-bottom bg-white rounded-lg px-4 pt-5 pb-4 text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full sm:p-6">
|
||||
<div class="flex items-center justify-between mb-4">
|
||||
<h3 class="text-lg font-medium text-gray-900">Edit Route</h3>
|
||||
<button wire:click="closeEditModal" class="text-gray-400 hover:text-gray-600">
|
||||
|
|
|
|||
|
|
@ -1,10 +1,5 @@
|
|||
<div class="p-6" x-data x-on:clear-message.window="setTimeout(() => $wire.clearMessages(), 3000)">
|
||||
<div class="mb-8">
|
||||
<h1 class="text-2xl font-bold text-gray-900">Settings</h1>
|
||||
<p class="mt-1 text-sm text-gray-500">
|
||||
Configure your system preferences
|
||||
</p>
|
||||
</div>
|
||||
<x-page-header title="Settings" subtitle="Configure your system preferences" />
|
||||
|
||||
<div class="space-y-6">
|
||||
<!-- Article Processing Settings -->
|
||||
|
|
@ -63,7 +58,7 @@ class="flex-shrink-0"
|
|||
min="0"
|
||||
max="1440"
|
||||
step="1"
|
||||
class="w-20 rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm"
|
||||
class="w-24 rounded-md border-gray-300 px-3 py-2 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 text-sm"
|
||||
/>
|
||||
<button
|
||||
wire:click="updateArticlePublishingInterval"
|
||||
|
|
@ -133,7 +128,7 @@ class="flex-shrink-0"
|
|||
wire:model="feedStalenessThreshold"
|
||||
min="0"
|
||||
step="1"
|
||||
class="w-20 rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm"
|
||||
class="w-24 rounded-md border-gray-300 px-3 py-2 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 text-sm"
|
||||
/>
|
||||
<button
|
||||
wire:click="updateFeedStalenessThreshold"
|
||||
|
|
|
|||
|
|
@ -100,6 +100,8 @@ public function test_cascade_deletes_route_articles(): void
|
|||
|
||||
public function test_preserves_article_at_exact_retention_boundary(): void
|
||||
{
|
||||
$this->freezeTime();
|
||||
|
||||
$boundary = Article::factory()->for(Feed::factory())->create([
|
||||
'created_at' => now()->subDays(30),
|
||||
]);
|
||||
|
|
|
|||
Loading…
Reference in a new issue