import { getCollectionTitle } from "@/entrypoints/sidepanel/utils/getCollectionTitle"; import { track } from "@/features/analytics"; import { useGroupColors } from "@/hooks/useGroupColors"; import { CollectionItem, GroupItem } from "@/models/CollectionModels"; import * as fui from "@fluentui/react-components"; import { Circle20Filled, CircleOff20Regular, Pin20Filled, Rename20Regular } from "@fluentui/react-icons"; import { ReactElement } from "react"; import { useStyles_EditDialog } from "./EditDialog.styles"; export default function EditDialog(props: GroupEditDialogProps): ReactElement { const [title, setTitle] = useState( (props.type === "collection" ? props.collection?.title : (props.group?.pinned !== true ? props.group?.title : "")) ?? "" ); const [color, setColor] = useState<`${Browser.tabGroups.Color}` | undefined | "pinned">( props.type === "collection" ? props.collection?.color : props.group?.pinned === true ? "pinned" : (props.group?.color ?? "blue") ); const cls = useStyles_EditDialog(); const colorCls = useGroupColors(); const horizontalNavigationAttributes = fui.useArrowNavigationGroup({ axis: "horizontal" }); const onSubmit = (e: React.FormEvent) => { e.preventDefault(); handleSave(); }; const handleSave = () => { if (props.type === "collection" ? props.collection !== null : props.group !== null) track("item_edited", { type: props.type }); else track("item_created", { type: props.type }); if (props.type === "collection") props.onSave({ type: "collection", timestamp: props.collection?.timestamp ?? Date.now(), color: (color === "pinned") ? undefined : color!, title: title ? title : undefined, items: props.collection?.items ?? [] }); else if (color === "pinned") props.onSave({ type: "group", pinned: true, items: props.group?.items ?? [] }); else props.onSave({ type: "group", pinned: false, color: color!, title: title ? title : undefined, items: props.group?.items ?? [] }); }; return (
{ props.type === "collection" ? i18n.t(`dialogs.edit.title.${props.collection ? "edit" : "new"}_collection`) : i18n.t(`dialogs.edit.title.${props.group ? "edit" : "new"}_group`) }
} disabled={ color === "pinned" } placeholder={ props.type === "collection" ? getCollectionTitle(props.collection, true) : "" } value={ color === "pinned" ? i18n.t("groups.pinned") : title } onChange={ (_, e) => setTitle(e.value) } />
{ (props.type === "group" && (!props.hidePinned || props.group?.pinned)) && setColor("pinned") } icon={ } shape="circular" > { i18n.t("groups.pinned") } } { props.type === "collection" && setColor(undefined) } icon={ } shape="circular" > { i18n.t("colors.none") } } { Object.keys(colorCls).map(i => setColor(i as `${Browser.tabGroups.Color}`) } className={ fui.mergeClasses(cls.colorButton, colorCls[i as `${Browser.tabGroups.Color}`]) } icon={ { className: cls.colorButton_icon, children: } } key={ i } shape="circular" > { i18n.t(`colors.${i as `${Browser.tabGroups.Color}`}`) } ) }
{ i18n.t("common.actions.save") } { i18n.t("common.actions.cancel") }
); } export type GroupEditDialogProps = { type: "collection"; collection?: CollectionItem; onSave: (item: CollectionItem) => void; } | { type: "group"; hidePinned?: boolean; group?: GroupItem; onSave: (item: GroupItem) => void; };