Parcourir la source

chore: storybook add configProvider decorator

走鹃 il y a 3 ans
Parent
commit
22fb63879e

+ 2 - 1
.storybook/base/base.js

@@ -14,7 +14,8 @@ module.exports = {
         optimizationLevel: 3,
       },
     },
-    '@storybook/addon-a11y'
+    '@storybook/addon-a11y',
+    '@storybook/addon-toolbars',
   ],
   webpackFinal: async (config) => {
     const rules =

+ 90 - 0
.storybook/base/preview.tsx

@@ -0,0 +1,90 @@
+import 'reset-css';
+import 'normalize.css';
+import React from 'react';
+import { StoryContext } from '@storybook/react';
+
+import { ConfigProvider } from '../../packages/semi-ui/index';
+import zh_CN from '@douyinfe/semi-ui/lib/es/locale/source/zh_CN';
+import en_GB from '@douyinfe/semi-ui/lib/es/locale/source/en_GB';
+import ko_KR from '@douyinfe/semi-ui/lib/es/locale/source/ko_KR';
+import ja_JP from '@douyinfe/semi-ui/lib/es/locale/source/ja_JP';
+import ar from '@douyinfe/semi-ui/lib/es/locale/source/ar';
+import vi_VN from '@douyinfe/semi-ui/lib/es/locale/source/vi_VN';
+import ru_RU from '@douyinfe/semi-ui/lib/es/locale/source/ru_RU';
+import id_ID from '@douyinfe/semi-ui/lib/es/locale/source/id_ID';
+import ms_MY from '@douyinfe/semi-ui/lib/es/locale/source/ms_MY';
+import th_TH from '@douyinfe/semi-ui/lib/es/locale/source/th_TH';
+import tr_TR from '@douyinfe/semi-ui/lib/es/locale/source/tr_TR';
+import pt_BR from '@douyinfe/semi-ui/lib/es/locale/source/pt_BR';
+import zh_TW from '@douyinfe/semi-ui/lib/es/locale/source/zh_TW';
+import es from '@douyinfe/semi-ui/lib/es/locale/source/es';
+
+export const globalTypes = {
+    direction: {
+        name: 'Direction',
+        description: 'RTL direction',
+        defaultValue: 'ltr',
+        toolbar: {
+            icon: 'globe',
+            items: ['ltr', 'rtl'],
+        },
+    },
+    theme: {
+        name: 'Theme',
+        description: 'Theme mode',
+        defaultValue: 'light',
+        toolbar: {
+            icon: 'circle',
+            items: ['light', 'dark'],
+        },
+    },
+    language: {
+      name: 'Locale',
+      description: 'Locale language',
+      defaultValue: 'zh_CN',
+      toolbar: {
+          icon: 'google',
+          items:  ['zh_CN', 'en_GB', 'ko_KR', 'ja_JP', 'ar', 'vi_VN', 'ru_RU', 'id_ID', 'ms_MY', 'th_TH', 'tr_TR', 'pt_BR', 'zh_TW', 'es'],
+      },
+    }
+};
+
+const switchMode = (theme: 'light' | 'dark') => {
+    const body = document.body;
+    body.setAttribute('theme-mode', theme);
+};
+
+const getLocale = code => {
+  let language = {
+      'zh_CN': zh_CN,
+      'en_GB': en_GB,
+      'ko_KR': ko_KR,
+      'ja_JP': ja_JP,
+      'ar': ar,
+      'vi_VN': vi_VN,
+      'ru_RU': ru_RU,
+      'id_ID': id_ID,
+      'ms_MY': ms_MY,
+      'th_TH': th_TH,
+      'tr_TR': tr_TR,
+      'pt_BR': pt_BR,
+      'zh_TW': zh_TW,
+      'es': es,
+  };
+
+  return language[code];
+};
+
+const withConfigProvider = (StoryFn: Function, context: StoryContext) => {
+    const { direction, theme, language } = context.globals;
+    switchMode(theme);
+    const locale = getLocale(language);
+
+    return (
+        <ConfigProvider direction={direction} locale={locale}>
+            <StoryFn />
+        </ConfigProvider>
+    );
+};
+
+export const decorators = [withConfigProvider];

+ 1 - 0
.storybook/js/preview.js

@@ -0,0 +1 @@
+export * from '../base/preview';

+ 0 - 2
.storybook/preview.js

@@ -1,2 +0,0 @@
-import 'reset-css';
-import 'normalize.css';

+ 1 - 0
.storybook/ts/preview.js

@@ -0,0 +1 @@
+export * from '../base/preview';

+ 1 - 0
package.json

@@ -112,6 +112,7 @@
     "@storybook/addon-a11y": "^6.3.12",
     "@storybook/addon-actions": "^6.3.7",
     "@storybook/addon-knobs": "^6.3.1",
+    "@storybook/addon-toolbars": "^6.4.9",
     "@storybook/builder-webpack5": "^6.4.0-alpha.29",
     "@storybook/cli": "^5.3.21",
     "@storybook/manager-webpack5": "^6.4.0-alpha.29",

+ 14 - 0
yarn.lock

@@ -3523,6 +3523,18 @@
     react-lifecycles-compat "^3.0.4"
     react-select "^3.2.0"
 
+"@storybook/addon-toolbars@^6.4.9":
+  version "6.4.9"
+  resolved "https://registry.yarnpkg.com/@storybook/addon-toolbars/-/addon-toolbars-6.4.9.tgz#147534d0b185a1782f3381a47c627b4a4193297d"
+  integrity sha512-fep1lLDcyaQJdR8rC/lJTamiiJ8Ilio580d9aXDM651b7uHqhxM0dJvM9hObBU8dOj/R3hIAszgTvdTzYlL2cQ==
+  dependencies:
+    "@storybook/addons" "6.4.9"
+    "@storybook/api" "6.4.9"
+    "@storybook/components" "6.4.9"
+    "@storybook/theming" "6.4.9"
+    core-js "^3.8.2"
+    regenerator-runtime "^0.13.7"
+
 "@storybook/[email protected]":
   version "6.4.9"
   resolved "https://registry.npmjs.org/@storybook/addons/-/addons-6.4.9.tgz#43b5dabf6781d863fcec0a0b293c236b4d5d4433"
@@ -25321,8 +25333,10 @@ watchpack@^1.7.4:
   resolved "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453"
   integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==
   dependencies:
+    chokidar "^3.4.1"
     graceful-fs "^4.1.2"
     neo-async "^2.5.0"
+    watchpack-chokidar2 "^2.0.1"
   optionalDependencies:
     chokidar "^3.4.1"
     watchpack-chokidar2 "^2.0.1"