@oxy.so/services 12.10.1 → 12.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/lib/commonjs/ui/components/accountSettings/AccountCategoriesSection.js +142 -0
  2. package/lib/commonjs/ui/components/accountSettings/AccountCategoriesSection.js.map +1 -0
  3. package/lib/commonjs/ui/components/accountSettings/AccountSettings.js +361 -0
  4. package/lib/commonjs/ui/components/accountSettings/AccountSettings.js.map +1 -0
  5. package/lib/commonjs/ui/hooks/useAvatarPicker.js +54 -48
  6. package/lib/commonjs/ui/hooks/useAvatarPicker.js.map +1 -1
  7. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +16 -237
  8. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
  9. package/lib/commonjs/ui/screens/ChangeAvatarScreen.js +23 -4
  10. package/lib/commonjs/ui/screens/ChangeAvatarScreen.js.map +1 -1
  11. package/lib/commonjs/ui/screens/index.js +7 -0
  12. package/lib/commonjs/ui/screens/index.js.map +1 -1
  13. package/lib/module/ui/components/accountSettings/AccountCategoriesSection.js +134 -0
  14. package/lib/module/ui/components/accountSettings/AccountCategoriesSection.js.map +1 -0
  15. package/lib/module/ui/components/accountSettings/AccountSettings.js +355 -0
  16. package/lib/module/ui/components/accountSettings/AccountSettings.js.map +1 -0
  17. package/lib/module/ui/hooks/useAvatarPicker.js +53 -48
  18. package/lib/module/ui/hooks/useAvatarPicker.js.map +1 -1
  19. package/lib/module/ui/screens/AccountSettingsScreen.js +16 -235
  20. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  21. package/lib/module/ui/screens/ChangeAvatarScreen.js +23 -4
  22. package/lib/module/ui/screens/ChangeAvatarScreen.js.map +1 -1
  23. package/lib/module/ui/screens/index.js +4 -0
  24. package/lib/module/ui/screens/index.js.map +1 -1
  25. package/lib/typescript/commonjs/ui/components/accountSettings/AccountCategoriesSection.d.ts +26 -0
  26. package/lib/typescript/commonjs/ui/components/accountSettings/AccountCategoriesSection.d.ts.map +1 -0
  27. package/lib/typescript/commonjs/ui/components/accountSettings/AccountSettings.d.ts +80 -0
  28. package/lib/typescript/commonjs/ui/components/accountSettings/AccountSettings.d.ts.map +1 -0
  29. package/lib/typescript/commonjs/ui/hooks/useAvatarPicker.d.ts +22 -1
  30. package/lib/typescript/commonjs/ui/hooks/useAvatarPicker.d.ts.map +1 -1
  31. package/lib/typescript/commonjs/ui/screens/AccountSettingsScreen.d.ts +4 -5
  32. package/lib/typescript/commonjs/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  33. package/lib/typescript/commonjs/ui/screens/ChangeAvatarScreen.d.ts.map +1 -1
  34. package/lib/typescript/commonjs/ui/screens/index.d.ts +1 -0
  35. package/lib/typescript/commonjs/ui/screens/index.d.ts.map +1 -1
  36. package/lib/typescript/module/ui/components/accountSettings/AccountCategoriesSection.d.ts +26 -0
  37. package/lib/typescript/module/ui/components/accountSettings/AccountCategoriesSection.d.ts.map +1 -0
  38. package/lib/typescript/module/ui/components/accountSettings/AccountSettings.d.ts +80 -0
  39. package/lib/typescript/module/ui/components/accountSettings/AccountSettings.d.ts.map +1 -0
  40. package/lib/typescript/module/ui/hooks/useAvatarPicker.d.ts +22 -1
  41. package/lib/typescript/module/ui/hooks/useAvatarPicker.d.ts.map +1 -1
  42. package/lib/typescript/module/ui/screens/AccountSettingsScreen.d.ts +4 -5
  43. package/lib/typescript/module/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  44. package/lib/typescript/module/ui/screens/ChangeAvatarScreen.d.ts.map +1 -1
  45. package/lib/typescript/module/ui/screens/index.d.ts +1 -0
  46. package/lib/typescript/module/ui/screens/index.d.ts.map +1 -1
  47. package/package.json +4 -4
  48. package/src/ui/components/accountSettings/AccountCategoriesSection.tsx +180 -0
  49. package/src/ui/components/accountSettings/AccountSettings.tsx +421 -0
  50. package/src/ui/components/accountSettings/__tests__/AccountSettings.test.tsx +101 -0
  51. package/src/ui/hooks/useAvatarPicker.ts +65 -69
  52. package/src/ui/screens/AccountSettingsScreen.tsx +13 -277
  53. package/src/ui/screens/ChangeAvatarScreen.tsx +25 -6
  54. package/src/ui/screens/index.ts +8 -0
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.AccountCategoriesSection = void 0;
7
+ exports.accountCategoriesEqual = accountCategoriesEqual;
8
+ exports.promoteAccountCategory = promoteAccountCategory;
9
+ exports.toggleAccountCategory = toggleAccountCategory;
10
+ var _react = require("react");
11
+ var _reactNative = require("react-native");
12
+ var _button = require("@oxy.so/bloom/button");
13
+ var _groupedSection = require("@oxy.so/bloom/grouped-section");
14
+ var _theme = require("@oxy.so/bloom/theme");
15
+ var _core = require("@oxy.so/core");
16
+ var _MaterialCommunityIcons = _interopRequireDefault(require("../../icons/MaterialCommunityIcons.js"));
17
+ var _SettingsIcon = require("../SettingsIcon.js");
18
+ var _useI18n = require("../../hooks/useI18n.js");
19
+ var _jsxRuntime = require("react/jsx-runtime");
20
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
+ /**
22
+ * An account's categories are an ORDERED list whose element 0 is the primary —
23
+ * nothing else records which one is. So nothing here sorts: a choice joins at
24
+ * the end (choosing a second category must not demote the first), "Make
25
+ * primary" moves one to the front, and two lists are equal only in the same
26
+ * order (a promotion changes nothing BUT the order).
27
+ */
28
+ function toggleAccountCategory(current, id) {
29
+ if (current.includes(id)) return current.filter(entry => entry !== id);
30
+ if (current.length >= _core.MAX_ACCOUNT_CATEGORIES) return [...current];
31
+ return [...current, id];
32
+ }
33
+ function promoteAccountCategory(current, id) {
34
+ if (!current.includes(id)) return [...current];
35
+ return [id, ...current.filter(entry => entry !== id)];
36
+ }
37
+ function accountCategoriesEqual(a, b) {
38
+ return a.length === b.length && a.every((entry, index) => entry === b[index]);
39
+ }
40
+
41
+ /**
42
+ * A stored id can be one this build has never heard of — the vocabulary grows
43
+ * at Oxy, and an older client meets the newer id. It keeps its row (it counts
44
+ * against the cap and survives a save) but is never printed raw.
45
+ */
46
+ const KNOWN_IDS = new Set(_core.ACCOUNT_CATEGORY_IDS);
47
+ /**
48
+ * The categories editor of `AccountSettings`: the chosen categories in their
49
+ * stored order (primary first), and a collapsible list of the vocabulary to add
50
+ * from. Only SELECTABLE ids are offered — a withdrawn one stays on an account
51
+ * that carries it, but Oxy refuses newly adding it.
52
+ */
53
+ const AccountCategoriesSection = ({
54
+ value,
55
+ onChange,
56
+ disabled = false
57
+ }) => {
58
+ const {
59
+ colors
60
+ } = (0, _theme.useTheme)();
61
+ const {
62
+ t,
63
+ locale
64
+ } = (0, _useI18n.useI18n)();
65
+ const [pickerOpen, setPickerOpen] = (0, _react.useState)(false);
66
+ const atCap = value.length >= _core.MAX_ACCOUNT_CATEGORIES;
67
+ const labelOf = (0, _react.useCallback)(id => KNOWN_IDS.has(id) ? (0, _core.accountCategoryLabel)(locale, id) : t('accounts.settings.categories.unavailable'), [locale, t]);
68
+ const toggle = (0, _react.useCallback)(id => onChange(toggleAccountCategory(value, id)), [onChange, value]);
69
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
70
+ className: "gap-space-8",
71
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_groupedSection.GroupedSection, {
72
+ title: t('accounts.settings.categories.title'),
73
+ footer: t('accounts.settings.categories.footer', {
74
+ max: _core.MAX_ACCOUNT_CATEGORIES
75
+ }),
76
+ children: [value.map((id, index) => {
77
+ const label = labelOf(id);
78
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_groupedSection.GroupedSectionItem, {
79
+ icon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_SettingsIcon.SettingsIcon, {
80
+ name: index === 0 ? 'star' : 'tag-outline',
81
+ color: index === 0 ? colors.primary : colors.textSecondary
82
+ }),
83
+ title: label,
84
+ description: index === 0 ? t('accounts.settings.categories.primary') : undefined,
85
+ showChevron: false,
86
+ disabled: disabled,
87
+ rightElement: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
88
+ className: "flex-row items-center gap-space-8",
89
+ children: [index > 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
90
+ appearance: "subtle",
91
+ size: "xs",
92
+ disabled: disabled,
93
+ onPress: () => onChange(promoteAccountCategory(value, id)),
94
+ children: t('accounts.settings.categories.makePrimary')
95
+ }) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.CloseButton, {
96
+ size: "xs",
97
+ disabled: disabled,
98
+ onPress: () => toggle(id),
99
+ accessibilityLabel: t('accounts.settings.categories.remove', {
100
+ category: label
101
+ })
102
+ })]
103
+ })
104
+ }, id);
105
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_groupedSection.GroupedSectionItem, {
106
+ icon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_SettingsIcon.SettingsIcon, {
107
+ name: "plus",
108
+ color: colors.textSecondary
109
+ }),
110
+ title: t('accounts.settings.categories.add'),
111
+ description: atCap ? t('accounts.settings.categories.atCap', {
112
+ max: _core.MAX_ACCOUNT_CATEGORIES
113
+ }) : undefined,
114
+ disabled: disabled || atCap,
115
+ showChevron: false,
116
+ rightElement: /*#__PURE__*/(0, _jsxRuntime.jsx)(_MaterialCommunityIcons.default, {
117
+ name: pickerOpen ? 'chevron-up' : 'chevron-down',
118
+ size: 20,
119
+ color: colors.textSecondary
120
+ }),
121
+ onPress: () => setPickerOpen(open => !open)
122
+ })]
123
+ }), pickerOpen && !atCap ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_groupedSection.GroupedSection, {
124
+ children: _core.SELECTABLE_ACCOUNT_CATEGORY_IDS.map(id => {
125
+ const selected = value.includes(id);
126
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_groupedSection.GroupedSectionItem, {
127
+ title: (0, _core.accountCategoryLabel)(locale, id),
128
+ showChevron: false,
129
+ disabled: disabled,
130
+ rightElement: selected ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_MaterialCommunityIcons.default, {
131
+ name: "check-circle",
132
+ size: 20,
133
+ color: colors.primary
134
+ }) : undefined,
135
+ onPress: () => toggle(id)
136
+ }, id);
137
+ })
138
+ }) : null]
139
+ });
140
+ };
141
+ exports.AccountCategoriesSection = AccountCategoriesSection;
142
+ //# sourceMappingURL=AccountCategoriesSection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNative","_button","_groupedSection","_theme","_core","_MaterialCommunityIcons","_interopRequireDefault","_SettingsIcon","_useI18n","_jsxRuntime","e","__esModule","default","toggleAccountCategory","current","id","includes","filter","entry","length","MAX_ACCOUNT_CATEGORIES","promoteAccountCategory","accountCategoriesEqual","a","b","every","index","KNOWN_IDS","Set","ACCOUNT_CATEGORY_IDS","AccountCategoriesSection","value","onChange","disabled","colors","useTheme","t","locale","useI18n","pickerOpen","setPickerOpen","useState","atCap","labelOf","useCallback","has","accountCategoryLabel","toggle","jsxs","View","className","children","GroupedSection","title","footer","max","map","label","jsx","GroupedSectionItem","icon","SettingsIcon","name","color","primary","textSecondary","description","undefined","showChevron","rightElement","Button","appearance","size","onPress","CloseButton","accessibilityLabel","category","open","SELECTABLE_ACCOUNT_CATEGORY_IDS","selected","exports"],"sourceRoot":"../../../../../src","sources":["ui/components/accountSettings/AccountCategoriesSection.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,361 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.AccountSettings = void 0;
7
+ exports.useAccountSettingsNode = useAccountSettingsNode;
8
+ var _react = require("react");
9
+ var _reactNative = require("react-native");
10
+ var _reactQuery = require("@tanstack/react-query");
11
+ var _avatar = require("@oxy.so/bloom/avatar");
12
+ var _button = require("@oxy.so/bloom/button");
13
+ var _groupedSection = require("@oxy.so/bloom/grouped-section");
14
+ var _surfaces = require("@oxy.so/bloom/surfaces");
15
+ var _textField = require("@oxy.so/bloom/text-field");
16
+ var _theme = require("@oxy.so/bloom/theme");
17
+ var _toast = require("@oxy.so/bloom/toast");
18
+ var _typography = require("@oxy.so/bloom/typography");
19
+ var _core = require("@oxy.so/core");
20
+ var _oxyRuntimeContext = require("../../context/oxyRuntimeContext.js");
21
+ var _useI18n = require("../../hooks/useI18n.js");
22
+ var _useAvatarPicker = require("../../hooks/useAvatarPicker.js");
23
+ var _userCache = require("../../hooks/queries/userCache.js");
24
+ var _OrganizationSettings = require("../organizations/OrganizationSettings.js");
25
+ var _SettingsIcon = require("../SettingsIcon.js");
26
+ var _AccountCategoriesSection = require("./AccountCategoriesSection.js");
27
+ var _jsxRuntime = require("react/jsx-runtime");
28
+ const BIO_MAX = 160;
29
+ const AVATAR_SIZE = 64;
30
+ const errorMessage = (error, fallback) => error instanceof Error && error.message ? error.message : fallback;
31
+
32
+ /**
33
+ * How archiving the account behaves, for an app whose ending of an account
34
+ * means more than Oxy's archive.
35
+ */
36
+
37
+ /**
38
+ * The account-graph node {@link AccountSettings} edits — seeded from the
39
+ * session's account list, then read fresh. `node` is `null` until it resolves.
40
+ */
41
+ function useAccountSettingsNode(accountId) {
42
+ const {
43
+ oxyServices,
44
+ canUsePrivateApi,
45
+ user,
46
+ accounts
47
+ } = (0, _oxyRuntimeContext.useOxy)();
48
+ const query = (0, _reactQuery.useQuery)({
49
+ queryKey: ['accounts', 'detail', accountId, user?.id, canUsePrivateApi],
50
+ initialData: canUsePrivateApi ? accounts?.find(account => account.accountId === accountId) : undefined,
51
+ initialDataUpdatedAt: 0,
52
+ queryFn: () => oxyServices.accounts.get(accountId),
53
+ enabled: canUsePrivateApi && accountId.length > 0
54
+ });
55
+ return {
56
+ query,
57
+ node: canUsePrivateApi && query.isSuccess ? query.data : null
58
+ };
59
+ }
60
+
61
+ /**
62
+ * A non-personal account's settings: its picture, name, bio and categories,
63
+ * its members, and archiving it. The one editor for every member-operated
64
+ * account — the `AccountSettings` surface renders it, and an app embeds it in
65
+ * its own page (`@oxy.so/services/screens`) with its own sections and archive
66
+ * steps around it. Oxy decides what the caller may do from the membership it
67
+ * resolved, so every section is shown only to a member who holds its right.
68
+ */
69
+ const AccountSettings = ({
70
+ accountId,
71
+ extraSections,
72
+ onUpdated,
73
+ archive,
74
+ navigate,
75
+ onClose
76
+ }) => {
77
+ const {
78
+ colors
79
+ } = (0, _theme.useTheme)();
80
+ const {
81
+ t
82
+ } = (0, _useI18n.useI18n)();
83
+ const {
84
+ oxyServices,
85
+ user,
86
+ accounts,
87
+ switchToAccount,
88
+ showBottomSheet
89
+ } = (0, _oxyRuntimeContext.useOxy)();
90
+ const queryClient = (0, _reactQuery.useQueryClient)();
91
+ const id = accountId;
92
+ const {
93
+ query: accountQuery,
94
+ node
95
+ } = useAccountSettingsNode(id);
96
+ const account = node?.account;
97
+ const permissions = node?.callerMembership?.permissions ?? [];
98
+ const isImplicitOwner = node ? node.relationship !== 'member' : false;
99
+ const can = (0, _react.useCallback)(permission => isImplicitOwner || permissions.includes(permission), [isImplicitOwner, permissions]);
100
+ const canUpdate = can('account:update');
101
+ const canViewMembers = can('members:read');
102
+ const canArchive = can('account:delete');
103
+ const hasCategories = (0, _core.kindAcceptsAccountCategories)(node?.kind);
104
+
105
+ // Editable fields, seeded once from the loaded account and NOT re-synced: while
106
+ // the form is open it is the only writer, so a sync could only overwrite what
107
+ // is being typed. The stored values are read on every render for the dirty
108
+ // check, so a save settles the button without anything mirroring state.
109
+ const [seeded, setSeeded] = (0, _react.useState)(false);
110
+ const [displayName, setDisplayName] = (0, _react.useState)('');
111
+ const [displayNameError, setDisplayNameError] = (0, _react.useState)('');
112
+ const [bio, setBio] = (0, _react.useState)('');
113
+ // Verbatim, including an id this build cannot name: dropping it on load would
114
+ // delete it on the next save.
115
+ const [categories, setCategories] = (0, _react.useState)([]);
116
+ const storedName = account?.name?.displayName ?? (0, _core.getNormalizedUserHandle)(account) ?? '';
117
+ const storedCategories = account?.accountCategories ?? [];
118
+ if (node && !seeded) {
119
+ setDisplayName(storedName);
120
+ setBio(account?.bio ?? '');
121
+ setCategories([...storedCategories]);
122
+ setSeeded(true);
123
+ }
124
+ const updateMutation = (0, _reactQuery.useMutation)({
125
+ mutationKey: ['accounts', 'update', id],
126
+ mutationFn: input => oxyServices.accounts.update(id, input),
127
+ onSuccess: (updatedNode, input) => {
128
+ const cleared = (0, _userCache.clearedFieldsFromAccountUpdate)(input);
129
+ (0, _userCache.upsertCachedUser)(queryClient, updatedNode.account, user?.id, {
130
+ cleared: cleared.length > 0 ? cleared : undefined
131
+ });
132
+ onUpdated?.(updatedNode.account, {
133
+ cleared
134
+ });
135
+ queryClient.invalidateQueries({
136
+ queryKey: ['accounts', 'detail', id]
137
+ });
138
+ queryClient.invalidateQueries({
139
+ queryKey: ['accounts']
140
+ });
141
+ _toast.toast.success(t('accounts.settings.toasts.saved'));
142
+ },
143
+ onError: error => {
144
+ _toast.toast.error(errorMessage(error, t('accounts.settings.toasts.saveFailed')));
145
+ }
146
+ });
147
+ const archiveMutation = (0, _reactQuery.useMutation)({
148
+ mutationKey: ['accounts', 'archive', id],
149
+ mutationFn: async target => {
150
+ await archive?.beforeArchive?.(target);
151
+ await oxyServices.accounts.archive(id);
152
+ return target;
153
+ },
154
+ onSuccess: async target => {
155
+ // If we archived the account we're currently signed in AS, switch back to
156
+ // the personal account so the app isn't left as an archived identity.
157
+ if (user?.id === id) {
158
+ const personal = accounts.find(entry => entry.relationship === 'self');
159
+ if (personal) {
160
+ await switchToAccount(personal.accountId).catch(() => undefined);
161
+ }
162
+ }
163
+ queryClient.invalidateQueries({
164
+ queryKey: ['accounts']
165
+ });
166
+ _toast.toast.success(archive?.successMessage ?? t('accounts.settings.toasts.archived'));
167
+ if (archive?.onArchived) archive.onArchived(target);else onClose?.();
168
+ },
169
+ onError: error => {
170
+ _toast.toast.error(errorMessage(error, t('accounts.settings.toasts.archiveFailed')));
171
+ }
172
+ });
173
+ const handleArchive = (0, _react.useCallback)(async () => {
174
+ if (!node) return;
175
+ let confirmed;
176
+ try {
177
+ confirmed = archive?.confirm ? await archive.confirm(node) : await _surfaces.surfaces.confirm({
178
+ title: t('accounts.settings.archive.confirmTitle'),
179
+ description: t('accounts.settings.archive.confirmDescription'),
180
+ confirmLabel: t('accounts.settings.archive.title'),
181
+ cancelLabel: t('common.cancel'),
182
+ destructive: true
183
+ });
184
+ } catch (error) {
185
+ _toast.toast.error(errorMessage(error, t('accounts.settings.toasts.archiveFailed')));
186
+ return;
187
+ }
188
+ if (confirmed) archiveMutation.mutate(node);
189
+ }, [archive, archiveMutation, node, t]);
190
+ const handleDisplayNameChange = (0, _react.useCallback)(value => {
191
+ setDisplayName(value);
192
+ const trimmed = value.trim();
193
+ if (!trimmed) {
194
+ setDisplayNameError('');
195
+ return;
196
+ }
197
+ const kind = node?.account.kind;
198
+ setDisplayNameError((0, _core.isValidAccountName)(trimmed, kind) ? '' : t(`accounts.settings.displayName.${(0, _core.accountNameInvalidKey)(kind)}`) || (0, _core.accountNameInvalidMessage)(kind));
199
+ }, [node?.account.kind, t]);
200
+ const trimmedName = displayName.trim();
201
+ const trimmedBio = bio.trim();
202
+ const categoriesChanged = hasCategories && !(0, _AccountCategoriesSection.accountCategoriesEqual)(categories, storedCategories);
203
+ const profileChanged = trimmedName !== storedName.trim() || trimmedBio !== (account?.bio ?? '').trim() || categoriesChanged;
204
+ // An empty display name is refused rather than sent: at Oxy an empty
205
+ // `displayName` clears the explicit name, which a managed account (a title,
206
+ // not a given-and-family name) has nothing to fall back from.
207
+ const canSave = profileChanged && trimmedName.length > 0 && !displayNameError;
208
+ const handleSave = (0, _react.useCallback)(() => {
209
+ if (!canSave) return;
210
+ updateMutation.mutate({
211
+ name: {
212
+ displayName: trimmedName
213
+ },
214
+ // `null` is Oxy's clear; an empty string would store one.
215
+ bio: trimmedBio ? trimmedBio : null,
216
+ // Whole and IN ORDER — element 0 is the primary, and `[]` is the clear.
217
+ ...(categoriesChanged ? {
218
+ accountCategories: categories
219
+ } : null)
220
+ });
221
+ }, [canSave, categories, categoriesChanged, trimmedBio, trimmedName, updateMutation]);
222
+
223
+ // The picture is written on its own, as the personal profile's is: the shared
224
+ // picker uploads the crop, and the account takes it (or `null`, its clear).
225
+ const handleChangePicture = (0, _react.useCallback)(async () => {
226
+ try {
227
+ const avatar = await (0, _useAvatarPicker.pickAvatarFile)(oxyServices, {
228
+ avatar: account?.avatar,
229
+ displayName: storedName
230
+ });
231
+ if (avatar !== undefined) updateMutation.mutate({
232
+ avatar
233
+ });
234
+ } catch (error) {
235
+ _toast.toast.error(errorMessage(error, t('accounts.settings.toasts.saveFailed')));
236
+ }
237
+ }, [account?.avatar, oxyServices, storedName, t, updateMutation]);
238
+ const avatarUri = (0, _react.useMemo)(() => account?.avatar ? oxyServices.assets.publicUrl(account.avatar, 'thumb') : undefined, [account?.avatar, oxyServices]);
239
+ const openMembers = (0, _react.useCallback)(() => {
240
+ if (navigate) navigate('AccountMembers', {
241
+ accountId: id
242
+ });else showBottomSheet?.({
243
+ screen: 'AccountMembers',
244
+ props: {
245
+ accountId: id
246
+ }
247
+ });
248
+ }, [id, navigate, showBottomSheet]);
249
+ if (!id) {
250
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
251
+ className: "items-center justify-center px-screen-margin py-space-40",
252
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
253
+ className: "text-body font-body text-text-secondary text-center",
254
+ children: t('accounts.settings.errors.missingAccount')
255
+ })
256
+ });
257
+ }
258
+ if (accountQuery.isLoading || !node) {
259
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
260
+ className: "items-center py-space-32"
261
+ });
262
+ }
263
+ const busy = updateMutation.isPending;
264
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
265
+ className: "px-screen-margin pt-space-24 pb-space-32 gap-space-24",
266
+ children: [canUpdate ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
267
+ className: "gap-space-16 p-space-16 rounded-radius-20 bg-fill",
268
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
269
+ className: "flex-row items-center gap-space-16",
270
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_avatar.Avatar, {
271
+ source: avatarUri,
272
+ name: storedName,
273
+ size: AVATAR_SIZE
274
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
275
+ appearance: "subtle",
276
+ size: "sm",
277
+ onPress: () => void handleChangePicture(),
278
+ disabled: busy,
279
+ children: t('accounts.settings.picture.change')
280
+ })]
281
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
282
+ className: "gap-space-4",
283
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_textField.TextField, {
284
+ isInvalid: Boolean(displayNameError),
285
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_textField.TextFieldInput, {
286
+ floatingLabel: true,
287
+ label: t('accounts.settings.displayName.label'),
288
+ value: displayName,
289
+ onChangeText: handleDisplayNameChange,
290
+ isInvalid: Boolean(displayNameError),
291
+ maxLength: (0, _core.accountNameMaxLength)(node.account.kind)
292
+ })
293
+ }), displayNameError ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
294
+ className: "text-caption font-caption text-negative px-space-4",
295
+ children: displayNameError
296
+ }) : null]
297
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
298
+ className: "gap-space-4",
299
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_textField.TextField, {
300
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_textField.TextFieldInput, {
301
+ floatingLabel: true,
302
+ label: t('accounts.settings.bio.label'),
303
+ value: bio,
304
+ onChangeText: setBio,
305
+ maxLength: BIO_MAX,
306
+ multiline: true,
307
+ numberOfLines: 3,
308
+ textAlignVertical: "top"
309
+ })
310
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_typography.Text, {
311
+ className: "text-caption font-caption text-text-tertiary px-space-4 text-right",
312
+ children: [bio.length, "/", BIO_MAX]
313
+ })]
314
+ }), hasCategories ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_AccountCategoriesSection.AccountCategoriesSection, {
315
+ value: categories,
316
+ onChange: setCategories,
317
+ disabled: busy
318
+ }) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
319
+ appearance: "solid",
320
+ tone: "accent",
321
+ onPress: handleSave,
322
+ disabled: busy || !canSave,
323
+ loading: busy,
324
+ accessibilityLabel: t('accounts.settings.save'),
325
+ className: "w-full",
326
+ children: t('accounts.settings.save')
327
+ })]
328
+ }) : null, node.account.kind === 'organization' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_OrganizationSettings.OrganizationSettings, {
329
+ accountId: id,
330
+ canUpdate: canUpdate
331
+ }, id) : null, canViewMembers ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_groupedSection.GroupedSection, {
332
+ title: t('accounts.settings.sections.access'),
333
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_groupedSection.GroupedSectionItem, {
334
+ icon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_SettingsIcon.SettingsIcon, {
335
+ name: "account-multiple",
336
+ color: colors.info
337
+ }),
338
+ title: t('accounts.members.title'),
339
+ description: t('accounts.settings.members.subtitle'),
340
+ onPress: openMembers
341
+ })
342
+ }) : null, extraSections, canArchive ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_groupedSection.GroupedSection, {
343
+ title: t('accounts.settings.sections.dangerZone'),
344
+ footer: archive?.footer,
345
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_groupedSection.GroupedSectionItem, {
346
+ icon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_SettingsIcon.SettingsIcon, {
347
+ name: "archive-arrow-down",
348
+ color: colors.error
349
+ }),
350
+ title: archive?.title ?? t('accounts.settings.archive.title'),
351
+ description: archive?.title ? archive.description : t('accounts.settings.archive.subtitle'),
352
+ destructive: true,
353
+ disabled: archiveMutation.isPending,
354
+ onPress: () => void handleArchive()
355
+ })
356
+ }) : null]
357
+ });
358
+ };
359
+ exports.AccountSettings = AccountSettings;
360
+ var _default = exports.default = AccountSettings;
361
+ //# sourceMappingURL=AccountSettings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNative","_reactQuery","_avatar","_button","_groupedSection","_surfaces","_textField","_theme","_toast","_typography","_core","_oxyRuntimeContext","_useI18n","_useAvatarPicker","_userCache","_OrganizationSettings","_SettingsIcon","_AccountCategoriesSection","_jsxRuntime","BIO_MAX","AVATAR_SIZE","errorMessage","error","fallback","Error","message","useAccountSettingsNode","accountId","oxyServices","canUsePrivateApi","user","accounts","useOxy","query","useQuery","queryKey","id","initialData","find","account","undefined","initialDataUpdatedAt","queryFn","get","enabled","length","node","isSuccess","data","AccountSettings","extraSections","onUpdated","archive","navigate","onClose","colors","useTheme","t","useI18n","switchToAccount","showBottomSheet","queryClient","useQueryClient","accountQuery","permissions","callerMembership","isImplicitOwner","relationship","can","useCallback","permission","includes","canUpdate","canViewMembers","canArchive","hasCategories","kindAcceptsAccountCategories","kind","seeded","setSeeded","useState","displayName","setDisplayName","displayNameError","setDisplayNameError","bio","setBio","categories","setCategories","storedName","name","getNormalizedUserHandle","storedCategories","accountCategories","updateMutation","useMutation","mutationKey","mutationFn","input","update","onSuccess","updatedNode","cleared","clearedFieldsFromAccountUpdate","upsertCachedUser","invalidateQueries","toast","success","onError","archiveMutation","target","beforeArchive","personal","entry","catch","successMessage","onArchived","handleArchive","confirmed","confirm","surfaces","title","description","confirmLabel","cancelLabel","destructive","mutate","handleDisplayNameChange","value","trimmed","trim","isValidAccountName","accountNameInvalidKey","accountNameInvalidMessage","trimmedName","trimmedBio","categoriesChanged","accountCategoriesEqual","profileChanged","canSave","handleSave","handleChangePicture","avatar","pickAvatarFile","avatarUri","useMemo","assets","publicUrl","openMembers","screen","props","jsx","View","className","children","Text","isLoading","busy","isPending","jsxs","Avatar","source","size","Button","appearance","onPress","disabled","TextField","isInvalid","Boolean","TextFieldInput","floatingLabel","label","onChangeText","maxLength","accountNameMaxLength","multiline","numberOfLines","textAlignVertical","AccountCategoriesSection","onChange","tone","loading","accessibilityLabel","OrganizationSettings","GroupedSection","GroupedSectionItem","icon","SettingsIcon","color","info","footer","exports","_default","default"],"sourceRoot":"../../../../../src","sources":["ui/components/accountSettings/AccountSettings.tsx"],"mappings":"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","ignoreList":[]}