mirror of
https://github.com/datahub-project/datahub.git
synced 2025-12-27 09:58:14 +00:00
fix(customHomePage): fix splitting a row below when editing global module (#14230)
This commit is contained in:
parent
a24b6f215d
commit
d022df4736
@ -368,6 +368,7 @@ describe('useModuleOperations', () => {
|
||||
mockPersonalTemplate,
|
||||
'urn:li:pageModule:1',
|
||||
position,
|
||||
true,
|
||||
);
|
||||
expect(mockSetPersonalTemplate).toHaveBeenCalledWith(updatedTemplate);
|
||||
expect(mockUpsertTemplate).toHaveBeenCalledWith(updatedTemplate, true, mockPersonalTemplate);
|
||||
@ -422,6 +423,7 @@ describe('useModuleOperations', () => {
|
||||
mockGlobalTemplate,
|
||||
'urn:li:pageModule:2',
|
||||
position,
|
||||
true,
|
||||
);
|
||||
expect(mockSetGlobalTemplate).toHaveBeenCalledWith(updatedTemplate);
|
||||
expect(mockUpsertTemplate).toHaveBeenCalledWith(updatedTemplate, false, mockPersonalTemplate);
|
||||
@ -476,6 +478,7 @@ describe('useModuleOperations', () => {
|
||||
mockGlobalTemplate,
|
||||
'urn:li:pageModule:2',
|
||||
position,
|
||||
true,
|
||||
);
|
||||
expect(mockSetPersonalTemplate).toHaveBeenCalledWith(updatedTemplate);
|
||||
expect(mockUpsertTemplate).toHaveBeenCalledWith(updatedTemplate, true, null);
|
||||
@ -532,6 +535,7 @@ describe('useModuleOperations', () => {
|
||||
mockPersonalTemplate,
|
||||
'urn:li:pageModule:1',
|
||||
position,
|
||||
true,
|
||||
);
|
||||
expect(mockSetPersonalTemplate).toHaveBeenCalledWith(updatedTemplate);
|
||||
expect(mockUpsertTemplate).toHaveBeenCalledWith(updatedTemplate, true, mockPersonalTemplate);
|
||||
@ -1410,6 +1414,7 @@ describe('useModuleOperations', () => {
|
||||
mockPersonalTemplate,
|
||||
mockGlobalModuleToEdit.urn,
|
||||
position,
|
||||
false, // shouldRemoveEmptyRow = false (to replace a module we should keep empty row)
|
||||
);
|
||||
|
||||
// Should add the new personal module in the same position
|
||||
@ -1664,6 +1669,7 @@ describe('useModuleOperations', () => {
|
||||
mockPersonalTemplate,
|
||||
mockGlobalModuleToEdit.urn,
|
||||
position,
|
||||
false,
|
||||
);
|
||||
|
||||
// Should not proceed with template update if removal fails
|
||||
|
||||
@ -224,6 +224,7 @@ describe('useTemplateOperations', () => {
|
||||
templateWithMultipleModules,
|
||||
'urn:li:pageModule:2',
|
||||
position,
|
||||
true,
|
||||
);
|
||||
|
||||
expect(updatedTemplate).not.toBeNull();
|
||||
@ -288,6 +289,7 @@ describe('useTemplateOperations', () => {
|
||||
templateWithDuplicateUrns,
|
||||
'urn:li:pageModule:duplicate',
|
||||
position,
|
||||
true,
|
||||
);
|
||||
|
||||
expect(updatedTemplate).not.toBeNull();
|
||||
@ -344,6 +346,7 @@ describe('useTemplateOperations', () => {
|
||||
templateWithMultipleModules,
|
||||
'urn:li:pageModule:2',
|
||||
position,
|
||||
true,
|
||||
);
|
||||
|
||||
expect(updatedTemplate).not.toBeNull();
|
||||
@ -398,6 +401,7 @@ describe('useTemplateOperations', () => {
|
||||
templateWithMultipleModules,
|
||||
'urn:li:pageModule:2',
|
||||
position,
|
||||
true,
|
||||
);
|
||||
|
||||
expect(updatedTemplate).not.toBeNull();
|
||||
@ -406,7 +410,7 @@ describe('useTemplateOperations', () => {
|
||||
expect(updatedTemplate?.properties?.rows?.[0]?.modules?.[0]?.urn).toBe('urn:li:pageModule:1');
|
||||
});
|
||||
|
||||
it('should remove entire row when last module is removed', () => {
|
||||
it('should remove entire row when last module is removed if removing of empty rows is enabled', () => {
|
||||
const { result } = renderHook(() => useTemplateOperations(setPersonalTemplate));
|
||||
|
||||
const templateWithSingleModule: PageTemplateFragment = {
|
||||
@ -456,6 +460,7 @@ describe('useTemplateOperations', () => {
|
||||
templateWithSingleModule,
|
||||
'urn:li:pageModule:1',
|
||||
position,
|
||||
true,
|
||||
);
|
||||
|
||||
expect(updatedTemplate).not.toBeNull();
|
||||
@ -463,6 +468,65 @@ describe('useTemplateOperations', () => {
|
||||
expect(updatedTemplate?.properties?.rows?.[0]?.modules?.[0]?.urn).toBe('urn:li:pageModule:2');
|
||||
});
|
||||
|
||||
it('should not remove entire row when last module is removed if removing of empty rows is disabled', () => {
|
||||
const { result } = renderHook(() => useTemplateOperations(setPersonalTemplate));
|
||||
|
||||
const templateWithSingleModule: PageTemplateFragment = {
|
||||
...mockTemplate,
|
||||
properties: {
|
||||
...mockTemplate.properties!,
|
||||
rows: [
|
||||
{
|
||||
modules: [
|
||||
{
|
||||
urn: 'urn:li:pageModule:1',
|
||||
type: EntityType.DatahubPageModule,
|
||||
properties: {
|
||||
name: 'Module 1',
|
||||
type: DataHubPageModuleType.Link,
|
||||
visibility: { scope: PageModuleScope.Personal },
|
||||
params: {},
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
modules: [
|
||||
{
|
||||
urn: 'urn:li:pageModule:2',
|
||||
type: EntityType.DatahubPageModule,
|
||||
properties: {
|
||||
name: 'Module 2',
|
||||
type: DataHubPageModuleType.Link,
|
||||
visibility: { scope: PageModuleScope.Personal },
|
||||
params: {},
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
|
||||
const position: ModulePositionInput = {
|
||||
rowIndex: 0,
|
||||
rowSide: 'left',
|
||||
moduleIndex: 0,
|
||||
};
|
||||
|
||||
const updatedTemplate = result.current.removeModuleFromTemplate(
|
||||
templateWithSingleModule,
|
||||
'urn:li:pageModule:1',
|
||||
position,
|
||||
false,
|
||||
);
|
||||
|
||||
expect(updatedTemplate).not.toBeNull();
|
||||
expect(updatedTemplate?.properties?.rows).toHaveLength(2);
|
||||
expect(updatedTemplate?.properties?.rows?.[0]?.modules?.length).toBe(0);
|
||||
expect(updatedTemplate?.properties?.rows?.[1]?.modules?.[0]?.urn).toBe('urn:li:pageModule:2');
|
||||
});
|
||||
|
||||
it('should return original template when module is not found', () => {
|
||||
const { result } = renderHook(() => useTemplateOperations(setPersonalTemplate));
|
||||
|
||||
@ -476,6 +540,7 @@ describe('useTemplateOperations', () => {
|
||||
mockTemplate,
|
||||
'urn:li:pageModule:nonexistent',
|
||||
position,
|
||||
true,
|
||||
);
|
||||
|
||||
expect(updatedTemplate).toBe(mockTemplate);
|
||||
@ -494,6 +559,7 @@ describe('useTemplateOperations', () => {
|
||||
mockTemplate,
|
||||
'urn:li:pageModule:1',
|
||||
position,
|
||||
true,
|
||||
);
|
||||
|
||||
expect(updatedTemplate).toBe(mockTemplate);
|
||||
@ -512,6 +578,7 @@ describe('useTemplateOperations', () => {
|
||||
mockTemplate,
|
||||
'urn:li:pageModule:1',
|
||||
position,
|
||||
true,
|
||||
);
|
||||
|
||||
expect(updatedTemplate).toBe(mockTemplate);
|
||||
@ -526,7 +593,12 @@ describe('useTemplateOperations', () => {
|
||||
moduleIndex: 0,
|
||||
};
|
||||
|
||||
const updatedTemplate = result.current.removeModuleFromTemplate(null, 'urn:li:pageModule:1', position);
|
||||
const updatedTemplate = result.current.removeModuleFromTemplate(
|
||||
null,
|
||||
'urn:li:pageModule:1',
|
||||
position,
|
||||
true,
|
||||
);
|
||||
|
||||
expect(updatedTemplate).toBeNull();
|
||||
});
|
||||
@ -556,6 +628,7 @@ describe('useTemplateOperations', () => {
|
||||
templateWithEmptyRow,
|
||||
'urn:li:pageModule:1',
|
||||
position,
|
||||
true,
|
||||
);
|
||||
|
||||
expect(updatedTemplate).toBe(templateWithEmptyRow);
|
||||
|
||||
@ -154,6 +154,7 @@ export function useModuleOperations(
|
||||
templateToUpdate: PageTemplateFragment | null,
|
||||
moduleUrn: string,
|
||||
position: ModulePositionInput,
|
||||
shouldRemoveEmptyRow: boolean,
|
||||
) => PageTemplateFragment | null,
|
||||
upsertTemplate: (
|
||||
templateToUpsert: PageTemplateFragment | null,
|
||||
@ -284,7 +285,7 @@ export function useModuleOperations(
|
||||
}
|
||||
|
||||
// Update template state
|
||||
const updatedTemplate = removeModuleFromTemplate(templateToUpdate, module.urn, position);
|
||||
const updatedTemplate = removeModuleFromTemplate(templateToUpdate, module.urn, position, true);
|
||||
|
||||
// Update local state immediately for optimistic UI
|
||||
updateTemplateStateOptimistically(context, updatedTemplate, isPersonal);
|
||||
@ -395,6 +396,7 @@ export function useModuleOperations(
|
||||
templateToUpdate,
|
||||
originalModuleData.urn,
|
||||
position,
|
||||
false,
|
||||
);
|
||||
|
||||
if (updatedTemplate) {
|
||||
|
||||
@ -120,6 +120,7 @@ export function useTemplateOperations(setPersonalTemplate: (template: PageTempla
|
||||
templateToUpdate: PageTemplateFragment | null,
|
||||
moduleUrn: string,
|
||||
position: ModulePositionInput,
|
||||
shouldRemoveEmptyRow: boolean,
|
||||
): PageTemplateFragment | null => {
|
||||
if (!isValidRemovalPosition(templateToUpdate, position)) {
|
||||
return templateToUpdate;
|
||||
@ -142,7 +143,7 @@ export function useTemplateOperations(setPersonalTemplate: (template: PageTempla
|
||||
}
|
||||
|
||||
// If the row is now empty, remove the entire row
|
||||
if (updatedModules.length === 0) {
|
||||
if (shouldRemoveEmptyRow && updatedModules.length === 0) {
|
||||
newRows.splice(rowIndex!, 1);
|
||||
} else {
|
||||
row.modules = updatedModules;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user