UNPKG

1.61 kBJavaScriptView Raw
1"use strict";
2
3exports.__esModule = true;
4exports.default = exports.ObservableMap = void 0;
5var _useForceUpdate = _interopRequireDefault(require("./useForceUpdate"));
6var _useStableMemo = _interopRequireDefault(require("./useStableMemo"));
7function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8class ObservableMap extends Map {
9 constructor(listener, init) {
10 super(init);
11 this.listener = listener;
12 }
13 set(key, value) {
14 super.set(key, value);
15 // When initializing the Map, the base Map calls this.set() before the
16 // listener is assigned so it will be undefined
17 if (this.listener) this.listener(this);
18 return this;
19 }
20 delete(key) {
21 let result = super.delete(key);
22 this.listener(this);
23 return result;
24 }
25 clear() {
26 super.clear();
27 this.listener(this);
28 }
29}
30
31/**
32 * Create and return a [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) that triggers rerenders when it's updated.
33 *
34 * ```tsx
35 * const customerAges = useMap<number>([
36 * ['john', 24],
37 * ['betsy', 25]
38 * ]);
39 *
40 * return (
41 * <>
42 * {Array.from(ids, ([name, age]) => (
43 * <div>
44 * {name}: {age}. <button onClick={() => ids.delete(name)}>X</button>
45 * </div>
46 * )}
47 * </>
48 * )
49 * ```
50 *
51 * @param init initial Map entries
52 */
53exports.ObservableMap = ObservableMap;
54function useMap(init) {
55 const forceUpdate = (0, _useForceUpdate.default)();
56 return (0, _useStableMemo.default)(() => new ObservableMap(forceUpdate, init), []);
57}
58var _default = useMap;
59exports.default = _default;
\No newline at end of file