feature/IO-3499-React-19: Production Note + Comment edit in job details header / card

This commit is contained in:
Dave
2026-01-19 14:18:51 -05:00
parent 8bd7e5cc6d
commit 7a0187afbe
2 changed files with 76 additions and 57 deletions

View File

@@ -18,6 +18,7 @@ export default function ProductionListColumnComment({ record }) {
const handleSaveNote = (e) => { const handleSaveNote = (e) => {
e.stopPropagation(); e.stopPropagation();
e.preventDefault();
setOpen(false); setOpen(false);
updateAlert({ updateAlert({
variables: { variables: {
@@ -33,7 +34,6 @@ export default function ProductionListColumnComment({ record }) {
}; };
const handleChange = (e) => { const handleChange = (e) => {
e.stopPropagation();
setNote(e.target.value); setNote(e.target.value);
}; };
@@ -42,26 +42,38 @@ export default function ProductionListColumnComment({ record }) {
if (flag) setNote(record.comment || ""); if (flag) setNote(record.comment || "");
}; };
return ( const content = (
<Popover <div
onOpenChange={handleOpenChange} style={{ width: "30em" }}
open={open} onMouseDown={(e) => e.stopPropagation()}
content={ onClick={(e) => e.stopPropagation()}
<div style={{ width: "30em" }}> >
<Input.TextArea <Input.TextArea
rows={5} rows={5}
value={note} value={note}
onChange={handleChange} onChange={handleChange}
// onPressEnter={handleSaveNote}
autoFocus autoFocus
allowClear allowClear
style={{ marginBottom: "1em" }}
onMouseDown={(e) => e.stopPropagation()}
onClick={(e) => e.stopPropagation()}
/> />
<div> <div>
<Button onClick={handleSaveNote}>{t("general.actions.save")}</Button> <Button onClick={handleSaveNote} type="primary">
{t("general.actions.save")}
</Button>
</div> </div>
</div> </div>
} );
trigger={["click"]}
return (
<Popover
onOpenChange={handleOpenChange}
open={open}
content={content}
trigger="click"
fresh
getPopupContainer={(trigger) => trigger.parentElement}
> >
<div <div
style={{ style={{
@@ -69,9 +81,9 @@ export default function ProductionListColumnComment({ record }) {
height: "19px", height: "19px",
cursor: "pointer", cursor: "pointer",
overflow: "hidden", overflow: "hidden",
textOverflow: "ellipsis", textOverflow: "ellipsis"
display: "inline-block"
}} }}
onClick={(e) => e.stopPropagation()}
> >
<Icon component={FaRegStickyNote} style={{ marginRight: ".2rem" }} /> <Icon component={FaRegStickyNote} style={{ marginRight: ".2rem" }} />
<Tooltip title={record.comment}>{record.comment || " "}</Tooltip> <Tooltip title={record.comment}>{record.comment || " "}</Tooltip>

View File

@@ -1,7 +1,7 @@
import Icon from "@ant-design/icons"; import Icon from "@ant-design/icons";
import { useMutation } from "@apollo/client/react"; import { useMutation } from "@apollo/client/react";
import { Button, Input, Popover, Space } from "antd"; import { Button, Input, Popover, Space } from "antd";
import { useCallback, useMemo, useState } from "react"; import { useCallback, useState } from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { FaRegStickyNote } from "react-icons/fa"; import { FaRegStickyNote } from "react-icons/fa";
import { logImEXEvent } from "../../firebase/firebase.utils"; import { logImEXEvent } from "../../firebase/firebase.utils";
@@ -27,6 +27,7 @@ function ProductionListColumnProductionNote({ record, setNoteUpsertContext }) {
(e) => { (e) => {
logImEXEvent("production_add_note"); logImEXEvent("production_add_note");
e.stopPropagation(); e.stopPropagation();
e.preventDefault();
setOpen(false); setOpen(false);
updateAlert({ updateAlert({
variables: { variables: {
@@ -46,7 +47,6 @@ function ProductionListColumnProductionNote({ record, setNoteUpsertContext }) {
); );
const handleChange = useCallback((e) => { const handleChange = useCallback((e) => {
e.stopPropagation();
setNote(e.target.value); setNote(e.target.value);
}, []); }, []);
@@ -58,9 +58,8 @@ function ProductionListColumnProductionNote({ record, setNoteUpsertContext }) {
[record] [record]
); );
const popoverContent = useMemo( const content = (
() => ( <div style={{ width: "30em" }} onMouseDown={(e) => e.stopPropagation()} onClick={(e) => e.stopPropagation()}>
<div style={{ width: "30em" }}>
<Input.TextArea <Input.TextArea
rows={5} rows={5}
value={note} value={note}
@@ -68,6 +67,8 @@ function ProductionListColumnProductionNote({ record, setNoteUpsertContext }) {
autoFocus autoFocus
allowClear allowClear
style={{ marginBottom: "1em" }} style={{ marginBottom: "1em" }}
onMouseDown={(e) => e.stopPropagation()}
onClick={(e) => e.stopPropagation()}
/> />
<Space> <Space>
<Button onClick={handleSaveNote} type="primary"> <Button onClick={handleSaveNote} type="primary">
@@ -88,12 +89,17 @@ function ProductionListColumnProductionNote({ record, setNoteUpsertContext }) {
</Button> </Button>
</Space> </Space>
</div> </div>
),
[note, handleSaveNote, handleChange, record, setNoteUpsertContext, t]
); );
return ( return (
<Popover onOpenChange={handleOpenChange} open={open} content={popoverContent} trigger={["click"]}> <Popover
onOpenChange={handleOpenChange}
open={open}
content={content}
trigger="click"
fresh
getPopupContainer={(trigger) => trigger.parentElement}
>
<div <div
style={{ style={{
width: "100%", width: "100%",
@@ -102,6 +108,7 @@ function ProductionListColumnProductionNote({ record, setNoteUpsertContext }) {
overflow: "hidden", overflow: "hidden",
textOverflow: "ellipsis" textOverflow: "ellipsis"
}} }}
onClick={(e) => e.stopPropagation()}
> >
<Icon component={FaRegStickyNote} style={{ marginRight: ".2rem" }} /> <Icon component={FaRegStickyNote} style={{ marginRight: ".2rem" }} />
{record.production_vars?.note || " "} {record.production_vars?.note || " "}