Browse Source

feat: Add filter to show only apps created by the user (#11968)

tags/0.15.0
Shun Miyazawa 10 months ago
parent
commit
2b1a32fd9c
No account linked to committer's email address

+ 2
- 1
api/controllers/console/app/app.py View File

) )
parser.add_argument("name", type=str, location="args", required=False) parser.add_argument("name", type=str, location="args", required=False)
parser.add_argument("tag_ids", type=uuid_list, location="args", required=False) parser.add_argument("tag_ids", type=uuid_list, location="args", required=False)
parser.add_argument("is_created_by_me", type=inputs.boolean, location="args", required=False)


args = parser.parse_args() args = parser.parse_args()


# get app list # get app list
app_service = AppService() app_service = AppService()
app_pagination = app_service.get_paginate_apps(current_user.current_tenant_id, args)
app_pagination = app_service.get_paginate_apps(current_user.id, current_user.current_tenant_id, args)
if not app_pagination: if not app_pagination:
return {"data": [], "total": 0, "page": 1, "limit": 20, "has_more": False} return {"data": [], "total": 0, "page": 1, "limit": 20, "has_more": False}



+ 4
- 1
api/services/app_service.py View File





class AppService: class AppService:
def get_paginate_apps(self, tenant_id: str, args: dict) -> Pagination | None:
def get_paginate_apps(self, user_id: str, tenant_id: str, args: dict) -> Pagination | None:
""" """
Get app list with pagination Get app list with pagination
:param user_id: user id
:param tenant_id: tenant id :param tenant_id: tenant id
:param args: request args :param args: request args
:return: :return:
elif args["mode"] == "channel": elif args["mode"] == "channel":
filters.append(App.mode == AppMode.CHANNEL.value) filters.append(App.mode == AppMode.CHANNEL.value)


if args.get("is_created_by_me", False):
filters.append(App.created_by == user_id)
if args.get("name"): if args.get("name"):
name = args["name"][:30] name = args["name"][:30]
filters.append(App.name.ilike(f"%{name}%")) filters.append(App.name.ilike(f"%{name}%"))

+ 11
- 2
web/app/(commonLayout)/apps/Apps.tsx View File

import { useStore as useTagStore } from '@/app/components/base/tag-management/store' import { useStore as useTagStore } from '@/app/components/base/tag-management/store'
import TagManagementModal from '@/app/components/base/tag-management' import TagManagementModal from '@/app/components/base/tag-management'
import TagFilter from '@/app/components/base/tag-management/filter' import TagFilter from '@/app/components/base/tag-management/filter'
import CheckboxWithLabel from '@/app/components/datasets/create/website/base/checkbox-with-label'


const getKey = ( const getKey = (
pageIndex: number, pageIndex: number,
previousPageData: AppListResponse, previousPageData: AppListResponse,
activeTab: string, activeTab: string,
isCreatedByMe: boolean,
tags: string[], tags: string[],
keywords: string, keywords: string,
) => { ) => {
if (!pageIndex || previousPageData.has_more) { if (!pageIndex || previousPageData.has_more) {
const params: any = { url: 'apps', params: { page: pageIndex + 1, limit: 30, name: keywords } }
const params: any = { url: 'apps', params: { page: pageIndex + 1, limit: 30, name: keywords, is_created_by_me: isCreatedByMe } }


if (activeTab !== 'all') if (activeTab !== 'all')
params.params.mode = activeTab params.params.mode = activeTab
defaultTab: 'all', defaultTab: 'all',
}) })
const { query: { tagIDs = [], keywords = '' }, setQuery } = useAppsQueryState() const { query: { tagIDs = [], keywords = '' }, setQuery } = useAppsQueryState()
const [isCreatedByMe, setIsCreatedByMe] = useState(false)
const [tagFilterValue, setTagFilterValue] = useState<string[]>(tagIDs) const [tagFilterValue, setTagFilterValue] = useState<string[]>(tagIDs)
const [searchKeywords, setSearchKeywords] = useState(keywords) const [searchKeywords, setSearchKeywords] = useState(keywords)
const setKeywords = useCallback((keywords: string) => { const setKeywords = useCallback((keywords: string) => {
}, [setQuery]) }, [setQuery])


