about summary refs log tree commit diff
path: root/src/view/com/modals/lang-settings/LanguageToggle.tsx
blob: 45b100f2012c3198f745081789052ae46c202fc7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import React from 'react'
import {StyleSheet} from 'react-native'
import {usePalette} from 'lib/hooks/usePalette'
import {ToggleButton} from 'view/com/util/forms/ToggleButton'
import {useLanguagePrefs, toPostLanguages} from '#/state/preferences/languages'

export function LanguageToggle({
  code2,
  name,
  onPress,
  langType,
}: {
  code2: string
  name: string
  onPress: () => void
  langType: 'contentLanguages' | 'postLanguages'
}) {
  const pal = usePalette('default')
  const langPrefs = useLanguagePrefs()

  const values =
    langType === 'contentLanguages'
      ? langPrefs.contentLanguages
      : toPostLanguages(langPrefs.postLanguage)
  const isSelected = values.includes(code2)

  // enforce a max of 3 selections for post languages
  let isDisabled = false
  if (langType === 'postLanguages' && values.length >= 3 && !isSelected) {
    isDisabled = true
  }

  return (
    <ToggleButton
      label={name}
      isSelected={isSelected}
      onPress={isDisabled ? undefined : onPress}
      style={[pal.border, styles.languageToggle, isDisabled && styles.dimmed]}
    />
  )
}

const styles = StyleSheet.create({
  languageToggle: {
    borderTopWidth: 1,
    borderRadius: 0,
    paddingHorizontal: 6,
    paddingVertical: 12,
  },
  dimmed: {
    opacity: 0.5,
  },
})