[增添]添加了datasource的setting数据库以及默认值

This commit is contained in:
makotocc0107
2024-08-27 09:57:44 +08:00
parent d111dfaea4
commit 72eb990970
10955 changed files with 978898 additions and 0 deletions

View File

@@ -0,0 +1,11 @@
@props([
'actions',
])
<div
{{ $attributes->class(['fi-no-notification-actions flex gap-x-3']) }}
>
@foreach ($actions as $action)
{{ $action }}
@endforeach
</div>

View File

@@ -0,0 +1,5 @@
<div
{{ $attributes->class(['fi-no-notification-body overflow-hidden break-words text-sm text-gray-500 dark:text-gray-400']) }}
>
{{ $slot }}
</div>

View File

@@ -0,0 +1,7 @@
<x-filament::icon-button
color="gray"
icon="heroicon-m-x-mark"
icon-alias="notifications::notification.close-button"
x-on:click="close"
class="fi-no-notification-close-btn"
/>

View File

@@ -0,0 +1,19 @@
@props([
'channel',
])
<div
x-data="{}"
x-init="
window.addEventListener('EchoLoaded', () => {
window.Echo.private(@js($channel)).listen('.database-notifications.sent', () => {
setTimeout(() => $wire.call('$refresh'), 500)
})
})
if (window.Echo) {
window.dispatchEvent(new CustomEvent('EchoLoaded'))
}
"
{{ $attributes }}
></div>

View File

@@ -0,0 +1,27 @@
@props([
'notifications',
'unreadNotificationsCount',
])
<div {{ $attributes->class('mt-2 flex gap-x-3') }}>
@if ($unreadNotificationsCount)
<x-filament::link
color="primary"
tabindex="-1"
tag="button"
wire:click="markAllNotificationsAsRead"
>
{{ __('filament-notifications::database.modal.actions.mark_all_as_read.label') }}
</x-filament::link>
@endif
<x-filament::link
color="danger"
tabindex="-1"
tag="button"
wire:click="clearNotifications"
x-on:click="close()"
>
{{ __('filament-notifications::database.modal.actions.clear.label') }}
</x-filament::link>
</div>

View File

@@ -0,0 +1,18 @@
@props([
'unreadNotificationsCount',
])
<x-filament::modal.heading>
<span class="relative">
{{ __('filament-notifications::database.modal.heading') }}
@if ($unreadNotificationsCount)
<x-filament::badge
size="xs"
class="absolute -top-1 start-full ms-1 w-max"
>
{{ $unreadNotificationsCount }}
</x-filament::badge>
@endif
</span>
</x-filament::modal.heading>

View File

@@ -0,0 +1,64 @@
@props([
'notifications',
'unreadNotificationsCount',
])
@php
use Filament\Support\Enums\Alignment;
$hasNotifications = $notifications->count();
$isPaginated = $notifications instanceof \Illuminate\Contracts\Pagination\Paginator && $notifications->hasPages();
@endphp
<x-filament::modal
:alignment="$hasNotifications ? null : Alignment::Center"
close-button
:description="$hasNotifications ? null : __('filament-notifications::database.modal.empty.description')"
:heading="$hasNotifications ? null : __('filament-notifications::database.modal.empty.heading')"
:icon="$hasNotifications ? null : 'heroicon-o-bell-slash'"
:icon-alias="$hasNotifications ? null : 'notifications::database.modal.empty-state'"
:icon-color="$hasNotifications ? null : 'gray'"
id="database-notifications"
slide-over
:sticky-header="$hasNotifications"
width="md"
>
@if ($hasNotifications)
<x-slot name="header">
<div>
<x-filament-notifications::database.modal.heading
:unread-notifications-count="$unreadNotificationsCount"
/>
<x-filament-notifications::database.modal.actions
:notifications="$notifications"
:unread-notifications-count="$unreadNotificationsCount"
/>
</div>
</x-slot>
<div
@class([
'-mx-6 -mt-6 divide-y divide-gray-200 dark:divide-white/10',
'-mb-6' => ! $isPaginated,
'border-b border-gray-200 dark:border-white/10' => $isPaginated,
])
>
@foreach ($notifications as $notification)
<div
@class([
'relative before:absolute before:start-0 before:h-full before:w-0.5 before:bg-primary-600 dark:before:bg-primary-500' => $notification->unread(),
])
>
{{ $this->getNotification($notification)->inline() }}
</div>
@endforeach
</div>
@if ($isPaginated)
<x-slot name="footer">
<x-filament::pagination :paginator="$notifications" />
</x-slot>
@endif
@endif
</x-filament::modal>

