@headless-tree/core 1.4.0 → 1.5.1

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.
@@ -135,4 +135,10 @@ export class TestTreeDo<T> {
135
135
  "function called with inconsistent parameters",
136
136
  ).toBeOneOf([0, 1]);
137
137
  }
138
+
139
+ async awaitNextTick() {
140
+ await new Promise((r) => {
141
+ setTimeout(r);
142
+ });
143
+ }
138
144
  }
@@ -63,21 +63,22 @@ export class TestTree<T = string> {
63
63
  }),
64
64
  };
65
65
 
66
- forSuits(runSuite: (tree: TestTree<T>) => void) {
66
+ forSuits(runSuite: (tree: TestTree<T>, title: string) => void) {
67
67
  describe.for([
68
68
  this.suits.sync(),
69
69
  this.suits.async(),
70
70
  this.suits.proxifiedSync(),
71
71
  this.suits.proxifiedAsync(),
72
- ])("$title", ({ tree }) => {
72
+ ])("$title", ({ tree, title }) => {
73
73
  tree.resetBeforeEach();
74
- runSuite(tree);
74
+ runSuite(tree, title);
75
75
  });
76
76
  }
77
77
 
78
78
  get instance() {
79
79
  if (!this.treeInstance) {
80
80
  this.treeInstance = createTree(this.config);
81
+ this.treeInstance.setMounted(true);
81
82
  this.treeInstance.rebuildTree();
82
83
  }
83
84
  return this.treeInstance;
@@ -87,10 +88,9 @@ export class TestTree<T = string> {
87
88
 
88
89
  static async resolveAsyncLoaders() {
89
90
  do {
91
+ await vi.advanceTimersToNextTimerAsync();
90
92
  TestTree.asyncLoaderResolvers.shift()?.();
91
- await new Promise<void>((r) => {
92
- setTimeout(r);
93
- });
93
+ await vi.advanceTimersToNextTimerAsync();
94
94
  } while (TestTree.asyncLoaderResolvers.length);
95
95
  }
96
96
 
@@ -101,6 +101,17 @@ export class TestTree<T = string> {
101
101
  await TestTree.resolveAsyncLoaders();
102
102
  }
103
103
 
104
+ async runWhileResolvingItems(cb: () => Promise<void>) {
105
+ const interval = setInterval(() => {
106
+ TestTree.resolveAsyncLoaders();
107
+ }, 5);
108
+ try {
109
+ await cb();
110
+ } finally {
111
+ clearInterval(interval);
112
+ }
113
+ }
114
+
104
115
  static default(config: Partial<TreeConfig<string>>) {
105
116
  return new TestTree({
106
117
  rootItemId: "x",
package/src/types/core.ts CHANGED
@@ -93,11 +93,11 @@ type MayReturnNull<T extends (...x: any[]) => any> = (
93
93
  ...args: Parameters<T>
94
94
  ) => ReturnType<T> | null;
95
95
 
96
- export type ItemInstanceOpts<Key extends keyof ItemInstance<any>> = {
97
- item: ItemInstance<any>;
98
- tree: TreeInstance<any>;
96
+ export type ItemInstanceOpts<T, Key extends keyof ItemInstance<any>> = {
97
+ item: ItemInstance<T>;
98
+ tree: TreeInstance<T>;
99
99
  itemId: string;
100
- prev?: MayReturnNull<ItemInstance<any>[Key]>;
100
+ prev?: MayReturnNull<ItemInstance<T>[Key]>;
101
101
  };
102
102
 
103
103
  export type TreeInstanceOpts<Key extends keyof TreeInstance<any>> = {
@@ -131,7 +131,7 @@ export type FeatureImplementation<T = any> = {
131
131
 
132
132
  itemInstance?: {
133
133
  [key in keyof ItemInstance<T>]?: (
134
- opts: ItemInstanceOpts<key>,
134
+ opts: ItemInstanceOpts<T, key>,
135
135
  ...args: Parameters<ItemInstance<T>[key]>
136
136
  ) => void;
137
137
  };