UNPKG

3.07 kBJavaScriptView Raw
1"use strict";
2
3require("core-js/modules/es.date.to-string");
4
5require("core-js/modules/es.function.name");
6
7require("core-js/modules/es.object.define-property");
8
9Object.defineProperty(exports, "__esModule", {
10 value: true
11});
12exports.registerKnobs = registerKnobs;
13exports.manager = void 0;
14
15var _addons = _interopRequireDefault(require("@storybook/addons"));
16
17var _clientApi = require("@storybook/client-api");
18
19var _coreEvents = require("@storybook/core-events");
20
21var _debounce = _interopRequireDefault(require("lodash/debounce"));
22
23var _KnobManager = _interopRequireDefault(require("./KnobManager"));
24
25var _shared = require("./shared");
26
27function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
28
29var manager = new _KnobManager["default"]();
30exports.manager = manager;
31var knobStore = manager.knobStore;
32var COMPONENT_FORCE_RENDER_DEBOUNCE_DELAY_MS = 325;
33
34function forceReRender() {
35 _addons["default"].getChannel().emit(_coreEvents.FORCE_RE_RENDER);
36}
37
38function setPaneKnobs() {
39 var timestamp = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : +new Date();
40
41 var channel = _addons["default"].getChannel();
42
43 channel.emit(_shared.SET, {
44 knobs: knobStore.getAll(),
45 timestamp: timestamp
46 });
47}
48
49var resetAndForceUpdate = function resetAndForceUpdate() {
50 knobStore.markAllUnused();
51 forceReRender();
52}; // Increase performance by reducing how frequently the story is recreated during knob changes
53
54
55var debouncedResetAndForceUpdate = (0, _debounce["default"])(resetAndForceUpdate, COMPONENT_FORCE_RENDER_DEBOUNCE_DELAY_MS);
56
57function knobChanged(change) {
58 var name = change.name;
59 var value = change.value; // Update the related knob and it's value.
60
61 var knobOptions = knobStore.get(name);
62 knobOptions.value = value;
63
64 if (!manager.options.disableDebounce) {
65 debouncedResetAndForceUpdate();
66 } else {
67 resetAndForceUpdate();
68 }
69}
70
71function knobClicked(clicked) {
72 var knobOptions = knobStore.get(clicked.name);
73
74 if (knobOptions.callback && knobOptions.callback() !== false) {
75 forceReRender();
76 }
77}
78
79function resetKnobs() {
80 knobStore.reset();
81 setPaneKnobs(false);
82}
83
84function resetKnobsAndForceReRender() {
85 knobStore.reset();
86 forceReRender();
87 setPaneKnobs(false);
88}
89
90function disconnectCallbacks() {
91 var channel = _addons["default"].getChannel();
92
93 channel.removeListener(_shared.CHANGE, knobChanged);
94 channel.removeListener(_shared.CLICK, knobClicked);
95 channel.removeListener(_coreEvents.STORY_CHANGED, resetKnobs);
96 channel.removeListener(_shared.RESET, resetKnobsAndForceReRender);
97 knobStore.unsubscribe(setPaneKnobs);
98}
99
100function connectCallbacks() {
101 var channel = _addons["default"].getChannel();
102
103 channel.on(_shared.CHANGE, knobChanged);
104 channel.on(_shared.CLICK, knobClicked);
105 channel.on(_coreEvents.STORY_CHANGED, resetKnobs);
106 channel.on(_shared.RESET, resetKnobsAndForceReRender);
107 knobStore.subscribe(setPaneKnobs);
108 return disconnectCallbacks;
109}
110
111function registerKnobs() {
112 (0, _clientApi.useEffect)(connectCallbacks, []);
113}
\No newline at end of file