@indietabletop/appkit 6.1.6 → 7.0.0-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/dist/AppConfig/AppConfig.d.ts +29 -0
- package/dist/AuthCard/AuthCard.d.ts +10 -0
- package/dist/AuthCard/AuthCard.stories.d.ts +34 -0
- package/dist/AuthCard/style.css.d.ts +23 -0
- package/dist/DialogTrigger/index.d.ts +13 -0
- package/dist/DocumentTitle/DocumentTitle.d.ts +3 -0
- package/dist/EnumMapper.d.ts +25 -0
- package/dist/ExternalLink.d.ts +3 -0
- package/dist/FullscreenDismissBlocker.d.ts +5 -0
- package/{lib/HistoryState.ts → dist/HistoryState.d.ts} +2 -5
- package/dist/IndieTabletopClubLogo.d.ts +7 -0
- package/dist/IndieTabletopClubSymbol.d.ts +7 -0
- package/dist/InfoPage/index.d.ts +8 -0
- package/dist/InfoPage/pages.d.ts +2 -0
- package/dist/InfoPage/style.css.d.ts +5 -0
- package/dist/Letterhead/index.d.ts +19 -0
- package/dist/Letterhead/stories.d.ts +13 -0
- package/dist/Letterhead/style.css.d.ts +46 -0
- package/dist/LetterheadForm/LetterheadReadonlyTextField.stories.d.ts +17 -0
- package/dist/LetterheadForm/LetterheadSubmitError.stories.d.ts +11 -0
- package/dist/LetterheadForm/LetterheadTextField.stories.d.ts +336 -0
- package/dist/LetterheadForm/index.d.ts +44 -0
- package/dist/LetterheadForm/style.css.d.ts +8 -0
- package/dist/LoadingIndicator.d.ts +3 -0
- package/dist/MiddotSeparated/MiddotSeparated.d.ts +8 -0
- package/dist/MiddotSeparated/MiddotSeparated.stories.d.ts +586 -0
- package/dist/MiddotSeparated/style.css.d.ts +1 -0
- package/dist/ModalDialog/index.d.ts +12 -0
- package/dist/ModalDialog/style.css.d.ts +58 -0
- package/dist/ModernIDB/Cursor.d.ts +56 -0
- package/dist/ModernIDB/ModernIDB.d.ts +66 -0
- package/dist/ModernIDB/ModernIDBError.d.ts +3 -0
- package/dist/ModernIDB/ObjectStore.d.ts +112 -0
- package/dist/ModernIDB/ObjectStoreIndex.d.ts +53 -0
- package/dist/ModernIDB/Transaction.d.ts +16 -0
- package/dist/ModernIDB/VersionChangeManager.d.ts +30 -0
- package/dist/ModernIDB/bindings/factory.d.ts +12 -0
- package/dist/ModernIDB/bindings/index.d.ts +2 -0
- package/{lib/ModernIDB/bindings/types.ts → dist/ModernIDB/bindings/types.d.ts} +13 -32
- package/dist/ModernIDB/bindings/utils.d.ts +2 -0
- package/dist/ModernIDB/index.d.ts +10 -0
- package/dist/ModernIDB/types.d.ts +88 -0
- package/dist/ModernIDB/utils.d.ts +4 -0
- package/dist/QRCode/QRCode.d.ts +7 -0
- package/dist/QRCode/QRCode.stories.d.ts +33 -0
- package/dist/QRCode/style.css.d.ts +4 -0
- package/dist/ReleaseInfo/index.d.ts +5 -0
- package/dist/RulesetResolver.d.ts +87 -0
- package/dist/SafariCheck/SafariCheck.d.ts +23 -0
- package/dist/SafariCheck/SafariCheck.stories.d.ts +73 -0
- package/dist/SafariCheck/style.css.d.ts +17 -0
- package/dist/ServiceWorkerHandler.d.ts +11 -0
- package/dist/ShareButton/ShareButton.d.ts +57 -0
- package/dist/ShareButton/ShareButton.stories.d.ts +1577 -0
- package/dist/ShareButton/test.css.d.ts +1 -0
- package/dist/SubscribeCard/LetterheadInfoCard.d.ts +2 -0
- package/dist/SubscribeCard/SubscribeByEmailCard.d.ts +24 -0
- package/dist/SubscribeCard/SubscribeByEmailCard.stories.d.ts +10 -0
- package/dist/SubscribeCard/SubscribeByPledgeCard.d.ts +36 -0
- package/dist/SubscribeCard/SubscribeByPledgeCard.stories.d.ts +65 -0
- package/dist/SubscribeCard/style.css.d.ts +4 -0
- package/dist/account/AccountIssueView.d.ts +3 -0
- package/dist/account/AlreadyLoggedInView.d.ts +5 -0
- package/dist/account/CurrentUserFetcher.d.ts +20 -0
- package/dist/account/CurrentUserFetcher.stories.d.ts +136 -0
- package/dist/account/FailureFallbackView.d.ts +1 -0
- package/dist/account/JoinCard.d.ts +14 -0
- package/dist/account/JoinCard.stories.d.ts +143 -0
- package/dist/account/LoadingView.d.ts +1 -0
- package/dist/account/LoginCard.d.ts +39 -0
- package/dist/account/LoginCard.stories.d.ts +217 -0
- package/dist/account/LoginView.d.ts +10 -0
- package/dist/account/NoConnectionView.d.ts +4 -0
- package/dist/account/PasswordResetCard.d.ts +15 -0
- package/dist/account/PasswordResetCard.stories.d.ts +128 -0
- package/dist/account/UserMismatchView.d.ts +6 -0
- package/dist/account/VerifyPage.d.ts +13 -0
- package/dist/account/style.css.d.ts +10 -0
- package/{lib/account/types.ts → dist/account/types.d.ts} +3 -6
- package/dist/account/useFetchCurrentUser.d.ts +28 -0
- package/dist/account/useRedirectPath.d.ts +6 -0
- package/dist/animations.css.d.ts +3 -0
- package/dist/append-copy-to-text.d.ts +10 -0
- package/dist/append-copy-to-text.test.d.ts +1 -0
- package/dist/appkit.css +1 -0
- package/dist/appkit.js +10692 -0
- package/dist/async-op.d.ts +101 -0
- package/dist/atomic.css.d.ts +6 -0
- package/{lib/caught-value.ts → dist/caught-value.d.ts} +1 -11
- package/{lib/class-names.ts → dist/class-names.d.ts} +6 -17
- package/dist/client.d.ts +424 -0
- package/dist/common.css.d.ts +5 -0
- package/dist/copyrightRange.d.ts +1 -0
- package/dist/copyrightRange.test.d.ts +1 -0
- package/dist/createSafeStorage.d.ts +34 -0
- package/dist/failureMessages.d.ts +20 -0
- package/dist/failureMessages.test.d.ts +1 -0
- package/dist/form/FormSubmitButton.d.ts +17 -0
- package/dist/form/SubmitErrorAlert.d.ts +5 -0
- package/dist/form/style.css.d.ts +3 -0
- package/dist/globals.css.d.ts +0 -0
- package/dist/groupBy.d.ts +1 -0
- package/dist/groupBy.test.d.ts +1 -0
- package/dist/hrefs.d.ts +32 -0
- package/dist/hrefs.test.d.ts +1 -0
- package/dist/idToDate.d.ts +5 -0
- package/dist/idToDate.test.d.ts +1 -0
- package/dist/ids.d.ts +1 -0
- package/dist/ids.test.d.ts +1 -0
- package/dist/index.d.ts +64 -0
- package/dist/internal.css.d.ts +2 -0
- package/dist/mailto.d.ts +8 -0
- package/dist/mailto.test.d.ts +1 -0
- package/dist/media.d.ts +39 -0
- package/dist/random.d.ts +3 -0
- package/dist/result/swr.d.ts +4 -0
- package/{lib/sleep.ts → dist/sleep.d.ts} +1 -3
- package/dist/store/index.d.ts +237 -0
- package/dist/store/store.d.ts +144 -0
- package/dist/store/types.d.ts +49 -0
- package/dist/store/utils.d.ts +10 -0
- package/dist/storybook/decorators.d.ts +3 -0
- package/dist/structs.d.ts +1 -0
- package/{lib/typeguards.ts → dist/typeguards.d.ts} +1 -3
- package/dist/typeguards.test.d.ts +1 -0
- package/{lib/types.ts → dist/types.d.ts} +12 -23
- package/dist/unique.d.ts +10 -0
- package/dist/unique.test.d.ts +1 -0
- package/dist/use-async-op.d.ts +6 -0
- package/dist/use-document-background-color.d.ts +4 -0
- package/dist/use-form.d.ts +29 -0
- package/dist/use-is-installed.d.ts +8 -0
- package/dist/use-media-query.d.ts +1 -0
- package/dist/use-reverting-state.d.ts +5 -0
- package/dist/use-scroll-restoration.d.ts +25 -0
- package/dist/useEnsureValue.d.ts +6 -0
- package/dist/useInvokeClient.d.ts +25 -0
- package/dist/useIsVisible.d.ts +4 -0
- package/dist/utm.d.ts +58 -0
- package/dist/utm.test.d.ts +1 -0
- package/dist/validations.d.ts +3 -0
- package/dist/vars.css.d.ts +10 -0
- package/package.json +12 -5
- package/lib/AppConfig/AppConfig.tsx +0 -61
- package/lib/AuthCard/AuthCard.stories.ts +0 -34
- package/lib/AuthCard/AuthCard.tsx +0 -64
- package/lib/AuthCard/style.css.ts +0 -49
- package/lib/DialogTrigger/index.tsx +0 -36
- package/lib/DocumentTitle/DocumentTitle.tsx +0 -10
- package/lib/EnumMapper.ts +0 -50
- package/lib/ExternalLink.tsx +0 -10
- package/lib/FullscreenDismissBlocker.tsx +0 -23
- package/lib/IndieTabletopClubLogo.tsx +0 -44
- package/lib/IndieTabletopClubSymbol.tsx +0 -37
- package/lib/InfoPage/index.tsx +0 -46
- package/lib/InfoPage/pages.tsx +0 -36
- package/lib/InfoPage/style.css.ts +0 -36
- package/lib/Letterhead/index.tsx +0 -85
- package/lib/Letterhead/stories.tsx +0 -41
- package/lib/Letterhead/style.css.ts +0 -152
- package/lib/LetterheadForm/LetterheadReadonlyTextField.stories.tsx +0 -17
- package/lib/LetterheadForm/LetterheadSubmitError.stories.tsx +0 -19
- package/lib/LetterheadForm/LetterheadTextField.stories.tsx +0 -19
- package/lib/LetterheadForm/index.tsx +0 -137
- package/lib/LetterheadForm/style.css.ts +0 -89
- package/lib/LoadingIndicator.tsx +0 -40
- package/lib/MiddotSeparated/MiddotSeparated.stories.ts +0 -26
- package/lib/MiddotSeparated/MiddotSeparated.tsx +0 -26
- package/lib/MiddotSeparated/style.css.ts +0 -10
- package/lib/ModalDialog/index.tsx +0 -28
- package/lib/ModalDialog/style.css.ts +0 -88
- package/lib/ModernIDB/Cursor.ts +0 -91
- package/lib/ModernIDB/ModernIDB.ts +0 -337
- package/lib/ModernIDB/ModernIDBError.ts +0 -9
- package/lib/ModernIDB/ObjectStore.ts +0 -195
- package/lib/ModernIDB/ObjectStoreIndex.ts +0 -102
- package/lib/ModernIDB/README.md +0 -9
- package/lib/ModernIDB/Transaction.ts +0 -40
- package/lib/ModernIDB/VersionChangeManager.ts +0 -57
- package/lib/ModernIDB/bindings/factory.tsx +0 -165
- package/lib/ModernIDB/bindings/index.ts +0 -2
- package/lib/ModernIDB/bindings/utils.tsx +0 -32
- package/lib/ModernIDB/index.ts +0 -10
- package/lib/ModernIDB/types.ts +0 -120
- package/lib/ModernIDB/utils.ts +0 -51
- package/lib/QRCode/QRCode.stories.tsx +0 -41
- package/lib/QRCode/QRCode.tsx +0 -54
- package/lib/QRCode/style.css.ts +0 -23
- package/lib/ReleaseInfo/index.tsx +0 -29
- package/lib/RulesetResolver.ts +0 -214
- package/lib/SafariCheck/SafariCheck.stories.tsx +0 -99
- package/lib/SafariCheck/SafariCheck.tsx +0 -273
- package/lib/SafariCheck/addToDock.svg +0 -13
- package/lib/SafariCheck/addToHomeScreen.svg +0 -12
- package/lib/SafariCheck/safari.svg +0 -32
- package/lib/SafariCheck/shareIcon.svg +0 -11
- package/lib/SafariCheck/style.css.ts +0 -106
- package/lib/ServiceWorkerHandler.tsx +0 -53
- package/lib/ShareButton/ShareButton.stories.tsx +0 -58
- package/lib/ShareButton/ShareButton.tsx +0 -153
- package/lib/ShareButton/test.css.ts +0 -3
- package/lib/SubscribeCard/LetterheadInfoCard.tsx +0 -23
- package/lib/SubscribeCard/SubscribeByEmailCard.stories.tsx +0 -69
- package/lib/SubscribeCard/SubscribeByEmailCard.tsx +0 -183
- package/lib/SubscribeCard/SubscribeByPledgeCard.stories.tsx +0 -133
- package/lib/SubscribeCard/SubscribeByPledgeCard.tsx +0 -127
- package/lib/SubscribeCard/style.css.ts +0 -14
- package/lib/account/AccountIssueView.tsx +0 -44
- package/lib/account/AlreadyLoggedInView.tsx +0 -47
- package/lib/account/CurrentUserFetcher.stories.tsx +0 -292
- package/lib/account/CurrentUserFetcher.tsx +0 -118
- package/lib/account/FailureFallbackView.tsx +0 -36
- package/lib/account/JoinCard.stories.tsx +0 -257
- package/lib/account/JoinCard.tsx +0 -301
- package/lib/account/LoadingView.tsx +0 -14
- package/lib/account/LoginCard.stories.tsx +0 -288
- package/lib/account/LoginCard.tsx +0 -100
- package/lib/account/LoginView.tsx +0 -151
- package/lib/account/NoConnectionView.tsx +0 -34
- package/lib/account/PasswordResetCard.stories.tsx +0 -242
- package/lib/account/PasswordResetCard.tsx +0 -296
- package/lib/account/UserMismatchView.tsx +0 -62
- package/lib/account/VerifyPage.tsx +0 -195
- package/lib/account/style.css.ts +0 -57
- package/lib/account/useFetchCurrentUser.tsx +0 -63
- package/lib/account/useRedirectPath.ts +0 -21
- package/lib/animations.css.ts +0 -17
- package/lib/append-copy-to-text.ts +0 -35
- package/lib/async-op.ts +0 -286
- package/lib/atomic.css.ts +0 -11
- package/lib/client.ts +0 -662
- package/lib/common.css.ts +0 -48
- package/lib/copyrightRange.ts +0 -10
- package/lib/createSafeStorage.ts +0 -91
- package/lib/failureMessages.ts +0 -108
- package/lib/form/FormSubmitButton.tsx +0 -58
- package/lib/form/SubmitErrorAlert.tsx +0 -21
- package/lib/form/style.css.ts +0 -9
- package/lib/globals.css.ts +0 -62
- package/lib/groupBy.ts +0 -25
- package/lib/hrefs.ts +0 -48
- package/lib/idToDate.ts +0 -8
- package/lib/ids.ts +0 -6
- package/lib/index.ts +0 -71
- package/lib/internal.css.ts +0 -10
- package/lib/mailto.ts +0 -40
- package/lib/media.ts +0 -50
- package/lib/random.ts +0 -19
- package/lib/result/swr.ts +0 -18
- package/lib/store/index.tsx +0 -241
- package/lib/store/store.ts +0 -479
- package/lib/store/types.ts +0 -45
- package/lib/store/utils.ts +0 -54
- package/lib/storybook/decorators.tsx +0 -10
- package/lib/structs.ts +0 -3
- package/lib/unique.ts +0 -24
- package/lib/use-async-op.ts +0 -16
- package/lib/use-document-background-color.ts +0 -16
- package/lib/use-form.ts +0 -78
- package/lib/use-is-installed.ts +0 -17
- package/lib/use-media-query.ts +0 -21
- package/lib/use-reverting-state.ts +0 -32
- package/lib/use-scroll-restoration.ts +0 -99
- package/lib/useEnsureValue.ts +0 -31
- package/lib/useInvokeClient.ts +0 -54
- package/lib/useIsVisible.ts +0 -27
- package/lib/utm.ts +0 -92
- package/lib/validations.ts +0 -25
- package/lib/vars.css.ts +0 -13
package/lib/createSafeStorage.ts
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { type Struct, validate } from "superstruct";
|
|
2
|
-
import { fromTryCatch } from "./async-op.ts";
|
|
3
|
-
|
|
4
|
-
type AnyStruct = Struct<any, any>;
|
|
5
|
-
|
|
6
|
-
type StructsConfig = Record<string, AnyStruct>;
|
|
7
|
-
|
|
8
|
-
type SafeStorage<T extends Record<string, AnyStruct>> = ReturnType<
|
|
9
|
-
typeof createSafeStorage<T>
|
|
10
|
-
>;
|
|
11
|
-
|
|
12
|
-
export type SafeStorageKey<T extends SafeStorage<StructsConfig>> = ReturnType<
|
|
13
|
-
T["keys"]
|
|
14
|
-
>[number];
|
|
15
|
-
|
|
16
|
-
type StructValue<T> = T extends Struct<infer V> ? V : never;
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Creates an object with an interface similar to localStorage, but that
|
|
20
|
-
* enforces that values are parsed and validated before being retrieved,
|
|
21
|
-
* stringified when being set, and that both keys and values typecheck.
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```ts
|
|
25
|
-
* const safeStorage = createSafeStorage({
|
|
26
|
-
* currentUser: currentUser(),
|
|
27
|
-
* sessionInfo: sessionInfo(),
|
|
28
|
-
* lastSuccessfulSyncTs: number(),
|
|
29
|
-
* });
|
|
30
|
-
*
|
|
31
|
-
* safeStorage.getItem("currentUser") // Will be valid current user or `null`
|
|
32
|
-
* safeStorage.setItem("currentUser", { ... }) // Typechecked key and value
|
|
33
|
-
* safeStorage.removeItem("currentUser") // Typechecked key
|
|
34
|
-
* safeStorage.clear() // Removes all "owned" keys
|
|
35
|
-
*
|
|
36
|
-
* ```
|
|
37
|
-
*/
|
|
38
|
-
export function createSafeStorage<T extends StructsConfig>(structs: T) {
|
|
39
|
-
return {
|
|
40
|
-
getItem<K extends keyof T & string>(key: K) {
|
|
41
|
-
const struct = structs[key];
|
|
42
|
-
if (!struct) {
|
|
43
|
-
throw new Error(`No struct found for ${key}`);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
const storedValue = localStorage.getItem(key);
|
|
47
|
-
|
|
48
|
-
if (storedValue === null) {
|
|
49
|
-
return null;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const parsedResult = fromTryCatch<unknown>(() => JSON.parse(storedValue));
|
|
53
|
-
|
|
54
|
-
if (parsedResult.isFailure) {
|
|
55
|
-
console.warn(`Could not parse localStorage value at key '${key}'.`);
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const [error, value] = validate(parsedResult.value, struct, {
|
|
60
|
-
coerce: true,
|
|
61
|
-
mask: true,
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
if (error) {
|
|
65
|
-
console.warn(
|
|
66
|
-
`Validation failed for localStorage value at key '${key}'. ${error.message}`,
|
|
67
|
-
);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
return value as StructValue<T[K]> | null;
|
|
71
|
-
},
|
|
72
|
-
|
|
73
|
-
setItem<K extends keyof T & string>(key: K, value: StructValue<T[K]>) {
|
|
74
|
-
localStorage.setItem(key, JSON.stringify(value));
|
|
75
|
-
},
|
|
76
|
-
|
|
77
|
-
removeItem(key: keyof T & string) {
|
|
78
|
-
localStorage.removeItem(key);
|
|
79
|
-
},
|
|
80
|
-
|
|
81
|
-
clear() {
|
|
82
|
-
for (const key in structs) {
|
|
83
|
-
localStorage.removeItem(key);
|
|
84
|
-
}
|
|
85
|
-
},
|
|
86
|
-
|
|
87
|
-
keys() {
|
|
88
|
-
return Object.keys(structs) as (keyof T)[];
|
|
89
|
-
},
|
|
90
|
-
};
|
|
91
|
-
}
|
package/lib/failureMessages.ts
DELETED
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import type { FailurePayload } from "./types.ts";
|
|
2
|
-
|
|
3
|
-
type OnOverride<T> = (fallback: T, override?: Partial<T>) => T;
|
|
4
|
-
|
|
5
|
-
function createFailureMessageGetter<T>(
|
|
6
|
-
defaults: Record<number | "fallback" | "connection", T>,
|
|
7
|
-
options: { onOverride: OnOverride<T> },
|
|
8
|
-
) {
|
|
9
|
-
return function getMessage(
|
|
10
|
-
failure: FailurePayload,
|
|
11
|
-
overrides: Record<number, Partial<T>> = {},
|
|
12
|
-
) {
|
|
13
|
-
switch (failure.type) {
|
|
14
|
-
case "API_ERROR": {
|
|
15
|
-
return options.onOverride(
|
|
16
|
-
defaults[failure.code] ?? defaults.fallback,
|
|
17
|
-
overrides[failure.code],
|
|
18
|
-
);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
case "NETWORK_ERROR": {
|
|
22
|
-
return defaults.connection;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
default: {
|
|
26
|
-
return defaults.fallback;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export type FetchFailureAction =
|
|
33
|
-
| {
|
|
34
|
-
type: "LINK";
|
|
35
|
-
href: string;
|
|
36
|
-
label: string;
|
|
37
|
-
}
|
|
38
|
-
| {
|
|
39
|
-
type: "RELOAD" | "REFETCH";
|
|
40
|
-
label: string;
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
export type FetchFailureMessages = {
|
|
44
|
-
title: string;
|
|
45
|
-
description: string;
|
|
46
|
-
action: FetchFailureAction;
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
export const getFetchFailureMessages =
|
|
50
|
-
createFailureMessageGetter<FetchFailureMessages>(
|
|
51
|
-
{
|
|
52
|
-
401: {
|
|
53
|
-
title: "Not logged in",
|
|
54
|
-
description: "You must be logged in to view this page.",
|
|
55
|
-
action: { type: "LINK", href: "~/login", label: "Go to login" },
|
|
56
|
-
},
|
|
57
|
-
403: {
|
|
58
|
-
title: "Not authorized",
|
|
59
|
-
description: "You might be logged into the wrong account.",
|
|
60
|
-
action: { type: "LINK", href: "~/login", label: "Go to login" },
|
|
61
|
-
},
|
|
62
|
-
404: {
|
|
63
|
-
title: `Not found`,
|
|
64
|
-
description: `The link you have followed might be broken.`,
|
|
65
|
-
action: { type: "LINK", href: "~/", label: "Go back" },
|
|
66
|
-
},
|
|
67
|
-
500: {
|
|
68
|
-
title: `Ooops, something went wrong`,
|
|
69
|
-
description: `This is probably an issue with our servers. You can try refreshing.`,
|
|
70
|
-
action: { type: "RELOAD", label: "Reload app" },
|
|
71
|
-
},
|
|
72
|
-
connection: {
|
|
73
|
-
title: `No connection`,
|
|
74
|
-
description: `Check your interent connection and try again.`,
|
|
75
|
-
action: { type: "REFETCH", label: "Retry request" },
|
|
76
|
-
},
|
|
77
|
-
fallback: {
|
|
78
|
-
title: `Ooops, something went wrong`,
|
|
79
|
-
description: `This is probably an issue on our side. You can try refreshing.`,
|
|
80
|
-
action: { type: "RELOAD", label: "Reload app" },
|
|
81
|
-
},
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
onOverride(fallback, override) {
|
|
85
|
-
return { ...fallback, ...override };
|
|
86
|
-
},
|
|
87
|
-
},
|
|
88
|
-
);
|
|
89
|
-
|
|
90
|
-
export const getSubmitFailureMessage = createFailureMessageGetter(
|
|
91
|
-
{
|
|
92
|
-
500: `Could not submit form due to an unexpected server error. Please refresh the page and try again.`,
|
|
93
|
-
connection: `Could not submit form due to network error. Make sure you are connected to the internet and try again.`,
|
|
94
|
-
fallback: `Could not submit form due to an unexpected error. Please refresh the page and try again.`,
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
onOverride(fallback, override) {
|
|
98
|
-
return override ?? fallback;
|
|
99
|
-
},
|
|
100
|
-
},
|
|
101
|
-
);
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* @deprecated Use {@link getSubmitFailureMessage} instead.
|
|
105
|
-
*/
|
|
106
|
-
export function toKnownFailureMessage(failure: FailurePayload) {
|
|
107
|
-
return getSubmitFailureMessage(failure);
|
|
108
|
-
}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
type FormSubmitProps,
|
|
3
|
-
FormSubmit,
|
|
4
|
-
useFormContext,
|
|
5
|
-
useStoreState,
|
|
6
|
-
} from "@ariakit/react";
|
|
7
|
-
import type { ReactNode } from "react";
|
|
8
|
-
import { fadeIn } from "../animations.css.ts";
|
|
9
|
-
|
|
10
|
-
export type FormSubmitButtonProps = FormSubmitProps & {
|
|
11
|
-
children: ReactNode;
|
|
12
|
-
loading: ReactNode;
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Renders Ariakit FormSubmit component.
|
|
17
|
-
*
|
|
18
|
-
* It's main responsibility is to render the loading component (provided via
|
|
19
|
-
* the `loading` prop) when the form is in the submitting state. This component
|
|
20
|
-
* will be rendered over the usual content of the button, which will be hidden
|
|
21
|
-
* as long as the form is submitting.
|
|
22
|
-
*
|
|
23
|
-
* @remarks Must be rendered within Ariakit Form Context.
|
|
24
|
-
*/
|
|
25
|
-
export function FormSubmitButton(props: FormSubmitButtonProps) {
|
|
26
|
-
const { children, className, style, loading, ...submitProps } = props;
|
|
27
|
-
const form = useFormContext();
|
|
28
|
-
const isSubmitting = useStoreState(form, (s) => s?.submitting);
|
|
29
|
-
|
|
30
|
-
return (
|
|
31
|
-
<FormSubmit
|
|
32
|
-
{...submitProps}
|
|
33
|
-
className={className}
|
|
34
|
-
style={{ position: "relative", ...style }}
|
|
35
|
-
>
|
|
36
|
-
<span
|
|
37
|
-
style={{ opacity: isSubmitting ? 0 : 1, transition: "200ms opacity" }}
|
|
38
|
-
>
|
|
39
|
-
{children}
|
|
40
|
-
</span>
|
|
41
|
-
|
|
42
|
-
{isSubmitting && (
|
|
43
|
-
<div
|
|
44
|
-
style={{
|
|
45
|
-
display: "flex",
|
|
46
|
-
position: "absolute",
|
|
47
|
-
inset: "0",
|
|
48
|
-
alignItems: "center",
|
|
49
|
-
justifyContent: "center",
|
|
50
|
-
animation: `${fadeIn} 200ms 200ms both`,
|
|
51
|
-
}}
|
|
52
|
-
>
|
|
53
|
-
{loading}
|
|
54
|
-
</div>
|
|
55
|
-
)}
|
|
56
|
-
</FormSubmit>
|
|
57
|
-
);
|
|
58
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { useFormContext, useStoreState } from "@ariakit/react";
|
|
2
|
-
import { cx } from "../class-names.ts";
|
|
3
|
-
import { submitErrorAlert } from "./style.css.ts";
|
|
4
|
-
|
|
5
|
-
export type SubmitErrorMessageProps = {
|
|
6
|
-
name: string;
|
|
7
|
-
className?: string;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
export function SubmitErrorAlert(props: SubmitErrorMessageProps) {
|
|
11
|
-
const form = useFormContext();
|
|
12
|
-
const message = useStoreState(form, (s) => {
|
|
13
|
-
return s?.errors[props.name] as string | undefined;
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
return (
|
|
17
|
-
<div role="alert" {...cx(props, submitErrorAlert.container)}>
|
|
18
|
-
{message}
|
|
19
|
-
</div>
|
|
20
|
-
);
|
|
21
|
-
}
|
package/lib/form/style.css.ts
DELETED
package/lib/globals.css.ts
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { globalStyle } from "@vanilla-extract/css";
|
|
2
|
-
|
|
3
|
-
// Apply global vars
|
|
4
|
-
import "./vars.css.ts";
|
|
5
|
-
|
|
6
|
-
globalStyle(":root", {
|
|
7
|
-
interpolateSize: "allow-keywords",
|
|
8
|
-
fontSynthesis: "none",
|
|
9
|
-
textRendering: "optimizeLegibility",
|
|
10
|
-
WebkitFontSmoothing: "antialiased",
|
|
11
|
-
MozOsxFontSmoothing: "grayscale",
|
|
12
|
-
WebkitTapHighlightColor: "transparent",
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
globalStyle("*", {
|
|
16
|
-
boxSizing: "border-box",
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
globalStyle("img, picture, svg", {
|
|
20
|
-
display: "block",
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
globalStyle("a", {
|
|
24
|
-
display: "block",
|
|
25
|
-
color: "inherit",
|
|
26
|
-
textDecoration: "none",
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
globalStyle("input, textarea", {
|
|
30
|
-
fontFamily: "inherit",
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
globalStyle("button", {
|
|
34
|
-
display: "block",
|
|
35
|
-
fontSize: "inherit",
|
|
36
|
-
fontFamily: "inherit",
|
|
37
|
-
backgroundColor: "transparent",
|
|
38
|
-
border: "none",
|
|
39
|
-
color: "inherit",
|
|
40
|
-
cursor: "pointer",
|
|
41
|
-
padding: 0,
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
globalStyle("body, h1, h2, h3, h4, h5, h6, p, ul, li, ol", {
|
|
45
|
-
margin: 0,
|
|
46
|
-
padding: 0,
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
globalStyle("ul, ol", {
|
|
50
|
-
listStyle: "none",
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
// Fathom SPA support depends on this image being added to the DOM, but they
|
|
54
|
-
// are sloppy about taking out of the document flow, meaning that on pages
|
|
55
|
-
// that are 100vh, there is a scrollbar flicker as the img element is added
|
|
56
|
-
// to the DOM and then removed. This fixes said issue.
|
|
57
|
-
globalStyle(`img[src^="https://cdn.usefathom.com/"]`, {
|
|
58
|
-
position: "absolute",
|
|
59
|
-
top: 0,
|
|
60
|
-
left: 0,
|
|
61
|
-
opacity: 0.01,
|
|
62
|
-
});
|
package/lib/groupBy.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export function groupBy<T, K extends string>(
|
|
2
|
-
items: T[],
|
|
3
|
-
getKey: (item: T) => K,
|
|
4
|
-
) {
|
|
5
|
-
const groups: Partial<Record<K, T[]>> = {};
|
|
6
|
-
|
|
7
|
-
for (const item of items) {
|
|
8
|
-
const key = getKey(item);
|
|
9
|
-
const group = groups[key];
|
|
10
|
-
if (group) {
|
|
11
|
-
group.push(item);
|
|
12
|
-
} else {
|
|
13
|
-
groups[key] = [item];
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
// Using a Proxy to make sure that even if one of the possible group keys
|
|
18
|
-
// was not included in the provided list, that group will still return
|
|
19
|
-
// an empty list rather than `undefined`.
|
|
20
|
-
return new Proxy(groups, {
|
|
21
|
-
get(target, prop, receiver) {
|
|
22
|
-
return Reflect.get(target, prop, receiver) ?? [];
|
|
23
|
-
},
|
|
24
|
-
}) as Record<K, T[]>;
|
|
25
|
-
}
|
package/lib/hrefs.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import type { LinkUtmParams, createUtm } from "./utm.ts";
|
|
2
|
-
|
|
3
|
-
type InputAppHrefs = {
|
|
4
|
-
login: () => string;
|
|
5
|
-
password: () => string;
|
|
6
|
-
join: () => string;
|
|
7
|
-
dashboard: () => string;
|
|
8
|
-
account: () => string;
|
|
9
|
-
|
|
10
|
-
// These are usually external links to the root domain, so we want to be
|
|
11
|
-
// able to set some tracking params.
|
|
12
|
-
terms?: (linkUtm?: LinkUtmParams) => string;
|
|
13
|
-
privacy?: (linkUtm?: LinkUtmParams) => string;
|
|
14
|
-
cookies?: (linkUtm?: LinkUtmParams) => string;
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
export type AppHrefs = Required<InputAppHrefs>;
|
|
18
|
-
|
|
19
|
-
export function createHrefs<T extends InputAppHrefs>(params: {
|
|
20
|
-
/**
|
|
21
|
-
* Hrefs to be used for the given app. At minimum, you need to provide
|
|
22
|
-
* the core hrefs required by Appkit.
|
|
23
|
-
*/
|
|
24
|
-
hrefs: T;
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* The function responsible for generating UTM tags. You should
|
|
28
|
-
* use the return value of {@link createUtm} unless you are doing something
|
|
29
|
-
* unusual.
|
|
30
|
-
*/
|
|
31
|
-
utm: ReturnType<typeof createUtm>;
|
|
32
|
-
}) {
|
|
33
|
-
const { utm, hrefs } = params;
|
|
34
|
-
|
|
35
|
-
return {
|
|
36
|
-
terms: (linkUtm?: LinkUtmParams) =>
|
|
37
|
-
`https://indietabletop.club/terms?${utm(linkUtm)}`,
|
|
38
|
-
privacy: (linkUtm?: LinkUtmParams) =>
|
|
39
|
-
`https://indietabletop.club/privacy?${utm(linkUtm)}`,
|
|
40
|
-
cookies: (linkUtm?: LinkUtmParams) =>
|
|
41
|
-
`https://indietabletop.club/cookies?${utm(linkUtm)}`,
|
|
42
|
-
itc: (linkUtm?: LinkUtmParams) =>
|
|
43
|
-
`https://indietabletop.club?${utm(linkUtm)}`,
|
|
44
|
-
fathom: () => `https://usefathom.com`,
|
|
45
|
-
|
|
46
|
-
...hrefs,
|
|
47
|
-
};
|
|
48
|
-
}
|
package/lib/idToDate.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Given an doc id like `2025-01-01-some-name`, will return a date matching
|
|
3
|
-
* the starting portion of the id.
|
|
4
|
-
*/
|
|
5
|
-
export function idToDate(id: string, fallback: () => Date) {
|
|
6
|
-
const dateString = /^(?<date>\d{4}-\d{2}-\d{2})/.exec(id)?.groups?.date;
|
|
7
|
-
return dateString ? new Date(dateString) : fallback();
|
|
8
|
-
}
|
package/lib/ids.ts
DELETED
package/lib/index.ts
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
// Components
|
|
2
|
-
export * from "./account/CurrentUserFetcher.tsx";
|
|
3
|
-
export * from "./account/JoinCard.tsx";
|
|
4
|
-
export * from "./account/LoginCard.tsx";
|
|
5
|
-
export * from "./account/PasswordResetCard.tsx";
|
|
6
|
-
export * from "./AppConfig/AppConfig.tsx";
|
|
7
|
-
export * from "./AuthCard/AuthCard.tsx";
|
|
8
|
-
export * from "./DialogTrigger/index.tsx";
|
|
9
|
-
export * from "./DocumentTitle/DocumentTitle.tsx";
|
|
10
|
-
export * from "./ExternalLink.tsx";
|
|
11
|
-
export * from "./form/FormSubmitButton.tsx";
|
|
12
|
-
export * from "./form/SubmitErrorAlert.tsx";
|
|
13
|
-
export * from "./FullscreenDismissBlocker.tsx";
|
|
14
|
-
export * from "./IndieTabletopClubLogo.tsx";
|
|
15
|
-
export * from "./IndieTabletopClubSymbol.tsx";
|
|
16
|
-
export * from "./Letterhead/index.tsx";
|
|
17
|
-
export * from "./LetterheadForm/index.tsx";
|
|
18
|
-
export * from "./LoadingIndicator.tsx";
|
|
19
|
-
export * from "./MiddotSeparated/MiddotSeparated.tsx";
|
|
20
|
-
export * from "./ModalDialog/index.tsx";
|
|
21
|
-
export * from "./QRCode/QRCode.tsx";
|
|
22
|
-
export * from "./ReleaseInfo/index.tsx";
|
|
23
|
-
export * from "./SafariCheck/SafariCheck.tsx";
|
|
24
|
-
export * from "./ServiceWorkerHandler.tsx";
|
|
25
|
-
export * from "./ShareButton/ShareButton.tsx";
|
|
26
|
-
export * from "./SubscribeCard/SubscribeByEmailCard.tsx";
|
|
27
|
-
export * from "./SubscribeCard/SubscribeByPledgeCard.tsx";
|
|
28
|
-
|
|
29
|
-
// Hooks
|
|
30
|
-
export * from "./RulesetResolver.ts";
|
|
31
|
-
export * from "./use-async-op.ts";
|
|
32
|
-
export * from "./use-document-background-color.ts";
|
|
33
|
-
export * from "./use-form.ts";
|
|
34
|
-
export * from "./use-is-installed.ts";
|
|
35
|
-
export * from "./use-media-query.ts";
|
|
36
|
-
export * from "./use-reverting-state.ts";
|
|
37
|
-
export * from "./use-scroll-restoration.ts";
|
|
38
|
-
export * from "./useEnsureValue.ts";
|
|
39
|
-
export * from "./useInvokeClient.ts";
|
|
40
|
-
export * from "./useIsVisible.ts";
|
|
41
|
-
|
|
42
|
-
// Utils
|
|
43
|
-
export * from "./append-copy-to-text.ts";
|
|
44
|
-
export * from "./async-op.ts";
|
|
45
|
-
export * from "./caught-value.ts";
|
|
46
|
-
export * from "./class-names.ts";
|
|
47
|
-
export * from "./client.ts";
|
|
48
|
-
export * from "./copyrightRange.ts";
|
|
49
|
-
export * from "./createSafeStorage.ts";
|
|
50
|
-
export * from "./failureMessages.ts";
|
|
51
|
-
export * from "./groupBy.ts";
|
|
52
|
-
export * from "./HistoryState.ts";
|
|
53
|
-
export * from "./hrefs.ts";
|
|
54
|
-
export * from "./ids.ts";
|
|
55
|
-
export * from "./idToDate.ts";
|
|
56
|
-
export * from "./mailto.ts";
|
|
57
|
-
export * from "./media.ts";
|
|
58
|
-
export * from "./random.ts";
|
|
59
|
-
export * from "./result/swr.ts";
|
|
60
|
-
export * from "./sleep.ts";
|
|
61
|
-
export * from "./structs.ts";
|
|
62
|
-
export * from "./typeguards.ts";
|
|
63
|
-
export * from "./types.ts";
|
|
64
|
-
export * from "./unique.ts";
|
|
65
|
-
export * from "./utm.ts";
|
|
66
|
-
export * from "./validations.ts";
|
|
67
|
-
|
|
68
|
-
// Other
|
|
69
|
-
export * from "./EnumMapper.ts";
|
|
70
|
-
export * from "./ModernIDB/index.ts";
|
|
71
|
-
export * from "./store/index.tsx";
|
package/lib/internal.css.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { createVar, style } from "@vanilla-extract/css";
|
|
2
|
-
import { bounce } from "./animations.css.ts";
|
|
3
|
-
|
|
4
|
-
export const animationDelay = createVar();
|
|
5
|
-
|
|
6
|
-
export const dot = style({
|
|
7
|
-
fill: "currentcolor",
|
|
8
|
-
opacity: 0.8,
|
|
9
|
-
animation: `${bounce} 2s ${animationDelay} infinite`,
|
|
10
|
-
});
|
package/lib/mailto.ts
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Encodes values to be used in mailto protocol.
|
|
3
|
-
*
|
|
4
|
-
* Note that we cannot simply use URLSeachParams because they, for example, encode a space
|
|
5
|
-
* as plus (+), which cannot be used in mailto if we want to have consistent behaviour in
|
|
6
|
-
* all email clients.
|
|
7
|
-
*/
|
|
8
|
-
function encodeValuesForMailto<T extends object>(object: T) {
|
|
9
|
-
return Object.entries(object)
|
|
10
|
-
.filter(([_, v]) => !!v)
|
|
11
|
-
.map(([key, value]) => `${key}=${encodeURIComponent(value)}`)
|
|
12
|
-
.join("&");
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
function serializeArray(value?: string | string[] | null) {
|
|
16
|
-
return Array.isArray(value) ? value.join(",") : value;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
type MailtoPayload = {
|
|
20
|
-
body?: string | null;
|
|
21
|
-
subject?: string | null;
|
|
22
|
-
cc?: string | string[] | null;
|
|
23
|
-
bcc?: string | string[] | null;
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
export function mailto(recipient: string | null, payload?: MailtoPayload) {
|
|
27
|
-
// If the recipient is falsy the user can choose who to send the email to.
|
|
28
|
-
const to = recipient ?? "";
|
|
29
|
-
|
|
30
|
-
const serialized = payload
|
|
31
|
-
? `?${encodeValuesForMailto({
|
|
32
|
-
body: payload.body,
|
|
33
|
-
subject: payload.subject,
|
|
34
|
-
cc: serializeArray(payload.cc),
|
|
35
|
-
bcc: serializeArray(payload.bcc),
|
|
36
|
-
})}`
|
|
37
|
-
: "";
|
|
38
|
-
|
|
39
|
-
return `mailto:${to}${serialized}`;
|
|
40
|
-
}
|
package/lib/media.ts
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
export enum PrefersColorScheme {
|
|
6
|
-
LIGHT = "(prefers-color-scheme: light)",
|
|
7
|
-
DARK = "(prefers-color-scheme: dark)",
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
export enum PrefersReducedMotion {
|
|
14
|
-
NO_PREFERENCE = "(prefers-reduced-motion: no-preference)",
|
|
15
|
-
REDUCE = "(prefers-reduced-motion: reduce)",
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export enum Hover {
|
|
19
|
-
NONE = "(hover: none)",
|
|
20
|
-
|
|
21
|
-
// Some Samsung phones incorrectly report that they have "hover" even though they
|
|
22
|
-
// do not. Adding the pointer query correctly filters these phones out.
|
|
23
|
-
HOVER = "(hover: hover) and (pointer: fine)",
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export enum MediaType {
|
|
27
|
-
PRINT = "print",
|
|
28
|
-
SCREEN = "screen",
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export enum MinHeight {
|
|
32
|
-
TALL = "(min-height: 40em)",
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export enum MinWidth {
|
|
36
|
-
SMALL = "(min-width: 28em)",
|
|
37
|
-
MEDIUM = "(min-width: 50em)",
|
|
38
|
-
WIDE = "(min-width: 66em)",
|
|
39
|
-
X_WIDE = "(min-width: 80em)",
|
|
40
|
-
XX_WIDE = "(min-width: 140em)",
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export enum DisplayMode {
|
|
44
|
-
STANDALONE = "(display-mode: standalone)",
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export enum Pointer {
|
|
48
|
-
COARSE = "(pointer: coarse)",
|
|
49
|
-
FINE = "(pointer: fine)",
|
|
50
|
-
}
|
package/lib/random.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export function random(max: number) {
|
|
2
|
-
return Math.floor(Math.random() * max);
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
export function randomItem<T>(array: T[]) {
|
|
6
|
-
return array[random(array.length)];
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export function randomItemOrThrow<T>(array: T[]) {
|
|
10
|
-
const item = array[random(array.length)];
|
|
11
|
-
|
|
12
|
-
if (!item) {
|
|
13
|
-
throw new Error(
|
|
14
|
-
"Could not select a random item from list. Perhaps the list is empty?",
|
|
15
|
-
);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
return item;
|
|
19
|
-
}
|
package/lib/result/swr.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { SWRResponse } from "swr";
|
|
2
|
-
import { Failure, Pending } from "../async-op.ts";
|
|
3
|
-
import type { FailurePayload } from "../types.ts";
|
|
4
|
-
|
|
5
|
-
export function swrResponseToResult<T>(response: SWRResponse<T, unknown>) {
|
|
6
|
-
const { data, error } = response;
|
|
7
|
-
|
|
8
|
-
if (data !== undefined) {
|
|
9
|
-
return data;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
if (error !== undefined) {
|
|
13
|
-
console.error(error);
|
|
14
|
-
return new Failure<FailurePayload>({ type: "UNKNOWN_ERROR" });
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
return new Pending();
|
|
18
|
-
}
|