const { data, isLoading, setSize, mutate } = useSWRInfinite( const { data, isLoading, setSize, mutate } = useSWRInfinite(
(pageIndex: number, previousPageData: AppListResponse) => getKey(pageIndex, previousPageData, activeTab, tagIDs, searchKeywords),
(pageIndex: number, previousPageData: AppListResponse) => getKey(pageIndex, previousPageData, activeTab, isCreatedByMe, tagIDs, searchKeywords),
fetchAppList, fetchAppList,
{ revalidateFirstPage: true }, { revalidateFirstPage: true },
) )
options={options} options={options}
/> />
<div className='flex items-center gap-2'> <div className='flex items-center gap-2'>
<CheckboxWithLabel
className='mr-2'
label={t('app.showMyCreatedAppsOnly')}
isChecked={isCreatedByMe}
onChange={() => setIsCreatedByMe(!isCreatedByMe)}
/>
<TagFilter type='app' value={tagFilterValue} onChange={handleTagsChange} /> <TagFilter type='app' value={tagFilterValue} onChange={handleTagsChange} />
<Input <Input
showLeftIcon showLeftIcon

+ 1
- 0
web/i18n/de-DE/app.ts View File

byCategories: 'NACH KATEGORIEN', byCategories: 'NACH KATEGORIEN',
searchAllTemplate: 'Alle Vorlagen durchsuchen...', searchAllTemplate: 'Alle Vorlagen durchsuchen...',
}, },
showMyCreatedAppsOnly: 'Nur meine erstellten Apps anzeigen',
} }


export default translation export default translation

+ 1
- 0
web/i18n/en-US/app.ts View File

removeConfirmContent: 'The current configuration is in use, removing it will turn off the Tracing feature.', removeConfirmContent: 'The current configuration is in use, removing it will turn off the Tracing feature.',
}, },
}, },
showMyCreatedAppsOnly: 'Created by me',
} }


export default translation export default translation

+ 1
- 0
web/i18n/es-ES/app.ts View File

byCategories: 'POR CATEGORÍAS', byCategories: 'POR CATEGORÍAS',
searchAllTemplate: 'Buscar todas las plantillas...', searchAllTemplate: 'Buscar todas las plantillas...',
}, },
showMyCreatedAppsOnly: 'Mostrar solo mis aplicaciones creadas',
} }


export default translation export default translation

+ 1
- 0
web/i18n/fa-IR/app.ts View File

byCategories: 'بر اساس دسته بندی ها', byCategories: 'بر اساس دسته بندی ها',
searchAllTemplate: 'همه قالب ها را جستجو کنید...', searchAllTemplate: 'همه قالب ها را جستجو کنید...',
}, },
showMyCreatedAppsOnly: 'فقط برنامه‌های ایجاد شده توسط من را نشان بده',
} }


export default translation export default translation

+ 1
- 0
web/i18n/fr-FR/app.ts View File

byCategories: 'PAR CATÉGORIES', byCategories: 'PAR CATÉGORIES',
searchAllTemplate: 'Rechercher dans tous les modèles...', searchAllTemplate: 'Rechercher dans tous les modèles...',
}, },
showMyCreatedAppsOnly: 'Afficher uniquement mes applications créées',
} }


export default translation export default translation

+ 1
- 0
web/i18n/hi-IN/app.ts View File

byCategories: 'श्रेणियों द्वारा', byCategories: 'श्रेणियों द्वारा',
searchAllTemplate: 'सभी टेम्पलेट्स खोजें...', searchAllTemplate: 'सभी टेम्पलेट्स खोजें...',
}, },
showMyCreatedAppsOnly: 'केवल मेरे बनाए गए ऐप्स दिखाएं',
} }


export default translation export default translation

+ 1
- 0
web/i18n/it-IT/app.ts View File

byCategories: 'PER CATEGORIE', byCategories: 'PER CATEGORIE',
searchAllTemplate: 'Cerca in tutti i modelli...', searchAllTemplate: 'Cerca in tutti i modelli...',
}, },
showMyCreatedAppsOnly: 'Mostra solo le mie app create',
} }


export default translation export default translation

+ 1
- 0
web/i18n/ja-JP/app.ts View File

byCategories: 'カテゴリ別', byCategories: 'カテゴリ別',
searchAllTemplate: 'すべてのテンプレートを検索...', searchAllTemplate: 'すべてのテンプレートを検索...',
}, },
showMyCreatedAppsOnly: '自分が作成したアプリ',
} }


export default translation export default translation

+ 1
- 0
web/i18n/ko-KR/app.ts View File

byCategories: '카테고리별', byCategories: '카테고리별',
searchAllTemplate: '모든 템플릿 검색...', searchAllTemplate: '모든 템플릿 검색...',
}, },
showMyCreatedAppsOnly: '내가 만든 앱만 보기',
} }


export default translation export default translation

+ 1
- 0
web/i18n/pl-PL/app.ts View File

