@oxy.so/services 11.2.0 → 11.3.1
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/lib/commonjs/ui/boot/runProviderColdBoot.js +47 -3
- package/lib/commonjs/ui/boot/runProviderColdBoot.js.map +1 -1
- package/lib/commonjs/ui/components/organizations/OrganizationClaimReview.js +208 -0
- package/lib/commonjs/ui/components/organizations/OrganizationClaimReview.js.map +1 -0
- package/lib/commonjs/ui/components/organizations/OrganizationClaims.js +77 -0
- package/lib/commonjs/ui/components/organizations/OrganizationClaims.js.map +1 -0
- package/lib/commonjs/ui/components/organizations/OrganizationDirectorySearch.js +218 -0
- package/lib/commonjs/ui/components/organizations/OrganizationDirectorySearch.js.map +1 -0
- package/lib/commonjs/ui/components/organizations/OrganizationSettings.js +147 -0
- package/lib/commonjs/ui/components/organizations/OrganizationSettings.js.map +1 -0
- package/lib/commonjs/ui/components/organizations/OrganizationTypePicker.js +34 -0
- package/lib/commonjs/ui/components/organizations/OrganizationTypePicker.js.map +1 -0
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js +14 -5
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/CreateAccountScreen.js +148 -115
- package/lib/commonjs/ui/screens/CreateAccountScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/ManageAccountScreen.js +13 -1
- package/lib/commonjs/ui/screens/ManageAccountScreen.js.map +1 -1
- package/lib/module/ui/boot/runProviderColdBoot.js +47 -3
- package/lib/module/ui/boot/runProviderColdBoot.js.map +1 -1
- package/lib/module/ui/components/organizations/OrganizationClaimReview.js +205 -0
- package/lib/module/ui/components/organizations/OrganizationClaimReview.js.map +1 -0
- package/lib/module/ui/components/organizations/OrganizationClaims.js +73 -0
- package/lib/module/ui/components/organizations/OrganizationClaims.js.map +1 -0
- package/lib/module/ui/components/organizations/OrganizationDirectorySearch.js +215 -0
- package/lib/module/ui/components/organizations/OrganizationDirectorySearch.js.map +1 -0
- package/lib/module/ui/components/organizations/OrganizationSettings.js +143 -0
- package/lib/module/ui/components/organizations/OrganizationSettings.js.map +1 -0
- package/lib/module/ui/components/organizations/OrganizationTypePicker.js +30 -0
- package/lib/module/ui/components/organizations/OrganizationTypePicker.js.map +1 -0
- package/lib/module/ui/screens/AccountSettingsScreen.js +14 -5
- package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/module/ui/screens/CreateAccountScreen.js +149 -115
- package/lib/module/ui/screens/CreateAccountScreen.js.map +1 -1
- package/lib/module/ui/screens/ManageAccountScreen.js +13 -1
- package/lib/module/ui/screens/ManageAccountScreen.js.map +1 -1
- package/lib/typescript/commonjs/ui/boot/runProviderColdBoot.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/organizations/OrganizationClaimReview.d.ts +3 -0
- package/lib/typescript/commonjs/ui/components/organizations/OrganizationClaimReview.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/organizations/OrganizationClaims.d.ts +2 -0
- package/lib/typescript/commonjs/ui/components/organizations/OrganizationClaims.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/organizations/OrganizationDirectorySearch.d.ts +6 -0
- package/lib/typescript/commonjs/ui/components/organizations/OrganizationDirectorySearch.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/organizations/OrganizationSettings.d.ts +5 -0
- package/lib/typescript/commonjs/ui/components/organizations/OrganizationSettings.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/organizations/OrganizationTypePicker.d.ts +7 -0
- package/lib/typescript/commonjs/ui/components/organizations/OrganizationTypePicker.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts +3 -2
- package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/queries/usePersonalPlans.d.ts +2 -2
- package/lib/typescript/commonjs/ui/icons/Ionicons.d.ts +1 -1
- package/lib/typescript/commonjs/ui/icons/MaterialCommunityIcons.d.ts +1 -1
- package/lib/typescript/commonjs/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/CreateAccountScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/ManageAccountScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/boot/runProviderColdBoot.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/organizations/OrganizationClaimReview.d.ts +3 -0
- package/lib/typescript/module/ui/components/organizations/OrganizationClaimReview.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/organizations/OrganizationClaims.d.ts +2 -0
- package/lib/typescript/module/ui/components/organizations/OrganizationClaims.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/organizations/OrganizationDirectorySearch.d.ts +6 -0
- package/lib/typescript/module/ui/components/organizations/OrganizationDirectorySearch.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/organizations/OrganizationSettings.d.ts +5 -0
- package/lib/typescript/module/ui/components/organizations/OrganizationSettings.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/organizations/OrganizationTypePicker.d.ts +7 -0
- package/lib/typescript/module/ui/components/organizations/OrganizationTypePicker.d.ts.map +1 -0
- package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts +3 -2
- package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/queries/usePersonalPlans.d.ts +2 -2
- package/lib/typescript/module/ui/icons/Ionicons.d.ts +1 -1
- package/lib/typescript/module/ui/icons/MaterialCommunityIcons.d.ts +1 -1
- package/lib/typescript/module/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/CreateAccountScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/ManageAccountScreen.d.ts.map +1 -1
- package/package.json +8 -8
- package/src/ui/boot/__tests__/coldBootNoIdpRedirect.test.ts +166 -3
- package/src/ui/boot/runProviderColdBoot.ts +49 -4
- package/src/ui/components/organizations/OrganizationClaimReview.tsx +218 -0
- package/src/ui/components/organizations/OrganizationClaims.tsx +67 -0
- package/src/ui/components/organizations/OrganizationDirectorySearch.tsx +228 -0
- package/src/ui/components/organizations/OrganizationSettings.tsx +131 -0
- package/src/ui/components/organizations/OrganizationTypePicker.tsx +31 -0
- package/src/ui/screens/AccountSettingsScreen.tsx +22 -4
- package/src/ui/screens/CreateAccountScreen.tsx +177 -124
- package/src/ui/screens/ManageAccountScreen.tsx +18 -0
|
@@ -14,6 +14,28 @@ var _oauthReturn = require("../utils/oauthReturn.js");
|
|
|
14
14
|
var _isWebBrowser = require("../utils/isWebBrowser.js");
|
|
15
15
|
var _netConnectivity = require("../utils/netConnectivity.js");
|
|
16
16
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
17
|
+
/**
|
|
18
|
+
* Whether the URL carries an OAuth return (`?code=` or `?error=`) for
|
|
19
|
+
* `tryCompleteOAuthReturn` to consume. Reads the address bar only.
|
|
20
|
+
*/
|
|
21
|
+
function hasOAuthReturnOnUrl() {
|
|
22
|
+
const search = globalThis.location?.search;
|
|
23
|
+
if (!search) return false;
|
|
24
|
+
const params = new URLSearchParams(search);
|
|
25
|
+
return params.has('code') || params.has('error');
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Whether this origin's own store holds anything a web boot could restore from:
|
|
30
|
+
* a warm access token to plant or a device secret to mint with. A presence
|
|
31
|
+
* check only — nothing read here is used, sent or synced before the
|
|
32
|
+
* classification allows it.
|
|
33
|
+
*/
|
|
34
|
+
async function hasRestorableState(store) {
|
|
35
|
+
const persisted = await store.load();
|
|
36
|
+
return Boolean(persisted?.accessToken || persisted?.deviceSecret);
|
|
37
|
+
}
|
|
38
|
+
|
|
17
39
|
/** How long the cold boot waits for the post-boot SessionClient handoff (ms). */
|
|
18
40
|
const SESSION_HANDOFF_DEADLINE_MS = exports.SESSION_HANDOFF_DEADLINE_MS = 6000;
|
|
19
41
|
|
|
@@ -101,9 +123,31 @@ async function runProviderColdBoot(opts) {
|
|
|
101
123
|
const identityBound = sessionMode === 'identity';
|
|
102
124
|
setTokenReady(false);
|
|
103
125
|
try {
|
|
104
|
-
// Classification precedes every local
|
|
105
|
-
//
|
|
106
|
-
|
|
126
|
+
// Classification precedes every USE of a local secret, the shared credential
|
|
127
|
+
// and the identity key. Unavailable registry metadata fails closed, including
|
|
128
|
+
// offline boot. It starts now, before anything else, so its round trip
|
|
129
|
+
// overlaps the local work below.
|
|
130
|
+
const classification = (async () => opts.resolveSessionLane?.() ?? (0, _applicationSessionLane.resolveApplicationSessionLane)(oxyServices, clientId))();
|
|
131
|
+
// Observed so a rejection that lands before it is awaited is not reported as
|
|
132
|
+
// unhandled; every path below still awaits it and sees the rejection.
|
|
133
|
+
classification.catch(() => undefined);
|
|
134
|
+
|
|
135
|
+
// The verdict decides HOW a session is restored, never WHETHER there is one.
|
|
136
|
+
// A web origin with nothing to restore and no OAuth return on the URL ends
|
|
137
|
+
// signed out on either lane, so routing need not wait a network round trip
|
|
138
|
+
// for an answer that cannot change the outcome. The classification still
|
|
139
|
+
// completes below and still gates every later sign-in
|
|
140
|
+
// (`ensureDeviceSessionLane` shares this same in-flight lookup).
|
|
141
|
+
if (!identityBound && (0, _isWebBrowser.isWebBrowser)() && !hasOAuthReturnOnUrl()) {
|
|
142
|
+
if (!(await hasRestorableState(authStore))) {
|
|
143
|
+
markAuthResolved();
|
|
144
|
+
const lane = await classification;
|
|
145
|
+
await opts.onClassified?.(lane);
|
|
146
|
+
if (lane === 'oauth') setTokenReady(true);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
const lane = await classification;
|
|
107
151
|
await opts.onClassified?.(lane);
|
|
108
152
|
if (identityBound && lane !== 'device') return;
|
|
109
153
|
// The redirect transport's RETURN leg. An app reaches it whenever the browser
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_applicationSessionLane","require","_core","_session","_deviceCredential","_sharedDeviceCredentialStore","_oauthReturn","_isWebBrowser","_netConnectivity","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","SESSION_HANDOFF_DEADLINE_MS","exports","COLD_BOOT_OVERALL_DEADLINE_MS","OFFLINE_PROBE_TIMEOUT_MS","detectOfflineHint","isWebBrowser","online","
|
|
1
|
+
{"version":3,"names":["_applicationSessionLane","require","_core","_session","_deviceCredential","_sharedDeviceCredentialStore","_oauthReturn","_isWebBrowser","_netConnectivity","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","hasOAuthReturnOnUrl","search","globalThis","location","params","URLSearchParams","hasRestorableState","store","persisted","load","Boolean","accessToken","deviceSecret","SESSION_HANDOFF_DEADLINE_MS","exports","COLD_BOOT_OVERALL_DEADLINE_MS","OFFLINE_PROBE_TIMEOUT_MS","detectOfflineHint","isWebBrowser","online","navigator","onLine","NetInfo","Promise","resolve","then","state","race","fetch","setTimeout","isNetConnectivityExplicitlyOffline","runProviderColdBoot","opts","oxyServices","authStore","clientId","authRedirectUri","sessionMode","identity","sessionClient","syncDeviceCredentialToHost","commitSession","markAuthResolved","setTokenReady","identityBound","classification","resolveSessionLane","resolveApplicationSessionLane","catch","undefined","lane","onClassified","oauthCompleted","tryCompleteOAuthReturn","input","activate","oauth","beforeDeviceBoot","offline","runSessionColdBoot","oxy","platform","isWeb","isNative","sharedDeviceCredential","createPlatformSharedDeviceCredentialStore","overallDeadlineMs","isOffline","onStepDeadline","stepId","loggerUtil","warn","component","method","onSession","session","handoff","sessionId","userId","deviceState","handoffDeadlineId","finally","clearTimeout","onSignedOut","cred","loadPersistedDeviceCredential","start","socketError","__DEV__","debug","onStepError","id","error","afterDeviceBoot","Error","String"],"sourceRoot":"../../../../src","sources":["ui/boot/runProviderColdBoot.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.OrganizationClaimReview = OrganizationClaimReview;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
var _reactQuery = require("@tanstack/react-query");
|
|
10
|
+
var _core = require("@oxy.so/core");
|
|
11
|
+
var _contracts = require("@oxy.so/contracts");
|
|
12
|
+
var _button = require("@oxy.so/bloom/button");
|
|
13
|
+
var _settingsList = require("@oxy.so/bloom/settings-list");
|
|
14
|
+
var _textField = require("@oxy.so/bloom/text-field");
|
|
15
|
+
var _typography = require("@oxy.so/bloom/typography");
|
|
16
|
+
var _OxyContext = require("../../context/OxyContext.js");
|
|
17
|
+
var _useI18n = require("../../hooks/useI18n.js");
|
|
18
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
19
|
+
/** The queue is requested only after an explicit action; the server rechecks staff authority. */
|
|
20
|
+
function OrganizationClaimReview() {
|
|
21
|
+
const {
|
|
22
|
+
t
|
|
23
|
+
} = (0, _useI18n.useI18n)();
|
|
24
|
+
const {
|
|
25
|
+
user,
|
|
26
|
+
canUsePrivateApi
|
|
27
|
+
} = (0, _OxyContext.useOxy)();
|
|
28
|
+
const [open, setOpen] = (0, _react.useState)(false);
|
|
29
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_settingsList.SettingsListGroup, {
|
|
30
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_settingsList.SettingsListItem, {
|
|
31
|
+
title: t('organizationDirectory.review.title'),
|
|
32
|
+
disabled: !canUsePrivateApi,
|
|
33
|
+
onPress: () => setOpen(value => !value)
|
|
34
|
+
}), open && user?.kind === 'personal' && canUsePrivateApi ? /*#__PURE__*/(0, _jsxRuntime.jsx)(ReviewQueue, {}, user.id) : null]
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
function ReviewQueue() {
|
|
38
|
+
const {
|
|
39
|
+
t
|
|
40
|
+
} = (0, _useI18n.useI18n)();
|
|
41
|
+
const {
|
|
42
|
+
oxyServices,
|
|
43
|
+
user,
|
|
44
|
+
canUsePrivateApi
|
|
45
|
+
} = (0, _OxyContext.useOxy)();
|
|
46
|
+
const [selected, setSelected] = (0, _react.useState)(null);
|
|
47
|
+
const requests = (0, _reactQuery.useInfiniteQuery)({
|
|
48
|
+
queryKey: ['oxy', 'organizations', 'review', user?.id, canUsePrivateApi],
|
|
49
|
+
queryFn: ({
|
|
50
|
+
pageParam
|
|
51
|
+
}) => oxyServices.organizations.reviewClaims({
|
|
52
|
+
status: 'pending',
|
|
53
|
+
limit: 20,
|
|
54
|
+
...(pageParam ? {
|
|
55
|
+
cursor: pageParam
|
|
56
|
+
} : {})
|
|
57
|
+
}),
|
|
58
|
+
initialPageParam: undefined,
|
|
59
|
+
getNextPageParam: page => page.nextCursor ?? undefined,
|
|
60
|
+
enabled: canUsePrivateApi,
|
|
61
|
+
retry: false,
|
|
62
|
+
gcTime: 0
|
|
63
|
+
});
|
|
64
|
+
const claims = requests.data?.pages.flatMap(page => page.items) ?? [];
|
|
65
|
+
const ids = [...new Set(claims.map(claim => claim.accountId))].sort();
|
|
66
|
+
const organizations = (0, _reactQuery.useQuery)({
|
|
67
|
+
queryKey: ['oxy', 'organizations', 'review-organizations', ids],
|
|
68
|
+
queryFn: async () => {
|
|
69
|
+
const batches = [];
|
|
70
|
+
for (let offset = 0; offset < ids.length; offset += 100) batches.push(oxyServices.organizations.batch({
|
|
71
|
+
ids: ids.slice(offset, offset + 100)
|
|
72
|
+
}));
|
|
73
|
+
return (await Promise.all(batches)).flatMap(batch => batch.items);
|
|
74
|
+
},
|
|
75
|
+
enabled: canUsePrivateApi && requests.isSuccess && ids.length > 0,
|
|
76
|
+
retry: false
|
|
77
|
+
});
|
|
78
|
+
if (requests.isPending) return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {});
|
|
79
|
+
if (requests.isError) return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
80
|
+
className: "gap-space-16 p-space-16",
|
|
81
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
82
|
+
accessibilityRole: "alert",
|
|
83
|
+
children: t((0, _core.isHttpRequestError)(requests.error) && requests.error.status === 403 ? 'organizationDirectory.review.forbidden' : 'organizationDirectory.requestError')
|
|
84
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
|
|
85
|
+
onPress: () => requests.refetch(),
|
|
86
|
+
children: t('organizationDirectory.retry')
|
|
87
|
+
})]
|
|
88
|
+
});
|
|
89
|
+
if (selected) return /*#__PURE__*/(0, _jsxRuntime.jsx)(ReviewDetail, {
|
|
90
|
+
claimId: selected,
|
|
91
|
+
onClose: () => setSelected(null)
|
|
92
|
+
}, selected);
|
|
93
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
94
|
+
className: "gap-space-16 p-space-16",
|
|
95
|
+
children: [claims.length === 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
96
|
+
children: t('organizationDirectory.review.empty')
|
|
97
|
+
}) : null, claims.map(claim => /*#__PURE__*/(0, _jsxRuntime.jsx)(_settingsList.SettingsListItem, {
|
|
98
|
+
title: organizations.data?.find(item => item.requestedAccountId === claim.accountId)?.organization.name ?? t('organizationDirectory.view'),
|
|
99
|
+
description: t('organizationDirectory.pending'),
|
|
100
|
+
onPress: () => setSelected(claim.id)
|
|
101
|
+
}, claim.id)), requests.hasNextPage ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
|
|
102
|
+
onPress: () => requests.fetchNextPage(),
|
|
103
|
+
disabled: requests.isFetchingNextPage,
|
|
104
|
+
children: t('organizationDirectory.loadMore')
|
|
105
|
+
}) : null]
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
function ReviewDetail({
|
|
109
|
+
claimId,
|
|
110
|
+
onClose
|
|
111
|
+
}) {
|
|
112
|
+
const {
|
|
113
|
+
t
|
|
114
|
+
} = (0, _useI18n.useI18n)();
|
|
115
|
+
const {
|
|
116
|
+
oxyServices,
|
|
117
|
+
user,
|
|
118
|
+
canUsePrivateApi
|
|
119
|
+
} = (0, _OxyContext.useOxy)();
|
|
120
|
+
const queryClient = (0, _reactQuery.useQueryClient)();
|
|
121
|
+
const [evidence, setEvidence] = (0, _react.useState)('');
|
|
122
|
+
const [authorizationRevoked, setAuthorizationRevoked] = (0, _react.useState)(false);
|
|
123
|
+
const detail = (0, _reactQuery.useQuery)({
|
|
124
|
+
queryKey: ['oxy', 'organizations', 'review-detail', user?.id, canUsePrivateApi, claimId],
|
|
125
|
+
queryFn: () => oxyServices.organizations.reviewClaimDetail(claimId),
|
|
126
|
+
enabled: canUsePrivateApi,
|
|
127
|
+
retry: false,
|
|
128
|
+
gcTime: 0
|
|
129
|
+
});
|
|
130
|
+
const review = (0, _reactQuery.useMutation)({
|
|
131
|
+
mutationFn: decision => {
|
|
132
|
+
if (!canUsePrivateApi || authorizationRevoked || !detail.isSuccess || !detail.data || detail.data.claimantUserId === user?.id) throw new Error('Independent staff review is required');
|
|
133
|
+
return oxyServices.organizations.reviewClaim(claimId, _contracts.organizationClaimReviewSchema.parse({
|
|
134
|
+
decision,
|
|
135
|
+
evidenceReference: evidence
|
|
136
|
+
}));
|
|
137
|
+
},
|
|
138
|
+
onError: error => {
|
|
139
|
+
if ((0, _core.isHttpRequestError)(error) && error.status === 403) setAuthorizationRevoked(true);
|
|
140
|
+
},
|
|
141
|
+
onSuccess: async () => {
|
|
142
|
+
await queryClient.invalidateQueries({
|
|
143
|
+
queryKey: ['oxy', 'organizations']
|
|
144
|
+
});
|
|
145
|
+
await queryClient.invalidateQueries({
|
|
146
|
+
queryKey: ['accounts']
|
|
147
|
+
});
|
|
148
|
+
onClose();
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
const conflict = (0, _core.isHttpRequestError)(review.error) && review.error.status === 409;
|
|
152
|
+
const forbidden = (0, _core.isHttpRequestError)(review.error) && review.error.status === 403;
|
|
153
|
+
const selfReview = detail.data?.claimantUserId === user?.id;
|
|
154
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
155
|
+
className: "gap-space-16 p-space-16",
|
|
156
|
+
children: [detail.isPending ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {}) : null, detail.isError ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
157
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
158
|
+
accessibilityRole: "alert",
|
|
159
|
+
children: t((0, _core.isHttpRequestError)(detail.error) && detail.error.status === 403 ? 'organizationDirectory.review.forbidden' : 'organizationDirectory.requestError')
|
|
160
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
|
|
161
|
+
onPress: () => detail.refetch(),
|
|
162
|
+
children: t('organizationDirectory.retry')
|
|
163
|
+
})]
|
|
164
|
+
}) : null, authorizationRevoked ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
165
|
+
accessibilityRole: "alert",
|
|
166
|
+
children: t('organizationDirectory.review.forbidden')
|
|
167
|
+
}) : null, detail.isSuccess && canUsePrivateApi && !authorizationRevoked ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
168
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
169
|
+
children: t('organizationDirectory.evidence')
|
|
170
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
171
|
+
selectable: true,
|
|
172
|
+
children: detail.data.evidenceReference
|
|
173
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
174
|
+
children: t('organizationDirectory.review.hint')
|
|
175
|
+
}), selfReview ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
176
|
+
children: t('organizationDirectory.review.independent')
|
|
177
|
+
}) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_textField.TextField, {
|
|
178
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_textField.TextFieldInput, {
|
|
179
|
+
label: t('organizationDirectory.review.evidence'),
|
|
180
|
+
value: evidence,
|
|
181
|
+
onChangeText: setEvidence,
|
|
182
|
+
maxLength: 1000
|
|
183
|
+
})
|
|
184
|
+
}), review.isError ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
185
|
+
accessibilityRole: "alert",
|
|
186
|
+
children: t(conflict ? 'organizationDirectory.review.conflict' : forbidden ? 'organizationDirectory.review.forbidden' : 'organizationDirectory.review.failed')
|
|
187
|
+
}) : null, ['approved', 'rejected'].map(decision => /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
|
|
188
|
+
disabled: !canUsePrivateApi || selfReview || detail.data.status !== 'pending' || !evidence.trim() || review.isPending || conflict || forbidden,
|
|
189
|
+
onPress: () => review.mutate(decision),
|
|
190
|
+
children: t(`organizationDirectory.review.${decision}`)
|
|
191
|
+
}, decision)), conflict ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
|
|
192
|
+
onPress: async () => {
|
|
193
|
+
await queryClient.invalidateQueries({
|
|
194
|
+
queryKey: ['oxy', 'organizations']
|
|
195
|
+
});
|
|
196
|
+
onClose();
|
|
197
|
+
},
|
|
198
|
+
children: t('organizationDirectory.retry')
|
|
199
|
+
}) : null]
|
|
200
|
+
}) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
|
|
201
|
+
appearance: "outline",
|
|
202
|
+
onPress: onClose,
|
|
203
|
+
disabled: review.isPending,
|
|
204
|
+
children: t('organizationDirectory.back')
|
|
205
|
+
})]
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=OrganizationClaimReview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","_reactQuery","_core","_contracts","_button","_settingsList","_textField","_typography","_OxyContext","_useI18n","_jsxRuntime","OrganizationClaimReview","t","useI18n","user","canUsePrivateApi","useOxy","open","setOpen","useState","jsxs","SettingsListGroup","children","jsx","SettingsListItem","title","disabled","onPress","value","kind","ReviewQueue","id","oxyServices","selected","setSelected","requests","useInfiniteQuery","queryKey","queryFn","pageParam","organizations","reviewClaims","status","limit","cursor","initialPageParam","undefined","getNextPageParam","page","nextCursor","enabled","retry","gcTime","claims","data","pages","flatMap","items","ids","Set","map","claim","accountId","sort","useQuery","batches","offset","length","push","batch","slice","Promise","all","isSuccess","isPending","ActivityIndicator","isError","View","className","Text","accessibilityRole","isHttpRequestError","error","Button","refetch","ReviewDetail","claimId","onClose","find","item","requestedAccountId","organization","name","description","hasNextPage","fetchNextPage","isFetchingNextPage","queryClient","useQueryClient","evidence","setEvidence","authorizationRevoked","setAuthorizationRevoked","detail","reviewClaimDetail","review","useMutation","mutationFn","decision","claimantUserId","Error","reviewClaim","organizationClaimReviewSchema","parse","evidenceReference","onError","onSuccess","invalidateQueries","conflict","forbidden","selfReview","Fragment","selectable","TextField","TextFieldInput","label","onChangeText","maxLength","trim","mutate","appearance"],"sourceRoot":"../../../../../src","sources":["ui/components/organizations/OrganizationClaimReview.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.OrganizationClaims = OrganizationClaims;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
var _reactQuery = require("@tanstack/react-query");
|
|
9
|
+
var _button = require("@oxy.so/bloom/button");
|
|
10
|
+
var _settingsList = require("@oxy.so/bloom/settings-list");
|
|
11
|
+
var _typography = require("@oxy.so/bloom/typography");
|
|
12
|
+
var _OxyContext = require("../../context/OxyContext.js");
|
|
13
|
+
var _useI18n = require("../../hooks/useI18n.js");
|
|
14
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
|
+
function OrganizationClaims() {
|
|
16
|
+
const {
|
|
17
|
+
oxyServices,
|
|
18
|
+
user,
|
|
19
|
+
canUsePrivateApi
|
|
20
|
+
} = (0, _OxyContext.useOxy)();
|
|
21
|
+
const {
|
|
22
|
+
t
|
|
23
|
+
} = (0, _useI18n.useI18n)();
|
|
24
|
+
const enabled = canUsePrivateApi && user?.kind === 'personal';
|
|
25
|
+
const requests = (0, _reactQuery.useInfiniteQuery)({
|
|
26
|
+
queryKey: ['oxy', 'organizations', 'claims', user?.id, canUsePrivateApi],
|
|
27
|
+
queryFn: ({
|
|
28
|
+
pageParam
|
|
29
|
+
}) => oxyServices.organizations.myClaims({
|
|
30
|
+
limit: 20,
|
|
31
|
+
...(pageParam ? {
|
|
32
|
+
cursor: pageParam
|
|
33
|
+
} : {})
|
|
34
|
+
}),
|
|
35
|
+
initialPageParam: undefined,
|
|
36
|
+
getNextPageParam: page => page.nextCursor ?? undefined,
|
|
37
|
+
enabled,
|
|
38
|
+
retry: false,
|
|
39
|
+
gcTime: 0
|
|
40
|
+
});
|
|
41
|
+
const claims = requests.data?.pages.flatMap(page => page.items) ?? [];
|
|
42
|
+
const ids = [...new Set(claims.map(claim => claim.accountId))].sort();
|
|
43
|
+
const organizations = (0, _reactQuery.useQuery)({
|
|
44
|
+
queryKey: ['oxy', 'organizations', 'claims-employers', ids],
|
|
45
|
+
queryFn: async () => {
|
|
46
|
+
const batches = [];
|
|
47
|
+
for (let offset = 0; offset < ids.length; offset += 100) batches.push(oxyServices.organizations.batch({
|
|
48
|
+
ids: ids.slice(offset, offset + 100)
|
|
49
|
+
}));
|
|
50
|
+
return (await Promise.all(batches)).flatMap(batch => batch.items);
|
|
51
|
+
},
|
|
52
|
+
enabled: enabled && ids.length > 0,
|
|
53
|
+
retry: false
|
|
54
|
+
});
|
|
55
|
+
if (!enabled || !requests.isError && claims.length === 0) return null;
|
|
56
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_settingsList.SettingsListGroup, {
|
|
57
|
+
title: t('organizationDirectory.requests'),
|
|
58
|
+
children: [requests.isError ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
59
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
60
|
+
accessibilityRole: "alert",
|
|
61
|
+
children: t('organizationDirectory.requestError')
|
|
62
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
|
|
63
|
+
onPress: () => requests.refetch(),
|
|
64
|
+
children: t('organizationDirectory.retry')
|
|
65
|
+
})]
|
|
66
|
+
}) : null, !requests.isError && claims.map(claim => /*#__PURE__*/(0, _jsxRuntime.jsx)(_settingsList.SettingsListItem, {
|
|
67
|
+
title: organizations.data?.find(item => item.requestedAccountId === claim.accountId)?.organization.name ?? t('organizationDirectory.view'),
|
|
68
|
+
description: t(`organizationDirectory.${claim.status}`),
|
|
69
|
+
showChevron: false
|
|
70
|
+
}, claim.id)), !requests.isError && requests.hasNextPage ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
|
|
71
|
+
onPress: () => requests.fetchNextPage(),
|
|
72
|
+
disabled: requests.isFetchingNextPage,
|
|
73
|
+
children: t('organizationDirectory.loadMore')
|
|
74
|
+
}) : null]
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=OrganizationClaims.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_reactQuery","_button","_settingsList","_typography","_OxyContext","_useI18n","_jsxRuntime","OrganizationClaims","oxyServices","user","canUsePrivateApi","useOxy","t","useI18n","enabled","kind","requests","useInfiniteQuery","queryKey","id","queryFn","pageParam","organizations","myClaims","limit","cursor","initialPageParam","undefined","getNextPageParam","page","nextCursor","retry","gcTime","claims","data","pages","flatMap","items","ids","Set","map","claim","accountId","sort","useQuery","batches","offset","length","push","batch","slice","Promise","all","isError","jsxs","SettingsListGroup","title","children","View","jsx","Text","accessibilityRole","Button","onPress","refetch","SettingsListItem","find","item","requestedAccountId","organization","name","description","status","showChevron","hasNextPage","fetchNextPage","disabled","isFetchingNextPage"],"sourceRoot":"../../../../../src","sources":["ui/components/organizations/OrganizationClaims.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.OrganizationDirectorySearch = OrganizationDirectorySearch;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
var _reactQuery = require("@tanstack/react-query");
|
|
10
|
+
var _contracts = require("@oxy.so/contracts");
|
|
11
|
+
var _avatar = require("@oxy.so/bloom/avatar");
|
|
12
|
+
var _button = require("@oxy.so/bloom/button");
|
|
13
|
+
var _settingsList = require("@oxy.so/bloom/settings-list");
|
|
14
|
+
var _textField = require("@oxy.so/bloom/text-field");
|
|
15
|
+
var _typography = require("@oxy.so/bloom/typography");
|
|
16
|
+
var _OxyContext = require("../../context/OxyContext.js");
|
|
17
|
+
var _useI18n = require("../../hooks/useI18n.js");
|
|
18
|
+
var _OrganizationTypePicker = require("./OrganizationTypePicker.js");
|
|
19
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
20
|
+
/** Finding an existing identity never grants ownership or silently creates an account. */
|
|
21
|
+
function OrganizationDirectorySearch({
|
|
22
|
+
onCreateAccount
|
|
23
|
+
}) {
|
|
24
|
+
const {
|
|
25
|
+
oxyServices,
|
|
26
|
+
user,
|
|
27
|
+
canUsePrivateApi
|
|
28
|
+
} = (0, _OxyContext.useOxy)();
|
|
29
|
+
const {
|
|
30
|
+
t
|
|
31
|
+
} = (0, _useI18n.useI18n)();
|
|
32
|
+
const queryClient = (0, _reactQuery.useQueryClient)();
|
|
33
|
+
const [search, setSearch] = (0, _react.useState)('');
|
|
34
|
+
const [query, setQuery] = (0, _react.useState)('');
|
|
35
|
+
const [selected, setSelected] = (0, _react.useState)(null);
|
|
36
|
+
const [adding, setAdding] = (0, _react.useState)(false);
|
|
37
|
+
const [type, setType] = (0, _react.useState)('business');
|
|
38
|
+
const [evidence, setEvidence] = (0, _react.useState)('');
|
|
39
|
+
const [validationError, setValidationError] = (0, _react.useState)(false);
|
|
40
|
+
const personalReady = canUsePrivateApi && user?.kind === 'personal';
|
|
41
|
+
(0, _react.useEffect)(() => {
|
|
42
|
+
const timer = setTimeout(() => setQuery(search.trim()), 300);
|
|
43
|
+
return () => clearTimeout(timer);
|
|
44
|
+
}, [search]);
|
|
45
|
+
const results = (0, _reactQuery.useInfiniteQuery)({
|
|
46
|
+
queryKey: ['oxy', 'organizations', 'search', query],
|
|
47
|
+
queryFn: ({
|
|
48
|
+
pageParam
|
|
49
|
+
}) => oxyServices.organizations.search({
|
|
50
|
+
query,
|
|
51
|
+
limit: 20,
|
|
52
|
+
...(pageParam ? {
|
|
53
|
+
cursor: pageParam
|
|
54
|
+
} : {})
|
|
55
|
+
}),
|
|
56
|
+
initialPageParam: undefined,
|
|
57
|
+
getNextPageParam: page => page.nextCursor ?? undefined,
|
|
58
|
+
enabled: query.length > 0,
|
|
59
|
+
retry: false
|
|
60
|
+
});
|
|
61
|
+
const claim = (0, _reactQuery.useMutation)({
|
|
62
|
+
mutationFn: () => {
|
|
63
|
+
if (!personalReady || !selected || selected.status !== 'active') throw new Error('An active organization and personal session are required');
|
|
64
|
+
return oxyServices.organizations.claim(selected.accountId, _contracts.organizationClaimInputSchema.parse({
|
|
65
|
+
evidenceReference: evidence
|
|
66
|
+
}));
|
|
67
|
+
},
|
|
68
|
+
onSuccess: () => queryClient.invalidateQueries({
|
|
69
|
+
queryKey: ['oxy', 'organizations']
|
|
70
|
+
})
|
|
71
|
+
});
|
|
72
|
+
const create = (0, _reactQuery.useMutation)({
|
|
73
|
+
mutationFn: () => {
|
|
74
|
+
if (!personalReady) throw new Error('A personal session is required');
|
|
75
|
+
return oxyServices.organizations.create(_contracts.createOrganizationSchema.parse({
|
|
76
|
+
name: search.trim(),
|
|
77
|
+
organizationType: type
|
|
78
|
+
}));
|
|
79
|
+
},
|
|
80
|
+
onSuccess: organization => {
|
|
81
|
+
setSelected(organization);
|
|
82
|
+
setAdding(false);
|
|
83
|
+
void queryClient.invalidateQueries({
|
|
84
|
+
queryKey: ['oxy', 'organizations']
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
const reset = () => {
|
|
89
|
+
setSelected(null);
|
|
90
|
+
setAdding(false);
|
|
91
|
+
setEvidence('');
|
|
92
|
+
claim.reset();
|
|
93
|
+
create.reset();
|
|
94
|
+
setValidationError(false);
|
|
95
|
+
};
|
|
96
|
+
if (selected) return /*#__PURE__*/(0, _jsxRuntime.jsx)(_settingsList.SettingsListGroup, {
|
|
97
|
+
title: selected.name,
|
|
98
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
99
|
+
className: "gap-space-16 p-space-16",
|
|
100
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
101
|
+
children: t(`organizationDirectory.${selected.claimStatus}`)
|
|
102
|
+
}), selected.status === 'inactive' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
103
|
+
children: t('organizationDirectory.inactive')
|
|
104
|
+
}) : null, selected.claimStatus === 'unclaimed' ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
105
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
106
|
+
children: t('organizationDirectory.claimHint')
|
|
107
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_textField.TextField, {
|
|
108
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_textField.TextFieldInput, {
|
|
109
|
+
label: t('organizationDirectory.evidence'),
|
|
110
|
+
value: evidence,
|
|
111
|
+
onChangeText: setEvidence,
|
|
112
|
+
maxLength: 1000
|
|
113
|
+
})
|
|
114
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
115
|
+
children: t('organizationDirectory.evidenceHint')
|
|
116
|
+
}), claim.isSuccess ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
117
|
+
accessibilityRole: "alert",
|
|
118
|
+
children: t('organizationDirectory.claimSent')
|
|
119
|
+
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
|
|
120
|
+
onPress: () => claim.mutate(),
|
|
121
|
+
disabled: !personalReady || selected.status !== 'active' || !evidence.trim() || claim.isPending,
|
|
122
|
+
loading: claim.isPending,
|
|
123
|
+
children: t('organizationDirectory.claim')
|
|
124
|
+
}), claim.isError ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
125
|
+
accessibilityRole: "alert",
|
|
126
|
+
children: t('organizationDirectory.claimFailed')
|
|
127
|
+
}) : null]
|
|
128
|
+
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
129
|
+
children: t('organizationDirectory.claimedHint')
|
|
130
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
|
|
131
|
+
appearance: "outline",
|
|
132
|
+
onPress: reset,
|
|
133
|
+
disabled: claim.isPending,
|
|
134
|
+
children: t('organizationDirectory.back')
|
|
135
|
+
})]
|
|
136
|
+
})
|
|
137
|
+
});
|
|
138
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
139
|
+
className: "gap-space-16",
|
|
140
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_textField.TextField, {
|
|
141
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_textField.TextFieldInput, {
|
|
142
|
+
label: t('organizationDirectory.search'),
|
|
143
|
+
value: search,
|
|
144
|
+
onChangeText: value => {
|
|
145
|
+
setSearch(value);
|
|
146
|
+
setValidationError(false);
|
|
147
|
+
},
|
|
148
|
+
maxLength: 200
|
|
149
|
+
})
|
|
150
|
+
}), query && results.isPending ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {}) : null, results.isError ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
151
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
152
|
+
accessibilityRole: "alert",
|
|
153
|
+
children: t('organizationDirectory.failed')
|
|
154
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
|
|
155
|
+
onPress: () => results.refetch(),
|
|
156
|
+
children: t('organizationDirectory.retry')
|
|
157
|
+
})]
|
|
158
|
+
}) : null, results.data ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_settingsList.SettingsListGroup, {
|
|
159
|
+
title: t('organizationDirectory.title'),
|
|
160
|
+
children: [results.data.pages.flatMap(page => page.items).map(organization => /*#__PURE__*/(0, _jsxRuntime.jsx)(_settingsList.SettingsListItem, {
|
|
161
|
+
title: organization.name,
|
|
162
|
+
description: [organization.websiteUrl, organization.countryCode, t(`organizationDirectory.${organization.claimStatus}`)].filter(Boolean).join(' · '),
|
|
163
|
+
icon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_avatar.Avatar, {
|
|
164
|
+
source: organization.avatar,
|
|
165
|
+
name: organization.name,
|
|
166
|
+
size: 40
|
|
167
|
+
}),
|
|
168
|
+
onPress: () => setSelected(organization)
|
|
169
|
+
}, organization.accountId)), results.data.pages[0].items.length === 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
170
|
+
children: t('organizationDirectory.empty')
|
|
171
|
+
}) : null, results.hasNextPage ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
|
|
172
|
+
onPress: () => results.fetchNextPage(),
|
|
173
|
+
disabled: results.isFetchingNextPage,
|
|
174
|
+
children: t('organizationDirectory.loadMore')
|
|
175
|
+
}) : null]
|
|
176
|
+
}) : null, results.isSuccess && query === search.trim() ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
177
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
178
|
+
children: t('organizationDirectory.newAccountHint')
|
|
179
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
|
|
180
|
+
onPress: () => onCreateAccount(search.trim(), type),
|
|
181
|
+
children: t('organizationDirectory.newAccount')
|
|
182
|
+
}), personalReady && !adding ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
|
|
183
|
+
appearance: "outline",
|
|
184
|
+
onPress: () => setAdding(true),
|
|
185
|
+
children: t('organizationDirectory.addDirectory')
|
|
186
|
+
}) : null]
|
|
187
|
+
}) : null, adding ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
188
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
189
|
+
children: t('organizationDirectory.directoryHint')
|
|
190
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_OrganizationTypePicker.OrganizationTypePicker, {
|
|
191
|
+
value: type,
|
|
192
|
+
onChange: setType,
|
|
193
|
+
disabled: create.isPending
|
|
194
|
+
}), validationError ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
195
|
+
accessibilityRole: "alert",
|
|
196
|
+
children: t('organizationDirectory.invalid')
|
|
197
|
+
}) : null, create.isError ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
198
|
+
accessibilityRole: "alert",
|
|
199
|
+
children: t('organizationDirectory.saveFailed')
|
|
200
|
+
}) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
|
|
201
|
+
disabled: !personalReady || create.isPending || !results.isSuccess || query !== search.trim(),
|
|
202
|
+
loading: create.isPending,
|
|
203
|
+
onPress: () => {
|
|
204
|
+
if (!_contracts.createOrganizationSchema.safeParse({
|
|
205
|
+
name: search.trim(),
|
|
206
|
+
organizationType: type
|
|
207
|
+
}).success) {
|
|
208
|
+
setValidationError(true);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
create.mutate();
|
|
212
|
+
},
|
|
213
|
+
children: t('organizationDirectory.addDirectory')
|
|
214
|
+
})]
|
|
215
|
+
}) : null]
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=OrganizationDirectorySearch.js.map
|