@seamapi/react 1.41.0 → 1.42.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.
Files changed (82) hide show
  1. package/README.md +1 -1
  2. package/dist/elements.js +5008 -4833
  3. package/dist/elements.js.map +1 -1
  4. package/dist/index.css +10 -1
  5. package/dist/index.css.map +1 -1
  6. package/dist/index.min.css +1 -1
  7. package/dist/index.min.css.map +1 -1
  8. package/lib/dates.d.ts +8 -0
  9. package/lib/dates.js +8 -0
  10. package/lib/dates.js.map +1 -1
  11. package/lib/seam/access-codes/use-update-access-code.d.ts +6 -0
  12. package/lib/seam/access-codes/use-update-access-code.js +22 -0
  13. package/lib/seam/access-codes/use-update-access-code.js.map +1 -0
  14. package/lib/seam/components/AccessCodeDetails/AccessCodeDetails.d.ts +2 -1
  15. package/lib/seam/components/AccessCodeDetails/AccessCodeDetails.js +5 -2
  16. package/lib/seam/components/AccessCodeDetails/AccessCodeDetails.js.map +1 -1
  17. package/lib/seam/components/AccessCodeTable/AccessCodeTable.js +34 -18
  18. package/lib/seam/components/AccessCodeTable/AccessCodeTable.js.map +1 -1
  19. package/lib/seam/components/CreateAccessCodeForm/CreateAccessCodeForm.d.ts +7 -0
  20. package/lib/seam/components/CreateAccessCodeForm/CreateAccessCodeForm.js +49 -0
  21. package/lib/seam/components/CreateAccessCodeForm/CreateAccessCodeForm.js.map +1 -0
  22. package/lib/seam/components/EditAccessCodeForm/EditAccessCodeForm.d.ts +7 -0
  23. package/lib/seam/components/EditAccessCodeForm/EditAccessCodeForm.js +60 -0
  24. package/lib/seam/components/EditAccessCodeForm/EditAccessCodeForm.js.map +1 -0
  25. package/lib/seam/components/SupportedDeviceTable/FilterCategoryMenu.js +1 -1
  26. package/lib/seam/components/SupportedDeviceTable/FilterCategoryMenu.js.map +1 -1
  27. package/lib/seam/components/SupportedDeviceTable/SupportedDeviceContent.d.ts +1 -1
  28. package/lib/seam/components/SupportedDeviceTable/SupportedDeviceContent.js +1 -5
  29. package/lib/seam/components/SupportedDeviceTable/SupportedDeviceContent.js.map +1 -1
  30. package/lib/seam/components/SupportedDeviceTable/SupportedDeviceFilterArea.d.ts +1 -1
  31. package/lib/seam/components/SupportedDeviceTable/SupportedDeviceFilterArea.js +25 -16
  32. package/lib/seam/components/SupportedDeviceTable/SupportedDeviceFilterArea.js.map +1 -1
  33. package/lib/seam/components/SupportedDeviceTable/SupportedDeviceTable.d.ts +1 -1
  34. package/lib/seam/components/SupportedDeviceTable/SupportedDeviceTable.js +2 -3
  35. package/lib/seam/components/SupportedDeviceTable/SupportedDeviceTable.js.map +1 -1
  36. package/lib/seam/components/SupportedDeviceTable/use-filtered-device-models.d.ts +1 -2
  37. package/lib/seam/components/SupportedDeviceTable/use-filtered-device-models.js +7 -8
  38. package/lib/seam/components/SupportedDeviceTable/use-filtered-device-models.js.map +1 -1
  39. package/lib/ui/AccessCodeForm/AccessCodeForm.d.ts +21 -0
  40. package/lib/ui/AccessCodeForm/AccessCodeForm.js +97 -0
  41. package/lib/ui/AccessCodeForm/AccessCodeForm.js.map +1 -0
  42. package/lib/{seam/components → ui}/AccessCodeForm/AccessCodeFormDatePicker.js +6 -6
  43. package/lib/ui/AccessCodeForm/AccessCodeFormDatePicker.js.map +1 -0
  44. package/lib/{seam/components → ui}/AccessCodeForm/AccessCodeFormTimes.js +3 -3
  45. package/lib/ui/AccessCodeForm/AccessCodeFormTimes.js.map +1 -0
  46. package/lib/{seam/components → ui}/AccessCodeForm/AccessCodeFormTimezonePicker.js +4 -4
  47. package/lib/ui/AccessCodeForm/AccessCodeFormTimezonePicker.js.map +1 -0
  48. package/lib/version.d.ts +1 -1
  49. package/lib/version.js +1 -1
  50. package/package.json +3 -3
  51. package/src/lib/dates.ts +10 -0
  52. package/src/lib/seam/access-codes/use-update-access-code.ts +46 -0
  53. package/src/lib/seam/components/AccessCodeDetails/AccessCodeDetails.element.ts +1 -0
  54. package/src/lib/seam/components/AccessCodeDetails/AccessCodeDetails.tsx +14 -1
  55. package/src/lib/seam/components/AccessCodeTable/AccessCodeTable.tsx +62 -13
  56. package/src/lib/seam/components/CreateAccessCodeForm/CreateAccessCodeForm.element.ts +12 -0
  57. package/src/lib/seam/components/CreateAccessCodeForm/CreateAccessCodeForm.tsx +94 -0
  58. package/src/lib/seam/components/EditAccessCodeForm/EditAccessCodeForm.element.ts +12 -0
  59. package/src/lib/seam/components/EditAccessCodeForm/EditAccessCodeForm.tsx +117 -0
  60. package/src/lib/seam/components/SupportedDeviceTable/FilterCategoryMenu.tsx +1 -1
  61. package/src/lib/seam/components/SupportedDeviceTable/SupportedDeviceContent.tsx +3 -7
  62. package/src/lib/seam/components/SupportedDeviceTable/SupportedDeviceFilterArea.tsx +29 -30
  63. package/src/lib/seam/components/SupportedDeviceTable/SupportedDeviceTable.tsx +3 -4
  64. package/src/lib/seam/components/SupportedDeviceTable/use-filtered-device-models.ts +10 -14
  65. package/src/lib/{seam/components → ui}/AccessCodeForm/AccessCodeForm.tsx +86 -84
  66. package/src/lib/version.ts +1 -1
  67. package/src/styles/_access-code-details.scss +5 -0
  68. package/src/styles/_access-code-table.scss +1 -1
  69. package/src/styles/_menus.scss +6 -0
  70. package/lib/seam/components/AccessCodeForm/AccessCodeForm.d.ts +0 -7
  71. package/lib/seam/components/AccessCodeForm/AccessCodeForm.js +0 -106
  72. package/lib/seam/components/AccessCodeForm/AccessCodeForm.js.map +0 -1
  73. package/lib/seam/components/AccessCodeForm/AccessCodeFormDatePicker.js.map +0 -1
  74. package/lib/seam/components/AccessCodeForm/AccessCodeFormTimes.js.map +0 -1
  75. package/lib/seam/components/AccessCodeForm/AccessCodeFormTimezonePicker.js.map +0 -1
  76. package/src/lib/seam/components/AccessCodeForm/AccessCodeForm.element.ts +0 -12
  77. /package/lib/{seam/components → ui}/AccessCodeForm/AccessCodeFormDatePicker.d.ts +0 -0
  78. /package/lib/{seam/components → ui}/AccessCodeForm/AccessCodeFormTimes.d.ts +0 -0
  79. /package/lib/{seam/components → ui}/AccessCodeForm/AccessCodeFormTimezonePicker.d.ts +0 -0
  80. /package/src/lib/{seam/components → ui}/AccessCodeForm/AccessCodeFormDatePicker.tsx +0 -0
  81. /package/src/lib/{seam/components → ui}/AccessCodeForm/AccessCodeFormTimes.tsx +0 -0
  82. /package/src/lib/{seam/components → ui}/AccessCodeForm/AccessCodeFormTimezonePicker.tsx +0 -0
