import { useMutation, useQuery } from "@apollo/react-hooks"; import { Form, notification } from "antd"; import moment from "moment"; import React, { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { useParams } from "react-router-dom"; import AlertComponent from "../../components/alert/alert.component"; import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component"; import { QUERY_CC_BY_PK, UPDATE_CC } from "../../graphql/courtesy-car.queries"; import { addRecentItem, setBreadcrumbs, } from "../../redux/application/application.actions"; import { CreateRecentItem } from "../../utils/create-recent-item"; import CourtesyCarDetailPageComponent from "./courtesy-car-detail.page.component"; import NotFound from "../../components/not-found/not-found.component"; import LoadingSpinner from "../../components/loading-spinner/loading-spinner.component"; import queryString from "query-string"; import { useLocation } from "react-router-dom"; const mapDispatchToProps = (dispatch) => ({ setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)), addRecentItem: (item) => dispatch(addRecentItem(item)), }); export function CourtesyCarDetailPageContainer({ setBreadcrumbs, addRecentItem, }) { const searchParams = queryString.parse(useLocation().search); const { page, sortcolumn, sortorder } = searchParams; const { t } = useTranslation(); const [insertCourtesyCar] = useMutation(UPDATE_CC); const [form] = Form.useForm(); const { ccId } = useParams(); const [saveLoading, setSaveLoading] = useState(false); const { loading, error, data } = useQuery(QUERY_CC_BY_PK, { variables: { id: ccId, offset: page ? (page - 1) * 25 : 0, limit: 25, order: [ { [sortcolumn || "start"]: sortorder ? sortorder === "descend" ? "desc" : "asc" : "desc", }, ], }, }); useEffect(() => { document.title = loading ? t("titles.app") : error ? t("titles.app") : t("titles.courtesycars-detail", { id: (data && data.courtesycars_by_pk && data.courtesycars_by_pk.fleet_number) || "", }); setBreadcrumbs([ { link: "/manage/courtesycars", label: t("titles.bc.courtesycars") }, { link: `/manage/courtesycars/${ (data && data.courtesycars_by_pk && data.courtesycars_by_pk.id) || "" }`, label: t("titles.bc.courtesycars-detail", { number: (data && data.courtesycars_by_pk && data.courtesycars_by_pk.fleetnumber) || "", }), }, ]); if (data && data.courtesycars_by_pk) addRecentItem( CreateRecentItem( ccId, "courtesycar", data.courtesycars_by_pk.fleet_number || data.courtesycars_by_pk.vin, `/manage/courtesycars/${ccId}` ) ); }, [t, data, error, loading, setBreadcrumbs, ccId, addRecentItem]); const handleFinish = async (values) => { setSaveLoading(true); const result = await insertCourtesyCar({ variables: { cc: { ...values }, ccId: ccId }, }); if (!!result.errors) { notification["error"]({ message: t("courtesycars.errors.saving", { error: error }), }); } notification["success"]({ message: t("courtesycars.successes.saved"), }); setSaveLoading(false); }; useEffect(() => { if (data && data.courtesycars_by_pk) form.resetFields(); }, [data, form]); if (loading) return ; if (error) return ; if (!!!data.courtesycars_by_pk) return ; return (
); } export default connect( null, mapDispatchToProps )(CourtesyCarDetailPageContainer);