feat: Set selectedRow for multiple row selection in table widget (#7935)

This commit is contained in:
Vicky Bansal 2021-10-27 11:43:48 +05:30 committed by GitHub
parent b27e3567c6
commit 8c4e7d331e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 245 additions and 5 deletions

View File

@ -1,11 +1,27 @@
/* eslint-disable @typescript-eslint/no-unused-vars*/
export default {
getSelectedRow: (props, moment, _) => {
const selectedRowIndex =
props.selectedRowIndex === undefined ||
Number.isNaN(parseInt(props.selectedRowIndex))
? -1
: parseInt(props.selectedRowIndex);
let selectedRowIndices = [];
if (
Array.isArray(props.selectedRowIndices) &&
props.selectedRowIndices.every((el) => typeof el === "number")
) {
selectedRowIndices = props.selectedRowIndices;
} else if (typeof props.selectedRowIndices === "number") {
selectedRowIndices = [props.selectedRowIndices];
}
let selectedRowIndex;
if (props.multiRowSelection) {
selectedRowIndex = selectedRowIndices.length
? selectedRowIndices[selectedRowIndices.length - 1]
: -1;
} else {
selectedRowIndex =
props.selectedRowIndex === undefined ||
Number.isNaN(parseInt(props.selectedRowIndex))
? -1
: parseInt(props.selectedRowIndex);
}
const filteredTableData =
props.filteredTableData || props.sanitizedTableData || [];
if (selectedRowIndex === -1) {

View File

@ -824,3 +824,227 @@ describe("Validates Derived Properties", () => {
expect(result).toStrictEqual(expected);
});
});
describe("Validate getSelectedRow function", () => {
it("Multple row selection, with selected rows", () => {
const { getSelectedRow } = derivedProperty;
const input = {
multiRowSelection: true,
selectedRowIndices: [0, 1],
selectedRowIndex: 1,
sanitizedTableData: [
{ id: 1234, name: "Jim Doe", extra: "", __originalIndex__: 0 },
{ id: 234, name: "Jane Doe", extra: "Extra2", __originalIndex__: 2 },
{ id: 123, name: "John Doe", extra: "Extra1", __originalIndex__: 1 },
],
};
expect(getSelectedRow(input, moment, _)).toStrictEqual({
id: 234,
name: "Jane Doe",
extra: "Extra2",
__originalIndex__: 2,
});
});
it("Multple row selection, with no selected rows", () => {
const { getSelectedRow } = derivedProperty;
const input = {
multiRowSelection: true,
selectedRowIndices: [],
selectedRowIndex: 1,
sanitizedTableData: [
{ id: 1234, name: "Jim Doe", extra: "", __originalIndex__: 0 },
{ id: 234, name: "Jane Doe", extra: "Extra2", __originalIndex__: 2 },
{ id: 123, name: "John Doe", extra: "Extra1", __originalIndex__: 1 },
],
};
expect(getSelectedRow(input, moment, _)).toStrictEqual({
id: "",
name: "",
extra: "",
__originalIndex__: "",
});
});
it("Single row selection, with selected row", () => {
const { getSelectedRow } = derivedProperty;
const input = {
multiRowSelection: false,
selectedRowIndices: [],
selectedRowIndex: 1,
sanitizedTableData: [
{ id: 1234, name: "Jim Doe", extra: "", __originalIndex__: 0 },
{ id: 234, name: "Jane Doe", extra: "Extra2", __originalIndex__: 2 },
{ id: 123, name: "John Doe", extra: "Extra1", __originalIndex__: 1 },
],
};
expect(getSelectedRow(input, moment, _)).toStrictEqual({
id: 234,
name: "Jane Doe",
extra: "Extra2",
__originalIndex__: 2,
});
});
it("Single row selection, without selected row", () => {
const { getSelectedRow } = derivedProperty;
const input = {
multiRowSelection: true,
selectedRowIndices: [],
selectedRowIndex: -1,
sanitizedTableData: [
{ id: 1234, name: "Jim Doe", extra: "", __originalIndex__: 0 },
{ id: 234, name: "Jane Doe", extra: "Extra2", __originalIndex__: 2 },
{ id: 123, name: "John Doe", extra: "Extra1", __originalIndex__: 1 },
],
};
expect(getSelectedRow(input, moment, _)).toStrictEqual({
id: "",
name: "",
extra: "",
__originalIndex__: "",
});
});
it("Single row selection, with invalid indices", () => {
const { getSelectedRow } = derivedProperty;
const input = {
multiRowSelection: true,
selectedRowIndices: ["test"],
selectedRowIndex: -1,
sanitizedTableData: [
{ id: 1234, name: "Jim Doe", extra: "", __originalIndex__: 0 },
{ id: 234, name: "Jane Doe", extra: "Extra2", __originalIndex__: 2 },
{ id: 123, name: "John Doe", extra: "Extra1", __originalIndex__: 1 },
],
};
expect(getSelectedRow(input, moment, _)).toStrictEqual({
id: "",
name: "",
extra: "",
__originalIndex__: "",
});
});
it("Single row selection, with indices undefined", () => {
const { getSelectedRow } = derivedProperty;
const input = {
multiRowSelection: true,
selectedRowIndices: undefined,
selectedRowIndex: -1,
sanitizedTableData: [
{ id: 1234, name: "Jim Doe", extra: "", __originalIndex__: 0 },
{ id: 234, name: "Jane Doe", extra: "Extra2", __originalIndex__: 2 },
{ id: 123, name: "John Doe", extra: "Extra1", __originalIndex__: 1 },
],
};
expect(getSelectedRow(input, moment, _)).toStrictEqual({
id: "",
name: "",
extra: "",
__originalIndex__: "",
});
});
it("Single row selection, with invalid indices", () => {
const { getSelectedRow } = derivedProperty;
const input = {
multiRowSelection: true,
selectedRowIndices: [undefined],
selectedRowIndex: -1,
sanitizedTableData: [
{ id: 1234, name: "Jim Doe", extra: "", __originalIndex__: 0 },
{ id: 234, name: "Jane Doe", extra: "Extra2", __originalIndex__: 2 },
{ id: 123, name: "John Doe", extra: "Extra1", __originalIndex__: 1 },
],
};
expect(getSelectedRow(input, moment, _)).toStrictEqual({
id: "",
name: "",
extra: "",
__originalIndex__: "",
});
});
it("Single row selection, with invalid indices", () => {
const { getSelectedRow } = derivedProperty;
const input = {
multiRowSelection: true,
selectedRowIndices: [null],
selectedRowIndex: -1,
sanitizedTableData: [
{ id: 1234, name: "Jim Doe", extra: "", __originalIndex__: 0 },
{ id: 234, name: "Jane Doe", extra: "Extra2", __originalIndex__: 2 },
{ id: 123, name: "John Doe", extra: "Extra1", __originalIndex__: 1 },
],
};
expect(getSelectedRow(input, moment, _)).toStrictEqual({
id: "",
name: "",
extra: "",
__originalIndex__: "",
});
});
it("Single row selection, with invalid indices", () => {
const { getSelectedRow } = derivedProperty;
const input = {
multiRowSelection: true,
selectedRowIndices: ["1", "2"],
selectedRowIndex: -1,
sanitizedTableData: [
{ id: 1234, name: "Jim Doe", extra: "", __originalIndex__: 0 },
{ id: 234, name: "Jane Doe", extra: "Extra2", __originalIndex__: 2 },
{ id: 123, name: "John Doe", extra: "Extra1", __originalIndex__: 1 },
],
};
expect(getSelectedRow(input, moment, _)).toStrictEqual({
id: "",
name: "",
extra: "",
__originalIndex__: "",
});
});
it("Single row selection, with invalid indices", () => {
const { getSelectedRow } = derivedProperty;
const input = {
multiRowSelection: true,
selectedRowIndices: "1",
selectedRowIndex: -1,
sanitizedTableData: [
{ id: 1234, name: "Jim Doe", extra: "", __originalIndex__: 0 },
{ id: 234, name: "Jane Doe", extra: "Extra2", __originalIndex__: 2 },
{ id: 123, name: "John Doe", extra: "Extra1", __originalIndex__: 1 },
],
};
expect(getSelectedRow(input, moment, _)).toStrictEqual({
id: "",
name: "",
extra: "",
__originalIndex__: "",
});
});
it("Single row selection, with invalid indices", () => {
const { getSelectedRow } = derivedProperty;
const input = {
multiRowSelection: true,
selectedRowIndices: "test",
selectedRowIndex: -1,
sanitizedTableData: [
{ id: 1234, name: "Jim Doe", extra: "", __originalIndex__: 0 },
{ id: 234, name: "Jane Doe", extra: "Extra2", __originalIndex__: 2 },
{ id: 123, name: "John Doe", extra: "Extra1", __originalIndex__: 1 },
],
};
expect(getSelectedRow(input, moment, _)).toStrictEqual({
id: "",
name: "",
extra: "",
__originalIndex__: "",
});
});
});