@sikka/hawa 0.1.1 → 0.1.2

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.
@@ -8,6 +8,14 @@ import {
8
8
  import { Controller, FormProvider, useForm } from "react-hook-form"
9
9
  import { HawaContainer } from "../../layout"
10
10
  import countries from "../../countries"
11
+ import {
12
+ Card,
13
+ CardContent,
14
+ CardFooter,
15
+ CardHeader,
16
+ CardTitle,
17
+ } from "../../elements/Card"
18
+ import { Button } from "../../elements/Button"
11
19
 
12
20
  type CheckoutFormTypes = {
13
21
  lang: string
@@ -58,203 +66,206 @@ export const CheckoutForm: FC<CheckoutFormTypes> = (props) => {
58
66
  },
59
67
  }
60
68
  return (
61
- <HawaContainer>
62
- <div>
63
- <div className="mb-2 text-center text-xl font-semibold dark:text-white">
64
- {props.texts.orderDetails}
65
- </div>
66
- <div className="rounded border border-gray-300">
67
- <HawaTable
68
- pagination={false}
69
- direction={isArabic ? "rtl" : "ltr"}
70
- columns={[
71
- { hidden: false, value: "Product" },
72
- { hidden: true, value: "ID" },
73
- { hidden: false, value: "Price" },
74
- ]}
75
- borders="inner"
76
- rows={props.products}
77
- bordersWidth="1"
78
- />
79
- </div>
80
- </div>
81
- <div>
82
- <div className="my-2 text-center text-xl font-semibold dark:text-white">
83
- {props.texts.billingAddress}
69
+ <Card>
70
+ <CardHeader>
71
+ <CardTitle>{props.texts.orderDetails}</CardTitle>
72
+ </CardHeader>
73
+ <CardContent>
74
+ <div>
75
+ <div className="rounded border border-gray-300">
76
+ <HawaTable
77
+ pagination={false}
78
+ direction={isArabic ? "rtl" : "ltr"}
79
+ columns={[
80
+ { hidden: false, value: "Product" },
81
+ { hidden: true, value: "ID" },
82
+ { hidden: false, value: "Price" },
83
+ ]}
84
+ borders="inner"
85
+ rows={props.products}
86
+ bordersWidth="1"
87
+ />
88
+ </div>
84
89
  </div>
90
+ </CardContent>
91
+ <CardHeader>
92
+ <CardTitle>{props.texts.billingAddress}</CardTitle>
93
+ </CardHeader>
94
+ <form onSubmit={handleSubmit(props.handlePayNow)}>
95
+ <CardContent>
96
+ <div>
97
+ <FormProvider {...methods}>
98
+ <div>
99
+ <Controller
100
+ control={control}
101
+ name="firstName"
102
+ rules={{ required: props.texts?.required }}
103
+ render={({ field }) => (
104
+ <HawaTextField
105
+ type="text"
106
+ label={props.texts?.firstNameLabel + " *"}
107
+ helpertext={errors.firstName?.message}
108
+ {...field}
109
+ value={field.value ?? ""}
110
+ />
111
+ )}
112
+ />
113
+ <div style={{ width: 20 }} />
85
114
 
86
- <FormProvider {...methods}>
87
- <form onSubmit={handleSubmit(props.handlePayNow)}>
88
- <div>
89
- <Controller
90
- control={control}
91
- name="firstName"
92
- rules={{ required: props.texts?.required }}
93
- render={({ field }) => (
94
- <HawaTextField
95
- type="text"
96
- label={props.texts?.firstNameLabel + " *"}
97
- helpertext={errors.firstName?.message}
98
- {...field}
99
- value={field.value ?? ""}
100
- />
101
- )}
102
- />
103
- <div style={{ width: 20 }} />
104
-
105
- <Controller
106
- control={control}
107
- name="lastName"
108
- rules={{ required: props.texts?.required }}
109
- render={({ field }) => (
110
- <HawaTextField
111
- width="full"
112
- type="text"
113
- label={props.texts?.lastNameLabel + " *"}
114
- helpertext={errors.lastName?.message}
115
- {...field}
116
- value={field.value ?? ""}
117
- />
118
- )}
119
- />
120
- </div>
121
- <Controller
122
- control={control}
123
- name="email"
124
- render={({ field }) => (
125
- <HawaTextField
126
- width="full"
127
- type="text"
128
- label={props.texts?.emailLabel + " *"}
129
- helpertext={errors.email?.message}
130
- {...field}
131
- value={field.value ?? ""}
115
+ <Controller
116
+ control={control}
117
+ name="lastName"
118
+ rules={{ required: props.texts?.required }}
119
+ render={({ field }) => (
120
+ <HawaTextField
121
+ width="full"
122
+ type="text"
123
+ label={props.texts?.lastNameLabel + " *"}
124
+ helpertext={errors.lastName?.message}
125
+ {...field}
126
+ value={field.value ?? ""}
127
+ />
128
+ )}
132
129
  />
133
- )}
134
- rules={{
135
- required: props.texts?.emailRequiredText,
136
- pattern: {
137
- value:
138
- /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
139
- message: props.texts?.emailInvalidText,
140
- },
141
- }}
142
- />
143
- <div className="flex flex-col md:flex-row">
130
+ </div>
144
131
  <Controller
145
132
  control={control}
146
- name="streetAddress"
147
- rules={{ required: props.texts?.required }}
133
+ name="email"
148
134
  render={({ field }) => (
149
135
  <HawaTextField
150
136
  width="full"
151
137
  type="text"
152
- label={props.texts?.streetAddressLabel + " *"}
153
- helpertext={errors.streetAddress?.message}
138
+ label={props.texts?.emailLabel + " *"}
139
+ helpertext={errors.email?.message}
154
140
  {...field}
155
141
  value={field.value ?? ""}
156
142
  />
157
143
  )}
144
+ rules={{
145
+ required: props.texts?.emailRequiredText,
146
+ pattern: {
147
+ value:
148
+ /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
149
+ message: props.texts?.emailInvalidText,
150
+ },
151
+ }}
158
152
  />
159
- </div>
153
+ <div className="flex flex-col md:flex-row">
154
+ <Controller
155
+ control={control}
156
+ name="streetAddress"
157
+ rules={{ required: props.texts?.required }}
158
+ render={({ field }) => (
159
+ <HawaTextField
160
+ width="full"
161
+ type="text"
162
+ label={props.texts?.streetAddressLabel + " *"}
163
+ helpertext={errors.streetAddress?.message}
164
+ {...field}
165
+ value={field.value ?? ""}
166
+ />
167
+ )}
168
+ />
169
+ </div>
160
170
 
161
- <div className="flex flex-col md:flex-row">
162
- <Controller
163
- control={control}
164
- name="province"
165
- rules={{ required: props.texts?.required }}
166
- render={({ field }) => (
167
- <HawaTextField
168
- width="full"
169
- type="text"
170
- label={props.texts?.stateLabel + " *"}
171
- helpertext={errors.province?.message}
172
- {...field}
173
- value={field.value ?? ""}
174
- />
175
- )}
176
- />
177
- <div style={{ width: 20 }} />
171
+ <div className="flex flex-col md:flex-row">
172
+ <Controller
173
+ control={control}
174
+ name="province"
175
+ rules={{ required: props.texts?.required }}
176
+ render={({ field }) => (
177
+ <HawaTextField
178
+ width="full"
179
+ type="text"
180
+ label={props.texts?.stateLabel + " *"}
181
+ helpertext={errors.province?.message}
182
+ {...field}
183
+ value={field.value ?? ""}
184
+ />
185
+ )}
186
+ />
187
+ <div style={{ width: 20 }} />
178
188
 
179
- <Controller
180
- control={control}
181
- name="city"
182
- rules={{ required: props.texts?.required }}
183
- render={({ field }) => (
184
- <HawaTextField
185
- width="full"
186
- type="text"
187
- label={props.texts?.cityLabel + " *"}
188
- helpertext={errors.city?.message}
189
- {...field}
190
- value={field.value ?? ""}
191
- />
192
- )}
193
- />
194
- </div>
195
- <div className="flex flex-col md:flex-row">
196
- <Controller
197
- control={control}
198
- name="buildingNumber"
199
- rules={{ required: props.texts?.required }}
200
- render={({ field }) => (
201
- <HawaTextField
202
- width="full"
203
- type="text"
204
- label={props.texts?.buildingNumberLabel + " *"}
205
- helpertext={errors.buildingNumber?.message}
206
- {...field}
207
- value={field.value ?? ""}
208
- />
209
- )}
210
- />
211
- <div style={{ width: 20 }} />
212
- <Controller
213
- control={control}
214
- name="zipCode"
215
- rules={{ required: props.texts?.required }}
216
- render={({ field }) => (
217
- <HawaTextField
218
- width="full"
219
- type="number"
220
- label={props.texts?.zipCodeLabel + " *"}
221
- helpertext={errors.zipCode?.message}
222
- {...field}
223
- value={field.value ?? ""}
224
- />
225
- )}
226
- />
227
- {/* <div style={{ width: 20 }} /> */}
228
- </div>
229
- <div className="mb-3">
230
- <Controller
231
- control={control}
232
- name="country"
233
- rules={{ required: props.texts?.required }}
234
- render={({ field }) => (
235
- <HawaSelect
236
- native
237
- label={props.texts?.countryLabel + " *"}
238
- helperText={errors.country?.message}
239
- options={countries}
240
- getOptionLabel={(countries) => countries.country_label}
241
- onChange={(e) => field.onChange(e.country_label)}
242
- value={field.value ?? ""}
243
- >
244
- <option></option>
245
- {props.countriesList.map((country: any, i: any) => (
246
- <option key={i}>{country}</option>
247
- ))}
248
- </HawaSelect>
249
- )}
250
- />
251
- </div>
252
- <HawaButton color="primary" width="full">
253
- {props.texts.payNow}
254
- </HawaButton>
255
- </form>
256
- </FormProvider>
257
- </div>
258
- </HawaContainer>
189
+ <Controller
190
+ control={control}
191
+ name="city"
192
+ rules={{ required: props.texts?.required }}
193
+ render={({ field }) => (
194
+ <HawaTextField
195
+ width="full"
196
+ type="text"
197
+ label={props.texts?.cityLabel + " *"}
198
+ helpertext={errors.city?.message}
199
+ {...field}
200
+ value={field.value ?? ""}
201
+ />
202
+ )}
203
+ />
204
+ </div>
205
+ <div className="flex flex-col md:flex-row">
206
+ <Controller
207
+ control={control}
208
+ name="buildingNumber"
209
+ rules={{ required: props.texts?.required }}
210
+ render={({ field }) => (
211
+ <HawaTextField
212
+ width="full"
213
+ type="text"
214
+ label={props.texts?.buildingNumberLabel + " *"}
215
+ helpertext={errors.buildingNumber?.message}
216
+ {...field}
217
+ value={field.value ?? ""}
218
+ />
219
+ )}
220
+ />
221
+ <div style={{ width: 20 }} />
222
+ <Controller
223
+ control={control}
224
+ name="zipCode"
225
+ rules={{ required: props.texts?.required }}
226
+ render={({ field }) => (
227
+ <HawaTextField
228
+ width="full"
229
+ type="number"
230
+ label={props.texts?.zipCodeLabel + " *"}
231
+ helpertext={errors.zipCode?.message}
232
+ {...field}
233
+ value={field.value ?? ""}
234
+ />
235
+ )}
236
+ />
237
+ {/* <div style={{ width: 20 }} /> */}
238
+ </div>
239
+ <div className="mb-3">
240
+ <Controller
241
+ control={control}
242
+ name="country"
243
+ rules={{ required: props.texts?.required }}
244
+ render={({ field }) => (
245
+ <HawaSelect
246
+ native
247
+ label={props.texts?.countryLabel + " *"}
248
+ helperText={errors.country?.message}
249
+ options={countries}
250
+ getOptionLabel={(countries) => countries.country_label}
251
+ onChange={(e) => field.onChange(e.country_label)}
252
+ value={field.value ?? ""}
253
+ >
254
+ <option></option>
255
+ {props.countriesList.map((country: any, i: any) => (
256
+ <option key={i}>{country}</option>
257
+ ))}
258
+ </HawaSelect>
259
+ )}
260
+ />
261
+ </div>
262
+ </FormProvider>
263
+ </div>
264
+ </CardContent>
265
+ <CardFooter>
266
+ <Button className="w-full">{props.texts.payNow}</Button>
267
+ </CardFooter>{" "}
268
+ </form>
269
+ </Card>
259
270
  )
260
271
  }
