Renamed some owner fields to follow CIECA standard. Work on Owner Select modal.

This commit is contained in:
Patrick Fic
2020-01-29 09:52:02 -08:00
parent 1cdedac0a8
commit 7d6969b186
49 changed files with 691 additions and 135 deletions

View File

@@ -2635,6 +2635,27 @@
</translation>
</translations>
</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>
<name>deleted</name>
<definition_loaded>false</definition_loaded>

View File

@@ -54,6 +54,7 @@
]
},
"devDependencies": {
"@apollo/react-testing": "^3.1.3",
"enzyme": "^3.11.0",
"enzyme-adapter-react-16": "^1.15.2"
}

View File

@@ -126,6 +126,8 @@ class AppContainer extends Component {
//Init local state.
}
componentWillUnmount() {}
render() {
const { client, loaded } = this.state;

View File

@@ -1,9 +1,18 @@
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import React from "react";
import ReactDOM from "react-dom";
import App from "./App.container";
import { MockedProvider } from "@apollo/react-testing";
const div = document.createElement("div");
it('renders without crashing', () => {
const div = document.createElement('div');
ReactDOM.render(<App />, div);
it("renders without crashing", () => {
ReactDOM.render(
<MockedProvider>
<App />
</MockedProvider>,
div
);
});
it("unmounts without crashing", () => {
ReactDOM.unmountComponentAtNode(div);
});

View 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" />);
});

View File

@@ -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 { useTranslation } from "react-i18next";
import { alphaSort } from "../../utils/sorters";
import { DateTimeFormatter } from "../../utils/DateFormatter";
import OwnerFindModalContainer from "../owner-find-modal/owner-find-modal.container";
export default function JobsAvailableComponent({
loading,
data,
refetch,
deleteJob,
deleteAllNewJobs
deleteAllNewJobs,
insertNewJob,
setJobId,
estDataLazyLoad
}) {
const { t } = useTranslation();
const [loadEstData, estData] = estDataLazyLoad;
const [state, setState] = useState({
sortedInfo: {},
filteredInfo: { text: "" }
});
const [modalVisible, setModalVisible] = useState(false);
const handleTableChange = (pagination, filters, sorter) => {
setState({ ...state, filteredInfo: filters, sortedInfo: sorter });
};
@@ -114,7 +121,10 @@ export default function JobsAvailableComponent({
</Button>
<Button
onClick={() => {
alert("Add");
console.log("record.id", record.id);
loadEstData({ variables: { id: record.id } });
setModalVisible(true);
}}
>
<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 (
<Table
loading={loading}
title={() => {
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
})
<div>
<OwnerFindModalContainer
loading={estData.loading}
error={estData.error}
owner={owner}
visible={modalVisible}
onOk={() => {
setModalVisible(false);
// insertNewJob({
// variables: {
// job: record.est_data
// }
// }).then(r => {
// notification["success"]({
// message: t("jobs.successes.created")
// });
// refetch();
// });
}}
onCancel={() => setModalVisible(false)}
/>
<Table
loading={loading}
title={() => {
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 => {
notification["error"]({
message: t("jobs.errors.deleted") + " " + r.message
});
});
}}
>
Delete All
</Button>
</div>
);
}}
size="small"
pagination={{ position: "top" }}
columns={columns.map(item => ({ ...item }))}
rowKey="id"
dataSource={data && data.available_jobs}
onChange={handleTableChange}
/>
}}
>
Delete All
</Button>
</div>
);
}}
size="small"
pagination={{ position: "top" }}
columns={columns.map(item => ({ ...item }))}
rowKey="id"
dataSource={data && data.available_jobs}
onChange={handleTableChange}
/>
</div>
);
}

View File

@@ -1,19 +1,20 @@
import React from "react";
import { useQuery, useMutation } from "react-apollo";
import { useMutation, useQuery } from "react-apollo";
import {
QUERY_AVAILABLE_NEW_JOBS,
DELETE_AVAILABLE_JOB,
DELETE_ALL_AVAILABLE_NEW_JOBS
DELETE_ALL_AVAILABLE_NEW_JOBS,
QUERY_AVAILABLE_NEW_JOBS
} from "../../graphql/available-jobs.queries";
import { INSERT_NEW_JOB } from "../../graphql/jobs.queries";
import AlertComponent from "../alert/alert.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, {
fetchPolicy: "network-only"
});
const [deleteJob] = useMutation(DELETE_AVAILABLE_JOB);
const [deleteAllNewJobs] = useMutation(DELETE_ALL_AVAILABLE_NEW_JOBS);
const [insertNewJob] = useMutation(INSERT_NEW_JOB);
if (error) return <AlertComponent type="error" message={error.message} />;
return (
@@ -23,6 +24,8 @@ export default function JobsAvailableContainer() {
refetch={refetch}
deleteJob={deleteJob}
deleteAllNewJobs={deleteAllNewJobs}
insertNewJob={insertNewJob}
estDataLazyLoad={estDataLazyLoad}
/>
);
}

