mirror of
				https://gitlab.nic.cz/turris/reforis/foris-js.git
				synced 2025-11-03 23:00:31 +01:00 
			
		
		
		
	Add CustomizationContext and custom hook
As we want to share customization context between reForis & Plugins
This commit is contained in:
		
							
								
								
									
										57
									
								
								src/customizationContext/CustomizationContext.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								src/customizationContext/CustomizationContext.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2019-2022 CZ.NIC z.s.p.o. (https://www.nic.cz/)
 | 
			
		||||
 *
 | 
			
		||||
 * This is free software, licensed under the GNU General Public License v3.
 | 
			
		||||
 * See /LICENSE for more information.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import React, { useContext, useEffect } from "react";
 | 
			
		||||
import PropTypes from "prop-types";
 | 
			
		||||
 | 
			
		||||
import { useAPIGet } from "../api/hooks";
 | 
			
		||||
import { ForisURLs } from "../utils/forisUrls";
 | 
			
		||||
 | 
			
		||||
import { Spinner } from "../bootstrap/Spinner";
 | 
			
		||||
 | 
			
		||||
CustomizationContextProvider.propTypes = {
 | 
			
		||||
    children: PropTypes.oneOfType([
 | 
			
		||||
        PropTypes.arrayOf(PropTypes.node),
 | 
			
		||||
        PropTypes.node,
 | 
			
		||||
    ]),
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function CustomizationContextProvider({ children }) {
 | 
			
		||||
    const { CustomizationContext } = window;
 | 
			
		||||
    const [getCustomizationResponse, getCustomization] = useAPIGet(
 | 
			
		||||
        ForisURLs.about
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    useEffect(() => {
 | 
			
		||||
        getCustomization();
 | 
			
		||||
    }, [getCustomization]);
 | 
			
		||||
 | 
			
		||||
    if (getCustomizationResponse.state !== "success") {
 | 
			
		||||
        return <Spinner fullScreen />;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const deviceDetails = getCustomizationResponse.data || {};
 | 
			
		||||
 | 
			
		||||
    const isCustomized = !!(
 | 
			
		||||
        deviceDetails &&
 | 
			
		||||
        deviceDetails.customization !== undefined &&
 | 
			
		||||
        deviceDetails.customization === "shield"
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
        <CustomizationContext.Provider value={{ deviceDetails, isCustomized }}>
 | 
			
		||||
            {children}
 | 
			
		||||
        </CustomizationContext.Provider>
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function useCustomizationContext() {
 | 
			
		||||
    const { CustomizationContext } = window;
 | 
			
		||||
    return useContext(CustomizationContext);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export { CustomizationContextProvider, useCustomizationContext };
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2019-2021 CZ.NIC z.s.p.o. (http://www.nic.cz/)
 | 
			
		||||
 * Copyright (C) 2019-2022 CZ.NIC z.s.p.o. (https://www.nic.cz/)
 | 
			
		||||
 *
 | 
			
		||||
 * This is free software, licensed under the GNU General Public License v3.
 | 
			
		||||
 * See /LICENSE for more information.
 | 
			
		||||
@@ -91,3 +91,9 @@ export {
 | 
			
		||||
 | 
			
		||||
// Alert context
 | 
			
		||||
export { AlertContextProvider, useAlert } from "./alertContext/AlertContext";
 | 
			
		||||
 | 
			
		||||
// Customization context
 | 
			
		||||
export {
 | 
			
		||||
    CustomizationContextProvider,
 | 
			
		||||
    useCustomizationContext,
 | 
			
		||||
} from "./customizationContext/CustomizationContext";
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user