@seamapi/react 1.61.2 → 1.62.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 (29) hide show
  1. package/README.md +1 -1
  2. package/dist/elements.js +3783 -3589
  3. package/dist/elements.js.map +1 -1
  4. package/dist/index.css +8 -5
  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/seam/components/AccessCodeTable/AccessCodeTable.js +21 -8
  9. package/lib/seam/components/AccessCodeTable/AccessCodeTable.js.map +1 -1
  10. package/lib/seam/components/CreateAccessCodeForm/CreateAccessCodeForm.d.ts +2 -1
  11. package/lib/seam/components/CreateAccessCodeForm/CreateAccessCodeForm.js +7 -4
  12. package/lib/seam/components/CreateAccessCodeForm/CreateAccessCodeForm.js.map +1 -1
  13. package/lib/seam/components/EditAccessCodeForm/EditAccessCodeForm.d.ts +2 -1
  14. package/lib/seam/components/EditAccessCodeForm/EditAccessCodeForm.js +11 -4
  15. package/lib/seam/components/EditAccessCodeForm/EditAccessCodeForm.js.map +1 -1
  16. package/lib/ui/Snackbar/Snackbar.d.ts +2 -1
  17. package/lib/ui/Snackbar/Snackbar.js +6 -10
  18. package/lib/ui/Snackbar/Snackbar.js.map +1 -1
  19. package/lib/version.d.ts +1 -1
  20. package/lib/version.js +1 -1
  21. package/package.json +1 -1
  22. package/src/lib/seam/components/AccessCodeTable/AccessCodeTable.tsx +96 -58
  23. package/src/lib/seam/components/CreateAccessCodeForm/CreateAccessCodeForm.element.ts +1 -0
  24. package/src/lib/seam/components/CreateAccessCodeForm/CreateAccessCodeForm.tsx +20 -4
  25. package/src/lib/seam/components/EditAccessCodeForm/EditAccessCodeForm.element.ts +1 -0
  26. package/src/lib/seam/components/EditAccessCodeForm/EditAccessCodeForm.tsx +18 -2
  27. package/src/lib/ui/Snackbar/Snackbar.tsx +7 -11
  28. package/src/lib/version.ts +1 -1
  29. package/src/styles/_snackbar.scss +8 -5
@@ -7,7 +7,7 @@ import { useDevice } from '../../../../lib/seam/devices/use-device.js';
7
7
  import { getValidationError } from '../../../../lib/seam/error-handlers.js';
8
8
  import { AccessCodeForm, } from '../../../../lib/ui/AccessCodeForm/AccessCodeForm.js';
9
9
  export const NestedCreateAccessCodeForm = withRequiredCommonProps(CreateAccessCodeForm);