View File

@@ -0,0 +1,7 @@
<div
x-data="{}"
x-on:click="$dispatch('open-modal', { id: 'database-notifications' })"
{{ $attributes->class(['inline-block']) }}
>
{{ $slot }}
</div>

View File

@@ -0,0 +1,5 @@
<time
{{ $attributes->class(['fi-no-notification-date text-sm text-gray-500 dark:text-gray-400']) }}
>
{{ $slot }}
</time>

View File

@@ -0,0 +1,19 @@
@props([
'channel',
])
<div
x-data="{}"
x-init="
window.addEventListener('EchoLoaded', () => {
window.Echo.private(@js($channel)).notification((notification) => {
setTimeout(() => $wire.handleBroadcastNotification(notification), 500)
})
})
if (window.Echo) {
window.dispatchEvent(new CustomEvent('EchoLoaded'))
}
"
{{ $attributes }}
></div>

View File

@@ -0,0 +1,37 @@
@php
use Filament\Support\Enums\IconSize;
@endphp
@props([
'color' => 'gray',
'icon',
'size' => IconSize::Large,
])
<x-filament::icon
:icon="$icon"
:attributes="
$attributes
->class([
'fi-no-notification-icon',
match ($color) {
'gray' => 'text-gray-400',
default => 'fi-color-custom text-custom-400',
},
is_string($color) ? 'fi-color-' . $color : null,
match ($size) {
IconSize::Small, 'sm' => 'h-4 w-4',
IconSize::Medium, 'md' => 'h-5 w-5',
IconSize::Large, 'lg' => 'h-6 w-6',
default => $size,
},
])
->style([
\Filament\Support\get_color_css_variables(
$color,
shades: [400],
alias: 'notifications::notification.icon',
),
])
"
/>

View File

@@ -0,0 +1,16 @@
@props([
'notification',
])
<div
x-data="notificationComponent({ notification: @js($notification) })"
{{
$attributes
->merge([
'wire:key' => "{$this->getId()}.notifications.{$notification->getId()}",
], escape: false)
->class(['pointer-events-auto invisible'])
}}
>
{{ $slot }}
</div>

View File

@@ -0,0 +1,5 @@
<h3
{{ $attributes->class(['fi-no-notification-title text-sm font-medium text-gray-950 dark:text-white']) }}
>
{{ $slot }}
</h3>

View File

@@ -0,0 +1,28 @@
@php
$notifications = $this->getNotifications();
$unreadNotificationsCount = $this->getUnreadNotificationsCount();
@endphp
<div
@if ($pollingInterval = $this->getPollingInterval())
wire:poll.{{ $pollingInterval }}
@endif
class="flex"
>
@if ($trigger = $this->getTrigger())
<x-filament-notifications::database.trigger>
{{ $trigger->with(['unreadNotificationsCount' => $unreadNotificationsCount]) }}
</x-filament-notifications::database.trigger>
@endif
<x-filament-notifications::database.modal
:notifications="$notifications"
:unread-notifications-count="$unreadNotificationsCount"
/>
@if ($broadcastChannel = $this->getBroadcastChannel())
<x-filament-notifications::database.echo
:channel="$broadcastChannel"
/>
@endif
</div>

View File

