Working on vendors favorite JSON form - issues with additional fields + rehydrating data

This commit is contained in:
Patrick Fic
2020-02-14 15:57:40 -08:00
parent 12c914affd
commit 34f6f066bc
34 changed files with 1044 additions and 69 deletions

View File

@@ -2,10 +2,12 @@ import React from "react";
import ReactDOM from "react-dom";
import Alert from "./alert.component";
import { MockedProvider } from "@apollo/react-testing";
import { shallow } from "enzyme";
import { shallow, mount } from "enzyme";
const div = document.createElement("div");
it("renders without crashing", () => {
shallow(<Alert type="error" />);
const wrapper = mount(<Alert type="error" message="Test Error" />);
console.log("wrapper", wrapper);
// expect(wrapper.children()).to.have.lengthOf(1);
});

View File

@@ -0,0 +1,20 @@
import React from "react";
import { shallow } from "enzyme";
import AllocationsAssignmentContainer from "./allocations-assignment.container";
describe("LineAllocationsContainer", () => {
let mockRefetch;
let jobLineId;
let wrapper;
beforeEach(() => {
mockRefetch = jest.fn;
jobLineId = "b76e44a8-943f-4c67-b8f4-38d14db8b4b8";
const mockProps = {
refetch: mockRefetch,
jobLineId,
hours: 5
};
shallow(<AllocationsAssignmentContainer {...mockProps} />);
});
});

View File

