@perses-dev/dashboards 0.37.2 → 0.39.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 (118) hide show
  1. package/dist/cjs/components/Dashboard/Dashboard.js +3 -2
  2. package/dist/cjs/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.js +12 -52
  3. package/dist/cjs/components/GridLayout/GridItemContent.js +3 -1
  4. package/dist/cjs/components/GridLayout/GridLayout.js +1 -0
  5. package/dist/cjs/components/Panel/Panel.js +8 -3
  6. package/dist/cjs/components/Panel/PanelHeader.js +7 -3
  7. package/dist/cjs/components/SaveDashboardButton/SaveDashboardButton.js +3 -1
  8. package/dist/cjs/components/Variables/EditVariablesButton.js +2 -0
  9. package/dist/cjs/components/Variables/TemplateVariable.js +22 -18
  10. package/dist/cjs/components/Variables/VariableEditor.js +271 -99
  11. package/dist/cjs/components/Variables/VariableList.js +38 -18
  12. package/dist/cjs/components/Variables/index.js +0 -2
  13. package/dist/cjs/context/DatasourceStoreProvider.js +22 -18
  14. package/dist/cjs/context/TemplateVariableProvider/TemplateVariableProvider.js +71 -24
  15. package/dist/cjs/context/TemplateVariableProvider/hydrationUtils.js +55 -5
  16. package/dist/cjs/context/TemplateVariableProvider/utils.js +39 -7
  17. package/dist/cjs/test/render.js +1 -1
  18. package/dist/cjs/views/ViewDashboard/DashboardApp.js +7 -2
  19. package/dist/cjs/views/ViewDashboard/ViewDashboard.js +4 -3
  20. package/dist/components/Dashboard/Dashboard.d.ts +3 -1
  21. package/dist/components/Dashboard/Dashboard.d.ts.map +1 -1
  22. package/dist/components/Dashboard/Dashboard.js +3 -2
  23. package/dist/components/Dashboard/Dashboard.js.map +1 -1
  24. package/dist/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.d.ts +1 -1
  25. package/dist/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.d.ts.map +1 -1
  26. package/dist/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.js +11 -46
  27. package/dist/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.js.map +1 -1
  28. package/dist/components/GridLayout/GridItemContent.d.ts +2 -0
  29. package/dist/components/GridLayout/GridItemContent.d.ts.map +1 -1
  30. package/dist/components/GridLayout/GridItemContent.js +3 -1
  31. package/dist/components/GridLayout/GridItemContent.js.map +1 -1
  32. package/dist/components/GridLayout/GridLayout.d.ts +2 -0
  33. package/dist/components/GridLayout/GridLayout.d.ts.map +1 -1
  34. package/dist/components/GridLayout/GridLayout.js +1 -0
  35. package/dist/components/GridLayout/GridLayout.js.map +1 -1
  36. package/dist/components/Panel/Panel.d.ts +20 -0
  37. package/dist/components/Panel/Panel.d.ts.map +1 -1
  38. package/dist/components/Panel/Panel.js +8 -3
  39. package/dist/components/Panel/Panel.js.map +1 -1
  40. package/dist/components/Panel/PanelHeader.d.ts +2 -1
  41. package/dist/components/Panel/PanelHeader.d.ts.map +1 -1
  42. package/dist/components/Panel/PanelHeader.js +7 -3
  43. package/dist/components/Panel/PanelHeader.js.map +1 -1
  44. package/dist/components/PanelDrawer/PanelPreview.d.ts.map +1 -1
  45. package/dist/components/PanelDrawer/PanelPreview.js.map +1 -1
  46. package/dist/components/SaveDashboardButton/SaveDashboardButton.d.ts.map +1 -1
  47. package/dist/components/SaveDashboardButton/SaveDashboardButton.js +3 -1
  48. package/dist/components/SaveDashboardButton/SaveDashboardButton.js.map +1 -1
  49. package/dist/components/Variables/EditVariablesButton.d.ts.map +1 -1
  50. package/dist/components/Variables/EditVariablesButton.js +3 -1
  51. package/dist/components/Variables/EditVariablesButton.js.map +1 -1
  52. package/dist/components/Variables/TemplateVariable.d.ts +2 -1
  53. package/dist/components/Variables/TemplateVariable.d.ts.map +1 -1
  54. package/dist/components/Variables/TemplateVariable.js +21 -17
  55. package/dist/components/Variables/TemplateVariable.js.map +1 -1
  56. package/dist/components/Variables/VariableEditor.d.ts +7 -0
  57. package/dist/components/Variables/VariableEditor.d.ts.map +1 -1
  58. package/dist/components/Variables/VariableEditor.js +261 -95
  59. package/dist/components/Variables/VariableEditor.js.map +1 -1
  60. package/dist/components/Variables/VariableList.d.ts +5 -0
  61. package/dist/components/Variables/VariableList.d.ts.map +1 -1
  62. package/dist/components/Variables/VariableList.js +31 -17
  63. package/dist/components/Variables/VariableList.js.map +1 -1
  64. package/dist/components/Variables/index.d.ts +0 -2
  65. package/dist/components/Variables/index.d.ts.map +1 -1
  66. package/dist/components/Variables/index.js +0 -2
  67. package/dist/components/Variables/index.js.map +1 -1
  68. package/dist/context/DatasourceStoreProvider.d.ts +4 -3
  69. package/dist/context/DatasourceStoreProvider.d.ts.map +1 -1
  70. package/dist/context/DatasourceStoreProvider.js +22 -18
  71. package/dist/context/DatasourceStoreProvider.js.map +1 -1
  72. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.d.ts +39 -10
  73. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.d.ts.map +1 -1
  74. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.js +76 -27
  75. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.js.map +1 -1
  76. package/dist/context/TemplateVariableProvider/hydrationUtils.d.ts +9 -2
  77. package/dist/context/TemplateVariableProvider/hydrationUtils.d.ts.map +1 -1
  78. package/dist/context/TemplateVariableProvider/hydrationUtils.js +60 -5
  79. package/dist/context/TemplateVariableProvider/hydrationUtils.js.map +1 -1
  80. package/dist/context/TemplateVariableProvider/utils.d.ts +27 -2
  81. package/dist/context/TemplateVariableProvider/utils.d.ts.map +1 -1
  82. package/dist/context/TemplateVariableProvider/utils.js +46 -4
  83. package/dist/context/TemplateVariableProvider/utils.js.map +1 -1
  84. package/dist/test/render.js +2 -2
  85. package/dist/test/render.js.map +1 -1
  86. package/dist/views/ViewDashboard/DashboardApp.d.ts.map +1 -1
  87. package/dist/views/ViewDashboard/DashboardApp.js +9 -4
  88. package/dist/views/ViewDashboard/DashboardApp.js.map +1 -1
  89. package/dist/views/ViewDashboard/ViewDashboard.d.ts +2 -1
  90. package/dist/views/ViewDashboard/ViewDashboard.d.ts.map +1 -1
  91. package/dist/views/ViewDashboard/ViewDashboard.js +4 -3
  92. package/dist/views/ViewDashboard/ViewDashboard.js.map +1 -1
  93. package/package.json +6 -6
  94. package/dist/cjs/components/Variables/VariableEditorForm/VariableEditorForm.js +0 -399
  95. package/dist/cjs/components/Variables/VariableEditorForm/VariablePreview.js +0 -178
  96. package/dist/cjs/components/Variables/VariableEditorForm/index.js +0 -29
  97. package/dist/cjs/components/Variables/VariableEditorForm/variable-editor-form-model.js +0 -91
  98. package/dist/cjs/components/Variables/variable-model.js +0 -117
  99. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.d.ts +0 -10
  100. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.d.ts.map +0 -1
  101. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.js +0 -354
  102. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.js.map +0 -1
  103. package/dist/components/Variables/VariableEditorForm/VariablePreview.d.ts +0 -16
  104. package/dist/components/Variables/VariableEditorForm/VariablePreview.d.ts.map +0 -1
  105. package/dist/components/Variables/VariableEditorForm/VariablePreview.js +0 -122
  106. package/dist/components/Variables/VariableEditorForm/VariablePreview.js.map +0 -1
  107. package/dist/components/Variables/VariableEditorForm/index.d.ts +0 -3
  108. package/dist/components/Variables/VariableEditorForm/index.d.ts.map +0 -1
  109. package/dist/components/Variables/VariableEditorForm/index.js +0 -16
  110. package/dist/components/Variables/VariableEditorForm/index.js.map +0 -1
  111. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.d.ts +0 -23
  112. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.d.ts.map +0 -1
  113. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.js +0 -79
  114. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.js.map +0 -1
  115. package/dist/components/Variables/variable-model.d.ts +0 -16
  116. package/dist/components/Variables/variable-model.d.ts.map +0 -1
  117. package/dist/components/Variables/variable-model.js +0 -105
  118. package/dist/components/Variables/variable-model.js.map +0 -1
