synapse-react-client 4.0.20 → 4.0.22

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 (176) hide show
  1. package/dist/SWC.index.d.ts +1 -0
  2. package/dist/SWC.index.d.ts.map +1 -1
  3. package/dist/SWC.index.js +2 -1
  4. package/dist/SWC.index.js.map +1 -1
  5. package/dist/components/CardContainer/CardConfiguration.d.ts +2 -0
  6. package/dist/components/CardContainer/CardConfiguration.d.ts.map +1 -1
  7. package/dist/components/CardContainer/CardContainer.d.ts.map +1 -1
  8. package/dist/components/CardContainer/CardContainer.js +44 -50
  9. package/dist/components/CardContainer/CardContainer.js.map +1 -1
  10. package/dist/components/CardContainerLogic/CardContainerLogic.d.ts +14 -0
  11. package/dist/components/CardContainerLogic/CardContainerLogic.d.ts.map +1 -1
  12. package/dist/components/CardContainerLogic/CardContainerLogic.js +64 -40
  13. package/dist/components/CardContainerLogic/CardContainerLogic.js.map +1 -1
  14. package/dist/components/ChallengeSubmission/ChallengeSubmissionStepper.js +1 -1
  15. package/dist/components/ChallengeSubmission/ChallengeSubmissionStepper.js.map +1 -1
  16. package/dist/components/DataExplorer/DataExplorer.css +1 -1
  17. package/dist/components/DataExplorer/DataExplorer.module.js +16 -16
  18. package/dist/components/DataExplorer/DataExplorer.module.js.map +1 -1
  19. package/dist/components/DataExplorer/DataExplorer.module.scss +26 -7
  20. package/dist/components/DataGrid/DataGrid.d.ts +1 -0
  21. package/dist/components/DataGrid/DataGrid.d.ts.map +1 -1
  22. package/dist/components/DataGrid/DataGrid.js +72 -72
  23. package/dist/components/DataGrid/DataGrid.js.map +1 -1
  24. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  25. package/dist/components/DataGrid/SynapseGrid.js +209 -206
  26. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  27. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.d.ts +6 -3
  28. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.d.ts.map +1 -1
  29. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js +54 -46
  30. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js.map +1 -1
  31. package/dist/components/DataGrid/hooks/useColumnResizeHandles.d.ts.map +1 -1
  32. package/dist/components/DataGrid/hooks/useColumnResizeHandles.js +1 -1
  33. package/dist/components/DataGrid/hooks/useColumnResizeHandles.js.map +1 -1
  34. package/dist/components/DataGrid/useDataGridWebsocket.d.ts.map +1 -1
  35. package/dist/components/DataGrid/useDataGridWebsocket.js +68 -67
  36. package/dist/components/DataGrid/useDataGridWebsocket.js.map +1 -1
  37. package/dist/components/DataGrid/utils/columnFactory.d.ts +1 -0
  38. package/dist/components/DataGrid/utils/columnFactory.d.ts.map +1 -1
  39. package/dist/components/DataGrid/utils/columnFactory.js +5 -3
  40. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  41. package/dist/components/DataGrid/utils/modelColsToGrid.d.ts +1 -1
  42. package/dist/components/DataGrid/utils/modelColsToGrid.d.ts.map +1 -1
  43. package/dist/components/DataGrid/utils/modelColsToGrid.js +15 -14
  44. package/dist/components/DataGrid/utils/modelColsToGrid.js.map +1 -1
  45. package/dist/components/DataGrid/utils/normalizeWebsocketError.d.ts +7 -0
  46. package/dist/components/DataGrid/utils/normalizeWebsocketError.d.ts.map +1 -0
  47. package/dist/components/DataGrid/utils/normalizeWebsocketError.js +8 -0
  48. package/dist/components/DataGrid/utils/normalizeWebsocketError.js.map +1 -0
  49. package/dist/components/GenericCard/GenericCard.d.ts +2 -0
  50. package/dist/components/GenericCard/GenericCard.d.ts.map +1 -1
  51. package/dist/components/GenericCard/GenericCard.js +76 -64
  52. package/dist/components/GenericCard/GenericCard.js.map +1 -1
  53. package/dist/components/GenericCard/TableRowGenericCard.d.ts.map +1 -1
  54. package/dist/components/GenericCard/TableRowGenericCard.js +33 -25
  55. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  56. package/dist/components/Goals/Goals.d.ts +8 -0
  57. package/dist/components/Goals/Goals.d.ts.map +1 -1
  58. package/dist/components/Goals/Goals.js +54 -40
  59. package/dist/components/Goals/Goals.js.map +1 -1
  60. package/dist/components/Plot/SynapseSankeyPlot.css +1 -0
  61. package/dist/components/Plot/SynapseSankeyPlot.d.ts +44 -2
  62. package/dist/components/Plot/SynapseSankeyPlot.d.ts.map +1 -1
  63. package/dist/components/Plot/SynapseSankeyPlot.js +343 -38
  64. package/dist/components/Plot/SynapseSankeyPlot.js.map +1 -1
  65. package/dist/components/Plot/SynapseSankeyPlot.module.js +15 -0
  66. package/dist/components/Plot/SynapseSankeyPlot.module.js.map +1 -0
  67. package/dist/components/Plot/SynapseSankeyPlot.module.scss +63 -0
  68. package/dist/components/ProjectVisibilityChip/ProjectVisibilityChip.d.ts +9 -0
  69. package/dist/components/ProjectVisibilityChip/ProjectVisibilityChip.d.ts.map +1 -0
  70. package/dist/components/ProjectVisibilityChip/ProjectVisibilityChip.js +69 -0
  71. package/dist/components/ProjectVisibilityChip/ProjectVisibilityChip.js.map +1 -0
  72. package/dist/components/ProjectVisibilityChip/getProjectVisibilityFromACL.d.ts +13 -0
  73. package/dist/components/ProjectVisibilityChip/getProjectVisibilityFromACL.d.ts.map +1 -0
  74. package/dist/components/ProjectVisibilityChip/getProjectVisibilityFromACL.js +11 -0
  75. package/dist/components/ProjectVisibilityChip/getProjectVisibilityFromACL.js.map +1 -0
  76. package/dist/components/ProjectVisibilityChip/index.d.ts +5 -0
  77. package/dist/components/ProjectVisibilityChip/index.d.ts.map +1 -0
  78. package/dist/components/ProjectVisibilityChip/index.js +7 -0
  79. package/dist/components/ProjectVisibilityChip/index.js.map +1 -0
  80. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.d.ts.map +1 -1
  81. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js +1 -1
  82. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js.map +1 -1
  83. package/dist/components/QueryWrapperPlotNav/RowSetView.d.ts.map +1 -1
  84. package/dist/components/QueryWrapperPlotNav/RowSetView.js +9 -12
  85. package/dist/components/QueryWrapperPlotNav/RowSetView.js.map +1 -1
  86. package/dist/components/RssFeedCards/RssFeedCards.d.ts +7 -15
  87. package/dist/components/RssFeedCards/RssFeedCards.d.ts.map +1 -1
  88. package/dist/components/RssFeedCards/RssFeedCards.js +114 -123
  89. package/dist/components/RssFeedCards/RssFeedCards.js.map +1 -1
  90. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts +13 -12
  91. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts.map +1 -1
  92. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js +88 -77
  93. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
  94. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.d.ts.map +1 -1
  95. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js +63 -74
  96. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js.map +1 -1
  97. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.d.ts.map +1 -1
  98. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +72 -68
  99. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
  100. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts +27 -1
  101. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts.map +1 -1
  102. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js +47 -36
  103. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
  104. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +1 -1
  105. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
  106. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormReducer.d.ts +12 -12
  107. package/dist/components/TableColumnSchemaEditor/Validators/BooleanSchema.d.ts +4 -1
  108. package/dist/components/TableColumnSchemaEditor/Validators/BooleanSchema.d.ts.map +1 -1
  109. package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.d.ts +167 -517
  110. package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.d.ts.map +1 -1
  111. package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.js +65 -65
  112. package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.js.map +1 -1
  113. package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.d.ts +1 -1
  114. package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.d.ts.map +1 -1
  115. package/dist/components/TableColumnSchemaEditor/Validators/DoubleSchema.d.ts +1 -1
  116. package/dist/components/TableColumnSchemaEditor/Validators/DoubleSchema.d.ts.map +1 -1
  117. package/dist/components/TableColumnSchemaEditor/Validators/DoubleSchema.js +6 -13
  118. package/dist/components/TableColumnSchemaEditor/Validators/DoubleSchema.js.map +1 -1
  119. package/dist/components/TableColumnSchemaEditor/Validators/EntityIdSchema.d.ts +1 -1
  120. package/dist/components/TableColumnSchemaEditor/Validators/EntityIdSchema.d.ts.map +1 -1
  121. package/dist/components/TableColumnSchemaEditor/Validators/IntegerSchema.d.ts +1 -1
  122. package/dist/components/TableColumnSchemaEditor/Validators/IntegerSchema.d.ts.map +1 -1
  123. package/dist/components/TableColumnSchemaEditor/Validators/IntegerSchema.js +2 -2
  124. package/dist/components/TableColumnSchemaEditor/Validators/IntegerSchema.js.map +1 -1
  125. package/dist/components/TableColumnSchemaEditor/Validators/OptionalStringSchema.d.ts +1 -1
  126. package/dist/components/TableColumnSchemaEditor/Validators/OptionalStringSchema.d.ts.map +1 -1
  127. package/dist/components/TableColumnSchemaEditor/Validators/getZodSchemaForColumnType.d.ts +2 -2
  128. package/dist/components/TableColumnSchemaEditor/Validators/getZodSchemaForColumnType.d.ts.map +1 -1
  129. package/dist/components/TableColumnSchemaEditor/Validators/getZodSchemaForColumnType.js +15 -16
  130. package/dist/components/TableColumnSchemaEditor/Validators/getZodSchemaForColumnType.js.map +1 -1
  131. package/dist/components/UserCardList/UserCardList.d.ts +2 -20
  132. package/dist/components/UserCardList/UserCardList.d.ts.map +1 -1
  133. package/dist/components/UserCardList/UserCardList.js +49 -72
  134. package/dist/components/UserCardList/UserCardList.js.map +1 -1
  135. package/dist/components/UserCardList/UserCardListRotate.d.ts +13 -0
  136. package/dist/components/UserCardList/UserCardListRotate.d.ts.map +1 -1
  137. package/dist/components/UserCardList/UserCardListRotate.js +82 -57
  138. package/dist/components/UserCardList/UserCardListRotate.js.map +1 -1
  139. package/dist/mocks/mockSearchQueryData.js +2 -2
  140. package/dist/mocks/mockSearchQueryData.js.map +1 -1
  141. package/dist/mocks/msw/handlers/searchQueryHandlers.d.ts +1 -1
  142. package/dist/mocks/msw/handlers/searchQueryHandlers.d.ts.map +1 -1
  143. package/dist/mocks/msw/handlers/searchQueryHandlers.js +6 -3
  144. package/dist/mocks/msw/handlers/searchQueryHandlers.js.map +1 -1
  145. package/dist/mocks/query/mockUserCardTableQueryResultBundle.d.ts +13 -0
  146. package/dist/mocks/query/mockUserCardTableQueryResultBundle.d.ts.map +1 -1
  147. package/dist/mocks/query/mockUserCardTableQueryResultBundle.js +27 -0
  148. package/dist/mocks/query/mockUserCardTableQueryResultBundle.js.map +1 -1
  149. package/dist/style/abstracts/_cssVariables.scss +1 -0
  150. package/dist/style/components/_cards.scss +10 -0
  151. package/dist/style/components/_data-grid-extra.css +1 -1
  152. package/dist/style/components/_data-grid-extra.scss +7 -1
  153. package/dist/style/main.css +1 -1
  154. package/dist/synapse-client/SynapseClient.d.ts.map +1 -1
  155. package/dist/synapse-client/SynapseClient.js +497 -495
  156. package/dist/synapse-client/SynapseClient.js.map +1 -1
  157. package/dist/synapse-queries/KeyFactory.d.ts +1 -0
  158. package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
  159. package/dist/synapse-queries/KeyFactory.js +3 -0
  160. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  161. package/dist/synapse-queries/index.js +46 -44
  162. package/dist/synapse-queries/user/index.js +3 -3
  163. package/dist/synapse-queries/user/useUserBundle.d.ts +12 -0
  164. package/dist/synapse-queries/user/useUserBundle.d.ts.map +1 -1
  165. package/dist/synapse-queries/user/useUserBundle.js +50 -36
  166. package/dist/synapse-queries/user/useUserBundle.js.map +1 -1
  167. package/dist/tsconfig.build.tsbuildinfo +1 -1
  168. package/dist/utils/AppUtils/session/SessionInitializedGuard.d.ts +10 -5
  169. package/dist/utils/AppUtils/session/SessionInitializedGuard.d.ts.map +1 -1
  170. package/dist/utils/AppUtils/session/SessionInitializedGuard.js +13 -9
  171. package/dist/utils/AppUtils/session/SessionInitializedGuard.js.map +1 -1
  172. package/dist/utils/functions/SqlFunctions.d.ts +1 -1
  173. package/dist/utils/functions/SqlFunctions.d.ts.map +1 -1
  174. package/dist/utils/functions/SqlFunctions.js +1 -1
  175. package/dist/utils/functions/SqlFunctions.js.map +1 -1
  176. package/package.json +7 -5
