@oxy.so/services 11.2.0 → 11.4.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/lib/commonjs/index.js +28 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/ui/components/AccountInvitationAcceptance.js +97 -0
- package/lib/commonjs/ui/components/AccountInvitationAcceptance.js.map +1 -0
- package/lib/commonjs/ui/components/DisplayCurrencySelector.js +49 -0
- package/lib/commonjs/ui/components/DisplayCurrencySelector.js.map +1 -0
- 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/hooks/useDisplayCurrency.js +77 -0
- package/lib/commonjs/ui/hooks/useDisplayCurrency.js.map +1 -0
- package/lib/commonjs/ui/hooks/useDisplayPrice.js +59 -0
- package/lib/commonjs/ui/hooks/useDisplayPrice.js.map +1 -0
- package/lib/commonjs/ui/screens/AccountMembersScreen.js +63 -20
- package/lib/commonjs/ui/screens/AccountMembersScreen.js.map +1 -1
- 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/commonjs/ui/screens/PreferencesScreen.js +4 -3
- package/lib/commonjs/ui/screens/PreferencesScreen.js.map +1 -1
- package/lib/module/index.js +4 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/ui/components/AccountInvitationAcceptance.js +94 -0
- package/lib/module/ui/components/AccountInvitationAcceptance.js.map +1 -0
- package/lib/module/ui/components/DisplayCurrencySelector.js +44 -0
- package/lib/module/ui/components/DisplayCurrencySelector.js.map +1 -0
- 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/hooks/useDisplayCurrency.js +72 -0
- package/lib/module/ui/hooks/useDisplayCurrency.js.map +1 -0
- package/lib/module/ui/hooks/useDisplayPrice.js +56 -0
- package/lib/module/ui/hooks/useDisplayPrice.js.map +1 -0
- package/lib/module/ui/screens/AccountMembersScreen.js +63 -20
- package/lib/module/ui/screens/AccountMembersScreen.js.map +1 -1
- 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/module/ui/screens/PreferencesScreen.js +4 -3
- package/lib/module/ui/screens/PreferencesScreen.js.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +4 -0
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/AccountInvitationAcceptance.d.ts +5 -0
- package/lib/typescript/commonjs/ui/components/AccountInvitationAcceptance.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/DisplayCurrencySelector.d.ts +3 -0
- package/lib/typescript/commonjs/ui/components/DisplayCurrencySelector.d.ts.map +1 -0
- 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 +10 -3
- package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/queries/usePersonalPlans.d.ts +4 -3
- package/lib/typescript/commonjs/ui/hooks/queries/usePersonalPlans.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/hooks/useDisplayCurrency.d.ts +11 -0
- package/lib/typescript/commonjs/ui/hooks/useDisplayCurrency.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/hooks/useDisplayPrice.d.ts +6 -0
- package/lib/typescript/commonjs/ui/hooks/useDisplayPrice.d.ts.map +1 -0
- 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/AccountMembersScreen.d.ts +1 -1
- package/lib/typescript/commonjs/ui/screens/AccountMembersScreen.d.ts.map +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/commonjs/ui/screens/PreferencesScreen.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +4 -0
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/AccountInvitationAcceptance.d.ts +5 -0
- package/lib/typescript/module/ui/components/AccountInvitationAcceptance.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/DisplayCurrencySelector.d.ts +3 -0
- package/lib/typescript/module/ui/components/DisplayCurrencySelector.d.ts.map +1 -0
- 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 +10 -3
- package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/queries/usePersonalPlans.d.ts +4 -3
- package/lib/typescript/module/ui/hooks/queries/usePersonalPlans.d.ts.map +1 -1
- package/lib/typescript/module/ui/hooks/useDisplayCurrency.d.ts +11 -0
- package/lib/typescript/module/ui/hooks/useDisplayCurrency.d.ts.map +1 -0
- package/lib/typescript/module/ui/hooks/useDisplayPrice.d.ts +6 -0
- package/lib/typescript/module/ui/hooks/useDisplayPrice.d.ts.map +1 -0
- 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/AccountMembersScreen.d.ts +1 -1
- package/lib/typescript/module/ui/screens/AccountMembersScreen.d.ts.map +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/lib/typescript/module/ui/screens/PreferencesScreen.d.ts.map +1 -1
- package/package.json +9 -8
- package/src/index.ts +5 -0
- package/src/ui/components/AccountInvitationAcceptance.tsx +90 -0
- package/src/ui/components/DisplayCurrencySelector.tsx +38 -0
- package/src/ui/components/__tests__/AccountInvitationAcceptance.test.tsx +61 -0
- 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/hooks/useDisplayCurrency.ts +64 -0
- package/src/ui/hooks/useDisplayPrice.ts +40 -0
- package/src/ui/screens/AccountMembersScreen.tsx +71 -27
- package/src/ui/screens/AccountSettingsScreen.tsx +22 -4
- package/src/ui/screens/CreateAccountScreen.tsx +177 -124
- package/src/ui/screens/ManageAccountScreen.tsx +18 -0
- package/src/ui/screens/PreferencesScreen.tsx +2 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
import { ActivityIndicator, View } from 'react-native';
|
|
5
|
+
import { useInfiniteQuery, useMutation, useQueryClient } from '@tanstack/react-query';
|
|
6
|
+
import { createOrganizationSchema, organizationClaimInputSchema } from '@oxy.so/contracts';
|
|
7
|
+
import { Avatar } from '@oxy.so/bloom/avatar';
|
|
8
|
+
import { Button } from '@oxy.so/bloom/button';
|
|
9
|
+
import { SettingsListGroup, SettingsListItem } from '@oxy.so/bloom/settings-list';
|
|
10
|
+
import { TextField, TextFieldInput } from '@oxy.so/bloom/text-field';
|
|
11
|
+
import { Text } from '@oxy.so/bloom/typography';
|
|
12
|
+
import { useOxy } from "../../context/OxyContext.js";
|
|
13
|
+
import { useI18n } from "../../hooks/useI18n.js";
|
|
14
|
+
import { OrganizationTypePicker } from "./OrganizationTypePicker.js";
|
|
15
|
+
|
|
16
|
+
/** Finding an existing identity never grants ownership or silently creates an account. */
|
|
17
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
18
|
+
export function OrganizationDirectorySearch({
|
|
19
|
+
onCreateAccount
|
|
20
|
+
}) {
|
|
21
|
+
const {
|
|
22
|
+
oxyServices,
|
|
23
|
+
user,
|
|
24
|
+
canUsePrivateApi
|
|
25
|
+
} = useOxy();
|
|
26
|
+
const {
|
|
27
|
+
t
|
|
28
|
+
} = useI18n();
|
|
29
|
+
const queryClient = useQueryClient();
|
|
30
|
+
const [search, setSearch] = useState('');
|
|
31
|
+
const [query, setQuery] = useState('');
|
|
32
|
+
const [selected, setSelected] = useState(null);
|
|
33
|
+
const [adding, setAdding] = useState(false);
|
|
34
|
+
const [type, setType] = useState('business');
|
|
35
|
+
const [evidence, setEvidence] = useState('');
|
|
36
|
+
const [validationError, setValidationError] = useState(false);
|
|
37
|
+
const personalReady = canUsePrivateApi && user?.kind === 'personal';
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
const timer = setTimeout(() => setQuery(search.trim()), 300);
|
|
40
|
+
return () => clearTimeout(timer);
|
|
41
|
+
}, [search]);
|
|
42
|
+
const results = useInfiniteQuery({
|
|
43
|
+
queryKey: ['oxy', 'organizations', 'search', query],
|
|
44
|
+
queryFn: ({
|
|
45
|
+
pageParam
|
|
46
|
+
}) => oxyServices.organizations.search({
|
|
47
|
+
query,
|
|
48
|
+
limit: 20,
|
|
49
|
+
...(pageParam ? {
|
|
50
|
+
cursor: pageParam
|
|
51
|
+
} : {})
|
|
52
|
+
}),
|
|
53
|
+
initialPageParam: undefined,
|
|
54
|
+
getNextPageParam: page => page.nextCursor ?? undefined,
|
|
55
|
+
enabled: query.length > 0,
|
|
56
|
+
retry: false
|
|
57
|
+
});
|
|
58
|
+
const claim = useMutation({
|
|
59
|
+
mutationFn: () => {
|
|
60
|
+
if (!personalReady || !selected || selected.status !== 'active') throw new Error('An active organization and personal session are required');
|
|
61
|
+
return oxyServices.organizations.claim(selected.accountId, organizationClaimInputSchema.parse({
|
|
62
|
+
evidenceReference: evidence
|
|
63
|
+
}));
|
|
64
|
+
},
|
|
65
|
+
onSuccess: () => queryClient.invalidateQueries({
|
|
66
|
+
queryKey: ['oxy', 'organizations']
|
|
67
|
+
})
|
|
68
|
+
});
|
|
69
|
+
const create = useMutation({
|
|
70
|
+
mutationFn: () => {
|
|
71
|
+
if (!personalReady) throw new Error('A personal session is required');
|
|
72
|
+
return oxyServices.organizations.create(createOrganizationSchema.parse({
|
|
73
|
+
name: search.trim(),
|
|
74
|
+
organizationType: type
|
|
75
|
+
}));
|
|
76
|
+
},
|
|
77
|
+
onSuccess: organization => {
|
|
78
|
+
setSelected(organization);
|
|
79
|
+
setAdding(false);
|
|
80
|
+
void queryClient.invalidateQueries({
|
|
81
|
+
queryKey: ['oxy', 'organizations']
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
const reset = () => {
|
|
86
|
+
setSelected(null);
|
|
87
|
+
setAdding(false);
|
|
88
|
+
setEvidence('');
|
|
89
|
+
claim.reset();
|
|
90
|
+
create.reset();
|
|
91
|
+
setValidationError(false);
|
|
92
|
+
};
|
|
93
|
+
if (selected) return /*#__PURE__*/_jsx(SettingsListGroup, {
|
|
94
|
+
title: selected.name,
|
|
95
|
+
children: /*#__PURE__*/_jsxs(View, {
|
|
96
|
+
className: "gap-space-16 p-space-16",
|
|
97
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
98
|
+
children: t(`organizationDirectory.${selected.claimStatus}`)
|
|
99
|
+
}), selected.status === 'inactive' ? /*#__PURE__*/_jsx(Text, {
|
|
100
|
+
children: t('organizationDirectory.inactive')
|
|
101
|
+
}) : null, selected.claimStatus === 'unclaimed' ? /*#__PURE__*/_jsxs(_Fragment, {
|
|
102
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
103
|
+
children: t('organizationDirectory.claimHint')
|
|
104
|
+
}), /*#__PURE__*/_jsx(TextField, {
|
|
105
|
+
children: /*#__PURE__*/_jsx(TextFieldInput, {
|
|
106
|
+
label: t('organizationDirectory.evidence'),
|
|
107
|
+
value: evidence,
|
|
108
|
+
onChangeText: setEvidence,
|
|
109
|
+
maxLength: 1000
|
|
110
|
+
})
|
|
111
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
112
|
+
children: t('organizationDirectory.evidenceHint')
|
|
113
|
+
}), claim.isSuccess ? /*#__PURE__*/_jsx(Text, {
|
|
114
|
+
accessibilityRole: "alert",
|
|
115
|
+
children: t('organizationDirectory.claimSent')
|
|
116
|
+
}) : /*#__PURE__*/_jsx(Button, {
|
|
117
|
+
onPress: () => claim.mutate(),
|
|
118
|
+
disabled: !personalReady || selected.status !== 'active' || !evidence.trim() || claim.isPending,
|
|
119
|
+
loading: claim.isPending,
|
|
120
|
+
children: t('organizationDirectory.claim')
|
|
121
|
+
}), claim.isError ? /*#__PURE__*/_jsx(Text, {
|
|
122
|
+
accessibilityRole: "alert",
|
|
123
|
+
children: t('organizationDirectory.claimFailed')
|
|
124
|
+
}) : null]
|
|
125
|
+
}) : /*#__PURE__*/_jsx(Text, {
|
|
126
|
+
children: t('organizationDirectory.claimedHint')
|
|
127
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
128
|
+
appearance: "outline",
|
|
129
|
+
onPress: reset,
|
|
130
|
+
disabled: claim.isPending,
|
|
131
|
+
children: t('organizationDirectory.back')
|
|
132
|
+
})]
|
|
133
|
+
})
|
|
134
|
+
});
|
|
135
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
136
|
+
className: "gap-space-16",
|
|
137
|
+
children: [/*#__PURE__*/_jsx(TextField, {
|
|
138
|
+
children: /*#__PURE__*/_jsx(TextFieldInput, {
|
|
139
|
+
label: t('organizationDirectory.search'),
|
|
140
|
+
value: search,
|
|
141
|
+
onChangeText: value => {
|
|
142
|
+
setSearch(value);
|
|
143
|
+
setValidationError(false);
|
|
144
|
+
},
|
|
145
|
+
maxLength: 200
|
|
146
|
+
})
|
|
147
|
+
}), query && results.isPending ? /*#__PURE__*/_jsx(ActivityIndicator, {}) : null, results.isError ? /*#__PURE__*/_jsxs(View, {
|
|
148
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
149
|
+
accessibilityRole: "alert",
|
|
150
|
+
children: t('organizationDirectory.failed')
|
|
151
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
152
|
+
onPress: () => results.refetch(),
|
|
153
|
+
children: t('organizationDirectory.retry')
|
|
154
|
+
})]
|
|
155
|
+
}) : null, results.data ? /*#__PURE__*/_jsxs(SettingsListGroup, {
|
|
156
|
+
title: t('organizationDirectory.title'),
|
|
157
|
+
children: [results.data.pages.flatMap(page => page.items).map(organization => /*#__PURE__*/_jsx(SettingsListItem, {
|
|
158
|
+
title: organization.name,
|
|
159
|
+
description: [organization.websiteUrl, organization.countryCode, t(`organizationDirectory.${organization.claimStatus}`)].filter(Boolean).join(' · '),
|
|
160
|
+
icon: /*#__PURE__*/_jsx(Avatar, {
|
|
161
|
+
source: organization.avatar,
|
|
162
|
+
name: organization.name,
|
|
163
|
+
size: 40
|
|
164
|
+
}),
|
|
165
|
+
onPress: () => setSelected(organization)
|
|
166
|
+
}, organization.accountId)), results.data.pages[0].items.length === 0 ? /*#__PURE__*/_jsx(Text, {
|
|
167
|
+
children: t('organizationDirectory.empty')
|
|
168
|
+
}) : null, results.hasNextPage ? /*#__PURE__*/_jsx(Button, {
|
|
169
|
+
onPress: () => results.fetchNextPage(),
|
|
170
|
+
disabled: results.isFetchingNextPage,
|
|
171
|
+
children: t('organizationDirectory.loadMore')
|
|
172
|
+
}) : null]
|
|
173
|
+
}) : null, results.isSuccess && query === search.trim() ? /*#__PURE__*/_jsxs(_Fragment, {
|
|
174
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
175
|
+
children: t('organizationDirectory.newAccountHint')
|
|
176
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
177
|
+
onPress: () => onCreateAccount(search.trim(), type),
|
|
178
|
+
children: t('organizationDirectory.newAccount')
|
|
179
|
+
}), personalReady && !adding ? /*#__PURE__*/_jsx(Button, {
|
|
180
|
+
appearance: "outline",
|
|
181
|
+
onPress: () => setAdding(true),
|
|
182
|
+
children: t('organizationDirectory.addDirectory')
|
|
183
|
+
}) : null]
|
|
184
|
+
}) : null, adding ? /*#__PURE__*/_jsxs(_Fragment, {
|
|
185
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
186
|
+
children: t('organizationDirectory.directoryHint')
|
|
187
|
+
}), /*#__PURE__*/_jsx(OrganizationTypePicker, {
|
|
188
|
+
value: type,
|
|
189
|
+
onChange: setType,
|
|
190
|
+
disabled: create.isPending
|
|
191
|
+
}), validationError ? /*#__PURE__*/_jsx(Text, {
|
|
192
|
+
accessibilityRole: "alert",
|
|
193
|
+
children: t('organizationDirectory.invalid')
|
|
194
|
+
}) : null, create.isError ? /*#__PURE__*/_jsx(Text, {
|
|
195
|
+
accessibilityRole: "alert",
|
|
196
|
+
children: t('organizationDirectory.saveFailed')
|
|
197
|
+
}) : null, /*#__PURE__*/_jsx(Button, {
|
|
198
|
+
disabled: !personalReady || create.isPending || !results.isSuccess || query !== search.trim(),
|
|
199
|
+
loading: create.isPending,
|
|
200
|
+
onPress: () => {
|
|
201
|
+
if (!createOrganizationSchema.safeParse({
|
|
202
|
+
name: search.trim(),
|
|
203
|
+
organizationType: type
|
|
204
|
+
}).success) {
|
|
205
|
+
setValidationError(true);
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
create.mutate();
|
|
209
|
+
},
|
|
210
|
+
children: t('organizationDirectory.addDirectory')
|
|
211
|
+
})]
|
|
212
|
+
}) : null]
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=OrganizationDirectorySearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useState","ActivityIndicator","View","useInfiniteQuery","useMutation","useQueryClient","createOrganizationSchema","organizationClaimInputSchema","Avatar","Button","SettingsListGroup","SettingsListItem","TextField","TextFieldInput","Text","useOxy","useI18n","OrganizationTypePicker","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","OrganizationDirectorySearch","onCreateAccount","oxyServices","user","canUsePrivateApi","t","queryClient","search","setSearch","query","setQuery","selected","setSelected","adding","setAdding","type","setType","evidence","setEvidence","validationError","setValidationError","personalReady","kind","timer","setTimeout","trim","clearTimeout","results","queryKey","queryFn","pageParam","organizations","limit","cursor","initialPageParam","undefined","getNextPageParam","page","nextCursor","enabled","length","retry","claim","mutationFn","status","Error","accountId","parse","evidenceReference","onSuccess","invalidateQueries","create","name","organizationType","organization","reset","title","children","className","claimStatus","label","value","onChangeText","maxLength","isSuccess","accessibilityRole","onPress","mutate","disabled","isPending","loading","isError","appearance","refetch","data","pages","flatMap","items","map","description","websiteUrl","countryCode","filter","Boolean","join","icon","source","avatar","size","hasNextPage","fetchNextPage","isFetchingNextPage","onChange","safeParse","success"],"sourceRoot":"../../../../../src","sources":["ui/components/organizations/OrganizationDirectorySearch.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { ActivityIndicator, View } from 'react-native';
|
|
5
|
+
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
|
6
|
+
import { updateOrganizationSchema } from '@oxy.so/contracts';
|
|
7
|
+
import { Button } from '@oxy.so/bloom/button';
|
|
8
|
+
import { toast } from '@oxy.so/bloom/toast';
|
|
9
|
+
import { SettingsListGroup } from '@oxy.so/bloom/settings-list';
|
|
10
|
+
import { TextField, TextFieldInput } from '@oxy.so/bloom/text-field';
|
|
11
|
+
import { Text } from '@oxy.so/bloom/typography';
|
|
12
|
+
import { useOxy } from "../../context/OxyContext.js";
|
|
13
|
+
import { useI18n } from "../../hooks/useI18n.js";
|
|
14
|
+
import { OrganizationTypePicker } from "./OrganizationTypePicker.js";
|
|
15
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
16
|
+
export function OrganizationSettings({
|
|
17
|
+
accountId,
|
|
18
|
+
canUpdate
|
|
19
|
+
}) {
|
|
20
|
+
const {
|
|
21
|
+
oxyServices,
|
|
22
|
+
canUsePrivateApi
|
|
23
|
+
} = useOxy();
|
|
24
|
+
const {
|
|
25
|
+
t
|
|
26
|
+
} = useI18n();
|
|
27
|
+
const organization = useQuery({
|
|
28
|
+
queryKey: ['oxy', 'organizations', accountId],
|
|
29
|
+
queryFn: () => oxyServices.organizations.get(accountId),
|
|
30
|
+
retry: false
|
|
31
|
+
});
|
|
32
|
+
if (organization.isPending) return /*#__PURE__*/_jsx(ActivityIndicator, {});
|
|
33
|
+
if (organization.isError) return /*#__PURE__*/_jsxs(View, {
|
|
34
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
35
|
+
accessibilityRole: "alert",
|
|
36
|
+
children: t('organizationDirectory.failed')
|
|
37
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
38
|
+
onPress: () => organization.refetch(),
|
|
39
|
+
children: t('organizationDirectory.retry')
|
|
40
|
+
})]
|
|
41
|
+
});
|
|
42
|
+
if (!canUpdate || !canUsePrivateApi) return /*#__PURE__*/_jsxs(SettingsListGroup, {
|
|
43
|
+
title: t('organizationDirectory.title'),
|
|
44
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
45
|
+
children: t(`organizationDirectory.types.${organization.data.organizationType}`)
|
|
46
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
47
|
+
children: t('organizationDirectory.readonly')
|
|
48
|
+
})]
|
|
49
|
+
});
|
|
50
|
+
return /*#__PURE__*/_jsx(OrganizationForm, {
|
|
51
|
+
organization: organization.data
|
|
52
|
+
}, `${accountId}:${organization.data.updatedAt}`);
|
|
53
|
+
}
|
|
54
|
+
function OrganizationForm({
|
|
55
|
+
organization
|
|
56
|
+
}) {
|
|
57
|
+
const {
|
|
58
|
+
oxyServices,
|
|
59
|
+
canUsePrivateApi
|
|
60
|
+
} = useOxy();
|
|
61
|
+
const {
|
|
62
|
+
t
|
|
63
|
+
} = useI18n();
|
|
64
|
+
const queryClient = useQueryClient();
|
|
65
|
+
const [legalName, setLegalName] = useState(organization.legalName ?? '');
|
|
66
|
+
const [website, setWebsite] = useState(organization.websiteUrl ?? '');
|
|
67
|
+
const [country, setCountry] = useState(organization.countryCode ?? '');
|
|
68
|
+
const [type, setType] = useState(organization.organizationType);
|
|
69
|
+
const [invalid, setInvalid] = useState(false);
|
|
70
|
+
const save = useMutation({
|
|
71
|
+
mutationFn: input => {
|
|
72
|
+
if (!canUsePrivateApi) throw new Error('An authenticated session is required');
|
|
73
|
+
return oxyServices.organizations.update(organization.accountId, input);
|
|
74
|
+
},
|
|
75
|
+
onSuccess: () => {
|
|
76
|
+
toast.success(t('organizationDirectory.saved'));
|
|
77
|
+
void queryClient.invalidateQueries({
|
|
78
|
+
queryKey: ['oxy', 'organizations']
|
|
79
|
+
});
|
|
80
|
+
void queryClient.invalidateQueries({
|
|
81
|
+
queryKey: ['accounts']
|
|
82
|
+
});
|
|
83
|
+
void queryClient.invalidateQueries({
|
|
84
|
+
queryKey: ['users']
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
return /*#__PURE__*/_jsx(SettingsListGroup, {
|
|
89
|
+
title: t('organizationDirectory.title'),
|
|
90
|
+
children: /*#__PURE__*/_jsxs(View, {
|
|
91
|
+
className: "gap-space-16 p-space-16",
|
|
92
|
+
children: [/*#__PURE__*/_jsx(TextField, {
|
|
93
|
+
children: /*#__PURE__*/_jsx(TextFieldInput, {
|
|
94
|
+
label: t('organizationDirectory.legalName'),
|
|
95
|
+
value: legalName,
|
|
96
|
+
onChangeText: setLegalName,
|
|
97
|
+
maxLength: 300
|
|
98
|
+
})
|
|
99
|
+
}), /*#__PURE__*/_jsx(TextField, {
|
|
100
|
+
children: /*#__PURE__*/_jsx(TextFieldInput, {
|
|
101
|
+
label: t('organizationDirectory.website'),
|
|
102
|
+
value: website,
|
|
103
|
+
onChangeText: setWebsite,
|
|
104
|
+
autoCapitalize: "none",
|
|
105
|
+
maxLength: 2048
|
|
106
|
+
})
|
|
107
|
+
}), /*#__PURE__*/_jsx(TextField, {
|
|
108
|
+
children: /*#__PURE__*/_jsx(TextFieldInput, {
|
|
109
|
+
label: t('organizationDirectory.country'),
|
|
110
|
+
value: country,
|
|
111
|
+
onChangeText: setCountry,
|
|
112
|
+
autoCapitalize: "characters",
|
|
113
|
+
maxLength: 2
|
|
114
|
+
})
|
|
115
|
+
}), /*#__PURE__*/_jsx(OrganizationTypePicker, {
|
|
116
|
+
value: type,
|
|
117
|
+
onChange: setType,
|
|
118
|
+
disabled: save.isPending
|
|
119
|
+
}), invalid ? /*#__PURE__*/_jsx(Text, {
|
|
120
|
+
accessibilityRole: "alert",
|
|
121
|
+
children: t('organizationDirectory.invalid')
|
|
122
|
+
}) : null, save.isError ? /*#__PURE__*/_jsx(Text, {
|
|
123
|
+
accessibilityRole: "alert",
|
|
124
|
+
children: t('organizationDirectory.saveFailed')
|
|
125
|
+
}) : null, /*#__PURE__*/_jsx(Button, {
|
|
126
|
+
disabled: save.isPending || !canUsePrivateApi,
|
|
127
|
+
loading: save.isPending,
|
|
128
|
+
onPress: () => {
|
|
129
|
+
const input = updateOrganizationSchema.safeParse({
|
|
130
|
+
legalName: legalName.trim() || null,
|
|
131
|
+
websiteUrl: website.trim() || null,
|
|
132
|
+
countryCode: country.trim().toUpperCase() || null,
|
|
133
|
+
organizationType: type
|
|
134
|
+
});
|
|
135
|
+
setInvalid(!input.success);
|
|
136
|
+
if (input.success) save.mutate(input.data);
|
|
137
|
+
},
|
|
138
|
+
children: t('organizationDirectory.save')
|
|
139
|
+
})]
|
|
140
|
+
})
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=OrganizationSettings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useState","ActivityIndicator","View","useMutation","useQuery","useQueryClient","updateOrganizationSchema","Button","toast","SettingsListGroup","TextField","TextFieldInput","Text","useOxy","useI18n","OrganizationTypePicker","jsx","_jsx","jsxs","_jsxs","OrganizationSettings","accountId","canUpdate","oxyServices","canUsePrivateApi","t","organization","queryKey","queryFn","organizations","get","retry","isPending","isError","children","accessibilityRole","onPress","refetch","title","data","organizationType","OrganizationForm","updatedAt","queryClient","legalName","setLegalName","website","setWebsite","websiteUrl","country","setCountry","countryCode","type","setType","invalid","setInvalid","save","mutationFn","input","Error","update","onSuccess","success","invalidateQueries","className","label","value","onChangeText","maxLength","autoCapitalize","onChange","disabled","loading","safeParse","trim","toUpperCase","mutate"],"sourceRoot":"../../../../../src","sources":["ui/components/organizations/OrganizationSettings.tsx"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,OAAO;AAChC,SAASC,iBAAiB,EAAEC,IAAI,QAAQ,cAAc;AACtD,SAASC,WAAW,EAAEC,QAAQ,EAAEC,cAAc,QAAQ,uBAAuB;AAC7E,SACEC,wBAAwB,QAGnB,mBAAmB;AAC1B,SAASC,MAAM,QAAQ,sBAAsB;AAC7C,SAASC,KAAK,QAAQ,qBAAqB;AAC3C,SAASC,iBAAiB,QAAQ,6BAA6B;AAC/D,SAASC,SAAS,EAAEC,cAAc,QAAQ,0BAA0B;AACpE,SAASC,IAAI,QAAQ,0BAA0B;AAC/C,SAASC,MAAM,QAAQ,6BAA0B;AACjD,SAASC,OAAO,QAAQ,wBAAqB;AAC7C,SAASC,sBAAsB,QAAQ,6BAA0B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAElE,OAAO,SAASC,oBAAoBA,CAAC;EACnCC,SAAS;EACTC;AAIF,CAAC,EAAE;EACD,MAAM;IAAEC,WAAW;IAAEC;EAAiB,CAAC,GAAGX,MAAM,CAAC,CAAC;EAClD,MAAM;IAAEY;EAAE,CAAC,GAAGX,OAAO,CAAC,CAAC;EACvB,MAAMY,YAAY,GAAGtB,QAAQ,CAAC;IAC5BuB,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,EAAEN,SAAS,CAAC;IAC7CO,OAAO,EAAEA,CAAA,KAAML,WAAW,CAACM,aAAa,CAACC,GAAG,CAACT,SAAS,CAAC;IACvDU,KAAK,EAAE;EACT,CAAC,CAAC;EACF,IAAIL,YAAY,CAACM,SAAS,EAAE,oBAAOf,IAAA,CAAChB,iBAAiB,IAAE,CAAC;EACxD,IAAIyB,YAAY,CAACO,OAAO,EACtB,oBACEd,KAAA,CAACjB,IAAI;IAAAgC,QAAA,gBACHjB,IAAA,CAACL,IAAI;MAACuB,iBAAiB,EAAC,OAAO;MAAAD,QAAA,EAAET,CAAC,CAAC,8BAA8B;IAAC,CAAO,CAAC,eAC1ER,IAAA,CAACV,MAAM;MAAC6B,OAAO,EAAEA,CAAA,KAAMV,YAAY,CAACW,OAAO,CAAC,CAAE;MAAAH,QAAA,EAAET,CAAC,CAAC,6BAA6B;IAAC,CAAS,CAAC;EAAA,CACtF,CAAC;EAEX,IAAI,CAACH,SAAS,IAAI,CAACE,gBAAgB,EACjC,oBACEL,KAAA,CAACV,iBAAiB;IAAC6B,KAAK,EAAEb,CAAC,CAAC,6BAA6B,CAAE;IAAAS,QAAA,gBACzDjB,IAAA,CAACL,IAAI;MAAAsB,QAAA,EAAET,CAAC,CAAC,+BAA+BC,YAAY,CAACa,IAAI,CAACC,gBAAgB,EAAE;IAAC,CAAO,CAAC,eACrFvB,IAAA,CAACL,IAAI;MAAAsB,QAAA,EAAET,CAAC,CAAC,gCAAgC;IAAC,CAAO,CAAC;EAAA,CACjC,CAAC;EAExB,oBACER,IAAA,CAACwB,gBAAgB;IAEff,YAAY,EAAEA,YAAY,CAACa;EAAK,GAD3B,GAAGlB,SAAS,IAAIK,YAAY,CAACa,IAAI,CAACG,SAAS,EAEjD,CAAC;AAEN;AAEA,SAASD,gBAAgBA,CAAC;EAAEf;AAA6C,CAAC,EAAE;EAC1E,MAAM;IAAEH,WAAW;IAAEC;EAAiB,CAAC,GAAGX,MAAM,CAAC,CAAC;EAClD,MAAM;IAAEY;EAAE,CAAC,GAAGX,OAAO,CAAC,CAAC;EACvB,MAAM6B,WAAW,GAAGtC,cAAc,CAAC,CAAC;EACpC,MAAM,CAACuC,SAAS,EAAEC,YAAY,CAAC,GAAG7C,QAAQ,CAAC0B,YAAY,CAACkB,SAAS,IAAI,EAAE,CAAC;EACxE,MAAM,CAACE,OAAO,EAAEC,UAAU,CAAC,GAAG/C,QAAQ,CAAC0B,YAAY,CAACsB,UAAU,IAAI,EAAE,CAAC;EACrE,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGlD,QAAQ,CAAC0B,YAAY,CAACyB,WAAW,IAAI,EAAE,CAAC;EACtE,MAAM,CAACC,IAAI,EAAEC,OAAO,CAAC,GAAGrD,QAAQ,CAAmB0B,YAAY,CAACc,gBAAgB,CAAC;EACjF,MAAM,CAACc,OAAO,EAAEC,UAAU,CAAC,GAAGvD,QAAQ,CAAC,KAAK,CAAC;EAC7C,MAAMwD,IAAI,GAAGrD,WAAW,CAAC;IACvBsD,UAAU,EAAGC,KAAwD,IAAK;MACxE,IAAI,CAAClC,gBAAgB,EAAE,MAAM,IAAImC,KAAK,CAAC,sCAAsC,CAAC;MAC9E,OAAOpC,WAAW,CAACM,aAAa,CAAC+B,MAAM,CAAClC,YAAY,CAACL,SAAS,EAAEqC,KAAK,CAAC;IACxE,CAAC;IACDG,SAAS,EAAEA,CAAA,KAAM;MACfrD,KAAK,CAACsD,OAAO,CAACrC,CAAC,CAAC,6BAA6B,CAAC,CAAC;MAC/C,KAAKkB,WAAW,CAACoB,iBAAiB,CAAC;QAAEpC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe;MAAE,CAAC,CAAC;MAC1E,KAAKgB,WAAW,CAACoB,iBAAiB,CAAC;QAAEpC,QAAQ,EAAE,CAAC,UAAU;MAAE,CAAC,CAAC;MAC9D,KAAKgB,WAAW,CAACoB,iBAAiB,CAAC;QAAEpC,QAAQ,EAAE,CAAC,OAAO;MAAE,CAAC,CAAC;IAC7D;EACF,CAAC,CAAC;EACF,oBACEV,IAAA,CAACR,iBAAiB;IAAC6B,KAAK,EAAEb,CAAC,CAAC,6BAA6B,CAAE;IAAAS,QAAA,eACzDf,KAAA,CAACjB,IAAI;MAAC8D,SAAS,EAAC,yBAAyB;MAAA9B,QAAA,gBACvCjB,IAAA,CAACP,SAAS;QAAAwB,QAAA,eACRjB,IAAA,CAACN,cAAc;UACbsD,KAAK,EAAExC,CAAC,CAAC,iCAAiC,CAAE;UAC5CyC,KAAK,EAAEtB,SAAU;UACjBuB,YAAY,EAAEtB,YAAa;UAC3BuB,SAAS,EAAE;QAAI,CAChB;MAAC,CACO,CAAC,eACZnD,IAAA,CAACP,SAAS;QAAAwB,QAAA,eACRjB,IAAA,CAACN,cAAc;UACbsD,KAAK,EAAExC,CAAC,CAAC,+BAA+B,CAAE;UAC1CyC,KAAK,EAAEpB,OAAQ;UACfqB,YAAY,EAAEpB,UAAW;UACzBsB,cAAc,EAAC,MAAM;UACrBD,SAAS,EAAE;QAAK,CACjB;MAAC,CACO,CAAC,eACZnD,IAAA,CAACP,SAAS;QAAAwB,QAAA,eACRjB,IAAA,CAACN,cAAc;UACbsD,KAAK,EAAExC,CAAC,CAAC,+BAA+B,CAAE;UAC1CyC,KAAK,EAAEjB,OAAQ;UACfkB,YAAY,EAAEjB,UAAW;UACzBmB,cAAc,EAAC,YAAY;UAC3BD,SAAS,EAAE;QAAE,CACd;MAAC,CACO,CAAC,eACZnD,IAAA,CAACF,sBAAsB;QAACmD,KAAK,EAAEd,IAAK;QAACkB,QAAQ,EAAEjB,OAAQ;QAACkB,QAAQ,EAAEf,IAAI,CAACxB;MAAU,CAAE,CAAC,EACnFsB,OAAO,gBACNrC,IAAA,CAACL,IAAI;QAACuB,iBAAiB,EAAC,OAAO;QAAAD,QAAA,EAAET,CAAC,CAAC,+BAA+B;MAAC,CAAO,CAAC,GACzE,IAAI,EACP+B,IAAI,CAACvB,OAAO,gBACXhB,IAAA,CAACL,IAAI;QAACuB,iBAAiB,EAAC,OAAO;QAAAD,QAAA,EAAET,CAAC,CAAC,kCAAkC;MAAC,CAAO,CAAC,GAC5E,IAAI,eACRR,IAAA,CAACV,MAAM;QACLgE,QAAQ,EAAEf,IAAI,CAACxB,SAAS,IAAI,CAACR,gBAAiB;QAC9CgD,OAAO,EAAEhB,IAAI,CAACxB,SAAU;QACxBI,OAAO,EAAEA,CAAA,KAAM;UACb,MAAMsB,KAAK,GAAGpD,wBAAwB,CAACmE,SAAS,CAAC;YAC/C7B,SAAS,EAAEA,SAAS,CAAC8B,IAAI,CAAC,CAAC,IAAI,IAAI;YACnC1B,UAAU,EAAEF,OAAO,CAAC4B,IAAI,CAAC,CAAC,IAAI,IAAI;YAClCvB,WAAW,EAAEF,OAAO,CAACyB,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,IAAI,IAAI;YACjDnC,gBAAgB,EAAEY;UACpB,CAAC,CAAC;UACFG,UAAU,CAAC,CAACG,KAAK,CAACI,OAAO,CAAC;UAC1B,IAAIJ,KAAK,CAACI,OAAO,EAAEN,IAAI,CAACoB,MAAM,CAAClB,KAAK,CAACnB,IAAI,CAAC;QAC5C,CAAE;QAAAL,QAAA,EAEDT,CAAC,CAAC,4BAA4B;MAAC,CAC1B,CAAC;IAAA,CACL;EAAC,CACU,CAAC;AAExB","ignoreList":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { ORGANIZATION_TYPES } from '@oxy.so/contracts';
|
|
4
|
+
import { SettingsListGroup, SettingsListItem } from '@oxy.so/bloom/settings-list';
|
|
5
|
+
import { Text } from '@oxy.so/bloom/typography';
|
|
6
|
+
import { useI18n } from "../../hooks/useI18n.js";
|
|
7
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
|
+
export function OrganizationTypePicker({
|
|
9
|
+
value,
|
|
10
|
+
onChange,
|
|
11
|
+
disabled = false
|
|
12
|
+
}) {
|
|
13
|
+
const {
|
|
14
|
+
t
|
|
15
|
+
} = useI18n();
|
|
16
|
+
return /*#__PURE__*/_jsx(SettingsListGroup, {
|
|
17
|
+
title: t('organizationDirectory.type'),
|
|
18
|
+
children: ORGANIZATION_TYPES.map(type => /*#__PURE__*/_jsx(SettingsListItem, {
|
|
19
|
+
title: t(`organizationDirectory.types.${type}`),
|
|
20
|
+
accessibilityLabel: t(`organizationDirectory.types.${type}`),
|
|
21
|
+
disabled: disabled,
|
|
22
|
+
onPress: () => onChange(type),
|
|
23
|
+
showChevron: false,
|
|
24
|
+
rightElement: value === type ? /*#__PURE__*/_jsx(Text, {
|
|
25
|
+
children: "\u2713"
|
|
26
|
+
}) : undefined
|
|
27
|
+
}, type))
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=OrganizationTypePicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ORGANIZATION_TYPES","SettingsListGroup","SettingsListItem","Text","useI18n","jsx","_jsx","OrganizationTypePicker","value","onChange","disabled","t","title","children","map","type","accessibilityLabel","onPress","showChevron","rightElement","undefined"],"sourceRoot":"../../../../../src","sources":["ui/components/organizations/OrganizationTypePicker.tsx"],"mappings":";;AAAA,SAASA,kBAAkB,QAA+B,mBAAmB;AAC7E,SAASC,iBAAiB,EAAEC,gBAAgB,QAAQ,6BAA6B;AACjF,SAASC,IAAI,QAAQ,0BAA0B;AAC/C,SAASC,OAAO,QAAQ,wBAAqB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE9C,OAAO,SAASC,sBAAsBA,CAAC;EACrCC,KAAK;EACLC,QAAQ;EACRC,QAAQ,GAAG;AAKb,CAAC,EAAE;EACD,MAAM;IAAEC;EAAE,CAAC,GAAGP,OAAO,CAAC,CAAC;EACvB,oBACEE,IAAA,CAACL,iBAAiB;IAACW,KAAK,EAAED,CAAC,CAAC,4BAA4B,CAAE;IAAAE,QAAA,EACvDb,kBAAkB,CAACc,GAAG,CAAEC,IAAI,iBAC3BT,IAAA,CAACJ,gBAAgB;MAEfU,KAAK,EAAED,CAAC,CAAC,+BAA+BI,IAAI,EAAE,CAAE;MAChDC,kBAAkB,EAAEL,CAAC,CAAC,+BAA+BI,IAAI,EAAE,CAAE;MAC7DL,QAAQ,EAAEA,QAAS;MACnBO,OAAO,EAAEA,CAAA,KAAMR,QAAQ,CAACM,IAAI,CAAE;MAC9BG,WAAW,EAAE,KAAM;MACnBC,YAAY,EAAEX,KAAK,KAAKO,IAAI,gBAAGT,IAAA,CAACH,IAAI;QAAAU,QAAA,EAAC;MAAC,CAAM,CAAC,GAAGO;IAAU,GANrDL,IAON,CACF;EAAC,CACe,CAAC;AAExB","ignoreList":[]}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useSyncExternalStore } from 'react';
|
|
4
|
+
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
|
5
|
+
import { authenticatedApiCall } from '@oxy.so/core';
|
|
6
|
+
import { useOxy } from "../context/OxyContext.js";
|
|
7
|
+
import { useCurrentUser } from "./queries/useAccountQueries.js";
|
|
8
|
+
import { queryKeys } from "./queries/queryKeys.js";
|
|
9
|
+
import { useAuthStore } from "../stores/authStore.js";
|
|
10
|
+
import { mutationKeys } from "./mutations/mutationKeys.js";
|
|
11
|
+
export const DISPLAY_CURRENCIES = ['USD', 'EUR', 'FAIR'];
|
|
12
|
+
let anonymousCurrency = 'USD';
|
|
13
|
+
const anonymousListeners = new Set();
|
|
14
|
+
const subscribeAnonymous = listener => {
|
|
15
|
+
anonymousListeners.add(listener);
|
|
16
|
+
return () => {
|
|
17
|
+
anonymousListeners.delete(listener);
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
const anonymousSnapshot = () => anonymousCurrency;
|
|
21
|
+
|
|
22
|
+
/** Account-scoped server preference. A late save can never replace another account. */
|
|
23
|
+
export function useDisplayCurrency() {
|
|
24
|
+
const {
|
|
25
|
+
oxyServices,
|
|
26
|
+
activeSessionId,
|
|
27
|
+
isAuthenticated,
|
|
28
|
+
user
|
|
29
|
+
} = useOxy();
|
|
30
|
+
const current = useCurrentUser({
|
|
31
|
+
enabled: isAuthenticated
|
|
32
|
+
});
|
|
33
|
+
const client = useQueryClient();
|
|
34
|
+
const anonymous = useSyncExternalStore(subscribeAnonymous, anonymousSnapshot, () => 'USD');
|
|
35
|
+
const currency = isAuthenticated ? current.data?.userPreferences?.displayCurrency ?? user?.userPreferences?.displayCurrency ?? 'USD' : anonymous;
|
|
36
|
+
const mutation = useMutation({
|
|
37
|
+
mutationKey: [...mutationKeys.account.updateSettings],
|
|
38
|
+
mutationFn: async input => {
|
|
39
|
+
const updated = await authenticatedApiCall(oxyServices, input.sessionId, () => oxyServices.users.updateMe({
|
|
40
|
+
userPreferences: {
|
|
41
|
+
displayCurrency: input.currency
|
|
42
|
+
}
|
|
43
|
+
}));
|
|
44
|
+
if (updated.id !== input.userId) throw new Error('Account changed. Please try again.');
|
|
45
|
+
return updated;
|
|
46
|
+
},
|
|
47
|
+
onSuccess: (updated, input) => {
|
|
48
|
+
client.setQueryData(queryKeys.accounts.current(input.sessionId), updated);
|
|
49
|
+
if (useAuthStore.getState().user?.id === input.userId) useAuthStore.getState().setUser(updated);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
function selectCurrency(next) {
|
|
53
|
+
if (!DISPLAY_CURRENCIES.includes(next)) return;
|
|
54
|
+
if (!isAuthenticated) {
|
|
55
|
+
anonymousCurrency = next;
|
|
56
|
+
for (const listener of anonymousListeners) listener();
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (activeSessionId && user?.id) mutation.mutate({
|
|
60
|
+
currency: next,
|
|
61
|
+
sessionId: activeSessionId,
|
|
62
|
+
userId: user.id
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
currency,
|
|
67
|
+
selectCurrency,
|
|
68
|
+
isSaving: mutation.isPending,
|
|
69
|
+
error: mutation.error
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=useDisplayCurrency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useSyncExternalStore","useMutation","useQueryClient","authenticatedApiCall","useOxy","useCurrentUser","queryKeys","useAuthStore","mutationKeys","DISPLAY_CURRENCIES","anonymousCurrency","anonymousListeners","Set","subscribeAnonymous","listener","add","delete","anonymousSnapshot","useDisplayCurrency","oxyServices","activeSessionId","isAuthenticated","user","current","enabled","client","anonymous","currency","data","userPreferences","displayCurrency","mutation","mutationKey","account","updateSettings","mutationFn","input","updated","sessionId","users","updateMe","id","userId","Error","onSuccess","setQueryData","accounts","getState","setUser","selectCurrency","next","includes","mutate","isSaving","isPending","error"],"sourceRoot":"../../../../src","sources":["ui/hooks/useDisplayCurrency.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useQuery } from '@tanstack/react-query';
|
|
4
|
+
import { useEffect, useState } from 'react';
|
|
5
|
+
import { convertDisplayAmount, readDisplayRates } from '@peable.to/sdk/display';
|
|
6
|
+
import { useDisplayCurrency } from "./useDisplayCurrency.js";
|
|
7
|
+
import { useI18n } from "./useI18n.js";
|
|
8
|
+
|
|
9
|
+
/** Display conversion only. Pricing and checkout request bodies retain their source units. */
|
|
10
|
+
export function useDisplayPrice() {
|
|
11
|
+
const {
|
|
12
|
+
currency
|
|
13
|
+
} = useDisplayCurrency();
|
|
14
|
+
const {
|
|
15
|
+
t
|
|
16
|
+
} = useI18n();
|
|
17
|
+
const [now, setNow] = useState(Date.now);
|
|
18
|
+
const rates = useQuery({
|
|
19
|
+
queryKey: ['display-currency', 'faircoin-indexed-price'],
|
|
20
|
+
queryFn: ({
|
|
21
|
+
signal
|
|
22
|
+
}) => readDisplayRates({
|
|
23
|
+
signal
|
|
24
|
+
}),
|
|
25
|
+
enabled: currency !== 'USD',
|
|
26
|
+
staleTime: 30_000,
|
|
27
|
+
gcTime: 0,
|
|
28
|
+
retry: false,
|
|
29
|
+
refetchInterval: 60_000,
|
|
30
|
+
refetchOnWindowFocus: 'always'
|
|
31
|
+
});
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
const timer = setInterval(() => setNow(Date.now()), 1000);
|
|
34
|
+
return () => clearInterval(timer);
|
|
35
|
+
}, []);
|
|
36
|
+
function formatUsd(minorUnits) {
|
|
37
|
+
const display = convertDisplayAmount({
|
|
38
|
+
units: String(minorUnits),
|
|
39
|
+
currency: 'USD',
|
|
40
|
+
displayCurrency: currency,
|
|
41
|
+
rates: rates.isError ? null : rates.data,
|
|
42
|
+
now
|
|
43
|
+
});
|
|
44
|
+
if (!display) return t('preferences.displayCurrency.unavailable', {
|
|
45
|
+
currency
|
|
46
|
+
});
|
|
47
|
+
return currency === 'USD' ? display : t('preferences.displayCurrency.approximate', {
|
|
48
|
+
amount: display
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
currency,
|
|
53
|
+
formatUsd
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=useDisplayPrice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useQuery","useEffect","useState","convertDisplayAmount","readDisplayRates","useDisplayCurrency","useI18n","useDisplayPrice","currency","t","now","setNow","Date","rates","queryKey","queryFn","signal","enabled","staleTime","gcTime","retry","refetchInterval","refetchOnWindowFocus","timer","setInterval","clearInterval","formatUsd","minorUnits","display","units","String","displayCurrency","isError","data","amount"],"sourceRoot":"../../../../src","sources":["ui/hooks/useDisplayPrice.ts"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,uBAAuB;AAChD,SAASC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC3C,SAASC,oBAAoB,EAAEC,gBAAgB,QAAQ,wBAAwB;AAC/E,SAASC,kBAAkB,QAAQ,yBAAsB;AACzD,SAASC,OAAO,QAAQ,cAAW;;AAEnC;AACA,OAAO,SAASC,eAAeA,CAAA,EAAG;EAChC,MAAM;IAAEC;EAAS,CAAC,GAAGH,kBAAkB,CAAC,CAAC;EACzC,MAAM;IAAEI;EAAE,CAAC,GAAGH,OAAO,CAAC,CAAC;EACvB,MAAM,CAACI,GAAG,EAAEC,MAAM,CAAC,GAAGT,QAAQ,CAACU,IAAI,CAACF,GAAG,CAAC;EACxC,MAAMG,KAAK,GAAGb,QAAQ,CAAC;IACrBc,QAAQ,EAAE,CAAC,kBAAkB,EAAE,wBAAwB,CAAC;IACxDC,OAAO,EAAEA,CAAC;MAAEC;IAAO,CAAC,KAAKZ,gBAAgB,CAAC;MAAEY;IAAO,CAAC,CAAC;IACrDC,OAAO,EAAET,QAAQ,KAAK,KAAK;IAC3BU,SAAS,EAAE,MAAM;IACjBC,MAAM,EAAE,CAAC;IACTC,KAAK,EAAE,KAAK;IACZC,eAAe,EAAE,MAAM;IACvBC,oBAAoB,EAAE;EACxB,CAAC,CAAC;EACFrB,SAAS,CAAC,MAAM;IACd,MAAMsB,KAAK,GAAGC,WAAW,CAAC,MAAMb,MAAM,CAACC,IAAI,CAACF,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IACzD,OAAO,MAAMe,aAAa,CAACF,KAAK,CAAC;EACnC,CAAC,EAAE,EAAE,CAAC;EACN,SAASG,SAASA,CAACC,UAAkB,EAAE;IACrC,MAAMC,OAAO,GAAGzB,oBAAoB,CAAC;MACnC0B,KAAK,EAAEC,MAAM,CAACH,UAAU,CAAC;MACzBnB,QAAQ,EAAE,KAAK;MACfuB,eAAe,EAAEvB,QAAQ;MACzBK,KAAK,EAAEA,KAAK,CAACmB,OAAO,GAAG,IAAI,GAAGnB,KAAK,CAACoB,IAAI;MACxCvB;IACF,CAAC,CAAC;IACF,IAAI,CAACkB,OAAO,EAAE,OAAOnB,CAAC,CAAC,yCAAyC,EAAE;MAAED;IAAS,CAAC,CAAC;IAC/E,OAAOA,QAAQ,KAAK,KAAK,GACrBoB,OAAO,GACPnB,CAAC,CAAC,yCAAyC,EAAE;MAAEyB,MAAM,EAAEN;IAAQ,CAAC,CAAC;EACvE;EACA,OAAO;IAAEpB,QAAQ;IAAEkB;EAAU,CAAC;AAChC","ignoreList":[]}
|