fork download
  1. import React, { useState, useEffect } from 'react';
  2. import ActionSheetItem from "@vkontakte/vkui/dist/components/ActionSheetItem/ActionSheetItem";
  3. import ScreenSpinner from '@vkontakte/vkui/dist/components/ScreenSpinner/ScreenSpinner';
  4. import ActionSheet from "@vkontakte/vkui/dist/components/ActionSheet/ActionSheet";
  5. import BottomNavigationAction from "@material-ui/core/BottomNavigationAction";
  6. import Snackbar from '@vkontakte/vkui/dist/components/Snackbar/Snackbar';
  7. import Avatar from '@vkontakte/vkui/dist/components/Avatar/Avatar';
  8. import BottomNavigation from "@material-ui/core/BottomNavigation";
  9. import View from '@vkontakte/vkui/dist/components/View/View';
  10. import Card from "@vkontakte/vkui/dist/components/Card/Card";
  11. import FormControl from "@material-ui/core/FormControl";
  12. import IconError from '@vkontakte/icons/dist/24/error';
  13. import useEventListener from "@use-it/event-listener";
  14. import TextField from "@material-ui/core/TextField";
  15. import bridge from '@vkontakte/vk-bridge';
  16. import {Gallery} from "@vkontakte/vkui";
  17. import '@vkontakte/vkui/dist/vkui.css';
  18. import firebase from "firebase";
  19. import InfoRoundedIcon from '@material-ui/icons/InfoRounded';
  20. import {MonetizationOnRounded, ContactPhoneRounded} from '@material-ui/icons';
  21. import {contactsStable, infoBlock} from './variables/configs'
  22.  
  23. import './styles/App.css'
  24.  
  25. import Home from './panels/Home';
  26. import Intro from './panels/Intro';
  27. import Stable from './panels/Stable';
  28. import Merop from './panels/Merop';
  29. import Shop from './panels/Shop';
  30. import Shops from './panels/Shops';
  31.  
  32.  
  33.  
  34. const ROUTES = {
  35. HOME: 'home',
  36. INTRO: 'intro',
  37. STABLE: 'stable',
  38. MEROP: 'merop',
  39. SHOP: 'shop',
  40. SHOPS: 'shops',
  41. };
  42.  
  43. const STORAGE_KEYS = {
  44. STATUS_START: 'status',
  45. STATE: 'state',
  46. };
  47.  
  48.  
  49. const App = () => {
  50. const [activePanel, setActivePanel] = useState(ROUTES.INTRO);
  51. const [fetchedUser, setUser] = useState(null);
  52. const [popout, setPopout] = useState(<ScreenSpinner size='large' />);
  53. const [userHasSeeIntro, setUserHasSeeIntro] = useState(false);
  54. const [fetchedState, setFethedState] = useState(false);
  55. const [snackbar, setSnackBar] = useState(false);
  56. const [bodyStablePopup, setBodyStablePopup] = useState(0);
  57.  
  58.  
  59. useEffect(() => {
  60. bridge.subscribe(({ detail: { type, data }}) => {
  61. if (type === 'VKWebAppUpdateConfig') {
  62. const schemeAttribute = document.createAttribute('scheme');
  63. schemeAttribute.value = data.scheme ? data.scheme : 'client_light';
  64. document.body.attributes.setNamedItem(schemeAttribute);
  65. }
  66. });
  67. async function fetchData() {
  68. const user = await bridge.send('VKWebAppGetUserInfo');
  69. const storageData = await bridge.send('VKWebAppStorageGet', {
  70. keys: Object.values(STORAGE_KEYS)
  71. });
  72. const data = {};
  73. storageData.keys.forEach(({key, value}) => {
  74. try {
  75. data[key] = value ? JSON.parse(value): {};
  76. switch ( key) {
  77. case STORAGE_KEYS.STATUS_START:
  78. if (data[key].hasSeeIntro){
  79. setActivePanel(ROUTES.HOME);
  80. setUserHasSeeIntro(true);
  81.  
  82. }
  83. break;
  84. case STORAGE_KEYS.STATE:
  85. setFethedState(data[key]);
  86. break;
  87. default:
  88. break;
  89. }
  90. } catch(error){
  91. setSnackBar(<Snackbar
  92. layout= 'vertical'
  93. onClose={() => setSnackBar(null)}
  94. before={<Avatar size={24} style={{backgroundColor: 'var(--dynamic-red)'}}>
  95. <IconError fill='#fff' width='14' height='14'/></Avatar>}
  96. duration={980}
  97. >
  98. Произошла проблема получении из Storage
  99. </Snackbar>)
  100. }
  101. })
  102. setUser(user);
  103. setPopout(null);
  104. }
  105. fetchData()
  106. }, []);
  107.  
  108. const go = panel => {
  109. setActivePanel(panel);
  110. };
  111.  
  112. const viewIntro = async function () {
  113. try {
  114. await bridge.send('VKWebAppStorageSet', {
  115. key: STORAGE_KEYS.STATUS_START,
  116. value: JSON.stringify({
  117. hasSeeIntro: true
  118. })
  119. });
  120. go(ROUTES.HOME)
  121. } catch (error){
  122. setSnackBar(<Snackbar
  123. className='snackError'
  124. layout= 'vertical'
  125. onClose={() => setSnackBar(null)}
  126. before={<Avatar size={24} style={{backgroundColor: 'var(--dynamic-red)'}}>
  127. <IconError fill='#fff' width='14' height='14'/></Avatar>}
  128. duration={980}
  129. >
  130. Произошла проблема отправлении в Storage
  131. </Snackbar>)
  132. }
  133. }
  134.  
  135. const goStable = function () {
  136. go(ROUTES.STABLE)
  137. }
  138. const goMerop = function () {
  139. go(ROUTES.MEROP)
  140. }
  141.  
  142. const goHome = function () {
  143. go(ROUTES.HOME)
  144. }
  145. const goShop = function () {
  146. go(ROUTES.SHOP)
  147. }
  148.  
  149. function handler({key}) {
  150. if (['27', 'Escape'].includes(String(key))){
  151. if (activePanel !== ROUTES.HOME) {
  152. go(ROUTES.HOME)
  153. }
  154. }
  155. }
  156.  
  157. useEventListener('keydown', handler)
  158.  
  159. function showPoput() {
  160. function showLoginCode() {
  161. let xml = <FormControl fullWidth variant="outlined" >
  162. <TextField id="outlined-basic" label="Код из смс" variant="outlined" />
  163. </FormControl>;
  164.  
  165. setPopout(
  166. <ActionSheet
  167. onClose={() => setPopout(null)}
  168. iosCloseItem={<ActionSheetItem autoclose mode="cancel">Отменить</ActionSheetItem>}
  169. header={xml}
  170. toggleRef={React.createRef()}
  171. >
  172. <ActionSheetItem autoclose onClick={() => showLoginCode()}>
  173. Проверить
  174. </ActionSheetItem>
  175. </ActionSheet>
  176. )
  177. }
  178.  
  179.  
  180. if (localStorage.getItem('id') === 'sheet') {
  181. if (localStorage.getItem('type') === 'stable') {
  182. let pictures = []
  183. let value = 0
  184. let text = 'Конюшня'
  185. let photo;
  186. for (let i = 0; i < 3; i++) {
  187. if (localStorage.getItem('pic' + (i + 1)) === 'undefined') {
  188. photo = 'url(https://a...content-available-to-author-only...c.ru/wp-content/uploads/ovsyanaya-kasha-pri-saharnom-diabete3.png';
  189. }else{
  190. photo = "url(" + localStorage.getItem('pic' + (i + 1)) + ')';
  191. }
  192. if (localStorage.getItem('text') !== 'undefined') {
  193. text = localStorage.getItem('text');
  194. }
  195. pictures = pictures.concat(
  196. [<div style={{
  197. height: 270,
  198. backgroundImage: photo,
  199. backgroundPosition: 'center',
  200. backgroundSize: 'cover'
  201. }} /> ]
  202. )
  203. }
  204. let bodyInfo = [infoBlock(localStorage.getItem('name'), text, localStorage.getItem('cost'), localStorage.getItem('city'), localStorage.getItem('note'))];
  205. let bodyCost = [infoBlock('Стоимость аренды: ' + localStorage.getItem('cost_postoy'), 'Средняя стоимость тренировки: ' + localStorage.getItem('cost_traning'), localStorage.getItem('cost_more'))];
  206. let bodyCont = [contactsStable()]
  207. let temp = [
  208. <Card>
  209. <div id='xmlll' style={{backgroundColor: '#fff', borderRadius: 20}}>
  210. <Gallery
  211. slideWidth="90%"
  212. style={{ height: 270, borderRadius: '10px 10px 0px 0px'}}
  213. bullets="dark"
  214. showArrows
  215. >
  216. {pictures}
  217. </Gallery>
  218. <Gallery
  219. slideWidth="100%"
  220. align="center"
  221. style={{ height: '100%' }}
  222. slideIndex={bodyStablePopup}
  223. isDraggable={false}
  224. showArrows={false}
  225. >
  226. <div>
  227. {bodyInfo}
  228. </div>
  229. <div>
  230. {bodyCost}
  231. </div>
  232. <body>
  233. {bodyCont}
  234. </body>
  235. </Gallery>
  236. <div style={{margin: '0px auto'}}>
  237. <BottomNavigation
  238. value={bodyStablePopup}
  239. onChange={(event, newValue) => {
  240. setBodyStablePopup(newValue);
  241. alert(bodyStablePopup)
  242. }}
  243. showLabels
  244. style={{width: '100%', margin: '10, 10, 10, 10'}}
  245. >
  246. <BottomNavigationAction label="Иформация" icon={<InfoRoundedIcon />} />
  247. <BottomNavigationAction label="Стоимость" icon={<MonetizationOnRounded />} />
  248. <BottomNavigationAction label="Контакты" icon={<ContactPhoneRounded />} />
  249. </BottomNavigation>
  250. </div>
  251. </div>
  252. </Card>
  253.  
  254. ];
  255. setPopout(<ActionSheet
  256. onClose={() => setPopout(null)}
  257. iosCloseItem={<ActionSheetItem autoclose mode="cancel">Отменить</ActionSheetItem>}
  258. toggleRef={React.createRef()}
  259. style={{padding: 0}}
  260. >
  261. {temp}
  262. </ActionSheet>)
  263. }
  264.  
  265. if (localStorage.getItem('type') === 'typeEquine_edit') {
  266. function setEquineType(text) {
  267. try {
  268. bridge.send('VKWebAppStorageSet', {
  269. key: 'type_equine',
  270. value: text
  271. });
  272. } catch (error){
  273. setSnackBar(<Snackbar
  274. className='snackError'
  275. layout= 'vertical'
  276. onClose={() => setSnackBar(null)}
  277. before={<Avatar size={24} style={{backgroundColor: 'var(--dynamic-red)'}}>
  278. <IconError fill='#fff' width='14' height='14'/></Avatar>}
  279. duration={980}
  280. >
  281. Произошла проблема отправлении в Storage
  282. </Snackbar>)
  283. }
  284. }
  285. setPopout(<ActionSheet
  286. onClose={() => setPopout(null)}
  287. iosCloseItem={<ActionSheetItem autoclose mode="cancel">Отменить</ActionSheetItem>}
  288. toggleRef={React.createRef()}>
  289. <ActionSheetItem autoclose onClick={() => setEquineType('Конкур')}>
  290. Конкур
  291. </ActionSheetItem>
  292. <ActionSheetItem autoclose onClick={() => setEquineType('Выездка')}>
  293. Выездка
  294. </ActionSheetItem>
  295. </ActionSheet>)
  296. }
  297.  
  298. if (localStorage.getItem('type') === 'ad') {
  299. let url = localStorage.getItem('url')
  300. let xml = <h4>Перейти ли на {url}</h4>
  301.  
  302. function openUrl() {
  303. var win = window.open(url, '_blank');
  304. win.focus();
  305. }
  306.  
  307. setPopout(<ActionSheet
  308. onClose={() => setPopout(null)}
  309. iosCloseItem={<ActionSheetItem autoclose mode="cancel">Отменить</ActionSheetItem>}
  310. header={xml}
  311. toggleRef={React.createRef()}>
  312. <ActionSheetItem autoclose onClick={() => openUrl()}>
  313. Перейти
  314. </ActionSheetItem>
  315. </ActionSheet>)
  316. }
  317.  
  318. if (localStorage.getItem('type') === 'login') {
  319. // const window = {
  320. // recaptchaVerifier: undefined
  321. // }
  322. firebase.auth().useDeviceLanguage();
  323. // window.recaptchaVerifier = new firebase.auth.RecaptchaVerifier('go-to', {
  324. // 'size': 'invisible',
  325. // 'callback': () => {
  326. // alert('ok')
  327. // },
  328. // 'expired-callback': () => {
  329. // const open = false
  330. // setSnackBar(
  331. // <Snackbar open={open} autoHideDuration={6000} onClose={() => setSnackBar(null)}>
  332. // <Alert onClose={() => setSnackBar(null)} severity="error">
  333. // Ошибка в полученнии данных...
  334. // </Alert>
  335. // </Snackbar>
  336. // )
  337. // }
  338. // })
  339.  
  340. const handleChange = (event) => {
  341. currency = event.target.value;
  342. };
  343. const currencies = [
  344. {
  345. value: '+7',
  346. label: 'Россия',
  347. },
  348. ];
  349.  
  350. let currency = '+7';
  351.  
  352. let xml = <FormControl fullWidth variant="outlined" >
  353. <div>
  354. <TextField
  355. id="outlined-select-currency-native"
  356. select
  357. label="Код страны"
  358. value={currency}
  359. onChange={handleChange}
  360. SelectProps={{
  361. native: true,
  362. }}
  363. variant="outlined"
  364. style = {{width: 100}}
  365. >
  366. {currencies.map((option) => (
  367. <option key={option.value} value={option.value}>
  368. {option.label}
  369. </option>
  370. ))}
  371. </TextField>
  372. <TextField id="phone-number" label="Телефон" variant="outlined" />
  373. </div>
  374. </FormControl>;
  375. setPopout(
  376. <ActionSheet
  377. onClose={() => setPopout(null)}
  378. iosCloseItem={<ActionSheetItem autoclose mode="cancel">Отменить</ActionSheetItem>}
  379. header={xml}
  380. toggleRef={React.createRef()}
  381. >
  382. <ActionSheetItem autoclose id='go-to' className={'go-to'} onClick={() => showLoginCode(document.getElementsByTagName("phone-number")[0])}>
  383. Отправить код
  384. </ActionSheetItem>
  385. </ActionSheet>
  386. )
  387. localStorage.setItem('id', '');
  388. localStorage.setItem('type', '')
  389. }
  390. if (localStorage.getItem('type') === 'tovar') {
  391. let pictures = [];
  392. let text = localStorage.getItem('text')
  393. //
  394. for (var i = 0; i < 3; i++){
  395. pictures = pictures.concat([<div style={{
  396. height: 200,
  397. backgroundImage: "url(" + localStorage.getItem('img' + (i + 1)) + ')',
  398. backgroundPosition: 'center',
  399. backgroundSize: 'cover'
  400. }} />])
  401. }
  402.  
  403. setPopout(
  404. <ActionSheet
  405. className='tovarSheet'
  406. onClose={() => setPopout(null)}
  407. iosCloseItem={<ActionSheetItem autoclose mode="cancel">Отменить</ActionSheetItem>}
  408. header={
  409. <div>
  410. <Gallery
  411. slideWidth="90%"
  412. style={{ height: 200}}
  413. bullets="dark"
  414. showArrows
  415. >
  416. {pictures}
  417. </Gallery>
  418. <h4> {text} </h4>
  419. </div>
  420. }
  421. toggleRef={React.createRef()}
  422. >
  423. <ActionSheetItem autoclose>
  424. Позвонить
  425. </ActionSheetItem>
  426. </ActionSheet>
  427. )
  428. localStorage.setItem('id', '');
  429. localStorage.setItem('type', '');
  430. }
  431. }
  432.  
  433. }
  434.  
  435. return (
  436. <View activePanel={activePanel} popout={popout} onSwipeBack={goHome}>
  437. <Home id={ROUTES.HOME} fetchedUser={fetchedUser} fetchedState={fetchedState} snackbarError={snackbar} goStable={goStable} goMerop={goMerop} goShop={goShop} popup={showPoput}/>
  438. <Intro id={ROUTES.INTRO} fetchedUser={fetchedUser} go={viewIntro} snackbarError={snackbar} userHasSeeIntro={userHasSeeIntro}/>
  439. <Stable id={ROUTES.STABLE} fetchedUser={fetchedUser} snackbarError={snackbar} goHome={goHome} popup={showPoput}/>
  440. <Merop id={ROUTES.MEROP} fetchedUser={fetchedUser} fetchedState={fetchedState} snackbarError={snackbar} goHome={goHome} />
  441. <Shop id={ROUTES.SHOP} fetchedUser={fetchedUser} goHome={goHome} popup={showPoput} snackbarError={snackbar}/>
  442. <Shops id={ROUTES.SHOPS} />
  443. </View>
  444. );
  445. }
  446.  
  447.  
  448. export default App;
  449.  
  450.  
