Compare commits

...

3 Commits

Author SHA1 Message Date
6442f1f407 Merge pull request 'feat: add dynamic routing (#25)' (#42) from feature/router-arm-dynamic into main
All checks were successful
it-academy/dry-wash-pl/pipeline/head This commit looks good
Reviewed-on: #42
Reviewed-by: Primakov Alexandr Alexandrovich <primakovpro@gmail.com>
2024-11-24 19:54:27 +03:00
b5f3838536 feat: separation of imports (#25)
All checks were successful
it-academy/dry-wash-pl/pipeline/pr-main This commit looks good
it-academy/dry-wash-pl/pipeline/head This commit looks good
2024-11-24 14:54:01 +03:00
dee3a04310 feat: add dynamic routing (#25)
Some checks failed
it-academy/dry-wash-pl/pipeline/pr-main There was a failure building this commit
it-academy/dry-wash-pl/pipeline/head There was a failure building this commit
2024-11-24 14:50:51 +03:00
5 changed files with 90 additions and 52 deletions

View File

@ -1,9 +1,9 @@
/* eslint-disable no-undef */ /* eslint-disable no-undef */
/* eslint-disable @typescript-eslint/no-require-imports */ /* eslint-disable @typescript-eslint/no-require-imports */
const pkg = require("./package"); const pkg = require('./package');
module.exports = { module.exports = {
apiPath: "stubs/api", apiPath: 'stubs/api',
webpackConfig: { webpackConfig: {
output: { output: {
publicPath: `/static/${pkg.name}/${process.env.VERSION || pkg.version}/`, publicPath: `/static/${pkg.name}/${process.env.VERSION || pkg.version}/`,
@ -11,17 +11,19 @@ module.exports = {
}, },
/* use https://admin.bro-js.ru/ to create config, navigations and features */ /* use https://admin.bro-js.ru/ to create config, navigations and features */
navigations: { navigations: {
"dry-wash.main": "/dry-wash", 'dry-wash.main': '/dry-wash',
"dry-wash.create": "/order", 'dry-wash.create': '/order',
"dry-wash.view.order": "/order/:orderId", 'dry-wash.view.order': '/order/:orderId',
"dry-wash.arm": "/arm", 'dry-wash.arm.master': '/master',
'dry-wash.arm.order': '/order',
'dry-wash.arm': '/arm/*',
}, },
features: { features: {
"dry-wash-pl": { 'dry-wash-pl': {
// add your features here in the format [featureName]: { value: string } // add your features here in the format [featureName]: { value: string }
}, },
}, },
config: { config: {
"dry-wash-pl.api": "/api", 'dry-wash-pl.api': '/api',
}, },
}; };

View File

@ -1,25 +1,40 @@
import { generatePath } from "react-router-dom"; import { generatePath } from 'react-router-dom';
import { getNavigationValue } from "@brojs/cli"; import { getNavigationValue } from '@brojs/cli';
import { Order } from "../models"; import { Order } from '../models';
const getFullUrls = (url: string) =>
`${getNavigationValue('dry-wash.main')}${url}`;
export const URLs = { export const URLs = {
landing: { landing: {
url: getNavigationValue("dry-wash.main"), url: getNavigationValue('dry-wash.main'),
getUrl() { getUrl() {
return this.url; return this.url;
} },
}, },
orderForm: { orderForm: {
url: getNavigationValue("dry-wash.create"), url: getNavigationValue('dry-wash.create'),
getUrl() { getUrl() {
return this.url; return this.url;
} },
}, },
orderView: { orderView: {
url: getNavigationValue("dry-wash.view.order"), url: getNavigationValue('dry-wash.view.order'),
getUrl(orderId: Order.Id) { getUrl(orderId: Order.Id) {
return generatePath(this.url, { orderId }); return generatePath(this.url, { orderId });
} },
} },
armMaster: {
url: getNavigationValue('dry-wash.arm.master'),
isOn: Boolean(getNavigationValue('dry-wash.arm.master')),
},
armOrder: {
url: getNavigationValue('dry-wash.arm.order'),
isOn: Boolean(getNavigationValue('dry-wash.arm.order')),
},
armBase: {
url: getFullUrls(getNavigationValue('dry-wash.arm')),
isOn: Boolean(getNavigationValue('dry-wash.arm')),
},
}; };

View File

@ -5,20 +5,33 @@ import { Navigate, Route, Routes } from 'react-router-dom';
import Sidebar from '../Sidebar'; import Sidebar from '../Sidebar';
import Orders from '../Orders'; import Orders from '../Orders';
import Masters from '../Masters'; import Masters from '../Masters';
import { URLs } from '../../__data__/urls';
const LayoutArm = () => ( const LayoutArm = () => {
let defaultRedirect = null;
if (URLs.armOrder.isOn) {
defaultRedirect = URLs.armOrder.url;
} else if (URLs.armMaster.isOn) {
defaultRedirect = URLs.armMaster.url;
}
return (
<Flex h='100vh'> <Flex h='100vh'>
<Sidebar /> <Sidebar />
<Box flex='1' bg='gray.50'> <Box flex='1' bg='gray.50'>
<Routes> <Routes>
<Route> <Route index element={<Navigate to={defaultRedirect} replace />} />
<Route index element={<Navigate to='orders' replace />} /> {URLs.armOrder.isOn && (
<Route path='orders' element={<Orders />} /> <Route path={URLs.armOrder.url} element={<Orders />} />
<Route path='masters' element={<Masters />} /> )}
</Route> {URLs.armMaster.isOn && (
<Route path={URLs.armMaster.url} element={<Masters />} />
)}
</Routes> </Routes>
</Box> </Box>
</Flex> </Flex>
); );
};
export default LayoutArm; export default LayoutArm;

View File

@ -3,6 +3,8 @@ import React from 'react';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { URLs } from '../../__data__/urls';
const Sidebar = () => { const Sidebar = () => {
const { t } = useTranslation('~', { const { t } = useTranslation('~', {
keyPrefix: 'dry-wash.arm.master.sideBar', keyPrefix: 'dry-wash.arm.master.sideBar',
@ -23,25 +25,29 @@ const Sidebar = () => {
<VStack align='start' spacing='4'> <VStack align='start' spacing='4'>
<Divider /> <Divider />
{URLs.armOrder.isOn && (
<Button <Button
as={Link} as={Link}
to='orders' to={URLs.armOrder.url}
w='100%' w='100%'
colorScheme='green' colorScheme='green'
variant='ghost' variant='ghost'
> >
{t('orders')} {t('orders')}
</Button> </Button>
)}
<Divider /> <Divider />
{URLs.armMaster.isOn && (
<Button <Button
as={Link} as={Link}
to='masters' to={URLs.armMaster.url}
w='100%' w='100%'
colorScheme='green' colorScheme='green'
variant='ghost' variant='ghost'
> >
{t('master')} {t('master')}
</Button> </Button>
)}
<Divider /> <Divider />
</VStack> </VStack>
</Box> </Box>

View File

@ -17,7 +17,9 @@ const Routers = () => {
<Route path={URLs.landing.url} element={<Landing />} /> <Route path={URLs.landing.url} element={<Landing />} />
<Route path={URLs.orderForm.url} element={<OrderForm />} /> <Route path={URLs.orderForm.url} element={<OrderForm />} />
<Route path={URLs.orderView.url} element={<OrderView />} /> <Route path={URLs.orderView.url} element={<OrderView />} />
<Route path='/dry-wash/arm/*' element={<Arm />}></Route> {URLs.armBase.isOn && (
<Route path={URLs.armBase.url} element={<Arm />}></Route>
)}
<Route path='*' element={<NotFound />} /> <Route path='*' element={<NotFound />} />
</Routes> </Routes>
</Suspense> </Suspense>