@@ -1,5 +1,4 @@
1
1
  import type { Dispatch, SetStateAction } from 'react'
2
- import type { DeviceModel } from 'seamapi'
3
2
 
4
3
  import { FilterCategoryMenu } from 'lib/seam/components/SupportedDeviceTable/FilterCategoryMenu.js'
5
4
  import type { DeviceModelFilters } from 'lib/seam/components/SupportedDeviceTable/use-filtered-device-models.js'
@@ -14,7 +13,7 @@ interface SupportedDeviceFilterAreaProps {
14
13
  setFilterValue: (filter: string) => void
15
14
  filters: DeviceModelFilters
16
15
  setFilters: Dispatch<SetStateAction<DeviceModelFilters>>
17
- brands: string[]
16
+ brands: string[] | null
18
17
  }
19
18
 
20
19
  export function SupportedDeviceFilterArea({
@@ -24,12 +23,9 @@ export function SupportedDeviceFilterArea({
24
23
  setFilters,
25
24
  brands,
26
25
  }: SupportedDeviceFilterAreaProps): JSX.Element {
27
- const appliedFiltersCount = Object.values(filters).filter(
28
- (v) => v != null && v !== false
29
- ).length
26
+ const appliedFiltersCount = getAppliedFilterCount(filters)
30
27
 
31
- const filterProperty = 'brand'
32
- const availableProperties = useAvailableProperties(filterProperty, { brands })
28
+ const availableBrands = useAvailableBrands(brands)
33
29
 
34
30
  const resetFilter = (filterType: keyof DeviceModelFilters): void => {
35
31
  setFilters((filters) => ({
@@ -68,7 +64,7 @@ export function SupportedDeviceFilterArea({
68
64
  <FilterCategoryMenu
69
65
  label={t.brand}
70
66
  allLabel={allLabel}
71
- options={availableProperties}
67
+ options={availableBrands}
72
68
  onSelect={(brand: string) => {
73
69
  setFilters((filters) => ({
74
70
  ...filters,
@@ -77,7 +73,7 @@ export function SupportedDeviceFilterArea({
77
73
  }}
78
74
  buttonLabel={filters.brand ?? allLabel}
79
75
  onAllOptionSelect={() => {
80
- resetFilter(filterProperty)
76
+ resetFilter('brand')
81
77
  }}
82
78
  />
83
79
  </div>
@@ -118,31 +114,34 @@ export function SupportedDeviceFilterArea({
118
114
  )
119
115
  }
120
116
 
121
- const useAvailableProperties = (
122
- property: keyof DeviceModel,
123
- options: {
124
- brands: string[]
125
- }
126
- ): string[] => {
117
+ const getAppliedFilterCount = (filters: DeviceModelFilters): number => {
118
+ let count = 0
119
+ if (filters.brand !== null) count++
120
+ if (!filters.supportedOnly) count++
121
+ return count
122
+ }
123
+
124
+ const useAvailableBrands = (brands: string[] | null): string[] => {
127
125
  const { deviceModels } = useDeviceModels()
126
+
128
127
  if (deviceModels == null) return []
129
- const properties = new Set<string>()
128
+
129
+ const uniqueBrands = new Set<string>()
130
130
  for (const deviceModel of deviceModels) {
131
- const value = deviceModel[property]
132
-
133
- // If we're only looking at a subset of brands, such as ["yale", "august"], then we
134
- // don't want to show other brands in the filter.
135
- if (
136
- property === 'brand' &&
137
- options.brands.length > 0 &&
138
- !options.brands.includes(value)
139
- ) {
140
- continue
141
- }
142
-
143
- properties.add(capitalize(value))
131
+ const value = deviceModel.brand
132
+
133
+ // UPSTREAM: API can return an empty value for brand.
134
+ if (value.trim() === '') continue
135
+
136
+ uniqueBrands.add(deviceModel.brand)
144
137
  }
145
- return Array.from(properties)
138
+
139
+ return Array.from(uniqueBrands)
140
+ .filter((brand) => {
141
+ if (brands === null) return true
142
+ return brands.includes(brand)
143
+ })
144
+ .map((brand) => capitalize(brand))
146
145
  }
147
146
 
148
147
  const t = {
@@ -11,20 +11,19 @@ export interface SupportedDeviceTableProps {
11
11
  * @deprecated Use disableFilter.
12
12
  */
13
13
  cannotFilter?: boolean
14
- brands?: string[]
14
+ brands?: string[] | null
15
15
  className?: string
16
16
  }
17
17
 
18
18
  export function SupportedDeviceTable({
19
19
  disableFilter = false,
20
20
  cannotFilter,
21
- brands = [],
21
+ brands = null,
22
22
  className,
23
23
  }: SupportedDeviceTableProps = {}): JSX.Element {
24
24
  const [filterValue, setFilterValue] = useState('')
25
25
  const [filters, setFilters] = useState<DeviceModelFilters>({
26
- supportedOnly: false,
27
- category: null,
26
+ supportedOnly: true,
28
27
  brand: null,
29
28
  })
30
29
 
@@ -5,7 +5,6 @@ import {
5
5
 
6
6
  export interface DeviceModelFilters {
7
7
  supportedOnly: boolean
8
- category: string | null
9
8
  brand: string | null
10
9
  }
11
10
 
@@ -16,7 +15,7 @@ export const useFilteredDeviceModels = ({
16
15
  }: {
17
16
  filterValue: string
18
17
  filters: DeviceModelFilters
19
- brands: string[]
18
+ brands: string[] | null
20
19
  }): ReturnType<typeof useDeviceModels> => {
21
20
  const params: UseDeviceModelsParams = {}
22
21
 
@@ -28,25 +27,22 @@ export const useFilteredDeviceModels = ({
28
27
  params.support_level = 'live'
29
28
  }
30
29
 
31
- if (filters.category !== null) {
32
- params.main_category = filters.category
33
- }
34
-
35
30
  if (filters.brand !== null) {
36
31
  params.brand = filters.brand
37
32
  }
38
33
 
39
34
  const query = useDeviceModels(params)
40
35
 
41
- if (brands.length === 0) {
36
+ if (brands === null) {
42
37
  return query
43
38
  }
44
39
 
45
- // If the user only wants models for a collection of brands, such as ["yale", "august"], then
46
- // we'll filter everything else out here.
47
- const onlySpecificBrands = query.deviceModels?.filter((deviceModel) =>
48
- brands.includes(deviceModel.brand)
49
- )
50
-
51
- return { ...query, deviceModels: onlySpecificBrands }
40
+ // UPSTREAM: The API does not have a brands query parameter,
41
+ // so selected brands are filtered here.
42
+ return {
43
+ ...query,
44
+ deviceModels: query.deviceModels?.filter((deviceModel) =>
45
+ brands.includes(deviceModel.brand)
46
+ ),
47
+ }
52
48
  }
@@ -3,16 +3,16 @@ import { useState } from 'react'
3
3
  import type { AccessCode } from 'seamapi'
4
4
 
5
5
  import {
6
- createIsoDate,
7
6
  get24HoursLater,
8
7
  getBrowserTimezone,
9
8
  getNow,
9
+ getTimezoneFromIsoDate,
10
10
  } from 'lib/dates.js'
11
- import { useCreateAccessCode } from 'lib/seam/access-codes/use-create-access-code.js'
12
- import { AccessCodeFormDatePicker } from 'lib/seam/components/AccessCodeForm/AccessCodeFormDatePicker.js'
13
- import { AccessCodeFormTimes } from 'lib/seam/components/AccessCodeForm/AccessCodeFormTimes.js'
14
- import { AccessCodeFormTimezonePicker } from 'lib/seam/components/AccessCodeForm/AccessCodeFormTimezonePicker.js'
15
- import { useDevice, type UseDeviceData } from 'lib/seam/devices/use-device.js'
11
+ import type { UseAccessCodeData } from 'lib/seam/access-codes/use-access-code.js'
12
+ import type { UseDeviceData } from 'lib/seam/devices/use-device.js'
13
+ import { AccessCodeFormDatePicker } from 'lib/ui/AccessCodeForm/AccessCodeFormDatePicker.js'
14
+ import { AccessCodeFormTimes } from 'lib/ui/AccessCodeForm/AccessCodeFormTimes.js'
15
+ import { AccessCodeFormTimezonePicker } from 'lib/ui/AccessCodeForm/AccessCodeFormTimezonePicker.js'
16
16
  import { Button } from 'lib/ui/Button.js'
17
17
  import { FormField } from 'lib/ui/FormField.js'
18
18
  import { InputLabel } from 'lib/ui/InputLabel.js'
@@ -21,55 +21,72 @@ import { RadioField } from 'lib/ui/RadioField/RadioField.js'
21
21
  import { TextField } from 'lib/ui/TextField/TextField.js'
22
22
  import { useToggle } from 'lib/ui/use-toggle.js'
23
23
 
24
+ export interface AccessCodeFormSubmitData {
25
+ name: string
26
+ type: AccessCode['type']
27
+ device: NonNullable<UseDeviceData>
28
+ startDate: string
29
+ endDate: string
30
+ timezone: string
31
+ }
32
+
24
33
  export interface AccessCodeFormProps {
25
- deviceId: string
26
- onBack?: () => void
27
34
  className?: string
35
+ onBack?: () => void
36
+ accessCode?: NonNullable<UseAccessCodeData>
37
+ device: NonNullable<UseDeviceData>
38
+ isSubmitting: boolean
39
+ onSubmit: (data: AccessCodeFormSubmitData) => void
28
40
  }
29
41
 
30
42
  export function AccessCodeForm({
31
- deviceId,
32
- onBack,
33
43
  className,
44
+ ...props
34
45
  }: AccessCodeFormProps): JSX.Element | null {
35
- const { device } = useDevice({
36
- device_id: deviceId,
37
- })
38
-
39
- if (device == null) {
40
- return null
41
- }
42
-
43
46
  return (
44
47
  <div className={classNames('seam-access-code-form', className)}>
45
- <Content className={className} onBack={onBack} device={device} />
48
+ <Content {...props} />
46
49
  </div>
47
50
  )
48
51
  }
49
52
 
50
53
  function Content({
51
54
  onBack,
55
+ accessCode,
52
56
  device,
53
- }: Omit<AccessCodeFormProps, 'deviceId'> & {
54
- device: NonNullable<UseDeviceData>
55
- }): JSX.Element {
56
- const [name, setName] = useState('')
57
- const [type, setType] = useState<AccessCode['type']>('ongoing')
57
+ onSubmit,
58
+ isSubmitting,
59
+ }: Omit<AccessCodeFormProps, 'className'>): JSX.Element {
60
+ const [name, setName] = useState(accessCode?.name ?? '')
61
+ const [type, setType] = useState<AccessCode['type']>(
62
+ accessCode?.type ?? 'ongoing'
63
+ )
58
64
  const [datePickerVisible, setDatePickerVisible] = useState(false)
59
- const [timezone, setTimezone] = useState<string>(getBrowserTimezone())
60
- const [startDate, setStartDate] = useState<string>(getNow())
61
- const [endDate, setEndDate] = useState<string>(get24HoursLater())
65
+ const [timezone, setTimezone] = useState<string>(
66
+ getAccessCodeTimezone(accessCode) ?? getBrowserTimezone()
67
+ )
68
+ const [startDate, setStartDate] = useState<string>(
69
+ getAccessCodeDate('starts_at', accessCode) ?? getNow()
70
+ )
71
+ const [endDate, setEndDate] = useState<string>(
72
+ getAccessCodeDate('ends_at', accessCode) ?? get24HoursLater()
73
+ )
62
74
  const [timezonePickerVisible, toggleTimezonePicker] = useToggle()
63
75
 
64
- const { submit, isLoading } = useSubmit({
65
- name,
66
- type,
67
- device,
68
- startDate,
69
- endDate,
70
- timezone,
71
- onSuccess: onBack,
72
- })
76
+ const submit = (): void => {
77
+ if (isSubmitting) {
78
+ return
79
+ }
80
+
81
+ onSubmit({
82
+ name,
83
+ type,
84
+ device,
85
+ startDate,
86
+ endDate,
87
+ timezone,
88
+ })
89
+ }
73
90
 
74
91
  if (timezonePickerVisible) {
75
92
  return (
@@ -100,12 +117,14 @@ function Content({
100
117
  const nameError = name.length > 60 ? t.overCharacterLimitError : undefined
101
118
 
102
119
  const isFormValid =
103
- name.trim().length > 0 && nameError === undefined && !isLoading
120
+ name.trim().length > 0 && nameError === undefined && !isSubmitting
121
+
122
+ const title = accessCode == null ? t.addNewAccessCode : t.editAccessCode
104
123
 
105
124
  return (
106
125
  <>
107
126
  <ContentHeader
108
- title={t.addNewAccessCode}
127
+ title={title}
109
128
  subheading={device.properties.name}
110
129
  onBack={onBack}
111
130
  />
@@ -161,62 +180,45 @@ function Content({
161
180
  )
162
181
  }
163
182
 
164
- function useSubmit(params: {
165
- name: string
166
- type: AccessCode['type']
167
- device: NonNullable<UseDeviceData>
168
- startDate: string
169
- endDate: string
170
- timezone: string
171
- onSuccess?: () => void
172
- }): {
173
- submit: () => void
174
- isLoading: boolean
175
- } {
176
- const { name, type, device, startDate, endDate, timezone, onSuccess } = params
177
-
178
- const { mutate, isLoading } = useCreateAccessCode()
179
- const submit = (): void => {
180
- if (name === '') {
181
- return
182
- }
183
+ function getAccessCodeTimezone(
184
+ accessCode?: NonNullable<UseAccessCodeData>
185
+ ): undefined | string {
186
+ if (accessCode == null) {
187
+ return undefined
188
+ }
183
189
 
184
- if (isLoading) {
185
- return
186
- }
190
+ if (accessCode.type === 'ongoing') {
191
+ return undefined
192
+ }
187
193
 
188
- if (type === 'time_bound') {
189
- mutate(
190
- {
191
- name,
192
- device_id: device.device_id,
193
- starts_at: createIsoDate(startDate, timezone),
194
- ends_at: createIsoDate(endDate, timezone),
195
- },
196
- {
197
- onSuccess,
198
- }
199
- )
194
+ const date = accessCode.starts_at
200
195
 
201
- return
202
- }
196
+ const timezone = getTimezoneFromIsoDate(date)
197
+ if (timezone == null) {
198
+ return undefined
199
+ }
203
200
 
204
- mutate(
205
- {
206
- name,
207
- device_id: device.device_id,
208
- },
209
- {
210
- onSuccess,
211
- }
212
- )
201
+ return timezone
202
+ }
203
+
204
+ function getAccessCodeDate(
205
+ date: 'starts_at' | 'ends_at',
206
+ accessCode?: NonNullable<UseAccessCodeData>
207
+ ): string | undefined {
208
+ if (accessCode == null) {
209
+ return undefined
210
+ }
211
+
212
+ if (accessCode.type !== 'time_bound') {
213
+ return undefined
213
214
  }
214
215
 
215
- return { submit, isLoading }
216
+ return accessCode[date]
216
217
  }
217
218
 
218
219
  const t = {
219
220
  addNewAccessCode: 'Add new access code',
221
+ editAccessCode: 'Edit access code',
220
222
  overCharacterLimitError: '60 characters max',
221
223
  nameInputLabel: 'Name the new code',
222
224
  cancel: 'Cancel',
@@ -1,3 +1,3 @@
1
- const seamapiReactVersion = '1.41.0'
1
+ const seamapiReactVersion = '1.42.0'
2
2
 
3
3
  export default seamapiReactVersion
@@ -79,6 +79,11 @@
79
79
  }
80
80
  }
81
81
 
82
+ .seam-actions {
83
+ margin-bottom: 16px;
84
+ padding: 0 24px;
85
+ }
86
+
82
87
  .seam-details {
83
88
  font-size: 16px;
84
89
  line-height: 134%;
@@ -82,7 +82,7 @@
82
82
  }
83
83
 
84
84
  .seam-access-code-table-action-menu {
85
- .menu-item-copy {
85
+ .seam-menu-item-copy {
86
86
  display: flex;
87
87
  align-items: center;
88
88
  justify-content: space-between;
@@ -43,6 +43,12 @@
43
43
  background: colors.$item-hover-bg;
44
44
  }
45
45
  }
46
+
47
+ .seam-divider {
48
+ height: 1px;
49
+ background: colors.$divider-stroke-light;
50
+ margin: 8px 0;
51
+ }
46
52
  }
47
53
 
48
54
  .seam-menu-shadow {
@@ -1,7 +0,0 @@
1
- /// <reference types="react" />
2
- export interface AccessCodeFormProps {
3
- deviceId: string;
4
- onBack?: () => void;
5
- className?: string;
6
- }
7
- export declare function AccessCodeForm({ deviceId, onBack, className, }: AccessCodeFormProps): JSX.Element | null;
@@ -1,106 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import classNames from 'classnames';
3
- import { useState } from 'react';
4
- import { createIsoDate, get24HoursLater, getBrowserTimezone, getNow, } from '../../../../lib/dates.js';
5
- import { useCreateAccessCode } from '../../../../lib/seam/access-codes/use-create-access-code.js';
6
- import { AccessCodeFormDatePicker } from '../../../../lib/seam/components/AccessCodeForm/AccessCodeFormDatePicker.js';
7
- import { AccessCodeFormTimes } from '../../../../lib/seam/components/AccessCodeForm/AccessCodeFormTimes.js';
8
- import { AccessCodeFormTimezonePicker } from '../../../../lib/seam/components/AccessCodeForm/AccessCodeFormTimezonePicker.js';
9
- import { useDevice } from '../../../../lib/seam/devices/use-device.js';
10
- import { Button } from '../../../../lib/ui/Button.js';
11
- import { FormField } from '../../../../lib/ui/FormField.js';
12
- import { InputLabel } from '../../../../lib/ui/InputLabel.js';
13
- import { ContentHeader } from '../../../../lib/ui/layout/ContentHeader.js';
14
- import { RadioField } from '../../../../lib/ui/RadioField/RadioField.js';
15
- import { TextField } from '../../../../lib/ui/TextField/TextField.js';
16
- import { useToggle } from '../../../../lib/ui/use-toggle.js';
17
- export function AccessCodeForm({ deviceId, onBack, className, }) {
18
- const { device } = useDevice({
19
- device_id: deviceId,
20
- });
21
- if (device == null) {
22
- return null;
23
- }
24
- return (_jsx("div", { className: classNames('seam-access-code-form', className), children: _jsx(Content, { className: className, onBack: onBack, device: device }) }));
25
- }
26
- function Content({ onBack, device, }) {
27
- const [name, setName] = useState('');
28
- const [type, setType] = useState('ongoing');
29
- const [datePickerVisible, setDatePickerVisible] = useState(false);
30
- const [timezone, setTimezone] = useState(getBrowserTimezone());
31
- const [startDate, setStartDate] = useState(getNow());
32
- const [endDate, setEndDate] = useState(get24HoursLater());
33
- const [timezonePickerVisible, toggleTimezonePicker] = useToggle();
34
- const { submit, isLoading } = useSubmit({
35
- name,
36
- type,
37
- device,
38
- startDate,
39
- endDate,
40
- timezone,
41
- onSuccess: onBack,
42
- });
43
- if (timezonePickerVisible) {
44
- return (_jsx(AccessCodeFormTimezonePicker, { value: timezone, onChange: setTimezone, onClose: toggleTimezonePicker }));
45
- }
46
- if (datePickerVisible) {
47
- return (_jsx(AccessCodeFormDatePicker, { startDate: startDate, setStartDate: setStartDate, endDate: endDate, setEndDate: setEndDate, timezone: timezone, onChangeTimezone: toggleTimezonePicker, onBack: () => {
48
- setDatePickerVisible(false);
49
- } }));
50
- }
51
- const nameError = name.length > 60 ? t.overCharacterLimitError : undefined;
52
- const isFormValid = name.trim().length > 0 && nameError === undefined && !isLoading;
53
- return (_jsxs(_Fragment, { children: [_jsx(ContentHeader, { title: t.addNewAccessCode, subheading: device.properties.name, onBack: onBack }), _jsxs("div", { className: 'seam-main', children: [_jsxs(FormField, { children: [_jsx(InputLabel, { children: t.nameInputLabel }), _jsx(TextField, { size: 'large', clearable: true, value: name, onChange: setName, hasError: nameError != null, helperText: nameError })] }), _jsxs(FormField, { children: [_jsx(InputLabel, { children: t.timingInputLabel }), _jsx(RadioField, { value: type, onChange: setType, name: 'type', options: [
54
- {
55
- label: t.typeOngoingLabel,
56
- value: 'ongoing',
57
- },
58
- {
59
- label: t.typeTimeBoundLabel,
60
- value: 'time_bound',
61
- },
62
- ] }), _jsx(_Fragment, { children: type === 'time_bound' && (_jsx(AccessCodeFormTimes, { startDate: startDate, endDate: endDate, onEdit: () => {
63
- setDatePickerVisible(true);
64
- } })) })] }), _jsxs("div", { className: 'seam-actions', children: [_jsx(Button, { onClick: onBack, children: t.cancel }), _jsx(Button, { variant: 'solid', disabled: !isFormValid, onMouseDown: submit, children: t.save })] })] })] }));
65
- }
66
- function useSubmit(params) {
67
- const { name, type, device, startDate, endDate, timezone, onSuccess } = params;
68
- const { mutate, isLoading } = useCreateAccessCode();
69
- const submit = () => {
70
- if (name === '') {
71
- return;
72
- }
73
- if (isLoading) {
74
- return;
75
- }
76
- if (type === 'time_bound') {
77
- mutate({
78
- name,
79
- device_id: device.device_id,
80
- starts_at: createIsoDate(startDate, timezone),
81
- ends_at: createIsoDate(endDate, timezone),
82
- }, {
83
- onSuccess,
84
- });
85
- return;
86
- }
87
- mutate({
88
- name,
89
- device_id: device.device_id,
90
- }, {
91
- onSuccess,
92
- });
93
- };
94
- return { submit, isLoading };
95
- }
96
- const t = {
97
- addNewAccessCode: 'Add new access code',
98
- overCharacterLimitError: '60 characters max',
99
- nameInputLabel: 'Name the new code',
100
- cancel: 'Cancel',
101
- save: 'Save',
102
- timingInputLabel: 'Timing',
103
- typeOngoingLabel: 'Ongoing',
104
- typeTimeBoundLabel: 'Start/end times',
105
- };
106
- //# sourceMappingURL=AccessCodeForm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AccessCodeForm.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/AccessCodeForm/AccessCodeForm.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAGhC,OAAO,EACL,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,MAAM,GACP,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAA;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gEAAgE,CAAA;AACzG,OAAO,EAAE,mBAAmB,EAAE,MAAM,2DAA2D,CAAA;AAC/F,OAAO,EAAE,4BAA4B,EAAE,MAAM,oEAAoE,CAAA;AACjH,OAAO,EAAE,SAAS,EAAsB,MAAM,gCAAgC,CAAA;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAQhD,MAAM,UAAU,cAAc,CAAC,EAC7B,QAAQ,EACR,MAAM,EACN,SAAS,GACW;IACpB,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QAC3B,SAAS,EAAE,QAAQ;KACpB,CAAC,CAAA;IAEF,IAAI,MAAM,IAAI,IAAI,EAAE;QAClB,OAAO,IAAI,CAAA;KACZ;IAED,OAAO,CACL,cAAK,SAAS,EAAE,UAAU,CAAC,uBAAuB,EAAE,SAAS,CAAC,YAC5D,KAAC,OAAO,IAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAI,GAC7D,CACP,CAAA;AACH,CAAC;AAED,SAAS,OAAO,CAAC,EACf,MAAM,EACN,MAAM,GAGP;IACC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IACpC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAqB,SAAS,CAAC,CAAA;IAC/D,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACjE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAS,kBAAkB,EAAE,CAAC,CAAA;IACtE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAS,MAAM,EAAE,CAAC,CAAA;IAC5D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAS,eAAe,EAAE,CAAC,CAAA;IACjE,MAAM,CAAC,qBAAqB,EAAE,oBAAoB,CAAC,GAAG,SAAS,EAAE,CAAA;IAEjE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;QACtC,IAAI;QACJ,IAAI;QACJ,MAAM;QACN,SAAS;QACT,OAAO;QACP,QAAQ;QACR,SAAS,EAAE,MAAM;KAClB,CAAC,CAAA;IAEF,IAAI,qBAAqB,EAAE;QACzB,OAAO,CACL,KAAC,4BAA4B,IAC3B,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,oBAAoB,GAC7B,CACH,CAAA;KACF;IAED,IAAI,iBAAiB,EAAE;QACrB,OAAO,CACL,KAAC,wBAAwB,IACvB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,oBAAoB,EACtC,MAAM,EAAE,GAAG,EAAE;gBACX,oBAAoB,CAAC,KAAK,CAAC,CAAA;YAC7B,CAAC,GACD,CACH,CAAA;KACF;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAA;IAE1E,MAAM,WAAW,GACf,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,SAAS,CAAA;IAEjE,OAAO,CACL,8BACE,KAAC,aAAa,IACZ,KAAK,EAAE,CAAC,CAAC,gBAAgB,EACzB,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,EAClC,MAAM,EAAE,MAAM,GACd,EACF,eAAK,SAAS,EAAC,WAAW,aACxB,MAAC,SAAS,eACR,KAAC,UAAU,cAAE,CAAC,CAAC,cAAc,GAAc,EAC3C,KAAC,SAAS,IACR,IAAI,EAAC,OAAO,EACZ,SAAS,QACT,KAAK,EAAE,IAAI,EACX,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,SAAS,IAAI,IAAI,EAC3B,UAAU,EAAE,SAAS,GACrB,IACQ,EACZ,MAAC,SAAS,eACR,KAAC,UAAU,cAAE,CAAC,CAAC,gBAAgB,GAAc,EAC7C,KAAC,UAAU,IACT,KAAK,EAAE,IAAI,EACX,QAAQ,EAAE,OAAO,EACjB,IAAI,EAAC,MAAM,EACX,OAAO,EAAE;oCACP;wCACE,KAAK,EAAE,CAAC,CAAC,gBAAgB;wCACzB,KAAK,EAAE,SAAS;qCACjB;oCACD;wCACE,KAAK,EAAE,CAAC,CAAC,kBAAkB;wCAC3B,KAAK,EAAE,YAAY;qCACpB;iCACF,GACD,EACF,4BACG,IAAI,KAAK,YAAY,IAAI,CACxB,KAAC,mBAAmB,IAClB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,GAAG,EAAE;wCACX,oBAAoB,CAAC,IAAI,CAAC,CAAA;oCAC5B,CAAC,GACD,CACH,GACA,IACO,EACZ,eAAK,SAAS,EAAC,cAAc,aAC3B,KAAC,MAAM,IAAC,OAAO,EAAE,MAAM,YAAG,CAAC,CAAC,MAAM,GAAU,EAC5C,KAAC,MAAM,IAAC,OAAO,EAAC,OAAO,EAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,YAChE,CAAC,CAAC,IAAI,GACA,IACL,IACF,IACL,CACJ,CAAA;AACH,CAAC;AAED,SAAS,SAAS,CAAC,MAQlB;IAIC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,CAAA;IAE9E,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,mBAAmB,EAAE,CAAA;IACnD,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,IAAI,IAAI,KAAK,EAAE,EAAE;YACf,OAAM;SACP;QAED,IAAI,SAAS,EAAE;YACb,OAAM;SACP;QAED,IAAI,IAAI,KAAK,YAAY,EAAE;YACzB,MAAM,CACJ;gBACE,IAAI;gBACJ,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC;gBAC7C,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC;aAC1C,EACD;gBACE,SAAS;aACV,CACF,CAAA;YAED,OAAM;SACP;QAED,MAAM,CACJ;YACE,IAAI;YACJ,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,EACD;YACE,SAAS;SACV,CACF,CAAA;IACH,CAAC,CAAA;IAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;AAC9B,CAAC;AAED,MAAM,CAAC,GAAG;IACR,gBAAgB,EAAE,qBAAqB;IACvC,uBAAuB,EAAE,mBAAmB;IAC5C,cAAc,EAAE,mBAAmB;IACnC,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,gBAAgB,EAAE,QAAQ;IAC1B,gBAAgB,EAAE,SAAS;IAC3B,kBAAkB,EAAE,iBAAiB;CACtC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"AccessCodeFormDatePicker.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/AccessCodeForm/AccessCodeFormDatePicker.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AAEnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAa9D,MAAM,UAAU,wBAAwB,CAAC,EACvC,QAAQ,EACR,MAAM,EACN,SAAS,EACT,SAAS,EACT,YAAY,EACZ,OAAO,EACP,UAAU,EACV,gBAAgB,GACc;IAC9B,OAAO,CACL,eAAK,SAAS,EAAE,UAAU,CAAC,sBAAsB,EAAE,SAAS,CAAC,aAC3D,KAAC,aAAa,IAAC,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,GAAI,EACvD,eAAK,SAAS,EAAC,cAAc,aAC3B,eAAK,SAAS,EAAC,eAAe,aAC5B,eAAM,SAAS,EAAC,YAAY,YAAE,CAAC,CAAC,qBAAqB,GAAQ,EAC7D,gBAAM,SAAS,EAAC,eAAe,EAAC,OAAO,EAAE,gBAAgB,aACtD,gBAAgB,CAAC,QAAQ,CAAC,EAC3B,KAAC,gBAAgB,KAAG,IACf,IACH,EACN,MAAC,SAAS,eACR,KAAC,UAAU,cAAE,CAAC,CAAC,cAAc,GAAc,EAC3C,KAAC,cAAc,IACb,KAAK,EAAE,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EACzC,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAC,OAAO,GACZ,IACQ,EACZ,MAAC,SAAS,eACR,KAAC,UAAU,cAAE,CAAC,CAAC,YAAY,GAAc,EACzC,KAAC,cAAc,IACb,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EACrC,QAAQ,EAAE,UAAU,EACpB,IAAI,EAAC,OAAO,GACZ,IACQ,IACR,IACF,CACP,CAAA;AACH,CAAC;AAED,MAAM,CAAC,GAAG;IACR,WAAW,EAAE,QAAQ;IACrB,qBAAqB,EAAE,cAAc;IACrC,cAAc,EAAE,OAAO;IACvB,YAAY,EAAE,KAAK;CACpB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"AccessCodeFormTimes.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/AccessCodeForm/AccessCodeFormTimes.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAQjD,MAAM,UAAU,mBAAmB,CAAC,EAClC,SAAS,EACT,OAAO,EACP,MAAM,GACmB;IACzB,OAAO,CACL,eAAK,SAAS,EAAC,qBAAqB,aAClC,0BACE,eAAM,SAAS,EAAC,YAAY,YAAE,CAAC,CAAC,cAAc,GAAQ,EACtD,eAAM,SAAS,EAAC,WAAW,YAAE,sBAAsB,CAAC,SAAS,CAAC,GAAQ,EACtE,eAAM,SAAS,EAAC,YAAY,YAAE,CAAC,CAAC,YAAY,GAAQ,EACpD,eAAM,SAAS,EAAC,WAAW,YAAE,sBAAsB,CAAC,OAAO,CAAC,GAAQ,IAChE,EACN,KAAC,UAAU,IAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAC,2BAA2B,YAChE,KAAC,QAAQ,KAAG,GACD,IACT,CACP,CAAA;AACH,CAAC;AAED,MAAM,CAAC,GAAG;IACR,cAAc,EAAE,OAAO;IACvB,YAAY,EAAE,KAAK;CACpB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"AccessCodeFormTimezonePicker.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/AccessCodeForm/AccessCodeFormTimezonePicker.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,GACb,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAQ5D,MAAM,UAAU,4BAA4B,CAAC,EAC3C,QAAQ,EACR,KAAK,EACL,OAAO,GAC2B;IAClC,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEzE,MAAM,iBAAiB,GAAG,KAAK,KAAK,kBAAkB,EAAE,CAAA;IACxD,MAAM,gBAAgB,GAAG,CAAC,iBAAiB,IAAI,qBAAqB,CAAA;IAEpE,MAAM,0BAA0B,GAAG,CAAC,OAAgB,EAAQ,EAAE;QAC5D,wBAAwB,CAAC,OAAO,CAAC,CAAA;QACjC,IAAI,CAAC,OAAO,EAAE;YACZ,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CAAA;SAC/B;IACH,CAAC,CAAA;IAED,MAAM,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAE5D,OAAO,CACL,eAAK,SAAS,EAAC,sBAAsB,aACnC,KAAC,aAAa,IAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAI,EAChD,eAAK,SAAS,EAAC,cAAc,aAC3B,KAAC,QAAQ,IACP,KAAK,EAAE,CAAC,CAAC,wBAAwB,EACjC,OAAO,EAAE,CAAC,gBAAgB,EAC1B,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;4BACnB,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAA;wBACrC,CAAC,EACD,SAAS,EAAC,+BAA+B,GACzC,EAEF,iBACE,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,EAChC,SAAS,EAAC,sBAAsB,YAE/B,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAChC,kBAAQ,KAAK,EAAE,QAAQ,aACpB,CAAC,CAAC,GAAG,OAAG,iBAAiB,CAAC,QAAQ,CAAC,OAAG,gBAAgB,CAAC,QAAQ,CAAC,KADrC,QAAQ,CAE7B,CACV,CAAC,GACK,IACL,IACF,CACP,CAAA;AACH,CAAC;AAED,MAAM,CAAC,GAAG;IACR,SAAS,EAAE,uBAAuB;IAClC,WAAW,EAAE,oBAAoB;IACjC,GAAG,EAAE,KAAK;IACV,wBAAwB,EAAE,qBAAqB;CAChD,CAAA"}
@@ -1,12 +0,0 @@
1
- import type { ElementProps } from 'lib/element.js'
2
- import type { AccessCodeFormProps } from 'lib/seam/components/AccessCodeForm/AccessCodeForm.js'
3
-
4
- export const name = 'seam-access-code-form'
5
-
6
- export const props: ElementProps<AccessCodeFormProps> = {
7
- deviceId: 'string',
8
- onBack: 'object',
9
- className: 'string',
10
- }
11
-
12
- export { AccessCodeForm as Component } from './AccessCodeForm.js'