First Commit. Duplicate bunext-sqlite preset

This commit is contained in:
2026-10-18 16:47:11 +01:00
commit 81e4a8aecc
718 changed files with 41695 additions and 0 deletions
@@ -0,0 +1,102 @@
import type { BUN_SQLITE_BSQLITE_EMAILS } from "@/db/types/db";
import LucideIcon from "@moduletrace/twui/elements/lucide-icon";
import Tag from "@moduletrace/twui/elements/Tag";
import Button from "@moduletrace/twui/layout/Button";
import Row from "@moduletrace/twui/layout/Row";
import useStatus from "@moduletrace/twui/hooks/useStatus";
import { sendEmailRecord } from "@/src/functions/frontend/document-actions";
import clientSendEmail from "../(functions)/client-send-email";
import { AppContext } from "@/src/pages/__root";
import isReadOnlyUser from "@/src/utils/rbac/is-read-only-user";
import { useContext } from "react";
type Props = {
email: BUN_SQLITE_BSQLITE_EMAILS;
refresh?: () => void;
is_single_email_page?: boolean;
};
export default function EmailActions({
email,
refresh,
is_single_email_page,
}: Props) {
const { pageProps } = useContext(AppContext);
const is_read_only = isReadOnlyUser({
user_types: pageProps?.user_types,
});
const { loading, setLoading, status, setStatus } = useStatus();
const duplicate_url = `/admin/emails/create?from=${email.id}`;
const view_url = `/admin/emails/${email.id}`;
const edit_url = `/admin/emails/${email.id}/edit`;
return (
<>
<Row className="w-full justify-end gap-2!">
{is_single_email_page ? null : (
<Button
title="View Email"
variant="ghost"
color="gray"
href={view_url}
>
<LucideIcon name="Eye" size={16} />
</Button>
)}
{!is_read_only && email.status != "sent" ? (
<Button
title="Send Email"
variant="ghost"
color="secondary"
loading={loading}
onClick={() => {
clientSendEmail({
email,
setLoading,
refresh,
setStatus,
});
}}
>
<LucideIcon name="Send" size={16} />
</Button>
) : null}
{is_read_only ? null : (
<>
<Button
title="Create a New Email from this Record"
variant="ghost"
color="gray"
href={duplicate_url}
>
<LucideIcon name="Copy" size={16} />
</Button>
<Button
title="Edit Email"
variant="ghost"
color="gray"
href={edit_url}
>
<LucideIcon name="Edit2" size={16} />
</Button>
</>
)}
</Row>
{status?.error && (
<Row className="w-full justify-end">
<Tag color="error">{status.msg}</Tag>
</Row>
)}
{status?.success && !loading && (
<Row className="w-full justify-end">
<Tag color="success">{status.msg}</Tag>
</Row>
)}
</>
);
}