WEB APP: В контекст приложения добавлена API-фанкция для открытия закладки "ПАРУС 8 Онлайн"
This commit is contained in:
		
							parent
							
								
									e46214df89
								
							
						
					
					
						commit
						085364f4e8
					
				| @ -34,7 +34,7 @@ const P8O_API = window.parent?.parus?.clientApi; | |||||||
| export const ApplicationСtx = createContext(); | export const ApplicationСtx = createContext(); | ||||||
| 
 | 
 | ||||||
| //Провайдер контекста приложения
 | //Провайдер контекста приложения
 | ||||||
| export const ApplicationContext = ({ children }) => { | export const ApplicationContext = ({ guidGenerator, children }) => { | ||||||
|     //Подключим редьюсер состояния
 |     //Подключим редьюсер состояния
 | ||||||
|     const [state, dispatch] = useReducer(applicationReducer, INITIAL_STATE); |     const [state, dispatch] = useReducer(applicationReducer, INITIAL_STATE); | ||||||
| 
 | 
 | ||||||
| @ -56,6 +56,18 @@ export const ApplicationContext = ({ children }) => { | |||||||
|     //Поиск раздела по имени
 |     //Поиск раздела по имени
 | ||||||
|     const findPanelByName = name => state.panels.find(panel => panel.name == name); |     const findPanelByName = name => state.panels.find(panel => panel.name == name); | ||||||
| 
 | 
 | ||||||
|  |     //Отображение закладки "ПАРУС 8 Онлайн" с указанным URL
 | ||||||
|  |     const pOnlineShowTab = useCallback( | ||||||
|  |         ({ id, url, caption, onClose }) => { | ||||||
|  |             if (P8O_API) { | ||||||
|  |                 const _id = id || guidGenerator(); | ||||||
|  |                 P8O_API.ui.openTab({ id: _id, url, caption, onClose: () => (onClose ? onClose(_id) : null) }); | ||||||
|  |                 return _id; | ||||||
|  |             } else showMsgErr(ERROR.P8O_API_UNAVAILABLE); | ||||||
|  |         }, | ||||||
|  |         [showMsgErr, guidGenerator] | ||||||
|  |     ); | ||||||
|  | 
 | ||||||
|     //Отображение раздела "ПАРУС 8 Онлайн"
 |     //Отображение раздела "ПАРУС 8 Онлайн"
 | ||||||
|     const pOnlineShowUnit = useCallback( |     const pOnlineShowUnit = useCallback( | ||||||
|         ({ unitCode, showMethod = "main", inputParameters }) => { |         ({ unitCode, showMethod = "main", inputParameters }) => { | ||||||
| @ -130,6 +142,7 @@ export const ApplicationContext = ({ children }) => { | |||||||
|         <ApplicationСtx.Provider |         <ApplicationСtx.Provider | ||||||
|             value={{ |             value={{ | ||||||
|                 findPanelByName, |                 findPanelByName, | ||||||
|  |                 pOnlineShowTab, | ||||||
|                 pOnlineShowUnit, |                 pOnlineShowUnit, | ||||||
|                 pOnlineShowDocument, |                 pOnlineShowDocument, | ||||||
|                 pOnlineShowDictionary, |                 pOnlineShowDictionary, | ||||||
| @ -145,5 +158,6 @@ export const ApplicationContext = ({ children }) => { | |||||||
| 
 | 
 | ||||||
| //Контроль свойств - Провайдер контекста приложения
 | //Контроль свойств - Провайдер контекста приложения
 | ||||||
| ApplicationContext.propTypes = { | ApplicationContext.propTypes = { | ||||||
|  |     guidGenerator: PropTypes.func.isRequired, | ||||||
|     children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]) |     children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]) | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -62,8 +62,14 @@ const formatDateRF = value => (value ? dayjs(value).format("DD.MM.YYYY") : null) | |||||||
| //Форматирование числа в "Денежном" формате РФ
 | //Форматирование числа в "Денежном" формате РФ
 | ||||||
| const formatNumberRFCurrency = value => (hasValue(value) ? new Intl.NumberFormat("ru-RU", { minimumFractionDigits: 2 }).format(value) : null); | const formatNumberRFCurrency = value => (hasValue(value) ? new Intl.NumberFormat("ru-RU", { minimumFractionDigits: 2 }).format(value) : null); | ||||||
| 
 | 
 | ||||||
|  | //Формирование уникального идентификатора
 | ||||||
|  | const genGUID = () => | ||||||
|  |     "10000000-1000-4000-8000-100000000000".replace(/[018]/g, c => | ||||||
|  |         (c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16) | ||||||
|  |     ); | ||||||
|  | 
 | ||||||
| //----------------
 | //----------------
 | ||||||
| //Интерфейс модуля
 | //Интерфейс модуля
 | ||||||
| //----------------
 | //----------------
 | ||||||
| 
 | 
 | ||||||
| export { hasValue, getDisplaySize, deepCopyObject, object2Base64XML, formatDateRF, formatNumberRFCurrency }; | export { hasValue, getDisplaySize, deepCopyObject, object2Base64XML, formatDateRF, formatNumberRFCurrency, genGUID }; | ||||||
|  | |||||||
| @ -34,7 +34,7 @@ const PrjJobs = () => { | |||||||
|     const { showMsgErr, showMsgWarn, showMsgInfo } = useContext(MessagingСtx); |     const { showMsgErr, showMsgWarn, showMsgInfo } = useContext(MessagingСtx); | ||||||
| 
 | 
 | ||||||
|     //Подключение к контексту приложения
 |     //Подключение к контексту приложения
 | ||||||
|     const { pOnlineShowDocument, pOnlineShowDictionary, pOnlineUserProcedure, pOnlineUserReport } = useContext(ApplicationСtx); |     const { pOnlineShowTab, pOnlineShowDocument, pOnlineShowDictionary, pOnlineUserProcedure, pOnlineUserReport } = useContext(ApplicationСtx); | ||||||
| 
 | 
 | ||||||
|     //Выполнение запроса к серверу
 |     //Выполнение запроса к серверу
 | ||||||
|     const makeReq = async throwError => { |     const makeReq = async throwError => { | ||||||
| @ -54,6 +54,16 @@ const PrjJobs = () => { | |||||||
|         } |         } | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|  |     //Отображение закладки
 | ||||||
|  |     const openTab = () => { | ||||||
|  |         const id = pOnlineShowTab({ id: "123", url: "Modules/p8-panels/#/prj_fin", caption: "Экономика проектов", onClose: handleTabClose }); | ||||||
|  |         if (id) console.log(`Открыта закладка ${id}`); | ||||||
|  |         else console.log("Закладка не открыта"); | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     //При сокрытии закладки
 | ||||||
|  |     const handleTabClose = id => console.log(`Закрыта закладка ${id}`); | ||||||
|  | 
 | ||||||
|     //Генерация содержимого
 |     //Генерация содержимого
 | ||||||
|     return ( |     return ( | ||||||
|         <div> |         <div> | ||||||
| @ -71,6 +81,8 @@ const PrjJobs = () => { | |||||||
|             <br /> |             <br /> | ||||||
|             <Button onClick={() => navigateRoot()}>Домой</Button> |             <Button onClick={() => navigateRoot()}>Домой</Button> | ||||||
|             <br /> |             <br /> | ||||||
|  |             <Button onClick={openTab}>Открыть закладку</Button> | ||||||
|  |             <br /> | ||||||
|             <Button onClick={() => makeReq(false)}>Без Exception</Button> |             <Button onClick={() => makeReq(false)}>Без Exception</Button> | ||||||
|             <br /> |             <br /> | ||||||
|             <Button onClick={() => makeReq(true)}>С Exception</Button> |             <Button onClick={() => makeReq(true)}>С Exception</Button> | ||||||
|  | |||||||
| @ -12,6 +12,7 @@ import { MessagingContext } from "./context/messaging"; //Контекст со | |||||||
| import { BackEndContext } from "./context/backend"; //Контекст взаимодействия с сервером
 | import { BackEndContext } from "./context/backend"; //Контекст взаимодействия с сервером
 | ||||||
| import { ApplicationContext } from "./context/application"; //Контекст приложения
 | import { ApplicationContext } from "./context/application"; //Контекст приложения
 | ||||||
| import { App } from "./app"; //Приложение
 | import { App } from "./app"; //Приложение
 | ||||||
|  | import { genGUID } from "./core/utils"; //Вспомогательные функции
 | ||||||
| 
 | 
 | ||||||
| //-----------
 | //-----------
 | ||||||
| //Тело модуля
 | //Тело модуля
 | ||||||
| @ -22,7 +23,7 @@ const Root = () => { | |||||||
|     return ( |     return ( | ||||||
|         <MessagingContext> |         <MessagingContext> | ||||||
|             <BackEndContext> |             <BackEndContext> | ||||||
|                 <ApplicationContext> |                 <ApplicationContext guidGenerator={genGUID}> | ||||||
|                     <App /> |                     <App /> | ||||||
|                 </ApplicationContext> |                 </ApplicationContext> | ||||||
|             </BackEndContext> |             </BackEndContext> | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user