Merge branch 'dev' into feature/tournament-pages

This commit is contained in:
MTG2000
2022-09-04 09:45:30 +03:00
21 changed files with 198 additions and 101 deletions

View File

@@ -305,6 +305,7 @@ export interface NexusGenObjects {
payment_request: string; // String!
}
WalletKey: { // root type
is_current: boolean; // Boolean!
key: string; // String!
name: string; // String!
}
@@ -611,6 +612,7 @@ export interface NexusGenFieldTypes {
payment_request: string; // String!
}
WalletKey: { // field return type
is_current: boolean; // Boolean!
key: string; // String!
name: string; // String!
}
@@ -935,6 +937,7 @@ export interface NexusGenFieldTypeNames {
payment_request: 'String'
}
WalletKey: { // field return type name
is_current: 'Boolean'
key: 'String'
name: 'String'
}

View File

@@ -425,6 +425,7 @@ type Vote {
}
type WalletKey {
is_current: Boolean!
key: String!
name: String!
}

View File

@@ -171,9 +171,9 @@ const MyProfile = objectType({
t.nonNull.list.nonNull.field('walletsKeys', {
type: "WalletKey",
resolve: (parent) => {
return prisma.user.findUnique({ where: { id: parent.id } }).userKeys();
resolve: async (parent, _, context) => {
const userKeys = await prisma.user.findUnique({ where: { id: parent.id } }).userKeys();
return userKeys.map(k => ({ ...k, is_current: k.key === context.userPubKey }))
}
});
}
@@ -283,6 +283,7 @@ const WalletKey = objectType({
definition(t) {
t.nonNull.string('key');
t.nonNull.string('name');
t.nonNull.boolean('is_current')
}
})

View File

@@ -7,6 +7,9 @@ const { getDirectUploadUrl } = require('../../services/imageUpload.service')
const { prisma } = require('../../prisma')
const postUploadImageUrl = async (req, res) => {
return res.status(404).send("This api is in progress");
const userPubKey = await extractKeyFromCookie(req.headers.cookie ?? req.headers.Cookie)
const user = await getUserByPubKey(userPubKey)

84
package-lock.json generated
View File

@@ -79,6 +79,7 @@
"react-loader-spinner": "^6.0.0-0",
"react-loading-skeleton": "^3.1.0",
"react-modal": "^3.15.1",
"react-popper-tooltip": "^4.4.2",
"react-query": "^3.35.0",
"react-redux": "^8.0.0",
"react-router-dom": "^6.3.0",
@@ -2147,9 +2148,9 @@
}
},
"node_modules/@babel/runtime": {
"version": "7.17.9",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz",
"integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==",
"version": "7.18.9",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz",
"integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==",
"dependencies": {
"regenerator-runtime": "^0.13.4"
},
@@ -10146,6 +10147,21 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/@storybook/components/node_modules/react-popper-tooltip": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/react-popper-tooltip/-/react-popper-tooltip-3.1.1.tgz",
"integrity": "sha512-EnERAnnKRptQBJyaee5GJScWNUKQPDD2ywvzZyUjst/wj5U64C8/CnSYLNEmP2hG0IJ3ZhtDxE8oDN+KOyavXQ==",
"dev": true,
"dependencies": {
"@babel/runtime": "^7.12.5",
"@popperjs/core": "^2.5.4",
"react-popper": "^2.2.4"
},
"peerDependencies": {
"react": "^16.6.0 || ^17.0.0",
"react-dom": "^16.6.0 || ^17.0.0"
}
},
"node_modules/@storybook/core": {
"version": "6.4.22",
"resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.4.22.tgz",
@@ -62367,31 +62383,31 @@
}
},
"node_modules/react-popper": {
"version": "2.2.5",
"resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.2.5.tgz",
"integrity": "sha512-kxGkS80eQGtLl18+uig1UIf9MKixFSyPxglsgLBxlYnyDf65BiY9B3nZSc6C9XUNDgStROB0fMQlTEz1KxGddw==",
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.3.0.tgz",
"integrity": "sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==",
"dependencies": {
"react-fast-compare": "^3.0.1",
"warning": "^4.0.2"
},
"peerDependencies": {
"@popperjs/core": "^2.0.0",
"react": "^16.8.0 || ^17"
"react": "^16.8.0 || ^17 || ^18",
"react-dom": "^16.8.0 || ^17 || ^18"
}
},
"node_modules/react-popper-tooltip": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/react-popper-tooltip/-/react-popper-tooltip-3.1.1.tgz",
"integrity": "sha512-EnERAnnKRptQBJyaee5GJScWNUKQPDD2ywvzZyUjst/wj5U64C8/CnSYLNEmP2hG0IJ3ZhtDxE8oDN+KOyavXQ==",
"dev": true,
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/react-popper-tooltip/-/react-popper-tooltip-4.4.2.tgz",
"integrity": "sha512-y48r0mpzysRTZAIh8m2kpZ8S1YPNqGtQPDrlXYSGvDS1c1GpG/NUXbsbIdfbhXfmSaRJuTcaT6N1q3CKuHRVbg==",
"dependencies": {
"@babel/runtime": "^7.12.5",
"@popperjs/core": "^2.5.4",
"react-popper": "^2.2.4"
"@babel/runtime": "^7.18.3",
"@popperjs/core": "^2.11.5",
"react-popper": "^2.3.0"
},
"peerDependencies": {
"react": "^16.6.0 || ^17.0.0",
"react-dom": "^16.6.0 || ^17.0.0"
"react": ">=16.6.0",
"react-dom": ">=16.6.0"
}
},
"node_modules/react-query": {
@@ -72194,9 +72210,9 @@
}
},
"@babel/runtime": {
"version": "7.17.9",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz",
"integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==",
"version": "7.18.9",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz",
"integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==",
"requires": {
"regenerator-runtime": "^0.13.4"
}
@@ -78277,6 +78293,17 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"react-popper-tooltip": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/react-popper-tooltip/-/react-popper-tooltip-3.1.1.tgz",
"integrity": "sha512-EnERAnnKRptQBJyaee5GJScWNUKQPDD2ywvzZyUjst/wj5U64C8/CnSYLNEmP2hG0IJ3ZhtDxE8oDN+KOyavXQ==",
"dev": true,
"requires": {
"@babel/runtime": "^7.12.5",
"@popperjs/core": "^2.5.4",
"react-popper": "^2.2.4"
}
}
}
},
@@ -118480,23 +118507,22 @@
"requires": {}
},
"react-popper": {
"version": "2.2.5",
"resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.2.5.tgz",
"integrity": "sha512-kxGkS80eQGtLl18+uig1UIf9MKixFSyPxglsgLBxlYnyDf65BiY9B3nZSc6C9XUNDgStROB0fMQlTEz1KxGddw==",
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.3.0.tgz",
"integrity": "sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==",
"requires": {
"react-fast-compare": "^3.0.1",
"warning": "^4.0.2"
}
},
"react-popper-tooltip": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/react-popper-tooltip/-/react-popper-tooltip-3.1.1.tgz",
"integrity": "sha512-EnERAnnKRptQBJyaee5GJScWNUKQPDD2ywvzZyUjst/wj5U64C8/CnSYLNEmP2hG0IJ3ZhtDxE8oDN+KOyavXQ==",
"dev": true,
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/react-popper-tooltip/-/react-popper-tooltip-4.4.2.tgz",
"integrity": "sha512-y48r0mpzysRTZAIh8m2kpZ8S1YPNqGtQPDrlXYSGvDS1c1GpG/NUXbsbIdfbhXfmSaRJuTcaT6N1q3CKuHRVbg==",
"requires": {
"@babel/runtime": "^7.12.5",
"@popperjs/core": "^2.5.4",
"react-popper": "^2.2.4"
"@babel/runtime": "^7.18.3",
"@popperjs/core": "^2.11.5",
"react-popper": "^2.3.0"
}
},
"react-query": {

View File

@@ -74,6 +74,7 @@
"react-loader-spinner": "^6.0.0-0",
"react-loading-skeleton": "^3.1.0",
"react-modal": "^3.15.1",
"react-popper-tooltip": "^4.4.2",
"react-query": "^3.35.0",
"react-redux": "^8.0.0",
"react-router-dom": "^6.3.0",

View File

@@ -0,0 +1,15 @@
import React, { PropsWithChildren } from 'react'
interface Props {
}
export default function InfoCard(props: PropsWithChildren<Props>) {
return (
<div className="bg-gray-50 p-16 rounded-12 border border-gray-200 mt-24">
<p className="text-body5 text-gray-600">
{props.children}
</p>
</div>
)
}

View File

@@ -1,7 +1,7 @@
import { MdLocalFireDepartment } from 'react-icons/md'
import Button from 'src/Components/Button/Button'
import { useAppSelector, usePressHolder, useResizeListener, useVote } from 'src/utils/hooks'
import { ComponentProps, SyntheticEvent, useRef, useState } from 'react'
import { ComponentProps, SyntheticEvent, useRef, useState, useEffect } from 'react'
import styles from './styles.module.scss'
import { random, randomItem, numberFormatter } from 'src/utils/helperFunctions'
import { useDebouncedCallback, useMountEffect, useThrottledCallback } from '@react-hookz/web'
@@ -179,28 +179,44 @@ export default function VoteButton({
onHold();
}
useMountEffect(() => {
const bodyRect = document.body.getBoundingClientRect();
const btnRect = btnContainerRef.current.getBoundingClientRect()
setBtnPosition({
top: btnRect.top - bodyRect.top,
left: btnRect.left - bodyRect.left,
width: btnRect.width,
height: btnRect.height
});
const updateParticlesContainerPos = useDebouncedCallback(
() => {
const bodyRect = document.body.getBoundingClientRect();
const btnRect = btnContainerRef.current.getBoundingClientRect()
setBtnPosition({
top: btnRect.top - bodyRect.top,
left: btnRect.left - bodyRect.left,
width: btnRect.width,
height: btnRect.height
});
},
[],
300
)
})
useResizeListener(() => {
const bodyRect = document.body.getBoundingClientRect();
const btnRect = btnContainerRef.current.getBoundingClientRect()
setBtnPosition({
top: btnRect.top - bodyRect.top,
left: btnRect.left - bodyRect.left,
width: btnRect.width,
height: btnRect.height
});
}, { debounce: 300 })
useEffect(() => {
updateParticlesContainerPos();
document.addEventListener('scroll', updateParticlesContainerPos)
document.addEventListener('resize', updateParticlesContainerPos)
return () => {
document.removeEventListener('scroll', updateParticlesContainerPos)
document.removeEventListener('resize', updateParticlesContainerPos)
}
}, [updateParticlesContainerPos])
// useResizeListener(() => {
// const bodyRect = document.body.getBoundingClientRect();
// const btnRect = btnContainerRef.current.getBoundingClientRect()
// setBtnPosition({
// top: btnRect.top - bodyRect.top,
// left: btnRect.left - bodyRect.left,
// width: btnRect.width,
// height: btnRect.height
// });
// }, { debounce: 300 })
return (
<button

View File

@@ -158,14 +158,14 @@ export default function LoginPage() {
<h2 className='text-h5 font-bold text-center'>Login with lightning </h2>
<a href={`lightning:${lnurl}`} >
<QRCodeSVG
width={240}
height={240}
width={280}
height={280}
value={lnurl}
bgColor='transparent'
imageSettings={{
src: '/assets/images/nut_3d.png',
width: 32,
height: 32,
width: 16,
height: 16,
excavate: true,
}}

View File

@@ -4,6 +4,7 @@ import { openModal } from 'src/redux/features/modals.slice';
import Card from 'src/Components/Card/Card';
import { MyProfile } from 'src/graphql';
import WalletKey from './WalletKey';
import InfoCard from 'src/Components/InfoCard/InfoCard';
export type WalletKeyType = MyProfile['walletsKeys'][number]
@@ -38,6 +39,7 @@ export default function LinkedAccountsCard({ value, onChange }: Props) {
onChange([...value.slice(0, idx), ...value.slice(idx + 1)])
}
const hasMultiWallets = value.length > 1;
return (
<Card>
@@ -50,38 +52,21 @@ export default function LinkedAccountsCard({ value, onChange }: Props) {
{value.map((item, idx) =>
<WalletKey
key={idx}
hasMultiWallets={hasMultiWallets}
walletKey={item}
canDelete={value.length > 1}
onRename={v => updateKeyName(idx, v)}
onDelete={() => deleteKey(idx)}
/>
)}
</ul>
{/* <div className="flex justify-end gap-8">
<Button
color='gray'
className=''
disabled={!keysState.hasNewChanges || updatingKeysStatus.loading}
onClick={cancelChanges}
>
Cancel
</Button>
<Button
color='black'
className=''
disabled={!keysState.hasNewChanges}
isLoading={updatingKeysStatus.loading}
onClick={saveChanges}
>
Save Changes
</Button>
</div> */}
</div>
{value.length < 3 &&
<Button color='none' size='sm' className='mt-16 text-gray-600 hover:bg-gray-50' onClick={connectNewWallet}>
+ Add another wallet
</Button>}
<p className="text-body5 text-gray-400 mt-24"><span className="font-bold">Note</span>: if you link a wallet that was used to create another account previously, you won't be able to login to that account until you remove it from here.</p>
<InfoCard>
<span className="font-bold">💡 Note:</span> if you link a wallet that was used to create another account previously, you won't be able to login to that account until you remove it from here.
</InfoCard>
</Card>
)
}

View File

@@ -1,24 +1,26 @@
import { useToggle } from '@react-hookz/web';
import { createAction } from '@reduxjs/toolkit';
import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
import { FiTrash2 } from 'react-icons/fi';
import { FiTrash2, FiLock } from 'react-icons/fi';
import Button from 'src/Components/Button/Button';
import IconButton from 'src/Components/IconButton/IconButton';
import { useReduxEffect } from 'src/utils/hooks/useReduxEffect';
import { WalletKeyType } from './LinkedAccountsCard'
import { useAppDispatch } from "src/utils/hooks";
import { openModal } from "src/redux/features/modals.slice";
import 'react-popper-tooltip/dist/styles.css';
import { usePopperTooltip } from 'react-popper-tooltip'
interface Props {
walletKey: WalletKeyType,
canDelete: boolean;
hasMultiWallets?: boolean;
onRename: (newName: string) => void
onDelete: () => void
}
export default function WalletKey({ walletKey, canDelete, onRename, onDelete }: Props) {
export default function WalletKey({ walletKey, hasMultiWallets, onRename, onDelete }: Props) {
const ref = useRef<HTMLInputElement>(null!);
const [name, setName] = useState(walletKey.name);
@@ -26,6 +28,15 @@ export default function WalletKey({ walletKey, canDelete, onRename, onDelete }:
const dispatch = useAppDispatch();
const {
getArrowProps,
getTooltipProps,
setTooltipRef,
setTriggerRef,
visible,
} = usePopperTooltip();
const CONFIRM_DELETE_WALLET = useMemo(() => createAction<{ confirmed?: boolean }>(`CONFIRM_DELETE_WALLET_${walletKey.key.slice(0, 10)}`)({}), [walletKey.key])
const saveNameChanges = () => {
@@ -80,11 +91,31 @@ export default function WalletKey({ walletKey, canDelete, onRename, onDelete }:
onClick={saveNameChanges}
>Save</Button>}
</div>
{canDelete && <IconButton
size='sm'
className='text-red-500 shrink-0'
onClick={() => handleDelete()}
><FiTrash2 /> </IconButton>}
{hasMultiWallets && <div className="min-w-[60px] flex justify-center">
{!walletKey.is_current ?
<IconButton
size='sm'
className='text-red-500 shrink-0 mx-auto'
onClick={() => handleDelete()}
><FiTrash2 /> </IconButton>
: <>
<span ref={setTriggerRef} >
<FiLock className="text-body4 text-gray-400" />
</span>
{visible && (
<div
ref={setTooltipRef}
{...getTooltipProps({ className: 'tooltip-container !bg-gray-900 !text-white text-body5 !rounded-12 !p-12' })}
>
<div {...getArrowProps({ className: 'tooltip-arrow' })} />
You're now logged-in with this wallet. <br /> To remove it, login to your account with a different wallet.
</div>
)}
</>
}
</div>}
</li>
)
}

View File

@@ -16,12 +16,15 @@ export default function PreferencesTabSkeleton() {
<div className='mt-24 flex flex-col gap-16'>
<ul className="mt-8 relative flex flex-col gap-8">
{Array(3).fill(0).map((_, idx) =>
<li key={idx} className="flex flex-wrap gap-16 justify-between items-center text-body4 border-b py-12 px-16 border border-gray-200 rounded-16 focus-within:ring-1 ring-primary-200">
<div className='p-0 border-0 focus:border-0 focus:outline-none grow
<div key={idx} className='flex gap-16'>
<li className="grow flex flex-wrap gap-16 justify-between items-center text-body4 border-b py-12 px-16 border border-gray-200 rounded-16 focus-within:ring-1 ring-primary-200">
<div className='p-0 border-0 focus:border-0 focus:outline-none grow
focus:ring-0 placeholder:!text-gray-400' >
<Skeleton width='20ch'></Skeleton>
</div>
</li>
<Skeleton width='20ch'></Skeleton>
</div>
</li>
<div className="min-w-[60px]"></div>
</div>
)}
</ul>

View File

@@ -80,7 +80,7 @@ export default function PreferencesTab() {
return (
<div className="grid grid-cols-1 md:grid-cols-3 gap-24">
<div className="col-span-2 flex flex-col gap-24">
<div className="md:col-span-2 flex flex-col gap-24">
<Controller
control={control}
name="walletsKeys"

View File

@@ -4,6 +4,7 @@ query MyProfilePreferences {
walletsKeys {
key
name
is_current
}
nostr_prv_key
nostr_pub_key

View File

@@ -105,7 +105,7 @@ export default function PreferencesTab() {
return (
<div className="grid grid-cols-1 md:grid-cols-3 gap-24">
<div className="col-span-2 flex flex-col gap-24">
<div className="md:col-span-2 flex flex-col gap-24">
<Controller
control={control}
name="roles"

View File

@@ -1,6 +1,7 @@
import React, { useMemo } from 'react'
import { GrClose } from 'react-icons/gr'
import Card from 'src/Components/Card/Card'
import InfoCard from 'src/Components/InfoCard/InfoCard'
import { MakerSkill } from 'src/graphql'
import SkillsInput from './SkillsInput'
@@ -44,6 +45,10 @@ export default function UpdateSkillsCard(props: Props) {
{idToValue.get(skill.id)?.title} <button className='ml-8' onClick={() => remove(skill.id)}><GrClose /></button>
</li>)}
</ul>}
<InfoCard>
<span className="font-bold"> Can't find a specific skill?</span> You can suggest it to be added <a href="https://github.com/peakshift/makers.bolt.fun/discussions/143" target='_blank' rel="noreferrer" className='font-bold underline'>here</a>
</InfoCard>
</Card>
)
}

View File

@@ -12,8 +12,6 @@ import SkillsCard from "./SkillsCard/SkillsCard"
import TournamentsCard from "./TournamentsCard/TournamentsCard"
import { MEDIA_QUERIES } from "src/utils/theme"
import SimilarMakersCard from "./SimilarMakersCard/SimilarMakersCard"
import { useEffect } from "react"
import { gql, useApolloClient } from "@apollo/client"
export default function ProfilePage() {
@@ -65,7 +63,7 @@ export default function ProfilePage() {
<AboutCard user={profileQuery.data.profile} isOwner={isOwner} />
<StoriesCard stories={profileQuery.data.profile.stories} isOwner={isOwner} />
</main>
<aside>
<aside className="min-w-0">
<SimilarMakersCard makers={profileQuery.data.profile.similar_makers} />
</aside>
</>

View File

@@ -25,8 +25,8 @@ export default function SimilarMakersCard({ makers }: Props) {
return <Link key={maker.id} to={createRoute({ type: "profile", id: maker.id, username: maker.name })} className="border-b py-16 last-of-type:border-b-0 last-of-type:pb-0">
<li className="flex items-start gap-8">
<Avatar width={40} src={maker.avatar} />
<div>
<p className="text-body4 text-gray-800 font-medium">{maker.name}</p>
<div className='overflow-hidden'>
<p className="text-body4 text-gray-800 font-medium overflow-hidden text-ellipsis">{maker.name}</p>
<p className="text-body5 text-gray-500 font-medium">{maker.jobTitle}</p>
</div>
</li>

View File

@@ -601,6 +601,7 @@ export type Vote = {
export type WalletKey = {
__typename?: 'WalletKey';
is_current: Scalars['Boolean'];
key: Scalars['String'];
name: Scalars['String'];
};
@@ -725,7 +726,7 @@ export type UpdateProfileAboutMutation = { __typename?: 'Mutation', updateProfil
export type MyProfilePreferencesQueryVariables = Exact<{ [key: string]: never; }>;
export type MyProfilePreferencesQuery = { __typename?: 'Query', me: { __typename?: 'MyProfile', id: number, nostr_prv_key: string | null, nostr_pub_key: string | null, walletsKeys: Array<{ __typename?: 'WalletKey', key: string, name: string }> } | null };
export type MyProfilePreferencesQuery = { __typename?: 'Query', me: { __typename?: 'MyProfile', id: number, nostr_prv_key: string | null, nostr_pub_key: string | null, walletsKeys: Array<{ __typename?: 'WalletKey', key: string, name: string, is_current: boolean }> } | null };
export type UpdateUserPreferencesMutationVariables = Exact<{
walletsKeys: InputMaybe<Array<UserKeyInputType> | UserKeyInputType>;
@@ -1650,6 +1651,7 @@ export const MyProfilePreferencesDocument = gql`
walletsKeys {
key
name
is_current
}
nostr_prv_key
nostr_pub_key

View File

@@ -118,11 +118,13 @@ export const user: User & MyProfile = {
walletsKeys: [
{
key: "1645h234j2421zxvertw",
name: "My Alby wallet key"
name: "My Alby wallet key",
is_current: true
},
{
key: "66345134234235",
name: "My Phoenix wallet key"
name: "My Phoenix wallet key",
is_current: false
},],
roles: randomItems(3, ...allMakersRoles).map(role => ({ ...role, level: randomItem(...Object.values(RoleLevelEnum)) })),
skills: randomItems(7, ...allMakersSkills),

View File

@@ -39,3 +39,7 @@
transition-timing-function: ease-in;
transition-duration: 400ms;
}
.tooltip-arrow::after {
border-color: var(--arrowColor, #101828) transparent !important;
}