From 4a46bdb9e8d03e6db2c0a368eea4e62f3586b1ce Mon Sep 17 00:00:00 2001 From: Patrick Fic <> Date: Tue, 28 Dec 2021 09:17:16 -0800 Subject: [PATCH] IO-1578 Add employee sorting to prod board. --- client/cypress/fixtures/users.json | 233 +----------------- .../production-list-columns.add.component.jsx | 1 + .../production-list-columns.data.js | 35 ++- ...ction-list-table-view-select.component.jsx | 1 + .../production-list-table.component.jsx | 1 + client/src/redux/store.js | 4 + 6 files changed, 42 insertions(+), 233 deletions(-) diff --git a/client/cypress/fixtures/users.json b/client/cypress/fixtures/users.json index 79b699aa7..fe51488c7 100644 --- a/client/cypress/fixtures/users.json +++ b/client/cypress/fixtures/users.json @@ -1,232 +1 @@ -[ - { - "id": 1, - "name": "Leanne Graham", - "username": "Bret", - "email": "Sincere@april.biz", - "address": { - "street": "Kulas Light", - "suite": "Apt. 556", - "city": "Gwenborough", - "zipcode": "92998-3874", - "geo": { - "lat": "-37.3159", - "lng": "81.1496" - } - }, - "phone": "1-770-736-8031 x56442", - "website": "hildegard.org", - "company": { - "name": "Romaguera-Crona", - "catchPhrase": "Multi-layered client-server neural-net", - "bs": "harness real-time e-markets" - } - }, - { - "id": 2, - "name": "Ervin Howell", - "username": "Antonette", - "email": "Shanna@melissa.tv", - "address": { - "street": "Victor Plains", - "suite": "Suite 879", - "city": "Wisokyburgh", - "zipcode": "90566-7771", - "geo": { - "lat": "-43.9509", - "lng": "-34.4618" - } - }, - "phone": "010-692-6593 x09125", - "website": "anastasia.net", - "company": { - "name": "Deckow-Crist", - "catchPhrase": "Proactive didactic contingency", - "bs": "synergize scalable supply-chains" - } - }, - { - "id": 3, - "name": "Clementine Bauch", - "username": "Samantha", - "email": "Nathan@yesenia.net", - "address": { - "street": "Douglas Extension", - "suite": "Suite 847", - "city": "McKenziehaven", - "zipcode": "59590-4157", - "geo": { - "lat": "-68.6102", - "lng": "-47.0653" - } - }, - "phone": "1-463-123-4447", - "website": "ramiro.info", - "company": { - "name": "Romaguera-Jacobson", - "catchPhrase": "Face to face bifurcated interface", - "bs": "e-enable strategic applications" - } - }, - { - "id": 4, - "name": "Patricia Lebsack", - "username": "Karianne", - "email": "Julianne.OConner@kory.org", - "address": { - "street": "Hoeger Mall", - "suite": "Apt. 692", - "city": "South Elvis", - "zipcode": "53919-4257", - "geo": { - "lat": "29.4572", - "lng": "-164.2990" - } - }, - "phone": "493-170-9623 x156", - "website": "kale.biz", - "company": { - "name": "Robel-Corkery", - "catchPhrase": "Multi-tiered zero tolerance productivity", - "bs": "transition cutting-edge web services" - } - }, - { - "id": 5, - "name": "Chelsey Dietrich", - "username": "Kamren", - "email": "Lucio_Hettinger@annie.ca", - "address": { - "street": "Skiles Walks", - "suite": "Suite 351", - "city": "Roscoeview", - "zipcode": "33263", - "geo": { - "lat": "-31.8129", - "lng": "62.5342" - } - }, - "phone": "(254)954-1289", - "website": "demarco.info", - "company": { - "name": "Keebler LLC", - "catchPhrase": "User-centric fault-tolerant solution", - "bs": "revolutionize end-to-end systems" - } - }, - { - "id": 6, - "name": "Mrs. Dennis Schulist", - "username": "Leopoldo_Corkery", - "email": "Karley_Dach@jasper.info", - "address": { - "street": "Norberto Crossing", - "suite": "Apt. 950", - "city": "South Christy", - "zipcode": "23505-1337", - "geo": { - "lat": "-71.4197", - "lng": "71.7478" - } - }, - "phone": "1-477-935-8478 x6430", - "website": "ola.org", - "company": { - "name": "Considine-Lockman", - "catchPhrase": "Synchronised bottom-line interface", - "bs": "e-enable innovative applications" - } - }, - { - "id": 7, - "name": "Kurtis Weissnat", - "username": "Elwyn.Skiles", - "email": "Telly.Hoeger@billy.biz", - "address": { - "street": "Rex Trail", - "suite": "Suite 280", - "city": "Howemouth", - "zipcode": "58804-1099", - "geo": { - "lat": "24.8918", - "lng": "21.8984" - } - }, - "phone": "210.067.6132", - "website": "elvis.io", - "company": { - "name": "Johns Group", - "catchPhrase": "Configurable multimedia task-force", - "bs": "generate enterprise e-tailers" - } - }, - { - "id": 8, - "name": "Nicholas Runolfsdottir V", - "username": "Maxime_Nienow", - "email": "Sherwood@rosamond.me", - "address": { - "street": "Ellsworth Summit", - "suite": "Suite 729", - "city": "Aliyaview", - "zipcode": "45169", - "geo": { - "lat": "-14.3990", - "lng": "-120.7677" - } - }, - "phone": "586.493.6943 x140", - "website": "jacynthe.com", - "company": { - "name": "Abernathy Group", - "catchPhrase": "Implemented secondary concept", - "bs": "e-enable extensible e-tailers" - } - }, - { - "id": 9, - "name": "Glenna Reichert", - "username": "Delphine", - "email": "Chaim_McDermott@dana.io", - "address": { - "street": "Dayna Park", - "suite": "Suite 449", - "city": "Bartholomebury", - "zipcode": "76495-3109", - "geo": { - "lat": "24.6463", - "lng": "-168.8889" - } - }, - "phone": "(775)976-6794 x41206", - "website": "conrad.com", - "company": { - "name": "Yost and Sons", - "catchPhrase": "Switchable contextually-based project", - "bs": "aggregate real-time technologies" - } - }, - { - "id": 10, - "name": "Clementina DuBuque", - "username": "Moriah.Stanton", - "email": "Rey.Padberg@karina.biz", - "address": { - "street": "Kattie Turnpike", - "suite": "Suite 198", - "city": "Lebsackbury", - "zipcode": "31428-2261", - "geo": { - "lat": "-38.2386", - "lng": "57.2232" - } - }, - "phone": "024-648-3804", - "website": "ambrose.net", - "company": { - "name": "Hoeger LLC", - "catchPhrase": "Centralized empowering task-force", - "bs": "target end-to-end models" - } - } -] \ No newline at end of file +[] diff --git a/client/src/components/production-list-columns/production-list-columns.add.component.jsx b/client/src/components/production-list-columns/production-list-columns.add.component.jsx index 8b671c54c..fb3575f5d 100644 --- a/client/src/components/production-list-columns/production-list-columns.add.component.jsx +++ b/client/src/components/production-list-columns/production-list-columns.add.component.jsx @@ -33,6 +33,7 @@ export function ProductionColumnsComponent({ setColumns([ ...columns, ...dataSource({ + bodyshop, technician, state: tableState, activeStatuses: bodyshop.md_ro_statuses.active_statuses, diff --git a/client/src/components/production-list-columns/production-list-columns.data.js b/client/src/components/production-list-columns/production-list-columns.data.js index 593c1b1ee..0072c0ca5 100644 --- a/client/src/components/production-list-columns/production-list-columns.data.js +++ b/client/src/components/production-list-columns/production-list-columns.data.js @@ -18,7 +18,7 @@ import ProductionListColumnNote from "./production-list-columns.productionnote.c import ProductionListColumnStatus from "./production-list-columns.status.component"; import ProductionlistColumnTouchTime from "./prodution-list-columns.touchtime.component"; -const r = ({ technician, state, activeStatuses }) => { +const r = ({ technician, state, activeStatuses, bodyshop }) => { return [ { title: i18n.t("jobs.actions.viewdetail"), @@ -353,6 +353,14 @@ const r = ({ technician, state, activeStatuses }) => { title: i18n.t("jobs.fields.employee_body"), dataIndex: "employee_body", key: "employee_body", + sortOrder: + state.sortedInfo.columnKey === "employee_body" && + state.sortedInfo.order, + sorter: (a, b) => + alphaSort( + bodyshop.employees.find((e) => e.id === a.employee_body)?.first_name, + bodyshop.employees.find((e) => e.id === b.employee_body)?.first_name + ), render: (text, record) => ( { title: i18n.t("jobs.fields.employee_prep"), dataIndex: "employee_prep", key: "employee_prep", + sortOrder: + state.sortedInfo.columnKey === "employee_prep" && + state.sortedInfo.order, + sorter: (a, b) => + alphaSort( + bodyshop.employees.find((e) => e.id === a.employee_prep)?.first_name, + bodyshop.employees.find((e) => e.id === b.employee_prep)?.first_name + ), render: (text, record) => ( { title: i18n.t("jobs.fields.employee_csr"), dataIndex: "employee_csr", key: "employee_csr", + sortOrder: + state.sortedInfo.columnKey === "employee_csr" && state.sortedInfo.order, + sorter: (a, b) => + alphaSort( + bodyshop.employees.find((e) => e.id === a.employee_csr)?.first_name, + bodyshop.employees.find((e) => e.id === b.employee_csr)?.first_name + ), render: (text, record) => ( ), @@ -383,6 +406,16 @@ const r = ({ technician, state, activeStatuses }) => { title: i18n.t("jobs.fields.employee_refinish"), dataIndex: "employee_refinish", key: "employee_refinish", + sortOrder: + state.sortedInfo.columnKey === "employee_refinish" && + state.sortedInfo.order, + sorter: (a, b) => + alphaSort( + bodyshop.employees.find((e) => e.id === a.employee_refinish) + ?.first_name, + bodyshop.employees.find((e) => e.id === b.employee_refinish) + ?.first_name + ), render: (text, record) => ( { return { ...ProductionListColumns({ + bodyshop, technician, state, activeStatuses: bodyshop.md_ro_statuses.active_statuses, diff --git a/client/src/components/production-list-table/production-list-table.component.jsx b/client/src/components/production-list-table/production-list-table.component.jsx index fe84a9f3a..dd2c5fc32 100644 --- a/client/src/components/production-list-table/production-list-table.component.jsx +++ b/client/src/components/production-list-table/production-list-table.component.jsx @@ -76,6 +76,7 @@ export function ProductionListTable({ matchingColumnConfig.columns.columnKeys.map((k) => { return { ...ProductionListColumns({ + bodyshop, technician, state, activeStatuses: bodyshop.md_ro_statuses.active_statuses, diff --git a/client/src/redux/store.js b/client/src/redux/store.js index e5aa4d5ed..852a371c2 100644 --- a/client/src/redux/store.js +++ b/client/src/redux/store.js @@ -48,3 +48,7 @@ initMessageListener(store); export const persistor = persistStore(store); const e = { store, persistStore }; export default e; + +if (window.Cypress) { + window.store = store; +}