UNPKG

storybook-branch-switcher

Version:

A Storybook addon to navigate between multiple Git branches.

1 lines 7 kB
{"version":3,"sources":["../src/constants.ts","../src/state.ts","../src/util/location.ts","../src/components/branch-switcher.tsx","../src/manager.tsx"],"names":["ADDON_ID","PARAM_KEY","BRANCH_SWITCHER_ID","DEFAULT_ADDON_PARAMETERS","DEFAULT_ADDON_STATE","state","generateLink","location","targetHost","def","target","hostname","path","IconButtonLabel","styled","theme","hasMultipleBranches","branchList","BranchSwitcher","useParameter","list","currentBranch","defaultBranch","changeBranch","useCallback","branch","React","Fragment","WithTooltip","onHide","TooltipLinkList","IconButton","BranchIcon","addons","types","viewMode"],"mappings":"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","file":"manager.mjs","sourcesContent":["export const ADDON_ID = \"storybook-branch-switcher\";\nexport const PARAM_KEY = \"branches\" as const;\nexport const BRANCH_SWITCHER_ID = `${ADDON_ID}/switcher` as const;\n\nexport interface BranchSwitcherParameters {\n hostname?: string;\n}\n\nexport const DEFAULT_ADDON_PARAMETERS: BranchSwitcherParameters = {\n hostname: undefined,\n};\n","export interface BranchSwitcherState {\n list: string[];\n defaultBranch: string;\n currentBranch: string;\n}\n\nconst DEFAULT_ADDON_STATE: BranchSwitcherState = {\n list: [],\n defaultBranch: \"master\",\n currentBranch: \"master\",\n};\n\nexport const state: BranchSwitcherState = Object.assign(\n DEFAULT_ADDON_STATE,\n JSON.parse(process.env[\"STORYBOOK_BRANCH_SWITCHER_STATE\"] ?? \"{}\"),\n);\n","export const generateLink = (\n location: Location,\n targetHost: string,\n def: string,\n target: string,\n): string => {\n const hostname = targetHost || `${location.hostname}:${location.port}`;\n let path: string;\n\n if (target !== def) {\n path = `/${target}/`;\n } else {\n path = \"/\";\n }\n\n return `${location.protocol}//${hostname}${path}${location.search}${location.hash}`;\n};\n","import { BranchIcon } from \"@storybook/icons\";\nimport React, { Fragment, useCallback } from \"react\";\nimport {\n IconButton,\n TooltipLinkList,\n WithTooltip,\n} from \"storybook/internal/components\";\nimport { useParameter } from \"storybook/internal/manager-api\";\nimport { styled } from \"storybook/internal/theming\";\nimport type { BranchSwitcherParameters } from \"../constants\";\nimport {\n BRANCH_SWITCHER_ID,\n DEFAULT_ADDON_PARAMETERS,\n PARAM_KEY,\n} from \"../constants\";\nimport { BranchSwitcherState, state } from \"../state\";\nimport { generateLink } from \"../util/location\";\n\nconst IconButtonLabel = styled.div(({ theme }) => ({\n fontSize: theme.typography.size.s2 - 1,\n marginLeft: 10,\n}));\n\nconst hasMultipleBranches = (branchList: BranchSwitcherState[\"list\"]) =>\n branchList.length > 1;\n\nexport const BranchSwitcher = () => {\n const { hostname } = useParameter<BranchSwitcherParameters>(\n PARAM_KEY,\n DEFAULT_ADDON_PARAMETERS\n );\n const { list, currentBranch, defaultBranch } = state;\n\n const changeBranch = useCallback(\n (branch: string) => {\n if (branch !== currentBranch) {\n window.parent.location = generateLink(\n location,\n hostname,\n defaultBranch,\n branch\n );\n }\n },\n [hostname, defaultBranch, currentBranch]\n );\n\n return hasMultipleBranches(list) ? (\n <Fragment>\n <WithTooltip\n placement=\"top\"\n trigger=\"click\"\n closeOnClick\n tooltip={({ onHide }) => {\n return (\n <TooltipLinkList\n links={list.map((branch) => ({\n id: branch,\n title: branch,\n active: currentBranch === branch,\n onClick: () => {\n changeBranch(branch);\n onHide();\n },\n }))}\n />\n );\n }}\n >\n <IconButton key={BRANCH_SWITCHER_ID} title=\"Branch\" active={true}>\n <BranchIcon />\n {currentBranch && <IconButtonLabel>{currentBranch}</IconButtonLabel>}\n </IconButton>\n </WithTooltip>\n </Fragment>\n ) : null;\n};\n","import { addons, types } from \"storybook/internal/manager-api\";\nimport { BranchSwitcher } from \"./components/branch-switcher\";\nimport { ADDON_ID, BRANCH_SWITCHER_ID, PARAM_KEY } from \"./constants\";\n\naddons.register(ADDON_ID, () => {\n addons.add(BRANCH_SWITCHER_ID, {\n title: \"Branches\",\n type: types.TOOL,\n match: ({ viewMode }) => !!(viewMode && viewMode.match(/^(story|docs)$/)),\n render: BranchSwitcher,\n paramKey: PARAM_KEY,\n });\n});\n"]}