@@ -1,21 +1,21 @@
1
1
  import { convertToConcreteEntityType as e } from "../../utils/functions/EntityTypeUtils.js";
2
- import { canHaveDefault as t, canHaveMaxListLength as n, canHaveRestrictedValues as ee, canHaveSize as r, configureFacetsForType as te, getAllowedColumnTypes as i, getColumnTypeFriendlyName as a, getFacetTypeFriendlyName as o, getMaxSizeForType as s } from "./TableColumnSchemaEditorUtils.js";
3
- import c from "./ColumnModelFormFields/MultiValueField.js";
4
- import l from "./ColumnModelFormFields/DefaultValueField.js";
5
- import { FieldWithRecommendedMinimum as u } from "./ColumnModelFormFields/FieldWithRecommendedMinimum.js";
6
- import { tableColumnSchemaFormDataAtom as d } from "./TableColumnSchemaFormReducer.js";
7
- import { HIERARCHY_VERTICAL_LINE_COMPONENT as f } from "./TableColumnSchemaForm.js";
8
- import { useMemo as p } from "react";
9
- import { isArray as m, isEmpty as h, isEqual as g } from "lodash-es";
10
- import { Box as _, Checkbox as v, FormControl as y, Link as b, MenuItem as x, Select as S, TextField as C, Tooltip as w } from "@mui/material";
11
- import { Fragment as T, jsx as E, jsxs as D } from "react/jsx-runtime";
12
- import { VIEW_CONCRETE_TYPE_VALUES as O } from "@sage-bionetworks/synapse-types";
13
- import { InfoTwoTone as k } from "@mui/icons-material";
14
- import { useAtomValue as A, useSetAtom as j } from "jotai";
15
- import M from "@mui/material/FormHelperText";
16
- import { selectAtom as ne } from "jotai/utils";
2
+ import { canHaveDefault as t, canHaveMaxListLength as n, canHaveRestrictedValues as r, canHaveSize as i, configureFacetsForType as a, getAllowedColumnTypes as o, getColumnTypeFriendlyName as s, getFacetTypeFriendlyName as ee, getFormDataValueAsNumber as te, getMaxListLengthForType as c, getMaxSizeForType as l } from "./TableColumnSchemaEditorUtils.js";
3
+ import u from "./ColumnModelFormFields/MultiValueField.js";
4
+ import ne from "./ColumnModelFormFields/DefaultValueField.js";
5
+ import { FieldWithRecommendedMinimum as d } from "./ColumnModelFormFields/FieldWithRecommendedMinimum.js";
6
+ import { tableColumnSchemaFormDataAtom as f } from "./TableColumnSchemaFormReducer.js";
7
+ import { HIERARCHY_VERTICAL_LINE_COMPONENT as p } from "./TableColumnSchemaForm.js";
8
+ import { useMemo as m } from "react";
9
+ import { isArray as h, isEmpty as g, isEqual as _ } from "lodash-es";
10
+ import { Box as v, Checkbox as re, FormControl as y, Link as ie, MenuItem as b, Select as x, TextField as S, Tooltip as C } from "@mui/material";
11
+ import { Fragment as w, jsx as T, jsxs as E } from "react/jsx-runtime";
12
+ import { VIEW_CONCRETE_TYPE_VALUES as D } from "@sage-bionetworks/synapse-types";
13
+ import { InfoTwoTone as O } from "@mui/icons-material";
14
+ import { useAtomValue as k, useSetAtom as ae } from "jotai";
15
+ import A from "@mui/material/FormHelperText";
16
+ import { selectAtom as j } from "jotai/utils";
17
17
  //#region src/components/TableColumnSchemaEditor/ColumnModelForm.tsx
