improve api

This commit is contained in:
Rene Haas
2022-10-22 13:13:36 +02:00
parent ef7466bb56
commit 77e8fdf064
3 changed files with 28 additions and 20 deletions
+21 -18
View File
@@ -66,14 +66,16 @@ export interface Environment {
* Sets a new default Initialization.
* If the new default Initialization is partially filled, its deeply merged with the current default Initialization.
* @param newDefaultInitialization The new default Initialization.
* @returns The current default Initialization.
*/
setDefaultInitialization(newDefaultInitialization: DeepPartial<Initialization>): void;
setDefaultInitialization(newDefaultInitialization: DeepPartial<Initialization>): Initialization;
/**
* Sets new default Options.
* If the new default Options are partially filled, they're deeply merged with the current default Options.
* @param newDefaultOptions The new default Options.
* @returns The current default options.
*/
setDefaultOptions(newDefaultOptions: DeepPartial<Options>): void;
setDefaultOptions(newDefaultOptions: DeepPartial<Options>): Options;
}
export interface InternalEnvironment {
@@ -87,9 +89,9 @@ export interface InternalEnvironment {
readonly _staticDefaultOptions: Options;
_addListener(listener: EventListener<EnvironmentEventMap, '_'>): () => void;
_getDefaultInitialization(): Initialization;
_setDefaultInitialization(newInitialization: DeepPartial<Initialization>): void;
_setDefaultInitialization(newInitialization: DeepPartial<Initialization>): Initialization;
_getDefaultOptions(): Options;
_setDefaultOptions(newDefaultOptions: DeepPartial<Options>): void;
_setDefaultOptions(newDefaultOptions: DeepPartial<Options>): Options;
}
let environmentInstance: InternalEnvironment;
@@ -210,6 +212,14 @@ const createEnvironment = (): InternalEnvironment => {
},
};
const staticDefaultOptions = assignDeep({}, defaultOptions);
const getDefaultOptions = (assignDeep as typeof assignDeep<Options, Options>).bind(
0,
{} as Options,
staticDefaultOptions
);
const getDefaultInitialization = (
assignDeep as typeof assignDeep<Initialization, Initialization>
).bind(0, {} as Initialization, staticDefaultInitialization);
const env: InternalEnvironment = {
_nativeScrollbarsSize: nativeScrollbarsSize,
@@ -219,20 +229,13 @@ const createEnvironment = (): InternalEnvironment => {
_rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),
_flexboxGlue: getFlexboxGlue(envElm, envChildElm),
_addListener: (listener) => addEvent('_', listener),
_getDefaultInitialization: (
assignDeep as typeof assignDeep<Initialization, Initialization>
).bind(0, {} as Initialization, staticDefaultInitialization),
_setDefaultInitialization(newInitializationStrategy) {
assignDeep(staticDefaultInitialization, newInitializationStrategy);
},
_getDefaultOptions: (assignDeep as typeof assignDeep<Options, Options>).bind(
0,
{} as Options,
staticDefaultOptions
),
_setDefaultOptions(newDefaultOptions) {
assignDeep(staticDefaultOptions, newDefaultOptions);
},
_getDefaultInitialization: getDefaultInitialization,
_setDefaultInitialization: (newInitializationStrategy) =>
assignDeep(staticDefaultInitialization, newInitializationStrategy) &&
getDefaultInitialization(),
_getDefaultOptions: getDefaultOptions,
_setDefaultOptions: (newDefaultOptions) =>
assignDeep(staticDefaultOptions, newDefaultOptions) && getDefaultOptions(),
_staticDefaultInitialization: assignDeep({}, staticDefaultInitialization),
_staticDefaultOptions: assignDeep({}, staticDefaultOptions),
};
@@ -166,6 +166,7 @@ export interface OverlayScrollbars {
* Sets the options of the instance.
* If the new options are partially filled, they're deeply merged with the current options.
* @param newOptions The new options.
* @returns Returns the current options of the instance.
*/
options(newOptions: DeepPartial<Options>): Options;
@@ -173,12 +174,14 @@ export interface OverlayScrollbars {
* Adds an event listener to the instance.
* @param name The name of the event.
* @param listener The listener which is invoked on that event.
* @returns Returns a function which removes the added listeners.
*/
on<N extends keyof EventListenerMap>(name: N, listener: EventListener<N>): () => void;
/**
* Adds multiple event listeners to the instance.
* @param name The name of the event.
* @param listener The listeners which are invoked on that event.
* @returns Returns a function which removes the added listeners.
*/
on<N extends keyof EventListenerMap>(name: N, listener: EventListener<N>[]): () => void;
@@ -90,7 +90,7 @@ describe('environment', () => {
expect(_getDefaultOptions()).not.toBe(defaultOptions);
expect(_getDefaultOptions()).toEqual(defaultOptions);
_setDefaultOptions(newDefaultOptions);
expect(_setDefaultOptions(newDefaultOptions)).toEqual(_getDefaultOptions());
expect(_getDefaultOptions()).toEqual({
...defaultOptions,
@@ -125,7 +125,9 @@ describe('environment', () => {
expect(_getDefaultInitialization()).not.toBe(defaultInitialization);
expect(_getDefaultInitialization()).toEqual(defaultInitialization);
_setDefaultInitialization(newDefaultInitialization);
expect(_setDefaultInitialization(newDefaultInitialization)).toEqual(
_getDefaultInitialization()
);
expect(_getDefaultInitialization()).toEqual({
...defaultInitialization,