import { PictureFilled } from "@ant-design/icons"; import { useQuery } from "@apollo/client"; import { useSplitTreatments } from "@splitsoftware/splitio-react"; import { Badge, Popover } from "antd"; import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import { GET_DOCUMENTS_BY_JOB } from "../../graphql/documents.queries"; import { selectBodyshop } from "../../redux/user/user.selectors"; import AlertComponent from "../alert/alert.component"; import JobDocumentsGalleryExternal from "../jobs-documents-gallery/jobs-documents-gallery.external.component"; import JobsDocumentImgproxyGalleryExternal from "../jobs-documents-imgproxy-gallery/jobs-documents-imgproxy-gallery.external.component"; import JobDocumentsLocalGalleryExternal from "../jobs-documents-local-gallery/jobs-documents-local-gallery.external.component"; import LoadingSpinner from "../loading-spinner/loading-spinner.component"; import "./chat-media-selector.styles.scss"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop }); const mapDispatchToProps = () => ({}); export default connect(mapStateToProps, mapDispatchToProps)(ChatMediaSelector); export function ChatMediaSelector({ bodyshop, selectedMedia, setSelectedMedia, conversation }) { const { t } = useTranslation(); const [open, setOpen] = useState(false); const { treatments: { Imgproxy } } = useSplitTreatments({ attributes: {}, names: ["Imgproxy"], splitKey: bodyshop && bodyshop.imexshopid }); const { loading, error, data } = useQuery(GET_DOCUMENTS_BY_JOB, { fetchPolicy: "network-only", nextFetchPolicy: "network-only", variables: { jobId: conversation.job_conversations[0]?.jobid }, skip: !open || !conversation.job_conversations || conversation.job_conversations.length === 0 }); const handleVisibleChange = (change) => { setOpen(change); }; useEffect(() => { setSelectedMedia([]); }, [setSelectedMedia, conversation]); //Knowingly taking on the technical debt of poor implementation below. Done this way to avoid an edge case where no component may be displayed. //Cloudinary will be removed once the migration is completed. //If Imageproxy is on, rely only on the LMS selector //If not on, use the old methods. const content = (
{loading && } {error && } {selectedMedia.filter((s) => s.isSelected).length >= 10 ? (
{t("messaging.labels.maxtenimages")}
) : null} {Imgproxy.treatment === "on" ? ( <> {!bodyshop.uselocalmediaserver && ( )} {bodyshop.uselocalmediaserver && open && ( )} ) : ( <> {!bodyshop.uselocalmediaserver && data && ( )} {bodyshop.uselocalmediaserver && open && ( )} )}
); return ( {t("messaging.errors.noattachedjobs")} ) : ( content ) } title={t("messaging.labels.selectmedia")} trigger="click" open={open} onOpenChange={handleVisibleChange} classNames={{ root: "media-selector-popover" }} > s.isSelected).length}> ); }