synapse-react-client 4.0.6 → 4.0.8

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 (160) hide show
  1. package/dist/SWC.index.js +1 -1
  2. package/dist/components/CardDeck/TableQueryCardDeck.js +3 -4
  3. package/dist/components/CardDeck/TableQueryCardDeck.js.map +1 -1
  4. package/dist/components/ChangePassword/useChangePasswordFormState.js +2 -3
  5. package/dist/components/ChangePassword/useChangePasswordFormState.js.map +1 -1
  6. package/dist/components/ColoredBulletListItem/ColoredBulletListItem.css +1 -0
  7. package/dist/components/ColoredBulletListItem/ColoredBulletListItem.d.ts +8 -0
  8. package/dist/components/ColoredBulletListItem/ColoredBulletListItem.d.ts.map +1 -0
  9. package/dist/components/ColoredBulletListItem/ColoredBulletListItem.js +21 -0
  10. package/dist/components/ColoredBulletListItem/ColoredBulletListItem.js.map +1 -0
  11. package/dist/components/ColoredBulletListItem/ColoredBulletListItem.module.scss +32 -0
  12. package/dist/components/ColoredBulletListItem/ColoredBulletListItem.module.scss.js +14 -0
  13. package/dist/components/ColoredBulletListItem/ColoredBulletListItem.module.scss.js.map +1 -0
  14. package/dist/components/ColoredBulletListItem/index.d.ts +5 -0
  15. package/dist/components/ColoredBulletListItem/index.d.ts.map +1 -0
  16. package/dist/components/ColoredBulletListItem/index.js +6 -0
  17. package/dist/components/ColoredBulletListItem/index.js.map +1 -0
  18. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js +3 -4
  19. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js.map +1 -1
  20. package/dist/components/CreateProjectModal/CreateProjectModal.d.ts.map +1 -1
  21. package/dist/components/CreateProjectModal/CreateProjectModal.js +120 -46
  22. package/dist/components/CreateProjectModal/CreateProjectModal.js.map +1 -1
  23. package/dist/components/CreateProjectModal/ProjectVisibilityRadioGroup.d.ts +7 -0
  24. package/dist/components/CreateProjectModal/ProjectVisibilityRadioGroup.d.ts.map +1 -0
  25. package/dist/components/CreateProjectModal/ProjectVisibilityRadioGroup.js +132 -0
  26. package/dist/components/CreateProjectModal/ProjectVisibilityRadioGroup.js.map +1 -0
  27. package/dist/components/DataGrid/DataGrid.d.ts +2 -0
  28. package/dist/components/DataGrid/DataGrid.d.ts.map +1 -1
  29. package/dist/components/DataGrid/DataGrid.js +69 -67
  30. package/dist/components/DataGrid/DataGrid.js.map +1 -1
  31. package/dist/components/DataGrid/DataGridTypes.d.ts +8 -2
  32. package/dist/components/DataGrid/DataGridTypes.d.ts.map +1 -1
  33. package/dist/components/DataGrid/DataGridTypes.js.map +1 -1
  34. package/dist/components/DataGrid/MergeGridWithSourceTableButton.js +2 -3
  35. package/dist/components/DataGrid/MergeGridWithSourceTableButton.js.map +1 -1
  36. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  37. package/dist/components/DataGrid/SynapseGrid.js +184 -164
  38. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  39. package/dist/components/DataGrid/components/UploadCsvToGridDialog.js +2 -3
  40. package/dist/components/DataGrid/components/UploadCsvToGridDialog.js.map +1 -1
  41. package/dist/components/DataGrid/hooks/useGridReplicaUsers.d.ts +15 -0
  42. package/dist/components/DataGrid/hooks/useGridReplicaUsers.d.ts.map +1 -0
  43. package/dist/components/DataGrid/hooks/useGridReplicaUsers.js +55 -0
  44. package/dist/components/DataGrid/hooks/useGridReplicaUsers.js.map +1 -0
  45. package/dist/components/DataGrid/hooks/useRemoteSelections.d.ts +16 -0
  46. package/dist/components/DataGrid/hooks/useRemoteSelections.d.ts.map +1 -0
  47. package/dist/components/DataGrid/hooks/useRemoteSelections.js +30 -0
  48. package/dist/components/DataGrid/hooks/useRemoteSelections.js.map +1 -0
  49. package/dist/components/DataGrid/utils/DataGridUtils.js +31 -31
  50. package/dist/components/DataGrid/utils/DataGridUtils.js.map +1 -1
  51. package/dist/components/DataGrid/utils/applyModelChange.d.ts +1 -1
  52. package/dist/components/DataGrid/utils/applyModelChange.d.ts.map +1 -1
  53. package/dist/components/DataGrid/utils/applyModelChange.js +28 -23
  54. package/dist/components/DataGrid/utils/applyModelChange.js.map +1 -1
  55. package/dist/components/DataGrid/utils/columnFactory.d.ts.map +1 -1
  56. package/dist/components/DataGrid/utils/columnFactory.js +90 -49
  57. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  58. package/dist/components/DataGrid/utils/enrichRowsWithChangeInfo.d.ts +14 -0
  59. package/dist/components/DataGrid/utils/enrichRowsWithChangeInfo.d.ts.map +1 -0
  60. package/dist/components/DataGrid/utils/enrichRowsWithChangeInfo.js +24 -0
  61. package/dist/components/DataGrid/utils/enrichRowsWithChangeInfo.js.map +1 -0
  62. package/dist/components/DataGrid/utils/getCellAuthorSid.d.ts +7 -0
  63. package/dist/components/DataGrid/utils/getCellAuthorSid.d.ts.map +1 -0
  64. package/dist/components/DataGrid/utils/getCellAuthorSid.js +11 -0
  65. package/dist/components/DataGrid/utils/getCellAuthorSid.js.map +1 -0
  66. package/dist/components/DataGrid/utils/getCellClassName.d.ts +2 -0
  67. package/dist/components/DataGrid/utils/getCellClassName.d.ts.map +1 -1
  68. package/dist/components/DataGrid/utils/getCellClassName.js +23 -12
  69. package/dist/components/DataGrid/utils/getCellClassName.js.map +1 -1
  70. package/dist/components/DataGrid/utils/getChangeTooltipText.d.ts +7 -0
  71. package/dist/components/DataGrid/utils/getChangeTooltipText.d.ts.map +1 -0
  72. package/dist/components/DataGrid/utils/getChangeTooltipText.js +18 -0
  73. package/dist/components/DataGrid/utils/getChangeTooltipText.js.map +1 -0
  74. package/dist/components/DataGrid/utils/getReplicaCategory.d.ts +12 -0
  75. package/dist/components/DataGrid/utils/getReplicaCategory.d.ts.map +1 -0
  76. package/dist/components/DataGrid/utils/getReplicaCategory.js +13 -0
  77. package/dist/components/DataGrid/utils/getReplicaCategory.js.map +1 -0
  78. package/dist/components/DataGrid/utils/replicaSelectionToGridSelection.d.ts +15 -0
  79. package/dist/components/DataGrid/utils/replicaSelectionToGridSelection.d.ts.map +1 -0
  80. package/dist/components/DataGrid/utils/replicaSelectionToGridSelection.js +43 -0
  81. package/dist/components/DataGrid/utils/replicaSelectionToGridSelection.js.map +1 -0
  82. package/dist/components/DialogBase.d.ts +3 -1
  83. package/dist/components/DialogBase.d.ts.map +1 -1
  84. package/dist/components/DialogBase.js +75 -56
  85. package/dist/components/DialogBase.js.map +1 -1
  86. package/dist/components/Ecosystem/EcosystemSkeleton.js +2 -3
  87. package/dist/components/Ecosystem/EcosystemSkeleton.js.map +1 -1
  88. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js +2 -3
  89. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
  90. package/dist/components/FeaturedDataTabs/FeaturedDataTabs.js +2 -3
  91. package/dist/components/FeaturedDataTabs/FeaturedDataTabs.js.map +1 -1
  92. package/dist/components/GenericCard/GenericCard.js +3 -4
  93. package/dist/components/GenericCard/GenericCard.js.map +1 -1
  94. package/dist/components/HeaderCard.js +2 -3
  95. package/dist/components/HeaderCard.js.map +1 -1
  96. package/dist/components/IconSvg/IconSvg.d.ts +1 -1
  97. package/dist/components/IconSvg/IconSvg.d.ts.map +1 -1
  98. package/dist/components/IconSvg/IconSvg.js +168 -165
  99. package/dist/components/IconSvg/IconSvg.js.map +1 -1
  100. package/dist/components/StorybookComponentWrapper.js +3 -4
  101. package/dist/components/StorybookComponentWrapper.js.map +1 -1
  102. package/dist/components/SynapseForm/SynapseFormSubmissionGrid.d.ts +1 -0
  103. package/dist/components/SynapseForm/SynapseFormSubmissionGrid.d.ts.map +1 -1
  104. package/dist/components/SynapseForm/SynapseFormSubmissionGrid.js +23 -16
  105. package/dist/components/SynapseForm/SynapseFormSubmissionGrid.js.map +1 -1
  106. package/dist/components/TextField/TextField.css +1 -1
  107. package/dist/components/TextField/TextField.d.ts +1 -0
  108. package/dist/components/TextField/TextField.d.ts.map +1 -1
  109. package/dist/components/TextField/TextField.js +32 -20
  110. package/dist/components/TextField/TextField.js.map +1 -1
  111. package/dist/components/TextField/TextField.module.scss +7 -0
  112. package/dist/components/TextField/TextField.module.scss.js +5 -3
  113. package/dist/components/TextField/TextField.module.scss.js.map +1 -1
  114. package/dist/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.js +2 -3
  115. package/dist/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.js.map +1 -1
  116. package/dist/components/index.d.ts +1 -0
  117. package/dist/components/index.d.ts.map +1 -1
  118. package/dist/components/index.js +242 -240
  119. package/dist/components/index.js.map +1 -1
  120. package/dist/components/styled/StyledFormControl.js +1 -1
  121. package/dist/components/styled/StyledFormControl.js.map +1 -1
  122. package/dist/components/table/CsvPreview/CsvPreview.js +2 -3
  123. package/dist/components/table/CsvPreview/CsvPreview.js.map +1 -1
  124. package/dist/components/table/CsvPreview/CsvPreviewDialog.js +2 -3
  125. package/dist/components/table/CsvPreview/CsvPreviewDialog.js.map +1 -1
  126. package/dist/features/curator/GridPage/GridPage.js +2 -3
  127. package/dist/features/curator/GridPage/GridPage.js.map +1 -1
  128. package/dist/features/curator/GridPage/components/GridPageTitle.js +2 -3
  129. package/dist/features/curator/GridPage/components/GridPageTitle.js.map +1 -1
  130. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts.map +1 -1
  131. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +49 -180
  132. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
  133. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js +2 -3
  134. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -1
  135. package/dist/features/entity/metadata-task/utils/getCreateGridRequestForMetadataTask.d.ts.map +1 -1
  136. package/dist/features/entity/metadata-task/utils/getCreateGridRequestForMetadataTask.js +4 -8
  137. package/dist/features/entity/metadata-task/utils/getCreateGridRequestForMetadataTask.js.map +1 -1
  138. package/dist/index.js +306 -304
  139. package/dist/index.js.map +1 -1
  140. package/dist/style/components/_data-grid-extra.css +1 -1
  141. package/dist/style/components/_data-grid-extra.scss +49 -0
  142. package/dist/synapse-client/SynapseClient.d.ts +1 -1
  143. package/dist/synapse-client/SynapseClient.d.ts.map +1 -1
  144. package/dist/synapse-client/SynapseClient.js +3 -2
  145. package/dist/synapse-client/SynapseClient.js.map +1 -1
  146. package/dist/synapse-queries/index.js +42 -41
  147. package/dist/synapse-queries/user/index.js +17 -16
  148. package/dist/synapse-queries/user/useUserBundle.d.ts +9 -0
  149. package/dist/synapse-queries/user/useUserBundle.d.ts.map +1 -1
  150. package/dist/synapse-queries/user/useUserBundle.js +45 -37
  151. package/dist/synapse-queries/user/useUserBundle.js.map +1 -1
  152. package/dist/theme/palette/Palettes.d.ts +2 -0
  153. package/dist/theme/palette/Palettes.d.ts.map +1 -1
  154. package/dist/theme/palette/Palettes.js +46 -40
  155. package/dist/theme/palette/Palettes.js.map +1 -1
  156. package/dist/tsconfig.build.tsbuildinfo +1 -1
  157. package/package.json +3 -3
  158. package/dist/assets/ArcusBioIcon.svg +0 -1
  159. package/dist/assets/ArcusBioIcon.svg.js +0 -7
  160. package/dist/assets/ArcusBioIcon.svg.js.map +0 -1
