@webkrafters/react-observable-context 4.1.4 → 4.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,17 +3,18 @@
3
3
  * @template {State} T
4
4
  * @see {ObservableContext<T>}
5
5
  */
6
- export function createContext<T extends import("../types").State>(): ObservableContext<T>;
6
+ export function createContext<T extends import("../types").State>(): ObservableContext<T, BaseSelectorMap<T>>;
7
7
 
8
8
  /**
9
9
  * Actively monitors the store and triggers component re-render if any of the watched keys in the state objects changes
10
10
  *
11
- * @param {ObservableContext<T>} context Refers to the PublicObservableContext<T> type of the ObservableContext<T>
12
- * @param {SelectorMap<T>} [selectorMap = {}] Key:value pairs where `key` => arbitrary key given to a Store.data property holding a state slice and `value` => property path to a state slice used by this component: see examples below. May add a mapping for a certain arbitrary key='state' and value='@@STATE' to indicate a desire to obtain the entire state object and assign to a `state` property of Store.data. A change in any of the referenced properties results in this component render. When using '@@STATE', note that any change within the state object will result in this component render.
13
- * @returns {Store<T>}
14
- * @template {State} T
15
- * @see {ObservableContext<T>}
16
- * @example
11
+ * @param {ObservableContext<STATE, SELECTOR_MAP>} context Refers to the PublicObservableContext<T> type of the ObservableContext<T>
12
+ * @param {SELECTOR_MAP} [selectorMap = {}] Key:value pairs where `key` => arbitrary key given to a Store.data property holding a state slice and `value` => property path to a state slice used by this component: see examples below. May add a mapping for a certain arbitrary key='state' and value='@@STATE' to indicate a desire to obtain the entire state object and assign to a `state` property of Store.data. A change in any of the referenced properties results in this component render. When using '@@STATE', note that any change within the state object will result in this component render.
13
+ * @returns {Store<STATE, SELECTOR_MAP>}
14
+ * @template {State} STATE
15
+ * @template {SelectorMap<STATE>} [SELECTOR_MAP=SelectorMap<STATE>]
16
+ * @see {ObservableContext<STATE,SELECTOR_MAP>}
17
+ * @exampleS
17
18
  * a valid property path follows the `lodash` object property path convention.
18
19
  * for a state = { a: 1, b: 2, c: 3, d: { e: 5, f: [6, { x: 7, y: 8, z: 9 } ] } }
19
20
  * Any of the following is an applicable selector map.
@@ -30,24 +31,24 @@ export function createContext<T extends import("../types").State>(): ObservableC
30
31
  * {myX: 'd.e.f[1].x'} or {myX: 'd.e.f.1.x'} => {myX: 7} // same applies to {myY: 'd.e.f[1].y'} = {myY: 8}; {myZ: 'd.e.f[1].z'} = {myZ: 9}
31
32
  * {myData: '@@STATE'} => {myData: state}
32
33
  */
33
- export function useContext<T extends import("../types").State>(context: ObservableContext<T>, selectorMap?: BaseSelectorMap<T>): Store<T>;
34
+ export function useContext<STATE extends import("../types").State, SELECTOR_MAP extends BaseSelectorMap<STATE> = BaseSelectorMap<STATE>>(context: ObservableContext<STATE, SELECTOR_MAP>, selectorMap?: SELECTOR_MAP): Store<STATE, SELECTOR_MAP>;
34
35
 
35
36
  /**
36
37
  * Provides an HOC function for connecting its WrappedComponent argument to the context store.
37
38
  *
38
39
  * The HOC function automatically memoizes any un-memoized WrappedComponent argument.
39
40
  *
40
- * @param {ObservableContext<STATE>} context - Refers to the PublicObservableContext<T> type of the ObservableContext<T>
41
+ * @param {ObservableContext<STATE, SELECTOR_MAP>} context - Refers to the PublicObservableContext<T> type of the ObservableContext<T>
41
42
  * @param {SELECTOR_MAP} [selectorMap] - Key:value pairs where `key` => arbitrary key given to a Store.data property holding a state slice and `value` => property path to a state slice used by this component: see examples below. May add a mapping for a certain arbitrary key='state' and value='@@STATE' to indicate a desire to obtain the entire state object and assign to a `state` property of Store.data. A change in any of the referenced properties results in this component render. When using '@@STATE', note that any change within the state object will result in this component render.
42
- * @returns {(WrappedComponent: C) => ConnectedComponent<OWNPROPS, Store<STATE>>} - Connector HOC function
43
+ * @returns {(WrappedComponent: C) => ConnectedComponent<OWNPROPS, Store<STATE, SELECTOR_MAP>>} - Connector HOC function
43
44
  * @template {State} STATE
44
45
  * @template {State} [OWNPROPS = {}]
45
46
  * @template {SelectorMap<STATE>} [SELECTOR_MAP=SelectorMap<STATE>]
46
- * @template {ComponentType<ConnectedComponentProps<OWNPROPS, PartialStore<STATE>>|ExoticComponent<ConnectedComponentProps<OWNPROPS, PartialStore<STATE>>} [C = ComponentType<ConnectedComponentProps<OWNPROPS, PartialStore<STATE>>]
47
- * @see {ObservableContext<STATE>}
47
+ * @template {ComponentType<ConnectedComponentProps<OWNPROPS, PartialStore<STATE, SELECTOR_MAP>>|ExoticComponent<ConnectedComponentProps<OWNPROPS, PartialStore<STATE, SELECTOR_MAP>>} [C = ComponentType<ConnectedComponentProps<OWNPROPS, PartialStore<STATE, SELECTOR_MAP>>]
48
+ * @see {ObservableContext<STATE,SELECTOR_MAP>}
48
49
  * @see {useContext} for selectorMap sample
49
50
  */
