Renamed some owner fields to follow CIECA standard. Work on Owner Select modal.
This commit is contained in:
@@ -2635,6 +2635,27 @@
|
|||||||
</translation>
|
</translation>
|
||||||
</translations>
|
</translations>
|
||||||
</concept_node>
|
</concept_node>
|
||||||
|
<concept_node>
|
||||||
|
<name>created</name>
|
||||||
|
<definition_loaded>false</definition_loaded>
|
||||||
|
<description></description>
|
||||||
|
<comment></comment>
|
||||||
|
<default_text></default_text>
|
||||||
|
<translations>
|
||||||
|
<translation>
|
||||||
|
<language>en-US</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>es-MX</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
<translation>
|
||||||
|
<language>fr-CA</language>
|
||||||
|
<approved>false</approved>
|
||||||
|
</translation>
|
||||||
|
</translations>
|
||||||
|
</concept_node>
|
||||||
<concept_node>
|
<concept_node>
|
||||||
<name>deleted</name>
|
<name>deleted</name>
|
||||||
<definition_loaded>false</definition_loaded>
|
<definition_loaded>false</definition_loaded>
|
||||||
|
|||||||
@@ -54,6 +54,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@apollo/react-testing": "^3.1.3",
|
||||||
"enzyme": "^3.11.0",
|
"enzyme": "^3.11.0",
|
||||||
"enzyme-adapter-react-16": "^1.15.2"
|
"enzyme-adapter-react-16": "^1.15.2"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -126,6 +126,8 @@ class AppContainer extends Component {
|
|||||||
//Init local state.
|
//Init local state.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
componentWillUnmount() {}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { client, loaded } = this.state;
|
const { client, loaded } = this.state;
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,18 @@
|
|||||||
import React from 'react';
|
import React from "react";
|
||||||
import ReactDOM from 'react-dom';
|
import ReactDOM from "react-dom";
|
||||||
import App from './App';
|
import App from "./App.container";
|
||||||
|
import { MockedProvider } from "@apollo/react-testing";
|
||||||
|
const div = document.createElement("div");
|
||||||
|
|
||||||
it('renders without crashing', () => {
|
it("renders without crashing", () => {
|
||||||
const div = document.createElement('div');
|
ReactDOM.render(
|
||||||
ReactDOM.render(<App />, div);
|
<MockedProvider>
|
||||||
|
<App />
|
||||||
|
</MockedProvider>,
|
||||||
|
div
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("unmounts without crashing", () => {
|
||||||
ReactDOM.unmountComponentAtNode(div);
|
ReactDOM.unmountComponentAtNode(div);
|
||||||
});
|
});
|
||||||
|
|||||||
11
client/src/components/alert/alert.component.test.js
Normal file
11
client/src/components/alert/alert.component.test.js
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import React from "react";
|
||||||
|
import ReactDOM from "react-dom";
|
||||||
|
import Alert from "./alert.component";
|
||||||
|
import { MockedProvider } from "@apollo/react-testing";
|
||||||
|
import { shallow } from "enzyme";
|
||||||
|
|
||||||
|
const div = document.createElement("div");
|
||||||
|
|
||||||
|
it("renders without crashing", () => {
|
||||||
|
shallow(<Alert type="error" />);
|
||||||
|
});
|
||||||
@@ -1,22 +1,29 @@
|
|||||||
import { Input, Table, Button, Icon, notification } from "antd";
|
import { Input, Table, Button, Icon, notification, Modal } from "antd";
|
||||||
import React, { useState } from "react";
|
import React, { useState } from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { alphaSort } from "../../utils/sorters";
|
import { alphaSort } from "../../utils/sorters";
|
||||||
import { DateTimeFormatter } from "../../utils/DateFormatter";
|
import { DateTimeFormatter } from "../../utils/DateFormatter";
|
||||||
|
import OwnerFindModalContainer from "../owner-find-modal/owner-find-modal.container";
|
||||||
export default function JobsAvailableComponent({
|
export default function JobsAvailableComponent({
|
||||||
loading,
|
loading,
|
||||||
data,
|
data,
|
||||||
refetch,
|
refetch,
|
||||||
deleteJob,
|
deleteJob,
|
||||||
deleteAllNewJobs
|
deleteAllNewJobs,
|
||||||
|
insertNewJob,
|
||||||
|
setJobId,
|
||||||
|
estDataLazyLoad
|
||||||
}) {
|
}) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
const [loadEstData, estData] = estDataLazyLoad;
|
||||||
|
|
||||||
const [state, setState] = useState({
|
const [state, setState] = useState({
|
||||||
sortedInfo: {},
|
sortedInfo: {},
|
||||||
filteredInfo: { text: "" }
|
filteredInfo: { text: "" }
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const [modalVisible, setModalVisible] = useState(false);
|
||||||
|
|
||||||
const handleTableChange = (pagination, filters, sorter) => {
|
const handleTableChange = (pagination, filters, sorter) => {
|
||||||
setState({ ...state, filteredInfo: filters, sortedInfo: sorter });
|
setState({ ...state, filteredInfo: filters, sortedInfo: sorter });
|
||||||
};
|
};
|
||||||
@@ -114,7 +121,10 @@ export default function JobsAvailableComponent({
|
|||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
alert("Add");
|
console.log("record.id", record.id);
|
||||||
|
|
||||||
|
loadEstData({ variables: { id: record.id } });
|
||||||
|
setModalVisible(true);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Icon type="plus" />
|
<Icon type="plus" />
|
||||||
@@ -126,55 +136,88 @@ export default function JobsAvailableComponent({
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
console.log("estData", estData);
|
||||||
|
|
||||||
|
const owner =
|
||||||
|
estData.data &&
|
||||||
|
estData.data.available_jobs_by_pk &&
|
||||||
|
estData.data.available_jobs_by_pk.est_data &&
|
||||||
|
estData.data.available_jobs_by_pk.est_data.owner &&
|
||||||
|
estData.data.available_jobs_by_pk.est_data.owner.data
|
||||||
|
? estData.data.available_jobs_by_pk.est_data.owner.data
|
||||||
|
: null;
|
||||||
return (
|
return (
|
||||||
<Table
|
<div>
|
||||||
loading={loading}
|
<OwnerFindModalContainer
|
||||||
title={() => {
|
loading={estData.loading}
|
||||||
return (
|
error={estData.error}
|
||||||
<div>
|
owner={owner}
|
||||||
<Input.Search
|
visible={modalVisible}
|
||||||
placeholder="Search..."
|
onOk={() => {
|
||||||
onSearch={value => {
|
setModalVisible(false);
|
||||||
console.log(value);
|
// insertNewJob({
|
||||||
}}
|
// variables: {
|
||||||
enterButton
|
// job: record.est_data
|
||||||
/>
|
// }
|
||||||
<Button
|
// }).then(r => {
|
||||||
onClick={() => {
|
// notification["success"]({
|
||||||
refetch();
|
// message: t("jobs.successes.created")
|
||||||
}}
|
// });
|
||||||
>
|
// refetch();
|
||||||
<Icon type="sync" />
|
// });
|
||||||
</Button>
|
}}
|
||||||
<Button
|
onCancel={() => setModalVisible(false)}
|
||||||
onClick={() => {
|
/>
|
||||||
deleteAllNewJobs()
|
|
||||||
.then(r => {
|
<Table
|
||||||
notification["success"]({
|
loading={loading}
|
||||||
message: t("jobs.successes.all_deleted", {
|
title={() => {
|
||||||
count: r.data.delete_available_jobs.affected_rows
|
return (
|
||||||
})
|
<div>
|
||||||
|
<Input.Search
|
||||||
|
placeholder="Search..."
|
||||||
|
onSearch={value => {
|
||||||
|
console.log(value);
|
||||||
|
}}
|
||||||
|
enterButton
|
||||||
|
/>
|
||||||
|
<Button
|
||||||
|
onClick={() => {
|
||||||
|
refetch();
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Icon type="sync" />
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
onClick={() => {
|
||||||
|
deleteAllNewJobs()
|
||||||
|
.then(r => {
|
||||||
|
notification["success"]({
|
||||||
|
message: t("jobs.successes.all_deleted", {
|
||||||
|
count: r.data.delete_available_jobs.affected_rows
|
||||||
|
})
|
||||||
|
});
|
||||||
|
refetch();
|
||||||
|
})
|
||||||
|
.catch(r => {
|
||||||
|
notification["error"]({
|
||||||
|
message: t("jobs.errors.deleted") + " " + r.message
|
||||||
|
});
|
||||||
});
|
});
|
||||||
refetch();
|
}}
|
||||||
})
|
>
|
||||||
.catch(r => {
|
Delete All
|
||||||
notification["error"]({
|
</Button>
|
||||||
message: t("jobs.errors.deleted") + " " + r.message
|
</div>
|
||||||
});
|
);
|
||||||
});
|
}}
|
||||||
}}
|
size="small"
|
||||||
>
|
pagination={{ position: "top" }}
|
||||||
Delete All
|
columns={columns.map(item => ({ ...item }))}
|
||||||
</Button>
|
rowKey="id"
|
||||||
</div>
|
dataSource={data && data.available_jobs}
|
||||||
);
|
onChange={handleTableChange}
|
||||||
}}
|
/>
|
||||||
size="small"
|
</div>
|
||||||
pagination={{ position: "top" }}
|
|
||||||
columns={columns.map(item => ({ ...item }))}
|
|
||||||
rowKey="id"
|
|
||||||
dataSource={data && data.available_jobs}
|
|
||||||
onChange={handleTableChange}
|
|
||||||
/>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +1,20 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { useQuery, useMutation } from "react-apollo";
|
import { useMutation, useQuery } from "react-apollo";
|
||||||
import {
|
import {
|
||||||
QUERY_AVAILABLE_NEW_JOBS,
|
DELETE_ALL_AVAILABLE_NEW_JOBS,
|
||||||
DELETE_AVAILABLE_JOB,
|
QUERY_AVAILABLE_NEW_JOBS
|
||||||
DELETE_ALL_AVAILABLE_NEW_JOBS
|
|
||||||
} from "../../graphql/available-jobs.queries";
|
} from "../../graphql/available-jobs.queries";
|
||||||
|
import { INSERT_NEW_JOB } from "../../graphql/jobs.queries";
|
||||||
import AlertComponent from "../alert/alert.component";
|
import AlertComponent from "../alert/alert.component";
|
||||||
import JobsAvailableComponent from "./jobs-available-new.component";
|
import JobsAvailableComponent from "./jobs-available-new.component";
|
||||||
|
|
||||||
export default function JobsAvailableContainer() {
|
export default function JobsAvailableContainer({ deleteJob, estDataLazyLoad }) {
|
||||||
const { loading, error, data, refetch } = useQuery(QUERY_AVAILABLE_NEW_JOBS, {
|
const { loading, error, data, refetch } = useQuery(QUERY_AVAILABLE_NEW_JOBS, {
|
||||||
fetchPolicy: "network-only"
|
fetchPolicy: "network-only"
|
||||||
});
|
});
|
||||||
const [deleteJob] = useMutation(DELETE_AVAILABLE_JOB);
|
|
||||||
const [deleteAllNewJobs] = useMutation(DELETE_ALL_AVAILABLE_NEW_JOBS);
|
const [deleteAllNewJobs] = useMutation(DELETE_ALL_AVAILABLE_NEW_JOBS);
|
||||||
|
const [insertNewJob] = useMutation(INSERT_NEW_JOB);
|
||||||
|
|
||||||
if (error) return <AlertComponent type="error" message={error.message} />;
|
if (error) return <AlertComponent type="error" message={error.message} />;
|
||||||
return (
|
return (
|
||||||
@@ -23,6 +24,8 @@ export default function JobsAvailableContainer() {
|
|||||||
refetch={refetch}
|
refetch={refetch}
|
||||||
deleteJob={deleteJob}
|
deleteJob={deleteJob}
|
||||||
deleteAllNewJobs={deleteAllNewJobs}
|
deleteAllNewJobs={deleteAllNewJobs}
|
||||||
|
insertNewJob={insertNewJob}
|
||||||
|
estDataLazyLoad={estDataLazyLoad}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ export default function JobsAvailableSupplementComponent({
|
|||||||
data,
|
data,
|
||||||
refetch,
|
refetch,
|
||||||
deleteJob,
|
deleteJob,
|
||||||
deleteAllNewJobs
|
deleteAllNewJobs,
|
||||||
|
estDataLazyLoad
|
||||||
}) {
|
}) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
|||||||
@@ -1,21 +1,19 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { useQuery, useMutation } from "react-apollo";
|
import { useMutation, useQuery } from "react-apollo";
|
||||||
import {
|
import { DELETE_ALL_AVAILABLE_SUPPLEMENT_JOBS, QUERY_AVAILABLE_SUPPLEMENT_JOBS } from "../../graphql/available-jobs.queries";
|
||||||
QUERY_AVAILABLE_SUPPLEMENT_JOBS,
|
|
||||||
DELETE_AVAILABLE_JOB,
|
|
||||||
DELETE_ALL_AVAILABLE_SUPPLEMENT_JOBS
|
|
||||||
} from "../../graphql/available-jobs.queries";
|
|
||||||
import AlertComponent from "../alert/alert.component";
|
import AlertComponent from "../alert/alert.component";
|
||||||
import JobsAvailableSupplementComponent from "./jobs-available-supplement.component";
|
import JobsAvailableSupplementComponent from "./jobs-available-supplement.component";
|
||||||
|
|
||||||
export default function JobsAvailableSupplementContainer() {
|
export default function JobsAvailableSupplementContainer({
|
||||||
|
deleteJob,
|
||||||
|
estDataLazyLoad
|
||||||
|
}) {
|
||||||
const { loading, error, data, refetch } = useQuery(
|
const { loading, error, data, refetch } = useQuery(
|
||||||
QUERY_AVAILABLE_SUPPLEMENT_JOBS,
|
QUERY_AVAILABLE_SUPPLEMENT_JOBS,
|
||||||
{
|
{
|
||||||
fetchPolicy: "network-only"
|
fetchPolicy: "network-only"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
const [deleteJob] = useMutation(DELETE_AVAILABLE_JOB);
|
|
||||||
const [deleteAllNewJobs] = useMutation(DELETE_ALL_AVAILABLE_SUPPLEMENT_JOBS);
|
const [deleteAllNewJobs] = useMutation(DELETE_ALL_AVAILABLE_SUPPLEMENT_JOBS);
|
||||||
|
|
||||||
if (error) return <AlertComponent type="error" message={error.message} />;
|
if (error) return <AlertComponent type="error" message={error.message} />;
|
||||||
@@ -26,6 +24,7 @@ export default function JobsAvailableSupplementContainer() {
|
|||||||
refetch={refetch}
|
refetch={refetch}
|
||||||
deleteJob={deleteJob}
|
deleteJob={deleteJob}
|
||||||
deleteAllNewJobs={deleteAllNewJobs}
|
deleteAllNewJobs={deleteAllNewJobs}
|
||||||
|
estDataLazyLoad={estDataLazyLoad}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
import React from "react";
|
||||||
|
export default function OwnerFindModalComponent() {
|
||||||
|
return <div>Modal Componnentasdasd</div>;
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
import React from "react";
|
||||||
|
import { Modal } from "antd";
|
||||||
|
import OwnerFindModalComponent from "./owner-find-modal.component";
|
||||||
|
import LoadingSpinner from "../loading-spinner/loading-spinner.component";
|
||||||
|
import AlertComponent from "../alert/alert.component";
|
||||||
|
import { json } from "body-parser";
|
||||||
|
|
||||||
|
export default function OwnerFindModalContainer({
|
||||||
|
loading,
|
||||||
|
error,
|
||||||
|
owner,
|
||||||
|
...modalProps
|
||||||
|
}) {
|
||||||
|
//use owner object to run query and find what possible owners there are.
|
||||||
|
return (
|
||||||
|
<Modal {...modalProps}>
|
||||||
|
{loading ? <LoadingSpinner /> : null}
|
||||||
|
{error ? <AlertComponent message={error.message} type="error" /> : null}
|
||||||
|
{owner ? <OwnerFindModalComponent /> : null}
|
||||||
|
{owner ? JSON.stringify(owner) : null}
|
||||||
|
</Modal>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -4,7 +4,6 @@ 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 }) => {
|
||||||
let access_token = window.localStorage.getItem("token");
|
|
||||||
// console.log("graphQLErrors", graphQLErrors);
|
// console.log("graphQLErrors", graphQLErrors);
|
||||||
// console.log("networkError", networkError);
|
// console.log("networkError", networkError);
|
||||||
// console.log("operation", operation);
|
// console.log("operation", operation);
|
||||||
@@ -26,59 +25,59 @@ const errorLink = onError(
|
|||||||
//User access token has expired
|
//User access token has expired
|
||||||
//props.history.push("/network-error");
|
//props.history.push("/network-error");
|
||||||
console.log("We need a new token!");
|
console.log("We need a new token!");
|
||||||
if (access_token && access_token !== "undefined") {
|
// Let's refresh token through async request
|
||||||
// Let's refresh token through async request
|
|
||||||
|
|
||||||
auth.currentUser.getIdToken(true).then(token => {
|
auth.currentUser.getIdToken(true).then(token => {
|
||||||
if (token) {
|
if (token) {
|
||||||
window.localStorage.setItem("token", token);
|
console.log("Got the new token.", token);
|
||||||
operation.setContext(({ headers = {} }) => ({
|
window.localStorage.setItem("token", token);
|
||||||
headers: {
|
operation.setContext(({ headers = {} }) => ({
|
||||||
...headers,
|
headers: {
|
||||||
authorization: token ? `Bearer ${token}` : ""
|
...headers,
|
||||||
}
|
authorization: token ? `Bearer ${token}` : ""
|
||||||
}));
|
}
|
||||||
return forward(operation);
|
}));
|
||||||
}
|
console.log("Forwarding operation", operation);
|
||||||
});
|
return forward(operation);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// return new Observable(observer => {
|
// return new Observable(observer => {
|
||||||
// auth.currentUser
|
// auth.currentUser
|
||||||
// .getIdToken(true)
|
// .getIdToken(true)
|
||||||
// .then(function(idToken) {
|
// .then(function(idToken) {
|
||||||
// if (!idToken) {
|
// if (!idToken) {
|
||||||
// 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);
|
// console.log("Got a new token", idToken);
|
||||||
// window.localStorage.setItem("token", idToken);
|
// window.localStorage.setItem("token", idToken);
|
||||||
|
|
||||||
// // reset the headers
|
// // reset the headers
|
||||||
// operation.setContext(({ headers = {} }) => ({
|
// operation.setContext(({ headers = {} }) => ({
|
||||||
// headers: {
|
// headers: {
|
||||||
// // Re-add old headers
|
// // Re-add old headers
|
||||||
// ...headers,
|
// ...headers,
|
||||||
// // Switch out old access token for new one
|
// // Switch out old access token for new one
|
||||||
// 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.");
|
// 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.");
|
// console.log("Hit an error.");
|
||||||
// observer.error(error);
|
// observer.error(error);
|
||||||
// });
|
// });
|
||||||
// });
|
// });
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -70,3 +70,12 @@ export const DELETE_ALL_AVAILABLE_SUPPLEMENT_JOBS = gql`
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
export const QUERY_AVAILABLE_NEW_JOBS_EST_DATA_BY_PK = gql`
|
||||||
|
query QUERY_AVAILABLE_NEW_JOBS_EST_DATA_BY_PK($id: uuid!) {
|
||||||
|
available_jobs_by_pk(id: $id) {
|
||||||
|
id
|
||||||
|
est_data
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|||||||
@@ -250,3 +250,13 @@ export const CONVERT_JOB_TO_RO = gql`
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
export const INSERT_NEW_JOB = gql`
|
||||||
|
mutation INSERT_JOB($job: [jobs_insert_input!]!) {
|
||||||
|
insert_jobs(objects: $job) {
|
||||||
|
returning {
|
||||||
|
id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|||||||
@@ -2,12 +2,22 @@ import React from "react";
|
|||||||
import JobsAvailableContainer from "../../components/jobs-available-new/jobs-available-new.container";
|
import JobsAvailableContainer from "../../components/jobs-available-new/jobs-available-new.container";
|
||||||
import JobsAvailableSupplementContainer from "../../components/jobs-available-supplement/jobs-available-supplement.container";
|
import JobsAvailableSupplementContainer from "../../components/jobs-available-supplement/jobs-available-supplement.container";
|
||||||
|
|
||||||
export default function JobsAvailablePageComponent() {
|
export default function JobsAvailablePageComponent({
|
||||||
|
deleteJob,
|
||||||
|
estDataLazyLoad
|
||||||
|
}) {
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<JobsAvailableContainer />
|
Available New Jobs
|
||||||
|
<JobsAvailableContainer
|
||||||
<JobsAvailableSupplementContainer />
|
deleteJob={deleteJob}
|
||||||
|
estDataLazyLoad={estDataLazyLoad}
|
||||||
|
/>
|
||||||
|
Available Supplements
|
||||||
|
<JobsAvailableSupplementContainer
|
||||||
|
deleteJob={deleteJob}
|
||||||
|
estDataLazyLoad={estDataLazyLoad}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,26 @@
|
|||||||
import React from 'react'
|
import React from "react";
|
||||||
import JobsAvailablePageComponent from './jobs-available.page.component'
|
import { useMutation, useLazyQuery } from "react-apollo";
|
||||||
|
import {
|
||||||
|
DELETE_AVAILABLE_JOB,
|
||||||
|
QUERY_AVAILABLE_NEW_JOBS_EST_DATA_BY_PK
|
||||||
|
} from "../../graphql/available-jobs.queries";
|
||||||
|
import JobsAvailablePageComponent from "./jobs-available.page.component";
|
||||||
|
|
||||||
export default function JobsAvailablePageContainer() {
|
export default function JobsAvailablePageContainer() {
|
||||||
return (
|
const [deleteJob] = useMutation(DELETE_AVAILABLE_JOB);
|
||||||
<div>
|
|
||||||
<JobsAvailablePageComponent />
|
const estDataLazyLoad = useLazyQuery(
|
||||||
</div>
|
QUERY_AVAILABLE_NEW_JOBS_EST_DATA_BY_PK,
|
||||||
)
|
{
|
||||||
|
fetchPolicy: "network-only"
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<JobsAvailablePageComponent
|
||||||
|
deleteJob={deleteJob}
|
||||||
|
estDataLazyLoad={estDataLazyLoad}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import { configure } from 'enzyme';
|
import { configure } from 'enzyme';
|
||||||
import Adapter from 'enzyme-adapter-react-16';
|
import Adapter from 'enzyme-adapter-react-16';
|
||||||
|
configure({ adapter: new Adapter() });
|
||||||
configure({ adapter: new Adapter() });
|
|
||||||
@@ -151,6 +151,7 @@
|
|||||||
"successes": {
|
"successes": {
|
||||||
"all_deleted": "{{count}} jobs deleted successfully.",
|
"all_deleted": "{{count}} jobs deleted successfully.",
|
||||||
"converted": "Job converted successfully.",
|
"converted": "Job converted successfully.",
|
||||||
|
"created": "Job created successfully.",
|
||||||
"deleted": "Job deleted successfully.",
|
"deleted": "Job deleted successfully.",
|
||||||
"save": "Record Saved",
|
"save": "Record Saved",
|
||||||
"savetitle": "Record saved successfully."
|
"savetitle": "Record saved successfully."
|
||||||
|
|||||||
@@ -151,6 +151,7 @@
|
|||||||
"successes": {
|
"successes": {
|
||||||
"all_deleted": "{{count}} trabajos eliminados con éxito.",
|
"all_deleted": "{{count}} trabajos eliminados con éxito.",
|
||||||
"converted": "Trabajo convertido con éxito.",
|
"converted": "Trabajo convertido con éxito.",
|
||||||
|
"created": "Trabajo creado con éxito.",
|
||||||
"deleted": "Trabajo eliminado con éxito.",
|
"deleted": "Trabajo eliminado con éxito.",
|
||||||
"save": "Registro guardado",
|
"save": "Registro guardado",
|
||||||
"savetitle": "Registro guardado con éxito."
|
"savetitle": "Registro guardado con éxito."
|
||||||
|
|||||||
@@ -151,6 +151,7 @@
|
|||||||
"successes": {
|
"successes": {
|
||||||
"all_deleted": "{{count}} travaux supprimés avec succès.",
|
"all_deleted": "{{count}} travaux supprimés avec succès.",
|
||||||
"converted": "Travail converti avec succès.",
|
"converted": "Travail converti avec succès.",
|
||||||
|
"created": "Le travail a été créé avec succès.",
|
||||||
"deleted": "Le travail a bien été supprimé.",
|
"deleted": "Le travail a bien été supprimé.",
|
||||||
"save": "Enregistrement enregistré",
|
"save": "Enregistrement enregistré",
|
||||||
"savetitle": "Enregistrement enregistré avec succès."
|
"savetitle": "Enregistrement enregistré avec succès."
|
||||||
|
|||||||
@@ -79,6 +79,15 @@
|
|||||||
"@apollo/react-hooks" "^3.1.3"
|
"@apollo/react-hooks" "^3.1.3"
|
||||||
tslib "^1.10.0"
|
tslib "^1.10.0"
|
||||||
|
|
||||||
|
"@apollo/react-testing@^3.1.3":
|
||||||
|
version "3.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@apollo/react-testing/-/react-testing-3.1.3.tgz#d8dd318f58fb6a404976bfa3f8a79e976a5c6562"
|
||||||
|
integrity sha512-58R7gROl4TZMHm5kS76Nof9FfZhD703AU3SmJTA2f7naiMqC9Qd8pZ4oNCBafcab0SYN//UtWvLcluK5O7V/9g==
|
||||||
|
dependencies:
|
||||||
|
"@apollo/react-common" "^3.1.3"
|
||||||
|
fast-json-stable-stringify "^2.0.0"
|
||||||
|
tslib "^1.10.0"
|
||||||
|
|
||||||
"@babel/code-frame@7.5.5", "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5":
|
"@babel/code-frame@7.5.5", "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5":
|
||||||
version "7.5.5"
|
version "7.5.5"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d"
|
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d"
|
||||||
@@ -11051,6 +11060,8 @@ rxjs@^6.4.0, rxjs@^6.5.3:
|
|||||||
version "6.5.4"
|
version "6.5.4"
|
||||||
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c"
|
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c"
|
||||||
integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==
|
integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==
|
||||||
|
dependencies:
|
||||||
|
tslib "^1.9.0"
|
||||||
|
|
||||||
safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
||||||
version "5.1.2"
|
version "5.1.2"
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
sql: COMMENT ON COLUMN "public"."owners"."first_name" IS E'null'
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: alter table "public"."owners" rename column "ownr_fn" to "first_name";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
sql: COMMENT ON COLUMN "public"."owners"."first_name" IS E''
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: alter table "public"."owners" rename column "first_name" to "ownr_fn";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
sql: COMMENT ON COLUMN "public"."owners"."last_name" IS E'null'
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: alter table "public"."owners" rename column "ownr_ln" to "last_name";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
sql: COMMENT ON COLUMN "public"."owners"."last_name" IS E''
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: alter table "public"."owners" rename column "last_name" to "ownr_ln";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
sql: COMMENT ON COLUMN "public"."owners"."address1" IS E'null'
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: alter table "public"."owners" rename column "ownr_addr1" to "address1";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
sql: COMMENT ON COLUMN "public"."owners"."address1" IS E''
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: alter table "public"."owners" rename column "address1" to "ownr_addr1";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
sql: COMMENT ON COLUMN "public"."owners"."address2" IS E'null'
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: alter table "public"."owners" rename column "ownr_addr2" to "address2";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
sql: COMMENT ON COLUMN "public"."owners"."address2" IS E''
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: alter table "public"."owners" rename column "address2" to "ownr_addr2";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
sql: COMMENT ON COLUMN "public"."owners"."city" IS E'null'
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: alter table "public"."owners" rename column "ownr_city" to "city";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
sql: COMMENT ON COLUMN "public"."owners"."city" IS E''
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: alter table "public"."owners" rename column "city" to "ownr_city";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
sql: COMMENT ON COLUMN "public"."owners"."state" IS E'null'
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: alter table "public"."owners" rename column "ownr_st" to "state";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
sql: COMMENT ON COLUMN "public"."owners"."state" IS E''
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: alter table "public"."owners" rename column "state" to "ownr_st";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
sql: COMMENT ON COLUMN "public"."owners"."zip" IS E'null'
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: alter table "public"."owners" rename column "ownr_zip" to "zip";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
sql: COMMENT ON COLUMN "public"."owners"."zip" IS E''
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: alter table "public"."owners" rename column "zip" to "ownr_zip";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
sql: COMMENT ON COLUMN "public"."owners"."country" IS E'null'
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: alter table "public"."owners" rename column "ownr_ctry" to "country";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
sql: COMMENT ON COLUMN "public"."owners"."country" IS E''
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: alter table "public"."owners" rename column "country" to "ownr_ctry";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
sql: COMMENT ON COLUMN "public"."owners"."email" IS E'null'
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: alter table "public"."owners" rename column "ownr_ea" to "email";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
sql: COMMENT ON COLUMN "public"."owners"."email" IS E''
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: alter table "public"."owners" rename column "email" to "ownr_ea";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
sql: COMMENT ON COLUMN "public"."owners"."phone" IS E'null'
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: alter table "public"."owners" rename column "ownr_ph1" to "phone";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- args:
|
||||||
|
sql: COMMENT ON COLUMN "public"."owners"."phone" IS E''
|
||||||
|
type: run_sql
|
||||||
|
- args:
|
||||||
|
sql: alter table "public"."owners" rename column "phone" to "ownr_ph1";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
- args:
|
||||||
|
sql: ALTER TABLE "public"."owners" DROP COLUMN "ownr_ph2";
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
- args:
|
||||||
|
sql: ALTER TABLE "public"."owners" ADD COLUMN "ownr_ph2" text NULL;
|
||||||
|
type: run_sql
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: owners
|
||||||
|
schema: public
|
||||||
|
type: drop_insert_permission
|
||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
check:
|
||||||
|
bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
columns:
|
||||||
|
- allow_text_message
|
||||||
|
- ownr_addr1
|
||||||
|
- ownr_addr2
|
||||||
|
- ownr_city
|
||||||
|
- ownr_ctry
|
||||||
|
- ownr_ea
|
||||||
|
- ownr_fn
|
||||||
|
- ownr_ln
|
||||||
|
- ownr_ph1
|
||||||
|
- preferred_contact
|
||||||
|
- ownr_st
|
||||||
|
- ownr_zip
|
||||||
|
- created_at
|
||||||
|
- updated_at
|
||||||
|
- id
|
||||||
|
- shopid
|
||||||
|
localPresets:
|
||||||
|
- key: ""
|
||||||
|
value: ""
|
||||||
|
set: {}
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: owners
|
||||||
|
schema: public
|
||||||
|
type: create_insert_permission
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: owners
|
||||||
|
schema: public
|
||||||
|
type: drop_insert_permission
|
||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
check:
|
||||||
|
bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
columns:
|
||||||
|
- id
|
||||||
|
- created_at
|
||||||
|
- updated_at
|
||||||
|
- ownr_fn
|
||||||
|
- ownr_ln
|
||||||
|
- ownr_addr1
|
||||||
|
- ownr_addr2
|
||||||
|
- ownr_city
|
||||||
|
- ownr_st
|
||||||
|
- ownr_zip
|
||||||
|
- ownr_ctry
|
||||||
|
- ownr_ea
|
||||||
|
- ownr_ph1
|
||||||
|
- preferred_contact
|
||||||
|
- allow_text_message
|
||||||
|
- shopid
|
||||||
|
- ownr_ph2
|
||||||
|
localPresets:
|
||||||
|
- key: ""
|
||||||
|
value: ""
|
||||||
|
set: {}
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: owners
|
||||||
|
schema: public
|
||||||
|
type: create_insert_permission
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: owners
|
||||||
|
schema: public
|
||||||
|
type: drop_select_permission
|
||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
allow_aggregations: false
|
||||||
|
columns:
|
||||||
|
- id
|
||||||
|
- created_at
|
||||||
|
- updated_at
|
||||||
|
- ownr_fn
|
||||||
|
- ownr_ln
|
||||||
|
- ownr_addr1
|
||||||
|
- ownr_addr2
|
||||||
|
- ownr_city
|
||||||
|
- ownr_st
|
||||||
|
- ownr_zip
|
||||||
|
- ownr_ctry
|
||||||
|
- ownr_ea
|
||||||
|
- ownr_ph1
|
||||||
|
- preferred_contact
|
||||||
|
- allow_text_message
|
||||||
|
- shopid
|
||||||
|
computed_fields: []
|
||||||
|
filter:
|
||||||
|
bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: owners
|
||||||
|
schema: public
|
||||||
|
type: create_select_permission
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: owners
|
||||||
|
schema: public
|
||||||
|
type: drop_select_permission
|
||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
allow_aggregations: false
|
||||||
|
columns:
|
||||||
|
- allow_text_message
|
||||||
|
- ownr_addr1
|
||||||
|
- ownr_addr2
|
||||||
|
- ownr_city
|
||||||
|
- ownr_ctry
|
||||||
|
- ownr_ea
|
||||||
|
- ownr_fn
|
||||||
|
- ownr_ln
|
||||||
|
- ownr_ph1
|
||||||
|
- ownr_ph2
|
||||||
|
- ownr_st
|
||||||
|
- ownr_zip
|
||||||
|
- preferred_contact
|
||||||
|
- created_at
|
||||||
|
- updated_at
|
||||||
|
- id
|
||||||
|
- shopid
|
||||||
|
computed_fields: []
|
||||||
|
filter:
|
||||||
|
bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: owners
|
||||||
|
schema: public
|
||||||
|
type: create_select_permission
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: owners
|
||||||
|
schema: public
|
||||||
|
type: drop_update_permission
|
||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
columns:
|
||||||
|
- ownr_addr1
|
||||||
|
- ownr_addr2
|
||||||
|
- allow_text_message
|
||||||
|
- ownr_city
|
||||||
|
- ownr_ctry
|
||||||
|
- created_at
|
||||||
|
- ownr_ea
|
||||||
|
- ownr_fn
|
||||||
|
- ownr_ln
|
||||||
|
- ownr_ph1
|
||||||
|
- preferred_contact
|
||||||
|
- shopid
|
||||||
|
- ownr_st
|
||||||
|
- updated_at
|
||||||
|
- ownr_zip
|
||||||
|
filter:
|
||||||
|
bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
localPresets:
|
||||||
|
- key: ""
|
||||||
|
value: ""
|
||||||
|
set: {}
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: owners
|
||||||
|
schema: public
|
||||||
|
type: create_update_permission
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
- args:
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: owners
|
||||||
|
schema: public
|
||||||
|
type: drop_update_permission
|
||||||
|
- args:
|
||||||
|
permission:
|
||||||
|
columns:
|
||||||
|
- allow_text_message
|
||||||
|
- ownr_addr1
|
||||||
|
- ownr_addr2
|
||||||
|
- ownr_city
|
||||||
|
- ownr_ctry
|
||||||
|
- ownr_ea
|
||||||
|
- ownr_fn
|
||||||
|
- ownr_ln
|
||||||
|
- ownr_ph1
|
||||||
|
- ownr_ph2
|
||||||
|
- ownr_st
|
||||||
|
- ownr_zip
|
||||||
|
- preferred_contact
|
||||||
|
- created_at
|
||||||
|
- updated_at
|
||||||
|
- id
|
||||||
|
- shopid
|
||||||
|
filter:
|
||||||
|
bodyshop:
|
||||||
|
associations:
|
||||||
|
_and:
|
||||||
|
- user:
|
||||||
|
authid:
|
||||||
|
_eq: X-Hasura-User-Id
|
||||||
|
- active:
|
||||||
|
_eq: true
|
||||||
|
localPresets:
|
||||||
|
- key: ""
|
||||||
|
value: ""
|
||||||
|
set: {}
|
||||||
|
role: user
|
||||||
|
table:
|
||||||
|
name: owners
|
||||||
|
schema: public
|
||||||
|
type: create_update_permission
|
||||||
Reference in New Issue
Block a user