UNPKG

3.14 kBJavaScriptView Raw
1"use strict";
2
3require("core-js/modules/es.date.to-string");
4
5require("core-js/modules/es.function.name");
6
7Object.defineProperty(exports, "__esModule", {
8 value: true
9});
10exports.registerKnobs = registerKnobs;
11exports.manager = void 0;
12
13var _addons = _interopRequireDefault(require("@storybook/addons"));
14
15var _clientApi = require("@storybook/client-api");
16
17var _coreEvents = require("@storybook/core-events");
18
19var _debounce = _interopRequireDefault(require("lodash/debounce"));
20
21var _KnobManager = _interopRequireDefault(require("./KnobManager"));
22
23var _shared = require("./shared");
24
25function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
26
27var manager = new _KnobManager["default"]();
28exports.manager = manager;
29var knobStore = manager.knobStore;
30var COMPONENT_FORCE_RENDER_DEBOUNCE_DELAY_MS = 325;
31
32function forceReRender() {
33 _addons["default"].getChannel().emit(_coreEvents.FORCE_RE_RENDER);
34}
35
36function setPaneKnobs() {
37 var timestamp = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : +new Date();
38
39 var channel = _addons["default"].getChannel();
40
41 channel.emit(_shared.SET, {
42 knobs: knobStore.getAll(),
43 timestamp: timestamp
44 });
45}
46
47var resetAndForceUpdate = function resetAndForceUpdate() {
48 knobStore.markAllUnused();
49 forceReRender();
50}; // Increase performance by reducing how frequently the story is recreated during knob changes
51
52
53var debouncedResetAndForceUpdate = (0, _debounce["default"])(resetAndForceUpdate, COMPONENT_FORCE_RENDER_DEBOUNCE_DELAY_MS);
54
55function knobChanged(change) {
56 var name = change.name;
57 var value = change.value; // Update the related knob and it's value.
58
59 var knobOptions = knobStore.get(name);
60 knobOptions.value = value;
61
62 if (!manager.options.disableForceUpdate && !knobOptions.disableForceUpdate) {
63 if (!manager.options.disableDebounce && !knobOptions.disableDebounce) {
64 debouncedResetAndForceUpdate();
65 } else {
66 resetAndForceUpdate();
67 }
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