feat: add CopyAssignmentLinkAction and CopyAttendanceLinkAction for sharing assignment and attendance links
This commit is contained in:
parent
ca90c308f1
commit
7bebb127eb
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Learning\ClassSessions\Actions;
|
||||||
|
|
||||||
|
use App\Filament\Support\SystemNotification;
|
||||||
|
use App\Models\ClassSession;
|
||||||
|
use Filament\Actions\Action;
|
||||||
|
|
||||||
|
class CopyAssignmentLinkAction extends Action
|
||||||
|
{
|
||||||
|
public static function getDefaultName(): ?string
|
||||||
|
{
|
||||||
|
return 'copyAssignmentLink';
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function setUp(): void
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
$this->label('Salin Tautan')
|
||||||
|
->color('gray')
|
||||||
|
->icon('heroicon-o-clipboard-document')
|
||||||
|
->action(function (array $arguments, $livewire) {
|
||||||
|
$course = $livewire->course;
|
||||||
|
$session = ClassSession::find($arguments['session'] ?? null);
|
||||||
|
|
||||||
|
$url = route('share.assignment', [
|
||||||
|
'course' => $course->id,
|
||||||
|
'session_id' => $session ? $session->id : null,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$livewire->js("if (navigator.clipboard) { navigator.clipboard.writeText('{$url}').catch(() => {}); }");
|
||||||
|
|
||||||
|
SystemNotification::success(
|
||||||
|
'Tautan Berhasil Disalin ✨',
|
||||||
|
'Tautan telah disalin ke clipboard dan siap untuk dibagikan.'
|
||||||
|
)->send();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Resources\Learning\ClassSessions\Actions;
|
||||||
|
|
||||||
|
use App\Filament\Support\SystemNotification;
|
||||||
|
use App\Models\ClassSession;
|
||||||
|
use Filament\Actions\Action;
|
||||||
|
|
||||||
|
class CopyAttendanceLinkAction extends Action
|
||||||
|
{
|
||||||
|
public static function getDefaultName(): ?string
|
||||||
|
{
|
||||||
|
return 'copyAttendanceLink';
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function setUp(): void
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
$this->label('Salin Tautan')
|
||||||
|
->color('gray')
|
||||||
|
->icon('heroicon-o-clipboard-document')
|
||||||
|
->action(function (array $arguments, $livewire) {
|
||||||
|
$course = $livewire->course;
|
||||||
|
$session = ClassSession::find($arguments['session'] ?? null);
|
||||||
|
$date = $session ? $session->date->toDateString() : null;
|
||||||
|
|
||||||
|
$url = route('share.attendance', ['course' => $course->id, 'date' => $date]);
|
||||||
|
|
||||||
|
$livewire->js("if (navigator.clipboard) { navigator.clipboard.writeText('{$url}').catch(() => {}); }");
|
||||||
|
|
||||||
|
SystemNotification::success(
|
||||||
|
'Tautan Berhasil Disalin ✨',
|
||||||
|
'Tautan telah disalin ke clipboard dan siap untuk dibagikan.'
|
||||||
|
)->send();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -21,9 +21,17 @@ protected function setUp(): void
|
|||||||
->icon('heroicon-o-paper-airplane')
|
->icon('heroicon-o-paper-airplane')
|
||||||
->color(Color::Fuchsia)
|
->color(Color::Fuchsia)
|
||||||
->link()
|
->link()
|
||||||
|
->requiresConfirmation()
|
||||||
|
->modalIcon('heroicon-o-paper-airplane')
|
||||||
|
->modalHeading('Bagikan Info Tugas')
|
||||||
|
->modalDescription('Pilih metode untuk membagikan tautan publik status pengumpulan tugas sesi ini.')
|
||||||
|
->modalSubmitActionLabel('Ke WhatsApp')
|
||||||
|
->modalCancelAction(false)
|
||||||
|
->extraModalFooterActions([
|
||||||
|
CopyAssignmentLinkAction::make(),
|
||||||
|
])
|
||||||
->action(function (array $arguments, $livewire) {
|
->action(function (array $arguments, $livewire) {
|
||||||
$course = $livewire->course;
|
$course = $livewire->course;
|
||||||
|
|
||||||
$session = ClassSession::find($arguments['session'] ?? null);
|
$session = ClassSession::find($arguments['session'] ?? null);
|
||||||
|
|
||||||
$url = route('share.assignment', [
|
$url = route('share.assignment', [
|
||||||
@ -39,10 +47,6 @@ protected function setUp(): void
|
|||||||
<<<JS
|
<<<JS
|
||||||
const text = {$escapedText};
|
const text = {$escapedText};
|
||||||
const url = 'https://wa.me/?text=' + encodeURIComponent(text);
|
const url = 'https://wa.me/?text=' + encodeURIComponent(text);
|
||||||
|
|
||||||
if (navigator.clipboard) {
|
|
||||||
navigator.clipboard.writeText(text).catch(() => {});
|
|
||||||
}
|
|
||||||
window.open(url, '_blank');
|
window.open(url, '_blank');
|
||||||
JS
|
JS
|
||||||
);
|
);
|
||||||
|
|||||||
@ -21,9 +21,17 @@ protected function setUp(): void
|
|||||||
->icon('heroicon-o-share')
|
->icon('heroicon-o-share')
|
||||||
->color(Color::Teal)
|
->color(Color::Teal)
|
||||||
->link()
|
->link()
|
||||||
|
->requiresConfirmation()
|
||||||
|
->modalIcon('heroicon-o-share')
|
||||||
|
->modalHeading('Bagikan Info Presensi')
|
||||||
|
->modalDescription('Pilih metode untuk membagikan tautan publik status presensi sesi ini.')
|
||||||
|
->modalSubmitActionLabel('Ke WhatsApp')
|
||||||
|
->modalCancelAction(false)
|
||||||
|
->extraModalFooterActions([
|
||||||
|
CopyAttendanceLinkAction::make(),
|
||||||
|
])
|
||||||
->action(function (array $arguments, $livewire) {
|
->action(function (array $arguments, $livewire) {
|
||||||
$course = $livewire->course;
|
$course = $livewire->course;
|
||||||
|
|
||||||
$session = ClassSession::find($arguments['session'] ?? null);
|
$session = ClassSession::find($arguments['session'] ?? null);
|
||||||
$date = $session ? $session->date->toDateString() : null;
|
$date = $session ? $session->date->toDateString() : null;
|
||||||
|
|
||||||
@ -37,10 +45,6 @@ protected function setUp(): void
|
|||||||
<<<JS
|
<<<JS
|
||||||
const text = {$escapedText};
|
const text = {$escapedText};
|
||||||
const url = 'https://wa.me/?text=' + encodeURIComponent(text);
|
const url = 'https://wa.me/?text=' + encodeURIComponent(text);
|
||||||
|
|
||||||
if (navigator.clipboard) {
|
|
||||||
navigator.clipboard.writeText(text).catch(() => {});
|
|
||||||
}
|
|
||||||
window.open(url, '_blank');
|
window.open(url, '_blank');
|
||||||
JS
|
JS
|
||||||
);
|
);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user