[PM-14161] Add getById and getByIds rjxs helpers (#11742)
This commit is contained in:
parent
c07bf26898
commit
4a2c14dc2e
|
@ -0,0 +1 @@
|
||||||
|
export * from "./rxjs-operators";
|
|
@ -0,0 +1,58 @@
|
||||||
|
import { firstValueFrom, of } from "rxjs";
|
||||||
|
|
||||||
|
import { getById, getByIds } from "./rxjs-operators";
|
||||||
|
|
||||||
|
describe("custom rxjs operators", () => {
|
||||||
|
describe("getById", () => {
|
||||||
|
it("returns an object with a matching id", async () => {
|
||||||
|
const obs = of([
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
data: "one",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 2,
|
||||||
|
data: "two",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 3,
|
||||||
|
data: "three",
|
||||||
|
},
|
||||||
|
]).pipe(getById(2));
|
||||||
|
|
||||||
|
const result = await firstValueFrom(obs);
|
||||||
|
|
||||||
|
expect(result).toEqual({ id: 2, data: "two" });
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("getByIds", () => {
|
||||||
|
it("returns an array of objects with matching ids", async () => {
|
||||||
|
const obs = of([
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
data: "one",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 2,
|
||||||
|
data: "two",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 3,
|
||||||
|
data: "three",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 4,
|
||||||
|
data: "four",
|
||||||
|
},
|
||||||
|
]).pipe(getByIds([2, 3]));
|
||||||
|
|
||||||
|
const result = await firstValueFrom(obs);
|
||||||
|
|
||||||
|
expect(result).toEqual([
|
||||||
|
{ id: 2, data: "two" },
|
||||||
|
{ id: 3, data: "three" },
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,21 @@
|
||||||
|
import { map } from "rxjs";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An rxjs operator that extracts an object by ID from an array of objects.
|
||||||
|
* @param id The ID of the object to return.
|
||||||
|
* @returns The first object with a matching ID, or undefined if no matching object is present.
|
||||||
|
*/
|
||||||
|
export const getById = <TId, T extends { id: TId }>(id: TId) =>
|
||||||
|
map<T[], T | undefined>((objects) => objects.find((o) => o.id === id));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An rxjs operator that extracts a subset of objects by their IDs from an array of objects.
|
||||||
|
* @param id The IDs of the objects to return.
|
||||||
|
* @returns An array containing objects with matching IDs, or an empty array if there are no matching objects.
|
||||||
|
*/
|
||||||
|
export const getByIds = <TId, T extends { id: TId }>(ids: TId[]) => {
|
||||||
|
const idSet = new Set(ids);
|
||||||
|
return map<T[], T[]>((objects) => {
|
||||||
|
return objects.filter((o) => idSet.has(o.id));
|
||||||
|
});
|
||||||
|
};
|
Loading…
Reference in New Issue