feat: Lauf von Hand anstossen und Spiegelschalter in der Liste
Direkt nach dem Einrichten wuesste man sonst erst beim naechsten Takt, ob die Zugangsdaten stimmen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
3befcc19a3
commit
f5eadefdbb
@@ -0,0 +1,46 @@
|
||||
'use client'
|
||||
|
||||
import { useTransition } from 'react'
|
||||
import { useRouter } from 'next/navigation'
|
||||
import { Loader2, RefreshCw } from 'lucide-react'
|
||||
import { toast } from 'sonner'
|
||||
import { Button } from '@/components/ui/button'
|
||||
import { laufAnstossen } from '@/server/aktionen/integrationen'
|
||||
|
||||
/**
|
||||
* Stößt einen Lauf von Hand an.
|
||||
*
|
||||
* Vor allem direkt nach dem Einrichten: Sonst wüsste man erst beim nächsten
|
||||
* Takt, ob die Zugangsdaten stimmen.
|
||||
*/
|
||||
export function LaufKnopf({ quelle }: { quelle: string }) {
|
||||
const router = useRouter()
|
||||
const [laeuft, starte] = useTransition()
|
||||
|
||||
return (
|
||||
<Button
|
||||
art="umriss"
|
||||
disabled={laeuft}
|
||||
onClick={() => {
|
||||
starte(async () => {
|
||||
const daten = new FormData()
|
||||
daten.set('quelle', quelle)
|
||||
const antwort = await laufAnstossen(daten)
|
||||
if (antwort.ok) {
|
||||
toast.success(antwort.meldung)
|
||||
router.refresh()
|
||||
} else {
|
||||
toast.error(antwort.fehler)
|
||||
}
|
||||
})
|
||||
}}
|
||||
>
|
||||
{laeuft ? (
|
||||
<Loader2 className="animate-spin" aria-hidden />
|
||||
) : (
|
||||
<RefreshCw aria-hidden />
|
||||
)}
|
||||
Jetzt abrufen
|
||||
</Button>
|
||||
)
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
import type { Metadata } from 'next'
|
||||
import { Plug } from 'lucide-react'
|
||||
import { LaufKnopf } from '@/app/(app)/integrationen/lauf-knopf'
|
||||
import { TelegramChats } from '@/app/(app)/integrationen/telegram-chats'
|
||||
import {
|
||||
Card,
|
||||
@@ -27,6 +28,8 @@ type Zeile = {
|
||||
/** Und auch eingerichtet? */
|
||||
aktiv: boolean
|
||||
hinweis: string
|
||||
/** Laesst sich der Lauf von Hand anstossen? Der Empfaenger wartet nur. */
|
||||
abrufbar?: boolean
|
||||
}
|
||||
|
||||
export default async function IntegrationenSeite() {
|
||||
@@ -59,6 +62,7 @@ export default async function IntegrationenSeite() {
|
||||
vorgesehen: einst.instanz === 'firma',
|
||||
aktiv: einst.zammadAktiv,
|
||||
hinweis: 'ZAMMAD_URL und ZAMMAD_TOKEN fehlen.',
|
||||
abrufbar: einst.zammadAktiv,
|
||||
},
|
||||
{
|
||||
quelle: 'WARTUNGSPLANER',
|
||||
@@ -77,6 +81,7 @@ export default async function IntegrationenSeite() {
|
||||
vorgesehen: einst.instanz === 'daheim',
|
||||
aktiv: einst.telegramAktiv,
|
||||
hinweis: 'TELEGRAM_TOKEN fehlt.',
|
||||
abrufbar: einst.telegramAktiv,
|
||||
},
|
||||
{
|
||||
quelle: 'SPIEGEL',
|
||||
@@ -88,6 +93,8 @@ export default async function IntegrationenSeite() {
|
||||
vorgesehen: true,
|
||||
aktiv: einst.spiegelSendenAktiv || einst.spiegelEmpfangenAktiv,
|
||||
hinweis: 'SPIEGEL_GEHEIMNIS fehlt.',
|
||||
// Die empfangende Seite ruft nichts ab – sie wartet.
|
||||
abrufbar: einst.spiegelSendenAktiv,
|
||||
},
|
||||
]
|
||||
|
||||
@@ -141,6 +148,12 @@ export default async function IntegrationenSeite() {
|
||||
</p>
|
||||
)}
|
||||
{!zustand && zeile.aktiv && <p>Noch kein Lauf.</p>}
|
||||
|
||||
{zeile.abrufbar && (
|
||||
<div className="pt-2">
|
||||
<LaufKnopf quelle={zeile.quelle} />
|
||||
</div>
|
||||
)}
|
||||
</CardInhalt>
|
||||
</Card>
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user