feat: Set selectedRow for multiple row selection in table widget (#7935)
This commit is contained in:
parent
b27e3567c6
commit
8c4e7d331e
|
|
@ -1,11 +1,27 @@
|
||||||
/* eslint-disable @typescript-eslint/no-unused-vars*/
|
/* eslint-disable @typescript-eslint/no-unused-vars*/
|
||||||
export default {
|
export default {
|
||||||
getSelectedRow: (props, moment, _) => {
|
getSelectedRow: (props, moment, _) => {
|
||||||
const 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 ||
|
props.selectedRowIndex === undefined ||
|
||||||
Number.isNaN(parseInt(props.selectedRowIndex))
|
Number.isNaN(parseInt(props.selectedRowIndex))
|
||||||
? -1
|
? -1
|
||||||
: parseInt(props.selectedRowIndex);
|
: parseInt(props.selectedRowIndex);
|
||||||
|
}
|
||||||
const filteredTableData =
|
const filteredTableData =
|
||||||
props.filteredTableData || props.sanitizedTableData || [];
|
props.filteredTableData || props.sanitizedTableData || [];
|
||||||
if (selectedRowIndex === -1) {
|
if (selectedRowIndex === -1) {
|
||||||
|
|
|
||||||
|
|
@ -824,3 +824,227 @@ describe("Validates Derived Properties", () => {
|
||||||
expect(result).toStrictEqual(expected);
|
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__: "",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user