import { useState } from "react";
import { useIntl } from "react-intl";
import { Input } from "@/components/input";
import { Label } from "@/components/label";
import { Collapse } from "@/components/collapse";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faGripVertical } from "@fortawesome/free-solid-svg-icons";
import { ChevronDownIcon } from "@heroicons/react/solid";
import { ChevronRightIcon } from "@heroicons/react/solid";
import classNames from "classnames";
import { TrashIcon } from "@heroicons/react/solid";
import { useUpdateEffect } from "react-use";
import { PlusIcon } from "@heroicons/react/solid";
import { ColorPicker } from "@/components/color-picker";
import { Switch } from "@/components/switch";
import { PaperAirplaneIcon } from "@heroicons/react/solid";
import { rgbaToHex } from "@/utils";
import { useMessage } from "@/components/message-editor/useMessage";
export default function EmbedsEditor() {
const intl = useIntl();
const [message, setMessage] = useState({
content: "",
embeds: [],
buttons: [],
});
const [webhookUrl, setWebhookUrl] = useState("");
const { post } = useMessage();
return (
);
}
const Form = ({
message,
setMessage,
}: {
message: any;
setMessage: (e: any) => void;
}) => {
return (
<>
Embeds{" "}
{message?.embeds?.length ?? 0} / 10
}
parentClassName="col-span-2"
onOpenClassName="rounded-b-none"
className="bg-blue rounded-lg p-4 text-white font-sans text-base uppercase tracking-wider font-semibold"
>
setMessage({ ...message, embeds })}
/>
Link Buttons
{message?.buttons?.length ?? 0} / 25
}
parentClassName="col-span-2"
onOpenClassName="rounded-b-none"
className="bg-blue rounded-lg p-4 text-white font-sans text-base uppercase tracking-wider font-semibold"
>
setMessage({ ...message, buttons })}
/>
>
);
};
const Embeds = ({
embeds,
setEmbeds,
}: {
embeds: any[];
setEmbeds: (e: any) => void;
}) => {
const [open, setOpen] = useState(0);
const onDelete = (i: number) => {
const newEmbeds = embeds ?? [];
newEmbeds.splice(i, 1);
setEmbeds(newEmbeds);
};
const setEmbed = (embed: any, index: number) => {
const newEmbeds = embeds ?? [];
newEmbeds[index] = embed;
setEmbeds(newEmbeds);
};
useUpdateEffect(() => setOpen(embeds?.length - 1), [embeds]);
return (
<>
{embeds?.map((embed: any, i: number) => (
setOpen(open === i ? -1 : i)}
>
{
e.preventDefault();
e.stopPropagation();
}}
>
onDelete(i)}
/>
{open === i && (
setEmbed({ ...embed, author }, i)}
/>
setEmbed({ ...embed }, i)}
/>
setEmbed({ ...embed, fields }, i)}
/>
setEmbed({ ...newEmbed }, i)}
/>
)}
{embeds?.length > 1 && (
)}
))}
>
);
};
const Buttons = ({
buttons,
setButtons,
}: {
buttons: any[];
setButtons: (e: any) => void;
}) => {
const [open, setOpen] = useState(0);
const onDelete = (i: number) => {
const newButtons = buttons ?? [];
newButtons.splice(i, 1);
setButtons(newButtons);
};
const setButton = (button: any, index: number) => {
const newButtons = buttons ?? [];
newButtons[index] = button;
setButtons(newButtons);
};
useUpdateEffect(() => setOpen(buttons?.length - 1), [buttons]);
return (
<>
{buttons?.map((button: any, i: number) => (
setOpen(open === i ? -1 : i)}
>
{
e.preventDefault();
e.stopPropagation();
}}
>
onDelete(i)}
/>
{open === i && (
)}
{buttons?.length > 1 && (
)}
))}
>
);
};
const Author = ({
author,
setAuthor,
}: {
author: any;
setAuthor: (a: any) => void;
}) => {
const [open, setOpen] = useState(true);
return (
setOpen(!open)}
>
Author
{open && (
)}
);
};
const Body = ({
embed,
setEmbed,
}: {
embed: any;
setEmbed: (a: any) => void;
}) => {
const [open, setOpen] = useState(true);
return (
setOpen(!open)}
>
Body
{open && (
)}
);
};
const Images = ({
embed,
setEmbed,
}: {
embed: any;
setEmbed: (a: any) => void;
}) => {
const [open, setOpen] = useState(true);
return (
setOpen(!open)}
>
Images
{open && (
)}
);
};
const Fields = ({
fields,
setFields,
}: {
fields: any;
setFields: (a: any) => void;
}) => {
const [open, setOpen] = useState(true);
return (
setOpen(!open)}
>
Fields
{fields?.length ?? 0}/25
{open && (
{fields?.map((field: any, i: number) => (
{
const newFields = fields ?? [];
newFields[i] = newField;
setFields(newFields);
}}
onDelete={() => {
const newFields = fields ?? [];
newFields.splice(i, 1);
setFields(newFields);
}}
/>
))}
)}
);
};
const Field = ({
field,
index,
setField,
onDelete,
}: {
field: any;
index: number;
setField: (e: any) => void;
onDelete: () => void;
}) => {
const [open, setOpen] = useState(true);
return (
setOpen(!open)}
>
{
e.preventDefault();
e.stopPropagation();
}}
>
{open && (
<>
setField({ ...field, value })}
/>
>
)}
);
};
const Footer = ({
embed,
setEmbed,
}: {
embed: any;
setEmbed: (a: any) => void;
}) => {
const [open, setOpen] = useState(true);
return (
setOpen(!open)}
>
Body
{open && (
)}
);
};