e72b193f06
* Add settings tab. Update style of component * Structuring of files/components * Updates to TexInput * Add RadioGroup * Last FE work * FE Updates * Webhooks Settings Tab * Styling updates to webhooks * Title/Description Update * General Page done * Collaborators WIP * Styling updates * Add custom message to updateProject * Radio Group Same Height * Styling updates to radio group. Disabled state * Updates pre demo * Updates to icons & post demo changes * Major Updates * Unsaved Changes Dialog * Routing WIP * Remove StatsBlock * Auto update discussions on Private * Routing/Redirects * New input style * Invite Dialog * Fix mobile radiogroup * Mobile Improvements * Fix console warning * Fix build * Disabled States * Fix console * Unhide webhooks * Updates from testing * Responsive fixes * Alignment fixes * Fix textarea mobile height * Updates to GraphQL Fragments * Fix disabled state * WIP Arrows for scroll * Update PageTabs - broken * Fix to PageTabs * PageTab fix initial scroll * Hide Scrollbar * Better underline method * Fix mobile initial underline * Webhooks Empty State * Fix input border * Fix empty state * Input Styling updates * Remove mobile smaller text * Update disabled state for disabled items * Updates disabled sates on Settings Block * Fix build. Disable Invite * Fixes to invite permissions * Disable role select when invite is disabled * Small alignment fix * Fix webhooks empty state * cleaning up unnecessary vue files * story improvement * Remove DisabledMessage prop * Fix disabled prop on Button * Move team to Leave Fragment * Remove unused Disabled Message props * Add limit to graphql query * Updates to BlockDiscussions * add formatTriggers function to webhooks * Remove md from button. Improved switch * Update RadioGroup.stories.ts * Update RadioGroup to use defineModel * Various styling and copy updates - More concise and accurate copy - More readable - Works better on mobile * Updates to Invite Dialog * Custom success Message * Update slot names * Remove md in TextInput. Set h-8 to default * Changes from call with fabs * Replace isOwner with composable * Set SettingsBlock icon as optional * Comments from PR * Updates from PR * Final Tidy Ups * Fix Title/Description * Fix spacing issue on Webhooks page * Update borders and colors to align with Automate Makes the same changes that I recently made to the unreleased Automate tab * WEB-869 * Improve styling of radiogroup component Better borders, hover effect, bigger checkmark icon, more subtle active background color, same across breakpoints. * Adjust border styling of RadioGroup component * Improve circle around checkmark in RadioGroup * Split Tabs into 2 components * Restyle overflow arrows * Adjust gap and remove icons from vertical nav Too many icons on the screen got distracting. * Ensure active item visible * Increase gap on vertical nav * Update copy for Access and Discussions settings * Input Tidyup * WEB-877 update-collaborators-block * Update inputs to new style * Fix webhooks button hover state * Fix comment copy Appears in the access settings before embedding a model * Remove hover shadow from search input on Dashboard * Small change from Benjamin * Change collaborators permissions copy * Comments from PR #1 * Comments from PR #2 * Fix condition for EditableHeader * Updates from CR --------- Co-authored-by: Kristaps Fabians Geikins <fabis94@live.com> Co-authored-by: Benjamin Ottensten <benjamin.ottensten@gmail.com>
92 lines
2.5 KiB
Vue
92 lines
2.5 KiB
Vue
<template>
|
|
<div class="flex flex-col space-y-4 mb-8">
|
|
<div class="flex flex-col space-y-4">
|
|
<div class="flex flex-col md:flex-row gap-2 sm:gap-8 items-center">
|
|
<div class="w-full md:w-4/12">
|
|
<UserProfileEditDialogAvatar :user="user" size="xxl" />
|
|
</div>
|
|
<div class="flex flex-col space-y-4 w-full md:w-9/12">
|
|
<FormTextInput
|
|
v-model="name"
|
|
color="foundation"
|
|
label="Name"
|
|
name="name"
|
|
placeholder="John Doe"
|
|
:custom-icon="UserIcon"
|
|
show-label
|
|
show-required
|
|
:rules="[isRequired, isStringOfLength({ maxLength: 512 })]"
|
|
@change="save"
|
|
/>
|
|
<FormTextInput
|
|
v-model="company"
|
|
color="foundation"
|
|
label="Company"
|
|
name="company"
|
|
placeholder="Example Ltd."
|
|
:custom-icon="BriefcaseIcon"
|
|
show-label
|
|
:rules="[isStringOfLength({ maxLength: 512 })]"
|
|
@change="save"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
<script setup lang="ts">
|
|
import { UserIcon, BriefcaseIcon } from '@heroicons/vue/24/solid'
|
|
import { debounce } from 'lodash-es'
|
|
import { graphql } from '~~/lib/common/generated/gql'
|
|
import type {
|
|
UserProfileEditDialogBio_UserFragment,
|
|
UserUpdateInput
|
|
} from '~~/lib/common/generated/gql/graphql'
|
|
import { isRequired, isStringOfLength } from '~~/lib/common/helpers/validation'
|
|
import { useUpdateUserProfile } from '~~/lib/user/composables/management'
|
|
|
|
graphql(`
|
|
fragment UserProfileEditDialogBio_User on User {
|
|
id
|
|
name
|
|
company
|
|
bio
|
|
...UserProfileEditDialogAvatar_User
|
|
}
|
|
`)
|
|
|
|
const props = defineProps<{
|
|
user: UserProfileEditDialogBio_UserFragment
|
|
}>()
|
|
|
|
const { mutate } = useUpdateUserProfile()
|
|
|
|
const name = ref('')
|
|
const company = ref('')
|
|
const bio = ref('')
|
|
|
|
const save = async () => {
|
|
debouncedSave.cancel()
|
|
const input: UserUpdateInput = {}
|
|
if (name.value !== props.user.name) input.name = name.value
|
|
if (company.value !== props.user.company) input.company = company.value
|
|
if (bio.value !== props.user.bio) input.bio = bio.value
|
|
if (!Object.values(input).length) return
|
|
|
|
await mutate(input)
|
|
}
|
|
const debouncedSave = debounce(save, 1000)
|
|
|
|
watch(
|
|
() => props.user,
|
|
(user) => {
|
|
name.value = user.name
|
|
company.value = user.company || ''
|
|
bio.value = user.bio || ''
|
|
},
|
|
{ deep: true, immediate: true }
|
|
)
|
|
|
|
watch(() => [name.value, company.value, bio.value], debouncedSave)
|
|
</script>
|