@atlaskit/app-provider
Version:
A top level provider for the Design System.
31 lines (30 loc) • 1.5 kB
JavaScript
import { useEffect } from 'react';
import { getDocument } from '@atlaskit/browser-apis';
import { fg } from '@atlaskit/platform-feature-flags/fg';
import { installScrollbarHarmonisation } from './install-scrollbar-harmonisation';
import { installScrollbarHarmonisationTransparentTrack } from './install-scrollbar-harmonisation-transparent-track';
/**
* Activates the harmonised scrollbar appearance. An explicit value overrides the shared rollout
* gate; when omitted, the shared gate controls the appearance.
*/
export function useScrollbarHarmonisation(isEnabled) {
var isGateEnabled = fg('platform_dst_scrollbar_harmonisation');
var shouldEnable = isEnabled !== null && isEnabled !== void 0 ? isEnabled : isGateEnabled;
var isTransparentTrackGateEnabled = fg('platform_dst_scrollbar_harmonisation_transparent');
var shouldUseTransparentTrack = isGateEnabled && isTransparentTrackGateEnabled;
useEffect(function () {
if (!shouldEnable) {
return;
}
var targetDocument = getDocument();
if (!targetDocument) {
return;
}
var cleanupHarmonisation = installScrollbarHarmonisation(targetDocument);
var cleanupTransparentTrack = shouldUseTransparentTrack ? installScrollbarHarmonisationTransparentTrack(targetDocument) : undefined;
return function () {
cleanupTransparentTrack === null || cleanupTransparentTrack === void 0 || cleanupTransparentTrack();
cleanupHarmonisation();
};
}, [shouldEnable, shouldUseTransparentTrack]);
}