feat: update property name automatically when custom column name is changed (#18048)

This commit is contained in:
Souma Ghosh 2022-12-07 16:20:29 +05:30 committed by GitHub
parent e37f7419b9
commit b2f67e12bc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 112 additions and 0 deletions

View File

@ -350,4 +350,40 @@ describe("Table Widget V2 property pane feature validation", function() {
cy.get(widgetsPage.searchField).should("have.value", "data"); cy.get(widgetsPage.searchField).should("have.value", "data");
cy.get(publish.backToEditor).click(); cy.get(publish.backToEditor).click();
}); });
it("13. Verify custom column property name changes with change in column name ([FEATURE]: #17142)", function() {
// Open property pane
cy.openPropertyPane("tablewidgetv2");
cy.moveToContentTab();
cy.addColumnV2("customColumn18");
cy.editColumn("customColumn1");
cy.get(".t--property-control-propertyname pre span span").should(
"have.text",
"customColumn18",
);
cy.editColName("customColumn00");
cy.get(".t--property-control-propertyname pre span span").should(
"have.text",
"customColumn00",
);
cy.get(".t--property-pane-back-btn").click();
cy.get('[data-rbd-draggable-id="customColumn1"] input').should(
"have.value",
"customColumn00",
);
cy.get("[data-rbd-draggable-id='customColumn1'] input[type='text']").clear({
force: true,
});
cy.get("[data-rbd-draggable-id='customColumn1'] input[type='text']").type(
"customColumn99",
{
force: true,
},
);
cy.editColumn("customColumn1");
cy.get(".t--property-control-propertyname pre span span").should(
"have.text",
"customColumn99",
);
});
}); });

View File

@ -93,6 +93,8 @@ export default {
propertyName: "alias", propertyName: "alias",
label: "Property Name", label: "Property Name",
controlType: "INPUT_TEXT", controlType: "INPUT_TEXT",
helperText: () =>
"Changing the name of the column overrides any changes to this field",
hidden: (props: TableWidgetProps, propertyPath: string) => { hidden: (props: TableWidgetProps, propertyPath: string) => {
const columnId = propertyPath.match(/primaryColumns\.(.*)\.alias/); const columnId = propertyPath.match(/primaryColumns\.(.*)\.alias/);
let isDerivedProperty = false; let isDerivedProperty = false;

View File

@ -14,6 +14,7 @@ import Color from "./Color";
import BorderAndShadow from "./BorderAndShadow"; import BorderAndShadow from "./BorderAndShadow";
import Validations from "./Validation"; import Validations from "./Validation";
import Select from "./Select"; import Select from "./Select";
import { updateCustomColumnAliasOnLabelChange } from "../../propertyUtils";
export default { export default {
editableTitle: true, editableTitle: true,
@ -39,4 +40,5 @@ export default {
discardButtonStyleConfig, discardButtonStyleConfig,
BorderAndShadow, BorderAndShadow,
], ],
updateHook: updateCustomColumnAliasOnLabelChange,
}; };

View File

@ -11,6 +11,7 @@ import {
updateColumnOrderHook, updateColumnOrderHook,
updateInlineEditingSaveOptionHook, updateInlineEditingSaveOptionHook,
updateInlineEditingOptionDropdownVisibilityHook, updateInlineEditingOptionDropdownVisibilityHook,
updateCustomColumnAliasOnLabelChange,
} from "../propertyUtils"; } from "../propertyUtils";
import { import {
createMessage, createMessage,
@ -50,6 +51,7 @@ export default [
updateHook: composePropertyUpdateHook([ updateHook: composePropertyUpdateHook([
updateColumnOrderHook, updateColumnOrderHook,
updateInlineEditingOptionDropdownVisibilityHook, updateInlineEditingOptionDropdownVisibilityHook,
updateCustomColumnAliasOnLabelChange,
]), ]),
dependencies: [ dependencies: [
"columnOrder", "columnOrder",

View File

@ -6,6 +6,7 @@ import {
getBasePropertyPath, getBasePropertyPath,
hideByColumnType, hideByColumnType,
uniqueColumnAliasValidation, uniqueColumnAliasValidation,
updateCustomColumnAliasOnLabelChange,
} from "./propertyUtils"; } from "./propertyUtils";
import _ from "lodash"; import _ from "lodash";
import { ColumnTypes, TableWidgetProps } from "../constants"; import { ColumnTypes, TableWidgetProps } from "../constants";
@ -454,3 +455,55 @@ describe("uniqueColumnAliasValidation", () => {
}); });
}); });
}); });
describe("updateCustomColumnAliasOnLabelChange", () => {
it("should return the propertyToUpdate array to update alias for the given custom column", () => {
expect(
updateCustomColumnAliasOnLabelChange(
{} as TableWidgetProps,
"primaryColumns.customColumn1.label",
"customColumn12",
),
).toEqual([
{
propertyPath: "primaryColumns.customColumn1.alias",
propertyValue: "customColumn12",
},
]);
});
it("should not return propertyToUpdate array to update alias for the given column", () => {
expect(
updateCustomColumnAliasOnLabelChange(
{} as TableWidgetProps,
"primaryColumns.resume_url.label",
"customColumn12",
),
).toEqual(undefined);
});
it("should not return the propertyToUpdate array to update alias when any property other than label property of the custom column gets changed", () => {
expect(
updateCustomColumnAliasOnLabelChange(
{} as TableWidgetProps,
"primaryColumns.customColumn1.notlabel",
"customColumn12",
),
).toEqual(undefined);
});
it("should return the propertyToUpdate array to update alias for any given custom column", () => {
expect(
updateCustomColumnAliasOnLabelChange(
{} as TableWidgetProps,
"primaryColumns.customColumn12345.label",
"customColumn12",
),
).toEqual([
{
propertyPath: "primaryColumns.customColumn12345.alias",
propertyValue: "customColumn12",
},
]);
});
});

View File

@ -624,3 +624,20 @@ export const replacePropertyName = (
path.pop(); path.pop();
return `${path.join(".")}.${targetPropertyName}`; return `${path.join(".")}.${targetPropertyName}`;
}; };
export const updateCustomColumnAliasOnLabelChange = (
props: TableWidgetProps,
propertyPath: string,
propertyValue: unknown,
): Array<PropertyHookUpdates> | undefined => {
// alias will be updated along with label change only for custom columns
const regex = /^primaryColumns\.(customColumn\d+)\.label$/;
if (propertyPath?.length && regex.test(propertyPath)) {
return [
{
propertyPath: propertyPath.replace("label", "alias"),
propertyValue: propertyValue,
},
];
}
};