Skip to content
This repository was archived by the owner on Aug 21, 2024. It is now read-only.

Commit 6f39fc7

Browse files
committed
search by owner in avatars table
1 parent f17abac commit 6f39fc7

File tree

2 files changed

+72
-51
lines changed

2 files changed

+72
-51
lines changed

packages/client-core/src/admin/components/Avatars/AvatarTable.tsx

Lines changed: 48 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import Checkbox from '@etherealengine/ui/src/primitives/mui/Checkbox'
3434

3535
import { useFind, useMutation } from '@etherealengine/engine/src/common/functions/FeathersHooks'
3636
import TableComponent from '../../common/Table'
37-
import { AvatarColumn, AvatarData, avatarColumns } from '../../common/variables/avatar'
37+
import { AvatarColumn, avatarColumns } from '../../common/variables/avatar'
3838
import styles from '../../styles/admin.module.scss'
3939
import AvatarDrawer, { AvatarDrawerMode } from './AvatarDrawer'
4040

@@ -83,56 +83,54 @@ const AvatarTable = ({ className, search, selectedAvatarIds, setSelectedAvatarId
8383
}
8484
}
8585

86-
const createData = (el: AvatarType): AvatarData => {
87-
return {
88-
el,
89-
select: (
90-
<>
91-
<Checkbox
92-
className={styles.checkbox}
93-
checked={selectedAvatarIds.has(el.id)}
94-
onChange={() => {
95-
toggleSelection(el.id)
96-
}}
97-
/>
98-
</>
99-
),
100-
id: el.id,
101-
name: el.name as string,
102-
owner: el.userId,
103-
thumbnail: (
104-
<img
105-
style={{ maxHeight: '50px' }}
106-
crossOrigin="anonymous"
107-
src={el.thumbnailResource?.url + '?' + new Date().getTime()}
108-
alt=""
86+
const createData = (el: AvatarType): any => ({
87+
el,
88+
select: (
89+
<>
90+
<Checkbox
91+
className={styles.checkbox}
92+
checked={selectedAvatarIds.has(el.id)}
93+
onChange={() => {
94+
toggleSelection(el.id)
95+
}}
10996
/>
110-
),
111-
action: (
112-
<>
113-
<a
114-
className={styles.actionStyle}
115-
onClick={() => {
116-
avatarData.set(el)
117-
openAvatarDrawer.set(true)
118-
}}
119-
>
120-
<span className={styles.spanWhite}>{t('admin:components.common.view')}</span>
121-
</a>
122-
<a
123-
className={styles.actionStyle}
124-
onClick={() => {
125-
avatarId.set(el.id)
126-
avatarName.set(el.name)
127-
openConfirm.set(true)
128-
}}
129-
>
130-
<span className={styles.spanDange}>{t('admin:components.common.delete')}</span>
131-
</a>
132-
</>
133-
)
134-
}
135-
}
97+
</>
98+
),
99+
id: el.id,
100+
name: el.name as string,
101+
owner: (el as any).userName,
102+
thumbnail: (
103+
<img
104+
style={{ maxHeight: '50px' }}
105+
crossOrigin="anonymous"
106+
src={el.thumbnailResource?.url + '?' + new Date().getTime()}
107+
alt=""
108+
/>
109+
),
110+
action: (
111+
<>
112+
<a
113+
className={styles.actionStyle}
114+
onClick={() => {
115+
avatarData.set(el)
116+
openAvatarDrawer.set(true)
117+
}}
118+
>
119+
<span className={styles.spanWhite}>{t('admin:components.common.view')}</span>
120+
</a>
121+
<a
122+
className={styles.actionStyle}
123+
onClick={() => {
124+
avatarId.set(el.id)
125+
avatarName.set(el.name)
126+
openConfirm.set(true)
127+
}}
128+
>
129+
<span className={styles.spanDange}>{t('admin:components.common.delete')}</span>
130+
</a>
131+
</>
132+
)
133+
})
136134

137135
const submitRemoveAvatar = async () => {
138136
adminAvatarRemove(avatarId.value)

packages/server-core/src/user/avatar/avatar.hooks.ts

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,28 @@ const updateUserAvatars = async (context: HookContext<AvatarService>) => {
155155
}
156156
}
157157

158+
const addAndSortByUserName = async (context: HookContext<AvatarService>) => {
159+
if (!context.params.query) return
160+
161+
const userNameAlias = 'userName'
162+
163+
const sort = context.params.query.$sort?.['owner']
164+
delete context.params.query.$sort?.['owner']
165+
const nameLike = context.params.query.name as any
166+
delete context.params.query.name
167+
168+
const query = context.service.createQuery(context.params)
169+
170+
query.leftJoin(userPath, `${userPath}.id`, `${avatarPath}.userId`)
171+
if (nameLike) {
172+
query.where(`${avatarPath}.name`, 'LIKE', nameLike.$like)
173+
}
174+
query.orderBy(`${userPath}.name`, sort === 1 ? 'asc' : 'desc')
175+
query.select(`${avatarPath}.*`, `${userPath}.name AS ${userNameAlias}`)
176+
177+
context.params.knex = query
178+
}
179+
158180
export default {
159181
around: {
160182
all: [schemaHooks.resolveExternal(avatarExternalResolver), schemaHooks.resolveResult(avatarResolver)]
@@ -164,7 +186,8 @@ export default {
164186
all: [() => schemaHooks.validateQuery(avatarQueryValidator), schemaHooks.resolveQuery(avatarQueryResolver)],
165187
find: [
166188
iffElse(isAction('admin'), verifyScope('admin', 'admin'), ensureUserAccessibleAvatars),
167-
discardQuery('action')
189+
discardQuery('action'),
190+
addAndSortByUserName
168191
],
169192
get: [],
170193
create: [

0 commit comments

Comments
 (0)