UNPKG

@pnp/spfx-controls-react

Version:

Reusable React controls for SharePoint Framework solutions

87 lines 4.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ThemeContext = exports.useTheme = exports.getDefaultTheme = exports.EnhancedThemeProvider = void 0; var tslib_1 = require("tslib"); var react_theme_provider_1 = require("@fluentui/react-theme-provider"); var scheme_utilities_1 = require("@fluentui/scheme-utilities"); var Icons_1 = require("@fluentui/react/lib/Icons"); var Styling_1 = require("@fluentui/react/lib/Styling"); var React = tslib_1.__importStar(require("react")); var react_1 = require("react"); var FluentUITeamsDarkTheme_1 = require("../../common/fluentUIThemes/FluentUITeamsDarkTheme"); var FluentUITeamsDefaultTheme_1 = require("../../common/fluentUIThemes/FluentUITeamsDefaultTheme"); var FluentUITeamsHighContrastTheme_1 = require("../../common/fluentUIThemes/FluentUITeamsHighContrastTheme"); var react_theme_provider_2 = require("@fluentui/react-theme-provider"); Object.defineProperty(exports, "ThemeContext", { enumerable: true, get: function () { return react_theme_provider_2.ThemeContext; } }); Object.defineProperty(exports, "useTheme", { enumerable: true, get: function () { return react_theme_provider_2.useTheme; } }); var telemetry = tslib_1.__importStar(require("../../common/telemetry")); var sp_webpart_base_1 = require("@microsoft/sp-webpart-base"); var getDefaultTheme = function () { var _a; var currentTheme; var themeColorsFromWindow = (_a = window.__themeState__) === null || _a === void 0 ? void 0 : _a.theme; if (themeColorsFromWindow) { currentTheme = (0, Styling_1.createTheme)({ palette: themeColorsFromWindow }); } else { currentTheme = (0, Styling_1.getTheme)(); } return currentTheme; }; exports.getDefaultTheme = getDefaultTheme; var EnhancedThemeProvider = function (props) { var _a = (0, react_1.useState)(false), isInTeams = _a[0], setIsInTeams = _a[1]; var _b = (0, react_1.useState)(null), teamsThemeName = _b[0], setTeamsThemeName = _b[1]; // track the telemetry as 'ReactEnhancedThemeProvider' (0, react_1.useEffect)(function () { telemetry.track('ReactEnhancedThemeProvider'); }, []); // ***** (0, react_1.useEffect)(function () { (0, Icons_1.initializeIcons)(); }, []); (0, react_1.useEffect)(function () { setIsInTeams(props.context instanceof sp_webpart_base_1.WebPartContext && props.context.sdks.microsoftTeams ? true : false); }, [props.context]); (0, react_1.useEffect)(function () { var _a, _b; if (isInTeams) { var teamsInstance = props.context.sdks.microsoftTeams; setTeamsThemeName((_a = teamsInstance.context) === null || _a === void 0 ? void 0 : _a.theme); (_b = teamsInstance.teamsJs) === null || _b === void 0 ? void 0 : _b.registerOnThemeChangeHandler(function (theme) { setTeamsThemeName(theme); }); } }, [props.context, isInTeams]); var themeToApply = (0, react_1.useCallback)(function () { var workingTheme; if (isInTeams) { switch (teamsThemeName) { case "default": workingTheme = FluentUITeamsDefaultTheme_1.fluentUITeamsDefaultTheme; break; case "dark": workingTheme = FluentUITeamsDarkTheme_1.fluentUITeamsDarkTheme; break; case "contrast": workingTheme = FluentUITeamsHighContrastTheme_1.fluentUITeamsHighContrastTheme; break; default: workingTheme = FluentUITeamsDefaultTheme_1.fluentUITeamsDefaultTheme; break; } } else if (props.theme) { workingTheme = (0, scheme_utilities_1.getVariant)(props.theme, scheme_utilities_1.VariantThemeType.None); } else { workingTheme = getDefaultTheme(); } return workingTheme; }, [props.theme, teamsThemeName]); return (React.createElement(react_theme_provider_1.ThemeProvider, tslib_1.__assign({}, props, { theme: themeToApply() }), props.children)); }; exports.EnhancedThemeProvider = EnhancedThemeProvider; //# sourceMappingURL=EnhancedThemeProvider.js.map