View File

@@ -8,7 +8,8 @@ export default function JobsAvailableSupplementComponent({
data,
refetch,
deleteJob,
deleteAllNewJobs
deleteAllNewJobs,
estDataLazyLoad
}) {
const { t } = useTranslation();

View File

@@ -1,21 +1,19 @@
import React from "react";
import { useQuery, useMutation } from "react-apollo";
import {
QUERY_AVAILABLE_SUPPLEMENT_JOBS,
DELETE_AVAILABLE_JOB,
DELETE_ALL_AVAILABLE_SUPPLEMENT_JOBS
} from "../../graphql/available-jobs.queries";
import { useMutation, useQuery } from "react-apollo";
import { DELETE_ALL_AVAILABLE_SUPPLEMENT_JOBS, QUERY_AVAILABLE_SUPPLEMENT_JOBS } from "../../graphql/available-jobs.queries";
import AlertComponent from "../alert/alert.component";
import JobsAvailableSupplementComponent from "./jobs-available-supplement.component";
export default function JobsAvailableSupplementContainer() {
export default function JobsAvailableSupplementContainer({
deleteJob,
estDataLazyLoad
}) {
const { loading, error, data, refetch } = useQuery(
QUERY_AVAILABLE_SUPPLEMENT_JOBS,
{
fetchPolicy: "network-only"
}
);
const [deleteJob] = useMutation(DELETE_AVAILABLE_JOB);
const [deleteAllNewJobs] = useMutation(DELETE_ALL_AVAILABLE_SUPPLEMENT_JOBS);
if (error) return <AlertComponent type="error" message={error.message} />;
@@ -26,6 +24,7 @@ export default function JobsAvailableSupplementContainer() {
refetch={refetch}
deleteJob={deleteJob}
deleteAllNewJobs={deleteAllNewJobs}
estDataLazyLoad={estDataLazyLoad}
/>
);
}

View File

@@ -0,0 +1,4 @@
import React from "react";
export default function OwnerFindModalComponent() {
return <div>Modal Componnentasdasd</div>;
}

View File

@@ -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>
);
}

View File

@@ -4,7 +4,6 @@ import { auth } from "../firebase/firebase.utils";
//https://stackoverflow.com/questions/57163454/refreshing-a-token-with-apollo-client-firebase-auth
const errorLink = onError(
({ graphQLErrors, networkError, operation, forward }) => {
let access_token = window.localStorage.getItem("token");
// console.log("graphQLErrors", graphQLErrors);
// console.log("networkError", networkError);
// console.log("operation", operation);
@@ -26,59 +25,59 @@ const errorLink = onError(
//User access token has expired
//props.history.push("/network-error");
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 => {
if (token) {
window.localStorage.setItem("token", token);
operation.setContext(({ headers = {} }) => ({
headers: {
...headers,
authorization: token ? `Bearer ${token}` : ""
}
}));
return forward(operation);
}
});
auth.currentUser.getIdToken(true).then(token => {
if (token) {
console.log("Got the new token.", token);
window.localStorage.setItem("token", token);
operation.setContext(({ headers = {} }) => ({
headers: {
...headers,
authorization: token ? `Bearer ${token}` : ""
}
}));
console.log("Forwarding operation", operation);
return forward(operation);
}
});
// return new Observable(observer => {
// auth.currentUser
// .getIdToken(true)
// .then(function(idToken) {
// if (!idToken) {
// window.localStorage.removeItem("token");
// return console.log("Refresh token has expired");
// }
// console.log("Got a new token", idToken);
// window.localStorage.setItem("token", idToken);
// return new Observable(observer => {
// auth.currentUser
// .getIdToken(true)
// .then(function(idToken) {
// if (!idToken) {
// window.localStorage.removeItem("token");
// return console.log("Refresh token has expired");
// }
// console.log("Got a new token", idToken);
// window.localStorage.setItem("token", idToken);
// // reset the headers
// operation.setContext(({ headers = {} }) => ({
// headers: {
// // Re-add old headers
// ...headers,
// // Switch out old access token for new one
// authorization: idToken ? `Bearer ${idToken}` : ""
// }
// }));
// // reset the headers
// operation.setContext(({ headers = {} }) => ({
// headers: {
// // Re-add old headers
// ...headers,
// // Switch out old access token for new one
// authorization: idToken ? `Bearer ${idToken}` : ""
// }
// }));
// const subscriber = {
// next: observer.next.bind(observer),
// error: observer.error.bind(observer),
// complete: observer.complete.bind(observer)
// };
// console.log("About to resend the request.");
// // Retry last failed request
// forward(operation).subscribe(subscriber);
// })
// .catch(error => {
// // No refresh or client token available, we force user to login
// console.log("Hit an error.");
// observer.error(error);
// });
// });
}
// const subscriber = {
// next: observer.next.bind(observer),
// error: observer.error.bind(observer),
// complete: observer.complete.bind(observer)
// };
// console.log("About to resend the request.");
// // Retry last failed request
// forward(operation).subscribe(subscriber);
// })
// .catch(error => {
// // No refresh or client token available, we force user to login
// console.log("Hit an error.");
// observer.error(error);
// });
// });
}
}
);

