@perses-dev/dashboards 0.25.0 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/cjs/components/EmptyDashboard/EmptyDashboard.js +2 -1
  2. package/dist/cjs/components/Panel/Panel.js +0 -4
  3. package/dist/cjs/components/Panel/PanelHeader.js +2 -2
  4. package/dist/cjs/context/TemplateVariableProvider/TemplateVariableProvider.js +3 -41
  5. package/dist/cjs/context/TemplateVariableProvider/hydrationUtils.js +68 -0
  6. package/dist/cjs/stories/decorators/WithDashboard.js +7 -28
  7. package/dist/cjs/stories/decorators/WithDatasourceStore.js +82 -0
  8. package/dist/cjs/stories/decorators/WithTemplateVariables.js +9 -1
  9. package/dist/cjs/stories/decorators/WithTimeRange.js +38 -0
  10. package/dist/cjs/stories/decorators/constants.js +36 -0
  11. package/dist/cjs/stories/decorators/index.js +3 -0
  12. package/dist/components/EmptyDashboard/EmptyDashboard.d.ts +5 -1
  13. package/dist/components/EmptyDashboard/EmptyDashboard.d.ts.map +1 -1
  14. package/dist/components/EmptyDashboard/EmptyDashboard.js +2 -1
  15. package/dist/components/EmptyDashboard/EmptyDashboard.js.map +1 -1
  16. package/dist/components/Panel/Panel.d.ts.map +1 -1
  17. package/dist/components/Panel/Panel.js +0 -4
  18. package/dist/components/Panel/Panel.js.map +1 -1
  19. package/dist/components/Panel/PanelHeader.d.ts +1 -2
  20. package/dist/components/Panel/PanelHeader.d.ts.map +1 -1
  21. package/dist/components/Panel/PanelHeader.js +2 -2
  22. package/dist/components/Panel/PanelHeader.js.map +1 -1
  23. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.d.ts +3 -2
  24. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.d.ts.map +1 -1
  25. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.js +1 -39
  26. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.js.map +1 -1
  27. package/dist/context/TemplateVariableProvider/hydrationUtils.d.ts +4 -0
  28. package/dist/context/TemplateVariableProvider/hydrationUtils.d.ts.map +1 -0
  29. package/dist/context/TemplateVariableProvider/hydrationUtils.js +62 -0
  30. package/dist/context/TemplateVariableProvider/hydrationUtils.js.map +1 -0
  31. package/dist/stories/decorators/WithDashboard.js +4 -19
  32. package/dist/stories/decorators/WithDashboard.js.map +1 -1
  33. package/dist/stories/decorators/WithDatasourceStore.js +76 -0
  34. package/dist/stories/decorators/WithDatasourceStore.js.map +1 -0
  35. package/dist/stories/decorators/WithTemplateVariables.js +9 -1
  36. package/dist/stories/decorators/WithTemplateVariables.js.map +1 -1
  37. package/dist/stories/decorators/WithTimeRange.js +32 -0
  38. package/dist/stories/decorators/WithTimeRange.js.map +1 -0
  39. package/dist/stories/decorators/constants.js +30 -0
  40. package/dist/stories/decorators/constants.js.map +1 -0
  41. package/dist/stories/decorators/index.js +3 -0
  42. package/dist/stories/decorators/index.js.map +1 -1
  43. package/package.json +4 -4
@@ -19,7 +19,7 @@ import DeleteIcon from 'mdi-material-ui/DeleteOutline';
19
19
  import DragIcon from 'mdi-material-ui/DragVertical';
20
20
  import ContentCopy from 'mdi-material-ui/ContentCopy';
21
21
  import { ARIA_LABEL_TEXT, TOOLTIP_TEXT } from '../../constants';
22
- export function PanelHeader({ id , title , description , editHandlers , isHovered , sx , ...rest }) {
22
+ export function PanelHeader({ id , title , description , editHandlers , sx , ...rest }) {
23
23
  const titleElementId = `${id}-title`;
24
24
  const descriptionTooltipId = `${id}-description`;
25
25
  let actions = undefined;
@@ -81,7 +81,7 @@ export function PanelHeader({ id , title , description , editHandlers , isHovere
81
81
  })
82
82
  ]
83
83
  });
