merge
This commit is contained in:
commit
bb7f6e4a92
@ -1,11 +1,13 @@
|
||||
version: "3.3"
|
||||
services:
|
||||
admin:
|
||||
container_name: admin_front
|
||||
restart: unless-stopped
|
||||
image: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG.$CI_PIPELINE_ID
|
||||
networks:
|
||||
- penahub_frontend
|
||||
hostname: hub
|
||||
- marketplace_penahub_frontend
|
||||
hostname: admin
|
||||
tty: true
|
||||
networks:
|
||||
penahub_frontend:
|
||||
marketplace_penahub_frontend:
|
||||
external: true
|
||||
|
||||
@ -22,10 +22,8 @@
|
||||
"@types/react": "^18.0.18",
|
||||
"@types/react-dom": "^18.0.6",
|
||||
"@types/react-router-dom": "^5.3.3",
|
||||
"craco": "^0.0.3",
|
||||
"dayjs": "^1.11.5",
|
||||
"moment": "^2.29.4",
|
||||
"nanoid": "^4.0.1",
|
||||
"numeral": "^2.0.6",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
@ -61,8 +59,5 @@
|
||||
"last 1 firefox version",
|
||||
"last 1 safari version"
|
||||
]
|
||||
},
|
||||
"devDependencies": {
|
||||
"craco-alias": "^3.0.1"
|
||||
}
|
||||
}
|
||||
|
||||
44
src/__tests__/menu-link.test.js
Normal file
44
src/__tests__/menu-link.test.js
Normal file
@ -0,0 +1,44 @@
|
||||
const puppeteer = require('puppeteer');
|
||||
const url = "http://localhost:3000/users";
|
||||
const urlMass = ['/users','/tariffs','/discounts','/promocode','/support', '/entities'];
|
||||
|
||||
jest.setTimeout(1000 * 60 * 5);
|
||||
|
||||
let browser;
|
||||
let page;
|
||||
|
||||
describe('Тест', (() => {
|
||||
beforeAll(async()=>{
|
||||
browser = puppeteer.launch({headless:true});
|
||||
page = browser.newPage();
|
||||
|
||||
page.goto(url);
|
||||
// Set screen size
|
||||
page.setViewport({width: 1080, height: 1024});
|
||||
|
||||
})
|
||||
afterAll(() => browser.quit());
|
||||
test('Тест меню',async () => {
|
||||
|
||||
// Ждем загрузки менюшек
|
||||
page.waitForSelector('.menu')
|
||||
|
||||
// Берем все ссылки с кнопок, у которых есть класс menu и вставляем в массив
|
||||
let menuLink = page.evaluate(()=>{
|
||||
let menuArray = document.querySelectorAll('.menu')
|
||||
let Urls = Object.values(menuArray).map(
|
||||
menuItem => (
|
||||
menuItem.href.slice(menuItem.href.lastIndexOf('/'))
|
||||
)
|
||||
)
|
||||
return Urls
|
||||
})
|
||||
// Проверяем, какие ссылки есть в нашем массиве, а каких нет
|
||||
for (let i = 0; i < menuLink.length; i++) {
|
||||
expect(urlMass.find((elem)=>elem===menuLink[i])).toBe(true)
|
||||
}
|
||||
|
||||
})
|
||||
}))
|
||||
|
||||
|
||||
81
src/pages/dashboard/Content/Tariffs/Contractor/index.tsx
Normal file
81
src/pages/dashboard/Content/Tariffs/Contractor/index.tsx
Normal file
@ -0,0 +1,81 @@
|
||||
import * as React from "react";
|
||||
import { Box, Typography, Button } from "@mui/material";
|
||||
import theme from "../../../../../theme";
|
||||
|
||||
|
||||
export interface MWProps {
|
||||
openModal: (type:number, num: number) => void
|
||||
}
|
||||
|
||||
const Contractor: React.FC<MWProps> = ({ openModal }) => {
|
||||
return (
|
||||
<React.Fragment>
|
||||
<Typography
|
||||
variant="subtitle1"
|
||||
sx={{
|
||||
width: "90%",
|
||||
height: "60px",
|
||||
display: "flex",
|
||||
flexDirection: "column",
|
||||
justifyContent: "center",
|
||||
alignItems: "center",
|
||||
color: theme.palette.secondary.main
|
||||
}}>
|
||||
Сокращатель ссылок
|
||||
</Typography>
|
||||
|
||||
<Box sx={{
|
||||
marginTop: "35px",
|
||||
display: "grid",
|
||||
gridTemplateColumns: "repeat(2, 1fr)",
|
||||
gridGap: "20px",
|
||||
marginBottom: "120px",
|
||||
}}>
|
||||
<Button
|
||||
variant = "contained"
|
||||
onClick={ () => openModal(3, 1) }
|
||||
sx={{
|
||||
backgroundColor: theme.palette.menu.main,
|
||||
padding: '11px 65px',
|
||||
fontWeight: "normal",
|
||||
fontSize: "17px",
|
||||
"&:hover": {
|
||||
backgroundColor: theme.palette.grayMedium.main
|
||||
}
|
||||
}}>
|
||||
Создать тариф <br /> на аналитику время
|
||||
</Button>
|
||||
<Button
|
||||
variant = "contained"
|
||||
onClick={ () => openModal(3, 1) }
|
||||
sx={{
|
||||
backgroundColor: theme.palette.menu.main,
|
||||
padding: '11px 65px',
|
||||
fontWeight: "normal",
|
||||
fontSize: "17px",
|
||||
"&:hover": {
|
||||
backgroundColor: theme.palette.grayMedium.main
|
||||
}
|
||||
}}>
|
||||
Создать тариф <br /> на a/b тесты время
|
||||
</Button>
|
||||
<Button
|
||||
variant = "contained"
|
||||
sx={{
|
||||
backgroundColor: theme.palette.menu.main,
|
||||
padding: '11px 65px',
|
||||
fontWeight: "normal",
|
||||
fontSize: "17px",
|
||||
"&:hover": {
|
||||
backgroundColor: theme.palette.grayMedium.main
|
||||
}
|
||||
}}>
|
||||
Изменить тариф
|
||||
</Button>
|
||||
</Box>
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
export default Contractor;
|
||||
81
src/pages/dashboard/Content/Tariffs/Quiz/index.tsx
Normal file
81
src/pages/dashboard/Content/Tariffs/Quiz/index.tsx
Normal file
@ -0,0 +1,81 @@
|
||||
import * as React from "react";
|
||||
import { Box, Typography, Button } from "@mui/material";
|
||||
import theme from "../../../../../theme";
|
||||
|
||||
|
||||
export interface MWProps {
|
||||
openModal: (type:number, num: number) => void
|
||||
}
|
||||
|
||||
const Quiz: React.FC<MWProps> = ({ openModal }) => {
|
||||
return (
|
||||
<React.Fragment>
|
||||
<Typography
|
||||
variant="subtitle1"
|
||||
sx={{
|
||||
width: "90%",
|
||||
height: "60px",
|
||||
display: "flex",
|
||||
flexDirection: "column",
|
||||
justifyContent: "center",
|
||||
alignItems: "center",
|
||||
color: theme.palette.secondary.main
|
||||
}}>
|
||||
Опросник
|
||||
</Typography>
|
||||
|
||||
<Box sx={{
|
||||
marginTop: "35px",
|
||||
display: "grid",
|
||||
gridTemplateColumns: "repeat(2, 1fr)",
|
||||
gridGap: "20px",
|
||||
marginBottom: "120px",
|
||||
}}>
|
||||
<Button
|
||||
variant = "contained"
|
||||
onClick={ () => openModal(2, 1) }
|
||||
sx={{
|
||||
backgroundColor: theme.palette.menu.main,
|
||||
padding: "11px 43px",
|
||||
fontWeight: "normal",
|
||||
fontSize: "17px",
|
||||
"&:hover": {
|
||||
backgroundColor: theme.palette.grayMedium.main
|
||||
}
|
||||
}}>
|
||||
Создать тариф на время
|
||||
</Button>
|
||||
<Button
|
||||
variant = "contained"
|
||||
onClick={ () => openModal(2, 0) }
|
||||
sx={{
|
||||
backgroundColor: theme.palette.menu.main,
|
||||
padding: '11px 43px',
|
||||
fontWeight: "normal",
|
||||
fontSize: "17px",
|
||||
"&:hover": {
|
||||
backgroundColor: theme.palette.grayMedium.main
|
||||
}
|
||||
}}>
|
||||
Создать тариф на объем
|
||||
</Button>
|
||||
<Button
|
||||
variant = "contained"
|
||||
sx={{
|
||||
backgroundColor: theme.palette.menu.main,
|
||||
padding: '11px 43px',
|
||||
fontWeight: "normal",
|
||||
fontSize: "17px",
|
||||
"&:hover": {
|
||||
backgroundColor: theme.palette.grayMedium.main
|
||||
}
|
||||
}}>
|
||||
Изменить тариф
|
||||
</Button>
|
||||
</Box>
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
export default Quiz;
|
||||
95
src/pages/dashboard/Content/Tariffs/Templater/index.tsx
Normal file
95
src/pages/dashboard/Content/Tariffs/Templater/index.tsx
Normal file
@ -0,0 +1,95 @@
|
||||
import * as React from "react";
|
||||
import { Box, Typography, Button } from "@mui/material";
|
||||
import theme from "../../../../../theme";
|
||||
|
||||
|
||||
export interface MWProps {
|
||||
openModal: (type:number, num: number) => void
|
||||
}
|
||||
|
||||
const Templater: React.FC<MWProps> = ({ openModal }) => {
|
||||
return (
|
||||
<React.Fragment>
|
||||
<Typography
|
||||
variant="subtitle1"
|
||||
sx={{
|
||||
width: "90%",
|
||||
height: "60px",
|
||||
display: "flex",
|
||||
flexDirection: "column",
|
||||
justifyContent: "center",
|
||||
alignItems: "center",
|
||||
color: theme.palette.secondary.main
|
||||
}}>
|
||||
Шаблонизатор документов
|
||||
</Typography>
|
||||
|
||||
<Box sx={{
|
||||
marginTop: "35px",
|
||||
display: "grid",
|
||||
gridTemplateColumns: "repeat(2, 1fr)",
|
||||
gridGap: "20px",
|
||||
marginBottom: "120px",
|
||||
}}>
|
||||
<Button
|
||||
variant = "contained"
|
||||
onClick={ () => openModal(1, 1) }
|
||||
sx={{
|
||||
backgroundColor: theme.palette.menu.main,
|
||||
fontWeight: "normal",
|
||||
fontSize: "17px",
|
||||
padding: '11px 25px',
|
||||
"&:hover": {
|
||||
backgroundColor: theme.palette.grayMedium.main
|
||||
}
|
||||
}}>
|
||||
Создать тариф на время
|
||||
</Button>
|
||||
<Button
|
||||
variant = "contained"
|
||||
onClick={ () => openModal(1, 0) }
|
||||
sx={{
|
||||
backgroundColor: theme.palette.menu.main,
|
||||
padding: '11px 25px',
|
||||
fontWeight: "normal",
|
||||
fontSize: "17px",
|
||||
"&:hover": {
|
||||
backgroundColor: theme.palette.grayMedium.main
|
||||
}
|
||||
}}>
|
||||
Создать тариф на объем
|
||||
</Button>
|
||||
<Button
|
||||
variant = "contained"
|
||||
onClick={ () => openModal(1, 2) }
|
||||
sx={{
|
||||
backgroundColor: theme.palette.menu.main,
|
||||
padding: '11px 25px',
|
||||
fontWeight: "normal",
|
||||
fontSize: "17px",
|
||||
"&:hover": {
|
||||
backgroundColor: theme.palette.grayMedium.main
|
||||
}
|
||||
}}>
|
||||
Создать тариф на гигабайты
|
||||
</Button>
|
||||
<Button
|
||||
variant = "contained"
|
||||
sx={{
|
||||
backgroundColor: theme.palette.menu.main,
|
||||
padding: '11px 25px',
|
||||
fontWeight: "normal",
|
||||
fontSize: "17px",
|
||||
"&:hover": {
|
||||
backgroundColor: theme.palette.grayMedium.main
|
||||
}
|
||||
}}>
|
||||
Изменить тариф
|
||||
</Button>
|
||||
</Box>
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
export default Templater;
|
||||
@ -101,15 +101,15 @@ const Drawer = styled(MuiDrawer, { shouldForwardProp: (prop) => prop !== 'open'
|
||||
}),
|
||||
);
|
||||
|
||||
const links: {path: string; element: JSX.Element; title: string} [] =[
|
||||
{path: '/users', element: <PersonOutlineOutlinedIcon/>, title: 'Информация о проекте'},
|
||||
{path: '/entities', element: <SettingsOutlinedIcon/>, title: 'Юридические лица'},
|
||||
{path: '/tariffs', element: <BathtubOutlinedIcon/>, title: 'Шаблонизатор документов'},
|
||||
{path: '/discounts', element: <AddPhotoAlternateOutlinedIcon/>, title: 'Скидки'},
|
||||
{path: '/promocode', element: <NaturePeopleOutlinedIcon/>, title: 'Промокод'},
|
||||
{path: '/kkk', element: <SettingsIcon/>, title: 'Настройки'},
|
||||
{path: '/jjj', element: <CameraIcon/>, title: 'Камера' },
|
||||
{path: '/support', element: <HeadsetMicOutlinedIcon/>, title: 'Служба поддержки'},
|
||||
const links: {path: string; element: JSX.Element; title: string, className: string} [] =[
|
||||
{path: '/users', element: <PersonOutlineOutlinedIcon/>, title: 'Информация о проекте', className:'menu'},
|
||||
{path: '/entities', element: <SettingsOutlinedIcon/>, title: 'Юридические лица', className:'menu'},
|
||||
{path: '/tariffs', element: <BathtubOutlinedIcon/>, title: 'Шаблонизатор документов', className:'menu'},
|
||||
{path: '/discounts', element: <AddPhotoAlternateOutlinedIcon/>, title: 'Скидки', className:'menu'},
|
||||
{path: '/promocode', element: <NaturePeopleOutlinedIcon/>, title: 'Промокод', className:'menu'},
|
||||
{path: '/kkk', element: <SettingsIcon/>, title: 'Настройки', className:'menu'},
|
||||
{path: '/jjj', element: <CameraIcon/>, title: 'Камера', className:'menu'},
|
||||
{path: '/support', element: <HeadsetMicOutlinedIcon/>, title: 'Служба поддержки', className:'menu'},
|
||||
]
|
||||
|
||||
|
||||
@ -122,7 +122,7 @@ const Navigation = (props:any) => {
|
||||
>
|
||||
{links.map((e, i) => (
|
||||
<ListItem key={i} disablePadding sx={{ display: 'block' }}>
|
||||
<Link to={e.path} style={{textDecoration: 'none'}}>
|
||||
<Link to={e.path} style={{textDecoration: 'none'}} className={e.className}>
|
||||
<ListItemButton onClick={props.SladeMobileHC}
|
||||
sx={{
|
||||
minHeight: 48,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user