|
| 1 | +/* eslint-disable react/jsx-props-no-spreading */ |
1 | 2 | import { languageLabels } from "@Assets/languageMap";
|
2 | 3 | import DragAndDrop from "@Components/DragAndDrop";
|
3 |
| -import { FormLabel, Modal } from "@mui/material"; |
| 4 | +import { |
| 5 | + Autocomplete, |
| 6 | + FormLabel, |
| 7 | + InputAdornment, |
| 8 | + MenuItem, |
| 9 | + Modal, |
| 10 | + Stack, |
| 11 | + TextField, |
| 12 | +} from "@mui/material"; |
4 | 13 | import { useCreateTranslation } from "@Utils/queries/studies";
|
5 | 14 | import { useFormik } from "formik";
|
6 | 15 | import { useEffect, useState } from "react";
|
7 |
| -import ReactFlagsSelect from "react-flags-select"; |
8 | 16 | import { useParams } from "react-router-dom";
|
9 | 17 | import * as yup from "yup";
|
| 18 | +import * as flags from "react-flags-select"; |
10 | 19 | import {
|
11 | 20 | CancelButton,
|
12 | 21 | DoneButton,
|
@@ -121,14 +130,99 @@ const AddTranslationModal = ({ open, onClose }: Props) => {
|
121 | 130 | </ModalDescription>
|
122 | 131 | <ModalContainer>
|
123 | 132 | <ModalContent>
|
124 |
| - <FormLabel required>Language</FormLabel> |
125 |
| - <ReactFlagsSelect |
126 |
| - countries={[...Object.keys(languageLabels)]} |
127 |
| - customLabels={languageLabels} |
128 |
| - placeholder="Select Language" |
129 |
| - selected={formik.values.language} |
130 |
| - // eslint-disable-next-line @typescript-eslint/no-misused-promises, @typescript-eslint/no-unsafe-member-access |
131 |
| - onSelect={(code) => formik.setFieldValue("language", code)} |
| 133 | + <FormLabel id="languageLabel" required> |
| 134 | + Language |
| 135 | + </FormLabel> |
| 136 | + <Autocomplete |
| 137 | + options={Object.keys(languageLabels)} |
| 138 | + value={formik.values.language || null} |
| 139 | + onChange={(_, newValue) => { |
| 140 | + formik.setFieldValue("language", newValue); |
| 141 | + }} |
| 142 | + filterOptions={(options, params) => { |
| 143 | + return options.filter((option) => |
| 144 | + languageLabels[option].primary |
| 145 | + .toLowerCase() |
| 146 | + .includes(params.inputValue.toLowerCase()), |
| 147 | + ); |
| 148 | + }} |
| 149 | + onBlur={formik.handleBlur} |
| 150 | + fullWidth |
| 151 | + getOptionLabel={(option) => |
| 152 | + `${languageLabels[option].primary} ${ |
| 153 | + languageLabels[option].secondary |
| 154 | + }` |
| 155 | + } |
| 156 | + renderInput={(params) => { |
| 157 | + if (!formik.values.language) { |
| 158 | + return ( |
| 159 | + <TextField |
| 160 | + {...params} |
| 161 | + placeholder="Select Language" |
| 162 | + size="small" |
| 163 | + /> |
| 164 | + ); |
| 165 | + } |
| 166 | + const countryCode = |
| 167 | + formik.values.language[0].toUpperCase() + |
| 168 | + formik.values.language[1].toLowerCase(); |
| 169 | + let CountryFlag; |
| 170 | + if (countryCode in flags) { |
| 171 | + CountryFlag = flags[countryCode]; |
| 172 | + } else { |
| 173 | + CountryFlag = "div"; |
| 174 | + } |
| 175 | + return ( |
| 176 | + <TextField |
| 177 | + {...params} |
| 178 | + placeholder="Select Language" |
| 179 | + size="small" |
| 180 | + // eslint-disable-next-line react/no-unstable-nested-components |
| 181 | + InputProps={{ |
| 182 | + ...params.InputProps, |
| 183 | + startAdornment: ( |
| 184 | + <InputAdornment |
| 185 | + position="start" |
| 186 | + sx={{ marginRight: 0 }} |
| 187 | + > |
| 188 | + <CountryFlag |
| 189 | + name={formik.values.language} |
| 190 | + selected="" |
| 191 | + onSelect={undefined} |
| 192 | + width={25} |
| 193 | + style={{ marginLeft: "10px" }} |
| 194 | + /> |
| 195 | + </InputAdornment> |
| 196 | + ), |
| 197 | + }} |
| 198 | + /> |
| 199 | + ); |
| 200 | + }} |
| 201 | + renderOption={(props, option) => { |
| 202 | + // eslint-disable-next-line react/prop-types |
| 203 | + const { key, ...optionProps } = props; |
| 204 | + const countryCode = |
| 205 | + option[0].toUpperCase() + option[1].toLowerCase(); |
| 206 | + let CountryFlag; |
| 207 | + if (countryCode in flags) { |
| 208 | + CountryFlag = flags[countryCode]; |
| 209 | + } else { |
| 210 | + CountryFlag = "div"; |
| 211 | + } |
| 212 | + return ( |
| 213 | + <MenuItem key={key} {...optionProps}> |
| 214 | + <Stack direction="row" alignItems="center" gap={1}> |
| 215 | + <CountryFlag |
| 216 | + name={option} |
| 217 | + selected="" |
| 218 | + onSelect={undefined} |
| 219 | + width={30} |
| 220 | + /> |
| 221 | + {languageLabels[option].primary} |
| 222 | + </Stack> |
| 223 | + </MenuItem> |
| 224 | + ); |
| 225 | + }} |
132 | 226 | />
|
133 | 227 | <FormLabel required>Upload Translation File</FormLabel>
|
134 | 228 | <DragAndDrop
|
|
0 commit comments