Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
ObjectBreadcrumbs.jsx98 linesDownload Raw Back to components
1/////////////////////////////////////////////////////////////2//3// pgAdmin 4 - PostgreSQL Tools4//5// Copyright (C) 2013 - 2024, The pgAdmin Development Team6// This software is released under the PostgreSQL Licence7//8//////////////////////////////////////////////////////////////9import { Box } from '@mui/material';10import { makeStyles } from '@mui/styles';11import React, { useState, useEffect } from 'react';12import AccountTreeIcon from '@mui/icons-material/AccountTree';13import CommentIcon from '@mui/icons-material/Comment';14import ArrowForwardIosRoundedIcon from '@mui/icons-material/ArrowForwardIosRounded';15import { usePgAdmin } from '../../../static/js/BrowserComponent';16import usePreferences from '../../../preferences/static/js/store';17 18const useStyles = makeStyles((theme)=>({19  root: {20    position: 'absolute',21    bottom: 0,22    width: 'auto',23    maxWidth: '99%',24    zIndex: 1004,25    padding: '0.25rem 0.5rem',26    fontSize: '0.95em',27    color: theme.palette.background.default,28    backgroundColor: theme.palette.text.primary,29    borderTopRightRadius: theme.shape.borderRadius,30  },31  row: {32    display: 'flex',33    alignItems: 'center'34  },35  overflow: {36    whiteSpace: 'nowrap',37    textOverflow: 'ellipsis',38    overflow: 'hidden',39  }40}));41 42 43export default function ObjectBreadcrumbs() {44  const classes = useStyles();45  const pgAdmin = usePgAdmin();46  const preferences = usePreferences().getPreferencesForModule('browser');47  const [objectData, setObjectData] = useState({48    path: null,49    description: null,50  });51  const onItemHover = (item, _data)=>{52    if(item && !_data?._type.startsWith('coll-')) {53      setObjectData({54        path: pgAdmin.Browser.tree.getNodeDisplayPath(item, false),55        description: item?._metadata?.data.description56      });57    } else {58      setObjectData({59        path: null,60        description: null61      });62    }63  };64 65  useEffect(()=>{66    if(preferences.breadcrumbs_enable) {67      pgAdmin.Browser.Events.on('pgadmin-browser:tree:hovered', onItemHover);68    }69    return ()=>{70      pgAdmin.Browser.Events.off('pgadmin-browser:tree:hovered', onItemHover);71    };72  }, [preferences.breadcrumbs_enable]);73 74  if(!objectData.path) {75    return <></>;76  }77 78  return(79    <Box className={classes.root} data-testid="object-breadcrumbs">80      <div className={classes.row}>81        <AccountTreeIcon style={{height: '1rem', marginRight: '0.125rem'}} data-label="AccountTreeIcon"/>82        <div className={classes.overflow}>83          {84            objectData.path?.reduce((res, item)=>(85              res.concat(<span key={item}>{item}</span>, <ArrowForwardIosRoundedIcon key={item+'-arrow'} style={{height: '0.8rem', width: '1.25rem'}} />)86            ), []).slice(0, -1)87          }88        </div>89      </div>90      {preferences.breadcrumbs_show_comment && objectData.description &&91          <div className={classes.row}>92            <CommentIcon style={{height: '1rem', marginRight: '0.125rem'}} data-label="CommentIcon"/>93            <div className={classes.overflow}>{objectData.description}</div>94          </div>}95    </Box>96  );97}98 
codekingpro/portable-devtools · Team Ai