1+ import { Rerenderer } from "./use-rerenderer" ;
2+
3+ type RerenderersData = {
4+ [ variableId : string ] : { [ rerendererId : string ] : Rerenderer } ;
5+ } ;
6+
7+ /**
8+ * Describes a list of rerenders can be used to register/delete/fire rerenderers.
9+ */
110class RerenderersList {
2- private _rerenderersData : Record < string , Record < string , ( ) => void > > ;
11+ private _rerenderersData : RerenderersData ;
312
413 constructor ( ) {
514 this . _rerenderersData = { } ;
615 }
716
8- private addForVariable = ( variableId : string ) => {
9- this . _rerenderersData [ variableId ] =
10- this . _rerenderersData [ variableId ] || { } ;
11- } ;
12-
17+ /**
18+ * Checks if rerenderers data has a section associated with given variable.
19+ *
20+ * @param variableId Variable identifier.
21+ */
1322 private existsForVariable = ( variableId : string ) => {
1423 return this . _rerenderersData [ variableId ] !== undefined ;
1524 } ;
1625
26+ /**
27+ * Adds a section for a given variable.
28+ *
29+ * @param variableId Variable identifier.
30+ *
31+ * @throws {@link Error } When tried to add a section for a variable that already exists.
32+ */
33+ private addForVariable = ( variableId : string ) => {
34+ if ( this . existsForVariable ( variableId ) ) {
35+ throw new Error (
36+ "Tried to add a section for a variable that already exists."
37+ ) ;
38+ }
39+
40+ this . _rerenderersData [ variableId ] = { } ;
41+ } ;
42+
43+ /**
44+ * Registers new rerenderer for a given variable.
45+ *
46+ * @param variableId Variable identifier.
47+ * @param rerendererId Rerenderer identifier.
48+ * @param rerenderer Rerenderer logic.
49+ */
1750 public add = (
1851 variableId : string ,
1952 rerendererId : string ,
20- rerenderer : ( ) => void
53+ rerenderer : Rerenderer
2154 ) => {
2255 if ( ! this . existsForVariable ( variableId ) ) {
2356 this . addForVariable ( variableId ) ;
@@ -26,19 +59,37 @@ class RerenderersList {
2659 this . _rerenderersData [ variableId ] [ rerendererId ] = rerenderer ;
2760 } ;
2861
62+ /**
63+ * Unregisters a rerender from variable by an identifier.
64+ *
65+ * @param variableId Variable identifier.
66+ * @param rerendererId Rerenderer identifier.
67+ *
68+ * @throws {@link Error } When tried to remove variable data that does not exist.
69+ */
2970 public remove = ( variableId : string , rerendererId : string ) => {
30- const variableRerendersData = this . _rerenderersData [ variableId ] ;
31-
32- if ( ! variableRerendersData ) {
33- return ;
71+ if ( ! this . existsForVariable ( variableId ) ) {
72+ throw new Error (
73+ "Tried to remove variable data that does not exist."
74+ ) ;
3475 }
3576
77+ const variableRerendersData = this . _rerenderersData [ variableId ] ;
3678 delete variableRerendersData [ rerendererId ] ;
3779 } ;
3880
81+ /**
82+ * Fires every rerenderer associated with a given variable.
83+ *
84+ * @param variableId Variable identifier.
85+ *
86+ * @throws {@link Error } When tried to fire rerenders for a variable that does not exist.
87+ */
3988 public fire = ( variableId : string ) => {
4089 if ( ! this . existsForVariable ( variableId ) ) {
41- return ;
90+ throw new Error (
91+ "Tried to fire rerenders for a variable that does not exist."
92+ ) ;
4293 }
4394
4495 Object . values ( this . _rerenderersData [ variableId ] ) . forEach ( ( rerender ) => {
0 commit comments