18
- var re = {
18
+ var M = {
19
19
  height: "28px",
20
20
  fontSize: "12px"
21
21
  }, N = {
@@ -23,7 +23,7 @@ var re = {
23
23
  fontSize: "14px"
24
24
  };
25
25
  function P(e, t) {
26
- return e == null ? "" : m(e) ? e.map(String).join(", ") : e;
26
+ return e == null ? "" : h(e) ? e.map(String).join(", ") : e;
27
27
  }
28
28
  function F(e) {
29
29
  return !e || !e.property && !e.direction ? "" : `${e.property || "FREQUENCY"}_${e.direction || "DESC"}`;
@@ -38,31 +38,31 @@ function I(e) {
38
38
  }
39
39
  var L = !0;
40
40
  function R(R) {
41
- let { columnModelIndex: z, jsonSubColumnIndex: B, entityType: V, isDefaultColumn: H, disabled: U = !1, validationErrors: W = null, defaultAnnotationModel: G, originalColumnModel: K } = R, q = B != null, J = j(d), Y = O.includes(e(V)), X = A(p(() => ne(d, (e) => q ? e[z].jsonSubColumns[B] : e[z], g), [
41
+ let { columnModelIndex: z, jsonSubColumnIndex: B, entityType: V, isDefaultColumn: H, disabled: U = !1, validationErrors: W = null, defaultAnnotationModel: G, originalColumnModel: K } = R, q = B != null, J = ae(f), Y = D.includes(e(V)), X = k(m(() => j(f, (e) => q ? e[z].jsonSubColumns[B] : e[z], _), [
42
42
  z,
43
43
  q,
44
44
  B
45
- ])), ie = p(() => i(Y, q), [Y, q]), Z = p(() => te(X.columnType, q), [X.columnType, q]), Q = p(() => q ? re : N, [q]), $ = p(() => {
46
- if (W && m(W)) {
45
+ ])), oe = m(() => o(Y, q), [Y, q]), Z = m(() => a(X.columnType, q), [X.columnType, q]), Q = m(() => q ? M : N, [q]), $ = m(() => {
46
+ if (W && h(W)) {
47
47
  let e = {};
48
48
  return W.forEach((t) => {
49
- t.path && (e[t.path[t.path.length - 1]] = t.message);
49
+ t.path && (e[String(t.path[t.path.length - 1])] = t.message);
50
50
  }), e;
51
51
  }
52
52
  return {};
53
53
  }, [W]);
54
- return /* @__PURE__ */ D(T, { children: [/* @__PURE__ */ D(_, {
54
+ return /* @__PURE__ */ E(w, { children: [/* @__PURE__ */ E(v, {
55
55
  sx: {
56
56
  display: "grid",
57
57
  gridColumn: "1 / span 11",
58
58
  gridTemplateColumns: "subgrid"
59
59
  },
60
60
  children: [
61
- q && /* @__PURE__ */ E(_, {
61
+ q && /* @__PURE__ */ T(v, {
62
62
  sx: { gridColumn: "1 / span 1" },
63
- children: f
63
+ children: p
64
64
  }),
65
- /* @__PURE__ */ E(_, {
65
+ /* @__PURE__ */ T(v, {
66
66
  "data-testid": "ColumnModelForm",
67
67
  sx: {
68
68
  display: "flex",
@@ -70,7 +70,7 @@ function R(R) {
70
70
  gridColumn: q ? "2 / span 1" : " 1 / span 1",
71
71
  mt: q ? "0px" : "5px"
72
72
  },
73
- children: /* @__PURE__ */ E(v, {
73
+ children: /* @__PURE__ */ T(re, {
74
74
  checked: X.isSelected,
75
75
  inputProps: { "aria-label": "Select" },
76
76
  disabled: U,
@@ -83,12 +83,12 @@ function R(R) {
83
83
  }
84
84
  })
85
85
  }),
86
- /* @__PURE__ */ E(_, {
86
+ /* @__PURE__ */ T(v, {
87
87
  sx: {
88
88
  my: H ? "auto" : void 0,
89
89
  gridColumn: q ? "3 / span 1" : "2 / span 2"
90
90
  },
91
- children: H ? X.name : /* @__PURE__ */ E(C, {
91
+ children: H ? X.name : /* @__PURE__ */ T(S, {
92
92
  value: X.name,
93
93
  placeholder: q ? "Facet name" : "Column name",
94
94
  onChange: (e) => {
@@ -113,11 +113,11 @@ function R(R) {
113
113
  } }
114
114
  })
115
115
  }),
116
- /* @__PURE__ */ E(_, {
116
+ /* @__PURE__ */ T(v, {
117
117
  sx: { my: H ? "auto" : void 0 },
118
- children: H ? a(X.columnType) : /* @__PURE__ */ D(y, {
118
+ children: H ? s(X.columnType) : /* @__PURE__ */ E(y, {
119
119
  fullWidth: !0,
120
- children: [/* @__PURE__ */ E(S, {
120
+ children: [/* @__PURE__ */ T(x, {
121
121
  label: "Column Type",
122
122
  value: X.columnType,
123
123
  onChange: (e) => {
@@ -132,30 +132,30 @@ function R(R) {
132
132
  sx: Q,
133
133
  disabled: U,
134
134
  error: !!$.columnType,
135
- children: ie.map((e) => /* @__PURE__ */ E(x, {
135
+ children: oe.map((e) => /* @__PURE__ */ T(b, {
136
136
  value: e,
137
- children: a(e)
137
+ children: s(e)
138
138
  }, e))
139
- }), $.columnType && /* @__PURE__ */ E(M, {
139
+ }), $.columnType && /* @__PURE__ */ T(A, {
140
140
  color: "error.main",
141
141
  children: $.columnType
142
142
  })]
143
143
  })
144
144
  }),
145
- /* @__PURE__ */ E(_, {
145
+ /* @__PURE__ */ T(v, {
146
146
  sx: { my: H ? "auto" : void 0 },
147
- children: H ? X.maximumSize ?? "" : /* @__PURE__ */ E(u, {
147
+ children: H ? X.maximumSize ?? "" : /* @__PURE__ */ T(d, {
148
148
  value: X.maximumSize ?? "",
149
149
  originalValue: K?.maximumSize,
150
150
  recommendedValue: G?.maximumSize,
151
151
  columnType: X.columnType,
152
- disabled: U || !r(X.columnType),
152
+ disabled: U || !i(X.columnType),
153
153
  InputProps: {
154
154
  disableInjectingGlobalStyles: L,
155
155
  slotProps: { input: {
156
156
  "aria-label": "Maximum Size",
157
157
  min: 1,
158
- max: r(X.columnType) ? s(X.columnType) : void 0
158
+ max: i(X.columnType) ? l(X.columnType) : void 0
159
159
  } },
160
160
  sx: Q
161
161
  },
@@ -175,9 +175,9 @@ function R(R) {
175
175
  helperText: $.maximumSize
176
176
  })
177
177
  }),
178
- /* @__PURE__ */ E(_, {
178
+ /* @__PURE__ */ T(v, {
179
179
  sx: { my: H ? "auto" : void 0 },
180
- children: H ? X.maximumListLength ?? "" : /* @__PURE__ */ E(u, {
180
+ children: H ? X.maximumListLength ?? "" : /* @__PURE__ */ T(d, {
181
181
  value: X.maximumListLength ?? "",
182
182
  originalValue: K?.maximumListLength,
183
183
  recommendedValue: G?.maximumListLength,
@@ -196,7 +196,11 @@ function R(R) {
196
196
  },
197
197
  InputProps: {
198
198
  disableInjectingGlobalStyles: L,
199
- slotProps: { input: { "aria-label": "Maximum List Length" } },
199
+ slotProps: { input: {
200
+ "aria-label": "Maximum List Length",
201
+ min: 1,
202
+ max: n(X.columnType) ? c(X.columnType, te(X.maximumSize) ?? void 0) : void 0
203
+ } },
200
204
  sx: Q
201
205
  },
202
206
  fullWidth: !0,
@@ -204,9 +208,9 @@ function R(R) {
204
208
  helperText: $.maximumListLength
205
209
  })
206
210
  }),
207
- /* @__PURE__ */ E(_, {
211
+ /* @__PURE__ */ T(v, {
208
212
  sx: { my: H ? "auto" : void 0 },
209
- children: H ? P(X?.defaultValue, X.columnType) : /* @__PURE__ */ E(l, {
213
+ children: H ? P(X?.defaultValue, X.columnType) : /* @__PURE__ */ T(ne, {
210
214
  TextFieldProps: {
211
215
  InputProps: {
212
216
  disableInjectingGlobalStyles: L,
@@ -240,7 +244,7 @@ function R(R) {
240
244
  disabled: U || !t(X.columnType, Y, q)
241
245
  })
242
246
  }),
243
- /* @__PURE__ */ E(_, { children: /* @__PURE__ */ E(c, {
247
+ /* @__PURE__ */ T(v, { children: /* @__PURE__ */ T(u, {
244
248
  value: X?.enumValues,
245
249
  onChange: (e) => {
246
250
  J({
@@ -249,14 +253,14 @@ function R(R) {
249
253
  jsonSubColumnModelIndex: B,
250
254
  value: {
251
255
  ...X,
252
- enumValues: e == null || h(e) ? void 0 : e
256
+ enumValues: e == null || g(e) ? void 0 : e
253
257
  }
254
258
  });
255
259
  },
256
260
  columnType: X.columnType,
257
261
  TextFieldProps: {
258
262
  fullWidth: !0,
259
- disabled: U || !ee(X.columnType, q),
263
+ disabled: U || !r(X.columnType, q),
260
264
  InputProps: {
261
265
  disableInjectingGlobalStyles: L,
262
266
  readOnly: !0,
@@ -267,9 +271,9 @@ function R(R) {
267
271
  helperText: $.enumValues
268
272
  }
269
273
  }) }),
270
- /* @__PURE__ */ E(_, { children: /* @__PURE__ */ D(y, {
274
+ /* @__PURE__ */ T(v, { children: /* @__PURE__ */ E(y, {
271
275
  fullWidth: !0,
272
- children: [/* @__PURE__ */ E(S, {
276
+ children: [/* @__PURE__ */ T(x, {
273
277
  label: "Facet Type",
274
278
  value: X.facetType || "",
275
279
  disabled: U || Z === null,
@@ -287,18 +291,18 @@ function R(R) {
287
291
  sx: Q,
288
292
  slotProps: { input: { "aria-label": "Facet Type" } },
289
293
  error: !!$.facetType,
290
- children: (Z ?? []).map((e, t) => /* @__PURE__ */ E(x, {
294
+ children: (Z ?? []).map((e, t) => /* @__PURE__ */ T(b, {
291
295
  value: e,
292
- children: e === void 0 ? "" : o(e)
296
+ children: e === void 0 ? "" : ee(e)
293
297
  }, t))
294
- }), $.facetType && /* @__PURE__ */ E(M, {
298
+ }), $.facetType && /* @__PURE__ */ T(A, {
295
299
  color: "error.main",
296
300
  children: $.facetType
297
301
  })]
298
302
  }) }),
299
- /* @__PURE__ */ E(_, { children: /* @__PURE__ */ D(y, {
303
+ /* @__PURE__ */ T(v, { children: /* @__PURE__ */ E(y, {
300
304
  fullWidth: !0,
301
- children: [/* @__PURE__ */ D(S, {
305
+ children: [/* @__PURE__ */ E(x, {
302
306
  label: "Sort Facet Values",
303
307
  value: F("facetSortConfig" in X ? X.facetSortConfig : void 0),
304
308
  disabled: U || X.facetType !== "enumeration",
@@ -317,44 +321,44 @@ function R(R) {
317
321
  slotProps: { input: { "aria-label": "Sort Facet Values" } },
318
322
  error: !!$.facetSortConfig,
319
323
  children: [
320
- /* @__PURE__ */ E(x, {
324
+ /* @__PURE__ */ T(b, {
321
325
  value: "FREQUENCY_DESC",
322
326
  children: "Frequency Descending"
323
327
  }),
324
- /* @__PURE__ */ E(x, {
328
+ /* @__PURE__ */ T(b, {
325
329
  value: "FREQUENCY_ASC",
326
330
  children: "Frequency Ascending"
327
331
  }),
328
- /* @__PURE__ */ E(x, {
332
+ /* @__PURE__ */ T(b, {
329
333
  value: "VALUE_DESC",
330
334
  children: "Value Descending"
331
335
  }),
332
- /* @__PURE__ */ E(x, {
336
+ /* @__PURE__ */ T(b, {
333
337
  value: "VALUE_ASC",
334
338
  children: "Value Ascending"
335
339
  })
336
340
  ]
337
- }), $.facetSortConfig && /* @__PURE__ */ E(M, {
341
+ }), $.facetSortConfig && /* @__PURE__ */ T(A, {
338
342
  color: "error.main",
339
343
  children: $.facetSortConfig
340
344
  })]
341
345
  }) })
342
346
  ]
343
- }), q && /* @__PURE__ */ D(_, {
347
+ }), q && /* @__PURE__ */ E(v, {
344
348
  sx: {
345
349
  display: "grid",
346
350
  gridColumn: "1 / span 11",
347
351
  gridTemplateColumns: "subgrid"
348
352
  },
349
353
  children: [
350
- /* @__PURE__ */ E(_, {
354
+ /* @__PURE__ */ T(v, {
351
355
  sx: { gridColumn: "1 / span 1" },
352
- children: f
356
+ children: p
353
357
  }),
354
- /* @__PURE__ */ E(_, {}),
355
- /* @__PURE__ */ E(_, {
358
+ /* @__PURE__ */ T(v, {}),
359
+ /* @__PURE__ */ T(v, {
356
360
  sx: { gridColumn: "3 / span 7" },
357
- children: /* @__PURE__ */ E(C, {
361
+ children: /* @__PURE__ */ T(S, {
358
362
  placeholder: "JSON Path",
359
363
  value: X.jsonPath,
360
364
  onChange: (e) => {
@@ -373,12 +377,12 @@ function R(R) {
373
377
  slotProps: { input: {
374
378
  disableInjectingGlobalStyles: L,
375
379
  sx: Q,
376
- endAdornment: /* @__PURE__ */ E(w, {
377
- title: /* @__PURE__ */ D(T, { children: [/* @__PURE__ */ E("p", { children: /* @__PURE__ */ E(b, {
380
+ endAdornment: /* @__PURE__ */ T(C, {
381
+ title: /* @__PURE__ */ E(w, { children: [/* @__PURE__ */ T("p", { children: /* @__PURE__ */ T(ie, {
378
382
  href: "https://dev.mysql.com/doc/refman/8.0/en/json.html#json-path-syntax",
379
383
  children: "Please use a valid JSON Path selector, following this format."
380
- }) }), /* @__PURE__ */ E("p", { children: "This field is for linking the sub-column facet to the corresponding location in the JSON data, so that it can be used as facet filter. The correct selector will point to the key referenced in the sub-column JSON Path." })] }),
381
- children: /* @__PURE__ */ E(k, { sx: { color: "grey.700" } })
384
+ }) }), /* @__PURE__ */ T("p", { children: "This field is for linking the sub-column facet to the corresponding location in the JSON data, so that it can be used as facet filter. The correct selector will point to the key referenced in the sub-column JSON Path." })] }),
385
+ children: /* @__PURE__ */ T(O, { sx: { color: "grey.700" } })
382
386
  }),
383
387
  slotProps: { input: { "aria-label": "JSON Path" } }
384
388
  } },
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnModelForm.js","names":[],"sources":["../../../src/components/TableColumnSchemaEditor/ColumnModelForm.tsx"],"sourcesContent":["import { convertToConcreteEntityType } from '@/utils/functions/EntityTypeUtils'\nimport { InfoTwoTone } from '@mui/icons-material'\nimport {\n Box,\n Checkbox,\n FormControl,\n Link,\n MenuItem,\n Select,\n SxProps,\n TextField,\n Tooltip,\n} from '@mui/material'\nimport FormHelperText from '@mui/material/FormHelperText'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport {\n ColumnModel,\n ColumnTypeEnum,\n FacetType,\n VIEW_CONCRETE_TYPE_VALUES,\n FacetColumnSortConfig,\n} from '@sage-bionetworks/synapse-types'\nimport { useAtomValue, useSetAtom } from 'jotai'\nimport { selectAtom } from 'jotai/utils'\nimport { isArray, isEmpty, isEqual } from 'lodash-es'\nimport { useMemo } from 'react'\nimport { ZodIssue } from 'zod'\nimport DefaultValueField from './ColumnModelFormFields/DefaultValueField'\nimport { FieldWithRecommendedMinimum } from './ColumnModelFormFields/FieldWithRecommendedMinimum'\nimport MultiValueField from './ColumnModelFormFields/MultiValueField'\nimport {\n canHaveDefault,\n canHaveMaxListLength,\n canHaveRestrictedValues,\n canHaveSize,\n configureFacetsForType,\n getAllowedColumnTypes,\n getColumnTypeFriendlyName,\n getFacetTypeFriendlyName,\n getMaxSizeForType,\n} from './TableColumnSchemaEditorUtils'\nimport { HIERARCHY_VERTICAL_LINE_COMPONENT } from './TableColumnSchemaForm'\nimport { tableColumnSchemaFormDataAtom } from './TableColumnSchemaFormReducer'\nimport {\n ColumnModelFormData,\n JsonSubColumnModelFormData,\n} from './Validators/ColumnModelValidator'\n\ntype ColumnModelFormProps = {\n entityType: EntityType\n columnModelIndex: number\n jsonSubColumnIndex?: number\n /* Default Columns are read-only, except for the facetType */\n isDefaultColumn: boolean\n disabled?: boolean\n /* Can be used to override the schema used for validating ColumnModels */\n validationErrors?: ZodIssue[] | null\n defaultAnnotationModel?: ColumnModel | null\n originalColumnModel?: ColumnModel | null\n}\nconst jsonSubColumnFieldSx: SxProps = {\n height: '28px',\n fontSize: '12px',\n}\nconst topLevelColumnModelFieldSx: SxProps = {\n height: '38px',\n fontSize: '14px',\n}\n\nfunction renderDefaultValue(\n defaultValue: string | unknown[] | undefined,\n _columnType: ColumnTypeEnum,\n): string {\n if (defaultValue == null) {\n return ''\n }\n\n if (isArray(defaultValue)) {\n return defaultValue.map(String).join(', ')\n }\n return defaultValue\n}\n\n// Helper type for the combined sort configuration value\ntype FacetSortValue =\n | 'FREQUENCY_DESC'\n | 'FREQUENCY_ASC'\n | 'VALUE_DESC'\n | 'VALUE_ASC'\n | ''\n\n/**\n * Converts a FacetColumnSortConfig object to a single string value for the select dropdown\n */\nfunction facetSortConfigToValue(\n config: FacetColumnSortConfig | undefined,\n): FacetSortValue {\n if (!config || (!config.property && !config.direction)) {\n return ''\n }\n const property = config.property || 'FREQUENCY'\n const direction = config.direction || 'DESC'\n return `${property}_${direction}` as FacetSortValue\n}\n\n/**\n * Converts a select dropdown value to a FacetColumnSortConfig object\n */\nfunction valueToFacetSortConfig(\n value: FacetSortValue,\n): FacetColumnSortConfig | undefined {\n if (!value) {\n return undefined\n }\n const [property, direction] = value.split('_') as [\n 'FREQUENCY' | 'VALUE',\n 'DESC' | 'ASC',\n ]\n return { property, direction }\n}\n\n/*\n * Disable immediate MUI/Emotion style injection because it causes performance issues when adding many columns at once.\n * This can be a common occurence when adding annotation columns\n */\nconst DISABLE_INJECTING_GLOBAL_STYLES_VALUE = true\n\nexport default function ColumnModelForm(props: ColumnModelFormProps) {\n const {\n columnModelIndex,\n jsonSubColumnIndex,\n entityType,\n isDefaultColumn,\n disabled = false,\n validationErrors = null,\n defaultAnnotationModel,\n originalColumnModel,\n } = props\n const isJsonSubColumn = jsonSubColumnIndex != undefined\n const dispatch = useSetAtom(tableColumnSchemaFormDataAtom)\n const isView = (VIEW_CONCRETE_TYPE_VALUES as readonly string[]).includes(\n convertToConcreteEntityType(entityType),\n )\n\n const columnModelAtom = useMemo(\n () =>\n selectAtom(\n tableColumnSchemaFormDataAtom,\n v =>\n isJsonSubColumn\n ? v[columnModelIndex].jsonSubColumns![jsonSubColumnIndex]\n : v[columnModelIndex],\n isEqual,\n ),\n [columnModelIndex, isJsonSubColumn, jsonSubColumnIndex],\n )\n\n const columnModel = useAtomValue(columnModelAtom)\n\n const allowedColumnTypes = useMemo(\n () => getAllowedColumnTypes(isView, isJsonSubColumn),\n [isView, isJsonSubColumn],\n )\n\n const allowedFacetTypes = useMemo(\n () => configureFacetsForType(columnModel.columnType, isJsonSubColumn),\n [columnModel.columnType, isJsonSubColumn],\n )\n const fieldSx: SxProps = useMemo(\n () => (isJsonSubColumn ? jsonSubColumnFieldSx : topLevelColumnModelFieldSx),\n [isJsonSubColumn],\n )\n\n const errorsByField = useMemo(() => {\n if (validationErrors && isArray(validationErrors)) {\n const errorsByField: Record<string, string> = {}\n validationErrors.forEach(e => {\n if (e.path) {\n errorsByField[e.path[e.path.length - 1]] = e.message\n }\n })\n return errorsByField\n }\n return {}\n }, [validationErrors])\n\n return (\n <>\n <Box\n sx={{\n display: 'grid',\n gridColumn: '1 / span 11',\n gridTemplateColumns: 'subgrid',\n }}\n >\n {isJsonSubColumn && (\n <Box sx={{ gridColumn: '1 / span 1' }}>\n {HIERARCHY_VERTICAL_LINE_COMPONENT}\n </Box>\n )}\n <Box\n data-testid={`ColumnModelForm`}\n sx={{\n display: 'flex',\n alignItems: 'start',\n gridColumn: isJsonSubColumn ? '2 / span 1' : ' 1 / span 1',\n // Checkbox is offset from top; vertical centering causes issues when validation errors are displayed\n mt: isJsonSubColumn ? '0px' : '5px',\n }}\n >\n <Checkbox\n checked={columnModel.isSelected}\n inputProps={{ 'aria-label': 'Select' }}\n disabled={disabled}\n onChange={() => {\n dispatch({\n type: 'toggleSelect',\n columnModelIndex,\n jsonSubColumnModelIndex: jsonSubColumnIndex,\n })\n }}\n />\n </Box>\n <Box\n sx={{\n my: isDefaultColumn ? 'auto' : undefined,\n gridColumn: isJsonSubColumn\n ? /* If this is a JSON Subcolumn, we reduce the width of this grid column to create space to render the visual hierarchical line */\n '3 / span 1'\n : /* Otherwise, span across both grid columns */\n '2 / span 2',\n }}\n >\n {isDefaultColumn ? (\n columnModel.name\n ) : (\n <TextField\n value={columnModel.name}\n placeholder={isJsonSubColumn ? 'Facet name' : 'Column name'}\n onChange={e => {\n dispatch({\n type: 'setColumnModelValue',\n columnModelIndex,\n jsonSubColumnModelIndex: jsonSubColumnIndex,\n value: {\n ...columnModel,\n name: e.target.value,\n },\n })\n }}\n disabled={disabled}\n fullWidth\n error={!!errorsByField['name']}\n helperText={errorsByField['name']}\n slotProps={{\n input: {\n disableInjectingGlobalStyles:\n DISABLE_INJECTING_GLOBAL_STYLES_VALUE,\n sx: fieldSx,\n slotProps: {\n input: {\n 'aria-label': 'Name',\n },\n },\n },\n }}\n />\n )}\n </Box>\n <Box\n sx={{\n my: isDefaultColumn ? 'auto' : undefined,\n }}\n >\n {isDefaultColumn ? (\n getColumnTypeFriendlyName(columnModel.columnType)\n ) : (\n <FormControl fullWidth>\n <Select\n label=\"Column Type\"\n value={columnModel.columnType}\n onChange={e => {\n dispatch({\n type: 'changeColumnModelType',\n columnModelIndex,\n jsonSubColumnModelIndex: jsonSubColumnIndex,\n newColumnType: e.target.value as ColumnTypeEnum,\n })\n }}\n slotProps={{\n input: {\n 'aria-label': 'Column Type',\n },\n }}\n sx={fieldSx}\n disabled={disabled}\n error={!!errorsByField['columnType']}\n >\n {allowedColumnTypes.map(value => {\n return (\n <MenuItem value={value} key={value}>\n {getColumnTypeFriendlyName(value)}\n </MenuItem>\n )\n })}\n </Select>\n {errorsByField['columnType'] && (\n <FormHelperText color={'error.main'}>\n {errorsByField['columnType']}\n </FormHelperText>\n )}\n </FormControl>\n )}\n </Box>\n <Box\n sx={{\n my: isDefaultColumn ? 'auto' : undefined,\n }}\n >\n {isDefaultColumn ? (\n ((columnModel as ColumnModelFormData).maximumSize ?? '')\n ) : (\n <FieldWithRecommendedMinimum\n value={(columnModel as ColumnModelFormData).maximumSize ?? ''}\n originalValue={originalColumnModel?.maximumSize}\n recommendedValue={defaultAnnotationModel?.maximumSize}\n columnType={columnModel.columnType as ColumnTypeEnum}\n disabled={disabled || !canHaveSize(columnModel.columnType)}\n InputProps={{\n disableInjectingGlobalStyles:\n DISABLE_INJECTING_GLOBAL_STYLES_VALUE,\n\n slotProps: {\n input: {\n 'aria-label': 'Maximum Size',\n min: 1,\n max: canHaveSize(columnModel.columnType)\n ? getMaxSizeForType(columnModel.columnType)\n : undefined,\n },\n },\n sx: fieldSx,\n }}\n onChange={e => {\n dispatch({\n type: 'setColumnModelValue',\n columnModelIndex,\n jsonSubColumnModelIndex: jsonSubColumnIndex,\n value: {\n ...columnModel,\n maximumSize: e.target.value,\n },\n })\n }}\n fullWidth\n error={!!errorsByField['maximumSize']}\n helperText={errorsByField['maximumSize']}\n />\n )}\n </Box>\n <Box\n sx={{\n my: isDefaultColumn ? 'auto' : undefined,\n }}\n >\n {isDefaultColumn ? (\n ((columnModel as ColumnModelFormData).maximumListLength ?? '')\n ) : (\n <FieldWithRecommendedMinimum\n value={\n (columnModel as ColumnModelFormData).maximumListLength ?? ''\n }\n originalValue={originalColumnModel?.maximumListLength}\n recommendedValue={defaultAnnotationModel?.maximumListLength}\n columnType={columnModel.columnType as ColumnTypeEnum}\n disabled={\n disabled || !canHaveMaxListLength(columnModel.columnType)\n }\n onChange={e => {\n dispatch({\n type: 'setColumnModelValue',\n columnModelIndex,\n jsonSubColumnModelIndex: jsonSubColumnIndex,\n value: {\n ...columnModel,\n maximumListLength: e.target.value,\n },\n })\n }}\n InputProps={{\n disableInjectingGlobalStyles:\n DISABLE_INJECTING_GLOBAL_STYLES_VALUE,\n slotProps: {\n input: {\n 'aria-label': 'Maximum List Length',\n },\n },\n sx: fieldSx,\n }}\n fullWidth\n error={!!errorsByField['maximumListLength']}\n helperText={errorsByField['maximumListLength']}\n />\n )}\n </Box>\n <Box\n sx={{\n my: isDefaultColumn ? 'auto' : undefined,\n }}\n >\n {isDefaultColumn ? (\n renderDefaultValue(\n (columnModel as ColumnModelFormData)?.defaultValue,\n columnModel.columnType as ColumnTypeEnum,\n )\n ) : (\n <DefaultValueField\n TextFieldProps={{\n InputProps: {\n disableInjectingGlobalStyles:\n DISABLE_INJECTING_GLOBAL_STYLES_VALUE,\n slotProps: {\n input: {\n 'aria-label': 'Default Value',\n },\n },\n sx: fieldSx,\n },\n fullWidth: true,\n error: !!errorsByField['defaultValue'],\n helperText: errorsByField['defaultValue'],\n }}\n SelectProps={{\n label: 'Default Value',\n sx: fieldSx,\n slotProps: {\n input: {\n 'aria-label': 'Default Value',\n },\n },\n error: !!errorsByField['defaultValue'],\n }}\n selectFormHelperText={errorsByField['defaultValue']}\n columnModel={columnModel as ColumnModelFormData}\n value={(columnModel as ColumnModelFormData)?.defaultValue || null}\n onChange={value => {\n dispatch({\n type: 'setColumnModelValue',\n columnModelIndex,\n jsonSubColumnModelIndex: jsonSubColumnIndex,\n value: {\n ...columnModel,\n defaultValue: value || undefined,\n },\n })\n }}\n disabled={\n disabled ||\n !canHaveDefault(columnModel.columnType, isView, isJsonSubColumn)\n }\n />\n )}\n </Box>\n <Box>\n <MultiValueField\n value={(columnModel as ColumnModelFormData)?.enumValues}\n onChange={newValue => {\n dispatch({\n type: 'setColumnModelValue',\n columnModelIndex,\n jsonSubColumnModelIndex: jsonSubColumnIndex,\n value: {\n ...columnModel,\n enumValues:\n newValue == null || isEmpty(newValue)\n ? undefined\n : newValue,\n },\n })\n }}\n columnType={columnModel.columnType as ColumnTypeEnum}\n TextFieldProps={{\n fullWidth: true,\n disabled:\n disabled ||\n !canHaveRestrictedValues(\n columnModel.columnType,\n isJsonSubColumn,\n ),\n InputProps: {\n disableInjectingGlobalStyles:\n DISABLE_INJECTING_GLOBAL_STYLES_VALUE,\n // Is readOnly because edits are made with the JSONArrayEditorModal\n readOnly: true,\n sx: fieldSx,\n slotProps: {\n input: {\n 'aria-label': 'Restrict Values',\n },\n },\n },\n error: !!errorsByField['enumValues'],\n helperText: errorsByField['enumValues'],\n }}\n />\n </Box>\n <Box>\n <FormControl fullWidth>\n <Select\n label=\"Facet Type\"\n value={columnModel.facetType || ''}\n disabled={disabled || allowedFacetTypes === null}\n onChange={e => {\n dispatch({\n type: 'setColumnModelValue',\n columnModelIndex,\n jsonSubColumnModelIndex: jsonSubColumnIndex,\n value: {\n ...columnModel,\n facetType: e.target.value as FacetType,\n },\n })\n }}\n sx={fieldSx}\n slotProps={{\n input: {\n 'aria-label': 'Facet Type',\n },\n }}\n error={!!errorsByField['facetType']}\n >\n {(allowedFacetTypes ?? []).map((value, index) => {\n return (\n <MenuItem value={value} key={index}>\n {value === undefined ? '' : getFacetTypeFriendlyName(value)}\n </MenuItem>\n )\n })}\n </Select>\n {errorsByField['facetType'] && (\n <FormHelperText color={'error.main'}>\n {errorsByField['facetType']}\n </FormHelperText>\n )}\n </FormControl>\n </Box>\n <Box>\n <FormControl fullWidth>\n <Select\n label=\"Sort Facet Values\"\n value={facetSortConfigToValue(\n 'facetSortConfig' in columnModel\n ? columnModel.facetSortConfig\n : undefined,\n )}\n disabled={disabled || columnModel.facetType !== 'enumeration'}\n onChange={e => {\n dispatch({\n type: 'setColumnModelValue',\n columnModelIndex,\n jsonSubColumnModelIndex: jsonSubColumnIndex,\n value: {\n ...columnModel,\n facetSortConfig: valueToFacetSortConfig(\n e.target.value as FacetSortValue,\n ),\n },\n })\n }}\n sx={fieldSx}\n slotProps={{\n input: {\n 'aria-label': 'Sort Facet Values',\n },\n }}\n error={!!errorsByField['facetSortConfig']}\n >\n <MenuItem value=\"FREQUENCY_DESC\">Frequency Descending</MenuItem>\n <MenuItem value=\"FREQUENCY_ASC\">Frequency Ascending</MenuItem>\n <MenuItem value=\"VALUE_DESC\">Value Descending</MenuItem>\n <MenuItem value=\"VALUE_ASC\">Value Ascending</MenuItem>\n </Select>\n {errorsByField['facetSortConfig'] && (\n <FormHelperText color={'error.main'}>\n {errorsByField['facetSortConfig']}\n </FormHelperText>\n )}\n </FormControl>\n </Box>\n </Box>\n {isJsonSubColumn && (\n <Box\n sx={{\n display: 'grid',\n gridColumn: '1 / span 11',\n gridTemplateColumns: 'subgrid',\n }}\n >\n <Box\n sx={{\n gridColumn: '1 / span 1',\n }}\n >\n {HIERARCHY_VERTICAL_LINE_COMPONENT}\n </Box>\n <Box></Box>\n <Box\n sx={{\n gridColumn: '3 / span 7',\n }}\n >\n <TextField\n placeholder={'JSON Path'}\n value={(columnModel as JsonSubColumnModelFormData).jsonPath}\n onChange={e => {\n dispatch({\n type: 'setColumnModelValue',\n columnModelIndex,\n jsonSubColumnModelIndex: jsonSubColumnIndex,\n value: {\n ...(columnModel as JsonSubColumnModelFormData),\n jsonPath: e.target.value,\n },\n })\n }}\n disabled={disabled}\n fullWidth\n slotProps={{\n input: {\n disableInjectingGlobalStyles:\n DISABLE_INJECTING_GLOBAL_STYLES_VALUE,\n sx: fieldSx,\n endAdornment: (\n <Tooltip\n title={\n <>\n <p>\n <Link\n href={\n 'https://dev.mysql.com/doc/refman/8.0/en/json.html#json-path-syntax'\n }\n >\n Please use a valid JSON Path selector, following\n this format.\n </Link>\n </p>\n <p>\n This field is for linking the sub-column facet to\n the corresponding location in the JSON data, so that\n it can be used as facet filter. The correct selector\n will point to the key referenced in the sub-column\n JSON Path.\n </p>\n </>\n }\n >\n <InfoTwoTone sx={{ color: 'grey.700' }} />\n </Tooltip>\n ),\n slotProps: {\n input: { 'aria-label': 'JSON Path' },\n },\n },\n }}\n error={!!errorsByField['jsonPath']}\n helperText={errorsByField['jsonPath']}\n />\n </Box>\n </Box>\n )}\n </>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ColumnModelForm.js","names":[],"sources":["../../../src/components/TableColumnSchemaEditor/ColumnModelForm.tsx"],"sourcesContent":["import { convertToConcreteEntityType } from '@/utils/functions/EntityTypeUtils'\nimport { InfoTwoTone } from '@mui/icons-material'\nimport {\n Box,\n Checkbox,\n FormControl,\n Link,\n MenuItem,\n Select,\n SxProps,\n TextField,\n Tooltip,\n} from '@mui/material'\nimport FormHelperText from '@mui/material/FormHelperText'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport {\n ColumnModel,\n ColumnTypeEnum,\n FacetType,\n VIEW_CONCRETE_TYPE_VALUES,\n FacetColumnSortConfig,\n} from '@sage-bionetworks/synapse-types'\nimport { useAtomValue, useSetAtom } from 'jotai'\nimport { selectAtom } from 'jotai/utils'\nimport { isArray, isEmpty, isEqual } from 'lodash-es'\nimport { useMemo } from 'react'\nimport { ZodIssue } from 'zod'\nimport DefaultValueField from './ColumnModelFormFields/DefaultValueField'\nimport { FieldWithRecommendedMinimum } from './ColumnModelFormFields/FieldWithRecommendedMinimum'\nimport MultiValueField from './ColumnModelFormFields/MultiValueField'\nimport {\n canHaveDefault,\n canHaveMaxListLength,\n canHaveRestrictedValues,\n canHaveSize,\n configureFacetsForType,\n getAllowedColumnTypes,\n getColumnTypeFriendlyName,\n getFacetTypeFriendlyName,\n getFormDataValueAsNumber,\n getMaxListLengthForType,\n getMaxSizeForType,\n} from './TableColumnSchemaEditorUtils'\nimport { HIERARCHY_VERTICAL_LINE_COMPONENT } from './TableColumnSchemaForm'\nimport { tableColumnSchemaFormDataAtom } from './TableColumnSchemaFormReducer'\nimport {\n ColumnModelFormData,\n JsonSubColumnModelFormData,\n} from './Validators/ColumnModelValidator'\n\ntype ColumnModelFormProps = {\n entityType: EntityType\n columnModelIndex: number\n jsonSubColumnIndex?: number\n /* Default Columns are read-only, except for the facetType */\n isDefaultColumn: boolean\n disabled?: boolean\n /* Can be used to override the schema used for validating ColumnModels */\n validationErrors?: ZodIssue[] | null\n defaultAnnotationModel?: ColumnModel | null\n originalColumnModel?: ColumnModel | null\n}\nconst jsonSubColumnFieldSx: SxProps = {\n height: '28px',\n fontSize: '12px',\n}\nconst topLevelColumnModelFieldSx: SxProps = {\n height: '38px',\n fontSize: '14px',\n}\n\nfunction renderDefaultValue(\n defaultValue: string | unknown[] | undefined,\n _columnType: ColumnTypeEnum,\n): string {\n if (defaultValue == null) {\n return ''\n }\n\n if (isArray(defaultValue)) {\n return defaultValue.map(String).join(', ')\n }\n return defaultValue\n}\n\n// Helper type for the combined sort configuration value\ntype FacetSortValue =\n | 'FREQUENCY_DESC'\n | 'FREQUENCY_ASC'\n | 'VALUE_DESC'\n | 'VALUE_ASC'\n | ''\n\n/**\n * Converts a FacetColumnSortConfig object to a single string value for the select dropdown\n */\nfunction facetSortConfigToValue(\n config: FacetColumnSortConfig | undefined,\n): FacetSortValue {\n if (!config || (!config.property && !config.direction)) {\n return ''\n }\n const property = config.property || 'FREQUENCY'\n const direction = config.direction || 'DESC'\n return `${property}_${direction}` as FacetSortValue\n}\n\n/**\n * Converts a select dropdown value to a FacetColumnSortConfig object\n */\nfunction valueToFacetSortConfig(\n value: FacetSortValue,\n): FacetColumnSortConfig | undefined {\n if (!value) {\n return undefined\n }\n const [property, direction] = value.split('_') as [\n 'FREQUENCY' | 'VALUE',\n 'DESC' | 'ASC',\n ]\n return { property, direction }\n}\n\n/*\n * Disable immediate MUI/Emotion style injection because it causes performance issues when adding many columns at once.\n * This can be a common occurence when adding annotation columns\n */\nconst DISABLE_INJECTING_GLOBAL_STYLES_VALUE = true\n\nexport default function ColumnModelForm(props: ColumnModelFormProps) {\n const {\n columnModelIndex,\n jsonSubColumnIndex,\n entityType,\n isDefaultColumn,\n disabled = false,\n validationErrors = null,\n defaultAnnotationModel,\n originalColumnModel,\n } = props\n const isJsonSubColumn = jsonSubColumnIndex != undefined\n const dispatch = useSetAtom(tableColumnSchemaFormDataAtom)\n const isView = (VIEW_CONCRETE_TYPE_VALUES as readonly string[]).includes(\n convertToConcreteEntityType(entityType),\n )\n\n const columnModelAtom = useMemo(\n () =>\n selectAtom(\n tableColumnSchemaFormDataAtom,\n v =>\n isJsonSubColumn\n ? v[columnModelIndex].jsonSubColumns![jsonSubColumnIndex]\n : v[columnModelIndex],\n isEqual,\n ),\n [columnModelIndex, isJsonSubColumn, jsonSubColumnIndex],\n )\n\n const columnModel = useAtomValue(columnModelAtom)\n\n const allowedColumnTypes = useMemo(\n () => getAllowedColumnTypes(isView, isJsonSubColumn),\n [isView, isJsonSubColumn],\n )\n\n const allowedFacetTypes = useMemo(\n () => configureFacetsForType(columnModel.columnType, isJsonSubColumn),\n [columnModel.columnType, isJsonSubColumn],\n )\n const fieldSx: SxProps = useMemo(\n () => (isJsonSubColumn ? jsonSubColumnFieldSx : topLevelColumnModelFieldSx),\n [isJsonSubColumn],\n )\n\n const errorsByField = useMemo(() => {\n if (validationErrors && isArray(validationErrors)) {\n const errorsByField: Record<string, string> = {}\n validationErrors.forEach(e => {\n if (e.path) {\n errorsByField[String(e.path[e.path.length - 1])] = e.message\n }\n })\n return errorsByField\n }\n return {}\n }, [validationErrors])\n\n return (\n <>\n <Box\n sx={{\n display: 'grid',\n gridColumn: '1 / span 11',\n gridTemplateColumns: 'subgrid',\n }}\n >\n {isJsonSubColumn && (\n <Box sx={{ gridColumn: '1 / span 1' }}>\n {HIERARCHY_VERTICAL_LINE_COMPONENT}\n </Box>\n )}\n <Box\n data-testid={`ColumnModelForm`}\n sx={{\n display: 'flex',\n alignItems: 'start',\n gridColumn: isJsonSubColumn ? '2 / span 1' : ' 1 / span 1',\n // Checkbox is offset from top; vertical centering causes issues when validation errors are displayed\n mt: isJsonSubColumn ? '0px' : '5px',\n }}\n >\n <Checkbox\n checked={columnModel.isSelected}\n inputProps={{ 'aria-label': 'Select' }}\n disabled={disabled}\n onChange={() => {\n dispatch({\n type: 'toggleSelect',\n columnModelIndex,\n jsonSubColumnModelIndex: jsonSubColumnIndex,\n })\n }}\n />\n </Box>\n <Box\n sx={{\n my: isDefaultColumn ? 'auto' : undefined,\n gridColumn: isJsonSubColumn\n ? /* If this is a JSON Subcolumn, we reduce the width of this grid column to create space to render the visual hierarchical line */\n '3 / span 1'\n : /* Otherwise, span across both grid columns */\n '2 / span 2',\n }}\n >\n {isDefaultColumn ? (\n columnModel.name\n ) : (\n <TextField\n value={columnModel.name}\n placeholder={isJsonSubColumn ? 'Facet name' : 'Column name'}\n onChange={e => {\n dispatch({\n type: 'setColumnModelValue',\n columnModelIndex,\n jsonSubColumnModelIndex: jsonSubColumnIndex,\n value: {\n ...columnModel,\n name: e.target.value,\n },\n })\n }}\n disabled={disabled}\n fullWidth\n error={!!errorsByField['name']}\n helperText={errorsByField['name']}\n slotProps={{\n input: {\n disableInjectingGlobalStyles:\n DISABLE_INJECTING_GLOBAL_STYLES_VALUE,\n sx: fieldSx,\n slotProps: {\n input: {\n 'aria-label': 'Name',\n },\n },\n },\n }}\n />\n )}\n </Box>\n <Box\n sx={{\n my: isDefaultColumn ? 'auto' : undefined,\n }}\n >\n {isDefaultColumn ? (\n getColumnTypeFriendlyName(columnModel.columnType)\n ) : (\n <FormControl fullWidth>\n <Select\n label=\"Column Type\"\n value={columnModel.columnType}\n onChange={e => {\n dispatch({\n type: 'changeColumnModelType',\n columnModelIndex,\n jsonSubColumnModelIndex: jsonSubColumnIndex,\n newColumnType: e.target.value as ColumnTypeEnum,\n })\n }}\n slotProps={{\n input: {\n 'aria-label': 'Column Type',\n },\n }}\n sx={fieldSx}\n disabled={disabled}\n error={!!errorsByField['columnType']}\n >\n {allowedColumnTypes.map(value => {\n return (\n <MenuItem value={value} key={value}>\n {getColumnTypeFriendlyName(value)}\n </MenuItem>\n )\n })}\n </Select>\n {errorsByField['columnType'] && (\n <FormHelperText color={'error.main'}>\n {errorsByField['columnType']}\n </FormHelperText>\n )}\n </FormControl>\n )}\n </Box>\n <Box\n sx={{\n my: isDefaultColumn ? 'auto' : undefined,\n }}\n >\n {isDefaultColumn ? (\n ((columnModel as ColumnModelFormData).maximumSize ?? '')\n ) : (\n <FieldWithRecommendedMinimum\n value={(columnModel as ColumnModelFormData).maximumSize ?? ''}\n originalValue={originalColumnModel?.maximumSize}\n recommendedValue={defaultAnnotationModel?.maximumSize}\n columnType={columnModel.columnType as ColumnTypeEnum}\n disabled={disabled || !canHaveSize(columnModel.columnType)}\n InputProps={{\n disableInjectingGlobalStyles:\n DISABLE_INJECTING_GLOBAL_STYLES_VALUE,\n\n slotProps: {\n input: {\n 'aria-label': 'Maximum Size',\n min: 1,\n max: canHaveSize(columnModel.columnType)\n ? getMaxSizeForType(columnModel.columnType)\n : undefined,\n },\n },\n sx: fieldSx,\n }}\n onChange={e => {\n dispatch({\n type: 'setColumnModelValue',\n columnModelIndex,\n jsonSubColumnModelIndex: jsonSubColumnIndex,\n value: {\n ...columnModel,\n maximumSize: e.target.value,\n },\n })\n }}\n fullWidth\n error={!!errorsByField['maximumSize']}\n helperText={errorsByField['maximumSize']}\n />\n )}\n </Box>\n <Box\n sx={{\n my: isDefaultColumn ? 'auto' : undefined,\n }}\n >\n {isDefaultColumn ? (\n ((columnModel as ColumnModelFormData).maximumListLength ?? '')\n ) : (\n <FieldWithRecommendedMinimum\n value={\n (columnModel as ColumnModelFormData).maximumListLength ?? ''\n }\n originalValue={originalColumnModel?.maximumListLength}\n recommendedValue={defaultAnnotationModel?.maximumListLength}\n columnType={columnModel.columnType as ColumnTypeEnum}\n disabled={\n disabled || !canHaveMaxListLength(columnModel.columnType)\n }\n onChange={e => {\n dispatch({\n type: 'setColumnModelValue',\n columnModelIndex,\n jsonSubColumnModelIndex: jsonSubColumnIndex,\n value: {\n ...columnModel,\n maximumListLength: e.target.value,\n },\n })\n }}\n InputProps={{\n disableInjectingGlobalStyles:\n DISABLE_INJECTING_GLOBAL_STYLES_VALUE,\n slotProps: {\n input: {\n 'aria-label': 'Maximum List Length',\n min: 1,\n max: canHaveMaxListLength(columnModel.columnType)\n ? getMaxListLengthForType(\n columnModel.columnType,\n getFormDataValueAsNumber(\n (columnModel as ColumnModelFormData).maximumSize,\n ) ?? undefined,\n )\n : undefined,\n },\n },\n sx: fieldSx,\n }}\n fullWidth\n error={!!errorsByField['maximumListLength']}\n helperText={errorsByField['maximumListLength']}\n />\n )}\n </Box>\n <Box\n sx={{\n my: isDefaultColumn ? 'auto' : undefined,\n }}\n >\n {isDefaultColumn ? (\n renderDefaultValue(\n (columnModel as ColumnModelFormData)?.defaultValue,\n columnModel.columnType as ColumnTypeEnum,\n )\n ) : (\n <DefaultValueField\n TextFieldProps={{\n InputProps: {\n disableInjectingGlobalStyles:\n DISABLE_INJECTING_GLOBAL_STYLES_VALUE,\n slotProps: {\n input: {\n 'aria-label': 'Default Value',\n },\n },\n sx: fieldSx,\n },\n fullWidth: true,\n error: !!errorsByField['defaultValue'],\n helperText: errorsByField['defaultValue'],\n }}\n SelectProps={{\n label: 'Default Value',\n sx: fieldSx,\n slotProps: {\n input: {\n 'aria-label': 'Default Value',\n },\n },\n error: !!errorsByField['defaultValue'],\n }}\n selectFormHelperText={errorsByField['defaultValue']}\n columnModel={columnModel as ColumnModelFormData}\n value={(columnModel as ColumnModelFormData)?.defaultValue || null}\n onChange={value => {\n dispatch({\n type: 'setColumnModelValue',\n columnModelIndex,\n jsonSubColumnModelIndex: jsonSubColumnIndex,\n value: {\n ...columnModel,\n defaultValue: value || undefined,\n },\n })\n }}\n disabled={\n disabled ||\n !canHaveDefault(columnModel.columnType, isView, isJsonSubColumn)\n }\n />\n )}\n </Box>\n <Box>\n <MultiValueField\n value={(columnModel as ColumnModelFormData)?.enumValues}\n onChange={newValue => {\n dispatch({\n type: 'setColumnModelValue',\n columnModelIndex,\n jsonSubColumnModelIndex: jsonSubColumnIndex,\n value: {\n ...columnModel,\n enumValues:\n newValue == null || isEmpty(newValue)\n ? undefined\n : newValue,\n },\n })\n }}\n columnType={columnModel.columnType as ColumnTypeEnum}\n TextFieldProps={{\n fullWidth: true,\n disabled:\n disabled ||\n !canHaveRestrictedValues(\n columnModel.columnType,\n isJsonSubColumn,\n ),\n InputProps: {\n disableInjectingGlobalStyles:\n DISABLE_INJECTING_GLOBAL_STYLES_VALUE,\n // Is readOnly because edits are made with the JSONArrayEditorModal\n readOnly: true,\n sx: fieldSx,\n slotProps: {\n input: {\n 'aria-label': 'Restrict Values',\n },\n },\n },\n error: !!errorsByField['enumValues'],\n helperText: errorsByField['enumValues'],\n }}\n />\n </Box>\n <Box>\n <FormControl fullWidth>\n <Select\n label=\"Facet Type\"\n value={columnModel.facetType || ''}\n disabled={disabled || allowedFacetTypes === null}\n onChange={e => {\n dispatch({\n type: 'setColumnModelValue',\n columnModelIndex,\n jsonSubColumnModelIndex: jsonSubColumnIndex,\n value: {\n ...columnModel,\n facetType: e.target.value as FacetType,\n },\n })\n }}\n sx={fieldSx}\n slotProps={{\n input: {\n 'aria-label': 'Facet Type',\n },\n }}\n error={!!errorsByField['facetType']}\n >\n {(allowedFacetTypes ?? []).map((value, index) => {\n return (\n <MenuItem value={value} key={index}>\n {value === undefined ? '' : getFacetTypeFriendlyName(value)}\n </MenuItem>\n )\n })}\n </Select>\n {errorsByField['facetType'] && (\n <FormHelperText color={'error.main'}>\n {errorsByField['facetType']}\n </FormHelperText>\n )}\n </FormControl>\n </Box>\n <Box>\n <FormControl fullWidth>\n <Select\n label=\"Sort Facet Values\"\n value={facetSortConfigToValue(\n 'facetSortConfig' in columnModel\n ? columnModel.facetSortConfig\n : undefined,\n )}\n disabled={disabled || columnModel.facetType !== 'enumeration'}\n onChange={e => {\n dispatch({\n type: 'setColumnModelValue',\n columnModelIndex,\n jsonSubColumnModelIndex: jsonSubColumnIndex,\n value: {\n ...columnModel,\n facetSortConfig: valueToFacetSortConfig(\n e.target.value as FacetSortValue,\n ),\n },\n })\n }}\n sx={fieldSx}\n slotProps={{\n input: {\n 'aria-label': 'Sort Facet Values',\n },\n }}\n error={!!errorsByField['facetSortConfig']}\n >\n <MenuItem value=\"FREQUENCY_DESC\">Frequency Descending</MenuItem>\n <MenuItem value=\"FREQUENCY_ASC\">Frequency Ascending</MenuItem>\n <MenuItem value=\"VALUE_DESC\">Value Descending</MenuItem>\n <MenuItem value=\"VALUE_ASC\">Value Ascending</MenuItem>\n </Select>\n {errorsByField['facetSortConfig'] && (\n <FormHelperText color={'error.main'}>\n {errorsByField['facetSortConfig']}\n </FormHelperText>\n )}\n </FormControl>\n </Box>\n </Box>\n {isJsonSubColumn && (\n <Box\n sx={{\n display: 'grid',\n gridColumn: '1 / span 11',\n gridTemplateColumns: 'subgrid',\n }}\n >\n <Box\n sx={{\n gridColumn: '1 / span 1',\n }}\n >\n {HIERARCHY_VERTICAL_LINE_COMPONENT}\n </Box>\n <Box></Box>\n <Box\n sx={{\n gridColumn: '3 / span 7',\n }}\n >\n <TextField\n placeholder={'JSON Path'}\n value={(columnModel as JsonSubColumnModelFormData).jsonPath}\n onChange={e => {\n dispatch({\n type: 'setColumnModelValue',\n columnModelIndex,\n jsonSubColumnModelIndex: jsonSubColumnIndex,\n value: {\n ...(columnModel as JsonSubColumnModelFormData),\n jsonPath: e.target.value,\n },\n })\n }}\n disabled={disabled}\n fullWidth\n slotProps={{\n input: {\n disableInjectingGlobalStyles:\n DISABLE_INJECTING_GLOBAL_STYLES_VALUE,\n sx: fieldSx,\n endAdornment: (\n <Tooltip\n title={\n <>\n <p>\n <Link\n href={\n 'https://dev.mysql.com/doc/refman/8.0/en/json.html#json-path-syntax'\n }\n >\n Please use a valid JSON Path selector, following\n this format.\n </Link>\n </p>\n <p>\n This field is for linking the sub-column facet to\n the corresponding location in the JSON data, so that\n it can be used as facet filter. The correct selector\n will point to the key referenced in the sub-column\n JSON Path.\n </p>\n </>\n }\n >\n <InfoTwoTone sx={{ color: 'grey.700' }} />\n </Tooltip>\n ),\n slotProps: {\n input: { 'aria-label': 'JSON Path' },\n },\n },\n }}\n error={!!errorsByField['jsonPath']}\n helperText={errorsByField['jsonPath']}\n />\n </Box>\n </Box>\n )}\n </>\n )\n}\n"],"mappings":"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"}
@@ -26,10 +26,24 @@ export declare function canHaveMaxListLength(type: ColumnType | ColumnTypeEnum):
26
26
  * @return the allowed facetTypes, or null if faceting is not allowed
27
27
  */
28
28
  export declare function configureFacetsForType(type: ColumnType | ColumnTypeEnum, isJsonSubColumnFacet: boolean): (FacetType | undefined)[] | null;
29
+ /**
30
+ * Column types that are not allowed to have a default value.
31
+ * @see the `defaultValue` property description on the ColumnModel schema in the Synapse OpenAPI specification.
32
+ */
33
+ export declare const DISALLOWED_DEFAULT_VALUE_COLUMN_TYPES: ColumnTypeEnum[];
29
34
  export declare function canHaveDefault(type: ColumnType | ColumnTypeEnum, isView: boolean, isJsonSubColumnFacet: boolean): boolean;
30
35
  export declare const DEFAULT_STRING_SIZE = 50;
31
36
  export declare const MAX_STRING_SIZE = 1000;
32
- export declare const MAX_LIST_LENGTH = 100;
37
+ export declare const DEFAULT_LIST_LENGTH = 100;
38
+ /** The maximum number of characters allowed in a column name. */
39
+ export declare const MAX_COLUMN_NAME_LENGTH = 256;
40
+ /** The maximum number of enumeration values allowed for a single column. */
41
+ export declare const MAX_ENUM_VALUES = 100;
42
+ /**
43
+ * The maximum total character budget for a list column. The server enforces that
44
+ * `maximumListLength * <per-element character size>` does not exceed this value.
45
+ */
46
+ export declare const LIST_LENGTH_CHARACTER_BUDGET = 100000;
33
47
  /**
34
48
  * Get the default max size for a given type.
35
49
  *
@@ -37,6 +51,18 @@ export declare const MAX_LIST_LENGTH = 100;
37
51
  * @return
38
52
  */
39
53
  export declare function getMaxSizeForType(type: ColumnType | ColumnTypeEnum): number;
54
+ /**
55
+ * Get the maximum allowed `maximumListLength` for a list column type.
56
+ *
57
+ * The server enforces a total character budget of {@link LIST_LENGTH_CHARACTER_BUDGET}.
58
+ * For STRING_LIST the per-element size is the configurable `maximumSize` (defaulting to
59
+ * {@link DEFAULT_STRING_SIZE}); for all other list types the per-element size is fixed.
60
+ *
61
+ * @param type the list column type
62
+ * @param maximumSize the configured element size, used only for STRING_LIST
63
+ * @return the maximum allowed list length
64
+ */
65
+ export declare function getMaxListLengthForType(type: ColumnType | ColumnTypeEnum, maximumSize?: number): number;
40
66
  export declare function canHaveRestrictedValues(type: ColumnType | ColumnTypeEnum, isJsonSubColumnFacet: boolean): boolean;
41
67
  /**
42
68
  * Transform ColumnModels returned by Synapse into the form data for the TableColumnSchemaForm.
@@ -1 +1 @@
1
- {"version":3,"file":"TableColumnSchemaEditorUtils.d.ts","sourceRoot":"","sources":["../../../src/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,WAAW,EACX,UAAU,EACV,cAAc,EACd,MAAM,EAGN,SAAS,EACT,SAAS,EACV,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EACL,mBAAmB,EAEpB,MAAM,mCAAmC,CAAA;AAQ1C;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,OAAO,EACf,oBAAoB,EAAE,OAAO,GAC5B,cAAc,EAAE,CAuBlB;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,SAAS,sBAS5D;AACD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,sQA6C1E;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,CAUtE;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,UAAU,GAAG,cAAc,GAChC,OAAO,CAYT;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,UAAU,GAAG,cAAc,EACjC,oBAAoB,EAAE,OAAO,GAC5B,CAAC,SAAS,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,CAiClC;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,UAAU,GAAG,cAAc,EACjC,MAAM,EAAE,OAAO,EACf,oBAAoB,EAAE,OAAO,WAwB9B;AAED,eAAO,MAAM,mBAAmB,KAAK,CAAA;AACrC,eAAO,MAAM,eAAe,OAAO,CAAA;AACnC,eAAO,MAAM,eAAe,MAAM,CAAA;AAElC;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,GAAG,MAAM,CAS3E;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,UAAU,GAAG,cAAc,EACjC,oBAAoB,EAAE,OAAO,GAC5B,OAAO,CAaT;AAeD;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,YAAY,EAAE,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,EAC9C,cAAc,GAAE,WAAW,EAAO,GACjC,mBAAmB,EAAE,CAoCvB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAgC3E;AAED,wBAAgB,wCAAwC,CACtD,UAAU,EAAE,cAAc,GACzB,qBAAqB,CA8BvB;AASD,eAAO,MAAM,uBAAuB,GAClC,cAAc,WAAW,EAAE,EAC3B,QAAQ,mBAAmB,KAC1B,WAAW,GAAG,SAWhB,CAAA;AAED,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GACzC,MAAM,GAAG,IAAI,CAKf;AAED,eAAO,MAAM,0CAA0C,GACrD,eAAe,MAAM,GAAG,MAAM,GAAG,SAAS,EAC1C,kBAAkB,MAAM,GAAG,SAAS,KACnC,OAKF,CAAA;AAED,wBAAgB,wCAAwC,CACtD,WAAW,EAAE,mBAAmB,EAChC,qBAAqB,CAAC,EAAE,WAAW,GAClC,OAAO,CAmBT;AAED,wBAAgB,6DAA6D,CAC3E,YAAY,EAAE,mBAAmB,EAAE,EACnC,sBAAsB,EAAE,WAAW,EAAE,GACpC,MAAM,CAYR"}
1
+ {"version":3,"file":"TableColumnSchemaEditorUtils.d.ts","sourceRoot":"","sources":["../../../src/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,WAAW,EACX,UAAU,EACV,cAAc,EACd,MAAM,EAGN,SAAS,EACT,SAAS,EACV,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EACL,mBAAmB,EAEpB,MAAM,mCAAmC,CAAA;AAQ1C;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,OAAO,EACf,oBAAoB,EAAE,OAAO,GAC5B,cAAc,EAAE,CAuBlB;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,SAAS,sBAS5D;AACD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,sQA6C1E;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,CAUtE;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,UAAU,GAAG,cAAc,GAChC,OAAO,CAaT;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,UAAU,GAAG,cAAc,EACjC,oBAAoB,EAAE,OAAO,GAC5B,CAAC,SAAS,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,CAiClC;AAED;;;GAGG;AACH,eAAO,MAAM,qCAAqC,EAAE,cAAc,EAUjE,CAAA;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,UAAU,GAAG,cAAc,EACjC,MAAM,EAAE,OAAO,EACf,oBAAoB,EAAE,OAAO,WAY9B;AAED,eAAO,MAAM,mBAAmB,KAAK,CAAA;AACrC,eAAO,MAAM,eAAe,OAAO,CAAA;AACnC,eAAO,MAAM,mBAAmB,MAAM,CAAA;AAEtC,iEAAiE;AACjE,eAAO,MAAM,sBAAsB,MAAM,CAAA;AAEzC,4EAA4E;AAC5E,eAAO,MAAM,eAAe,MAAM,CAAA;AAElC;;;GAGG;AACH,eAAO,MAAM,4BAA4B,SAAU,CAAA;AAiBnD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,GAAG,MAAM,CAS3E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,UAAU,GAAG,cAAc,EACjC,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAUR;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,UAAU,GAAG,cAAc,EACjC,oBAAoB,EAAE,OAAO,GAC5B,OAAO,CAaT;AAeD;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,YAAY,EAAE,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,EAC9C,cAAc,GAAE,WAAW,EAAO,GACjC,mBAAmB,EAAE,CAoCvB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAgC3E;AAED,wBAAgB,wCAAwC,CACtD,UAAU,EAAE,cAAc,GACzB,qBAAqB,CA8BvB;AASD,eAAO,MAAM,uBAAuB,GAClC,cAAc,WAAW,EAAE,EAC3B,QAAQ,mBAAmB,KAC1B,WAAW,GAAG,SAWhB,CAAA;AAED,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GACzC,MAAM,GAAG,IAAI,CAKf;AAED,eAAO,MAAM,0CAA0C,GACrD,eAAe,MAAM,GAAG,MAAM,GAAG,SAAS,EAC1C,kBAAkB,MAAM,GAAG,SAAS,KACnC,OAKF,CAAA;AAED,wBAAgB,wCAAwC,CACtD,WAAW,EAAE,mBAAmB,EAChC,qBAAqB,CAAC,EAAE,WAAW,GAClC,OAAO,CAmBT;AAED,wBAAgB,6DAA6D,CAC3E,YAAY,EAAE,mBAAmB,EAAE,EACnC,sBAAsB,EAAE,WAAW,EAAE,GACpC,MAAM,CAYR"}