@hanzo/booker 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +78 -0
- package/dist/cjs/Booker.cjs +153 -0
- package/dist/cjs/Booker.native.js +158 -0
- package/dist/cjs/Booker.native.js.map +1 -0
- package/dist/cjs/BookingForm.cjs +197 -0
- package/dist/cjs/BookingForm.native.js +203 -0
- package/dist/cjs/BookingForm.native.js.map +1 -0
- package/dist/cjs/CalendarEmbed.cjs +121 -0
- package/dist/cjs/CalendarEmbed.native.js +125 -0
- package/dist/cjs/CalendarEmbed.native.js.map +1 -0
- package/dist/cjs/Confirmation.cjs +177 -0
- package/dist/cjs/Confirmation.native.js +185 -0
- package/dist/cjs/Confirmation.native.js.map +1 -0
- package/dist/cjs/EventHeader.cjs +112 -0
- package/dist/cjs/EventHeader.native.js +118 -0
- package/dist/cjs/EventHeader.native.js.map +1 -0
- package/dist/cjs/MonthCalendar.cjs +177 -0
- package/dist/cjs/MonthCalendar.native.js +191 -0
- package/dist/cjs/MonthCalendar.native.js.map +1 -0
- package/dist/cjs/TimeSlots.cjs +119 -0
- package/dist/cjs/TimeSlots.native.js +126 -0
- package/dist/cjs/TimeSlots.native.js.map +1 -0
- package/dist/cjs/client.cjs +136 -0
- package/dist/cjs/client.native.js +267 -0
- package/dist/cjs/client.native.js.map +1 -0
- package/dist/cjs/hooks.cjs +193 -0
- package/dist/cjs/hooks.native.js +221 -0
- package/dist/cjs/hooks.native.js.map +1 -0
- package/dist/cjs/index.cjs +71 -0
- package/dist/cjs/index.native.js +74 -0
- package/dist/cjs/index.native.js.map +1 -0
- package/dist/cjs/time.cjs +145 -0
- package/dist/cjs/time.native.js +150 -0
- package/dist/cjs/time.native.js.map +1 -0
- package/dist/cjs/useBooker.cjs +151 -0
- package/dist/cjs/useBooker.native.js +173 -0
- package/dist/cjs/useBooker.native.js.map +1 -0
- package/dist/esm/Booker.mjs +128 -0
- package/dist/esm/Booker.mjs.map +1 -0
- package/dist/esm/Booker.native.js +130 -0
- package/dist/esm/Booker.native.js.map +1 -0
- package/dist/esm/BookingForm.mjs +172 -0
- package/dist/esm/BookingForm.mjs.map +1 -0
- package/dist/esm/BookingForm.native.js +175 -0
- package/dist/esm/BookingForm.native.js.map +1 -0
- package/dist/esm/CalendarEmbed.mjs +96 -0
- package/dist/esm/CalendarEmbed.mjs.map +1 -0
- package/dist/esm/CalendarEmbed.native.js +97 -0
- package/dist/esm/CalendarEmbed.native.js.map +1 -0
- package/dist/esm/Confirmation.mjs +152 -0
- package/dist/esm/Confirmation.mjs.map +1 -0
- package/dist/esm/Confirmation.native.js +157 -0
- package/dist/esm/Confirmation.native.js.map +1 -0
- package/dist/esm/EventHeader.mjs +87 -0
- package/dist/esm/EventHeader.mjs.map +1 -0
- package/dist/esm/EventHeader.native.js +90 -0
- package/dist/esm/EventHeader.native.js.map +1 -0
- package/dist/esm/MonthCalendar.mjs +152 -0
- package/dist/esm/MonthCalendar.mjs.map +1 -0
- package/dist/esm/MonthCalendar.native.js +163 -0
- package/dist/esm/MonthCalendar.native.js.map +1 -0
- package/dist/esm/TimeSlots.mjs +94 -0
- package/dist/esm/TimeSlots.mjs.map +1 -0
- package/dist/esm/TimeSlots.native.js +98 -0
- package/dist/esm/TimeSlots.native.js.map +1 -0
- package/dist/esm/client.mjs +104 -0
- package/dist/esm/client.mjs.map +1 -0
- package/dist/esm/client.native.js +232 -0
- package/dist/esm/client.native.js.map +1 -0
- package/dist/esm/hooks.mjs +165 -0
- package/dist/esm/hooks.mjs.map +1 -0
- package/dist/esm/hooks.native.js +190 -0
- package/dist/esm/hooks.native.js.map +1 -0
- package/dist/esm/index.js +13 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/index.mjs +13 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/index.native.js +13 -0
- package/dist/esm/index.native.js.map +1 -0
- package/dist/esm/time.mjs +107 -0
- package/dist/esm/time.mjs.map +1 -0
- package/dist/esm/time.native.js +109 -0
- package/dist/esm/time.native.js.map +1 -0
- package/dist/esm/useBooker.mjs +126 -0
- package/dist/esm/useBooker.mjs.map +1 -0
- package/dist/esm/useBooker.native.js +145 -0
- package/dist/esm/useBooker.native.js.map +1 -0
- package/package.json +61 -0
- package/src/Booker.tsx +152 -0
- package/src/BookingForm.tsx +180 -0
- package/src/CalendarEmbed.tsx +111 -0
- package/src/Confirmation.tsx +145 -0
- package/src/EventHeader.tsx +85 -0
- package/src/MonthCalendar.tsx +179 -0
- package/src/TimeSlots.tsx +102 -0
- package/src/client.ts +218 -0
- package/src/hooks.ts +180 -0
- package/src/index.ts +72 -0
- package/src/time.ts +131 -0
- package/src/useBooker.ts +187 -0
- package/types/Booker.d.ts +16 -0
- package/types/Booker.d.ts.map +1 -0
- package/types/BookingForm.d.ts +13 -0
- package/types/BookingForm.d.ts.map +1 -0
- package/types/CalendarEmbed.d.ts +15 -0
- package/types/CalendarEmbed.d.ts.map +1 -0
- package/types/Confirmation.d.ts +12 -0
- package/types/Confirmation.d.ts.map +1 -0
- package/types/EventHeader.d.ts +10 -0
- package/types/EventHeader.d.ts.map +1 -0
- package/types/MonthCalendar.d.ts +14 -0
- package/types/MonthCalendar.d.ts.map +1 -0
- package/types/TimeSlots.d.ts +15 -0
- package/types/TimeSlots.d.ts.map +1 -0
- package/types/client.d.ts +77 -0
- package/types/client.d.ts.map +1 -0
- package/types/hooks.d.ts +43 -0
- package/types/hooks.d.ts.map +1 -0
- package/types/index.d.ts +12 -0
- package/types/index.d.ts.map +1 -0
- package/types/time.d.ts +38 -0
- package/types/time.d.ts.map +1 -0
- package/types/useBooker.d.ts +41 -0
- package/types/useBooker.d.ts.map +1 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { Button, Input, SizableText, TextArea, XStack, YStack } from "hanzogui";
|
|
4
|
+
import { formatBookingWhen } from "./time.native.js";
|
|
5
|
+
var EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
6
|
+
function BookingForm(param) {
|
|
7
|
+
var {
|
|
8
|
+
slotIso,
|
|
9
|
+
timeZone,
|
|
10
|
+
eventLength,
|
|
11
|
+
submitting,
|
|
12
|
+
error,
|
|
13
|
+
onSubmit,
|
|
14
|
+
onBack
|
|
15
|
+
} = param;
|
|
16
|
+
var [name, setName] = useState("");
|
|
17
|
+
var [email, setEmail] = useState("");
|
|
18
|
+
var [notes, setNotes] = useState("");
|
|
19
|
+
var [touched, setTouched] = useState(false);
|
|
20
|
+
var nameValid = name.trim().length > 0;
|
|
21
|
+
var emailValid = EMAIL_RE.test(email.trim());
|
|
22
|
+
var valid = nameValid && emailValid;
|
|
23
|
+
var submit = function () {
|
|
24
|
+
setTouched(true);
|
|
25
|
+
if (!valid || submitting) return;
|
|
26
|
+
onSubmit({
|
|
27
|
+
name: name.trim(),
|
|
28
|
+
email: email.trim(),
|
|
29
|
+
notes: notes.trim() || void 0
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
return /* @__PURE__ */_jsxs(YStack, {
|
|
33
|
+
gap: "$3",
|
|
34
|
+
flex: 1,
|
|
35
|
+
minWidth: 240,
|
|
36
|
+
children: [/* @__PURE__ */_jsxs(YStack, {
|
|
37
|
+
gap: "$1",
|
|
38
|
+
children: [/* @__PURE__ */_jsxs(XStack, {
|
|
39
|
+
alignItems: "center",
|
|
40
|
+
gap: "$2",
|
|
41
|
+
children: [/* @__PURE__ */_jsx(BackLink, {
|
|
42
|
+
onPress: onBack
|
|
43
|
+
}), /* @__PURE__ */_jsx(SizableText, {
|
|
44
|
+
size: "$5",
|
|
45
|
+
fontWeight: "700",
|
|
46
|
+
color: "$color12",
|
|
47
|
+
children: "Enter details"
|
|
48
|
+
})]
|
|
49
|
+
}), /* @__PURE__ */_jsxs(SizableText, {
|
|
50
|
+
size: "$3",
|
|
51
|
+
color: "$color11",
|
|
52
|
+
children: [formatBookingWhen(slotIso, timeZone), " \xB7 ", eventLength, " min"]
|
|
53
|
+
})]
|
|
54
|
+
}), /* @__PURE__ */_jsx(Field, {
|
|
55
|
+
label: "Name",
|
|
56
|
+
required: true,
|
|
57
|
+
invalid: touched && !nameValid,
|
|
58
|
+
hint: "Please enter your name",
|
|
59
|
+
children: /* @__PURE__ */_jsx(Input, {
|
|
60
|
+
value: name,
|
|
61
|
+
onChangeText: setName,
|
|
62
|
+
placeholder: "Ada Lovelace",
|
|
63
|
+
autoComplete: "name",
|
|
64
|
+
size: "$4"
|
|
65
|
+
})
|
|
66
|
+
}), /* @__PURE__ */_jsx(Field, {
|
|
67
|
+
label: "Email",
|
|
68
|
+
required: true,
|
|
69
|
+
invalid: touched && !emailValid,
|
|
70
|
+
hint: "Please enter a valid email",
|
|
71
|
+
children: /* @__PURE__ */_jsx(Input, {
|
|
72
|
+
value: email,
|
|
73
|
+
onChangeText: setEmail,
|
|
74
|
+
placeholder: "ada@example.com",
|
|
75
|
+
keyboardType: "email-address",
|
|
76
|
+
autoCapitalize: "none",
|
|
77
|
+
autoComplete: "email",
|
|
78
|
+
size: "$4"
|
|
79
|
+
})
|
|
80
|
+
}), /* @__PURE__ */_jsx(Field, {
|
|
81
|
+
label: "Notes",
|
|
82
|
+
hint: "Optional",
|
|
83
|
+
children: /* @__PURE__ */_jsx(TextArea, {
|
|
84
|
+
value: notes,
|
|
85
|
+
onChangeText: setNotes,
|
|
86
|
+
placeholder: "Anything that would help prepare?",
|
|
87
|
+
numberOfLines: 3,
|
|
88
|
+
size: "$4"
|
|
89
|
+
})
|
|
90
|
+
}), error ? /* @__PURE__ */_jsx(YStack, {
|
|
91
|
+
backgroundColor: "$red3",
|
|
92
|
+
borderColor: "$red6",
|
|
93
|
+
borderWidth: 1,
|
|
94
|
+
borderRadius: "$4",
|
|
95
|
+
padding: "$2.5",
|
|
96
|
+
children: /* @__PURE__ */_jsx(SizableText, {
|
|
97
|
+
size: "$2",
|
|
98
|
+
color: "$red11",
|
|
99
|
+
children: error
|
|
100
|
+
})
|
|
101
|
+
}) : null, /* @__PURE__ */_jsxs(XStack, {
|
|
102
|
+
gap: "$2",
|
|
103
|
+
justifyContent: "flex-end",
|
|
104
|
+
marginTop: "$1",
|
|
105
|
+
children: [/* @__PURE__ */_jsx(Button, {
|
|
106
|
+
size: "$4",
|
|
107
|
+
chromeless: true,
|
|
108
|
+
onPress: onBack,
|
|
109
|
+
disabled: submitting,
|
|
110
|
+
children: "Back"
|
|
111
|
+
}), /* @__PURE__ */_jsx(Button, {
|
|
112
|
+
size: "$4",
|
|
113
|
+
theme: "blue",
|
|
114
|
+
onPress: submit,
|
|
115
|
+
disabled: submitting || touched && !valid,
|
|
116
|
+
opacity: submitting ? 0.7 : 1,
|
|
117
|
+
children: submitting ? "Booking\u2026" : "Confirm booking"
|
|
118
|
+
})]
|
|
119
|
+
})]
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
function Field(param) {
|
|
123
|
+
var {
|
|
124
|
+
label,
|
|
125
|
+
required,
|
|
126
|
+
invalid,
|
|
127
|
+
hint,
|
|
128
|
+
children
|
|
129
|
+
} = param;
|
|
130
|
+
return /* @__PURE__ */_jsxs(YStack, {
|
|
131
|
+
gap: "$1.5",
|
|
132
|
+
children: [/* @__PURE__ */_jsxs(SizableText, {
|
|
133
|
+
size: "$2",
|
|
134
|
+
color: "$color11",
|
|
135
|
+
fontWeight: "600",
|
|
136
|
+
children: [label, required ? /* @__PURE__ */_jsx(SizableText, {
|
|
137
|
+
color: "$red10",
|
|
138
|
+
children: " *"
|
|
139
|
+
}) : null]
|
|
140
|
+
}), children, invalid && hint ? /* @__PURE__ */_jsx(SizableText, {
|
|
141
|
+
size: "$1",
|
|
142
|
+
color: "$red10",
|
|
143
|
+
children: hint
|
|
144
|
+
}) : null]
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
function BackLink(param) {
|
|
148
|
+
var {
|
|
149
|
+
onPress
|
|
150
|
+
} = param;
|
|
151
|
+
return /* @__PURE__ */_jsx(YStack, {
|
|
152
|
+
width: 30,
|
|
153
|
+
height: 30,
|
|
154
|
+
alignItems: "center",
|
|
155
|
+
justifyContent: "center",
|
|
156
|
+
borderRadius: "$4",
|
|
157
|
+
cursor: "pointer",
|
|
158
|
+
hoverStyle: {
|
|
159
|
+
backgroundColor: "$color4"
|
|
160
|
+
},
|
|
161
|
+
pressStyle: {
|
|
162
|
+
backgroundColor: "$color6"
|
|
163
|
+
},
|
|
164
|
+
onPress,
|
|
165
|
+
"aria-label": "Back",
|
|
166
|
+
role: "button",
|
|
167
|
+
children: /* @__PURE__ */_jsx(SizableText, {
|
|
168
|
+
size: "$6",
|
|
169
|
+
color: "$color11",
|
|
170
|
+
children: "\u2039"
|
|
171
|
+
})
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
export { BookingForm };
|
|
175
|
+
//# sourceMappingURL=BookingForm.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["jsx","_jsx","jsxs","_jsxs","useState","Button","Input","SizableText","TextArea","XStack","YStack","formatBookingWhen","EMAIL_RE","BookingForm","param","slotIso","timeZone","eventLength","submitting","error","onSubmit","onBack","name","setName","email","setEmail","notes","setNotes","touched","setTouched","nameValid","trim","length","emailValid","test","valid","submit","gap","flex","minWidth","children","alignItems","BackLink","onPress","size","fontWeight","color","Field","label","required","invalid","hint","value","onChangeText","placeholder","autoComplete","keyboardType","autoCapitalize","numberOfLines","backgroundColor","borderColor","borderWidth","borderRadius","padding","justifyContent","marginTop","chromeless","disabled","theme","opacity"],"sources":["../../src/BookingForm.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { SizableText, Spinner, YStack } from "hanzogui";
|
|
2
|
+
import { BookingForm } from "./BookingForm.mjs";
|
|
3
|
+
import { Confirmation } from "./Confirmation.mjs";
|
|
4
|
+
import { EventHeader } from "./EventHeader.mjs";
|
|
5
|
+
import { TimeSlots } from "./TimeSlots.mjs";
|
|
6
|
+
import { formatMonthLabel } from "./time.mjs";
|
|
7
|
+
import { useBooker } from "./useBooker.mjs";
|
|
8
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
function CalendarEmbed(props) {
|
|
10
|
+
const m = useBooker({
|
|
11
|
+
...props,
|
|
12
|
+
autoSelectFirst: true
|
|
13
|
+
});
|
|
14
|
+
return /* @__PURE__ */jsx(YStack, {
|
|
15
|
+
backgroundColor: "$background",
|
|
16
|
+
borderColor: "$borderColor",
|
|
17
|
+
borderWidth: 1,
|
|
18
|
+
borderRadius: "$6",
|
|
19
|
+
padding: "$4",
|
|
20
|
+
gap: "$3",
|
|
21
|
+
width: "100%",
|
|
22
|
+
maxWidth: 420,
|
|
23
|
+
children: m.event.loading ? /* @__PURE__ */jsx(YStack, {
|
|
24
|
+
alignItems: "center",
|
|
25
|
+
justifyContent: "center",
|
|
26
|
+
gap: "$2",
|
|
27
|
+
padding: "$6",
|
|
28
|
+
minHeight: 160,
|
|
29
|
+
children: /* @__PURE__ */jsx(Spinner, {
|
|
30
|
+
size: "large",
|
|
31
|
+
color: "$color9"
|
|
32
|
+
})
|
|
33
|
+
}) : m.event.error || !m.event.data ? /* @__PURE__ */jsxs(YStack, {
|
|
34
|
+
alignItems: "center",
|
|
35
|
+
justifyContent: "center",
|
|
36
|
+
padding: "$5",
|
|
37
|
+
minHeight: 140,
|
|
38
|
+
gap: "$1",
|
|
39
|
+
children: [/* @__PURE__ */jsx(SizableText, {
|
|
40
|
+
size: "$4",
|
|
41
|
+
fontWeight: "600",
|
|
42
|
+
color: "$color12",
|
|
43
|
+
children: "Unavailable"
|
|
44
|
+
}), /* @__PURE__ */jsx(SizableText, {
|
|
45
|
+
size: "$2",
|
|
46
|
+
color: "$color10",
|
|
47
|
+
textAlign: "center",
|
|
48
|
+
children: m.event.error ?? "Event not found."
|
|
49
|
+
})]
|
|
50
|
+
}) : m.phase === "done" && m.booking ? /* @__PURE__ */jsx(Confirmation, {
|
|
51
|
+
booking: m.booking,
|
|
52
|
+
timeZone: m.timeZone,
|
|
53
|
+
onDone: m.reset
|
|
54
|
+
}) : m.phase === "form" && m.selectedSlot ? /* @__PURE__ */jsx(BookingForm, {
|
|
55
|
+
slotIso: m.selectedSlot,
|
|
56
|
+
timeZone: m.timeZone,
|
|
57
|
+
eventLength: m.event.data.length,
|
|
58
|
+
submitting: m.submitting,
|
|
59
|
+
error: m.error,
|
|
60
|
+
onSubmit: m.submit,
|
|
61
|
+
onBack: m.back
|
|
62
|
+
}) : /* @__PURE__ */jsxs(Fragment, {
|
|
63
|
+
children: [/* @__PURE__ */jsx(EventHeader, {
|
|
64
|
+
event: m.event.data,
|
|
65
|
+
host: props.host,
|
|
66
|
+
timeZone: m.timeZone,
|
|
67
|
+
compact: true
|
|
68
|
+
}), m.conflict ? /* @__PURE__ */jsx(SizableText, {
|
|
69
|
+
size: "$1",
|
|
70
|
+
color: "$yellow11",
|
|
71
|
+
children: "That time was just taken \u2014 pick another."
|
|
72
|
+
}) : null, m.slots.loading && m.availableKeys.size === 0 ? /* @__PURE__ */jsx(YStack, {
|
|
73
|
+
alignItems: "center",
|
|
74
|
+
padding: "$4",
|
|
75
|
+
children: /* @__PURE__ */jsx(Spinner, {
|
|
76
|
+
color: "$color9"
|
|
77
|
+
})
|
|
78
|
+
}) : m.availableKeys.size === 0 ? /* @__PURE__ */jsxs(SizableText, {
|
|
79
|
+
size: "$2",
|
|
80
|
+
color: "$color10",
|
|
81
|
+
children: ["No availability in ", formatMonthLabel(m.viewDate), "."]
|
|
82
|
+
}) : /* @__PURE__ */jsx(TimeSlots, {
|
|
83
|
+
dayKey: m.selectedDay,
|
|
84
|
+
slots: m.daySlots,
|
|
85
|
+
timeZone: m.timeZone,
|
|
86
|
+
onPick: m.selectSlot,
|
|
87
|
+
selectedIso: m.selectedSlot,
|
|
88
|
+
loading: m.slots.loading,
|
|
89
|
+
compact: true,
|
|
90
|
+
maxHeight: 220
|
|
91
|
+
})]
|
|
92
|
+
})
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
export { CalendarEmbed };
|
|
96
|
+
//# sourceMappingURL=CalendarEmbed.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SizableText","Spinner","YStack","BookingForm","Confirmation","EventHeader","TimeSlots","formatMonthLabel","useBooker","Fragment","jsx","jsxs","CalendarEmbed","props","m","autoSelectFirst","backgroundColor","borderColor","borderWidth","borderRadius","padding","gap","width","maxWidth","children","event","loading","alignItems","justifyContent","minHeight","size","color","error","data","fontWeight","textAlign","phase","booking","timeZone","onDone","reset","selectedSlot","slotIso","eventLength","length","submitting","onSubmit","submit","onBack","back","host","compact","conflict","slots","availableKeys","viewDate","dayKey","selectedDay","daySlots","onPick","selectSlot","selectedIso","maxHeight"],"sources":["../../src/CalendarEmbed.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,WAAA,EAAaC,OAAA,EAAiBC,MAAA,QAAc;AAErD,SAASC,WAAA,QAAmB;AAC5B,SAASC,YAAA,QAAoB;AAC7B,SAASC,WAAA,QAAmB;AAC5B,SAASC,SAAA,QAAiB;AAC1B,SAASC,gBAAA,QAAwB;AACjC,SAASC,SAAA,QAAiB;AAqChB,SA8BFC,QAAA,EA9BEC,GAAA,EAGFC,IAAA,QAHE;AAtBH,SAASC,cAAcC,KAAA,EAA2B;EACvD,MAAMC,CAAA,GAAIN,SAAA,CAAU;IAAE,GAAGK,KAAA;IAAOE,eAAA,EAAiB;EAAK,CAAC;EAEvD,OACE,eAAAL,GAAA,CAACR,MAAA;IACCc,eAAA,EAAgB;IAChBC,WAAA,EAAY;IACZC,WAAA,EAAa;IACbC,YAAA,EAAa;IACbC,OAAA,EAAQ;IACRC,GAAA,EAAI;IACJC,KAAA,EAAM;IACNC,QAAA,EAAU;IAETC,QAAA,EAAAV,CAAA,CAAEW,KAAA,CAAMC,OAAA,GACP,eAAAhB,GAAA,CAACR,MAAA;MACCyB,UAAA,EAAW;MACXC,cAAA,EAAe;MACfP,GAAA,EAAI;MACJD,OAAA,EAAQ;MACRS,SAAA,EAAW;MAEXL,QAAA,iBAAAd,GAAA,CAACT,OAAA;QAAQ6B,IAAA,EAAK;QAAQC,KAAA,EAAM;MAAA,CAAU;IAAA,CACxC,IACEjB,CAAA,CAAEW,KAAA,CAAMO,KAAA,IAAS,CAAClB,CAAA,CAAEW,KAAA,CAAMQ,IAAA,GAC5B,eAAAtB,IAAA,CAACT,MAAA;MACCyB,UAAA,EAAW;MACXC,cAAA,EAAe;MACfR,OAAA,EAAQ;MACRS,SAAA,EAAW;MACXR,GAAA,EAAI;MAEJG,QAAA,kBAAAd,GAAA,CAACV,WAAA;QAAY8B,IAAA,EAAK;QAAKI,UAAA,EAAW;QAAMH,KAAA,EAAM;QAAWP,QAAA;MAAA,CAEzD,GACA,eAAAd,GAAA,CAACV,WAAA;QAAY8B,IAAA,EAAK;QAAKC,KAAA,EAAM;QAAWI,SAAA,EAAU;QAC/CX,QAAA,EAAAV,CAAA,CAAEW,KAAA,CAAMO,KAAA,IAAS;MAAA,CACpB;IAAA,CACF,IACElB,CAAA,CAAEsB,KAAA,KAAU,UAAUtB,CAAA,CAAEuB,OAAA,GAC1B,eAAA3B,GAAA,CAACN,YAAA;MAAaiC,OAAA,EAASvB,CAAA,CAAEuB,OAAA;MAASC,QAAA,EAAUxB,CAAA,CAAEwB,QAAA;MAAUC,MAAA,EAAQzB,CAAA,CAAE0B;IAAA,CAAO,IACvE1B,CAAA,CAAEsB,KAAA,KAAU,UAAUtB,CAAA,CAAE2B,YAAA,GAC1B,eAAA/B,GAAA,CAACP,WAAA;MACCuC,OAAA,EAAS5B,CAAA,CAAE2B,YAAA;MACXH,QAAA,EAAUxB,CAAA,CAAEwB,QAAA;MACZK,WAAA,EAAa7B,CAAA,CAAEW,KAAA,CAAMQ,IAAA,CAAKW,MAAA;MAC1BC,UAAA,EAAY/B,CAAA,CAAE+B,UAAA;MACdb,KAAA,EAAOlB,CAAA,CAAEkB,KAAA;MACTc,QAAA,EAAUhC,CAAA,CAAEiC,MAAA;MACZC,MAAA,EAAQlC,CAAA,CAAEmC;IAAA,CACZ,IAEA,eAAAtC,IAAA,CAAAF,QAAA;MACEe,QAAA,kBAAAd,GAAA,CAACL,WAAA;QACCoB,KAAA,EAAOX,CAAA,CAAEW,KAAA,CAAMQ,IAAA;QACfiB,IAAA,EAAMrC,KAAA,CAAMqC,IAAA;QACZZ,QAAA,EAAUxB,CAAA,CAAEwB,QAAA;QACZa,OAAA,EAAO;MAAA,CACT,GACCrC,CAAA,CAAEsC,QAAA,GACD,eAAA1C,GAAA,CAACV,WAAA;QAAY8B,IAAA,EAAK;QAAKC,KAAA,EAAM;QAAYP,QAAA;MAAA,CAEzC,IACE,MACHV,CAAA,CAAEuC,KAAA,CAAM3B,OAAA,IAAWZ,CAAA,CAAEwC,aAAA,CAAcxB,IAAA,KAAS,IAC3C,eAAApB,GAAA,CAACR,MAAA;QAAOyB,UAAA,EAAW;QAASP,OAAA,EAAQ;QAClCI,QAAA,iBAAAd,GAAA,CAACT,OAAA;UAAQ8B,KAAA,EAAM;QAAA,CAAU;MAAA,CAC3B,IACEjB,CAAA,CAAEwC,aAAA,CAAcxB,IAAA,KAAS,IAC3B,eAAAnB,IAAA,CAACX,WAAA;QAAY8B,IAAA,EAAK;QAAKC,KAAA,EAAM;QAAWP,QAAA,0BAClBjB,gBAAA,CAAiBO,CAAA,CAAEyC,QAAQ,GAAE;MAAA,CACnD,IAEA,eAAA7C,GAAA,CAACJ,SAAA;QACCkD,MAAA,EAAQ1C,CAAA,CAAE2C,WAAA;QACVJ,KAAA,EAAOvC,CAAA,CAAE4C,QAAA;QACTpB,QAAA,EAAUxB,CAAA,CAAEwB,QAAA;QACZqB,MAAA,EAAQ7C,CAAA,CAAE8C,UAAA;QACVC,WAAA,EAAa/C,CAAA,CAAE2B,YAAA;QACff,OAAA,EAASZ,CAAA,CAAEuC,KAAA,CAAM3B,OAAA;QACjByB,OAAA,EAAO;QACPW,SAAA,EAAW;MAAA,CACb;IAAA,CAEJ;EAAA,CAEJ;AAEJ","ignoreList":[]}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { SizableText, Spinner, YStack } from "hanzogui";
|
|
3
|
+
import { BookingForm } from "./BookingForm.native.js";
|
|
4
|
+
import { Confirmation } from "./Confirmation.native.js";
|
|
5
|
+
import { EventHeader } from "./EventHeader.native.js";
|
|
6
|
+
import { TimeSlots } from "./TimeSlots.native.js";
|
|
7
|
+
import { formatMonthLabel } from "./time.native.js";
|
|
8
|
+
import { useBooker } from "./useBooker.native.js";
|
|
9
|
+
function CalendarEmbed(props) {
|
|
10
|
+
var m = useBooker({
|
|
11
|
+
...props,
|
|
12
|
+
autoSelectFirst: true
|
|
13
|
+
});
|
|
14
|
+
var _m_event_error;
|
|
15
|
+
return /* @__PURE__ */_jsx(YStack, {
|
|
16
|
+
backgroundColor: "$background",
|
|
17
|
+
borderColor: "$borderColor",
|
|
18
|
+
borderWidth: 1,
|
|
19
|
+
borderRadius: "$6",
|
|
20
|
+
padding: "$4",
|
|
21
|
+
gap: "$3",
|
|
22
|
+
width: "100%",
|
|
23
|
+
maxWidth: 420,
|
|
24
|
+
children: m.event.loading ? /* @__PURE__ */_jsx(YStack, {
|
|
25
|
+
alignItems: "center",
|
|
26
|
+
justifyContent: "center",
|
|
27
|
+
gap: "$2",
|
|
28
|
+
padding: "$6",
|
|
29
|
+
minHeight: 160,
|
|
30
|
+
children: /* @__PURE__ */_jsx(Spinner, {
|
|
31
|
+
size: "large",
|
|
32
|
+
color: "$color9"
|
|
33
|
+
})
|
|
34
|
+
}) : m.event.error || !m.event.data ? /* @__PURE__ */_jsxs(YStack, {
|
|
35
|
+
alignItems: "center",
|
|
36
|
+
justifyContent: "center",
|
|
37
|
+
padding: "$5",
|
|
38
|
+
minHeight: 140,
|
|
39
|
+
gap: "$1",
|
|
40
|
+
children: [/* @__PURE__ */_jsx(SizableText, {
|
|
41
|
+
size: "$4",
|
|
42
|
+
fontWeight: "600",
|
|
43
|
+
color: "$color12",
|
|
44
|
+
children: "Unavailable"
|
|
45
|
+
}), /* @__PURE__ */_jsx(SizableText, {
|
|
46
|
+
size: "$2",
|
|
47
|
+
color: "$color10",
|
|
48
|
+
textAlign: "center",
|
|
49
|
+
children: (_m_event_error = m.event.error) !== null && _m_event_error !== void 0 ? _m_event_error : "Event not found."
|
|
50
|
+
})]
|
|
51
|
+
}) : m.phase === "done" && m.booking ? /* @__PURE__ */_jsx(Confirmation, {
|
|
52
|
+
booking: m.booking,
|
|
53
|
+
timeZone: m.timeZone,
|
|
54
|
+
onDone: m.reset
|
|
55
|
+
}) : m.phase === "form" && m.selectedSlot ? /* @__PURE__ */_jsx(BookingForm, {
|
|
56
|
+
slotIso: m.selectedSlot,
|
|
57
|
+
timeZone: m.timeZone,
|
|
58
|
+
eventLength: m.event.data.length,
|
|
59
|
+
submitting: m.submitting,
|
|
60
|
+
error: m.error,
|
|
61
|
+
onSubmit: m.submit,
|
|
62
|
+
onBack: m.back
|
|
63
|
+
}) : /* @__PURE__ */_jsxs(_Fragment, {
|
|
64
|
+
children: [/* @__PURE__ */_jsx(EventHeader, {
|
|
65
|
+
event: m.event.data,
|
|
66
|
+
host: props.host,
|
|
67
|
+
timeZone: m.timeZone,
|
|
68
|
+
compact: true
|
|
69
|
+
}), m.conflict ? /* @__PURE__ */_jsx(SizableText, {
|
|
70
|
+
size: "$1",
|
|
71
|
+
color: "$yellow11",
|
|
72
|
+
children: "That time was just taken \u2014 pick another."
|
|
73
|
+
}) : null, m.slots.loading && m.availableKeys.size === 0 ? /* @__PURE__ */_jsx(YStack, {
|
|
74
|
+
alignItems: "center",
|
|
75
|
+
padding: "$4",
|
|
76
|
+
children: /* @__PURE__ */_jsx(Spinner, {
|
|
77
|
+
color: "$color9"
|
|
78
|
+
})
|
|
79
|
+
}) : m.availableKeys.size === 0 ? /* @__PURE__ */_jsxs(SizableText, {
|
|
80
|
+
size: "$2",
|
|
81
|
+
color: "$color10",
|
|
82
|
+
children: ["No availability in ", formatMonthLabel(m.viewDate), "."]
|
|
83
|
+
}) : /* @__PURE__ */_jsx(TimeSlots, {
|
|
84
|
+
dayKey: m.selectedDay,
|
|
85
|
+
slots: m.daySlots,
|
|
86
|
+
timeZone: m.timeZone,
|
|
87
|
+
onPick: m.selectSlot,
|
|
88
|
+
selectedIso: m.selectedSlot,
|
|
89
|
+
loading: m.slots.loading,
|
|
90
|
+
compact: true,
|
|
91
|
+
maxHeight: 220
|
|
92
|
+
})]
|
|
93
|
+
})
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
export { CalendarEmbed };
|
|
97
|
+
//# sourceMappingURL=CalendarEmbed.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","SizableText","Spinner","YStack","BookingForm","Confirmation","EventHeader","TimeSlots","formatMonthLabel","useBooker","CalendarEmbed","props","m","autoSelectFirst","_m_event_error","backgroundColor","borderColor","borderWidth","borderRadius","padding","gap","width","maxWidth","children","event","loading","alignItems","justifyContent","minHeight","size","color","error","data","fontWeight","textAlign","phase","booking","timeZone","onDone","reset","selectedSlot","slotIso","eventLength","length","submitting","onSubmit","submit","onBack","back","host","compact","conflict","slots","availableKeys"],"sources":["../../src/CalendarEmbed.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { Button, Paragraph, Separator, SizableText, Spinner, XStack, YStack } from "hanzogui";
|
|
2
|
+
import { DEFAULT_API_URL } from "./client.mjs";
|
|
3
|
+
import { useBooking } from "./hooks.mjs";
|
|
4
|
+
import { visitorTimeZone } from "./time.mjs";
|
|
5
|
+
import { formatBookingWhen } from "./time.mjs";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
function Confirmation({
|
|
8
|
+
booking,
|
|
9
|
+
uid,
|
|
10
|
+
apiUrl,
|
|
11
|
+
timeZone,
|
|
12
|
+
onDone
|
|
13
|
+
}) {
|
|
14
|
+
const api = apiUrl ?? DEFAULT_API_URL;
|
|
15
|
+
const tz = timeZone ?? visitorTimeZone();
|
|
16
|
+
const fetched = useBooking(api, booking ? void 0 : uid);
|
|
17
|
+
const data = booking ?? fetched.data;
|
|
18
|
+
if (!data && fetched.loading) {
|
|
19
|
+
return /* @__PURE__ */jsxs(YStack, {
|
|
20
|
+
alignItems: "center",
|
|
21
|
+
justifyContent: "center",
|
|
22
|
+
padding: "$6",
|
|
23
|
+
gap: "$3",
|
|
24
|
+
minHeight: 200,
|
|
25
|
+
children: [/* @__PURE__ */jsx(Spinner, {
|
|
26
|
+
size: "large",
|
|
27
|
+
color: "$color9"
|
|
28
|
+
}), /* @__PURE__ */jsx(SizableText, {
|
|
29
|
+
size: "$3",
|
|
30
|
+
color: "$color10",
|
|
31
|
+
children: "Loading your booking\u2026"
|
|
32
|
+
})]
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
if (!data) {
|
|
36
|
+
return /* @__PURE__ */jsxs(YStack, {
|
|
37
|
+
alignItems: "center",
|
|
38
|
+
justifyContent: "center",
|
|
39
|
+
padding: "$6",
|
|
40
|
+
gap: "$2",
|
|
41
|
+
minHeight: 200,
|
|
42
|
+
children: [/* @__PURE__ */jsx(SizableText, {
|
|
43
|
+
size: "$4",
|
|
44
|
+
fontWeight: "600",
|
|
45
|
+
color: "$color12",
|
|
46
|
+
children: "Booking not found"
|
|
47
|
+
}), /* @__PURE__ */jsx(SizableText, {
|
|
48
|
+
size: "$3",
|
|
49
|
+
color: "$color10",
|
|
50
|
+
textAlign: "center",
|
|
51
|
+
children: fetched.error ?? "We could not load this booking."
|
|
52
|
+
})]
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
const attendee = data.attendees?.[0];
|
|
56
|
+
const location = data.location;
|
|
57
|
+
return /* @__PURE__ */jsxs(YStack, {
|
|
58
|
+
gap: "$3",
|
|
59
|
+
padding: "$1",
|
|
60
|
+
alignItems: "center",
|
|
61
|
+
children: [/* @__PURE__ */jsx(YStack, {
|
|
62
|
+
width: 52,
|
|
63
|
+
height: 52,
|
|
64
|
+
borderRadius: 9999,
|
|
65
|
+
backgroundColor: "$green4",
|
|
66
|
+
alignItems: "center",
|
|
67
|
+
justifyContent: "center",
|
|
68
|
+
children: /* @__PURE__ */jsx(SizableText, {
|
|
69
|
+
size: "$8",
|
|
70
|
+
color: "$green11",
|
|
71
|
+
children: "\u2713"
|
|
72
|
+
})
|
|
73
|
+
}), /* @__PURE__ */jsxs(YStack, {
|
|
74
|
+
gap: "$1",
|
|
75
|
+
alignItems: "center",
|
|
76
|
+
children: [/* @__PURE__ */jsx(SizableText, {
|
|
77
|
+
size: "$7",
|
|
78
|
+
fontWeight: "700",
|
|
79
|
+
color: "$color12",
|
|
80
|
+
textAlign: "center",
|
|
81
|
+
children: "You're booked"
|
|
82
|
+
}), /* @__PURE__ */jsx(SizableText, {
|
|
83
|
+
size: "$4",
|
|
84
|
+
color: "$color11",
|
|
85
|
+
textAlign: "center",
|
|
86
|
+
children: data.title
|
|
87
|
+
})]
|
|
88
|
+
}), /* @__PURE__ */jsx(Separator, {
|
|
89
|
+
width: "100%"
|
|
90
|
+
}), /* @__PURE__ */jsxs(YStack, {
|
|
91
|
+
gap: "$2.5",
|
|
92
|
+
width: "100%",
|
|
93
|
+
maxWidth: 420,
|
|
94
|
+
children: [/* @__PURE__ */jsx(Row, {
|
|
95
|
+
label: "When",
|
|
96
|
+
value: formatBookingWhen(data.start, tz)
|
|
97
|
+
}), location ? /* @__PURE__ */jsx(Row, {
|
|
98
|
+
label: "Where",
|
|
99
|
+
value: location
|
|
100
|
+
}) : null, attendee?.email ? /* @__PURE__ */jsx(Row, {
|
|
101
|
+
label: "Guest",
|
|
102
|
+
value: attendee.email
|
|
103
|
+
}) : null, /* @__PURE__ */jsx(Row, {
|
|
104
|
+
label: "Status",
|
|
105
|
+
value: titleCase(data.status)
|
|
106
|
+
}), /* @__PURE__ */jsx(Row, {
|
|
107
|
+
label: "Reference",
|
|
108
|
+
value: data.uid
|
|
109
|
+
})]
|
|
110
|
+
}), /* @__PURE__ */jsxs(Paragraph, {
|
|
111
|
+
size: "$2",
|
|
112
|
+
color: "$color10",
|
|
113
|
+
textAlign: "center",
|
|
114
|
+
marginTop: "$1",
|
|
115
|
+
children: ["A calendar invite is on its way to ", attendee?.email ?? "your inbox", "."]
|
|
116
|
+
}), onDone ? /* @__PURE__ */jsx(Button, {
|
|
117
|
+
size: "$3",
|
|
118
|
+
chromeless: true,
|
|
119
|
+
onPress: onDone,
|
|
120
|
+
marginTop: "$1",
|
|
121
|
+
children: "Book another time"
|
|
122
|
+
}) : null]
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
function Row({
|
|
126
|
+
label,
|
|
127
|
+
value
|
|
128
|
+
}) {
|
|
129
|
+
return /* @__PURE__ */jsxs(XStack, {
|
|
130
|
+
justifyContent: "space-between",
|
|
131
|
+
gap: "$3",
|
|
132
|
+
alignItems: "flex-start",
|
|
133
|
+
children: [/* @__PURE__ */jsx(SizableText, {
|
|
134
|
+
size: "$3",
|
|
135
|
+
color: "$color10",
|
|
136
|
+
children: label
|
|
137
|
+
}), /* @__PURE__ */jsx(SizableText, {
|
|
138
|
+
size: "$3",
|
|
139
|
+
color: "$color12",
|
|
140
|
+
fontWeight: "500",
|
|
141
|
+
textAlign: "right",
|
|
142
|
+
flexShrink: 1,
|
|
143
|
+
children: value
|
|
144
|
+
})]
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
function titleCase(s) {
|
|
148
|
+
if (!s) return "";
|
|
149
|
+
return s.charAt(0).toUpperCase() + s.slice(1).toLowerCase();
|
|
150
|
+
}
|
|
151
|
+
export { Confirmation };
|
|
152
|
+
//# sourceMappingURL=Confirmation.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Button","Paragraph","Separator","SizableText","Spinner","XStack","YStack","DEFAULT_API_URL","useBooking","visitorTimeZone","formatBookingWhen","jsx","jsxs","Confirmation","booking","uid","apiUrl","timeZone","onDone","api","tz","fetched","data","loading","alignItems","justifyContent","padding","gap","minHeight","children","size","color","fontWeight","textAlign","error","attendee","attendees","location","width","height","borderRadius","backgroundColor","title","maxWidth","Row","label","value","start","email","titleCase","status","marginTop","chromeless","onPress","flexShrink","s","charAt","toUpperCase","slice","toLowerCase"],"sources":["../../src/Confirmation.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|