@@ -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';\nimport produce from 'immer';\nimport { TemplateVariableContext, VariableStateMap, VariableState, VariableOption } from '@perses-dev/plugin-system';\nimport { DEFAULT_ALL_VALUE as ALL_VALUE, VariableName, VariableValue, VariableDefinition } from '@perses-dev/core';\nimport { checkSavedDefaultVariableStatus } from './utils';\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 setVariableDefaultValues: () => VariableDefinition[];\n getSavedVariablesStatus: () => { isSavedVariableModified: boolean; modifiedVariableNames: string[] };\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 setVariableDefaultValues: s.setVariableDefaultValues,\n getSavedVariablesStatus: s.getSavedVariablesStatus,\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 const definitions = useTemplateVariableDefinitions();\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\n if (v.value === ALL_VALUE) {\n const definition = definitions.find((d) => d.spec.name === name);\n // If the variable is a list variable and has a custom all value, then use that value instead\n if (definition?.kind === 'ListVariable' && definition.spec.custom_all_value) {\n v.value = definition.spec.custom_all_value;\n } else {\n v.value = v.options?.map((o: { value: string }) => o.value) ?? null;\n }\n }\n contextValues[name] = v;\n });\n return contextValues;\n }, [originalValues, definitions]);\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, get) => ({\n variableState: hydrateTemplateVariableStates(initialVariableDefinitions, initialParams),\n variableDefinitions: initialVariableDefinitions,\n setVariableDefinitions(definitions: VariableDefinition[]) {\n set(\n (state) => {\n state.variableDefinitions = definitions;\n state.variableState = hydrateTemplateVariableStates(definitions, initialParams);\n },\n false,\n '[Variables] setVariableDefinitions' // Used for action name in Redux devtools\n );\n },\n setVariableOptions(name, options) {\n set(\n (state) => {\n const varState = state.variableState[name];\n if (!varState) {\n return;\n }\n varState.options = options;\n },\n false,\n '[Variables] setVariableOptions'\n );\n },\n setVariableLoading(name, loading) {\n set(\n (state) => {\n const varState = state.variableState[name];\n if (!varState) {\n return;\n }\n varState.loading = loading;\n },\n false,\n '[Variables] setVariableLoading'\n );\n },\n setVariableValue: (name, value) =>\n set(\n (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 false,\n '[Variables] setVariableValue'\n ),\n setVariableDefaultValues: () => {\n const variableDefinitions = get().variableDefinitions;\n const variableState = get().variableState;\n const updatedVariables = produce(variableDefinitions, (draft) => {\n draft.forEach((variable, index) => {\n if (variable.kind === 'ListVariable') {\n const currentVariable = variableState[variable.spec.name];\n if (currentVariable?.value !== undefined) {\n draft[index] = {\n kind: 'ListVariable',\n spec: produce(variable.spec, (specDraft) => {\n specDraft.default_value = currentVariable.value;\n }),\n };\n }\n } else if (variable.kind === 'TextVariable') {\n const currentVariable = variableState[variable.spec.name];\n const currentVariableValue = typeof currentVariable?.value === 'string' ? currentVariable.value : '';\n if (currentVariable?.value !== undefined) {\n draft[index] = {\n kind: 'TextVariable',\n spec: produce(variable.spec, (specDraft) => {\n specDraft.value = currentVariableValue;\n }),\n };\n }\n }\n });\n });\n set(\n (state) => {\n state.variableDefinitions = updatedVariables;\n },\n false,\n '[Variables] setVariableDefaultValues'\n );\n return updatedVariables;\n },\n getSavedVariablesStatus: () => {\n return checkSavedDefaultVariableStatus(get().variableDefinitions, get().variableState);\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","produce","TemplateVariableContext","DEFAULT_ALL_VALUE","ALL_VALUE","checkSavedDefaultVariableStatus","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","setVariableDefaultValues","getSavedVariablesStatus","useTemplateVariableDefinitions","useTemplateVariableStore","PluginProvider","children","originalValues","definitions","values","contextValues","value","d","kind","custom_all_value","options","map","o","Provider","createTemplateVariableSrvStore","initialVariableDefinitions","queryParams","initialParams","set","get","loading","val","Array","isArray","includes","at","filter","setQueryParams","updatedVariables","draft","variable","index","currentVariable","specDraft","default_value","currentVariableValue","TemplateVariableProvider"],"mappings":"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"}
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';\nimport produce from 'immer';\nimport {\n TemplateVariableContext,\n VariableStateMap,\n VariableState,\n VariableStoreStateMap,\n VariableOption,\n} from '@perses-dev/plugin-system';\nimport { DEFAULT_ALL_VALUE as ALL_VALUE, VariableName, VariableValue, VariableDefinition } from '@perses-dev/core';\nimport { checkSavedDefaultVariableStatus, findVariableDefinitionByName, mergeVariableDefinitions } from './utils';\nimport { hydrateTemplateVariableStates } from './hydrationUtils';\nimport { getInitalValuesFromQueryParameters, getURLQueryParamName, useVariableQueryParams } from './query-params';\n\ntype TemplateVariableStore = {\n variableDefinitions: VariableDefinition[];\n externalVariableDefinitions: ExternalVariableDefinition[];\n variableState: VariableStoreStateMap;\n setVariableValue: (variableName: VariableName, value: VariableValue, source?: string) => void;\n setVariableOptions: (name: VariableName, options: VariableOption[], source?: string) => void;\n setVariableLoading: (name: VariableName, loading: boolean, source?: string) => void;\n setVariableDefinitions: (definitions: VariableDefinition[]) => void;\n setVariableDefaultValues: () => VariableDefinition[];\n getSavedVariablesStatus: () => { isSavedVariableModified: boolean; modifiedVariableNames: string[] };\n};\n\nconst TemplateVariableStoreContext = createContext<ReturnType<typeof createTemplateVariableSrvStore> | undefined>(\n undefined\n);\nexport function 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 return useStore(\n store,\n (s) => {\n const vars: VariableStateMap = {};\n\n // Collect values of local variables, from the variable state\n const names = variableNames ?? s.variableDefinitions.map((value) => value.spec.name);\n names.forEach((name) => {\n const varState = s.variableState.get({ name });\n if (!varState || varState.overridden) {\n return;\n }\n vars[name] = varState;\n });\n\n // Collect values of external variables, from the variable state\n s.externalVariableDefinitions.forEach((d) => {\n const source = d.source;\n d.definitions.forEach((value) => {\n const name = value.spec.name;\n const varState = s.variableState.get({ name, source });\n if (!varState || varState.overridden) {\n return;\n }\n vars[name] = varState;\n });\n });\n\n return vars;\n },\n (left, right) => {\n return JSON.stringify(left) === JSON.stringify(right);\n }\n );\n}\n\n/**\n * Get the state and definition of a variable from the Template variables context.\n * @param name name of the variable\n * @param source if given, it searches in the external variables\n */\nexport function useTemplateVariable(name: string, source?: string) {\n const store = useTemplateVariableStoreCtx();\n return useStore(store, (s) => {\n const state = s.variableState.get({ name, source });\n const definitions = source\n ? s.externalVariableDefinitions.find((v) => v.source === source)?.definitions\n : s.variableDefinitions;\n const definition = (definitions || []).find((v) => v.spec.name === name);\n\n return { state, definition };\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 setVariableDefaultValues: s.setVariableDefaultValues,\n getSavedVariablesStatus: s.getSavedVariablesStatus,\n };\n });\n}\n\nexport function useTemplateVariableDefinitions() {\n const store = useTemplateVariableStoreCtx();\n return useStore(store, (s) => s.variableDefinitions);\n}\n\nexport function useTemplateExternalVariableDefinitions() {\n const store = useTemplateVariableStoreCtx();\n return useStore(store, (s) => s.externalVariableDefinitions);\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 const definitions = useTemplateVariableDefinitions();\n const externalDefinitions = useTemplateExternalVariableDefinitions();\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\n if (v.value === ALL_VALUE) {\n const definition = findVariableDefinitionByName(name, definitions, externalDefinitions);\n // If the variable is a list variable and has a custom all value, then use that value instead\n if (definition?.kind === 'ListVariable' && definition.spec.custom_all_value) {\n v.value = definition.spec.custom_all_value;\n } else {\n v.value = v.options?.map((o: { value: string }) => o.value) ?? null;\n }\n }\n contextValues[name] = v;\n });\n return contextValues;\n }, [originalValues, definitions, externalDefinitions]);\n\n return <TemplateVariableContext.Provider value={{ state: values }}>{children}</TemplateVariableContext.Provider>;\n}\n\ninterface TemplateVariableSrvArgs {\n initialVariableDefinitions?: VariableDefinition[];\n externalVariableDefinitions?: ExternalVariableDefinition[];\n queryParams?: ReturnType<typeof useVariableQueryParams>;\n}\n\nfunction createTemplateVariableSrvStore({\n initialVariableDefinitions = [],\n externalVariableDefinitions = [],\n queryParams,\n}: TemplateVariableSrvArgs) {\n const initialParams = getInitalValuesFromQueryParameters(queryParams ? queryParams[0] : {});\n const store = createStore<TemplateVariableStore>()(\n devtools(\n immer((set, get) => ({\n variableState: hydrateTemplateVariableStates(\n initialVariableDefinitions,\n initialParams,\n externalVariableDefinitions\n ),\n variableDefinitions: initialVariableDefinitions,\n externalVariableDefinitions: externalVariableDefinitions,\n setVariableDefinitions(definitions: VariableDefinition[]) {\n set(\n (state) => {\n state.variableDefinitions = definitions;\n state.variableState = hydrateTemplateVariableStates(\n definitions,\n initialParams,\n externalVariableDefinitions\n );\n },\n false,\n '[Variables] setVariableDefinitions' // Used for action name in Redux devtools\n );\n },\n setVariableOptions(name, options, source?: string) {\n set(\n (state) => {\n const varState = state.variableState.get({ name, source });\n if (!varState) {\n return;\n }\n varState.options = options;\n },\n false,\n '[Variables] setVariableOptions'\n );\n },\n setVariableLoading(name, loading, source?: string) {\n set(\n (state) => {\n const varState = state.variableState.get({ name, source });\n if (!varState) {\n return;\n }\n varState.loading = loading;\n },\n false,\n '[Variables] setVariableLoading'\n );\n },\n setVariableValue: (name, value, source?: string) =>\n set(\n (state) => {\n let val = value;\n const varState = state.variableState.get({ name, source });\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 false,\n '[Variables] setVariableValue'\n ),\n setVariableDefaultValues: () => {\n const variableDefinitions = get().variableDefinitions;\n const variableState = get().variableState;\n const updatedVariables = produce(variableDefinitions, (draft) => {\n draft.forEach((variable, index) => {\n const name = variable.spec.name;\n if (variable.kind === 'ListVariable') {\n const currentVariable = variableState.get({ name });\n if (currentVariable?.value !== undefined) {\n draft[index] = {\n kind: 'ListVariable',\n spec: produce(variable.spec, (specDraft) => {\n specDraft.default_value = currentVariable.value;\n }),\n };\n }\n } else if (variable.kind === 'TextVariable') {\n const currentVariable = variableState.get({ name });\n const currentVariableValue = typeof currentVariable?.value === 'string' ? currentVariable.value : '';\n if (currentVariable?.value !== undefined) {\n draft[index] = {\n kind: 'TextVariable',\n spec: produce(variable.spec, (specDraft) => {\n specDraft.value = currentVariableValue;\n }),\n };\n }\n }\n });\n });\n set(\n (state) => {\n state.variableDefinitions = updatedVariables;\n },\n false,\n '[Variables] setVariableDefaultValues'\n );\n return updatedVariables;\n },\n getSavedVariablesStatus: () => {\n return checkSavedDefaultVariableStatus(get().variableDefinitions, get().variableState);\n },\n }))\n )\n );\n\n return store;\n}\n\nexport type ExternalVariableDefinition = {\n source: string;\n definitions: VariableDefinition[];\n};\n\nexport interface TemplateVariableProviderProps {\n children: React.ReactNode;\n initialVariableDefinitions?: VariableDefinition[];\n /**\n * The external variables allow you to give to the provider some additional variables, not defined in the dashboard and static.\n * It means that you won´t be able to update them from the dashboard itself, but you will see them appear and will be able\n * to modify their runtime value as any other variable.\n * If one of the external variable has the same name as a local one, it will be marked as overridden.\n * You can define one list of variable definition by source and as many source as you want.\n * The order of the sources is important as first one will take precedence on the following ones, in case they have same names.\n */\n externalVariableDefinitions?: ExternalVariableDefinition[];\n}\n\nexport function TemplateVariableProvider({\n children,\n initialVariableDefinitions = [],\n externalVariableDefinitions = [],\n}: TemplateVariableProviderProps) {\n const allVariableDefs = mergeVariableDefinitions(initialVariableDefinitions, externalVariableDefinitions);\n const queryParams = useVariableQueryParams(allVariableDefs);\n const [store] = useState(\n createTemplateVariableSrvStore({ initialVariableDefinitions, externalVariableDefinitions, queryParams })\n );\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","produce","TemplateVariableContext","DEFAULT_ALL_VALUE","ALL_VALUE","checkSavedDefaultVariableStatus","findVariableDefinitionByName","mergeVariableDefinitions","hydrateTemplateVariableStates","getInitalValuesFromQueryParameters","getURLQueryParamName","useVariableQueryParams","TemplateVariableStoreContext","undefined","useTemplateVariableStoreCtx","context","Error","useTemplateVariableValues","variableNames","store","s","vars","names","variableDefinitions","map","value","spec","name","forEach","varState","variableState","get","overridden","externalVariableDefinitions","d","source","definitions","left","right","JSON","stringify","useTemplateVariable","state","find","v","definition","useTemplateVariableActions","setVariableValue","setVariableLoading","setVariableOptions","setVariableDefinitions","setVariableDefaultValues","getSavedVariablesStatus","useTemplateVariableDefinitions","useTemplateExternalVariableDefinitions","useTemplateVariableStore","PluginProvider","children","originalValues","externalDefinitions","values","contextValues","Object","keys","kind","custom_all_value","options","o","Provider","createTemplateVariableSrvStore","initialVariableDefinitions","queryParams","initialParams","set","loading","val","Array","isArray","includes","at","filter","setQueryParams","updatedVariables","draft","variable","index","currentVariable","specDraft","default_value","currentVariableValue","TemplateVariableProvider","allVariableDefs"],"mappings":"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"}
@@ -1,4 +1,11 @@
1
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;
2
+ import { VariableStoreStateMap } from '@perses-dev/plugin-system';
3
+ import { ExternalVariableDefinition } from '@perses-dev/dashboards';
4
+ /**
5
+ * Build the local variable states according to the given definitions
6
+ * @param localDefinitions local variable definitions. Dynamic part.
7
+ * @param externalDefinitions external variables definitions. Static part.
8
+ * @param initialValues values coming from query parameters
9
+ */
10
+ export declare function hydrateTemplateVariableStates(localDefinitions: VariableDefinition[], initialValues: Record<string, VariableValue>, externalDefinitions?: ExternalVariableDefinition[]): VariableStoreStateMap;
4
11
  //# sourceMappingURL=hydrationUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hydrationUtils.d.ts","sourceRoot":"","sources":["../../../src/context/TemplateVariableProvider/hydrationUtils.ts"],"names":[],"mappings":"AAaA,OAAO,EAAqB,aAAa,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAiB,MAAM,2BAA2B,CAAC;AAuC5E,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,kBAAkB,EAAE,EACjC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAC3C,gBAAgB,CAUlB"}