84
- } else if (description !== undefined && isHovered) {
84
+ } else if (description !== undefined) {
85
85
  // If there aren't edit handlers and we have a description, show a button with a tooltip for the panel description
86
86
  actions = /*#__PURE__*/ _jsx(InfoTooltip, {
87
87
  id: descriptionTooltipId,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Panel/PanelHeader.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { CardHeader, Typography, Stack, IconButton, CardHeaderProps, styled } from '@mui/material';\nimport { InfoTooltip, combineSx } from '@perses-dev/components';\nimport InformationOutlineIcon from 'mdi-material-ui/InformationOutline';\nimport PencilIcon from 'mdi-material-ui/PencilOutline';\nimport DeleteIcon from 'mdi-material-ui/DeleteOutline';\nimport DragIcon from 'mdi-material-ui/DragVertical';\nimport ContentCopy from 'mdi-material-ui/ContentCopy';\nimport { ARIA_LABEL_TEXT, TOOLTIP_TEXT } from '../../constants';\n\ntype OmittedProps = 'children' | 'action' | 'title' | 'disableTypography';\n\nexport interface PanelHeaderProps extends Omit<CardHeaderProps, OmittedProps> {\n id: string;\n title: string;\n description?: string;\n editHandlers?: {\n onEditPanelClick: () => void;\n onDuplicatePanelClick: () => void;\n onDeletePanelClick: () => void;\n };\n isHovered: boolean;\n}\n\nexport function PanelHeader({ id, title, description, editHandlers, isHovered, sx, ...rest }: PanelHeaderProps) {\n const titleElementId = `${id}-title`;\n const descriptionTooltipId = `${id}-description`;\n\n let actions: CardHeaderProps['action'] = undefined;\n if (editHandlers !== undefined) {\n // If there are edit handlers, always just show the edit buttons\n actions = (\n <>\n <InfoTooltip description={TOOLTIP_TEXT.editPanel}>\n <HeaderIconButton\n aria-label={ARIA_LABEL_TEXT.editPanel(title)}\n size=\"small\"\n onClick={editHandlers.onEditPanelClick}\n >\n <PencilIcon fontSize=\"inherit\" />\n </HeaderIconButton>\n </InfoTooltip>\n <InfoTooltip description={TOOLTIP_TEXT.duplicatePanel}>\n <HeaderIconButton\n aria-label={ARIA_LABEL_TEXT.duplicatePanel(title)}\n size=\"small\"\n onClick={editHandlers.onDuplicatePanelClick}\n >\n <ContentCopy\n fontSize=\"inherit\"\n sx={{\n // Shrink this icon a little bit to look more consistent\n // with the other icons in the header.\n transform: 'scale(0.925)',\n }}\n />\n </HeaderIconButton>\n </InfoTooltip>\n <InfoTooltip description={TOOLTIP_TEXT.deletePanel}>\n <HeaderIconButton\n aria-label={ARIA_LABEL_TEXT.deletePanel(title)}\n size=\"small\"\n onClick={editHandlers.onDeletePanelClick}\n >\n <DeleteIcon fontSize=\"inherit\" />\n </HeaderIconButton>\n </InfoTooltip>\n <InfoTooltip description={TOOLTIP_TEXT.movePanel}>\n <HeaderIconButton aria-label={ARIA_LABEL_TEXT.movePanel(title)} size=\"small\">\n <DragIcon className=\"drag-handle\" sx={{ cursor: 'grab' }} fontSize=\"inherit\" />\n </HeaderIconButton>\n </InfoTooltip>\n </>\n );\n } else if (description !== undefined && isHovered) {\n // If there aren't edit handlers and we have a description, show a button with a tooltip for the panel description\n actions = (\n <InfoTooltip id={descriptionTooltipId} description={description} enterDelay={100}>\n <HeaderIconButton aria-label=\"panel description\" size=\"small\">\n <InformationOutlineIcon\n aria-describedby=\"info-tooltip\"\n aria-hidden={false}\n fontSize=\"inherit\"\n sx={{ color: (theme) => theme.palette.grey[700] }}\n />\n </HeaderIconButton>\n </InfoTooltip>\n );\n }\n\n return (\n <CardHeader\n id={id}\n component=\"header\"\n aria-labelledby={titleElementId}\n aria-describedby={descriptionTooltipId}\n disableTypography\n title={\n <Typography\n id={titleElementId}\n variant=\"subtitle1\"\n sx={{\n // `minHeight` guarantees that the header has the correct height\n // when there is no title (i.e. in the preview)\n lineHeight: '24px',\n minHeight: '24px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {title}\n </Typography>\n }\n action={\n <HeaderActionWrapper direction=\"row\" spacing={0.25} alignItems=\"center\">\n {actions}\n </HeaderActionWrapper>\n }\n sx={combineSx(\n (theme) => ({\n padding: theme.spacing(1),\n borderBottom: `solid 1px ${theme.palette.divider}`,\n '.MuiCardHeader-content': {\n overflow: 'hidden',\n },\n '.MuiCardHeader-action': {\n // Overriding the negative margins from MUI's defaults, so we\n // can vertically center the icons. Moving these values to a wrapper\n // inside the action in `HeaderActionWrapper` below.\n // https://github.com/mui/material-ui/blob/master/packages/mui-material/src/CardHeader/CardHeader.js#L56-L58\n margin: 'auto',\n },\n }),\n sx\n )}\n {...rest}\n />\n );\n}\n\nconst HeaderIconButton = styled(IconButton)(({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n padding: '4px',\n}));\n\nconst HeaderActionWrapper = styled(Stack)(() => ({\n // Adding back the negative margins from MUI's defaults for actions, so we\n // avoid increasing the header size when actions are present while also being\n // able to vertically center the actions.\n // https://github.com/mui/material-ui/blob/master/packages/mui-material/src/CardHeader/CardHeader.js#L56-L58\n marginTop: -4,\n marginBottom: -4,\n}));\n"],"names":["CardHeader","Typography","Stack","IconButton","styled","InfoTooltip","combineSx","InformationOutlineIcon","PencilIcon","DeleteIcon","DragIcon","ContentCopy","ARIA_LABEL_TEXT","TOOLTIP_TEXT","PanelHeader","id","title","description","editHandlers","isHovered","sx","rest","titleElementId","descriptionTooltipId","actions","undefined","editPanel","HeaderIconButton","aria-label","size","onClick","onEditPanelClick","fontSize","duplicatePanel","onDuplicatePanelClick","transform","deletePanel","onDeletePanelClick","movePanel","className","cursor","enterDelay","aria-describedby","aria-hidden","color","theme","palette","grey","component","aria-labelledby","disableTypography","variant","lineHeight","minHeight","whiteSpace","overflow","textOverflow","action","HeaderActionWrapper","direction","spacing","alignItems","padding","borderBottom","divider","margin","borderRadius","shape","marginTop","marginBottom"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/Panel/PanelHeader.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { CardHeader, Typography, Stack, IconButton, CardHeaderProps, styled } from '@mui/material';\nimport { InfoTooltip, combineSx } from '@perses-dev/components';\nimport InformationOutlineIcon from 'mdi-material-ui/InformationOutline';\nimport PencilIcon from 'mdi-material-ui/PencilOutline';\nimport DeleteIcon from 'mdi-material-ui/DeleteOutline';\nimport DragIcon from 'mdi-material-ui/DragVertical';\nimport ContentCopy from 'mdi-material-ui/ContentCopy';\nimport { ARIA_LABEL_TEXT, TOOLTIP_TEXT } from '../../constants';\n\ntype OmittedProps = 'children' | 'action' | 'title' | 'disableTypography';\n\nexport interface PanelHeaderProps extends Omit<CardHeaderProps, OmittedProps> {\n id: string;\n title: string;\n description?: string;\n editHandlers?: {\n onEditPanelClick: () => void;\n onDuplicatePanelClick: () => void;\n onDeletePanelClick: () => void;\n };\n}\n\nexport function PanelHeader({ id, title, description, editHandlers, sx, ...rest }: PanelHeaderProps) {\n const titleElementId = `${id}-title`;\n const descriptionTooltipId = `${id}-description`;\n\n let actions: CardHeaderProps['action'] = undefined;\n if (editHandlers !== undefined) {\n // If there are edit handlers, always just show the edit buttons\n actions = (\n <>\n <InfoTooltip description={TOOLTIP_TEXT.editPanel}>\n <HeaderIconButton\n aria-label={ARIA_LABEL_TEXT.editPanel(title)}\n size=\"small\"\n onClick={editHandlers.onEditPanelClick}\n >\n <PencilIcon fontSize=\"inherit\" />\n </HeaderIconButton>\n </InfoTooltip>\n <InfoTooltip description={TOOLTIP_TEXT.duplicatePanel}>\n <HeaderIconButton\n aria-label={ARIA_LABEL_TEXT.duplicatePanel(title)}\n size=\"small\"\n onClick={editHandlers.onDuplicatePanelClick}\n >\n <ContentCopy\n fontSize=\"inherit\"\n sx={{\n // Shrink this icon a little bit to look more consistent\n // with the other icons in the header.\n transform: 'scale(0.925)',\n }}\n />\n </HeaderIconButton>\n </InfoTooltip>\n <InfoTooltip description={TOOLTIP_TEXT.deletePanel}>\n <HeaderIconButton\n aria-label={ARIA_LABEL_TEXT.deletePanel(title)}\n size=\"small\"\n onClick={editHandlers.onDeletePanelClick}\n >\n <DeleteIcon fontSize=\"inherit\" />\n </HeaderIconButton>\n </InfoTooltip>\n <InfoTooltip description={TOOLTIP_TEXT.movePanel}>\n <HeaderIconButton aria-label={ARIA_LABEL_TEXT.movePanel(title)} size=\"small\">\n <DragIcon className=\"drag-handle\" sx={{ cursor: 'grab' }} fontSize=\"inherit\" />\n </HeaderIconButton>\n </InfoTooltip>\n </>\n );\n } else if (description !== undefined) {\n // If there aren't edit handlers and we have a description, show a button with a tooltip for the panel description\n actions = (\n <InfoTooltip id={descriptionTooltipId} description={description} enterDelay={100}>\n <HeaderIconButton aria-label=\"panel description\" size=\"small\">\n <InformationOutlineIcon\n aria-describedby=\"info-tooltip\"\n aria-hidden={false}\n fontSize=\"inherit\"\n sx={{ color: (theme) => theme.palette.grey[700] }}\n />\n </HeaderIconButton>\n </InfoTooltip>\n );\n }\n\n return (\n <CardHeader\n id={id}\n component=\"header\"\n aria-labelledby={titleElementId}\n aria-describedby={descriptionTooltipId}\n disableTypography\n title={\n <Typography\n id={titleElementId}\n variant=\"subtitle1\"\n sx={{\n // `minHeight` guarantees that the header has the correct height\n // when there is no title (i.e. in the preview)\n lineHeight: '24px',\n minHeight: '24px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {title}\n </Typography>\n }\n action={\n <HeaderActionWrapper direction=\"row\" spacing={0.25} alignItems=\"center\">\n {actions}\n </HeaderActionWrapper>\n }\n sx={combineSx(\n (theme) => ({\n padding: theme.spacing(1),\n borderBottom: `solid 1px ${theme.palette.divider}`,\n '.MuiCardHeader-content': {\n overflow: 'hidden',\n },\n '.MuiCardHeader-action': {\n // Overriding the negative margins from MUI's defaults, so we\n // can vertically center the icons. Moving these values to a wrapper\n // inside the action in `HeaderActionWrapper` below.\n // https://github.com/mui/material-ui/blob/master/packages/mui-material/src/CardHeader/CardHeader.js#L56-L58\n margin: 'auto',\n },\n }),\n sx\n )}\n {...rest}\n />\n );\n}\n\nconst HeaderIconButton = styled(IconButton)(({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n padding: '4px',\n}));\n\nconst HeaderActionWrapper = styled(Stack)(() => ({\n // Adding back the negative margins from MUI's defaults for actions, so we\n // avoid increasing the header size when actions are present while also being\n // able to vertically center the actions.\n // https://github.com/mui/material-ui/blob/master/packages/mui-material/src/CardHeader/CardHeader.js#L56-L58\n marginTop: -4,\n marginBottom: -4,\n}));\n"],"names":["CardHeader","Typography","Stack","IconButton","styled","InfoTooltip","combineSx","InformationOutlineIcon","PencilIcon","DeleteIcon","DragIcon","ContentCopy","ARIA_LABEL_TEXT","TOOLTIP_TEXT","PanelHeader","id","title","description","editHandlers","sx","rest","titleElementId","descriptionTooltipId","actions","undefined","editPanel","HeaderIconButton","aria-label","size","onClick","onEditPanelClick","fontSize","duplicatePanel","onDuplicatePanelClick","transform","deletePanel","onDeletePanelClick","movePanel","className","cursor","enterDelay","aria-describedby","aria-hidden","color","theme","palette","grey","component","aria-labelledby","disableTypography","variant","lineHeight","minHeight","whiteSpace","overflow","textOverflow","action","HeaderActionWrapper","direction","spacing","alignItems","padding","borderBottom","divider","margin","borderRadius","shape","marginTop","marginBottom"],"mappings":"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"}
@@ -22,9 +22,10 @@ export declare function useTemplateVariableActions(): {
22
22
  };
23
23
  export declare function useTemplateVariableDefinitions(): VariableDefinition[];
24
24
  export declare function useTemplateVariableStore(): TemplateVariableStore;
25
- export declare function TemplateVariableProvider({ children, initialVariableDefinitions, }: {
25
+ export interface TemplateVariableProviderProps {
26
26
  children: React.ReactNode;
27
27
  initialVariableDefinitions?: VariableDefinition[];
28
- }): JSX.Element;
28
+ }
29
+ export declare function TemplateVariableProvider({ children, initialVariableDefinitions }: TemplateVariableProviderProps): JSX.Element;
29
30
  export {};
30
31
  //# sourceMappingURL=TemplateVariableProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TemplateVariableProvider.d.ts","sourceRoot":"","sources":["../../../src/context/TemplateVariableProvider/TemplateVariableProvider.tsx"],"names":[],"mappings":";AAkBA,OAAO,EAEL,gBAAgB,EAChB,aAAa,EACb,cAAc,EAEf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGnF,aAAK,qBAAqB,GAAG;IAC3B,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;IAC1C,aAAa,EAAE,gBAAgB,CAAC;IAChC,gBAAgB,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC7E,kBAAkB,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IAC5E,kBAAkB,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACnE,sBAAsB,EAAE,CAAC,WAAW,EAAE,kBAAkB,EAAE,KAAK,IAAI,CAAC;CACrE,CAAC;AAaF,wBAAgB,yBAAyB,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,oBAqBjE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM;;;EAU/C;AAED,wBAAgB,0BAA0B;;;;;EAUzC;AAED,wBAAgB,8BAA8B,yBAG7C;AAED,wBAAgB,wBAAwB,0BAGvC;AA0FD,wBAAgB,wBAAwB,CAAC,EACvC,QAAQ,EACR,0BAA+B,GAChC,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,0BAA0B,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACnD,eASA"}
1
+ {"version":3,"file":"TemplateVariableProvider.d.ts","sourceRoot":"","sources":["../../../src/context/TemplateVariableProvider/TemplateVariableProvider.tsx"],"names":[],"mappings":";AAkBA,OAAO,EAEL,gBAAgB,EAChB,aAAa,EACb,cAAc,EAEf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAInF,aAAK,qBAAqB,GAAG;IAC3B,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;IAC1C,aAAa,EAAE,gBAAgB,CAAC;IAChC,gBAAgB,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC7E,kBAAkB,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IAC5E,kBAAkB,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACnE,sBAAsB,EAAE,CAAC,WAAW,EAAE,kBAAkB,EAAE,KAAK,IAAI,CAAC;CACrE,CAAC;AAaF,wBAAgB,yBAAyB,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,oBAqBjE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM;;;EAU/C;AAED,wBAAgB,0BAA0B;;;;;EAUzC;AAED,wBAAgB,8BAA8B,yBAG7C;AAED,wBAAgB,wBAAwB,0BAGvC;AA0FD,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,0BAA0B,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACnD;AAED,wBAAgB,wBAAwB,CAAC,EAAE,QAAQ,EAAE,0BAA+B,EAAE,EAAE,6BAA6B,eASpH"}
@@ -16,6 +16,7 @@ import { createStore, useStore } from 'zustand';
16
16
  import { immer } from 'zustand/middleware/immer';
17
17
  import { devtools } from 'zustand/middleware';
18
18
  import { TemplateVariableContext, DEFAULT_ALL_VALUE as ALL_VALUE } from '@perses-dev/plugin-system';
19
+ import { hydrateTemplateVariableStates } from './hydrationUtils';
19
20
  import { useVariableQueryParams, getInitalValuesFromQueryParameters, getURLQueryParamName } from './query-params';
20
21
  const TemplateVariableStoreContext = /*#__PURE__*/ createContext(undefined);
21
22
  function useTemplateVariableStoreCtx() {
@@ -169,44 +170,5 @@ export function TemplateVariableProvider({ children , initialVariableDefinitions
169
170
  })
170
171
  });
171
172
  }
172
- /** Helpers */ function hydrateTemplateVariableState(variable, initialValue) {
173
- const varState = {
174
- value: null,
175
- loading: false
176
- };
177
- switch(variable.kind){
178
- case 'TextVariable':
179
- varState.value = initialValue !== null && initialValue !== void 0 ? initialValue : variable.spec.value;
180
- break;
181
- case 'ListVariable':
182
- varState.options = [];
183
- var ref;
184
- varState.value = (ref = initialValue !== null && initialValue !== void 0 ? initialValue : variable.spec.default_value) !== null && ref !== void 0 ? ref : null;
185
- if (varState.options.length > 0 && !varState.value) {
186
- var ref1;
187
- var ref2;
188
- const firstOptionValue = (ref2 = (ref1 = varState.options[0]) === null || ref1 === void 0 ? void 0 : ref1.value) !== null && ref2 !== void 0 ? ref2 : null;
189
- if (firstOptionValue !== null) {
190
- varState.value = variable.spec.allow_multiple ? [
191
- firstOptionValue
192
- ] : firstOptionValue;
193
- }
194
- }
195
- break;
196
- default:
197
- break;
198
- }
199
- return varState;
200
- }
201
- function hydrateTemplateVariableStates(definitions, initialValues) {
202
- const state = {};
203
- definitions.forEach((v)=>{
204
- const name = v.spec.name;
205
- const param = initialValues[name];
206
- const initialValue = param ? param : null;
207
- state[name] = hydrateTemplateVariableState(v, initialValue);
208
- });
209
- return state;
210
- }
211
173
 
212
174
  //# sourceMappingURL=TemplateVariableProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/context/TemplateVariableProvider/TemplateVariableProvider.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { createContext, useContext, useMemo, useState } from 'react';\nimport { createStore, useStore } from 'zustand';\nimport { immer } from 'zustand/middleware/immer';\nimport { devtools } from 'zustand/middleware';\n\nimport {\n TemplateVariableContext,\n VariableStateMap,\n VariableState,\n VariableOption,\n DEFAULT_ALL_VALUE as ALL_VALUE,\n} from '@perses-dev/plugin-system';\nimport { VariableName, VariableValue, VariableDefinition } from '@perses-dev/core';\nimport { useVariableQueryParams, getInitalValuesFromQueryParameters, getURLQueryParamName } from './query-params';\n\ntype TemplateVariableStore = {\n variableDefinitions: VariableDefinition[];\n variableState: VariableStateMap;\n setVariableValue: (variableName: VariableName, value: VariableValue) => void;\n setVariableOptions: (name: VariableName, options: VariableOption[]) => void;\n setVariableLoading: (name: VariableName, loading: boolean) => void;\n setVariableDefinitions: (definitions: VariableDefinition[]) => void;\n};\n\nconst TemplateVariableStoreContext = createContext<ReturnType<typeof createTemplateVariableSrvStore> | undefined>(\n undefined\n);\nfunction useTemplateVariableStoreCtx() {\n const context = useContext(TemplateVariableStoreContext);\n if (!context) {\n throw new Error('TemplateVariableStoreContext not initialized');\n }\n return context;\n}\n\nexport function useTemplateVariableValues(variableNames?: string[]) {\n const store = useTemplateVariableStoreCtx();\n const state = useStore(\n store,\n (s) => {\n const names = variableNames ?? Object.keys(s.variableState);\n const vars: VariableStateMap = {};\n names.forEach((name) => {\n const varState = s.variableState[name];\n if (!varState) {\n return;\n }\n vars[name] = varState;\n });\n return vars;\n },\n (left, right) => {\n return JSON.stringify(left) === JSON.stringify(right);\n }\n );\n return state;\n}\n\nexport function useTemplateVariable(name: string) {\n const store = useTemplateVariableStoreCtx();\n return useStore(store, (s) => {\n const variableState = s.variableState[name];\n const definition = s.variableDefinitions.find((v) => v.spec.name === name);\n return {\n state: variableState,\n definition,\n };\n });\n}\n\nexport function useTemplateVariableActions() {\n const store = useTemplateVariableStoreCtx();\n return useStore(store, (s) => {\n return {\n setVariableValue: s.setVariableValue,\n setVariableLoading: s.setVariableLoading,\n setVariableOptions: s.setVariableOptions,\n setVariableDefinitions: s.setVariableDefinitions,\n };\n });\n}\n\nexport function useTemplateVariableDefinitions() {\n const store = useTemplateVariableStoreCtx();\n return useStore(store, (s) => s.variableDefinitions);\n}\n\nexport function useTemplateVariableStore() {\n const store = useTemplateVariableStoreCtx();\n return useStore(store);\n}\n\nfunction PluginProvider({ children }: { children: React.ReactNode }) {\n const originalValues = useTemplateVariableValues();\n\n const values = useMemo(() => {\n const contextValues: VariableStateMap = {};\n\n // This will loop through all the current variables values\n // and update any variables that have ALL_VALUE as their current value\n // to include all options.\n Object.keys(originalValues).forEach((name) => {\n const v = { ...originalValues[name] } as VariableState;\n if (v.value === ALL_VALUE) {\n v.value = v.options?.map((o: { value: string }) => o.value) ?? null;\n }\n contextValues[name] = v;\n });\n return contextValues;\n }, [originalValues]);\n\n return <TemplateVariableContext.Provider value={{ state: values }}>{children}</TemplateVariableContext.Provider>;\n}\n\ninterface TemplateVariableSrvArgs {\n initialVariableDefinitions?: VariableDefinition[];\n queryParams?: ReturnType<typeof useVariableQueryParams>;\n}\n\nfunction createTemplateVariableSrvStore({ initialVariableDefinitions = [], queryParams }: TemplateVariableSrvArgs) {\n const initialParams = getInitalValuesFromQueryParameters(queryParams ? queryParams[0] : {});\n const store = createStore<TemplateVariableStore>()(\n devtools(\n immer((set) => ({\n variableState: hydrateTemplateVariableStates(initialVariableDefinitions, initialParams),\n variableDefinitions: initialVariableDefinitions,\n setVariableDefinitions(definitions: VariableDefinition[]) {\n set((state) => {\n state.variableDefinitions = definitions;\n state.variableState = hydrateTemplateVariableStates(definitions, initialParams);\n });\n },\n setVariableOptions(name, options) {\n set((state) => {\n const varState = state.variableState[name];\n if (!varState) {\n return;\n }\n varState.options = options;\n });\n },\n setVariableLoading(name, loading) {\n set((state) => {\n const varState = state.variableState[name];\n if (!varState) {\n return;\n }\n varState.loading = loading;\n });\n },\n\n setVariableValue: (name, value) =>\n set((state) => {\n let val = value;\n const varState = state.variableState[name];\n if (!varState) {\n return;\n }\n\n // Make sure there is only one all value\n if (Array.isArray(val) && val.includes(ALL_VALUE)) {\n if (val.at(-1) === ALL_VALUE) {\n val = ALL_VALUE;\n } else {\n val = val.filter((v) => v !== ALL_VALUE);\n }\n }\n if (queryParams) {\n const setQueryParams = queryParams[1];\n setQueryParams({ [getURLQueryParamName(name)]: val });\n }\n varState.value = val;\n }),\n }))\n )\n );\n\n return store;\n}\n\nexport function TemplateVariableProvider({\n children,\n initialVariableDefinitions = [],\n}: {\n children: React.ReactNode;\n initialVariableDefinitions?: VariableDefinition[];\n}) {\n const queryParams = useVariableQueryParams(initialVariableDefinitions);\n const [store] = useState(createTemplateVariableSrvStore({ initialVariableDefinitions, queryParams }));\n\n return (\n <TemplateVariableStoreContext.Provider value={store}>\n <PluginProvider>{children}</PluginProvider>\n </TemplateVariableStoreContext.Provider>\n );\n}\n\n/** Helpers */\n\nfunction hydrateTemplateVariableState(variable: VariableDefinition, initialValue?: VariableValue) {\n const varState: VariableState = {\n value: null,\n loading: false,\n };\n switch (variable.kind) {\n case 'TextVariable':\n varState.value = initialValue ?? variable.spec.value;\n break;\n case 'ListVariable':\n varState.options = [];\n varState.value = initialValue ?? variable.spec.default_value ?? null;\n if (varState.options.length > 0 && !varState.value) {\n const firstOptionValue = varState.options[0]?.value ?? null;\n if (firstOptionValue !== null) {\n varState.value = variable.spec.allow_multiple ? [firstOptionValue] : firstOptionValue;\n }\n }\n break;\n default:\n break;\n }\n return varState;\n}\n\nfunction hydrateTemplateVariableStates(\n definitions: VariableDefinition[],\n initialValues: Record<string, VariableValue>\n): VariableStateMap {\n const state: VariableStateMap = {};\n definitions.forEach((v) => {\n const name = v.spec.name;\n const param = initialValues[name];\n const initialValue = param ? param : null;\n state[name] = hydrateTemplateVariableState(v, initialValue);\n });\n return state;\n}\n"],"names":["createContext","useContext","useMemo","useState","createStore","useStore","immer","devtools","TemplateVariableContext","DEFAULT_ALL_VALUE","ALL_VALUE","useVariableQueryParams","getInitalValuesFromQueryParameters","getURLQueryParamName","TemplateVariableStoreContext","undefined","useTemplateVariableStoreCtx","context","Error","useTemplateVariableValues","variableNames","store","state","s","names","Object","keys","variableState","vars","forEach","name","varState","left","right","JSON","stringify","useTemplateVariable","definition","variableDefinitions","find","v","spec","useTemplateVariableActions","setVariableValue","setVariableLoading","setVariableOptions","setVariableDefinitions","useTemplateVariableDefinitions","useTemplateVariableStore","PluginProvider","children","originalValues","values","contextValues","value","options","map","o","Provider","createTemplateVariableSrvStore","initialVariableDefinitions","queryParams","initialParams","set","hydrateTemplateVariableStates","definitions","loading","val","Array","isArray","includes","at","filter","setQueryParams","TemplateVariableProvider","hydrateTemplateVariableState","variable","initialValue","kind","default_value","length","firstOptionValue","allow_multiple","initialValues","param"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC;AAAA,SAASA,aAAa,EAAEC,UAAU,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,OAAO,CAAC;AACrE,SAASC,WAAW,EAAEC,QAAQ,QAAQ,SAAS,CAAC;AAChD,SAASC,KAAK,QAAQ,0BAA0B,CAAC;AACjD,SAASC,QAAQ,QAAQ,oBAAoB,CAAC;AAE9C,SACEC,uBAAuB,EAIvBC,iBAAiB,IAAIC,SAAS,QACzB,2BAA2B,CAAC;AAEnC,SAASC,sBAAsB,EAAEC,kCAAkC,EAAEC,oBAAoB,QAAQ,gBAAgB,CAAC;AAWlH,MAAMC,4BAA4B,iBAAGd,aAAa,CAChDe,SAAS,CACV,AAAC;AACF,SAASC,2BAA2B,GAAG;IACrC,MAAMC,OAAO,GAAGhB,UAAU,CAACa,4BAA4B,CAAC,AAAC;IACzD,IAAI,CAACG,OAAO,EAAE;QACZ,MAAM,IAAIC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IACD,OAAOD,OAAO,CAAC;AACjB,CAAC;AAED,OAAO,SAASE,yBAAyB,CAACC,aAAwB,EAAE;IAClE,MAAMC,KAAK,GAAGL,2BAA2B,EAAE,AAAC;IAC5C,MAAMM,KAAK,GAAGjB,QAAQ,CACpBgB,KAAK,EACL,CAACE,CAAC,GAAK;QACL,MAAMC,KAAK,GAAGJ,aAAa,aAAbA,aAAa,cAAbA,aAAa,GAAIK,MAAM,CAACC,IAAI,CAACH,CAAC,CAACI,aAAa,CAAC,AAAC;QAC5D,MAAMC,IAAI,GAAqB,EAAE,AAAC;QAClCJ,KAAK,CAACK,OAAO,CAAC,CAACC,IAAI,GAAK;YACtB,MAAMC,QAAQ,GAAGR,CAAC,CAACI,aAAa,CAACG,IAAI,CAAC,AAAC;YACvC,IAAI,CAACC,QAAQ,EAAE;gBACb,OAAO;YACT,CAAC;YACDH,IAAI,CAACE,IAAI,CAAC,GAAGC,QAAQ,CAAC;QACxB,CAAC,CAAC,CAAC;QACH,OAAOH,IAAI,CAAC;IACd,CAAC,EACD,CAACI,IAAI,EAAEC,KAAK,GAAK;QACf,OAAOC,IAAI,CAACC,SAAS,CAACH,IAAI,CAAC,KAAKE,IAAI,CAACC,SAAS,CAACF,KAAK,CAAC,CAAC;IACxD,CAAC,CACF,AAAC;IACF,OAAOX,KAAK,CAAC;AACf,CAAC;AAED,OAAO,SAASc,mBAAmB,CAACN,IAAY,EAAE;IAChD,MAAMT,KAAK,GAAGL,2BAA2B,EAAE,AAAC;IAC5C,OAAOX,QAAQ,CAACgB,KAAK,EAAE,CAACE,CAAC,GAAK;QAC5B,MAAMI,aAAa,GAAGJ,CAAC,CAACI,aAAa,CAACG,IAAI,CAAC,AAAC;QAC5C,MAAMO,UAAU,GAAGd,CAAC,CAACe,mBAAmB,CAACC,IAAI,CAAC,CAACC,CAAC,GAAKA,CAAC,CAACC,IAAI,CAACX,IAAI,KAAKA,IAAI,CAAC,AAAC;QAC3E,OAAO;YACLR,KAAK,EAAEK,aAAa;YACpBU,UAAU;SACX,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,OAAO,SAASK,0BAA0B,GAAG;IAC3C,MAAMrB,KAAK,GAAGL,2BAA2B,EAAE,AAAC;IAC5C,OAAOX,QAAQ,CAACgB,KAAK,EAAE,CAACE,CAAC,GAAK;QAC5B,OAAO;YACLoB,gBAAgB,EAAEpB,CAAC,CAACoB,gBAAgB;YACpCC,kBAAkB,EAAErB,CAAC,CAACqB,kBAAkB;YACxCC,kBAAkB,EAAEtB,CAAC,CAACsB,kBAAkB;YACxCC,sBAAsB,EAAEvB,CAAC,CAACuB,sBAAsB;SACjD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,OAAO,SAASC,8BAA8B,GAAG;IAC/C,MAAM1B,KAAK,GAAGL,2BAA2B,EAAE,AAAC;IAC5C,OAAOX,QAAQ,CAACgB,KAAK,EAAE,CAACE,CAAC,GAAKA,CAAC,CAACe,mBAAmB,CAAC,CAAC;AACvD,CAAC;AAED,OAAO,SAASU,wBAAwB,GAAG;IACzC,MAAM3B,KAAK,GAAGL,2BAA2B,EAAE,AAAC;IAC5C,OAAOX,QAAQ,CAACgB,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,SAAS4B,cAAc,CAAC,EAAEC,QAAQ,CAAA,EAAiC,EAAE;IACnE,MAAMC,cAAc,GAAGhC,yBAAyB,EAAE,AAAC;IAEnD,MAAMiC,MAAM,GAAGlD,OAAO,CAAC,IAAM;QAC3B,MAAMmD,aAAa,GAAqB,EAAE,AAAC;QAE3C,0DAA0D;QAC1D,sEAAsE;QACtE,0BAA0B;QAC1B5B,MAAM,CAACC,IAAI,CAACyB,cAAc,CAAC,CAACtB,OAAO,CAAC,CAACC,IAAI,GAAK;YAC5C,MAAMU,CAAC,GAAG;gBAAE,GAAGW,cAAc,CAACrB,IAAI,CAAC;aAAE,AAAiB,AAAC;YACvD,IAAIU,CAAC,CAACc,KAAK,KAAK5C,SAAS,EAAE;oBACf8B,GAAS;oBAATA,IAAiD;gBAA3DA,CAAC,CAACc,KAAK,GAAGd,CAAAA,IAAiD,GAAjDA,CAAAA,GAAS,GAATA,CAAC,CAACe,OAAO,cAATf,GAAS,WAAK,GAAdA,KAAAA,CAAc,GAAdA,GAAS,CAAEgB,GAAG,CAAC,CAACC,CAAoB,GAAKA,CAAC,CAACH,KAAK,CAAC,cAAjDd,IAAiD,cAAjDA,IAAiD,GAAI,IAAI,CAAC;YACtE,CAAC;YACDa,aAAa,CAACvB,IAAI,CAAC,GAAGU,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,OAAOa,aAAa,CAAC;IACvB,CAAC,EAAE;QAACF,cAAc;KAAC,CAAC,AAAC;IAErB,qBAAO,KAAC3C,uBAAuB,CAACkD,QAAQ;QAACJ,KAAK,EAAE;YAAEhC,KAAK,EAAE8B,MAAM;SAAE;kBAAGF,QAAQ;MAAoC,CAAC;AACnH,CAAC;AAOD,SAASS,8BAA8B,CAAC,EAAEC,0BAA0B,EAAG,EAAE,CAAA,EAAEC,WAAW,CAAA,EAA2B,EAAE;IACjH,MAAMC,aAAa,GAAGlD,kCAAkC,CAACiD,WAAW,GAAGA,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,AAAC;IAC5F,MAAMxC,KAAK,GAAGjB,WAAW,EAAyB,CAChDG,QAAQ,CACND,KAAK,CAAC,CAACyD,GAAG,GAAM,CAAA;YACdpC,aAAa,EAAEqC,6BAA6B,CAACJ,0BAA0B,EAAEE,aAAa,CAAC;YACvFxB,mBAAmB,EAAEsB,0BAA0B;YAC/Cd,sBAAsB,EAACmB,WAAiC,EAAE;gBACxDF,GAAG,CAAC,CAACzC,KAAK,GAAK;oBACbA,KAAK,CAACgB,mBAAmB,GAAG2B,WAAW,CAAC;oBACxC3C,KAAK,CAACK,aAAa,GAAGqC,6BAA6B,CAACC,WAAW,EAAEH,aAAa,CAAC,CAAC;gBAClF,CAAC,CAAC,CAAC;YACL,CAAC;YACDjB,kBAAkB,EAACf,IAAI,EAAEyB,OAAO,EAAE;gBAChCQ,GAAG,CAAC,CAACzC,KAAK,GAAK;oBACb,MAAMS,QAAQ,GAAGT,KAAK,CAACK,aAAa,CAACG,IAAI,CAAC,AAAC;oBAC3C,IAAI,CAACC,QAAQ,EAAE;wBACb,OAAO;oBACT,CAAC;oBACDA,QAAQ,CAACwB,OAAO,GAAGA,OAAO,CAAC;gBAC7B,CAAC,CAAC,CAAC;YACL,CAAC;YACDX,kBAAkB,EAACd,IAAI,EAAEoC,OAAO,EAAE;gBAChCH,GAAG,CAAC,CAACzC,KAAK,GAAK;oBACb,MAAMS,QAAQ,GAAGT,KAAK,CAACK,aAAa,CAACG,IAAI,CAAC,AAAC;oBAC3C,IAAI,CAACC,QAAQ,EAAE;wBACb,OAAO;oBACT,CAAC;oBACDA,QAAQ,CAACmC,OAAO,GAAGA,OAAO,CAAC;gBAC7B,CAAC,CAAC,CAAC;YACL,CAAC;YAEDvB,gBAAgB,EAAE,CAACb,IAAI,EAAEwB,KAAK,GAC5BS,GAAG,CAAC,CAACzC,KAAK,GAAK;oBACb,IAAI6C,GAAG,GAAGb,KAAK,AAAC;oBAChB,MAAMvB,QAAQ,GAAGT,KAAK,CAACK,aAAa,CAACG,IAAI,CAAC,AAAC;oBAC3C,IAAI,CAACC,QAAQ,EAAE;wBACb,OAAO;oBACT,CAAC;oBAED,wCAAwC;oBACxC,IAAIqC,KAAK,CAACC,OAAO,CAACF,GAAG,CAAC,IAAIA,GAAG,CAACG,QAAQ,CAAC5D,SAAS,CAAC,EAAE;wBACjD,IAAIyD,GAAG,CAACI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK7D,SAAS,EAAE;4BAC5ByD,GAAG,GAAGzD,SAAS,CAAC;wBAClB,OAAO;4BACLyD,GAAG,GAAGA,GAAG,CAACK,MAAM,CAAC,CAAChC,CAAC,GAAKA,CAAC,KAAK9B,SAAS,CAAC,CAAC;wBAC3C,CAAC;oBACH,CAAC;oBACD,IAAImD,WAAW,EAAE;wBACf,MAAMY,cAAc,GAAGZ,WAAW,CAAC,CAAC,CAAC,AAAC;wBACtCY,cAAc,CAAC;4BAAE,CAAC5D,oBAAoB,CAACiB,IAAI,CAAC,CAAC,EAAEqC,GAAG;yBAAE,CAAC,CAAC;oBACxD,CAAC;oBACDpC,QAAQ,CAACuB,KAAK,GAAGa,GAAG,CAAC;gBACvB,CAAC,CAAC;SACL,CAAA,AAAC,CAAC,CACJ,CACF,AAAC;IAEF,OAAO9C,KAAK,CAAC;AACf,CAAC;AAED,OAAO,SAASqD,wBAAwB,CAAC,EACvCxB,QAAQ,CAAA,EACRU,0BAA0B,EAAG,EAAE,CAAA,EAIhC,EAAE;IACD,MAAMC,WAAW,GAAGlD,sBAAsB,CAACiD,0BAA0B,CAAC,AAAC;IACvE,MAAM,CAACvC,KAAK,CAAC,GAAGlB,QAAQ,CAACwD,8BAA8B,CAAC;QAAEC,0BAA0B;QAAEC,WAAW;KAAE,CAAC,CAAC,AAAC;IAEtG,qBACE,KAAC/C,4BAA4B,CAAC4C,QAAQ;QAACJ,KAAK,EAAEjC,KAAK;kBACjD,cAAA,KAAC4B,cAAc;sBAAEC,QAAQ;UAAkB;MACL,CACxC;AACJ,CAAC;AAED,YAAY,GAEZ,SAASyB,4BAA4B,CAACC,QAA4B,EAAEC,YAA4B,EAAE;IAChG,MAAM9C,QAAQ,GAAkB;QAC9BuB,KAAK,EAAE,IAAI;QACXY,OAAO,EAAE,KAAK;KACf,AAAC;IACF,OAAQU,QAAQ,CAACE,IAAI;QACnB,KAAK,cAAc;YACjB/C,QAAQ,CAACuB,KAAK,GAAGuB,YAAY,aAAZA,YAAY,cAAZA,YAAY,GAAID,QAAQ,CAACnC,IAAI,CAACa,KAAK,CAAC;YACrD,MAAM;QACR,KAAK,cAAc;YACjBvB,QAAQ,CAACwB,OAAO,GAAG,EAAE,CAAC;gBACLsB,GAA2C;YAA5D9C,QAAQ,CAACuB,KAAK,GAAGuB,CAAAA,GAA2C,GAA3CA,YAAY,aAAZA,YAAY,cAAZA,YAAY,GAAID,QAAQ,CAACnC,IAAI,CAACsC,aAAa,cAA3CF,GAA2C,cAA3CA,GAA2C,GAAI,IAAI,CAAC;YACrE,IAAI9C,QAAQ,CAACwB,OAAO,CAACyB,MAAM,GAAG,CAAC,IAAI,CAACjD,QAAQ,CAACuB,KAAK,EAAE;oBACzBvB,IAAmB;oBAAnBA,IAA0B;gBAAnD,MAAMkD,gBAAgB,GAAGlD,CAAAA,IAA0B,GAA1BA,CAAAA,IAAmB,GAAnBA,QAAQ,CAACwB,OAAO,CAAC,CAAC,CAAC,cAAnBxB,IAAmB,WAAO,GAA1BA,KAAAA,CAA0B,GAA1BA,IAAmB,CAAEuB,KAAK,cAA1BvB,IAA0B,cAA1BA,IAA0B,GAAI,IAAI,AAAC;gBAC5D,IAAIkD,gBAAgB,KAAK,IAAI,EAAE;oBAC7BlD,QAAQ,CAACuB,KAAK,GAAGsB,QAAQ,CAACnC,IAAI,CAACyC,cAAc,GAAG;wBAACD,gBAAgB;qBAAC,GAAGA,gBAAgB,CAAC;gBACxF,CAAC;YACH,CAAC;YACD,MAAM;QACR;YACE,MAAM;KACT;IACD,OAAOlD,QAAQ,CAAC;AAClB,CAAC;AAED,SAASiC,6BAA6B,CACpCC,WAAiC,EACjCkB,aAA4C,EAC1B;IAClB,MAAM7D,KAAK,GAAqB,EAAE,AAAC;IACnC2C,WAAW,CAACpC,OAAO,CAAC,CAACW,CAAC,GAAK;QACzB,MAAMV,IAAI,GAAGU,CAAC,CAACC,IAAI,CAACX,IAAI,AAAC;QACzB,MAAMsD,KAAK,GAAGD,aAAa,CAACrD,IAAI,CAAC,AAAC;QAClC,MAAM+C,YAAY,GAAGO,KAAK,GAAGA,KAAK,GAAG,IAAI,AAAC;QAC1C9D,KAAK,CAACQ,IAAI,CAAC,GAAG6C,4BAA4B,CAACnC,CAAC,EAAEqC,YAAY,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IACH,OAAOvD,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"sources":["../../../src/context/TemplateVariableProvider/TemplateVariableProvider.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { createContext, useContext, useMemo, useState } from 'react';\nimport { createStore, useStore } from 'zustand';\nimport { immer } from 'zustand/middleware/immer';\nimport { devtools } from 'zustand/middleware';\n\nimport {\n TemplateVariableContext,\n VariableStateMap,\n VariableState,\n VariableOption,\n DEFAULT_ALL_VALUE as ALL_VALUE,\n} from '@perses-dev/plugin-system';\nimport { VariableName, VariableValue, VariableDefinition } from '@perses-dev/core';\nimport { hydrateTemplateVariableStates } from './hydrationUtils';\nimport { useVariableQueryParams, getInitalValuesFromQueryParameters, getURLQueryParamName } from './query-params';\n\ntype TemplateVariableStore = {\n variableDefinitions: VariableDefinition[];\n variableState: VariableStateMap;\n setVariableValue: (variableName: VariableName, value: VariableValue) => void;\n setVariableOptions: (name: VariableName, options: VariableOption[]) => void;\n setVariableLoading: (name: VariableName, loading: boolean) => void;\n setVariableDefinitions: (definitions: VariableDefinition[]) => void;\n};\n\nconst TemplateVariableStoreContext = createContext<ReturnType<typeof createTemplateVariableSrvStore> | undefined>(\n undefined\n);\nfunction useTemplateVariableStoreCtx() {\n const context = useContext(TemplateVariableStoreContext);\n if (!context) {\n throw new Error('TemplateVariableStoreContext not initialized');\n }\n return context;\n}\n\nexport function useTemplateVariableValues(variableNames?: string[]) {\n const store = useTemplateVariableStoreCtx();\n const state = useStore(\n store,\n (s) => {\n const names = variableNames ?? Object.keys(s.variableState);\n const vars: VariableStateMap = {};\n names.forEach((name) => {\n const varState = s.variableState[name];\n if (!varState) {\n return;\n }\n vars[name] = varState;\n });\n return vars;\n },\n (left, right) => {\n return JSON.stringify(left) === JSON.stringify(right);\n }\n );\n return state;\n}\n\nexport function useTemplateVariable(name: string) {\n const store = useTemplateVariableStoreCtx();\n return useStore(store, (s) => {\n const variableState = s.variableState[name];\n const definition = s.variableDefinitions.find((v) => v.spec.name === name);\n return {\n state: variableState,\n definition,\n };\n });\n}\n\nexport function useTemplateVariableActions() {\n const store = useTemplateVariableStoreCtx();\n return useStore(store, (s) => {\n return {\n setVariableValue: s.setVariableValue,\n setVariableLoading: s.setVariableLoading,\n setVariableOptions: s.setVariableOptions,\n setVariableDefinitions: s.setVariableDefinitions,\n };\n });\n}\n\nexport function useTemplateVariableDefinitions() {\n const store = useTemplateVariableStoreCtx();\n return useStore(store, (s) => s.variableDefinitions);\n}\n\nexport function useTemplateVariableStore() {\n const store = useTemplateVariableStoreCtx();\n return useStore(store);\n}\n\nfunction PluginProvider({ children }: { children: React.ReactNode }) {\n const originalValues = useTemplateVariableValues();\n\n const values = useMemo(() => {\n const contextValues: VariableStateMap = {};\n\n // This will loop through all the current variables values\n // and update any variables that have ALL_VALUE as their current value\n // to include all options.\n Object.keys(originalValues).forEach((name) => {\n const v = { ...originalValues[name] } as VariableState;\n if (v.value === ALL_VALUE) {\n v.value = v.options?.map((o: { value: string }) => o.value) ?? null;\n }\n contextValues[name] = v;\n });\n return contextValues;\n }, [originalValues]);\n\n return <TemplateVariableContext.Provider value={{ state: values }}>{children}</TemplateVariableContext.Provider>;\n}\n\ninterface TemplateVariableSrvArgs {\n initialVariableDefinitions?: VariableDefinition[];\n queryParams?: ReturnType<typeof useVariableQueryParams>;\n}\n\nfunction createTemplateVariableSrvStore({ initialVariableDefinitions = [], queryParams }: TemplateVariableSrvArgs) {\n const initialParams = getInitalValuesFromQueryParameters(queryParams ? queryParams[0] : {});\n const store = createStore<TemplateVariableStore>()(\n devtools(\n immer((set) => ({\n variableState: hydrateTemplateVariableStates(initialVariableDefinitions, initialParams),\n variableDefinitions: initialVariableDefinitions,\n setVariableDefinitions(definitions: VariableDefinition[]) {\n set((state) => {\n state.variableDefinitions = definitions;\n state.variableState = hydrateTemplateVariableStates(definitions, initialParams);\n });\n },\n setVariableOptions(name, options) {\n set((state) => {\n const varState = state.variableState[name];\n if (!varState) {\n return;\n }\n varState.options = options;\n });\n },\n setVariableLoading(name, loading) {\n set((state) => {\n const varState = state.variableState[name];\n if (!varState) {\n return;\n }\n varState.loading = loading;\n });\n },\n\n setVariableValue: (name, value) =>\n set((state) => {\n let val = value;\n const varState = state.variableState[name];\n if (!varState) {\n return;\n }\n\n // Make sure there is only one all value\n if (Array.isArray(val) && val.includes(ALL_VALUE)) {\n if (val.at(-1) === ALL_VALUE) {\n val = ALL_VALUE;\n } else {\n val = val.filter((v) => v !== ALL_VALUE);\n }\n }\n if (queryParams) {\n const setQueryParams = queryParams[1];\n setQueryParams({ [getURLQueryParamName(name)]: val });\n }\n varState.value = val;\n }),\n }))\n )\n );\n\n return store;\n}\n\nexport interface TemplateVariableProviderProps {\n children: React.ReactNode;\n initialVariableDefinitions?: VariableDefinition[];\n}\n\nexport function TemplateVariableProvider({ children, initialVariableDefinitions = [] }: TemplateVariableProviderProps) {\n const queryParams = useVariableQueryParams(initialVariableDefinitions);\n const [store] = useState(createTemplateVariableSrvStore({ initialVariableDefinitions, queryParams }));\n\n return (\n <TemplateVariableStoreContext.Provider value={store}>\n <PluginProvider>{children}</PluginProvider>\n </TemplateVariableStoreContext.Provider>\n );\n}\n"],"names":["createContext","useContext","useMemo","useState","createStore","useStore","immer","devtools","TemplateVariableContext","DEFAULT_ALL_VALUE","ALL_VALUE","hydrateTemplateVariableStates","useVariableQueryParams","getInitalValuesFromQueryParameters","getURLQueryParamName","TemplateVariableStoreContext","undefined","useTemplateVariableStoreCtx","context","Error","useTemplateVariableValues","variableNames","store","state","s","names","Object","keys","variableState","vars","forEach","name","varState","left","right","JSON","stringify","useTemplateVariable","definition","variableDefinitions","find","v","spec","useTemplateVariableActions","setVariableValue","setVariableLoading","setVariableOptions","setVariableDefinitions","useTemplateVariableDefinitions","useTemplateVariableStore","PluginProvider","children","originalValues","values","contextValues","value","options","map","o","Provider","createTemplateVariableSrvStore","initialVariableDefinitions","queryParams","initialParams","set","definitions","loading","val","Array","isArray","includes","at","filter","setQueryParams","TemplateVariableProvider"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { VariableValue, VariableDefinition } from '@perses-dev/core';
2
+ import { VariableStateMap } from '@perses-dev/plugin-system';
3
+ export declare function hydrateTemplateVariableStates(definitions: VariableDefinition[], initialValues: Record<string, VariableValue>): VariableStateMap;
4
+ //# sourceMappingURL=hydrationUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hydrationUtils.d.ts","sourceRoot":"","sources":["../../../src/context/TemplateVariableProvider/hydrationUtils.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAoC,MAAM,2BAA2B,CAAC;AAqC/F,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,kBAAkB,EAAE,EACjC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAC3C,gBAAgB,CAUlB"}
@@ -0,0 +1,62 @@
1
+ // Copyright 2023 The Perses Authors
2
+ // Licensed under the Apache License, Version 2.0 (the "License");
3
+ // you may not use this file except in compliance with the License.
4
+ // You may obtain a copy of the License at
5
+ //
6
+ // http://www.apache.org/licenses/LICENSE-2.0
7
+ //
8
+ // Unless required by applicable law or agreed to in writing, software
9
+ // distributed under the License is distributed on an "AS IS" BASIS,
10
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ // See the License for the specific language governing permissions and
12
+ // limitations under the License.
13
+ import { DEFAULT_ALL_VALUE } from '@perses-dev/plugin-system';
14
+ function hydrateTemplateVariableState(variable, initialValue) {
15
+ const varState = {
16
+ value: null,
17
+ loading: false
18
+ };
19
+ switch(variable.kind){
20
+ case 'TextVariable':
21
+ varState.value = initialValue !== null && initialValue !== void 0 ? initialValue : variable.spec.value;
22
+ break;
23
+ case 'ListVariable':
24
+ varState.options = [];
25
+ var ref;
26
+ varState.value = (ref = initialValue !== null && initialValue !== void 0 ? initialValue : variable.spec.default_value) !== null && ref !== void 0 ? ref : null;
27
+ if (varState.options.length > 0 && !varState.value) {
28
+ var ref1;
29
+ var ref2;
30
+ const firstOptionValue = (ref2 = (ref1 = varState.options[0]) === null || ref1 === void 0 ? void 0 : ref1.value) !== null && ref2 !== void 0 ? ref2 : null;
31
+ if (firstOptionValue !== null) {
32
+ varState.value = variable.spec.allow_multiple ? [
33
+ firstOptionValue
34
+ ] : firstOptionValue;
35
+ }
36
+ }
37
+ // "all" variable handling assumes the value is not in an array. This is
38
+ // handled properly during internal variable interactions, but it is possible
39
+ // to end up in a buggy state if the variables are initialized with an "all"
40
+ // value inside an array. When hydrating variables, normalize this to minimize
41
+ // bugs.
42
+ if (Array.isArray(varState.value) && varState.value.length === 1 && varState.value[0] === DEFAULT_ALL_VALUE) {
43
+ varState.value = DEFAULT_ALL_VALUE;
44
+ }
45
+ break;
46
+ default:
47
+ break;
48
+ }
49
+ return varState;
50
+ }
51
+ export function hydrateTemplateVariableStates(definitions, initialValues) {
52
+ const state = {};
53
+ definitions.forEach((v)=>{
54
+ const name = v.spec.name;
55
+ const param = initialValues[name];
56
+ const initialValue = param ? param : null;
57
+ state[name] = hydrateTemplateVariableState(v, initialValue);
58
+ });
59
+ return state;
60
+ }
61
+
62
+ //# sourceMappingURL=hydrationUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/context/TemplateVariableProvider/hydrationUtils.ts"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { VariableValue, VariableDefinition } from '@perses-dev/core';\nimport { VariableStateMap, VariableState, DEFAULT_ALL_VALUE } from '@perses-dev/plugin-system';\n\nfunction hydrateTemplateVariableState(variable: VariableDefinition, initialValue?: VariableValue) {\n const varState: VariableState = {\n value: null,\n loading: false,\n };\n switch (variable.kind) {\n case 'TextVariable':\n varState.value = initialValue ?? variable.spec.value;\n break;\n case 'ListVariable':\n varState.options = [];\n varState.value = initialValue ?? variable.spec.default_value ?? null;\n\n if (varState.options.length > 0 && !varState.value) {\n const firstOptionValue = varState.options[0]?.value ?? null;\n if (firstOptionValue !== null) {\n varState.value = variable.spec.allow_multiple ? [firstOptionValue] : firstOptionValue;\n }\n }\n\n // \"all\" variable handling assumes the value is not in an array. This is\n // handled properly during internal variable interactions, but it is possible\n // to end up in a buggy state if the variables are initialized with an \"all\"\n // value inside an array. When hydrating variables, normalize this to minimize\n // bugs.\n if (Array.isArray(varState.value) && varState.value.length === 1 && varState.value[0] === DEFAULT_ALL_VALUE) {\n varState.value = DEFAULT_ALL_VALUE;\n }\n break;\n default:\n break;\n }\n return varState;\n}\n\nexport function hydrateTemplateVariableStates(\n definitions: VariableDefinition[],\n initialValues: Record<string, VariableValue>\n): VariableStateMap {\n const state: VariableStateMap = {};\n definitions.forEach((v) => {\n const name = v.spec.name;\n const param = initialValues[name];\n const initialValue = param ? param : null;\n state[name] = hydrateTemplateVariableState(v, initialValue);\n });\n\n return state;\n}\n"],"names":["DEFAULT_ALL_VALUE","hydrateTemplateVariableState","variable","initialValue","varState","value","loading","kind","spec","options","default_value","length","firstOptionValue","allow_multiple","Array","isArray","hydrateTemplateVariableStates","definitions","initialValues","state","forEach","v","name","param"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAGjC,SAA0CA,iBAAiB,QAAQ,2BAA2B,CAAC;AAE/F,SAASC,4BAA4B,CAACC,QAA4B,EAAEC,YAA4B,EAAE;IAChG,MAAMC,QAAQ,GAAkB;QAC9BC,KAAK,EAAE,IAAI;QACXC,OAAO,EAAE,KAAK;KACf,AAAC;IACF,OAAQJ,QAAQ,CAACK,IAAI;QACnB,KAAK,cAAc;YACjBH,QAAQ,CAACC,KAAK,GAAGF,YAAY,aAAZA,YAAY,cAAZA,YAAY,GAAID,QAAQ,CAACM,IAAI,CAACH,KAAK,CAAC;YACrD,MAAM;QACR,KAAK,cAAc;YACjBD,QAAQ,CAACK,OAAO,GAAG,EAAE,CAAC;gBACLN,GAA2C;YAA5DC,QAAQ,CAACC,KAAK,GAAGF,CAAAA,GAA2C,GAA3CA,YAAY,aAAZA,YAAY,cAAZA,YAAY,GAAID,QAAQ,CAACM,IAAI,CAACE,aAAa,cAA3CP,GAA2C,cAA3CA,GAA2C,GAAI,IAAI,CAAC;YAErE,IAAIC,QAAQ,CAACK,OAAO,CAACE,MAAM,GAAG,CAAC,IAAI,CAACP,QAAQ,CAACC,KAAK,EAAE;oBACzBD,IAAmB;oBAAnBA,IAA0B;gBAAnD,MAAMQ,gBAAgB,GAAGR,CAAAA,IAA0B,GAA1BA,CAAAA,IAAmB,GAAnBA,QAAQ,CAACK,OAAO,CAAC,CAAC,CAAC,cAAnBL,IAAmB,WAAO,GAA1BA,KAAAA,CAA0B,GAA1BA,IAAmB,CAAEC,KAAK,cAA1BD,IAA0B,cAA1BA,IAA0B,GAAI,IAAI,AAAC;gBAC5D,IAAIQ,gBAAgB,KAAK,IAAI,EAAE;oBAC7BR,QAAQ,CAACC,KAAK,GAAGH,QAAQ,CAACM,IAAI,CAACK,cAAc,GAAG;wBAACD,gBAAgB;qBAAC,GAAGA,gBAAgB,CAAC;gBACxF,CAAC;YACH,CAAC;YAED,wEAAwE;YACxE,6EAA6E;YAC7E,4EAA4E;YAC5E,8EAA8E;YAC9E,QAAQ;YACR,IAAIE,KAAK,CAACC,OAAO,CAACX,QAAQ,CAACC,KAAK,CAAC,IAAID,QAAQ,CAACC,KAAK,CAACM,MAAM,KAAK,CAAC,IAAIP,QAAQ,CAACC,KAAK,CAAC,CAAC,CAAC,KAAKL,iBAAiB,EAAE;gBAC3GI,QAAQ,CAACC,KAAK,GAAGL,iBAAiB,CAAC;YACrC,CAAC;YACD,MAAM;QACR;YACE,MAAM;KACT;IACD,OAAOI,QAAQ,CAAC;AAClB,CAAC;AAED,OAAO,SAASY,6BAA6B,CAC3CC,WAAiC,EACjCC,aAA4C,EAC1B;IAClB,MAAMC,KAAK,GAAqB,EAAE,AAAC;IACnCF,WAAW,CAACG,OAAO,CAAC,CAACC,CAAC,GAAK;QACzB,MAAMC,IAAI,GAAGD,CAAC,CAACb,IAAI,CAACc,IAAI,AAAC;QACzB,MAAMC,KAAK,GAAGL,aAAa,CAACI,IAAI,CAAC,AAAC;QAClC,MAAMnB,YAAY,GAAGoB,KAAK,GAAGA,KAAK,GAAG,IAAI,AAAC;QAC1CJ,KAAK,CAACG,IAAI,CAAC,GAAGrB,4BAA4B,CAACoB,CAAC,EAAElB,YAAY,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,OAAOgB,KAAK,CAAC;AACf,CAAC"}
@@ -12,34 +12,19 @@
12
12
  // limitations under the License.
13
13
  import { jsx as _jsx } from "react/jsx-runtime";
14
14
  import { DashboardProvider } from '@perses-dev/dashboards';
15
+ import { EMPTY_DASHBOARD_RESOURCE } from './constants';
15
16
  // Type guard because storybook types parameters as `any`
16
17
  function isWithDashboardParameter(parameter) {
17
18
  return !!parameter && typeof parameter === 'object' && 'props' in parameter;
18
19
  }
19
- export const DEFAULT_DASHBOARD_INITIAL_STATE = {
20
- dashboardResource: {
21
- kind: 'Dashboard',
22
- metadata: {
23
- name: 'My Dashboard',
24
- project: 'Storybook',
25
- created_at: '2021-11-09T00:00:00Z',
26
- updated_at: '2021-11-09T00:00:00Z',
27
- version: 0
28
- },
29
- spec: {
30
- duration: '1h',
31
- variables: [],
32
- layouts: [],
33
- panels: {}
34
- }
35
- }
36
- };
37
20
  export const WithDashboard = (Story, context)=>{
38
21
  const initParameter = context.parameters.withDashboard;
39
22
  const parameter = isWithDashboardParameter(initParameter) ? initParameter : undefined;
40
23
  const props = parameter === null || parameter === void 0 ? void 0 : parameter.props;
41
24
  return /*#__PURE__*/ _jsx(DashboardProvider, {
42
- initialState: DEFAULT_DASHBOARD_INITIAL_STATE,
25
+ initialState: {
26
+ dashboardResource: EMPTY_DASHBOARD_RESOURCE
27
+ },
43
28
  ...props,
44
29
  children: /*#__PURE__*/ _jsx(Story, {})
45
30
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/stories/decorators/WithDashboard.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { StoryFn, StoryContext } from '@storybook/react';\nimport { DashboardProvider, DashboardProviderProps, DashboardStoreProps } from '@perses-dev/dashboards';\n\nexport type WithDashboardParameter = {\n props: Partial<DashboardProviderProps>;\n};\n\n// Type guard because storybook types parameters as `any`\nfunction isWithDashboardParameter(parameter: unknown | WithDashboardParameter): parameter is WithDashboardParameter {\n return !!parameter && typeof parameter === 'object' && 'props' in parameter;\n}\n\nexport const DEFAULT_DASHBOARD_INITIAL_STATE: DashboardStoreProps = {\n dashboardResource: {\n kind: 'Dashboard',\n metadata: {\n name: 'My Dashboard',\n project: 'Storybook',\n created_at: '2021-11-09T00:00:00Z',\n updated_at: '2021-11-09T00:00:00Z',\n version: 0,\n },\n spec: {\n duration: '1h',\n variables: [],\n layouts: [],\n panels: {},\n },\n },\n};\n\nexport const WithDashboard = (Story: StoryFn, context: StoryContext<unknown>) => {\n const initParameter = context.parameters.withDashboard;\n const parameter = isWithDashboardParameter(initParameter) ? initParameter : undefined;\n const props = parameter?.props;\n\n return (\n <DashboardProvider initialState={DEFAULT_DASHBOARD_INITIAL_STATE} {...props}>\n <Story />\n </DashboardProvider>\n );\n};\n"],"names":["DashboardProvider","isWithDashboardParameter","parameter","DEFAULT_DASHBOARD_INITIAL_STATE","dashboardResource","kind","metadata","name","project","created_at","updated_at","version","spec","duration","variables","layouts","panels","WithDashboard","Story","context","initParameter","parameters","withDashboard","undefined","props","initialState"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC;AACA,SAASA,iBAAiB,QAAqD,wBAAwB,CAAC;AAMxG,yDAAyD;AACzD,SAASC,wBAAwB,CAACC,SAA2C,EAAuC;IAClH,OAAO,CAAC,CAACA,SAAS,IAAI,OAAOA,SAAS,KAAK,QAAQ,IAAI,OAAO,IAAIA,SAAS,CAAC;AAC9E,CAAC;AAED,OAAO,MAAMC,+BAA+B,GAAwB;IAClEC,iBAAiB,EAAE;QACjBC,IAAI,EAAE,WAAW;QACjBC,QAAQ,EAAE;YACRC,IAAI,EAAE,cAAc;YACpBC,OAAO,EAAE,WAAW;YACpBC,UAAU,EAAE,sBAAsB;YAClCC,UAAU,EAAE,sBAAsB;YAClCC,OAAO,EAAE,CAAC;SACX;QACDC,IAAI,EAAE;YACJC,QAAQ,EAAE,IAAI;YACdC,SAAS,EAAE,EAAE;YACbC,OAAO,EAAE,EAAE;YACXC,MAAM,EAAE,EAAE;SACX;KACF;CACF,CAAC;AAEF,OAAO,MAAMC,aAAa,GAAG,CAACC,KAAc,EAAEC,OAA8B,GAAK;IAC/E,MAAMC,aAAa,GAAGD,OAAO,CAACE,UAAU,CAACC,aAAa,AAAC;IACvD,MAAMpB,SAAS,GAAGD,wBAAwB,CAACmB,aAAa,CAAC,GAAGA,aAAa,GAAGG,SAAS,AAAC;IACtF,MAAMC,KAAK,GAAGtB,SAAS,aAATA,SAAS,WAAO,GAAhBA,KAAAA,CAAgB,GAAhBA,SAAS,CAAEsB,KAAK,AAAC;IAE/B,qBACE,KAACxB,iBAAiB;QAACyB,YAAY,EAAEtB,+BAA+B;QAAG,GAAGqB,KAAK;kBACzE,cAAA,KAACN,KAAK,KAAG;MACS,CACpB;AACJ,CAAC,CAAC"}
1
+ {"version":3,"sources":["../../../src/stories/decorators/WithDashboard.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { StoryFn, StoryContext } from '@storybook/react';\nimport { DashboardProvider, DashboardProviderProps } from '@perses-dev/dashboards';\nimport { EMPTY_DASHBOARD_RESOURCE } from './constants';\n\nexport type WithDashboardParameter = {\n props: Partial<DashboardProviderProps>;\n};\n\n// Type guard because storybook types parameters as `any`\nfunction isWithDashboardParameter(parameter: unknown | WithDashboardParameter): parameter is WithDashboardParameter {\n return !!parameter && typeof parameter === 'object' && 'props' in parameter;\n}\n\nexport const WithDashboard = (Story: StoryFn, context: StoryContext<unknown>) => {\n const initParameter = context.parameters.withDashboard;\n const parameter = isWithDashboardParameter(initParameter) ? initParameter : undefined;\n const props = parameter?.props;\n\n return (\n <DashboardProvider initialState={{ dashboardResource: EMPTY_DASHBOARD_RESOURCE }} {...props}>\n <Story />\n </DashboardProvider>\n );\n};\n"],"names":["DashboardProvider","EMPTY_DASHBOARD_RESOURCE","isWithDashboardParameter","parameter","WithDashboard","Story","context","initParameter","parameters","withDashboard","undefined","props","initialState","dashboardResource"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC;AACA,SAASA,iBAAiB,QAAgC,wBAAwB,CAAC;AACnF,SAASC,wBAAwB,QAAQ,aAAa,CAAC;AAMvD,yDAAyD;AACzD,SAASC,wBAAwB,CAACC,SAA2C,EAAuC;IAClH,OAAO,CAAC,CAACA,SAAS,IAAI,OAAOA,SAAS,KAAK,QAAQ,IAAI,OAAO,IAAIA,SAAS,CAAC;AAC9E,CAAC;AAED,OAAO,MAAMC,aAAa,GAAG,CAACC,KAAc,EAAEC,OAA8B,GAAK;IAC/E,MAAMC,aAAa,GAAGD,OAAO,CAACE,UAAU,CAACC,aAAa,AAAC;IACvD,MAAMN,SAAS,GAAGD,wBAAwB,CAACK,aAAa,CAAC,GAAGA,aAAa,GAAGG,SAAS,AAAC;IACtF,MAAMC,KAAK,GAAGR,SAAS,aAATA,SAAS,WAAO,GAAhBA,KAAAA,CAAgB,GAAhBA,SAAS,CAAEQ,KAAK,AAAC;IAE/B,qBACE,KAACX,iBAAiB;QAACY,YAAY,EAAE;YAAEC,iBAAiB,EAAEZ,wBAAwB;SAAE;QAAG,GAAGU,KAAK;kBACzF,cAAA,KAACN,KAAK,KAAG;MACS,CACpB;AACJ,CAAC,CAAC"}
@@ -0,0 +1,76 @@
1
+ // Copyright 2023 The Perses Authors
2
+ // Licensed under the Apache License, Version 2.0 (the "License");
3
+ // you may not use this file except in compliance with the License.
4
+ // You may obtain a copy of the License at
5
+ //
6
+ // http://www.apache.org/licenses/LICENSE-2.0
7
+ //
8
+ // Unless required by applicable law or agreed to in writing, software
9
+ // distributed under the License is distributed on an "AS IS" BASIS,
10
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ // See the License for the specific language governing permissions and
12
+ // limitations under the License.
13
+ import { jsx as _jsx } from "react/jsx-runtime";
14
+ import { DatasourceStoreProvider } from '@perses-dev/dashboards';
15
+ import { EMPTY_DASHBOARD_RESOURCE } from './constants';
16
+ // Type guard because storybook types parameters as `any`
17
+ function isWithDatasourceStoreParameter(parameter) {
18
+ return !!parameter && typeof parameter === 'object' && 'props' in parameter;
19
+ }
20
+ const prometheusDemoUrl = 'https://prometheus.demo.do.prometheus.io';
21
+ const prometheusDemo = {
22
+ kind: 'GlobalDatasource',
23
+ metadata: {
24
+ name: 'PrometheusDemo',
25
+ created_at: '0001-01-01T00:00:00Z',
26
+ updated_at: '0001-01-01T00:00:00Z',
27
+ version: 0
28
+ },
29
+ spec: {
30
+ default: true,
31
+ plugin: {
32
+ kind: 'PrometheusDatasource',
33
+ spec: {
34
+ direct_url: prometheusDemoUrl
35
+ }
36
+ }
37
+ }
38
+ };
39
+ export const WithDatasourceStore = (Story, context)=>{
40
+ const initParameter = context.parameters.withDatasourceStore;
41
+ const parameter = isWithDatasourceStoreParameter(initParameter) ? initParameter : undefined;
42
+ const props = parameter === null || parameter === void 0 ? void 0 : parameter.props;
43
+ // This default currently defines the bare minimum to get a story working in
44
+ // the `Dashboard` storybook with the Prometheus demo api. We'll likely want
45
+ // to expand it to do more in the future.
46
+ const defaultDatasourceProps = {
47
+ dashboardResource: EMPTY_DASHBOARD_RESOURCE,
48
+ datasourceApi: {
49
+ getDatasource: ()=>{
50
+ return Promise.resolve(undefined);
51
+ },
52
+ getGlobalDatasource: (selector)=>{
53
+ if (selector.kind === 'PrometheusDatasource') {
54
+ return Promise.resolve({
55
+ resource: prometheusDemo,
56
+ proxyUrl: prometheusDemoUrl
57
+ });
58
+ }
59
+ return Promise.resolve(undefined);
60
+ },
61
+ listDatasources: ()=>{
62
+ return Promise.resolve([]);
63
+ },
64
+ listGlobalDatasources: ()=>{
65
+ return Promise.resolve([]);
66
+ }
67
+ }
68
+ };
69
+ return /*#__PURE__*/ _jsx(DatasourceStoreProvider, {
70
+ ...defaultDatasourceProps,
71
+ ...props,
72
+ children: /*#__PURE__*/ _jsx(Story, {})
73
+ });
74
+ };
75
+
76
+ //# sourceMappingURL=WithDatasourceStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/stories/decorators/WithDatasourceStore.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { StoryFn, StoryContext } from '@storybook/react';\nimport { DatasourceStoreProvider, DatasourceStoreProviderProps } from '@perses-dev/dashboards';\nimport { GlobalDatasource } from '@perses-dev/core';\nimport { EMPTY_DASHBOARD_RESOURCE } from './constants';\n\nexport type WithDatasourceStoreParameter = {\n props: Partial<DatasourceStoreProviderProps>;\n};\n\n// Type guard because storybook types parameters as `any`\nfunction isWithDatasourceStoreParameter(\n parameter: unknown | WithDatasourceStoreParameter\n): parameter is WithDatasourceStoreParameter {\n return !!parameter && typeof parameter === 'object' && 'props' in parameter;\n}\n\nconst prometheusDemoUrl = 'https://prometheus.demo.do.prometheus.io';\nconst prometheusDemo: GlobalDatasource = {\n kind: 'GlobalDatasource',\n metadata: {\n name: 'PrometheusDemo',\n created_at: '0001-01-01T00:00:00Z',\n updated_at: '0001-01-01T00:00:00Z',\n version: 0,\n },\n spec: {\n default: true,\n plugin: {\n kind: 'PrometheusDatasource',\n spec: { direct_url: prometheusDemoUrl },\n },\n },\n} as const;\n\nexport const WithDatasourceStore = (Story: StoryFn, context: StoryContext<unknown>) => {\n const initParameter = context.parameters.withDatasourceStore;\n const parameter = isWithDatasourceStoreParameter(initParameter) ? initParameter : undefined;\n const props = parameter?.props;\n\n // This default currently defines the bare minimum to get a story working in\n // the `Dashboard` storybook with the Prometheus demo api. We'll likely want\n // to expand it to do more in the future.\n const defaultDatasourceProps: Pick<DatasourceStoreProviderProps, 'datasourceApi' | 'dashboardResource'> = {\n dashboardResource: EMPTY_DASHBOARD_RESOURCE,\n datasourceApi: {\n getDatasource: () => {\n return Promise.resolve(undefined);\n },\n getGlobalDatasource: (selector) => {\n if (selector.kind === 'PrometheusDatasource') {\n return Promise.resolve({ resource: prometheusDemo, proxyUrl: prometheusDemoUrl });\n }\n\n return Promise.resolve(undefined);\n },\n listDatasources: () => {\n return Promise.resolve([]);\n },\n listGlobalDatasources: () => {\n return Promise.resolve([]);\n },\n },\n };\n\n return (\n <DatasourceStoreProvider {...defaultDatasourceProps} {...props}>\n <Story />\n </DatasourceStoreProvider>\n );\n};\n"],"names":["DatasourceStoreProvider","EMPTY_DASHBOARD_RESOURCE","isWithDatasourceStoreParameter","parameter","prometheusDemoUrl","prometheusDemo","kind","metadata","name","created_at","updated_at","version","spec","default","plugin","direct_url","WithDatasourceStore","Story","context","initParameter","parameters","withDatasourceStore","undefined","props","defaultDatasourceProps","dashboardResource","datasourceApi","getDatasource","Promise","resolve","getGlobalDatasource","selector","resource","proxyUrl","listDatasources","listGlobalDatasources"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC;AACA,SAASA,uBAAuB,QAAsC,wBAAwB,CAAC;AAE/F,SAASC,wBAAwB,QAAQ,aAAa,CAAC;AAMvD,yDAAyD;AACzD,SAASC,8BAA8B,CACrCC,SAAiD,EACN;IAC3C,OAAO,CAAC,CAACA,SAAS,IAAI,OAAOA,SAAS,KAAK,QAAQ,IAAI,OAAO,IAAIA,SAAS,CAAC;AAC9E,CAAC;AAED,MAAMC,iBAAiB,GAAG,0CAA0C,AAAC;AACrE,MAAMC,cAAc,GAAqB;IACvCC,IAAI,EAAE,kBAAkB;IACxBC,QAAQ,EAAE;QACRC,IAAI,EAAE,gBAAgB;QACtBC,UAAU,EAAE,sBAAsB;QAClCC,UAAU,EAAE,sBAAsB;QAClCC,OAAO,EAAE,CAAC;KACX;IACDC,IAAI,EAAE;QACJC,OAAO,EAAE,IAAI;QACbC,MAAM,EAAE;YACNR,IAAI,EAAE,sBAAsB;YAC5BM,IAAI,EAAE;gBAAEG,UAAU,EAAEX,iBAAiB;aAAE;SACxC;KACF;CACF,AAAS,AAAC;AAEX,OAAO,MAAMY,mBAAmB,GAAG,CAACC,KAAc,EAAEC,OAA8B,GAAK;IACrF,MAAMC,aAAa,GAAGD,OAAO,CAACE,UAAU,CAACC,mBAAmB,AAAC;IAC7D,MAAMlB,SAAS,GAAGD,8BAA8B,CAACiB,aAAa,CAAC,GAAGA,aAAa,GAAGG,SAAS,AAAC;IAC5F,MAAMC,KAAK,GAAGpB,SAAS,aAATA,SAAS,WAAO,GAAhBA,KAAAA,CAAgB,GAAhBA,SAAS,CAAEoB,KAAK,AAAC;IAE/B,4EAA4E;IAC5E,4EAA4E;IAC5E,yCAAyC;IACzC,MAAMC,sBAAsB,GAA8E;QACxGC,iBAAiB,EAAExB,wBAAwB;QAC3CyB,aAAa,EAAE;YACbC,aAAa,EAAE,IAAM;gBACnB,OAAOC,OAAO,CAACC,OAAO,CAACP,SAAS,CAAC,CAAC;YACpC,CAAC;YACDQ,mBAAmB,EAAE,CAACC,QAAQ,GAAK;gBACjC,IAAIA,QAAQ,CAACzB,IAAI,KAAK,sBAAsB,EAAE;oBAC5C,OAAOsB,OAAO,CAACC,OAAO,CAAC;wBAAEG,QAAQ,EAAE3B,cAAc;wBAAE4B,QAAQ,EAAE7B,iBAAiB;qBAAE,CAAC,CAAC;gBACpF,CAAC;gBAED,OAAOwB,OAAO,CAACC,OAAO,CAACP,SAAS,CAAC,CAAC;YACpC,CAAC;YACDY,eAAe,EAAE,IAAM;gBACrB,OAAON,OAAO,CAACC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC7B,CAAC;YACDM,qBAAqB,EAAE,IAAM;gBAC3B,OAAOP,OAAO,CAACC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC7B,CAAC;SACF;KACF,AAAC;IAEF,qBACE,KAAC7B,uBAAuB;QAAE,GAAGwB,sBAAsB;QAAG,GAAGD,KAAK;kBAC5D,cAAA,KAACN,KAAK,KAAG;MACe,CAC1B;AACJ,CAAC,CAAC"}
@@ -12,8 +12,16 @@
12
12
  // limitations under the License.
13
13
  import { jsx as _jsx } from "react/jsx-runtime";
14
14
  import { TemplateVariableProvider } from '@perses-dev/dashboards';
15
- export const WithTemplateVariables = (Story)=>{
15
+ // Type guard because storybook types parameters as `any`
16
+ function isWithTemplateVariableParameter(parameter) {
17
+ return !!parameter && typeof parameter === 'object' && 'props' in parameter;
18
+ }
19
+ export const WithTemplateVariables = (Story, context)=>{
20
+ const initParameter = context.parameters.withTemplateVariables;
21
+ const parameter = isWithTemplateVariableParameter(initParameter) ? initParameter : undefined;
22
+ const props = parameter === null || parameter === void 0 ? void 0 : parameter.props;
16
23
  return /*#__PURE__*/ _jsx(TemplateVariableProvider, {
24
+ ...props,
17
25
  children: /*#__PURE__*/ _jsx(Story, {})
18
26
  });
19
27
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/stories/decorators/WithTemplateVariables.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { StoryFn } from '@storybook/react';\nimport { TemplateVariableProvider } from '@perses-dev/dashboards';\n\nexport const WithTemplateVariables = (Story: StoryFn) => {\n return (\n <TemplateVariableProvider>\n <Story />\n </TemplateVariableProvider>\n );\n};\n"],"names":["TemplateVariableProvider","WithTemplateVariables","Story"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC;AACA,SAASA,wBAAwB,QAAQ,wBAAwB,CAAC;AAElE,OAAO,MAAMC,qBAAqB,GAAG,CAACC,KAAc,GAAK;IACvD,qBACE,KAACF,wBAAwB;kBACvB,cAAA,KAACE,KAAK,KAAG;MACgB,CAC3B;AACJ,CAAC,CAAC"}
1
+ {"version":3,"sources":["../../../src/stories/decorators/WithTemplateVariables.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { StoryFn, StoryContext } from '@storybook/react';\nimport { TemplateVariableProvider, TemplateVariableProviderProps } from '@perses-dev/dashboards';\n\nexport type WithTemplateVariableParameter = {\n props: Partial<TemplateVariableProviderProps>;\n};\n\n// Type guard because storybook types parameters as `any`\nfunction isWithTemplateVariableParameter(\n parameter: unknown | WithTemplateVariableParameter\n): parameter is WithTemplateVariableParameter {\n return !!parameter && typeof parameter === 'object' && 'props' in parameter;\n}\n\nexport const WithTemplateVariables = (Story: StoryFn, context: StoryContext<unknown>) => {\n const initParameter = context.parameters.withTemplateVariables;\n const parameter = isWithTemplateVariableParameter(initParameter) ? initParameter : undefined;\n const props = parameter?.props;\n\n return (\n <TemplateVariableProvider {...props}>\n <Story />\n </TemplateVariableProvider>\n );\n};\n"],"names":["TemplateVariableProvider","isWithTemplateVariableParameter","parameter","WithTemplateVariables","Story","context","initParameter","parameters","withTemplateVariables","undefined","props"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC;AACA,SAASA,wBAAwB,QAAuC,wBAAwB,CAAC;AAMjG,yDAAyD;AACzD,SAASC,+BAA+B,CACtCC,SAAkD,EACN;IAC5C,OAAO,CAAC,CAACA,SAAS,IAAI,OAAOA,SAAS,KAAK,QAAQ,IAAI,OAAO,IAAIA,SAAS,CAAC;AAC9E,CAAC;AAED,OAAO,MAAMC,qBAAqB,GAAG,CAACC,KAAc,EAAEC,OAA8B,GAAK;IACvF,MAAMC,aAAa,GAAGD,OAAO,CAACE,UAAU,CAACC,qBAAqB,AAAC;IAC/D,MAAMN,SAAS,GAAGD,+BAA+B,CAACK,aAAa,CAAC,GAAGA,aAAa,GAAGG,SAAS,AAAC;IAC7F,MAAMC,KAAK,GAAGR,SAAS,aAATA,SAAS,WAAO,GAAhBA,KAAAA,CAAgB,GAAhBA,SAAS,CAAEQ,KAAK,AAAC;IAE/B,qBACE,KAACV,wBAAwB;QAAE,GAAGU,KAAK;kBACjC,cAAA,KAACN,KAAK,KAAG;MACgB,CAC3B;AACJ,CAAC,CAAC"}
@@ -0,0 +1,32 @@
1
+ // Copyright 2023 The Perses Authors
2
+ // Licensed under the Apache License, Version 2.0 (the "License");
3
+ // you may not use this file except in compliance with the License.
4
+ // You may obtain a copy of the License at
5
+ //
6
+ // http://www.apache.org/licenses/LICENSE-2.0
7
+ //
8
+ // Unless required by applicable law or agreed to in writing, software
9
+ // distributed under the License is distributed on an "AS IS" BASIS,
10
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ // See the License for the specific language governing permissions and
12
+ // limitations under the License.
13
+ import { jsx as _jsx } from "react/jsx-runtime";
14
+ import { TimeRangeProvider } from '@perses-dev/plugin-system';
15
+ // Type guard because storybook types parameters as `any`
16
+ function isWithTimeRangeParameter(parameter) {
17
+ return !!parameter && typeof parameter === 'object' && 'props' in parameter;
18
+ }
19
+ export const WithTimeRange = (Story, context)=>{
20
+ const initParameter = context.parameters.withTimeRange;
21
+ const parameter = isWithTimeRangeParameter(initParameter) ? initParameter : undefined;
22
+ const props = parameter === null || parameter === void 0 ? void 0 : parameter.props;
23
+ return /*#__PURE__*/ _jsx(TimeRangeProvider, {
24
+ initialTimeRange: {
25
+ pastDuration: '1h'
26
+ },
27
+ ...props,
28
+ children: /*#__PURE__*/ _jsx(Story, {})
29
+ });
30
+ };
31
+
32
+ //# sourceMappingURL=WithTimeRange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/stories/decorators/WithTimeRange.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { StoryFn, StoryContext } from '@storybook/react';\nimport { TimeRangeProvider, TimeRangeProviderProps } from '@perses-dev/plugin-system';\n\nexport type WithTimeRangeParameter = {\n props: Partial<TimeRangeProviderProps>;\n};\n\n// Type guard because storybook types parameters as `any`\nfunction isWithTimeRangeParameter(parameter: unknown | WithTimeRangeParameter): parameter is WithTimeRangeParameter {\n return !!parameter && typeof parameter === 'object' && 'props' in parameter;\n}\n\nexport const WithTimeRange = (Story: StoryFn, context: StoryContext<unknown>) => {\n const initParameter = context.parameters.withTimeRange;\n const parameter = isWithTimeRangeParameter(initParameter) ? initParameter : undefined;\n const props = parameter?.props;\n\n return (\n <TimeRangeProvider initialTimeRange={{ pastDuration: '1h' }} {...props}>\n <Story />\n </TimeRangeProvider>\n );\n};\n"],"names":["TimeRangeProvider","isWithTimeRangeParameter","parameter","WithTimeRange","Story","context","initParameter","parameters","withTimeRange","undefined","props","initialTimeRange","pastDuration"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC;AACA,SAASA,iBAAiB,QAAgC,2BAA2B,CAAC;AAMtF,yDAAyD;AACzD,SAASC,wBAAwB,CAACC,SAA2C,EAAuC;IAClH,OAAO,CAAC,CAACA,SAAS,IAAI,OAAOA,SAAS,KAAK,QAAQ,IAAI,OAAO,IAAIA,SAAS,CAAC;AAC9E,CAAC;AAED,OAAO,MAAMC,aAAa,GAAG,CAACC,KAAc,EAAEC,OAA8B,GAAK;IAC/E,MAAMC,aAAa,GAAGD,OAAO,CAACE,UAAU,CAACC,aAAa,AAAC;IACvD,MAAMN,SAAS,GAAGD,wBAAwB,CAACK,aAAa,CAAC,GAAGA,aAAa,GAAGG,SAAS,AAAC;IACtF,MAAMC,KAAK,GAAGR,SAAS,aAATA,SAAS,WAAO,GAAhBA,KAAAA,CAAgB,GAAhBA,SAAS,CAAEQ,KAAK,AAAC;IAE/B,qBACE,KAACV,iBAAiB;QAACW,gBAAgB,EAAE;YAAEC,YAAY,EAAE,IAAI;SAAE;QAAG,GAAGF,KAAK;kBACpE,cAAA,KAACN,KAAK,KAAG;MACS,CACpB;AACJ,CAAC,CAAC"}
@@ -0,0 +1,30 @@
1
+ // Copyright 2023 The Perses Authors
2
+ // Licensed under the Apache License, Version 2.0 (the "License");
3
+ // you may not use this file except in compliance with the License.
4
+ // You may obtain a copy of the License at
5
+ //
6
+ // http://www.apache.org/licenses/LICENSE-2.0
7
+ //
8
+ // Unless required by applicable law or agreed to in writing, software
9
+ // distributed under the License is distributed on an "AS IS" BASIS,
10
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ // See the License for the specific language governing permissions and
12
+ // limitations under the License.
13
+ export const EMPTY_DASHBOARD_RESOURCE = {
14
+ kind: 'Dashboard',
15
+ metadata: {
16
+ name: 'My Dashboard',
17
+ project: 'Storybook',
18
+ created_at: '2021-11-09T00:00:00Z',
19
+ updated_at: '2021-11-09T00:00:00Z',
20
+ version: 0
21
+ },
22
+ spec: {
23
+ duration: '1h',
24
+ variables: [],
25
+ layouts: [],
26
+ panels: {}
27
+ }
28
+ };
29
+
30
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/stories/decorators/constants.ts"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { DashboardResource } from '@perses-dev/core';\n\nexport const EMPTY_DASHBOARD_RESOURCE: DashboardResource = {\n kind: 'Dashboard',\n metadata: {\n name: 'My Dashboard',\n project: 'Storybook',\n created_at: '2021-11-09T00:00:00Z',\n updated_at: '2021-11-09T00:00:00Z',\n version: 0,\n },\n spec: {\n duration: '1h',\n variables: [],\n layouts: [],\n panels: {},\n },\n};\n"],"names":["EMPTY_DASHBOARD_RESOURCE","kind","metadata","name","project","created_at","updated_at","version","spec","duration","variables","layouts","panels"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAIjC,OAAO,MAAMA,wBAAwB,GAAsB;IACzDC,IAAI,EAAE,WAAW;IACjBC,QAAQ,EAAE;QACRC,IAAI,EAAE,cAAc;QACpBC,OAAO,EAAE,WAAW;QACpBC,UAAU,EAAE,sBAAsB;QAClCC,UAAU,EAAE,sBAAsB;QAClCC,OAAO,EAAE,CAAC;KACX;IACDC,IAAI,EAAE;QACJC,QAAQ,EAAE,IAAI;QACdC,SAAS,EAAE,EAAE;QACbC,OAAO,EAAE,EAAE;QACXC,MAAM,EAAE,EAAE;KACX;CACF,CAAC"}
@@ -10,10 +10,13 @@
10
10
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
11
  // See the License for the specific language governing permissions and
12
12
  // limitations under the License.
13
+ export * from './constants';
13
14
  export * from './WithDashboard';
15
+ export * from './WithDatasourceStore';
14
16
  export * from './WithPluginRegistry';
15
17
  export * from './WithQueryClient';
16
18
  export * from './WithQueryParams';
17
19
  export * from './WithTemplateVariables';
20
+ export * from './WithTimeRange';
18
21
 
19
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/stories/decorators/index.ts"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nexport * from './WithDashboard';\nexport * from './WithPluginRegistry';\nexport * from './WithQueryClient';\nexport * from './WithQueryParams';\nexport * from './WithTemplateVariables';\n"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"sources":["../../../src/stories/decorators/index.ts"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nexport * from './constants';\nexport * from './WithDashboard';\nexport * from './WithDatasourceStore';\nexport * from './WithPluginRegistry';\nexport * from './WithQueryClient';\nexport * from './WithQueryParams';\nexport * from './WithTemplateVariables';\nexport * from './WithTimeRange';\n"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC"}