+
{
if (saveValueTypeLocally) {
@@ -131,18 +143,26 @@ export function MetadataKeyValuePair({
disableClearable
shouldHighlightIfEmpty={shouldHighlightEmptyFields}
/>
-
+
)}
{
+ onInputSave={(newVal) => {
+ if (!!validateValueByType && !!valueType){
+ setIsErrored(!validateValueByType(valueType, newVal as string))
+ }
if (saveValueLocally) {
saveValueLocally(index, newVal);
}
}}
+ onInputChange={(newVal) => {
+ if (!!validateValueByType && !!valueType){
+ setIsErrored(!validateValueByType(valueType, newVal as string))
+ }}}
placeholder={isNewlyCreated || !value ? 'Add value' : 'Typing...'}
shouldHighlightIfEmpty={shouldHighlightEmptyFields}
+ isErrored={isErrored}//TODO: add validation
/>
{isEditable && isRemovable && (
React.ReactNode;
sidebarRenderers?: React.ReactNode;
+ validateValueByType?: (valueType: MetadataType, value: string) => boolean;
}) {
+
const SIDEBAR_WIDTH = 350; //I decided on this number
const ARROWS_SECTION_HEIGHT = 52;
@@ -70,7 +73,8 @@ export function SingleFileViewDataSection({
metadataList={itemData.metadataList}
editingEnabled={!!enableMetadataEditing}
deletionEnabled={!!enableMetadataDeletion}
- onChangeHandler={metadataOnChangeHandler}
+ onSaveHandler={metadataOnChangeHandler}
+ validateValueByType={validateValueByType}
/>
@@ -225,7 +229,8 @@ export function SingleFileViewDataSection({
metadataList={itemData.metadataList}
editingEnabled={!!enableMetadataEditing}
deletionEnabled={!!enableMetadataDeletion}
- onChangeHandler={metadataOnChangeHandler}
+ onSaveHandler={metadataOnChangeHandler}
+ validateValueByType={validateValueByType}
/>
{sidebarRenderers}
diff --git a/src/components/dagshub/data-engine/singleFileViewModal/SingleFileViewModal.tsx b/src/components/dagshub/data-engine/singleFileViewModal/SingleFileViewModal.tsx
index dd7c6d8..815d700 100644
--- a/src/components/dagshub/data-engine/singleFileViewModal/SingleFileViewModal.tsx
+++ b/src/components/dagshub/data-engine/singleFileViewModal/SingleFileViewModal.tsx
@@ -1,7 +1,7 @@
import { Box } from '@mui/system';
import React, { useEffect, useRef, useState } from 'react';
import { useMediaQuery } from '@mui/material';
-import { GenericModal, MetadataField, NewMetadataField, RGB } from '../../index';
+import {GenericModal, MetadataField, MetadataType, NewMetadataField, RGB} from '../../index';
import './style.scss';
import TopButtonsSection from './TopButtonsSection';
import { SingleFileViewDataSection } from './SingleFileViewDataSection';
@@ -48,6 +48,7 @@ export interface singleFileViewModalProps {
enableFileDownloading?: boolean;
visualizerRenderer: (props: VisualizerProps) => React.ReactNode;
sidebarRenderers?: React.ReactNode;
+ validateValueByType?: (valueType: MetadataType, value: string) => boolean;
}
export function SingleFileViewModal({
@@ -65,6 +66,7 @@ export function SingleFileViewModal({
enableFileDownloading,
visualizerRenderer,
sidebarRenderers,
+ validateValueByType,
}: singleFileViewModalProps) {
const [showMetadataOverlay, setShowMetadataOverlay] = useState