View File

@@ -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
}
}
`;

View File

@@ -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
}
}
}
`;

View File

@@ -2,12 +2,22 @@ import React from "react";
import JobsAvailableContainer from "../../components/jobs-available-new/jobs-available-new.container";
import JobsAvailableSupplementContainer from "../../components/jobs-available-supplement/jobs-available-supplement.container";
export default function JobsAvailablePageComponent() {
export default function JobsAvailablePageComponent({
deleteJob,
estDataLazyLoad
}) {
return (
<div>
<JobsAvailableContainer />
<JobsAvailableSupplementContainer />
Available New Jobs
<JobsAvailableContainer
deleteJob={deleteJob}
estDataLazyLoad={estDataLazyLoad}
/>
Available Supplements
<JobsAvailableSupplementContainer
deleteJob={deleteJob}
estDataLazyLoad={estDataLazyLoad}
/>
</div>
);
}

View File

@@ -1,10 +1,26 @@
import React from 'react'
import JobsAvailablePageComponent from './jobs-available.page.component'
import React from "react";
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() {
return (
<div>
<JobsAvailablePageComponent />
</div>
)
const [deleteJob] = useMutation(DELETE_AVAILABLE_JOB);
const estDataLazyLoad = useLazyQuery(
QUERY_AVAILABLE_NEW_JOBS_EST_DATA_BY_PK,
{
fetchPolicy: "network-only"
}
);
return (
<div>
<JobsAvailablePageComponent
deleteJob={deleteJob}
estDataLazyLoad={estDataLazyLoad}
/>
</div>
);
}

View File

@@ -1,4 +1,3 @@
import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
configure({ adapter: new Adapter() });
configure({ adapter: new Adapter() });

View File

@@ -151,6 +151,7 @@
"successes": {
"all_deleted": "{{count}} jobs deleted successfully.",
"converted": "Job converted successfully.",
"created": "Job created successfully.",
"deleted": "Job deleted successfully.",
"save": "Record Saved",
"savetitle": "Record saved successfully."

View File

@@ -151,6 +151,7 @@
"successes": {
"all_deleted": "{{count}} trabajos eliminados con éxito.",
"converted": "Trabajo convertido con éxito.",
"created": "Trabajo creado con éxito.",
"deleted": "Trabajo eliminado con éxito.",
"save": "Registro guardado",
"savetitle": "Registro guardado con éxito."

View File

@@ -151,6 +151,7 @@
"successes": {
"all_deleted": "{{count}} travaux supprimés 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é.",
"save": "Enregistrement enregistré",
"savetitle": "Enregistrement enregistré avec succès."

View File

@@ -79,6 +79,15 @@
"@apollo/react-hooks" "^3.1.3"
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":
version "7.5.5"
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"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c"
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:
version "5.1.2"

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1,3 @@
- args:
sql: ALTER TABLE "public"."owners" DROP COLUMN "ownr_ph2";
type: run_sql

View File

@@ -0,0 +1,3 @@
- args:
sql: ALTER TABLE "public"."owners" ADD COLUMN "ownr_ph2" text NULL;
type: run_sql

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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