image-name-setting.tsx 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { useProjectSettingsContext } from '@/features/editor-left-menu/context/project-settings-context'
  2. import DropdownSetting from '../dropdown-setting'
  3. import type { Option } from '../dropdown-setting'
  4. import { useTranslation } from 'react-i18next'
  5. import { usePermissionsContext } from '@/features/ide-react/context/permissions-context'
  6. import { useMemo } from 'react'
  7. import getMeta from '@/utils/meta'
  8. import { useSetCompilationSettingWithEvent } from '@/features/editor-left-menu/hooks/use-set-compilation-setting'
  9. export default function ImageNameSetting() {
  10. const { imageName, setImageName } = useProjectSettingsContext()
  11. const { t } = useTranslation()
  12. const { write } = usePermissionsContext()
  13. const changeImageName = useSetCompilationSettingWithEvent(
  14. 'image-name',
  15. setImageName
  16. )
  17. const imageNames = useMemo(() => getMeta('ol-imageNames') || [], [])
  18. const options: Array<Option> = useMemo(
  19. () =>
  20. imageNames
  21. // filter out images that aren't allowed, unless thats the current image the project is on
  22. .filter(image => image.allowed || image.imageName === imageName)
  23. .map(({ imageName, imageDesc }) => ({
  24. value: imageName,
  25. label: imageDesc,
  26. })),
  27. [imageNames, imageName]
  28. )
  29. if (imageNames.length === 0) {
  30. return null
  31. }
  32. return (
  33. <DropdownSetting
  34. id="imageName"
  35. label={t('tex_live_version')}
  36. description={t('the_version_of_tex_live_used_for_compiling')}
  37. disabled={!write}
  38. options={options}
  39. onChange={changeImageName}
  40. value={imageName}
  41. translateOptions="no"
  42. />
  43. )
  44. }