@@ -2,6 +2,8 @@ import React, { FC } from "react"
2
2
  import { HawaButton, HawaTextField } from "../../elements"
3
3
  import { Controller, useForm } from "react-hook-form"
4
4
  import { HawaContainer } from "../../layout"
5
+ import { Card, CardContent, CardFooter } from "../../elements/Card"
6
+ import { Button } from "../../elements/Button"
5
7
 
6
8
  type CreditCardFormTypes = {
7
9
  handle: any
@@ -17,28 +19,10 @@ export const CreditCardForm: FC<CreditCardFormTypes> = (props) => {
17
19
  } = methods
18
20
 
19
21
  return (
20
- <HawaContainer>
21
- {" "}
22
+ <Card>
22
23
  <form onSubmit={handleSubmit(props.handle)}>
23
- <div className="flex flex-row gap-4">
24
- <Controller
25
- control={control}
26
- name="cardName"
27
- render={({ field }) => (
28
- <HawaTextField
29
- width="full"
30
- name="password"
31
- placeholder="Enter password"
32
- type="tel"
33
- label="Card Number"
34
- helpertext={errors.password?.message}
35
- />
36
- )}
37
- rules={{
38
- required: "Password is rquired",
39
- }}
40
- />
41
- <div className="w-1/4">
24
+ <CardContent headless>
25
+ <div className="flex flex-row gap-4">
42
26
  <Controller
43
27
  control={control}
44
28
  name="cardName"
@@ -46,11 +30,9 @@ export const CreditCardForm: FC<CreditCardFormTypes> = (props) => {
46
30
  <HawaTextField
47
31
  width="full"
48
32
  name="password"
49
- maxLength="3"
50
- autoComplete="cc-number"
51
- placeholder=""
52
- type="password"
53
- label="CCV"
33
+ placeholder="Enter password"
34
+ type="tel"
35
+ label="Card Number"
54
36
  helpertext={errors.password?.message}
55
37
  />
56
38
  )}
@@ -58,52 +40,69 @@ export const CreditCardForm: FC<CreditCardFormTypes> = (props) => {
58
40
  required: "Password is rquired",
59
41
  }}
