Skip to content

Commit b8251a2

Browse files
Merge pull request #410 from contentstack/VE-5643-multiple-file-replace-button
fix(VE-5643): Replace button is visible for parent wrapper for Multiple file field
2 parents 8fbe820 + aa1d818 commit b8251a2

3 files changed

Lines changed: 73 additions & 2 deletions

File tree

src/__test__/data/fields.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,18 @@ export const mockMultipleLinkFieldSchema: ISchemaFieldMap = {
3535
non_localizable: false,
3636
unique: false,
3737
};
38+
39+
export const mockMultipleFileFieldSchema: ISchemaFieldMap = {
40+
data_type: "file",
41+
display_name: "File",
42+
uid: "file",
43+
extensions: [],
44+
field_metadata: {
45+
description: "",
46+
rich_text_type: "standard"
47+
},
48+
mandatory: false,
49+
multiple: true,
50+
non_localizable: false,
51+
unique: false,
52+
};

src/visualBuilder/components/FieldToolbar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,6 @@ function FieldToolbarComponent(
144144

145145
fieldType = getFieldType(fieldSchema);
146146
isModalEditable = ALLOWED_MODAL_EDITABLE_FIELD.includes(fieldType);
147-
isReplaceAllowed = ALLOWED_REPLACE_FIELDS.includes(fieldType);
148147

149148
Icon = fieldIcons[fieldType];
150149

@@ -166,6 +165,7 @@ function FieldToolbarComponent(
166165
fieldMetadata.instance.fieldPathWithIndex ||
167166
fieldMetadata.multipleFieldMetadata?.index === -1);
168167

168+
isReplaceAllowed = ALLOWED_REPLACE_FIELDS.includes(fieldType) && !isWholeMultipleField;
169169
// if (
170170
// DEFAULT_MULTIPLE_FIELDS.includes(fieldType) &&
171171
// isWholeMultipleField &&

src/visualBuilder/components/__test__/fieldToolbar.test.tsx

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
} from "../../utils/instanceHandlers";
88
import { ISchemaFieldMap } from "../../utils/types/index.types";
99
import FieldToolbarComponent from "../FieldToolbar";
10-
import { mockMultipleLinkFieldSchema, singleLineFieldSchema } from "../../../__test__/data/fields";
10+
import { mockMultipleLinkFieldSchema, mockMultipleFileFieldSchema } from "../../../__test__/data/fields";
1111
import { asyncRender } from "../../../__test__/utils";
1212
import { VisualBuilderCslpEventDetails } from "../../types/visualBuilder.types";
1313

@@ -180,4 +180,60 @@ describe("MultipleFieldToolbarComponent", () => {
180180
);
181181
expect(variantIcon).toBeInTheDocument();
182182
});
183+
184+
describe("'Replace button' visibility for multiple file fields", () => {
185+
beforeEach(() => {
186+
vi.spyOn(FieldSchemaMap, "getFieldSchema").mockResolvedValue(
187+
mockMultipleFileFieldSchema
188+
);
189+
});
190+
191+
test("'replace button' is hidden for parent wrapper of multiple file field", async () => {
192+
const parentWrapperMetadata: CslpData = {
193+
...mockMultipleFieldMetadata,
194+
fieldPathWithIndex: "files",
195+
instance: {
196+
fieldPathWithIndex: "files"
197+
},
198+
};
199+
200+
const parentWrapperEventDetails = {
201+
...mockEventDetails,
202+
fieldMetadata: parentWrapperMetadata
203+
};
204+
205+
const { container } = await asyncRender(
206+
<FieldToolbarComponent
207+
eventDetails={parentWrapperEventDetails}
208+
/>
209+
);
210+
211+
const replaceButton = container.querySelector('[data-testid="visual-builder-replace-file"]');
212+
expect(replaceButton).not.toBeInTheDocument();
213+
});
214+
215+
test("'replace button' is visible for individual field in multiple file field", async () => {
216+
const individualFieldMetadata: CslpData = {
217+
...mockMultipleFieldMetadata,
218+
fieldPathWithIndex: "files",
219+
instance: {
220+
fieldPathWithIndex: "files.0"
221+
},
222+
};
223+
224+
const individualFieldEventDetails = {
225+
...mockEventDetails,
226+
fieldMetadata: individualFieldMetadata
227+
};
228+
229+
const { container } = await asyncRender(
230+
<FieldToolbarComponent
231+
eventDetails={individualFieldEventDetails}
232+
/>
233+
);
234+
235+
const replaceButton = container.querySelector('[data-testid="visual-builder-replace-file"]');
236+
expect(replaceButton).toBeInTheDocument();
237+
});
238+
});
183239
});

0 commit comments

Comments
 (0)