From 9d438529a620da010f9d057b300b543fc5a03824 Mon Sep 17 00:00:00 2001 From: Anoop P <44577841+anoopw3bdev@users.noreply.github.com> Date: Mon, 14 Jul 2025 14:47:40 +0530 Subject: [PATCH] Marketplace page UI/ UX enhancements (#4819) * style enhancements * Introduce autocomplete to select usecases * add grid gap property * add tooltip to display remaining selected items on hover * use ordered list to show more items --- .../Header/ProfileSection/index.jsx | 9 +- packages/ui/src/views/marketplaces/index.jsx | 137 +++++++++++------- 2 files changed, 90 insertions(+), 56 deletions(-) diff --git a/packages/ui/src/layout/MainLayout/Header/ProfileSection/index.jsx b/packages/ui/src/layout/MainLayout/Header/ProfileSection/index.jsx index a39bb5e1c..1e47faedd 100644 --- a/packages/ui/src/layout/MainLayout/Header/ProfileSection/index.jsx +++ b/packages/ui/src/layout/MainLayout/Header/ProfileSection/index.jsx @@ -101,7 +101,14 @@ const ExportDialog = ({ show, onCancel, onExport }) => { {!isExporting && ( - + {dataToExport.map((data, index) => ( { {hasPermission('templates:marketplace') && hasPermission('templates:custom') && ( - - - - + + + + + + setSelectedUsecases(newValue)} + disableCloseOnSelect + getOptionLabel={(option) => option} + isOptionEqualToValue={(option, value) => option === value} + renderOption={(props, option, { selected }) => { + const isDisabled = eligibleUsecases.length > 0 && !eligibleUsecases.includes(option) + + return ( +
  • + + +
  • + ) + }} + renderInput={(params) => } + sx={{ + width: 300 + }} + limitTags={2} + renderTags={(value, getTagProps) => { + const totalTags = value.length + const limitTags = 2 + + return ( + <> + {value.slice(0, limitTags).map((option, index) => ( + + ))} + + {totalTags > limitTags && ( + + {value.slice(limitTags).map((item, i) => ( +
  • {item}
  • + ))} + + } + placement='top' + > + +{totalTags - limitTags} +
    + )} + + ) + }} + slotProps={{ + paper: { + sx: { + boxShadow: '0 4px 12px rgba(0, 0, 0, 0.2)' + } + } + }} + /> +
    )} - - {usecases.map((usecase, index) => ( - { - setSelectedUsecases( - event.target.checked - ? [...selectedUsecases, usecase] - : selectedUsecases.filter((item) => item !== usecase) - ) - }} - sx={{ - '& .MuiSvgIcon-root': { - color: - eligibleUsecases.length === 0 || !eligibleUsecases.includes(usecase) - ? '#888 !important' - : undefined - } - }} - /> - } - label={usecase} - sx={{ - '& .MuiFormControlLabel-label': { - color: - eligibleUsecases.length === 0 || !eligibleUsecases.includes(usecase) - ? '#888 !important' - : undefined - } - }} - /> - ))} - - {selectedUsecases.length > 0 && ( - - )} - {!view || view === 'card' ? ( <> {isLoading ? (