Updated list of commands to v4.3. Added groups & permissions. Added connections. Updated redemptions and actions to v4.3.
This commit is contained in:
176
app/(protected)/settings/redemptions/page.tsx
Normal file
176
app/(protected)/settings/redemptions/page.tsx
Normal file
@ -0,0 +1,176 @@
|
||||
"use client";
|
||||
|
||||
import axios from "axios";
|
||||
import * as React from 'react';
|
||||
import { useEffect, useState } from "react";
|
||||
import { useSession } from "next-auth/react";
|
||||
import RedeemptionAction from "@/components/elements/redeemable-action";
|
||||
import OBSRedemption from "@/components/elements/redemption";
|
||||
import { ActionType } from "@prisma/client";
|
||||
import InfoNotice from "@/components/elements/info-notice";
|
||||
import { string } from "zod";
|
||||
|
||||
const obsTransformations = [
|
||||
{ label: "scene_name", description: "", placeholder: "Name of the OBS scene" },
|
||||
{ label: "scene_item_name", description: "", placeholder: "Name of the OBS scene item / source" },
|
||||
{ label: "rotation", description: "", placeholder: "An expression using x as the previous value" },
|
||||
{ label: "position_x", description: "", placeholder: "An expression using x as the previous value" },
|
||||
{ label: "position_y", description: "", placeholder: "An expression using x as the previous value" },
|
||||
]
|
||||
|
||||
const customTwitchRedemptions = [
|
||||
{
|
||||
id: 'adbreak',
|
||||
title: 'Adbreak (TTS redemption)'
|
||||
},
|
||||
{
|
||||
id: 'follow',
|
||||
title: 'New Follower (TTS redemption)'
|
||||
},
|
||||
{
|
||||
id: 'subscription',
|
||||
title: 'Subscription (TTS redemption)'
|
||||
},
|
||||
{
|
||||
id: 'subscription.gift',
|
||||
title: 'Subscription Gifted (TTS redemption)'
|
||||
},
|
||||
]
|
||||
|
||||
const RedemptionsPage = () => {
|
||||
const { data: session, status } = useSession();
|
||||
const [actions, setActions] = useState<{ name: string, type: string, data: any }[]>([])
|
||||
const [twitchRedemptions, setTwitchRedemptions] = useState<{ id: string, title: string }[]>([])
|
||||
const [connections, setConnections] = useState<{ name: string, clientId: string, type: string, scope: string, expiresAt: Date }[]>([])
|
||||
const [redemptions, setRedemptions] = useState<{ id: string, redemptionId: string, actionName: string, order: number }[]>([])
|
||||
|
||||
function addAction(name: string, type: ActionType, data: { [key: string]: string }) {
|
||||
setActions([...actions, { name, type, data }])
|
||||
}
|
||||
|
||||
function removeAction(action: { name: string, type: string, data: any }) {
|
||||
setActions(actions.filter(a => a.name != action.name))
|
||||
}
|
||||
|
||||
function addRedemption(id: string, actionName: string, redemptionId: string, order: number) {
|
||||
setRedemptions([...redemptions, { id, redemptionId, actionName, order }])
|
||||
}
|
||||
|
||||
function removeRedemption(redemption: { id: string, redemptionId: string, actionName: string, order: number }) {
|
||||
setRedemptions(redemptions.filter(r => r.id != redemption.id))
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
if (status !== "authenticated")
|
||||
return
|
||||
|
||||
axios.get('/api/connection')
|
||||
.then(d => {
|
||||
console.log(d.data.data)
|
||||
setConnections(d.data.data)
|
||||
})
|
||||
|
||||
axios.get("/api/settings/redemptions/actions")
|
||||
.then(d => {
|
||||
setActions(d.data)
|
||||
})
|
||||
|
||||
axios.get("/api/account/redemptions")
|
||||
.then(d => {
|
||||
let res : { id: string, title: string }[] = d.data?.data ?? []
|
||||
res = [ ...res, ...customTwitchRedemptions ]
|
||||
setTwitchRedemptions(res.sort((a, b) => {
|
||||
if (a.title < b.title)
|
||||
return -1
|
||||
else if (a.title > b.title)
|
||||
return 1
|
||||
return 0
|
||||
}))
|
||||
|
||||
axios.get("/api/settings/redemptions")
|
||||
.then(d => {
|
||||
setRedemptions(d.data)
|
||||
})
|
||||
})
|
||||
}, [session])
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className="text-2xl text-center pt-[50px]">Redemption Actions</div>
|
||||
<InfoNotice
|
||||
message="Redemption actions are activated when specific Twitch channel point redeems have been activated. Aforementioned redeem need to be linked in the redemption part, together with the action, for the action to activate."
|
||||
hidden={false} />
|
||||
{actions.map(action =>
|
||||
<div
|
||||
className="px-10 py-3 w-full h-full flex-grow inset-y-1/2"
|
||||
key={action.name}>
|
||||
<RedeemptionAction
|
||||
name={action.name}
|
||||
type={action.type}
|
||||
data={action.data}
|
||||
edit={false}
|
||||
showEdit={true}
|
||||
isNew={false}
|
||||
obsTransformations={obsTransformations}
|
||||
connections={connections}
|
||||
adder={addAction}
|
||||
remover={removeAction} />
|
||||
</div>
|
||||
)}
|
||||
<div
|
||||
className="px-10 py-3 w-full h-full flex-grow inset-y-1/2">
|
||||
<RedeemptionAction
|
||||
name=""
|
||||
type={undefined}
|
||||
data={{}}
|
||||
edit={true}
|
||||
showEdit={false}
|
||||
isNew={true}
|
||||
obsTransformations={obsTransformations}
|
||||
connections={connections}
|
||||
adder={addAction}
|
||||
remover={removeAction} />
|
||||
</div>
|
||||
|
||||
<div className="text-2xl text-center pt-[50px]">Redemptions</div>
|
||||
<InfoNotice
|
||||
message="Redemptions are just a way to link specific actions to actual Twitch channel point redeems."
|
||||
hidden={false} />
|
||||
{redemptions.map(redemption =>
|
||||
<div
|
||||
className="px-10 py-3 w-full h-full flex-grow inset-y-1/2"
|
||||
key={redemption.id}>
|
||||
<OBSRedemption
|
||||
id={redemption.id}
|
||||
redemptionId={redemption.redemptionId}
|
||||
actionName={redemption.actionName}
|
||||
numbering={redemption.order}
|
||||
edit={false}
|
||||
showEdit={true}
|
||||
isNew={false}
|
||||
actions={actions.map(a => a.name)}
|
||||
twitchRedemptions={twitchRedemptions}
|
||||
adder={addRedemption}
|
||||
remover={removeRedemption} />
|
||||
</div>
|
||||
)}
|
||||
<div
|
||||
className="px-10 py-3 w-full h-full flex-grow inset-y-1/2">
|
||||
<OBSRedemption
|
||||
id={undefined}
|
||||
redemptionId={undefined}
|
||||
actionName=""
|
||||
numbering={0}
|
||||
edit={true}
|
||||
showEdit={false}
|
||||
isNew={true}
|
||||
actions={actions.map(a => a.name)}
|
||||
twitchRedemptions={twitchRedemptions}
|
||||
adder={addRedemption}
|
||||
remover={removeRedemption} />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default RedemptionsPage;
|
Reference in New Issue
Block a user