@@ -0,0 +1,7 @@
1
+ export type ProjectVisibility = 'PRIVATE' | 'DISCOVERABLE' | 'PUBLIC' | 'OPEN';
2
+ export type ProjectVisibilityRadioGroupProps = {
3
+ value: ProjectVisibility;
4
+ onChange: (value: ProjectVisibility) => void;
5
+ };
6
+ export declare function ProjectVisibilityRadioGroup({ value, onChange, }: ProjectVisibilityRadioGroupProps): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=ProjectVisibilityRadioGroup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectVisibilityRadioGroup.d.ts","sourceRoot":"","sources":["../../../src/components/CreateProjectModal/ProjectVisibilityRadioGroup.tsx"],"names":[],"mappings":"AAWA,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,cAAc,GAAG,QAAQ,GAAG,MAAM,CAAA;AAqD9E,MAAM,MAAM,gCAAgC,GAAG;IAC7C,KAAK,EAAE,iBAAiB,CAAA;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAA;CAC7C,CAAA;AAED,wBAAgB,2BAA2B,CAAC,EAC1C,KAAK,EACL,QAAQ,GACT,EAAE,gCAAgC,2CA6ElC"}
@@ -0,0 +1,132 @@
1
+ import { jsxs as l, jsx as i, Fragment as s } from "react/jsx-runtime";
2
+ import { FormControl as d, Typography as a, RadioGroup as c, FormControlLabel as p, Box as t, Chip as b, Radio as x } from "@mui/material";
3
+ import h from "../IconSvg/IconSvg.js";
4
+ const m = [
5
+ {
6
+ value: "PRIVATE",
7
+ label: "Private",
8
+ chipText: "Invisible",
9
+ description: "Only you and people you invite can see this project exists. Others with the link will see an error."
10
+ },
11
+ {
12
+ value: "DISCOVERABLE",
13
+ label: "Discoverable",
14
+ chipText: "Visible metadata",
15
+ description: "Anyone can find and view this project. Data download is not allowed."
16
+ },
17
+ {
18
+ value: "PUBLIC",
19
+ label: "Public",
20
+ chipText: "Visible metadata, registered download",
21
+ description: "Anyone can find and view this project. Registered Synapse users can download data."
22
+ },
23
+ {
24
+ value: "OPEN",
25
+ label: "Open",
26
+ chipText: "Fully visible, anonymous download",
27
+ description: "Anyone can find and view this project and download its data.",
28
+ note: "Currently available upon request for non-sensitive data.",
29
+ disabled: !0
30
+ }
31
+ ], y = {
32
+ PRIVATE: "privateVisibility",
33
+ DISCOVERABLE: "visibility",
34
+ PUBLIC: "publicVisibility",
35
+ OPEN: "openVisibility"
36
+ };
37
+ function f({
38
+ value: n,
39
+ onChange: r
40
+ }) {
41
+ return /* @__PURE__ */ l(d, { component: "fieldset", children: [
42
+ /* @__PURE__ */ i(a, { variant: "smallText2", component: "legend", sx: { mb: 1, pb: 1 }, children: "Visibility" }),
43
+ /* @__PURE__ */ i(
44
+ c,
45
+ {
46
+ sx: { mt: 1 },
47
+ value: n,
48
+ onChange: (e, o) => r(o),
49
+ children: m.map((e) => /* @__PURE__ */ i(
50
+ p,
51
+ {
52
+ value: e.value,
53
+ disabled: e.disabled,
54
+ sx: {
55
+ alignItems: "flex-start",
56
+ mb: 1,
57
+ opacity: e.disabled ? 0.5 : 1
58
+ },
59
+ control: /* @__PURE__ */ i(x, { sx: { pt: "2px" } }),
60
+ label: /* @__PURE__ */ l(t, { sx: { display: "flex", alignItems: "flex-start", gap: 1 }, children: [
61
+ /* @__PURE__ */ i(
62
+ h,
63
+ {
64
+ icon: y[e.value],
65
+ wrap: !1,
66
+ sx: { mt: "2px", flexShrink: 0 }
67
+ }
68
+ ),
69
+ /* @__PURE__ */ l(t, { children: [
70
+ /* @__PURE__ */ l(
71
+ t,
72
+ {
73
+ sx: {
74
+ display: "flex",
75
+ alignItems: "center",
76
+ gap: 1,
77
+ flexWrap: "wrap"
78
+ },
79
+ children: [
80
+ /* @__PURE__ */ i(
81
+ a,
82
+ {
83
+ variant: "body1",
84
+ component: "span",
85
+ fontWeight: "bold",
86
+ children: e.label
87
+ }
88
+ ),
89
+ /* @__PURE__ */ i(
90
+ b,
91
+ {
92
+ label: e.chipText,
93
+ size: "small",
94
+ sx: {
95
+ bgcolor: "grey.200",
96
+ color: "text.secondary",
97
+ height: 20,
98
+ fontSize: "0.7rem"
99
+ }
100
+ }
101
+ )
102
+ ]
103
+ }
104
+ ),
105
+ /* @__PURE__ */ l(
106
+ a,
107
+ {
108
+ variant: "body1",
109
+ color: "text.secondary",
110
+ sx: { mt: 0.25 },
111
+ children: [
112
+ e.description,
113
+ e.note && /* @__PURE__ */ l(s, { children: [
114
+ " ",
115
+ /* @__PURE__ */ i("em", { children: e.note })
116
+ ] })
117
+ ]
118
+ }
119
+ )
120
+ ] })
121
+ ] })
122
+ },
123
+ e.value
124
+ ))
125
+ }
126
+ )
127
+ ] });
128
+ }
129
+ export {
130
+ f as ProjectVisibilityRadioGroup
131
+ };
132
+ //# sourceMappingURL=ProjectVisibilityRadioGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectVisibilityRadioGroup.js","sources":["../../../src/components/CreateProjectModal/ProjectVisibilityRadioGroup.tsx"],"sourcesContent":["import {\n Box,\n Chip,\n FormControl,\n FormControlLabel,\n Radio,\n RadioGroup,\n Typography,\n} from '@mui/material'\nimport IconSvg from '../IconSvg'\n\nexport type ProjectVisibility = 'PRIVATE' | 'DISCOVERABLE' | 'PUBLIC' | 'OPEN'\n\ntype VisibilityOption = {\n value: ProjectVisibility\n label: string\n chipText: string\n description: string\n note?: string\n disabled?: boolean\n}\n\nconst VISIBILITY_OPTIONS: VisibilityOption[] = [\n {\n value: 'PRIVATE',\n label: 'Private',\n chipText: 'Invisible',\n description:\n 'Only you and people you invite can see this project exists. Others with the link will see an error.',\n },\n {\n value: 'DISCOVERABLE',\n label: 'Discoverable',\n chipText: 'Visible metadata',\n description:\n 'Anyone can find and view this project. Data download is not allowed.',\n },\n {\n value: 'PUBLIC',\n label: 'Public',\n chipText: 'Visible metadata, registered download',\n description:\n 'Anyone can find and view this project. Registered Synapse users can download data.',\n },\n {\n value: 'OPEN',\n label: 'Open',\n chipText: 'Fully visible, anonymous download',\n description: 'Anyone can find and view this project and download its data.',\n note: 'Currently available upon request for non-sensitive data.',\n disabled: true,\n },\n]\n\nconst VISIBILITY_ICONS: Record<\n ProjectVisibility,\n React.ComponentProps<typeof IconSvg>['icon']\n> = {\n PRIVATE: 'privateVisibility',\n DISCOVERABLE: 'visibility',\n PUBLIC: 'publicVisibility',\n OPEN: 'openVisibility',\n}\n\nexport type ProjectVisibilityRadioGroupProps = {\n value: ProjectVisibility\n onChange: (value: ProjectVisibility) => void\n}\n\nexport function ProjectVisibilityRadioGroup({\n value,\n onChange,\n}: ProjectVisibilityRadioGroupProps) {\n return (\n <FormControl component=\"fieldset\">\n <Typography variant=\"smallText2\" component=\"legend\" sx={{ mb: 1, pb: 1 }}>\n Visibility\n </Typography>\n <RadioGroup\n sx={{ mt: 1 }}\n value={value}\n onChange={(_e, val) => onChange(val as ProjectVisibility)}\n >\n {VISIBILITY_OPTIONS.map(option => (\n <FormControlLabel\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n sx={{\n alignItems: 'flex-start',\n mb: 1,\n opacity: option.disabled ? 0.5 : 1,\n }}\n control={<Radio sx={{ pt: '2px' }} />}\n label={\n <Box sx={{ display: 'flex', alignItems: 'flex-start', gap: 1 }}>\n <IconSvg\n icon={VISIBILITY_ICONS[option.value]}\n wrap={false}\n sx={{ mt: '2px', flexShrink: 0 }}\n />\n <Box>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n flexWrap: 'wrap',\n }}\n >\n <Typography\n variant=\"body1\"\n component=\"span\"\n fontWeight=\"bold\"\n >\n {option.label}\n </Typography>\n <Chip\n label={option.chipText}\n size=\"small\"\n sx={{\n bgcolor: 'grey.200',\n color: 'text.secondary',\n height: 20,\n fontSize: '0.7rem',\n }}\n />\n </Box>\n <Typography\n variant=\"body1\"\n color=\"text.secondary\"\n sx={{ mt: 0.25 }}\n >\n {option.description}\n {option.note && (\n <>\n {' '}\n <em>{option.note}</em>\n </>\n )}\n </Typography>\n </Box>\n </Box>\n }\n />\n ))}\n </RadioGroup>\n </FormControl>\n )\n}\n"],"names":["VISIBILITY_OPTIONS","VISIBILITY_ICONS","ProjectVisibilityRadioGroup","value","onChange","jsxs","FormControl","jsx","Typography","RadioGroup","_e","val","option","FormControlLabel","Radio","Box","IconSvg","Chip","Fragment"],"mappings":"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"}
@@ -5,6 +5,7 @@ import '@sage-bionetworks/react-datasheet-grid/dist/style.css';
5
5
  import '../../style/components/_data-grid-extra.scss';
