{"version":3,"file":"IconLibrary.mjs","names":["React","useState","useCallback","useEffect","useMemo","memo","makeStyles","Divider","Fade","TextField","InputAdornment","fluentLibraryIcons","FluentIconKey","SelectedLibraryItem","FluentIcon","SearchIcon","unityIcons","debounce","InfiniteScroll","useStyles","theme","root","display","flexDirection","paddingLeft","spacing","paddingRight","height","divider","marginLeft","marginRight","selection","search","width","iconsContainer","minWidth","overflow","input","formTextInput","fontSize","labelRoot","IconLibrary","props","$","_c","addItem","title","selectedIconName","classes","selectedIcon","setSelectedIcon","t0","Symbol","for","filteredFluentIcons","setFilteredFluentIcons","t1","icons","setIcons","hasMoreToScroll","setHasMoreToScroll","searchValue","setSearchValue","t2","item","selectItem","t3","concat","combinedLibraryIcons","t4","reduce","iconList","item_0","iconObj","id","label","icon","type","push","iconListObj","t5","value","icons_0","map","_temp","filter","item_2","toLowerCase","includes","_temp2","getSearchableIcons","t6","event","value_0","target","debounceSearch","value_1","handleFluentIconSearch","t7","length","updatedIcons","slice","fetchMoreIcons","t8","t9","t10","t11","t12","t13","initialIcon","find","t14","t15","startAdornment","t16","t17","t18","t19","t20","t21","t22","item_1","item_3"],"sources":["../../../src/utilities/iconLibrary/IconLibrary.jsx"],"sourcesContent":["import React, { useState, useCallback, useEffect, useMemo, memo } from 'react';\nimport {\n  makeStyles,\n  Divider,\n  Fade,\n  TextField,\n  InputAdornment,\n} from '@material-ui/core';\nimport { fluentLibraryIcons } from '../../assets/unityIcons/LibraryData';\nimport FluentIconKey  from '../../UI/dataDisplay/map/FluentIconKey';\nimport SelectedLibraryItem from './SelectedLibraryItem';\nimport { FluentIcon } from './FluentIcon';\nimport { SearchIcon } from '@fluentui/react-icons';\nimport { unityIcons } from './UnityIconLibrary';\nimport { debounce } from 'lodash-es';\nimport InfiniteScroll from 'react-infinite-scroll-component';\n\nconst useStyles = makeStyles(theme => ({\n  root: {\n    display: 'flex',\n    flexDirection: 'row',\n    paddingLeft: theme.spacing(2),\n    paddingRight: theme.spacing(2),\n    height: 400,\n  },\n  divider: {\n    marginLeft: theme.spacing(2),\n    marginRight: theme.spacing(2),\n    height: 400,\n  },\n  selection: {\n    display: 'flex',\n    flexDirection: 'row',\n  },\n  search: {\n    marginLeft: theme.spacing(2),\n    width: 312,\n  },\n  iconsContainer: {\n    minWidth: '76%',\n    overflow: 'auto',\n  },\n  input: {\n    height: 34,\n  },\n  formTextInput: {\n    fontSize: 13,\n  },\n  labelRoot: {\n    fontSize: 13,\n  },\n}));\n\nconst IconLibrary = props => {\n  const { addItem, title, selectedIconName } = props;\n  const classes = useStyles();\n  const [selectedIcon, setSelectedIcon] = useState(fluentLibraryIcons[0]);\n  const [filteredFluentIcons, setFilteredFluentIcons] = useState([]);\n  const [icons, setIcons] = useState([]);\n  const [hasMoreToScroll, setHasMoreToScroll] = useState(true);\n  const [searchValue, setSearchValue] = useState('');\n\n  const selectItem = useCallback(item => {\n    setSelectedIcon(item);\n  }, []);\n\n  const combinedLibraryIcons = useMemo(() => {\n    return fluentLibraryIcons.concat(unityIcons);\n  }, []);\n\n  const iconListObj = useMemo(() => {\n    return combinedLibraryIcons.reduce((iconList, item) => {\n      const iconObj = {\n        id: item.id,\n        label: item.label,\n        icon: (\n          <FluentIconKey\n            key={item.id}\n            icon={item.icon}\n            tooltip={item.label}\n            select={() => selectItem(item)}\n            iconType={item.type}\n          />\n        ),\n      };\n      iconList.push(iconObj);\n      return iconList;\n    }, []);\n  }, [combinedLibraryIcons, selectItem]);\n\n  const getSearchableIcons = useCallback(\n    value => {\n      let icons = [];\n      if (!value) {\n        icons = iconListObj.map(item => item.icon);\n      } else {\n        icons = iconListObj\n          .filter(item => item.label.toLowerCase().includes(value))\n          .map(item => item.icon);\n      }\n      setFilteredFluentIcons(icons);\n    },\n    [iconListObj]\n  );\n\n  const handleFluentIconSearch = useCallback(\n    event => {\n      const value = event.target.value;\n      setSearchValue(value);\n      const debounceSearch = debounce(value => {\n        getSearchableIcons(value);\n      }, 200);\n\n      debounceSearch(value);\n    },\n    [getSearchableIcons]\n  );\n\n  const fetchMoreIcons = useCallback(() => {\n    if (filteredFluentIcons.length <= icons.length) {\n      setHasMoreToScroll(false);\n      return;\n    }\n    const updatedIcons = [...icons];\n    setIcons(\n      updatedIcons.concat(\n        filteredFluentIcons.slice(icons.length, icons.length + 30)\n      )\n    );\n  }, [icons, filteredFluentIcons]);\n\n  useEffect(() => {\n    setIcons(filteredFluentIcons.slice(0, 150));\n    setHasMoreToScroll(filteredFluentIcons.length > 150);\n  }, [filteredFluentIcons]);\n\n  useEffect(() => {\n    getSearchableIcons();\n  }, [getSearchableIcons]);\n\n  useEffect(() => {\n    const initialIcon = combinedLibraryIcons.find(\n      icon => icon.id === selectedIconName\n    );\n    setSelectedIcon(initialIcon);\n  }, [combinedLibraryIcons, selectedIconName]);\n\n  return (\n    <>\n      <TextField\n        className={classes.search}\n        id=\"search\"\n        placeholder=\"Search icons\"\n        variant=\"outlined\"\n        margin=\"normal\"\n        size=\"small\"\n        value={searchValue}\n        onChange={handleFluentIconSearch}\n        InputProps={{\n          startAdornment: (\n            <InputAdornment position=\"start\">\n              <FluentIcon component={SearchIcon} />\n            </InputAdornment>\n          ),\n          classes: {\n            root: classes.input,\n            input: classes.formTextInput,\n          },\n        }}\n        InputLabelProps={{\n          classes: {\n            root: classes.labelRoot,\n          },\n        }}\n      />\n      <InfiniteScroll\n        dataLength={icons.length}\n        next={fetchMoreIcons}\n        hasMore={hasMoreToScroll}\n        scrollableTarget=\"scrollableDiv\"\n      >\n        <div className={classes.root}>\n          <div className={classes.iconsContainer} id=\"scrollableDiv\">\n            {icons}\n          </div>\n          {selectedIcon && (\n            <div className={classes.selection}>\n              <div className={classes.divider}>\n                <Divider orientation=\"vertical\" />\n              </div>\n              {selectedIcon && (\n                <Fade in={selectedIcon}>\n                  <div>\n                    <SelectedLibraryItem\n                      addItem={addItem}\n                      item={selectedIcon}\n                      title={title}\n                    />\n                  </div>\n                </Fade>\n              )}\n            </div>\n          )}\n        </div>\n      </InfiniteScroll>\n    </>\n  );\n};\n\nexport default memo(IconLibrary);\n"],"mappings":"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"}