diff --git a/client/src/components/chat-media-selector/chat-media-selector.component.jsx b/client/src/components/chat-media-selector/chat-media-selector.component.jsx index 162789fb6..95a917e7e 100644 --- a/client/src/components/chat-media-selector/chat-media-selector.component.jsx +++ b/client/src/components/chat-media-selector/chat-media-selector.component.jsx @@ -13,13 +13,14 @@ import JobDocumentsGalleryExternal from "../jobs-documents-gallery/jobs-document 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 = (dispatch) => ({ - //setUserLanguage: language => dispatch(setUserLanguage(language)) -}); + +const mapDispatchToProps = (dispatch) => ({}); + export default connect(mapStateToProps, mapDispatchToProps)(ChatMediaSelector); export function ChatMediaSelector({ bodyshop, selectedMedia, setSelectedMedia, conversation }) { @@ -37,9 +38,8 @@ export function ChatMediaSelector({ bodyshop, selectedMedia, setSelectedMedia, c fetchPolicy: "network-only", nextFetchPolicy: "network-only", variables: { - jobId: conversation.job_conversations[0] && conversation.job_conversations[0]?.jobid + jobId: conversation.job_conversations[0]?.jobid }, - skip: !open || !conversation.job_conversations || conversation.job_conversations.length === 0 }); @@ -56,11 +56,11 @@ export function ChatMediaSelector({ bodyshop, selectedMedia, setSelectedMedia, c //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")}
+
{t("messaging.labels.maxtenimages")}
) : null} {Imgproxy.treatment === "on" ? ( @@ -74,7 +74,7 @@ export function ChatMediaSelector({ bodyshop, selectedMedia, setSelectedMedia, c {bodyshop.uselocalmediaserver && open && ( )} @@ -89,7 +89,7 @@ export function ChatMediaSelector({ bodyshop, selectedMedia, setSelectedMedia, c {bodyshop.uselocalmediaserver && open && ( )} @@ -100,12 +100,17 @@ export function ChatMediaSelector({ bodyshop, selectedMedia, setSelectedMedia, c return ( {t("messaging.errors.noattachedjobs")}
: content + conversation.job_conversations.length === 0 ? ( +
{t("messaging.errors.noattachedjobs")}
+ ) : ( + content + ) } title={t("messaging.labels.selectmedia")} trigger="click" open={open} onOpenChange={handleVisibleChange} + overlayClassName="media-selector-popover" > s.isSelected).length}> diff --git a/client/src/components/chat-media-selector/chat-media-selector.styles.scss b/client/src/components/chat-media-selector/chat-media-selector.styles.scss new file mode 100644 index 000000000..58e2d06b4 --- /dev/null +++ b/client/src/components/chat-media-selector/chat-media-selector.styles.scss @@ -0,0 +1,52 @@ +.media-selector-popover { + .ant-popover-inner-content { + max-width: 640px; + max-height: 480px; + overflow-y: auto; + padding: 8px; + background-color: #fff; + border-radius: 8px; + } +} + +.media-selector-content { + display: flex; + flex-direction: column; + gap: 4px; +} + +.error-message { + color: red; + font-size: 12px; + text-align: center; + margin-bottom: 8px; +} + +.no-jobs-message { + font-size: 14px; + color: #888; + text-align: center; + padding: 8px; +} + +/* Style images within gallery components */ +.media-selector-content img { + + object-fit: cover; + border-radius: 4px; + margin: 4px; + cursor: pointer; + transition: transform 0.2s; + + &:hover { + transform: scale(1.05); + } +} + +/* Grid layout for gallery components */ +.media-selector-content .ant-image, /* Assuming gallery components use Ant Design's Image */ +.media-selector-content .gallery-container { /* Fallback for custom gallery classes */ + display: grid; + grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); + gap: 4px; +}