1
+ {"version":3,"file":"hydrationUtils.d.ts","sourceRoot":"","sources":["../../../src/context/TemplateVariableProvider/hydrationUtils.ts"],"names":[],"mappings":"AAaA,OAAO,EAAqB,aAAa,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAiB,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAyCpE;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,gBAAgB,EAAE,kBAAkB,EAAE,EACtC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAC5C,mBAAmB,GAAE,0BAA0B,EAAO,GACrD,qBAAqB,CA8DvB"}
@@ -11,11 +11,14 @@
11
11
  // See the License for the specific language governing permissions and
12
12
  // limitations under the License.
13
13
  import { DEFAULT_ALL_VALUE } from '@perses-dev/core';
14
+ import { VariableStoreStateMap } from '@perses-dev/plugin-system';
14
15
  // TODO: move to TemplateVariableProvider/utils.ts
15
16
  function hydrateTemplateVariableState(variable, initialValue) {
16
17
  const varState = {
17
18
  value: null,
18
- loading: false
19
+ loading: false,
20
+ overriding: false,
21
+ overridden: false
19
22
  };
20
23
  switch(variable.kind){
21
24
  case 'TextVariable':
@@ -50,13 +53,65 @@ function hydrateTemplateVariableState(variable, initialValue) {
50
53
  }
51
54
  return varState;
52
55
  }
53
- export function hydrateTemplateVariableStates(definitions, initialValues) {
54
- const state = {};
55
- definitions.forEach((v)=>{
56
+ /**
57
+ * Build the local variable states according to the given definitions
58
+ * @param localDefinitions local variable definitions. Dynamic part.
59
+ * @param externalDefinitions external variables definitions. Static part.
60
+ * @param initialValues values coming from query parameters
61
+ */ export function hydrateTemplateVariableStates(localDefinitions, initialValues, externalDefinitions = []) {
62
+ const state = new VariableStoreStateMap();
63
+ // Collect the names used by local definitions
64
+ let overridingNames = {};
65
+ localDefinitions.forEach((v)=>{
66
+ overridingNames[v.spec.name] = true;
67
+ }, {});
68
+ // Then populate the external variables state,
69
+ // taking care of well flagging each name as used, so the overridden state can be filled accordingly.
70
+ const overriddenNames = {};
71
+ externalDefinitions.forEach((externalDef)=>{
72
+ const source = externalDef.source;
73
+ externalDef.definitions.forEach((v)=>{
74
+ const name = v.spec.name;
75
+ const param = initialValues[name];
76
+ const initialValue = param ? param : null;
77
+ state.set({
78
+ source,
79
+ name
80
+ }, {
81
+ ...hydrateTemplateVariableState(v, initialValue),
82
+ overridden: !!overridingNames[name]
83
+ });
84
+ overridingNames[name] = true;
85
+ overriddenNames[v.spec.name] = true;
86
+ });
87
+ }, {});
88
+ // Then populate the local variables state,
89
+ // taking care the overriding state is filled according to the names used in external variables.
90
+ localDefinitions.forEach((v)=>{
56
91
  const name = v.spec.name;
57
92
  const param = initialValues[name];
58
93
  const initialValue = param ? param : null;
59
- state[name] = hydrateTemplateVariableState(v, initialValue);
94
+ state.set({
95
+ name
96
+ }, {
97
+ ...hydrateTemplateVariableState(v, initialValue),
98
+ overriding: !!overriddenNames[name]
99
+ });
100
+ });
101
+ overridingNames = {};
102
+ externalDefinitions.slice().reverse().forEach((externalDef)=>{
103
+ const source = externalDef.source;
104
+ externalDef.definitions.forEach((v)=>{
105
+ const name = v.spec.name;
106
+ const value = state.get({
107
+ source,
108
+ name
109
+ });
110
+ if (value) {
111
+ value.overriding = !!overridingNames[name];
112
+ }
113
+ overridingNames[name] = true;
114
+ });
60
115
  });
61
116
  return state;
62
117
  }
@@ -1 +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 { DEFAULT_ALL_VALUE, VariableValue, VariableDefinition } from '@perses-dev/core';\nimport { VariableStateMap, VariableState } from '@perses-dev/plugin-system';\n\n// TODO: move to TemplateVariableProvider/utils.ts\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 // TODO: smarter fallbacks for default_value when allow_all_value is true\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\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;AAEjC,SAASA,iBAAiB,QAA2C,kBAAkB,CAAC;AAGxF,kDAAkD;AAClD,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;YACrE,yEAAyE;YACzE,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;YAED,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"}
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 { DEFAULT_ALL_VALUE, VariableValue, VariableDefinition } from '@perses-dev/core';\nimport { VariableStoreStateMap, VariableState } from '@perses-dev/plugin-system';\nimport { ExternalVariableDefinition } from '@perses-dev/dashboards';\n\n// TODO: move to TemplateVariableProvider/utils.ts\nfunction hydrateTemplateVariableState(variable: VariableDefinition, initialValue?: VariableValue): VariableState {\n const varState: VariableState = {\n value: null,\n loading: false,\n overriding: false,\n overridden: 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 // TODO: smarter fallbacks for default_value when allow_all_value is true\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\n break;\n default:\n break;\n }\n return varState;\n}\n\n/**\n * Build the local variable states according to the given definitions\n * @param localDefinitions local variable definitions. Dynamic part.\n * @param externalDefinitions external variables definitions. Static part.\n * @param initialValues values coming from query parameters\n */\nexport function hydrateTemplateVariableStates(\n localDefinitions: VariableDefinition[],\n initialValues: Record<string, VariableValue>,\n externalDefinitions: ExternalVariableDefinition[] = []\n): VariableStoreStateMap {\n const state: VariableStoreStateMap = new VariableStoreStateMap();\n\n // Collect the names used by local definitions\n let overridingNames: Record<string, boolean> = {};\n localDefinitions.forEach((v) => {\n overridingNames[v.spec.name] = true;\n }, {} as Record<string, boolean>);\n\n // Then populate the external variables state,\n // taking care of well flagging each name as used, so the overridden state can be filled accordingly.\n const overriddenNames: Record<string, boolean> = {};\n externalDefinitions.forEach((externalDef) => {\n const source = externalDef.source;\n externalDef.definitions.forEach((v) => {\n const name = v.spec.name;\n const param = initialValues[name];\n const initialValue = param ? param : null;\n state.set(\n { source, name },\n {\n ...hydrateTemplateVariableState(v, initialValue),\n overridden: !!overridingNames[name],\n }\n );\n\n overridingNames[name] = true;\n overriddenNames[v.spec.name] = true;\n });\n }, {} as Record<string, boolean>);\n\n // Then populate the local variables state,\n // taking care the overriding state is filled according to the names used in external variables.\n localDefinitions.forEach((v) => {\n const name = v.spec.name;\n const param = initialValues[name];\n const initialValue = param ? param : null;\n state.set(\n { name },\n {\n ...hydrateTemplateVariableState(v, initialValue),\n overriding: !!overriddenNames[name],\n }\n );\n });\n\n overridingNames = {};\n externalDefinitions\n .slice()\n .reverse()\n .forEach((externalDef) => {\n const source = externalDef.source;\n externalDef.definitions.forEach((v) => {\n const name = v.spec.name;\n const value = state.get({ source, name });\n if (value) {\n value.overriding = !!overridingNames[name];\n }\n overridingNames[name] = true;\n });\n });\n return state;\n}\n"],"names":["DEFAULT_ALL_VALUE","VariableStoreStateMap","hydrateTemplateVariableState","variable","initialValue","varState","value","loading","overriding","overridden","kind","spec","options","default_value","length","firstOptionValue","allow_multiple","Array","isArray","hydrateTemplateVariableStates","localDefinitions","initialValues","externalDefinitions","state","overridingNames","forEach","v","name","overriddenNames","externalDef","source","definitions","param","set","slice","reverse","get"],"mappings":"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"}
@@ -1,7 +1,32 @@
1
1
  import { VariableDefinition } from '@perses-dev/core';
2
- import { VariableStateMap } from '@perses-dev/plugin-system';
3
- export declare function checkSavedDefaultVariableStatus(definitions: VariableDefinition[], varState: VariableStateMap): {
2
+ import { VariableStoreStateMap } from '@perses-dev/plugin-system';
3
+ import { ExternalVariableDefinition } from '@perses-dev/dashboards';
4
+ export declare function checkSavedDefaultVariableStatus(definitions: VariableDefinition[], varState: VariableStoreStateMap): {
4
5
  isSavedVariableModified: boolean;
5
6
  modifiedVariableNames: string[];
6
7
  };
8
+ /**
9
+ * Merge the different kind of variable definition into a list without any duplicates (same name).
10
+ * Respects the order of priority explained in {@link forEachVariableDefinition}
11
+ * @param locals
12
+ * @param externals
13
+ */
14
+ export declare function mergeVariableDefinitions(locals: VariableDefinition[], externals: ExternalVariableDefinition[]): VariableDefinition[];
15
+ /**
16
+ * Find a definition by its name.
17
+ * Respects the order of priority explained in {@link forEachVariableDefinition}
18
+ * @param name
19
+ * @param localDefinitions
20
+ * @param externalDefinitions
21
+ */
22
+ export declare function findVariableDefinitionByName(name: string, localDefinitions: VariableDefinition[], externalDefinitions: ExternalVariableDefinition[]): VariableDefinition | undefined;
23
+ /**
24
+ * Loop on local and external variable definitions, respecting the order of priority:
25
+ * - local var defs override external var defs of same name
26
+ * - each external var defs override the external var defs coming after.
27
+ * @param locals
28
+ * @param externals
29
+ * @param callbackFn
30
+ */
31
+ export declare function forEachVariableDefinition(locals: VariableDefinition[], externals: ExternalVariableDefinition[], callbackFn: (varDef: VariableDefinition, name: string, source?: string) => void): void;
7
32
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/context/TemplateVariableProvider/utils.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAK7D,wBAAgB,+BAA+B,CAAC,WAAW,EAAE,kBAAkB,EAAE,EAAE,QAAQ,EAAE,gBAAgB;;;EAoB5G"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/context/TemplateVariableProvider/utils.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAKpE,wBAAgB,+BAA+B,CAAC,WAAW,EAAE,kBAAkB,EAAE,EAAE,QAAQ,EAAE,qBAAqB;;;EAqBjH;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,kBAAkB,EAAE,EAC5B,SAAS,EAAE,0BAA0B,EAAE,GACtC,kBAAkB,EAAE,CAYtB;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,kBAAkB,EAAE,EACtC,mBAAmB,EAAE,0BAA0B,EAAE,GAChD,kBAAkB,GAAG,SAAS,CAEhC;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,kBAAkB,EAAE,EAC5B,SAAS,EAAE,0BAA0B,EAAE,EACvC,UAAU,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,QAIhF"}
@@ -16,17 +16,22 @@
16
16
  let isSavedVariableModified = false;
17
17
  const modifiedVariableNames = [];
18
18
  for (const savedVariable of definitions){
19
+ const name = savedVariable.spec.name;
19
20
  if (savedVariable.kind === 'ListVariable') {
20
- const currentVariable = varState[savedVariable.spec.name];
21
+ const currentVariable = varState.get({
22
+ name
23
+ });
21
24
  if ((currentVariable === null || currentVariable === void 0 ? void 0 : currentVariable.value) !== null && (currentVariable === null || currentVariable === void 0 ? void 0 : currentVariable.value) !== savedVariable.spec.default_value) {
22
- modifiedVariableNames.push(savedVariable.spec.name);
25
+ modifiedVariableNames.push(name);
23
26
  isSavedVariableModified = true;
24
27
  }
25
28
  } else if (savedVariable.kind === 'TextVariable') {
26
- const currentVariable1 = varState[savedVariable.spec.name];
29
+ const currentVariable1 = varState.get({
30
+ name
31
+ });
27
32
  const currentVariableValue = typeof (currentVariable1 === null || currentVariable1 === void 0 ? void 0 : currentVariable1.value) === 'string' ? currentVariable1.value : '';
28
33
  if (savedVariable.spec.value !== currentVariableValue) {
29
- modifiedVariableNames.push(savedVariable.spec.name);
34
+ modifiedVariableNames.push(name);
30
35
  isSavedVariableModified = true;
31
36
  }
32
37
  }
@@ -36,5 +41,42 @@
36
41
  modifiedVariableNames
37
42
  };
38
43
  }
44
+ /**
45
+ * Merge the different kind of variable definition into a list without any duplicates (same name).
46
+ * Respects the order of priority explained in {@link forEachVariableDefinition}
47
+ * @param locals
48
+ * @param externals
49
+ */ export function mergeVariableDefinitions(locals, externals) {
50
+ const pushed = {};
51
+ const result = [];
52
+ // Append the value only if it's not already appended
53
+ forEachVariableDefinition(locals, externals, (value, name)=>{
54
+ if (!pushed[name]) {
55
+ result.push(value);
56
+ pushed[name] = true;
57
+ }
58
+ });
59
+ return result;
60
+ }
61
+ /**
62
+ * Find a definition by its name.
63
+ * Respects the order of priority explained in {@link forEachVariableDefinition}
64
+ * @param name
65
+ * @param localDefinitions
66
+ * @param externalDefinitions
67
+ */ export function findVariableDefinitionByName(name, localDefinitions, externalDefinitions) {
68
+ return mergeVariableDefinitions(localDefinitions, externalDefinitions).find((d)=>d.spec.name === name);
69
+ }
70
+ /**
71
+ * Loop on local and external variable definitions, respecting the order of priority:
72
+ * - local var defs override external var defs of same name
73
+ * - each external var defs override the external var defs coming after.
74
+ * @param locals
75
+ * @param externals
76
+ * @param callbackFn
77
+ */ export function forEachVariableDefinition(locals, externals, callbackFn) {
78
+ locals.forEach((v)=>callbackFn(v, v.spec.name));
79
+ externals.forEach((ext)=>ext.definitions.forEach((v)=>callbackFn(v, v.spec.name, ext.source)));
80
+ }
39
81
 
40
82
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/context/TemplateVariableProvider/utils.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 { VariableDefinition } from '@perses-dev/core';\nimport { VariableStateMap } from '@perses-dev/plugin-system';\n\n/*\n * Check whether saved variable definitions are out of date with current default list values in Zustand store\n */\nexport function checkSavedDefaultVariableStatus(definitions: VariableDefinition[], varState: VariableStateMap) {\n let isSavedVariableModified = false;\n const modifiedVariableNames: string[] = [];\n for (const savedVariable of definitions) {\n if (savedVariable.kind === 'ListVariable') {\n const currentVariable = varState[savedVariable.spec.name];\n if (currentVariable?.value !== null && currentVariable?.value !== savedVariable.spec.default_value) {\n modifiedVariableNames.push(savedVariable.spec.name);\n isSavedVariableModified = true;\n }\n } else if (savedVariable.kind === 'TextVariable') {\n const currentVariable = varState[savedVariable.spec.name];\n const currentVariableValue = typeof currentVariable?.value === 'string' ? currentVariable.value : '';\n if (savedVariable.spec.value !== currentVariableValue) {\n modifiedVariableNames.push(savedVariable.spec.name);\n isSavedVariableModified = true;\n }\n }\n }\n return { isSavedVariableModified, modifiedVariableNames };\n}\n"],"names":["checkSavedDefaultVariableStatus","definitions","varState","isSavedVariableModified","modifiedVariableNames","savedVariable","kind","currentVariable","spec","name","value","default_value","push","currentVariableValue"],"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;AAKjC;;CAEC,GACD,OAAO,SAASA,+BAA+B,CAACC,WAAiC,EAAEC,QAA0B,EAAE;IAC7G,IAAIC,uBAAuB,GAAG,KAAK,AAAC;IACpC,MAAMC,qBAAqB,GAAa,EAAE,AAAC;IAC3C,KAAK,MAAMC,aAAa,IAAIJ,WAAW,CAAE;QACvC,IAAII,aAAa,CAACC,IAAI,KAAK,cAAc,EAAE;YACzC,MAAMC,eAAe,GAAGL,QAAQ,CAACG,aAAa,CAACG,IAAI,CAACC,IAAI,CAAC,AAAC;YAC1D,IAAIF,CAAAA,eAAe,aAAfA,eAAe,WAAO,GAAtBA,KAAAA,CAAsB,GAAtBA,eAAe,CAAEG,KAAK,CAAA,KAAK,IAAI,IAAIH,CAAAA,eAAe,aAAfA,eAAe,WAAO,GAAtBA,KAAAA,CAAsB,GAAtBA,eAAe,CAAEG,KAAK,CAAA,KAAKL,aAAa,CAACG,IAAI,CAACG,aAAa,EAAE;gBAClGP,qBAAqB,CAACQ,IAAI,CAACP,aAAa,CAACG,IAAI,CAACC,IAAI,CAAC,CAAC;gBACpDN,uBAAuB,GAAG,IAAI,CAAC;YACjC,CAAC;QACH,OAAO,IAAIE,aAAa,CAACC,IAAI,KAAK,cAAc,EAAE;YAChD,MAAMC,gBAAe,GAAGL,QAAQ,CAACG,aAAa,CAACG,IAAI,CAACC,IAAI,CAAC,AAAC;YAC1D,MAAMI,oBAAoB,GAAG,OAAON,CAAAA,gBAAe,aAAfA,gBAAe,WAAO,GAAtBA,KAAAA,CAAsB,GAAtBA,gBAAe,CAAEG,KAAK,CAAA,KAAK,QAAQ,GAAGH,gBAAe,CAACG,KAAK,GAAG,EAAE,AAAC;YACrG,IAAIL,aAAa,CAACG,IAAI,CAACE,KAAK,KAAKG,oBAAoB,EAAE;gBACrDT,qBAAqB,CAACQ,IAAI,CAACP,aAAa,CAACG,IAAI,CAACC,IAAI,CAAC,CAAC;gBACpDN,uBAAuB,GAAG,IAAI,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO;QAAEA,uBAAuB;QAAEC,qBAAqB;KAAE,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"sources":["../../../src/context/TemplateVariableProvider/utils.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 { VariableDefinition } from '@perses-dev/core';\nimport { VariableStoreStateMap } from '@perses-dev/plugin-system';\nimport { ExternalVariableDefinition } from '@perses-dev/dashboards';\n\n/*\n * Check whether saved variable definitions are out of date with current default list values in Zustand store\n */\nexport function checkSavedDefaultVariableStatus(definitions: VariableDefinition[], varState: VariableStoreStateMap) {\n let isSavedVariableModified = false;\n const modifiedVariableNames: string[] = [];\n for (const savedVariable of definitions) {\n const name = savedVariable.spec.name;\n if (savedVariable.kind === 'ListVariable') {\n const currentVariable = varState.get({ name });\n if (currentVariable?.value !== null && currentVariable?.value !== savedVariable.spec.default_value) {\n modifiedVariableNames.push(name);\n isSavedVariableModified = true;\n }\n } else if (savedVariable.kind === 'TextVariable') {\n const currentVariable = varState.get({ name });\n const currentVariableValue = typeof currentVariable?.value === 'string' ? currentVariable.value : '';\n if (savedVariable.spec.value !== currentVariableValue) {\n modifiedVariableNames.push(name);\n isSavedVariableModified = true;\n }\n }\n }\n return { isSavedVariableModified, modifiedVariableNames };\n}\n\n/**\n * Merge the different kind of variable definition into a list without any duplicates (same name).\n * Respects the order of priority explained in {@link forEachVariableDefinition}\n * @param locals\n * @param externals\n */\nexport function mergeVariableDefinitions(\n locals: VariableDefinition[],\n externals: ExternalVariableDefinition[]\n): VariableDefinition[] {\n const pushed: Record<string, boolean> = {};\n const result: VariableDefinition[] = [];\n\n // Append the value only if it's not already appended\n forEachVariableDefinition(locals, externals, (value: VariableDefinition, name: string) => {\n if (!pushed[name]) {\n result.push(value);\n pushed[name] = true;\n }\n });\n return result;\n}\n\n/**\n * Find a definition by its name.\n * Respects the order of priority explained in {@link forEachVariableDefinition}\n * @param name\n * @param localDefinitions\n * @param externalDefinitions\n */\nexport function findVariableDefinitionByName(\n name: string,\n localDefinitions: VariableDefinition[],\n externalDefinitions: ExternalVariableDefinition[]\n): VariableDefinition | undefined {\n return mergeVariableDefinitions(localDefinitions, externalDefinitions).find((d) => d.spec.name === name);\n}\n\n/**\n * Loop on local and external variable definitions, respecting the order of priority:\n * - local var defs override external var defs of same name\n * - each external var defs override the external var defs coming after.\n * @param locals\n * @param externals\n * @param callbackFn\n */\nexport function forEachVariableDefinition(\n locals: VariableDefinition[],\n externals: ExternalVariableDefinition[],\n callbackFn: (varDef: VariableDefinition, name: string, source?: string) => void\n) {\n locals.forEach((v) => callbackFn(v, v.spec.name));\n externals.forEach((ext) => ext.definitions.forEach((v) => callbackFn(v, v.spec.name, ext.source)));\n}\n"],"names":["checkSavedDefaultVariableStatus","definitions","varState","isSavedVariableModified","modifiedVariableNames","savedVariable","name","spec","kind","currentVariable","get","value","default_value","push","currentVariableValue","mergeVariableDefinitions","locals","externals","pushed","result","forEachVariableDefinition","findVariableDefinitionByName","localDefinitions","externalDefinitions","find","d","callbackFn","forEach","v","ext","source"],"mappings":"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"}
@@ -18,7 +18,7 @@ import { createMemoryHistory } from 'history';
18
18
  import { QueryParamProvider } from 'use-query-params';
19
19
  import { ReactRouter6Adapter } from 'use-query-params/adapters/react-router-6';
20
20
  import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
21
- import { ChartsThemeProvider, SnackbarProvider, testChartsTheme } from '@perses-dev/components';
21
+ import { ChartsProvider, SnackbarProvider, testChartsTheme } from '@perses-dev/components';
22
22
  import { mockPluginRegistry, PluginRegistry } from '@perses-dev/plugin-system';
23
23
  import { MOCK_PLUGINS } from './plugin-registry';
24
24
  /*
@@ -63,7 +63,7 @@ import { MOCK_PLUGINS } from './plugin-registry';
63
63
  vertical: 'bottom',
64
64
  horizontal: 'right'
65
65
  },
66
- children: /*#__PURE__*/ _jsx(ChartsThemeProvider, {
66
+ children: /*#__PURE__*/ _jsx(ChartsProvider, {
67
67
  chartsTheme: testChartsTheme,
68
68
  children: /*#__PURE__*/ _jsx(PluginRegistry, {
69
69
  ...mockPluginRegistry(...MOCK_PLUGINS),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/test/render.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 { useLayoutEffect, useState } from 'react';\nimport { render, RenderOptions } from '@testing-library/react';\nimport { Router } from 'react-router-dom';\nimport { createMemoryHistory, MemoryHistory } from 'history';\nimport { QueryParamProvider } from 'use-query-params';\nimport { ReactRouter6Adapter } from 'use-query-params/adapters/react-router-6';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { ChartsThemeProvider, SnackbarProvider, testChartsTheme } from '@perses-dev/components';\nimport { mockPluginRegistry, PluginRegistry } from '@perses-dev/plugin-system';\nimport { MOCK_PLUGINS } from './plugin-registry';\n\ninterface CustomRouterProps {\n history: MemoryHistory;\n children: React.ReactNode;\n}\n\n/*\n * Workaround for React router upgrade type errors.\n * More details: https://stackoverflow.com/a/69948457/17575201\n */\nconst CustomRouter: React.FC<CustomRouterProps> = ({ history, children }) => {\n const [state, setState] = useState({\n action: history.action,\n location: history.location,\n });\n\n useLayoutEffect(() => history.listen(setState), [history]);\n\n return (\n <Router location={state.location} navigationType={state.action} navigator={history}>\n {children}\n </Router>\n );\n};\n\n/**\n * Test helper to render a React component with some common app-level providers wrapped around it.\n */\nexport function renderWithContext(\n ui: React.ReactElement,\n options?: Omit<RenderOptions, 'queries'>,\n history?: MemoryHistory\n) {\n // Create a new QueryClient for each test to avoid caching issues\n const queryClient = new QueryClient({ defaultOptions: { queries: { refetchOnWindowFocus: false, retry: false } } });\n\n const customHistory = history ?? createMemoryHistory();\n\n const BaseRender = () => (\n <CustomRouter history={customHistory}>\n <QueryClientProvider client={queryClient}>\n <QueryParamProvider adapter={ReactRouter6Adapter}>\n <SnackbarProvider anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}>\n <ChartsThemeProvider chartsTheme={testChartsTheme}>\n <PluginRegistry {...mockPluginRegistry(...MOCK_PLUGINS)}>{ui}</PluginRegistry>\n </ChartsThemeProvider>\n </SnackbarProvider>\n </QueryParamProvider>\n </QueryClientProvider>\n </CustomRouter>\n );\n\n return render(<BaseRender />, options);\n}\n"],"names":["useLayoutEffect","useState","render","Router","createMemoryHistory","QueryParamProvider","ReactRouter6Adapter","QueryClient","QueryClientProvider","ChartsThemeProvider","SnackbarProvider","testChartsTheme","mockPluginRegistry","PluginRegistry","MOCK_PLUGINS","CustomRouter","history","children","state","setState","action","location","listen","navigationType","navigator","renderWithContext","ui","options","queryClient","defaultOptions","queries","refetchOnWindowFocus","retry","customHistory","BaseRender","client","adapter","anchorOrigin","vertical","horizontal","chartsTheme"],"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,eAAe,EAAEC,QAAQ,QAAQ,OAAO,CAAC;AAClD,SAASC,MAAM,QAAuB,wBAAwB,CAAC;AAC/D,SAASC,MAAM,QAAQ,kBAAkB,CAAC;AAC1C,SAASC,mBAAmB,QAAuB,SAAS,CAAC;AAC7D,SAASC,kBAAkB,QAAQ,kBAAkB,CAAC;AACtD,SAASC,mBAAmB,QAAQ,0CAA0C,CAAC;AAC/E,SAASC,WAAW,EAAEC,mBAAmB,QAAQ,uBAAuB,CAAC;AACzE,SAASC,mBAAmB,EAAEC,gBAAgB,EAAEC,eAAe,QAAQ,wBAAwB,CAAC;AAChG,SAASC,kBAAkB,EAAEC,cAAc,QAAQ,2BAA2B,CAAC;AAC/E,SAASC,YAAY,QAAQ,mBAAmB,CAAC;AAOjD;;;CAGC,GACD,MAAMC,YAAY,GAAgC,CAAC,EAAEC,OAAO,CAAA,EAAEC,QAAQ,CAAA,EAAE,GAAK;IAC3E,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGlB,QAAQ,CAAC;QACjCmB,MAAM,EAAEJ,OAAO,CAACI,MAAM;QACtBC,QAAQ,EAAEL,OAAO,CAACK,QAAQ;KAC3B,CAAC,AAAC;IAEHrB,eAAe,CAAC,IAAMgB,OAAO,CAACM,MAAM,CAACH,QAAQ,CAAC,EAAE;QAACH,OAAO;KAAC,CAAC,CAAC;IAE3D,qBACE,KAACb,MAAM;QAACkB,QAAQ,EAAEH,KAAK,CAACG,QAAQ;QAAEE,cAAc,EAAEL,KAAK,CAACE,MAAM;QAAEI,SAAS,EAAER,OAAO;kBAC/EC,QAAQ;MACF,CACT;AACJ,CAAC,AAAC;AAEF;;CAEC,GACD,OAAO,SAASQ,iBAAiB,CAC/BC,EAAsB,EACtBC,OAAwC,EACxCX,OAAuB,EACvB;IACA,iEAAiE;IACjE,MAAMY,WAAW,GAAG,IAAIrB,WAAW,CAAC;QAAEsB,cAAc,EAAE;YAAEC,OAAO,EAAE;gBAAEC,oBAAoB,EAAE,KAAK;gBAAEC,KAAK,EAAE,KAAK;aAAE;SAAE;KAAE,CAAC,AAAC;IAEpH,MAAMC,aAAa,GAAGjB,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAIZ,mBAAmB,EAAE,AAAC;IAEvD,MAAM8B,UAAU,GAAG,kBACjB,KAACnB,YAAY;YAACC,OAAO,EAAEiB,aAAa;sBAClC,cAAA,KAACzB,mBAAmB;gBAAC2B,MAAM,EAAEP,WAAW;0BACtC,cAAA,KAACvB,kBAAkB;oBAAC+B,OAAO,EAAE9B,mBAAmB;8BAC9C,cAAA,KAACI,gBAAgB;wBAAC2B,YAAY,EAAE;4BAAEC,QAAQ,EAAE,QAAQ;4BAAEC,UAAU,EAAE,OAAO;yBAAE;kCACzE,cAAA,KAAC9B,mBAAmB;4BAAC+B,WAAW,EAAE7B,eAAe;sCAC/C,cAAA,KAACE,cAAc;gCAAE,GAAGD,kBAAkB,IAAIE,YAAY,CAAC;0CAAGY,EAAE;8BAAkB;0BAC1D;sBACL;kBACA;cACD;UACT,AAChB,AAAC;IAEF,OAAOxB,MAAM,eAAC,KAACgC,UAAU,KAAG,EAAEP,OAAO,CAAC,CAAC;AACzC,CAAC"}
1
+ {"version":3,"sources":["../../src/test/render.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 { useLayoutEffect, useState } from 'react';\nimport { render, RenderOptions } from '@testing-library/react';\nimport { Router } from 'react-router-dom';\nimport { createMemoryHistory, MemoryHistory } from 'history';\nimport { QueryParamProvider } from 'use-query-params';\nimport { ReactRouter6Adapter } from 'use-query-params/adapters/react-router-6';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { ChartsProvider, SnackbarProvider, testChartsTheme } from '@perses-dev/components';\nimport { mockPluginRegistry, PluginRegistry } from '@perses-dev/plugin-system';\nimport { MOCK_PLUGINS } from './plugin-registry';\n\ninterface CustomRouterProps {\n history: MemoryHistory;\n children: React.ReactNode;\n}\n\n/*\n * Workaround for React router upgrade type errors.\n * More details: https://stackoverflow.com/a/69948457/17575201\n */\nconst CustomRouter: React.FC<CustomRouterProps> = ({ history, children }) => {\n const [state, setState] = useState({\n action: history.action,\n location: history.location,\n });\n\n useLayoutEffect(() => history.listen(setState), [history]);\n\n return (\n <Router location={state.location} navigationType={state.action} navigator={history}>\n {children}\n </Router>\n );\n};\n\n/**\n * Test helper to render a React component with some common app-level providers wrapped around it.\n */\nexport function renderWithContext(\n ui: React.ReactElement,\n options?: Omit<RenderOptions, 'queries'>,\n history?: MemoryHistory\n) {\n // Create a new QueryClient for each test to avoid caching issues\n const queryClient = new QueryClient({ defaultOptions: { queries: { refetchOnWindowFocus: false, retry: false } } });\n\n const customHistory = history ?? createMemoryHistory();\n\n const BaseRender = () => (\n <CustomRouter history={customHistory}>\n <QueryClientProvider client={queryClient}>\n <QueryParamProvider adapter={ReactRouter6Adapter}>\n <SnackbarProvider anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}>\n <ChartsProvider chartsTheme={testChartsTheme}>\n <PluginRegistry {...mockPluginRegistry(...MOCK_PLUGINS)}>{ui}</PluginRegistry>\n </ChartsProvider>\n </SnackbarProvider>\n </QueryParamProvider>\n </QueryClientProvider>\n </CustomRouter>\n );\n\n return render(<BaseRender />, options);\n}\n"],"names":["useLayoutEffect","useState","render","Router","createMemoryHistory","QueryParamProvider","ReactRouter6Adapter","QueryClient","QueryClientProvider","ChartsProvider","SnackbarProvider","testChartsTheme","mockPluginRegistry","PluginRegistry","MOCK_PLUGINS","CustomRouter","history","children","state","setState","action","location","listen","navigationType","navigator","renderWithContext","ui","options","queryClient","defaultOptions","queries","refetchOnWindowFocus","retry","customHistory","BaseRender","client","adapter","anchorOrigin","vertical","horizontal","chartsTheme"],"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,eAAe,EAAEC,QAAQ,QAAQ,OAAO,CAAC;AAClD,SAASC,MAAM,QAAuB,wBAAwB,CAAC;AAC/D,SAASC,MAAM,QAAQ,kBAAkB,CAAC;AAC1C,SAASC,mBAAmB,QAAuB,SAAS,CAAC;AAC7D,SAASC,kBAAkB,QAAQ,kBAAkB,CAAC;AACtD,SAASC,mBAAmB,QAAQ,0CAA0C,CAAC;AAC/E,SAASC,WAAW,EAAEC,mBAAmB,QAAQ,uBAAuB,CAAC;AACzE,SAASC,cAAc,EAAEC,gBAAgB,EAAEC,eAAe,QAAQ,wBAAwB,CAAC;AAC3F,SAASC,kBAAkB,EAAEC,cAAc,QAAQ,2BAA2B,CAAC;AAC/E,SAASC,YAAY,QAAQ,mBAAmB,CAAC;AAOjD;;;CAGC,GACD,MAAMC,YAAY,GAAgC,CAAC,EAAEC,OAAO,CAAA,EAAEC,QAAQ,CAAA,EAAE,GAAK;IAC3E,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGlB,QAAQ,CAAC;QACjCmB,MAAM,EAAEJ,OAAO,CAACI,MAAM;QACtBC,QAAQ,EAAEL,OAAO,CAACK,QAAQ;KAC3B,CAAC,AAAC;IAEHrB,eAAe,CAAC,IAAMgB,OAAO,CAACM,MAAM,CAACH,QAAQ,CAAC,EAAE;QAACH,OAAO;KAAC,CAAC,CAAC;IAE3D,qBACE,KAACb,MAAM;QAACkB,QAAQ,EAAEH,KAAK,CAACG,QAAQ;QAAEE,cAAc,EAAEL,KAAK,CAACE,MAAM;QAAEI,SAAS,EAAER,OAAO;kBAC/EC,QAAQ;MACF,CACT;AACJ,CAAC,AAAC;AAEF;;CAEC,GACD,OAAO,SAASQ,iBAAiB,CAC/BC,EAAsB,EACtBC,OAAwC,EACxCX,OAAuB,EACvB;IACA,iEAAiE;IACjE,MAAMY,WAAW,GAAG,IAAIrB,WAAW,CAAC;QAAEsB,cAAc,EAAE;YAAEC,OAAO,EAAE;gBAAEC,oBAAoB,EAAE,KAAK;gBAAEC,KAAK,EAAE,KAAK;aAAE;SAAE;KAAE,CAAC,AAAC;IAEpH,MAAMC,aAAa,GAAGjB,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAIZ,mBAAmB,EAAE,AAAC;IAEvD,MAAM8B,UAAU,GAAG,kBACjB,KAACnB,YAAY;YAACC,OAAO,EAAEiB,aAAa;sBAClC,cAAA,KAACzB,mBAAmB;gBAAC2B,MAAM,EAAEP,WAAW;0BACtC,cAAA,KAACvB,kBAAkB;oBAAC+B,OAAO,EAAE9B,mBAAmB;8BAC9C,cAAA,KAACI,gBAAgB;wBAAC2B,YAAY,EAAE;4BAAEC,QAAQ,EAAE,QAAQ;4BAAEC,UAAU,EAAE,OAAO;yBAAE;kCACzE,cAAA,KAAC9B,cAAc;4BAAC+B,WAAW,EAAE7B,eAAe;sCAC1C,cAAA,KAACE,cAAc;gCAAE,GAAGD,kBAAkB,IAAIE,YAAY,CAAC;0CAAGY,EAAE;8BAAkB;0BAC/D;sBACA;kBACA;cACD;UACT,AAChB,AAAC;IAEF,OAAOxB,MAAM,eAAC,KAACgC,UAAU,KAAG,EAAEP,OAAO,CAAC,CAAC;AACzC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardApp.d.ts","sourceRoot":"","sources":["../../../src/views/ViewDashboard/DashboardApp.tsx"],"names":[],"mappings":";AAgBA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAQL,mBAAmB,EAGpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAkE,MAAM,eAAe,CAAC;AAEhH,MAAM,WAAW,iBAAiB;IAChC,mBAAmB,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACnD,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,uBAAuB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IACtC,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAChD,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,YAAY,UAAW,iBAAiB,gBAwFpD,CAAC"}
1
+ {"version":3,"file":"DashboardApp.d.ts","sourceRoot":"","sources":["../../../src/views/ViewDashboard/DashboardApp.tsx"],"names":[],"mappings":";AAgBA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAQL,mBAAmB,EAGpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAkE,MAAM,eAAe,CAAC;AAEhH,MAAM,WAAW,iBAAiB;IAChC,mBAAmB,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACnD,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,uBAAuB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IACtC,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAChD,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,YAAY,UAAW,iBAAiB,gBA6FpD,CAAC"}
@@ -13,11 +13,12 @@
13
13
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
14
  import { useState } from 'react';
15
15
  import { Box } from '@mui/material';
16
- import { ErrorAlert, ErrorBoundary } from '@perses-dev/components';
17
- import { PanelDrawer, Dashboard, PanelGroupDialog, DeletePanelGroupDialog, DiscardChangesConfirmationDialog, DashboardToolbar, DeletePanelDialog, EditJsonDialog, SaveChangesConfirmationDialog } from '../../components';
16
+ import { ChartsProvider, ErrorAlert, ErrorBoundary, useChartsTheme } from '@perses-dev/components';
17
+ import { PanelDrawer, Dashboard, PanelGroupDialog, DeletePanelGroupDialog, DashboardDiscardChangesConfirmationDialog, DashboardToolbar, DeletePanelDialog, EditJsonDialog, SaveChangesConfirmationDialog } from '../../components';
18
18
  import { useDashboard, useDiscardChangesConfirmationDialog, useEditMode } from '../../context';
19
19
  export const DashboardApp = (props)=>{
20
20
  const { dashboardResource , dashboardTitleComponent , emptyDashboardProps , onSave , onDiscard , initialVariableIsSticky , isReadonly , } = props;
21
+ const chartsTheme = useChartsTheme();
21
22
  const { setEditMode } = useEditMode();
22
23
  const { dashboard , setDashboard } = useDashboard();
23
24
  const [originalDashboard, setOriginalDashboard] = useState(undefined);
@@ -85,11 +86,15 @@ export const DashboardApp = (props)=>{
85
86
  }
86
87
  })
87
88
  }),
88
- /*#__PURE__*/ _jsx(PanelDrawer, {}),
89
+ /*#__PURE__*/ _jsx(ChartsProvider, {
90
+ chartsTheme: chartsTheme,
91
+ enablePinning: false,
92
+ children: /*#__PURE__*/ _jsx(PanelDrawer, {})
93
+ }),
89
94
  /*#__PURE__*/ _jsx(PanelGroupDialog, {}),
90
95
  /*#__PURE__*/ _jsx(DeletePanelGroupDialog, {}),
91
96
  /*#__PURE__*/ _jsx(DeletePanelDialog, {}),
92
- /*#__PURE__*/ _jsx(DiscardChangesConfirmationDialog, {}),
97
+ /*#__PURE__*/ _jsx(DashboardDiscardChangesConfirmationDialog, {}),
93
98
  /*#__PURE__*/ _jsx(EditJsonDialog, {}),
94
99
  /*#__PURE__*/ _jsx(SaveChangesConfirmationDialog, {})
95
100
  ]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/views/ViewDashboard/DashboardApp.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 { useState } from 'react';\nimport { Box } from '@mui/material';\nimport { ErrorAlert, ErrorBoundary } from '@perses-dev/components';\nimport { DashboardResource } from '@perses-dev/core';\nimport {\n PanelDrawer,\n Dashboard,\n PanelGroupDialog,\n DeletePanelGroupDialog,\n DiscardChangesConfirmationDialog,\n DashboardToolbar,\n DeletePanelDialog,\n EmptyDashboardProps,\n EditJsonDialog,\n SaveChangesConfirmationDialog,\n} from '../../components';\nimport { OnSaveDashboard, useDashboard, useDiscardChangesConfirmationDialog, useEditMode } from '../../context';\n\nexport interface DashboardAppProps {\n emptyDashboardProps?: Partial<EmptyDashboardProps>;\n dashboardResource: DashboardResource;\n dashboardTitleComponent?: JSX.Element;\n onSave?: OnSaveDashboard;\n onDiscard?: (entity: DashboardResource) => void;\n initialVariableIsSticky?: boolean;\n isReadonly: boolean;\n}\n\nexport const DashboardApp = (props: DashboardAppProps) => {\n const {\n dashboardResource,\n dashboardTitleComponent,\n emptyDashboardProps,\n onSave,\n onDiscard,\n initialVariableIsSticky,\n isReadonly,\n } = props;\n const { setEditMode } = useEditMode();\n const { dashboard, setDashboard } = useDashboard();\n const [originalDashboard, setOriginalDashboard] = useState<DashboardResource | undefined>(undefined);\n\n const { openDiscardChangesConfirmationDialog, closeDiscardChangesConfirmationDialog } =\n useDiscardChangesConfirmationDialog();\n\n const handleDiscardChanges = () => {\n // Reset to the original spec and exit edit mode\n if (originalDashboard) {\n setDashboard(originalDashboard);\n }\n setEditMode(false);\n closeDiscardChangesConfirmationDialog();\n if (onDiscard) {\n onDiscard(dashboard);\n }\n };\n\n const onEditButtonClick = () => {\n setEditMode(true);\n setOriginalDashboard(dashboard);\n };\n\n const onCancelButtonClick = () => {\n // check if dashboard has been modified\n if (JSON.stringify(dashboard) === JSON.stringify(originalDashboard)) {\n setEditMode(false);\n } else {\n openDiscardChangesConfirmationDialog({\n onDiscardChanges: () => {\n handleDiscardChanges();\n },\n onCancel: () => {\n closeDiscardChangesConfirmationDialog();\n },\n });\n }\n };\n\n return (\n <Box\n sx={{\n flexGrow: 1,\n overflowX: 'hidden',\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n <DashboardToolbar\n dashboardName={dashboardResource.metadata.name}\n dashboardTitleComponent={dashboardTitleComponent}\n initialVariableIsSticky={initialVariableIsSticky}\n onSave={onSave}\n isReadonly={isReadonly}\n onEditButtonClick={onEditButtonClick}\n onCancelButtonClick={onCancelButtonClick}\n />\n <Box sx={{ padding: (theme) => theme.spacing(2), height: '100%' }}>\n <ErrorBoundary FallbackComponent={ErrorAlert}>\n <Dashboard\n emptyDashboardProps={{\n onEditButtonClick,\n ...emptyDashboardProps,\n }}\n />\n </ErrorBoundary>\n <PanelDrawer />\n <PanelGroupDialog />\n <DeletePanelGroupDialog />\n <DeletePanelDialog />\n <DiscardChangesConfirmationDialog />\n <EditJsonDialog />\n <SaveChangesConfirmationDialog />\n </Box>\n </Box>\n );\n};\n"],"names":["useState","Box","ErrorAlert","ErrorBoundary","PanelDrawer","Dashboard","PanelGroupDialog","DeletePanelGroupDialog","DiscardChangesConfirmationDialog","DashboardToolbar","DeletePanelDialog","EditJsonDialog","SaveChangesConfirmationDialog","useDashboard","useDiscardChangesConfirmationDialog","useEditMode","DashboardApp","props","dashboardResource","dashboardTitleComponent","emptyDashboardProps","onSave","onDiscard","initialVariableIsSticky","isReadonly","setEditMode","dashboard","setDashboard","originalDashboard","setOriginalDashboard","undefined","openDiscardChangesConfirmationDialog","closeDiscardChangesConfirmationDialog","handleDiscardChanges","onEditButtonClick","onCancelButtonClick","JSON","stringify","onDiscardChanges","onCancel","sx","flexGrow","overflowX","overflowY","display","flexDirection","dashboardName","metadata","name","padding","theme","spacing","height","FallbackComponent"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/views/ViewDashboard/DashboardApp.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 { useState } from 'react';\nimport { Box } from '@mui/material';\nimport { ChartsProvider, ErrorAlert, ErrorBoundary, useChartsTheme } from '@perses-dev/components';\nimport { DashboardResource } from '@perses-dev/core';\nimport {\n PanelDrawer,\n Dashboard,\n PanelGroupDialog,\n DeletePanelGroupDialog,\n DashboardDiscardChangesConfirmationDialog,\n DashboardToolbar,\n DeletePanelDialog,\n EmptyDashboardProps,\n EditJsonDialog,\n SaveChangesConfirmationDialog,\n} from '../../components';\nimport { OnSaveDashboard, useDashboard, useDiscardChangesConfirmationDialog, useEditMode } from '../../context';\n\nexport interface DashboardAppProps {\n emptyDashboardProps?: Partial<EmptyDashboardProps>;\n dashboardResource: DashboardResource;\n dashboardTitleComponent?: JSX.Element;\n onSave?: OnSaveDashboard;\n onDiscard?: (entity: DashboardResource) => void;\n initialVariableIsSticky?: boolean;\n isReadonly: boolean;\n}\n\nexport const DashboardApp = (props: DashboardAppProps) => {\n const {\n dashboardResource,\n dashboardTitleComponent,\n emptyDashboardProps,\n onSave,\n onDiscard,\n initialVariableIsSticky,\n isReadonly,\n } = props;\n\n const chartsTheme = useChartsTheme();\n\n const { setEditMode } = useEditMode();\n const { dashboard, setDashboard } = useDashboard();\n const [originalDashboard, setOriginalDashboard] = useState<DashboardResource | undefined>(undefined);\n\n const { openDiscardChangesConfirmationDialog, closeDiscardChangesConfirmationDialog } =\n useDiscardChangesConfirmationDialog();\n\n const handleDiscardChanges = () => {\n // Reset to the original spec and exit edit mode\n if (originalDashboard) {\n setDashboard(originalDashboard);\n }\n setEditMode(false);\n closeDiscardChangesConfirmationDialog();\n if (onDiscard) {\n onDiscard(dashboard);\n }\n };\n\n const onEditButtonClick = () => {\n setEditMode(true);\n setOriginalDashboard(dashboard);\n };\n\n const onCancelButtonClick = () => {\n // check if dashboard has been modified\n if (JSON.stringify(dashboard) === JSON.stringify(originalDashboard)) {\n setEditMode(false);\n } else {\n openDiscardChangesConfirmationDialog({\n onDiscardChanges: () => {\n handleDiscardChanges();\n },\n onCancel: () => {\n closeDiscardChangesConfirmationDialog();\n },\n });\n }\n };\n\n return (\n <Box\n sx={{\n flexGrow: 1,\n overflowX: 'hidden',\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n <DashboardToolbar\n dashboardName={dashboardResource.metadata.name}\n dashboardTitleComponent={dashboardTitleComponent}\n initialVariableIsSticky={initialVariableIsSticky}\n onSave={onSave}\n isReadonly={isReadonly}\n onEditButtonClick={onEditButtonClick}\n onCancelButtonClick={onCancelButtonClick}\n />\n <Box sx={{ padding: (theme) => theme.spacing(2), height: '100%' }}>\n <ErrorBoundary FallbackComponent={ErrorAlert}>\n <Dashboard\n emptyDashboardProps={{\n onEditButtonClick,\n ...emptyDashboardProps,\n }}\n />\n </ErrorBoundary>\n <ChartsProvider chartsTheme={chartsTheme} enablePinning={false}>\n <PanelDrawer />\n </ChartsProvider>\n <PanelGroupDialog />\n <DeletePanelGroupDialog />\n <DeletePanelDialog />\n <DashboardDiscardChangesConfirmationDialog />\n <EditJsonDialog />\n <SaveChangesConfirmationDialog />\n </Box>\n </Box>\n );\n};\n"],"names":["useState","Box","ChartsProvider","ErrorAlert","ErrorBoundary","useChartsTheme","PanelDrawer","Dashboard","PanelGroupDialog","DeletePanelGroupDialog","DashboardDiscardChangesConfirmationDialog","DashboardToolbar","DeletePanelDialog","EditJsonDialog","SaveChangesConfirmationDialog","useDashboard","useDiscardChangesConfirmationDialog","useEditMode","DashboardApp","props","dashboardResource","dashboardTitleComponent","emptyDashboardProps","onSave","onDiscard","initialVariableIsSticky","isReadonly","chartsTheme","setEditMode","dashboard","setDashboard","originalDashboard","setOriginalDashboard","undefined","openDiscardChangesConfirmationDialog","closeDiscardChangesConfirmationDialog","handleDiscardChanges","onEditButtonClick","onCancelButtonClick","JSON","stringify","onDiscardChanges","onCancel","sx","flexGrow","overflowX","overflowY","display","flexDirection","dashboardName","metadata","name","padding","theme","spacing","height","FallbackComponent","enablePinning"],"mappings":"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"}
@@ -1,9 +1,10 @@
1
1
  /// <reference types="react" />
2
2
  import { BoxProps } from '@mui/material';
3
- import { DatasourceStoreProviderProps } from '../../context';
3
+ import { DatasourceStoreProviderProps, TemplateVariableProviderProps } from '../../context';
4
4
  import { DashboardAppProps } from './DashboardApp';
5
5
  export interface ViewDashboardProps extends Omit<BoxProps, 'children'>, DashboardAppProps {
6
6
  datasourceApi: DatasourceStoreProviderProps['datasourceApi'];
7
+ externalVariableDefinitions?: TemplateVariableProviderProps['externalVariableDefinitions'];
7
8
  isEditing?: boolean;
8
9
  }
9
10
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ViewDashboard.d.ts","sourceRoot":"","sources":["../../../src/views/ViewDashboard/ViewDashboard.tsx"],"names":[],"mappings":";AAaA,OAAO,EAAO,QAAQ,EAAE,MAAM,eAAe,CAAC;AAI9C,OAAO,EAGL,4BAA4B,EAE7B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAgB,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEjE,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,iBAAiB;IACvF,aAAa,EAAE,4BAA4B,CAAC,eAAe,CAAC,CAAC;IAC7D,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,eA2DtD"}
1
+ {"version":3,"file":"ViewDashboard.d.ts","sourceRoot":"","sources":["../../../src/views/ViewDashboard/ViewDashboard.tsx"],"names":[],"mappings":";AAaA,OAAO,EAAO,QAAQ,EAAE,MAAM,eAAe,CAAC;AAI9C,OAAO,EAGL,4BAA4B,EAE5B,6BAA6B,EAC9B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAgB,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEjE,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,iBAAiB;IACvF,aAAa,EAAE,4BAA4B,CAAC,eAAe,CAAC,CAAC;IAC7D,2BAA2B,CAAC,EAAE,6BAA6B,CAAC,6BAA6B,CAAC,CAAC;IAC3F,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,eA+DtD"}
@@ -20,14 +20,14 @@ import { DashboardApp } from './DashboardApp';
20
20
  /**
21
21
  * The View for displaying a Dashboard, along with the UI for selecting variable values.
22
22
  */ export function ViewDashboard(props) {
23
- const { dashboardResource , datasourceApi , dashboardTitleComponent , emptyDashboardProps , onSave , onDiscard , initialVariableIsSticky , isReadonly , isEditing , sx , ...others } = props;
23
+ const { dashboardResource , datasourceApi , externalVariableDefinitions , dashboardTitleComponent , emptyDashboardProps , onSave , onDiscard , initialVariableIsSticky , isReadonly , isEditing , sx , ...others } = props;
24
24
  const { spec } = dashboardResource;
25
25
  var _duration;
26
26
  const dashboardDuration = (_duration = spec.duration) !== null && _duration !== void 0 ? _duration : DEFAULT_DASHBOARD_DURATION;
27
27
  var _refreshInterval;
28
- const dashhboardRefreshInterval = (_refreshInterval = spec.refreshInterval) !== null && _refreshInterval !== void 0 ? _refreshInterval : DEFAULT_REFRESH_INTERVAL;
28
+ const dashboardRefreshInterval = (_refreshInterval = spec.refreshInterval) !== null && _refreshInterval !== void 0 ? _refreshInterval : DEFAULT_REFRESH_INTERVAL;
29
29
  const initialTimeRange = useInitialTimeRange(dashboardDuration);
30
- const initialRefreshInterval = useInitialRefreshInterval(dashhboardRefreshInterval);
30
+ const initialRefreshInterval = useInitialRefreshInterval(dashboardRefreshInterval);
31
31
  return /*#__PURE__*/ _jsx(DatasourceStoreProvider, {
32
32
  dashboardResource: dashboardResource,
33
33
  datasourceApi: datasourceApi,
@@ -42,6 +42,7 @@ import { DashboardApp } from './DashboardApp';
42
42
  enabledURLParams: true,
43
43
  children: /*#__PURE__*/ _jsx(TemplateVariableProvider, {
44
44
  initialVariableDefinitions: spec.variables,
45
+ externalVariableDefinitions: externalVariableDefinitions,
45
46
  children: /*#__PURE__*/ _jsx(Box, {
46
47
  sx: combineSx({
47
48
  display: 'flex',