@@ -1,102 +1,111 @@
|
|||||||
import { useMutation } from "@apollo/client";
|
import {useMutation} from "@apollo/client";
|
||||||
import { Button, Card, Dropdown, TimePicker } from "antd";
|
import {Button, Card, Dropdown, TimePicker} from "antd";
|
||||||
import dayjs from "../../utils/day";
|
import dayjs from "../../utils/day";
|
||||||
import React, { useState } from "react";
|
import React, {useState} from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import {useTranslation} from "react-i18next";
|
||||||
import { logImEXEvent } from "../../firebase/firebase.utils";
|
import {logImEXEvent} from "../../firebase/firebase.utils";
|
||||||
import { UPDATE_JOB } from "../../graphql/jobs.queries";
|
import {UPDATE_JOB} from "../../graphql/jobs.queries";
|
||||||
import { DateFormatter } from "../../utils/DateFormatter";
|
import {DateFormatter} from "../../utils/DateFormatter";
|
||||||
import FormDatePicker from "../form-date-picker/form-date-picker.component";
|
import FormDatePicker from "../form-date-picker/form-date-picker.component";
|
||||||
|
|
||||||
export default function ProductionListDate({
|
export default function ProductionListDate({
|
||||||
record,
|
record,
|
||||||
field,
|
field,
|
||||||
time,
|
time,
|
||||||
pastIndicator,
|
pastIndicator,
|
||||||
}) {
|
}) {
|
||||||
const [updateAlert] = useMutation(UPDATE_JOB);
|
const [updateAlert] = useMutation(UPDATE_JOB);
|
||||||
const [open, setOpen] = useState(false);
|
const [open, setOpen] = useState(false);
|
||||||
const { t } = useTranslation();
|
const {t} = useTranslation();
|
||||||
|
|
||||||
const handleChange = (date) => {
|
const handleChange = (date) => {
|
||||||
logImEXEvent("product_toggle_date", { field });
|
logImEXEvent("product_toggle_date", {field});
|
||||||
// if (date.isSame(record[field] && dayjs(record[field]))) {
|
// if (date.isSame(record[field] && dayjs(record[field]))) {
|
||||||
// return;
|
// return;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
//e.stopPropagation();
|
//e.stopPropagation();
|
||||||
|
|
||||||
updateAlert({
|
updateAlert({
|
||||||
variables: {
|
variables: {
|
||||||
jobId: record.id,
|
jobId: record.id,
|
||||||
job: {
|
job: {
|
||||||
[field]: date,
|
[field]: date,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
optimisticResponse: {
|
optimisticResponse: {
|
||||||
update_jobs: {
|
update_jobs: {
|
||||||
[field]: date,
|
[field]: date,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
if (record.refetch) record.refetch();
|
if (record.refetch) record.refetch();
|
||||||
if (!time) {
|
if (!time) {
|
||||||
setOpen(false);
|
setOpen(false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
let className = "";
|
let className = "";
|
||||||
if (pastIndicator) {
|
if (pastIndicator) {
|
||||||
className =
|
className =
|
||||||
!!record[field] &&
|
!!record[field] &&
|
||||||
((dayjs().isSameOrAfter(dayjs(record[field]), "day") &&
|
((dayjs().isSameOrAfter(dayjs(record[field]), "day") &&
|
||||||
"production-completion-past") ||
|
"production-completion-past") ||
|
||||||
(dayjs().add(1, "day").isSame(dayjs(record[field]), "day") &&
|
(dayjs().add(1, "day").isSame(dayjs(record[field]), "day") &&
|
||||||
"production-completion-soon"));
|
"production-completion-soon"));
|
||||||
}
|
}
|
||||||
// TODO - Client Update = Why is the overlay a card?
|
// TODO - Client Update = Why is the overlay a card?
|
||||||
return (
|
|
||||||
<Dropdown
|
const overlayMenu = {
|
||||||
trigger={["click"]}
|
items: [
|
||||||
onOpenChange={(v) => setOpen(v)}
|
{
|
||||||
open={open}
|
key: 'overlayItem1',
|
||||||
style={{
|
label:
|
||||||
height: "19px",
|
<Card style={{padding: "1rem"}} onClick={(e) => e.stopPropagation()}>
|
||||||
}}
|
<FormDatePicker
|
||||||
overlay={
|
onClick={(e) => e.stopPropagation()}
|
||||||
<Card style={{ padding: "1rem" }} onClick={(e) => e.stopPropagation()}>
|
value={(record[field] && dayjs(record[field])) || null}
|
||||||
<FormDatePicker
|
onChange={handleChange}
|
||||||
onClick={(e) => e.stopPropagation()}
|
format="MM/DD/YYYY"
|
||||||
value={(record[field] && dayjs(record[field])) || null}
|
isDateOnly={!time}
|
||||||
onChange={handleChange}
|
/>
|
||||||
format="MM/DD/YYYY"
|
{time && (
|
||||||
isDateOnly={!time}
|
<TimePicker
|
||||||
/>
|
onClick={(e) => e.stopPropagation()}
|
||||||
{time && (
|
value={(record[field] && dayjs(record[field])) || null}
|
||||||
<TimePicker
|
onChange={handleChange}
|
||||||
onClick={(e) => e.stopPropagation()}
|
minuteStep={15}
|
||||||
value={(record[field] && dayjs(record[field])) || null}
|
format="hh:mm a"
|
||||||
onChange={handleChange}
|
/>
|
||||||
minuteStep={15}
|
)}
|
||||||
format="hh:mm a"
|
<Button onClick={() => setOpen(false)}>
|
||||||
/>
|
{t("general.actions.close")}
|
||||||
)}
|
</Button>
|
||||||
<Button onClick={() => setOpen(false)}>
|
</Card>
|
||||||
{t("general.actions.close")}
|
}
|
||||||
</Button>
|
]
|
||||||
</Card>
|
}
|
||||||
}
|
|
||||||
>
|
return (
|
||||||
<div
|
<Dropdown
|
||||||
onClick={() => setOpen(true)}
|
trigger={["click"]}
|
||||||
style={{
|
onOpenChange={(v) => setOpen(v)}
|
||||||
height: "19px",
|
open={open}
|
||||||
}}
|
style={{
|
||||||
className={className}
|
height: "19px",
|
||||||
>
|
}}
|
||||||
<DateFormatter bordered={false}>{record[field]}</DateFormatter>
|
menu={overlayMenu}
|
||||||
</div>
|
>
|
||||||
</Dropdown>
|
<div
|
||||||
);
|
onClick={() => setOpen(true)}
|
||||||
|
style={{
|
||||||
|
height: "19px",
|
||||||
|
}}
|
||||||
|
className={className}
|
||||||
|
>
|
||||||
|
<DateFormatter bordered={false}>{record[field]}</DateFormatter>
|
||||||
|
</div>
|
||||||
|
</Dropdown>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -89,7 +89,45 @@ export function ProductionLastContacted({ currentUser, record }) {
|
|||||||
}
|
}
|
||||||
}, [open, form, record.date_last_contacted]);
|
}, [open, form, record.date_last_contacted]);
|
||||||
|
|
||||||
// TODO - Client Update - Why is this a card?
|
const overlayMenu = {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
key: 'overlay-item-1',
|
||||||
|
label:
|
||||||
|
<Card
|
||||||
|
style={{ padding: "1rem" }}
|
||||||
|
onClick={(e) => e.stopPropagation()}
|
||||||
|
>
|
||||||
|
<Form form={form} onFinish={handleFinish} layout="vertical">
|
||||||
|
<Form.Item
|
||||||
|
name="date_last_contacted"
|
||||||
|
label={t("jobs.fields.date_last_contacted")}
|
||||||
|
>
|
||||||
|
<FormDateTimePickerComponent />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
name="date_next_contact"
|
||||||
|
label={t("jobs.fields.date_next_contact")}
|
||||||
|
>
|
||||||
|
<FormDateTimePickerComponent />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label={t("notes.labels.notetoadd")} name="note">
|
||||||
|
<Input.TextArea rows={4} />
|
||||||
|
</Form.Item>
|
||||||
|
<Space>
|
||||||
|
<Button type="primary" htmlType="submit">
|
||||||
|
{t("general.actions.save")}
|
||||||
|
</Button>
|
||||||
|
<Button onClick={() => setOpen(false)}>
|
||||||
|
{t("general.actions.close")}
|
||||||
|
</Button>
|
||||||
|
</Space>
|
||||||
|
</Form>
|
||||||
|
</Card>
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<Dropdown
|
<Dropdown
|
||||||
@@ -98,38 +136,7 @@ export function ProductionLastContacted({ currentUser, record }) {
|
|||||||
style={{
|
style={{
|
||||||
height: "19px",
|
height: "19px",
|
||||||
}}
|
}}
|
||||||
overlay={
|
menu={overlayMenu}
|
||||||
<Card
|
|
||||||
style={{ padding: "1rem" }}
|
|
||||||
onClick={(e) => e.stopPropagation()}
|
|
||||||
>
|
|
||||||
<Form form={form} onFinish={handleFinish} layout="vertical">
|
|
||||||
<Form.Item
|
|
||||||
name="date_last_contacted"
|
|
||||||
label={t("jobs.fields.date_last_contacted")}
|
|
||||||
>
|
|
||||||
<FormDateTimePickerComponent />
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
name="date_next_contact"
|
|
||||||
label={t("jobs.fields.date_next_contact")}
|
|
||||||
>
|
|
||||||
<FormDateTimePickerComponent />
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item label={t("notes.labels.notetoadd")} name="note">
|
|
||||||
<Input.TextArea rows={4} />
|
|
||||||
</Form.Item>
|
|
||||||
<Space>
|
|
||||||
<Button type="primary" htmlType="submit">
|
|
||||||
{t("general.actions.save")}
|
|
||||||
</Button>
|
|
||||||
<Button onClick={() => setOpen(false)}>
|
|
||||||
{t("general.actions.close")}
|
|
||||||
</Button>
|
|
||||||
</Space>
|
|
||||||
</Form>
|
|
||||||
</Card>
|
|
||||||
}
|
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
onClick={() => setOpen(true)}
|
onClick={() => setOpen(true)}
|
||||||
|
|||||||
Reference in New Issue
Block a user