@perses-dev/dashboards 0.0.0-snapshot-panel-extra-content-2-2767e21 → 0.0.0-snapshot-panel-extra-content-3-17f9c42

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 (53) hide show
  1. package/dist/cjs/components/GridLayout/GridItemContent.js +2 -1
  2. package/dist/cjs/components/Panel/Panel.js +5 -2
  3. package/dist/cjs/components/SaveDashboardButton/SaveDashboardButton.js +3 -1
  4. package/dist/cjs/components/Variables/EditVariablesButton.js +2 -0
  5. package/dist/cjs/components/Variables/TemplateVariable.js +20 -16
  6. package/dist/cjs/components/Variables/VariableEditor.js +255 -94
  7. package/dist/cjs/components/Variables/VariableList.js +38 -18
  8. package/dist/cjs/context/TemplateVariableProvider/TemplateVariableProvider.js +71 -24
  9. package/dist/cjs/context/TemplateVariableProvider/hydrationUtils.js +55 -5
  10. package/dist/cjs/context/TemplateVariableProvider/utils.js +39 -7
  11. package/dist/cjs/views/ViewDashboard/ViewDashboard.js +4 -3
  12. package/dist/components/GridLayout/GridItemContent.d.ts.map +1 -1
  13. package/dist/components/GridLayout/GridItemContent.js +2 -1
  14. package/dist/components/GridLayout/GridItemContent.js.map +1 -1
  15. package/dist/components/Panel/Panel.d.ts +13 -1
  16. package/dist/components/Panel/Panel.d.ts.map +1 -1
  17. package/dist/components/Panel/Panel.js +5 -2
  18. package/dist/components/Panel/Panel.js.map +1 -1
  19. package/dist/components/SaveDashboardButton/SaveDashboardButton.d.ts.map +1 -1
  20. package/dist/components/SaveDashboardButton/SaveDashboardButton.js +3 -1
  21. package/dist/components/SaveDashboardButton/SaveDashboardButton.js.map +1 -1
  22. package/dist/components/Variables/EditVariablesButton.d.ts.map +1 -1
  23. package/dist/components/Variables/EditVariablesButton.js +3 -1
  24. package/dist/components/Variables/EditVariablesButton.js.map +1 -1
  25. package/dist/components/Variables/TemplateVariable.d.ts +2 -1
  26. package/dist/components/Variables/TemplateVariable.d.ts.map +1 -1
  27. package/dist/components/Variables/TemplateVariable.js +20 -16
  28. package/dist/components/Variables/TemplateVariable.js.map +1 -1
  29. package/dist/components/Variables/VariableEditor.d.ts +7 -0
  30. package/dist/components/Variables/VariableEditor.d.ts.map +1 -1
  31. package/dist/components/Variables/VariableEditor.js +247 -92
  32. package/dist/components/Variables/VariableEditor.js.map +1 -1
  33. package/dist/components/Variables/VariableList.d.ts +5 -0
  34. package/dist/components/Variables/VariableList.d.ts.map +1 -1
  35. package/dist/components/Variables/VariableList.js +31 -17
  36. package/dist/components/Variables/VariableList.js.map +1 -1
  37. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.d.ts +39 -10
  38. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.d.ts.map +1 -1
  39. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.js +76 -27
  40. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.js.map +1 -1
  41. package/dist/context/TemplateVariableProvider/hydrationUtils.d.ts +9 -2
  42. package/dist/context/TemplateVariableProvider/hydrationUtils.d.ts.map +1 -1
  43. package/dist/context/TemplateVariableProvider/hydrationUtils.js +60 -5
  44. package/dist/context/TemplateVariableProvider/hydrationUtils.js.map +1 -1
  45. package/dist/context/TemplateVariableProvider/utils.d.ts +27 -2
  46. package/dist/context/TemplateVariableProvider/utils.d.ts.map +1 -1
  47. package/dist/context/TemplateVariableProvider/utils.js +46 -4
  48. package/dist/context/TemplateVariableProvider/utils.js.map +1 -1
  49. package/dist/views/ViewDashboard/ViewDashboard.d.ts +2 -1
  50. package/dist/views/ViewDashboard/ViewDashboard.d.ts.map +1 -1
  51. package/dist/views/ViewDashboard/ViewDashboard.js +4 -3
  52. package/dist/views/ViewDashboard/ViewDashboard.js.map +1 -1
  53. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Variables/VariableList.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 { Box } from '@mui/material';\nimport { VariableDefinition } from '@perses-dev/core';\nimport { useTemplateVariableDefinitions } from '../../context';\nimport { TemplateVariable } from './TemplateVariable';\n\nconst VARIABLE_INPUT_MIN_WIDTH = '120px';\nconst VARIABLE_INPUT_MAX_WIDTH = '240px';\n\nexport function TemplateVariableList() {\n const variableDefinitions: VariableDefinition[] = useTemplateVariableDefinitions();\n\n return (\n <>\n {variableDefinitions.map((v) => (\n <Box\n key={v.spec.name}\n display={v.spec.display?.hidden ? 'none' : undefined}\n minWidth={VARIABLE_INPUT_MIN_WIDTH}\n maxWidth={VARIABLE_INPUT_MAX_WIDTH}\n marginBottom={1}\n marginRight={1}\n data-testid=\"template-variable\"\n >\n <TemplateVariable key={v.spec.name} name={v.spec.name} />\n </Box>\n ))}\n </>\n );\n}\n"],"names":["Box","useTemplateVariableDefinitions","TemplateVariable","VARIABLE_INPUT_MIN_WIDTH","VARIABLE_INPUT_MAX_WIDTH","TemplateVariableList","variableDefinitions","map","v","display","spec","hidden","undefined","minWidth","maxWidth","marginBottom","marginRight","data-testid","name"],"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,GAAG,QAAQ,eAAe,CAAC;AAEpC,SAASC,8BAA8B,QAAQ,eAAe,CAAC;AAC/D,SAASC,gBAAgB,QAAQ,oBAAoB,CAAC;AAEtD,MAAMC,wBAAwB,GAAG,OAAO,AAAC;AACzC,MAAMC,wBAAwB,GAAG,OAAO,AAAC;AAEzC,OAAO,SAASC,oBAAoB,GAAG;IACrC,MAAMC,mBAAmB,GAAyBL,8BAA8B,EAAE,AAAC;IAEnF,qBACE;kBACGK,mBAAmB,CAACC,GAAG,CAAC,CAACC,CAAC;gBAGdA,GAAc;0BAFzB,OAAA,KAACR,GAAG;gBAEFS,OAAO,EAAED,CAAAA,CAAAA,GAAc,GAAdA,CAAC,CAACE,IAAI,CAACD,OAAO,cAAdD,GAAc,WAAQ,GAAtBA,KAAAA,CAAsB,GAAtBA,GAAc,CAAEG,MAAM,CAAA,GAAG,MAAM,GAAGC,SAAS;gBACpDC,QAAQ,EAAEV,wBAAwB;gBAClCW,QAAQ,EAAEV,wBAAwB;gBAClCW,YAAY,EAAE,CAAC;gBACfC,WAAW,EAAE,CAAC;gBACdC,aAAW,EAAC,mBAAmB;0BAE/B,cAAA,KAACf,gBAAgB;oBAAmBgB,IAAI,EAAEV,CAAC,CAACE,IAAI,CAACQ,IAAI;mBAA9BV,CAAC,CAACE,IAAI,CAACQ,IAAI,CAAuB;eARpDV,CAAC,CAACE,IAAI,CAACQ,IAAI,CASZ,CAAA;SACP,CAAC;MACD,CACH;AACJ,CAAC"}
1
+ {"version":3,"sources":["../../../src/components/Variables/VariableList.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 { Box } from '@mui/material';\nimport { VariableDefinition, VariableSpec } from '@perses-dev/core';\nimport {\n ExternalVariableDefinition,\n useTemplateExternalVariableDefinitions,\n useTemplateVariable,\n useTemplateVariableDefinitions,\n} from '../../context';\nimport { TemplateVariable } from './TemplateVariable';\n\nconst VARIABLE_INPUT_MIN_WIDTH = '120px';\nconst VARIABLE_INPUT_MAX_WIDTH = '240px';\n\nexport function TemplateVariableList() {\n const variableDefinitions: VariableDefinition[] = useTemplateVariableDefinitions();\n const externalVariableDefinitions: ExternalVariableDefinition[] = useTemplateExternalVariableDefinitions();\n\n return (\n <>\n {externalVariableDefinitions\n .slice()\n .reverse() // We reverse to have the most prioritized on top\n .map((def) =>\n def.definitions.map((v) => (\n <TemplateVariableListItem key={v.spec.name + def.source} spec={v.spec} source={def.source} />\n ))\n )}\n {variableDefinitions.map((v) => (\n <TemplateVariableListItem key={v.spec.name} spec={v.spec} />\n ))}\n </>\n );\n}\n\nexport function TemplateVariableListItem({ spec, source }: { spec: VariableSpec; source?: string }) {\n const ctx = useTemplateVariable(spec.name, source);\n return (\n <Box\n key={spec.name + source ?? ''}\n display={ctx.state?.overridden || spec.display?.hidden ? 'none' : undefined}\n minWidth={VARIABLE_INPUT_MIN_WIDTH}\n maxWidth={VARIABLE_INPUT_MAX_WIDTH}\n marginBottom={1}\n marginRight={1}\n data-testid=\"template-variable\"\n >\n <TemplateVariable key={spec.name + source ?? ''} name={spec.name} source={source} />\n </Box>\n );\n}\n"],"names":["Box","useTemplateExternalVariableDefinitions","useTemplateVariable","useTemplateVariableDefinitions","TemplateVariable","VARIABLE_INPUT_MIN_WIDTH","VARIABLE_INPUT_MAX_WIDTH","TemplateVariableList","variableDefinitions","externalVariableDefinitions","slice","reverse","map","def","definitions","v","TemplateVariableListItem","spec","source","name","ctx","display","state","overridden","hidden","undefined","minWidth","maxWidth","marginBottom","marginRight","data-testid"],"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,GAAG,QAAQ,eAAe,CAAC;AAEpC,SAEEC,sCAAsC,EACtCC,mBAAmB,EACnBC,8BAA8B,QACzB,eAAe,CAAC;AACvB,SAASC,gBAAgB,QAAQ,oBAAoB,CAAC;AAEtD,MAAMC,wBAAwB,GAAG,OAAO,AAAC;AACzC,MAAMC,wBAAwB,GAAG,OAAO,AAAC;AAEzC,OAAO,SAASC,oBAAoB,GAAG;IACrC,MAAMC,mBAAmB,GAAyBL,8BAA8B,EAAE,AAAC;IACnF,MAAMM,2BAA2B,GAAiCR,sCAAsC,EAAE,AAAC;IAE3G,qBACE;;YACGQ,2BAA2B,CACzBC,KAAK,EAAE,CACPC,OAAO,EAAE,CAAC,iDAAiD;aAC3DC,GAAG,CAAC,CAACC,GAAG,GACPA,GAAG,CAACC,WAAW,CAACF,GAAG,CAAC,CAACG,CAAC,iBACpB,KAACC,wBAAwB;wBAAgCC,IAAI,EAAEF,CAAC,CAACE,IAAI;wBAAEC,MAAM,EAAEL,GAAG,CAACK,MAAM;uBAA1DH,CAAC,CAACE,IAAI,CAACE,IAAI,GAAGN,GAAG,CAACK,MAAM,CAAsC,AAC9F,CAAC,CACH;YACFV,mBAAmB,CAACI,GAAG,CAAC,CAACG,CAAC,iBACzB,KAACC,wBAAwB;oBAAmBC,IAAI,EAAEF,CAAC,CAACE,IAAI;mBAAzBF,CAAC,CAACE,IAAI,CAACE,IAAI,CAAkB,AAC7D,CAAC;;MACD,CACH;AACJ,CAAC;AAED,OAAO,SAASH,wBAAwB,CAAC,EAAEC,IAAI,CAAA,EAAEC,MAAM,CAAA,EAA2C,EAAE;QAKrFE,GAAS,EAAgBH,IAAY;IAJlD,MAAMG,GAAG,GAAGlB,mBAAmB,CAACe,IAAI,CAACE,IAAI,EAAED,MAAM,CAAC,AAAC;QAWxBD,IAAkB,EARpCA,IAAkB;IAF3B,qBACE,KAACjB,GAAG;QAEFqB,OAAO,EAAED,CAAAA,CAAAA,GAAS,GAATA,GAAG,CAACE,KAAK,cAATF,GAAS,WAAY,GAArBA,KAAAA,CAAqB,GAArBA,GAAS,CAAEG,UAAU,CAAA,IAAIN,CAAAA,CAAAA,IAAY,GAAZA,IAAI,CAACI,OAAO,cAAZJ,IAAY,WAAQ,GAApBA,KAAAA,CAAoB,GAApBA,IAAY,CAAEO,MAAM,CAAA,GAAG,MAAM,GAAGC,SAAS;QAC3EC,QAAQ,EAAErB,wBAAwB;QAClCsB,QAAQ,EAAErB,wBAAwB;QAClCsB,YAAY,EAAE,CAAC;QACfC,WAAW,EAAE,CAAC;QACdC,aAAW,EAAC,mBAAmB;kBAE/B,cAAA,KAAC1B,gBAAgB;YAAgCe,IAAI,EAAEF,IAAI,CAACE,IAAI;YAAED,MAAM,EAAEA,MAAM;WAAzDD,CAAAA,IAAkB,GAAlBA,IAAI,CAACE,IAAI,GAAGD,MAAM,cAAlBD,IAAkB,cAAlBA,IAAkB,GAAI,EAAE,CAAqC;OAR/EA,CAAAA,IAAkB,GAAlBA,IAAI,CAACE,IAAI,GAAGD,MAAM,cAAlBD,IAAkB,cAAlBA,IAAkB,GAAI,EAAE,CASzB,CACN;AACJ,CAAC"}
@@ -1,12 +1,13 @@
1
1
  /// <reference types="react" />
2
- import { VariableStateMap, VariableState, VariableOption } from '@perses-dev/plugin-system';
2
+ import { VariableStateMap, VariableState, VariableStoreStateMap, VariableOption } from '@perses-dev/plugin-system';
3
3
  import { VariableName, VariableValue, VariableDefinition } from '@perses-dev/core';
4
4
  declare type TemplateVariableStore = {
5
5
  variableDefinitions: VariableDefinition[];
6
- variableState: VariableStateMap;
7
- setVariableValue: (variableName: VariableName, value: VariableValue) => void;
8
- setVariableOptions: (name: VariableName, options: VariableOption[]) => void;
9
- setVariableLoading: (name: VariableName, loading: boolean) => void;
6
+ externalVariableDefinitions: ExternalVariableDefinition[];
7
+ variableState: VariableStoreStateMap;
8
+ setVariableValue: (variableName: VariableName, value: VariableValue, source?: string) => void;
9
+ setVariableOptions: (name: VariableName, options: VariableOption[], source?: string) => void;
10
+ setVariableLoading: (name: VariableName, loading: boolean, source?: string) => void;
10
11
  setVariableDefinitions: (definitions: VariableDefinition[]) => void;
11
12
  setVariableDefaultValues: () => VariableDefinition[];
12
13
  getSavedVariablesStatus: () => {
@@ -14,15 +15,29 @@ declare type TemplateVariableStore = {
14
15
  modifiedVariableNames: string[];
15
16
  };
16
17
  };
18
+ export declare function useTemplateVariableStoreCtx(): Omit<Omit<import("zustand").StoreApi<TemplateVariableStore>, "setState"> & {
19
+ setState<A extends string | {
20
+ type: unknown;
21
+ }>(partial: TemplateVariableStore | Partial<TemplateVariableStore> | ((state: TemplateVariableStore) => TemplateVariableStore | Partial<TemplateVariableStore>), replace?: boolean | undefined, action?: A | undefined): void;
22
+ }, "setState"> & {
23
+ setState(nextStateOrUpdater: TemplateVariableStore | Partial<TemplateVariableStore> | ((state: import("immer/dist/internal").WritableDraft<TemplateVariableStore>) => void), shouldReplace?: boolean | undefined, action?: string | {
24
+ type: unknown;
25
+ } | undefined): void;
26
+ };
17
27
  export declare function useTemplateVariableValues(variableNames?: string[]): VariableStateMap;
18
- export declare function useTemplateVariable(name: string): {
28
+ /**
29
+ * Get the state and definition of a variable from the Template variables context.
30
+ * @param name name of the variable
31
+ * @param source if given, it searches in the external variables
32
+ */
33
+ export declare function useTemplateVariable(name: string, source?: string): {
19
34
  state: VariableState | undefined;
20
35
  definition: VariableDefinition | undefined;
21
36
  };
22
37
  export declare function useTemplateVariableActions(): {
23
- setVariableValue: (variableName: string, value: VariableValue) => void;
24
- setVariableLoading: (name: string, loading: boolean) => void;
25
- setVariableOptions: (name: string, options: VariableOption[]) => void;
38
+ setVariableValue: (variableName: string, value: VariableValue, source?: string | undefined) => void;
39
+ setVariableLoading: (name: string, loading: boolean, source?: string | undefined) => void;
40
+ setVariableOptions: (name: string, options: VariableOption[], source?: string | undefined) => void;
26
41
  setVariableDefinitions: (definitions: VariableDefinition[]) => void;
27
42
  setVariableDefaultValues: () => VariableDefinition[];
28
43
  getSavedVariablesStatus: () => {
@@ -31,11 +46,25 @@ export declare function useTemplateVariableActions(): {
31
46
  };
32
47
  };
33
48
  export declare function useTemplateVariableDefinitions(): VariableDefinition[];
49
+ export declare function useTemplateExternalVariableDefinitions(): ExternalVariableDefinition[];
34
50
  export declare function useTemplateVariableStore(): TemplateVariableStore;
51
+ export declare type ExternalVariableDefinition = {
52
+ source: string;
53
+ definitions: VariableDefinition[];
54
+ };
35
55
  export interface TemplateVariableProviderProps {
36
56
  children: React.ReactNode;
37
57
  initialVariableDefinitions?: VariableDefinition[];
58
+ /**
59
+ * The external variables allow you to give to the provider some additional variables, not defined in the dashboard and static.
60
+ * 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
61
+ * to modify their runtime value as any other variable.
62
+ * If one of the external variable has the same name as a local one, it will be marked as overridden.
63
+ * You can define one list of variable definition by source and as many source as you want.
64
+ * The order of the sources is important as first one will take precedence on the following ones, in case they have same names.
65
+ */
66
+ externalVariableDefinitions?: ExternalVariableDefinition[];
38
67
  }
39
- export declare function TemplateVariableProvider({ children, initialVariableDefinitions }: TemplateVariableProviderProps): JSX.Element;
68
+ export declare function TemplateVariableProvider({ children, initialVariableDefinitions, externalVariableDefinitions, }: TemplateVariableProviderProps): JSX.Element;
40
69
  export {};
41
70
  //# 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,EAA2B,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACrH,OAAO,EAAkC,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAKnH,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;IACpE,wBAAwB,EAAE,MAAM,kBAAkB,EAAE,CAAC;IACrD,uBAAuB,EAAE,MAAM;QAAE,uBAAuB,EAAE,OAAO,CAAC;QAAC,qBAAqB,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACtG,CAAC;AAaF,wBAAgB,yBAAyB,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,oBAqBjE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM;;;EAU/C;AAED,wBAAgB,0BAA0B;;;;;;;;;;EAYzC;AAED,wBAAgB,8BAA8B,yBAG7C;AAED,wBAAgB,wBAAwB,0BAGvC;AA0JD,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"}
1
+ {"version":3,"file":"TemplateVariableProvider.d.ts","sourceRoot":"","sources":["../../../src/context/TemplateVariableProvider/TemplateVariableProvider.tsx"],"names":[],"mappings":";AAkBA,OAAO,EAEL,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACrB,cAAc,EACf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAkC,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAKnH,aAAK,qBAAqB,GAAG;IAC3B,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;IAC1C,2BAA2B,EAAE,0BAA0B,EAAE,CAAC;IAC1D,aAAa,EAAE,qBAAqB,CAAC;IACrC,gBAAgB,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9F,kBAAkB,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7F,kBAAkB,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACpF,sBAAsB,EAAE,CAAC,WAAW,EAAE,kBAAkB,EAAE,KAAK,IAAI,CAAC;IACpE,wBAAwB,EAAE,MAAM,kBAAkB,EAAE,CAAC;IACrD,uBAAuB,EAAE,MAAM;QAAE,uBAAuB,EAAE,OAAO,CAAC;QAAC,qBAAqB,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACtG,CAAC;AAKF,wBAAgB,2BAA2B;;;;;;;;EAM1C;AAED,wBAAgB,yBAAyB,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,oBAoCjE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;;;EAWhE;AAED,wBAAgB,0BAA0B;;;;;;;;;;EAYzC;AAED,wBAAgB,8BAA8B,yBAG7C;AAED,wBAAgB,sCAAsC,iCAGrD;AAED,wBAAgB,wBAAwB,0BAGvC;AA0KD,oBAAY,0BAA0B,GAAG;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,kBAAkB,EAAE,CAAC;CACnC,CAAC;AAEF,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,0BAA0B,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAClD;;;;;;;OAOG;IACH,2BAA2B,CAAC,EAAE,0BAA0B,EAAE,CAAC;CAC5D;AAED,wBAAgB,wBAAwB,CAAC,EACvC,QAAQ,EACR,0BAA+B,EAC/B,2BAAgC,GACjC,EAAE,6BAA6B,eAY/B"}
@@ -18,11 +18,11 @@ import { devtools } from 'zustand/middleware';
18
18
  import produce from 'immer';
19
19
  import { TemplateVariableContext } from '@perses-dev/plugin-system';
20
20
  import { DEFAULT_ALL_VALUE as ALL_VALUE } from '@perses-dev/core';
21
- import { checkSavedDefaultVariableStatus } from './utils';
21
+ import { checkSavedDefaultVariableStatus, findVariableDefinitionByName, mergeVariableDefinitions } from './utils';
22
22
  import { hydrateTemplateVariableStates } from './hydrationUtils';
23
- import { useVariableQueryParams, getInitalValuesFromQueryParameters, getURLQueryParamName } from './query-params';
23
+ import { getInitalValuesFromQueryParameters, getURLQueryParamName, useVariableQueryParams } from './query-params';
24
24
  const TemplateVariableStoreContext = /*#__PURE__*/ createContext(undefined);
25
- function useTemplateVariableStoreCtx() {
25
+ export function useTemplateVariableStoreCtx() {
26
26
  const context = useContext(TemplateVariableStoreContext);
27
27
  if (!context) {
28
28
  throw new Error('TemplateVariableStoreContext not initialized');
@@ -31,29 +31,55 @@ function useTemplateVariableStoreCtx() {
31
31
  }
32
32
  export function useTemplateVariableValues(variableNames) {
33
33
  const store = useTemplateVariableStoreCtx();
34
- const state = useStore(store, (s)=>{
35
- const names = variableNames !== null && variableNames !== void 0 ? variableNames : Object.keys(s.variableState);
34
+ return useStore(store, (s)=>{
36
35
  const vars = {};
36
+ // Collect values of local variables, from the variable state
37
+ const names = variableNames !== null && variableNames !== void 0 ? variableNames : s.variableDefinitions.map((value)=>value.spec.name);
37
38
  names.forEach((name)=>{
38
- const varState = s.variableState[name];
39
- if (!varState) {
39
+ const varState = s.variableState.get({
40
+ name
41
+ });
42
+ if (!varState || varState.overridden) {
40
43
  return;
41
44
  }
42
45
  vars[name] = varState;
43
46
  });
47
+ // Collect values of external variables, from the variable state
48
+ s.externalVariableDefinitions.forEach((d)=>{
49
+ const source = d.source;
50
+ d.definitions.forEach((value)=>{
51
+ const name = value.spec.name;
52
+ const varState = s.variableState.get({
53
+ name,
54
+ source
55
+ });
56
+ if (!varState || varState.overridden) {
57
+ return;
58
+ }
59
+ vars[name] = varState;
60
+ });
61
+ });
44
62
  return vars;
45
63
  }, (left, right)=>{
46
64
  return JSON.stringify(left) === JSON.stringify(right);
47
65
  });
48
- return state;
49
66
  }
50
- export function useTemplateVariable(name) {
67
+ /**
68
+ * Get the state and definition of a variable from the Template variables context.
69
+ * @param name name of the variable
70
+ * @param source if given, it searches in the external variables
71
+ */ export function useTemplateVariable(name, source) {
51
72
  const store = useTemplateVariableStoreCtx();
52
73
  return useStore(store, (s)=>{
53
- const variableState = s.variableState[name];
54
- const definition = s.variableDefinitions.find((v)=>v.spec.name === name);
74
+ var ref;
75
+ const state = s.variableState.get({
76
+ name,
77
+ source
78
+ });
79
+ const definitions = source ? (ref = s.externalVariableDefinitions.find((v)=>v.source === source)) === null || ref === void 0 ? void 0 : ref.definitions : s.variableDefinitions;
80
+ const definition = (definitions || []).find((v)=>v.spec.name === name);
55
81
  return {
56
- state: variableState,
82
+ state,
57
83
  definition
58
84
  };
59
85
  });
@@ -75,6 +101,10 @@ export function useTemplateVariableDefinitions() {
75
101
  const store = useTemplateVariableStoreCtx();
76
102
  return useStore(store, (s)=>s.variableDefinitions);
77
103
  }
104
+ export function useTemplateExternalVariableDefinitions() {
105
+ const store = useTemplateVariableStoreCtx();
106
+ return useStore(store, (s)=>s.externalVariableDefinitions);
107
+ }
78
108
  export function useTemplateVariableStore() {
79
109
  const store = useTemplateVariableStoreCtx();
80
110
  return useStore(store);
@@ -82,6 +112,7 @@ export function useTemplateVariableStore() {
82
112
  function PluginProvider({ children }) {
83
113
  const originalValues = useTemplateVariableValues();
84
114
  const definitions = useTemplateVariableDefinitions();
115
+ const externalDefinitions = useTemplateExternalVariableDefinitions();
85
116
  const values = useMemo(()=>{
86
117
  const contextValues = {};
87
118
  // This will loop through all the current variables values
@@ -92,7 +123,7 @@ function PluginProvider({ children }) {
92
123
  ...originalValues[name]
93
124
  };
94
125
  if (v.value === ALL_VALUE) {
95
- const definition = definitions.find((d)=>d.spec.name === name);
126
+ const definition = findVariableDefinitionByName(name, definitions, externalDefinitions);
96
127
  // If the variable is a list variable and has a custom all value, then use that value instead
97
128
  if ((definition === null || definition === void 0 ? void 0 : definition.kind) === 'ListVariable' && definition.spec.custom_all_value) {
98
129
  v.value = definition.spec.custom_all_value;
@@ -107,7 +138,8 @@ function PluginProvider({ children }) {
107
138
  return contextValues;
108
139
  }, [
109
140
  originalValues,
110
- definitions
141
+ definitions,
142
+ externalDefinitions
111
143
  ]);
112
144
  return /*#__PURE__*/ _jsx(TemplateVariableContext.Provider, {
113
145
  value: {
@@ -116,40 +148,50 @@ function PluginProvider({ children }) {
116
148
  children: children
117
149
  });
118
150
  }
119
- function createTemplateVariableSrvStore({ initialVariableDefinitions =[] , queryParams }) {
151
+ function createTemplateVariableSrvStore({ initialVariableDefinitions =[] , externalVariableDefinitions =[] , queryParams }) {
120
152
  const initialParams = getInitalValuesFromQueryParameters(queryParams ? queryParams[0] : {});
121
153
  const store = createStore()(devtools(immer((set, get)=>{
122
154
  return {
123
- variableState: hydrateTemplateVariableStates(initialVariableDefinitions, initialParams),
155
+ variableState: hydrateTemplateVariableStates(initialVariableDefinitions, initialParams, externalVariableDefinitions),
124
156
  variableDefinitions: initialVariableDefinitions,
157
+ externalVariableDefinitions: externalVariableDefinitions,
125
158
  setVariableDefinitions (definitions) {
126
159
  set((state)=>{
127
160
  state.variableDefinitions = definitions;
128
- state.variableState = hydrateTemplateVariableStates(definitions, initialParams);
161
+ state.variableState = hydrateTemplateVariableStates(definitions, initialParams, externalVariableDefinitions);
129
162
  }, false, '[Variables] setVariableDefinitions' // Used for action name in Redux devtools
130
163
  );
131
164
  },
132
- setVariableOptions (name, options) {
165
+ setVariableOptions (name, options, source) {
133
166
  set((state)=>{
134
- const varState = state.variableState[name];
167
+ const varState = state.variableState.get({
168
+ name,
169
+ source
170
+ });
135
171
  if (!varState) {
136
172
  return;
137
173
  }
138
174
  varState.options = options;
139
175
  }, false, '[Variables] setVariableOptions');
140
176
  },
141
- setVariableLoading (name, loading) {
177
+ setVariableLoading (name, loading, source) {
142
178
  set((state)=>{
143
- const varState = state.variableState[name];
179
+ const varState = state.variableState.get({
180
+ name,
181
+ source
182
+ });
144
183
  if (!varState) {
145
184
  return;
146
185
  }
147
186
  varState.loading = loading;
148
187
  }, false, '[Variables] setVariableLoading');
149
188
  },
150
- setVariableValue: (name, value)=>set((state)=>{
189
+ setVariableValue: (name, value, source)=>set((state)=>{
151
190
  let val = value;
152
- const varState = state.variableState[name];
191
+ const varState = state.variableState.get({
192
+ name,
193
+ source
194
+ });
153
195
  if (!varState) {
154
196
  return;
155
197
  }
@@ -174,8 +216,11 @@ function createTemplateVariableSrvStore({ initialVariableDefinitions =[] , query
174
216
  const variableState = get().variableState;
175
217
  const updatedVariables = produce(variableDefinitions, (draft)=>{
176
218
  draft.forEach((variable, index)=>{
219
+ const name = variable.spec.name;
177
220
  if (variable.kind === 'ListVariable') {
178
- const currentVariable = variableState[variable.spec.name];
221
+ const currentVariable = variableState.get({
222
+ name
223
+ });
179
224
  if ((currentVariable === null || currentVariable === void 0 ? void 0 : currentVariable.value) !== undefined) {
180
225
  draft[index] = {
181
226
  kind: 'ListVariable',
@@ -185,7 +230,9 @@ function createTemplateVariableSrvStore({ initialVariableDefinitions =[] , query
185
230
  };
186
231
  }
187
232
  } else if (variable.kind === 'TextVariable') {
188
- const currentVariable1 = variableState[variable.spec.name];
233
+ const currentVariable1 = variableState.get({
234
+ name
235
+ });
189
236
  const currentVariableValue = typeof (currentVariable1 === null || currentVariable1 === void 0 ? void 0 : currentVariable1.value) === 'string' ? currentVariable1.value : '';
190
237
  if ((currentVariable1 === null || currentVariable1 === void 0 ? void 0 : currentVariable1.value) !== undefined) {
191
238
  draft[index] = {
@@ -210,10 +257,12 @@ function createTemplateVariableSrvStore({ initialVariableDefinitions =[] , query
210
257
  })));
211
258
  return store;
212
259
  }
213
- export function TemplateVariableProvider({ children , initialVariableDefinitions =[] }) {
214
- const queryParams = useVariableQueryParams(initialVariableDefinitions);
260
+ export function TemplateVariableProvider({ children , initialVariableDefinitions =[] , externalVariableDefinitions =[] }) {
261
+ const allVariableDefs = mergeVariableDefinitions(initialVariableDefinitions, externalVariableDefinitions);
262
+ const queryParams = useVariableQueryParams(allVariableDefs);
215
263
  const [store] = useState(createTemplateVariableSrvStore({
216
264
  initialVariableDefinitions,
265
+ externalVariableDefinitions,
217
266
  queryParams
218
267
  }));
219
268
  return /*#__PURE__*/ _jsx(TemplateVariableStoreContext.Provider, {
@@ -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