feat: add i18next for arm (#17) #19
| @ -1,5 +1,33 @@ | |||||||
| { | { | ||||||
|   "dry-wash.arm.masters.add": "Добавить", |   "dry-wash.arm.master.add": "Добавить", | ||||||
|   "dry-wash.order.status.progress": "Выполняется", |   "dry-wash.arm.order.title": "Заказы", | ||||||
|   "dry-wash.order.status.complete": "Завершено" |   "dry-wash.arm.order.status.progress": "Выполняется", | ||||||
|  |   "dry-wash.arm.order.status.complete": "Завершено", | ||||||
|  |   "dry-wash.arm.order.status.pending": "в ожидании", | ||||||
|  |   "dry-wash.arm.order.status.working": "В работе", | ||||||
|  |   "dry-wash.arm.order.status.canceled": "Отменено", | ||||||
|  |   "dry-wash.arm.order.status.placeholder": "Выберите статус", | ||||||
|  |   "dry-wash.arm.order.table.header.carNumber": "Номер машины", | ||||||
|  |   "dry-wash.arm.order.table.header.washingTime": "Время мойки", | ||||||
|  |   "dry-wash.arm.order.table.header.orderDate": "Дата заказа", | ||||||
|  |   "dry-wash.arm.order.table.header.status": "Статус", | ||||||
|  |   "dry-wash.arm.order.table.header.telephone": "Телефон", | ||||||
|  |   "dry-wash.arm.order.table.header.location": "Расположение", | ||||||
|  |   "dry-wash.arm.master.title": "Мастера", | ||||||
|  |   "dry-wash.arm.master.table.header.name": "Имя", | ||||||
|  |   "dry-wash.arm.master.table.header.currentJob": "Актуальная занятость", | ||||||
|  |   "dry-wash.arm.master.table.header.phone": "Телефон", | ||||||
|  |   "dry-wash.arm.master.table.header.actions": "Действия", | ||||||
|  |   "dry-wash.arm.master.table.actionsMenu.delete": "Удалить мастера", | ||||||
|  |   "dry-wash.arm.master.drawer.title": "Добавить нового мастера", | ||||||
|  |   "dry-wash.arm.master.drawer.inputName.label": "ФИО", | ||||||
|  |   "dry-wash.arm.master.drawer.inputName.placeholder": "Введите ФИО", | ||||||
|  |   "dry-wash.arm.master.drawer.inputPhone.label": "Номер телефона", | ||||||
|  |   "dry-wash.arm.master.drawer.inputPhone.placeholder": "Введите номер телефона", | ||||||
|  |   "dry-wash.arm.master.drawer.button.save": "Сохранить", | ||||||
|  |   "dry-wash.arm.master.drawer.button.cancel": "Отменить", | ||||||
|  |   "dry-wash.arm.master.sideBar.title": " Сухой мастер", | ||||||
|  |   "dry-wash.arm.master.sideBar.title.master": "Мастера", | ||||||
|  |   "dry-wash.arm.master.sideBar.title.orders": "Заказы" | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										1806
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1806
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -17,8 +17,7 @@ | |||||||
|     "author": "", |     "author": "", | ||||||
|     "license": "ISC", |     "license": "ISC", | ||||||
|     "dependencies": { |     "dependencies": { | ||||||
|         "@brojs/cli": "^1.3.0", |         "@brojs/cli": "^1.6.1", | ||||||
|         "@brojs/i18nextreactconfig": "^1.3.3", |  | ||||||
|         "@chakra-ui/icons": "^2.2.4", |         "@chakra-ui/icons": "^2.2.4", | ||||||
|         "@chakra-ui/react": "^2.4.2", |         "@chakra-ui/react": "^2.4.2", | ||||||
|         "@emotion/react": "^11.4.1", |         "@emotion/react": "^11.4.1", | ||||||
|  | |||||||
| @ -7,15 +7,16 @@ import { | |||||||
|   IconButton, |   IconButton, | ||||||
| } from '@chakra-ui/react'; | } from '@chakra-ui/react'; | ||||||
| import { EditIcon } from '@chakra-ui/icons'; | import { EditIcon } from '@chakra-ui/icons'; | ||||||
|  | import i18next from 'i18next'; | ||||||
| 
 | 
 | ||||||
| const MasterActionsMenu = () => { | const MasterActionsMenu = () => { | ||||||
|   return ( |   return ( | ||||||
|     <Menu> |     <Menu> | ||||||
|       <MenuButton icon={<EditIcon />} as={IconButton} variant='outline' /> |       <MenuButton icon={<EditIcon />} as={IconButton} variant='outline' /> | ||||||
|       <MenuList> |       <MenuList> | ||||||
|         <MenuItem>Посмотреть профиль</MenuItem> |         <MenuItem> | ||||||
|         <MenuItem>Изменить расписание</MenuItem> |           {i18next.t('dry-wash.arm.master.table.actionsMenu.delete')} | ||||||
|         <MenuItem>Удалить мастера</MenuItem> |         </MenuItem> | ||||||
|       </MenuList> |       </MenuList> | ||||||
|     </Menu> |     </Menu> | ||||||
|   ); |   ); | ||||||
|  | |||||||
| @ -12,6 +12,7 @@ import { | |||||||
|   DrawerHeader, |   DrawerHeader, | ||||||
|   DrawerOverlay, |   DrawerOverlay, | ||||||
| } from '@chakra-ui/react'; | } from '@chakra-ui/react'; | ||||||
|  | import i18next from 'i18next'; | ||||||
| 
 | 
 | ||||||
| const MasterDrawer = ({ isOpen, onClose }) => { | const MasterDrawer = ({ isOpen, onClose }) => { | ||||||
|   const [newMaster, setNewMaster] = useState({ name: '', phone: '' }); |   const [newMaster, setNewMaster] = useState({ name: '', phone: '' }); | ||||||
| @ -26,35 +27,46 @@ const MasterDrawer = ({ isOpen, onClose }) => { | |||||||
|       <DrawerOverlay /> |       <DrawerOverlay /> | ||||||
|       <DrawerContent> |       <DrawerContent> | ||||||
|         <DrawerCloseButton /> |         <DrawerCloseButton /> | ||||||
|         <DrawerHeader>Добавить нового мастера</DrawerHeader> |         <DrawerHeader> | ||||||
|  |           {i18next.t('dry-wash.arm.master.drawer.title')} | ||||||
|  |         </DrawerHeader> | ||||||
|         <DrawerBody> |         <DrawerBody> | ||||||
|           <FormControl mb='4'> |           <FormControl mb='4'> | ||||||
|             <FormLabel>ФИО</FormLabel> |             <FormLabel> | ||||||
|  |               {i18next.t('dry-wash.arm.master.drawer.inputName.label')} | ||||||
|  |             </FormLabel> | ||||||
|             <Input |             <Input | ||||||
|               value={newMaster.name} |               value={newMaster.name} | ||||||
|               onChange={(e) => |               onChange={(e) => | ||||||
|                 setNewMaster({ ...newMaster, name: e.target.value }) |                 setNewMaster({ ...newMaster, name: e.target.value }) | ||||||
|               } |               } | ||||||
|               placeholder='Введите ФИО' |               placeholder={i18next.t( | ||||||
|  |                 'dry-wash.arm.master.drawer.inputName.placeholder', | ||||||
|  |               )} | ||||||
|             /> |             /> | ||||||
|           </FormControl> |           </FormControl> | ||||||
|           <FormControl> |           <FormControl> | ||||||
|             <FormLabel>Номер телефона</FormLabel> |             <FormLabel> | ||||||
|  |               {' '} | ||||||
|  |               {i18next.t('dry-wash.arm.master.drawer.inputPhone.label')} | ||||||
|  |             </FormLabel> | ||||||
|             <Input |             <Input | ||||||
|               value={newMaster.phone} |               value={newMaster.phone} | ||||||
|               onChange={(e) => |               onChange={(e) => | ||||||
|                 setNewMaster({ ...newMaster, phone: e.target.value }) |                 setNewMaster({ ...newMaster, phone: e.target.value }) | ||||||
|               } |               } | ||||||
|               placeholder='Введите номер телефона' |               placeholder={i18next.t( | ||||||
|  |                 'dry-wash.arm.master.drawer.inputPhone.placeholder', | ||||||
|  |               )} | ||||||
|             /> |             /> | ||||||
|           </FormControl> |           </FormControl> | ||||||
|         </DrawerBody> |         </DrawerBody> | ||||||
|         <DrawerFooter> |         <DrawerFooter> | ||||||
|           <Button colorScheme='teal' mr={3} onClick={handleSave}> |           <Button colorScheme='teal' mr={3} onClick={handleSave}> | ||||||
|             Сохранить |             {i18next.t('dry-wash.arm.master.drawer.button.save')} | ||||||
|           </Button> |           </Button> | ||||||
|           <Button variant='ghost' onClick={onClose}> |           <Button variant='ghost' onClick={onClose}> | ||||||
|             Отменить |             {i18next.t('dry-wash.arm.master.drawer.button.cancel')} | ||||||
|           </Button> |           </Button> | ||||||
|         </DrawerFooter> |         </DrawerFooter> | ||||||
|       </DrawerContent> |       </DrawerContent> | ||||||
| @ -13,10 +13,10 @@ import { | |||||||
| } from '@chakra-ui/react'; | } from '@chakra-ui/react'; | ||||||
| import { mastersData } from '../../mocks'; | import { mastersData } from '../../mocks'; | ||||||
| import MasterItem from '../MasterItem'; | import MasterItem from '../MasterItem'; | ||||||
| import MasterDrawer from '../MasterModal'; | import MasterDrawer from '../MasterDrawer'; | ||||||
| import i18next from 'i18next'; | import i18next from 'i18next'; | ||||||
| 
 | 
 | ||||||
| const TABLE_HEADERS = ['Имя', 'Актуальная занятость', 'Телефон', 'Действия']; | const TABLE_HEADERS = ['name', 'currentJob', 'phone', 'actions']; | ||||||
| 
 | 
 | ||||||
| const Masters = () => { | const Masters = () => { | ||||||
|   const { isOpen, onOpen, onClose } = useDisclosure(); |   const { isOpen, onOpen, onClose } = useDisclosure(); | ||||||
| @ -24,16 +24,18 @@ const Masters = () => { | |||||||
|   return ( |   return ( | ||||||
|     <Box p='8'> |     <Box p='8'> | ||||||
|       <Flex justifyContent='space-between' alignItems='center' mb='5'> |       <Flex justifyContent='space-between' alignItems='center' mb='5'> | ||||||
|         <Heading size='lg'>Мастера</Heading> |         <Heading size='lg'> {i18next.t('dry-wash.arm.master.title')}</Heading> | ||||||
|         <Button colorScheme='green' onClick={onOpen}> |         <Button colorScheme='green' onClick={onOpen}> | ||||||
|           + {i18next.t('dry-wash.arm.masters.add')} |           + {i18next.t('dry-wash.arm.master.add')} | ||||||
|         </Button> |         </Button> | ||||||
|       </Flex> |       </Flex> | ||||||
|       <Table variant='simple' colorScheme='blackAlpha'> |       <Table variant='simple' colorScheme='blackAlpha'> | ||||||
|         <Thead> |         <Thead> | ||||||
|           <Tr> |           <Tr> | ||||||
|             {TABLE_HEADERS.map((name) => ( |             {TABLE_HEADERS.map((name) => ( | ||||||
|               <Th key={name}>{name}</Th> |               <Th key={name}> | ||||||
|  |                 {i18next.t(`dry-wash.arm.master.table.header.${name}`)} | ||||||
|  |               </Th> | ||||||
|             ))} |             ))} | ||||||
|           </Tr> |           </Tr> | ||||||
|         </Thead> |         </Thead> | ||||||
|  | |||||||
| @ -23,11 +23,11 @@ const OrderItem = ({ | |||||||
|         <Select |         <Select | ||||||
|           value={statusSelect} |           value={statusSelect} | ||||||
|           onChange={(e) => setStatus(e.target.value)} |           onChange={(e) => setStatus(e.target.value)} | ||||||
|           placeholder='Выберите статус' |           placeholder={i18next.t(`dry-wash.arm.order.status.placeholder`)} | ||||||
|         > |         > | ||||||
|           {statuses.map((status) => ( |           {statuses.map((status) => ( | ||||||
|             <option key={status} value={status}> |             <option key={status} value={status}> | ||||||
|               {i18next.t(`dry-wash.order.status.${status}`)} |               {i18next.t(`dry-wash.arm.order.status.${status}`)} | ||||||
|             </option> |             </option> | ||||||
|           ))} |           ))} | ||||||
|         </Select> |         </Select> | ||||||
|  | |||||||
| @ -2,26 +2,28 @@ import { Box, Heading, Table, Thead, Tbody, Tr, Th } from '@chakra-ui/react'; | |||||||
| import React from 'react'; | import React from 'react'; | ||||||
| import { ordersData } from '../../mocks'; | import { ordersData } from '../../mocks'; | ||||||
| import OrderItem from '../OrderItem'; | import OrderItem from '../OrderItem'; | ||||||
| 
 | import i18next from 'i18next'; | ||||||
| const Orders = () => { | const Orders = () => { | ||||||
|   const TABLE_HEADERS = [ |   const TABLE_HEADERS = [ | ||||||
|     'Номер машины', |     'carNumber', | ||||||
|     'Время мойки', |     'washingTime', | ||||||
|     'Дата заказа', |     'orderDate', | ||||||
|     'Статус', |     'status', | ||||||
|     'Телефон', |     'telephone', | ||||||
|     'Расположение', |     'location', | ||||||
|   ]; |   ]; | ||||||
|   return ( |   return ( | ||||||
|     <Box p='8'> |     <Box p='8'> | ||||||
|       <Heading size='lg' mb='5'> |       <Heading size='lg' mb='5'> | ||||||
|         Заказы |         {i18next.t('dry-wash.arm.order.title')} | ||||||
|       </Heading> |       </Heading> | ||||||
|       <Table variant='simple' colorScheme='blackAlpha'> |       <Table variant='simple' colorScheme='blackAlpha'> | ||||||
|         <Thead> |         <Thead> | ||||||
|           <Tr> |           <Tr> | ||||||
|             {TABLE_HEADERS.map((name, key) => ( |             {TABLE_HEADERS.map((name, key) => ( | ||||||
|               <Th key={key}>{name}</Th> |               <Th key={key}> | ||||||
|  |                 {i18next.t(`dry-wash.arm.order.table.header.${name}`)} | ||||||
|  |               </Th> | ||||||
|             ))} |             ))} | ||||||
|           </Tr> |           </Tr> | ||||||
|         </Thead> |         </Thead> | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| import { Box, Button, Heading, VStack } from '@chakra-ui/react'; | import { Box, Button, Heading, VStack } from '@chakra-ui/react'; | ||||||
| import React from 'react'; | import React from 'react'; | ||||||
| import { Divider } from '@chakra-ui/react'; | import { Divider } from '@chakra-ui/react'; | ||||||
| 
 | import i18next from 'i18next'; | ||||||
| const Sidebar = ({ onSelectPage }) => ( | const Sidebar = ({ onSelectPage }) => ( | ||||||
|   <Box |   <Box | ||||||
|     borderRight='1px solid black' |     borderRight='1px solid black' | ||||||
| @ -12,7 +12,7 @@ const Sidebar = ({ onSelectPage }) => ( | |||||||
|     pt='8' |     pt='8' | ||||||
|   > |   > | ||||||
|     <Heading color='green' size='lg' mb='5'> |     <Heading color='green' size='lg' mb='5'> | ||||||
|       Сухой мастер |       {i18next.t(`dry-wash.arm.master.sideBar.title`)} | ||||||
|     </Heading> |     </Heading> | ||||||
| 
 | 
 | ||||||
|     <VStack align='start' spacing='4'> |     <VStack align='start' spacing='4'> | ||||||
| @ -23,7 +23,7 @@ const Sidebar = ({ onSelectPage }) => ( | |||||||
|         colorScheme='green' |         colorScheme='green' | ||||||
|         variant='ghost' |         variant='ghost' | ||||||
|       > |       > | ||||||
|         Заказы |         {i18next.t(`dry-wash.arm.master.sideBar.title.orders`)} | ||||||
|       </Button> |       </Button> | ||||||
|       <Divider /> |       <Divider /> | ||||||
|       <Button |       <Button | ||||||
| @ -32,7 +32,7 @@ const Sidebar = ({ onSelectPage }) => ( | |||||||
|         colorScheme='green' |         colorScheme='green' | ||||||
|         variant='ghost' |         variant='ghost' | ||||||
|       > |       > | ||||||
|         Мастера |         {i18next.t(`dry-wash.arm.master.sideBar.title.master`)} | ||||||
|       </Button> |       </Button> | ||||||
|       <Divider /> |       <Divider /> | ||||||
|     </VStack> |     </VStack> | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| /* eslint-disable react/display-name */ | /* eslint-disable react/display-name */ | ||||||
| import React from 'react'; | import React from 'react'; | ||||||
| import ReactDOM from 'react-dom/client'; | import ReactDOM from 'react-dom/client'; | ||||||
| import { i18nextReactInitConfig } from '@brojs/i18nextreactconfig'; | import { i18nextReactInitConfig } from '@brojs/cli'; | ||||||
| import App from './app'; | import App from './app'; | ||||||
| import i18next from 'i18next'; | import i18next from 'i18next'; | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user