import { useApolloClient } from "@apollo/client/react"; import { Button } from "antd"; import _ from "lodash"; import dayjs from "../../utils/day"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import { INSERT_TIME_TICKET_AND_APPROVE } from "../../graphql/timetickets.queries"; import { QUERY_TT_APPROVALS_BY_IDS } from "../../graphql/tt-approvals.queries"; import { selectAuthLevel, selectBodyshop, selectCurrentUser } from "../../redux/user/user.selectors"; import { HasRbacAccess } from "../rbac-wrapper/rbac-wrapper.component"; import { useNotification } from "../../contexts/Notifications/notificationContext.jsx"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, currentUser: selectCurrentUser, authLevel: selectAuthLevel }); export function TtApproveButton({ bodyshop, currentUser, selectedTickets, disabled, authLevel, completedCallback, refetch }) { const { t } = useTranslation(); const client = useApolloClient(); const notification = useNotification(); const [loading, setLoading] = useState(false); const handleQbxml = async () => { setLoading(true); try { const { data } = await client.query({ query: QUERY_TT_APPROVALS_BY_IDS, variables: { ids: selectedTickets } }); const insertResponse = await client.mutate({ mutation: INSERT_TIME_TICKET_AND_APPROVE, variables: { timeTicketInput: data.tt_approval_queue.map((tta) => ({ ..._.omit(tta, ["id", "__typename"]), ttapprovalqueueid: tta.id })), approvalIds: selectedTickets, approvalUpdate: { approved_at: dayjs(), approved_by: currentUser.email } } }); if (insertResponse.errors) { notification.error({ title: t("timetickets.errors.creating", { message: JSON.stringify(insertResponse.errors) }) }); } else { if (typeof completedCallback === "function") { completedCallback([]); } if (typeof refetch === "function") { refetch(); } notification.success({ title: t("timetickets.successes.created") }); } } catch (error) { notification.error({ title: t("timetickets.errors.creating", { message: error.message }) }); } finally { setLoading(false); } }; return ( ); } export default connect(mapStateToProps, null)(TtApproveButton);