50
- export function connect<STATE extends import("../types").State, OWNPROPS extends import("../types").State = {}, SELECTOR_MAP extends BaseSelectorMap<STATE> = BaseSelectorMap<STATE>, C extends ComponentType<ConnectedComponentProps<OWNPROPS, PartialStore<STATE>> | import("react").ExoticComponent<ComponentType<ConnectedComponentProps<OWNPROPS, PartialStore<STATE>>>>> = ComponentType<ConnectedComponentProps<OWNPROPS, PartialStore<STATE>>>>(context: ObservableContext<STATE>, selectorMap?: SELECTOR_MAP): (WrappedComponent: C) => ConnectedComponent<OWNPROPS, Store<STATE>>;
51
+ export function connect<STATE extends import("../types").State, OWNPROPS extends import("../types").State = {}, SELECTOR_MAP extends BaseSelectorMap<STATE> = BaseSelectorMap<STATE>, C extends ComponentType<ConnectedComponentProps<OWNPROPS, PartialStore<STATE, SELECTOR_MAP>> | import("react").ExoticComponent<ComponentType<ConnectedComponentProps<OWNPROPS, PartialStore<STATE, SELECTOR_MAP>>>>> = ComponentType<ConnectedComponentProps<OWNPROPS, PartialStore<STATE, SELECTOR_MAP>>>>(context: ObservableContext<STATE, SELECTOR_MAP>, selectorMap?: SELECTOR_MAP): (WrappedComponent: C) => ConnectedComponent<OWNPROPS, Store<STATE, SELECTOR_MAP>>;
51
52
  export type CLEAR_TAG = typeof CLEAR_TAG;
52
53
 
53
54
  /** @example changes = { property: CLEAR_TAG } */
@@ -108,8 +109,8 @@ export type SPLICE_TAG = typeof SPLICE_TAG;
108
109
  export const SPLICE_TAG: "@@SPLICE";
109
110
  export class UsageError extends Error {
110
111
  }
111
- export type ObservableContext<T extends import("../types").State> = IObservableContext<T> | PublicObservableContext<T>;
112
- export type PublicObservableContext<T extends import("../types").State> = WithObservableProvider<Context<Store<T>>, T>;
112
+ export type ObservableContext<T extends import("../types").State, SELECTOR_MAP extends BaseSelectorMap<T> = BaseSelectorMap<T>> = IObservableContext<T> | PublicObservableContext<T, SELECTOR_MAP>;
113
+ export type PublicObservableContext<T extends import("../types").State, SELECTOR_MAP extends BaseSelectorMap<T> = BaseSelectorMap<T>> = WithObservableProvider<Context<Store<T, SELECTOR_MAP>>, T>;
113
114
  export type IObservableContext<T extends import("../types").State> = WithObservableProvider<Context<IStore>, T>;