@@ -1,8 +1,19 @@
import { Button, Form, Input, InputNumber, Switch } from "antd";
import {
Button,
Checkbox,
Col,
Form,
Icon,
Input,
InputNumber,
Row
} from "antd";
import React from "react";
import { useTranslation } from "react-i18next";
import FormItemEmail from "../form-items-formatted/email-form-item.component";
import ResetForm from "../form-items-formatted/reset-form-item.component";
let id = 0;
export default function VendorsFormComponent({ form, vendor, handleDelete }) {
const {
getFieldDecorator,
@@ -11,61 +22,131 @@ export default function VendorsFormComponent({ form, vendor, handleDelete }) {
resetFields
} = form;
getFieldDecorator("keys", {
initialValue: Array.isArray(vendor.favorite) ? vendor.favorite : []
});
const remove = k => {
// can use data-binding to get
const keys = form.getFieldValue("keys");
console.log("keys", keys);
// We need at least one passenger
if (keys.length === 1) {
return;
}
// can use data-binding to set
form.setFieldsValue({
keys: keys.filter(key => key !== k)
});
};
const add = props => {
console.log("props", props);
// can use data-binding to get
const keys = form.getFieldValue("keys");
console.log("keys", keys);
const nextKeys = keys.concat(id++);
// can use data-binding to set
// important! notify form to detect changes
form.setFieldsValue({
keys: nextKeys
});
};
const { t } = useTranslation();
return (
<div>
{isFieldsTouched() ? <ResetForm resetFields={resetFields} /> : null}
<Button htmlType='submit' type='primary'>
<Button htmlType="submit" type="primary">
{t("general.actions.save")}
</Button>
<Button type='danger' onClick={handleDelete}>
<Button type="danger" onClick={handleDelete}>
{t("general.actions.delete")}
</Button>
{getFieldValue("keys").map((k, index) => (
<Form.Item required={false} key={k}>
{getFieldDecorator(`favorite[${k}].make`, {
validateTrigger: ["onChange", "onBlur"]
})(
<Input
placeholder="passenger name"
style={{ width: "60%", marginRight: 8 }}
/>
)}
{getFieldValue("keys").length > 1 ? (
<Icon
className="dynamic-delete-button"
type="minus-circle-o"
onClick={() => remove(k)}
/>
) : null}
<Form.Item label="Group">
{getFieldDecorator(`favorite[${k}].type`, {
initialValue: null
})(
<Checkbox.Group style={{ width: "100%" }}>
<Row>
<Col span={8}>
<Checkbox value="OEM">OEM</Checkbox>
</Col>
<Col span={8}>
<Checkbox value="LKQ">LKQ</Checkbox>
</Col>
<Col span={8}>
<Checkbox value="AM">AM</Checkbox>
</Col>
</Row>
</Checkbox.Group>
)}
</Form.Item>
</Form.Item>
))}
<Form.Item label={t("vendors.fields.favorite")}>
<Button type="dashed" onClick={add} style={{ width: "60%" }}>
<Icon type="plus" /> Add field
</Button>
</Form.Item>
<Form.Item label={t("vendors.fields.zip")}>
{getFieldDecorator("zip", {
initialValue: vendor.zip
})(<Input name='zip' />)}
})(<Input name="zip" />)}
</Form.Item>
<Form.Item label={t("vendors.fields.terms")}>
{getFieldDecorator("terms", {
initialValue: vendor.terms
})(<Input name='terms' />)}
})(<Input name="terms" />)}
</Form.Item>
<Form.Item label={t("vendors.fields.taxid")}>
{getFieldDecorator("taxid", {
initialValue: vendor.taxid
})(<Input name='taxid' />)}
})(<Input name="taxid" />)}
</Form.Item>
<Form.Item label={t("vendors.fields.street1")}>
{getFieldDecorator("street1", {
initialValue: vendor.street1
})(<Input name='street1' />)}
})(<Input name="street1" />)}
</Form.Item>
<Form.Item label={t("vendors.fields.street2")}>
{getFieldDecorator("street2", {
initialValue: vendor.street2
})(<Input name='street2' />)}
})(<Input name="street2" />)}
</Form.Item>
<Form.Item label={t("vendors.fields.state")}>
{getFieldDecorator("state", {
initialValue: vendor.state
})(<Input name='state' />)}
</Form.Item>{" "}
})(<Input name="state" />)}
</Form.Item>
<Form.Item label={t("vendors.fields.prompt_discount")}>
{getFieldDecorator("prompt_discount", {
initialValue: vendor.prompt_discount
})(<InputNumber name='prompt_discount' />)}
})(<InputNumber name="prompt_discount" />)}
</Form.Item>
<Form.Item label={t("vendors.fields.name")}>
{getFieldDecorator("name", {
initialValue: vendor.name
})(<Input name='name' />)}
</Form.Item>
<Form.Item label={t("vendors.fields.favorite")}>
{getFieldDecorator("favorite", {
initialValue: vendor.favorite,
valuePropName: "checked"
})(<Switch name='favorite' />)}
})(<Input name="name" />)}
</Form.Item>
<Form.Item label={t("vendors.fields.email")}>
{getFieldDecorator("email", {
@@ -76,38 +157,38 @@ export default function VendorsFormComponent({ form, vendor, handleDelete }) {
message: t("general.validation.invalidemail")
}
]
})(<FormItemEmail name='email' email={getFieldValue("email")} />)}
})(<FormItemEmail name="email" email={getFieldValue("email")} />)}
</Form.Item>
<Form.Item label={t("vendors.fields.due_date")}>
{getFieldDecorator("due_date", {
initialValue: vendor.due_date
})(<InputNumber name='due_date' />)}
})(<InputNumber name="due_date" />)}
</Form.Item>
<Form.Item label={t("vendors.fields.display_name")}>
{getFieldDecorator("display_name", {
initialValue: vendor.display_name
})(<Input name='display_name' />)}
})(<Input name="display_name" />)}
</Form.Item>
<Form.Item label={t("vendors.fields.discount")}>
{getFieldDecorator("discount", {
initialValue: vendor.discount
})(<InputNumber name='discount' />)}
})(<InputNumber name="discount" />)}
</Form.Item>
<Form.Item label={t("vendors.fields.country")}>
{getFieldDecorator("country", {
initialValue: vendor.country
})(<Input name='country' />)}
})(<Input name="country" />)}
</Form.Item>
<Form.Item label={t("vendors.fields.cost_center")}>
{getFieldDecorator("cost_center", {
initialValue: vendor.cost_center,
rules: [{ required: true, message: t("general.validation.required") }]
})(<Input name='cost_center' />)}
})(<Input name="cost_center" />)}
</Form.Item>
<Form.Item label={t("vendors.fields.city")}>
{getFieldDecorator("city", {
initialValue: vendor.city
})(<Input name='city' />)}
})(<Input name="city" />)}
</Form.Item>
</div>
);