@@ -0,0 +1,116 @@
@php
use Filament\Notifications\Livewire\Notifications;
use Filament\Support\Enums\Alignment;
use Filament\Support\Enums\VerticalAlignment;
use Illuminate\Support\Arr;
$color = $getColor() ?? 'gray';
$isInline = $isInline();
$status = $getStatus();
$title = $getTitle();
$hasTitle = filled($title);
$date = $getDate();
$hasDate = filled($date);
$body = $getBody();
$hasBody = filled($body);
@endphp
<x-filament-notifications::notification
:notification="$notification"
:x-transition:enter-start="
Arr::toCssClasses([
'opacity-0',
($this instanceof Notifications)
? match (static::$alignment) {
Alignment::Start, Alignment::Left => '-translate-x-12',
Alignment::End, Alignment::Right => 'translate-x-12',
Alignment::Center => match (static::$verticalAlignment) {
VerticalAlignment::Start => '-translate-y-12',
VerticalAlignment::End => 'translate-y-12',
default => null,
},
default => null,
}
: null,
])
"
:x-transition:leave-end="
Arr::toCssClasses([
'opacity-0',
'scale-95' => ! $isInline,
])
"
@class([
'fi-no-notification w-full overflow-hidden transition duration-300',
...match ($isInline) {
true => [
'fi-inline',
],
false => [
'max-w-sm rounded-xl bg-white shadow-lg ring-1 dark:bg-gray-900',
match ($color) {
'gray' => 'ring-gray-950/5 dark:ring-white/10',
default => 'fi-color-custom ring-custom-600/20 dark:ring-custom-400/30',
},
is_string($color) ? 'fi-color-' . $color : null,
'fi-status-' . $status => $status,
],
},
])
@style([
\Filament\Support\get_color_css_variables(
$color,
shades: [50, 400, 600],
alias: 'notifications::notification',
) => ! ($isInline || $color === 'gray'),
])
>
<div
@class([
'flex w-full gap-3 p-4',
match ($color) {
'gray' => null,
default => 'bg-custom-50 dark:bg-custom-400/10',
},
])
>
@if ($icon = $getIcon())
<x-filament-notifications::icon
:color="$getIconColor()"
:icon="$icon"
:size="$getIconSize()"
/>
@endif
<div class="mt-0.5 grid flex-1">
@if ($hasTitle)
<x-filament-notifications::title>
{{ str($title)->sanitizeHtml()->toHtmlString() }}
</x-filament-notifications::title>
@endif
@if ($hasDate)
<x-filament-notifications::date @class(['mt-1' => $hasTitle])>
{{ $date }}
</x-filament-notifications::date>
@endif
@if ($hasBody)
<x-filament-notifications::body
@class(['mt-1' => $hasTitle || $hasDate])
>
{{ str($body)->sanitizeHtml()->toHtmlString() }}
</x-filament-notifications::body>
@endif
@if ($actions = $getActions())
<x-filament-notifications::actions
:actions="$actions"
@class(['mt-3' => $hasTitle || $hasDate || $hasBody])
/>
@endif
</div>
<x-filament-notifications::close-button />
</div>
</x-filament-notifications::notification>

View File

@@ -0,0 +1,32 @@
@php
use Filament\Support\Enums\Alignment;
use Filament\Support\Enums\VerticalAlignment;
@endphp
<div>
<div
@class([
'fi-no pointer-events-none fixed inset-4 z-50 mx-auto flex gap-3',
match (static::$alignment) {
Alignment::Start, Alignment::Left => 'items-start',
Alignment::Center => 'items-center',
Alignment::End, Alignment::Right => 'items-end',
default => null,
},
match (static::$verticalAlignment) {
VerticalAlignment::Start => 'flex-col-reverse justify-end',
VerticalAlignment::End => 'flex-col justify-end',
VerticalAlignment::Center => 'flex-col justify-center',
},
])
role="status"
>
@foreach ($notifications as $notification)
{{ $notification }}
@endforeach
</div>
@if ($broadcastChannel = $this->getBroadcastChannel())
<x-filament-notifications::echo :channel="$broadcastChannel" />
@endif
</div>