Skip to content
This repository was archived by the owner on Mar 9, 2023. It is now read-only.

Commit fed5032

Browse files
authored
Add estimates (#5)
1 parent a31352d commit fed5032

File tree

5 files changed

+111
-4
lines changed

5 files changed

+111
-4
lines changed

src/creates/create-estimate.ts

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import { Bundle, ZObject } from "zapier-platform-core";
2+
import { ZapierCreate, PatchResponse } from "../types";
3+
4+
type CreateData = {
5+
mass_g: number;
6+
project_id?: string;
7+
metadata?: Record<string, string>;
8+
};
9+
10+
const perform = async (
11+
z: ZObject,
12+
bundle: Bundle<CreateData>
13+
): Promise<unknown> => {
14+
const { mass_g, project_id, metadata } = bundle.inputData;
15+
const { data } = await z.request({
16+
method: "POST",
17+
url: "https://api.usepatch.com/v1/estimates",
18+
body: { mass_g, project_id, metadata },
19+
});
20+
return (data as PatchResponse).data;
21+
};
22+
23+
export const CreateEstimate: ZapierCreate<CreateData> = {
24+
key: "create-estimate",
25+
noun: "estimate",
26+
display: {
27+
label: "Create Estimate",
28+
description: "Creates a new estimate.",
29+
},
30+
operation: {
31+
perform,
32+
inputFields: [
33+
{ key: "mass_g", label: "Mass (grams)", required: true, type: "integer" },
34+
// will call the trigger with a key of project
35+
{
36+
key: "project_id",
37+
label: "Project",
38+
dynamic: "project.id.name",
39+
},
40+
{ key: "metadata", dict: true },
41+
],
42+
sample: {
43+
mass_g: 100,
44+
project_id: "pro_test_1234",
45+
metadata: { user: "john doe" },
46+
},
47+
},
48+
};

src/creates/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export * from "./cancel-order";
2+
export * from "./create-estimate";
23
export * from "./create-order";
34
export * from "./place-order";

src/index.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import { Bundle, HttpRequestOptions, ZObject } from "zapier-platform-core";
2-
import { OrderTrigger, ProjectTrigger } from "./triggers";
3-
import { CreateOrder, PlaceOrder, CancelOrder } from "./creates";
2+
import { EstimateTrigger, OrderTrigger, ProjectTrigger } from "./triggers";
3+
import {
4+
CreateEstimate,
5+
CreateOrder,
6+
PlaceOrder,
7+
CancelOrder,
8+
} from "./creates";
49
import { version as platformVersion } from "zapier-platform-core";
510
const { version } = require("../package.json"); // eslint-disable-line
611

@@ -33,13 +38,15 @@ export default {
3338
},
3439

3540
triggers: {
36-
[ProjectTrigger.key]: ProjectTrigger,
41+
[EstimateTrigger.key]: EstimateTrigger,
3742
[OrderTrigger.key]: OrderTrigger,
43+
[ProjectTrigger.key]: ProjectTrigger,
3844
},
3945

4046
creates: {
47+
[CancelOrder.key]: CancelOrder,
48+
[CreateEstimate.key]: CreateEstimate,
4149
[CreateOrder.key]: CreateOrder,
4250
[PlaceOrder.key]: PlaceOrder,
43-
[CancelOrder.key]: CancelOrder,
4451
},
4552
};

src/triggers/estimate.ts

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import { Bundle, ZObject } from "zapier-platform-core";
2+
import { PatchResponse, ZapierTrigger } from "../types";
3+
4+
const perform = async (z: ZObject, bundle: Bundle): Promise<unknown> => {
5+
// zapier starts with page 0
6+
const page = bundle.meta.page + 1;
7+
const { data } = await z.request("https://api.usepatch.com/v1/estimates", {
8+
params: { page },
9+
});
10+
return (data as PatchResponse).data;
11+
};
12+
13+
export const EstimateTrigger: ZapierTrigger = {
14+
key: "estimate",
15+
noun: "estimate",
16+
display: {
17+
label: "New Estimate",
18+
description: "Triggers when a new estimate is created.",
19+
},
20+
operation: {
21+
type: "polling",
22+
canPaginate: true,
23+
perform,
24+
sample: {
25+
id: "ord_test_16d8054a8f8502d81a830252d58024bb",
26+
allocation_state: "allocated",
27+
allocations: [
28+
{
29+
id: "all_test_be33c362135078d77cce3e8ab242dac1",
30+
mass_g: 34,
31+
offset: {
32+
id: "off_test_a6a8c407b8f3e9f783f9aa41fb833d1a",
33+
developer: "Carbo Culture",
34+
production: false,
35+
serial_number: null,
36+
vintage_year: 2020,
37+
},
38+
production: false,
39+
},
40+
],
41+
mass_g: 34,
42+
metadata: {
43+
foo: "bar",
44+
},
45+
price_cents_usd: "1.0",
46+
production: false,
47+
state: "placed",
48+
},
49+
},
50+
};

src/triggers/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1+
export * from "./estimate";
12
export * from "./order";
23
export * from "./project";

0 commit comments

Comments
 (0)