Skip to content

Commit 75062b7

Browse files
committed
remove redundent props for enabling editing/ deletion, and also remove depemdency between deletion and editing
1 parent 794d439 commit 75062b7

File tree

4 files changed

+69
-25
lines changed

4 files changed

+69
-25
lines changed

src/components/dagshub/data-engine/metadataKeyValue/MetadataKeyValueList.tsx

+40-21
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { MetadataKeyValuePair } from './MetadataKeyValuePair';
44
import StyledTextField from './StyledTextField';
55
import IconButton from '@mui/material/IconButton';
66
import AddIcon from '@mui/icons-material/Add';
7+
import {Button, ButtonStretch, ButtonVariant} from "../../../elements";
78

89
export type MetadataType = 'BOOLEAN' | 'INTEGER' | 'FLOAT' | 'STRING' | 'BLOB';
910

@@ -39,20 +40,16 @@ export interface DatapointMetadataInput {
3940
export interface MetadataKeyValueListProps {
4041
maxHeight?: string;
4142
metadataList: MetadataField[];
42-
editingEnabled: boolean;
43-
deletionEnabled: boolean;
4443
onDeleteHandler?: (keyName: string) => void;
45-
onChangeHandler?: (metadataList: DatapointMetadataInput[]) => void;
44+
onSaveHandler?: (metadataList: DatapointMetadataInput[]) => void;
4645
validateValueByType?: (valueType: MetadataType, value: string) => boolean;
4746
}
4847

4948
export function MetadataKeyValueList({
5049
maxHeight,
5150
metadataList,
52-
editingEnabled,
53-
deletionEnabled,
5451
onDeleteHandler,
55-
onChangeHandler,
52+
onSaveHandler,
5653
validateValueByType,
5754
}: MetadataKeyValueListProps) {
5855
//Todo:
@@ -100,9 +97,6 @@ export function MetadataKeyValueList({
10097
setShouldScrollToBottom(false); //turn it off after scrolling
10198
}
10299
setAutoFocusNewlyCreatedFieldKey(true); //highlight again when the user adds new field
103-
104-
!!onChangeHandler && onChangeHandler(convertNewMetadataFieldToDatapointMetadataInput(temporaryMetadataList));
105-
106100
}, [temporaryMetadataList]);
107101

108102
useEffect(() => {
@@ -202,14 +196,14 @@ export function MetadataKeyValueList({
202196
isAutoGenerated?: boolean;
203197
isNewlyCreated?: boolean;
204198
}) => {
205-
if (editingEnabled && metadataField.isNewlyCreated) {
206-
//it should always be possible to delete newly created fields
207-
return true;
208-
}
209-
if (editingEnabled && deletionEnabled && !!onDeleteHandler && !metadataField.isAutoGenerated) {
210-
//logic for pre-existing fields
211-
return true;
212-
}
199+
if (!!onSaveHandler && metadataField.isNewlyCreated) {
200+
//it should always be possible to delete newly created fields, even if deletion is not enabled
201+
return true;
202+
}
203+
if (!!onDeleteHandler && !metadataField.isAutoGenerated) {
204+
//logic for pre-existing fields
205+
return true;
206+
}
213207
return false;
214208
};
215209

@@ -240,7 +234,7 @@ export function MetadataKeyValueList({
240234
index={index}
241235
keyName={metadataField.key}
242236
value={String(metadataField.value)}
243-
isEditable={editingEnabled && !metadataField.isAutoGenerated}
237+
isEditable={!!onSaveHandler && !metadataField.isAutoGenerated}
244238
description={metadataField.isAutoGenerated ? 'Auto-generated' : undefined}
245239
isRemovable={checkIfPairIsRemovable(metadataField)}
246240
saveKeyNameLocally={locallyEditKeyAtIndex}
@@ -257,8 +251,8 @@ export function MetadataKeyValueList({
257251
/>
258252
))}
259253
</Box>
260-
{editingEnabled && (
261-
<StyledTextField
254+
{!!onSaveHandler && (
255+
<><StyledTextField
262256
onClick={handleAddNew}
263257
sx={{
264258
borderBottom: '1px solid #E2E8F0',
@@ -276,8 +270,33 @@ export function MetadataKeyValueList({
276270
),
277271
}}
278272
value={'Add new'}
273+
/><Box
274+
sx={{
275+
padding: '16px',
276+
display: 'flex',
277+
width: '100%',
278+
gap: '8px',
279+
justifyContent: 'flex-end',
280+
}}
281+
>
282+
<Button
283+
variant={ButtonVariant.Secondary}
284+
style={{ borderRadius: '8px' }}
285+
label={'Cancel'}
286+
stretch={ButtonStretch.Slim}
287+
onClick={() => {
288+
// onResetChanges();
289+
//Todo: implement
290+
}}
291+
/>
292+
<Button
293+
style={{ borderRadius: '8px' }}
294+
label={'Save'}
295+
stretch={ButtonStretch.Slim}
296+
disabled={false} //Todo
297+
onClick={()=>{onSaveHandler(convertNewMetadataFieldToDatapointMetadataInput(temporaryMetadataList))}}
279298
/>
280-
)}
299+
</Box></>)}
281300
</Box>
282301
);
283302
}

src/components/dagshub/data-engine/metadataKeyValue/MetadataKeyValuePair.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ export function MetadataKeyValuePair({
180180
/>
181181
</div>
182182
</ErroredTooltip>
183-
{isEditable && isRemovable && (
183+
{!!isRemovable && (
184184
<IconButton
185185
style={{ marginRight: '8px', height: '100%', padding: '6px' }}
186186
onClick={() => {

src/stories/dagshub/data-engine/MetadataKeyValueList/MeatadataKeyValueList.stories.tsx

+27-2
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,39 @@ export default meta;
1414

1515
const Template: StoryFn<typeof MetadataKeyValueList> = (args) => <MetadataKeyValueList {...args} />;
1616

17-
export const metadataKeyValueList: StoryFn<typeof MetadataKeyValueList> = Template.bind({});
18-
metadataKeyValueList.args = {
17+
export const metadataKeyValueListReadOnly: StoryFn<typeof MetadataKeyValueList> = Template.bind({});
18+
metadataKeyValueListReadOnly.args = {
1919
metadataList: [
2020
{ key: 'key1', value: 'mockValue1', valueType: 'STRING', multiple: false },
2121
{ key: 'key2', value: 0, valueType: 'INTEGER', isAutoGenerated: true, multiple: false },
2222
{ key: 'key3', value: false, valueType: 'BOOLEAN', multiple: false },
2323
{ key: 'key4', value: true, valueType: 'BOOLEAN', multiple: false },
2424
],
25+
onSaveHandler:undefined,
26+
onDeleteHandler: undefined,
27+
};
28+
29+
export const metadataKeyValueListEditingEnabled: StoryFn<typeof MetadataKeyValueList> = Template.bind({});
30+
metadataKeyValueListEditingEnabled.args = {
31+
metadataList: [
32+
{ key: 'key1', value: 'mockValue1', valueType: 'STRING', multiple: false },
33+
{ key: 'key2', value: 0, valueType: 'INTEGER', isAutoGenerated: true, multiple: false },
34+
{ key: 'key3', value: false, valueType: 'BOOLEAN', multiple: false },
35+
{ key: 'key4', value: true, valueType: 'BOOLEAN', multiple: false },
36+
],
37+
onSaveHandler: (metadataList)=>{console.log("onSaveHandler")},
38+
onDeleteHandler: undefined,
39+
};
40+
41+
export const metadataKeyValueListDeletionEnabled: StoryFn<typeof MetadataKeyValueList> = Template.bind({});
42+
metadataKeyValueListDeletionEnabled.args = {
43+
metadataList: [
44+
{ key: 'key1', value: 'mockValue1', valueType: 'STRING', multiple: false },
45+
{ key: 'key2', value: 0, valueType: 'INTEGER', isAutoGenerated: true, multiple: false },
46+
{ key: 'key3', value: false, valueType: 'BOOLEAN', multiple: false },
47+
{ key: 'key4', value: true, valueType: 'BOOLEAN', multiple: false },
48+
],
49+
onSaveHandler:undefined,
2550
onDeleteHandler: (keyName: string) => {
2651
console.log(`Metadata field with key name ${keyName} was deleted`);
2752
},

src/stories/elements/customAccordion/customAccordion.stories.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ customAccordion.args = {
2727
]}
2828
editingEnabled={true}
2929
deletionEnabled={false}
30-
onChangeHandler={() => {}}
30+
onSaveHandler={() => {}}
3131
/>
3232
),
3333
};

0 commit comments

Comments
 (0)