View File

@@ -1,29 +1,36 @@
import { Form, notification } from "antd";
import React from "react";
import { Form } from "antd";
import VendorsFormComponent from "./vendors-form.component";
import { useMutation, useQuery } from "react-apollo";
import { useTranslation } from "react-i18next";
import { notification } from "antd";
import {
UPDATE_VENDOR,
INSERT_NEW_VENDOR,
DELETE_VENDOR
} from "../../graphql/vendors.queries";
import { useMutation } from "react-apollo";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
import {
DELETE_VENDOR,
INSERT_NEW_VENDOR,
UPDATE_VENDOR,
QUERY_VENDOR_BY_ID
} from "../../graphql/vendors.queries";
import { selectBodyshop } from "../../redux/user/user.selectors";
import VendorsFormComponent from "./vendors-form.component";
import LoadingSpinner from "../loading-spinner/loading-spinner.component";
import AlertComponent from "../alert/alert.component";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop
});
function VendorsFormContainer({ form, vendor, refetch, bodyshop }) {
function VendorsFormContainer({ form, vendorId, refetch, bodyshop }) {
const { t } = useTranslation();
const { loading, error, data } = useQuery(QUERY_VENDOR_BY_ID, {
variables: { id: vendorId },
fetchPolicy: "network-only",
skip: !vendorId
});
const [updateVendor] = useMutation(UPDATE_VENDOR);
const [insertvendor] = useMutation(INSERT_NEW_VENDOR);
const [deleteVendor] = useMutation(DELETE_VENDOR);
const handleDelete = () => {
deleteVendor({ variables: { id: vendor.id } })
deleteVendor({ variables: { id: vendorId } })
.then(r => {
notification["success"]({
message: t("vendors.successes.deleted")
@@ -48,10 +55,12 @@ function VendorsFormContainer({ form, vendor, refetch, bodyshop }) {
});
}
if (!err) {
if (vendor.id) {
console.log("Received values of form: ", values);
delete values.keys;
if (vendorId) {
//It's a vendor to update.
updateVendor({
variables: { id: vendor.id, vendor: values }
variables: { id: vendorId, vendor: values }
})
.then(r => {
notification["success"]({
@@ -87,20 +96,20 @@ function VendorsFormContainer({ form, vendor, refetch, bodyshop }) {
});
};
if (loading) return <LoadingSpinner />;
if (error) return <AlertComponent message={error.message} type="error" />;
return (
<div>
<Form onSubmit={handleSubmit} autoComplete='new-password'>
{vendor ? (
<VendorsFormComponent
form={form}
vendor={vendor}
handleDelete={handleDelete}
/>
) : (
t("vendors.labels.noneselected")
)}
</Form>
</div>
<Form onSubmit={handleSubmit} autoComplete="new-password">
{data ? (
<VendorsFormComponent
form={form}
vendor={data ? data.vendors_by_pk : null}
handleDelete={handleDelete}
/>
) : (
t("vendors.labels.noneselected")
)}
</Form>
);
}
export default connect(

View File

@@ -26,11 +26,6 @@ export default function VendorsListComponent({
sorter: (a, b) => alphaSort(a.name, b.name),
sortOrder: state.sortedInfo.columnKey === "name" && state.sortedInfo.order
},
{
title: t("vendors.fields.favorite"),
dataIndex: "favorite",
key: "favorite"
},
{
title: t("vendors.fields.cost_center"),
dataIndex: "cost_center",
@@ -81,10 +76,10 @@ export default function VendorsListComponent({
</div>
);
}}
size='small'
size="small"
pagination={{ position: "top" }}
columns={columns.map(item => ({ ...item }))}
rowKey='id'
rowKey="id"
onChange={handleTableChange}
dataSource={vendors}
rowSelection={{

View File

@@ -42,7 +42,7 @@ const errorLink = onError(
// });
// console.log("forward", forward);
// console.log("operation", operation);
return forward(operation).subscribe();
return forward(operation);
// return new Observable(observer => {
// const subscriber = {

View File

@@ -39,7 +39,6 @@ export const QUERY_ALL_VENDORS = gql`
vendors {
name
id
favorite
street1
cost_center
city

View File

@@ -1,13 +1,19 @@
import React from "react";
import { Typography } from "antd";
import { Typography, Layout } from "antd";
import HeaderContainer from "../../components/header/header.container";
export default function LandingPage() {
const { Header, Content } = Layout;
return (
<div>
<HeaderContainer landingHeader />
<Typography.Title>Welcome to bodyshop.app.</Typography.Title>
</div>
<Layout style={{ minHeight: "100vh" }}>
<Header>
<HeaderContainer landingHeader />
</Header>
<Content className="content-container" style={{ padding: "0em 4em 4em" }}>
<Typography.Title>Welcome to bodyshop.app.</Typography.Title>
</Content>
</Layout>
);
}

View File

@@ -7,7 +7,9 @@ export default function ShopVendorPageComponent({ selectedVendorState }) {
return (
<div>
<VendorsListContainer selectedVendorState={selectedVendorState} />
<VendorsFormContainer vendor={selectedVendorState[0]} />
<VendorsFormContainer
vendorId={selectedVendorState[0] ? selectedVendorState[0].id : null}
/>
</div>
);
}

View File

@@ -0,0 +1,9 @@
- args:
sql: ALTER TABLE "public"."vendors" ALTER COLUMN "favorite" TYPE boolean;
type: run_sql
- args:
sql: ALTER TABLE "public"."vendors" ALTER COLUMN "favorite" SET NOT NULL;
type: run_sql
- args:
sql: COMMENT ON COLUMN "public"."vendors"."favorite" IS E'null'
type: run_sql

View File

@@ -0,0 +1,9 @@
- args:
sql: ALTER TABLE "public"."vendors" ALTER COLUMN "favorite" TYPE bool;
type: run_sql
- args:
sql: ALTER TABLE "public"."vendors" ALTER COLUMN "favorite" DROP NOT NULL;
type: run_sql
- args:
sql: COMMENT ON COLUMN "public"."vendors"."favorite" IS E''
type: run_sql

View File

@@ -0,0 +1,47 @@
- args:
role: user
table:
name: vendors
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
- bodyshopid
- name
- street1
- street2
- city
- state
- zip
- country
- email
- taxid
- discount
- prompt_discount
- due_date
- terms
- display_name
- cost_center
- favorite
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: vendors
schema: public
type: create_insert_permission

View File

@@ -0,0 +1,46 @@
- args:
role: user
table:
name: vendors
schema: public
type: drop_insert_permission
- args:
permission:
check:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
columns:
- bodyshopid
- city
- cost_center
- country
- created_at
- discount
- display_name
- due_date
- email
- id
- name
- prompt_discount
- state
- street1
- street2
- taxid
- terms
- updated_at
- zip
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: vendors
schema: public
type: create_insert_permission

View File

@@ -0,0 +1,45 @@
- args:
role: user
table:
name: vendors
schema: public
type: drop_select_permission
- args:
permission:
allow_aggregations: false
columns:
- favorite
- due_date
- discount
- prompt_discount
- city
- cost_center
- country
- display_name
- email
- name
- state
- street1
- street2
- taxid
- terms
- zip
- created_at
- updated_at
- bodyshopid
- id
computed_fields: []
filter:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
role: user
table:
name: vendors
schema: public
type: create_select_permission

View File

@@ -0,0 +1,44 @@
- args:
role: user
table:
name: vendors
schema: public
type: drop_select_permission
- args:
permission:
allow_aggregations: false
columns:
- bodyshopid
- city
- cost_center
- country
- created_at
- discount
- display_name
- due_date
- email
- id
- name
- prompt_discount
- state
- street1
- street2
- taxid
- terms
- updated_at
- zip
computed_fields: []
filter:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
role: user
table:
name: vendors
schema: public
type: create_select_permission

View File

@@ -0,0 +1,47 @@
- args:
role: user
table:
name: vendors
schema: public
type: drop_update_permission
- args:
permission:
columns:
- favorite
- due_date
- discount
- prompt_discount
- city
- cost_center
- country
- display_name
- email
- name
- state
- street1
- street2
- taxid
- terms
- zip
- created_at
- updated_at
- bodyshopid
- id
filter:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: vendors
schema: public
type: create_update_permission

View File

@@ -0,0 +1,46 @@
- args:
role: user
table:
name: vendors
schema: public
type: drop_update_permission
- args:
permission:
columns:
- bodyshopid
- city
- cost_center
- country
- created_at
- discount
- display_name
- due_date
- email
- id
- name
- prompt_discount
- state
- street1
- street2
- taxid
- terms
- updated_at
- zip
filter:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: vendors
schema: public
type: create_update_permission

View File

@@ -0,0 +1,9 @@
- args:
sql: ALTER TABLE "public"."vendors" ADD COLUMN "favorite" bool
type: run_sql
- args:
sql: ALTER TABLE "public"."vendors" ALTER COLUMN "favorite" DROP NOT NULL
type: run_sql
- args:
sql: ALTER TABLE "public"."vendors" ALTER COLUMN "favorite" SET DEFAULT false
type: run_sql

View File

@@ -0,0 +1,3 @@
- args:
sql: ALTER TABLE "public"."vendors" DROP COLUMN "favorite" CASCADE
type: run_sql

View File

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

View File

@@ -0,0 +1,3 @@
- args:
sql: ALTER TABLE "public"."vendors" ADD COLUMN "favorite" jsonb NULL;
type: run_sql

View File

@@ -0,0 +1,46 @@
- args:
role: user
table:
name: vendors
schema: public
type: drop_insert_permission
- args:
permission:
check:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
columns:
- bodyshopid
- city
- cost_center
- country
- created_at
- discount
- display_name
- due_date
- email
- id
- name
- prompt_discount
- state
- street1
- street2
- taxid
- terms
- updated_at
- zip
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: vendors
schema: public
type: create_insert_permission

View File

@@ -0,0 +1,47 @@
- args:
role: user
table:
name: vendors
schema: public
type: drop_insert_permission
- args:
permission:
check:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
columns:
- due_date
- favorite
- discount
- prompt_discount
- city
- cost_center
- country
- display_name
- email
- name
- state
- street1
- street2
- taxid
- terms
- zip
- created_at
- updated_at
- bodyshopid
- id
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: vendors
schema: public
type: create_insert_permission

View File

@@ -0,0 +1,44 @@
- args:
role: user
table:
name: vendors
schema: public
type: drop_select_permission
- args:
permission:
allow_aggregations: false
columns:
- bodyshopid
- city
- cost_center
- country
- created_at
- discount
- display_name
- due_date
- email
- id
- name
- prompt_discount
- state
- street1
- street2
- taxid
- terms
- updated_at
- zip
computed_fields: []
filter:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
role: user
table:
name: vendors
schema: public
type: create_select_permission

View File

@@ -0,0 +1,45 @@
- args:
role: user
table:
name: vendors
schema: public
type: drop_select_permission
- args:
permission:
allow_aggregations: false
columns:
- due_date
- favorite
- discount
- prompt_discount
- city
- cost_center
- country
- display_name
- email
- name
- state
- street1
- street2
- taxid
- terms
- zip
- created_at
- updated_at
- bodyshopid
- id
computed_fields: []
filter:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
role: user
table:
name: vendors
schema: public
type: create_select_permission

View File

@@ -0,0 +1,46 @@
- args:
role: user
table:
name: vendors
schema: public
type: drop_update_permission
- args:
permission:
columns:
- bodyshopid
- city
- cost_center
- country
- created_at
- discount
- display_name
- due_date
- email
- id
- name
- prompt_discount
- state
- street1
- street2
- taxid
- terms
- updated_at
- zip
filter:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: vendors
schema: public
type: create_update_permission

View File

@@ -0,0 +1,47 @@
- args:
role: user
table:
name: vendors
schema: public
type: drop_update_permission
- args:
permission:
columns:
- due_date
- favorite
- discount
- prompt_discount
- city
- cost_center
- country
- display_name
- email
- name
- state
- street1
- street2
- taxid
- terms
- zip
- created_at
- updated_at
- bodyshopid
- id
filter:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: vendors
schema: public
type: create_update_permission

View File

@@ -0,0 +1,46 @@
- args:
role: user
table:
name: vendors
schema: public
type: drop_insert_permission
- args:
permission:
check:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
columns:
- bodyshopid
- city
- cost_center
- country
- created_at
- discount
- display_name
- due_date
- email
- id
- name
- prompt_discount
- state
- street1
- street2
- taxid
- terms
- updated_at
- zip
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: vendors
schema: public
type: create_insert_permission

View File

@@ -0,0 +1,47 @@
- args:
role: user
table:
name: vendors
schema: public
type: drop_insert_permission
- args:
permission:
check:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
columns:
- due_date
- favorite
- discount
- prompt_discount
- city
- cost_center
- country
- display_name
- email
- name
- state
- street1
- street2
- taxid
- terms
- zip
- created_at
- updated_at
- bodyshopid
- id
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: vendors
schema: public
type: create_insert_permission

View File

@@ -0,0 +1,44 @@
- args:
role: user
table:
name: vendors
schema: public
type: drop_select_permission
- args:
permission:
allow_aggregations: false
columns:
- bodyshopid
- city
- cost_center
- country
- created_at
- discount
- display_name
- due_date
- email
- id
- name
- prompt_discount
- state
- street1
- street2
- taxid
- terms
- updated_at
- zip
computed_fields: []
filter:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
role: user
table:
name: vendors
schema: public
type: create_select_permission

View File

@@ -0,0 +1,45 @@
- args:
role: user
table:
name: vendors
schema: public
type: drop_select_permission
- args:
permission:
allow_aggregations: false
columns:
- due_date
- favorite
- discount
- prompt_discount
- city
- cost_center
- country
- display_name
- email
- name
- state
- street1
- street2
- taxid
- terms
- zip
- created_at
- updated_at
- bodyshopid
- id
computed_fields: []
filter:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
role: user
table:
name: vendors
schema: public
type: create_select_permission

View File

@@ -0,0 +1,46 @@
- args:
role: user
table:
name: vendors
schema: public
type: drop_update_permission
- args:
permission:
columns:
- bodyshopid
- city
- cost_center
- country
- created_at
- discount
- display_name
- due_date
- email
- id
- name
- prompt_discount
- state
- street1
- street2
- taxid
- terms
- updated_at
- zip
filter:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: vendors
schema: public
type: create_update_permission

View File

@@ -0,0 +1,47 @@
- args:
role: user
table:
name: vendors
schema: public
type: drop_update_permission
- args:
permission:
columns:
- due_date
- favorite
- discount
- prompt_discount
- city
- cost_center
- country
- display_name
- email
- name
- state
- street1
- street2
- taxid
- terms
- zip
- created_at
- updated_at
- bodyshopid
- id
filter:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: vendors
schema: public
type: create_update_permission