60
42
  />
43
+ <div className="w-1/4">
44
+ <Controller
45
+ control={control}
46
+ name="cardName"
47
+ render={({ field }) => (
48
+ <HawaTextField
49
+ width="full"
50
+ name="password"
51
+ maxLength="3"
52
+ autoComplete="cc-number"
53
+ placeholder=""
54
+ type="password"
55
+ label="CCV"
56
+ helpertext={errors.password?.message}
57
+ />
58
+ )}
59
+ rules={{
60
+ required: "Password is rquired",
61
+ }}
62
+ />
63
+ </div>
61
64
  </div>
62
- </div>
63
- <Controller
64
- control={control}
65
- name="cardName"
66
- render={({ field }) => (
67
- <HawaTextField
68
- width="full"
69
- name="password"
70
- placeholder="Enter password"
71
- type="text"
72
- label="Name On Card"
73
- helpertext={errors.password?.message}
74
- />
75
- )}
76
- rules={{
77
- required: "Password is rquired",
78
- }}
79
- />
80
- <Controller
81
- control={control}
82
- name="cardName"
83
- render={({ field }) => (
84
- <HawaTextField
85
- width="full"
86
- name="password"
87
- placeholder="Enter password"
88
- type="password"
89
- label="Expiry Date"
90
- helpertext={errors.password?.message}
91
- />
92
- )}
93
- rules={{
94
- required: "Password is rquired",
95
- }}
96
- />
97
-
98
- <HawaButton
99
- // type="submit"
100
- width="full"
101
- color="primary"
102
- onClick={props.handlePayWithCreditCard}
103
- >
104
- Pay with Credit Card
105
- </HawaButton>
65
+ <Controller
66
+ control={control}
67
+ name="cardName"
68
+ render={({ field }) => (
69
+ <HawaTextField
70
+ width="full"
71
+ name="password"
72
+ placeholder="Enter password"
73
+ type="text"
74
+ label="Name On Card"
75
+ helpertext={errors.password?.message}
76
+ />
77
+ )}
78
+ rules={{
79
+ required: "Password is rquired",
80
+ }}
81
+ />
82
+ <Controller
83
+ control={control}
84
+ name="cardName"
85
+ render={({ field }) => (
86
+ <HawaTextField
87
+ width="full"
88
+ name="password"
89
+ placeholder="Enter password"
90
+ type="password"
91
+ label="Expiry Date"
92
+ helpertext={errors.password?.message}
93
+ />
94
+ )}
95
+ rules={{
96
+ required: "Password is rquired",
97
+ }}
98
+ />
99
+ </CardContent>
100
+ <CardFooter>
101
+ <Button className="w-full" onClick={props.handlePayWithCreditCard}>
102
+ Pay with Credit Card
103
+ </Button>
104
+ </CardFooter>
106
105
  </form>
107
- </HawaContainer>
106
+ </Card>
108
107
  )
109
108
  }