import { SyncOutlined } from "@ant-design/icons"; import { Button, Card, Checkbox, Col, PageHeader, Row, Select, Space, } from "antd"; import { t } from "i18next"; import React, { useMemo } from "react"; import useLocalStorage from "../../utils/useLocalStorage"; import ScheduleAtsSummary from "../schedule-ats-summary/schedule-ats-summary.component"; import ScheduleCalendarWrapperComponent from "../schedule-calendar-wrapper/scheduler-calendar-wrapper.component"; import ScheduleModal from "../schedule-job-modal/schedule-job-modal.container"; import ScheduleManualEvent from "../schedule-manual-event/schedule-manual-event.component"; import ScheduleProductionList from "../schedule-production-list/schedule-production-list.component"; import ScheduleVerifyIntegrity from "../schedule-verify-integrity/schedule-verify-integrity.component"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import { selectBodyshop } from "../../redux/user/user.selectors"; import _ from "lodash"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, }); const mapDispatchToProps = (dispatch) => ({ //setUserLanguage: language => dispatch(setUserLanguage(language)) }); export default connect( mapStateToProps, mapDispatchToProps )(ScheduleCalendarComponent); export function ScheduleCalendarComponent({ data, refetch, bodyshop }) { const [filter, setFilter] = useLocalStorage("filter_events", { intake: true, manual: true, employeevacation: true, ins_co_nm: null, }); const [estimatorsFilter, setEstimatiorsFilter] = useLocalStorage( "estimators", [] ); const estimators = useMemo(() => { return _.uniq([ ...data .filter((d) => d.__typename === "appointments") .map((app) => `${app.job?.est_ct_fn || ""} ${app.job?.est_ct_ln || ""}`.trim() ) .filter((e) => e.length > 0), ...bodyshop.md_estimators.map((e) => `${e.est_ct_fn || ""} ${e.est_ct_ln || ""}`.trim() ), ]); }, [data, bodyshop.md_estimators]); const filteredData = useMemo(() => { return data.filter((d) => { const estFilter = d.__typename === "appointments" ? estimatorsFilter.length === 0 ? true : !!estimatorsFilter.find( (e) => e === `${d.job?.est_ct_fn || ""} ${d.job?.est_ct_ln || ""}`.trim() ) : true; return ( (d.block || (filter.intake && d.isintake) || (filter.manual && !d.isintake && d.block === false) || (d.__typename === "employee_vacation" && filter.employeevacation && !!d.employee)) && (filter.ins_co_nm && filter.ins_co_nm.length > 0 ? filter.ins_co_nm.includes(d.job?.ins_co_nm) : true) && estFilter ); }); }, [data, filter, estimatorsFilter]); return ( setFilter({ ...filter, ins_co_nm: [] })} value={filter?.ins_co_nm ? filter.ins_co_nm : []} onChange={(e) => { setFilter({ ...filter, ins_co_nm: e }); }} options={bodyshop.md_ins_cos.map((i) => ({ label: i.name, value: i.name, }))} /> { setFilter({ ...filter, intake: e.target.checked }); }} > {t("schedule.labels.intake")} { setFilter({ ...filter, manual: e.target.checked }); }} > {t("schedule.labels.manual")} { setFilter({ ...filter, employeevacation: e.target.checked }); }} > {t("schedule.labels.employeevacation")} } /> ); }