Runtime error #stdin #stdout #stderr 0.37s 41364KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
js: "prog.js", line 1: missing ; before statement
js: import React, { useState, useEffect } from 'react';
js: ............^
js: "prog.js", line 2: missing ; before statement
js: import ActionSheetItem from "@vkontakte/vkui/dist/components/ActionSheetItem/ActionSheetItem";
js: ......................^
js: "prog.js", line 3: missing ; before statement
js: import ScreenSpinner from '@vkontakte/vkui/dist/components/ScreenSpinner/ScreenSpinner';
js: ....................^
js: "prog.js", line 4: missing ; before statement
js: import ActionSheet from "@vkontakte/vkui/dist/components/ActionSheet/ActionSheet";
js: ..................^
js: "prog.js", line 5: missing ; before statement
js: import BottomNavigationAction from "@material-ui/core/BottomNavigationAction";
js: .............................^
js: "prog.js", line 6: missing ; before statement
js: import Snackbar from '@vkontakte/vkui/dist/components/Snackbar/Snackbar';
js: ...............^
js: "prog.js", line 7: missing ; before statement
js: import Avatar from '@vkontakte/vkui/dist/components/Avatar/Avatar';
js: .............^
js: "prog.js", line 8: missing ; before statement
js: import BottomNavigation from "@material-ui/core/BottomNavigation";
js: .......................^
js: "prog.js", line 9: missing ; before statement
js: import View from '@vkontakte/vkui/dist/components/View/View';
js: ...........^
js: "prog.js", line 10: missing ; before statement
js: import Card from "@vkontakte/vkui/dist/components/Card/Card";
js: ...........^
js: "prog.js", line 11: missing ; before statement
js: import FormControl from "@material-ui/core/FormControl";
js: ..................^
js: "prog.js", line 12: missing ; before statement
js: import IconError from '@vkontakte/icons/dist/24/error';
js: ................^
js: "prog.js", line 13: missing ; before statement
js: import useEventListener from "@use-it/event-listener";
js: .......................^
js: "prog.js", line 14: missing ; before statement
js: import TextField from "@material-ui/core/TextField";
js: ................^
js: "prog.js", line 15: missing ; before statement
js: import bridge from '@vkontakte/vk-bridge';
js: .............^
js: "prog.js", line 16: missing ; before statement
js: import {Gallery} from "@vkontakte/vkui";
js: .......^
js: "prog.js", line 17: missing ; before statement
js: import '@vkontakte/vkui/dist/vkui.css';
js: .....................................^
js: "prog.js", line 18: missing ; before statement
js: import firebase from "firebase";
js: ...............^
js: "prog.js", line 19: missing ; before statement
js: import InfoRoundedIcon from '@material-ui/icons/InfoRounded';
js: ......................^
js: "prog.js", line 20: missing ; before statement
js: import {MonetizationOnRounded, ContactPhoneRounded} from '@material-ui/icons';
js: .......^
js: "prog.js", line 21: missing ; before statement
js: import {contactsStable, infoBlock} from './variables/configs'
js: .......^
js: "prog.js", line 25: missing ; before statement
js: import Home from './panels/Home';
js: ...........^
js: "prog.js", line 26: missing ; before statement
js: import Intro from './panels/Intro';
js: ............^
js: "prog.js", line 27: missing ; before statement
js: import Stable from './panels/Stable';
js: .............^
js: "prog.js", line 28: missing ; before statement
js: import Merop from './panels/Merop';
js: ............^
js: "prog.js", line 29: missing ; before statement
js: import Shop from './panels/Shop';
js: ...........^
js: "prog.js", line 30: missing ; before statement
js: import Shops from './panels/Shops';
js: ............^
js: "prog.js", line 60: SyntaxError: invalid object initializer
js: 		bridge.subscribe(({ detail: { type, data }}) => {
js: ....................................^
js: "prog.js", line 61: missing ; before statement
js: 			if (type === 'VKWebAppUpdateConfig') {
js: ........................................^
js: "prog.js", line 66: missing ) after argument list
js: 		});
js: ..^
js: "prog.js", line 66: syntax error
js: 		});
js: ...^
js: "prog.js", line 67: missing ; before statement
js: 		async function fetchData() {
js: ................^
js: "prog.js", line 68: missing ; before statement
js: 			const user = await bridge.send('VKWebAppGetUserInfo');
js: ............................^
js: "prog.js", line 69: missing ; before statement
js: 			const storageData = await bridge.send('VKWebAppStorageGet', {
js: ...................................^
js: "prog.js", line 70: syntax error
js: 				keys: Object.values(STORAGE_KEYS)
js: .........^
js: "prog.js", line 71: syntax error
js: 			});
js: ....^
js: "prog.js", line 73: SyntaxError: invalid object initializer
js: 			storageData.keys.forEach(({key, value}) => {
js: .................................^
js: "prog.js", line 90: syntax error
js: 				} catch(error){
js: ...........^
js: "prog.js", line 99: illegally formed XML syntax
js: 				</Snackbar>)
js: .....^
js: "prog.js", line 99: syntax error
js: 				</Snackbar>)
js: .....^
js: "prog.js", line 101: missing ; before statement
js: 			})
js: ....^
js: "prog.js", line 104: syntax error
js: 		}
js: ..^
js: "prog.js", line 106: syntax error
js: 	}, []);
js: .^
js: "prog.js", line 106: syntax error
js: 	}, []);
js: ..^
js: "prog.js", line 112: missing ; before statement
js: 	const viewIntro = async function () {
js: .................................^
js: "prog.js", line 114: missing ; before statement
js: 			await bridge.send('VKWebAppStorageSet', {
js: ...............^
js: "prog.js", line 115: syntax error
js: 				key: STORAGE_KEYS.STATUS_START,
js: ........^
js: "prog.js", line 116: syntax error
js: 				value: JSON.stringify({
js: ..........^
js: "prog.js", line 117: syntax error
js: 					hasSeeIntro: true
js: .................^
js: "prog.js", line 118: syntax error
js: 				})
js: .....^
js: "prog.js", line 119: syntax error
js: 			});
js: ....^
js: "prog.js", line 121: syntax error
js: 		} catch (error){
js: .........^
js: "prog.js", line 131: illegally formed XML syntax
js: 			</Snackbar>)
js: ....^
js: "prog.js", line 131: syntax error
js: 			</Snackbar>)
js: ....^
js: "prog.js", line 133: syntax error
js: 	}
js: .^
js: "prog.js", line 175: unterminated regular expression literal
js:                 </ActionSheet>
js: .............................^
js: "prog.js", line 249: illegally formed XML syntax
js: 								</BottomNavigation>
js: .........^
js: "prog.js", line 249: syntax error
js: 								</BottomNavigation>
js: .........^
js: "prog.js", line 250: unterminated regular expression literal
js: 							</div>
js: ............^
js: "prog.js", line 251: unterminated regular expression literal
js: 						</div>
js: ...........^
js: "prog.js", line 252: unterminated regular expression literal
js: 					</Card>
js: ...........^
js: "prog.js", line 262: illegally formed XML syntax
js: 				</ActionSheet>)
js: .....^
js: "prog.js", line 262: syntax error
js: 				</ActionSheet>)
js: .....^
js: "prog.js", line 282: illegally formed XML syntax
js: 						</Snackbar>)
js: .......^
js: "prog.js", line 282: syntax error
js: 						</Snackbar>)
js: .......^
js: "prog.js", line 292: missing ) after argument list
js: 					<ActionSheetItem autoclose onClick={() => setEquineType('Выездка')}>
js: ...............................^
js: "prog.js", line 294: illegally formed XML syntax
js: 					</ActionSheetItem>
js: ......^
js: "prog.js", line 294: syntax error
js: 					</ActionSheetItem>
js: ......^
js: "prog.js", line 295: unterminated regular expression literal
js: 				</ActionSheet>)
js: ..................^
js: "prog.js", line 315: unterminated regular expression literal
js: 				</ActionSheet>)
js: ..................^
js: "prog.js", line 371: illegally formed XML syntax
js: 						</TextField>
js: .......^
js: "prog.js", line 371: syntax error
js: 						</TextField>
js: .......^
js: "prog.js", line 372: missing ; before statement
js: 						<TextField id="phone-number" label="Телефон" variant="outlined" />
js: ...................^
js: "prog.js", line 373: unterminated regular expression literal
js: 					</div>
js: ..........^
js: "prog.js", line 374: unterminated regular expression literal
js: 				</FormControl>;
js: ..................^
js: "prog.js", line 385: unterminated regular expression literal
js: 						</ActionSheet>
js: ...................^
js: "prog.js", line 426: unterminated regular expression literal
js: 					</ActionSheet>
js: ..................^
js: "prog.js", line 448: missing ; before statement
js: export default App;
js: ..............^
js: "prog.js", line 449: missing } in compound statement
js: 
js: ^
js: "prog.js", line 449: missing } in compound statement
js: 
js: ^
js: "prog.js", line 449: missing } after function body
js: 
js: ^
js: "prog.js", line 1: Compilation produced 81 syntax errors.