searchAllTemplate: 'Przeszukaj wszystkie szablony...', searchAllTemplate: 'Przeszukaj wszystkie szablony...',
byCategories: 'WEDŁUG KATEGORII', byCategories: 'WEDŁUG KATEGORII',
}, },
showMyCreatedAppsOnly: 'Pokaż tylko moje utworzone aplikacje',
} }


export default translation export default translation

+ 1
- 0
web/i18n/pt-BR/app.ts View File

searchAllTemplate: 'Pesquisar todos os modelos...', searchAllTemplate: 'Pesquisar todos os modelos...',
byCategories: 'POR CATEGORIAS', byCategories: 'POR CATEGORIAS',
}, },
showMyCreatedAppsOnly: 'Mostrar apenas meus aplicativos criados',
} }


export default translation export default translation

+ 1
- 0
web/i18n/ro-RO/app.ts View File

searchAllTemplate: 'Căutați toate șabloanele...', searchAllTemplate: 'Căutați toate șabloanele...',
byCategories: 'DUPĂ CATEGORII', byCategories: 'DUPĂ CATEGORII',
}, },
showMyCreatedAppsOnly: 'Afișează doar aplicațiile create de mine',
} }


export default translation export default translation

+ 1
- 0
web/i18n/ru-RU/app.ts View File

searchAllTemplate: 'Поиск по всем шаблонам...', searchAllTemplate: 'Поиск по всем шаблонам...',
byCategories: 'ПО КАТЕГОРИЯМ', byCategories: 'ПО КАТЕГОРИЯМ',
}, },
showMyCreatedAppsOnly: 'Показать только созданные мной приложения',
} }


export default translation export default translation

+ 1
- 0
web/i18n/sl-SI/app.ts View File

byCategories: 'PO KATEGORIJAH', byCategories: 'PO KATEGORIJAH',
searchAllTemplate: 'Preišči vse predloge ...', searchAllTemplate: 'Preišči vse predloge ...',
}, },
showMyCreatedAppsOnly: 'Prikaži samo aplikacije, ki sem jih ustvaril',
} }


export default translation export default translation

+ 1
- 0
web/i18n/th-TH/app.ts View File

searchAllTemplate: 'ค้นหาเทมเพลตทั้งหมด...', searchAllTemplate: 'ค้นหาเทมเพลตทั้งหมด...',
byCategories: 'ตามหมวดหมู่', byCategories: 'ตามหมวดหมู่',
}, },
showMyCreatedAppsOnly: 'แสดงเฉพาะแอปที่ฉันสร้าง',
} }


export default translation export default translation

+ 1
- 0
web/i18n/tr-TR/app.ts View File

searchAllTemplate: 'Tüm şablonlarda ara...', searchAllTemplate: 'Tüm şablonlarda ara...',
byCategories: 'KATEGORILERE GÖRE', byCategories: 'KATEGORILERE GÖRE',
}, },
showMyCreatedAppsOnly: 'Sadece oluşturduğum uygulamaları göster',
} }


export default translation export default translation

+ 1
- 0
web/i18n/uk-UA/app.ts View File

byCategories: 'ЗА КАТЕГОРІЯМИ', byCategories: 'ЗА КАТЕГОРІЯМИ',
searchAllTemplate: 'Пошук по всіх шаблонах...', searchAllTemplate: 'Пошук по всіх шаблонах...',
}, },
showMyCreatedAppsOnly: 'Показати лише створені мною додатки',
} }


export default translation export default translation

+ 1
- 0
web/i18n/vi-VN/app.ts View File

searchAllTemplate: 'Tìm kiếm tất cả các mẫu...', searchAllTemplate: 'Tìm kiếm tất cả các mẫu...',
byCategories: 'THEO DANH MỤC', byCategories: 'THEO DANH MỤC',
}, },
showMyCreatedAppsOnly: 'Chỉ hiển thị ứng dụng do tôi tạo',
} }


export default translation export default translation

+ 1
- 0
web/i18n/zh-Hans/app.ts View File

}, },
}, },
openInExplore: '在“探索”中打开', openInExplore: '在“探索”中打开',
showMyCreatedAppsOnly: '我创建的',
} }


export default translation export default translation

+ 1
- 0
web/i18n/zh-Hant/app.ts View File

searchAllTemplate: '搜尋所有樣本...', searchAllTemplate: '搜尋所有樣本...',
byCategories: '按類別', byCategories: '按類別',
}, },
showMyCreatedAppsOnly: '我创建的',
} }


export default translation export default translation

Loading…
Cancel
Save