114
115
  export type WithObservableProvider<T, S extends import("../types").State> = T & {
115
116
  Provider: ObservableProvider<S>;
@@ -132,25 +133,21 @@ export type StoreRef<T extends import("../types").State> = {
132
133
  export type State = import("../types").State;
133
134
  export type PartialState<T extends import("../types").State> = import("../types").PartialState<T>;
134
135
  export type Prehooks<T extends import("../types").State> = import("../types").Prehooks<T>;
135
- export type SelectorMap<T extends import("../types").State = import("../types").State, MAP extends BaseSelectorMap<T> = BaseSelectorMap<T>> = MAP;
136
- export type BaseSelectorMap<T extends import("../types").State> = {
137
- [dataPropKey: string]: string | keyof T;
138
- } & {
139
- [dataPropKey: string]: "@@STATE";
140
- };
136
+ export type BaseSelectorMap<T extends import("../types").State> = import("../types").BaseSelectorMap<T>;
137
+ export type SelectorMap<T extends import("../types").State = import("../types").State, MAP extends BaseSelectorMap<T> = BaseSelectorMap<T>> = import("../types").SelectorMap<T, MAP>;
141
138
  export type StoreInternal<T extends import("../types").State> = import("../types").StoreInternal<T>;
142
- export type PartialStore<T extends import("../types").State> = {
143
- data?: import("../types").Data;
139
+ export type PartialStore<T extends import("../types").State, SELECTOR_MAP extends BaseSelectorMap<T> = BaseSelectorMap<T>> = {
140
+ data?: import("../types").Data<SELECTOR_MAP>;
144
141
  resetState?: (propertyPaths?: string[]) => void;
145
142
  setState?: (changes: import("../types").Changes<T>) => void;
146
143
  };
147
- export type Store<T extends import("../types").State> = import("../types").Store<T>;
144
+ export type Store<T extends import("../types").State, SELECTOR_MAP extends BaseSelectorMap<T> = BaseSelectorMap<T>> = import("../types").Store<T, SELECTOR_MAP>;
148
145
  export type IStore = import("../types").IStore;
149
146
  export type IStorage<T extends import("../types").State> = import("../types").IStorage<T>;
150
- export type ConnectedComponent<OWNPROPS extends import("../types").State = {}, STORE extends Store<import("../types").State> = Store<import("../types").State>> = MemoExoticComponent<ConnectedComponentProps<OWNPROPS, STORE>>;
151
- export type ConnectedComponentProps<OWNPROPS extends import("../types").State = {}, STORE extends Store<import("../types").State> = Store<import("../types").State>> = STORE & OWNPROPS;
147
+ export type ConnectedComponent<OWNPROPS extends import("../types").State = {}, STORE extends Store<import("../types").State, BaseSelectorMap<import("../types").State>> = Store<import("../types").State, BaseSelectorMap<import("../types").State>>> = MemoExoticComponent<ConnectedComponentProps<OWNPROPS, STORE>>;
148
+ export type ConnectedComponentProps<OWNPROPS extends import("../types").State = {}, STORE extends Store<import("../types").State, BaseSelectorMap<import("../types").State>> = Store<import("../types").State, BaseSelectorMap<import("../types").State>>> = STORE & OWNPROPS;
152
149
  export type NonReactUsageReport = import("../types").NonReactUsageReport;
153
- export type Data = import("../types").Data;
150
+ export type Data<SELECTOR_MAP extends BaseSelectorMap<import("../types").State> = BaseSelectorMap<import("../types").State>> = import("../types").Data<SELECTOR_MAP>;
154
151
  export type ReactNode = import("react").ReactNode;
155
152
  export type ForwardRefExoticComponent<P, T> = import('react').ForwardRefExoticComponent<import('react').PropsWithRef<P> & import('react').RefAttributes<T>>;
156
153
  export type MemoExoticComponent<P extends {
package/dist/types.d.ts CHANGED
@@ -1,11 +1,14 @@
1
1
  declare const _default: any;
2
2
  export default _default;
3
+ export type BaseSelectorMap<T extends State> = {
4
+ [dataPropKey: string]: string | keyof T;
5
+ } & {
6
+ [dataPropKey: string]: "@@STATE";
7
+ };
3
8
  export type BaseType = boolean | any[] | {
4
9
  [x: string]: any;
5
10
  } | KeyType;
6
- export type Data = {
7
- [selectorKey: string]: Readonly<any>;
8
- };
11
+ export type Data<SELECTOR_MAP extends BaseSelectorMap<State> = BaseSelectorMap<State>> = { [selectorKey in keyof SELECTOR_MAP]: Readonly<any>; };
9
12
  export type IStorage<T extends State> = {
10
13
  clone: (data: T) => T;
11
14
  getItem: (key: string) => T;
@@ -29,6 +32,7 @@ export type Prehooks<T extends State> = {
29
32
  }) => boolean;
30
33
  setState?: (newChanges: Changes<T>) => boolean;
31
34
  };
35
+ export type SelectorMap<T extends State = State, MAP extends BaseSelectorMap<T> = BaseSelectorMap<T>> = MAP;
32
36
  export type State = {
33
37
  [x: string]: any;
34
38
  [x: number]: any;
@@ -44,8 +48,8 @@ export type StoreInternal<T extends State> = {
44
48
  subscribe: (listener: Listener<T>) => Unsubscribe;
45
49
  unlinkCache: (clientId: string) => void;
46
50
  };
47
- export type Store<T extends State> = {
48
- data: Data;
51
+ export type Store<T extends State, SELECTOR_MAP extends BaseSelectorMap<T> = BaseSelectorMap<T>> = {
52
+ data: Data<SELECTOR_MAP>;
49
53
  resetState: (propertyPaths?: string[]) => void;
50
54
  setState: (changes: Changes<T>) => void;
51
55
  };
package/package.json CHANGED
@@ -133,5 +133,5 @@
133
133
  "test:watch": "eslint --fix && jest --updateSnapshot --watchAll"
134
134
  },
135
135
  "types": "dist/main/index.d.ts",
136
- "version": "4.1.4"
136
+ "version": "4.1.6"
137
137
  }