Update actions menu for jobs list.
This commit is contained in:
@@ -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}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -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>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -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);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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": {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user