+
{
)
}
+const ExtraFields = ({ auth }) => {
+ const extraUserFields = useStatic((state) => state.extraUserFields)
+ const setAuth = useStatic((state) => state.setAuth)
+
+ const [setField] = useMutation(Query.user('setExtraFields'))
+
+ return (
+
+ {extraUserFields.map((field) => {
+ const locale = localStorage.getItem('i18nextLng') || 'en'
+ const label =
+ typeof field === 'string' ? field : field[locale] || field.name
+ const key = typeof field === 'string' ? field : field.database
+ if (!key || !label) return null
+ return (
+
+ {
+ setAuth({
+ ...auth,
+ data: {
+ ...auth.data,
+ [key]: value,
+ },
+ })
+ setField({
+ variables: {
+ key,
+ value,
+ },
+ })
+ }}
+ />
+
+ )
+ })}
+
+ )
+}
+
const ProfilePermissions = ({ perms, excludeList, t }) => {
const {
map: { permImageDir, permArrayImages },
diff --git a/src/hooks/useConfig.js b/src/hooks/useConfig.js
index ef0fd4a10..4262be0ec 100644
--- a/src/hooks/useConfig.js
+++ b/src/hooks/useConfig.js
@@ -38,6 +38,7 @@ export default function useConfig(serverSettings, params) {
const setStaticFilters = useStatic((state) => state.setFilters)
const setWebhookData = useStatic((state) => state.setWebhookData)
const setIsNight = useStatic((state) => state.setIsNight)
+ const setExtraUserFields = useStatic((state) => state.setExtraUserFields)
const localState = JSON.parse(localStorage.getItem('local-state'))
@@ -58,14 +59,15 @@ export default function useConfig(serverSettings, params) {
}
setAuth({
- strategy: serverSettings.user.strategy,
- discordId: serverSettings.user.discordId,
- telegramId: serverSettings.user.telegramId,
- webhookStrategy: serverSettings.user.webhookStrategy,
+ strategy: serverSettings.user?.strategy || '',
+ discordId: serverSettings.user?.discordId || '',
+ telegramId: serverSettings.user?.telegramId || '',
+ webhookStrategy: serverSettings.user?.webhookStrategy || '',
loggedIn: serverSettings.loggedIn,
perms: serverSettings.user ? serverSettings.user.perms : {},
methods: serverSettings.authMethods,
- username: serverSettings.user.username,
+ username: serverSettings.user?.username || '',
+ data: serverSettings.user?.data || {},
})
Sentry.setUser({
username: serverSettings.user.username,
@@ -86,6 +88,7 @@ export default function useConfig(serverSettings, params) {
setAvailable(serverSettings.available)
setMenus(updateObjState(serverSettings.menus, 'menus'))
setStaticMenus(serverSettings.menus)
+ setExtraUserFields(serverSettings.extraUserFields)
if (localState?.state?.filters?.pokemon?.standard) {
delete localState.state.filters.pokemon.standard
diff --git a/src/hooks/useStore.js b/src/hooks/useStore.js
index 7e214920a..e59253a8b 100644
--- a/src/hooks/useStore.js
+++ b/src/hooks/useStore.js
@@ -138,4 +138,6 @@ export const useStatic = create((set) => ({
setFeedback: (feedback) => set({ feedback }),
resetFilters: false,
setResetFilters: (resetFilters) => set({ resetFilters }),
+ extraUserFields: [],
+ setExtraUserFields: (extraUserFields) => set({ extraUserFields }),
}))
diff --git a/src/services/queries/user.js b/src/services/queries/user.js
index 47f71ea4d..c31cd43c7 100644
--- a/src/services/queries/user.js
+++ b/src/services/queries/user.js
@@ -23,3 +23,9 @@ export const setGymBadge = gql`
setGymBadge(gymId: $gymId, badge: $badge)
}
`
+
+export const setExtraFields = gql`
+ mutation SetExtraFields($key: String, $value: String) {
+ setExtraFields(key: $key, value: $value)
+ }
+`
\ No newline at end of file