Update actions menu for jobs list.

This commit is contained in:
Patrick Fic
2020-01-06 19:55:58 -08:00
parent b51b2d2b76
commit 62e71dfa5b
4 changed files with 59 additions and 28 deletions

View File

@@ -1,13 +1,44 @@
import React, { useState } from "react"; import React, { useState } from "react";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { Table, Divider, Icon, Input } from "antd"; import { Table, Icon, Input, Dropdown, Menu } from "antd";
import { alphaSort } from "../../utils/sorters"; import { alphaSort } from "../../utils/sorters";
import { useTranslation } from "react-i18next";
export default function JobsPage({ loading, jobs }) { export default function JobsPage({ loading, jobs }) {
const [state, setState] = useState({ const [state, setState] = useState({
sortedInfo: {}, sortedInfo: {},
filteredInfo: { text: "" } filteredInfo: { text: "" }
}); });
const { t } = useTranslation();
const actionMenu = (
<Menu>
<Menu.Item key="images">
<Icon type="file-image" />
{t("jobs.actions.viewJobImages")}
</Menu.Item>
<Menu.Item key="printing">
<Icon type="printer" />
{t("jobs.actions.printCenter")}
</Menu.Item>
<Menu.Item key="notes">
<Icon type="edit" />
{t("jobs.actions.notes")}
</Menu.Item>
<Menu.Item key="postinvoices">
<Icon type="shopping-cart" />
{t("jobs.actions.postInvoices")}
</Menu.Item>
<Menu.Item key="receiveparts">
<Icon type="inbox" />
{t("jobs.actions.receiveParts")}
</Menu.Item>
<Menu.Item key="partstatus">
<Icon type="tool" />
{t("jobs.actions.partStatus")}
</Menu.Item>
</Menu>
);
const columns = [ const columns = [
{ {
@@ -76,12 +107,9 @@ export default function JobsPage({ loading, jobs }) {
title: "Action", title: "Action",
key: "action", key: "action",
render: (text, record) => ( render: (text, record) => (
<span> <Dropdown overlay={actionMenu} trigger={["click"]}>
Action {record.ro_number} <Icon type="ellipsis" />
<Divider type='vertical' /> </Dropdown>
<Divider type='vertical' />
More actions <Icon type='down' />
</span>
) )
} }
]; ];
@@ -97,12 +125,12 @@ export default function JobsPage({ loading, jobs }) {
return ( return (
<div> <div>
<Input name='searchCriteria' onChange={handleChange} /> <Input name="searchCriteria" onChange={handleChange} />
<Table <Table
loading={loading} loading={loading}
pagination={{ position: "bottom" }} pagination={{ position: "bottom" }}
columns={columns.map(item => ({ ...item }))} columns={columns.map(item => ({ ...item }))}
rowKey='id' rowKey="id"
dataSource={jobs} dataSource={jobs}
onChange={handleTableChange} onChange={handleTableChange}
/> />

View File

@@ -33,27 +33,27 @@ export default function WhiteBoardCard({ metadata }) {
<Menu> <Menu>
<Menu.Item key="images"> <Menu.Item key="images">
<Icon type="file-image" /> <Icon type="file-image" />
{t("whiteboard.viewJobImages")} {t("jobs.actions.viewJobImages")}
</Menu.Item> </Menu.Item>
<Menu.Item key="printing"> <Menu.Item key="printing">
<Icon type="printer" /> <Icon type="printer" />
{t("whiteboard.printCenter")} {t("jobs.actions.printCenter")}
</Menu.Item> </Menu.Item>
<Menu.Item key="notes"> <Menu.Item key="notes">
<Icon type="edit" /> <Icon type="edit" />
{t("whiteboard.notes")} {t("jobs.actions.notes")}
</Menu.Item> </Menu.Item>
<Menu.Item key="postinvoices"> <Menu.Item key="postinvoices">
<Icon type="shopping-cart" /> <Icon type="shopping-cart" />
{t("whiteboard.postInvoices")} {t("jobs.actions.postInvoices")}
</Menu.Item> </Menu.Item>
<Menu.Item key="receiveparts"> <Menu.Item key="receiveparts">
<Icon type="inbox" /> <Icon type="inbox" />
{t("whiteboard.receiveParts")} {t("jobs.actions.receiveParts")}
</Menu.Item> </Menu.Item>
<Menu.Item key="partstatus"> <Menu.Item key="partstatus">
<Icon type="tool" /> <Icon type="tool" />
{t("whiteboard.partStatus")} {t("jobs.actions.partStatus")}
</Menu.Item> </Menu.Item>
</Menu> </Menu>
); );

View File

@@ -4,11 +4,11 @@ import { auth } from "../firebase/firebase.utils";
//https://stackoverflow.com/questions/57163454/refreshing-a-token-with-apollo-client-firebase-auth //https://stackoverflow.com/questions/57163454/refreshing-a-token-with-apollo-client-firebase-auth
const errorLink = onError( const errorLink = onError(
({ graphQLErrors, networkError, operation, forward }) => { ({ graphQLErrors, networkError, operation, forward }) => {
console.log("In gql error")
let access_token = window.localStorage.getItem("token"); let access_token = window.localStorage.getItem("token");
if (graphQLErrors) { if (graphQLErrors) {
// User access token has expired // User access token has expired
if (graphQLErrors[0].message.includes("JWTExpired")) { if (graphQLErrors[0].message.includes("JWTExpired")) {
console.log("Got to the error check.");
if (access_token && access_token !== "undefined") { if (access_token && access_token !== "undefined") {
// Let's refresh token through async request // Let's refresh token through async request
return new Observable(observer => { return new Observable(observer => {
@@ -19,7 +19,7 @@ const errorLink = onError(
window.localStorage.removeItem("token"); window.localStorage.removeItem("token");
return console.log("Refresh token has expired"); return console.log("Refresh token has expired");
} }
console.log("Got a new token", idToken);
window.localStorage.setItem("token", idToken); window.localStorage.setItem("token", idToken);
// reset the headers // reset the headers
@@ -31,17 +31,19 @@ const errorLink = onError(
authorization: idToken ? `Bearer ${idToken}` : "" authorization: idToken ? `Bearer ${idToken}` : ""
} }
})); }));
const subscriber = { const subscriber = {
next: observer.next.bind(observer), next: observer.next.bind(observer),
error: observer.error.bind(observer), error: observer.error.bind(observer),
complete: observer.complete.bind(observer) complete: observer.complete.bind(observer)
}; };
console.log("About to resend the request.");
// Retry last failed request // Retry last failed request
forward(operation).subscribe(subscriber); forward(operation).subscribe(subscriber);
}) })
.catch(error => { .catch(error => {
// No refresh or client token available, we force user to login // No refresh or client token available, we force user to login
console.log("Hit an error.");
observer.error(error); observer.error(error);
}); });
}); });

View File

@@ -58,17 +58,18 @@
"validationtitle": "Validation Error", "validationtitle": "Validation Error",
"validation": "Please ensure all fields are entered correctly.", "validation": "Please ensure all fields are entered correctly.",
"saving": "Error encountered while saving record." "saving": "Error encountered while saving record."
},
"actions": {
"viewJobImages": "View Job Images",
"printCenter": "Print Center",
"postInvoices": "Post Invoices",
"notes": "Job Notes",
"partStatus": "Part Status",
"receiveParts": "Receive Parts",
"card": {}
} }
},
"whiteboard": {
"viewJobImages": "View Job Images",
"printCenter": "Print Center",
"postInvoices": "Post Invoices",
"notes": "Job Notes",
"partStatus": "Part Status",
"receiveParts": "Receive Parts",
"card": {}
} }
} }
} }