10
- export function CreateAccessCodeForm({ className, onBack, deviceId, }) {
10
+ export function CreateAccessCodeForm({ className, onBack, deviceId, onSuccess, }) {
11
11
  useComponentTelemetry('CreateAccessCodeForm');
12
12
  const { device } = useDevice({
13
13
  device_id: deviceId,
@@ -15,11 +15,14 @@ export function CreateAccessCodeForm({ className, onBack, deviceId, }) {
15
15
  if (device == null) {
16
16
  return null;
17
17
  }
18
- return _jsx(Content, { device: device, className: className, onBack: onBack });
18
+ return (_jsx(Content, { device: device, className: className, onBack: onBack, onSuccess: onSuccess }));
19
19
  }
20
- function Content({ device, className, onBack, }) {
20
+ function Content({ device, className, onBack, onSuccess, }) {
21
21
  const { submit, isSubmitting, responseErrors } = useSubmitCreateAccessCode({
22
- onSuccess: () => {
22
+ onSuccess: (accessCode) => {
23
+ if (onSuccess != null) {
24
+ onSuccess(accessCode.access_code_id);
25
+ }
23
26
  if (onBack != null) {
24
27
  onBack();
25
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CreateAccessCodeForm.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/CreateAccessCodeForm/CreateAccessCodeForm.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CreateAccessCodeForm.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/CreateAccessCodeForm/CreateAccessCodeForm.tsx"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  import { type CommonProps } from '../../../../lib/seam/components/common-props.js';
3
3
  export interface EditAccessCodeFormProps extends CommonProps {
4
4
  accessCodeId: string;
5
+ onSuccess?: (accessCodeId: string) => void;
5
6
  }
6
7
  export declare const NestedEditAccessCodeForm: (props: EditAccessCodeFormProps & import("../../../../lib/seam/components/common-props.js").RequiredCommonProps) => JSX.Element | null;
7
- export declare function EditAccessCodeForm({ accessCodeId, onBack, className, }: EditAccessCodeFormProps): JSX.Element | null;
8
+ export declare function EditAccessCodeForm({ accessCodeId, onBack, className, onSuccess, }: EditAccessCodeFormProps): JSX.Element | null;
@@ -7,7 +7,7 @@ import { useResponseErrors } from '../../../../lib/seam/components/CreateAccessC
7
7
  import { useDevice } from '../../../../lib/seam/devices/use-device.js';
8
8
  import { AccessCodeForm, } from '../../../../lib/ui/AccessCodeForm/AccessCodeForm.js';
9
9
  export const NestedEditAccessCodeForm = withRequiredCommonProps(EditAccessCodeForm);
10
- export function EditAccessCodeForm({ accessCodeId, onBack, className, }) {
10
+ export function EditAccessCodeForm({ accessCodeId, onBack, className, onSuccess, }) {
11
11
  useComponentTelemetry('EditAccessCodeForm');
12
12
  const { accessCode } = useAccessCode({
13
13
  access_code_id: accessCodeId,
@@ -15,13 +15,20 @@ export function EditAccessCodeForm({ accessCodeId, onBack, className, }) {
15
15
  if (accessCode == null) {
16
16
  return null;
17
17
  }
18
- return (_jsx(Content, { accessCode: accessCode, className: className, onBack: onBack }));
18
+ return (_jsx(Content, { accessCode: accessCode, className: className, onBack: onBack, onSuccess: onSuccess }));
19
19
  }
20
- function Content({ className, onBack, accessCode, }) {
20
+ function Content({ className, onBack, accessCode, onSuccess, }) {
21
21
  const { device } = useDevice({
22
22
  device_id: accessCode.device_id,
23
23
  });
24
- const { submit, isSubmitting, responseErrors } = useSubmitEditAccessCode(accessCode, onBack);
24
+ const { submit, isSubmitting, responseErrors } = useSubmitEditAccessCode(accessCode, () => {
25
+ if (onSuccess != null) {
26
+ onSuccess(accessCode.access_code_id);
27
+ }
28
+ if (onBack != null) {
29
+ onBack();
30
+ }
31
+ });
25
32
  if (device == null) {
26
33
  return null;
27
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"EditAccessCodeForm.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/EditAccessCodeForm/EditAccessCodeForm.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EditAccessCodeForm.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/EditAccessCodeForm/EditAccessCodeForm.tsx"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ interface SnackbarProps {
4
4
  message: string;
5
5
  variant: SnackbarVariant;
6
6
  visible: boolean;
7
+ onClose: () => void;
7
8
  action?: {
8
9
  label: string;
9
10
  onClick: () => void;
@@ -12,5 +13,5 @@ interface SnackbarProps {
12
13
  dismissAfterMs?: number;
13
14
  disableCloseButton?: boolean;
14
15
  }
15
- export declare function Snackbar({ message, variant, visible, action, autoDismiss, dismissAfterMs, disableCloseButton, }: SnackbarProps): JSX.Element;
16
+ export declare function Snackbar({ message, variant, visible, action, autoDismiss, dismissAfterMs, disableCloseButton, onClose, }: SnackbarProps): JSX.Element;
16
17
  export {};
@@ -1,30 +1,26 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import classNames from 'classnames';
3
- import { useEffect, useState } from 'react';
3
+ import { useEffect } from 'react';
4
4
  import { CheckGreenIcon } from '../../../lib/icons/CheckGreen.js';
5
5
  import { CloseWhiteIcon } from '../../../lib/icons/CloseWhite.js';
6
6
  import { ExclamationCircleIcon } from '../../../lib/icons/ExclamationCircle.js';
7
- export function Snackbar({ message, variant, visible, action, autoDismiss = false, dismissAfterMs = 5000, disableCloseButton = false, }) {
8
- const [hidden, setHidden] = useState(visible);
7
+ export function Snackbar({ message, variant, visible, action, autoDismiss = false, dismissAfterMs = 5000, disableCloseButton = false, onClose, }) {
9
8
  const { label: actionLabel, onClick: handleActionClick } = action ?? {};
10
- useEffect(() => {
11
- setHidden(!visible);
12
- }, [visible]);
13
9
  useEffect(() => {
14
10
  if (!autoDismiss) {
15
11
  return () => { };
16
12
  }
17
13
  const timeout = globalThis.setTimeout(() => {
18
- setHidden(false);
14
+ onClose();
19
15
  }, dismissAfterMs);
20
16
  return () => {
21
17
  globalThis.clearTimeout(timeout);
22
18
  };
23
- }, [autoDismiss, dismissAfterMs]);
19
+ }, [autoDismiss, dismissAfterMs, onClose]);
24
20
  return (_jsx("div", { className: 'seam-snackbar-wrap', children: _jsxs("div", { className: classNames('seam-snackbar', {
25
- 'seam-snackbar-hide': hidden,
21
+ 'seam-snackbar-visible': visible,
26
22
  }), children: [_jsx(SnackbarIcon, { variant: variant }), _jsx("div", { className: 'seam-snackbar-message-wrap', children: _jsx("p", { className: 'seam-snackbar-message', children: message }) }), _jsxs("div", { className: 'seam-snackbar-actions-wrap', children: [action != null && (_jsx("button", { className: 'seam-snackbar-action', onClick: handleActionClick, children: _jsx("span", { className: 'seam-snackbar-action-label', children: actionLabel }) })), !disableCloseButton && (_jsx("button", { className: 'seam-snackbar-close-button', onClick: () => {
27
- setHidden(true);
23
+ onClose();
28
24
  }, children: _jsx(CloseWhiteIcon, {}) }))] })] }) }));
29
25
  }
30
26
  function SnackbarIcon(props) {
@@ -1 +1 @@
1
- {"version":3,"file":"Snackbar.js","sourceRoot":"","sources":["../../../src/lib/ui/Snackbar/Snackbar.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE3C,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AAiBtE,MAAM,UAAU,QAAQ,CAAC,EACvB,OAAO,EACP,OAAO,EACP,OAAO,EACP,MAAM,EACN,WAAW,GAAG,KAAK,EACnB,cAAc,GAAG,IAAI,EACrB,kBAAkB,GAAG,KAAK,GACZ;IACd,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IAE7C,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,IAAI,EAAE,CAAA;IAEvE,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,CAAC,CAAC,OAAO,CAAC,CAAA;IACrB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAEb,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;SAChB;QAED,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE;YACzC,SAAS,CAAC,KAAK,CAAC,CAAA;QAClB,CAAC,EAAE,cAAc,CAAC,CAAA;QAElB,OAAO,GAAG,EAAE;YACV,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QAClC,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAA;IAEjC,OAAO,CACL,cAAK,SAAS,EAAC,oBAAoB,YACjC,eACE,SAAS,EAAE,UAAU,CAAC,eAAe,EAAE;gBACrC,oBAAoB,EAAE,MAAM;aAC7B,CAAC,aAEF,KAAC,YAAY,IAAC,OAAO,EAAE,OAAO,GAAI,EAClC,cAAK,SAAS,EAAC,4BAA4B,YACzC,YAAG,SAAS,EAAC,uBAAuB,YAAE,OAAO,GAAK,GAC9C,EACN,eAAK,SAAS,EAAC,4BAA4B,aACxC,MAAM,IAAI,IAAI,IAAI,CACjB,iBACE,SAAS,EAAC,sBAAsB,EAChC,OAAO,EAAE,iBAAiB,YAE1B,eAAM,SAAS,EAAC,4BAA4B,YAAE,WAAW,GAAQ,GAC1D,CACV,EACA,CAAC,kBAAkB,IAAI,CACtB,iBACE,SAAS,EAAC,4BAA4B,EACtC,OAAO,EAAE,GAAG,EAAE;gCACZ,SAAS,CAAC,IAAI,CAAC,CAAA;4BACjB,CAAC,YAED,KAAC,cAAc,KAAG,GACX,CACV,IACG,IACF,GACF,CACP,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAmC;IACvD,QAAQ,KAAK,CAAC,OAAO,EAAE;QACrB,KAAK,SAAS;YACZ,OAAO,KAAC,cAAc,KAAG,CAAA;QAC3B,KAAK,OAAO;YACV,OAAO,KAAC,qBAAqB,KAAG,CAAA;KACnC;AACH,CAAC"}
1
+ {"version":3,"file":"Snackbar.js","sourceRoot":"","sources":["../../../src/lib/ui/Snackbar/Snackbar.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AAkBtE,MAAM,UAAU,QAAQ,CAAC,EACvB,OAAO,EACP,OAAO,EACP,OAAO,EACP,MAAM,EACN,WAAW,GAAG,KAAK,EACnB,cAAc,GAAG,IAAI,EACrB,kBAAkB,GAAG,KAAK,EAC1B,OAAO,GACO;IACd,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,IAAI,EAAE,CAAA;IAEvE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;SAChB;QAED,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE;YACzC,OAAO,EAAE,CAAA;QACX,CAAC,EAAE,cAAc,CAAC,CAAA;QAElB,OAAO,GAAG,EAAE;YACV,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QAClC,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,CAAA;IAE1C,OAAO,CACL,cAAK,SAAS,EAAC,oBAAoB,YACjC,eACE,SAAS,EAAE,UAAU,CAAC,eAAe,EAAE;gBACrC,uBAAuB,EAAE,OAAO;aACjC,CAAC,aAEF,KAAC,YAAY,IAAC,OAAO,EAAE,OAAO,GAAI,EAClC,cAAK,SAAS,EAAC,4BAA4B,YACzC,YAAG,SAAS,EAAC,uBAAuB,YAAE,OAAO,GAAK,GAC9C,EACN,eAAK,SAAS,EAAC,4BAA4B,aACxC,MAAM,IAAI,IAAI,IAAI,CACjB,iBACE,SAAS,EAAC,sBAAsB,EAChC,OAAO,EAAE,iBAAiB,YAE1B,eAAM,SAAS,EAAC,4BAA4B,YAAE,WAAW,GAAQ,GAC1D,CACV,EACA,CAAC,kBAAkB,IAAI,CACtB,iBACE,SAAS,EAAC,4BAA4B,EACtC,OAAO,EAAE,GAAG,EAAE;gCACZ,OAAO,EAAE,CAAA;4BACX,CAAC,YAED,KAAC,cAAc,KAAG,GACX,CACV,IACG,IACF,GACF,CACP,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAmC;IACvD,QAAQ,KAAK,CAAC,OAAO,EAAE;QACrB,KAAK,SAAS;YACZ,OAAO,KAAC,cAAc,KAAG,CAAA;QAC3B,KAAK,OAAO;YACV,OAAO,KAAC,qBAAqB,KAAG,CAAA;KACnC;AACH,CAAC"}
package/lib/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- declare const seamapiReactVersion = "1.61.2";
1
+ declare const seamapiReactVersion = "1.62.0";
2
2
  export default seamapiReactVersion;
package/lib/version.js CHANGED
@@ -1,3 +1,3 @@
1
- const seamapiReactVersion = '1.61.2';
1
+ const seamapiReactVersion = '1.62.0';
2
2
  export default seamapiReactVersion;
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seamapi/react",
3
- "version": "1.61.2",
3
+ "version": "1.62.0",
4
4
  "description": "Seam Components.",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -24,6 +24,7 @@ import { NestedEditAccessCodeForm } from 'lib/seam/components/EditAccessCodeForm
24
24
  import { IconButton } from 'lib/ui/IconButton.js'
25
25
  import { ContentHeader } from 'lib/ui/layout/ContentHeader.js'
26
26
  import { LoadingToast } from 'lib/ui/LoadingToast/LoadingToast.js'
27
+ import { Snackbar } from 'lib/ui/Snackbar/Snackbar.js'
27
28
  import { EmptyPlaceholder } from 'lib/ui/Table/EmptyPlaceholder.js'
28
29
  import { TableBody } from 'lib/ui/Table/TableBody.js'
29
30
  import { TableHeader } from 'lib/ui/Table/TableHeader.js'
@@ -130,6 +131,13 @@ export function AccessCodeTable({
130
131
  [setSelectedEditAccessCodeId]
131
132
  )
132
133
 
134
+ const [accessCodeResult, setAccessCodeResult] = useState<
135
+ 'created' | 'updated' | null
136
+ >(null)
137
+
138
+ const accessCodeResultMessage =
139
+ accessCodeResult === 'created' ? t.accesCodeCreated : t.accesCodeUpdated
140
+
133
141
  if (selectedEditAccessCodeId != null) {
134
142
  return (
135
143
  <NestedEditAccessCodeForm
@@ -141,6 +149,9 @@ export function AccessCodeTable({
141
149
  onBack={() => {
142
150
  setSelectedEditAccessCodeId(null)
143
151
  }}
152
+ onSuccess={() => {
153
+ setAccessCodeResult('updated')
154
+ }}
144
155
  className={className}
145
156
  />
146
157
  )
@@ -148,20 +159,31 @@ export function AccessCodeTable({
148
159
 
149
160
  if (selectedViewAccessCodeId != null) {
150
161
  return (
151
- <NestedAccessCodeDetails
152
- accessCodeId={selectedViewAccessCodeId}
153
- onEdit={() => {
154
- setSelectedEditAccessCodeId(selectedViewAccessCodeId)
155
- }}
156
- disableLockUnlock={disableLockUnlock}
157
- disableCreateAccessCode={disableCreateAccessCode}
158
- disableEditAccessCode={disableEditAccessCode}
159
- disableDeleteAccessCode={disableDeleteAccessCode}
160
- onBack={() => {
161
- setSelectedViewAccessCodeId(null)
162
- }}
163
- className={className}
164
- />
162
+ <>
163
+ <Snackbar
164
+ variant='success'
165
+ message={accessCodeResultMessage}
166
+ visible={accessCodeResult != null}
167
+ autoDismiss
168
+ onClose={() => {
169
+ setAccessCodeResult(null)
170
+ }}
171
+ />
172
+ <NestedAccessCodeDetails
173
+ accessCodeId={selectedViewAccessCodeId}
174
+ onEdit={() => {
175
+ setSelectedEditAccessCodeId(selectedViewAccessCodeId)
176
+ }}
177
+ disableLockUnlock={disableLockUnlock}
178
+ disableCreateAccessCode={disableCreateAccessCode}
179
+ disableEditAccessCode={disableEditAccessCode}
180
+ disableDeleteAccessCode={disableDeleteAccessCode}
181
+ onBack={() => {
182
+ setSelectedViewAccessCodeId(null)
183
+ }}
184
+ className={className}
185
+ />
186
+ </>
165
187
  )
166
188
  }
167
189
 
@@ -175,6 +197,9 @@ export function AccessCodeTable({
175
197
  disableDeleteAccessCode={disableDeleteAccessCode}
176
198
  onBack={toggleAddAccessCodeForm}
177
199
  className={className}
200
+ onSuccess={() => {
201
+ setAccessCodeResult('created')
202
+ }}
178
203
  />
179
204
  )
180
205
  }
@@ -184,52 +209,63 @@ export function AccessCodeTable({
184
209
  }
185
210
 
186
211
  return (
187
- <div className={classNames('seam-table', className)}>
188
- <ContentHeader onBack={onBack} />
189
- <TableHeader>
190
- <div className='seam-left'>
191
- {title != null ? (
192
- <TableTitle>
193
- {heading ?? title ?? t.accessCodes}{' '}
194
- <Caption>({filteredAccessCodes.length})</Caption>
195
- </TableTitle>
196
- ) : (
197
- <div className='seam-fragment' />
198
- )}
199
- {!disableCreateAccessCode && (
200
- <IconButton
201
- onClick={toggleAddAccessCodeForm}
202
- className='seam-add-button'
203
- >
204
- <AddIcon />
205
- </IconButton>
212
+ <>
213
+ <Snackbar
214
+ variant='success'
215
+ message={accessCodeResultMessage}
216
+ visible={accessCodeResult != null}
217
+ autoDismiss
218
+ onClose={() => {
219
+ setAccessCodeResult(null)
220
+ }}
221
+ />
222
+ <div className={classNames('seam-table', className)}>
223
+ <ContentHeader onBack={onBack} />
224
+ <TableHeader>
225
+ <div className='seam-left'>
226
+ {title != null ? (
227
+ <TableTitle>
228
+ {heading ?? title ?? t.accessCodes}{' '}
229
+ <Caption>({filteredAccessCodes.length})</Caption>
230
+ </TableTitle>
231
+ ) : (
232
+ <div className='seam-fragment' />
233
+ )}
234
+ {!disableCreateAccessCode && (
235
+ <IconButton
236
+ onClick={toggleAddAccessCodeForm}
237
+ className='seam-add-button'
238
+ >
239
+ <AddIcon />
240
+ </IconButton>
241
+ )}
242
+ </div>
243
+ <div className='seam-table-header-loading-wrap'>
244
+ <LoadingToast
245
+ isLoading={isInitialLoading}
246
+ label={t.loading}
247
+ top={-20}
248
+ />
249
+ </div>
250
+ {!disableSearch && (
251
+ <SearchTextField
252
+ value={searchInputValue}
253
+ onChange={setSearchInputValue}
254
+ disabled={(accessCodes?.length ?? 0) === 0}
255
+ />
206
256
  )}
207
- </div>
208
- <div className='seam-table-header-loading-wrap'>
209
- <LoadingToast
210
- isLoading={isInitialLoading}
211
- label={t.loading}
212
- top={-20}
257
+ </TableHeader>
258
+ <TableBody>
259
+ <Content
260
+ accessCodes={filteredAccessCodes}
261
+ onAccessCodeClick={handleAccessCodeClick}
262
+ onAccessCodeEdit={handleAccessCodeEdit}
263
+ disableEditAccessCode={disableEditAccessCode}
264
+ disableDeleteAccessCode={disableDeleteAccessCode}
213
265
  />
214
- </div>
215
- {!disableSearch && (
216
- <SearchTextField
217
- value={searchInputValue}
218
- onChange={setSearchInputValue}
219
- disabled={(accessCodes?.length ?? 0) === 0}
220
- />
221
- )}
222
- </TableHeader>
223
- <TableBody>
224
- <Content
225
- accessCodes={filteredAccessCodes}
226
- onAccessCodeClick={handleAccessCodeClick}
227
- onAccessCodeEdit={handleAccessCodeEdit}
228
- disableEditAccessCode={disableEditAccessCode}
229
- disableDeleteAccessCode={disableDeleteAccessCode}
230
- />
231
- </TableBody>
232
- </div>
266
+ </TableBody>
267
+ </div>
268
+ </>
233
269
  )
234
270
  }
235
271
 
@@ -296,4 +332,6 @@ const t = {
296
332
  accessCodes: 'Access Codes',
297
333
  noAccessCodesMessage: 'Sorry, no access codes were found',
298
334
  loading: 'Loading access codes',
335
+ accesCodeUpdated: 'Access code updated',
336
+ accesCodeCreated: 'Access code created',
299
337
  }
@@ -5,6 +5,7 @@ export const name = 'seam-create-access-code-form'
5
5
 
6
6
  export const props: ElementProps<CreateAccessCodeFormProps> = {
7
7
  deviceId: 'string',
8
+ onSuccess: 'object',
8
9
  }
9
10
 
10
11
  export { CreateAccessCodeForm as Component } from './CreateAccessCodeForm.js'
@@ -1,5 +1,5 @@
1
1
  import { useState } from 'react'
2
- import type { SeamError } from 'seamapi'
2
+ import type { AccessCode, SeamError } from 'seamapi'
3
3
 
4
4
  import { useComponentTelemetry } from 'lib/telemetry/index.js'
5
5
 
@@ -18,6 +18,7 @@ import {
18
18
 
19
19
  export interface CreateAccessCodeFormProps extends CommonProps {
20
20
  deviceId: string
21
+ onSuccess?: (accessCodeId: string) => void
21
22
  }
22
23
 
23
24
  export const NestedCreateAccessCodeForm =
@@ -27,6 +28,7 @@ export function CreateAccessCodeForm({
27
28
  className,
28
29
  onBack,
29
30
  deviceId,
31
+ onSuccess,
30
32
  }: CreateAccessCodeFormProps): JSX.Element | null {
31
33
  useComponentTelemetry('CreateAccessCodeForm')
32
34
 
@@ -38,18 +40,30 @@ export function CreateAccessCodeForm({
38
40
  return null
39
41
  }
40
42
 
41
- return <Content device={device} className={className} onBack={onBack} />
43
+ return (
44
+ <Content
45
+ device={device}
46
+ className={className}
47
+ onBack={onBack}
48
+ onSuccess={onSuccess}
49
+ />
50
+ )
42
51
  }
43
52
 
44
53
  function Content({
45
54
  device,
46
55
  className,
47
56
  onBack,
57
+ onSuccess,
48
58
  }: Omit<CreateAccessCodeFormProps, 'deviceId'> & {
49
59
  device: NonNullable<UseDeviceData>
50
60
  }): JSX.Element {
51
61
  const { submit, isSubmitting, responseErrors } = useSubmitCreateAccessCode({
52
- onSuccess: () => {
62
+ onSuccess: (accessCode: AccessCode) => {
63
+ if (onSuccess != null) {
64
+ onSuccess(accessCode.access_code_id)
65
+ }
66
+
53
67
  if (onBack != null) {
54
68
  onBack()
55
69
  }
@@ -68,7 +82,9 @@ function Content({
68
82
  )
69
83
  }
70
84
 
71
- function useSubmitCreateAccessCode(params: { onSuccess: () => void }): {
85
+ function useSubmitCreateAccessCode(params: {
86
+ onSuccess: (accessCode: AccessCode) => void
87
+ }): {
72
88
  submit: (data: AccessCodeFormSubmitData) => void
73
89
  isSubmitting: boolean
74
90
  responseErrors: ResponseErrors | null
@@ -5,6 +5,7 @@ export const name = 'seam-edit-access-code-form'
5
5
 
6
6
  export const props: ElementProps<EditAccessCodeFormProps> = {
7
7
  accessCodeId: 'string',
8
+ onSuccess: 'object',
8
9
  }
9
10
 
10
11
  export { EditAccessCodeForm as Component } from './EditAccessCodeForm.js'
@@ -19,6 +19,7 @@ import {
19
19
 
20
20
  export interface EditAccessCodeFormProps extends CommonProps {
21
21
  accessCodeId: string
22
+ onSuccess?: (accessCodeId: string) => void
22
23
  }
23
24
 
24
25
  export const NestedEditAccessCodeForm =
@@ -28,6 +29,7 @@ export function EditAccessCodeForm({
28
29
  accessCodeId,
29
30
  onBack,
30
31
  className,
32
+ onSuccess,
31
33
  }: EditAccessCodeFormProps): JSX.Element | null {
32
34
  useComponentTelemetry('EditAccessCodeForm')
33
35
 
@@ -40,7 +42,12 @@ export function EditAccessCodeForm({
40
42
  }
41
43
 
42
44
  return (
43
- <Content accessCode={accessCode} className={className} onBack={onBack} />
45
+ <Content
46
+ accessCode={accessCode}
47
+ className={className}
48
+ onBack={onBack}
49
+ onSuccess={onSuccess}
50
+ />
44
51
  )
45
52
  }
46
53
 
@@ -48,6 +55,7 @@ function Content({
48
55
  className,
49
56
  onBack,
50
57
  accessCode,
58
+ onSuccess,
51
59
  }: Omit<EditAccessCodeFormProps, 'accessCodeId'> & {
52
60
  accessCode: NonNullable<UseAccessCodeData>
53
61
  }): JSX.Element | null {
@@ -57,7 +65,15 @@ function Content({
57
65
 
58
66
  const { submit, isSubmitting, responseErrors } = useSubmitEditAccessCode(
59
67
  accessCode,
60
- onBack
68
+ () => {
69
+ if (onSuccess != null) {
70
+ onSuccess(accessCode.access_code_id)
71
+ }
72
+
73
+ if (onBack != null) {
74
+ onBack()
75
+ }
76
+ }
61
77
  )
62
78
 
63
79
  if (device == null) {
@@ -1,5 +1,5 @@
1
1
  import classNames from 'classnames'
2
- import { useEffect, useState } from 'react'
2
+ import { useEffect } from 'react'
3
3
 
4
4
  import { CheckGreenIcon } from 'lib/icons/CheckGreen.js'
5
5
  import { CloseWhiteIcon } from 'lib/icons/CloseWhite.js'
@@ -11,6 +11,7 @@ interface SnackbarProps {
11
11
  message: string
12
12
  variant: SnackbarVariant
13
13
  visible: boolean
14
+ onClose: () => void
14
15
  action?: {
15
16
  label: string
16
17
  onClick: () => void
@@ -28,34 +29,29 @@ export function Snackbar({
28
29
  autoDismiss = false,
29
30
  dismissAfterMs = 5000,
30
31
  disableCloseButton = false,
32
+ onClose,
31
33
  }: SnackbarProps): JSX.Element {
32
- const [hidden, setHidden] = useState(visible)
33
-
34
34
  const { label: actionLabel, onClick: handleActionClick } = action ?? {}
35
35
 
36
- useEffect(() => {
37
- setHidden(!visible)
38
- }, [visible])
39
-
40
36
  useEffect(() => {
41
37
  if (!autoDismiss) {
42
38
  return () => {}
43
39
  }
44
40
 
45
41
  const timeout = globalThis.setTimeout(() => {
46
- setHidden(false)
42
+ onClose()
47
43
  }, dismissAfterMs)
48
44
 
49
45
  return () => {
50
46
  globalThis.clearTimeout(timeout)
51
47
  }
52
- }, [autoDismiss, dismissAfterMs])
48
+ }, [autoDismiss, dismissAfterMs, onClose])
53
49
 
54
50
  return (
55
51
  <div className='seam-snackbar-wrap'>
56
52
  <div
57
53
  className={classNames('seam-snackbar', {
58
- 'seam-snackbar-hide': hidden,
54
+ 'seam-snackbar-visible': visible,
59
55
  })}
60
56
  >
61
57
  <SnackbarIcon variant={variant} />
@@ -75,7 +71,7 @@ export function Snackbar({
75
71
  <button
76
72
  className='seam-snackbar-close-button'
77
73
  onClick={() => {
78
- setHidden(true)
74
+ onClose()
79
75
  }}
80
76
  >
81
77
  <CloseWhiteIcon />
@@ -1,3 +1,3 @@
1
- const seamapiReactVersion = '1.61.2'
1
+ const seamapiReactVersion = '1.62.0'
2
2
 
3
3
  export default seamapiReactVersion
@@ -28,13 +28,16 @@
28
28
  position: absolute;
29
29
  bottom: 24px;
30
30
  will-change: transform;
31
- animation: fade-in-up 0.2s motion.$ease-in-out-quint;
32
31
  transition: all 0.2s motion.$ease-in-out-quint;
32
+ opacity: 0;
33
+ visibility: hidden;
34
+ transform: translateY(24px);
33
35
 
34
- &.seam-snackbar-hide {
35
- transform: translateY(24px);
36
- opacity: 0;
37
- visibility: hidden;
36
+ &.seam-snackbar-visible {
37
+ animation: fade-in-up 0.2s motion.$ease-in-out-quint;
38
+ transform: translateY(0);
39
+ opacity: 1;
40
+ visibility: visible;
38
41
  }
39
42
 
40
43
  .seam-snackbar-message-wrap {