6
6
  import { SelectionWithId } from '@sage-bionetworks/react-datasheet-grid';
7
7
  import { DataGridRow, Operation } from './DataGridTypes';
8
+ import type { RemoteSelection } from './hooks/useRemoteSelections';
8
9
  type DataGridProps = {
9
10
  gridRef: React.RefObject<DataSheetGridRef | null>;
10
11
  columnNames: string[];
@@ -19,6 +20,7 @@ type DataGridProps = {
19
20
  selection: SelectionWithId | null;
20
21
  }) => void;
21
22
  onSelectedRowChange?: (rowIndex: number | null, row: DataGridRow | null) => void;
23
+ remoteSelections?: readonly RemoteSelection[];
22
24
  };
23
25
  /**
24
26
  * Component that renders a data grid/spreadsheet using react-datasheet-grid.
@@ -1 +1 @@
1
- {"version":3,"file":"DataGrid.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/DataGrid.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAA;AAE9E,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,EAEL,gBAAgB,EACjB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,uDAAuD,CAAA;AAC9D,OAAO,8CAA8C,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AAMxE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AASxD,KAAK,aAAa,GAAG;IACnB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IACjD,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,oBAAoB,EAAE,mBAAmB,CAAA;IACzC,SAAS,EAAE,WAAW,EAAE,CAAA;IACxB,YAAY,EAAE,OAAO,CAAA;IACrB,UAAU,EAAE,WAAW,GAAG,SAAS,CAAA;IACnC,aAAa,EAAE,eAAe,GAAG,IAAI,CAAA;IACrC,YAAY,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,IAAI,CAAA;IACxE,qBAAqB,EAAE,CAAC,IAAI,EAAE;QAAE,SAAS,EAAE,eAAe,GAAG,IAAI,CAAA;KAAE,KAAK,IAAI,CAAA;IAC5E,mBAAmB,CAAC,EAAE,CACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,GAAG,EAAE,WAAW,GAAG,IAAI,KACpB,IAAI,CAAA;CACV,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAK,EAAE,aAAa,2CAyOpD"}
1
+ {"version":3,"file":"DataGrid.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/DataGrid.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAA;AAE9E,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,EAEL,gBAAgB,EACjB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,uDAAuD,CAAA;AAC9D,OAAO,8CAA8C,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AAMxE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAQxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAElE,KAAK,aAAa,GAAG;IACnB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IACjD,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,oBAAoB,EAAE,mBAAmB,CAAA;IACzC,SAAS,EAAE,WAAW,EAAE,CAAA;IACxB,YAAY,EAAE,OAAO,CAAA;IACrB,UAAU,EAAE,WAAW,GAAG,SAAS,CAAA;IACnC,aAAa,EAAE,eAAe,GAAG,IAAI,CAAA;IACrC,YAAY,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,IAAI,CAAA;IACxE,qBAAqB,EAAE,CAAC,IAAI,EAAE;QAAE,SAAS,EAAE,eAAe,GAAG,IAAI,CAAA;KAAE,KAAK,IAAI,CAAA;IAC5E,mBAAmB,CAAC,EAAE,CACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,GAAG,EAAE,WAAW,GAAG,IAAI,KACpB,IAAI,CAAA;IACT,gBAAgB,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;CAC9C,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAK,EAAE,aAAa,2CA2OpD"}
@@ -1,16 +1,16 @@
1
- import { jsx as A } from "react/jsx-runtime";
2
- import { modelColsToGrid as Y } from "./utils/modelColsToGrid.js";
3
- import B from "classnames";
4
- import { useState as h, useEffect as H, useCallback as s, useMemo as f, useRef as D } from "react";
5
- import { DynamicDataSheetGrid as q } from "@sage-bionetworks/react-datasheet-grid";
1
+ import { jsx as D } from "react/jsx-runtime";
2
+ import { modelColsToGrid as B } from "./utils/modelColsToGrid.js";
3
+ import H from "classnames";
4
+ import { useState as h, useEffect as q, useCallback as s, useMemo as f, useRef as E } from "react";
5
+ import { DynamicDataSheetGrid as F } from "@sage-bionetworks/react-datasheet-grid";
6
6
  import "@sage-bionetworks/react-datasheet-grid/dist/style.css";
7
7
  import '../../style/components/_data-grid-extra.css';/* empty css */
