Table sorting preferences will be saved and reused based on the user’s selections
This commit is contained in:
@@ -56,6 +56,7 @@ function setup(requestServices = async () => [], requestExpand = async () => [],
|
||||
const calls = [], notifications = [];
|
||||
const searchableSelect = factory("src/features/opportunities/searchable-select.js", "createSearchableSelect")({ environment: { document } });
|
||||
const app = factory("src/features/manage-time/view.js", "createManageTime")({ MODAL_ID: "host", environment: { document, localStorage }, searchableSelect, dates, requestServices, requestExpand, requestTaskTypes, requestEntries, requestSave, requestDelete,
|
||||
tableSorting: factory("src/features/preferences/table-sorting.js", "createTableSorting")({ environment: { document, localStorage } }),
|
||||
notify: (message, isError = false) => notifications.push({ message, isError }),
|
||||
requestWeek: date => new Promise((resolve, reject) => calls.push({ date, resolve, reject })) });
|
||||
app.setReady(true);
|
||||
@@ -64,6 +65,27 @@ function setup(requestServices = async () => [], requestExpand = async () => [],
|
||||
const find = label => nodes().find(el => el.attributes["aria-label"] === label);
|
||||
return { app, calls, nodes, find, host, notifications };
|
||||
}
|
||||
test("sorting Manage Time preserves notes, hours and deletion IDs and restores on reopening", async () => {
|
||||
const deleted = [], saved = new Map();
|
||||
const storage = { getItem: key => saved.get(key), setItem: (key, value) => saved.set(key, value) };
|
||||
const records = [
|
||||
{ id: 7, srNumber: "SR002", activityCode: "Design", taskType: "PREP", mondayTaskHours: 2, notes: "Second", tag: "SERVICE" },
|
||||
{ id: 8, srNumber: "SR001", activityCode: "Design", taskType: "PREP", mondayTaskHours: 3, notes: "First", tag: "SERVICE" }
|
||||
];
|
||||
const h = setup(undefined, undefined, undefined, async () => records, storage, undefined, async id => deleted.push(id));
|
||||
h.app.open(); h.calls[0].resolve(week()); await flush();
|
||||
h.find("Sort by Service Request").click();
|
||||
const selects = () => h.nodes().filter(node => node.tag === "select" && node.attributes["aria-label"]?.startsWith("Service Request,"));
|
||||
assert.equal(selects()[0].value, "SR001");
|
||||
assert.equal(h.nodes().find(node => node.tag === "textarea" && node.attributes["aria-label"] === "Notes, row 2").value, "First");
|
||||
assert.equal(h.find("Hours 12-OCT-2026, row 2").value, "3");
|
||||
h.app.close(); h.app.open(); h.calls[1].resolve(week()); await flush();
|
||||
assert.equal(selects()[0].value, "SR001");
|
||||
h.find("Delete row 2").click(); h.find("Save").click(); await flush();
|
||||
assert.deepEqual(deleted, ["8"]);
|
||||
assert.equal(selects()[0].value, "SR002");
|
||||
});
|
||||
|
||||
test("persisted deletions wait for Save, stay scoped to their week and allow a deletion-only save", async () => {
|
||||
const deleted = [];
|
||||
const h = setup(undefined, undefined, undefined, async () => [{ id: 7, srNumber: "SR001", activityCode: "Design", taskType: "PREP", mondayTaskHours: 2, tag: "SERVICE" }], undefined, undefined, async id => deleted.push(id));
|
||||
|
||||
Reference in New Issue
Block a user