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 +1 @@
1
- {"version":3,"file":"ChallengeSubmissionStepper.js","names":[],"sources":["../../../src/components/ChallengeSubmission/ChallengeSubmissionStepper.tsx"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport { useSynapseContext } from '@/utils'\nimport { Typography } from '@mui/material'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport {\n DockerCommit,\n EvaluationSubmission,\n TeamSubmissionEligibility,\n} from '@sage-bionetworks/synapse-types'\nimport { useState } from 'react'\nimport StepperDialog from '../StepperDialog'\nimport { Step } from '../StepperDialog/StepperDialog'\nimport { displayToast } from '../ToastMessage'\nimport { EntityItem } from './ChallengeSubmission'\nimport EvaluationQueueList from './EvaluationQueueList'\nimport SubmissionCommitList from './SubmissionCommitList'\n\nenum StepsEnum {\n SELECT_COMMIT = 'SELECT_COMMIT',\n SELECT_EVALUATION = 'SELECT_EVALUATION',\n SUBMISSION_SUCCESS = 'SUBMISSION_SUCCESS',\n}\ntype StepKey = keyof typeof StepsEnum\ntype StepList<TStepId = string> = {\n [key in StepKey]: Step<TStepId>\n}\n\nconst stepsDocker: StepList<StepsEnum> = {\n SELECT_COMMIT: {\n id: StepsEnum.SELECT_COMMIT,\n title: 'Select Commit for Submission',\n nextStep: StepsEnum.SELECT_EVALUATION,\n nextEnabled: false,\n },\n SELECT_EVALUATION: {\n id: StepsEnum.SELECT_EVALUATION,\n title: 'Select Evaluation Queue',\n previousStep: StepsEnum.SELECT_COMMIT,\n confirmStep: StepsEnum.SUBMISSION_SUCCESS,\n confirmButtonText: 'Submit',\n },\n SUBMISSION_SUCCESS: {\n id: StepsEnum.SUBMISSION_SUCCESS,\n title: 'Submission Successful!',\n confirmButtonText: 'Close',\n confirmEnabled: true,\n },\n}\n\nconst stepsFile: StepList<StepsEnum> = {\n SELECT_COMMIT: { id: StepsEnum.SELECT_COMMIT, title: '' },\n SELECT_EVALUATION: {\n id: StepsEnum.SELECT_EVALUATION,\n title: 'Select Evaluation Queue',\n confirmStep: StepsEnum.SUBMISSION_SUCCESS,\n confirmButtonText: 'Submit',\n },\n SUBMISSION_SUCCESS: {\n id: StepsEnum.SUBMISSION_SUCCESS,\n title: 'Submission Successful!',\n confirmButtonText: 'Close',\n confirmEnabled: true,\n },\n}\n\nconst getSteps = (\n entityType: typeof EntityType.dockerrepo | typeof EntityType.file,\n) => {\n return entityType === EntityType.dockerrepo ? stepsDocker : stepsFile\n}\n\ntype ChallengeSubmissionStepperProps = {\n projectId: string\n userId: string\n teamId: string\n entity: EntityItem\n entityType: typeof EntityType.dockerrepo | typeof EntityType.file\n isShowingModal: boolean\n onClose: () => void\n}\n\nfunction ChallengeSubmissionStepper({\n projectId,\n userId,\n teamId,\n entity,\n entityType,\n isShowingModal,\n onClose,\n}: ChallengeSubmissionStepperProps) {\n const { accessToken } = useSynapseContext()\n const steps = getSteps(entityType)\n const initialStep =\n entityType === EntityType.dockerrepo\n ? steps.SELECT_COMMIT\n : steps.SELECT_EVALUATION\n const [step, setStep] = useState<Step<StepsEnum>>(initialStep)\n const [errorMessage, setErrorMessage] = useState<string>()\n const [selectedCommit, setSelectedCommit] = useState<DockerCommit>()\n\n const [submissionName, setSubmissionName] = useState<string>('')\n const [selectedEval, setSelectedEval] = useState<string | undefined>()\n const [confirming, setConfirming] = useState<boolean>(false)\n\n const hide = () => {\n setErrorMessage(undefined)\n setSelectedCommit(undefined)\n setSubmissionName('')\n setSelectedEval(undefined)\n setConfirming(false)\n onClose()\n setStep(initialStep)\n }\n\n function handleStepChange(value?: StepsEnum) {\n if (!value || !steps[value]) return\n setErrorMessage(undefined)\n setStep(steps[value])\n }\n\n async function confirmEligibility() {\n if (!selectedEval) return setErrorMessage('Please select an evaluation.')\n try {\n return await SynapseClient.getSubmissionEligibility(\n selectedEval,\n teamId,\n accessToken,\n )\n } catch (err) {\n return setErrorMessage(err.message)\n }\n }\n\n async function submitForEvaluation(eligibility: TeamSubmissionEligibility) {\n if (!entity.id || (entityType === EntityType.dockerrepo && !selectedCommit))\n return setErrorMessage('Error: Invalid entity or commit.')\n\n const contributors = eligibility.membersEligibility\n .filter(\n member =>\n !member.hasConflictingSubmission &&\n member.isEligible &&\n !member.isQuotaFilled &&\n member.isRegistered,\n )\n .map(member => {\n return { principalId: member.principalId.toString() }\n })\n\n const submission: EvaluationSubmission = {\n userId: userId,\n evaluationId: selectedEval!,\n entityId: entity.id,\n versionNumber: entity.versionNumber ?? -1,\n teamId: teamId,\n contributors,\n }\n if (entityType === EntityType.dockerrepo) {\n submission.dockerRepositoryName = entity.repositoryName\n submission.dockerDigest = selectedCommit!.digest\n }\n\n if (submissionName !== '') submission['name'] = submissionName\n\n try {\n await SynapseClient.submitToEvaluation(\n accessToken,\n submission,\n entity.etag!,\n eligibility.eligibilityStateHash,\n )\n displayToast('Submitted successfully!', 'success')\n hide()\n } catch (e) {\n setErrorMessage(e.message)\n }\n }\n\n const onConfirmHandler = async () => {\n const eligibility = await confirmEligibility()\n if (eligibility) {\n await submitForEvaluation(eligibility)\n }\n }\n\n const onCommitChanged = (value: DockerCommit) => {\n setSelectedCommit(value)\n setStep({ ...step, nextEnabled: true })\n }\n\n function stepperContent() {\n switch (step.id) {\n case StepsEnum.SELECT_COMMIT:\n return (\n <SubmissionCommitList\n repository={entity}\n selectedCommit={selectedCommit}\n onCommitChanged={onCommitChanged}\n />\n )\n break\n case StepsEnum.SELECT_EVALUATION:\n return (\n <EvaluationQueueList\n projectId={projectId}\n submissonName={submissionName}\n onSubmissionNameChange={setSubmissionName}\n selectedEvaluation={selectedEval}\n onEvaluationChange={value => {\n setStep({ ...step, confirmEnabled: true })\n setSelectedEval(value)\n }}\n />\n )\n case StepsEnum.SUBMISSION_SUCCESS:\n return (\n <Typography variant=\"body1\" sx={{ fontSize: '16px' }}>\n Your submission will be scored and results posted to the Challenge\n Leaderboard.\n </Typography>\n )\n default:\n return <></>\n }\n }\n\n return (\n <StepperDialog\n errorMessage={errorMessage}\n onCancel={hide}\n onStepChange={handleStepChange as (arg: string) => void}\n open={isShowingModal}\n onConfirm={() => {\n onConfirmHandler()\n }}\n confirming={confirming}\n step={step}\n content={stepperContent()}\n loading={false}\n />\n )\n}\n\nexport default ChallengeSubmissionStepper\n"],"mappings":";;;;;;;;;;;;;AA2BA,IAAM,IAAmC;CACvC,eAAe;EACb,IAAA;EACA,OAAO;EACP,UAAA;EACA,aAAa;CACf;CACA,mBAAmB;EACjB,IAAA;EACA,OAAO;EACP,cAAA;EACA,aAAA;EACA,mBAAmB;CACrB;CACA,oBAAoB;EAClB,IAAA;EACA,OAAO;EACP,mBAAmB;EACnB,gBAAgB;CAClB;AACF,GAEM,IAAiC;CACrC,eAAe;EAAE,IAAA;EAA6B,OAAO;CAAG;CACxD,mBAAmB;EACjB,IAAA;EACA,OAAO;EACP,aAAA;EACA,mBAAmB;CACrB;CACA,oBAAoB;EAClB,IAAA;EACA,OAAO;EACP,mBAAmB;EACnB,gBAAgB;CAClB;AACF,GAEM,KACJ,MAEO,MAAe,EAAW,aAAa,IAAc;AAa9D,SAAS,EAA2B,EAClC,cACA,WACA,WACA,WACA,eACA,mBACA,cACkC;CAClC,IAAM,EAAE,mBAAgB,EAAkB,GACpC,IAAQ,EAAS,CAAU,GAC3B,IACJ,MAAe,EAAW,aACtB,EAAM,gBACN,EAAM,mBACN,CAAC,GAAM,KAAW,EAA0B,CAAW,GACvD,CAAC,GAAc,KAAmB,EAAiB,GACnD,CAAC,GAAgB,KAAqB,EAAuB,GAE7D,CAAC,GAAgB,KAAqB,EAAiB,EAAE,GACzD,CAAC,GAAc,KAAmB,EAA6B,GAC/D,CAAC,GAAY,KAAiB,EAAkB,EAAK,GAErD,UAAa;EAOjB,AANA,EAAgB,KAAA,CAAS,GACzB,EAAkB,KAAA,CAAS,GAC3B,EAAkB,EAAE,GACpB,EAAgB,KAAA,CAAS,GACzB,EAAc,EAAK,GACnB,EAAQ,GACR,EAAQ,CAAW;CACrB;CAEA,SAAS,EAAiB,GAAmB;EACvC,CAAC,KAAS,CAAC,EAAM,OACrB,EAAgB,KAAA,CAAS,GACzB,EAAQ,EAAM,EAAM;CACtB;CAEA,eAAe,IAAqB;EAClC,IAAI,CAAC,GAAc,OAAO,EAAgB,8BAA8B;EACxE,IAAI;GACF,OAAO,MAAM,EAAc,yBACzB,GACA,GACA,CACF;EACF,SAAS,GAAK;GACZ,OAAO,EAAgB,EAAI,OAAO;EACpC;CACF;CAEA,eAAe,EAAoB,GAAwC;EACzE,IAAI,CAAC,EAAO,MAAO,MAAe,EAAW,cAAc,CAAC,GAC1D,OAAO,EAAgB,kCAAkC;EAE3D,IAAM,IAAe,EAAY,mBAC9B,QACC,MACE,CAAC,EAAO,4BACR,EAAO,cACP,CAAC,EAAO,iBACR,EAAO,YACX,EACC,KAAI,OACI,EAAE,aAAa,EAAO,YAAY,SAAS,EAAE,EACrD,GAEG,IAAmC;GAC/B;GACR,cAAc;GACd,UAAU,EAAO;GACjB,eAAe,EAAO,iBAAiB;GAC/B;GACR;EACF;EAMA,AALI,MAAe,EAAW,eAC5B,EAAW,uBAAuB,EAAO,gBACzC,EAAW,eAAe,EAAgB,SAGxC,MAAmB,OAAI,EAAW,OAAU;EAEhD,IAAI;GAQF,AAPA,MAAM,EAAc,mBAClB,GACA,GACA,EAAO,MACP,EAAY,oBACd,GACA,EAAa,2BAA2B,SAAS,GACjD,EAAK;EACP,SAAS,GAAG;GACV,EAAgB,EAAE,OAAO;EAC3B;CACF;CAEA,IAAM,IAAmB,YAAY;EACnC,IAAM,IAAc,MAAM,EAAmB;EAC7C,AAAI,KACF,MAAM,EAAoB,CAAW;CAEzC,GAEM,KAAmB,MAAwB;EAE/C,AADA,EAAkB,CAAK,GACvB,EAAQ;GAAE,GAAG;GAAM,aAAa;EAAK,CAAC;CACxC;CAEA,SAAS,IAAiB;EACxB,QAAQ,EAAK,IAAb;GACE,KAAA,iBACE,OACE,kBAAC,GAAD;IACE,YAAY;IACI;IACC;GAClB,CAAA;GAGL,KAAA,qBACE,OACE,kBAAC,GAAD;IACa;IACX,eAAe;IACf,wBAAwB;IACxB,oBAAoB;IACpB,qBAAoB,MAAS;KAE3B,AADA,EAAQ;MAAE,GAAG;MAAM,gBAAgB;KAAK,CAAC,GACzC,EAAgB,CAAK;IACvB;GACD,CAAA;GAEL,KAAA,sBACE,OACE,kBAAC,GAAD;IAAY,SAAQ;IAAQ,IAAI,EAAE,UAAU,OAAO;cAAG;GAG1C,CAAA;GAEhB,SACE,OAAO,kBAAA,GAAA,CAAI,CAAA;EACf;CACF;CAEA,OACE,kBAAC,GAAD;EACgB;EACd,UAAU;EACV,cAAc;EACd,MAAM;EACN,iBAAiB;GACf,EAAiB;EACnB;EACY;EACN;EACN,SAAS,EAAe;EACxB,SAAS;CACV,CAAA;AAEL"}
1
+ {"version":3,"file":"ChallengeSubmissionStepper.js","names":[],"sources":["../../../src/components/ChallengeSubmission/ChallengeSubmissionStepper.tsx"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport { useSynapseContext } from '@/utils'\nimport { Typography } from '@mui/material'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport {\n DockerCommit,\n EvaluationSubmission,\n TeamSubmissionEligibility,\n} from '@sage-bionetworks/synapse-types'\nimport { useState } from 'react'\nimport StepperDialog from '../StepperDialog'\nimport { Step } from '../StepperDialog/StepperDialog'\nimport { displayToast } from '../ToastMessage'\nimport { EntityItem } from './ChallengeSubmission'\nimport EvaluationQueueList from './EvaluationQueueList'\nimport SubmissionCommitList from './SubmissionCommitList'\n\nenum StepsEnum {\n SELECT_COMMIT = 'SELECT_COMMIT',\n SELECT_EVALUATION = 'SELECT_EVALUATION',\n SUBMISSION_SUCCESS = 'SUBMISSION_SUCCESS',\n}\ntype StepKey = keyof typeof StepsEnum\ntype StepList<TStepId = string> = {\n [key in StepKey]: Step<TStepId>\n}\n\nconst stepsDocker: StepList<StepsEnum> = {\n SELECT_COMMIT: {\n id: StepsEnum.SELECT_COMMIT,\n title: 'Select Commit for Submission',\n nextStep: StepsEnum.SELECT_EVALUATION,\n nextEnabled: false,\n },\n SELECT_EVALUATION: {\n id: StepsEnum.SELECT_EVALUATION,\n title: 'Select Evaluation Queue',\n previousStep: StepsEnum.SELECT_COMMIT,\n confirmStep: StepsEnum.SUBMISSION_SUCCESS,\n confirmButtonText: 'Submit',\n },\n SUBMISSION_SUCCESS: {\n id: StepsEnum.SUBMISSION_SUCCESS,\n title: 'Submission Successful!',\n confirmButtonText: 'Close',\n confirmEnabled: true,\n },\n}\n\nconst stepsFile: StepList<StepsEnum> = {\n SELECT_COMMIT: { id: StepsEnum.SELECT_COMMIT, title: '' },\n SELECT_EVALUATION: {\n id: StepsEnum.SELECT_EVALUATION,\n title: 'Select Evaluation Queue',\n confirmStep: StepsEnum.SUBMISSION_SUCCESS,\n confirmButtonText: 'Submit',\n },\n SUBMISSION_SUCCESS: {\n id: StepsEnum.SUBMISSION_SUCCESS,\n title: 'Submission Successful!',\n confirmButtonText: 'Close',\n confirmEnabled: true,\n },\n}\n\nconst getSteps = (\n entityType: typeof EntityType.dockerrepo | typeof EntityType.file,\n) => {\n return entityType === EntityType.dockerrepo ? stepsDocker : stepsFile\n}\n\ntype ChallengeSubmissionStepperProps = {\n projectId: string\n userId: string\n teamId: string\n entity: EntityItem\n entityType: typeof EntityType.dockerrepo | typeof EntityType.file\n isShowingModal: boolean\n onClose: () => void\n}\n\nfunction ChallengeSubmissionStepper({\n projectId,\n userId,\n teamId,\n entity,\n entityType,\n isShowingModal,\n onClose,\n}: ChallengeSubmissionStepperProps) {\n const { accessToken } = useSynapseContext()\n const steps = getSteps(entityType)\n const initialStep =\n entityType === EntityType.dockerrepo\n ? steps.SELECT_COMMIT\n : steps.SELECT_EVALUATION\n const [step, setStep] = useState<Step<StepsEnum>>(initialStep)\n const [errorMessage, setErrorMessage] = useState<string>()\n const [selectedCommit, setSelectedCommit] = useState<DockerCommit>()\n\n const [submissionName, setSubmissionName] = useState<string>('')\n const [selectedEval, setSelectedEval] = useState<string | undefined>()\n const [confirming, setConfirming] = useState<boolean>(false)\n\n const hide = () => {\n setErrorMessage(undefined)\n setSelectedCommit(undefined)\n setSubmissionName('')\n setSelectedEval(undefined)\n setConfirming(false)\n onClose()\n setStep(initialStep)\n }\n\n function handleStepChange(value?: StepsEnum) {\n if (!value || !steps[value]) return\n setErrorMessage(undefined)\n setStep(steps[value])\n }\n\n async function confirmEligibility() {\n if (!selectedEval) return setErrorMessage('Please select an evaluation.')\n try {\n return await SynapseClient.getSubmissionEligibility(\n selectedEval,\n teamId,\n accessToken,\n )\n } catch (err) {\n return setErrorMessage(err.message)\n }\n }\n\n async function submitForEvaluation(eligibility: TeamSubmissionEligibility) {\n if (!entity.id || (entityType === EntityType.dockerrepo && !selectedCommit))\n return setErrorMessage('Error: Invalid entity or commit.')\n\n const contributors = eligibility.membersEligibility\n .filter(\n member =>\n !member.hasConflictingSubmission &&\n member.isEligible &&\n !member.isQuotaFilled &&\n member.isRegistered,\n )\n .map(member => {\n return { principalId: member.principalId.toString() }\n })\n\n const submission: EvaluationSubmission = {\n userId: userId,\n evaluationId: selectedEval!,\n entityId: entity.id,\n versionNumber: entity.versionNumber ?? 1,\n teamId: teamId,\n contributors,\n }\n if (entityType === EntityType.dockerrepo) {\n submission.dockerRepositoryName = entity.repositoryName\n submission.dockerDigest = selectedCommit!.digest\n }\n\n if (submissionName !== '') submission['name'] = submissionName\n\n try {\n await SynapseClient.submitToEvaluation(\n accessToken,\n submission,\n entity.etag!,\n eligibility.eligibilityStateHash,\n )\n displayToast('Submitted successfully!', 'success')\n hide()\n } catch (e) {\n setErrorMessage(e.message)\n }\n }\n\n const onConfirmHandler = async () => {\n const eligibility = await confirmEligibility()\n if (eligibility) {\n await submitForEvaluation(eligibility)\n }\n }\n\n const onCommitChanged = (value: DockerCommit) => {\n setSelectedCommit(value)\n setStep({ ...step, nextEnabled: true })\n }\n\n function stepperContent() {\n switch (step.id) {\n case StepsEnum.SELECT_COMMIT:\n return (\n <SubmissionCommitList\n repository={entity}\n selectedCommit={selectedCommit}\n onCommitChanged={onCommitChanged}\n />\n )\n break\n case StepsEnum.SELECT_EVALUATION:\n return (\n <EvaluationQueueList\n projectId={projectId}\n submissonName={submissionName}\n onSubmissionNameChange={setSubmissionName}\n selectedEvaluation={selectedEval}\n onEvaluationChange={value => {\n setStep({ ...step, confirmEnabled: true })\n setSelectedEval(value)\n }}\n />\n )\n case StepsEnum.SUBMISSION_SUCCESS:\n return (\n <Typography variant=\"body1\" sx={{ fontSize: '16px' }}>\n Your submission will be scored and results posted to the Challenge\n Leaderboard.\n </Typography>\n )\n default:\n return <></>\n }\n }\n\n return (\n <StepperDialog\n errorMessage={errorMessage}\n onCancel={hide}\n onStepChange={handleStepChange as (arg: string) => void}\n open={isShowingModal}\n onConfirm={() => {\n onConfirmHandler()\n }}\n confirming={confirming}\n step={step}\n content={stepperContent()}\n loading={false}\n />\n )\n}\n\nexport default ChallengeSubmissionStepper\n"],"mappings":"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"}
@@ -1 +1 @@
1
- ._dataExplorerTitle_q328i_1.MuiTypography-root{color:var(--data-explorer-title-color,var(--synapse-primary-action-color));margin-bottom:10px;font-size:36px;line-height:40px}._dataExplorerSubtitle_q328i_8.MuiTypography-root{line-height:140%}._dataExplorerButton_q328i_12{width:fit-content}._dataExplorerTextContainer_q328i_16{flex:0 0 30%;gap:16px;max-width:30%}._dataExplorerContainer_q328i_22{flex:1 0 0;align-items:flex-start;gap:60px;padding:40px 0;display:flex}._dataContainer_q328i_30{flex:60%;grid-template-rows:repeat(9,fit-content(100%));grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;min-width:0;display:inline-grid}._dataRowTitle_q328i_40{color:var(--synapse-primary-action-color,#4d558d);overflow-wrap:break-word;word-break:break-word;flex:0 auto;min-width:0;font-size:19.8px;font-weight:400;line-height:26.4px}._dataRowInner_q328i_51{flex:1;justify-content:space-between;align-items:center;min-width:0;display:flex}._dataRow_q328i_40{border:1px solid #0000;border-radius:3.3px;justify-content:space-between;justify-self:stretch;align-items:center;gap:17.6px;min-height:66.6px;padding:8.8px 26.4px;transition:background-color .2s,border-color .2s,box-shadow .2s,transform .2s;display:flex;position:relative;text-decoration:none!important}._dataRow_q328i_40:hover{z-index:1;background-color:#fff;border-color:#e1e1e1;transform:scale(1.1);box-shadow:0 4px 8px #0000001a}._dataRow_q328i_40:hover ._viewCta_q328i_80{opacity:1;pointer-events:auto}._dataRowLeft_q328i_85{flex:1;align-items:center;gap:16px;min-width:0;display:inline-flex}._iconContainer_q328i_93{border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:49px;height:49px;display:flex}._dataRowNamePill_q328i_103{flex:1 1 0;align-items:center;gap:8px;min-width:0;display:flex}._fileCount_q328i_111{color:#787090;border:1px solid #d8d5e0;border-radius:80px;flex-shrink:0;justify-content:center;align-items:center;gap:10px;padding:4px 8px;font-size:14px;font-weight:400;line-height:24px;display:flex}._viewCta_q328i_80{opacity:0;white-space:nowrap;color:var(--synapse-primary-action-color,#4d558d);background:linear-gradient(90deg,#0000,#fff 25% 100%);border-radius:0 2px 2px 0;align-items:center;gap:4px;padding-left:40px;padding-right:26.4px;transition:opacity .2s;display:inline-flex;position:absolute;top:0;bottom:0;right:0}._viewCtaText_q328i_144{color:var(--synapse-primary-action-color,#4d558d);font-size:16px;font-weight:400;line-height:26.4px}._viewCtaIcon_q328i_151.MuiSvgIcon-root{color:var(--synapse-primary-action-color,#5a488f);font-size:24px}
1
+ ._dataExplorerTitle_pjkyv_1.MuiTypography-root{color:var(--data-explorer-title-color,var(--synapse-primary-action-color));font-size:36px;line-height:40px}._dataExplorerSubtitle_pjkyv_7.MuiTypography-root{line-height:140%}@media (width>=1024px){._dataExplorerButton_pjkyv_12{width:fit-content}}._dataExplorerTextContainer_pjkyv_17{gap:16px}@media (width>=1024px){._dataExplorerTextContainer_pjkyv_17{flex:0 0 30%;max-width:30%}}._dataExplorerContainer_pjkyv_27{flex-direction:column;flex:1 0 0;align-items:flex-start;gap:60px;padding:40px 0;display:flex}@media (width>=1024px){._dataExplorerContainer_pjkyv_27{flex-direction:row}}._dataContainer_pjkyv_41{flex:60%;grid-template-rows:repeat(9,fit-content(100%));grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;min-width:0;display:inline-grid}._dataRowTitle_pjkyv_51{color:var(--synapse-primary-action-color,#4d558d);overflow-wrap:break-word;word-break:break-word;flex:0 auto;min-width:0;font-size:16px;font-weight:400;line-height:26.4px}@media (width>=1024px){._dataRowTitle_pjkyv_51{font-size:19.8px}}._dataRowInner_pjkyv_67{flex:1;justify-content:space-between;align-items:center;min-width:0;display:flex}._dataRow_pjkyv_51{border:1px solid #0000;border-radius:3.3px;justify-content:space-between;justify-self:stretch;align-items:center;gap:17.6px;min-height:66.6px;padding:8.8px 26.4px;transition:background-color .2s,border-color .2s,box-shadow .2s,transform .2s;display:flex;position:relative;text-decoration:none!important}._dataRow_pjkyv_51:hover{z-index:1;background-color:#fff;border-color:#e1e1e1;transform:scale(1.1);box-shadow:0 4px 8px #0000001a}._dataRow_pjkyv_51:hover ._viewCta_pjkyv_96{opacity:1;pointer-events:auto}._dataRowLeft_pjkyv_101{flex:1;align-items:center;gap:16px;min-width:0;display:inline-flex}._iconContainer_pjkyv_109{border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:49px;height:49px;display:flex}._dataRowNamePill_pjkyv_119{flex:1 1 0;align-items:center;gap:8px;min-width:0;display:flex}._fileCount_pjkyv_127{color:#787090;border:1px solid #d8d5e0;border-radius:80px;flex-shrink:0;justify-content:center;align-items:center;gap:10px;padding:4px 8px;font-size:14px;font-weight:400;line-height:24px;display:flex}._viewCta_pjkyv_96{opacity:0;white-space:nowrap;color:var(--synapse-primary-action-color,#4d558d);background:linear-gradient(90deg,#0000,#fff 25% 100%);border-radius:0 2px 2px 0;align-items:center;gap:4px;padding-left:40px;padding-right:26.4px;transition:opacity .2s;display:inline-flex;position:absolute;top:0;bottom:0;right:0}._viewCtaText_pjkyv_160{color:var(--synapse-primary-action-color,#4d558d);font-size:16px;font-weight:400;line-height:26.4px}._viewCtaIcon_pjkyv_167.MuiSvgIcon-root{color:var(--synapse-primary-action-color,#5a488f);font-size:24px}
@@ -1,20 +1,20 @@
1
1
  import './DataExplorer.css';var e = {
2
- dataExplorerTitle: "_dataExplorerTitle_q328i_1",
3
- dataExplorerSubtitle: "_dataExplorerSubtitle_q328i_8",
4
- dataExplorerButton: "_dataExplorerButton_q328i_12",
5
- dataExplorerTextContainer: "_dataExplorerTextContainer_q328i_16",
6
- dataExplorerContainer: "_dataExplorerContainer_q328i_22",
7
- dataContainer: "_dataContainer_q328i_30",
8
- dataRowTitle: "_dataRowTitle_q328i_40",
9
- dataRowInner: "_dataRowInner_q328i_51",
10
- dataRow: "_dataRow_q328i_40",
11
- viewCta: "_viewCta_q328i_80",
12
- dataRowLeft: "_dataRowLeft_q328i_85",
13
- iconContainer: "_iconContainer_q328i_93",
14
- dataRowNamePill: "_dataRowNamePill_q328i_103",
15
- fileCount: "_fileCount_q328i_111",
16
- viewCtaText: "_viewCtaText_q328i_144",
17
- viewCtaIcon: "_viewCtaIcon_q328i_151"
2
+ dataExplorerTitle: "_dataExplorerTitle_pjkyv_1",
3
+ dataExplorerSubtitle: "_dataExplorerSubtitle_pjkyv_7",
4
+ dataExplorerButton: "_dataExplorerButton_pjkyv_12",
5
+ dataExplorerTextContainer: "_dataExplorerTextContainer_pjkyv_17",
6
+ dataExplorerContainer: "_dataExplorerContainer_pjkyv_27",
7
+ dataContainer: "_dataContainer_pjkyv_41",
8
+ dataRowTitle: "_dataRowTitle_pjkyv_51",
9
+ dataRowInner: "_dataRowInner_pjkyv_67",
10
+ dataRow: "_dataRow_pjkyv_51",
11
+ viewCta: "_viewCta_pjkyv_96",
12
+ dataRowLeft: "_dataRowLeft_pjkyv_101",
13
+ iconContainer: "_iconContainer_pjkyv_109",
14
+ dataRowNamePill: "_dataRowNamePill_pjkyv_119",
15
+ fileCount: "_fileCount_pjkyv_127",
16
+ viewCtaText: "_viewCtaText_pjkyv_160",
17
+ viewCtaIcon: "_viewCtaIcon_pjkyv_167"
18
18
  };
19
19
  //#endregion
20
20
  export { e as default };
@@ -1 +1 @@
1
- {"version":3,"file":"DataExplorer.module.js","names":[],"sources":["../../../src/components/DataExplorer/DataExplorer.module.scss"],"sourcesContent":[".dataExplorerTitle:global(.MuiTypography-root) {\n color: var(--data-explorer-title-color, var(--synapse-primary-action-color));\n font-size: 36px;\n line-height: 40px; /* 111.111% */\n margin-bottom: 10px;\n}\n\n.dataExplorerSubtitle:global(.MuiTypography-root) {\n line-height: 140%;\n}\n\n.dataExplorerButton {\n width: fit-content;\n}\n\n.dataExplorerTextContainer {\n gap: 16px;\n flex: 0 0 30%;\n max-width: 30%;\n}\n\n.dataExplorerContainer {\n display: flex;\n padding: 40px 0;\n align-items: flex-start;\n gap: 60px;\n flex: 1 0 0;\n}\n\n.dataContainer {\n display: inline-grid;\n row-gap: 8px;\n column-gap: 8px;\n flex: 1 1 60%;\n min-width: 0;\n grid-template-rows: repeat(9, fit-content(100%));\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n\n.dataRowTitle {\n color: var(--synapse-primary-action-color, #4d558d);\n font-size: 19.8px;\n font-weight: 400;\n line-height: 26.4px;\n flex: 0 1 auto;\n min-width: 0;\n overflow-wrap: break-word;\n word-break: break-word;\n}\n\n.dataRowInner {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex: 1;\n min-width: 0;\n}\n\n.dataRow {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8.8px 26.4px;\n min-height: 66.6px;\n gap: 17.6px;\n justify-self: stretch;\n position: relative;\n border-radius: 3.3px;\n border: 1px solid transparent;\n text-decoration: none !important;\n transition: background-color 200ms ease, border-color 200ms ease,\n box-shadow 200ms ease, transform 200ms ease;\n\n &:hover {\n background-color: #fff;\n border-color: #e1e1e1;\n box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.1);\n transform: scale(1.1);\n z-index: 1;\n .viewCta {\n opacity: 1;\n pointer-events: auto;\n }\n }\n}\n\n.dataRowLeft {\n display: inline-flex;\n align-items: center;\n gap: 16px;\n min-width: 0;\n flex: 1;\n}\n\n.iconContainer {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 49px;\n height: 49px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.dataRowNamePill {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1 1 0;\n min-width: 0;\n}\n\n.fileCount {\n display: flex;\n padding: 4px 8px;\n justify-content: center;\n align-items: center;\n gap: 10px;\n border-radius: 80px;\n border: 1px solid #d8d5e0;\n color: #787090;\n font-size: 14px;\n font-weight: 400;\n line-height: 24px; /* 171.429% */\n flex-shrink: 0;\n}\n\n.viewCta {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n display: inline-flex;\n align-items: center;\n padding-right: 26.4px;\n padding-left: 40px;\n gap: 4px;\n opacity: 0;\n white-space: nowrap;\n color: var(--synapse-primary-action-color, #4d558d);\n background: linear-gradient(to right, transparent, #fff 25%, #fff 100%);\n border-radius: 0 2px 2px 0;\n transition: opacity 200ms ease;\n}\n\n.viewCtaText {\n color: var(--synapse-primary-action-color, #4d558d);\n font-size: 16px;\n font-weight: 400;\n line-height: 26.4px; /* 165% */\n}\n\n.viewCtaIcon:global(.MuiSvgIcon-root) {\n font-size: 24px;\n color: var(--synapse-primary-action-color, #5a488f);\n}\n"],"mappings":""}
1
+ {"version":3,"file":"DataExplorer.module.js","names":[],"sources":["../../../src/components/DataExplorer/DataExplorer.module.scss"],"sourcesContent":["@use 'sass:map';\n@use '../../style/abstracts/variables' as SrcVariables;\n\n.dataExplorerTitle:global(.MuiTypography-root) {\n color: var(--data-explorer-title-color, var(--synapse-primary-action-color));\n font-size: 36px;\n line-height: 40px; /* 111.111% */\n}\n\n.dataExplorerSubtitle:global(.MuiTypography-root) {\n line-height: 140%;\n}\n\n.dataExplorerButton {\n @media (min-width: map.get(SrcVariables.$breakpoints, 'large')) {\n width: fit-content;\n }\n}\n\n.dataExplorerTextContainer {\n gap: 16px;\n\n @media (min-width: map.get(SrcVariables.$breakpoints, 'large')) {\n flex: 0 0 30%;\n max-width: 30%;\n }\n}\n\n.dataExplorerContainer {\n display: flex;\n padding: 40px 0;\n align-items: flex-start;\n gap: 60px;\n flex: 1 0 0;\n flex-direction: column;\n\n @media (min-width: map.get(SrcVariables.$breakpoints, 'large')) {\n flex-direction: row;\n }\n}\n\n.dataContainer {\n display: inline-grid;\n row-gap: 8px;\n column-gap: 8px;\n flex: 1 1 60%;\n min-width: 0;\n grid-template-rows: repeat(9, fit-content(100%));\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n\n.dataRowTitle {\n color: var(--synapse-primary-action-color, #4d558d);\n font-size: 16px;\n font-weight: 400;\n line-height: 26.4px;\n flex: 0 1 auto;\n min-width: 0;\n overflow-wrap: break-word;\n word-break: break-word;\n\n @media (min-width: map.get(SrcVariables.$breakpoints, 'large')) {\n font-size: 19.8px;\n }\n}\n\n.dataRowInner {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex: 1;\n min-width: 0;\n}\n\n.dataRow {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8.8px 26.4px;\n min-height: 66.6px;\n gap: 17.6px;\n justify-self: stretch;\n position: relative;\n border-radius: 3.3px;\n border: 1px solid transparent;\n text-decoration: none !important;\n transition:\n background-color 200ms ease,\n border-color 200ms ease,\n box-shadow 200ms ease,\n transform 200ms ease;\n\n &:hover {\n background-color: #fff;\n border-color: #e1e1e1;\n box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.1);\n transform: scale(1.1);\n z-index: 1;\n .viewCta {\n opacity: 1;\n pointer-events: auto;\n }\n }\n}\n\n.dataRowLeft {\n display: inline-flex;\n align-items: center;\n gap: 16px;\n min-width: 0;\n flex: 1;\n}\n\n.iconContainer {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 49px;\n height: 49px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.dataRowNamePill {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1 1 0;\n min-width: 0;\n}\n\n.fileCount {\n display: flex;\n padding: 4px 8px;\n justify-content: center;\n align-items: center;\n gap: 10px;\n border-radius: 80px;\n border: 1px solid #d8d5e0;\n color: #787090;\n font-size: 14px;\n font-weight: 400;\n line-height: 24px; /* 171.429% */\n flex-shrink: 0;\n}\n\n.viewCta {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n display: inline-flex;\n align-items: center;\n padding-right: 26.4px;\n padding-left: 40px;\n gap: 4px;\n opacity: 0;\n white-space: nowrap;\n color: var(--synapse-primary-action-color, #4d558d);\n background: linear-gradient(to right, transparent, #fff 25%, #fff 100%);\n border-radius: 0 2px 2px 0;\n transition: opacity 200ms ease;\n}\n\n.viewCtaText {\n color: var(--synapse-primary-action-color, #4d558d);\n font-size: 16px;\n font-weight: 400;\n line-height: 26.4px; /* 165% */\n}\n\n.viewCtaIcon:global(.MuiSvgIcon-root) {\n font-size: 24px;\n color: var(--synapse-primary-action-color, #5a488f);\n}\n"],"mappings":""}
@@ -1,8 +1,10 @@
1
+ @use 'sass:map';
2
+ @use '../../style/abstracts/variables' as SrcVariables;
3
+
1
4
  .dataExplorerTitle:global(.MuiTypography-root) {
2
5
  color: var(--data-explorer-title-color, var(--synapse-primary-action-color));
3
6
  font-size: 36px;
4
7
  line-height: 40px; /* 111.111% */
5
- margin-bottom: 10px;
6
8
  }
7
9
 
8
10
  .dataExplorerSubtitle:global(.MuiTypography-root) {
@@ -10,13 +12,18 @@
10
12
  }
11
13
 
12
14
  .dataExplorerButton {
13
- width: fit-content;
15
+ @media (min-width: map.get(SrcVariables.$breakpoints, 'large')) {
16
+ width: fit-content;
17
+ }
14
18
  }
15
19
 
16
20
  .dataExplorerTextContainer {
17
21
  gap: 16px;
18
- flex: 0 0 30%;
19
- max-width: 30%;
22
+
23
+ @media (min-width: map.get(SrcVariables.$breakpoints, 'large')) {
24
+ flex: 0 0 30%;
25
+ max-width: 30%;
26
+ }
20
27
  }
21
28
 
22
29
  .dataExplorerContainer {
@@ -25,6 +32,11 @@
25
32
  align-items: flex-start;
26
33
  gap: 60px;
27
34
  flex: 1 0 0;
35
+ flex-direction: column;
36
+
37
+ @media (min-width: map.get(SrcVariables.$breakpoints, 'large')) {
38
+ flex-direction: row;
39
+ }
28
40
  }
29
41
 
30
42
  .dataContainer {
@@ -39,13 +51,17 @@
39
51
 
40
52
  .dataRowTitle {
41
53
  color: var(--synapse-primary-action-color, #4d558d);
42
- font-size: 19.8px;
54
+ font-size: 16px;
43
55
  font-weight: 400;
44
56
  line-height: 26.4px;
45
57
  flex: 0 1 auto;
46
58
  min-width: 0;
47
59
  overflow-wrap: break-word;
48
60
  word-break: break-word;
61
+
62
+ @media (min-width: map.get(SrcVariables.$breakpoints, 'large')) {
63
+ font-size: 19.8px;
64
+ }
49
65
  }
50
66
 
51
67
  .dataRowInner {
@@ -68,8 +84,11 @@
68
84
  border-radius: 3.3px;
69
85
  border: 1px solid transparent;
70
86
  text-decoration: none !important;
71
- transition: background-color 200ms ease, border-color 200ms ease,
72
- box-shadow 200ms ease, transform 200ms ease;
87
+ transition:
88
+ background-color 200ms ease,
89
+ border-color 200ms ease,
90
+ box-shadow 200ms ease,
91
+ transform 200ms ease;
73
92
 
74
93
  &:hover {
75
94
  background-color: #fff;
@@ -20,6 +20,7 @@ type DataGridProps = {
20
20
  selection: SelectionWithId | null;
21
21
  }) => void;
22
22
  remoteSelections?: readonly RemoteSelection[];
23
+ upsertKey?: string[];
23
24
  };
24
25
  /**
25
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;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,gBAAgB,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;CAC9C,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAK,EAAE,aAAa,2CAoOpD"}
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,gBAAgB,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;IAC7C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAK,EAAE,aAAa,2CAuOpD"}
@@ -5,25 +5,25 @@ import '../../style/components/_data-grid-extra.css';/* empty css
5
5
  import { renderAddRowsComponent as r, renderRecordSetContextMenu as i, renderViewContextMenu as ee } from "./components/contextMenu.js";
6
6
  import { getCellClassName as te } from "./utils/getCellClassName.js";
7
7
  import { useColumnResizeHandles as ne } from "./hooks/useColumnResizeHandles.js";
8
- import { useEffect as a, useRef as o, useState as s } from "react";
9
- import { jsx as c } from "react/jsx-runtime";
10
- import l from "classnames";
11
- import { c as re } from "react/compiler-runtime";
12
- import { DynamicDataSheetGrid as u } from "@sage-bionetworks/react-datasheet-grid";
8
+ import { useEffect as re, useRef as a, useState as o } from "react";
9
+ import { jsx as s } from "react/jsx-runtime";
10
+ import c from "classnames";
11
+ import { c as l } from "react/compiler-runtime";
12
+ import { DynamicDataSheetGrid as ie } from "@sage-bionetworks/react-datasheet-grid";
13
13
  import "@sage-bionetworks/react-datasheet-grid/dist/style.css";
14
14
  //#region src/components/DataGrid/DataGrid.tsx
15
- function d(d) {
16
- let f = re(42), { gridRef: p, rowValues: m, columnNames: h, columnOrder: g, schemaPropertiesInfo: _, entityIsView: v, jsonSchema: y, lastSelection: b, handleChange: x, handleSelectionChange: S, remoteSelections: C } = d, w;
17
- f[0] === Symbol.for("react.memo_cache_sentinel") ? (w = {}, f[0] = w) : w = f[0];
18
- let [T, E] = s(w), [D, O] = s(!1), k, A;
19
- f[1] !== h || f[2] !== g || f[3] !== _ ? (k = () => {
20
- !h || !g || E((e) => {
21
- let n = g.map((e) => h[e]);
15
+ function u(u) {
16
+ let p = l(43), { gridRef: m, rowValues: h, columnNames: g, columnOrder: _, schemaPropertiesInfo: v, entityIsView: y, jsonSchema: b, lastSelection: x, handleChange: S, handleSelectionChange: C, remoteSelections: w, upsertKey: T } = u, E;
17
+ p[0] === Symbol.for("react.memo_cache_sentinel") ? (E = {}, p[0] = E) : E = p[0];
18
+ let [D, O] = o(E), [k, ae] = o(!1), A, j;
19
+ p[1] !== g || p[2] !== _ || p[3] !== v ? (A = () => {
20
+ !g || !_ || O((e) => {
21
+ let n = _.map((e) => g[e]);
22
22
  if (!n.some((t) => !e[t])) return e;
23
23
  let r = { ...e };
24
24
  return n.forEach((e, n) => {
25
25
  if (!r[e]) {
26
- let i = _[e];
26
+ let i = v[e];
27
27
  r[e] = t(e, i, {
28
28
  showPinIcon: n === 0,
29
29
  hasDescription: !!i?.description
@@ -31,102 +31,102 @@ function d(d) {
31
31
  }
32
32
  }), r;
33
33
  });
34
- }, A = [
35
- h,
34
+ }, j = [
36
35
  g,
37
- _
38
- ], f[1] = h, f[2] = g, f[3] = _, f[4] = k, f[5] = A) : (k = f[4], A = f[5]), a(k, A);
39
- let j;
40
- f[6] === g ? j = f[7] : (j = (e) => {
41
- typeof e != "number" || e < 0 || !g || e >= g.length || e === 0 && O(ae);
42
- }, f[6] = g, f[7] = j);
43
- let M = j, N;
44
- f[8] === D ? N = f[9] : (N = D ? new Set([0]) : /* @__PURE__ */ new Set(), f[8] = D, f[9] = N);
45
- let P = N, F;
46
- f[10] !== h || f[11] !== g || f[12] !== T || f[13] !== M || f[14] !== P || f[15] !== _ ? (F = n(h, g, _, T, P, M), f[10] = h, f[11] = g, f[12] = T, f[13] = M, f[14] = P, f[15] = _, f[16] = F) : F = f[16];
47
- let I = F, [L, R] = s(null), z = v ? ee : i, B = v ? !1 : r, V;
48
- f[17] !== y || f[18] !== L ? (V = (e) => {
36
+ _,
37
+ v
38
+ ], p[1] = g, p[2] = _, p[3] = v, p[4] = A, p[5] = j) : (A = p[4], j = p[5]), re(A, j);
39
+ let M;
40
+ p[6] === _ ? M = p[7] : (M = (e) => {
41
+ typeof e != "number" || e < 0 || !_ || e >= _.length || e === 0 && ae(f);
42
+ }, p[6] = _, p[7] = M);
43
+ let N = M, P;
44
+ p[8] === k ? P = p[9] : (P = k ? new Set([0]) : /* @__PURE__ */ new Set(), p[8] = k, p[9] = P);
45
+ let F = P, I;
46
+ p[10] !== g || p[11] !== _ || p[12] !== D || p[13] !== N || p[14] !== F || p[15] !== v || p[16] !== T ? (I = n(g, _, v, D, F, N, T), p[10] = g, p[11] = _, p[12] = D, p[13] = N, p[14] = F, p[15] = v, p[16] = T, p[17] = I) : I = p[17];
47
+ let L = I, [R, z] = o(null), B = y ? ee : i, V = y ? !1 : r, H;
48
+ p[18] !== b || p[19] !== R ? (H = (e) => {
49
49
  let { rowData: t, rowIndex: n } = e;
50
- return l({
51
- "row-valid": !!y && t.__validationStatus === "valid",
52
- "row-invalid": !!y && t.__validationStatus === "invalid",
53
- "row-unknown": !!y && t.__validationStatus === "pending",
54
- "row-selected": L === n
50
+ return c({
51
+ "row-valid": !!b && t.__validationStatus === "valid",
52
+ "row-invalid": !!b && t.__validationStatus === "invalid",
53
+ "row-unknown": !!b && t.__validationStatus === "pending",
54
+ "row-selected": R === n
55
55
  });
56
- }, f[17] = y, f[18] = L, f[19] = V) : V = f[19];
57
- let H = V, U;
58
- f[20] !== I || f[21] !== b || f[22] !== C || f[23] !== L ? (U = (e) => {
56
+ }, p[18] = b, p[19] = R, p[20] = H) : H = p[20];
57
+ let U = H, W;
58
+ p[21] !== L || p[22] !== x || p[23] !== w || p[24] !== R ? (W = (e) => {
59
59
  let { rowData: t, rowIndex: n, columnId: r } = e;
60
60
  return te({
61
61
  rowData: t,
62
62
  rowIndex: n,
63
63
  columnId: r || "",
64
- selectedRowIndex: L,
65
- lastSelection: b,
66
- colValues: I,
67
- remoteSelections: C
64
+ selectedRowIndex: R,
65
+ lastSelection: x,
66
+ colValues: L,
67
+ remoteSelections: w
68
68
  });
69
- }, f[20] = I, f[21] = b, f[22] = C, f[23] = L, f[24] = U) : U = f[24];
70
- let W = U, G = ie, K;
71
- f[25] === Symbol.for("react.memo_cache_sentinel") ? (K = (e) => {
69
+ }, p[21] = L, p[22] = x, p[23] = w, p[24] = R, p[25] = W) : W = p[25];
70
+ let G = W, oe = d, K;
71
+ p[26] === Symbol.for("react.memo_cache_sentinel") ? (K = (e) => {
72
72
  let { cell: t } = e;
73
- R(t ? t.row : null);
74
- }, f[25] = K) : K = f[25];
75
- let oe = K, q = o(null), J = o(null), Y;
76
- f[26] === p ? Y = f[27] : (Y = (e, t) => {
77
- if (p.current) {
78
- let e = p.current.activeCell;
73
+ z(t ? t.row : null);
74
+ }, p[26] = K) : K = p[26];
75
+ let se = K, q = a(null), J = a(null), Y;
76
+ p[27] === m ? Y = p[28] : (Y = (e, t) => {
77
+ if (m.current) {
78
+ let e = m.current.activeCell;
79
79
  e ? J.current = {
80
80
  col: e.col,
81
81
  row: e.row
82
82
  } : J.current = null;
83
83
  }
84
- E((n) => ({
84
+ O((n) => ({
85
85
  ...n,
86
86
  [e]: t
87
87
  }));
88
- }, f[26] = p, f[27] = Y);
88
+ }, p[27] = m, p[28] = Y);
89
89
  let X = Y, Z;
90
- f[28] !== I || f[29] !== X ? (Z = {
90
+ p[29] !== L || p[30] !== X ? (Z = {
91
91
  wrapperRef: q,
92
- colValues: I,
92
+ colValues: L,
93
93
  onColumnResize: X
94
- }, f[28] = I, f[29] = X, f[30] = Z) : Z = f[30], ne(Z);
94
+ }, p[29] = L, p[30] = X, p[31] = Z) : Z = p[31], ne(Z);
95
95
  let Q;
96
- f[31] === Symbol.for("react.memo_cache_sentinel") ? (Q = {
96
+ p[32] === Symbol.for("react.memo_cache_sentinel") ? (Q = {
97
97
  position: "relative",
98
98
  width: "100%"
99
- }, f[31] = Q) : Q = f[31];
99
+ }, p[32] = Q) : Q = p[32];
100
100
  let $;
101
- return f[32] !== B || f[33] !== W || f[34] !== I || f[35] !== z || f[36] !== p || f[37] !== x || f[38] !== S || f[39] !== H || f[40] !== m ? ($ = /* @__PURE__ */ c("div", {
101
+ return p[33] !== V || p[34] !== G || p[35] !== L || p[36] !== B || p[37] !== m || p[38] !== S || p[39] !== C || p[40] !== U || p[41] !== h ? ($ = /* @__PURE__ */ s("div", {
102
102
  ref: q,
103
103
  style: Q,
104
- children: /* @__PURE__ */ c(u, {
105
- ref: p,
106
- value: m,
107
- columns: I,
104
+ children: /* @__PURE__ */ s(ie, {
105
+ ref: m,
106
+ value: h,
107
+ columns: L,
108
108
  autoAddRow: !1,
109
109
  disableSmartDelete: !0,
110
- addRowsComponent: B,
111
- contextMenuComponent: z,
110
+ addRowsComponent: V,
111
+ contextMenuComponent: B,
112
112
  rowKey: e,
113
- rowClassName: H,
114
- cellClassName: W,
115
- duplicateRow: G,
116
- onChange: x,
117
- onActiveCellChange: oe,
118
- onSelectionChange: S
113
+ rowClassName: U,
114
+ cellClassName: G,
115
+ duplicateRow: oe,
116
+ onChange: S,
117
+ onActiveCellChange: se,
118
+ onSelectionChange: C
119
119
  })
120
- }), f[32] = B, f[33] = W, f[34] = I, f[35] = z, f[36] = p, f[37] = x, f[38] = S, f[39] = H, f[40] = m, f[41] = $) : $ = f[41], $;
120
+ }), p[33] = V, p[34] = G, p[35] = L, p[36] = B, p[37] = m, p[38] = S, p[39] = C, p[40] = U, p[41] = h, p[42] = $) : $ = p[42], $;
121
121
  }
122
- function ie(e) {
122
+ function d(e) {
123
123
  let { rowData: t } = e;
124
124
  return { ...t };
125
125
  }
126
- function ae(e) {
126
+ function f(e) {
127
127
  return !e;
128
128
  }
129
129
  //#endregion
130
- export { d as default };
130
+ export { u as default };
131
131
 
132
132
  //# sourceMappingURL=DataGrid.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataGrid.js","names":["modelColsToGrid","SchemaPropertiesMap","classNames","JSONSchema7","useEffect","useMemo","useState","useRef","useCallback","DynamicDataSheetGrid","DataSheetGridRef","SelectionWithId","renderAddRowsComponent","renderRecordSetContextMenu","renderViewContextMenu","DataGridRow","Operation","GRID_ROW_REACT_KEY_PROPERTY","getCellClassName","useColumnResizeHandles","calculateDefaultColumnWidth","HeaderOptions","RemoteSelection","DataGridProps","gridRef","React","RefObject","columnNames","columnOrder","schemaPropertiesInfo","rowValues","entityIsView","jsonSchema","lastSelection","handleChange","newValue","operations","handleSelectionChange","opts","selection","remoteSelections","DataGrid","props","$","_c","t0","Symbol","for","columnWidths","setColumnWidths","isPinned","setIsPinned","t1","t2","prev","modelColumnNames","map","idx","needsUpdate","some","name","newWidths","forEach","columnName","arrayIndex","propertyInfo","headerOptions","showPinIcon","hasDescription","description","t3","columnIndex","length","_temp","handleTogglePin","t4","Set","pinnedColumnsSet","t5","colValues","selectedRowIndex","setSelectedRowIndex","contextMenuComponent","addRowsComponent","t6","t7","rowData","rowIndex","__validationStatus","rowClassNameCallback","t8","rowData_0","rowIndex_0","columnId","cellClassNameCallback","duplicateRowCallback","_temp2","t9","cell","row","handleActiveCellChange","wrapperRef","activeCellBeforeResizeRef","columnName_0","newWidth","current","activeCell","col","prev_1","handleColumnResize","t10","onColumnResize","t11","position","width","t12","rowData_1","prev_0"],"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 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 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 setSelectedRowIndex(cell ? cell.row : null)\n },\n [],\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={false}\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"],"mappings":"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"}
1
+ {"version":3,"file":"DataGrid.js","names":["modelColsToGrid","SchemaPropertiesMap","classNames","JSONSchema7","useEffect","useMemo","useState","useRef","useCallback","DynamicDataSheetGrid","DataSheetGridRef","SelectionWithId","renderAddRowsComponent","renderRecordSetContextMenu","renderViewContextMenu","DataGridRow","Operation","GRID_ROW_REACT_KEY_PROPERTY","getCellClassName","useColumnResizeHandles","calculateDefaultColumnWidth","HeaderOptions","RemoteSelection","DataGridProps","gridRef","React","RefObject","columnNames","columnOrder","schemaPropertiesInfo","rowValues","entityIsView","jsonSchema","lastSelection","handleChange","newValue","operations","handleSelectionChange","opts","selection","remoteSelections","upsertKey","DataGrid","props","$","_c","t0","Symbol","for","columnWidths","setColumnWidths","isPinned","setIsPinned","t1","t2","prev","modelColumnNames","map","idx","needsUpdate","some","name","newWidths","forEach","columnName","arrayIndex","propertyInfo","headerOptions","showPinIcon","hasDescription","description","t3","columnIndex","length","_temp","handleTogglePin","t4","Set","pinnedColumnsSet","t5","colValues","selectedRowIndex","setSelectedRowIndex","contextMenuComponent","addRowsComponent","t6","t7","rowData","rowIndex","__validationStatus","rowClassNameCallback","t8","rowData_0","rowIndex_0","columnId","cellClassNameCallback","duplicateRowCallback","_temp2","t9","cell","row","handleActiveCellChange","wrapperRef","activeCellBeforeResizeRef","columnName_0","newWidth","current","activeCell","col","prev_1","handleColumnResize","t10","onColumnResize","t11","position","width","t12","rowData_1","prev_0"],"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 remoteSelections?: readonly RemoteSelection[]\n upsertKey?: string[]\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 remoteSelections,\n upsertKey,\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 upsertKey,\n ),\n [\n columnNames,\n columnOrder,\n schemaPropertiesInfo,\n columnWidths,\n pinnedColumnsSet,\n handleTogglePin,\n upsertKey,\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 setSelectedRowIndex(cell ? cell.row : null)\n },\n [],\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={false}\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"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SynapseGrid.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/SynapseGrid.tsx"],"names":[],"mappings":"AAcA,OAAO,EACL,iBAAiB,EAElB,MAAM,kCAAkC,CAAA;AAEzC,OAAO,EACL,GAAG,EAOJ,MAAM,OAAO,CAAA;AAsBd,MAAM,MAAM,gBAAgB,GAAG;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,GAAG,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAA;CAC7B,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;AA8eD,iBAAS,WAAW,CAAC,KAAK,EAAE,gBAAgB,2CAM3C;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"SynapseGrid.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/SynapseGrid.tsx"],"names":[],"mappings":"AAcA,OAAO,EACL,iBAAiB,EAElB,MAAM,kCAAkC,CAAA;AAEzC,OAAO,EACL,GAAG,EAOJ,MAAM,OAAO,CAAA;AAsBd,MAAM,MAAM,gBAAgB,GAAG;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,GAAG,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAA;CAC7B,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;AAqfD,iBAAS,WAAW,CAAC,KAAK,EAAE,gBAAgB,2CAM3C;AAED,eAAe,WAAW,CAAA"}