8
- import { renderViewContextMenu as F, renderRecordSetContextMenu as J, renderAddRowsComponent as L } from "./components/contextMenu.js";
9
- import { GRID_ROW_REACT_KEY_PROPERTY as Q } from "./utils/DataGridUtils.js";
10
- import { getCellClassName as X } from "./utils/getCellClassName.js";
11
- import { useColumnResizeHandles as Z } from "./hooks/useColumnResizeHandles.js";
12
- import { calculateDefaultColumnWidth as $ } from "./utils/calculateColumnWidth.js";
13
- function me(E) {
8
+ import { renderViewContextMenu as J, renderRecordSetContextMenu as L, renderAddRowsComponent as Q } from "./components/contextMenu.js";
9
+ import { GRID_ROW_REACT_KEY_PROPERTY as X } from "./utils/DataGridUtils.js";
10
+ import { getCellClassName as Z } from "./utils/getCellClassName.js";
11
+ import { useColumnResizeHandles as $ } from "./hooks/useColumnResizeHandles.js";
12
+ import { calculateDefaultColumnWidth as ee } from "./utils/calculateColumnWidth.js";
13
+ function fe(N) {
14
14
  const {
15
15
  gridRef: a,
16
16
  rowValues: C,
@@ -20,134 +20,136 @@ function me(E) {
20
20
  entityIsView: i,
21
21
  jsonSchema: d,
22
22
  lastSelection: R,
23
- handleChange: N,
24
- handleSelectionChange: W,
25
- onSelectedRowChange: p
26
- } = E, [S, g] = h({}), [v, x] = h(!1);
27
- H(() => {
28
- !r || !o || g((e) => {
23
+ handleChange: W,
24
+ handleSelectionChange: x,
25
+ onSelectedRowChange: p,
26
+ remoteSelections: S
27
+ } = N, [g, v] = h({}), [_, z] = h(!1);
28
+ q(() => {
29
+ !r || !o || v((e) => {
29
30
  const n = o.map((l) => r[l]);
30
31
  if (!n.some((l) => !e[l]))
31
32
  return e;
32
33
  const w = { ...e };
33
- return n.forEach((l, K) => {
34
+ return n.forEach((l, U) => {
34
35
  if (!w[l]) {
35
- const k = c[l], U = {
36
- showPinIcon: K === 0,
37
- hasDescription: !!k?.description
36
+ const A = c[l], Y = {
37
+ showPinIcon: U === 0,
38
+ hasDescription: !!A?.description
38
39
  };
39
- w[l] = $(
40
+ w[l] = ee(
40
41
  l,
41
- k,
42
- U
42
+ A,
43
+ Y
43
44
  );
44
45
  }
45
46
  }), w;
46
47
  });
47
48
  }, [r, o, c]);
48
- const _ = s(
49
+ const P = s(
49
50
  (e) => {
50
- typeof e != "number" || e < 0 || !o || e >= o.length || e === 0 && x((n) => !n);
51
+ typeof e != "number" || e < 0 || !o || e >= o.length || e === 0 && z((n) => !n);
51
52
  },
52
53
  [o]
53
- ), P = f(() => v ? /* @__PURE__ */ new Set([0]) : /* @__PURE__ */ new Set(), [v]), u = f(
54
- () => Y(
54
+ ), b = f(() => _ ? /* @__PURE__ */ new Set([0]) : /* @__PURE__ */ new Set(), [_]), u = f(
55
+ () => B(
55
56
  r,
56
57
  o,
57
58
  c,
58
- S,
59
- P,
60
- _
59
+ g,
60
+ b,
61
+ P
61
62
  ),
62
63
  [
63
64
  r,
64
65
  o,
65
66
  c,
66
- S,
67
- P,
68
- _
67
+ g,
68
+ b,
69
+ P
69
70
  ]
70
- ), [m, b] = h(null), z = f(
71
- () => i ? F : J,
71
+ ), [m, y] = h(null), G = f(
72
+ () => i ? J : L,
72
73
  [i]
73
- ), G = f(
74
- () => i ? !1 : L,
74
+ ), M = f(
75
+ () => i ? !1 : Q,
75
76
  [i]
76
- ), M = s(
77
- ({ rowData: e, rowIndex: n }) => B({
77
+ ), O = s(
78
+ ({ rowData: e, rowIndex: n }) => H({
78
79
  "row-valid": !!d && e.__validationStatus === "valid",
79
80
  "row-invalid": !!d && e.__validationStatus === "invalid",
80
81
  "row-unknown": !!d && e.__validationStatus === "pending",
81
82
  "row-selected": m === n
82
83
  }),
83
84
  [d, m]
84
- ), O = s(
85
+ ), T = s(
85
86
  ({
86
87
  rowData: e,
87
88
  rowIndex: n,
88
89
  columnId: t
89
- }) => X({
90
+ }) => Z({
90
91
  rowData: e,
91
92
  rowIndex: n,
92
93
  columnId: t || "",
93
94
  selectedRowIndex: m,
94
95
  lastSelection: R,
95
- colValues: u
96
+ colValues: u,
97
+ remoteSelections: S
96
98
  }),
97
- [m, R, u]
98
- ), T = s(
99
+ [m, R, u, S]
100
+ ), V = s(
99
101
  ({ rowData: e }) => ({
100
102
  ...e
101
103
  }),
102
104
  []
103
- ), V = s(
105
+ ), j = s(
104
106
  ({ cell: e }) => {
105
- e ? (b(e.row), p?.(e.row, C[e.row])) : (b(null), p?.(null, null));
107
+ e ? (y(e.row), p?.(e.row, C[e.row])) : (y(null), p?.(null, null));
106
108
  },
107
109
  [p, C]
108
- ), y = D(null), I = D(
110
+ ), I = E(null), k = E(
109
111
  null
110
- ), j = s(
112
+ ), K = s(
111
113
  (e, n) => {
112
114
  if (a.current) {
113
115
  const t = a.current.activeCell;
114
- t ? I.current = {
116
+ t ? k.current = {
115
117
  col: t.col,
116
118
  row: t.row
117
- } : I.current = null;
119
+ } : k.current = null;
118
120
  }
119
- g((t) => ({
121
+ v((t) => ({
120
122
  ...t,
121
123
  [e]: n
122
124
  }));
123
125
  },
124
126
  [a]
125
127
  );
126
- return Z({
127
- wrapperRef: y,
128
+ return $({
129
+ wrapperRef: I,
128
130
  colValues: u,
129
- onColumnResize: j
130
- }), /* @__PURE__ */ A("div", { ref: y, style: { position: "relative", width: "100%" }, children: /* @__PURE__ */ A(
131
- q,
131
+ onColumnResize: K
132
+ }), /* @__PURE__ */ D("div", { ref: I, style: { position: "relative", width: "100%" }, children: /* @__PURE__ */ D(
133
+ F,
132
134
  {
133
135
  ref: a,
134
136
  value: C,
135
137
  columns: u,
136
138
  autoAddRow: !i,
137
139
  disableSmartDelete: !0,
138
- addRowsComponent: G,
139
- contextMenuComponent: z,
140
- rowKey: Q,
141
- rowClassName: M,
142
- cellClassName: O,
143
- duplicateRow: T,
144
- onChange: N,
145
- onActiveCellChange: V,
146
- onSelectionChange: W
140
+ addRowsComponent: M,
141
+ contextMenuComponent: G,
142
+ rowKey: X,
143
+ rowClassName: O,
144
+ cellClassName: T,
145
+ duplicateRow: V,
146
+ onChange: W,
147
+ onActiveCellChange: j,
148
+ onSelectionChange: x
147
149
  }
148
150
  ) });
149
151
  }
150
152
  export {
151
- me as default
153
+ fe as default
152
154
  };
153
155
  //# sourceMappingURL=DataGrid.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataGrid.js","sources":["../../../src/components/DataGrid/DataGrid.tsx"],"sourcesContent":["import { modelColsToGrid } from '@/components/DataGrid/utils/modelColsToGrid'\nimport { SchemaPropertiesMap } from '@/utils/jsonschema/getSchemaPropertyInfo'\nimport classNames from 'classnames'\nimport { JSONSchema7 } from 'json-schema'\nimport { useEffect, useMemo, useState, useRef, useCallback } from 'react'\nimport {\n DynamicDataSheetGrid,\n DataSheetGridRef,\n} from '@sage-bionetworks/react-datasheet-grid'\nimport '@sage-bionetworks/react-datasheet-grid/dist/style.css'\nimport '../../style/components/_data-grid-extra.scss'\nimport { SelectionWithId } from '@sage-bionetworks/react-datasheet-grid'\nimport {\n renderAddRowsComponent,\n renderRecordSetContextMenu,\n renderViewContextMenu,\n} from './components/contextMenu'\nimport { DataGridRow, Operation } from './DataGridTypes'\nimport { GRID_ROW_REACT_KEY_PROPERTY } from './utils/DataGridUtils'\nimport { getCellClassName } from './utils/getCellClassName'\nimport { useColumnResizeHandles } from './hooks/useColumnResizeHandles'\nimport {\n calculateDefaultColumnWidth,\n HeaderOptions,\n} from './utils/calculateColumnWidth'\n\ntype DataGridProps = {\n gridRef: React.RefObject<DataSheetGridRef | null>\n columnNames: string[]\n columnOrder: number[]\n schemaPropertiesInfo: SchemaPropertiesMap\n rowValues: DataGridRow[]\n entityIsView: boolean\n jsonSchema: JSONSchema7 | undefined\n lastSelection: SelectionWithId | null\n handleChange: (newValue: DataGridRow[], operations: Operation[]) => void\n handleSelectionChange: (opts: { selection: SelectionWithId | null }) => void\n onSelectedRowChange?: (\n rowIndex: number | null,\n row: DataGridRow | null,\n ) => void\n}\n\n/**\n * Component that renders a data grid/spreadsheet using react-datasheet-grid.\n * @param props\n * @constructor\n */\nexport default function DataGrid(props: DataGridProps) {\n const {\n gridRef,\n rowValues,\n columnNames,\n columnOrder,\n schemaPropertiesInfo,\n entityIsView,\n jsonSchema,\n lastSelection,\n handleChange,\n handleSelectionChange,\n onSelectedRowChange,\n } = props\n\n // Move columnWidths state into DataGrid\n const [columnWidths, setColumnWidths] = useState<Record<string, number>>({})\n\n // Pin state management for first column\n const [isPinned, setIsPinned] = useState(false)\n\n // Initialize column widths with defaults when columns first become available\n useEffect(() => {\n if (!columnNames || !columnOrder) {\n return\n }\n\n // Initialize widths for any columns that don't have them yet\n setColumnWidths(prev => {\n const modelColumnNames = columnOrder.map(idx => columnNames[idx])\n\n // Check if any columns need initialization\n const needsUpdate = modelColumnNames.some(name => !prev[name])\n\n if (!needsUpdate) {\n return prev // Return same reference to avoid triggering updates\n }\n\n const newWidths = { ...prev }\n modelColumnNames.forEach((columnName, arrayIndex) => {\n if (!newWidths[columnName]) {\n // Calculate default width using centralized function\n const propertyInfo = schemaPropertiesInfo[columnName]\n const headerOptions: HeaderOptions = {\n showPinIcon: arrayIndex === 0,\n hasDescription: !!propertyInfo?.description,\n }\n newWidths[columnName] = calculateDefaultColumnWidth(\n columnName,\n propertyInfo,\n headerOptions,\n )\n }\n })\n return newWidths\n })\n }, [columnNames, columnOrder, schemaPropertiesInfo])\n\n // Handler to toggle pin state for the first column only\n const handleTogglePin = useCallback(\n (columnIndex: number) => {\n // Validate columnIndex\n if (\n typeof columnIndex !== 'number' ||\n columnIndex < 0 ||\n !columnOrder ||\n columnIndex >= columnOrder.length\n ) {\n return\n }\n\n if (columnIndex !== 0) return // Only allow first column pinning\n\n setIsPinned(prev => !prev)\n },\n [columnOrder],\n )\n\n // Memoize the pinned columns set to prevent recalculation during scroll\n const pinnedColumnsSet = useMemo<Set<number>>(() => {\n return isPinned ? new Set([0]) : new Set()\n }, [isPinned])\n\n const colValues = useMemo(\n () =>\n modelColsToGrid(\n columnNames,\n columnOrder,\n schemaPropertiesInfo,\n columnWidths,\n pinnedColumnsSet,\n handleTogglePin,\n ),\n [\n columnNames,\n columnOrder,\n schemaPropertiesInfo,\n columnWidths,\n pinnedColumnsSet,\n handleTogglePin,\n ],\n )\n const [selectedRowIndex, setSelectedRowIndex] = useState<number | null>(null)\n\n // Memoize contextMenuComponent\n const contextMenuComponent = useMemo(\n () => (entityIsView ? renderViewContextMenu : renderRecordSetContextMenu),\n [entityIsView],\n )\n\n // Memoize addRowsComponent\n const addRowsComponent = useMemo(\n () => (entityIsView ? false : renderAddRowsComponent),\n [entityIsView],\n )\n\n // Wrap rowClassName in useCallback\n const rowClassNameCallback = useCallback(\n ({ rowData, rowIndex }: { rowData: DataGridRow; rowIndex: number }) =>\n classNames({\n 'row-valid': !!jsonSchema && rowData.__validationStatus === 'valid',\n 'row-invalid': !!jsonSchema && rowData.__validationStatus === 'invalid',\n 'row-unknown': !!jsonSchema && rowData.__validationStatus === 'pending',\n 'row-selected': selectedRowIndex === rowIndex,\n }),\n [jsonSchema, selectedRowIndex],\n )\n\n // Wrap cellClassName in useCallback\n const cellClassNameCallback = useCallback(\n ({\n rowData,\n rowIndex,\n columnId,\n }: {\n rowData: unknown\n rowIndex: number\n columnId?: string\n }) => {\n return getCellClassName({\n rowData: rowData as DataGridRow,\n rowIndex,\n columnId: columnId || '',\n selectedRowIndex,\n lastSelection,\n colValues,\n })\n },\n [selectedRowIndex, lastSelection, colValues],\n )\n\n // Wrap duplicateRow in useCallback\n const duplicateRowCallback = useCallback(\n ({ rowData }: { rowData: DataGridRow }) => ({\n ...rowData,\n }),\n [],\n )\n\n // Wrap onActiveCellChange in useCallback\n const handleActiveCellChange = useCallback(\n ({ cell }: { cell: { row: number; col: number } | null }) => {\n if (cell) {\n setSelectedRowIndex(cell.row)\n onSelectedRowChange?.(cell.row, rowValues[cell.row])\n } else {\n setSelectedRowIndex(null)\n onSelectedRowChange?.(null, null)\n }\n },\n [onSelectedRowChange, rowValues],\n )\n\n // Wrapper ref for the grid container\n const wrapperRef = useRef<HTMLDivElement | null>(null)\n\n // Store the active cell before column resize so we can restore it\n const activeCellBeforeResizeRef = useRef<{ col: number; row: number } | null>(\n null,\n )\n\n // Handle column resize callback\n const handleColumnResize = useCallback(\n (columnName: string, newWidth: number) => {\n // Save the current active cell before updating widths (which will trigger remount)\n if (gridRef.current) {\n const activeCell = gridRef.current.activeCell\n if (activeCell) {\n activeCellBeforeResizeRef.current = {\n col: activeCell.col,\n row: activeCell.row,\n }\n } else {\n // Explicitly clear the ref if there's no active cell\n activeCellBeforeResizeRef.current = null\n }\n }\n\n setColumnWidths(prev => ({\n ...prev,\n [columnName]: newWidth,\n }))\n },\n [gridRef],\n )\n\n // Setup column resize handles\n useColumnResizeHandles({\n wrapperRef,\n colValues,\n onColumnResize: handleColumnResize,\n })\n\n return (\n <div ref={wrapperRef} style={{ position: 'relative', width: '100%' }}>\n <DynamicDataSheetGrid\n ref={gridRef}\n value={rowValues}\n columns={colValues}\n autoAddRow={!entityIsView}\n disableSmartDelete\n addRowsComponent={addRowsComponent}\n contextMenuComponent={contextMenuComponent}\n rowKey={GRID_ROW_REACT_KEY_PROPERTY}\n rowClassName={rowClassNameCallback}\n cellClassName={cellClassNameCallback}\n duplicateRow={duplicateRowCallback}\n onChange={handleChange}\n onActiveCellChange={handleActiveCellChange}\n onSelectionChange={handleSelectionChange}\n />\n </div>\n )\n}\n"],"names":["DataGrid","props","gridRef","rowValues","columnNames","columnOrder","schemaPropertiesInfo","entityIsView","jsonSchema","lastSelection","handleChange","handleSelectionChange","onSelectedRowChange","columnWidths","setColumnWidths","useState","isPinned","setIsPinned","useEffect","prev","modelColumnNames","idx","name","newWidths","columnName","arrayIndex","propertyInfo","headerOptions","calculateDefaultColumnWidth","handleTogglePin","useCallback","columnIndex","pinnedColumnsSet","useMemo","colValues","modelColsToGrid","selectedRowIndex","setSelectedRowIndex","contextMenuComponent","renderViewContextMenu","renderRecordSetContextMenu","addRowsComponent","renderAddRowsComponent","rowClassNameCallback","rowData","rowIndex","classNames","cellClassNameCallback","columnId","getCellClassName","duplicateRowCallback","handleActiveCellChange","cell","wrapperRef","useRef","activeCellBeforeResizeRef","handleColumnResize","newWidth","activeCell","useColumnResizeHandles","jsx","DynamicDataSheetGrid","GRID_ROW_REACT_KEY_PROPERTY"],"mappings":"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"}
1
+ {"version":3,"file":"DataGrid.js","sources":["../../../src/components/DataGrid/DataGrid.tsx"],"sourcesContent":["import { modelColsToGrid } from '@/components/DataGrid/utils/modelColsToGrid'\nimport { SchemaPropertiesMap } from '@/utils/jsonschema/getSchemaPropertyInfo'\nimport classNames from 'classnames'\nimport { JSONSchema7 } from 'json-schema'\nimport { useEffect, useMemo, useState, useRef, useCallback } from 'react'\nimport {\n DynamicDataSheetGrid,\n DataSheetGridRef,\n} from '@sage-bionetworks/react-datasheet-grid'\nimport '@sage-bionetworks/react-datasheet-grid/dist/style.css'\nimport '../../style/components/_data-grid-extra.scss'\nimport { SelectionWithId } from '@sage-bionetworks/react-datasheet-grid'\nimport {\n renderAddRowsComponent,\n renderRecordSetContextMenu,\n renderViewContextMenu,\n} from './components/contextMenu'\nimport { DataGridRow, Operation } from './DataGridTypes'\nimport { GRID_ROW_REACT_KEY_PROPERTY } from './utils/DataGridUtils'\nimport { getCellClassName } from './utils/getCellClassName'\nimport { useColumnResizeHandles } from './hooks/useColumnResizeHandles'\nimport {\n calculateDefaultColumnWidth,\n HeaderOptions,\n} from './utils/calculateColumnWidth'\nimport type { RemoteSelection } from './hooks/useRemoteSelections'\n\ntype DataGridProps = {\n gridRef: React.RefObject<DataSheetGridRef | null>\n columnNames: string[]\n columnOrder: number[]\n schemaPropertiesInfo: SchemaPropertiesMap\n rowValues: DataGridRow[]\n entityIsView: boolean\n jsonSchema: JSONSchema7 | undefined\n lastSelection: SelectionWithId | null\n handleChange: (newValue: DataGridRow[], operations: Operation[]) => void\n handleSelectionChange: (opts: { selection: SelectionWithId | null }) => void\n onSelectedRowChange?: (\n rowIndex: number | null,\n row: DataGridRow | null,\n ) => void\n remoteSelections?: readonly RemoteSelection[]\n}\n\n/**\n * Component that renders a data grid/spreadsheet using react-datasheet-grid.\n * @param props\n * @constructor\n */\nexport default function DataGrid(props: DataGridProps) {\n const {\n gridRef,\n rowValues,\n columnNames,\n columnOrder,\n schemaPropertiesInfo,\n entityIsView,\n jsonSchema,\n lastSelection,\n handleChange,\n handleSelectionChange,\n onSelectedRowChange,\n remoteSelections,\n } = props\n\n // Move columnWidths state into DataGrid\n const [columnWidths, setColumnWidths] = useState<Record<string, number>>({})\n\n // Pin state management for first column\n const [isPinned, setIsPinned] = useState(false)\n\n // Initialize column widths with defaults when columns first become available\n useEffect(() => {\n if (!columnNames || !columnOrder) {\n return\n }\n\n // Initialize widths for any columns that don't have them yet\n setColumnWidths(prev => {\n const modelColumnNames = columnOrder.map(idx => columnNames[idx])\n\n // Check if any columns need initialization\n const needsUpdate = modelColumnNames.some(name => !prev[name])\n\n if (!needsUpdate) {\n return prev // Return same reference to avoid triggering updates\n }\n\n const newWidths = { ...prev }\n modelColumnNames.forEach((columnName, arrayIndex) => {\n if (!newWidths[columnName]) {\n // Calculate default width using centralized function\n const propertyInfo = schemaPropertiesInfo[columnName]\n const headerOptions: HeaderOptions = {\n showPinIcon: arrayIndex === 0,\n hasDescription: !!propertyInfo?.description,\n }\n newWidths[columnName] = calculateDefaultColumnWidth(\n columnName,\n propertyInfo,\n headerOptions,\n )\n }\n })\n return newWidths\n })\n }, [columnNames, columnOrder, schemaPropertiesInfo])\n\n // Handler to toggle pin state for the first column only\n const handleTogglePin = useCallback(\n (columnIndex: number) => {\n // Validate columnIndex\n if (\n typeof columnIndex !== 'number' ||\n columnIndex < 0 ||\n !columnOrder ||\n columnIndex >= columnOrder.length\n ) {\n return\n }\n\n if (columnIndex !== 0) return // Only allow first column pinning\n\n setIsPinned(prev => !prev)\n },\n [columnOrder],\n )\n\n // Memoize the pinned columns set to prevent recalculation during scroll\n const pinnedColumnsSet = useMemo<Set<number>>(() => {\n return isPinned ? new Set([0]) : new Set()\n }, [isPinned])\n\n const colValues = useMemo(\n () =>\n modelColsToGrid(\n columnNames,\n columnOrder,\n schemaPropertiesInfo,\n columnWidths,\n pinnedColumnsSet,\n handleTogglePin,\n ),\n [\n columnNames,\n columnOrder,\n schemaPropertiesInfo,\n columnWidths,\n pinnedColumnsSet,\n handleTogglePin,\n ],\n )\n const [selectedRowIndex, setSelectedRowIndex] = useState<number | null>(null)\n\n // Memoize contextMenuComponent\n const contextMenuComponent = useMemo(\n () => (entityIsView ? renderViewContextMenu : renderRecordSetContextMenu),\n [entityIsView],\n )\n\n // Memoize addRowsComponent\n const addRowsComponent = useMemo(\n () => (entityIsView ? false : renderAddRowsComponent),\n [entityIsView],\n )\n\n // Wrap rowClassName in useCallback\n const rowClassNameCallback = useCallback(\n ({ rowData, rowIndex }: { rowData: DataGridRow; rowIndex: number }) =>\n classNames({\n 'row-valid': !!jsonSchema && rowData.__validationStatus === 'valid',\n 'row-invalid': !!jsonSchema && rowData.__validationStatus === 'invalid',\n 'row-unknown': !!jsonSchema && rowData.__validationStatus === 'pending',\n 'row-selected': selectedRowIndex === rowIndex,\n }),\n [jsonSchema, selectedRowIndex],\n )\n\n // Wrap cellClassName in useCallback\n const cellClassNameCallback = useCallback(\n ({\n rowData,\n rowIndex,\n columnId,\n }: {\n rowData: unknown\n rowIndex: number\n columnId?: string\n }) => {\n return getCellClassName({\n rowData: rowData as DataGridRow,\n rowIndex,\n columnId: columnId || '',\n selectedRowIndex,\n lastSelection,\n colValues,\n remoteSelections,\n })\n },\n [selectedRowIndex, lastSelection, colValues, remoteSelections],\n )\n\n // Wrap duplicateRow in useCallback\n const duplicateRowCallback = useCallback(\n ({ rowData }: { rowData: DataGridRow }) => ({\n ...rowData,\n }),\n [],\n )\n\n // Wrap onActiveCellChange in useCallback\n const handleActiveCellChange = useCallback(\n ({ cell }: { cell: { row: number; col: number } | null }) => {\n if (cell) {\n setSelectedRowIndex(cell.row)\n onSelectedRowChange?.(cell.row, rowValues[cell.row])\n } else {\n setSelectedRowIndex(null)\n onSelectedRowChange?.(null, null)\n }\n },\n [onSelectedRowChange, rowValues],\n )\n\n // Wrapper ref for the grid container\n const wrapperRef = useRef<HTMLDivElement | null>(null)\n\n // Store the active cell before column resize so we can restore it\n const activeCellBeforeResizeRef = useRef<{ col: number; row: number } | null>(\n null,\n )\n\n // Handle column resize callback\n const handleColumnResize = useCallback(\n (columnName: string, newWidth: number) => {\n // Save the current active cell before updating widths (which will trigger remount)\n if (gridRef.current) {\n const activeCell = gridRef.current.activeCell\n if (activeCell) {\n activeCellBeforeResizeRef.current = {\n col: activeCell.col,\n row: activeCell.row,\n }\n } else {\n // Explicitly clear the ref if there's no active cell\n activeCellBeforeResizeRef.current = null\n }\n }\n\n setColumnWidths(prev => ({\n ...prev,\n [columnName]: newWidth,\n }))\n },\n [gridRef],\n )\n\n // Setup column resize handles\n useColumnResizeHandles({\n wrapperRef,\n colValues,\n onColumnResize: handleColumnResize,\n })\n\n return (\n <div ref={wrapperRef} style={{ position: 'relative', width: '100%' }}>\n <DynamicDataSheetGrid\n ref={gridRef}\n value={rowValues}\n columns={colValues}\n autoAddRow={!entityIsView}\n disableSmartDelete\n addRowsComponent={addRowsComponent}\n contextMenuComponent={contextMenuComponent}\n rowKey={GRID_ROW_REACT_KEY_PROPERTY}\n rowClassName={rowClassNameCallback}\n cellClassName={cellClassNameCallback}\n duplicateRow={duplicateRowCallback}\n onChange={handleChange}\n onActiveCellChange={handleActiveCellChange}\n onSelectionChange={handleSelectionChange}\n />\n </div>\n )\n}\n"],"names":["DataGrid","props","gridRef","rowValues","columnNames","columnOrder","schemaPropertiesInfo","entityIsView","jsonSchema","lastSelection","handleChange","handleSelectionChange","onSelectedRowChange","remoteSelections","columnWidths","setColumnWidths","useState","isPinned","setIsPinned","useEffect","prev","modelColumnNames","idx","name","newWidths","columnName","arrayIndex","propertyInfo","headerOptions","calculateDefaultColumnWidth","handleTogglePin","useCallback","columnIndex","pinnedColumnsSet","useMemo","colValues","modelColsToGrid","selectedRowIndex","setSelectedRowIndex","contextMenuComponent","renderViewContextMenu","renderRecordSetContextMenu","addRowsComponent","renderAddRowsComponent","rowClassNameCallback","rowData","rowIndex","classNames","cellClassNameCallback","columnId","getCellClassName","duplicateRowCallback","handleActiveCellChange","cell","wrapperRef","useRef","activeCellBeforeResizeRef","handleColumnResize","newWidth","activeCell","useColumnResizeHandles","jsx","DynamicDataSheetGrid","GRID_ROW_REACT_KEY_PROPERTY"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { ValidationResults } from '@sage-bionetworks/synapse-types';
2
2
  import { Model } from 'json-joy/lib/json-crdt';
3
3
  import { s } from 'json-joy/lib/json-crdt-patch';
4
+ import type { ReplicaCategory } from './utils/getReplicaCategory';
4
5
  type SelectionMap = Record<string, ReturnType<typeof s.con<ReplicaSelectionModel>>>;
5
6
  export declare const gridSchema: import("json-joy").nodes.obj<{
6
7
  doc_version: import("json-joy").nodes.con<string>;
@@ -41,6 +42,10 @@ export interface QueryInput {
41
42
  }
42
43
  export type GridModel = ReturnType<typeof Model.create<typeof gridSchema>>;
43
44
  export type GridModelSnapshot = ReturnType<GridModel['api']['getSnapshot']>;
45
+ export type CellChangeInfo = {
46
+ category: ReplicaCategory;
47
+ tooltipText: string;
48
+ };
44
49
  export interface Operation {
45
50
  type: 'UPDATE' | 'DELETE' | 'CREATE';
46
51
  fromRowIndex: number;
@@ -51,14 +56,15 @@ export interface Operation {
51
56
  * This objects acts as a "ViewModel" and can be translated to/from the Synapse data grid CRDT schema.
52
57
  */
53
58
  export type DataGridRow = {
54
- [key: string]: string | number | boolean | null | undefined;
55
- } & {
59
+ [key: string]: string | number | boolean | null | undefined | ValidationResults | Map<string, string[]> | Record<string, CellChangeInfo>;
56
60
  /** The JSON Schema validation results for the row, generated by the hub */
57
61
  __validationResults?: ValidationResults;
58
62
  /** The current status of the validation results, as computed by the client */
59
63
  __validationStatus?: 'valid' | 'invalid' | 'pending';
60
64
  /** The parsed validation messages for individual columns **/
61
65
  __cellValidationResults?: Map<string, string[]>;
66
+ /** Per-cell change attribution, keyed by column name */
67
+ __cellChangeInfo?: Record<string, CellChangeInfo>;
62
68
  };
63
69
  export {};
64
70
  //# sourceMappingURL=DataGridTypes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataGridTypes.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/DataGridTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,8BAA8B,CAAA;AAchD,KAAK,YAAY,GAAG,MAAM,CACxB,MAAM,EACN,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAChD,CAAA;AAGD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;kDAMrB,CAAA;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,CAAA;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,MAAM,cAAc,GACtB,OAAO,GACP,KAAK,GACL,WAAW,GACX,aAAa,GACb,SAAS,CAAA;AAEb,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC,CAAA;AAC1E,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,CAAA;AAE3E,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;CAC5D,GAAG;IACF,2EAA2E;IAC3E,mBAAmB,CAAC,EAAE,iBAAiB,CAAA;IACvC,8EAA8E;IAC9E,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAA;IACpD,6DAA6D;IAC7D,uBAAuB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CAChD,CAAA"}
1
+ {"version":3,"file":"DataGridTypes.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/DataGridTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,8BAA8B,CAAA;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAcjE,KAAK,YAAY,GAAG,MAAM,CACxB,MAAM,EACN,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAChD,CAAA;AAGD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;kDAMrB,CAAA;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,CAAA;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,MAAM,cAAc,GACtB,OAAO,GACP,KAAK,GACL,WAAW,GACX,aAAa,GACb,SAAS,CAAA;AAEb,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC,CAAA;AAC1E,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,CAAA;AAE3E,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,eAAe,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,CAAC,GAAG,EAAE,MAAM,GACR,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,iBAAiB,GACjB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACrB,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAClC,2EAA2E;IAC3E,mBAAmB,CAAC,EAAE,iBAAiB,CAAA;IACvC,8EAA8E;IAC9E,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAA;IACpD,6DAA6D;IAC7D,uBAAuB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAC/C,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;CAClD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"DataGridTypes.js","sources":["../../../src/components/DataGrid/DataGridTypes.ts"],"sourcesContent":["import { ValidationResults } from '@sage-bionetworks/synapse-types'\nimport { Model } from 'json-joy/lib/json-crdt'\nimport { s } from 'json-joy/lib/json-crdt-patch'\n\nconst gridRowSchema = s.obj({\n data: s.vec(s.con('')),\n metadata: s.obj({\n synapseRow: s.obj({\n rowId: s.con(0),\n versionNumber: s.con(0),\n etag: s.con(''),\n }),\n rowValidation: s.con<ValidationResults | undefined>(undefined),\n }),\n})\n\ntype SelectionMap = Record<\n string,\n ReturnType<typeof s.con<ReplicaSelectionModel>>\n>\nconst selectionSchema = s.obj<SelectionMap, SelectionMap>({})\n\nexport const gridSchema = s.obj({\n doc_version: s.con('0.1.0'),\n columnNames: s.vec(s.con('')),\n columnOrder: s.arr([]),\n selection: selectionSchema,\n rows: s.arr<typeof gridRowSchema>([]),\n})\n\nexport type CrdtId = {\n rep: number\n seq: number\n}\n\nexport type ReplicaSelectionModel = {\n columnSelection?: CrdtId[]\n rowSelection?: CrdtId[]\n columnSelectAll?: boolean\n rowSelectAll?: boolean\n}\n\nexport interface JsonJoyMessage {\n sequenceNumber: number\n methodName: string\n payload?: string\n}\n\nexport type QueryInputType =\n | 'empty'\n | 'sql'\n | 'sessionId'\n | 'recordSetId'\n | 'unknown'\n\nexport interface QueryInput {\n type: QueryInputType\n input: string\n}\n\nexport type GridModel = ReturnType<typeof Model.create<typeof gridSchema>>\nexport type GridModelSnapshot = ReturnType<GridModel['api']['getSnapshot']>\n\nexport interface Operation {\n type: 'UPDATE' | 'DELETE' | 'CREATE'\n fromRowIndex: number\n toRowIndex: number\n}\n\n/**\n * Object that represents a single row of data in a Grid session that is compatible with react-datasheet-grid.\n * This objects acts as a \"ViewModel\" and can be translated to/from the Synapse data grid CRDT schema.\n */\nexport type DataGridRow = {\n [key: string]: string | number | boolean | null | undefined\n} & {\n /** The JSON Schema validation results for the row, generated by the hub */\n __validationResults?: ValidationResults\n /** The current status of the validation results, as computed by the client */\n __validationStatus?: 'valid' | 'invalid' | 'pending'\n /** The parsed validation messages for individual columns **/\n __cellValidationResults?: Map<string, string[]>\n}\n"],"names":["s","selectionSchema","gridSchema"],"mappings":";AAIsBA,EAAE,IAAI;AAAA,EAC1B,MAAMA,EAAE,IAAIA,EAAE,IAAI,EAAE,CAAC;AAAA,EACrB,UAAUA,EAAE,IAAI;AAAA,IACd,YAAYA,EAAE,IAAI;AAAA,MAChB,OAAOA,EAAE,IAAI,CAAC;AAAA,MACd,eAAeA,EAAE,IAAI,CAAC;AAAA,MACtB,MAAMA,EAAE,IAAI,EAAE;AAAA,IAAA,CACf;AAAA,IACD,eAAeA,EAAE,IAAmC,MAAS;AAAA,EAAA,CAC9D;AACH,CAAC;AAMD,MAAMC,IAAkBD,EAAE,IAAgC,EAAE,GAE/CE,IAAaF,EAAE,IAAI;AAAA,EAC9B,aAAaA,EAAE,IAAI,OAAO;AAAA,EAC1B,aAAaA,EAAE,IAAIA,EAAE,IAAI,EAAE,CAAC;AAAA,EAC5B,aAAaA,EAAE,IAAI,EAAE;AAAA,EACrB,WAAWC;AAAA,EACX,MAAMD,EAAE,IAA0B,CAAA,CAAE;AACtC,CAAC;"}
1
+ {"version":3,"file":"DataGridTypes.js","sources":["../../../src/components/DataGrid/DataGridTypes.ts"],"sourcesContent":["import { ValidationResults } from '@sage-bionetworks/synapse-types'\nimport { Model } from 'json-joy/lib/json-crdt'\nimport { s } from 'json-joy/lib/json-crdt-patch'\nimport type { ReplicaCategory } from './utils/getReplicaCategory'\n\nconst gridRowSchema = s.obj({\n data: s.vec(s.con('')),\n metadata: s.obj({\n synapseRow: s.obj({\n rowId: s.con(0),\n versionNumber: s.con(0),\n etag: s.con(''),\n }),\n rowValidation: s.con<ValidationResults | undefined>(undefined),\n }),\n})\n\ntype SelectionMap = Record<\n string,\n ReturnType<typeof s.con<ReplicaSelectionModel>>\n>\nconst selectionSchema = s.obj<SelectionMap, SelectionMap>({})\n\nexport const gridSchema = s.obj({\n doc_version: s.con('0.1.0'),\n columnNames: s.vec(s.con('')),\n columnOrder: s.arr([]),\n selection: selectionSchema,\n rows: s.arr<typeof gridRowSchema>([]),\n})\n\nexport type CrdtId = {\n rep: number\n seq: number\n}\n\nexport type ReplicaSelectionModel = {\n columnSelection?: CrdtId[]\n rowSelection?: CrdtId[]\n columnSelectAll?: boolean\n rowSelectAll?: boolean\n}\n\nexport interface JsonJoyMessage {\n sequenceNumber: number\n methodName: string\n payload?: string\n}\n\nexport type QueryInputType =\n | 'empty'\n | 'sql'\n | 'sessionId'\n | 'recordSetId'\n | 'unknown'\n\nexport interface QueryInput {\n type: QueryInputType\n input: string\n}\n\nexport type GridModel = ReturnType<typeof Model.create<typeof gridSchema>>\nexport type GridModelSnapshot = ReturnType<GridModel['api']['getSnapshot']>\n\nexport type CellChangeInfo = {\n category: ReplicaCategory\n tooltipText: string\n}\n\nexport interface Operation {\n type: 'UPDATE' | 'DELETE' | 'CREATE'\n fromRowIndex: number\n toRowIndex: number\n}\n\n/**\n * Object that represents a single row of data in a Grid session that is compatible with react-datasheet-grid.\n * This objects acts as a \"ViewModel\" and can be translated to/from the Synapse data grid CRDT schema.\n */\nexport type DataGridRow = {\n [key: string]:\n | string\n | number\n | boolean\n | null\n | undefined\n | ValidationResults\n | Map<string, string[]>\n | Record<string, CellChangeInfo>\n /** The JSON Schema validation results for the row, generated by the hub */\n __validationResults?: ValidationResults\n /** The current status of the validation results, as computed by the client */\n __validationStatus?: 'valid' | 'invalid' | 'pending'\n /** The parsed validation messages for individual columns **/\n __cellValidationResults?: Map<string, string[]>\n /** Per-cell change attribution, keyed by column name */\n __cellChangeInfo?: Record<string, CellChangeInfo>\n}\n"],"names":["s","selectionSchema","gridSchema"],"mappings":";AAKsBA,EAAE,IAAI;AAAA,EAC1B,MAAMA,EAAE,IAAIA,EAAE,IAAI,EAAE,CAAC;AAAA,EACrB,UAAUA,EAAE,IAAI;AAAA,IACd,YAAYA,EAAE,IAAI;AAAA,MAChB,OAAOA,EAAE,IAAI,CAAC;AAAA,MACd,eAAeA,EAAE,IAAI,CAAC;AAAA,MACtB,MAAMA,EAAE,IAAI,EAAE;AAAA,IAAA,CACf;AAAA,IACD,eAAeA,EAAE,IAAmC,MAAS;AAAA,EAAA,CAC9D;AACH,CAAC;AAMD,MAAMC,IAAkBD,EAAE,IAAgC,EAAE,GAE/CE,IAAaF,EAAE,IAAI;AAAA,EAC9B,aAAaA,EAAE,IAAI,OAAO;AAAA,EAC1B,aAAaA,EAAE,IAAIA,EAAE,IAAI,EAAE,CAAC;AAAA,EAC5B,aAAaA,EAAE,IAAI,EAAE;AAAA,EACrB,WAAWC;AAAA,EACX,MAAMD,EAAE,IAA0B,CAAA,CAAE;AACtC,CAAC;"}
@@ -51,7 +51,6 @@ import "../../assets/icons/account-validated.svg.js";
51
51
  import "../../utils/functions/DateFormatter.js";
52
52
  import "@react-hookz/web";
53
53
  import "dayjs";
54
- import "../../assets/ArcusBioIcon.svg.js";
55
54
  import "@mui/material/SvgIcon";
56
55
  import "../../assets/icons/AccessPending.svg.js";
57
56
  import "../../assets/icons/AccessPendingCloud.svg.js";
@@ -217,7 +216,7 @@ import "@mui/material/Grid";
217
216
  import "@mui/icons-material/ArrowForwardIos";
218
217
  import "../PortalAclEditor/PortalAclEditor.js";
219
218
  import "../SynapseHomepageV2/HomepageStyles.js";
220
- function vr(o) {
219
+ function Rr(o) {
221
220
  const { sourceEntityId: t, gridSessionId: i } = o, { data: e, isLoading: n } = y(t), s = e?.concreteType ? l(e.concreteType) : void 0, { mutate: c, isPending: a } = u({
222
221
  onSuccess: (p) => {
223
222
  p.type === "entityview" ? S(p.data) : p.type === "table" ? h(p.data) : r("Successfully updated RecordSet.", "success");
@@ -267,6 +266,6 @@ function T(o) {
267
266
  ) ?? [];
268
267
  }
269
268
  export {
270
- vr as default
269
+ Rr as default
271
270
  };
272
271
  //# sourceMappingURL=MergeGridWithSourceTableButton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MergeGridWithSourceTableButton.js","sources":["../../../src/components/DataGrid/MergeGridWithSourceTableButton.tsx"],"sourcesContent":["import GridMenuButton from '@/components/DataGrid/components/GridMenuButton/GridMenuButton'\nimport useMergeGridWithSource from '@/components/DataGrid/useMergeGridWithSource'\nimport { displayToast } from '@/components/index'\nimport { useGetEntity } from '@/synapse-queries'\nimport { convertToEntityType } from '@/utils/functions/EntityTypeUtils'\nimport {\n EntityType,\n EntityUpdateResults,\n instanceOfEntityUpdateResults,\n instanceOfUploadToTableResult,\n SynchronizeGridResponse,\n TableUpdateTransactionResponse,\n} from '@sage-bionetworks/synapse-client'\n\nexport type MergeGridWithSourceTableButtonProps = {\n sourceEntityId: string\n gridSessionId: string\n sourceEntityType?: EntityType\n}\n\nexport default function MergeGridWithSourceTableButton(\n props: MergeGridWithSourceTableButtonProps,\n) {\n const { sourceEntityId, gridSessionId } = props\n\n const { data: entity, isLoading: entityLoading } =\n useGetEntity(sourceEntityId)\n\n const sourceEntityType = entity?.concreteType\n ? convertToEntityType(entity.concreteType)\n : undefined\n\n const { mutate: mergeGrid, isPending } = useMergeGridWithSource({\n onSuccess: result => {\n if (result.type === 'entityview') {\n onSynchronizeSuccess(result.data)\n } else if (result.type === 'table') {\n onMergeTableSuccess(result.data)\n } else {\n displayToast('Successfully updated RecordSet.', 'success')\n }\n },\n onError: e => displayToast(e.message, 'danger'),\n })\n\n const buttonText =\n sourceEntityType === 'entityview' ? 'Sync changes' : 'Apply changes'\n\n return (\n <GridMenuButton\n loading={isPending}\n disabled={entityLoading}\n onClick={() => {\n mergeGrid({ gridSessionId, sourceEntityId, sourceEntityType })\n }}\n variant=\"contained\"\n >\n {buttonText}\n </GridMenuButton>\n )\n}\n\nfunction onSynchronizeSuccess(result: SynchronizeGridResponse) {\n if (result.errorMessages == null || result.errorMessages.length === 0) {\n displayToast('Successfully synchronized metadata.', 'success')\n } else {\n displayToast(\n <ul>\n {result.errorMessages.map((msg, index) => (\n <li key={index}>{msg}</li>\n ))}\n </ul>,\n 'warning',\n { title: 'Some changes could not be applied' },\n )\n }\n}\n\nfunction onMergeTableSuccess(result: TableUpdateTransactionResponse) {\n if (result.results?.length) {\n // There should only be one result since the CSV upload is done in one step\n const updateResult = result.results[0]\n if (instanceOfEntityUpdateResults(updateResult)) {\n // This is an update to the contents of a View\n const failureMessages =\n getEntityUpdateResultsErrorMessages(updateResult).join('\\n')\n\n if (failureMessages) {\n displayToast(\n `Some changes could not be applied:\\n${failureMessages}`,\n 'danger',\n )\n } else {\n displayToast('Changes applied successfully', 'success')\n }\n } else if (instanceOfUploadToTableResult(updateResult)) {\n // This is an update to a TableEntity\n const rowsUpdatedStr = updateResult.rowsProcessed?.toLocaleString()\n displayToast(`Successfully updated ${rowsUpdatedStr} rows.`, 'success')\n }\n }\n}\n\nfunction getEntityUpdateResultsErrorMessages(\n results: EntityUpdateResults,\n): string[] {\n return (\n results.updateResults\n ?.filter(e => !!e.failureCode)\n .map(\n r => `${r.entityId}: ${r.failureMessage} (code: ${r.failureCode})`,\n ) ?? []\n )\n}\n"],"names":["MergeGridWithSourceTableButton","props","sourceEntityId","gridSessionId","entity","entityLoading","useGetEntity","sourceEntityType","convertToEntityType","mergeGrid","isPending","useMergeGridWithSource","result","onSynchronizeSuccess","onMergeTableSuccess","displayToast","e","jsx","GridMenuButton","msg","index","updateResult","instanceOfEntityUpdateResults","failureMessages","getEntityUpdateResultsErrorMessages","instanceOfUploadToTableResult","rowsUpdatedStr","results","r"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBA,SAAwBA,GACtBC,GACA;AACA,QAAM,EAAE,gBAAAC,GAAgB,eAAAC,EAAA,IAAkBF,GAEpC,EAAE,MAAMG,GAAQ,WAAWC,EAAA,IAC/BC,EAAaJ,CAAc,GAEvBK,IAAmBH,GAAQ,eAC7BI,EAAoBJ,EAAO,YAAY,IACvC,QAEE,EAAE,QAAQK,GAAW,WAAAC,EAAA,IAAcC,EAAuB;AAAA,IAC9D,WAAW,CAAAC,MAAU;AACnB,MAAIA,EAAO,SAAS,eAClBC,EAAqBD,EAAO,IAAI,IACvBA,EAAO,SAAS,UACzBE,EAAoBF,EAAO,IAAI,IAE/BG,EAAa,mCAAmC,SAAS;AAAA,IAE7D;AAAA,IACA,SAAS,CAAAC,MAAKD,EAAaC,EAAE,SAAS,QAAQ;AAAA,EAAA,CAC/C;AAKD,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,SAASR;AAAA,MACT,UAAUL;AAAA,MACV,SAAS,MAAM;AACb,QAAAI,EAAU,EAAE,eAAAN,GAAe,gBAAAD,GAAgB,kBAAAK,EAAA,CAAkB;AAAA,MAC/D;AAAA,MACA,SAAQ;AAAA,MAEP,UAXHA,MAAqB,eAAe,iBAAiB;AAAA,IAWlD;AAAA,EAAA;AAGP;AAEA,SAASM,EAAqBD,GAAiC;AAC7D,EAAIA,EAAO,iBAAiB,QAAQA,EAAO,cAAc,WAAW,IAClEG,EAAa,uCAAuC,SAAS,IAE7DA;AAAA,IACE,gBAAAE,EAAC,MAAA,EACE,UAAAL,EAAO,cAAc,IAAI,CAACO,GAAKC,MAC9B,gBAAAH,EAAC,MAAA,EAAgB,UAAAE,EAAA,GAARC,CAAY,CACtB,GACH;AAAA,IACA;AAAA,IACA,EAAE,OAAO,oCAAA;AAAA,EAAoC;AAGnD;AAEA,SAASN,EAAoBF,GAAwC;AACnE,MAAIA,EAAO,SAAS,QAAQ;AAE1B,UAAMS,IAAeT,EAAO,QAAQ,CAAC;AACrC,QAAIU,EAA8BD,CAAY,GAAG;AAE/C,YAAME,IACJC,EAAoCH,CAAY,EAAE,KAAK;AAAA,CAAI;AAE7D,MAAIE,IACFR;AAAA,QACE;AAAA,EAAuCQ,CAAe;AAAA,QACtD;AAAA,MAAA,IAGFR,EAAa,gCAAgC,SAAS;AAAA,IAE1D,WAAWU,EAA8BJ,CAAY,GAAG;AAEtD,YAAMK,IAAiBL,EAAa,eAAe,eAAA;AACnD,MAAAN,EAAa,wBAAwBW,CAAc,UAAU,SAAS;AAAA,IACxE;AAAA,EACF;AACF;AAEA,SAASF,EACPG,GACU;AACV,SACEA,EAAQ,eACJ,OAAO,CAAAX,MAAK,CAAC,CAACA,EAAE,WAAW,EAC5B;AAAA,IACC,CAAAY,MAAK,GAAGA,EAAE,QAAQ,KAAKA,EAAE,cAAc,WAAWA,EAAE,WAAW;AAAA,EAAA,KAC5D,CAAA;AAEX;"}
1
+ {"version":3,"file":"MergeGridWithSourceTableButton.js","sources":["../../../src/components/DataGrid/MergeGridWithSourceTableButton.tsx"],"sourcesContent":["import GridMenuButton from '@/components/DataGrid/components/GridMenuButton/GridMenuButton'\nimport useMergeGridWithSource from '@/components/DataGrid/useMergeGridWithSource'\nimport { displayToast } from '@/components/index'\nimport { useGetEntity } from '@/synapse-queries'\nimport { convertToEntityType } from '@/utils/functions/EntityTypeUtils'\nimport {\n EntityType,\n EntityUpdateResults,\n instanceOfEntityUpdateResults,\n instanceOfUploadToTableResult,\n SynchronizeGridResponse,\n TableUpdateTransactionResponse,\n} from '@sage-bionetworks/synapse-client'\n\nexport type MergeGridWithSourceTableButtonProps = {\n sourceEntityId: string\n gridSessionId: string\n sourceEntityType?: EntityType\n}\n\nexport default function MergeGridWithSourceTableButton(\n props: MergeGridWithSourceTableButtonProps,\n) {\n const { sourceEntityId, gridSessionId } = props\n\n const { data: entity, isLoading: entityLoading } =\n useGetEntity(sourceEntityId)\n\n const sourceEntityType = entity?.concreteType\n ? convertToEntityType(entity.concreteType)\n : undefined\n\n const { mutate: mergeGrid, isPending } = useMergeGridWithSource({\n onSuccess: result => {\n if (result.type === 'entityview') {\n onSynchronizeSuccess(result.data)\n } else if (result.type === 'table') {\n onMergeTableSuccess(result.data)\n } else {\n displayToast('Successfully updated RecordSet.', 'success')\n }\n },\n onError: e => displayToast(e.message, 'danger'),\n })\n\n const buttonText =\n sourceEntityType === 'entityview' ? 'Sync changes' : 'Apply changes'\n\n return (\n <GridMenuButton\n loading={isPending}\n disabled={entityLoading}\n onClick={() => {\n mergeGrid({ gridSessionId, sourceEntityId, sourceEntityType })\n }}\n variant=\"contained\"\n >\n {buttonText}\n </GridMenuButton>\n )\n}\n\nfunction onSynchronizeSuccess(result: SynchronizeGridResponse) {\n if (result.errorMessages == null || result.errorMessages.length === 0) {\n displayToast('Successfully synchronized metadata.', 'success')\n } else {\n displayToast(\n <ul>\n {result.errorMessages.map((msg, index) => (\n <li key={index}>{msg}</li>\n ))}\n </ul>,\n 'warning',\n { title: 'Some changes could not be applied' },\n )\n }\n}\n\nfunction onMergeTableSuccess(result: TableUpdateTransactionResponse) {\n if (result.results?.length) {\n // There should only be one result since the CSV upload is done in one step\n const updateResult = result.results[0]\n if (instanceOfEntityUpdateResults(updateResult)) {\n // This is an update to the contents of a View\n const failureMessages =\n getEntityUpdateResultsErrorMessages(updateResult).join('\\n')\n\n if (failureMessages) {\n displayToast(\n `Some changes could not be applied:\\n${failureMessages}`,\n 'danger',\n )\n } else {\n displayToast('Changes applied successfully', 'success')\n }\n } else if (instanceOfUploadToTableResult(updateResult)) {\n // This is an update to a TableEntity\n const rowsUpdatedStr = updateResult.rowsProcessed?.toLocaleString()\n displayToast(`Successfully updated ${rowsUpdatedStr} rows.`, 'success')\n }\n }\n}\n\nfunction getEntityUpdateResultsErrorMessages(\n results: EntityUpdateResults,\n): string[] {\n return (\n results.updateResults\n ?.filter(e => !!e.failureCode)\n .map(\n r => `${r.entityId}: ${r.failureMessage} (code: ${r.failureCode})`,\n ) ?? []\n )\n}\n"],"names":["MergeGridWithSourceTableButton","props","sourceEntityId","gridSessionId","entity","entityLoading","useGetEntity","sourceEntityType","convertToEntityType","mergeGrid","isPending","useMergeGridWithSource","result","onSynchronizeSuccess","onMergeTableSuccess","displayToast","e","jsx","GridMenuButton","msg","index","updateResult","instanceOfEntityUpdateResults","failureMessages","getEntityUpdateResultsErrorMessages","instanceOfUploadToTableResult","rowsUpdatedStr","results","r"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBA,SAAwBA,GACtBC,GACA;AACA,QAAM,EAAE,gBAAAC,GAAgB,eAAAC,EAAA,IAAkBF,GAEpC,EAAE,MAAMG,GAAQ,WAAWC,EAAA,IAC/BC,EAAaJ,CAAc,GAEvBK,IAAmBH,GAAQ,eAC7BI,EAAoBJ,EAAO,YAAY,IACvC,QAEE,EAAE,QAAQK,GAAW,WAAAC,EAAA,IAAcC,EAAuB;AAAA,IAC9D,WAAW,CAAAC,MAAU;AACnB,MAAIA,EAAO,SAAS,eAClBC,EAAqBD,EAAO,IAAI,IACvBA,EAAO,SAAS,UACzBE,EAAoBF,EAAO,IAAI,IAE/BG,EAAa,mCAAmC,SAAS;AAAA,IAE7D;AAAA,IACA,SAAS,CAAAC,MAAKD,EAAaC,EAAE,SAAS,QAAQ;AAAA,EAAA,CAC/C;AAKD,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,SAASR;AAAA,MACT,UAAUL;AAAA,MACV,SAAS,MAAM;AACb,QAAAI,EAAU,EAAE,eAAAN,GAAe,gBAAAD,GAAgB,kBAAAK,EAAA,CAAkB;AAAA,MAC/D;AAAA,MACA,SAAQ;AAAA,MAEP,UAXHA,MAAqB,eAAe,iBAAiB;AAAA,IAWlD;AAAA,EAAA;AAGP;AAEA,SAASM,EAAqBD,GAAiC;AAC7D,EAAIA,EAAO,iBAAiB,QAAQA,EAAO,cAAc,WAAW,IAClEG,EAAa,uCAAuC,SAAS,IAE7DA;AAAA,IACE,gBAAAE,EAAC,MAAA,EACE,UAAAL,EAAO,cAAc,IAAI,CAACO,GAAKC,MAC9B,gBAAAH,EAAC,MAAA,EAAgB,UAAAE,EAAA,GAARC,CAAY,CACtB,GACH;AAAA,IACA;AAAA,IACA,EAAE,OAAO,oCAAA;AAAA,EAAoC;AAGnD;AAEA,SAASN,EAAoBF,GAAwC;AACnE,MAAIA,EAAO,SAAS,QAAQ;AAE1B,UAAMS,IAAeT,EAAO,QAAQ,CAAC;AACrC,QAAIU,EAA8BD,CAAY,GAAG;AAE/C,YAAME,IACJC,EAAoCH,CAAY,EAAE,KAAK;AAAA,CAAI;AAE7D,MAAIE,IACFR;AAAA,QACE;AAAA,EAAuCQ,CAAe;AAAA,QACtD;AAAA,MAAA,IAGFR,EAAa,gCAAgC,SAAS;AAAA,IAE1D,WAAWU,EAA8BJ,CAAY,GAAG;AAEtD,YAAMK,IAAiBL,EAAa,eAAe,eAAA;AACnD,MAAAN,EAAa,wBAAwBW,CAAc,UAAU,SAAS;AAAA,IACxE;AAAA,EACF;AACF;AAEA,SAASF,EACPG,GACU;AACV,SACEA,EAAQ,eACJ,OAAO,CAAAX,MAAK,CAAC,CAACA,EAAE,WAAW,EAC5B;AAAA,IACC,CAAAY,MAAK,GAAGA,EAAE,QAAQ,KAAKA,EAAE,cAAc,WAAWA,EAAE,WAAW;AAAA,EAAA,KAC5D,CAAA;AAEX;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SynapseGrid.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/SynapseGrid.tsx"],"names":[],"mappings":"AAaA,OAAO,EACL,iBAAiB,EAElB,MAAM,kCAAkC,CAAA;AA2BzC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,cAAc,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAA;IACpD,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;CACjD,CAAA;AAED,QAAA,MAAM,WAAW,gHA+chB,CAAA;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"SynapseGrid.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/SynapseGrid.tsx"],"names":[],"mappings":"AAaA,OAAO,EACL,iBAAiB,EAElB,MAAM,kCAAkC,CAAA;AA8BzC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,cAAc,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAA;IACpD,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;CACjD,CAAA;AAED,QAAA,MAAM,WAAW,gHA6ehB,CAAA;AAED,eAAe,WAAW,CAAA"}