Skip to content

Commit 9f94a90

Browse files
Setup Storybook for Profile (#1291)
* Setup storybook for profile * Add snapshot testing for profile storybook * Add missing dependencies for test:storybook:update script * Mock account hooks for storybook * Expose mock module from @cartridge/utils for storyies and testing * Add decorator for account mock * Mock useCountervalue * Mock collections * Accept router params via storybook parameter * Add token and send stories * Accept router searchParams via storybook parameter * Add collection stories * Update snapshots --------- Co-authored-by: Tarrence van As <tarrence@vanas.family>
1 parent 0aaa31e commit 9f94a90

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+533
-192
lines changed

.github/workflows/test.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ jobs:
8888
ui:
8989
- 'packages/ui-next/**'
9090
- 'packages/keychain/**'
91+
- 'packages/profile/**'
9192
- '**/package.json'
9293
- '**/pnpm-lock.yaml'
9394
@@ -146,6 +147,7 @@ jobs:
146147
147148
# Check both packages
148149
check_snapshots "keychain" "packages/keychain/__image_snapshots__"
150+
check_snapshots "profile" "packages/profile/__image_snapshots__"
149151
check_snapshots "ui-next" "packages/ui-next/__image_snapshots__"
150152
151153
# Set environment variables

packages/keychain/.storybook/main.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,14 @@ function getAbsolutePath(value: string) {
1010
return dirname(require.resolve(join(value, "package.json")));
1111
}
1212
const config: StorybookConfig = {
13-
stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"],
13+
stories: ["../src/**/*.mdx", "../src/**/*.stories.@(ts|tsx)"],
1414
addons: [
15-
getAbsolutePath("@storybook/addon-links"),
1615
getAbsolutePath("@storybook/addon-essentials"),
17-
getAbsolutePath("@chromatic-com/storybook"),
18-
getAbsolutePath("@storybook/addon-interactions"),
1916
getAbsolutePath("@storybook/addon-themes"),
2017
],
2118
framework: {
2219
name: getAbsolutePath("@storybook/react-vite"),
23-
options: {
24-
builder: {
25-
viteConfigPath: "./vite.config.ts",
26-
},
27-
},
20+
options: {},
2821
},
2922
viteFinal: async (config) => {
3023
return mergeConfig(config, {
3 Bytes
Loading

packages/keychain/package.json

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
"test:ci": "vitest run",
1616
"storybook": "storybook dev -p 6001 --no-open",
1717
"storybook:build": "storybook build",
18-
"storybook:serve": "pnpm storybook:build --quiet && pnpm http-server -c-1 storybook-static --port 6006 --silent",
18+
"storybook:serve": "pnpm storybook:build --quiet && pnpm http-server -c-1 storybook-static --port 6001 --silent",
1919
"test-storybook": "test-storybook --testTimeout=60000",
20-
"test:storybook": "start-server-and-test 'pnpm storybook:serve' 6006 'pnpm test-storybook'"
20+
"test:storybook": "start-server-and-test 'pnpm storybook:serve' 6001 'pnpm test-storybook'"
2121
},
2222
"dependencies": {
2323
"@cartridge/account-wasm": "workspace:*",
@@ -37,6 +37,7 @@
3737
"fast-deep-equal": "catalog:",
3838
"graphql-request": "^5.0.0",
3939
"inapp-spy": "4.2.1",
40+
"lodash": "catalog:",
4041
"p-throttle": "^6.2.0",
4142
"posthog-js-lite": "3.2.1",
4243
"react": "catalog:",
@@ -45,17 +46,13 @@
4546
"react-router-dom": "catalog:",
4647
"sonner": "catalog:",
4748
"viem": "catalog:",
48-
"wagmi": "^1.4.12",
49-
"lodash": "^4.17.21"
49+
"wagmi": "^1.4.12"
5050
},
5151
"devDependencies": {
5252
"@cartridge/eslint": "workspace:*",
5353
"@cartridge/tsconfig": "workspace:*",
54-
"@types/lodash": "^4.14.202",
55-
"@chromatic-com/storybook": "^1.9.0",
54+
"@types/lodash": "catalog:",
5655
"@storybook/addon-essentials": "catalog:",
57-
"@storybook/addon-interactions": "catalog:",
58-
"@storybook/addon-links": "catalog:",
5956
"@storybook/addon-themes": "catalog:",
6057
"@storybook/blocks": "catalog:",
6158
"@storybook/react": "catalog:",

packages/profile/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,5 @@ dist-ssr
2222
*.njsproj
2323
*.sln
2424
*.sw?
25+
26+
*storybook.log
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import type { StorybookConfig } from "@storybook/react-vite";
2+
import { mergeConfig } from "vite";
3+
import path from "path";
4+
5+
/**
6+
* This function is used to resolve the absolute path of a package.
7+
* It is needed in projects that use Yarn PnP or are set up within a monorepo.
8+
*/
9+
function getAbsolutePath(value: string) {
10+
return path.dirname(require.resolve(path.join(value, "package.json")));
11+
}
12+
13+
const config: StorybookConfig = {
14+
stories: ["../src/**/*.mdx", "../src/**/*.stories.@(ts|tsx)"],
15+
addons: [
16+
getAbsolutePath("@storybook/addon-essentials"),
17+
getAbsolutePath("@storybook/addon-themes"),
18+
],
19+
framework: {
20+
name: getAbsolutePath("@storybook/react-vite"),
21+
options: {},
22+
},
23+
viteFinal: (config) =>
24+
mergeConfig(config, {
25+
resolve: {
26+
alias: {
27+
"@/hooks/account": require.resolve("../src/hooks/account.mock.ts"),
28+
"@/hooks/collection": require.resolve("../src/hooks/collection.mock.ts"),
29+
"@/hooks/token": require.resolve("../src/hooks/token.mock.ts"),
30+
"@cartridge/utils/api/cartridge": require.resolve("../node_modules/@cartridge/utils/dist/api/cartridge/index.js"),
31+
"@cartridge/utils/api/indexer": require.resolve("../node_modules/@cartridge/utils/dist/api/indexer/index.js"),
32+
"@cartridge/utils/mock/data": require.resolve("../node_modules/@cartridge/utils/dist/mock/data/index.js"),
33+
"@cartridge/utils": require.resolve("../node_modules/@cartridge/utils/dist/mock/index.js"),
34+
},
35+
},
36+
})
37+
};
38+
export default config;
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import React from "react";
2+
import type { Decorator, Preview, ReactRenderer } from "@storybook/react";
3+
import { withThemeByClassName } from "@storybook/addon-themes";
4+
import { SonnerToaster } from "@cartridge/ui-next";
5+
import { Provider } from "../src/components/provider";
6+
7+
import "../src/index.css";
8+
import { MemoryRouter, Route, Routes } from "react-router-dom";
9+
10+
const routerDecorator: Decorator = (Story, { parameters: { router } }) => {
11+
const params = router?.params || {}
12+
const path = Object.keys(params).length
13+
? `/:${Object.keys(params).join("/:")}`
14+
: "/"
15+
const searchParams = new URLSearchParams(router?.searchParams || {});
16+
const url = `/${Object.values(params).join("/")}?${searchParams.toString()}`;
17+
18+
return (
19+
<MemoryRouter initialEntries={[url]}>
20+
<Provider>
21+
<Routes>
22+
<Route
23+
path={path}
24+
element={<Story />}
25+
/>
26+
</Routes>
27+
<SonnerToaster />
28+
</Provider>
29+
</MemoryRouter>
30+
);
31+
};
32+
33+
const preview: Preview = {
34+
parameters: {
35+
controls: {
36+
matchers: {
37+
color: /(background|color)$/i,
38+
date: /Date$/i,
39+
},
40+
},
41+
preset: "cartridge",
42+
colorMode: "dark",
43+
backgrounds: {
44+
default: "dark",
45+
values: [
46+
{
47+
name: "dark",
48+
value: "hsl(var(--background))",
49+
},
50+
{
51+
name: "light",
52+
value: "hsl(var(--background))",
53+
},
54+
],
55+
},
56+
},
57+
decorators: [
58+
withThemeByClassName<ReactRenderer>({
59+
themes: {
60+
light: "light",
61+
dark: "dark",
62+
},
63+
defaultTheme: "dark",
64+
}),
65+
routerDecorator,
66+
],
67+
};
68+
69+
export default preview;

packages/profile/package.json

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,13 @@
99
"lint": "eslint .",
1010
"format": "prettier --write ./src index.html",
1111
"format:check": "prettier --check ./src index.html",
12-
"preview": "vite preview"
12+
"preview": "vite preview",
13+
"storybook": "storybook dev -p 6003 --no-open",
14+
"storybook:build": "storybook build",
15+
"storybook:serve": "pnpm storybook:build --quiet && pnpm http-server -c-1 storybook-static --port 6003 --silent",
16+
"test-storybook": "test-storybook --testTimeout=60000",
17+
"test:storybook:update": "start-server-and-test 'pnpm storybook:serve' 6003 'pnpm test-storybook --url http://127.0.0.1:6003 -u'",
18+
"test:storybook": "start-server-and-test 'pnpm storybook:serve' 6003 'pnpm test-storybook --url http://127.0.0.1:6003'"
1319
},
1420
"dependencies": {
1521
"@bal7hazar/arcade-sdk": "^0.0.73",
@@ -18,7 +24,7 @@
1824
"@cartridge/ui-next": "workspace:*",
1925
"@cartridge/utils": "workspace:*",
2026
"compare-versions": "^6.1.1",
21-
"lodash": "^4.17.21",
27+
"lodash": "catalog:",
2228
"posthog-js": "^1.181.0",
2329
"react": "catalog:",
2430
"react-dom": "catalog:",
@@ -32,20 +38,31 @@
3238
},
3339
"devDependencies": {
3440
"@cartridge/eslint": "workspace:*",
35-
"@types/lodash": "^4.17.13",
41+
"@storybook/addon-essentials": "catalog:",
42+
"@storybook/addon-themes": "catalog:",
43+
"@storybook/blocks": "catalog:",
44+
"@storybook/react": "catalog:",
45+
"@storybook/react-vite": "catalog:",
46+
"@storybook/test": "catalog:",
47+
"@storybook/test-runner": "catalog:",
48+
"@types/lodash": "catalog:",
3649
"@types/node": "catalog:",
3750
"@types/react": "catalog:",
3851
"@types/react-dom": "catalog:",
3952
"@vitejs/plugin-react-swc": "catalog:",
4053
"autoprefixer": "catalog:",
4154
"eslint": "catalog:",
4255
"globals": "catalog:",
56+
"http-server": "catalog:",
4357
"postcss": "catalog:",
4458
"postcss-import": "catalog:",
4559
"prettier": "catalog:",
60+
"start-server-and-test": "catalog:",
61+
"storybook": "catalog:",
4662
"tailwindcss": "catalog:",
4763
"typescript": "catalog:",
4864
"typescript-eslint": "catalog:",
49-
"vite": "catalog:"
65+
"vite": "catalog:",
66+
"vite-tsconfig-paths": "catalog:"
5067
}
5168
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import type { Meta, StoryObj } from "@storybook/react";
2+
3+
import { Collectible } from "./collectible";
4+
5+
const meta = {
6+
component: Collectible,
7+
} satisfies Meta<typeof Collectible>;
8+
9+
export default meta;
10+
11+
type Story = StoryObj<typeof meta>;
12+
13+
export const Default: Story = {};
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import type { Meta, StoryObj } from "@storybook/react";
2+
3+
import { Collection } from "./collection";
4+
5+
const meta = {
6+
component: Collection,
7+
} satisfies Meta<typeof Collection>;
8+
9+
export default meta;
10+
11+
type Story = StoryObj<typeof meta>;
12+
13+
export const Default: Story = {};

0 commit comments

Comments
 (0)