UNPKG

@ljcl/storybook-addon-cssprops

Version:
167 lines (166 loc) 8.06 kB
var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; import * as React from "react"; import { PureArgsTable } from "@storybook/blocks"; import { useInjectCustomProperties } from "../hooks/useInjectCustomProperties"; import { useLocalStorage } from "../hooks/useLocalStorage"; import { ADDON_ID } from "../../constants"; var reduceCssPropertyItemGroupToValue = function (customProperties) { var newParams = {}; Object.keys(customProperties).forEach(function (key) { newParams[key] = customProperties[key].value; }); return newParams; }; var detectControlType = function (value) { return CSS.supports("color", value) ? "color" : "text"; }; var formatForArgsTable = function (_a) { var customProperties = _a.customProperties, presetColors = _a.presetColors, storyId = _a.storyId, initialCustomProperties = _a.initialCustomProperties; return Object.keys(customProperties).reduce(function (previousValue, currentValue) { var _a; var customProperty = customProperties[currentValue]; var initialCustomProperty = ((_a = initialCustomProperties === null || initialCustomProperties === void 0 ? void 0 : initialCustomProperties[storyId]) === null || _a === void 0 ? void 0 : _a[currentValue]) || undefined; var description = customProperty.description || ""; var value = customProperties[currentValue].value; previousValue[currentValue] = { name: "--".concat(currentValue), description: description, category: "", key: currentValue, control: { type: customProperty.control || detectControlType(value), value: value, presetColors: presetColors, }, table: { category: customProperty.category, subcategory: customProperty.subcategory, type: "CSS Custom Property", defaultValue: { summary: initialCustomProperty, }, }, }; return previousValue; }, {}); }; var mergeCustomPropertiesWithStoredPropertiesAndFormatForArgsTable = function (_a) { var customProperties = _a.customProperties, _b = _a.storageProperties, storageProperties = _b === void 0 ? {} : _b, initialCustomProperties = _a.initialCustomProperties, storyId = _a.storyId, presetColors = _a.presetColors; var updatedCustomProperties = __assign({}, customProperties); Object.keys(customProperties).forEach(function (key) { if (storageProperties[key]) { updatedCustomProperties[key].value = storageProperties[key]; } }); return formatForArgsTable({ customProperties: updatedCustomProperties, initialCustomProperties: initialCustomProperties, storyId: storyId, presetColors: presetColors, }); }; export var CssPropsTable = function (_a) { var _b, _c; var _d; var _e = _a.customProperties, customProperties = _e === void 0 ? {} : _e, presetColors = _a.presetColors, _f = _a.storyId, storyId = _f === void 0 ? "unknown-story" : _f, inAddonPanel = _a.inAddonPanel; var customPropertyValues = reduceCssPropertyItemGroupToValue(customProperties); var _g = useLocalStorage({ key: ADDON_ID, defaultValue: { customProperties: (_b = {}, _b[storyId] = customPropertyValues, _b), initialCustomProperties: (_c = {}, _c[storyId] = customPropertyValues, _c), }, }), storedProperties = _g[0], setStoredProperties = _g[1]; React.useEffect(function () { var _a, _b, _c; if (storedProperties && !("initialCustomProperties" in storedProperties)) { setStoredProperties({ customProperties: (_a = {}, _a[storyId] = customPropertyValues, _a), initialCustomProperties: (_b = {}, _b[storyId] = customPropertyValues, _b), }); } if (!storedProperties.initialCustomProperties[storyId]) { setStoredProperties({ customProperties: storedProperties.customProperties, initialCustomProperties: __assign(__assign({}, storedProperties.initialCustomProperties), (_c = {}, _c[storyId] = customPropertyValues, _c)), }); } }, [customPropertyValues, setStoredProperties, storedProperties, storyId]); React.useEffect(function () { var _a, _b; if (!storedProperties.initialCustomProperties[storyId]) { setStoredProperties({ customProperties: __assign(__assign({}, storedProperties.customProperties), (_a = {}, _a[storyId] = customPropertyValues, _a)), initialCustomProperties: __assign(__assign({}, storedProperties.initialCustomProperties), (_b = {}, _b[storyId] = customPropertyValues, _b)), }); } }, [ customPropertyValues, setStoredProperties, storedProperties.customProperties, storedProperties.initialCustomProperties, storyId, ]); var _h = React.useState(formatForArgsTable({ customProperties: customProperties, presetColors: presetColors, storyId: storyId, initialCustomProperties: storedProperties.initialCustomProperties, })), rows = _h[0], setRows = _h[1]; var handleUpdateStorage = function (args) { var _a; var newProperties = {}; Object.keys(args).forEach(function (key) { newProperties[key] = args[key]; }); var mergedProperties = __assign(__assign({}, storedProperties.customProperties[storyId]), newProperties); setStoredProperties(__assign(__assign({}, storedProperties), { customProperties: __assign(__assign({}, storedProperties.customProperties), (_a = {}, _a[storyId] = mergedProperties, _a)) })); var newRows = mergeCustomPropertiesWithStoredPropertiesAndFormatForArgsTable({ customProperties: customProperties, storageProperties: mergedProperties, initialCustomProperties: storedProperties.initialCustomProperties, storyId: storyId, presetColors: presetColors, }); setRows(newRows); }; useInjectCustomProperties((_d = storedProperties.customProperties) === null || _d === void 0 ? void 0 : _d[storyId]); var handleResetProps = function () { var _a; setStoredProperties({ customProperties: __assign(__assign({}, storedProperties.customProperties), (_a = {}, _a[storyId] = storedProperties.initialCustomProperties[storyId], _a)), initialCustomProperties: storedProperties.initialCustomProperties, }); window.location.reload(); }; React.useEffect(function () { var newRows = mergeCustomPropertiesWithStoredPropertiesAndFormatForArgsTable({ customProperties: customProperties, storageProperties: storedProperties.customProperties[storyId], initialCustomProperties: storedProperties.initialCustomProperties, storyId: storyId, presetColors: presetColors, }); setRows(newRows); }, [customProperties, presetColors, storedProperties, storyId]); var _j = React.useState(storyId), stateStoryId = _j[0], setStateStoryId = _j[1]; React.useEffect(function () { setStateStoryId(storyId); }, [storyId]); return (React.createElement(PureArgsTable, { key: stateStoryId, inAddonPanel: inAddonPanel, resetArgs: handleResetProps, rows: rows, updateArgs: function (arg) { var _a; var name = Object.keys(arg)[0]; var value = arg[name]; handleUpdateStorage((_a = {}, _a[name] = value, _a)); } })); };